react-bootstrap-table-ng-paginator 4.19.0 → 4.19.2
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.
- package/README.md +120 -129
- package/dist/react-bootstrap-table-ng-paginator.js +2 -2
- package/dist/react-bootstrap-table-ng-paginator.min.js +2 -2
- package/lib/index.d.ts +2 -12
- package/lib/index.js +0 -4
- package/lib/index.js.map +1 -1
- package/lib/src/data-context.d.ts +0 -6
- package/lib/src/data-context.js +15 -18
- package/lib/src/data-context.js.map +1 -1
- package/lib/src/page-button.js +1 -12
- package/lib/src/page-button.js.map +1 -1
- package/lib/src/pagination-list.d.ts +13 -11
- package/lib/src/pagination-list.js +6 -16
- package/lib/src/pagination-list.js.map +1 -1
- package/lib/src/pagination-total.d.ts +10 -7
- package/lib/src/pagination-total.js +2 -9
- package/lib/src/pagination-total.js.map +1 -1
- package/lib/src/pagination.js +30 -59
- package/lib/src/pagination.js.map +1 -1
- package/lib/src/size-per-page-dropdown-adapter.js +5 -5
- package/lib/src/size-per-page-dropdown-adapter.js.map +1 -1
- package/lib/src/size-per-page-dropdown.d.ts +19 -19
- package/lib/src/size-per-page-dropdown.js +0 -16
- package/lib/src/size-per-page-dropdown.js.map +1 -1
- package/lib/src/size-per-page-option.d.ts +9 -7
- package/lib/src/size-per-page-option.js +2 -9
- package/lib/src/size-per-page-option.js.map +1 -1
- package/lib/src/state-context.js +32 -27
- package/lib/src/state-context.js.map +1 -1
- package/package.json +3 -4
|
@@ -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))}h(e,t,i,{once:!0}),"error"!==t&&function(e,t,a){"function"==typeof e.on&&h(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 c(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):f(r,r.length)}function g(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 f(e,t){for(var a=new Array(t),n=0;n<t;++n)a[n]=e[n];return a}function h(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=f(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 c(this,e,!0)},i.prototype.rawListeners=function(e){return c(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},i.prototype.listenerCount=g,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},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)),c=s(a(881)),g=a(147),f=a(681),h=a(527);class P 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:c,lastPage:P,onPageChange:_,sizePerPageList:v=d.default.SIZE_PER_PAGE_LIST,currSizePerPage:m,hideSizePerPage:S=d.default.HIDE_SIZE_PER_PAGE,sizePerPageRenderer:b=null,sizePerPageOptionRenderer:T=null,onSizePerPageChange:E,bootstrap4:y=!1,disablePageTitle:O=!1,paginationSize:z=d.default.PAGINATION_SIZE,withFirstAndLast:x=d.default.With_FIRST_AND_LAST,alwaysShowAllBtns:R=d.default.SHOW_ALL_PAGE_BTNS,firstPageText:w=d.default.FIRST_PAGE_TEXT,prePageText:L=d.default.PRE_PAGE_TEXT,nextPageText:A=d.default.NEXT_PAGE_TEXT,lastPageText:C=d.default.LAST_PAGE_TEXT,nextPageTitle:I=d.default.NEXT_PAGE_TITLE,prePageTitle:D=d.default.PRE_PAGE_TITLE,firstPageTitle:j=d.default.FIRST_PAGE_TITLE,lastPageTitle:M=d.default.LAST_PAGE_TITLE,...N}=this.props,G=this.calculatePageStatus(this.calculatePages(c,P),P),B=(0,l.default)("react-bootstrap-table-pagination-list","col-md-6 col-xs-6 col-sm-6 col-lg-6",{"react-bootstrap-table-pagination-list-hidden":p&&1===c});return u.default.createElement("div",{className:"row react-bootstrap-table-pagination"},u.default.createElement("div",{className:"col-md-6 col-xs-6 col-sm-6 col-lg-6"},u.default.createElement(h.SizePerPageDropdownWithAdapter,{bootstrap4:y,tableId:e,sizePerPageList:v,currSizePerPage:m,hideSizePerPage:S,sizePerPageRenderer:b,sizePerPageOptionRenderer:T,onSizePerPageChange:E}),n?u.default.createElement(f.PaginationTotalWithAdapter,{currPage:t,currSizePerPage:m,pageStartIndex:a,dataSize:r,paginationTotalRenderer:s}):null),i?i({pages:G,onPageChange:_}):u.default.createElement("div",{className:B},u.default.createElement(g.PaginationListWithAdapter,{...N,currPage:t,currSizePerPage:m,pageStartIndex:a,lastPage:P,totalPages:c,pageButtonRenderer:o,onPageChange:_,paginationSize:z,withFirstAndLast:x,firstPageText:w,prePageText:L,nextPageText:A,lastPageText:C,alwaysShowAllBtns:R})))}}t.default=(0,c.default)(P)},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},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(556)),i=n(a(442)),o=n(a(374)),s=e=>i.default.createElement("ul",{className:"pagination react-bootstrap-table-page-btns-ul"},e.pages.map(t=>e.pageButtonRenderer?i.default.cloneElement(e.pageButtonRenderer({...t,onPageChange:e.onPageChange}),{key:t.page}):i.default.createElement(o.default,{key:t.page,...t,onPageChange:e.onPageChange})));s.propTypes={pages:r.default.arrayOf(r.default.shape({page:r.default.oneOfType([r.default.node,r.default.number,r.default.string]),active:r.default.bool,disable:r.default.bool,title:r.default.string})).isRequired,onPageChange:r.default.func.isRequired,pageButtonRenderer:r.default.func},t.default=s},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=[],c=e;if(c<=0)return[];let g=Math.max(a-Math.floor(n/2),r);c=g+n-1,c>t&&(c=t,g=c-n+1),d&&(p=i?[o,s]:[s]),g!==r&&e>n&&i&&0===p.length?p=[o,s]:e>1&&0===p.length&&(p=[s]);for(let e=g;e<=c;e+=1)e>=r&&p.push(e);return(d||c<=t&&p.length>1)&&p.push(l),(c!==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 c={page:e,active:r,disabled:u,title:t};return a||(c.title=t),c})}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}))}}},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(556)),i=n(a(442)),o=n(a(971)),s=a(933),l=n(a(38)),u=n(a(973)),{Provider:d}=(0,u.default)(),p=i.default.createContext(null);class c extends d{constructor(){super(...arguments),this.isRemotePagination=()=>this.props.isRemotePagination(),this.renderDefaultPagination=()=>{if(!this.props.pagination.options.custom){const{page:e,sizePerPage:t,dataSize:a,...n}=this.getPaginationProps();return i.default.createElement(l.default,{...n,key:"pagination",dataSize:a||this.props.data.length,currPage:e,currSizePerPage:t})}return null}}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:o.default.PAGE_START_INDEX;if(!this.isRemotePagination()&&!a){const a=(0,s.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})}render(){const e=this.props.pagination.options,t=e.sizePerPage??this.currSizePerPage,a=void 0===e.pageStartIndex?o.default.PAGE_START_INDEX:e.pageStartIndex;let{data:n}=this.props,r=e.page??this.currPage;if(!this.isRemotePagination()&&n.length<=(r-1)*t){const e=Math.floor(n.length/t)+1;r=r>e?e:r,this.currPage=r}return this.isRemotePagination()&&(this.currPage=r),n=this.isRemotePagination()?n:(0,s.getByCurrPage)(n,r,t,a),i.default.createElement(p.Provider,{value:{data:n,setRemoteEmitter:this.setPaginationRemoteEmitter}},this.props.children,this.renderDefaultPagination())}}c.propTypes={data:r.default.array.isRequired,remoteEmitter:r.default.object.isRequired,isRemotePagination:r.default.func.isRequired},t.default=()=>({Provider:c,Consumer:p.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},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}))))},442(t){"use strict";t.exports=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(556)),i=n(a(442)),o=e=>e.paginationTotalRenderer?e.paginationTotalRenderer(e.from,e.to,e.dataSize):i.default.createElement("span",{className:"react-bootstrap-table-pagination-total"}," Showing rows ",e.from," to ",e.to," of ",e.dataSize);o.propTypes={from:r.default.number.isRequired,to:r.default.number.isRequired,dataSize:r.default.number.isRequired,paginationTotalRenderer:r.default.func},t.default=o},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)){constructor(e){super(e),this.state={dropdownOpen:!1},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,sizePerPageList:n,currSizePerPage:r,hideSizePerPage:i,sizePerPageRenderer:o,sizePerPageOptionRenderer:s}=this.props,{dropdownOpen:u}=this.state;return n.length>1&&!i?o?o({options:this.calculateSizePerPageStatus(),currSizePerPage:`${r}`,onSizePerPageChange:this.handleChangeSizePerPage}):l.default.createElement(e,{...this.props,currSizePerPage:`${r}`,options:this.calculateSizePerPageStatus(),optionRenderer:s,onSizePerPageChange:this.handleChangeSizePerPage,onClick:this.toggleDropDown,onBlur:this.closeDropDown,open:u,tableId:t,bootstrap4:a}):null}};t.SizePerPageDropdownWithAdapter=p(d.default),t.default=p},556(e,t,a){e.exports=a(694)()},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(556)),o=n(a(442)),s=n(a(869)),l={open:!1,hidden:!1,btnContextual:"btn-default btn-secondary",variation:"dropdown",className:"",optionRenderer:null,bootstrap4:!1,tableId:null},u=e=>{const{open:t,tableId:a,hidden:n,onClick:i,onBlur:u,options:d,className:p,variation:c,bootstrap4:g,btnContextual:f,optionRenderer:h,currSizePerPage:P,onSizePerPageChange:_}={...l,...e},v=t?"open show":"",m=(0,r.default)(v,"react-bs-table-sizePerPage-dropdown",c,p),S=a?`${a}-pageDropDown`:"pageDropDown";return o.default.createElement("span",{style:{visibility:n?"hidden":"visible"},className:m,"data-testid":"size-per-page-dropdown"},o.default.createElement("button",{id:S,type:"button",className:`btn ${f} dropdown-toggle`,"data-toggle":"dropdown","aria-expanded":t,onClick:i,onBlur:u},P," ",g?null:o.default.createElement("span",null,o.default.createElement("span",{className:"caret"}))),o.default.createElement("ul",{className:`dropdown-menu ${v}`,role:"menu","aria-labelledby":S},d.map(e=>h?h({...e,onSizePerPageChange:_}):o.default.createElement(s.default,{...e,key:e.text,bootstrap4:g,onSizePerPageChange:_}))))};u.propTypes={currSizePerPage:i.default.string.isRequired,options:i.default.array.isRequired,onClick:i.default.func.isRequired,onBlur:i.default.func.isRequired,onSizePerPageChange:i.default.func.isRequired,bootstrap4:i.default.bool,tableId:i.default.string,open:i.default.bool,hidden:i.default.bool,btnContextual:i.default.string,variation:i.default.oneOf(["dropdown","dropup"]),className:i.default.string,optionRenderer:i.default.func},t.default=u},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}))))},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},694(e,t,a){"use strict";var n=a(925);function r(){}function i(){}i.resetWarningCache=r,e.exports=function(){function e(e,t,a,r,i,o){if(o!==n){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var a={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:r};return a.PropTypes=a,a}},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(556)),i=n(a(442)),o=({text:e,page:t,onSizePerPageChange:a,bootstrap4:n=!1})=>n?i.default.createElement("a",{href:"#",tabIndex:-1,role:"menuitem",className:"dropdown-item","data-page":t,onMouseDown:e=>{e.preventDefault(),a(t)}},e):i.default.createElement("li",{key:e,role:"presentation",className:"dropdown-item"},i.default.createElement("a",{href:"#",tabIndex:-1,role:"menuitem","data-page":t,onMouseDown:e=>{e.preventDefault(),a(t)}},e));o.propTypes={text:r.default.string.isRequired,page:r.default.number.isRequired,onSizePerPageChange:r.default.func.isRequired,bootstrap4:r.default.bool},t.default=o},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})}}},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})},925(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},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}},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)}()},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}},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{constructor(e){let t,a;super(e),this.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}},this.setPaginationRemoteEmitter=e=>{this.remoteEmitter=e},this.getPaginationRemoteEmitter=()=>this.remoteEmitter||this.props.remoteEmitter,this.isRemotePagination=()=>{const e={result:void 0};return this.remoteEmitter?.emit("isRemotePagination",e),e.result},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)}componentDidUpdate(e){const{custom:t}=e.pagination.options;(this.isRemotePagination()||t)&&(e.pagination.options.page,e.pagination.options.sizePerPage,e.pagination.options.totalSize)}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})},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(556)),i=n(a(442)),o=n(a(320)),s=n(a(657));t.PaginationListStandalone=s.default;const l=n(a(991));t.PaginationTotalStandalone=l.default;const u=n(a(429));t.SizePerPageDropdownStandalone=u.default;const d=n(a(973));t.default=(e={})=>({createContext:o.default,options:e});const{Provider:p,Consumer:c}=(0,d.default)(),g=e=>i.default.createElement(p,{...e},i.default.createElement(c,null,t=>e.children(t)));g.propTypes={children:r.default.func.isRequired},t.PaginationProvider=g},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})))}},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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3IubWluLmpzIiwibWFwcGluZ3MiOiI7Q0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxVQUNSLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sQ0FBQyxTQUFVSixHQUNRLGlCQUFaQyxRQUNkQSxRQUF3QywrQkFBSUQsRUFBUUcsUUFBUSxVQUU1REosRUFBcUMsK0JBQUlDLEVBQVFELEVBQVksTUFDOUQsQ0FURCxDQVNHTyxLQUFPQyxJQUNWLE8scUJDYUEsSUFPSUMsRUFQQUMsRUFBdUIsaUJBQVpDLFFBQXVCQSxRQUFVLEtBQzVDQyxFQUFlRixHQUF3QixtQkFBWkEsRUFBRUcsTUFDN0JILEVBQUVHLE1BQ0YsU0FBc0JDLEVBQVFDLEVBQVVDLEdBQ3hDLE9BQU9DLFNBQVNDLFVBQVVMLE1BQU1NLEtBQUtMLEVBQVFDLEVBQVVDLEVBQ3pELEVBSUFQLEVBREVDLEdBQTBCLG1CQUFkQSxFQUFFVSxRQUNDVixFQUFFVSxRQUNWQyxPQUFPQyxzQkFDQyxTQUF3QlIsR0FDdkMsT0FBT08sT0FBT0Usb0JBQW9CVCxHQUMvQlUsT0FBT0gsT0FBT0Msc0JBQXNCUixHQUN6QyxFQUVpQixTQUF3QkEsR0FDdkMsT0FBT08sT0FBT0Usb0JBQW9CVCxFQUNwQyxFQU9GLElBQUlXLEVBQWNDLE9BQU9DLE9BQVMsU0FBcUJDLEdBQ3JELE9BQU9BLEdBQVVBLENBQ25CLEVBRUEsU0FBU0MsSUFDUEEsRUFBYUMsS0FBS1gsS0FBS1ksS0FDekIsQ0FDQTVCLEVBQU9ELFFBQVUyQixFQUNqQjFCLEVBQU9ELFFBQVE4QixLQXdZZixTQUFjQyxFQUFTQyxHQUNyQixPQUFPLElBQUlDLFFBQVEsU0FBVUMsRUFBU0MsR0FDcEMsU0FBU0MsRUFBY0MsR0FDckJOLEVBQVFPLGVBQWVOLEVBQU1PLEdBQzdCSixFQUFPRSxFQUNULENBRUEsU0FBU0UsSUFDK0IsbUJBQTNCUixFQUFRTyxnQkFDakJQLEVBQVFPLGVBQWUsUUFBU0YsR0FFbENGLEVBQVEsR0FBR00sTUFBTXZCLEtBQUt3QixXQUN4QixDQUVBQyxFQUErQlgsRUFBU0MsRUFBTU8sRUFBVSxDQUFFVCxNQUFNLElBQ25ELFVBQVRFLEdBTVIsU0FBdUNELEVBQVNZLEVBQVNDLEdBQzdCLG1CQUFmYixFQUFRYyxJQUNqQkgsRUFBK0JYLEVBQVMsUUFBU1ksRUFBU0MsRUFFOUQsQ0FUTUUsQ0FBOEJmLEVBQVNLLEVBQWUsQ0FBRU4sTUFBTSxHQUVsRSxFQUNGLEVBeFpBSCxFQUFhQSxhQUFlQSxFQUU1QkEsRUFBYVgsVUFBVStCLGFBQVVDLEVBQ2pDckIsRUFBYVgsVUFBVWlDLGFBQWUsRUFDdEN0QixFQUFhWCxVQUFVa0MsbUJBQWdCRixFQUl2QyxJQUFJRyxFQUFzQixHQUUxQixTQUFTQyxFQUFjQyxHQUNyQixHQUF3QixtQkFBYkEsRUFDVCxNQUFNLElBQUlDLFVBQVUsMEVBQTRFRCxFQUVwRyxDQW9DQSxTQUFTRSxFQUFpQkMsR0FDeEIsWUFBMkJSLElBQXZCUSxFQUFLTixjQUNBdkIsRUFBYXdCLG9CQUNmSyxFQUFLTixhQUNkLENBa0RBLFNBQVNPLEVBQWE3QyxFQUFROEMsRUFBTUwsRUFBVU0sR0FDNUMsSUFBSUMsRUFDQUMsRUFDQUMsRUExSHNCQyxFQWdKMUIsR0FwQkFYLEVBQWNDLFFBR0NMLEtBRGZhLEVBQVNqRCxFQUFPbUMsVUFFZGMsRUFBU2pELEVBQU9tQyxRQUFVNUIsT0FBTzZDLE9BQU8sTUFDeENwRCxFQUFPcUMsYUFBZSxTQUlLRCxJQUF2QmEsRUFBT0ksY0FDVHJELEVBQU9zRCxLQUFLLGNBQWVSLEVBQ2ZMLEVBQVNBLFNBQVdBLEVBQVNBLFNBQVdBLEdBSXBEUSxFQUFTakQsRUFBT21DLFNBRWxCZSxFQUFXRCxFQUFPSCxTQUdIVixJQUFiYyxFQUVGQSxFQUFXRCxFQUFPSCxHQUFRTCxJQUN4QnpDLEVBQU9xQyxrQkFlVCxHQWJ3QixtQkFBYmEsRUFFVEEsRUFBV0QsRUFBT0gsR0FDaEJDLEVBQVUsQ0FBQ04sRUFBVVMsR0FBWSxDQUFDQSxFQUFVVCxHQUVyQ00sRUFDVEcsRUFBU0ssUUFBUWQsR0FFakJTLEVBQVNNLEtBQUtmLElBSWhCTyxFQUFJTCxFQUFpQjNDLElBQ2IsR0FBS2tELEVBQVNPLE9BQVNULElBQU1FLEVBQVNRLE9BQVEsQ0FDcERSLEVBQVNRLFFBQVMsRUFHbEIsSUFBSUMsRUFBSSxJQUFJQyxNQUFNLCtDQUNFVixFQUFTTyxPQUFTLElBQU1JLE9BQU9mLEdBRGpDLHFFQUlsQmEsRUFBRXZDLEtBQU8sOEJBQ1R1QyxFQUFFeEMsUUFBVW5CLEVBQ1oyRCxFQUFFYixLQUFPQSxFQUNUYSxFQUFFRyxNQUFRWixFQUFTTyxPQTdLR04sRUE4S0hRLEVBN0tuQkksU0FBV0EsUUFBUUMsTUFBTUQsUUFBUUMsS0FBS2IsRUE4S3hDLENBR0YsT0FBT25ELENBQ1QsQ0FhQSxTQUFTaUUsSUFDUCxJQUFLaEQsS0FBS2lELE1BR1IsT0FGQWpELEtBQUtqQixPQUFPMEIsZUFBZVQsS0FBSzZCLEtBQU03QixLQUFLa0QsUUFDM0NsRCxLQUFLaUQsT0FBUSxFQUNZLElBQXJCckMsVUFBVTRCLE9BQ0x4QyxLQUFLd0IsU0FBU3BDLEtBQUtZLEtBQUtqQixRQUMxQmlCLEtBQUt3QixTQUFTMUMsTUFBTWtCLEtBQUtqQixPQUFRNkIsVUFFNUMsQ0FFQSxTQUFTdUMsRUFBVXBFLEVBQVE4QyxFQUFNTCxHQUMvQixJQUFJNEIsRUFBUSxDQUFFSCxPQUFPLEVBQU9DLFlBQVEvQixFQUFXcEMsT0FBUUEsRUFBUThDLEtBQU1BLEVBQU1MLFNBQVVBLEdBQ2pGNkIsRUFBVUwsRUFBWU0sS0FBS0YsR0FHL0IsT0FGQUMsRUFBUTdCLFNBQVdBLEVBQ25CNEIsRUFBTUYsT0FBU0csRUFDUkEsQ0FDVCxDQXlIQSxTQUFTRSxFQUFXeEUsRUFBUThDLEVBQU0yQixHQUNoQyxJQUFJeEIsRUFBU2pELEVBQU9tQyxRQUVwQixRQUFlQyxJQUFYYSxFQUNGLE1BQU8sR0FFVCxJQUFJeUIsRUFBYXpCLEVBQU9ILEdBQ3hCLFlBQW1CVixJQUFmc0MsRUFDSyxHQUVpQixtQkFBZkEsRUFDRkQsRUFBUyxDQUFDQyxFQUFXakMsVUFBWWlDLEdBQWMsQ0FBQ0EsR0FFbERELEVBc0RULFNBQXlCRSxHQUV2QixJQURBLElBQUlDLEVBQU0sSUFBSUMsTUFBTUYsRUFBSWxCLFFBQ2ZxQixFQUFJLEVBQUdBLEVBQUlGLEVBQUluQixTQUFVcUIsRUFDaENGLEVBQUlFLEdBQUtILEVBQUlHLEdBQUdyQyxVQUFZa0MsRUFBSUcsR0FFbEMsT0FBT0YsQ0FDVCxDQTNESUcsQ0FBZ0JMLEdBQWNNLEVBQVdOLEVBQVlBLEVBQVdqQixPQUNwRSxDQW1CQSxTQUFTd0IsRUFBY25DLEdBQ3JCLElBQUlHLEVBQVNoQyxLQUFLa0IsUUFFbEIsUUFBZUMsSUFBWGEsRUFBc0IsQ0FDeEIsSUFBSXlCLEVBQWF6QixFQUFPSCxHQUV4QixHQUEwQixtQkFBZjRCLEVBQ1QsT0FBTyxFQUNGLFFBQW1CdEMsSUFBZnNDLEVBQ1QsT0FBT0EsRUFBV2pCLE1BRXRCLENBRUEsT0FBTyxDQUNULENBTUEsU0FBU3VCLEVBQVdMLEVBQUtPLEdBRXZCLElBREEsSUFBSUMsRUFBTyxJQUFJTixNQUFNSyxHQUNaSixFQUFJLEVBQUdBLEVBQUlJLElBQUtKLEVBQ3ZCSyxFQUFLTCxHQUFLSCxFQUFJRyxHQUNoQixPQUFPSyxDQUNULENBMkNBLFNBQVNyRCxFQUErQlgsRUFBU0MsRUFBTXFCLEVBQVVULEdBQy9ELEdBQTBCLG1CQUFmYixFQUFRYyxHQUNiRCxFQUFNZCxLQUNSQyxFQUFRRCxLQUFLRSxFQUFNcUIsR0FFbkJ0QixFQUFRYyxHQUFHYixFQUFNcUIsT0FFZCxJQUF3QyxtQkFBN0J0QixFQUFRaUUsaUJBWXhCLE1BQU0sSUFBSTFDLFVBQVUsNkVBQStFdkIsR0FUbkdBLEVBQVFpRSxpQkFBaUJoRSxFQUFNLFNBQVNpRSxFQUFhQyxHQUcvQ3RELEVBQU1kLE1BQ1JDLEVBQVFvRSxvQkFBb0JuRSxFQUFNaUUsR0FFcEM1QyxFQUFTNkMsRUFDWCxFQUdGLENBQ0YsQ0FyYUEvRSxPQUFPaUYsZUFBZXpFLEVBQWMsc0JBQXVCLENBQ3pEMEUsWUFBWSxFQUNaQyxJQUFLLFdBQ0gsT0FBT25ELENBQ1QsRUFDQW9ELElBQUssU0FBU0wsR0FDWixHQUFtQixpQkFBUkEsR0FBb0JBLEVBQU0sR0FBSzNFLEVBQVkyRSxHQUNwRCxNQUFNLElBQUlNLFdBQVcsa0dBQW9HTixFQUFNLEtBRWpJL0MsRUFBc0IrQyxDQUN4QixJQUdGdkUsRUFBYUMsS0FBTyxnQkFFR29CLElBQWpCbkIsS0FBS2tCLFNBQ0xsQixLQUFLa0IsVUFBWTVCLE9BQU9zRixlQUFlNUUsTUFBTWtCLFVBQy9DbEIsS0FBS2tCLFFBQVU1QixPQUFPNkMsT0FBTyxNQUM3Qm5DLEtBQUtvQixhQUFlLEdBR3RCcEIsS0FBS3FCLGNBQWdCckIsS0FBS3FCLG9CQUFpQkYsQ0FDN0MsRUFJQXJCLEVBQWFYLFVBQVUwRixnQkFBa0IsU0FBeUJaLEdBQ2hFLEdBQWlCLGlCQUFOQSxHQUFrQkEsRUFBSSxHQUFLdkUsRUFBWXVFLEdBQ2hELE1BQU0sSUFBSVUsV0FBVyxnRkFBa0ZWLEVBQUksS0FHN0csT0FEQWpFLEtBQUtxQixjQUFnQjRDLEVBQ2RqRSxJQUNULEVBUUFGLEVBQWFYLFVBQVUyRixnQkFBa0IsV0FDdkMsT0FBT3BELEVBQWlCMUIsS0FDMUIsRUFFQUYsRUFBYVgsVUFBVWtELEtBQU8sU0FBY1IsR0FFMUMsSUFEQSxJQUFJNUMsRUFBTyxHQUNGNEUsRUFBSSxFQUFHQSxFQUFJakQsVUFBVTRCLE9BQVFxQixJQUFLNUUsRUFBS3NELEtBQUszQixVQUFVaUQsSUFDL0QsSUFBSWtCLEVBQW9CLFVBQVRsRCxFQUVYRyxFQUFTaEMsS0FBS2tCLFFBQ2xCLFFBQWVDLElBQVhhLEVBQ0YrQyxFQUFXQSxRQUE0QjVELElBQWpCYSxFQUFPZ0QsV0FDMUIsSUFBS0QsRUFDUixPQUFPLEVBR1QsR0FBSUEsRUFBUyxDQUNYLElBQUlFLEVBR0osR0FGSWhHLEVBQUt1RCxPQUFTLElBQ2hCeUMsRUFBS2hHLEVBQUssSUFDUmdHLGFBQWN0QyxNQUdoQixNQUFNc0MsRUFHUixJQUFJekUsRUFBTSxJQUFJbUMsTUFBTSxvQkFBc0JzQyxFQUFLLEtBQU9BLEVBQUdDLFFBQVUsSUFBTSxLQUV6RSxNQURBMUUsRUFBSTJFLFFBQVVGLEVBQ1J6RSxDQUNSLENBRUEsSUFBSU0sRUFBVWtCLEVBQU9ILEdBRXJCLFFBQWdCVixJQUFaTCxFQUNGLE9BQU8sRUFFVCxHQUF1QixtQkFBWkEsRUFDVGpDLEVBQWFpQyxFQUFTZCxLQUFNZixPQUU1QixLQUFJbUcsRUFBTXRFLEVBQVEwQixPQUNkNkMsRUFBWXRCLEVBQVdqRCxFQUFTc0UsR0FDcEMsSUFBU3ZCLEVBQUksRUFBR0EsRUFBSXVCLElBQU92QixFQUN6QmhGLEVBQWF3RyxFQUFVeEIsR0FBSTdELEtBQU1mLEVBSFgsQ0FNMUIsT0FBTyxDQUNULEVBZ0VBYSxFQUFhWCxVQUFVbUcsWUFBYyxTQUFxQnpELEVBQU1MLEdBQzlELE9BQU9JLEVBQWE1QixLQUFNNkIsRUFBTUwsR0FBVSxFQUM1QyxFQUVBMUIsRUFBYVgsVUFBVTZCLEdBQUtsQixFQUFhWCxVQUFVbUcsWUFFbkR4RixFQUFhWCxVQUFVb0csZ0JBQ25CLFNBQXlCMUQsRUFBTUwsR0FDN0IsT0FBT0ksRUFBYTVCLEtBQU02QixFQUFNTCxHQUFVLEVBQzVDLEVBb0JKMUIsRUFBYVgsVUFBVWMsS0FBTyxTQUFjNEIsRUFBTUwsR0FHaEQsT0FGQUQsRUFBY0MsR0FDZHhCLEtBQUtnQixHQUFHYSxFQUFNc0IsRUFBVW5ELEtBQU02QixFQUFNTCxJQUM3QnhCLElBQ1QsRUFFQUYsRUFBYVgsVUFBVXFHLG9CQUNuQixTQUE2QjNELEVBQU1MLEdBR2pDLE9BRkFELEVBQWNDLEdBQ2R4QixLQUFLdUYsZ0JBQWdCMUQsRUFBTXNCLEVBQVVuRCxLQUFNNkIsRUFBTUwsSUFDMUN4QixJQUNULEVBR0pGLEVBQWFYLFVBQVVzQixlQUNuQixTQUF3Qm9CLEVBQU1MLEdBQzVCLElBQUlpRSxFQUFNekQsRUFBUTBELEVBQVU3QixFQUFHOEIsRUFLL0IsR0FIQXBFLEVBQWNDLFFBR0NMLEtBRGZhLEVBQVNoQyxLQUFLa0IsU0FFWixPQUFPbEIsS0FHVCxRQUFhbUIsS0FEYnNFLEVBQU96RCxFQUFPSCxJQUVaLE9BQU83QixLQUVULEdBQUl5RixJQUFTakUsR0FBWWlFLEVBQUtqRSxXQUFhQSxFQUNiLE1BQXRCeEIsS0FBS29CLGFBQ1RwQixLQUFLa0IsUUFBVTVCLE9BQU82QyxPQUFPLGNBRXRCSCxFQUFPSCxHQUNWRyxFQUFPdkIsZ0JBQ1RULEtBQUtxQyxLQUFLLGlCQUFrQlIsRUFBTTRELEVBQUtqRSxVQUFZQSxTQUVsRCxHQUFvQixtQkFBVGlFLEVBQXFCLENBR3JDLElBRkFDLEdBQVksRUFFUDdCLEVBQUk0QixFQUFLakQsT0FBUyxFQUFHcUIsR0FBSyxFQUFHQSxJQUNoQyxHQUFJNEIsRUFBSzVCLEtBQU9yQyxHQUFZaUUsRUFBSzVCLEdBQUdyQyxXQUFhQSxFQUFVLENBQ3pEbUUsRUFBbUJGLEVBQUs1QixHQUFHckMsU0FDM0JrRSxFQUFXN0IsRUFDWCxLQUNGLENBR0YsR0FBSTZCLEVBQVcsRUFDYixPQUFPMUYsS0FFUSxJQUFiMEYsRUFDRkQsRUFBS0csUUFpSWYsU0FBbUJILEVBQU1JLEdBQ3ZCLEtBQU9BLEVBQVEsRUFBSUosRUFBS2pELE9BQVFxRCxJQUM5QkosRUFBS0ksR0FBU0osRUFBS0ksRUFBUSxHQUM3QkosRUFBS0ssS0FDUCxDQW5JVUMsQ0FBVU4sRUFBTUMsR0FHRSxJQUFoQkQsRUFBS2pELFNBQ1BSLEVBQU9ILEdBQVE0RCxFQUFLLFNBRVF0RSxJQUExQmEsRUFBT3ZCLGdCQUNUVCxLQUFLcUMsS0FBSyxpQkFBa0JSLEVBQU04RCxHQUFvQm5FLEVBQzFELENBRUEsT0FBT3hCLElBQ1QsRUFFSkYsRUFBYVgsVUFBVTZHLElBQU1sRyxFQUFhWCxVQUFVc0IsZUFFcERYLEVBQWFYLFVBQVU4RyxtQkFDbkIsU0FBNEJwRSxHQUMxQixJQUFJd0QsRUFBV3JELEVBQVE2QixFQUd2QixRQUFlMUMsS0FEZmEsRUFBU2hDLEtBQUtrQixTQUVaLE9BQU9sQixLQUdULFFBQThCbUIsSUFBMUJhLEVBQU92QixlQVVULE9BVHlCLElBQXJCRyxVQUFVNEIsUUFDWnhDLEtBQUtrQixRQUFVNUIsT0FBTzZDLE9BQU8sTUFDN0JuQyxLQUFLb0IsYUFBZSxRQUNNRCxJQUFqQmEsRUFBT0gsS0FDWSxNQUF0QjdCLEtBQUtvQixhQUNUcEIsS0FBS2tCLFFBQVU1QixPQUFPNkMsT0FBTyxhQUV0QkgsRUFBT0gsSUFFWDdCLEtBSVQsR0FBeUIsSUFBckJZLFVBQVU0QixPQUFjLENBQzFCLElBQ0kwRCxFQURBQyxFQUFPN0csT0FBTzZHLEtBQUtuRSxHQUV2QixJQUFLNkIsRUFBSSxFQUFHQSxFQUFJc0MsRUFBSzNELFNBQVVxQixFQUVqQixvQkFEWnFDLEVBQU1DLEVBQUt0QyxLQUVYN0QsS0FBS2lHLG1CQUFtQkMsR0FLMUIsT0FIQWxHLEtBQUtpRyxtQkFBbUIsa0JBQ3hCakcsS0FBS2tCLFFBQVU1QixPQUFPNkMsT0FBTyxNQUM3Qm5DLEtBQUtvQixhQUFlLEVBQ2JwQixJQUNULENBSUEsR0FBeUIsbUJBRnpCcUYsRUFBWXJELEVBQU9ILElBR2pCN0IsS0FBS1MsZUFBZW9CLEVBQU13RCxRQUNyQixRQUFrQmxFLElBQWRrRSxFQUVULElBQUt4QixFQUFJd0IsRUFBVTdDLE9BQVMsRUFBR3FCLEdBQUssRUFBR0EsSUFDckM3RCxLQUFLUyxlQUFlb0IsRUFBTXdELEVBQVV4QixJQUl4QyxPQUFPN0QsSUFDVCxFQW1CSkYsRUFBYVgsVUFBVWtHLFVBQVksU0FBbUJ4RCxHQUNwRCxPQUFPMEIsRUFBV3ZELEtBQU02QixHQUFNLEVBQ2hDLEVBRUEvQixFQUFhWCxVQUFVaUgsYUFBZSxTQUFzQnZFLEdBQzFELE9BQU8wQixFQUFXdkQsS0FBTTZCLEdBQU0sRUFDaEMsRUFFQS9CLEVBQWFrRSxjQUFnQixTQUFTOUQsRUFBUzJCLEdBQzdDLE1BQXFDLG1CQUExQjNCLEVBQVE4RCxjQUNWOUQsRUFBUThELGNBQWNuQyxHQUV0Qm1DLEVBQWM1RSxLQUFLYyxFQUFTMkIsRUFFdkMsRUFFQS9CLEVBQWFYLFVBQVU2RSxjQUFnQkEsRUFpQnZDbEUsRUFBYVgsVUFBVWtILFdBQWEsV0FDbEMsT0FBT3JHLEtBQUtvQixhQUFlLEVBQUkxQyxFQUFlc0IsS0FBS2tCLFNBQVcsRUFDaEUsQyxzN0JDdmFBLGtCQUNBLFlBQ0EsWUFDQSxZQUNBLFlBQ0EsU0FDQSxTQUNBLFNBRUEsTUFBTW9GLFdBQW1CLGFBQWEsRUFBQUMsWUFDcEMsTUFBQUMsR0FDRSxNQUFNLFFBQ0pDLEVBQU8sU0FDUEMsRUFBUSxlQUNSQyxFQUFpQixVQUFNQyxpQkFBZ0IsVUFDdkNDLEVBQVksVUFBTUMsV0FBVSxTQUM1QkMsRUFBUSxpQkFDUkMsRUFBbUIsS0FBSSxtQkFDdkJDLEVBQXFCLEtBQUksd0JBQ3pCQyxFQUEwQixVQUFNQyxpQkFBZ0Isd0JBQ2hEQyxFQUEwQixVQUFNQyw2QkFBNEIsV0FDNURDLEVBQVUsU0FDVkMsRUFBUSxhQUNSQyxFQUFZLGdCQUNaQyxFQUFrQixVQUFNQyxtQkFBa0IsZ0JBQzFDQyxFQUFlLGdCQUNmQyxFQUFrQixVQUFNQyxtQkFBa0Isb0JBQzFDQyxFQUFzQixLQUFJLDBCQUMxQkMsRUFBNEIsS0FBSSxvQkFDaENDLEVBQW1CLFdBQ25CQyxHQUFhLEVBQUssaUJBQ2xCQyxHQUFtQixFQUFLLGVBQ3hCQyxFQUFpQixVQUFNQyxnQkFBZSxpQkFDdENDLEVBQW1CLFVBQU1DLG9CQUFtQixrQkFDNUNDLEVBQW9CLFVBQU1DLG1CQUFrQixjQUM1Q0MsRUFBZ0IsVUFBTUMsZ0JBQWUsWUFDckNDLEVBQWMsVUFBTUMsY0FBYSxhQUNqQ0MsRUFBZSxVQUFNQyxlQUFjLGFBQ25DQyxFQUFlLFVBQU1DLGVBQWMsY0FDbkNDLEVBQWdCLFVBQU1DLGdCQUFlLGFBQ3JDQyxFQUFlLFVBQU1DLGVBQWMsZUFDbkNDLEVBQWlCLFVBQU1DLGlCQUFnQixjQUN2Q0MsRUFBZ0IsVUFBTUMsbUJBQ25CQyxHQUNEekosS0FBSzBKLE1BRUhDLEVBQVEzSixLQUFLNEosb0JBQ2pCNUosS0FBSzZKLGVBQWV2QyxFQUFZQyxHQUNoQ0EsR0FFSXVDLEdBQWdCLGFBQ3BCLHdDQUNBLHNDQUNBLENBQ0UsK0NBQ0UxQyxHQUEwQyxJQUFmRSxJQUdqQyxPQUNFLCtCQUFLeUMsVUFBVSx3Q0FDYiwrQkFBS0EsVUFBVSx1Q0FDYix3QkFBQyxFQUFBQywrQkFBOEIsQ0FDN0IvQixXQUFZQSxFQUNaeEIsUUFBU0EsRUFDVGdCLGdCQUFpQkEsRUFDakJFLGdCQUFpQkEsRUFDakJDLGdCQUFpQkEsRUFDakJFLG9CQUFxQkEsRUFDckJDLDBCQUEyQkEsRUFDM0JDLG9CQUFxQkEsSUFFdEJuQixFQUNDLHdCQUFDLEVBQUFvRCwyQkFBMEIsQ0FDekJ2RCxTQUFVQSxFQUNWaUIsZ0JBQWlCQSxFQUNqQmhCLGVBQWdCQSxFQUNoQkksU0FBVUEsRUFDVkcsd0JBQXlCQSxJQUV6QixNQUVMRixFQUNDQSxFQUFpQixDQUNmMkMsUUFDQW5DLGlCQUdGLCtCQUFLdUMsVUFBV0QsR0FDZCx3QkFBQyxFQUFBSSwwQkFBeUIsSUFDcEJULEVBQ0ovQyxTQUFVQSxFQUNWaUIsZ0JBQWlCQSxFQUNqQmhCLGVBQWdCQSxFQUNoQlksU0FBVUEsRUFDVkQsV0FBWUEsRUFDWkwsbUJBQW9CQSxFQUNwQk8sYUFBY0EsRUFDZFcsZUFBZ0JBLEVBQ2hCRSxpQkFBa0JBLEVBQ2xCSSxjQUFlQSxFQUNmRSxZQUFhQSxFQUNiRSxhQUFjQSxFQUNkRSxhQUFjQSxFQUNkUixrQkFBbUJBLEtBTS9CLEVBNERGLFdBQWUsYUFBa0JqQyxFLDA5QkMxS2pDLGtCQUVBLFlBQ0EsWUFFTTZELEVBQXlCQyxHQUM3QixlQUFvQyxhQUFhLEVBQUE3RCxZQUMvQyxNQUFBQyxHQUNFLE1BQU0sU0FDSmUsRUFBUSxXQUNSRCxFQUFVLG1CQUNWTCxFQUFrQixhQUNsQk8sRUFBWSxpQkFDWlUsRUFBZ0Isd0JBQ2hCZCxHQUNFcEgsS0FBSzBKLE1BQ0hDLEVBQVEzSixLQUFLNEosb0JBQ2pCNUosS0FBSzZKLGVBQWV2QyxFQUFZQyxHQUNoQ0EsRUFDQVcsR0FFRixPQUFtQixJQUFmWixHQUFvQkYsRUFDZixLQUdQLHdCQUFDZ0QsRUFBZ0IsQ0FDZm5ELG1CQUFvQkEsRUFDcEJPLGFBQWNBLEVBQ2RtQyxNQUFPQSxHQUdiLEdBR1MsRUFBQU8sMEJBQTRCQyxFQUFzQixXQUMvRCxVQUFlQSxDLCtKQ3BDZixrQkFDQSxZQUVBLFlBRU1FLEVBQWlCWCxHQUNyQiw4QkFBSUssVUFBVSxpREFDWEwsRUFBTUMsTUFBTVcsSUFBS0MsR0FDWmIsRUFBTXpDLG1CQUNELFVBQU11RCxhQUNYZCxFQUFNekMsbUJBQW1CLElBQ3BCc0QsRUFDSC9DLGFBQWNrQyxFQUFNbEMsZUFFdEIsQ0FBRXRCLElBQUtxRSxFQUFVRSxPQUluQix3QkFBQyxVQUFVLENBQ1R2RSxJQUFLcUUsRUFBVUUsUUFDWEYsRUFDSi9DLGFBQWNrQyxFQUFNbEMsaUJBTzlCNkMsRUFBY0ssVUFBWSxDQUN4QmYsTUFBTyxVQUFVZ0IsUUFDZixVQUFVQyxNQUFNLENBQ2RILEtBQU0sVUFBVUksVUFBVSxDQUN4QixVQUFVQyxLQUNWLFVBQVVDLE9BQ1YsVUFBVUMsU0FFWkMsT0FBUSxVQUFVQyxLQUNsQkMsUUFBUyxVQUFVRCxLQUNuQkUsTUFBTyxVQUFVSixVQUVuQkssV0FDRjdELGFBQWMsVUFBVThELEtBQUtELFdBQzdCcEUsbUJBQW9CLFVBQVVxRSxNQU9oQyxVQUFlakIsQywrSkNoRGYsa0JBQ0EsWUFFQSxVQUFnQmtCLEdBQ2QsY0FBMkIsVUFBTWhGLFVBQy9CLGNBQUFpRixHQUNFLE1BQU0sU0FBRTlFLEVBQVEsZUFBRUMsR0FBbUIzRyxLQUFLMEosTUFDMUMsT0FBT2hELEVBQVcsRUFBSUMsRUFBaUJBLEVBQWlCRCxFQUFXLENBQ3JFLENBRUEsWUFBQStFLEdBQ0UsTUFBTW5FLEVBQWF0SCxLQUFLMEwscUJBRXhCLE1BQU8sQ0FBRXBFLGFBQVlDLFNBREp2SCxLQUFLMkwsa0JBQWtCckUsR0FFMUMsQ0FFQSxrQkFBQW9FLENBQ0VFLEVBQWM1TCxLQUFLMEosTUFBTS9CLGdCQUN6QlosRUFBVy9HLEtBQUswSixNQUFNM0MsVUFFdEIsT0FBTzhFLEtBQUtDLEtBQUsvRSxFQUFXNkUsRUFDOUIsQ0FFQSxpQkFBQUQsQ0FBa0JyRSxHQUNoQixNQUFNLGVBQUVYLEdBQW1CM0csS0FBSzBKLE1BQ2hDLE9BQU8vQyxFQUFpQlcsRUFBYSxDQUN2QyxDQUVBLGVBQUF5RSxHQUNFLE1BQU0sU0FBRWhGLEVBQVEsU0FBRUwsRUFBUSxnQkFBRWlCLEVBQWUsZUFBRWhCLEdBQzNDM0csS0FBSzBKLE1BQ0RzQyxFQUFTSCxLQUFLSSxJQUFJLFVBQU1yRixpQkFBbUJELEdBRWpELElBQUl1RixHQUFReEYsRUFBV0MsR0FBa0JnQixFQUN6Q3VFLEVBQW9CLElBQWJuRixFQUFpQixFQUFJbUYsRUFBTyxFQUNuQyxJQUFJQyxFQUFLTixLQUFLTyxJQUFJekUsR0FBbUJqQixFQUFXc0YsR0FBU2pGLEdBR3pELE9BRklvRixFQUFLcEYsSUFBVW9GLEVBQUtwRixHQUVqQixDQUFDbUYsRUFBTUMsRUFDaEIsQ0FFQSxjQUFBdEMsQ0FBZXZDLEVBQWlCQyxHQUM5QixNQUFNLFNBQ0piLEVBQVEsZUFDUnlCLEVBQWMsZUFDZHhCLEVBQWMsaUJBQ2QwQixFQUFnQixjQUNoQkksRUFBYSxZQUNiRSxFQUFXLGFBQ1hFLEVBQVksYUFDWkUsRUFBWSxrQkFDWlIsR0FDRXZJLEtBQUswSixNQUVULElBQUlDLEVBQWEsR0FDYjBDLEVBQVUvRSxFQUNkLEdBQUkrRSxHQUFXLEVBQUcsTUFBTyxHQUV6QixJQUFJQyxFQUFZVCxLQUFLVSxJQUNuQjdGLEVBQVdtRixLQUFLVyxNQUFNckUsRUFBaUIsR0FDdkN4QixHQUVGMEYsRUFBVUMsRUFBWW5FLEVBQWlCLEVBRW5Da0UsRUFBVTlFLElBQ1o4RSxFQUFVOUUsRUFDVitFLEVBQVlELEVBQVVsRSxFQUFpQixHQUdyQ0ksSUFFQW9CLEVBREV0QixFQUNNLENBQUNJLEVBQWVFLEdBRWhCLENBQUNBLElBS1gyRCxJQUFjM0YsR0FDZFcsRUFBYWEsR0FDYkUsR0FDaUIsSUFBakJzQixFQUFNbkgsT0FFTm1ILEVBQVEsQ0FBQ2xCLEVBQWVFLEdBQ2ZyQixFQUFhLEdBQXNCLElBQWpCcUMsRUFBTW5ILFNBQ2pDbUgsRUFBUSxDQUFDaEIsSUFHWCxJQUFLLElBQUk5RSxFQUFJeUksRUFBV3pJLEdBQUt3SSxFQUFTeEksR0FBSyxFQUNyQ0EsR0FBSzhDLEdBQWdCZ0QsRUFBTXBILEtBQUtzQixHQW9CdEMsT0FqQkkwRSxHQUFzQjhELEdBQVc5RSxHQUFZb0MsRUFBTW5ILE9BQVMsSUFDOURtSCxFQUFNcEgsS0FBS3NHLElBR1Z3RCxJQUFZOUUsR0FBWWMsR0FDeEJBLEdBQW9CRSxJQUVyQm9CLEVBQU1wSCxLQUFLd0csR0FVTlksQ0FDVCxDQUVBLG1CQUFBQyxDQUFvQkQsRUFBUSxHQUFJcEMsRUFBZVcsR0FBbUIsR0FDaEUsTUFBTSxTQUNKeEIsRUFBUSxlQUNSQyxFQUFjLGNBQ2Q4QixFQUFhLFlBQ2JFLEVBQVcsYUFDWEUsRUFBWSxhQUNaRSxFQUFZLGtCQUNaUixHQUNFdkksS0FBSzBKLE1BQ0grQyxFQUFXaEMsR0FDZi9ELElBQWFDLElBQ1o4RCxJQUFTaEMsR0FBaUJnQyxJQUFTOUIsR0FDaEMrRCxFQUFTakMsR0FDYi9ELElBQWFhLElBQ1prRCxJQUFTNUIsR0FBZ0I0QixJQUFTMUIsR0FFckMsT0FBT1ksRUFDSmdELE9BQVFsQyxLQUNIbEMsS0FHS2tFLEVBQVFoQyxJQUFTaUMsRUFBTWpDLEtBRWpDSCxJQUFLRyxJQUNKLElBQUlXLEVBQ0osTUFBTUgsRUFBU1IsSUFBUy9ELEVBQ2xCa0csRUFBV0gsRUFBUWhDLElBQVNpQyxFQUFNakMsR0FHdENXLEVBREVYLElBQVM1QixFQUNIN0ksS0FBSzBKLE1BQU1ULGNBQ1Z3QixJQUFTOUIsRUFDVjNJLEtBQUswSixNQUFNUCxhQUNWc0IsSUFBU2hDLEVBQ1Z6SSxLQUFLMEosTUFBTUwsZUFDVm9CLElBQVMxQixFQUNWL0ksS0FBSzBKLE1BQU1ILGNBRVgsR0FBR2tCLElBR2IsTUFBTW9DLEVBQWEsQ0FBRXBDLE9BQU1RLFNBQVEyQixXQUFVeEIsU0FJN0MsT0FIS2xELElBQ0gyRSxFQUFXekIsTUFBUUEsR0FFZHlCLEdBRWIsQ0FFQSwwQkFBQUMsR0FDRSxNQUFNLGdCQUFFckYsR0FBb0J6SCxLQUFLMEosTUFDakMsT0FBT2pDLEVBQWdCNkMsSUFBS3lDLElBU25CLENBQ0xDLEtBQU0sUUFSdUIsSUFBdEJELEVBQWFDLEtBQ2hCRCxFQUFhQyxLQUNiRCxJQU9KdEMsVUFMOEIsSUFBdkJzQyxFQUFhbE4sTUFDaEJrTixFQUFhbE4sTUFDYmtOLElBTVYsRSwrSkMvS0osa0JBQ0EsWUFHQSxZQUNBLFNBQ0EsV0FDQSxhQUVNLFNBQUVFLElBQWEsZUFFZkMsRUFBd0IsVUFBTUMsY0FBbUIsTUFFdkQsTUFBTUMsVUFBK0JILEVBQXJDLGMsb0JBMENFLEtBQUFJLG1CQUFxQixJQUFNck4sS0FBSzBKLE1BQU0yRCxxQkFFdEMsS0FBQUMsd0JBQTBCLEtBQ3hCLElBQUt0TixLQUFLMEosTUFBTTZELFdBQVlDLFFBQVNDLE9BQVEsQ0FDM0MsTUFDRWhELEtBQU0vRCxFQUNOa0YsWUFBYWpFLEVBQWUsU0FDNUJaLEtBQ0cwQyxHQUNEekosS0FBSzBOLHFCQUNULE9BQ0Usd0JBQUMsVUFBVSxJQUNMakUsRUFDSnZELElBQUksYUFDSmEsU0FBVUEsR0FBWS9HLEtBQUswSixNQUFNaUUsS0FBS25MLE9BQ3RDa0UsU0FBVUEsRUFDVmlCLGdCQUFpQkEsR0FHdkIsQ0FDQSxPQUFPLEtBd0NYLENBL0ZFLGtCQUFBaUcsQ0FBbUJDLEdBQ2pCQyxNQUFNRixtQkFBbUJDLEdBQ3pCLE1BQU0sZ0JBQUVsRyxHQUFvQjNILE1BQ3RCLE9BQUV5TixFQUFNLGFBQUVqRyxHQUFpQnFHLEVBQVVOLFdBQVdDLFFBRWhEN0csT0FDbUQsSUFBaERrSCxFQUFVTixXQUFXQyxRQUFRN0csZUFDaENrSCxFQUFVTixXQUFXQyxRQUFRN0csZUFDN0IsVUFBTUMsaUJBR1osSUFBSzVHLEtBQUtxTix1QkFBeUJJLEVBQVEsQ0FDekMsTUFBTU0sR0FBVSxJQUFBQyxXQUNkSCxFQUFVRixLQUFLbkwsT0FDZnhDLEtBQUswSixNQUFNaUUsS0FBS25MLE9BQ2hCeEMsS0FBSzBHLFNBQ0xpQixFQUNBaEIsR0FHRTNHLEtBQUswRyxXQUFhcUgsSUFDaEJ2RyxHQUNGQSxFQUFhdUcsRUFBU3BHLEdBRXhCM0gsS0FBSzBHLFNBQVdxSCxFQUVwQixDQUVFRixFQUFVSSxrQkFDVkosRUFBVUYsS0FBS25MLFNBQVd4QyxLQUFLMEosTUFBTWlFLEtBQUtuTCxRQUUxQ3FMLEVBQVVJLGlCQUFpQixDQUFFbEgsU0FBVS9HLEtBQUswSixNQUFNaUUsS0FBS25MLFFBRTNELENBeUJBLE1BQUFnRSxHQUNFLE1BQU1nSCxFQUFVeE4sS0FBSzBKLE1BQU02RCxXQUFZQyxRQUNqQzdGLEVBQWtCNkYsRUFBUTVCLGFBQWU1TCxLQUFLMkgsZ0JBQzlDaEIsT0FDOEIsSUFBM0I2RyxFQUFRN0csZUFDWCxVQUFNQyxpQkFDTjRHLEVBQVE3RyxlQUtkLElBQUksS0FBRWdILEdBQVMzTixLQUFLMEosTUFDaEJoRCxFQUFXOEcsRUFBUS9DLE1BQVF6SyxLQUFLMEcsU0FFcEMsSUFBSzFHLEtBQUtxTixzQkFBd0JNLEVBQUtuTCxTQUFXa0UsRUFBVyxHQUFLaUIsRUFBaUIsQ0FDakYsTUFBTUwsRUFBYXVFLEtBQUtXLE1BQU1tQixFQUFLbkwsT0FBU21GLEdBQW1CLEVBQy9EakIsRUFBV0EsRUFBV1ksRUFBYUEsRUFBYVosRUFDaEQxRyxLQUFLMEcsU0FBV0EsQ0FDbEIsQ0FVQSxPQVJJMUcsS0FBS3FOLHVCQUNQck4sS0FBSzBHLFNBQVdBLEdBR2xCaUgsRUFBTzNOLEtBQUtxTixxQkFDUk0sR0FDQSxJQUFBTyxlQUFjUCxFQUFNakgsRUFBVWlCLEVBQWlCaEIsR0FHakQsd0JBQUN1RyxFQUFzQkQsU0FBUSxDQUM3QnBOLE1BQU8sQ0FBRThOLE9BQU1RLGlCQUFrQm5PLEtBQUtvTyw2QkFFckNwTyxLQUFLMEosTUFBTTJFLFNBQ1hyTyxLQUFLc04sMEJBR1osRUFwR08sRUFBQTVDLFVBQVksQ0FDakJpRCxLQUFNLFVBQVVXLE1BQU1qRCxXQUN0QmtELGNBQWUsVUFBVUMsT0FBT25ELFdBQ2hDZ0MsbUJBQW9CLFVBQVUvQixLQUFLRCxZQW9HdkMsVUFBZSxLQUFNLENBQ25CNEIsU0FBVUcsRUFDVnFCLFNBQVV2QixFQUFzQnVCLFUsdTdCQ3pIbEMsa0JBQ0EsWUFXQSxNQUFNQyxVQUFtQixFQUFBbkksVUFDdkIsV0FBQW9JLENBQVlqRixHQUNWb0UsTUFBTXBFLEdBQ04xSixLQUFLNE8sWUFBYzVPLEtBQUs0TyxZQUFZdEwsS0FBS3RELEtBQzNDLENBRUEsV0FBQTRPLENBQVlDLEdBQ1ZBLEVBQUVDLGlCQUNGOU8sS0FBSzBKLE1BQU1sQyxhQUFheEgsS0FBSzBKLE1BQU1lLEtBQ3JDLENBRUEsTUFBQWpFLEdBQ0UsTUFBTSxLQUFFaUUsRUFBSSxNQUFFVyxFQUFLLE9BQUVILEVBQU0sU0FBRTJCLEVBQVEsVUFBRTdDLEdBQWMvSixLQUFLMEosTUFDcERxRixHQUFVLGFBQ2QsQ0FDRTlELFNBQ0EyQixXQUNBLGFBQWEsR0FFZjdDLEdBR0YsT0FDRSw4QkFBSUEsVUFBV2dGLEVBQVMzRCxNQUFPQSxHQUM3Qiw2QkFBRzRELEtBQUssSUFBSUMsUUFBU2pQLEtBQUs0TyxZQUFhN0UsVUFBVSxhQUM5Q1UsR0FJVCxFQWdCRixVQUFlaUUsQywrSkMxRGYsa0JBQ0EsWUFDQSxZQUNBLFlBQ0EsWUFNQSxXQUFlLGNBQ2IsY0FBa0IsYUFMbUJoRixHQUNyQyx3QkFBQyxVQUFtQixJQUFLQSxNLHNCQ1AzQnRMLEVBQU9ELFFBQVVNLEMsK0pDQWpCLGtCQUNBLFlBRU15USxFQUFtQnhGLEdBQ25CQSxFQUFNeEMsd0JBQ0R3QyxFQUFNeEMsd0JBQXdCd0MsRUFBTXdDLEtBQU14QyxFQUFNeUMsR0FBSXpDLEVBQU0zQyxVQUdqRSxnQ0FBTWdELFVBQVUsMEMsaUJBQ01MLEVBQU13QyxLLE9BQWV4QyxFQUFNeUMsRyxPQUM5Q3pDLEVBQU0zQyxVQUtibUksRUFBZ0J4RSxVQUFZLENBQzFCd0IsS0FBTSxVQUFVbkIsT0FBT00sV0FDdkJjLEdBQUksVUFBVXBCLE9BQU9NLFdBQ3JCdEUsU0FBVSxVQUFVZ0UsT0FBT00sV0FDM0JuRSx3QkFBeUIsVUFBVW9FLE1BT3JDLFVBQWU0RCxDLCs5QkN6QmYsa0JBR0EsWUFDQSxZQUVNQyxFQUE4Qi9FLEdBQ2xDLGVBQXlDLGFBQWEsRUFBQTdELFlBR3BELFdBQUFvSSxDQUFZakYsR0FDVm9FLE1BQU1wRSxHQUhSLEtBQUF0RyxNQUFRLENBQUVnTSxjQUFjLEdBSXRCcFAsS0FBS3FQLGNBQWdCclAsS0FBS3FQLGNBQWMvTCxLQUFLdEQsTUFDN0NBLEtBQUtzUCxlQUFpQnRQLEtBQUtzUCxlQUFlaE0sS0FBS3RELE1BQy9DQSxLQUFLdVAsd0JBQTBCdlAsS0FBS3VQLHdCQUF3QmpNLEtBQUt0RCxNQUNqRUEsS0FBS29ELE1BQVEsQ0FBRWdNLGNBQWMsRUFDL0IsQ0FFQSxjQUFBRSxHQUNFLE1BQU1GLEdBQWdCcFAsS0FBS29ELE1BQU1nTSxhQUNqQ3BQLEtBQUt3UCxTQUFTLEtBQU0sQ0FBR0osaUJBQ3pCLENBRUEsYUFBQUMsR0FDRXJQLEtBQUt3UCxTQUFTLEtBQU0sQ0FBR0osY0FBYyxJQUN2QyxDQUVBLHVCQUFBRyxDQUF3QjNELEdBQ3RCNUwsS0FBSzBKLE1BQU0xQixvQkFBb0I0RCxHQUMvQjVMLEtBQUtxUCxlQUNQLENBRUEsTUFBQTdJLEdBQ0UsTUFBTSxRQUNKQyxFQUFPLFdBQ1B3QixFQUFVLGdCQUNWUixFQUFlLGdCQUNmRSxFQUFlLGdCQUNmQyxFQUFlLG9CQUNmRSxFQUFtQiwwQkFDbkJDLEdBQ0UvSCxLQUFLMEosT0FDRDBGLGFBQWNLLEdBQVN6UCxLQUFLb0QsTUFFcEMsT0FBSXFFLEVBQWdCakYsT0FBUyxJQUFNb0YsRUFDN0JFLEVBQ0tBLEVBQW9CLENBQ3pCMEYsUUFBU3hOLEtBQUs4TSw2QkFDZG5GLGdCQUFpQixHQUFHQSxJQUNwQkssb0JBQXFCaEksS0FBS3VQLDBCQUk1Qix3QkFBQ25GLEVBQWdCLElBQ1hwSyxLQUFLMEosTUFDVC9CLGdCQUFpQixHQUFHQSxJQUNwQjZGLFFBQVN4TixLQUFLOE0sNkJBQ2Q0QyxlQUFnQjNILEVBQ2hCQyxvQkFBcUJoSSxLQUFLdVAsd0JBQzFCTixRQUFTalAsS0FBS3NQLGVBQ2RLLE9BQVEzUCxLQUFLcVAsY0FDYkksS0FBTUEsRUFDTmhKLFFBQVNBLEVBQ1R3QixXQUFZQSxJQUlYLElBQ1QsR0FHUyxFQUFBK0IsK0JBQ1htRixFQUEyQixXQUM3QixVQUFlQSxDLGFDekRiL1EsRUFBT0QsUUFBVSxFQUFRLElBQVIsRSwrSkNqQm5CLGtCQUNBLFlBQ0EsWUFDQSxZQUlNeVIsRUFBa0MsQ0FDdENILE1BQU0sRUFDTkksUUFBUSxFQUNSQyxjQUFlLDRCQUNmQyxVQUFXLFdBQ1hoRyxVQUFXLEdBQ1gyRixlQUFnQixLQUNoQnpILFlBQVksRUFDWnhCLFFBQVMsTUFHTHVKLEVBQXVCdEcsSUFDM0IsTUFBTSxLQUNKK0YsRUFBSSxRQUNKaEosRUFBTyxPQUNQb0osRUFBTSxRQUNOWixFQUFPLE9BQ1BVLEVBQU0sUUFDTm5DLEVBQU8sVUFDUHpELEVBQVMsVUFDVGdHLEVBQVMsV0FDVDlILEVBQVUsY0FDVjZILEVBQWEsZUFDYkosRUFBYyxnQkFDZC9ILEVBQWUsb0JBQ2ZLLEdBQ0UsSUFBSzRILEtBQW9DbEcsR0FFdkN1RyxFQUFZUixFQUFPLFlBQWMsR0FDakNTLEdBQWtCLGFBQ3RCRCxFQWhDNEIsc0NBa0M1QkYsRUFDQWhHLEdBR0lvRyxFQUFLMUosRUFBVSxHQUFHQSxpQkFBeUIsZUFFakQsT0FDRSxnQ0FDRTJKLE1BQU8sQ0FBRUMsV0FBWVIsRUFBUyxTQUFXLFdBQ3pDOUYsVUFBV21HLEVBQWUsY0FDZCwwQkFFWixrQ0FDRUMsR0FBSUEsRUFDSnRPLEtBQUssU0FDTGtJLFVBQVcsT0FBTytGLG9CQUErQixjQUNyQyxXQUFVLGdCQUNQTCxFQUNmUixRQUFTQSxFQUNUVSxPQUFRQSxHQUVQaEksRUFBaUIsSUFDakJNLEVBQWEsS0FDWixvQ0FDRSxnQ0FBTThCLFVBQVUsWUFJdEIsOEJBQ0VBLFVBQVcsaUJBQWlCa0csSUFDNUJLLEtBQUssT0FBTSxrQkFDTUgsR0FFaEIzQyxFQUFRbEQsSUFBS2lHLEdBQ1JiLEVBQ0tBLEVBQWUsSUFDakJhLEVBQ0h2SSx3QkFJRix3QkFBQyxVQUFpQixJQUNadUksRUFDSnJLLElBQUtxSyxFQUFPdkQsS0FDWi9FLFdBQVlBLEVBQ1pELG9CQUFxQkEsUUFTbkNnSSxFQUFvQnRGLFVBQVksQ0FDOUIvQyxnQkFBaUIsVUFBVXFELE9BQU9LLFdBQ2xDbUMsUUFBUyxVQUFVYyxNQUFNakQsV0FDekI0RCxRQUFTLFVBQVUzRCxLQUFLRCxXQUN4QnNFLE9BQVEsVUFBVXJFLEtBQUtELFdBQ3ZCckQsb0JBQXFCLFVBQVVzRCxLQUFLRCxXQUNwQ3BELFdBQVksVUFBVWlELEtBQ3RCekUsUUFBUyxVQUFVdUUsT0FDbkJ5RSxLQUFNLFVBQVV2RSxLQUNoQjJFLE9BQVEsVUFBVTNFLEtBQ2xCNEUsY0FBZSxVQUFVOUUsT0FDekIrRSxVQUFXLFVBQVVTLE1BQU0sQ0FBQyxXQUFZLFdBQ3hDekcsVUFBVyxVQUFVaUIsT0FDckIwRSxlQUFnQixVQUFVcEUsTUFHNUIsVUFBZTBFLEMsK0pDN0dmLGtCQUNBLFlBQ0EsWUFDQSxZQUNBLFlBSUEsV0FBZSxjQUNiLGNBQWtCLGFBSGN0RyxHQUFlLHdCQUFDLFVBQWMsSUFBS0EsTSwyOUJDTHJFLGtCQUVBLFlBQ0EsWUFFTStHLEVBQTBCckcsR0FDOUIsZUFBcUMsYUFBYSxFQUFBN0QsWUFDaEQsTUFBQUMsR0FDRSxNQUFPMEYsRUFBTUMsR0FBTW5NLEtBQUsrTCxrQkFDeEIsT0FDRSx3QkFBQzNCLEVBQWdCLENBQ2Y4QixLQUFNQSxFQUNOQyxHQUFJQSxFQUNKcEYsU0FBVS9HLEtBQUswSixNQUFNM0MsU0FDckJHLHdCQUF5QmxILEtBQUswSixNQUFNeEMseUJBRzFDLEdBR1MsRUFBQStDLDJCQUNYd0csRUFBdUIsV0FDekIsVUFBZUEsQywwQkNkZixJQUFJQyxFQUF1QixFQUFRLEtBRW5DLFNBQVNDLElBQWlCLENBQzFCLFNBQVNDLElBQTBCLENBQ25DQSxFQUF1QkMsa0JBQW9CRixFQUUzQ3ZTLEVBQU9ELFFBQVUsV0FDZixTQUFTMlMsRUFBS3BILEVBQU9xSCxFQUFVQyxFQUFlQyxFQUFVQyxFQUFjQyxHQUNwRSxHQUFJQSxJQUFXVCxFQUFmLENBSUEsSUFBSWxRLEVBQU0sSUFBSW1DLE1BQ1osbUxBS0YsTUFEQW5DLEVBQUlMLEtBQU8sc0JBQ0xLLENBUE4sQ0FRRixDQUVBLFNBQVM0USxJQUNQLE9BQU9OLENBQ1QsQ0FIQUEsRUFBS3pGLFdBQWF5RixFQU1sQixJQUFJTyxFQUFpQixDQUNuQi9DLE1BQU93QyxFQUNQUSxPQUFRUixFQUNSNUYsS0FBTTRGLEVBQ054RixLQUFNd0YsRUFDTi9GLE9BQVErRixFQUNSdEMsT0FBUXNDLEVBQ1I5RixPQUFROEYsRUFDUlMsT0FBUVQsRUFFUlUsSUFBS1YsRUFDTG5HLFFBQVN5RyxFQUNUSyxRQUFTWCxFQUNUWSxZQUFhWixFQUNiYSxXQUFZUCxFQUNadEcsS0FBTWdHLEVBQ05jLFNBQVVSLEVBQ1ZaLE1BQU9ZLEVBQ1B2RyxVQUFXdUcsRUFDWHhHLE1BQU93RyxFQUNQUyxNQUFPVCxFQUVQVSxlQUFnQmxCLEVBQ2hCQyxrQkFBbUJGLEdBS3JCLE9BRkFVLEVBQWVVLFVBQVlWLEVBRXBCQSxDQUNULEMsK0pDaEVBLGtCQUNBLFlBRU1XLEVBQW9CLEVBQ3hCaEYsT0FDQXZDLE9BQ0F6QyxzQkFDQUMsY0FBYSxLQUViQSxFQUNFLDZCQUNFK0csS0FBSyxJQUNMaUQsVUFBVyxFQUNYM0IsS0FBSyxXQUNMdkcsVUFBVSxnQkFBZSxZQUNkVSxFQUNYeUgsWUFBY3JELElBQ1pBLEVBQUVDLGlCQUNGOUcsRUFBb0J5QyxLQUdyQnVDLEdBR0gsOEJBQUk5RyxJQUFLOEcsRUFBTXNELEtBQUssZUFBZXZHLFVBQVUsaUJBQzNDLDZCQUNFaUYsS0FBSyxJQUNMaUQsVUFBVyxFQUNYM0IsS0FBSyxXQUFVLFlBQ0o3RixFQUNYeUgsWUFBY3JELElBQ1pBLEVBQUVDLGlCQUNGOUcsRUFBb0J5QyxLQUdyQnVDLElBS1RnRixFQUFrQnRILFVBQVksQ0FDNUJzQyxLQUFNLFVBQVVoQyxPQUFPSyxXQUN2QlosS0FBTSxVQUFVTSxPQUFPTSxXQUN2QnJELG9CQUFxQixVQUFVc0QsS0FBS0QsV0FDcENwRCxXQUFZLFVBQVVpRCxNQU94QixVQUFlOEcsQyx1N0JDakRmLGtCQUVBLFlBRUEsVUFBZ0I1SCxHQUNkLGVBQWdDLGFBQWEsRUFBQTdELFlBQzNDLFdBQUFvSSxDQUFZakYsR0FDVm9FLE1BQU1wRSxHQUNOMUosS0FBS21TLGlCQUFtQm5TLEtBQUttUyxpQkFBaUI3TyxLQUFLdEQsTUFDbkRBLEtBQUt1UCx3QkFBMEJ2UCxLQUFLdVAsd0JBQXdCak0sS0FBS3RELE1BQ2pFQSxLQUFLb0QsTUFBUXBELEtBQUt5TCxjQUNwQixDQUVBLGtCQUFBbUMsQ0FBbUJ3RSxHQUNqQixNQUFNLGdCQUFFekssRUFBZSxTQUFFWixFQUFRLFVBQUVzTCxHQUFjRCxFQUNqRCxJQUFJOUssRUFBYSxFQUdmSyxJQUFvQjNILEtBQUswSixNQUFNL0IsaUJBQy9CWixJQUFhL0csS0FBSzBKLE1BQU0zQyxVQUN4QnNMLElBQWNyUyxLQUFLMEosTUFBTTJJLFVBRXJCMUssSUFBb0IzSCxLQUFLMEosTUFBTS9CLGdCQUNqQ0wsRUFBYXRILEtBQUswTCxtQkFDaEIxTCxLQUFLMEosTUFBTS9CLGdCQUNYM0gsS0FBSzBKLE1BQU0ySSxXQUFhclMsS0FBSzBKLE1BQU0zQyxVQUU1QkEsSUFBYS9HLEtBQUswSixNQUFNM0MsU0FDakNPLEVBQWF0SCxLQUFLMEwsbUJBQ2hCMUwsS0FBSzBKLE1BQU0vQixnQkFDWDNILEtBQUswSixNQUFNM0MsVUFFSnNMLElBQWNyUyxLQUFLMEosTUFBTTJJLFlBQ2xDL0ssRUFBYXRILEtBQUswTCxtQkFDaEIxTCxLQUFLMEosTUFBTS9CLGdCQUNYM0gsS0FBSzBKLE1BQU0ySSxZQUlmL0ssRUFBYXRILEtBQUswTCxtQkFDaEIxTCxLQUFLMEosTUFBTS9CLGdCQUNYM0gsS0FBSzBKLE1BQU0zQyxVQUlmLE1BQU1RLEVBQVd2SCxLQUFLMkwsa0JBQWtCckUsR0FHcENBLElBQWV0SCxLQUFLb0QsTUFBTWtFLFlBQWNDLElBQWF2SCxLQUFLb0QsTUFBTW1FLFVBQ2xFdkgsS0FBS3dQLFNBQVMsQ0FBRWxJLGFBQVlDLFlBRWhDLENBRUEsdUJBQUFnSSxDQUF3QjNELEdBQ3RCLE1BQU0sZ0JBQUVqRSxFQUFlLG9CQUFFSyxHQUF3QmhJLEtBQUswSixNQUNoRDRJLEVBQ21CLGlCQUFoQjFHLEVBQ0gyRyxTQUFTM0csRUFBYSxJQUN0QkEsRUFDTixJQUFJLFNBQUVsRixHQUFhMUcsS0FBSzBKLE1BQ3hCLEdBQUk0SSxJQUFpQjNLLEVBQWlCLENBQ3BDLE1BQU02SyxFQUFnQnhTLEtBQUswTCxtQkFBbUI0RyxHQUN4Q0csRUFBY3pTLEtBQUsyTCxrQkFBa0I2RyxHQUN2QzlMLEVBQVcrTCxJQUFhL0wsRUFBVytMLEdBQ3ZDekssRUFBb0JzSyxFQUFjNUwsRUFDcEMsQ0FDRixDQUVBLGdCQUFBeUwsQ0FBaUJwRSxHQUNmLElBQUl0RCxFQUNKLE1BQU0sU0FDSi9ELEVBQVEsZUFDUkMsRUFBYyxZQUNkZ0MsRUFBVyxhQUNYRSxFQUFZLGFBQ1pFLEVBQVksY0FDWk4sRUFBYSxhQUNiakIsR0FDRXhILEtBQUswSixPQUVILFNBQUVuQyxHQUFhdkgsS0FBS29ELE1BR3hCcUgsRUFERXNELElBQVlwRixFQUNQM0ksS0FBS3dMLGlCQUNIdUMsSUFBWWxGLEVBQ2RuQyxFQUFXLEVBQUlhLEVBQVdBLEVBQVdiLEVBQVcsRUFDOUNxSCxJQUFZaEYsRUFDZHhCLEVBQ0V3RyxJQUFZdEYsRUFDZDlCLEVBRUE0TCxTQUFTeEUsRUFBUyxJQUV2QnRELElBQVMvRCxHQUNYYyxFQUFhaUQsRUFFakIsQ0FFQSxNQUFBakUsR0FDRSxPQUNFLHdCQUFDNEQsRUFBZ0IsSUFDWHBLLEtBQUswSixNQUVUbkMsU0FBVXZILEtBQUtvRCxNQUFNbUUsU0FFckJELFdBQVl0SCxLQUFLb0QsTUFBTWtFLFdBQ3ZCRSxhQUFjeEgsS0FBS21TLGlCQUNuQm5LLG9CQUFxQmhJLEtBQUt1UCx5QkFHaEMsRSwrSkMvR0osa0JBRUEsVUFBZ0JuRixHQUNkLEVBQUdLLE9BQU1tQixpQkFBZ0JuQyxLQUVyQix3QkFBQ1csRUFBZ0IsSUFDWFgsRUFDSi9DLFNBQVUrRCxFQUNWOUMsZ0JBQWlCaUUsRyxzQkNFekJ4TixFQUFPRCxRQUZvQiw4QyxrTUNUM0Isa0JBT011VSxFQUFXLENBQUNqSSxFQUFXbUIsRUFBa0JqRixJQUxyQixFQUFDOEQsRUFBVzlELElBRTdCOEQsRUFEUW9CLEtBQUtJLElBQUksRUFBSXRGLEdBSzVCZ00sQ0FBa0JsSSxFQUFNOUQsR0FBa0JpRixFQUFjLEVBSTdDLEVBQUFvQyxVQUFZLENBQ3ZCakgsRUFDQTZMLEVBQ0FuSSxFQUNBbUIsRUFDQWpGLElBRUlpTSxFQUFlN0wsRUFBaUIwRCxFQUNoQ0EsRUFBTzlELEdBQ1BJLEdBQVksRUFEa0JKLEVBR2hDOEQsR0FBUW9CLEtBQUtXLE1BQU16RixFQUFXNkUsR0FBZWpGLEdBQzFCLElBQW5CQSxFQUVPa0YsS0FBS0MsS0FBSy9FLEVBQVc2RSxHQUUxQm5CLEdBQVFvQixLQUFLVyxNQUFNekYsRUFBVzZFLElBQW1DLElBQW5CakYsRUFDaENrRixLQUFLQyxLQUFLL0UsRUFBVzZFLEdBQ3BCQyxLQUFLSSxJQUFJLFVBQU1yRixpQkFBbUJELEdBRTlDOEQsRUFHSSxFQUFBeUQsY0FBZ0IsQ0FDM0JQLEVBQ0FsRCxFQUNBbUIsRUFDQWpGLEtBRUEsTUFBTUksRUFBVzRHLEVBQUtuTCxPQUN0QixJQUFLdUUsRUFBVSxNQUFPLEdBRXRCLE1BQU04TCxFQUFNSCxFQUFTakksRUFBTW1CLEVBQWFqRixHQUNsQ21NLEVBbkNXLEVBQUNELEVBQVVqSCxJQUFxQmlILEdBQU9qSCxFQUFjLEdBbUN4RG1ILENBQVdGLEVBQUtqSCxHQUV4Qm9ILEVBQVMsR0FDZixJQUFLLElBQUluUCxFQUFJaVAsRUFBT2pQLEdBQUtnUCxJQUN2QkcsRUFBT3pRLEtBQUtvTCxFQUFLOUosSUFDYkEsRUFBSSxJQUFNa0QsR0FGY2xELEdBQUssR0FJbkMsT0FBT21QLEUsV0NwRFQsT0FPQyxXQUNBLGFBRUEsSUFBSUMsRUFBUyxDQUFDLEVBQUVDLGVBRWhCLFNBQVNDLElBR1IsSUFGQSxJQUFJcEUsRUFBVSxHQUVMbEwsRUFBSSxFQUFHQSxFQUFJakQsVUFBVTRCLE9BQVFxQixJQUFLLENBQzFDLElBQUlRLEVBQU16RCxVQUFVaUQsR0FDaEJRLElBQ0gwSyxFQUFVcUUsRUFBWXJFLEVBQVNzRSxFQUFXaFAsSUFFNUMsQ0FFQSxPQUFPMEssQ0FDUixDQUVBLFNBQVNzRSxFQUFZaFAsR0FDcEIsR0FBbUIsaUJBQVJBLEdBQW1DLGlCQUFSQSxFQUNyQyxPQUFPQSxFQUdSLEdBQW1CLGlCQUFSQSxFQUNWLE1BQU8sR0FHUixHQUFJVCxNQUFNMFAsUUFBUWpQLEdBQ2pCLE9BQU84TyxFQUFXclUsTUFBTSxLQUFNdUYsR0FHL0IsR0FBSUEsRUFBSWtQLFdBQWFqVSxPQUFPSCxVQUFVb1UsV0FBYWxQLEVBQUlrUCxTQUFTQSxXQUFXQyxTQUFTLGlCQUNuRixPQUFPblAsRUFBSWtQLFdBR1osSUFBSXhFLEVBQVUsR0FFZCxJQUFLLElBQUk3SSxLQUFPN0IsRUFDWDRPLEVBQU83VCxLQUFLaUYsRUFBSzZCLElBQVE3QixFQUFJNkIsS0FDaEM2SSxFQUFVcUUsRUFBWXJFLEVBQVM3SSxJQUlqQyxPQUFPNkksQ0FDUixDQUVBLFNBQVNxRSxFQUFhdlQsRUFBTzRULEdBQzVCLE9BQUtBLEVBSUQ1VCxFQUNJQSxFQUFRLElBQU00VCxFQUdmNVQsRUFBUTRULEVBUFA1VCxDQVFULENBRXFDekIsRUFBT0QsU0FDM0NnVixFQUFXTyxRQUFVUCxFQUNyQi9VLEVBQU9ELFFBQVVnVixRQUtoQixLQUZ3QixFQUFGLFdBQ3RCLE9BQU9BLENBQ1AsVUFGb0IsT0FFcEIsWUFJSCxDQXJFQSxFLHlFQ1BBLFVBQWUsQ0FDYi9LLGdCQUFpQixFQUNqQnhCLGlCQUFrQixFQUNsQjBCLHFCQUFxQixFQUNyQkUsb0JBQW9CLEVBQ3BCMUIsWUFBWSxFQUNaSyxpQkFBa0IsS0FDbEJ1QixnQkFBaUIsS0FDakJFLGNBQWUsSUFDZkUsZUFBZ0IsSUFDaEJFLGVBQWdCLEtBQ2hCRSxnQkFBaUIsWUFDakJNLGdCQUFpQixZQUNqQkosZUFBZ0IsZ0JBQ2hCRSxpQkFBa0IsYUFDbEI1QixtQkFBb0IsQ0FBQyxHQUFJLEdBQUksR0FBSSxJQUNqQ0csb0JBQW9CLEVBQ3BCUiw4QkFBOEIsRSwrSkNiaEMsZ0JBQ0EsWUFDQSxZQUdBLFNBRU1zTSxFQUFlLFVBQU14RyxjQUFtQixNQUU5QyxNQUFNeUcsVUFBc0IsVUFBTXJOLFVBT2hDLFdBQUFvSSxDQUFZakYsR0FNVixJQUFJaEQsRUFDQWlCLEVBTkptRyxNQUFNcEUsR0FtQ1IsS0FBQWdFLG1CQUFxQixLQUNuQixNQUFNLFdBQUV6RixFQUFVLFFBQUV4QixHQUFZekcsS0FBSzBKLE1BQy9COEQsRUFBVXhOLEtBQUswSixNQUFNNkQsV0FBWUMsU0FDakMsU0FBRTlHLEVBQVEsZ0JBQUVpQixHQUFvQjNILEtBQ3RDLElBQUkrRyxFQUVGQSxFQURFL0csS0FBS3FOLHFCQUNJRyxFQUFRNkUsVUFFUnJTLEtBQUsrRyxTQUVsQixNQUFNc0IsT0FDZ0MsSUFBN0JtRixFQUFRbkYsaUJBQ1gsVUFBTUMsb0JBQ05rRixFQUFRbkYsaUJBQ1JFLE9BQ2lDLElBQTlCaUYsRUFBUWpGLGtCQUNYLFVBQU1DLG1CQUNOZ0YsRUFBUWpGLGtCQUNSWCxPQUMrQixJQUE1QjRGLEVBQVE1RixnQkFDWCxVQUFNQyxtQkFDTjJGLEVBQVE1RixnQkFDUlIsT0FDdUMsSUFBcENvRyxFQUFRcEcsd0JBQ1gsVUFBTUMsNkJBQ05tRyxFQUFRcEcsd0JBQ1JULE9BQzhCLElBQTNCNkcsRUFBUTdHLGVBQ1gsVUFBTUMsaUJBQ040RyxFQUFRN0csZUFDZCxNQUFPLElBQ0Y2RyxFQUNIdkYsYUFDQXhCLFVBQ0FnRSxLQUFNL0QsRUFDTmtGLFlBQWFqRSxFQUNiaEIsaUJBQ0FTLDBCQUNBUSxrQkFDQVcsb0JBQ0FGLG1CQUNBdEIsV0FDQVUsZ0JBQWlCK0YsRUFBUS9GLGlCQUFtQixVQUFNQyxtQkFDbERTLGVBQWdCcUYsRUFBUXJGLGdCQUFrQixVQUFNQyxnQkFDaER2QixVQUFXMkcsRUFBUTNHLFVBQ25CRyxpQkFBa0J3RyxFQUFReEcsaUJBQzFCQyxtQkFBb0J1RyxFQUFRdkcsbUJBQzVCYSxvQkFBcUIwRixFQUFRMUYsb0JBQzdCWix3QkFBeUJzRyxFQUFRdEcsd0JBQ2pDYSwwQkFBMkJ5RixFQUFRekYsMEJBQ25DVSxjQUFlK0UsRUFBUS9FLGVBQWlCLFVBQU1DLGdCQUM5Q0MsWUFBYTZFLEVBQVE3RSxhQUFlLFVBQU1DLGNBQzFDQyxhQUFjMkUsRUFBUTNFLGNBQWdCLFVBQU1DLGVBQzVDQyxhQUFjeUUsRUFBUXpFLGNBQWdCLFVBQU1DLGVBQzVDRyxhQUFjcUUsRUFBUXJFLGNBQWdCLFVBQU1DLGVBQzVDSCxjQUFldUUsRUFBUXZFLGVBQWlCLFVBQU1DLGdCQUM5Q0csZUFBZ0JtRSxFQUFRbkUsZ0JBQWtCLFVBQU1DLGlCQUNoREMsY0FBZWlFLEVBQVFqRSxlQUFpQixVQUFNQyxnQkFDOUNoQyxhQUFjeEgsS0FBS21TLGlCQUNuQm5LLG9CQUFxQmhJLEtBQUt1UCwwQkFJOUIsS0FBQW5CLDJCQUE4QkcsSUFDNUJ2TyxLQUFLdU8sY0FBZ0JBLEdBR3ZCLEtBQUFzRiwyQkFBNkIsSUFDM0I3VCxLQUFLdU8sZUFBaUJ2TyxLQUFLMEosTUFBTTZFLGNBbUJuQyxLQUFBbEIsbUJBQXFCLEtBQ25CLE1BQU13QixFQUFJLENBQUVtRSxZQUFRN1IsR0FFcEIsT0FEQW5CLEtBQUt1TyxlQUFlbE0sS0FBSyxxQkFBc0J3TSxHQUN4Q0EsRUFBRW1FLFFBNUhUaFQsS0FBS21TLGlCQUFtQm5TLEtBQUttUyxpQkFBaUI3TyxLQUFLdEQsTUFDbkRBLEtBQUs4VCxxQkFBdUI5VCxLQUFLOFQscUJBQXFCeFEsS0FBS3RELE1BQzNEQSxLQUFLdVAsd0JBQTBCdlAsS0FBS3VQLHdCQUF3QmpNLEtBQUt0RCxNQUlqRSxNQUFNd04sRUFBVTlELEVBQU02RCxXQUFZQyxRQUM1Qi9GLEVBQWtCK0YsRUFBUS9GLGlCQUFtQixVQUFNQyxtQkFJdkRoQixPQUQwQixJQUFqQjhHLEVBQVEvQyxLQUNOK0MsRUFBUS9DLFVBQ3dCLElBQTNCK0MsRUFBUTdHLGVBQ2I2RyxFQUFRN0csZUFFUixVQUFNQyxpQkFLakJlLE9BRGlDLElBQXhCNkYsRUFBUTVCLFlBQ0M0QixFQUFRNUIsWUFDYSxpQkFBdkJuRSxFQUFnQixHQUNkQSxFQUFnQixHQUFHNUgsTUFFbkI0SCxFQUFnQixHQUdwQ3pILEtBQUswRyxTQUFXQSxFQUNoQjFHLEtBQUsrRyxTQUFXeUcsRUFBUTZFLFVBQ3hCclMsS0FBSzJILGdCQUFrQkEsRUFDdkIzSCxLQUFLK1QsbUJBQXFCLElBQUksVUFDOUIvVCxLQUFLK1QsbUJBQW1CL1MsR0FBRyxnQkFBaUJoQixLQUFLOFQscUJBQ25ELENBd0VBLGtCQUFBbEcsQ0FBbUJDLEdBQ2pCLE1BQU0sT0FBRUosR0FBV0ksRUFBVU4sV0FBV0MsU0FHcEN4TixLQUFLcU4sc0JBQXdCSSxLQUNwQkksRUFBVU4sV0FBV0MsUUFBUS9DLEtBRzdCb0QsRUFBVU4sV0FBV0MsUUFBUTVCLFlBRzdCaUMsRUFBVU4sV0FBV0MsUUFBUTZFLFVBSTVDLENBUUEsb0JBQUF5QixDQUFxQkUsR0FDbkIsTUFBTXhHLEVBQVV4TixLQUFLMEosTUFBTTZELFdBQVlDLFFBQ2pDN0csT0FDOEIsSUFBM0I2RyxFQUFRN0csZUFDWCxVQUFNQyxpQkFDTjRHLEVBQVE3RyxlQUNkM0csS0FBSzBHLFVBQVcsSUFBQXNILFdBQ2RnRyxFQUNBaFUsS0FBSytHLFNBQ0wvRyxLQUFLMEcsU0FDTDFHLEtBQUsySCxnQkFDTGhCLEdBRUYzRyxLQUFLK0csU0FBV2lOLEVBQ2hCaFUsS0FBS2lVLGFBQ1AsQ0FFQSxnQkFBQTlCLENBQWlCekwsR0FDZixNQUFNLGdCQUFFaUIsR0FBb0IzSCxLQUN0QndOLEVBQVV4TixLQUFLMEosTUFBTTZELFdBQVlDLFFBRW5DQSxFQUFRaEcsY0FDVmdHLEVBQVFoRyxhQUFhZCxFQUFVaUIsR0FHakMzSCxLQUFLMEcsU0FBV0EsRUFFWjFHLEtBQUtxTixxQkFDUHJOLEtBQUs2VCw2QkFBNkJ4UixLQUNoQyxtQkFDQXFFLEVBQ0FpQixHQUlKM0gsS0FBS2lVLGFBQ1AsQ0FFQSx1QkFBQTFFLENBQXdCNUgsRUFBc0JqQixHQUM1QyxNQUFNOEcsRUFBVXhOLEtBQUswSixNQUFNNkQsV0FBWUMsUUFFbkNBLEVBQVF4RixxQkFDVndGLEVBQVF4RixvQkFBb0JMLEVBQWlCakIsR0FHL0MxRyxLQUFLMEcsU0FBV0EsRUFDaEIxRyxLQUFLMkgsZ0JBQWtCQSxFQUVuQjNILEtBQUtxTixxQkFDUHJOLEtBQUs2VCw2QkFBNkJ4UixLQUNoQyxtQkFDQXFFLEVBQ0FpQixHQUlKM0gsS0FBS2lVLGFBQ1AsQ0FFQSxNQUFBek4sR0FDRSxNQUFNME4sRUFBa0JsVSxLQUFLME4scUJBQ3ZCSCxFQUFhLElBQ2R2TixLQUFLMEosTUFBTTZELFdBQ2RDLFFBQVMwRyxHQUdYLE9BQ0Usd0JBQUNQLEVBQWExRyxTQUFRLENBQ3BCcE4sTUFBTyxDQUNMcVUsa0JBQ0FDLHFCQUFzQixDQUNwQjVHLGFBQ0FhLDJCQUE0QnBPLEtBQUtvTywyQkFDakMyRixtQkFBb0IvVCxLQUFLK1Qsc0JBSTVCL1QsS0FBSzBKLE1BQU0yRSxTQUdsQixFQUdGLFVBQWUsS0FBTSxDQUNuQnBCLFNBQVUyRyxFQUNWbkYsU0FBVWtGLEVBQWFsRixVLGtSQzFPekIsa0JBQ0EsWUFHQSxZQUNBLFlBaUVFLEVBQUEyRix5QkFqRUssVUFDUCxrQkFpRUUsRUFBQUMsMEJBakVLLFVBQ1Asa0JBaUVFLEVBQUFDLDhCQWpFSyxVQUNQLGtCQXlDQSxVQUFlLENBQUM5RyxFQUFVLENBQUMsS0FBTSxDQUMvQkwsY0FBZSxVQUNmSyxZQUdGLE1BQU0sU0FBRVAsRUFBUSxTQUFFd0IsSUFBYSxlQUV6QjhGLEVBQXdCN0ssR0FDNUIsd0JBQUN1RCxFQUFRLElBQUt2RCxHQUNaLHdCQUFDK0UsRUFBUSxLQUNMeUYsR0FBeUJ4SyxFQUFNMkUsU0FBUzZGLEtBS2hESyxFQUFxQjdKLFVBQVksQ0FDL0IyRCxTQUFVLFVBQVUvQyxLQUFLRCxZQUdkLEVBQUFtSixtQkFBcUJELEMsK0pDcEVsQyxrQkFDQSxZQUNBLFlBQ0EsWUFNQSxXQUFlLGNBQ2IsYUFMaUM3SyxHQUNqQyx3QkFBQyxVQUFlLElBQUtBLEssR0NMbkIrSyxFQUEyQixDQUFDLEVBR2hDLFNBQVNDLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlSCxFQUF5QkUsR0FDNUMsUUFBcUJ4VCxJQUFqQnlULEVBQ0gsT0FBT0EsRUFBYXpXLFFBR3JCLElBQUlDLEVBQVNxVyxFQUF5QkUsR0FBWSxDQUdqRHhXLFFBQVMsQ0FBQyxHQU9YLE9BSEEwVyxFQUFvQkYsR0FBVXZWLEtBQUtoQixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTdVcsR0FHcEV0VyxFQUFPRCxPQUNmLENDbkIwQnVXLENBQW9CLEssTURGMUNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLWxpc3QtYWRhcHRlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi1saXN0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdlLXJlc29sdmVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL2RhdGEtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnZS1idXR0b24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tc3RhbmRhbG9uZS50c3giLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tdG90YWwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tYWRhcHRlci50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc2l6ZS1wZXItcGFnZS1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi1saXN0LXN0YW5kYWxvbmUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tdG90YWwtYWRhcHRlci50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3NpemUtcGVyLXBhZ2Utb3B0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLWhhbmRsZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3N0YW5kYWxvbmUtYWRhcHRlci50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2UudHMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvY29uc3QudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc3RhdGUtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9pbmRleC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi10b3RhbC1zdGFuZGFsb25lLnRzeCIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJyZWFjdFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdQYWdpbmF0b3JcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUmVhY3RCb290c3RyYXBUYWJsZU5nUGFnaW5hdG9yXCJdID0gZmFjdG9yeShyb290W1wiUmVhY3RcIl0pO1xufSkoc2VsZiwgKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fKSA9PiB7XG5yZXR1cm4gIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFIgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgPyBSZWZsZWN0IDogbnVsbFxudmFyIFJlZmxlY3RBcHBseSA9IFIgJiYgdHlwZW9mIFIuYXBwbHkgPT09ICdmdW5jdGlvbidcbiAgPyBSLmFwcGx5XG4gIDogZnVuY3Rpb24gUmVmbGVjdEFwcGx5KHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodGFyZ2V0LCByZWNlaXZlciwgYXJncyk7XG4gIH1cblxudmFyIFJlZmxlY3RPd25LZXlzXG5pZiAoUiAmJiB0eXBlb2YgUi5vd25LZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gUi5vd25LZXlzXG59IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpO1xuICB9O1xufSBlbHNlIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpIHtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4od2FybmluZyk7XG59XG5cbnZhciBOdW1iZXJJc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBOdW1iZXJJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbm1vZHVsZS5leHBvcnRzLm9uY2UgPSBvbmNlO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25jZShlbWl0dGVyLCBuYW1lKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICBpZiAodHlwZW9mIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIHJlc29sdmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgaWYgKG5hbWUgIT09ICdlcnJvcicpIHtcbiAgICAgIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGVycm9yTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBoYW5kbGVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgJ2Vycm9yJywgaGFuZGxlciwgZmxhZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCBsaXN0ZW5lciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgIGVtaXR0ZXIub25jZShuYW1lLCBsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXR0ZXIub24obmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRXZlbnRUYXJnZXQgZG9lcyBub3QgaGF2ZSBgZXJyb3JgIGV2ZW50IHNlbWFudGljcyBsaWtlIE5vZGVcbiAgICAvLyBFdmVudEVtaXR0ZXJzLCB3ZSBkbyBub3QgbGlzdGVuIGZvciBgZXJyb3JgIGV2ZW50cyBoZXJlLlxuICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jdGlvbiB3cmFwTGlzdGVuZXIoYXJnKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGJ1aWx0aW4gYHsgb25jZTogdHJ1ZSB9YCBzdXBwb3J0IHNvIHdlXG4gICAgICAvLyBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5LlxuICAgICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIHdyYXBMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lcihhcmcpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgZW1pdHRlcik7XG4gIH1cbn1cbiIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBhcnJvdy1ib2R5LXN0eWxlOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IHBhZ2VSZXNvbHZlciBmcm9tIFwiLi9wYWdlLXJlc29sdmVyXCI7XG5pbXBvcnQgcGFnaW5hdGlvbkhhbmRsZXIgZnJvbSBcIi4vcGFnaW5hdGlvbi1oYW5kbGVyXCI7XG5pbXBvcnQgeyBQYWdpbmF0aW9uTGlzdFdpdGhBZGFwdGVyIH0gZnJvbSBcIi4vcGFnaW5hdGlvbi1saXN0LWFkYXB0ZXJcIjtcbmltcG9ydCB7IFBhZ2luYXRpb25Ub3RhbFdpdGhBZGFwdGVyIH0gZnJvbSBcIi4vcGFnaW5hdGlvbi10b3RhbC1hZGFwdGVyXCI7XG5pbXBvcnQgeyBTaXplUGVyUGFnZURyb3Bkb3duV2l0aEFkYXB0ZXIgfSBmcm9tIFwiLi9zaXplLXBlci1wYWdlLWRyb3Bkb3duLWFkYXB0ZXJcIjtcblxuY2xhc3MgUGFnaW5hdGlvbiBleHRlbmRzIHBhZ2VSZXNvbHZlcihDb21wb25lbnQpIHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHRhYmxlSWQsXG4gICAgICBjdXJyUGFnZSxcbiAgICAgIHBhZ2VTdGFydEluZGV4ID0gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWCxcbiAgICAgIHNob3dUb3RhbCA9IENvbnN0LlNIT1dfVE9UQUwsXG4gICAgICBkYXRhU2l6ZSxcbiAgICAgIHBhZ2VMaXN0UmVuZGVyZXIgPSBudWxsLFxuICAgICAgcGFnZUJ1dHRvblJlbmRlcmVyID0gbnVsbCxcbiAgICAgIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyID0gQ29uc3QuUEFHSU5BVElPTl9UT1RBTCxcbiAgICAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlID0gQ29uc3QuSElERV9QQUdFX0xJU1RfT05MWV9PTkVfUEFHRSxcbiAgICAgIHRvdGFsUGFnZXMsXG4gICAgICBsYXN0UGFnZSxcbiAgICAgIG9uUGFnZUNoYW5nZSxcbiAgICAgIHNpemVQZXJQYWdlTGlzdCA9IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVCxcbiAgICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICAgIGhpZGVTaXplUGVyUGFnZSA9IENvbnN0LkhJREVfU0laRV9QRVJfUEFHRSxcbiAgICAgIHNpemVQZXJQYWdlUmVuZGVyZXIgPSBudWxsLFxuICAgICAgc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlciA9IG51bGwsXG4gICAgICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICAgICAgYm9vdHN0cmFwNCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVBhZ2VUaXRsZSA9IGZhbHNlLFxuICAgICAgcGFnaW5hdGlvblNpemUgPSBDb25zdC5QQUdJTkFUSU9OX1NJWkUsXG4gICAgICB3aXRoRmlyc3RBbmRMYXN0ID0gQ29uc3QuV2l0aF9GSVJTVF9BTkRfTEFTVCxcbiAgICAgIGFsd2F5c1Nob3dBbGxCdG5zID0gQ29uc3QuU0hPV19BTExfUEFHRV9CVE5TLFxuICAgICAgZmlyc3RQYWdlVGV4dCA9IENvbnN0LkZJUlNUX1BBR0VfVEVYVCxcbiAgICAgIHByZVBhZ2VUZXh0ID0gQ29uc3QuUFJFX1BBR0VfVEVYVCxcbiAgICAgIG5leHRQYWdlVGV4dCA9IENvbnN0Lk5FWFRfUEFHRV9URVhULFxuICAgICAgbGFzdFBhZ2VUZXh0ID0gQ29uc3QuTEFTVF9QQUdFX1RFWFQsXG4gICAgICBuZXh0UGFnZVRpdGxlID0gQ29uc3QuTkVYVF9QQUdFX1RJVExFLFxuICAgICAgcHJlUGFnZVRpdGxlID0gQ29uc3QuUFJFX1BBR0VfVElUTEUsXG4gICAgICBmaXJzdFBhZ2VUaXRsZSA9IENvbnN0LkZJUlNUX1BBR0VfVElUTEUsXG4gICAgICBsYXN0UGFnZVRpdGxlID0gQ29uc3QuTEFTVF9QQUdFX1RJVExFLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgcGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVBhZ2VTdGF0dXMoXG4gICAgICB0aGlzLmNhbGN1bGF0ZVBhZ2VzKHRvdGFsUGFnZXMsIGxhc3RQYWdlKSxcbiAgICAgIGxhc3RQYWdlXG4gICAgKTtcbiAgICBjb25zdCBwYWdlTGlzdENsYXNzID0gY3MoXG4gICAgICBcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1wYWdpbmF0aW9uLWxpc3RcIixcbiAgICAgIFwiY29sLW1kLTYgY29sLXhzLTYgY29sLXNtLTYgY29sLWxnLTZcIixcbiAgICAgIHtcbiAgICAgICAgXCJyZWFjdC1ib290c3RyYXAtdGFibGUtcGFnaW5hdGlvbi1saXN0LWhpZGRlblwiOlxuICAgICAgICAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlICYmIHRvdGFsUGFnZXMgPT09IDEsXG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3cgcmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2luYXRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNiBjb2wteHMtNiBjb2wtc20tNiBjb2wtbGctNlwiPlxuICAgICAgICAgIDxTaXplUGVyUGFnZURyb3Bkb3duV2l0aEFkYXB0ZXJcbiAgICAgICAgICAgIGJvb3RzdHJhcDQ9e2Jvb3RzdHJhcDR9XG4gICAgICAgICAgICB0YWJsZUlkPXt0YWJsZUlkfVxuICAgICAgICAgICAgc2l6ZVBlclBhZ2VMaXN0PXtzaXplUGVyUGFnZUxpc3R9XG4gICAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e2N1cnJTaXplUGVyUGFnZX1cbiAgICAgICAgICAgIGhpZGVTaXplUGVyUGFnZT17aGlkZVNpemVQZXJQYWdlfVxuICAgICAgICAgICAgc2l6ZVBlclBhZ2VSZW5kZXJlcj17c2l6ZVBlclBhZ2VSZW5kZXJlcn1cbiAgICAgICAgICAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXI9e3NpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXJ9XG4gICAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlPXtvblNpemVQZXJQYWdlQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge3Nob3dUb3RhbCA/IChcbiAgICAgICAgICAgIDxQYWdpbmF0aW9uVG90YWxXaXRoQWRhcHRlclxuICAgICAgICAgICAgICBjdXJyUGFnZT17Y3VyclBhZ2V9XG4gICAgICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17Y3VyclNpemVQZXJQYWdlfVxuICAgICAgICAgICAgICBwYWdlU3RhcnRJbmRleD17cGFnZVN0YXJ0SW5kZXh9XG4gICAgICAgICAgICAgIGRhdGFTaXplPXtkYXRhU2l6ZX1cbiAgICAgICAgICAgICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI9e3BhZ2luYXRpb25Ub3RhbFJlbmRlcmVyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtwYWdlTGlzdFJlbmRlcmVyID8gKFxuICAgICAgICAgIHBhZ2VMaXN0UmVuZGVyZXIoe1xuICAgICAgICAgICAgcGFnZXMsXG4gICAgICAgICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cGFnZUxpc3RDbGFzc30+XG4gICAgICAgICAgICA8UGFnaW5hdGlvbkxpc3RXaXRoQWRhcHRlclxuICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgY3VyclBhZ2U9e2N1cnJQYWdlfVxuICAgICAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e2N1cnJTaXplUGVyUGFnZX1cbiAgICAgICAgICAgICAgcGFnZVN0YXJ0SW5kZXg9e3BhZ2VTdGFydEluZGV4fVxuICAgICAgICAgICAgICBsYXN0UGFnZT17bGFzdFBhZ2V9XG4gICAgICAgICAgICAgIHRvdGFsUGFnZXM9e3RvdGFsUGFnZXN9XG4gICAgICAgICAgICAgIHBhZ2VCdXR0b25SZW5kZXJlcj17cGFnZUJ1dHRvblJlbmRlcmVyfVxuICAgICAgICAgICAgICBvblBhZ2VDaGFuZ2U9e29uUGFnZUNoYW5nZX1cbiAgICAgICAgICAgICAgcGFnaW5hdGlvblNpemU9e3BhZ2luYXRpb25TaXplfVxuICAgICAgICAgICAgICB3aXRoRmlyc3RBbmRMYXN0PXt3aXRoRmlyc3RBbmRMYXN0fVxuICAgICAgICAgICAgICBmaXJzdFBhZ2VUZXh0PXtmaXJzdFBhZ2VUZXh0fVxuICAgICAgICAgICAgICBwcmVQYWdlVGV4dD17cHJlUGFnZVRleHR9XG4gICAgICAgICAgICAgIG5leHRQYWdlVGV4dD17bmV4dFBhZ2VUZXh0fVxuICAgICAgICAgICAgICBsYXN0UGFnZVRleHQ9e2xhc3RQYWdlVGV4dH1cbiAgICAgICAgICAgICAgYWx3YXlzU2hvd0FsbEJ0bnM9e2Fsd2F5c1Nob3dBbGxCdG5zfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuLy8gUGFnaW5hdGlvbi5wcm9wVHlwZXMgPSB7XG4vLyAgIGRhdGFTaXplOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4vLyAgIHNpemVQZXJQYWdlTGlzdDogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4vLyAgIGN1cnJQYWdlOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4vLyAgIGN1cnJTaXplUGVyUGFnZTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuLy8gICBvblBhZ2VDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIGRpc2FibGVQYWdlVGl0bGU6IFByb3BUeXBlcy5ib29sLFxuLy8gICBwYWdlU3RhcnRJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbi8vICAgcGFnaW5hdGlvblNpemU6IFByb3BUeXBlcy5udW1iZXIsXG4vLyAgIHNob3dUb3RhbDogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIHBhZ2VMaXN0UmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuLy8gICBwYWdlQnV0dG9uUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuLy8gICBzaXplUGVyUGFnZVJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbi8vICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuLy8gICBzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbi8vICAgZmlyc3RQYWdlVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm5vZGVdKSxcbi8vICAgcHJlUGFnZVRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5ub2RlXSksXG4vLyAgIG5leHRQYWdlVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm5vZGVdKSxcbi8vICAgbGFzdFBhZ2VUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubm9kZV0pLFxuLy8gICBuZXh0UGFnZVRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBwcmVQYWdlVGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGZpcnN0UGFnZVRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBsYXN0UGFnZVRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICB3aXRoRmlyc3RBbmRMYXN0OiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgYWx3YXlzU2hvd0FsbEJ0bnM6IFByb3BUeXBlcy5ib29sLFxuLy8gICBoaWRlU2l6ZVBlclBhZ2U6IFByb3BUeXBlcy5ib29sLFxuLy8gICBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZTogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGJvb3RzdHJhcDQ6IFByb3BUeXBlcy5ib29sLFxuLy8gfTtcblxuLy8gUGFnaW5hdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGRpc2FibGVQYWdlVGl0bGU6IGZhbHNlLFxuLy8gICBib290c3RyYXA0OiBmYWxzZSxcbi8vICAgcGFnZVN0YXJ0SW5kZXg6IENvbnN0LlBBR0VfU1RBUlRfSU5ERVgsXG4vLyAgIHBhZ2luYXRpb25TaXplOiBDb25zdC5QQUdJTkFUSU9OX1NJWkUsXG4vLyAgIHdpdGhGaXJzdEFuZExhc3Q6IENvbnN0LldpdGhfRklSU1RfQU5EX0xBU1QsXG4vLyAgIGFsd2F5c1Nob3dBbGxCdG5zOiBDb25zdC5TSE9XX0FMTF9QQUdFX0JUTlMsXG4vLyAgIHNob3dUb3RhbDogQ29uc3QuU0hPV19UT1RBTCxcbi8vICAgcGFnZUxpc3RSZW5kZXJlcjogbnVsbCxcbi8vICAgcGFnZUJ1dHRvblJlbmRlcmVyOiBudWxsLFxuLy8gICBzaXplUGVyUGFnZVJlbmRlcmVyOiBudWxsLFxuLy8gICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcjogQ29uc3QuUEFHSU5BVElPTl9UT1RBTCxcbi8vICAgc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcjogbnVsbCxcbi8vICAgZmlyc3RQYWdlVGV4dDogQ29uc3QuRklSU1RfUEFHRV9URVhULFxuLy8gICBwcmVQYWdlVGV4dDogQ29uc3QuUFJFX1BBR0VfVEVYVCxcbi8vICAgbmV4dFBhZ2VUZXh0OiBDb25zdC5ORVhUX1BBR0VfVEVYVCxcbi8vICAgbGFzdFBhZ2VUZXh0OiBDb25zdC5MQVNUX1BBR0VfVEVYVCxcbi8vICAgc2l6ZVBlclBhZ2VMaXN0OiBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1QsXG4vLyAgIG5leHRQYWdlVGl0bGU6IENvbnN0Lk5FWFRfUEFHRV9USVRMRSxcbi8vICAgcHJlUGFnZVRpdGxlOiBDb25zdC5QUkVfUEFHRV9USVRMRSxcbi8vICAgZmlyc3RQYWdlVGl0bGU6IENvbnN0LkZJUlNUX1BBR0VfVElUTEUsXG4vLyAgIGxhc3RQYWdlVGl0bGU6IENvbnN0LkxBU1RfUEFHRV9USVRMRSxcbi8vICAgaGlkZVNpemVQZXJQYWdlOiBDb25zdC5ISURFX1NJWkVfUEVSX1BBR0UsXG4vLyAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlOiBDb25zdC5ISURFX1BBR0VfTElTVF9PTkxZX09ORV9QQUdFLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgcGFnaW5hdGlvbkhhbmRsZXIoUGFnaW5hdGlvbik7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgcGFnZVJlc29sdmVyIGZyb20gXCIuL3BhZ2UtcmVzb2x2ZXJcIjtcbmltcG9ydCBQYWdpbmF0aW9uTGlzdCBmcm9tIFwiLi9wYWdpbmF0aW9uLWxpc3RcIjtcblxuY29uc3QgcGFnaW5hdGlvbkxpc3RBZGFwdGVyID0gKFdyYXBwZWRDb21wb25lbnQ6IGFueSkgPT5cbiAgY2xhc3MgUGFnaW5hdGlvbkxpc3RBZGFwdGVyIGV4dGVuZHMgcGFnZVJlc29sdmVyKENvbXBvbmVudCkge1xuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbGFzdFBhZ2UsXG4gICAgICAgIHRvdGFsUGFnZXMsXG4gICAgICAgIHBhZ2VCdXR0b25SZW5kZXJlcixcbiAgICAgICAgb25QYWdlQ2hhbmdlLFxuICAgICAgICBkaXNhYmxlUGFnZVRpdGxlLFxuICAgICAgICBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgcGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVBhZ2VTdGF0dXMoXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlUGFnZXModG90YWxQYWdlcywgbGFzdFBhZ2UpLFxuICAgICAgICBsYXN0UGFnZSxcbiAgICAgICAgZGlzYWJsZVBhZ2VUaXRsZVxuICAgICAgKTtcbiAgICAgIGlmICh0b3RhbFBhZ2VzID09PSAxICYmIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgICBwYWdlQnV0dG9uUmVuZGVyZXI9e3BhZ2VCdXR0b25SZW5kZXJlcn1cbiAgICAgICAgICBvblBhZ2VDaGFuZ2U9e29uUGFnZUNoYW5nZX1cbiAgICAgICAgICBwYWdlcz17cGFnZXN9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuZXhwb3J0IGNvbnN0IFBhZ2luYXRpb25MaXN0V2l0aEFkYXB0ZXIgPSBwYWdpbmF0aW9uTGlzdEFkYXB0ZXIoUGFnaW5hdGlvbkxpc3QpO1xuZXhwb3J0IGRlZmF1bHQgcGFnaW5hdGlvbkxpc3RBZGFwdGVyO1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgUGFnZUJ1dHRvbiBmcm9tIFwiLi9wYWdlLWJ1dHRvblwiO1xuXG5jb25zdCBQYWdpbmF0b25MaXN0ID0gKHByb3BzOiBhbnkpID0+IChcbiAgPHVsIGNsYXNzTmFtZT1cInBhZ2luYXRpb24gcmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2UtYnRucy11bFwiPlxuICAgIHtwcm9wcy5wYWdlcy5tYXAoKHBhZ2VQcm9wczogYW55KSA9PiB7XG4gICAgICBpZiAocHJvcHMucGFnZUJ1dHRvblJlbmRlcmVyKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoXG4gICAgICAgICAgcHJvcHMucGFnZUJ1dHRvblJlbmRlcmVyKHtcbiAgICAgICAgICAgIC4uLnBhZ2VQcm9wcyxcbiAgICAgICAgICAgIG9uUGFnZUNoYW5nZTogcHJvcHMub25QYWdlQ2hhbmdlLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHsga2V5OiBwYWdlUHJvcHMucGFnZSB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8UGFnZUJ1dHRvblxuICAgICAgICAgIGtleT17cGFnZVByb3BzLnBhZ2V9XG4gICAgICAgICAgey4uLnBhZ2VQcm9wc31cbiAgICAgICAgICBvblBhZ2VDaGFuZ2U9e3Byb3BzLm9uUGFnZUNoYW5nZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSl9XG4gIDwvdWw+XG4pO1xuXG5QYWdpbmF0b25MaXN0LnByb3BUeXBlcyA9IHtcbiAgcGFnZXM6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBwYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgICAgUHJvcFR5cGVzLm5vZGUsXG4gICAgICAgIFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBdKSxcbiAgICAgIGFjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBkaXNhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pXG4gICkuaXNSZXF1aXJlZCxcbiAgb25QYWdlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBwYWdlQnV0dG9uUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxufTtcblxuLy8gUGFnaW5hdG9uTGlzdC5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIHBhZ2VCdXR0b25SZW5kZXJlcjogbnVsbCxcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2luYXRvbkxpc3Q7XG4iLCIvKiBlc2xpbnQgbm8tbWl4ZWQtb3BlcmF0b3JzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgQ29uc3QgZnJvbSBcIi4vY29uc3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgKEV4dGVuZEJhc2U6IGFueSkgPT5cbiAgY2xhc3MgUGFnZVJlc29sdmVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHR5cGVvZiBFeHRlbmRCYXNlPiB7XG4gICAgYmFja1RvUHJldlBhZ2UoKSB7XG4gICAgICBjb25zdCB7IGN1cnJQYWdlLCBwYWdlU3RhcnRJbmRleCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiBjdXJyUGFnZSAtIDEgPCBwYWdlU3RhcnRJbmRleCA/IHBhZ2VTdGFydEluZGV4IDogY3VyclBhZ2UgLSAxO1xuICAgIH1cblxuICAgIGluaXRpYWxTdGF0ZSgpIHtcbiAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZSgpO1xuICAgICAgY29uc3QgbGFzdFBhZ2UgPSB0aGlzLmNhbGN1bGF0ZUxhc3RQYWdlKHRvdGFsUGFnZXMpO1xuICAgICAgcmV0dXJuIHsgdG90YWxQYWdlcywgbGFzdFBhZ2UgfTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVUb3RhbFBhZ2UoXG4gICAgICBzaXplUGVyUGFnZSA9IHRoaXMucHJvcHMuY3VyclNpemVQZXJQYWdlLFxuICAgICAgZGF0YVNpemUgPSB0aGlzLnByb3BzLmRhdGFTaXplXG4gICAgKSB7XG4gICAgICByZXR1cm4gTWF0aC5jZWlsKGRhdGFTaXplIC8gc2l6ZVBlclBhZ2UpO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUxhc3RQYWdlKHRvdGFsUGFnZXM6IGFueSkge1xuICAgICAgY29uc3QgeyBwYWdlU3RhcnRJbmRleCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiBwYWdlU3RhcnRJbmRleCArIHRvdGFsUGFnZXMgLSAxO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUZyb21UbygpIHtcbiAgICAgIGNvbnN0IHsgZGF0YVNpemUsIGN1cnJQYWdlLCBjdXJyU2l6ZVBlclBhZ2UsIHBhZ2VTdGFydEluZGV4IH0gPVxuICAgICAgICB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5hYnMoQ29uc3QuUEFHRV9TVEFSVF9JTkRFWCAtIHBhZ2VTdGFydEluZGV4KTtcblxuICAgICAgbGV0IGZyb20gPSAoY3VyclBhZ2UgLSBwYWdlU3RhcnRJbmRleCkgKiBjdXJyU2l6ZVBlclBhZ2U7XG4gICAgICBmcm9tID0gZGF0YVNpemUgPT09IDAgPyAwIDogZnJvbSArIDE7XG4gICAgICBsZXQgdG8gPSBNYXRoLm1pbihjdXJyU2l6ZVBlclBhZ2UgKiAoY3VyclBhZ2UgKyBvZmZzZXQpLCBkYXRhU2l6ZSk7XG4gICAgICBpZiAodG8gPiBkYXRhU2l6ZSkgdG8gPSBkYXRhU2l6ZTtcblxuICAgICAgcmV0dXJuIFtmcm9tLCB0b107XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlUGFnZXModG90YWxQYWdlczogYW55LCBsYXN0UGFnZTogYW55KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGN1cnJQYWdlLFxuICAgICAgICBwYWdpbmF0aW9uU2l6ZSxcbiAgICAgICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgICAgIHdpdGhGaXJzdEFuZExhc3QsXG4gICAgICAgIGZpcnN0UGFnZVRleHQsXG4gICAgICAgIHByZVBhZ2VUZXh0LFxuICAgICAgICBuZXh0UGFnZVRleHQsXG4gICAgICAgIGxhc3RQYWdlVGV4dCxcbiAgICAgICAgYWx3YXlzU2hvd0FsbEJ0bnMsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgbGV0IHBhZ2VzOiBhbnkgPSBbXTtcbiAgICAgIGxldCBlbmRQYWdlID0gdG90YWxQYWdlcztcbiAgICAgIGlmIChlbmRQYWdlIDw9IDApIHJldHVybiBbXTtcblxuICAgICAgbGV0IHN0YXJ0UGFnZSA9IE1hdGgubWF4KFxuICAgICAgICBjdXJyUGFnZSAtIE1hdGguZmxvb3IocGFnaW5hdGlvblNpemUgLyAyKSxcbiAgICAgICAgcGFnZVN0YXJ0SW5kZXhcbiAgICAgICk7XG4gICAgICBlbmRQYWdlID0gc3RhcnRQYWdlICsgcGFnaW5hdGlvblNpemUgLSAxO1xuXG4gICAgICBpZiAoZW5kUGFnZSA+IGxhc3RQYWdlKSB7XG4gICAgICAgIGVuZFBhZ2UgPSBsYXN0UGFnZTtcbiAgICAgICAgc3RhcnRQYWdlID0gZW5kUGFnZSAtIHBhZ2luYXRpb25TaXplICsgMTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFsd2F5c1Nob3dBbGxCdG5zKSB7XG4gICAgICAgIGlmICh3aXRoRmlyc3RBbmRMYXN0KSB7XG4gICAgICAgICAgcGFnZXMgPSBbZmlyc3RQYWdlVGV4dCwgcHJlUGFnZVRleHRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhZ2VzID0gW3ByZVBhZ2VUZXh0XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHN0YXJ0UGFnZSAhPT0gcGFnZVN0YXJ0SW5kZXggJiZcbiAgICAgICAgdG90YWxQYWdlcyA+IHBhZ2luYXRpb25TaXplICYmXG4gICAgICAgIHdpdGhGaXJzdEFuZExhc3QgJiZcbiAgICAgICAgcGFnZXMubGVuZ3RoID09PSAwXG4gICAgICApIHtcbiAgICAgICAgcGFnZXMgPSBbZmlyc3RQYWdlVGV4dCwgcHJlUGFnZVRleHRdO1xuICAgICAgfSBlbHNlIGlmICh0b3RhbFBhZ2VzID4gMSAmJiBwYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcGFnZXMgPSBbcHJlUGFnZVRleHRdO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gc3RhcnRQYWdlOyBpIDw9IGVuZFBhZ2U7IGkgKz0gMSkge1xuICAgICAgICBpZiAoaSA+PSBwYWdlU3RhcnRJbmRleCkgcGFnZXMucHVzaChpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFsd2F5c1Nob3dBbGxCdG5zIHx8IChlbmRQYWdlIDw9IGxhc3RQYWdlICYmIHBhZ2VzLmxlbmd0aCA+IDEpKSB7XG4gICAgICAgIHBhZ2VzLnB1c2gobmV4dFBhZ2VUZXh0KTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgKGVuZFBhZ2UgIT09IGxhc3RQYWdlICYmIHdpdGhGaXJzdEFuZExhc3QpIHx8XG4gICAgICAgICh3aXRoRmlyc3RBbmRMYXN0ICYmIGFsd2F5c1Nob3dBbGxCdG5zKVxuICAgICAgKSB7XG4gICAgICAgIHBhZ2VzLnB1c2gobGFzdFBhZ2VUZXh0KTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgKChlbmRQYWdlIDw9IGxhc3RQYWdlICYmIHBhZ2VzLmxlbmd0aCA+IDEpIHx8IGFsd2F5c1Nob3dBbGxCdG5zKSB7XG4gICAgICAvLyAgIHBhZ2VzLnB1c2gobmV4dFBhZ2VUZXh0KTtcbiAgICAgIC8vIH1cbiAgICAgIC8vIGlmIChlbmRQYWdlICE9PSBsYXN0UGFnZSAmJiB3aXRoRmlyc3RBbmRMYXN0KSB7XG4gICAgICAvLyAgIHBhZ2VzLnB1c2gobGFzdFBhZ2VUZXh0KTtcbiAgICAgIC8vIH1cblxuICAgICAgcmV0dXJuIHBhZ2VzO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZVBhZ2VTdGF0dXMocGFnZXMgPSBbXSwgbGFzdFBhZ2U6IGFueSwgZGlzYWJsZVBhZ2VUaXRsZSA9IGZhbHNlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGN1cnJQYWdlLFxuICAgICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgICAgZmlyc3RQYWdlVGV4dCxcbiAgICAgICAgcHJlUGFnZVRleHQsXG4gICAgICAgIG5leHRQYWdlVGV4dCxcbiAgICAgICAgbGFzdFBhZ2VUZXh0LFxuICAgICAgICBhbHdheXNTaG93QWxsQnRucyxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgaXNTdGFydCA9IChwYWdlOiBhbnkpID0+XG4gICAgICAgIGN1cnJQYWdlID09PSBwYWdlU3RhcnRJbmRleCAmJlxuICAgICAgICAocGFnZSA9PT0gZmlyc3RQYWdlVGV4dCB8fCBwYWdlID09PSBwcmVQYWdlVGV4dCk7XG4gICAgICBjb25zdCBpc0VuZCA9IChwYWdlOiBhbnkpID0+XG4gICAgICAgIGN1cnJQYWdlID09PSBsYXN0UGFnZSAmJlxuICAgICAgICAocGFnZSA9PT0gbmV4dFBhZ2VUZXh0IHx8IHBhZ2UgPT09IGxhc3RQYWdlVGV4dCk7XG5cbiAgICAgIHJldHVybiBwYWdlc1xuICAgICAgICAuZmlsdGVyKChwYWdlKSA9PiB7XG4gICAgICAgICAgaWYgKGFsd2F5c1Nob3dBbGxCdG5zKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICEoaXNTdGFydChwYWdlKSB8fCBpc0VuZChwYWdlKSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoKHBhZ2UpID0+IHtcbiAgICAgICAgICBsZXQgdGl0bGU6IGFueTtcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBwYWdlID09PSBjdXJyUGFnZTtcbiAgICAgICAgICBjb25zdCBkaXNhYmxlZCA9IGlzU3RhcnQocGFnZSkgfHwgaXNFbmQocGFnZSk7XG5cbiAgICAgICAgICBpZiAocGFnZSA9PT0gbmV4dFBhZ2VUZXh0KSB7XG4gICAgICAgICAgICB0aXRsZSA9IHRoaXMucHJvcHMubmV4dFBhZ2VUaXRsZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhZ2UgPT09IHByZVBhZ2VUZXh0KSB7XG4gICAgICAgICAgICB0aXRsZSA9IHRoaXMucHJvcHMucHJlUGFnZVRpdGxlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFnZSA9PT0gZmlyc3RQYWdlVGV4dCkge1xuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLnByb3BzLmZpcnN0UGFnZVRpdGxlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFnZSA9PT0gbGFzdFBhZ2VUZXh0KSB7XG4gICAgICAgICAgICB0aXRsZSA9IHRoaXMucHJvcHMubGFzdFBhZ2VUaXRsZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGl0bGUgPSBgJHtwYWdlfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcGFnZVJlc3VsdCA9IHsgcGFnZSwgYWN0aXZlLCBkaXNhYmxlZCwgdGl0bGUgfTtcbiAgICAgICAgICBpZiAoIWRpc2FibGVQYWdlVGl0bGUpIHtcbiAgICAgICAgICAgIHBhZ2VSZXN1bHQudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHBhZ2VSZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZVNpemVQZXJQYWdlU3RhdHVzKCkge1xuICAgICAgY29uc3QgeyBzaXplUGVyUGFnZUxpc3QgfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gc2l6ZVBlclBhZ2VMaXN0Lm1hcCgoX3NpemVQZXJQYWdlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcGFnZVRleHQgPVxuICAgICAgICAgIHR5cGVvZiBfc2l6ZVBlclBhZ2UudGV4dCAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgPyBfc2l6ZVBlclBhZ2UudGV4dFxuICAgICAgICAgICAgOiBfc2l6ZVBlclBhZ2U7XG4gICAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPVxuICAgICAgICAgIHR5cGVvZiBfc2l6ZVBlclBhZ2UudmFsdWUgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgID8gX3NpemVQZXJQYWdlLnZhbHVlXG4gICAgICAgICAgICA6IF9zaXplUGVyUGFnZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0ZXh0OiBgJHtwYWdlVGV4dH1gLFxuICAgICAgICAgIHBhZ2U6IHBhZ2VOdW1iZXIsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLWxvbmVseS1pZjogMCAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyUHJvcHMgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IHsgYWxpZ25QYWdlLCBnZXRCeUN1cnJQYWdlIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IFBhZ2luYXRpb24gZnJvbSBcIi4vcGFnaW5hdGlvblwiO1xuaW1wb3J0IGNyZWF0ZUJhc2VDb250ZXh0IGZyb20gXCIuL3N0YXRlLWNvbnRleHRcIjtcblxuY29uc3QgeyBQcm92aWRlciB9ID0gY3JlYXRlQmFzZUNvbnRleHQoKTtcblxuY29uc3QgUGFnaW5hdGlvbkRhdGFDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxhbnk+KG51bGwpO1xuXG5jbGFzcyBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXIge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGRhdGE6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIHJlbW90ZUVtaXR0ZXI6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBpc1JlbW90ZVBhZ2luYXRpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIH07XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKG5leHRQcm9wczogUGFnaW5hdGlvbkRhdGFQcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKG5leHRQcm9wcyk7XG4gICAgY29uc3QgeyBjdXJyU2l6ZVBlclBhZ2UgfSA9IHRoaXM7XG4gICAgY29uc3QgeyBjdXN0b20sIG9uUGFnZUNoYW5nZSB9ID0gbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucztcblxuICAgIGNvbnN0IHBhZ2VTdGFydEluZGV4ID1cbiAgICAgIHR5cGVvZiBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnBhZ2VTdGFydEluZGV4ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy5wYWdlU3RhcnRJbmRleFxuICAgICAgICA6IENvbnN0LlBBR0VfU1RBUlRfSU5ERVg7XG5cbiAgICAvLyB1c2VyIHNob3VsZCBhbGlnbiB0aGUgcGFnZSB3aGVuIHRoZSBwYWdlIGlzIG5vdCBmaXQgdG8gdGhlIGRhdGEgc2l6ZSB3aGVuIHJlbW90ZSBlbmFibGVcbiAgICBpZiAoIXRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkgJiYgIWN1c3RvbSkge1xuICAgICAgY29uc3QgbmV3UGFnZSA9IGFsaWduUGFnZShcbiAgICAgICAgbmV4dFByb3BzLmRhdGEubGVuZ3RoLFxuICAgICAgICB0aGlzLnByb3BzLmRhdGEubGVuZ3RoLFxuICAgICAgICB0aGlzLmN1cnJQYWdlLFxuICAgICAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgIHBhZ2VTdGFydEluZGV4XG4gICAgICApO1xuXG4gICAgICBpZiAodGhpcy5jdXJyUGFnZSAhPT0gbmV3UGFnZSkge1xuICAgICAgICBpZiAob25QYWdlQ2hhbmdlKSB7XG4gICAgICAgICAgb25QYWdlQ2hhbmdlKG5ld1BhZ2UsIGN1cnJTaXplUGVyUGFnZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyUGFnZSA9IG5ld1BhZ2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIG5leHRQcm9wcy5vbkRhdGFTaXplQ2hhbmdlICYmXG4gICAgICBuZXh0UHJvcHMuZGF0YS5sZW5ndGggIT09IHRoaXMucHJvcHMuZGF0YS5sZW5ndGhcbiAgICApIHtcbiAgICAgIG5leHRQcm9wcy5vbkRhdGFTaXplQ2hhbmdlKHsgZGF0YVNpemU6IHRoaXMucHJvcHMuZGF0YS5sZW5ndGggfSk7XG4gICAgfVxuICB9XG5cbiAgaXNSZW1vdGVQYWdpbmF0aW9uID0gKCkgPT4gdGhpcy5wcm9wcy5pc1JlbW90ZVBhZ2luYXRpb24oKTtcblxuICByZW5kZXJEZWZhdWx0UGFnaW5hdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyEuY3VzdG9tKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBhZ2U6IGN1cnJQYWdlLFxuICAgICAgICBzaXplUGVyUGFnZTogY3VyclNpemVQZXJQYWdlLFxuICAgICAgICBkYXRhU2l6ZSxcbiAgICAgICAgLi4ucmVzdFxuICAgICAgfSA9IHRoaXMuZ2V0UGFnaW5hdGlvblByb3BzKCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8UGFnaW5hdGlvblxuICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgIGtleT1cInBhZ2luYXRpb25cIlxuICAgICAgICAgIGRhdGFTaXplPXtkYXRhU2l6ZSB8fCB0aGlzLnByb3BzLmRhdGEubGVuZ3RofVxuICAgICAgICAgIGN1cnJQYWdlPXtjdXJyUGFnZX1cbiAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e2N1cnJTaXplUGVyUGFnZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uIS5vcHRpb25zITtcbiAgICBjb25zdCBjdXJyU2l6ZVBlclBhZ2UgPSBvcHRpb25zLnNpemVQZXJQYWdlID8/IHRoaXMuY3VyclNpemVQZXJQYWdlO1xuICAgIGNvbnN0IHBhZ2VTdGFydEluZGV4ID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnBhZ2VTdGFydEluZGV4ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWFxuICAgICAgICA6IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXg7XG5cbiAgICAvLyB3b3JrYXJvdW5kIGFuIGlzc3VlIHdpdGggY3VyclBhZ2UgaXMgbm90IDEsIGJ1dCBkYXRhIHNpemUgaXMgbGVzcyB0aGFuIGN1cnJTaXplUGVyUGFnZVxuICAgIC8vIHdoZW4gU2VhcmNoQmFyIGlucHV0IGNoYW5nZWQsIGNvbXBvbmVudERpZFVwZGF0ZSBpbiB0aGUgU0FNRSBUb29sa2l0IHVwZGF0ZWQgKHNlYXJjaGluZyB0aGUgZGF0YSlcbiAgICAvLyBzZWNvbmRseSBhZnRlciBjb21wb25lbnREaWRVcGRhdGUgKGNhbGN1bGF0aW5nIGN1cnJQYWdlKSBpbiB0aGlzIHBhY2thZ2UgdHJpZ2dlcmVkIGF0IGZpcnN0XG4gICAgbGV0IHsgZGF0YSB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgY3VyclBhZ2UgPSBvcHRpb25zLnBhZ2UgPz8gdGhpcy5jdXJyUGFnZTtcblxuICAgIGlmICghdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSAmJiBkYXRhLmxlbmd0aCA8PSAoY3VyclBhZ2UgLSAxKSAqIGN1cnJTaXplUGVyUGFnZSkge1xuICAgICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguZmxvb3IoZGF0YS5sZW5ndGggLyBjdXJyU2l6ZVBlclBhZ2UpICsgMTtcbiAgICAgIGN1cnJQYWdlID0gY3VyclBhZ2UgPiB0b3RhbFBhZ2VzID8gdG90YWxQYWdlcyA6IGN1cnJQYWdlO1xuICAgICAgdGhpcy5jdXJyUGFnZSA9IGN1cnJQYWdlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpKSB7XG4gICAgICB0aGlzLmN1cnJQYWdlID0gY3VyclBhZ2U7XG4gICAgfVxuXG4gICAgZGF0YSA9IHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKClcbiAgICAgID8gZGF0YVxuICAgICAgOiBnZXRCeUN1cnJQYWdlKGRhdGEsIGN1cnJQYWdlLCBjdXJyU2l6ZVBlclBhZ2UsIHBhZ2VTdGFydEluZGV4KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UGFnaW5hdGlvbkRhdGFDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgIHZhbHVlPXt7IGRhdGEsIHNldFJlbW90ZUVtaXR0ZXI6IHRoaXMuc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgIHt0aGlzLnJlbmRlckRlZmF1bHRQYWdpbmF0aW9uKCl9XG4gICAgICA8L1BhZ2luYXRpb25EYXRhQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyLFxuICBDb25zdW1lcjogUGFnaW5hdGlvbkRhdGFDb250ZXh0LkNvbnN1bWVyLFxufSk7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIFBhZ2VCdXR0b25Qcm9wcyB7XG4gIG9uUGFnZUNoYW5nZTogKHBhZ2U6IGFueSkgPT4gdm9pZDtcbiAgcGFnZTogUmVhY3QuUmVhY3ROb2RlIHwgbnVtYmVyIHwgc3RyaW5nO1xuICBhY3RpdmU6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xufVxuXG5jbGFzcyBQYWdlQnV0dG9uIGV4dGVuZHMgQ29tcG9uZW50PFBhZ2VCdXR0b25Qcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cblxuICBoYW5kbGVDbGljayhlOiBhbnkpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wcm9wcy5vblBhZ2VDaGFuZ2UodGhpcy5wcm9wcy5wYWdlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHBhZ2UsIHRpdGxlLCBhY3RpdmUsIGRpc2FibGVkLCBjbGFzc05hbWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY2xhc3NlcyA9IGNzKFxuICAgICAge1xuICAgICAgICBhY3RpdmUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBcInBhZ2UtaXRlbVwiOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGNsYXNzTmFtZVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGxpIGNsYXNzTmFtZT17Y2xhc3Nlc30gdGl0bGU9e3RpdGxlfT5cbiAgICAgICAgPGEgaHJlZj1cIiNcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSBjbGFzc05hbWU9XCJwYWdlLWxpbmtcIj5cbiAgICAgICAgICB7cGFnZX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICApO1xuICB9XG59XG5cbi8vIFBhZ2VCdXR0b24ucHJvcFR5cGVzID0ge1xuLy8gICBvblBhZ2VDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIHBhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5ub2RlLFxuLy8gICAgIFByb3BUeXBlcy5udW1iZXIsXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgXSkuaXNSZXF1aXJlZCxcbi8vICAgYWN0aXZlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuLy8gICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2VCdXR0b247XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgcGFnaW5hdGlvbkhhbmRsZXIgZnJvbSBcIi4vcGFnaW5hdGlvbi1oYW5kbGVyXCI7XG5pbXBvcnQgU2l6ZVBlclBhZ2VEcm9wZG93biBmcm9tIFwiLi9zaXplLXBlci1wYWdlLWRyb3Bkb3duXCI7XG5pbXBvcnQgc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIgZnJvbSBcIi4vc2l6ZS1wZXItcGFnZS1kcm9wZG93bi1hZGFwdGVyXCI7XG5pbXBvcnQgc3RhbmRhbG9uZUFkYXB0ZXIgZnJvbSBcIi4vc3RhbmRhbG9uZS1hZGFwdGVyXCI7XG5cbmNvbnN0IFNpemVQZXJQYWdlRHJvcGRvd25TdGFuZGFsb25lID0gKHByb3BzOiBhbnkpID0+IChcbiAgPFNpemVQZXJQYWdlRHJvcGRvd24gey4uLnByb3BzfSAvPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgc3RhbmRhbG9uZUFkYXB0ZXIoXG4gIHBhZ2luYXRpb25IYW5kbGVyKHNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyKFNpemVQZXJQYWdlRHJvcGRvd25TdGFuZGFsb25lKSlcbik7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fOyIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuY29uc3QgUGFnaW5hdGlvblRvdGFsID0gKHByb3BzOiBhbnkpID0+IHtcbiAgaWYgKHByb3BzLnBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyKSB7XG4gICAgcmV0dXJuIHByb3BzLnBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyKHByb3BzLmZyb20sIHByb3BzLnRvLCBwcm9wcy5kYXRhU2l6ZSk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8c3BhbiBjbGFzc05hbWU9XCJyZWFjdC1ib290c3RyYXAtdGFibGUtcGFnaW5hdGlvbi10b3RhbFwiPlxuICAgICAgJm5ic3A7U2hvd2luZyByb3dzIHtwcm9wcy5mcm9tfSB0byZuYnNwO3twcm9wcy50b30gb2YmbmJzcDtcbiAgICAgIHtwcm9wcy5kYXRhU2l6ZX1cbiAgICA8L3NwYW4+XG4gICk7XG59O1xuXG5QYWdpbmF0aW9uVG90YWwucHJvcFR5cGVzID0ge1xuICBmcm9tOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHRvOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIGRhdGFTaXplOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbn07XG5cbi8vIFBhZ2luYXRpb25Ub3RhbC5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyOiB1bmRlZmluZWQsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBQYWdpbmF0aW9uVG90YWw7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBQYWdpbmF0aW9uQ2hpbGRQcm9wcyB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHBhZ2VSZXNvbHZlciBmcm9tIFwiLi9wYWdlLXJlc29sdmVyXCI7XG5pbXBvcnQgU2l6ZVBlclBhZ2VEcm9wRG93biBmcm9tIFwiLi9zaXplLXBlci1wYWdlLWRyb3Bkb3duXCI7XG5cbmNvbnN0IHNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyID0gKFdyYXBwZWRDb21wb25lbnQ6IGFueSkgPT5cbiAgY2xhc3MgU2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIgZXh0ZW5kcyBwYWdlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gICAgc3RhdGUgPSB7IGRyb3Bkb3duT3BlbjogZmFsc2UgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBQYWdpbmF0aW9uQ2hpbGRQcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5jbG9zZURyb3BEb3duID0gdGhpcy5jbG9zZURyb3BEb3duLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLnRvZ2dsZURyb3BEb3duID0gdGhpcy50b2dnbGVEcm9wRG93bi5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSA9IHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuc3RhdGUgPSB7IGRyb3Bkb3duT3BlbjogZmFsc2UgfTtcbiAgICB9XG5cbiAgICB0b2dnbGVEcm9wRG93bigpIHtcbiAgICAgIGNvbnN0IGRyb3Bkb3duT3BlbiA9ICF0aGlzLnN0YXRlLmRyb3Bkb3duT3BlbjtcbiAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgZHJvcGRvd25PcGVuIH0pKTtcbiAgICB9XG5cbiAgICBjbG9zZURyb3BEb3duKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBkcm9wZG93bk9wZW46IGZhbHNlIH0pKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2VTaXplUGVyUGFnZShzaXplUGVyUGFnZTogYW55KSB7XG4gICAgICB0aGlzLnByb3BzLm9uU2l6ZVBlclBhZ2VDaGFuZ2Uoc2l6ZVBlclBhZ2UpO1xuICAgICAgdGhpcy5jbG9zZURyb3BEb3duKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB0YWJsZUlkLFxuICAgICAgICBib290c3RyYXA0LFxuICAgICAgICBzaXplUGVyUGFnZUxpc3QsXG4gICAgICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICAgICAgaGlkZVNpemVQZXJQYWdlLFxuICAgICAgICBzaXplUGVyUGFnZVJlbmRlcmVyLFxuICAgICAgICBzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGRyb3Bkb3duT3Blbjogb3BlbiB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKHNpemVQZXJQYWdlTGlzdC5sZW5ndGggPiAxICYmICFoaWRlU2l6ZVBlclBhZ2UpIHtcbiAgICAgICAgaWYgKHNpemVQZXJQYWdlUmVuZGVyZXIpIHtcbiAgICAgICAgICByZXR1cm4gc2l6ZVBlclBhZ2VSZW5kZXJlcih7XG4gICAgICAgICAgICBvcHRpb25zOiB0aGlzLmNhbGN1bGF0ZVNpemVQZXJQYWdlU3RhdHVzKCksXG4gICAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U6IGAke2N1cnJTaXplUGVyUGFnZX1gLFxuICAgICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxXcmFwcGVkQ29tcG9uZW50XG4gICAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17YCR7Y3VyclNpemVQZXJQYWdlfWB9XG4gICAgICAgICAgICBvcHRpb25zPXt0aGlzLmNhbGN1bGF0ZVNpemVQZXJQYWdlU3RhdHVzKCl9XG4gICAgICAgICAgICBvcHRpb25SZW5kZXJlcj17c2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcn1cbiAgICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2V9XG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnRvZ2dsZURyb3BEb3dufVxuICAgICAgICAgICAgb25CbHVyPXt0aGlzLmNsb3NlRHJvcERvd259XG4gICAgICAgICAgICBvcGVuPXtvcGVufVxuICAgICAgICAgICAgdGFibGVJZD17dGFibGVJZH1cbiAgICAgICAgICAgIGJvb3RzdHJhcDQ9e2Jvb3RzdHJhcDR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuZXhwb3J0IGNvbnN0IFNpemVQZXJQYWdlRHJvcGRvd25XaXRoQWRhcHRlciA9XG4gIHNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyKFNpemVQZXJQYWdlRHJvcERvd24pO1xuZXhwb3J0IGRlZmF1bHQgc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCJpbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBTaXplUGVyUGFnZU9wdGlvbiBmcm9tIFwiLi9zaXplLXBlci1wYWdlLW9wdGlvblwiO1xuXG5jb25zdCBzaXplUGVyUGFnZURlZmF1bHRDbGFzcyA9IFwicmVhY3QtYnMtdGFibGUtc2l6ZVBlclBhZ2UtZHJvcGRvd25cIjtcblxuY29uc3Qgc2l6ZVBlclBhZ2VEcm9wRG93bkRlZmF1bHRQcm9wcyA9IHtcbiAgb3BlbjogZmFsc2UsXG4gIGhpZGRlbjogZmFsc2UsXG4gIGJ0bkNvbnRleHR1YWw6IFwiYnRuLWRlZmF1bHQgYnRuLXNlY29uZGFyeVwiLFxuICB2YXJpYXRpb246IFwiZHJvcGRvd25cIixcbiAgY2xhc3NOYW1lOiBcIlwiLFxuICBvcHRpb25SZW5kZXJlcjogbnVsbCxcbiAgYm9vdHN0cmFwNDogZmFsc2UsXG4gIHRhYmxlSWQ6IG51bGwsXG59O1xuXG5jb25zdCBTaXplUGVyUGFnZURyb3BEb3duID0gKHByb3BzOiBhbnkpID0+IHtcbiAgY29uc3Qge1xuICAgIG9wZW4sXG4gICAgdGFibGVJZCxcbiAgICBoaWRkZW4sXG4gICAgb25DbGljayxcbiAgICBvbkJsdXIsXG4gICAgb3B0aW9ucyxcbiAgICBjbGFzc05hbWUsXG4gICAgdmFyaWF0aW9uLFxuICAgIGJvb3RzdHJhcDQsXG4gICAgYnRuQ29udGV4dHVhbCxcbiAgICBvcHRpb25SZW5kZXJlcixcbiAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgfSA9IHsgLi4uc2l6ZVBlclBhZ2VEcm9wRG93bkRlZmF1bHRQcm9wcywgLi4ucHJvcHMgfTtcblxuICBjb25zdCBvcGVuQ2xhc3MgPSBvcGVuID8gXCJvcGVuIHNob3dcIiA6IFwiXCI7XG4gIGNvbnN0IGRyb3Bkb3duQ2xhc3NlcyA9IGNzKFxuICAgIG9wZW5DbGFzcyxcbiAgICBzaXplUGVyUGFnZURlZmF1bHRDbGFzcyxcbiAgICB2YXJpYXRpb24sXG4gICAgY2xhc3NOYW1lXG4gICk7XG5cbiAgY29uc3QgaWQgPSB0YWJsZUlkID8gYCR7dGFibGVJZH0tcGFnZURyb3BEb3duYCA6IFwicGFnZURyb3BEb3duXCI7XG5cbiAgcmV0dXJuIChcbiAgICA8c3BhblxuICAgICAgc3R5bGU9e3sgdmlzaWJpbGl0eTogaGlkZGVuID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiIH19XG4gICAgICBjbGFzc05hbWU9e2Ryb3Bkb3duQ2xhc3Nlc31cbiAgICAgIGRhdGEtdGVzdGlkPVwic2l6ZS1wZXItcGFnZS1kcm9wZG93blwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBpZD17aWR9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e2BidG4gJHtidG5Db250ZXh0dWFsfSBkcm9wZG93bi10b2dnbGVgfVxuICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgYXJpYS1leHBhbmRlZD17b3Blbn1cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICA+XG4gICAgICAgIHtjdXJyU2l6ZVBlclBhZ2V9e1wiIFwifVxuICAgICAgICB7Ym9vdHN0cmFwNCA/IG51bGwgOiAoXG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApfVxuICAgICAgPC9idXR0b24+XG4gICAgICA8dWxcbiAgICAgICAgY2xhc3NOYW1lPXtgZHJvcGRvd24tbWVudSAke29wZW5DbGFzc31gfVxuICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT17aWR9XG4gICAgICA+XG4gICAgICAgIHtvcHRpb25zLm1hcCgob3B0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAob3B0aW9uUmVuZGVyZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25SZW5kZXJlcih7XG4gICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNpemVQZXJQYWdlT3B0aW9uXG4gICAgICAgICAgICAgIHsuLi5vcHRpb259XG4gICAgICAgICAgICAgIGtleT17b3B0aW9uLnRleHR9XG4gICAgICAgICAgICAgIGJvb3RzdHJhcDQ9e2Jvb3RzdHJhcDR9XG4gICAgICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U9e29uU2l6ZVBlclBhZ2VDaGFuZ2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgPC91bD5cbiAgICA8L3NwYW4+XG4gICk7XG59O1xuXG5TaXplUGVyUGFnZURyb3BEb3duLnByb3BUeXBlcyA9IHtcbiAgY3VyclNpemVQZXJQYWdlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGJvb3RzdHJhcDQ6IFByb3BUeXBlcy5ib29sLFxuICB0YWJsZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgaGlkZGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgYnRuQ29udGV4dHVhbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdmFyaWF0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiZHJvcGRvd25cIiwgXCJkcm9wdXBcIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9wdGlvblJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNpemVQZXJQYWdlRHJvcERvd247XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUGFnaW5hdGlvbkhhbmRsZXIgZnJvbSBcIi4vcGFnaW5hdGlvbi1oYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdGlvbkxpc3QgZnJvbSBcIi4vcGFnaW5hdGlvbi1saXN0XCI7XG5pbXBvcnQgcGFnaW5hdGlvbkxpc3RBZGFwdGVyIGZyb20gXCIuL3BhZ2luYXRpb24tbGlzdC1hZGFwdGVyXCI7XG5pbXBvcnQgc3RhbmRhbG9uZUFkYXB0ZXIgZnJvbSBcIi4vc3RhbmRhbG9uZS1hZGFwdGVyXCI7XG5cbmNvbnN0IFBhZ2luYXRpb25MaXN0U3RhbmRhbG9uZSA9IChwcm9wczogYW55KSA9PiA8UGFnaW5hdGlvbkxpc3Qgey4uLnByb3BzfSAvPjtcblxuZXhwb3J0IGRlZmF1bHQgc3RhbmRhbG9uZUFkYXB0ZXIoXG4gIFBhZ2luYXRpb25IYW5kbGVyKHBhZ2luYXRpb25MaXN0QWRhcHRlcihQYWdpbmF0aW9uTGlzdFN0YW5kYWxvbmUpKVxuKTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBwYWdlUmVzb2x2ZXIgZnJvbSBcIi4vcGFnZS1yZXNvbHZlclwiO1xuaW1wb3J0IFBhZ2luYXRpb25Ub3RhbCBmcm9tIFwiLi9wYWdpbmF0aW9uLXRvdGFsXCI7XG5cbmNvbnN0IHBhZ2luYXRpb25Ub3RhbEFkYXB0ZXIgPSAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PlxuICBjbGFzcyBQYWdpbmF0aW9uVG90YWxBZGFwdGVyIGV4dGVuZHMgcGFnZVJlc29sdmVyKENvbXBvbmVudCkge1xuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IFtmcm9tLCB0b10gPSB0aGlzLmNhbGN1bGF0ZUZyb21UbygpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgICBmcm9tPXtmcm9tfVxuICAgICAgICAgIHRvPXt0b31cbiAgICAgICAgICBkYXRhU2l6ZT17dGhpcy5wcm9wcy5kYXRhU2l6ZX1cbiAgICAgICAgICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcj17dGhpcy5wcm9wcy5wYWdpbmF0aW9uVG90YWxSZW5kZXJlcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgY29uc3QgUGFnaW5hdGlvblRvdGFsV2l0aEFkYXB0ZXIgPVxuICBwYWdpbmF0aW9uVG90YWxBZGFwdGVyKFBhZ2luYXRpb25Ub3RhbCk7XG5leHBvcnQgZGVmYXVsdCBwYWdpbmF0aW9uVG90YWxBZGFwdGVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG5cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7fVxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbldpdGhSZXNldCgpIHt9XG5lbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LnJlc2V0V2FybmluZ0NhY2hlID0gZW1wdHlGdW5jdGlvbjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gc2hpbShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgIGlmIChzZWNyZXQgPT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIHRocm93IGVycjtcbiAgfTtcbiAgc2hpbS5pc1JlcXVpcmVkID0gc2hpbTtcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcbiAgICByZXR1cm4gc2hpbTtcbiAgfTtcbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBzaGltLFxuICAgIGJpZ2ludDogc2hpbSxcbiAgICBib29sOiBzaGltLFxuICAgIGZ1bmM6IHNoaW0sXG4gICAgbnVtYmVyOiBzaGltLFxuICAgIG9iamVjdDogc2hpbSxcbiAgICBzdHJpbmc6IHNoaW0sXG4gICAgc3ltYm9sOiBzaGltLFxuXG4gICAgYW55OiBzaGltLFxuICAgIGFycmF5T2Y6IGdldFNoaW0sXG4gICAgZWxlbWVudDogc2hpbSxcbiAgICBlbGVtZW50VHlwZTogc2hpbSxcbiAgICBpbnN0YW5jZU9mOiBnZXRTaGltLFxuICAgIG5vZGU6IHNoaW0sXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXG4gICAgb25lT2Y6IGdldFNoaW0sXG4gICAgb25lT2ZUeXBlOiBnZXRTaGltLFxuICAgIHNoYXBlOiBnZXRTaGltLFxuICAgIGV4YWN0OiBnZXRTaGltLFxuXG4gICAgY2hlY2tQcm9wVHlwZXM6IGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQsXG4gICAgcmVzZXRXYXJuaW5nQ2FjaGU6IGVtcHR5RnVuY3Rpb25cbiAgfTtcblxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5jb25zdCBTaXplUGVyUGFnZU9wdGlvbiA9ICh7XG4gIHRleHQsXG4gIHBhZ2UsXG4gIG9uU2l6ZVBlclBhZ2VDaGFuZ2UsXG4gIGJvb3RzdHJhcDQgPSBmYWxzZSxcbn06IGFueSkgPT5cbiAgYm9vdHN0cmFwNCA/IChcbiAgICA8YVxuICAgICAgaHJlZj1cIiNcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgIGNsYXNzTmFtZT1cImRyb3Bkb3duLWl0ZW1cIlxuICAgICAgZGF0YS1wYWdlPXtwYWdlfVxuICAgICAgb25Nb3VzZURvd249eyhlKSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZShwYWdlKTtcbiAgICAgIH19XG4gICAgPlxuICAgICAge3RleHR9XG4gICAgPC9hPlxuICApIDogKFxuICAgIDxsaSBrZXk9e3RleHR9IHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzc05hbWU9XCJkcm9wZG93bi1pdGVtXCI+XG4gICAgICA8YVxuICAgICAgICBocmVmPVwiI1wiXG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgZGF0YS1wYWdlPXtwYWdlfVxuICAgICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZShwYWdlKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RleHR9XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgKTtcblxuU2l6ZVBlclBhZ2VPcHRpb24ucHJvcFR5cGVzID0ge1xuICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHBhZ2U6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgb25TaXplUGVyUGFnZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgYm9vdHN0cmFwNDogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG4vLyBTaXplUGVyUGFnZU9wdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGJvb3RzdHJhcDQ6IGZhbHNlLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgU2l6ZVBlclBhZ2VPcHRpb247XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgcGFnZVJlc29sdmVyIGZyb20gXCIuL3BhZ2UtcmVzb2x2ZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgKFdyYXBwZWRDb21wb25lbnQ6IGFueSkgPT5cbiAgY2xhc3MgUGFnaW5hdGlvbkhhbmRsZXIgZXh0ZW5kcyBwYWdlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VQYWdlID0gdGhpcy5oYW5kbGVDaGFuZ2VQYWdlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlID0gdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuaW5pdGlhbFN0YXRlKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKGN1cnJQcm9wczogYW55KSB7XG4gICAgICBjb25zdCB7IGN1cnJTaXplUGVyUGFnZSwgZGF0YVNpemUsIHRvdGFsU2l6ZSB9ID0gY3VyclByb3BzO1xuICAgICAgbGV0IHRvdGFsUGFnZXMgPSAwO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGN1cnJTaXplUGVyUGFnZSAhPT0gdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UgfHxcbiAgICAgICAgZGF0YVNpemUgIT09IHRoaXMucHJvcHMuZGF0YVNpemUgfHxcbiAgICAgICAgdG90YWxTaXplICE9PSB0aGlzLnByb3BzLnRvdGFsU2l6ZVxuICAgICAgKSB7XG4gICAgICAgIGlmIChjdXJyU2l6ZVBlclBhZ2UgIT09IHRoaXMucHJvcHMuY3VyclNpemVQZXJQYWdlKSB7XG4gICAgICAgICAgdG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRvdGFsU2l6ZSA/PyB0aGlzLnByb3BzLmRhdGFTaXplXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhU2l6ZSAhPT0gdGhpcy5wcm9wcy5kYXRhU2l6ZSkge1xuICAgICAgICAgIHRvdGFsUGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZShcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY3VyclNpemVQZXJQYWdlLFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5kYXRhU2l6ZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodG90YWxTaXplICE9PSB0aGlzLnByb3BzLnRvdGFsU2l6ZSkge1xuICAgICAgICAgIHRvdGFsUGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZShcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY3VyclNpemVQZXJQYWdlLFxuICAgICAgICAgICAgdGhpcy5wcm9wcy50b3RhbFNpemVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3RhbFBhZ2VzID0gdGhpcy5jYWxjdWxhdGVUb3RhbFBhZ2UoXG4gICAgICAgICAgdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgdGhpcy5wcm9wcy5kYXRhU2l6ZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXN0UGFnZSA9IHRoaXMuY2FsY3VsYXRlTGFzdFBhZ2UodG90YWxQYWdlcyk7XG5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmICh0b3RhbFBhZ2VzICE9PSB0aGlzLnN0YXRlLnRvdGFsUGFnZXMgfHwgbGFzdFBhZ2UgIT09IHRoaXMuc3RhdGUubGFzdFBhZ2UpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHRvdGFsUGFnZXMsIGxhc3RQYWdlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlKHNpemVQZXJQYWdlOiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgY3VyclNpemVQZXJQYWdlLCBvblNpemVQZXJQYWdlQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRTaXplID1cbiAgICAgICAgdHlwZW9mIHNpemVQZXJQYWdlID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyBwYXJzZUludChzaXplUGVyUGFnZSwgMTApXG4gICAgICAgICAgOiBzaXplUGVyUGFnZTtcbiAgICAgIGxldCB7IGN1cnJQYWdlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKHNlbGVjdGVkU2l6ZSAhPT0gY3VyclNpemVQZXJQYWdlKSB7XG4gICAgICAgIGNvbnN0IG5ld1RvdGFsUGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZShzZWxlY3RlZFNpemUpO1xuICAgICAgICBjb25zdCBuZXdMYXN0UGFnZSA9IHRoaXMuY2FsY3VsYXRlTGFzdFBhZ2UobmV3VG90YWxQYWdlcyk7XG4gICAgICAgIGlmIChjdXJyUGFnZSA+IG5ld0xhc3RQYWdlKSBjdXJyUGFnZSA9IG5ld0xhc3RQYWdlO1xuICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlKHNlbGVjdGVkU2l6ZSwgY3VyclBhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZVBhZ2UobmV3UGFnZTogYW55KSB7XG4gICAgICBsZXQgcGFnZTogYW55O1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyUGFnZSxcbiAgICAgICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgICAgIHByZVBhZ2VUZXh0LFxuICAgICAgICBuZXh0UGFnZVRleHQsXG4gICAgICAgIGxhc3RQYWdlVGV4dCxcbiAgICAgICAgZmlyc3RQYWdlVGV4dCxcbiAgICAgICAgb25QYWdlQ2hhbmdlLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCB7IGxhc3RQYWdlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAobmV3UGFnZSA9PT0gcHJlUGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IHRoaXMuYmFja1RvUHJldlBhZ2UoKTtcbiAgICAgIH0gZWxzZSBpZiAobmV3UGFnZSA9PT0gbmV4dFBhZ2VUZXh0KSB7XG4gICAgICAgIHBhZ2UgPSBjdXJyUGFnZSArIDEgPiBsYXN0UGFnZSA/IGxhc3RQYWdlIDogY3VyclBhZ2UgKyAxO1xuICAgICAgfSBlbHNlIGlmIChuZXdQYWdlID09PSBsYXN0UGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IGxhc3RQYWdlO1xuICAgICAgfSBlbHNlIGlmIChuZXdQYWdlID09PSBmaXJzdFBhZ2VUZXh0KSB7XG4gICAgICAgIHBhZ2UgPSBwYWdlU3RhcnRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhZ2UgPSBwYXJzZUludChuZXdQYWdlLCAxMCk7XG4gICAgICB9XG4gICAgICBpZiAocGFnZSAhPT0gY3VyclBhZ2UpIHtcbiAgICAgICAgb25QYWdlQ2hhbmdlKHBhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxXcmFwcGVkQ29tcG9uZW50XG4gICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGxhc3RQYWdlPXt0aGlzLnN0YXRlLmxhc3RQYWdlfVxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICB0b3RhbFBhZ2VzPXt0aGlzLnN0YXRlLnRvdGFsUGFnZXN9XG4gICAgICAgICAgb25QYWdlQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZVBhZ2V9XG4gICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICB9O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgKFdyYXBwZWRDb21wb25lbnQ6IGFueSkgPT5cbiAgKHsgcGFnZSwgc2l6ZVBlclBhZ2UsIC4uLnJlc3QgfTogYW55KSA9PlxuICAgIChcbiAgICAgIDxXcmFwcGVkQ29tcG9uZW50XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgICBjdXJyUGFnZT17cGFnZX1cbiAgICAgICAgY3VyclNpemVQZXJQYWdlPXtzaXplUGVyUGFnZX1cbiAgICAgIC8+XG4gICAgKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwiaW1wb3J0IENvbnN0IGZyb20gXCIuL2NvbnN0XCI7XG5cbmNvbnN0IGdldE5vcm1hbGl6ZWRQYWdlID0gKHBhZ2U6IGFueSwgcGFnZVN0YXJ0SW5kZXg6IGFueSkgPT4ge1xuICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicygxIC0gcGFnZVN0YXJ0SW5kZXgpO1xuICByZXR1cm4gcGFnZSArIG9mZnNldDtcbn07XG5cbmNvbnN0IGVuZEluZGV4ID0gKHBhZ2U6IGFueSwgc2l6ZVBlclBhZ2U6IGFueSwgcGFnZVN0YXJ0SW5kZXg6IGFueSkgPT5cbiAgZ2V0Tm9ybWFsaXplZFBhZ2UocGFnZSwgcGFnZVN0YXJ0SW5kZXgpICogc2l6ZVBlclBhZ2UgLSAxO1xuXG5jb25zdCBzdGFydEluZGV4ID0gKGVuZDogYW55LCBzaXplUGVyUGFnZTogYW55KSA9PiBlbmQgLSAoc2l6ZVBlclBhZ2UgLSAxKTtcblxuZXhwb3J0IGNvbnN0IGFsaWduUGFnZSA9IChcbiAgZGF0YVNpemU6IGFueSxcbiAgcHJldkRhdGFTaXplOiBhbnksXG4gIHBhZ2U6IGFueSxcbiAgc2l6ZVBlclBhZ2U6IGFueSxcbiAgcGFnZVN0YXJ0SW5kZXg6IGFueVxuKSA9PiB7XG4gIGlmIChwcmV2RGF0YVNpemUgPCBkYXRhU2l6ZSkgcmV0dXJuIHBhZ2U7XG4gIGlmIChwYWdlIDwgcGFnZVN0YXJ0SW5kZXgpIHJldHVybiBwYWdlU3RhcnRJbmRleDtcbiAgaWYgKGRhdGFTaXplIDw9IDApIHJldHVybiBwYWdlU3RhcnRJbmRleDtcbiAgaWYgKFxuICAgIHBhZ2UgPj0gTWF0aC5mbG9vcihkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKSArIHBhZ2VTdGFydEluZGV4ICYmXG4gICAgcGFnZVN0YXJ0SW5kZXggPT09IDFcbiAgKSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbChkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKTtcbiAgfVxuICBpZiAocGFnZSA+PSBNYXRoLmZsb29yKGRhdGFTaXplIC8gc2l6ZVBlclBhZ2UpICYmIHBhZ2VTdGFydEluZGV4ID09PSAwKSB7XG4gICAgY29uc3QgbmV3UGFnZSA9IE1hdGguY2VpbChkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKTtcbiAgICByZXR1cm4gbmV3UGFnZSAtIE1hdGguYWJzKENvbnN0LlBBR0VfU1RBUlRfSU5ERVggLSBwYWdlU3RhcnRJbmRleCk7XG4gIH1cbiAgcmV0dXJuIHBhZ2U7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QnlDdXJyUGFnZSA9IChcbiAgZGF0YTogYW55LFxuICBwYWdlOiBhbnksXG4gIHNpemVQZXJQYWdlOiBhbnksXG4gIHBhZ2VTdGFydEluZGV4OiBhbnlcbikgPT4ge1xuICBjb25zdCBkYXRhU2l6ZSA9IGRhdGEubGVuZ3RoO1xuICBpZiAoIWRhdGFTaXplKSByZXR1cm4gW107XG5cbiAgY29uc3QgZW5kID0gZW5kSW5kZXgocGFnZSwgc2l6ZVBlclBhZ2UsIHBhZ2VTdGFydEluZGV4KTtcbiAgY29uc3Qgc3RhcnQgPSBzdGFydEluZGV4KGVuZCwgc2l6ZVBlclBhZ2UpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpICs9IDEpIHtcbiAgICByZXN1bHQucHVzaChkYXRhW2ldKTtcbiAgICBpZiAoaSArIDEgPT09IGRhdGFTaXplKSBicmVhaztcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoYXJnKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBwYXJzZVZhbHVlKGFyZykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VWYWx1ZSAoYXJnKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gYXJnO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQ2xhc3MgKHZhbHVlLCBuZXdDbGFzcykge1xuXHRcdGlmICghbmV3Q2xhc3MpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgJyAnICsgbmV3Q2xhc3M7XG5cdFx0fVxuXHRcblx0XHRyZXR1cm4gdmFsdWUgKyBuZXdDbGFzcztcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgUEFHSU5BVElPTl9TSVpFOiA1LFxuICBQQUdFX1NUQVJUX0lOREVYOiAxLFxuICBXaXRoX0ZJUlNUX0FORF9MQVNUOiB0cnVlLFxuICBTSE9XX0FMTF9QQUdFX0JUTlM6IGZhbHNlLFxuICBTSE9XX1RPVEFMOiBmYWxzZSxcbiAgUEFHSU5BVElPTl9UT1RBTDogbnVsbCxcbiAgRklSU1RfUEFHRV9URVhUOiBcIjw8XCIsXG4gIFBSRV9QQUdFX1RFWFQ6IFwiPFwiLFxuICBORVhUX1BBR0VfVEVYVDogXCI+XCIsXG4gIExBU1RfUEFHRV9URVhUOiBcIj4+XCIsXG4gIE5FWFRfUEFHRV9USVRMRTogXCJuZXh0IHBhZ2VcIixcbiAgTEFTVF9QQUdFX1RJVExFOiBcImxhc3QgcGFnZVwiLFxuICBQUkVfUEFHRV9USVRMRTogXCJwcmV2aW91cyBwYWdlXCIsXG4gIEZJUlNUX1BBR0VfVElUTEU6IFwiZmlyc3QgcGFnZVwiLFxuICBTSVpFX1BFUl9QQUdFX0xJU1Q6IFsxMCwgMjUsIDMwLCA1MF0sXG4gIEhJREVfU0laRV9QRVJfUEFHRTogZmFsc2UsXG4gIEhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0U6IGZhbHNlLFxufTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tbG9uZWx5LWlmOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuXG5pbXBvcnQgeyBQYWdpbmF0aW9uUHJvdmlkZXJQcm9wcyB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgYWxpZ25QYWdlIH0gZnJvbSBcIi4vcGFnZVwiO1xuXG5jb25zdCBTdGF0ZUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PGFueT4obnVsbCk7XG5cbmNsYXNzIFN0YXRlUHJvdmlkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UGFnaW5hdGlvblByb3ZpZGVyUHJvcHM+IHtcbiAgY3VyclBhZ2U6IG51bWJlcjtcbiAgY3VyclNpemVQZXJQYWdlOiBudW1iZXI7XG4gIGRhdGFDaGFuZ2VMaXN0ZW5lcjogYW55O1xuICBkYXRhU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICByZW1vdGVFbWl0dGVyOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFBhZ2luYXRpb25Qcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlQ2hhbmdlUGFnZSA9IHRoaXMuaGFuZGxlQ2hhbmdlUGFnZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlRGF0YVNpemVDaGFuZ2UgPSB0aGlzLmhhbmRsZURhdGFTaXplQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSA9IHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UuYmluZCh0aGlzKTtcblxuICAgIGxldCBjdXJyUGFnZTogYW55O1xuICAgIGxldCBjdXJyU2l6ZVBlclBhZ2U6IGFueTtcbiAgICBjb25zdCBvcHRpb25zID0gcHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyE7XG4gICAgY29uc3Qgc2l6ZVBlclBhZ2VMaXN0ID0gb3B0aW9ucy5zaXplUGVyUGFnZUxpc3QgfHwgQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNUO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSBjdXJyZW50IHBhZ2VcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGFnZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY3VyclBhZ2UgPSBvcHRpb25zLnBhZ2U7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5wYWdlU3RhcnRJbmRleCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY3VyclBhZ2UgPSBvcHRpb25zLnBhZ2VTdGFydEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyUGFnZSA9IENvbnN0LlBBR0VfU1RBUlRfSU5ERVg7XG4gICAgfVxuXG4gICAgLy8gaW5pdGlhbGl6ZSBjdXJyZW50IHNpemVQZXJQYWdlXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnNpemVQZXJQYWdlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjdXJyU2l6ZVBlclBhZ2UgPSBvcHRpb25zLnNpemVQZXJQYWdlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHNpemVQZXJQYWdlTGlzdFswXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgY3VyclNpemVQZXJQYWdlID0gc2l6ZVBlclBhZ2VMaXN0WzBdLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyU2l6ZVBlclBhZ2UgPSBzaXplUGVyUGFnZUxpc3RbMF07XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyUGFnZSA9IGN1cnJQYWdlO1xuICAgIHRoaXMuZGF0YVNpemUgPSBvcHRpb25zLnRvdGFsU2l6ZTtcbiAgICB0aGlzLmN1cnJTaXplUGVyUGFnZSA9IGN1cnJTaXplUGVyUGFnZTtcbiAgICB0aGlzLmRhdGFDaGFuZ2VMaXN0ZW5lciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLmRhdGFDaGFuZ2VMaXN0ZW5lci5vbihcImZpbHRlckNoYW5nZWRcIiwgdGhpcy5oYW5kbGVEYXRhU2l6ZUNoYW5nZSk7XG4gIH1cblxuICBnZXRQYWdpbmF0aW9uUHJvcHMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBib290c3RyYXA0LCB0YWJsZUlkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BzLnBhZ2luYXRpb24hLm9wdGlvbnMhO1xuICAgIGNvbnN0IHsgY3VyclBhZ2UsIGN1cnJTaXplUGVyUGFnZSB9ID0gdGhpcztcbiAgICBsZXQgZGF0YVNpemU6IG51bWJlcjtcbiAgICBpZiAodGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSkge1xuICAgICAgZGF0YVNpemUgPSBvcHRpb25zLnRvdGFsU2l6ZSE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFTaXplID0gdGhpcy5kYXRhU2l6ZSE7XG4gICAgfVxuICAgIGNvbnN0IHdpdGhGaXJzdEFuZExhc3QgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMud2l0aEZpcnN0QW5kTGFzdCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LldpdGhfRklSU1RfQU5EX0xBU1RcbiAgICAgICAgOiBvcHRpb25zLndpdGhGaXJzdEFuZExhc3Q7XG4gICAgY29uc3QgYWx3YXlzU2hvd0FsbEJ0bnMgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuYWx3YXlzU2hvd0FsbEJ0bnMgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5TSE9XX0FMTF9QQUdFX0JUTlNcbiAgICAgICAgOiBvcHRpb25zLmFsd2F5c1Nob3dBbGxCdG5zO1xuICAgIGNvbnN0IGhpZGVTaXplUGVyUGFnZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5oaWRlU2l6ZVBlclBhZ2UgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5ISURFX1NJWkVfUEVSX1BBR0VcbiAgICAgICAgOiBvcHRpb25zLmhpZGVTaXplUGVyUGFnZTtcbiAgICBjb25zdCBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5oaWRlUGFnZUxpc3RPbmx5T25lUGFnZSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LkhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0VcbiAgICAgICAgOiBvcHRpb25zLmhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlO1xuICAgIGNvbnN0IHBhZ2VTdGFydEluZGV4ID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnBhZ2VTdGFydEluZGV4ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWFxuICAgICAgICA6IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXg7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBib290c3RyYXA0LFxuICAgICAgdGFibGVJZCxcbiAgICAgIHBhZ2U6IGN1cnJQYWdlLFxuICAgICAgc2l6ZVBlclBhZ2U6IGN1cnJTaXplUGVyUGFnZSxcbiAgICAgIHBhZ2VTdGFydEluZGV4LFxuICAgICAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UsXG4gICAgICBoaWRlU2l6ZVBlclBhZ2UsXG4gICAgICBhbHdheXNTaG93QWxsQnRucyxcbiAgICAgIHdpdGhGaXJzdEFuZExhc3QsXG4gICAgICBkYXRhU2l6ZSxcbiAgICAgIHNpemVQZXJQYWdlTGlzdDogb3B0aW9ucy5zaXplUGVyUGFnZUxpc3QgfHwgQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNULFxuICAgICAgcGFnaW5hdGlvblNpemU6IG9wdGlvbnMucGFnaW5hdGlvblNpemUgfHwgQ29uc3QuUEFHSU5BVElPTl9TSVpFLFxuICAgICAgc2hvd1RvdGFsOiBvcHRpb25zLnNob3dUb3RhbCxcbiAgICAgIHBhZ2VMaXN0UmVuZGVyZXI6IG9wdGlvbnMucGFnZUxpc3RSZW5kZXJlcixcbiAgICAgIHBhZ2VCdXR0b25SZW5kZXJlcjogb3B0aW9ucy5wYWdlQnV0dG9uUmVuZGVyZXIsXG4gICAgICBzaXplUGVyUGFnZVJlbmRlcmVyOiBvcHRpb25zLnNpemVQZXJQYWdlUmVuZGVyZXIsXG4gICAgICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcjogb3B0aW9ucy5wYWdpbmF0aW9uVG90YWxSZW5kZXJlcixcbiAgICAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXI6IG9wdGlvbnMuc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcixcbiAgICAgIGZpcnN0UGFnZVRleHQ6IG9wdGlvbnMuZmlyc3RQYWdlVGV4dCB8fCBDb25zdC5GSVJTVF9QQUdFX1RFWFQsXG4gICAgICBwcmVQYWdlVGV4dDogb3B0aW9ucy5wcmVQYWdlVGV4dCB8fCBDb25zdC5QUkVfUEFHRV9URVhULFxuICAgICAgbmV4dFBhZ2VUZXh0OiBvcHRpb25zLm5leHRQYWdlVGV4dCB8fCBDb25zdC5ORVhUX1BBR0VfVEVYVCxcbiAgICAgIGxhc3RQYWdlVGV4dDogb3B0aW9ucy5sYXN0UGFnZVRleHQgfHwgQ29uc3QuTEFTVF9QQUdFX1RFWFQsXG4gICAgICBwcmVQYWdlVGl0bGU6IG9wdGlvbnMucHJlUGFnZVRpdGxlIHx8IENvbnN0LlBSRV9QQUdFX1RJVExFLFxuICAgICAgbmV4dFBhZ2VUaXRsZTogb3B0aW9ucy5uZXh0UGFnZVRpdGxlIHx8IENvbnN0Lk5FWFRfUEFHRV9USVRMRSxcbiAgICAgIGZpcnN0UGFnZVRpdGxlOiBvcHRpb25zLmZpcnN0UGFnZVRpdGxlIHx8IENvbnN0LkZJUlNUX1BBR0VfVElUTEUsXG4gICAgICBsYXN0UGFnZVRpdGxlOiBvcHRpb25zLmxhc3RQYWdlVGl0bGUgfHwgQ29uc3QuTEFTVF9QQUdFX1RJVExFLFxuICAgICAgb25QYWdlQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZVBhZ2UsXG4gICAgICBvblNpemVQZXJQYWdlQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLFxuICAgIH07XG4gIH07XG5cbiAgc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIgPSAocmVtb3RlRW1pdHRlcjogYW55KSA9PiB7XG4gICAgdGhpcy5yZW1vdGVFbWl0dGVyID0gcmVtb3RlRW1pdHRlcjtcbiAgfTtcblxuICBnZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlciA9ICgpID0+XG4gICAgdGhpcy5yZW1vdGVFbWl0dGVyIHx8IHRoaXMucHJvcHMucmVtb3RlRW1pdHRlcjtcblxuICBjb21wb25lbnREaWRVcGRhdGUobmV4dFByb3BzOiBhbnkpIHtcbiAgICBjb25zdCB7IGN1c3RvbSB9ID0gbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucztcblxuICAgIC8vIHVzZXIgc2hvdWxkIGFsaWduIHRoZSBwYWdlIHdoZW4gdGhlIHBhZ2UgaXMgbm90IGZpdCB0byB0aGUgZGF0YSBzaXplIHdoZW4gcmVtb3RlIGVuYWJsZVxuICAgIGlmICh0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpIHx8IGN1c3RvbSkge1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnBhZ2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgLy8gdGhpcy5jdXJyUGFnZSA9IG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMucGFnZTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy5zaXplUGVyUGFnZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyB0aGlzLmN1cnJTaXplUGVyUGFnZSA9IG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMuc2l6ZVBlclBhZ2U7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMudG90YWxTaXplICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIC8vIHRoaXMuZGF0YVNpemUgPSBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnRvdGFsU2l6ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1JlbW90ZVBhZ2luYXRpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgZSA9IHsgcmVzdWx0OiB1bmRlZmluZWQgfTtcbiAgICB0aGlzLnJlbW90ZUVtaXR0ZXI/LmVtaXQoXCJpc1JlbW90ZVBhZ2luYXRpb25cIiwgZSk7XG4gICAgcmV0dXJuIGUucmVzdWx0O1xuICB9O1xuXG4gIGhhbmRsZURhdGFTaXplQ2hhbmdlKG5ld0RhdGFTaXplOiBhbnkpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uIS5vcHRpb25zITtcbiAgICBjb25zdCBwYWdlU3RhcnRJbmRleCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5wYWdlU3RhcnRJbmRleCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LlBBR0VfU1RBUlRfSU5ERVhcbiAgICAgICAgOiBvcHRpb25zLnBhZ2VTdGFydEluZGV4O1xuICAgIHRoaXMuY3VyclBhZ2UgPSBhbGlnblBhZ2UoXG4gICAgICBuZXdEYXRhU2l6ZSxcbiAgICAgIHRoaXMuZGF0YVNpemUsXG4gICAgICB0aGlzLmN1cnJQYWdlLFxuICAgICAgdGhpcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICBwYWdlU3RhcnRJbmRleFxuICAgICk7XG4gICAgdGhpcy5kYXRhU2l6ZSA9IG5ld0RhdGFTaXplO1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZVBhZ2UoY3VyclBhZ2U6IGFueSkge1xuICAgIGNvbnN0IHsgY3VyclNpemVQZXJQYWdlIH0gPSB0aGlzO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BzLnBhZ2luYXRpb24hLm9wdGlvbnMhO1xuXG4gICAgaWYgKG9wdGlvbnMub25QYWdlQ2hhbmdlKSB7XG4gICAgICBvcHRpb25zLm9uUGFnZUNoYW5nZShjdXJyUGFnZSwgY3VyclNpemVQZXJQYWdlKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJQYWdlID0gY3VyclBhZ2U7XG5cbiAgICBpZiAodGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSkge1xuICAgICAgdGhpcy5nZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlcigpLmVtaXQoXG4gICAgICAgIFwicGFnaW5hdGlvbkNoYW5nZVwiLFxuICAgICAgICBjdXJyUGFnZSxcbiAgICAgICAgY3VyclNpemVQZXJQYWdlXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2VTaXplUGVyUGFnZShjdXJyU2l6ZVBlclBhZ2U6IGFueSwgY3VyclBhZ2U6IGFueSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BzLnBhZ2luYXRpb24hLm9wdGlvbnMhO1xuXG4gICAgaWYgKG9wdGlvbnMub25TaXplUGVyUGFnZUNoYW5nZSkge1xuICAgICAgb3B0aW9ucy5vblNpemVQZXJQYWdlQ2hhbmdlKGN1cnJTaXplUGVyUGFnZSwgY3VyclBhZ2UpO1xuICAgIH1cblxuICAgIHRoaXMuY3VyclBhZ2UgPSBjdXJyUGFnZTtcbiAgICB0aGlzLmN1cnJTaXplUGVyUGFnZSA9IGN1cnJTaXplUGVyUGFnZTtcblxuICAgIGlmICh0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpKSB7XG4gICAgICB0aGlzLmdldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyKCkuZW1pdChcbiAgICAgICAgXCJwYWdpbmF0aW9uQ2hhbmdlXCIsXG4gICAgICAgIGN1cnJQYWdlLFxuICAgICAgICBjdXJyU2l6ZVBlclBhZ2VcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBwYWdpbmF0aW9uUHJvcHMgPSB0aGlzLmdldFBhZ2luYXRpb25Qcm9wcygpO1xuICAgIGNvbnN0IHBhZ2luYXRpb24gPSB7XG4gICAgICAuLi50aGlzLnByb3BzLnBhZ2luYXRpb24sXG4gICAgICBvcHRpb25zOiBwYWdpbmF0aW9uUHJvcHMsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U3RhdGVDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgcGFnaW5hdGlvblByb3BzLFxuICAgICAgICAgIHBhZ2luYXRpb25UYWJsZVByb3BzOiB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uLFxuICAgICAgICAgICAgc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXI6IHRoaXMuc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIsXG4gICAgICAgICAgICBkYXRhQ2hhbmdlTGlzdGVuZXI6IHRoaXMuZGF0YUNoYW5nZUxpc3RlbmVyLFxuICAgICAgICAgIH0sXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgPC9TdGF0ZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiAoe1xuICBQcm92aWRlcjogU3RhdGVQcm92aWRlcixcbiAgQ29uc3VtZXI6IFN0YXRlQ29udGV4dC5Db25zdW1lcixcbn0pO1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGFnaW5hdGlvbk9wdGlvbnMgfSBmcm9tIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nXCI7XG5cbmltcG9ydCBjcmVhdGVEYXRhQ29udGV4dCBmcm9tIFwiLi9zcmMvZGF0YS1jb250ZXh0XCI7XG5pbXBvcnQgUGFnaW5hdGlvbkxpc3RTdGFuZGFsb25lIGZyb20gXCIuL3NyYy9wYWdpbmF0aW9uLWxpc3Qtc3RhbmRhbG9uZVwiO1xuaW1wb3J0IFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUgZnJvbSBcIi4vc3JjL3BhZ2luYXRpb24tdG90YWwtc3RhbmRhbG9uZVwiO1xuaW1wb3J0IFNpemVQZXJQYWdlRHJvcGRvd25TdGFuZGFsb25lIGZyb20gXCIuL3NyYy9zaXplLXBlci1wYWdlLWRyb3Bkb3duLXN0YW5kYWxvbmVcIjtcbmltcG9ydCBjcmVhdGVCYXNlQ29udGV4dCBmcm9tIFwiLi9zcmMvc3RhdGUtY29udGV4dFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25DdHhPcHRpb25zIHtcbiAgb3B0aW9ucz86IFBhZ2luYXRpb25PcHRpb25zIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25DaGlsZFByb3BzIGV4dGVuZHMgUGFnaW5hdGlvbk9wdGlvbnMge1xuICB0YWJsZUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBib290c3RyYXA0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uUHJvdmlkZXJQcm9wcyB7XG4gIHBhZ2luYXRpb24/OiBQYWdpbmF0aW9uQ3R4T3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgLy8gVE9ET1xuICAvLyBjaGlsZHJlbjogKGNoaWxkUHJvcHM6IHtcbiAgLy8gICBwYWdpbmF0aW9uUHJvcHM6IFBhZ2luYXRpb25DaGlsZFByb3BzO1xuICAvLyAgIHBhZ2luYXRpb25UYWJsZVByb3BzOiBCb290c3RyYXBUYWJsZVByb3BzO1xuICAvLyB9KSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsO1xuICBjaGlsZHJlbjogYW55O1xuICB0YWJsZUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBib290c3RyYXA0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcmVtb3RlRW1pdHRlcjogYW55O1xuICBkYXRhOiBhbnlbXTtcbiAgaXNSZW1vdGVQYWdpbmF0aW9uOiBGdW5jdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyUHJvcHMge1xuICBkYXRhOiBhbnlbXTtcbiAgcmVtb3RlRW1pdHRlcjogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaXNSZW1vdGVQYWdpbmF0aW9uOiAoKSA9PiBib29sZWFuO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBwYWdpbmF0aW9uOiB7XG4gICAgb3B0aW9uczoge1xuICAgICAgY3VzdG9tPzogYm9vbGVhbjtcbiAgICAgIHBhZ2VTdGFydEluZGV4PzogbnVtYmVyO1xuICAgICAgb25QYWdlQ2hhbmdlOiAobmV3UGFnZTogYW55LCBjdXJyU2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgICB9O1xuICB9O1xuICBvbkRhdGFTaXplQ2hhbmdlPzogKGRhdGFTaXplOiB7IGRhdGFTaXplOiBudW1iZXIgfSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKG9wdGlvbnMgPSB7fSkgPT4gKHtcbiAgY3JlYXRlQ29udGV4dDogY3JlYXRlRGF0YUNvbnRleHQsXG4gIG9wdGlvbnMsXG59KTtcblxuY29uc3QgeyBQcm92aWRlciwgQ29uc3VtZXIgfSA9IGNyZWF0ZUJhc2VDb250ZXh0KCk7XG5cbmNvbnN0IEN1c3RvbWl6YWJsZVByb3ZpZGVyID0gKHByb3BzOiBQYWdpbmF0aW9uUHJvdmlkZXJQcm9wcykgPT4gKFxuICA8UHJvdmlkZXIgey4uLnByb3BzfT5cbiAgICA8Q29uc3VtZXI+XG4gICAgICB7KHBhZ2luYXRpb25Qcm9wczogYW55KSA9PiBwcm9wcy5jaGlsZHJlbihwYWdpbmF0aW9uUHJvcHMpfVxuICAgIDwvQ29uc3VtZXI+XG4gIDwvUHJvdmlkZXI+XG4pO1xuXG5DdXN0b21pemFibGVQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGNvbnN0IFBhZ2luYXRpb25Qcm92aWRlciA9IEN1c3RvbWl6YWJsZVByb3ZpZGVyO1xuZXhwb3J0IHtcbiAgUGFnaW5hdGlvbkxpc3RTdGFuZGFsb25lLFxuICBQYWdpbmF0aW9uVG90YWxTdGFuZGFsb25lLFxuICBTaXplUGVyUGFnZURyb3Bkb3duU3RhbmRhbG9uZSxcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUGFnaW5hdGlvblRvdGFsIGZyb20gXCIuL3BhZ2luYXRpb24tdG90YWxcIjtcbmltcG9ydCBwYWdpbmF0aW9uVG90YWxBZGFwdGVyIGZyb20gXCIuL3BhZ2luYXRpb24tdG90YWwtYWRhcHRlclwiO1xuaW1wb3J0IHN0YW5kYWxvbmVBZGFwdGVyIGZyb20gXCIuL3N0YW5kYWxvbmUtYWRhcHRlclwiO1xuXG5jb25zdCBQYWdpbmF0aW9uVG90YWxTdGFuZGFsb25lID0gKHByb3BzOiBhbnkpID0+IChcbiAgPFBhZ2luYXRpb25Ub3RhbCB7Li4ucHJvcHN9IC8+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBzdGFuZGFsb25lQWRhcHRlcihcbiAgcGFnaW5hdGlvblRvdGFsQWRhcHRlcihQYWdpbmF0aW9uVG90YWxTdGFuZGFsb25lKVxuKTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTg3KTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fIiwiUmVmbGVjdE93bktleXMiLCJSIiwiUmVmbGVjdCIsIlJlZmxlY3RBcHBseSIsImFwcGx5IiwidGFyZ2V0IiwicmVjZWl2ZXIiLCJhcmdzIiwiRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJjYWxsIiwib3duS2V5cyIsIk9iamVjdCIsImdldE93blByb3BlcnR5U3ltYm9scyIsImdldE93blByb3BlcnR5TmFtZXMiLCJjb25jYXQiLCJOdW1iZXJJc05hTiIsIk51bWJlciIsImlzTmFOIiwidmFsdWUiLCJFdmVudEVtaXR0ZXIiLCJpbml0IiwidGhpcyIsIm9uY2UiLCJlbWl0dGVyIiwibmFtZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZXJyb3JMaXN0ZW5lciIsImVyciIsInJlbW92ZUxpc3RlbmVyIiwicmVzb2x2ZXIiLCJzbGljZSIsImFyZ3VtZW50cyIsImV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lciIsImhhbmRsZXIiLCJmbGFncyIsIm9uIiwiYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIiLCJfZXZlbnRzIiwidW5kZWZpbmVkIiwiX2V2ZW50c0NvdW50IiwiX21heExpc3RlbmVycyIsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCJjaGVja0xpc3RlbmVyIiwibGlzdGVuZXIiLCJUeXBlRXJyb3IiLCJfZ2V0TWF4TGlzdGVuZXJzIiwidGhhdCIsIl9hZGRMaXN0ZW5lciIsInR5cGUiLCJwcmVwZW5kIiwibSIsImV2ZW50cyIsImV4aXN0aW5nIiwid2FybmluZyIsImNyZWF0ZSIsIm5ld0xpc3RlbmVyIiwiZW1pdCIsInVuc2hpZnQiLCJwdXNoIiwibGVuZ3RoIiwid2FybmVkIiwidyIsIkVycm9yIiwiU3RyaW5nIiwiY291bnQiLCJjb25zb2xlIiwid2FybiIsIm9uY2VXcmFwcGVyIiwiZmlyZWQiLCJ3cmFwRm4iLCJfb25jZVdyYXAiLCJzdGF0ZSIsIndyYXBwZWQiLCJiaW5kIiwiX2xpc3RlbmVycyIsInVud3JhcCIsImV2bGlzdGVuZXIiLCJhcnIiLCJyZXQiLCJBcnJheSIsImkiLCJ1bndyYXBMaXN0ZW5lcnMiLCJhcnJheUNsb25lIiwibGlzdGVuZXJDb3VudCIsIm4iLCJjb3B5IiwiYWRkRXZlbnRMaXN0ZW5lciIsIndyYXBMaXN0ZW5lciIsImFyZyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJzZXQiLCJSYW5nZUVycm9yIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRNYXhMaXN0ZW5lcnMiLCJnZXRNYXhMaXN0ZW5lcnMiLCJkb0Vycm9yIiwiZXJyb3IiLCJlciIsIm1lc3NhZ2UiLCJjb250ZXh0IiwibGVuIiwibGlzdGVuZXJzIiwiYWRkTGlzdGVuZXIiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwibGlzdCIsInBvc2l0aW9uIiwib3JpZ2luYWxMaXN0ZW5lciIsInNoaWZ0IiwiaW5kZXgiLCJwb3AiLCJzcGxpY2VPbmUiLCJvZmYiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJrZXkiLCJrZXlzIiwicmF3TGlzdGVuZXJzIiwiZXZlbnROYW1lcyIsIlBhZ2luYXRpb24iLCJDb21wb25lbnQiLCJyZW5kZXIiLCJ0YWJsZUlkIiwiY3VyclBhZ2UiLCJwYWdlU3RhcnRJbmRleCIsIlBBR0VfU1RBUlRfSU5ERVgiLCJzaG93VG90YWwiLCJTSE9XX1RPVEFMIiwiZGF0YVNpemUiLCJwYWdlTGlzdFJlbmRlcmVyIiwicGFnZUJ1dHRvblJlbmRlcmVyIiwicGFnaW5hdGlvblRvdGFsUmVuZGVyZXIiLCJQQUdJTkFUSU9OX1RPVEFMIiwiaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UiLCJISURFX1BBR0VfTElTVF9PTkxZX09ORV9QQUdFIiwidG90YWxQYWdlcyIsImxhc3RQYWdlIiwib25QYWdlQ2hhbmdlIiwic2l6ZVBlclBhZ2VMaXN0IiwiU0laRV9QRVJfUEFHRV9MSVNUIiwiY3VyclNpemVQZXJQYWdlIiwiaGlkZVNpemVQZXJQYWdlIiwiSElERV9TSVpFX1BFUl9QQUdFIiwic2l6ZVBlclBhZ2VSZW5kZXJlciIsInNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXIiLCJvblNpemVQZXJQYWdlQ2hhbmdlIiwiYm9vdHN0cmFwNCIsImRpc2FibGVQYWdlVGl0bGUiLCJwYWdpbmF0aW9uU2l6ZSIsIlBBR0lOQVRJT05fU0laRSIsIndpdGhGaXJzdEFuZExhc3QiLCJXaXRoX0ZJUlNUX0FORF9MQVNUIiwiYWx3YXlzU2hvd0FsbEJ0bnMiLCJTSE9XX0FMTF9QQUdFX0JUTlMiLCJmaXJzdFBhZ2VUZXh0IiwiRklSU1RfUEFHRV9URVhUIiwicHJlUGFnZVRleHQiLCJQUkVfUEFHRV9URVhUIiwibmV4dFBhZ2VUZXh0IiwiTkVYVF9QQUdFX1RFWFQiLCJsYXN0UGFnZVRleHQiLCJMQVNUX1BBR0VfVEVYVCIsIm5leHRQYWdlVGl0bGUiLCJORVhUX1BBR0VfVElUTEUiLCJwcmVQYWdlVGl0bGUiLCJQUkVfUEFHRV9USVRMRSIsImZpcnN0UGFnZVRpdGxlIiwiRklSU1RfUEFHRV9USVRMRSIsImxhc3RQYWdlVGl0bGUiLCJMQVNUX1BBR0VfVElUTEUiLCJyZXN0IiwicHJvcHMiLCJwYWdlcyIsImNhbGN1bGF0ZVBhZ2VTdGF0dXMiLCJjYWxjdWxhdGVQYWdlcyIsInBhZ2VMaXN0Q2xhc3MiLCJjbGFzc05hbWUiLCJTaXplUGVyUGFnZURyb3Bkb3duV2l0aEFkYXB0ZXIiLCJQYWdpbmF0aW9uVG90YWxXaXRoQWRhcHRlciIsIlBhZ2luYXRpb25MaXN0V2l0aEFkYXB0ZXIiLCJwYWdpbmF0aW9uTGlzdEFkYXB0ZXIiLCJXcmFwcGVkQ29tcG9uZW50IiwiUGFnaW5hdG9uTGlzdCIsIm1hcCIsInBhZ2VQcm9wcyIsImNsb25lRWxlbWVudCIsInBhZ2UiLCJwcm9wVHlwZXMiLCJhcnJheU9mIiwic2hhcGUiLCJvbmVPZlR5cGUiLCJub2RlIiwibnVtYmVyIiwic3RyaW5nIiwiYWN0aXZlIiwiYm9vbCIsImRpc2FibGUiLCJ0aXRsZSIsImlzUmVxdWlyZWQiLCJmdW5jIiwiRXh0ZW5kQmFzZSIsImJhY2tUb1ByZXZQYWdlIiwiaW5pdGlhbFN0YXRlIiwiY2FsY3VsYXRlVG90YWxQYWdlIiwiY2FsY3VsYXRlTGFzdFBhZ2UiLCJzaXplUGVyUGFnZSIsIk1hdGgiLCJjZWlsIiwiY2FsY3VsYXRlRnJvbVRvIiwib2Zmc2V0IiwiYWJzIiwiZnJvbSIsInRvIiwibWluIiwiZW5kUGFnZSIsInN0YXJ0UGFnZSIsIm1heCIsImZsb29yIiwiaXNTdGFydCIsImlzRW5kIiwiZmlsdGVyIiwiZGlzYWJsZWQiLCJwYWdlUmVzdWx0IiwiY2FsY3VsYXRlU2l6ZVBlclBhZ2VTdGF0dXMiLCJfc2l6ZVBlclBhZ2UiLCJ0ZXh0IiwiUHJvdmlkZXIiLCJQYWdpbmF0aW9uRGF0YUNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiUGFnaW5hdGlvbkRhdGFQcm92aWRlciIsImlzUmVtb3RlUGFnaW5hdGlvbiIsInJlbmRlckRlZmF1bHRQYWdpbmF0aW9uIiwicGFnaW5hdGlvbiIsIm9wdGlvbnMiLCJjdXN0b20iLCJnZXRQYWdpbmF0aW9uUHJvcHMiLCJkYXRhIiwiY29tcG9uZW50RGlkVXBkYXRlIiwibmV4dFByb3BzIiwic3VwZXIiLCJuZXdQYWdlIiwiYWxpZ25QYWdlIiwib25EYXRhU2l6ZUNoYW5nZSIsImdldEJ5Q3VyclBhZ2UiLCJzZXRSZW1vdGVFbWl0dGVyIiwic2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIiLCJjaGlsZHJlbiIsImFycmF5IiwicmVtb3RlRW1pdHRlciIsIm9iamVjdCIsIkNvbnN1bWVyIiwiUGFnZUJ1dHRvbiIsImNvbnN0cnVjdG9yIiwiaGFuZGxlQ2xpY2siLCJlIiwicHJldmVudERlZmF1bHQiLCJjbGFzc2VzIiwiaHJlZiIsIm9uQ2xpY2siLCJQYWdpbmF0aW9uVG90YWwiLCJzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlciIsImRyb3Bkb3duT3BlbiIsImNsb3NlRHJvcERvd24iLCJ0b2dnbGVEcm9wRG93biIsImhhbmRsZUNoYW5nZVNpemVQZXJQYWdlIiwic2V0U3RhdGUiLCJvcGVuIiwib3B0aW9uUmVuZGVyZXIiLCJvbkJsdXIiLCJzaXplUGVyUGFnZURyb3BEb3duRGVmYXVsdFByb3BzIiwiaGlkZGVuIiwiYnRuQ29udGV4dHVhbCIsInZhcmlhdGlvbiIsIlNpemVQZXJQYWdlRHJvcERvd24iLCJvcGVuQ2xhc3MiLCJkcm9wZG93bkNsYXNzZXMiLCJpZCIsInN0eWxlIiwidmlzaWJpbGl0eSIsInJvbGUiLCJvcHRpb24iLCJvbmVPZiIsInBhZ2luYXRpb25Ub3RhbEFkYXB0ZXIiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsImVtcHR5RnVuY3Rpb24iLCJlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0IiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJzaGltIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwibG9jYXRpb24iLCJwcm9wRnVsbE5hbWUiLCJzZWNyZXQiLCJnZXRTaGltIiwiUmVhY3RQcm9wVHlwZXMiLCJiaWdpbnQiLCJzeW1ib2wiLCJhbnkiLCJlbGVtZW50IiwiZWxlbWVudFR5cGUiLCJpbnN0YW5jZU9mIiwib2JqZWN0T2YiLCJleGFjdCIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiU2l6ZVBlclBhZ2VPcHRpb24iLCJ0YWJJbmRleCIsIm9uTW91c2VEb3duIiwiaGFuZGxlQ2hhbmdlUGFnZSIsImN1cnJQcm9wcyIsInRvdGFsU2l6ZSIsInNlbGVjdGVkU2l6ZSIsInBhcnNlSW50IiwibmV3VG90YWxQYWdlcyIsIm5ld0xhc3RQYWdlIiwiZW5kSW5kZXgiLCJnZXROb3JtYWxpemVkUGFnZSIsInByZXZEYXRhU2l6ZSIsImVuZCIsInN0YXJ0Iiwic3RhcnRJbmRleCIsInJlc3VsdCIsImhhc093biIsImhhc093blByb3BlcnR5IiwiY2xhc3NOYW1lcyIsImFwcGVuZENsYXNzIiwicGFyc2VWYWx1ZSIsImlzQXJyYXkiLCJ0b1N0cmluZyIsImluY2x1ZGVzIiwibmV3Q2xhc3MiLCJkZWZhdWx0IiwiU3RhdGVDb250ZXh0IiwiU3RhdGVQcm92aWRlciIsImdldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyIiwiaGFuZGxlRGF0YVNpemVDaGFuZ2UiLCJkYXRhQ2hhbmdlTGlzdGVuZXIiLCJuZXdEYXRhU2l6ZSIsImZvcmNlVXBkYXRlIiwicGFnaW5hdGlvblByb3BzIiwicGFnaW5hdGlvblRhYmxlUHJvcHMiLCJQYWdpbmF0aW9uTGlzdFN0YW5kYWxvbmUiLCJQYWdpbmF0aW9uVG90YWxTdGFuZGFsb25lIiwiU2l6ZVBlclBhZ2VEcm9wZG93blN0YW5kYWxvbmUiLCJDdXN0b21pemFibGVQcm92aWRlciIsIlBhZ2luYXRpb25Qcm92aWRlciIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==
|
|
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):[]}},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:T,hideSizePerPage:S=d.default.HIDE_SIZE_PER_PAGE,sizePerPageRenderer:m=null,sizePerPageOptionRenderer:E=null,onSizePerPageChange:b,bootstrap4:y=!1,disablePageTitle:O=!1,paginationSize:A=d.default.PAGINATION_SIZE,withFirstAndLast:z=d.default.With_FIRST_AND_LAST,alwaysShowAllBtns:L=d.default.SHOW_ALL_PAGE_BTNS,firstPageText:x=d.default.FIRST_PAGE_TEXT,prePageText:w=d.default.PRE_PAGE_TEXT,nextPageText:I=d.default.NEXT_PAGE_TEXT,lastPageText:R=d.default.LAST_PAGE_TEXT,nextPageTitle:C=d.default.NEXT_PAGE_TITLE,prePageTitle:D=d.default.PRE_PAGE_TITLE,firstPageTitle:j=d.default.FIRST_PAGE_TITLE,lastPageTitle:M=d.default.LAST_PAGE_TITLE,...N}=this.props,G=this.calculatePageStatus(this.calculatePages(g,h),h),B=(0,l.default)("react-bootstrap-table-pagination-list","col-md-6 col-xs-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-sm-6 col-lg-6"},u.default.createElement(f.SizePerPageDropdownWithAdapter,{bootstrap4:y,tableId:e,sizePerPageList:v,currSizePerPage:T,hideSizePerPage:S,sizePerPageRenderer:m,sizePerPageOptionRenderer:E,onSizePerPageChange:b}),n?u.default.createElement(P.PaginationTotalWithAdapter,{currPage:t,currSizePerPage:T,pageStartIndex:a,dataSize:r,paginationTotalRenderer:s}):null),i?i({pages:G,onPageChange:_}):u.default.createElement("div",{className:B},u.default.createElement(c.PaginationListWithAdapter,{...N,currPage:t,currSizePerPage:T,pageStartIndex:a,lastPage:h,totalPages:g,pageButtonRenderer:o,onPageChange:_,paginationSize:A,withFirstAndLast:z,firstPageText:x,prePageText:w,nextPageText:I,lastPageText:R,alwaysShowAllBtns:L})))}static defaultProps={disablePageTitle:!1,bootstrap4:!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)},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},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)),o=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})}));o.defaultProps={pageButtonRenderer:null},t.default=o},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}))}}},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},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}))))},442(t){"use strict";t.exports=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)),i=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);i.defaultProps={paginationTotalRenderer:void 0},t.default=i},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,sizePerPageList:n,currSizePerPage:r,hideSizePerPage:i,sizePerPageRenderer:o,sizePerPageOptionRenderer:s}=this.props,{dropdownOpen:u}=this.state;return n.length>1&&!i?o?o({options:this.calculateSizePerPageStatus(),currSizePerPage:`${r}`,onSizePerPageChange:this.handleChangeSizePerPage}):l.default.createElement(e,{...this.props,currSizePerPage:`${r}`,options:this.calculateSizePerPageStatus(),optionRenderer:s,onSizePerPageChange:this.handleChangeSizePerPage,onClick:this.toggleDropDown,onBlur:this.closeDropDown,open:u,tableId:t,bootstrap4:a}):null}};t.SizePerPageDropdownWithAdapter=p(d.default),t.default=p},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,tableId:null};t.default=e=>{const{open:t,tableId:a,hidden:n,onClick:l,onBlur:u,options:d,className:p,variation:g,bootstrap4:c,btnContextual:P,optionRenderer:f,currSizePerPage:h,onSizePerPageChange:_}={...s,...e},v=t?"open show":"",T=(0,r.default)(v,"react-bs-table-sizePerPage-dropdown",g,p),S=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:S,type:"button",className:`btn ${P} dropdown-toggle`,"data-toggle":"dropdown","aria-expanded":t,onClick:l,onBlur:u},h," ",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":S},d.map(e=>f?f({...e,onSizePerPageChange:_}):i.default.createElement(o.default,{...e,key:e.text,bootstrap4:c,onSizePerPageChange:_}))))}},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}))))},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},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)),i=({text:e,page:t,onSizePerPageChange:a,bootstrap4:n=!1})=>n?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));i.defaultProps={bootstrap4:!1},t.default=i},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})}}},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})},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}},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)}()},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}},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})},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)))},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})))}},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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cUJyUixJQUFqQnNSLEVBQ0gsT0FBT0EsRUFBYXRVLFFBR3JCLElBQUlDLEVBQVNrVSxFQUF5QkUsR0FBWSxDQUdqRHJVLFFBQVMsQ0FBQyxHQU9YLE9BSEF1VSxFQUFvQkYsR0FBVXBULEtBQUtoQixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTb1UsR0FHcEVuVSxFQUFPRCxPQUNmLENDbkIwQm9VLENBQW9CLEssTURGMUNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLWxpc3QtYWRhcHRlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi1saXN0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdlLXJlc29sdmVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL2RhdGEtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnZS1idXR0b24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tc3RhbmRhbG9uZS50c3giLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tdG90YWwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tYWRhcHRlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc2l6ZS1wZXItcGFnZS1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi1saXN0LXN0YW5kYWxvbmUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tdG90YWwtYWRhcHRlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc2l6ZS1wZXItcGFnZS1vcHRpb24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24taGFuZGxlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc3RhbmRhbG9uZS1hZGFwdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdlLnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL2NvbnN0LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3N0YXRlLWNvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3IvaW5kZXgudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tdG90YWwtc3RhbmRhbG9uZS50c3giLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZU5nUGFnaW5hdG9yXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1BhZ2luYXRvclwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXykgPT4ge1xucmV0dXJuICIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnID8gUmVmbGVjdCA6IG51bGxcbnZhciBSZWZsZWN0QXBwbHkgPSBSICYmIHR5cGVvZiBSLmFwcGx5ID09PSAnZnVuY3Rpb24nXG4gID8gUi5hcHBseVxuICA6IGZ1bmN0aW9uIFJlZmxlY3RBcHBseSh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpO1xuICB9XG5cbnZhciBSZWZsZWN0T3duS2V5c1xuaWYgKFIgJiYgdHlwZW9mIFIub3duS2V5cyA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWZsZWN0T3duS2V5cyA9IFIub3duS2V5c1xufSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldClcbiAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFByb2Nlc3NFbWl0V2FybmluZyh3YXJuaW5nKSB7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUud2FybikgY29uc29sZS53YXJuKHdhcm5pbmcpO1xufVxuXG52YXIgTnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gTnVtYmVySXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICBFdmVudEVtaXR0ZXIuaW5pdC5jYWxsKHRoaXMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5tb2R1bGUuZXhwb3J0cy5vbmNlID0gb25jZTtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHNDb3VudCA9IDA7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbnZhciBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgbGlzdGVuZXIpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudEVtaXR0ZXIsICdkZWZhdWx0TWF4TGlzdGVuZXJzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkZWZhdWx0TWF4TGlzdGVuZXJzO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwIHx8IE51bWJlcklzTmFOKGFyZykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIGFyZyArICcuJyk7XG4gICAgfVxuICAgIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSBhcmc7XG4gIH1cbn0pO1xuXG5FdmVudEVtaXR0ZXIuaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICh0aGlzLl9ldmVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykge1xuICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn07XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA8IDAgfHwgTnVtYmVySXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiblwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBuICsgJy4nKTtcbiAgfVxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCkge1xuICBpZiAodGhhdC5fbWF4TGlzdGVuZXJzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICByZXR1cm4gdGhhdC5fbWF4TGlzdGVuZXJzO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIGdldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIF9nZXRNYXhMaXN0ZW5lcnModGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICB2YXIgZG9FcnJvciA9ICh0eXBlID09PSAnZXJyb3InKTtcblxuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpXG4gICAgZG9FcnJvciA9IChkb0Vycm9yICYmIGV2ZW50cy5lcnJvciA9PT0gdW5kZWZpbmVkKTtcbiAgZWxzZSBpZiAoIWRvRXJyb3IpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKGRvRXJyb3IpIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMClcbiAgICAgIGVyID0gYXJnc1swXTtcbiAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLy8gTm90ZTogVGhlIGNvbW1lbnRzIG9uIHRoZSBgdGhyb3dgIGxpbmVzIGFyZSBpbnRlbnRpb25hbCwgdGhleSBzaG93XG4gICAgICAvLyB1cCBpbiBOb2RlJ3Mgb3V0cHV0IGlmIHRoaXMgcmVzdWx0cyBpbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLlxuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgfVxuICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmhhbmRsZWQgZXJyb3IuJyArIChlciA/ICcgKCcgKyBlci5tZXNzYWdlICsgJyknIDogJycpKTtcbiAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgIHRocm93IGVycjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgfVxuXG4gIHZhciBoYW5kbGVyID0gZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFJlZmxlY3RBcHBseShoYW5kbGVyLCB0aGlzLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuID0gaGFuZGxlci5sZW5ndGg7XG4gICAgdmFyIGxpc3RlbmVycyA9IGFycmF5Q2xvbmUoaGFuZGxlciwgbGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgUmVmbGVjdEFwcGx5KGxpc3RlbmVyc1tpXSwgdGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIF9hZGRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBwcmVwZW5kKSB7XG4gIHZhciBtO1xuICB2YXIgZXZlbnRzO1xuICB2YXIgZXhpc3Rpbmc7XG5cbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0YXJnZXQuX2V2ZW50c0NvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgICBpZiAoZXZlbnRzLm5ld0xpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldC5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA/IGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gICAgICAvLyBSZS1hc3NpZ24gYGV2ZW50c2AgYmVjYXVzZSBhIG5ld0xpc3RlbmVyIGhhbmRsZXIgY291bGQgaGF2ZSBjYXVzZWQgdGhlXG4gICAgICAvLyB0aGlzLl9ldmVudHMgdG8gYmUgYXNzaWduZWQgdG8gYSBuZXcgb2JqZWN0XG4gICAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgICB9XG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV07XG4gIH1cblxuICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gICAgKyt0YXJnZXQuX2V2ZW50c0NvdW50O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPVxuICAgICAgICBwcmVwZW5kID8gW2xpc3RlbmVyLCBleGlzdGluZ10gOiBbZXhpc3RpbmcsIGxpc3RlbmVyXTtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB9IGVsc2UgaWYgKHByZXBlbmQpIHtcbiAgICAgIGV4aXN0aW5nLnVuc2hpZnQobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdGluZy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICAgIG0gPSBfZ2V0TWF4TGlzdGVuZXJzKHRhcmdldCk7XG4gICAgaWYgKG0gPiAwICYmIGV4aXN0aW5nLmxlbmd0aCA+IG0gJiYgIWV4aXN0aW5nLndhcm5lZCkge1xuICAgICAgZXhpc3Rpbmcud2FybmVkID0gdHJ1ZTtcbiAgICAgIC8vIE5vIGVycm9yIGNvZGUgZm9yIHRoaXMgc2luY2UgaXQgaXMgYSBXYXJuaW5nXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIHZhciB3ID0gbmV3IEVycm9yKCdQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5sZW5ndGggKyAnICcgKyBTdHJpbmcodHlwZSkgKyAnIGxpc3RlbmVycyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY3JlYXNlIGxpbWl0Jyk7XG4gICAgICB3Lm5hbWUgPSAnTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nJztcbiAgICAgIHcuZW1pdHRlciA9IHRhcmdldDtcbiAgICAgIHcudHlwZSA9IHR5cGU7XG4gICAgICB3LmNvdW50ID0gZXhpc3RpbmcubGVuZ3RoO1xuICAgICAgUHJvY2Vzc0VtaXRXYXJuaW5nKHcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gICAgfTtcblxuZnVuY3Rpb24gb25jZVdyYXBwZXIoKSB7XG4gIGlmICghdGhpcy5maXJlZCkge1xuICAgIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSwgdGhpcy53cmFwRm4pO1xuICAgIHRoaXMuZmlyZWQgPSB0cnVlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsIGFyZ3VtZW50cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX29uY2VXcmFwKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIHN0YXRlID0geyBmaXJlZDogZmFsc2UsIHdyYXBGbjogdW5kZWZpbmVkLCB0YXJnZXQ6IHRhcmdldCwgdHlwZTogdHlwZSwgbGlzdGVuZXI6IGxpc3RlbmVyIH07XG4gIHZhciB3cmFwcGVkID0gb25jZVdyYXBwZXIuYmluZChzdGF0ZSk7XG4gIHdyYXBwZWQubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgc3RhdGUud3JhcEZuID0gd3JhcHBlZDtcbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UodHlwZSwgbGlzdGVuZXIpIHtcbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gIHRoaXMub24odHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kT25jZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGxpc3QgPSBldmVudHNbdHlwZV07XG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8IGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0Lmxpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwb3NpdGlvbiA9IC0xO1xuXG4gICAgICAgIGZvciAoaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHwgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0W2ldLmxpc3RlbmVyO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICBpZiAocG9zaXRpb24gPT09IDApXG4gICAgICAgICAgbGlzdC5zaGlmdCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzcGxpY2VPbmUobGlzdCwgcG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgICAgIGV2ZW50c1t0eXBlXSA9IGxpc3RbMF07XG5cbiAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBvcmlnaW5hbExpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKHR5cGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMsIGV2ZW50cywgaTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGV2ZW50cyk7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lcnMgPSBldmVudHNbdHlwZV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgICAgIH0gZWxzZSBpZiAobGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTElGTyBvcmRlclxuICAgICAgICBmb3IgKGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuZnVuY3Rpb24gX2xpc3RlbmVycyh0YXJnZXQsIHR5cGUsIHVud3JhcCkge1xuICB2YXIgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcbiAgaWYgKGV2bGlzdGVuZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiB1bndyYXAgPyBbZXZsaXN0ZW5lci5saXN0ZW5lciB8fCBldmxpc3RlbmVyXSA6IFtldmxpc3RlbmVyXTtcblxuICByZXR1cm4gdW53cmFwID9cbiAgICB1bndyYXBMaXN0ZW5lcnMoZXZsaXN0ZW5lcikgOiBhcnJheUNsb25lKGV2bGlzdGVuZXIsIGV2bGlzdGVuZXIubGVuZ3RoKTtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCB0cnVlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmF3TGlzdGVuZXJzID0gZnVuY3Rpb24gcmF3TGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGlzdGVuZXJDb3VudC5jYWxsKGVtaXR0ZXIsIHR5cGUpO1xuICB9XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBsaXN0ZW5lckNvdW50O1xuZnVuY3Rpb24gbGlzdGVuZXJDb3VudCh0eXBlKSB7XG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG5cbiAgICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHJldHVybiB0aGlzLl9ldmVudHNDb3VudCA+IDAgPyBSZWZsZWN0T3duS2V5cyh0aGlzLl9ldmVudHMpIDogW107XG59O1xuXG5mdW5jdGlvbiBhcnJheUNsb25lKGFyciwgbikge1xuICB2YXIgY29weSA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpXG4gICAgY29weVtpXSA9IGFycltpXTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKDsgaW5kZXggKyAxIDwgbGlzdC5sZW5ndGg7IGluZGV4KyspXG4gICAgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07XG4gIGxpc3QucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHVud3JhcExpc3RlbmVycyhhcnIpIHtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyArK2kpIHtcbiAgICByZXRbaV0gPSBhcnJbaV0ubGlzdGVuZXIgfHwgYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG9uY2UoZW1pdHRlciwgbmFtZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXJyKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKG5hbWUsIHJlc29sdmVyKTtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgaWYgKHR5cGVvZiBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCByZXNvbHZlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChuYW1lICE9PSAnZXJyb3InKSB7XG4gICAgICBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBlcnJvckxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgaGFuZGxlciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsICdlcnJvcicsIGhhbmRsZXIsIGZsYWdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgbGlzdGVuZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICBlbWl0dGVyLm9uY2UobmFtZSwgbGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0dGVyLm9uKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEV2ZW50VGFyZ2V0IGRvZXMgbm90IGhhdmUgYGVycm9yYCBldmVudCBzZW1hbnRpY3MgbGlrZSBOb2RlXG4gICAgLy8gRXZlbnRFbWl0dGVycywgd2UgZG8gbm90IGxpc3RlbiBmb3IgYGVycm9yYCBldmVudHMgaGVyZS5cbiAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZnVuY3Rpb24gd3JhcExpc3RlbmVyKGFyZykge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBidWlsdGluIGB7IG9uY2U6IHRydWUgfWAgc3VwcG9ydCBzbyB3ZVxuICAgICAgLy8gaGF2ZSB0byBkbyBpdCBtYW51YWxseS5cbiAgICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXIoYXJnKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJlbWl0dGVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGVtaXR0ZXIpO1xuICB9XG59XG4iLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgYXJyb3ctYm9keS1zdHlsZTogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgQ29uc3QgZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCBwYWdlUmVzb2x2ZXIgZnJvbSBcIi4vcGFnZS1yZXNvbHZlclwiO1xuaW1wb3J0IHBhZ2luYXRpb25IYW5kbGVyIGZyb20gXCIuL3BhZ2luYXRpb24taGFuZGxlclwiO1xuaW1wb3J0IHsgUGFnaW5hdGlvbkxpc3RXaXRoQWRhcHRlciB9IGZyb20gXCIuL3BhZ2luYXRpb24tbGlzdC1hZGFwdGVyXCI7XG5pbXBvcnQgeyBQYWdpbmF0aW9uVG90YWxXaXRoQWRhcHRlciB9IGZyb20gXCIuL3BhZ2luYXRpb24tdG90YWwtYWRhcHRlclwiO1xuaW1wb3J0IHsgU2l6ZVBlclBhZ2VEcm9wZG93bldpdGhBZGFwdGVyIH0gZnJvbSBcIi4vc2l6ZS1wZXItcGFnZS1kcm9wZG93bi1hZGFwdGVyXCI7XG5cbmNsYXNzIFBhZ2luYXRpb24gZXh0ZW5kcyBwYWdlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICB0YWJsZUlkLFxuICAgICAgY3VyclBhZ2UsXG4gICAgICBwYWdlU3RhcnRJbmRleCA9IENvbnN0LlBBR0VfU1RBUlRfSU5ERVgsXG4gICAgICBzaG93VG90YWwgPSBDb25zdC5TSE9XX1RPVEFMLFxuICAgICAgZGF0YVNpemUsXG4gICAgICBwYWdlTGlzdFJlbmRlcmVyID0gbnVsbCxcbiAgICAgIHBhZ2VCdXR0b25SZW5kZXJlciA9IG51bGwsXG4gICAgICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlciA9IENvbnN0LlBBR0lOQVRJT05fVE9UQUwsXG4gICAgICBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSA9IENvbnN0LkhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0UsXG4gICAgICB0b3RhbFBhZ2VzLFxuICAgICAgbGFzdFBhZ2UsXG4gICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICBzaXplUGVyUGFnZUxpc3QgPSBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1QsXG4gICAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICBoaWRlU2l6ZVBlclBhZ2UgPSBDb25zdC5ISURFX1NJWkVfUEVSX1BBR0UsXG4gICAgICBzaXplUGVyUGFnZVJlbmRlcmVyID0gbnVsbCxcbiAgICAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXIgPSBudWxsLFxuICAgICAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgICAgIGJvb3RzdHJhcDQgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVQYWdlVGl0bGUgPSBmYWxzZSxcbiAgICAgIHBhZ2luYXRpb25TaXplID0gQ29uc3QuUEFHSU5BVElPTl9TSVpFLFxuICAgICAgd2l0aEZpcnN0QW5kTGFzdCA9IENvbnN0LldpdGhfRklSU1RfQU5EX0xBU1QsXG4gICAgICBhbHdheXNTaG93QWxsQnRucyA9IENvbnN0LlNIT1dfQUxMX1BBR0VfQlROUyxcbiAgICAgIGZpcnN0UGFnZVRleHQgPSBDb25zdC5GSVJTVF9QQUdFX1RFWFQsXG4gICAgICBwcmVQYWdlVGV4dCA9IENvbnN0LlBSRV9QQUdFX1RFWFQsXG4gICAgICBuZXh0UGFnZVRleHQgPSBDb25zdC5ORVhUX1BBR0VfVEVYVCxcbiAgICAgIGxhc3RQYWdlVGV4dCA9IENvbnN0LkxBU1RfUEFHRV9URVhULFxuICAgICAgbmV4dFBhZ2VUaXRsZSA9IENvbnN0Lk5FWFRfUEFHRV9USVRMRSxcbiAgICAgIHByZVBhZ2VUaXRsZSA9IENvbnN0LlBSRV9QQUdFX1RJVExFLFxuICAgICAgZmlyc3RQYWdlVGl0bGUgPSBDb25zdC5GSVJTVF9QQUdFX1RJVExFLFxuICAgICAgbGFzdFBhZ2VUaXRsZSA9IENvbnN0LkxBU1RfUEFHRV9USVRMRSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5jYWxjdWxhdGVQYWdlU3RhdHVzKFxuICAgICAgdGhpcy5jYWxjdWxhdGVQYWdlcyh0b3RhbFBhZ2VzLCBsYXN0UGFnZSksXG4gICAgICBsYXN0UGFnZVxuICAgICk7XG4gICAgY29uc3QgcGFnZUxpc3RDbGFzcyA9IGNzKFxuICAgICAgXCJyZWFjdC1ib290c3RyYXAtdGFibGUtcGFnaW5hdGlvbi1saXN0XCIsXG4gICAgICBcImNvbC1tZC02IGNvbC14cy02IGNvbC1zbS02IGNvbC1sZy02XCIsXG4gICAgICB7XG4gICAgICAgIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2luYXRpb24tbGlzdC1oaWRkZW5cIjpcbiAgICAgICAgICBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSAmJiB0b3RhbFBhZ2VzID09PSAxLFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93IHJlYWN0LWJvb3RzdHJhcC10YWJsZS1wYWdpbmF0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTYgY29sLXhzLTYgY29sLXNtLTYgY29sLWxnLTZcIj5cbiAgICAgICAgICA8U2l6ZVBlclBhZ2VEcm9wZG93bldpdGhBZGFwdGVyXG4gICAgICAgICAgICBib290c3RyYXA0PXtib290c3RyYXA0fVxuICAgICAgICAgICAgdGFibGVJZD17dGFibGVJZH1cbiAgICAgICAgICAgIHNpemVQZXJQYWdlTGlzdD17c2l6ZVBlclBhZ2VMaXN0fVxuICAgICAgICAgICAgY3VyclNpemVQZXJQYWdlPXtjdXJyU2l6ZVBlclBhZ2V9XG4gICAgICAgICAgICBoaWRlU2l6ZVBlclBhZ2U9e2hpZGVTaXplUGVyUGFnZX1cbiAgICAgICAgICAgIHNpemVQZXJQYWdlUmVuZGVyZXI9e3NpemVQZXJQYWdlUmVuZGVyZXJ9XG4gICAgICAgICAgICBzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyPXtzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyfVxuICAgICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZT17b25TaXplUGVyUGFnZUNoYW5nZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzaG93VG90YWwgPyAoXG4gICAgICAgICAgICA8UGFnaW5hdGlvblRvdGFsV2l0aEFkYXB0ZXJcbiAgICAgICAgICAgICAgY3VyclBhZ2U9e2N1cnJQYWdlfVxuICAgICAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e2N1cnJTaXplUGVyUGFnZX1cbiAgICAgICAgICAgICAgcGFnZVN0YXJ0SW5kZXg9e3BhZ2VTdGFydEluZGV4fVxuICAgICAgICAgICAgICBkYXRhU2l6ZT17ZGF0YVNpemV9XG4gICAgICAgICAgICAgIHBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyPXtwYWdpbmF0aW9uVG90YWxSZW5kZXJlcn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7cGFnZUxpc3RSZW5kZXJlciA/IChcbiAgICAgICAgICBwYWdlTGlzdFJlbmRlcmVyKHtcbiAgICAgICAgICAgIHBhZ2VzLFxuICAgICAgICAgICAgb25QYWdlQ2hhbmdlLFxuICAgICAgICAgIH0pXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3BhZ2VMaXN0Q2xhc3N9PlxuICAgICAgICAgICAgPFBhZ2luYXRpb25MaXN0V2l0aEFkYXB0ZXJcbiAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgIGN1cnJQYWdlPXtjdXJyUGFnZX1cbiAgICAgICAgICAgICAgY3VyclNpemVQZXJQYWdlPXtjdXJyU2l6ZVBlclBhZ2V9XG4gICAgICAgICAgICAgIHBhZ2VTdGFydEluZGV4PXtwYWdlU3RhcnRJbmRleH1cbiAgICAgICAgICAgICAgbGFzdFBhZ2U9e2xhc3RQYWdlfVxuICAgICAgICAgICAgICB0b3RhbFBhZ2VzPXt0b3RhbFBhZ2VzfVxuICAgICAgICAgICAgICBwYWdlQnV0dG9uUmVuZGVyZXI9e3BhZ2VCdXR0b25SZW5kZXJlcn1cbiAgICAgICAgICAgICAgb25QYWdlQ2hhbmdlPXtvblBhZ2VDaGFuZ2V9XG4gICAgICAgICAgICAgIHBhZ2luYXRpb25TaXplPXtwYWdpbmF0aW9uU2l6ZX1cbiAgICAgICAgICAgICAgd2l0aEZpcnN0QW5kTGFzdD17d2l0aEZpcnN0QW5kTGFzdH1cbiAgICAgICAgICAgICAgZmlyc3RQYWdlVGV4dD17Zmlyc3RQYWdlVGV4dH1cbiAgICAgICAgICAgICAgcHJlUGFnZVRleHQ9e3ByZVBhZ2VUZXh0fVxuICAgICAgICAgICAgICBuZXh0UGFnZVRleHQ9e25leHRQYWdlVGV4dH1cbiAgICAgICAgICAgICAgbGFzdFBhZ2VUZXh0PXtsYXN0UGFnZVRleHR9XG4gICAgICAgICAgICAgIGFsd2F5c1Nob3dBbGxCdG5zPXthbHdheXNTaG93QWxsQnRuc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXNhYmxlUGFnZVRpdGxlOiBmYWxzZSxcbiAgICBib290c3RyYXA0OiBmYWxzZSxcbiAgICBwYWdlU3RhcnRJbmRleDogQ29uc3QuUEFHRV9TVEFSVF9JTkRFWCxcbiAgICBwYWdpbmF0aW9uU2l6ZTogQ29uc3QuUEFHSU5BVElPTl9TSVpFLFxuICAgIHdpdGhGaXJzdEFuZExhc3Q6IENvbnN0LldpdGhfRklSU1RfQU5EX0xBU1QsXG4gICAgYWx3YXlzU2hvd0FsbEJ0bnM6IENvbnN0LlNIT1dfQUxMX1BBR0VfQlROUyxcbiAgICBzaG93VG90YWw6IENvbnN0LlNIT1dfVE9UQUwsXG4gICAgcGFnZUxpc3RSZW5kZXJlcjogbnVsbCxcbiAgICBwYWdlQnV0dG9uUmVuZGVyZXI6IG51bGwsXG4gICAgc2l6ZVBlclBhZ2VSZW5kZXJlcjogbnVsbCxcbiAgICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcjogQ29uc3QuUEFHSU5BVElPTl9UT1RBTCxcbiAgICBzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyOiBudWxsLFxuICAgIGZpcnN0UGFnZVRleHQ6IENvbnN0LkZJUlNUX1BBR0VfVEVYVCxcbiAgICBwcmVQYWdlVGV4dDogQ29uc3QuUFJFX1BBR0VfVEVYVCxcbiAgICBuZXh0UGFnZVRleHQ6IENvbnN0Lk5FWFRfUEFHRV9URVhULFxuICAgIGxhc3RQYWdlVGV4dDogQ29uc3QuTEFTVF9QQUdFX1RFWFQsXG4gICAgc2l6ZVBlclBhZ2VMaXN0OiBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1QsXG4gICAgbmV4dFBhZ2VUaXRsZTogQ29uc3QuTkVYVF9QQUdFX1RJVExFLFxuICAgIHByZVBhZ2VUaXRsZTogQ29uc3QuUFJFX1BBR0VfVElUTEUsXG4gICAgZmlyc3RQYWdlVGl0bGU6IENvbnN0LkZJUlNUX1BBR0VfVElUTEUsXG4gICAgbGFzdFBhZ2VUaXRsZTogQ29uc3QuTEFTVF9QQUdFX1RJVExFLFxuICAgIGhpZGVTaXplUGVyUGFnZTogQ29uc3QuSElERV9TSVpFX1BFUl9QQUdFLFxuICAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlOiBDb25zdC5ISURFX1BBR0VfTElTVF9PTkxZX09ORV9QQUdFLFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBwYWdpbmF0aW9uSGFuZGxlcihQYWdpbmF0aW9uKTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBwYWdlUmVzb2x2ZXIgZnJvbSBcIi4vcGFnZS1yZXNvbHZlclwiO1xuaW1wb3J0IFBhZ2luYXRpb25MaXN0IGZyb20gXCIuL3BhZ2luYXRpb24tbGlzdFwiO1xuXG5jb25zdCBwYWdpbmF0aW9uTGlzdEFkYXB0ZXIgPSAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PlxuICBjbGFzcyBQYWdpbmF0aW9uTGlzdEFkYXB0ZXIgZXh0ZW5kcyBwYWdlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBsYXN0UGFnZSxcbiAgICAgICAgdG90YWxQYWdlcyxcbiAgICAgICAgcGFnZUJ1dHRvblJlbmRlcmVyLFxuICAgICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICAgIGRpc2FibGVQYWdlVGl0bGUsXG4gICAgICAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBwYWdlcyA9IHRoaXMuY2FsY3VsYXRlUGFnZVN0YXR1cyhcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVQYWdlcyh0b3RhbFBhZ2VzLCBsYXN0UGFnZSksXG4gICAgICAgIGxhc3RQYWdlLFxuICAgICAgICBkaXNhYmxlUGFnZVRpdGxlXG4gICAgICApO1xuICAgICAgaWYgKHRvdGFsUGFnZXMgPT09IDEgJiYgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8V3JhcHBlZENvbXBvbmVudFxuICAgICAgICAgIHBhZ2VCdXR0b25SZW5kZXJlcj17cGFnZUJ1dHRvblJlbmRlcmVyfVxuICAgICAgICAgIG9uUGFnZUNoYW5nZT17b25QYWdlQ2hhbmdlfVxuICAgICAgICAgIHBhZ2VzPXtwYWdlc31cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgY29uc3QgUGFnaW5hdGlvbkxpc3RXaXRoQWRhcHRlciA9IHBhZ2luYXRpb25MaXN0QWRhcHRlcihQYWdpbmF0aW9uTGlzdCk7XG5leHBvcnQgZGVmYXVsdCBwYWdpbmF0aW9uTGlzdEFkYXB0ZXI7XG4iLCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IFBhZ2VCdXR0b24gZnJvbSBcIi4vcGFnZS1idXR0b25cIjtcblxuaW50ZXJmYWNlIFBhZ2luYXRpb25MaXN0UHJvcHMge1xuICBwYWdlczogQXJyYXk8e1xuICAgIHBhZ2U6IFJlYWN0LlJlYWN0Tm9kZSB8IG51bWJlciB8IHN0cmluZztcbiAgICBhY3RpdmU/OiBib29sZWFuO1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgfT47XG4gIG9uUGFnZUNoYW5nZTogKHBhZ2U6IGFueSkgPT4gdm9pZDtcbiAgcGFnZUJ1dHRvblJlbmRlcmVyPzogKHByb3BzOiBhbnkpID0+IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGw7XG59XG5cbmNvbnN0IFBhZ2luYXRvbkxpc3QgPSAocHJvcHM6IFBhZ2luYXRpb25MaXN0UHJvcHMpID0+IChcbiAgPHVsIGNsYXNzTmFtZT1cInBhZ2luYXRpb24gcmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2UtYnRucy11bFwiPlxuICAgIHtwcm9wcy5wYWdlcy5tYXAoKHBhZ2VQcm9wczogYW55KSA9PiB7XG4gICAgICBpZiAocHJvcHMucGFnZUJ1dHRvblJlbmRlcmVyKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBwcm9wcy5wYWdlQnV0dG9uUmVuZGVyZXIoe1xuICAgICAgICAgIC4uLnBhZ2VQcm9wcyxcbiAgICAgICAgICBvblBhZ2VDaGFuZ2U6IHByb3BzLm9uUGFnZUNoYW5nZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlbGVtZW50ID8gUmVhY3QuY2xvbmVFbGVtZW50KGVsZW1lbnQsIHsga2V5OiBwYWdlUHJvcHMucGFnZSB9KSA6IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8UGFnZUJ1dHRvblxuICAgICAgICAgIGtleT17cGFnZVByb3BzLnBhZ2V9XG4gICAgICAgICAgey4uLnBhZ2VQcm9wc31cbiAgICAgICAgICBvblBhZ2VDaGFuZ2U9e3Byb3BzLm9uUGFnZUNoYW5nZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSl9XG4gIDwvdWw+XG4pO1xuXG5QYWdpbmF0b25MaXN0LmRlZmF1bHRQcm9wcyA9IHtcbiAgcGFnZUJ1dHRvblJlbmRlcmVyOiBudWxsLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUGFnaW5hdG9uTGlzdDtcbiIsIi8qIGVzbGludCBuby1taXhlZC1vcGVyYXRvcnM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoRXh0ZW5kQmFzZTogYW55KSA9PlxuICBjbGFzcyBQYWdlUmVzb2x2ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8dHlwZW9mIEV4dGVuZEJhc2U+IHtcbiAgICBiYWNrVG9QcmV2UGFnZSgpIHtcbiAgICAgIGNvbnN0IHsgY3VyclBhZ2UsIHBhZ2VTdGFydEluZGV4IH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIGN1cnJQYWdlIC0gMSA8IHBhZ2VTdGFydEluZGV4ID8gcGFnZVN0YXJ0SW5kZXggOiBjdXJyUGFnZSAtIDE7XG4gICAgfVxuXG4gICAgaW5pdGlhbFN0YXRlKCkge1xuICAgICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKCk7XG4gICAgICBjb25zdCBsYXN0UGFnZSA9IHRoaXMuY2FsY3VsYXRlTGFzdFBhZ2UodG90YWxQYWdlcyk7XG4gICAgICByZXR1cm4geyB0b3RhbFBhZ2VzLCBsYXN0UGFnZSB9O1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZVRvdGFsUGFnZShcbiAgICAgIHNpemVQZXJQYWdlID0gdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICBkYXRhU2l6ZSA9IHRoaXMucHJvcHMuZGF0YVNpemVcbiAgICApIHtcbiAgICAgIHJldHVybiBNYXRoLmNlaWwoZGF0YVNpemUgLyBzaXplUGVyUGFnZSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlTGFzdFBhZ2UodG90YWxQYWdlczogYW55KSB7XG4gICAgICBjb25zdCB7IHBhZ2VTdGFydEluZGV4IH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIHBhZ2VTdGFydEluZGV4ICsgdG90YWxQYWdlcyAtIDE7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlRnJvbVRvKCkge1xuICAgICAgY29uc3QgeyBkYXRhU2l6ZSwgY3VyclBhZ2UsIGN1cnJTaXplUGVyUGFnZSwgcGFnZVN0YXJ0SW5kZXggfSA9XG4gICAgICAgIHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicyhDb25zdC5QQUdFX1NUQVJUX0lOREVYIC0gcGFnZVN0YXJ0SW5kZXgpO1xuXG4gICAgICBsZXQgZnJvbSA9IChjdXJyUGFnZSAtIHBhZ2VTdGFydEluZGV4KSAqIGN1cnJTaXplUGVyUGFnZTtcbiAgICAgIGZyb20gPSBkYXRhU2l6ZSA9PT0gMCA/IDAgOiBmcm9tICsgMTtcbiAgICAgIGxldCB0byA9IE1hdGgubWluKGN1cnJTaXplUGVyUGFnZSAqIChjdXJyUGFnZSArIG9mZnNldCksIGRhdGFTaXplKTtcbiAgICAgIGlmICh0byA+IGRhdGFTaXplKSB0byA9IGRhdGFTaXplO1xuXG4gICAgICByZXR1cm4gW2Zyb20sIHRvXTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVQYWdlcyh0b3RhbFBhZ2VzOiBhbnksIGxhc3RQYWdlOiBhbnkpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3VyclBhZ2UsXG4gICAgICAgIHBhZ2luYXRpb25TaXplLFxuICAgICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgICAgd2l0aEZpcnN0QW5kTGFzdCxcbiAgICAgICAgZmlyc3RQYWdlVGV4dCxcbiAgICAgICAgcHJlUGFnZVRleHQsXG4gICAgICAgIG5leHRQYWdlVGV4dCxcbiAgICAgICAgbGFzdFBhZ2VUZXh0LFxuICAgICAgICBhbHdheXNTaG93QWxsQnRucyxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBsZXQgcGFnZXM6IGFueSA9IFtdO1xuICAgICAgbGV0IGVuZFBhZ2UgPSB0b3RhbFBhZ2VzO1xuICAgICAgaWYgKGVuZFBhZ2UgPD0gMCkgcmV0dXJuIFtdO1xuXG4gICAgICBsZXQgc3RhcnRQYWdlID0gTWF0aC5tYXgoXG4gICAgICAgIGN1cnJQYWdlIC0gTWF0aC5mbG9vcihwYWdpbmF0aW9uU2l6ZSAvIDIpLFxuICAgICAgICBwYWdlU3RhcnRJbmRleFxuICAgICAgKTtcbiAgICAgIGVuZFBhZ2UgPSBzdGFydFBhZ2UgKyBwYWdpbmF0aW9uU2l6ZSAtIDE7XG5cbiAgICAgIGlmIChlbmRQYWdlID4gbGFzdFBhZ2UpIHtcbiAgICAgICAgZW5kUGFnZSA9IGxhc3RQYWdlO1xuICAgICAgICBzdGFydFBhZ2UgPSBlbmRQYWdlIC0gcGFnaW5hdGlvblNpemUgKyAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWx3YXlzU2hvd0FsbEJ0bnMpIHtcbiAgICAgICAgaWYgKHdpdGhGaXJzdEFuZExhc3QpIHtcbiAgICAgICAgICBwYWdlcyA9IFtmaXJzdFBhZ2VUZXh0LCBwcmVQYWdlVGV4dF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFnZXMgPSBbcHJlUGFnZVRleHRdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgc3RhcnRQYWdlICE9PSBwYWdlU3RhcnRJbmRleCAmJlxuICAgICAgICB0b3RhbFBhZ2VzID4gcGFnaW5hdGlvblNpemUgJiZcbiAgICAgICAgd2l0aEZpcnN0QW5kTGFzdCAmJlxuICAgICAgICBwYWdlcy5sZW5ndGggPT09IDBcbiAgICAgICkge1xuICAgICAgICBwYWdlcyA9IFtmaXJzdFBhZ2VUZXh0LCBwcmVQYWdlVGV4dF07XG4gICAgICB9IGVsc2UgaWYgKHRvdGFsUGFnZXMgPiAxICYmIHBhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBwYWdlcyA9IFtwcmVQYWdlVGV4dF07XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSBzdGFydFBhZ2U7IGkgPD0gZW5kUGFnZTsgaSArPSAxKSB7XG4gICAgICAgIGlmIChpID49IHBhZ2VTdGFydEluZGV4KSBwYWdlcy5wdXNoKGkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWx3YXlzU2hvd0FsbEJ0bnMgfHwgKGVuZFBhZ2UgPD0gbGFzdFBhZ2UgJiYgcGFnZXMubGVuZ3RoID4gMSkpIHtcbiAgICAgICAgcGFnZXMucHVzaChuZXh0UGFnZVRleHQpO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAoZW5kUGFnZSAhPT0gbGFzdFBhZ2UgJiYgd2l0aEZpcnN0QW5kTGFzdCkgfHxcbiAgICAgICAgKHdpdGhGaXJzdEFuZExhc3QgJiYgYWx3YXlzU2hvd0FsbEJ0bnMpXG4gICAgICApIHtcbiAgICAgICAgcGFnZXMucHVzaChsYXN0UGFnZVRleHQpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiAoKGVuZFBhZ2UgPD0gbGFzdFBhZ2UgJiYgcGFnZXMubGVuZ3RoID4gMSkgfHwgYWx3YXlzU2hvd0FsbEJ0bnMpIHtcbiAgICAgIC8vICAgcGFnZXMucHVzaChuZXh0UGFnZVRleHQpO1xuICAgICAgLy8gfVxuICAgICAgLy8gaWYgKGVuZFBhZ2UgIT09IGxhc3RQYWdlICYmIHdpdGhGaXJzdEFuZExhc3QpIHtcbiAgICAgIC8vICAgcGFnZXMucHVzaChsYXN0UGFnZVRleHQpO1xuICAgICAgLy8gfVxuXG4gICAgICByZXR1cm4gcGFnZXM7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlUGFnZVN0YXR1cyhwYWdlcyA9IFtdLCBsYXN0UGFnZTogYW55LCBkaXNhYmxlUGFnZVRpdGxlID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3VyclBhZ2UsXG4gICAgICAgIHBhZ2VTdGFydEluZGV4LFxuICAgICAgICBmaXJzdFBhZ2VUZXh0LFxuICAgICAgICBwcmVQYWdlVGV4dCxcbiAgICAgICAgbmV4dFBhZ2VUZXh0LFxuICAgICAgICBsYXN0UGFnZVRleHQsXG4gICAgICAgIGFsd2F5c1Nob3dBbGxCdG5zLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBpc1N0YXJ0ID0gKHBhZ2U6IGFueSkgPT5cbiAgICAgICAgY3VyclBhZ2UgPT09IHBhZ2VTdGFydEluZGV4ICYmXG4gICAgICAgIChwYWdlID09PSBmaXJzdFBhZ2VUZXh0IHx8IHBhZ2UgPT09IHByZVBhZ2VUZXh0KTtcbiAgICAgIGNvbnN0IGlzRW5kID0gKHBhZ2U6IGFueSkgPT5cbiAgICAgICAgY3VyclBhZ2UgPT09IGxhc3RQYWdlICYmXG4gICAgICAgIChwYWdlID09PSBuZXh0UGFnZVRleHQgfHwgcGFnZSA9PT0gbGFzdFBhZ2VUZXh0KTtcblxuICAgICAgcmV0dXJuIHBhZ2VzXG4gICAgICAgIC5maWx0ZXIoKHBhZ2UpID0+IHtcbiAgICAgICAgICBpZiAoYWx3YXlzU2hvd0FsbEJ0bnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gIShpc1N0YXJ0KHBhZ2UpIHx8IGlzRW5kKHBhZ2UpKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgocGFnZSkgPT4ge1xuICAgICAgICAgIGxldCB0aXRsZTogYW55O1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHBhZ2UgPT09IGN1cnJQYWdlO1xuICAgICAgICAgIGNvbnN0IGRpc2FibGVkID0gaXNTdGFydChwYWdlKSB8fCBpc0VuZChwYWdlKTtcblxuICAgICAgICAgIGlmIChwYWdlID09PSBuZXh0UGFnZVRleHQpIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5wcm9wcy5uZXh0UGFnZVRpdGxlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFnZSA9PT0gcHJlUGFnZVRleHQpIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5wcm9wcy5wcmVQYWdlVGl0bGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYWdlID09PSBmaXJzdFBhZ2VUZXh0KSB7XG4gICAgICAgICAgICB0aXRsZSA9IHRoaXMucHJvcHMuZmlyc3RQYWdlVGl0bGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYWdlID09PSBsYXN0UGFnZVRleHQpIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5wcm9wcy5sYXN0UGFnZVRpdGxlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aXRsZSA9IGAke3BhZ2V9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBwYWdlUmVzdWx0ID0geyBwYWdlLCBhY3RpdmUsIGRpc2FibGVkLCB0aXRsZSB9O1xuICAgICAgICAgIGlmICghZGlzYWJsZVBhZ2VUaXRsZSkge1xuICAgICAgICAgICAgcGFnZVJlc3VsdC50aXRsZSA9IHRpdGxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcGFnZVJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlU2l6ZVBlclBhZ2VTdGF0dXMoKSB7XG4gICAgICBjb25zdCB7IHNpemVQZXJQYWdlTGlzdCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiBzaXplUGVyUGFnZUxpc3QubWFwKChfc2l6ZVBlclBhZ2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwYWdlVGV4dCA9XG4gICAgICAgICAgdHlwZW9mIF9zaXplUGVyUGFnZS50ZXh0ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICA/IF9zaXplUGVyUGFnZS50ZXh0XG4gICAgICAgICAgICA6IF9zaXplUGVyUGFnZTtcbiAgICAgICAgY29uc3QgcGFnZU51bWJlciA9XG4gICAgICAgICAgdHlwZW9mIF9zaXplUGVyUGFnZS52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgPyBfc2l6ZVBlclBhZ2UudmFsdWVcbiAgICAgICAgICAgIDogX3NpemVQZXJQYWdlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRleHQ6IGAke3BhZ2VUZXh0fWAsXG4gICAgICAgICAgcGFnZTogcGFnZU51bWJlcixcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tbG9uZWx5LWlmOiAwICovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgUGFnaW5hdGlvbkRhdGFQcm92aWRlclByb3BzIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgQ29uc3QgZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCB7IGFsaWduUGFnZSwgZ2V0QnlDdXJyUGFnZSB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCBQYWdpbmF0aW9uIGZyb20gXCIuL3BhZ2luYXRpb25cIjtcbmltcG9ydCBjcmVhdGVCYXNlQ29udGV4dCBmcm9tIFwiLi9zdGF0ZS1jb250ZXh0XCI7XG5cbmNvbnN0IHsgUHJvdmlkZXIgfSA9IGNyZWF0ZUJhc2VDb250ZXh0KCk7XG5cbmNvbnN0IFBhZ2luYXRpb25EYXRhQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8YW55PihudWxsKTtcblxuY2xhc3MgUGFnaW5hdGlvbkRhdGFQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyIHtcblxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShuZXh0UHJvcHM6IFBhZ2luYXRpb25EYXRhUHJvdmlkZXJQcm9wcykge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShuZXh0UHJvcHMpO1xuICAgIGNvbnN0IHsgY3VyclNpemVQZXJQYWdlIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgY3VzdG9tLCBvblBhZ2VDaGFuZ2UgfSA9IG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnM7XG5cbiAgICBjb25zdCBwYWdlU3RhcnRJbmRleCA9XG4gICAgICB0eXBlb2YgbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy5wYWdlU3RhcnRJbmRleCAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMucGFnZVN0YXJ0SW5kZXhcbiAgICAgICAgOiBDb25zdC5QQUdFX1NUQVJUX0lOREVYO1xuXG4gICAgLy8gdXNlciBzaG91bGQgYWxpZ24gdGhlIHBhZ2Ugd2hlbiB0aGUgcGFnZSBpcyBub3QgZml0IHRvIHRoZSBkYXRhIHNpemUgd2hlbiByZW1vdGUgZW5hYmxlXG4gICAgaWYgKCF0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpICYmICFjdXN0b20pIHtcbiAgICAgIGNvbnN0IG5ld1BhZ2UgPSBhbGlnblBhZ2UoXG4gICAgICAgIG5leHRQcm9wcy5kYXRhLmxlbmd0aCxcbiAgICAgICAgdGhpcy5wcm9wcy5kYXRhLmxlbmd0aCxcbiAgICAgICAgdGhpcy5jdXJyUGFnZSxcbiAgICAgICAgY3VyclNpemVQZXJQYWdlLFxuICAgICAgICBwYWdlU3RhcnRJbmRleFxuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuY3VyclBhZ2UgIT09IG5ld1BhZ2UpIHtcbiAgICAgICAgaWYgKG9uUGFnZUNoYW5nZSkge1xuICAgICAgICAgIG9uUGFnZUNoYW5nZShuZXdQYWdlLCBjdXJyU2l6ZVBlclBhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VyclBhZ2UgPSBuZXdQYWdlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBuZXh0UHJvcHMub25EYXRhU2l6ZUNoYW5nZSAmJlxuICAgICAgbmV4dFByb3BzLmRhdGEubGVuZ3RoICE9PSB0aGlzLnByb3BzLmRhdGEubGVuZ3RoXG4gICAgKSB7XG4gICAgICBuZXh0UHJvcHMub25EYXRhU2l6ZUNoYW5nZSh7IGRhdGFTaXplOiB0aGlzLnByb3BzLmRhdGEubGVuZ3RoIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlzUmVtb3RlUGFnaW5hdGlvbiA9ICgpID0+IHRoaXMucHJvcHMuaXNSZW1vdGVQYWdpbmF0aW9uKCk7XG5cbiAgcmVuZGVyRGVmYXVsdFBhZ2luYXRpb24gPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnBhZ2luYXRpb24hLm9wdGlvbnMhLmN1c3RvbSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwYWdlOiBjdXJyUGFnZSxcbiAgICAgICAgc2l6ZVBlclBhZ2U6IGN1cnJTaXplUGVyUGFnZSxcbiAgICAgICAgZGF0YVNpemUsXG4gICAgICAgIC4uLnJlc3RcbiAgICAgIH0gPSB0aGlzLmdldFBhZ2luYXRpb25Qcm9wcygpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFBhZ2luYXRpb25cbiAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICBrZXk9XCJwYWdpbmF0aW9uXCJcbiAgICAgICAgICBkYXRhU2l6ZT17ZGF0YVNpemUgfHwgdGhpcy5wcm9wcy5kYXRhLmxlbmd0aH1cbiAgICAgICAgICBjdXJyUGFnZT17Y3VyclBhZ2V9XG4gICAgICAgICAgY3VyclNpemVQZXJQYWdlPXtjdXJyU2l6ZVBlclBhZ2V9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyE7XG4gICAgY29uc3QgY3VyclNpemVQZXJQYWdlID0gb3B0aW9ucy5zaXplUGVyUGFnZSA/PyB0aGlzLmN1cnJTaXplUGVyUGFnZTtcbiAgICBjb25zdCBwYWdlU3RhcnRJbmRleCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5wYWdlU3RhcnRJbmRleCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LlBBR0VfU1RBUlRfSU5ERVhcbiAgICAgICAgOiBvcHRpb25zLnBhZ2VTdGFydEluZGV4O1xuXG4gICAgLy8gd29ya2Fyb3VuZCBhbiBpc3N1ZSB3aXRoIGN1cnJQYWdlIGlzIG5vdCAxLCBidXQgZGF0YSBzaXplIGlzIGxlc3MgdGhhbiBjdXJyU2l6ZVBlclBhZ2VcbiAgICAvLyB3aGVuIFNlYXJjaEJhciBpbnB1dCBjaGFuZ2VkLCBjb21wb25lbnREaWRVcGRhdGUgaW4gdGhlIFNBTUUgVG9vbGtpdCB1cGRhdGVkIChzZWFyY2hpbmcgdGhlIGRhdGEpXG4gICAgLy8gc2Vjb25kbHkgYWZ0ZXIgY29tcG9uZW50RGlkVXBkYXRlIChjYWxjdWxhdGluZyBjdXJyUGFnZSkgaW4gdGhpcyBwYWNrYWdlIHRyaWdnZXJlZCBhdCBmaXJzdFxuICAgIGxldCB7IGRhdGEgfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IGN1cnJQYWdlID0gb3B0aW9ucy5wYWdlID8/IHRoaXMuY3VyclBhZ2U7XG5cbiAgICBpZiAoIXRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkgJiYgZGF0YS5sZW5ndGggPD0gKGN1cnJQYWdlIC0gMSkgKiBjdXJyU2l6ZVBlclBhZ2UpIHtcbiAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLmZsb29yKGRhdGEubGVuZ3RoIC8gY3VyclNpemVQZXJQYWdlKSArIDE7XG4gICAgICBjdXJyUGFnZSA9IGN1cnJQYWdlID4gdG90YWxQYWdlcyA/IHRvdGFsUGFnZXMgOiBjdXJyUGFnZTtcbiAgICAgIHRoaXMuY3VyclBhZ2UgPSBjdXJyUGFnZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSkge1xuICAgICAgdGhpcy5jdXJyUGFnZSA9IGN1cnJQYWdlO1xuICAgIH1cblxuICAgIGRhdGEgPSB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpXG4gICAgICA/IGRhdGFcbiAgICAgIDogZ2V0QnlDdXJyUGFnZShkYXRhLCBjdXJyUGFnZSwgY3VyclNpemVQZXJQYWdlLCBwYWdlU3RhcnRJbmRleCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFBhZ2luYXRpb25EYXRhQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17eyBkYXRhLCBzZXRSZW1vdGVFbWl0dGVyOiB0aGlzLnNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICB7dGhpcy5yZW5kZXJEZWZhdWx0UGFnaW5hdGlvbigpfVxuICAgICAgPC9QYWdpbmF0aW9uRGF0YUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiAoe1xuICBQcm92aWRlcjogUGFnaW5hdGlvbkRhdGFQcm92aWRlcixcbiAgQ29uc3VtZXI6IFBhZ2luYXRpb25EYXRhQ29udGV4dC5Db25zdW1lcixcbn0pO1xuIiwiLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBQYWdlQnV0dG9uUHJvcHMge1xuICBvblBhZ2VDaGFuZ2U6IChwYWdlOiBhbnkpID0+IHZvaWQ7XG4gIHBhZ2U6IFJlYWN0LlJlYWN0Tm9kZSB8IG51bWJlciB8IHN0cmluZztcbiAgYWN0aXZlOiBib29sZWFuO1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbn1cblxuY2xhc3MgUGFnZUJ1dHRvbiBleHRlbmRzIENvbXBvbmVudDxQYWdlQnV0dG9uUHJvcHM+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlQ2xpY2soZTogYW55KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucHJvcHMub25QYWdlQ2hhbmdlKHRoaXMucHJvcHMucGFnZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBwYWdlLCB0aXRsZSwgYWN0aXZlLCBkaXNhYmxlZCwgY2xhc3NOYW1lIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGNsYXNzZXMgPSBjcyhcbiAgICAgIHtcbiAgICAgICAgYWN0aXZlLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgXCJwYWdlLWl0ZW1cIjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBjbGFzc05hbWVcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzZXN9IHRpdGxlPXt0aXRsZX0+XG4gICAgICAgIDxhIGhyZWY9XCIjXCIgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gY2xhc3NOYW1lPVwicGFnZS1saW5rXCI+XG4gICAgICAgICAge3BhZ2V9XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgKTtcbiAgfVxufVxuXG5cblxuZXhwb3J0IGRlZmF1bHQgUGFnZUJ1dHRvbjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBwYWdpbmF0aW9uSGFuZGxlciBmcm9tIFwiLi9wYWdpbmF0aW9uLWhhbmRsZXJcIjtcbmltcG9ydCBTaXplUGVyUGFnZURyb3Bkb3duIGZyb20gXCIuL3NpemUtcGVyLXBhZ2UtZHJvcGRvd25cIjtcbmltcG9ydCBzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlciBmcm9tIFwiLi9zaXplLXBlci1wYWdlLWRyb3Bkb3duLWFkYXB0ZXJcIjtcbmltcG9ydCBzdGFuZGFsb25lQWRhcHRlciBmcm9tIFwiLi9zdGFuZGFsb25lLWFkYXB0ZXJcIjtcblxuY29uc3QgU2l6ZVBlclBhZ2VEcm9wZG93blN0YW5kYWxvbmUgPSAocHJvcHM6IGFueSkgPT4gKFxuICA8U2l6ZVBlclBhZ2VEcm9wZG93biB7Li4ucHJvcHN9IC8+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBzdGFuZGFsb25lQWRhcHRlcihcbiAgcGFnaW5hdGlvbkhhbmRsZXIoc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIoU2l6ZVBlclBhZ2VEcm9wZG93blN0YW5kYWxvbmUpKVxuKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX187IiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBQYWdpbmF0aW9uVG90YWxQcm9wcyB7XG4gIGZyb206IG51bWJlcjtcbiAgdG86IG51bWJlcjtcbiAgZGF0YVNpemU6IG51bWJlcjtcbiAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI/OiAoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCBkYXRhU2l6ZTogbnVtYmVyKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsO1xufVxuXG5jb25zdCBQYWdpbmF0aW9uVG90YWwgPSAocHJvcHM6IFBhZ2luYXRpb25Ub3RhbFByb3BzKSA9PiB7XG4gIGlmIChwcm9wcy5wYWdpbmF0aW9uVG90YWxSZW5kZXJlcikge1xuICAgIHJldHVybiBwcm9wcy5wYWdpbmF0aW9uVG90YWxSZW5kZXJlcihwcm9wcy5mcm9tLCBwcm9wcy50bywgcHJvcHMuZGF0YVNpemUpO1xuICB9XG4gIHJldHVybiAoXG4gICAgPHNwYW4gY2xhc3NOYW1lPVwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2luYXRpb24tdG90YWxcIj5cbiAgICAgICZuYnNwO1Nob3dpbmcgcm93cyB7cHJvcHMuZnJvbX0gdG8mbmJzcDt7cHJvcHMudG99IG9mJm5ic3A7XG4gICAgICB7cHJvcHMuZGF0YVNpemV9XG4gICAgPC9zcGFuPlxuICApO1xufTtcblxuUGFnaW5hdGlvblRvdGFsLmRlZmF1bHRQcm9wcyA9IHtcbiAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI6IHVuZGVmaW5lZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2luYXRpb25Ub3RhbDtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IFBhZ2luYXRpb25DaGlsZFByb3BzIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgcGFnZVJlc29sdmVyIGZyb20gXCIuL3BhZ2UtcmVzb2x2ZXJcIjtcbmltcG9ydCBTaXplUGVyUGFnZURyb3BEb3duIGZyb20gXCIuL3NpemUtcGVyLXBhZ2UtZHJvcGRvd25cIjtcblxuY29uc3Qgc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIgPSAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PlxuICBjbGFzcyBTaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlciBleHRlbmRzIHBhZ2VSZXNvbHZlcihDb21wb25lbnQpIHtcbiAgICBzdGF0ZSA9IHsgZHJvcGRvd25PcGVuOiBmYWxzZSB9O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IFBhZ2luYXRpb25DaGlsZFByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLmNsb3NlRHJvcERvd24gPSB0aGlzLmNsb3NlRHJvcERvd24uYmluZCh0aGlzKTtcbiAgICAgIHRoaXMudG9nZ2xlRHJvcERvd24gPSB0aGlzLnRvZ2dsZURyb3BEb3duLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlID0gdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5zdGF0ZSA9IHsgZHJvcGRvd25PcGVuOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHRvZ2dsZURyb3BEb3duKCkge1xuICAgICAgY29uc3QgZHJvcGRvd25PcGVuID0gIXRoaXMuc3RhdGUuZHJvcGRvd25PcGVuO1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBkcm9wZG93bk9wZW4gfSkpO1xuICAgIH1cblxuICAgIGNsb3NlRHJvcERvd24oKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGRyb3Bkb3duT3BlbjogZmFsc2UgfSkpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlKHNpemVQZXJQYWdlOiBhbnkpIHtcbiAgICAgIHRoaXMucHJvcHMub25TaXplUGVyUGFnZUNoYW5nZShzaXplUGVyUGFnZSk7XG4gICAgICB0aGlzLmNsb3NlRHJvcERvd24oKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHRhYmxlSWQsXG4gICAgICAgIGJvb3RzdHJhcDQsXG4gICAgICAgIHNpemVQZXJQYWdlTGlzdCxcbiAgICAgICAgY3VyclNpemVQZXJQYWdlLFxuICAgICAgICBoaWRlU2l6ZVBlclBhZ2UsXG4gICAgICAgIHNpemVQZXJQYWdlUmVuZGVyZXIsXG4gICAgICAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXIsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgZHJvcGRvd25PcGVuOiBvcGVuIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc2l6ZVBlclBhZ2VMaXN0Lmxlbmd0aCA+IDEgJiYgIWhpZGVTaXplUGVyUGFnZSkge1xuICAgICAgICBpZiAoc2l6ZVBlclBhZ2VSZW5kZXJlcikge1xuICAgICAgICAgIHJldHVybiBzaXplUGVyUGFnZVJlbmRlcmVyKHtcbiAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuY2FsY3VsYXRlU2l6ZVBlclBhZ2VTdGF0dXMoKSxcbiAgICAgICAgICAgIGN1cnJTaXplUGVyUGFnZTogYCR7Y3VyclNpemVQZXJQYWdlfWAsXG4gICAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgICAgY3VyclNpemVQZXJQYWdlPXtgJHtjdXJyU2l6ZVBlclBhZ2V9YH1cbiAgICAgICAgICAgIG9wdGlvbnM9e3RoaXMuY2FsY3VsYXRlU2l6ZVBlclBhZ2VTdGF0dXMoKX1cbiAgICAgICAgICAgIG9wdGlvblJlbmRlcmVyPXtzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyfVxuICAgICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMudG9nZ2xlRHJvcERvd259XG4gICAgICAgICAgICBvbkJsdXI9e3RoaXMuY2xvc2VEcm9wRG93bn1cbiAgICAgICAgICAgIG9wZW49e29wZW59XG4gICAgICAgICAgICB0YWJsZUlkPXt0YWJsZUlkfVxuICAgICAgICAgICAgYm9vdHN0cmFwND17Ym9vdHN0cmFwNH1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgY29uc3QgU2l6ZVBlclBhZ2VEcm9wZG93bldpdGhBZGFwdGVyID1cbiAgc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIoU2l6ZVBlclBhZ2VEcm9wRG93bik7XG5leHBvcnQgZGVmYXVsdCBzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlcjtcbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgU2l6ZVBlclBhZ2VPcHRpb24gZnJvbSBcIi4vc2l6ZS1wZXItcGFnZS1vcHRpb25cIjtcblxuY29uc3Qgc2l6ZVBlclBhZ2VEZWZhdWx0Q2xhc3MgPSBcInJlYWN0LWJzLXRhYmxlLXNpemVQZXJQYWdlLWRyb3Bkb3duXCI7XG5cbmNvbnN0IHNpemVQZXJQYWdlRHJvcERvd25EZWZhdWx0UHJvcHMgPSB7XG4gIG9wZW46IGZhbHNlLFxuICBoaWRkZW46IGZhbHNlLFxuICBidG5Db250ZXh0dWFsOiBcImJ0bi1kZWZhdWx0IGJ0bi1zZWNvbmRhcnlcIixcbiAgdmFyaWF0aW9uOiBcImRyb3Bkb3duXCIsXG4gIGNsYXNzTmFtZTogXCJcIixcbiAgb3B0aW9uUmVuZGVyZXI6IG51bGwsXG4gIGJvb3RzdHJhcDQ6IGZhbHNlLFxuICB0YWJsZUlkOiBudWxsLFxufTtcblxuaW50ZXJmYWNlIFNpemVQZXJQYWdlRHJvcERvd25Qcm9wcyB7XG4gIGN1cnJTaXplUGVyUGFnZTogc3RyaW5nIHwgbnVtYmVyO1xuICBvcHRpb25zOiBBcnJheTx7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgfT47XG4gIG9uQ2xpY2s6IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBvbkJsdXI6IChlOiBSZWFjdC5Gb2N1c0V2ZW50KSA9PiB2b2lkO1xuICBvblNpemVQZXJQYWdlQ2hhbmdlOiAoc2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgYm9vdHN0cmFwND86IGJvb2xlYW47XG4gIHRhYmxlSWQ/OiBzdHJpbmc7XG4gIG9wZW4/OiBib29sZWFuO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBidG5Db250ZXh0dWFsPzogc3RyaW5nO1xuICB2YXJpYXRpb24/OiBcImRyb3Bkb3duXCIgfCBcImRyb3B1cFwiO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG9wdGlvblJlbmRlcmVyPzogKHByb3BzOiBhbnkpID0+IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGw7XG59XG5cbmNvbnN0IFNpemVQZXJQYWdlRHJvcERvd24gPSAocHJvcHM6IFNpemVQZXJQYWdlRHJvcERvd25Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3BlbixcbiAgICB0YWJsZUlkLFxuICAgIGhpZGRlbixcbiAgICBvbkNsaWNrLFxuICAgIG9uQmx1cixcbiAgICBvcHRpb25zLFxuICAgIGNsYXNzTmFtZSxcbiAgICB2YXJpYXRpb24sXG4gICAgYm9vdHN0cmFwNCxcbiAgICBidG5Db250ZXh0dWFsLFxuICAgIG9wdGlvblJlbmRlcmVyLFxuICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICB9ID0geyAuLi5zaXplUGVyUGFnZURyb3BEb3duRGVmYXVsdFByb3BzLCAuLi5wcm9wcyB9O1xuXG4gIGNvbnN0IG9wZW5DbGFzcyA9IG9wZW4gPyBcIm9wZW4gc2hvd1wiIDogXCJcIjtcbiAgY29uc3QgZHJvcGRvd25DbGFzc2VzID0gY3MoXG4gICAgb3BlbkNsYXNzLFxuICAgIHNpemVQZXJQYWdlRGVmYXVsdENsYXNzLFxuICAgIHZhcmlhdGlvbixcbiAgICBjbGFzc05hbWVcbiAgKTtcblxuICBjb25zdCBpZCA9IHRhYmxlSWQgPyBgJHt0YWJsZUlkfS1wYWdlRHJvcERvd25gIDogXCJwYWdlRHJvcERvd25cIjtcblxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBzdHlsZT17eyB2aXNpYmlsaXR5OiBoaWRkZW4gPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCIgfX1cbiAgICAgIGNsYXNzTmFtZT17ZHJvcGRvd25DbGFzc2VzfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJzaXplLXBlci1wYWdlLWRyb3Bkb3duXCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17YGJ0biAke2J0bkNvbnRleHR1YWx9IGRyb3Bkb3duLXRvZ2dsZWB9XG4gICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIlxuICAgICAgICBhcmlhLWV4cGFuZGVkPXtvcGVufVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgID5cbiAgICAgICAge2N1cnJTaXplUGVyUGFnZX17XCIgXCJ9XG4gICAgICAgIHtib290c3RyYXA0ID8gbnVsbCA6IChcbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNhcmV0XCIgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDx1bFxuICAgICAgICBjbGFzc05hbWU9e2Bkcm9wZG93bi1tZW51ICR7b3BlbkNsYXNzfWB9XG4gICAgICAgIHJvbGU9XCJtZW51XCJcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtpZH1cbiAgICAgID5cbiAgICAgICAge29wdGlvbnMubWFwKChvcHRpb246IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChvcHRpb25SZW5kZXJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U2l6ZVBlclBhZ2VPcHRpb25cbiAgICAgICAgICAgICAgey4uLm9wdGlvbn1cbiAgICAgICAgICAgICAga2V5PXtvcHRpb24udGV4dH1cbiAgICAgICAgICAgICAgYm9vdHN0cmFwND17Ym9vdHN0cmFwNH1cbiAgICAgICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZT17b25TaXplUGVyUGFnZUNoYW5nZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L3VsPlxuICAgIDwvc3Bhbj5cbiAgKTtcbn07XG5cblxuXG5leHBvcnQgZGVmYXVsdCBTaXplUGVyUGFnZURyb3BEb3duO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFBhZ2luYXRpb25IYW5kbGVyIGZyb20gXCIuL3BhZ2luYXRpb24taGFuZGxlclwiO1xuaW1wb3J0IFBhZ2luYXRpb25MaXN0IGZyb20gXCIuL3BhZ2luYXRpb24tbGlzdFwiO1xuaW1wb3J0IHBhZ2luYXRpb25MaXN0QWRhcHRlciBmcm9tIFwiLi9wYWdpbmF0aW9uLWxpc3QtYWRhcHRlclwiO1xuaW1wb3J0IHN0YW5kYWxvbmVBZGFwdGVyIGZyb20gXCIuL3N0YW5kYWxvbmUtYWRhcHRlclwiO1xuXG5jb25zdCBQYWdpbmF0aW9uTGlzdFN0YW5kYWxvbmUgPSAocHJvcHM6IGFueSkgPT4gPFBhZ2luYXRpb25MaXN0IHsuLi5wcm9wc30gLz47XG5cbmV4cG9ydCBkZWZhdWx0IHN0YW5kYWxvbmVBZGFwdGVyKFxuICBQYWdpbmF0aW9uSGFuZGxlcihwYWdpbmF0aW9uTGlzdEFkYXB0ZXIoUGFnaW5hdGlvbkxpc3RTdGFuZGFsb25lKSlcbik7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgcGFnZVJlc29sdmVyIGZyb20gXCIuL3BhZ2UtcmVzb2x2ZXJcIjtcbmltcG9ydCBQYWdpbmF0aW9uVG90YWwgZnJvbSBcIi4vcGFnaW5hdGlvbi10b3RhbFwiO1xuXG5jb25zdCBwYWdpbmF0aW9uVG90YWxBZGFwdGVyID0gKFdyYXBwZWRDb21wb25lbnQ6IGFueSkgPT5cbiAgY2xhc3MgUGFnaW5hdGlvblRvdGFsQWRhcHRlciBleHRlbmRzIHBhZ2VSZXNvbHZlcihDb21wb25lbnQpIHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCBbZnJvbSwgdG9dID0gdGhpcy5jYWxjdWxhdGVGcm9tVG8oKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxXcmFwcGVkQ29tcG9uZW50XG4gICAgICAgICAgZnJvbT17ZnJvbX1cbiAgICAgICAgICB0bz17dG99XG4gICAgICAgICAgZGF0YVNpemU9e3RoaXMucHJvcHMuZGF0YVNpemV9XG4gICAgICAgICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI9e3RoaXMucHJvcHMucGFnaW5hdGlvblRvdGFsUmVuZGVyZXJ9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuZXhwb3J0IGNvbnN0IFBhZ2luYXRpb25Ub3RhbFdpdGhBZGFwdGVyID1cbiAgcGFnaW5hdGlvblRvdGFsQWRhcHRlcihQYWdpbmF0aW9uVG90YWwpO1xuZXhwb3J0IGRlZmF1bHQgcGFnaW5hdGlvblRvdGFsQWRhcHRlcjtcbiIsIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgU2l6ZVBlclBhZ2VPcHRpb25Qcm9wcyB7XG4gIHRleHQ6IHN0cmluZztcbiAgcGFnZTogbnVtYmVyO1xuICBvblNpemVQZXJQYWdlQ2hhbmdlOiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBib290c3RyYXA0PzogYm9vbGVhbjtcbn1cblxuY29uc3QgU2l6ZVBlclBhZ2VPcHRpb24gPSAoe1xuICB0ZXh0LFxuICBwYWdlLFxuICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICBib290c3RyYXA0ID0gZmFsc2UsXG59OiBTaXplUGVyUGFnZU9wdGlvblByb3BzKSA9PlxuICBib290c3RyYXA0ID8gKFxuICAgIDxhXG4gICAgICBocmVmPVwiI1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgY2xhc3NOYW1lPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICBkYXRhLXBhZ2U9e3BhZ2V9XG4gICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlKHBhZ2UpO1xuICAgICAgfX1cbiAgICA+XG4gICAgICB7dGV4dH1cbiAgICA8L2E+XG4gICkgOiAoXG4gICAgPGxpIGtleT17dGV4dH0gcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT1cImRyb3Bkb3duLWl0ZW1cIj5cbiAgICAgIDxhXG4gICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgICBkYXRhLXBhZ2U9e3BhZ2V9XG4gICAgICAgIG9uTW91c2VEb3duPXsoZSkgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlKHBhZ2UpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGV4dH1cbiAgICAgIDwvYT5cbiAgICA8L2xpPlxuICApO1xuXG5TaXplUGVyUGFnZU9wdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGJvb3RzdHJhcDQ6IGZhbHNlLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2l6ZVBlclBhZ2VPcHRpb247XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgcGFnZVJlc29sdmVyIGZyb20gXCIuL3BhZ2UtcmVzb2x2ZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgKFdyYXBwZWRDb21wb25lbnQ6IGFueSkgPT5cbiAgY2xhc3MgUGFnaW5hdGlvbkhhbmRsZXIgZXh0ZW5kcyBwYWdlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VQYWdlID0gdGhpcy5oYW5kbGVDaGFuZ2VQYWdlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlID0gdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuaW5pdGlhbFN0YXRlKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKGN1cnJQcm9wczogYW55KSB7XG4gICAgICBjb25zdCB7IGN1cnJTaXplUGVyUGFnZSwgZGF0YVNpemUsIHRvdGFsU2l6ZSB9ID0gY3VyclByb3BzO1xuICAgICAgbGV0IHRvdGFsUGFnZXMgPSAwO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGN1cnJTaXplUGVyUGFnZSAhPT0gdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UgfHxcbiAgICAgICAgZGF0YVNpemUgIT09IHRoaXMucHJvcHMuZGF0YVNpemUgfHxcbiAgICAgICAgdG90YWxTaXplICE9PSB0aGlzLnByb3BzLnRvdGFsU2l6ZVxuICAgICAgKSB7XG4gICAgICAgIGlmIChjdXJyU2l6ZVBlclBhZ2UgIT09IHRoaXMucHJvcHMuY3VyclNpemVQZXJQYWdlKSB7XG4gICAgICAgICAgdG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRvdGFsU2l6ZSA/PyB0aGlzLnByb3BzLmRhdGFTaXplXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhU2l6ZSAhPT0gdGhpcy5wcm9wcy5kYXRhU2l6ZSkge1xuICAgICAgICAgIHRvdGFsUGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZShcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY3VyclNpemVQZXJQYWdlLFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5kYXRhU2l6ZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodG90YWxTaXplICE9PSB0aGlzLnByb3BzLnRvdGFsU2l6ZSkge1xuICAgICAgICAgIHRvdGFsUGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZShcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY3VyclNpemVQZXJQYWdlLFxuICAgICAgICAgICAgdGhpcy5wcm9wcy50b3RhbFNpemVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3RhbFBhZ2VzID0gdGhpcy5jYWxjdWxhdGVUb3RhbFBhZ2UoXG4gICAgICAgICAgdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgdGhpcy5wcm9wcy5kYXRhU2l6ZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXN0UGFnZSA9IHRoaXMuY2FsY3VsYXRlTGFzdFBhZ2UodG90YWxQYWdlcyk7XG5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmICh0b3RhbFBhZ2VzICE9PSB0aGlzLnN0YXRlLnRvdGFsUGFnZXMgfHwgbGFzdFBhZ2UgIT09IHRoaXMuc3RhdGUubGFzdFBhZ2UpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHRvdGFsUGFnZXMsIGxhc3RQYWdlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlKHNpemVQZXJQYWdlOiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgY3VyclNpemVQZXJQYWdlLCBvblNpemVQZXJQYWdlQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRTaXplID1cbiAgICAgICAgdHlwZW9mIHNpemVQZXJQYWdlID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyBwYXJzZUludChzaXplUGVyUGFnZSwgMTApXG4gICAgICAgICAgOiBzaXplUGVyUGFnZTtcbiAgICAgIGxldCB7IGN1cnJQYWdlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKHNlbGVjdGVkU2l6ZSAhPT0gY3VyclNpemVQZXJQYWdlKSB7XG4gICAgICAgIGNvbnN0IG5ld1RvdGFsUGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZShzZWxlY3RlZFNpemUpO1xuICAgICAgICBjb25zdCBuZXdMYXN0UGFnZSA9IHRoaXMuY2FsY3VsYXRlTGFzdFBhZ2UobmV3VG90YWxQYWdlcyk7XG4gICAgICAgIGlmIChjdXJyUGFnZSA+IG5ld0xhc3RQYWdlKSBjdXJyUGFnZSA9IG5ld0xhc3RQYWdlO1xuICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlKHNlbGVjdGVkU2l6ZSwgY3VyclBhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZVBhZ2UobmV3UGFnZTogYW55KSB7XG4gICAgICBsZXQgcGFnZTogYW55O1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyUGFnZSxcbiAgICAgICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgICAgIHByZVBhZ2VUZXh0LFxuICAgICAgICBuZXh0UGFnZVRleHQsXG4gICAgICAgIGxhc3RQYWdlVGV4dCxcbiAgICAgICAgZmlyc3RQYWdlVGV4dCxcbiAgICAgICAgb25QYWdlQ2hhbmdlLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCB7IGxhc3RQYWdlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAobmV3UGFnZSA9PT0gcHJlUGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IHRoaXMuYmFja1RvUHJldlBhZ2UoKTtcbiAgICAgIH0gZWxzZSBpZiAobmV3UGFnZSA9PT0gbmV4dFBhZ2VUZXh0KSB7XG4gICAgICAgIHBhZ2UgPSBjdXJyUGFnZSArIDEgPiBsYXN0UGFnZSA/IGxhc3RQYWdlIDogY3VyclBhZ2UgKyAxO1xuICAgICAgfSBlbHNlIGlmIChuZXdQYWdlID09PSBsYXN0UGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IGxhc3RQYWdlO1xuICAgICAgfSBlbHNlIGlmIChuZXdQYWdlID09PSBmaXJzdFBhZ2VUZXh0KSB7XG4gICAgICAgIHBhZ2UgPSBwYWdlU3RhcnRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhZ2UgPSBwYXJzZUludChuZXdQYWdlLCAxMCk7XG4gICAgICB9XG4gICAgICBpZiAocGFnZSAhPT0gY3VyclBhZ2UpIHtcbiAgICAgICAgb25QYWdlQ2hhbmdlKHBhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxXcmFwcGVkQ29tcG9uZW50XG4gICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGxhc3RQYWdlPXt0aGlzLnN0YXRlLmxhc3RQYWdlfVxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICB0b3RhbFBhZ2VzPXt0aGlzLnN0YXRlLnRvdGFsUGFnZXN9XG4gICAgICAgICAgb25QYWdlQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZVBhZ2V9XG4gICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICB9O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgKFdyYXBwZWRDb21wb25lbnQ6IGFueSkgPT5cbiAgKHsgcGFnZSwgc2l6ZVBlclBhZ2UsIC4uLnJlc3QgfTogYW55KSA9PlxuICAgIChcbiAgICAgIDxXcmFwcGVkQ29tcG9uZW50XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgICBjdXJyUGFnZT17cGFnZX1cbiAgICAgICAgY3VyclNpemVQZXJQYWdlPXtzaXplUGVyUGFnZX1cbiAgICAgIC8+XG4gICAgKTtcbiIsImltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuXG5jb25zdCBnZXROb3JtYWxpemVkUGFnZSA9IChwYWdlOiBhbnksIHBhZ2VTdGFydEluZGV4OiBhbnkpID0+IHtcbiAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5hYnMoMSAtIHBhZ2VTdGFydEluZGV4KTtcbiAgcmV0dXJuIHBhZ2UgKyBvZmZzZXQ7XG59O1xuXG5jb25zdCBlbmRJbmRleCA9IChwYWdlOiBhbnksIHNpemVQZXJQYWdlOiBhbnksIHBhZ2VTdGFydEluZGV4OiBhbnkpID0+XG4gIGdldE5vcm1hbGl6ZWRQYWdlKHBhZ2UsIHBhZ2VTdGFydEluZGV4KSAqIHNpemVQZXJQYWdlIC0gMTtcblxuY29uc3Qgc3RhcnRJbmRleCA9IChlbmQ6IGFueSwgc2l6ZVBlclBhZ2U6IGFueSkgPT4gZW5kIC0gKHNpemVQZXJQYWdlIC0gMSk7XG5cbmV4cG9ydCBjb25zdCBhbGlnblBhZ2UgPSAoXG4gIGRhdGFTaXplOiBhbnksXG4gIHByZXZEYXRhU2l6ZTogYW55LFxuICBwYWdlOiBhbnksXG4gIHNpemVQZXJQYWdlOiBhbnksXG4gIHBhZ2VTdGFydEluZGV4OiBhbnlcbikgPT4ge1xuICBpZiAocHJldkRhdGFTaXplIDwgZGF0YVNpemUpIHJldHVybiBwYWdlO1xuICBpZiAocGFnZSA8IHBhZ2VTdGFydEluZGV4KSByZXR1cm4gcGFnZVN0YXJ0SW5kZXg7XG4gIGlmIChkYXRhU2l6ZSA8PSAwKSByZXR1cm4gcGFnZVN0YXJ0SW5kZXg7XG4gIGlmIChcbiAgICBwYWdlID49IE1hdGguZmxvb3IoZGF0YVNpemUgLyBzaXplUGVyUGFnZSkgKyBwYWdlU3RhcnRJbmRleCAmJlxuICAgIHBhZ2VTdGFydEluZGV4ID09PSAxXG4gICkge1xuICAgIHJldHVybiBNYXRoLmNlaWwoZGF0YVNpemUgLyBzaXplUGVyUGFnZSk7XG4gIH1cbiAgaWYgKHBhZ2UgPj0gTWF0aC5mbG9vcihkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKSAmJiBwYWdlU3RhcnRJbmRleCA9PT0gMCkge1xuICAgIGNvbnN0IG5ld1BhZ2UgPSBNYXRoLmNlaWwoZGF0YVNpemUgLyBzaXplUGVyUGFnZSk7XG4gICAgcmV0dXJuIG5ld1BhZ2UgLSBNYXRoLmFicyhDb25zdC5QQUdFX1NUQVJUX0lOREVYIC0gcGFnZVN0YXJ0SW5kZXgpO1xuICB9XG4gIHJldHVybiBwYWdlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJ5Q3VyclBhZ2UgPSAoXG4gIGRhdGE6IGFueSxcbiAgcGFnZTogYW55LFxuICBzaXplUGVyUGFnZTogYW55LFxuICBwYWdlU3RhcnRJbmRleDogYW55XG4pID0+IHtcbiAgY29uc3QgZGF0YVNpemUgPSBkYXRhLmxlbmd0aDtcbiAgaWYgKCFkYXRhU2l6ZSkgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IGVuZCA9IGVuZEluZGV4KHBhZ2UsIHNpemVQZXJQYWdlLCBwYWdlU3RhcnRJbmRleCk7XG4gIGNvbnN0IHN0YXJ0ID0gc3RhcnRJbmRleChlbmQsIHNpemVQZXJQYWdlKTtcblxuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSArPSAxKSB7XG4gICAgcmVzdWx0LnB1c2goZGF0YVtpXSk7XG4gICAgaWYgKGkgKyAxID09PSBkYXRhU2l6ZSkgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKGFyZykge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3NlcywgcGFyc2VWYWx1ZShhcmcpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlVmFsdWUgKGFyZykge1xuXHRcdGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuXHRcdFx0cmV0dXJuIGFyZztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdH1cblxuXHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdHJldHVybiBhcmcudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3Nlcywga2V5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZENsYXNzICh2YWx1ZSwgbmV3Q2xhc3MpIHtcblx0XHRpZiAoIW5ld0NsYXNzKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSArICcgJyArIG5ld0NsYXNzO1xuXHRcdH1cblx0XG5cdFx0cmV0dXJuIHZhbHVlICsgbmV3Q2xhc3M7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gIFBBR0lOQVRJT05fU0laRTogNSxcbiAgUEFHRV9TVEFSVF9JTkRFWDogMSxcbiAgV2l0aF9GSVJTVF9BTkRfTEFTVDogdHJ1ZSxcbiAgU0hPV19BTExfUEFHRV9CVE5TOiBmYWxzZSxcbiAgU0hPV19UT1RBTDogZmFsc2UsXG4gIFBBR0lOQVRJT05fVE9UQUw6IG51bGwsXG4gIEZJUlNUX1BBR0VfVEVYVDogXCI8PFwiLFxuICBQUkVfUEFHRV9URVhUOiBcIjxcIixcbiAgTkVYVF9QQUdFX1RFWFQ6IFwiPlwiLFxuICBMQVNUX1BBR0VfVEVYVDogXCI+PlwiLFxuICBORVhUX1BBR0VfVElUTEU6IFwibmV4dCBwYWdlXCIsXG4gIExBU1RfUEFHRV9USVRMRTogXCJsYXN0IHBhZ2VcIixcbiAgUFJFX1BBR0VfVElUTEU6IFwicHJldmlvdXMgcGFnZVwiLFxuICBGSVJTVF9QQUdFX1RJVExFOiBcImZpcnN0IHBhZ2VcIixcbiAgU0laRV9QRVJfUEFHRV9MSVNUOiBbMTAsIDI1LCAzMCwgNTBdLFxuICBISURFX1NJWkVfUEVSX1BBR0U6IGZhbHNlLFxuICBISURFX1BBR0VfTElTVF9PTkxZX09ORV9QQUdFOiBmYWxzZSxcbn07XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLWxvbmVseS1pZjogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgQ29uc3QgZnJvbSBcIi4vY29uc3RcIjtcblxuaW1wb3J0IHsgUGFnaW5hdGlvblByb3ZpZGVyUHJvcHMgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IGFsaWduUGFnZSB9IGZyb20gXCIuL3BhZ2VcIjtcblxuY29uc3QgU3RhdGVDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxhbnk+KG51bGwpO1xuXG5jbGFzcyBTdGF0ZVByb3ZpZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFBhZ2luYXRpb25Qcm92aWRlclByb3BzPiB7XG4gIGN1cnJQYWdlOiBudW1iZXI7XG4gIGN1cnJTaXplUGVyUGFnZTogbnVtYmVyO1xuICBkYXRhQ2hhbmdlTGlzdGVuZXI6IGFueTtcbiAgZGF0YVNpemU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgcmVtb3RlRW1pdHRlcjogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQYWdpbmF0aW9uUHJvdmlkZXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZUNoYW5nZVBhZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZVBhZ2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZURhdGFTaXplQ2hhbmdlID0gdGhpcy5oYW5kbGVEYXRhU2l6ZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLmJpbmQodGhpcyk7XG5cbiAgICBsZXQgY3VyclBhZ2U6IGFueTtcbiAgICBsZXQgY3VyclNpemVQZXJQYWdlOiBhbnk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHByb3BzLnBhZ2luYXRpb24hLm9wdGlvbnMhO1xuICAgIGNvbnN0IHNpemVQZXJQYWdlTGlzdCA9IG9wdGlvbnMuc2l6ZVBlclBhZ2VMaXN0IHx8IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVDtcblxuICAgIC8vIGluaXRpYWxpemUgY3VycmVudCBwYWdlXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnBhZ2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGN1cnJQYWdlID0gb3B0aW9ucy5wYWdlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMucGFnZVN0YXJ0SW5kZXggIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGN1cnJQYWdlID0gb3B0aW9ucy5wYWdlU3RhcnRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VyclBhZ2UgPSBDb25zdC5QQUdFX1NUQVJUX0lOREVYO1xuICAgIH1cblxuICAgIC8vIGluaXRpYWxpemUgY3VycmVudCBzaXplUGVyUGFnZVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zaXplUGVyUGFnZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY3VyclNpemVQZXJQYWdlID0gb3B0aW9ucy5zaXplUGVyUGFnZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzaXplUGVyUGFnZUxpc3RbMF0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGN1cnJTaXplUGVyUGFnZSA9IHNpemVQZXJQYWdlTGlzdFswXS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VyclNpemVQZXJQYWdlID0gc2l6ZVBlclBhZ2VMaXN0WzBdO1xuICAgIH1cblxuICAgIHRoaXMuY3VyclBhZ2UgPSBjdXJyUGFnZTtcbiAgICB0aGlzLmRhdGFTaXplID0gb3B0aW9ucy50b3RhbFNpemU7XG4gICAgdGhpcy5jdXJyU2l6ZVBlclBhZ2UgPSBjdXJyU2l6ZVBlclBhZ2U7XG4gICAgdGhpcy5kYXRhQ2hhbmdlTGlzdGVuZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5kYXRhQ2hhbmdlTGlzdGVuZXIub24oXCJmaWx0ZXJDaGFuZ2VkXCIsIHRoaXMuaGFuZGxlRGF0YVNpemVDaGFuZ2UpO1xuICB9XG5cbiAgZ2V0UGFnaW5hdGlvblByb3BzID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgYm9vdHN0cmFwNCwgdGFibGVJZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uIS5vcHRpb25zITtcbiAgICBjb25zdCB7IGN1cnJQYWdlLCBjdXJyU2l6ZVBlclBhZ2UgfSA9IHRoaXM7XG4gICAgbGV0IGRhdGFTaXplOiBudW1iZXI7XG4gICAgaWYgKHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkpIHtcbiAgICAgIGRhdGFTaXplID0gb3B0aW9ucy50b3RhbFNpemUhO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhU2l6ZSA9IHRoaXMuZGF0YVNpemUhO1xuICAgIH1cbiAgICBjb25zdCB3aXRoRmlyc3RBbmRMYXN0ID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLndpdGhGaXJzdEFuZExhc3QgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5XaXRoX0ZJUlNUX0FORF9MQVNUXG4gICAgICAgIDogb3B0aW9ucy53aXRoRmlyc3RBbmRMYXN0O1xuICAgIGNvbnN0IGFsd2F5c1Nob3dBbGxCdG5zID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLmFsd2F5c1Nob3dBbGxCdG5zID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuU0hPV19BTExfUEFHRV9CVE5TXG4gICAgICAgIDogb3B0aW9ucy5hbHdheXNTaG93QWxsQnRucztcbiAgICBjb25zdCBoaWRlU2l6ZVBlclBhZ2UgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuaGlkZVNpemVQZXJQYWdlID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuSElERV9TSVpFX1BFUl9QQUdFXG4gICAgICAgIDogb3B0aW9ucy5oaWRlU2l6ZVBlclBhZ2U7XG4gICAgY29uc3QgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5ISURFX1BBR0VfTElTVF9PTkxZX09ORV9QQUdFXG4gICAgICAgIDogb3B0aW9ucy5oaWRlUGFnZUxpc3RPbmx5T25lUGFnZTtcbiAgICBjb25zdCBwYWdlU3RhcnRJbmRleCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5wYWdlU3RhcnRJbmRleCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LlBBR0VfU1RBUlRfSU5ERVhcbiAgICAgICAgOiBvcHRpb25zLnBhZ2VTdGFydEluZGV4O1xuICAgIHJldHVybiB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgYm9vdHN0cmFwNCxcbiAgICAgIHRhYmxlSWQsXG4gICAgICBwYWdlOiBjdXJyUGFnZSxcbiAgICAgIHNpemVQZXJQYWdlOiBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlLFxuICAgICAgaGlkZVNpemVQZXJQYWdlLFxuICAgICAgYWx3YXlzU2hvd0FsbEJ0bnMsXG4gICAgICB3aXRoRmlyc3RBbmRMYXN0LFxuICAgICAgZGF0YVNpemUsXG4gICAgICBzaXplUGVyUGFnZUxpc3Q6IG9wdGlvbnMuc2l6ZVBlclBhZ2VMaXN0IHx8IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVCxcbiAgICAgIHBhZ2luYXRpb25TaXplOiBvcHRpb25zLnBhZ2luYXRpb25TaXplIHx8IENvbnN0LlBBR0lOQVRJT05fU0laRSxcbiAgICAgIHNob3dUb3RhbDogb3B0aW9ucy5zaG93VG90YWwsXG4gICAgICBwYWdlTGlzdFJlbmRlcmVyOiBvcHRpb25zLnBhZ2VMaXN0UmVuZGVyZXIsXG4gICAgICBwYWdlQnV0dG9uUmVuZGVyZXI6IG9wdGlvbnMucGFnZUJ1dHRvblJlbmRlcmVyLFxuICAgICAgc2l6ZVBlclBhZ2VSZW5kZXJlcjogb3B0aW9ucy5zaXplUGVyUGFnZVJlbmRlcmVyLFxuICAgICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI6IG9wdGlvbnMucGFnaW5hdGlvblRvdGFsUmVuZGVyZXIsXG4gICAgICBzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyOiBvcHRpb25zLnNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXIsXG4gICAgICBmaXJzdFBhZ2VUZXh0OiBvcHRpb25zLmZpcnN0UGFnZVRleHQgfHwgQ29uc3QuRklSU1RfUEFHRV9URVhULFxuICAgICAgcHJlUGFnZVRleHQ6IG9wdGlvbnMucHJlUGFnZVRleHQgfHwgQ29uc3QuUFJFX1BBR0VfVEVYVCxcbiAgICAgIG5leHRQYWdlVGV4dDogb3B0aW9ucy5uZXh0UGFnZVRleHQgfHwgQ29uc3QuTkVYVF9QQUdFX1RFWFQsXG4gICAgICBsYXN0UGFnZVRleHQ6IG9wdGlvbnMubGFzdFBhZ2VUZXh0IHx8IENvbnN0LkxBU1RfUEFHRV9URVhULFxuICAgICAgcHJlUGFnZVRpdGxlOiBvcHRpb25zLnByZVBhZ2VUaXRsZSB8fCBDb25zdC5QUkVfUEFHRV9USVRMRSxcbiAgICAgIG5leHRQYWdlVGl0bGU6IG9wdGlvbnMubmV4dFBhZ2VUaXRsZSB8fCBDb25zdC5ORVhUX1BBR0VfVElUTEUsXG4gICAgICBmaXJzdFBhZ2VUaXRsZTogb3B0aW9ucy5maXJzdFBhZ2VUaXRsZSB8fCBDb25zdC5GSVJTVF9QQUdFX1RJVExFLFxuICAgICAgbGFzdFBhZ2VUaXRsZTogb3B0aW9ucy5sYXN0UGFnZVRpdGxlIHx8IENvbnN0LkxBU1RfUEFHRV9USVRMRSxcbiAgICAgIG9uUGFnZUNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2VQYWdlLFxuICAgICAgb25TaXplUGVyUGFnZUNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSxcbiAgICB9O1xuICB9O1xuXG4gIHNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyID0gKHJlbW90ZUVtaXR0ZXI6IGFueSkgPT4ge1xuICAgIHRoaXMucmVtb3RlRW1pdHRlciA9IHJlbW90ZUVtaXR0ZXI7XG4gIH07XG5cbiAgZ2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIgPSAoKSA9PlxuICAgIHRoaXMucmVtb3RlRW1pdHRlciB8fCB0aGlzLnByb3BzLnJlbW90ZUVtaXR0ZXI7XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKG5leHRQcm9wczogYW55KSB7XG4gICAgY29uc3QgeyBjdXN0b20gfSA9IG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnM7XG5cbiAgICAvLyB1c2VyIHNob3VsZCBhbGlnbiB0aGUgcGFnZSB3aGVuIHRoZSBwYWdlIGlzIG5vdCBmaXQgdG8gdGhlIGRhdGEgc2l6ZSB3aGVuIHJlbW90ZSBlbmFibGVcbiAgICBpZiAodGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSB8fCBjdXN0b20pIHtcbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy5wYWdlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIC8vIHRoaXMuY3VyclBhZ2UgPSBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnBhZ2U7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMuc2l6ZVBlclBhZ2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgLy8gdGhpcy5jdXJyU2l6ZVBlclBhZ2UgPSBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnNpemVQZXJQYWdlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnRvdGFsU2l6ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyB0aGlzLmRhdGFTaXplID0gbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy50b3RhbFNpemU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNSZW1vdGVQYWdpbmF0aW9uID0gKCkgPT4ge1xuICAgIGNvbnN0IGUgPSB7IHJlc3VsdDogdW5kZWZpbmVkIH07XG4gICAgdGhpcy5yZW1vdGVFbWl0dGVyPy5lbWl0KFwiaXNSZW1vdGVQYWdpbmF0aW9uXCIsIGUpO1xuICAgIHJldHVybiBlLnJlc3VsdDtcbiAgfTtcblxuICBoYW5kbGVEYXRhU2l6ZUNoYW5nZShuZXdEYXRhU2l6ZTogYW55KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyE7XG4gICAgY29uc3QgcGFnZVN0YXJ0SW5kZXggPVxuICAgICAgdHlwZW9mIG9wdGlvbnMucGFnZVN0YXJ0SW5kZXggPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5QQUdFX1NUQVJUX0lOREVYXG4gICAgICAgIDogb3B0aW9ucy5wYWdlU3RhcnRJbmRleDtcbiAgICB0aGlzLmN1cnJQYWdlID0gYWxpZ25QYWdlKFxuICAgICAgbmV3RGF0YVNpemUsXG4gICAgICB0aGlzLmRhdGFTaXplLFxuICAgICAgdGhpcy5jdXJyUGFnZSxcbiAgICAgIHRoaXMuY3VyclNpemVQZXJQYWdlLFxuICAgICAgcGFnZVN0YXJ0SW5kZXhcbiAgICApO1xuICAgIHRoaXMuZGF0YVNpemUgPSBuZXdEYXRhU2l6ZTtcbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2VQYWdlKGN1cnJQYWdlOiBhbnkpIHtcbiAgICBjb25zdCB7IGN1cnJTaXplUGVyUGFnZSB9ID0gdGhpcztcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uIS5vcHRpb25zITtcblxuICAgIGlmIChvcHRpb25zLm9uUGFnZUNoYW5nZSkge1xuICAgICAgb3B0aW9ucy5vblBhZ2VDaGFuZ2UoY3VyclBhZ2UsIGN1cnJTaXplUGVyUGFnZSk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyUGFnZSA9IGN1cnJQYWdlO1xuXG4gICAgaWYgKHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuZ2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIoKS5lbWl0KFxuICAgICAgICBcInBhZ2luYXRpb25DaGFuZ2VcIixcbiAgICAgICAgY3VyclBhZ2UsXG4gICAgICAgIGN1cnJTaXplUGVyUGFnZVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UoY3VyclNpemVQZXJQYWdlOiBhbnksIGN1cnJQYWdlOiBhbnkpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uIS5vcHRpb25zITtcblxuICAgIGlmIChvcHRpb25zLm9uU2l6ZVBlclBhZ2VDaGFuZ2UpIHtcbiAgICAgIG9wdGlvbnMub25TaXplUGVyUGFnZUNoYW5nZShjdXJyU2l6ZVBlclBhZ2UsIGN1cnJQYWdlKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJQYWdlID0gY3VyclBhZ2U7XG4gICAgdGhpcy5jdXJyU2l6ZVBlclBhZ2UgPSBjdXJyU2l6ZVBlclBhZ2U7XG5cbiAgICBpZiAodGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSkge1xuICAgICAgdGhpcy5nZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlcigpLmVtaXQoXG4gICAgICAgIFwicGFnaW5hdGlvbkNoYW5nZVwiLFxuICAgICAgICBjdXJyUGFnZSxcbiAgICAgICAgY3VyclNpemVQZXJQYWdlXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgcGFnaW5hdGlvblByb3BzID0gdGhpcy5nZXRQYWdpbmF0aW9uUHJvcHMoKTtcbiAgICBjb25zdCBwYWdpbmF0aW9uID0ge1xuICAgICAgLi4udGhpcy5wcm9wcy5wYWdpbmF0aW9uLFxuICAgICAgb3B0aW9uczogcGFnaW5hdGlvblByb3BzLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFN0YXRlQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgIHBhZ2luYXRpb25Qcm9wcyxcbiAgICAgICAgICBwYWdpbmF0aW9uVGFibGVQcm9wczoge1xuICAgICAgICAgICAgcGFnaW5hdGlvbixcbiAgICAgICAgICAgIHNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyOiB0aGlzLnNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyLFxuICAgICAgICAgICAgZGF0YUNoYW5nZUxpc3RlbmVyOiB0aGlzLmRhdGFDaGFuZ2VMaXN0ZW5lcixcbiAgICAgICAgICB9LFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvU3RhdGVDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4gKHtcbiAgUHJvdmlkZXI6IFN0YXRlUHJvdmlkZXIsXG4gIENvbnN1bWVyOiBTdGF0ZUNvbnRleHQuQ29uc3VtZXIsXG59KTtcbiIsIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGFnaW5hdGlvbk9wdGlvbnMgfSBmcm9tIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nXCI7XG5cbmltcG9ydCBjcmVhdGVEYXRhQ29udGV4dCBmcm9tIFwiLi9zcmMvZGF0YS1jb250ZXh0XCI7XG5pbXBvcnQgUGFnaW5hdGlvbkxpc3RTdGFuZGFsb25lIGZyb20gXCIuL3NyYy9wYWdpbmF0aW9uLWxpc3Qtc3RhbmRhbG9uZVwiO1xuaW1wb3J0IFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUgZnJvbSBcIi4vc3JjL3BhZ2luYXRpb24tdG90YWwtc3RhbmRhbG9uZVwiO1xuaW1wb3J0IFNpemVQZXJQYWdlRHJvcGRvd25TdGFuZGFsb25lIGZyb20gXCIuL3NyYy9zaXplLXBlci1wYWdlLWRyb3Bkb3duLXN0YW5kYWxvbmVcIjtcbmltcG9ydCBjcmVhdGVCYXNlQ29udGV4dCBmcm9tIFwiLi9zcmMvc3RhdGUtY29udGV4dFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25DdHhPcHRpb25zIHtcbiAgb3B0aW9ucz86IFBhZ2luYXRpb25PcHRpb25zIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25DaGlsZFByb3BzIGV4dGVuZHMgUGFnaW5hdGlvbk9wdGlvbnMge1xuICB0YWJsZUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBib290c3RyYXA0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uUHJvdmlkZXJQcm9wcyB7XG4gIHBhZ2luYXRpb24/OiBQYWdpbmF0aW9uQ3R4T3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgLy8gVE9ET1xuICAvLyBjaGlsZHJlbjogKGNoaWxkUHJvcHM6IHtcbiAgLy8gICBwYWdpbmF0aW9uUHJvcHM6IFBhZ2luYXRpb25DaGlsZFByb3BzO1xuICAvLyAgIHBhZ2luYXRpb25UYWJsZVByb3BzOiBCb290c3RyYXBUYWJsZVByb3BzO1xuICAvLyB9KSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsO1xuICBjaGlsZHJlbjogYW55O1xuICB0YWJsZUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBib290c3RyYXA0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcmVtb3RlRW1pdHRlcjogYW55O1xuICBkYXRhOiBhbnlbXTtcbiAgaXNSZW1vdGVQYWdpbmF0aW9uOiBGdW5jdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyUHJvcHMge1xuICBkYXRhOiBhbnlbXTtcbiAgcmVtb3RlRW1pdHRlcjogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaXNSZW1vdGVQYWdpbmF0aW9uOiAoKSA9PiBib29sZWFuO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBwYWdpbmF0aW9uOiB7XG4gICAgb3B0aW9uczoge1xuICAgICAgY3VzdG9tPzogYm9vbGVhbjtcbiAgICAgIHBhZ2VTdGFydEluZGV4PzogbnVtYmVyO1xuICAgICAgb25QYWdlQ2hhbmdlOiAobmV3UGFnZTogYW55LCBjdXJyU2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgICB9O1xuICB9O1xuICBvbkRhdGFTaXplQ2hhbmdlPzogKGRhdGFTaXplOiB7IGRhdGFTaXplOiBudW1iZXIgfSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKG9wdGlvbnMgPSB7fSkgPT4gKHtcbiAgY3JlYXRlQ29udGV4dDogY3JlYXRlRGF0YUNvbnRleHQsXG4gIG9wdGlvbnMsXG59KTtcblxuY29uc3QgeyBQcm92aWRlciwgQ29uc3VtZXIgfSA9IGNyZWF0ZUJhc2VDb250ZXh0KCk7XG5cbmNvbnN0IEN1c3RvbWl6YWJsZVByb3ZpZGVyID0gKHByb3BzOiBQYWdpbmF0aW9uUHJvdmlkZXJQcm9wcykgPT4gKFxuICA8UHJvdmlkZXIgey4uLnByb3BzfT5cbiAgICA8Q29uc3VtZXI+XG4gICAgICB7KHBhZ2luYXRpb25Qcm9wczogYW55KSA9PiBwcm9wcy5jaGlsZHJlbihwYWdpbmF0aW9uUHJvcHMpfVxuICAgIDwvQ29uc3VtZXI+XG4gIDwvUHJvdmlkZXI+XG4pO1xuXG5cblxuZXhwb3J0IGNvbnN0IFBhZ2luYXRpb25Qcm92aWRlciA9IEN1c3RvbWl6YWJsZVByb3ZpZGVyO1xuZXhwb3J0IHtcbiAgUGFnaW5hdGlvbkxpc3RTdGFuZGFsb25lLFxuICBQYWdpbmF0aW9uVG90YWxTdGFuZGFsb25lLFxuICBTaXplUGVyUGFnZURyb3Bkb3duU3RhbmRhbG9uZSxcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUGFnaW5hdGlvblRvdGFsIGZyb20gXCIuL3BhZ2luYXRpb24tdG90YWxcIjtcbmltcG9ydCBwYWdpbmF0aW9uVG90YWxBZGFwdGVyIGZyb20gXCIuL3BhZ2luYXRpb24tdG90YWwtYWRhcHRlclwiO1xuaW1wb3J0IHN0YW5kYWxvbmVBZGFwdGVyIGZyb20gXCIuL3N0YW5kYWxvbmUtYWRhcHRlclwiO1xuXG5jb25zdCBQYWdpbmF0aW9uVG90YWxTdGFuZGFsb25lID0gKHByb3BzOiBhbnkpID0+IChcbiAgPFBhZ2luYXRpb25Ub3RhbCB7Li4ucHJvcHN9IC8+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBzdGFuZGFsb25lQWRhcHRlcihcbiAgcGFnaW5hdGlvblRvdGFsQWRhcHRlcihQYWdpbmF0aW9uVG90YWxTdGFuZGFsb25lKVxuKTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTg3KTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fIiwiUmVmbGVjdE93bktleXMiLCJSIiwiUmVmbGVjdCIsIlJlZmxlY3RBcHBseSIsImFwcGx5IiwidGFyZ2V0IiwicmVjZWl2ZXIiLCJhcmdzIiwiRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJjYWxsIiwib3duS2V5cyIsIk9iamVjdCIsImdldE93blByb3BlcnR5U3ltYm9scyIsImdldE93blByb3BlcnR5TmFtZXMiLCJjb25jYXQiLCJOdW1iZXJJc05hTiIsIk51bWJlciIsImlzTmFOIiwidmFsdWUiLCJFdmVudEVtaXR0ZXIiLCJpbml0IiwidGhpcyIsIm9uY2UiLCJlbWl0dGVyIiwibmFtZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZXJyb3JMaXN0ZW5lciIsImVyciIsInJlbW92ZUxpc3RlbmVyIiwicmVzb2x2ZXIiLCJzbGljZSIsImFyZ3VtZW50cyIsImV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lciIsImhhbmRsZXIiLCJmbGFncyIsIm9uIiwiYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIiLCJfZXZlbnRzIiwidW5kZWZpbmVkIiwiX2V2ZW50c0NvdW50IiwiX21heExpc3RlbmVycyIsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCJjaGVja0xpc3RlbmVyIiwibGlzdGVuZXIiLCJUeXBlRXJyb3IiLCJfZ2V0TWF4TGlzdGVuZXJzIiwidGhhdCIsIl9hZGRMaXN0ZW5lciIsInR5cGUiLCJwcmVwZW5kIiwibSIsImV2ZW50cyIsImV4aXN0aW5nIiwid2FybmluZyIsImNyZWF0ZSIsIm5ld0xpc3RlbmVyIiwiZW1pdCIsInVuc2hpZnQiLCJwdXNoIiwibGVuZ3RoIiwid2FybmVkIiwidyIsIkVycm9yIiwiU3RyaW5nIiwiY291bnQiLCJjb25zb2xlIiwid2FybiIsIm9uY2VXcmFwcGVyIiwiZmlyZWQiLCJ3cmFwRm4iLCJfb25jZVdyYXAiLCJzdGF0ZSIsIndyYXBwZWQiLCJiaW5kIiwiX2xpc3RlbmVycyIsInVud3JhcCIsImV2bGlzdGVuZXIiLCJhcnIiLCJyZXQiLCJBcnJheSIsImkiLCJ1bndyYXBMaXN0ZW5lcnMiLCJhcnJheUNsb25lIiwibGlzdGVuZXJDb3VudCIsIm4iLCJjb3B5IiwiYWRkRXZlbnRMaXN0ZW5lciIsIndyYXBMaXN0ZW5lciIsImFyZyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJzZXQiLCJSYW5nZUVycm9yIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRNYXhMaXN0ZW5lcnMiLCJnZXRNYXhMaXN0ZW5lcnMiLCJkb0Vycm9yIiwiZXJyb3IiLCJlciIsIm1lc3NhZ2UiLCJjb250ZXh0IiwibGVuIiwibGlzdGVuZXJzIiwiYWRkTGlzdGVuZXIiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwibGlzdCIsInBvc2l0aW9uIiwib3JpZ2luYWxMaXN0ZW5lciIsInNoaWZ0IiwiaW5kZXgiLCJwb3AiLCJzcGxpY2VPbmUiLCJvZmYiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJrZXkiLCJrZXlzIiwicmF3TGlzdGVuZXJzIiwiZXZlbnROYW1lcyIsIlBhZ2luYXRpb24iLCJDb21wb25lbnQiLCJyZW5kZXIiLCJ0YWJsZUlkIiwiY3VyclBhZ2UiLCJwYWdlU3RhcnRJbmRleCIsIlBBR0VfU1RBUlRfSU5ERVgiLCJzaG93VG90YWwiLCJTSE9XX1RPVEFMIiwiZGF0YVNpemUiLCJwYWdlTGlzdFJlbmRlcmVyIiwicGFnZUJ1dHRvblJlbmRlcmVyIiwicGFnaW5hdGlvblRvdGFsUmVuZGVyZXIiLCJQQUdJTkFUSU9OX1RPVEFMIiwiaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UiLCJISURFX1BBR0VfTElTVF9PTkxZX09ORV9QQUdFIiwidG90YWxQYWdlcyIsImxhc3RQYWdlIiwib25QYWdlQ2hhbmdlIiwic2l6ZVBlclBhZ2VMaXN0IiwiU0laRV9QRVJfUEFHRV9MSVNUIiwiY3VyclNpemVQZXJQYWdlIiwiaGlkZVNpemVQZXJQYWdlIiwiSElERV9TSVpFX1BFUl9QQUdFIiwic2l6ZVBlclBhZ2VSZW5kZXJlciIsInNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXIiLCJvblNpemVQZXJQYWdlQ2hhbmdlIiwiYm9vdHN0cmFwNCIsImRpc2FibGVQYWdlVGl0bGUiLCJwYWdpbmF0aW9uU2l6ZSIsIlBBR0lOQVRJT05fU0laRSIsIndpdGhGaXJzdEFuZExhc3QiLCJXaXRoX0ZJUlNUX0FORF9MQVNUIiwiYWx3YXlzU2hvd0FsbEJ0bnMiLCJTSE9XX0FMTF9QQUdFX0JUTlMiLCJmaXJzdFBhZ2VUZXh0IiwiRklSU1RfUEFHRV9URVhUIiwicHJlUGFnZVRleHQiLCJQUkVfUEFHRV9URVhUIiwibmV4dFBhZ2VUZXh0IiwiTkVYVF9QQUdFX1RFWFQiLCJsYXN0UGFnZVRleHQiLCJMQVNUX1BBR0VfVEVYVCIsIm5leHRQYWdlVGl0bGUiLCJORVhUX1BBR0VfVElUTEUiLCJwcmVQYWdlVGl0bGUiLCJQUkVfUEFHRV9USVRMRSIsImZpcnN0UGFnZVRpdGxlIiwiRklSU1RfUEFHRV9USVRMRSIsImxhc3RQYWdlVGl0bGUiLCJMQVNUX1BBR0VfVElUTEUiLCJyZXN0IiwicHJvcHMiLCJwYWdlcyIsImNhbGN1bGF0ZVBhZ2VTdGF0dXMiLCJjYWxjdWxhdGVQYWdlcyIsInBhZ2VMaXN0Q2xhc3MiLCJjbGFzc05hbWUiLCJTaXplUGVyUGFnZURyb3Bkb3duV2l0aEFkYXB0ZXIiLCJQYWdpbmF0aW9uVG90YWxXaXRoQWRhcHRlciIsIlBhZ2luYXRpb25MaXN0V2l0aEFkYXB0ZXIiLCJzdGF0aWMiLCJwYWdpbmF0aW9uTGlzdEFkYXB0ZXIiLCJXcmFwcGVkQ29tcG9uZW50IiwiUGFnaW5hdG9uTGlzdCIsIm1hcCIsInBhZ2VQcm9wcyIsImVsZW1lbnQiLCJjbG9uZUVsZW1lbnQiLCJwYWdlIiwiZGVmYXVsdFByb3BzIiwiRXh0ZW5kQmFzZSIsImJhY2tUb1ByZXZQYWdlIiwiaW5pdGlhbFN0YXRlIiwiY2FsY3VsYXRlVG90YWxQYWdlIiwiY2FsY3VsYXRlTGFzdFBhZ2UiLCJzaXplUGVyUGFnZSIsIk1hdGgiLCJjZWlsIiwiY2FsY3VsYXRlRnJvbVRvIiwib2Zmc2V0IiwiYWJzIiwiZnJvbSIsInRvIiwibWluIiwiZW5kUGFnZSIsInN0YXJ0UGFnZSIsIm1heCIsImZsb29yIiwiaXNTdGFydCIsImlzRW5kIiwiZmlsdGVyIiwidGl0bGUiLCJhY3RpdmUiLCJkaXNhYmxlZCIsInBhZ2VSZXN1bHQiLCJjYWxjdWxhdGVTaXplUGVyUGFnZVN0YXR1cyIsIl9zaXplUGVyUGFnZSIsInRleHQiLCJQcm92aWRlciIsIlBhZ2luYXRpb25EYXRhQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJQYWdpbmF0aW9uRGF0YVByb3ZpZGVyIiwiY29tcG9uZW50RGlkVXBkYXRlIiwibmV4dFByb3BzIiwic3VwZXIiLCJjdXN0b20iLCJwYWdpbmF0aW9uIiwib3B0aW9ucyIsImlzUmVtb3RlUGFnaW5hdGlvbiIsIm5ld1BhZ2UiLCJhbGlnblBhZ2UiLCJkYXRhIiwib25EYXRhU2l6ZUNoYW5nZSIsInJlbmRlckRlZmF1bHRQYWdpbmF0aW9uIiwiZ2V0UGFnaW5hdGlvblByb3BzIiwiZ2V0QnlDdXJyUGFnZSIsInNldFJlbW90ZUVtaXR0ZXIiLCJzZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlciIsImNoaWxkcmVuIiwiQ29uc3VtZXIiLCJQYWdlQnV0dG9uIiwiY29uc3RydWN0b3IiLCJoYW5kbGVDbGljayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImNsYXNzZXMiLCJocmVmIiwib25DbGljayIsIlBhZ2luYXRpb25Ub3RhbCIsInNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyIiwiZHJvcGRvd25PcGVuIiwiY2xvc2VEcm9wRG93biIsInRvZ2dsZURyb3BEb3duIiwiaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UiLCJzZXRTdGF0ZSIsIm9wZW4iLCJvcHRpb25SZW5kZXJlciIsIm9uQmx1ciIsInNpemVQZXJQYWdlRHJvcERvd25EZWZhdWx0UHJvcHMiLCJoaWRkZW4iLCJidG5Db250ZXh0dWFsIiwidmFyaWF0aW9uIiwib3BlbkNsYXNzIiwiZHJvcGRvd25DbGFzc2VzIiwiaWQiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJyb2xlIiwib3B0aW9uIiwicGFnaW5hdGlvblRvdGFsQWRhcHRlciIsIlNpemVQZXJQYWdlT3B0aW9uIiwidGFiSW5kZXgiLCJvbk1vdXNlRG93biIsImhhbmRsZUNoYW5nZVBhZ2UiLCJjdXJyUHJvcHMiLCJ0b3RhbFNpemUiLCJzZWxlY3RlZFNpemUiLCJwYXJzZUludCIsIm5ld1RvdGFsUGFnZXMiLCJuZXdMYXN0UGFnZSIsImVuZEluZGV4IiwiZ2V0Tm9ybWFsaXplZFBhZ2UiLCJwcmV2RGF0YVNpemUiLCJlbmQiLCJzdGFydCIsInN0YXJ0SW5kZXgiLCJyZXN1bHQiLCJoYXNPd24iLCJoYXNPd25Qcm9wZXJ0eSIsImNsYXNzTmFtZXMiLCJhcHBlbmRDbGFzcyIsInBhcnNlVmFsdWUiLCJpc0FycmF5IiwidG9TdHJpbmciLCJpbmNsdWRlcyIsIm5ld0NsYXNzIiwiZGVmYXVsdCIsIlN0YXRlQ29udGV4dCIsIlN0YXRlUHJvdmlkZXIiLCJkYXRhQ2hhbmdlTGlzdGVuZXIiLCJyZW1vdGVFbWl0dGVyIiwiaGFuZGxlRGF0YVNpemVDaGFuZ2UiLCJnZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlciIsIm5ld0RhdGFTaXplIiwiZm9yY2VVcGRhdGUiLCJwYWdpbmF0aW9uUHJvcHMiLCJwYWdpbmF0aW9uVGFibGVQcm9wcyIsIlBhZ2luYXRpb25MaXN0U3RhbmRhbG9uZSIsIlBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUiLCJTaXplUGVyUGFnZURyb3Bkb3duU3RhbmRhbG9uZSIsIlBhZ2luYXRpb25Qcm92aWRlciIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==
|