react-bootstrap-table-ng-filter 4.18.0 → 4.19.0
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/dist/react-bootstrap-table-ng-filter.js +2 -2
- package/dist/react-bootstrap-table-ng-filter.min.js +2 -2
- package/lib/index.d.ts +0 -3
- package/lib/src/components/date.js +2 -2
- package/lib/src/components/date.js.map +1 -1
- package/lib/src/components/multiselect.js +1 -1
- package/lib/src/components/multiselect.js.map +1 -1
- package/lib/src/components/number.js +3 -3
- package/lib/src/components/number.js.map +1 -1
- package/lib/src/components/select.js +1 -1
- package/lib/src/components/select.js.map +1 -1
- package/lib/src/components/text.js +1 -1
- package/lib/src/components/text.js.map +1 -1
- package/lib/src/context.d.ts +0 -3
- package/package.json +5 -5
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("react")):"function"==typeof define&&define.amd?define(["react"],e):"object"==typeof exports?exports.ReactBootstrapTableNgFilter=e(require("react")):t.ReactBootstrapTableNgFilter=e(t.React)}(self,t=>{return e={37(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function i(t,e,r){return e=u(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,l()?Reflect.construct(e,r||[],u(t).constructor):e.apply(t,r))}function l(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(l=function(){return!!t})()}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function c(t,e){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},c(t,e)}var s=function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var f=s(r(556)),p=s(r(442)),d=r(355),m=r(206);e.default=function(t,e,r){var n=p.default.createContext({}),l=function(l){function u(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,u),(e=i(this,u,[t])).currFilters={},e.clearFilters={},e.onFilter=e.onFilter.bind(e),e.doFilter=e.doFilter.bind(e),e.onExternalFilter=e.onExternalFilter.bind(e),e.data=t.data,e.isEmitDataChange=!1,e}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&c(t,e)}(u,l),s=u,f=[{key:"componentDidMount",value:function(){e()&&Object.keys(this.currFilters).length>0&&r(this.currFilters)}},{key:"onFilter",value:function(n,o){var i=this,l=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return function(u){var c=Object.assign({},i.currFilters);i.clearFilters={};var s,f,p,m=n.dataField,h=n.filter;if(t.isDefined(u)&&""!==u&&0!==u.length){var y=h.props,b=y.comparator,v=void 0===b?o===d.FILTER_TYPES.SELECT?d.EQ:d.LIKE:b,E=y.caseSensitive,g=void 0!==E&&E;c[m]={filterVal:u,filterType:o,comparator:v,caseSensitive:g}}else delete c[m],i.clearFilters=(s={},p={clear:!0,filterVal:u},(f=a(f=m))in s?Object.defineProperty(s,f,{value:p,enumerable:!0,configurable:!0,writable:!0}):s[f]=p,s);if(i.currFilters=c,e())return l||r(i.currFilters),void i.forceUpdate();i.doFilter(i.props)}}},{key:"onExternalFilter",value:function(t,e){var r=this;return function(n){r.onFilter(t,e)(n)}}},{key:"getFiltered",value:function(){return this.data}},{key:"shouldComponentUpdate",value:function(r,n,o){return e()||t.isEqual(r.data,this.data)?this.data=r.data:this.doFilter(r,this.isEmitDataChange),!0}},{key:"doFilter",value:function(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.dataChangeListener,o=e.data,a=e.columns,i=e.filter,l=(0,m.filters)(o,a,t)(this.currFilters,this.clearFilters);i.afterFilter&&i.afterFilter(l,this.currFilters),this.data=l,n&&!r?(this.isEmitDataChange=!0,n.emit("filterChanged",l.length)):(this.isEmitDataChange=!1,this.forceUpdate())}},{key:"render",value:function(){return p.default.createElement(n.Provider,{value:{data:this.data,onFilter:this.onFilter,onExternalFilter:this.onExternalFilter,currFilters:this.currFilters}},this.props.children)}}],f&&o(s.prototype,f),h&&o(s,h),Object.defineProperty(s,"prototype",{writable:!1}),s;var s,f,h}(p.default.Component);return l.propTypes={data:f.default.array.isRequired,columns:f.default.array.isRequired,dataChangeListener:f.default.object},{Provider:l,Consumer:n.Consumer}}},63(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}var o=["id","style","className","defaultValue","onFilter","column","options","comparator","withoutEmptyOption","caseSensitive","getFilter","filterState"];function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function i(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?a(Object(r),!0).forEach(function(e){l(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function l(t,e,r){return(e=c(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function u(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,c(n.key),n)}}function c(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function s(t,e,r){return e=p(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,f()?Reflect.construct(e,r||[],p(t).constructor):e.apply(t,r))}function f(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(f=function(){return!!t})()}function p(t){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},p(t)}function d(t,e){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},d(t,e)}var m,h=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},y=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},b=(m=function(t){return m=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},m(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=m(t),n=0;n<r.length;n++)"default"!==r[n]&&h(e,t,r[n]);return y(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var v=b(r(442)),E=r(355),g=function(t){function e(t){var r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(r=s(this,e,[t])).filter=r.filter.bind(r),r.options=r.getOptions(t);var n,o,a=void 0!==(n=r.options,o=r.getDefaultValue(),Array.isArray(n)?n.filter(function(t){return t.label===o}).map(function(t){return t.value})[0]:n[o]);return r.state={isSelected:a},r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&d(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props,r=e.column,n=e.onFilter,o=e.getFilter,a=this.selectInput.value;a&&""!==a&&n(r,E.FILTER_TYPES.SELECT,!0)(a),o&&o(function(e){t.setState(function(){return{isSelected:""!==e}}),t.selectInput.value=e,n(r,E.FILTER_TYPES.SELECT)(e)})}},{key:"componentDidUpdate",value:function(t){var e=!1,r=this.props,n=r.column,o=r.onFilter,a=r.defaultValue,i=this.getOptions(this.props);if(a!==t.defaultValue?(this.selectInput.value=a,e=!0):function(t,e){if(Array.isArray(t)){if(t.length===e.length){for(var r=0;r<t.length;r+=1)if(t[r].value!==e[r].value||t[r].label!==e[r].label)return!1;return!0}return!1}for(var n=Object.keys(t),o=0;o<n.length;o+=1)if(t[n[o]]!==e[n[o]])return!1;return Object.keys(t).length===Object.keys(e).length}(i,this.options)||(this.options=i,e=!0),e){var l=this.selectInput.value;l&&o(n,E.FILTER_TYPES.SELECT)(l)}}},{key:"getOptions",value:function(t){return"function"==typeof t.options?t.options(t.column):t.options}},{key:"getDefaultValue",value:function(){var t=this.props,e=t.filterState,r=t.defaultValue;return e&&void 0!==e.filterVal?e.filterVal:r}},{key:"cleanFiltered",value:function(){var t=void 0!==this.props.defaultValue?this.props.defaultValue:"";this.setState(function(){return{isSelected:""!==t}}),this.selectInput.value=t,this.props.onFilter(this.props.column,E.FILTER_TYPES.SELECT)(t)}},{key:"applyFilter",value:function(t){this.selectInput.value=t,this.setState(function(){return{isSelected:""!==t}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.SELECT)(t)}},{key:"filter",value:function(t){var e=t.target.value;this.setState(function(){return{isSelected:""!==e}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.SELECT)(e)}},{key:"renderOptions",value:function(){var t=[],e=this.options,r=this.props,n=r.placeholder,o=r.column,a=r.withoutEmptyOption,i=r.defaultValue;return a||void 0!==i&&""!==i||t.push(v.default.createElement("option",{key:"-1",value:"","data-testid":"select-filter-placeholder"},n||"Select ".concat(o.text,"..."))),Array.isArray(e)?e.forEach(function(e){var r=e.value,n=e.label;return t.push(v.default.createElement("option",{key:r,value:r},n))}):Object.keys(e).forEach(function(r){return t.push(v.default.createElement("option",{key:r,value:r},e[r]))}),t}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=e.style,a=e.className,l=(e.defaultValue,e.onFilter,e.column),u=(e.options,e.comparator,e.withoutEmptyOption,e.caseSensitive,e.getFilter,e.filterState,function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(-1!==e.indexOf(n))continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n<a.length;n++)r=a[n],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(e,o)),c="filter select-filter form-control ".concat(a," ").concat(this.state.isSelected?"":"placeholder-selected"),s="select-filter-column-".concat(l.dataField).concat(r?"-".concat(r):"");return v.default.createElement("label",{className:"filter-label",htmlFor:s},v.default.createElement("span",{className:"sr-only"},"Filter by ",l.text),v.default.createElement("select",i(i({},u),{},{ref:function(e){return t.selectInput=e},id:s,style:n,className:c,onChange:this.filter,onClick:function(t){return t.stopPropagation()},defaultValue:this.getDefaultValue()||"","data-testid":"select-filter"}),this.renderOptions()))}}],n&&u(r.prototype,n),a&&u(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(v.Component);e.default=g},206(t,e,r){"use strict";function n(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function o(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?n(Object(r),!0).forEach(function(e){a(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function a(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=i(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==i(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.filters=e.filterFactory=e.filterByArray=e.filterByDate=e.filterByNumber=e.filterByText=void 0;var l=r(355);e.filterByText=function(t){return function(e,r,n,o){var a=n.filterVal,i=void 0===a?"":a,u=n.comparator,c=void 0===u?l.LIKE:u,s=n.caseSensitive,f=i.toString();return e.filter(function(e){var n=t.get(e,r);o&&(n=o(n,e));var a=t.isDefined(n)?n.toString():"";return c===l.EQ?a===f:s?a.includes(f):-1!==a.toLocaleUpperCase().indexOf(f.toLocaleUpperCase())})}},e.filterByNumber=function(t){return function(e,r,n,o){var a=n.filterVal,i=a.comparator,u=a.number;return e.filter(function(e){if(""===u||!i)return!0;var n=t.get(e,r);switch(o&&(n=o(n,e)),i){case l.EQ:return n==u;case l.GT:return n>u;case l.GE:return n>=u;case l.LT:return n<u;case l.LE:return n<=u;case l.NE:return n!=u;default:return console.error("Number comparator provided is not supported"),!0}})}},e.filterByDate=function(t){return function(e,r,n,o){var a=n.filterVal,u=a.comparator,c=a.date;if(!c||!u)return e;var s=c.getUTCDate(),f=c.getUTCMonth(),p=c.getUTCFullYear();return e.filter(function(e){var n=!0,a=t.get(e,r);o&&(a=o(a,e)),"object"!==i(a)&&(a=new Date(a));var d=a.getUTCDate(),m=a.getUTCMonth(),h=a.getUTCFullYear();switch(u){case l.EQ:s===d&&f===m&&p===h||(n=!1);break;case l.GT:a<=c&&(n=!1);break;case l.GE:(h<p||h===p&&m<f||h===p&&m===f&&d<s)&&(n=!1);break;case l.LT:a>=c&&(n=!1);break;case l.LE:(h>p||h===p&&m>f||h===p&&m===f&&d>s)&&(n=!1);break;case l.NE:s===d&&f===m&&p===h&&(n=!1);break;default:console.error("Date comparator provided is not supported")}return n})}},e.filterByArray=function(t){return function(e,r,n){var o=n.filterVal,a=n.comparator;if(0===o.length)return e;var i=o.filter(function(e){return t.isDefined(e)}).map(function(t){return t.toString()});return e.filter(function(e){var n=t.get(e,r),o=t.isDefined(n)?n.toString():"";return a===l.EQ?-1!==i.indexOf(o):(o=o.toLocaleUpperCase(),i.some(function(t){return-1!==o.indexOf(t.toLocaleUpperCase())}))})}},e.filterFactory=function(t){return function(r){switch(r){case l.FILTER_TYPES.MULTISELECT:return(0,e.filterByArray)(t);case l.FILTER_TYPES.NUMBER:return(0,e.filterByNumber)(t);case l.FILTER_TYPES.DATE:return(0,e.filterByDate)(t);case l.FILTER_TYPES.TEXT:case l.FILTER_TYPES.SELECT:default:return(0,e.filterByText)(t)}}},e.filters=function(t,r,n){return function(a){var i,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},u=(0,e.filterFactory)(n),c=o(o({},l),a),s=t;return Object.keys(c).forEach(function(t){var e,n,o;r=null!=r?r:[];for(var a=0;a<r.length;a+=1)if(r[a].dataField===t){n=r[a].filterValue,r[a].filter&&(o=r[a].filter.props.onFilter);break}if(l[t]&&o)void 0!==(e=o(l[t].filterVal,s))&&(s=e);else{var f=c[t];i=u(f.filterType),o&&(e=o(f.filterVal,s)),s=void 0===e?i(s,t,f,n):e}}),s}}},321(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355),c=t=>{if(t&&t.selectedOptions)return Array.from(t.selectedOptions).map(t=>t.value);if(t&&Array.isArray(t.value))return t.value;const e=[],r=t&&t.options?t.options.length:0;for(let n=0;n<r;n+=1){const r=t.options[n];r&&r.selected&&e.push(r.value)}return e};class s extends l.Component{constructor(t){super(t),this.filter=this.filter.bind(this),this.applyFilter=this.applyFilter.bind(this);const e=(t.defaultValue??[]).map(e=>t.options[e]).length>0;this.state={isSelected:e}}componentDidMount(){const{getFilter:t}=this.props,e=c(this.selectInput);e&&e.length>0&&this.applyFilter(e),t&&t(t=>{this.selectInput.value=t,this.applyFilter(t)})}componentDidUpdate(t){let e=!1;this.props.defaultValue!==t.defaultValue?e=!0:function(t,e){const r=Object.keys(t);for(let n=0;n<r.length;n+=1)if(t[r[n]]!==e[r[n]])return!1;return Object.keys(t).length===Object.keys(e).length}(this.props.options,t.options)||(e=!0),e&&this.applyFilter(c(this.selectInput))}getDefaultValue(){const{filterState:t={},defaultValue:e=[]}=this.props;return t&&void 0!==t.filterVal?t.filterVal:e}getOptions(){const t=[],{options:e,placeholder:r,column:n,withoutEmptyOption:o=!1,defaultValue:a=[]}=this.props,i=a&&a.length>0;return o||i||t.push(l.default.createElement("option",{key:"-1",value:"","data-testid":"multiselect-placeholder"},r||`Select ${n.text}...`)),Object.keys(e).forEach(r=>t.push(l.default.createElement("option",{key:r,value:r},e[r]))),t}cleanFiltered(){const t=void 0!==this.props.defaultValue?this.props.defaultValue:[];this.selectInput.value=t,this.applyFilter(t)}applyFilter(t){1===t.length&&""===t[0]&&(t=[]),this.setState(()=>({isSelected:t.length>0})),this.props.onFilter(this.props.column,u.FILTER_TYPES.MULTISELECT)(t)}filter(t){const e=c(t.target);this.applyFilter(e)}render(){const{id:t=null,style:e,className:r="",filterState:n={},defaultValue:o=[],onFilter:a,column:i,options:c,comparator:s=u.EQ,withoutEmptyOption:f=!1,caseSensitive:p=!0,getFilter:d,...m}=this.props,h=`filter select-filter form-control ${r} ${this.state.isSelected?"":"placeholder-selected"}`,y=`multiselect-filter-column-${i.dataField}${t?`-${t}`:""}`;return l.default.createElement("label",{className:"filter-label",htmlFor:y},l.default.createElement("span",{className:"sr-only"},"Filter by ",i.text),l.default.createElement("select",{...m,ref:t=>this.selectInput=t,id:y,style:e,multiple:!0,className:h,onChange:this.filter,onClick:t=>t.stopPropagation(),defaultValue:this.getDefaultValue(),"data-testid":"multiselect-filter"},this.getOptions()))}}e.default=s},355(t,e,r){"use strict";var n=function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.customFilter=e.dateFilter=e.numberFilter=e.multiSelectFilter=e.selectFilter=e.textFilter=e.ComparatorNumber=e.LE=e.LT=e.GE=e.GT=e.NE=e.EQ=e.LIKE=e.FILTER_DELAY=e.FILTER_TYPES=void 0;var o,a=n(r(659)),i=n(r(558)),l=n(r(834)),u=n(r(63)),c=n(r(652)),s=n(r(37));!function(t){t.TEXT="TEXT",t.SELECT="SELECT",t.MULTISELECT="MULTISELECT",t.NUMBER="NUMBER",t.DATE="DATE"}(o||(e.FILTER_TYPES=o={})),e.FILTER_DELAY=500,e.LIKE="LIKE",e.EQ="=",e.NE="!=",e.GT=">",e.GE=">=",e.LT="<",e.LE="<=",e.ComparatorNumber=7,e.textFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:c.default,props:t}},e.selectFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:u.default,props:t}},e.multiSelectFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:i.default,props:t}},e.numberFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:l.default,props:t}},e.dateFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:a.default,props:t}},e.customFilter=function(){return{Filter:function(){},props:arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}}},e.default=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:s.default,options:t}}},388(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355);class c extends l.Component{constructor(t){super(t),this.filter=this.filter.bind(this),this.options=this.getOptions(t);const e=void 0!==(r=this.options,n=this.getDefaultValue(),Array.isArray(r)?r.filter(({label:t})=>t===n).map(({value:t})=>t)[0]:r[n]);var r,n;this.state={isSelected:e}}componentDidMount(){const{column:t,onFilter:e,getFilter:r}=this.props,n=this.selectInput.value;n&&""!==n&&e(t,u.FILTER_TYPES.SELECT,!0)(n),r&&r(r=>{this.setState(()=>({isSelected:""!==r})),this.selectInput.value=r,e(t,u.FILTER_TYPES.SELECT)(r)})}componentDidUpdate(t){let e=!1;const{column:r,onFilter:n,defaultValue:o}=this.props,a=this.getOptions(this.props);if(o!==t.defaultValue?(this.selectInput.value=o,e=!0):function(t,e){if(Array.isArray(t)){if(t.length===e.length){for(let r=0;r<t.length;r+=1)if(t[r].value!==e[r].value||t[r].label!==e[r].label)return!1;return!0}return!1}const r=Object.keys(t);for(let n=0;n<r.length;n+=1)if(t[r[n]]!==e[r[n]])return!1;return Object.keys(t).length===Object.keys(e).length}(a,this.options)||(this.options=a,e=!0),e){const t=this.selectInput.value;t&&n(r,u.FILTER_TYPES.SELECT)(t)}}getOptions(t){return"function"==typeof t.options?t.options(t.column):t.options}getDefaultValue(){const{filterState:t,defaultValue:e}=this.props;return t&&void 0!==t.filterVal?t.filterVal:e}cleanFiltered(){const t=void 0!==this.props.defaultValue?this.props.defaultValue:"";this.setState(()=>({isSelected:""!==t})),this.selectInput.value=t,this.props.onFilter(this.props.column,u.FILTER_TYPES.SELECT)(t)}applyFilter(t){this.selectInput.value=t,this.setState(()=>({isSelected:""!==t})),this.props.onFilter(this.props.column,u.FILTER_TYPES.SELECT)(t)}filter(t){const{value:e}=t.target;this.setState(()=>({isSelected:""!==e})),this.props.onFilter(this.props.column,u.FILTER_TYPES.SELECT)(e)}renderOptions(){const t=[],{options:e}=this,{placeholder:r,column:n,withoutEmptyOption:o,defaultValue:a}=this.props;return o||void 0!==a&&""!==a||t.push(l.default.createElement("option",{key:"-1",value:"","data-testid":"select-filter-placeholder"},r||`Select ${n.text}...`)),Array.isArray(e)?e.forEach(({value:e,label:r})=>t.push(l.default.createElement("option",{key:e,value:e},r))):Object.keys(e).forEach(r=>t.push(l.default.createElement("option",{key:r,value:r},e[r]))),t}render(){const{id:t,style:e,className:r,defaultValue:n,onFilter:o,column:a,options:i,comparator:u,withoutEmptyOption:c,caseSensitive:s,getFilter:f,filterState:p,...d}=this.props,m=`filter select-filter form-control ${r} ${this.state.isSelected?"":"placeholder-selected"}`,h=`select-filter-column-${a.dataField}${t?`-${t}`:""}`;return l.default.createElement("label",{className:"filter-label",htmlFor:h},l.default.createElement("span",{className:"sr-only"},"Filter by ",a.text),l.default.createElement("select",{...d,ref:t=>this.selectInput=t,id:h,style:e,className:m,onChange:this.filter,onClick:t=>t.stopPropagation(),defaultValue:this.getDefaultValue()||"","data-testid":"select-filter"},this.renderOptions()))}}e.default=c},442(e){"use strict";e.exports=t},461(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355);class c extends l.Component{constructor(t){super(t),this.filter=this.filter.bind(this),this.handleClick=this.handleClick.bind(this),this.timeout=null,this.input={},this.state={value:t.filterState&&void 0!==t.filterState.filterVal?t.filterState.filterVal:t.defaultValue??""}}componentDidMount(){const{onFilter:t,getFilter:e,column:r}=this.props,n=this.input.value;n&&t(this.props.column,u.FILTER_TYPES.TEXT,!0)(n),e&&e(e=>{this.setState(()=>({value:e})),t(r,u.FILTER_TYPES.TEXT)(e)})}componentWillUnmount(){this.cleanTimer()}componentDidUpdate(t){if(t.defaultValue!==this.props.defaultValue){const t=this.props.defaultValue??"";this.setState({value:t},()=>{this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(t)})}}filter(t){t.stopPropagation(),this.cleanTimer();const e=t.target.value;this.setState(()=>({value:e})),this.timeout=setTimeout(()=>{this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(e)},this.props.delay)}cleanTimer(){this.timeout&&clearTimeout(this.timeout)}cleanFiltered(){const t=this.props.defaultValue??"";this.setState(()=>({value:t})),this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(t)}applyFilter(t){const e=t??"";this.setState(()=>({value:e})),this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(e)}handleClick(t){t.stopPropagation(),this.props.onClick&&this.props.onClick(t)}render(){const{id:t=null,placeholder:e,column:{dataField:r,text:n},style:o,className:a,onFilter:i,caseSensitive:u=!1,defaultValue:c="",getFilter:s,filterState:f={},...p}=this.props,d=`text-filter-column-${r}${t?`-${t}`:""}`;return l.default.createElement("label",{className:"filter-label",htmlFor:d},l.default.createElement("span",{className:"sr-only"},"Filter by ",n),l.default.createElement("input",{...p,ref:t=>this.input=t,type:"text",id:d,className:`filter text-filter form-control ${a}`,style:o,onChange:this.filter,onClick:this.handleClick,placeholder:e||`Enter ${n}...`,value:this.state.value,"data-testid":"text-filter"}))}}e.default=c},556(t,e,r){t.exports=r(694)()},558(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}var o=["id","style","className","filterState","defaultValue","onFilter","column","options","comparator","withoutEmptyOption","caseSensitive","getFilter"];function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function i(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?a(Object(r),!0).forEach(function(e){l(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function l(t,e,r){return(e=c(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function u(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,c(n.key),n)}}function c(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function s(t,e,r){return e=p(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,f()?Reflect.construct(e,r||[],p(t).constructor):e.apply(t,r))}function f(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(f=function(){return!!t})()}function p(t){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},p(t)}function d(t,e){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},d(t,e)}var m,h=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},y=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},b=(m=function(t){return m=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},m(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=m(t),n=0;n<r.length;n++)"default"!==r[n]&&h(e,t,r[n]);return y(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var v=b(r(442)),E=r(355),g=function(t){if(t&&t.selectedOptions)return Array.from(t.selectedOptions).map(function(t){return t.value});if(t&&Array.isArray(t.value))return t.value;for(var e=[],r=t&&t.options?t.options.length:0,n=0;n<r;n+=1){var o=t.options[n];o&&o.selected&&e.push(o.value)}return e},O=function(t){function e(t){var r,n;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(n=s(this,e,[t])).filter=n.filter.bind(n),n.applyFilter=n.applyFilter.bind(n);var o=(null!==(r=t.defaultValue)&&void 0!==r?r:[]).map(function(e){return t.options[e]}).length>0;return n.state={isSelected:o},n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&d(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props.getFilter,r=g(this.selectInput);r&&r.length>0&&this.applyFilter(r),e&&e(function(e){t.selectInput.value=e,t.applyFilter(e)})}},{key:"componentDidUpdate",value:function(t){var e=!1;this.props.defaultValue!==t.defaultValue?e=!0:function(t,e){for(var r=Object.keys(t),n=0;n<r.length;n+=1)if(t[r[n]]!==e[r[n]])return!1;return Object.keys(t).length===Object.keys(e).length}(this.props.options,t.options)||(e=!0),e&&this.applyFilter(g(this.selectInput))}},{key:"getDefaultValue",value:function(){var t=this.props,e=t.filterState,r=void 0===e?{}:e,n=t.defaultValue,o=void 0===n?[]:n;return r&&void 0!==r.filterVal?r.filterVal:o}},{key:"getOptions",value:function(){var t=[],e=this.props,r=e.options,n=e.placeholder,o=e.column,a=e.withoutEmptyOption,i=void 0!==a&&a,l=e.defaultValue,u=void 0===l?[]:l,c=u&&u.length>0;return i||c||t.push(v.default.createElement("option",{key:"-1",value:"","data-testid":"multiselect-placeholder"},n||"Select ".concat(o.text,"..."))),Object.keys(r).forEach(function(e){return t.push(v.default.createElement("option",{key:e,value:e},r[e]))}),t}},{key:"cleanFiltered",value:function(){var t=void 0!==this.props.defaultValue?this.props.defaultValue:[];this.selectInput.value=t,this.applyFilter(t)}},{key:"applyFilter",value:function(t){1===t.length&&""===t[0]&&(t=[]),this.setState(function(){return{isSelected:t.length>0}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.MULTISELECT)(t)}},{key:"filter",value:function(t){var e=g(t.target);this.applyFilter(e)}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=void 0===r?null:r,a=e.style,l=e.className,u=void 0===l?"":l,c=(e.filterState,e.defaultValue,e.onFilter,e.column),s=(e.options,e.comparator),f=(void 0===s&&E.EQ,e.withoutEmptyOption,e.caseSensitive,e.getFilter,function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(-1!==e.indexOf(n))continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n<a.length;n++)r=a[n],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(e,o)),p="filter select-filter form-control ".concat(u," ").concat(this.state.isSelected?"":"placeholder-selected"),d="multiselect-filter-column-".concat(c.dataField).concat(n?"-".concat(n):"");return v.default.createElement("label",{className:"filter-label",htmlFor:d},v.default.createElement("span",{className:"sr-only"},"Filter by ",c.text),v.default.createElement("select",i(i({},f),{},{ref:function(e){return t.selectInput=e},id:d,style:a,multiple:!0,className:p,onChange:this.filter,onClick:function(t){return t.stopPropagation()},defaultValue:this.getDefaultValue(),"data-testid":"multiselect-filter"}),this.getOptions()))}}],n&&u(r.prototype,n),a&&u(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(v.Component);e.default=O},599(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.filters=e.filterFactory=e.filterByArray=e.filterByDate=e.filterByNumber=e.filterByText=void 0;const n=r(355);e.filterByText=t=>(e,r,{filterVal:o="",comparator:a=n.LIKE,caseSensitive:i},l)=>{const u=o.toString();return e.filter(e=>{let o=t.get(e,r);l&&(o=l(o,e));const c=t.isDefined(o)?o.toString():"";return a===n.EQ?c===u:i?c.includes(u):-1!==c.toLocaleUpperCase().indexOf(u.toLocaleUpperCase())})},e.filterByNumber=t=>(e,r,{filterVal:{comparator:o,number:a}},i)=>e.filter(e=>{if(""===a||!o)return!0;let l=t.get(e,r);switch(i&&(l=i(l,e)),o){case n.EQ:return l==a;case n.GT:return l>a;case n.GE:return l>=a;case n.LT:return l<a;case n.LE:return l<=a;case n.NE:return l!=a;default:return console.error("Number comparator provided is not supported"),!0}}),e.filterByDate=t=>(e,r,{filterVal:{comparator:o,date:a}},i)=>{if(!a||!o)return e;const l=a.getUTCDate(),u=a.getUTCMonth(),c=a.getUTCFullYear();return e.filter(e=>{let s=!0,f=t.get(e,r);i&&(f=i(f,e)),"object"!=typeof f&&(f=new Date(f));const p=f.getUTCDate(),d=f.getUTCMonth(),m=f.getUTCFullYear();switch(o){case n.EQ:l===p&&u===d&&c===m||(s=!1);break;case n.GT:f<=a&&(s=!1);break;case n.GE:(m<c||m===c&&d<u||m===c&&d===u&&p<l)&&(s=!1);break;case n.LT:f>=a&&(s=!1);break;case n.LE:(m>c||m===c&&d>u||m===c&&d===u&&p>l)&&(s=!1);break;case n.NE:l===p&&u===d&&c===m&&(s=!1);break;default:console.error("Date comparator provided is not supported")}return s})},e.filterByArray=t=>(e,r,{filterVal:o,comparator:a})=>{if(0===o.length)return e;const i=o.filter(e=>t.isDefined(e)).map(t=>t.toString());return e.filter(e=>{const o=t.get(e,r);let l=t.isDefined(o)?o.toString():"";return a===n.EQ?-1!==i.indexOf(l):(l=l.toLocaleUpperCase(),i.some(t=>-1!==l.indexOf(t.toLocaleUpperCase())))})},e.filterFactory=t=>r=>{switch(r){case n.FILTER_TYPES.MULTISELECT:return(0,e.filterByArray)(t);case n.FILTER_TYPES.NUMBER:return(0,e.filterByNumber)(t);case n.FILTER_TYPES.DATE:return(0,e.filterByDate)(t);case n.FILTER_TYPES.TEXT:case n.FILTER_TYPES.SELECT:default:return(0,e.filterByText)(t)}},e.filters=(t,r,n)=>(o,a={})=>{const i=(0,e.filterFactory)(n),l={...a,...o};let u,c=t;return Object.keys(l).forEach(t=>{let e,n,o;r=r??[];for(let e=0;e<r.length;e+=1)if(r[e].dataField===t){n=r[e].filterValue,r[e].filter&&(o=r[e].filter.props.onFilter);break}if(a[t]&&o)e=o(a[t].filterVal,c),void 0!==e&&(c=e);else{const r=l[t];u=i(r.filterType),o&&(e=o(r.filterVal,c)),c=void 0===e?u(c,t,r,n):e}}),c}},610(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const o=n(r(556)),a=n(r(442)),i=r(355),l=r(599);e.default=(t,e,r)=>{const n=a.default.createContext({});class u extends a.default.Component{constructor(t){super(t),this.currFilters={},this.clearFilters={},this.onFilter=this.onFilter.bind(this),this.doFilter=this.doFilter.bind(this),this.onExternalFilter=this.onExternalFilter.bind(this),this.data=t.data,this.isEmitDataChange=!1}componentDidMount(){e()&&Object.keys(this.currFilters).length>0&&r(this.currFilters)}onFilter(n,o,a=!1){return l=>{const u=Object.assign({},this.currFilters);this.clearFilters={};const{dataField:c,filter:s}=n;if(t.isDefined(l)&&""!==l&&0!==l.length){const{comparator:t=(o===i.FILTER_TYPES.SELECT?i.EQ:i.LIKE),caseSensitive:e=!1}=s.props;u[c]={filterVal:l,filterType:o,comparator:t,caseSensitive:e}}else delete u[c],this.clearFilters={[c]:{clear:!0,filterVal:l}};if(this.currFilters=u,e())return a||r(this.currFilters),void this.forceUpdate();this.doFilter(this.props)}}onExternalFilter(t,e){return r=>{this.onFilter(t,e)(r)}}getFiltered(){return this.data}shouldComponentUpdate(r,n,o){return e()||t.isEqual(r.data,this.data)?this.data=r.data:this.doFilter(r,this.isEmitDataChange),!0}doFilter(e,r=!1){const{dataChangeListener:n,data:o,columns:a,filter:i}=e,u=(0,l.filters)(o,a,t)(this.currFilters,this.clearFilters);i.afterFilter&&i.afterFilter(u,this.currFilters),this.data=u,n&&!r?(this.isEmitDataChange=!0,n.emit("filterChanged",u.length)):(this.isEmitDataChange=!1,this.forceUpdate())}render(){return a.default.createElement(n.Provider,{value:{data:this.data,onFilter:this.onFilter,onExternalFilter:this.onExternalFilter,currFilters:this.currFilters}},this.props.children)}}return u.propTypes={data:o.default.array.isRequired,columns:o.default.array.isRequired,dataChangeListener:o.default.object},{Provider:u,Consumer:n.Consumer}}},652(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}var o=["id","placeholder","column","style","className","onFilter","caseSensitive","defaultValue","getFilter","filterState"];function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function i(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?a(Object(r),!0).forEach(function(e){l(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function l(t,e,r){return(e=c(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function u(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,c(n.key),n)}}function c(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function s(t,e,r){return e=p(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,f()?Reflect.construct(e,r||[],p(t).constructor):e.apply(t,r))}function f(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(f=function(){return!!t})()}function p(t){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},p(t)}function d(t,e){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},d(t,e)}var m,h=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},y=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},b=(m=function(t){return m=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},m(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=m(t),n=0;n<r.length;n++)"default"!==r[n]&&h(e,t,r[n]);return y(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var v=b(r(442)),E=r(355),g=function(t){function e(t){var r,n;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(r=s(this,e,[t])).filter=r.filter.bind(r),r.handleClick=r.handleClick.bind(r),r.timeout=null,r.input={},r.state={value:t.filterState&&void 0!==t.filterState.filterVal?t.filterState.filterVal:null!==(n=t.defaultValue)&&void 0!==n?n:""},r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&d(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props,r=e.onFilter,n=e.getFilter,o=e.column,a=this.input.value;a&&r(this.props.column,E.FILTER_TYPES.TEXT,!0)(a),n&&n(function(e){t.setState(function(){return{value:e}}),r(o,E.FILTER_TYPES.TEXT)(e)})}},{key:"componentWillUnmount",value:function(){this.cleanTimer()}},{key:"componentDidUpdate",value:function(t){var e=this;if(t.defaultValue!==this.props.defaultValue){var r,n=null!==(r=this.props.defaultValue)&&void 0!==r?r:"";this.setState({value:n},function(){e.props.onFilter(e.props.column,E.FILTER_TYPES.TEXT)(n)})}}},{key:"filter",value:function(t){var e=this;t.stopPropagation(),this.cleanTimer();var r=t.target.value;this.setState(function(){return{value:r}}),this.timeout=setTimeout(function(){e.props.onFilter(e.props.column,E.FILTER_TYPES.TEXT)(r)},this.props.delay)}},{key:"cleanTimer",value:function(){this.timeout&&clearTimeout(this.timeout)}},{key:"cleanFiltered",value:function(){var t,e=null!==(t=this.props.defaultValue)&&void 0!==t?t:"";this.setState(function(){return{value:e}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.TEXT)(e)}},{key:"applyFilter",value:function(t){var e=null!=t?t:"";this.setState(function(){return{value:e}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.TEXT)(e)}},{key:"handleClick",value:function(t){t.stopPropagation(),this.props.onClick&&this.props.onClick(t)}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=void 0===r?null:r,a=e.placeholder,l=e.column,u=l.dataField,c=l.text,s=e.style,f=e.className,p=(e.onFilter,e.caseSensitive,e.defaultValue,e.getFilter,e.filterState,function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(-1!==e.indexOf(n))continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n<a.length;n++)r=a[n],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(e,o)),d="text-filter-column-".concat(u).concat(n?"-".concat(n):"");return v.default.createElement("label",{className:"filter-label",htmlFor:d},v.default.createElement("span",{className:"sr-only"},"Filter by ",c),v.default.createElement("input",i(i({},p),{},{ref:function(e){return t.input=e},type:"text",id:d,className:"filter text-filter form-control ".concat(f),style:s,onChange:this.filter,onClick:this.handleClick,placeholder:a||"Enter ".concat(c,"..."),value:this.state.value,"data-testid":"text-filter"})))}}],n&&u(r.prototype,n),a&&u(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(v.Component);e.default=g},659(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function i(t,e,r){return e=u(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,l()?Reflect.construct(e,r||[],u(t).constructor):e.apply(t,r))}function l(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(l=function(){return!!t})()}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function c(t,e){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},c(t,e)}var s,f=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},p=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},d=(s=function(t){return s=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},s(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=s(t),n=0;n<r.length;n++)"default"!==r[n]&&f(e,t,r[n]);return p(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var m=d(r(442)),h=r(355),y=["=","!=",">",">=","<","<="];function b(t){return"".concat(t.getUTCFullYear(),"-").concat(("0"+(t.getUTCMonth()+1)).slice(-2),"-").concat(("0"+t.getUTCDate()).slice(-2))}var v=function(t){function e(t){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(r=i(this,e,[t])).timeout=null,r.comparators=t.comparators||y,r.applyFilter=r.applyFilter.bind(r),r.onChangeDate=r.onChangeDate.bind(r),r.onChangeComparator=r.onChangeComparator.bind(r),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&c(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props.getFilter,r=this.dateFilterComparator.value,n=this.inputDate.value;r&&n&&this.applyFilter(n,r,!0),e&&e(function(e){var r=e||{date:null,comparator:null};t.dateFilterComparator.value=r.comparator,t.inputDate.value=r.date?b(r.date):null,t.applyFilter(r.date,r.comparator)})}},{key:"componentWillUnmount",value:function(){this.timeout&&clearTimeout(this.timeout)}},{key:"onChangeDate",value:function(t){var e=this.dateFilterComparator.value,r=t.target.value;this.applyFilter(r,e)}},{key:"onChangeComparator",value:function(t){var e=this.inputDate.value,r=t.target.value;this.applyFilter(e,r)}},{key:"getComparatorOptions",value:function(){var t=[],e=this.props.withoutEmptyComparatorOption;void 0!==e&&e||t.push(m.default.createElement("option",{key:"-1"}));for(var r=0;r<this.comparators.length;r+=1)t.push(m.default.createElement("option",{key:r,value:this.comparators[r]},this.comparators[r]));return t}},{key:"getDefaultComparator",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{date:void 0,comparator:""}:e,n=t.filterState,o=void 0===n?{}:n;return o&&o.filterVal?o.filterVal.comparator:r&&r.comparator?r.comparator:""}},{key:"getDefaultDate",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{date:void 0,comparator:""}:e,n=t.filterState,o=void 0===n?{}:n;return o&&o.filterVal&&o.filterVal.date?b(o.filterVal.date):r&&r.date?b(new Date(r.date)):""}},{key:"applyFilter",value:function(t,e,r){var n=this.props,o=n.column,a=n.onFilter,i=n.delay,l=void 0===i?0:i,u=function(){var n=""===t?null:new Date(t);a(o,h.FILTER_TYPES.DATE,r)({date:n,comparator:e})};l?this.timeout=setTimeout(function(){u()},l):u()}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=void 0===r?null:r,o=e.placeholder,a=e.column,i=a.dataField,l=a.text,u=e.style,c=e.comparatorStyle,s=e.dateStyle,f=e.className,p=void 0===f?"":f,d=e.comparatorClassName,h=void 0===d?"":d,y=e.dateClassName,b=void 0===y?"":y,v="date-filter-comparator-".concat(i).concat(n?"-".concat(n):""),E="date-filter-column-".concat(i).concat(n?"-".concat(n):"");return m.default.createElement("div",{onClick:function(t){return t.stopPropagation()},className:"filter date-filter ".concat(p),style:u,"data-testid":"date-filter"},m.default.createElement("label",{className:"filter-label",htmlFor:v},m.default.createElement("span",{className:"sr-only"},"Filter comparator"),m.default.createElement("select",{ref:function(e){return t.dateFilterComparator=e},id:v,style:c,className:"date-filter-comparator form-control ".concat(h),onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"date-filter-comparator"},this.getComparatorOptions())),m.default.createElement("label",{htmlFor:E},m.default.createElement("span",{className:"sr-only"},"Enter $",l),m.default.createElement("input",{ref:function(e){return t.inputDate=e},id:E,className:"filter date-filter-input form-control ".concat(b),style:s,type:"date",onChange:this.onChangeDate,placeholder:o||"Enter ".concat(l,"..."),defaultValue:this.getDefaultDate(),"data-testid":"date-filter-input"})))}}],n&&o(r.prototype,n),a&&o(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(m.Component);e.default=v},684(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.customFilter=e.dateFilter=e.numberFilter=e.multiSelectFilter=e.selectFilter=e.textFilter=e.ComparatorNumber=e.LE=e.LT=e.GE=e.GT=e.NE=e.EQ=e.LIKE=e.FILTER_DELAY=e.FILTER_TYPES=void 0;const o=n(r(696)),a=n(r(321)),i=n(r(851)),l=n(r(388)),u=n(r(461)),c=n(r(610));var s;!function(t){t.TEXT="TEXT",t.SELECT="SELECT",t.MULTISELECT="MULTISELECT",t.NUMBER="NUMBER",t.DATE="DATE"}(s||(e.FILTER_TYPES=s={})),e.FILTER_DELAY=500,e.LIKE="LIKE",e.EQ="=",e.NE="!=",e.GT=">",e.GE=">=",e.LT="<",e.LE="<=",e.ComparatorNumber=7,e.textFilter=(t={})=>({Filter:u.default,props:t}),e.selectFilter=(t={})=>({Filter:l.default,props:t}),e.multiSelectFilter=(t={})=>({Filter:a.default,props:t}),e.numberFilter=(t={})=>({Filter:i.default,props:t}),e.dateFilter=(t={})=>({Filter:o.default,props:t}),e.customFilter=(t={})=>({Filter:()=>{},props:t}),e.default=(t={})=>({createContext:c.default,options:t})},694(t,e,r){"use strict";var n=r(925);function o(){}function a(){}a.resetWarningCache=o,t.exports=function(){function t(t,e,r,o,a,i){if(i!==n){var l=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 l.name="Invariant Violation",l}}function e(){return t}t.isRequired=t;var r={array:t,bigint:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:e,element:t,elementType:t,instanceOf:e,node:t,objectOf:e,oneOf:e,oneOfType:e,shape:e,exact:e,checkPropTypes:a,resetWarningCache:o};return r.PropTypes=r,r}},696(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355),c=["=","!=",">",">=","<","<="];function s(t){return`${t.getUTCFullYear()}-${("0"+(t.getUTCMonth()+1)).slice(-2)}-${("0"+t.getUTCDate()).slice(-2)}`}class f extends l.Component{constructor(t){super(t),this.timeout=null,this.comparators=t.comparators||c,this.applyFilter=this.applyFilter.bind(this),this.onChangeDate=this.onChangeDate.bind(this),this.onChangeComparator=this.onChangeComparator.bind(this)}componentDidMount(){const{getFilter:t}=this.props,e=this.dateFilterComparator.value,r=this.inputDate.value;e&&r&&this.applyFilter(r,e,!0),t&&t(t=>{const e=t||{date:null,comparator:null};this.dateFilterComparator.value=e.comparator,this.inputDate.value=e.date?s(e.date):null,this.applyFilter(e.date,e.comparator)})}componentWillUnmount(){this.timeout&&clearTimeout(this.timeout)}onChangeDate(t){const e=this.dateFilterComparator.value,r=t.target.value;this.applyFilter(r,e)}onChangeComparator(t){const e=this.inputDate.value,r=t.target.value;this.applyFilter(e,r)}getComparatorOptions(){const t=[],{withoutEmptyComparatorOption:e=!1}=this.props;e||t.push(l.default.createElement("option",{key:"-1"}));for(let e=0;e<this.comparators.length;e+=1)t.push(l.default.createElement("option",{key:e,value:this.comparators[e]},this.comparators[e]));return t}getDefaultComparator(){const{defaultValue:t={date:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal?e.filterVal.comparator:t&&t.comparator?t.comparator:""}getDefaultDate(){const{defaultValue:t={date:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal&&e.filterVal.date?s(e.filterVal.date):t&&t.date?s(new Date(t.date)):""}applyFilter(t,e,r){const{column:n,onFilter:o,delay:a=0}=this.props,i=()=>{const a=""===t?null:new Date(t);o(n,u.FILTER_TYPES.DATE,r)({date:a,comparator:e})};a?this.timeout=setTimeout(()=>{i()},a):i()}render(){const{id:t=null,placeholder:e,column:{dataField:r,text:n},style:o,comparatorStyle:a,dateStyle:i,className:u="",comparatorClassName:c="",dateClassName:s=""}=this.props,f=`date-filter-comparator-${r}${t?`-${t}`:""}`,p=`date-filter-column-${r}${t?`-${t}`:""}`;return l.default.createElement("div",{onClick:t=>t.stopPropagation(),className:`filter date-filter ${u}`,style:o,"data-testid":"date-filter"},l.default.createElement("label",{className:"filter-label",htmlFor:f},l.default.createElement("span",{className:"sr-only"},"Filter comparator"),l.default.createElement("select",{ref:t=>this.dateFilterComparator=t,id:f,style:a,className:`date-filter-comparator form-control ${c}`,onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"date-filter-comparator"},this.getComparatorOptions())),l.default.createElement("label",{htmlFor:p},l.default.createElement("span",{className:"sr-only"},"Enter $",n),l.default.createElement("input",{ref:t=>this.inputDate=t,id:p,className:`filter date-filter-input form-control ${s}`,style:i,type:"date",onChange:this.onChangeDate,placeholder:e||`Enter ${n}...`,defaultValue:this.getDefaultDate(),"data-testid":"date-filter-input"})))}}e.default=f},834(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function i(t,e,r){return e=u(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,l()?Reflect.construct(e,r||[],u(t).constructor):e.apply(t,r))}function l(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(l=function(){return!!t})()}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function c(t,e){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},c(t,e)}var s,f=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},p=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},d=(s=function(t){return s=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},s(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=s(t),n=0;n<r.length;n++)"default"!==r[n]&&f(e,t,r[n]);return p(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var m=d(r(442)),h=r(355),y=["=","!=",">",">=","<","<="],b=function(t){function e(t){var r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(r=i(this,e,[t])).comparators=t.comparators||y,r.timeout=null;var n=void 0!==t.defaultValue&&void 0!==t.defaultValue.number;return t.options&&n&&(n=t.options.indexOf(t.defaultValue.number)>-1),r.state={isSelected:n},r.onChangeNumber=r.onChangeNumber.bind(r),r.onChangeNumberSet=r.onChangeNumberSet.bind(r),r.onChangeComparator=r.onChangeComparator.bind(r),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&c(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props,r=e.column,n=e.onFilter,o=e.getFilter,a=""===this.numberFilterComparator.value?"=":this.numberFilterComparator.value,i=this.numberFilter.value;a&&i&&n(r,h.FILTER_TYPES.NUMBER,!0)({number:i,comparator:a}),o&&o(function(e){t.setState(function(){return{isSelected:""!==e}}),t.numberFilterComparator.value=e.comparator,t.numberFilter.value=e.number;var o=e.number,a=e.comparator;n(r,h.FILTER_TYPES.NUMBER)({number:o,comparator:a})})}},{key:"componentWillUnmount",value:function(){clearTimeout(this.timeout)}},{key:"onChangeNumber",value:function(t){var e=this.props,r=e.delay,n=void 0===r?h.FILTER_DELAY:r,o=e.column,a=e.onFilter,i=this.numberFilterComparator.value;if(""!==i){this.timeout&&clearTimeout(this.timeout);var l=t.target.value;this.timeout=setTimeout(function(){a(o,h.FILTER_TYPES.NUMBER)({number:l,comparator:i})},n)}}},{key:"onChangeNumberSet",value:function(t){var e=this.props,r=e.column,n=e.onFilter,o=this.numberFilterComparator.value,a=t.target.value;this.setState(function(){return{isSelected:""!==a}}),n(r,h.FILTER_TYPES.NUMBER)({number:a,comparator:o})}},{key:"onChangeComparator",value:function(t){var e=this.props,r=e.column,n=e.onFilter,o=this.numberFilter.value,a=t.target.value;n(r,h.FILTER_TYPES.NUMBER)({number:o,comparator:a})}},{key:"getDefaultComparator",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{number:void 0,comparator:""}:e,n=t.filterState,o=void 0===n?{}:n;return o&&o.filterVal?o.filterVal.comparator:r&&r.comparator?r.comparator:""}},{key:"getDefaultValue",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{number:void 0,comparator:""}:e,n=t.filterState,o=void 0===n?{}:n;return o&&o.filterVal?o.filterVal.number:r&&r.number?r.number:""}},{key:"getComparatorOptions",value:function(){var t=[],e=this.props.withoutEmptyComparatorOption;void 0!==e&&e||t.push(m.default.createElement("option",{key:"-1"}));for(var r=0;r<this.comparators.length;r+=1)t.push(m.default.createElement("option",{key:r,value:this.comparators[r]},this.comparators[r]));return t}},{key:"getNumberOptions",value:function(){var t=[],e=this.props,r=e.options,n=e.column,o=e.withoutEmptyNumberOption;void 0!==o&&o||t.push(m.default.createElement("option",{key:"-1",value:""},this.props.placeholder||"Select ".concat(n.text,"...")));for(var a=0;a<r.length;a+=1)t.push(m.default.createElement("option",{key:a,value:r[a]},r[a]));return t}},{key:"applyFilter",value:function(t){var e=this.props,r=e.column,n=e.onFilter,o=t.number,a=t.comparator;this.setState(function(){return{isSelected:""!==o}}),this.numberFilterComparator.value=a,this.numberFilter.value=o,n(r,h.FILTER_TYPES.NUMBER)({number:o,comparator:a})}},{key:"cleanFiltered",value:function(){var t=this.props,e=t.column,r=t.onFilter,n=t.defaultValue,o=void 0===n?{number:void 0,comparator:""}:n,a=o?o.number:"",i=o?o.comparator:"";this.setState(function(){return{isSelected:""!==a}}),this.numberFilterComparator.value=i,this.numberFilter.value=a,r(e,h.FILTER_TYPES.NUMBER)({number:a,comparator:i})}},{key:"render",value:function(){var t=this,e=this.state.isSelected,r=this.props,n=r.id,o=void 0===n?null:n,a=r.column,i=r.options,l=r.style,u=r.className,c=void 0===u?"":u,s=r.numberStyle,f=r.numberClassName,p=void 0===f?"":f,d=r.comparatorStyle,h=r.comparatorClassName,y=void 0===h?"":h,b=r.placeholder,v="\n select-filter\n number-filter-input\n form-control\n ".concat(p,"\n ").concat(e?"":"placeholder-selected","\n "),E="number-filter-comparator-".concat(a.dataField).concat(o?"-".concat(o):""),g="number-filter-column-".concat(a.dataField).concat(o?"-".concat(o):"");return m.default.createElement("div",{onClick:function(t){return t.stopPropagation()},className:"filter number-filter ".concat(c),style:l,"data-testid":"number-filter"},m.default.createElement("label",{className:"filter-label",htmlFor:E},m.default.createElement("span",{className:"sr-only"},"Filter comparator"),m.default.createElement("select",{ref:function(e){return t.numberFilterComparator=e},style:d,id:E,className:"number-filter-comparator form-control ".concat(y),onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"number-filter-comparator"},this.getComparatorOptions())),i?m.default.createElement("label",{className:"filter-label",htmlFor:g},m.default.createElement("span",{className:"sr-only"},"Select ".concat(a.text)),m.default.createElement("select",{ref:function(e){return t.numberFilter=e},id:g,style:s,className:v,onChange:this.onChangeNumberSet,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-select"},this.getNumberOptions())):m.default.createElement("label",{htmlFor:g},m.default.createElement("span",{className:"sr-only"},"Enter ".concat(a.text)),m.default.createElement("input",{ref:function(e){return t.numberFilter=e},id:g,type:"number",style:s,className:"number-filter-input form-control ".concat(p),placeholder:b||"Enter ".concat(a.text,"..."),onChange:this.onChangeNumber,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-input"})))}}],n&&o(r.prototype,n),a&&o(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(m.Component);e.default=b},851(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355),c=["=","!=",">",">=","<","<="];class s extends l.Component{constructor(t){super(t),this.comparators=t.comparators||c,this.timeout=null;let e=void 0!==t.defaultValue&&void 0!==t.defaultValue.number;t.options&&e&&(e=t.options.indexOf(t.defaultValue.number)>-1),this.state={isSelected:e},this.onChangeNumber=this.onChangeNumber.bind(this),this.onChangeNumberSet=this.onChangeNumberSet.bind(this),this.onChangeComparator=this.onChangeComparator.bind(this)}componentDidMount(){const{column:t,onFilter:e,getFilter:r}=this.props,n=""===this.numberFilterComparator.value?"=":this.numberFilterComparator.value,o=this.numberFilter.value;n&&o&&e(t,u.FILTER_TYPES.NUMBER,!0)({number:o,comparator:n}),r&&r(r=>{this.setState(()=>({isSelected:""!==r})),this.numberFilterComparator.value=r.comparator,this.numberFilter.value=r.number;const n=r.number,o=r.comparator;e(t,u.FILTER_TYPES.NUMBER)({number:n,comparator:o})})}componentWillUnmount(){clearTimeout(this.timeout)}onChangeNumber(t){const{delay:e=u.FILTER_DELAY,column:r,onFilter:n}=this.props,o=this.numberFilterComparator.value;if(""===o)return;this.timeout&&clearTimeout(this.timeout);const a=t.target.value;this.timeout=setTimeout(()=>{n(r,u.FILTER_TYPES.NUMBER)({number:a,comparator:o})},e)}onChangeNumberSet(t){const{column:e,onFilter:r}=this.props,n=this.numberFilterComparator.value,{value:o}=t.target;this.setState(()=>({isSelected:""!==o})),r(e,u.FILTER_TYPES.NUMBER)({number:o,comparator:n})}onChangeComparator(t){const{column:e,onFilter:r}=this.props,n=this.numberFilter.value,o=t.target.value;r(e,u.FILTER_TYPES.NUMBER)({number:n,comparator:o})}getDefaultComparator(){const{defaultValue:t={number:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal?e.filterVal.comparator:t&&t.comparator?t.comparator:""}getDefaultValue(){const{defaultValue:t={number:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal?e.filterVal.number:t&&t.number?t.number:""}getComparatorOptions(){const t=[],{withoutEmptyComparatorOption:e=!1}=this.props;e||t.push(l.default.createElement("option",{key:"-1"}));for(let e=0;e<this.comparators.length;e+=1)t.push(l.default.createElement("option",{key:e,value:this.comparators[e]},this.comparators[e]));return t}getNumberOptions(){const t=[],{options:e,column:r,withoutEmptyNumberOption:n=!1}=this.props;n||t.push(l.default.createElement("option",{key:"-1",value:""},this.props.placeholder||`Select ${r.text}...`));for(let r=0;r<e.length;r+=1)t.push(l.default.createElement("option",{key:r,value:e[r]},e[r]));return t}applyFilter(t){const{column:e,onFilter:r}=this.props,{number:n,comparator:o}=t;this.setState(()=>({isSelected:""!==n})),this.numberFilterComparator.value=o,this.numberFilter.value=n,r(e,u.FILTER_TYPES.NUMBER)({number:n,comparator:o})}cleanFiltered(){const{column:t,onFilter:e,defaultValue:r={number:void 0,comparator:""}}=this.props,n=r?r.number:"",o=r?r.comparator:"";this.setState(()=>({isSelected:""!==n})),this.numberFilterComparator.value=o,this.numberFilter.value=n,e(t,u.FILTER_TYPES.NUMBER)({number:n,comparator:o})}render(){const{isSelected:t}=this.state,{id:e=null,column:r,options:n,style:o,className:a="",numberStyle:i,numberClassName:u="",comparatorStyle:c,comparatorClassName:s="",placeholder:f}=this.props,p=`\n select-filter\n number-filter-input\n form-control\n ${u}\n ${t?"":"placeholder-selected"}\n `,d=`number-filter-comparator-${r.dataField}${e?`-${e}`:""}`,m=`number-filter-column-${r.dataField}${e?`-${e}`:""}`;return l.default.createElement("div",{onClick:t=>t.stopPropagation(),className:`filter number-filter ${a}`,style:o,"data-testid":"number-filter"},l.default.createElement("label",{className:"filter-label",htmlFor:d},l.default.createElement("span",{className:"sr-only"},"Filter comparator"),l.default.createElement("select",{ref:t=>this.numberFilterComparator=t,style:c,id:d,className:`number-filter-comparator form-control ${s}`,onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"number-filter-comparator"},this.getComparatorOptions())),n?l.default.createElement("label",{className:"filter-label",htmlFor:m},l.default.createElement("span",{className:"sr-only"},`Select ${r.text}`),l.default.createElement("select",{ref:t=>this.numberFilter=t,id:m,style:i,className:p,onChange:this.onChangeNumberSet,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-select"},this.getNumberOptions())):l.default.createElement("label",{htmlFor:m},l.default.createElement("span",{className:"sr-only"},`Enter ${r.text}`),l.default.createElement("input",{ref:t=>this.numberFilter=t,id:m,type:"number",style:i,className:`number-filter-input form-control ${u}`,placeholder:f||`Enter ${r.text}...`,onChange:this.onChangeNumber,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-input"})))}}e.default=s},925(t){"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"}},r={},function t(n){var o=r[n];if(void 0!==o)return o.exports;var a=r[n]={exports:{}};return e[n].call(a.exports,a,a.exports,t),a.exports}(684);var e,r});
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIuanMiLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsVUFDUixtQkFBWEMsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLENBQUMsU0FBVUosR0FDUSxpQkFBWkMsUUFDZEEsUUFBcUMsNEJBQUlELEVBQVFHLFFBQVEsVUFFekRKLEVBQWtDLDRCQUFJQyxFQUFRRCxFQUFZLE1BQzNELENBVEQsQ0FTR08sS0FBT0MsSUFDVixPLDBCQ1JBLFNBQVNDLEVBQVFDLEdBQWdDLE9BQU9ELEVBQVUsbUJBQXFCRSxRQUFVLGlCQUFtQkEsT0FBT0MsU0FBVyxTQUFVRixHQUFLLGNBQWNBLENBQUcsRUFBSSxTQUFVQSxHQUFLLE9BQU9BLEdBQUssbUJBQXFCQyxRQUFVRCxFQUFFRyxjQUFnQkYsUUFBVUQsSUFBTUMsT0FBT0csVUFBWSxnQkFBa0JKLENBQUcsRUFBR0QsRUFBUUMsRUFBSSxDQUc3VCxTQUFTSyxFQUFrQkMsRUFBR0MsR0FBSyxJQUFLLElBQUlDLEVBQUksRUFBR0EsRUFBSUQsRUFBRUUsT0FBUUQsSUFBSyxDQUFFLElBQUlSLEVBQUlPLEVBQUVDLEdBQUlSLEVBQUVVLFdBQWFWLEVBQUVVLGFBQWMsRUFBSVYsRUFBRVcsY0FBZSxFQUFJLFVBQVdYLElBQU1BLEVBQUVZLFVBQVcsR0FBS0MsT0FBT0MsZUFBZVIsRUFBR1MsRUFBZWYsRUFBRWdCLEtBQU1oQixFQUFJLENBQUUsQ0FFdk8sU0FBU2UsRUFBZVAsR0FBSyxJQUFJUyxFQUNqQyxTQUFzQlQsRUFBR0QsR0FBSyxHQUFJLFVBQVlSLEVBQVFTLEtBQU9BLEVBQUcsT0FBT0EsRUFBRyxJQUFJRixFQUFJRSxFQUFFUCxPQUFPaUIsYUFBYyxRQUFTLElBQU1aLEVBQUcsQ0FBRSxJQUFJ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LFFBR3JCLElBQUlDLEVBQVMyWSxFQUF5QkUsR0FBWSxDQUdqRDlZLFFBQVMsQ0FBQyxHQU9YLE9BSEFnWixFQUFvQkYsR0FBVW5YLEtBQUsxQixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTNlksR0FHcEU1WSxFQUFPRCxPQUNmLENDbkIwQjZZLENBQW9CLEssTURGMUNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL2xpYi9zcmMvY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL2xpYi9zcmMvY29tcG9uZW50cy9zZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9saWIvc3JjL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL3NyYy9jb21wb25lbnRzL211bHRpc2VsZWN0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL3NyYy9jb21wb25lbnRzL3NlbGVjdC50c3giLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvc3JjL2NvbXBvbmVudHMvdGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9saWIvc3JjL2NvbXBvbmVudHMvbXVsdGlzZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9zcmMvZmlsdGVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvc3JjL2NvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvbGliL3NyYy9jb21wb25lbnRzL3RleHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9saWIvc3JjL2NvbXBvbmVudHMvZGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL2luZGV4LnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL3NyYy9jb21wb25lbnRzL2RhdGUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvbGliL3NyYy9jb21wb25lbnRzL251bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL3NyYy9jb21wb25lbnRzL251bWJlci50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ0ZpbHRlclwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdGaWx0ZXJcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSk7XG59KShzZWxmLCAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18pID0+IHtcbnJldHVybiAiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG52YXIgcHJvcF90eXBlc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uXCIpO1xudmFyIGZpbHRlcl8xID0gcmVxdWlyZShcIi4vZmlsdGVyXCIpO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoXywgaXNSZW1vdGVGaWx0ZXJpbmcsIGhhbmRsZUZpbHRlckNoYW5nZSkge1xuICB2YXIgRmlsdGVyQ29udGV4dCA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUNvbnRleHQoe30pO1xuICB2YXIgRmlsdGVyUHJvdmlkZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJGRlZmF1bHQkQ29tcCkge1xuICAgIGZ1bmN0aW9uIEZpbHRlclByb3ZpZGVyKHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmlsdGVyUHJvdmlkZXIpO1xuICAgICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEZpbHRlclByb3ZpZGVyLCBbcHJvcHNdKTtcbiAgICAgIF90aGlzLmN1cnJGaWx0ZXJzID0ge307XG4gICAgICBfdGhpcy5jbGVhckZpbHRlcnMgPSB7fTtcbiAgICAgIF90aGlzLm9uRmlsdGVyID0gX3RoaXMub25GaWx0ZXIuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5kb0ZpbHRlciA9IF90aGlzLmRvRmlsdGVyLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMub25FeHRlcm5hbEZpbHRlciA9IF90aGlzLm9uRXh0ZXJuYWxGaWx0ZXIuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5kYXRhID0gcHJvcHMuZGF0YTtcbiAgICAgIF90aGlzLmlzRW1pdERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2luaGVyaXRzKEZpbHRlclByb3ZpZGVyLCBfcmVhY3RfMSRkZWZhdWx0JENvbXApO1xuICAgIHJldHVybiBfY3JlYXRlQ2xhc3MoRmlsdGVyUHJvdmlkZXIsIFt7XG4gICAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgaWYgKGlzUmVtb3RlRmlsdGVyaW5nKCkgJiYgT2JqZWN0LmtleXModGhpcy5jdXJyRmlsdGVycykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGhhbmRsZUZpbHRlckNoYW5nZSh0aGlzLmN1cnJGaWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvbkZpbHRlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRmlsdGVyKGNvbHVtbiwgZmlsdGVyVHlwZSkge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgICAgdmFyIGluaXRpYWxpemUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZpbHRlclZhbCkge1xuICAgICAgICAgIC8vIHdhdGNoIG91dCBoZXJlIGlmIG1pZ3JhdGlvbiB0byBjb250ZXh0IEFQSSwgIzMzNFxuICAgICAgICAgIHZhciBjdXJyRmlsdGVycyA9IE9iamVjdC5hc3NpZ24oe30sIF90aGlzMi5jdXJyRmlsdGVycyk7XG4gICAgICAgICAgX3RoaXMyLmNsZWFyRmlsdGVycyA9IHt9O1xuICAgICAgICAgIHZhciBkYXRhRmllbGQgPSBjb2x1bW4uZGF0YUZpZWxkLFxuICAgICAgICAgICAgZmlsdGVyID0gY29sdW1uLmZpbHRlcjtcbiAgICAgICAgICB2YXIgbmVlZENsZWFyRmlsdGVycyA9ICFfLmlzRGVmaW5lZChmaWx0ZXJWYWwpIHx8IGZpbHRlclZhbCA9PT0gXCJcIiB8fCBmaWx0ZXJWYWwubGVuZ3RoID09PSAwO1xuICAgICAgICAgIGlmIChuZWVkQ2xlYXJGaWx0ZXJzKSB7XG4gICAgICAgICAgICBkZWxldGUgY3VyckZpbHRlcnNbZGF0YUZpZWxkXTtcbiAgICAgICAgICAgIF90aGlzMi5jbGVhckZpbHRlcnMgPSBfZGVmaW5lUHJvcGVydHkoe30sIGRhdGFGaWVsZCwge1xuICAgICAgICAgICAgICBjbGVhcjogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsdGVyVmFsOiBmaWx0ZXJWYWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzZWxlY3QgZGVmYXVsdCBjb21wYXJhdG9yIGlzIEVRLCBvdGhlcnMgYXJlIExJS0VcbiAgICAgICAgICAgIHZhciBfZmlsdGVyJHByb3BzID0gZmlsdGVyLnByb3BzLFxuICAgICAgICAgICAgICBfZmlsdGVyJHByb3BzJGNvbXBhcmEgPSBfZmlsdGVyJHByb3BzLmNvbXBhcmF0b3IsXG4gICAgICAgICAgICAgIGNvbXBhcmF0b3IgPSBfZmlsdGVyJHByb3BzJGNvbXBhcmEgPT09IHZvaWQgMCA/IGZpbHRlclR5cGUgPT09IF9fMS5GSUxURVJfVFlQRVMuU0VMRUNUID8gX18xLkVRIDogX18xLkxJS0UgOiBfZmlsdGVyJHByb3BzJGNvbXBhcmEsXG4gICAgICAgICAgICAgIF9maWx0ZXIkcHJvcHMkY2FzZVNlbiA9IF9maWx0ZXIkcHJvcHMuY2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IF9maWx0ZXIkcHJvcHMkY2FzZVNlbiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfZmlsdGVyJHByb3BzJGNhc2VTZW47XG4gICAgICAgICAgICBjdXJyRmlsdGVyc1tkYXRhRmllbGRdID0ge1xuICAgICAgICAgICAgICBmaWx0ZXJWYWw6IGZpbHRlclZhbCxcbiAgICAgICAgICAgICAgZmlsdGVyVHlwZTogZmlsdGVyVHlwZSxcbiAgICAgICAgICAgICAgY29tcGFyYXRvcjogY29tcGFyYXRvcixcbiAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZTogY2FzZVNlbnNpdGl2ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3RoaXMyLmN1cnJGaWx0ZXJzID0gY3VyckZpbHRlcnM7XG4gICAgICAgICAgaWYgKGlzUmVtb3RlRmlsdGVyaW5nKCkpIHtcbiAgICAgICAgICAgIGlmICghaW5pdGlhbGl6ZSkge1xuICAgICAgICAgICAgICBoYW5kbGVGaWx0ZXJDaGFuZ2UoX3RoaXMyLmN1cnJGaWx0ZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzMi5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpczIuZG9GaWx0ZXIoX3RoaXMyLnByb3BzKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwib25FeHRlcm5hbEZpbHRlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRXh0ZXJuYWxGaWx0ZXIoY29sdW1uLCBmaWx0ZXJUeXBlKSB7XG4gICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgX3RoaXMzLm9uRmlsdGVyKGNvbHVtbiwgZmlsdGVyVHlwZSkodmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJnZXRGaWx0ZXJlZFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZpbHRlcmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzaG91bGRDb21wb25lbnRVcGRhdGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KSB7XG4gICAgICAgIGlmICghaXNSZW1vdGVGaWx0ZXJpbmcoKSAmJiAhXy5pc0VxdWFsKG5leHRQcm9wcy5kYXRhLCB0aGlzLmRhdGEpKSB7XG4gICAgICAgICAgdGhpcy5kb0ZpbHRlcihuZXh0UHJvcHMsIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kYXRhID0gbmV4dFByb3BzLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImRvRmlsdGVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZG9GaWx0ZXIocHJvcHMpIHtcbiAgICAgICAgdmFyIGlnbm9yZUVtaXREYXRhQ2hhbmdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGFDaGFuZ2VMaXN0ZW5lciA9IHByb3BzLmRhdGFDaGFuZ2VMaXN0ZW5lcixcbiAgICAgICAgICBkYXRhID0gcHJvcHMuZGF0YSxcbiAgICAgICAgICBjb2x1bW5zID0gcHJvcHMuY29sdW1ucyxcbiAgICAgICAgICBmaWx0ZXIgPSBwcm9wcy5maWx0ZXI7XG4gICAgICAgIHZhciByZXN1bHQgPSAoMCwgZmlsdGVyXzEuZmlsdGVycykoZGF0YSwgY29sdW1ucywgXykodGhpcy5jdXJyRmlsdGVycywgdGhpcy5jbGVhckZpbHRlcnMpO1xuICAgICAgICBpZiAoZmlsdGVyLmFmdGVyRmlsdGVyKSB7XG4gICAgICAgICAgZmlsdGVyLmFmdGVyRmlsdGVyKHJlc3VsdCwgdGhpcy5jdXJyRmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhID0gcmVzdWx0O1xuICAgICAgICBpZiAoZGF0YUNoYW5nZUxpc3RlbmVyICYmICFpZ25vcmVFbWl0RGF0YUNoYW5nZSkge1xuICAgICAgICAgIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IHRydWU7XG4gICAgICAgICAgZGF0YUNoYW5nZUxpc3RlbmVyLmVtaXQoXCJmaWx0ZXJDaGFuZ2VkXCIsIHJlc3VsdC5sZW5ndGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KEZpbHRlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgb25GaWx0ZXI6IHRoaXMub25GaWx0ZXIsXG4gICAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyOiB0aGlzLm9uRXh0ZXJuYWxGaWx0ZXIsXG4gICAgICAgICAgICBjdXJyRmlsdGVyczogdGhpcy5jdXJyRmlsdGVyc1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfV0pO1xuICB9KHJlYWN0XzFbXCJkZWZhdWx0XCJdLkNvbXBvbmVudCk7XG4gIEZpbHRlclByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgICBkYXRhOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgY29sdW1uczogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5hcnJheS5pc1JlcXVpcmVkLFxuICAgIGRhdGFDaGFuZ2VMaXN0ZW5lcjogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5vYmplY3RcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogRmlsdGVyUHJvdmlkZXIsXG4gICAgQ29uc3VtZXI6IEZpbHRlckNvbnRleHQuQ29uc3VtZXJcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJpZFwiLCBcInN0eWxlXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwib25GaWx0ZXJcIiwgXCJjb2x1bW5cIiwgXCJvcHRpb25zXCIsIFwiY29tcGFyYXRvclwiLCBcIndpdGhvdXRFbXB0eU9wdGlvblwiLCBcImNhc2VTZW5zaXRpdmVcIiwgXCJnZXRGaWx0ZXJcIiwgXCJmaWx0ZXJTdGF0ZVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuLyogZXNsaW50IHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgY2xhc3MtbWV0aG9kcy11c2UtdGhpczogMCAqL1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfXzEgPSByZXF1aXJlKFwiLi4vLi5cIik7XG5mdW5jdGlvbiBvcHRpb25zRXF1YWxzKGN1cnJPcHRzLCBwcmV2T3B0cykge1xuICBpZiAoQXJyYXkuaXNBcnJheShjdXJyT3B0cykpIHtcbiAgICBpZiAoY3Vyck9wdHMubGVuZ3RoID09PSBwcmV2T3B0cy5sZW5ndGgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3Vyck9wdHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGN1cnJPcHRzW2ldLnZhbHVlICE9PSBwcmV2T3B0c1tpXS52YWx1ZSB8fCBjdXJyT3B0c1tpXS5sYWJlbCAhPT0gcHJldk9wdHNbaV0ubGFiZWwpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhjdXJyT3B0cyk7XG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBrZXlzLmxlbmd0aDsgX2kgKz0gMSkge1xuICAgIGlmIChjdXJyT3B0c1trZXlzW19pXV0gIT09IHByZXZPcHRzW2tleXNbX2ldXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMoY3Vyck9wdHMpLmxlbmd0aCA9PT0gT2JqZWN0LmtleXMocHJldk9wdHMpLmxlbmd0aDtcbn1cbmZ1bmN0aW9uIGdldE9wdGlvblZhbHVlKG9wdGlvbnMsIGtleSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgIHZhciByZXN1bHQgPSBvcHRpb25zLmZpbHRlcihmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIGxhYmVsID0gX3JlZi5sYWJlbDtcbiAgICAgIHJldHVybiBsYWJlbCA9PT0ga2V5O1xuICAgIH0pLm1hcChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciB2YWx1ZSA9IF9yZWYyLnZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRbMF07XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNba2V5XTtcbn1cbnZhciBTZWxlY3RGaWx0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBTZWxlY3RGaWx0ZXIocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNlbGVjdEZpbHRlcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIFNlbGVjdEZpbHRlciwgW3Byb3BzXSk7XG4gICAgX3RoaXMuZmlsdGVyID0gX3RoaXMuZmlsdGVyLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9wdGlvbnMgPSBfdGhpcy5nZXRPcHRpb25zKHByb3BzKTtcbiAgICB2YXIgaXNTZWxlY3RlZCA9IGdldE9wdGlvblZhbHVlKF90aGlzLm9wdGlvbnMsIF90aGlzLmdldERlZmF1bHRWYWx1ZSgpKSAhPT0gdW5kZWZpbmVkO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZFxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhTZWxlY3RGaWx0ZXIsIF9yZWFjdF8xJENvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoU2VsZWN0RmlsdGVyLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMuY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzLm9uRmlsdGVyLFxuICAgICAgICBnZXRGaWx0ZXIgPSBfdGhpcyRwcm9wcy5nZXRGaWx0ZXI7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnNlbGVjdElucHV0LnZhbHVlO1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbkZpbHRlcihjb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuU0VMRUNULCB0cnVlKSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICAvLyBleHBvcnQgb25GaWx0ZXIgZnVuY3Rpb24gdG8gYWxsb3cgdXNlcnMgdG8gYWNjZXNzXG4gICAgICBpZiAoZ2V0RmlsdGVyKSB7XG4gICAgICAgIGdldEZpbHRlcihmdW5jdGlvbiAoZmlsdGVyVmFsKSB7XG4gICAgICAgICAgX3RoaXMyLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGZpbHRlclZhbCAhPT0gXCJcIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfdGhpczIuc2VsZWN0SW5wdXQudmFsdWUgPSBmaWx0ZXJWYWw7XG4gICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBvbkZpbHRlcihjb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuU0VMRUNUKShmaWx0ZXJWYWwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBuZWVkRmlsdGVyID0gZmFsc2U7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMyLmNvbHVtbixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczIub25GaWx0ZXIsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzMi5kZWZhdWx0VmFsdWU7XG4gICAgICB2YXIgbmV4dE9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnModGhpcy5wcm9wcyk7XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSBwcmV2UHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0SW5wdXQudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIG5lZWRGaWx0ZXIgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICghb3B0aW9uc0VxdWFscyhuZXh0T3B0aW9ucywgdGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBuZXh0T3B0aW9ucztcbiAgICAgICAgbmVlZEZpbHRlciA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAobmVlZEZpbHRlcikge1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnNlbGVjdElucHV0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5TRUxFQ1QpKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE9wdGlvbnMocHJvcHMpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgcHJvcHMub3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiID8gcHJvcHMub3B0aW9ucyhwcm9wcy5jb2x1bW4pIDogcHJvcHMub3B0aW9ucztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RGVmYXVsdFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICBmaWx0ZXJTdGF0ZSA9IF90aGlzJHByb3BzMy5maWx0ZXJTdGF0ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMzLmRlZmF1bHRWYWx1ZTtcbiAgICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiB0eXBlb2YgZmlsdGVyU3RhdGUuZmlsdGVyVmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhbkZpbHRlcmVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFuRmlsdGVyZWQoKSB7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgOiBcIlwiO1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTZWxlY3RlZDogdmFsdWUgIT09IFwiXCJcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3RJbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5TRUxFQ1QpKHZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYXBwbHlGaWx0ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYXBwbHlGaWx0ZXIodmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0SW5wdXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2VsZWN0ZWQ6IHZhbHVlICE9PSBcIlwiXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuU0VMRUNUKSh2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZpbHRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaWx0ZXIoZSkge1xuICAgICAgdmFyIHZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIlxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICAvLyBUT0RPXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLlNFTEVDVCkodmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlck9wdGlvbnMoKSB7XG4gICAgICB2YXIgb3B0aW9uVGFncyA9IFtdO1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczQucGxhY2Vob2xkZXIsXG4gICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzNC5jb2x1bW4sXG4gICAgICAgIHdpdGhvdXRFbXB0eU9wdGlvbiA9IF90aGlzJHByb3BzNC53aXRob3V0RW1wdHlPcHRpb24sXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzNC5kZWZhdWx0VmFsdWU7XG4gICAgICB2YXIgaXNTZWxlY3RlZCA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gXCJcIjtcbiAgICAgIGlmICghd2l0aG91dEVtcHR5T3B0aW9uICYmICFpc1NlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICBrZXk6IFwiLTFcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwic2VsZWN0LWZpbHRlci1wbGFjZWhvbGRlclwiXG4gICAgICAgIH0sIHBsYWNlaG9sZGVyIHx8IFwiU2VsZWN0IFwiLmNvbmNhdChjb2x1bW4udGV4dCwgXCIuLi5cIikpKTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICAgIG9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBfcmVmMy52YWx1ZSxcbiAgICAgICAgICAgIGxhYmVsID0gX3JlZjMubGFiZWw7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICAgIGtleTogdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICB9LCBsYWJlbCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIHZhbHVlOiBrZXlcbiAgICAgICAgICB9LCBvcHRpb25zW2tleV0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlkID0gX3RoaXMkcHJvcHM1LmlkLFxuICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNS5zdHlsZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM1LmNsYXNzTmFtZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHM1LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczUub25GaWx0ZXIsXG4gICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzNS5jb2x1bW4sXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczUub3B0aW9ucyxcbiAgICAgICAgY29tcGFyYXRvciA9IF90aGlzJHByb3BzNS5jb21wYXJhdG9yLFxuICAgICAgICB3aXRob3V0RW1wdHlPcHRpb24gPSBfdGhpcyRwcm9wczUud2l0aG91dEVtcHR5T3B0aW9uLFxuICAgICAgICBjYXNlU2Vuc2l0aXZlID0gX3RoaXMkcHJvcHM1LmNhc2VTZW5zaXRpdmUsXG4gICAgICAgIGdldEZpbHRlciA9IF90aGlzJHByb3BzNS5nZXRGaWx0ZXIsXG4gICAgICAgIGZpbHRlclN0YXRlID0gX3RoaXMkcHJvcHM1LmZpbHRlclN0YXRlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzNSwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBzZWxlY3RDbGFzcyA9IFwiZmlsdGVyIHNlbGVjdC1maWx0ZXIgZm9ybS1jb250cm9sIFwiLmNvbmNhdChjbGFzc05hbWUsIFwiIFwiKS5jb25jYXQodGhpcy5zdGF0ZS5pc1NlbGVjdGVkID8gXCJcIiA6IFwicGxhY2Vob2xkZXItc2VsZWN0ZWRcIik7XG4gICAgICB2YXIgZWxtSWQgPSBcInNlbGVjdC1maWx0ZXItY29sdW1uLVwiLmNvbmNhdChjb2x1bW4uZGF0YUZpZWxkKS5jb25jYXQoaWQgPyBcIi1cIi5jb25jYXQoaWQpIDogXCJcIik7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImZpbHRlci1sYWJlbFwiLFxuICAgICAgICBodG1sRm9yOiBlbG1JZFxuICAgICAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwic3Itb25seVwiXG4gICAgICB9LCBcIkZpbHRlciBieSBcIiwgY29sdW1uLnRleHQpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG4pIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMzLnNlbGVjdElucHV0ID0gbjtcbiAgICAgICAgfSxcbiAgICAgICAgaWQ6IGVsbUlkLFxuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIGNsYXNzTmFtZTogc2VsZWN0Q2xhc3MsXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLmZpbHRlcixcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgICAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5nZXREZWZhdWx0VmFsdWUoKSB8fCBcIlwiLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwic2VsZWN0LWZpbHRlclwiXG4gICAgICB9KSwgdGhpcy5yZW5kZXJPcHRpb25zKCkpKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBTZWxlY3RGaWx0ZXIucHJvcFR5cGVzID0ge1xuLy8gICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgY29sdW1uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBmaWx0ZXJTdGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgb3B0aW9uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmFycmF5XSkuaXNSZXF1aXJlZCxcbi8vICAgY29tcGFyYXRvcjogUHJvcFR5cGVzLm9uZU9mKFtMSUtFLCBFUV0pLFxuLy8gICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgd2l0aG91dEVtcHR5T3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuLy8gICBjYXNlU2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcbi8vIFNlbGVjdEZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGRlZmF1bHRWYWx1ZTogJycsXG4vLyAgIGZpbHRlclN0YXRlOiB7fSxcbi8vICAgY2xhc3NOYW1lOiAnJyxcbi8vICAgd2l0aG91dEVtcHR5T3B0aW9uOiBmYWxzZSxcbi8vICAgY29tcGFyYXRvcjogRVEsXG4vLyAgIGNhc2VTZW5zaXRpdmU6IHRydWUsXG4vLyAgIGlkOiBudWxsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBTZWxlY3RGaWx0ZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmlsdGVycyA9IGV4cG9ydHMuZmlsdGVyRmFjdG9yeSA9IGV4cG9ydHMuZmlsdGVyQnlBcnJheSA9IGV4cG9ydHMuZmlsdGVyQnlEYXRlID0gZXhwb3J0cy5maWx0ZXJCeU51bWJlciA9IGV4cG9ydHMuZmlsdGVyQnlUZXh0ID0gdm9pZCAwO1xuLyogZXNsaW50IGVxZXFlcTogMCAqL1xuLyogZXNsaW50IG5vLWNvbnNvbGU6IDAgKi9cbnZhciBfXzEgPSByZXF1aXJlKFwiLi5cIik7XG52YXIgZmlsdGVyQnlUZXh0ID0gZnVuY3Rpb24gZmlsdGVyQnlUZXh0KF8pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhLCBkYXRhRmllbGQsIF9yZWYsIGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgdmFyIF9yZWYkZmlsdGVyVmFsID0gX3JlZi5maWx0ZXJWYWwsXG4gICAgICB1c2VySW5wdXQgPSBfcmVmJGZpbHRlclZhbCA9PT0gdm9pZCAwID8gXCJcIiA6IF9yZWYkZmlsdGVyVmFsLFxuICAgICAgX3JlZiRjb21wYXJhdG9yID0gX3JlZi5jb21wYXJhdG9yLFxuICAgICAgY29tcGFyYXRvciA9IF9yZWYkY29tcGFyYXRvciA9PT0gdm9pZCAwID8gX18xLkxJS0UgOiBfcmVmJGNvbXBhcmF0b3IsXG4gICAgICBjYXNlU2Vuc2l0aXZlID0gX3JlZi5jYXNlU2Vuc2l0aXZlO1xuICAgIC8vIG1ha2Ugc3VyZSBmaWx0ZXIgdmFsdWUgdG8gYmUgYSBzdHJpbmdcbiAgICB2YXIgZmlsdGVyVmFsID0gdXNlcklucHV0LnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgIHZhciBjZWxsID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuICAgICAgaWYgKGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgICAgIGNlbGwgPSBjdXN0b21GaWx0ZXJWYWx1ZShjZWxsLCByb3cpO1xuICAgICAgfVxuICAgICAgdmFyIGNlbGxTdHIgPSBfLmlzRGVmaW5lZChjZWxsKSA/IGNlbGwudG9TdHJpbmcoKSA6IFwiXCI7XG4gICAgICBpZiAoY29tcGFyYXRvciA9PT0gX18xLkVRKSB7XG4gICAgICAgIHJldHVybiBjZWxsU3RyID09PSBmaWx0ZXJWYWw7XG4gICAgICB9XG4gICAgICBpZiAoY2FzZVNlbnNpdGl2ZSkge1xuICAgICAgICByZXR1cm4gY2VsbFN0ci5pbmNsdWRlcyhmaWx0ZXJWYWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNlbGxTdHIudG9Mb2NhbGVVcHBlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbC50b0xvY2FsZVVwcGVyQ2FzZSgpKSAhPT0gLTE7XG4gICAgfSk7XG4gIH07XG59O1xuZXhwb3J0cy5maWx0ZXJCeVRleHQgPSBmaWx0ZXJCeVRleHQ7XG52YXIgZmlsdGVyQnlOdW1iZXIgPSBmdW5jdGlvbiBmaWx0ZXJCeU51bWJlcihfKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGF0YSwgZGF0YUZpZWxkLCBfcmVmMiwgY3VzdG9tRmlsdGVyVmFsdWUpIHtcbiAgICB2YXIgX3JlZjIkZmlsdGVyVmFsID0gX3JlZjIuZmlsdGVyVmFsLFxuICAgICAgY29tcGFyYXRvciA9IF9yZWYyJGZpbHRlclZhbC5jb21wYXJhdG9yLFxuICAgICAgbnVtYmVyID0gX3JlZjIkZmlsdGVyVmFsLm51bWJlcjtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKHJvdykge1xuICAgICAgaWYgKG51bWJlciA9PT0gXCJcIiB8fCAhY29tcGFyYXRvcikgcmV0dXJuIHRydWU7XG4gICAgICB2YXIgY2VsbCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIGlmIChjdXN0b21GaWx0ZXJWYWx1ZSkge1xuICAgICAgICBjZWxsID0gY3VzdG9tRmlsdGVyVmFsdWUoY2VsbCwgcm93KTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoY29tcGFyYXRvcikge1xuICAgICAgICBjYXNlIF9fMS5FUTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gY2VsbCA9PSBudW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIF9fMS5HVDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gY2VsbCA+IG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX18xLkdFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBjZWxsID49IG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX18xLkxUOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBjZWxsIDwgbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfXzEuTEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGNlbGwgPD0gbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfXzEuTkU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGNlbGwgIT0gbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTnVtYmVyIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn07XG5leHBvcnRzLmZpbHRlckJ5TnVtYmVyID0gZmlsdGVyQnlOdW1iZXI7XG52YXIgZmlsdGVyQnlEYXRlID0gZnVuY3Rpb24gZmlsdGVyQnlEYXRlKF8pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhLCBkYXRhRmllbGQsIF9yZWYzLCBjdXN0b21GaWx0ZXJWYWx1ZSkge1xuICAgIHZhciBfcmVmMyRmaWx0ZXJWYWwgPSBfcmVmMy5maWx0ZXJWYWwsXG4gICAgICBjb21wYXJhdG9yID0gX3JlZjMkZmlsdGVyVmFsLmNvbXBhcmF0b3IsXG4gICAgICBkYXRlID0gX3JlZjMkZmlsdGVyVmFsLmRhdGU7XG4gICAgaWYgKCFkYXRlIHx8ICFjb21wYXJhdG9yKSByZXR1cm4gZGF0YTtcbiAgICB2YXIgZmlsdGVyRGF0ZSA9IGRhdGUuZ2V0VVRDRGF0ZSgpO1xuICAgIHZhciBmaWx0ZXJNb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICB2YXIgZmlsdGVyWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKHJvdykge1xuICAgICAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgICAgIHZhciBjZWxsID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuICAgICAgaWYgKGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgICAgIGNlbGwgPSBjdXN0b21GaWx0ZXJWYWx1ZShjZWxsLCByb3cpO1xuICAgICAgfVxuICAgICAgaWYgKF90eXBlb2YoY2VsbCkgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY2VsbCA9IG5ldyBEYXRlKGNlbGwpO1xuICAgICAgfVxuICAgICAgdmFyIHRhcmdldERhdGUgPSBjZWxsLmdldFVUQ0RhdGUoKTtcbiAgICAgIHZhciB0YXJnZXRNb250aCA9IGNlbGwuZ2V0VVRDTW9udGgoKTtcbiAgICAgIHZhciB0YXJnZXRZZWFyID0gY2VsbC5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgc3dpdGNoIChjb21wYXJhdG9yKSB7XG4gICAgICAgIGNhc2UgX18xLkVROlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJEYXRlICE9PSB0YXJnZXREYXRlIHx8IGZpbHRlck1vbnRoICE9PSB0YXJnZXRNb250aCB8fCBmaWx0ZXJZZWFyICE9PSB0YXJnZXRZZWFyKSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX18xLkdUOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChjZWxsIDw9IGRhdGUpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfXzEuR0U6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRhcmdldFllYXIgPCBmaWx0ZXJZZWFyKSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFllYXIgPT09IGZpbHRlclllYXIgJiYgdGFyZ2V0TW9udGggPCBmaWx0ZXJNb250aCkge1xuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRZZWFyID09PSBmaWx0ZXJZZWFyICYmIHRhcmdldE1vbnRoID09PSBmaWx0ZXJNb250aCAmJiB0YXJnZXREYXRlIDwgZmlsdGVyRGF0ZSkge1xuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIF9fMS5MVDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoY2VsbCA+PSBkYXRlKSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX18xLkxFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXRZZWFyID4gZmlsdGVyWWVhcikge1xuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRZZWFyID09PSBmaWx0ZXJZZWFyICYmIHRhcmdldE1vbnRoID4gZmlsdGVyTW9udGgpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0WWVhciA9PT0gZmlsdGVyWWVhciAmJiB0YXJnZXRNb250aCA9PT0gZmlsdGVyTW9udGggJiYgdGFyZ2V0RGF0ZSA+IGZpbHRlckRhdGUpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfXzEuTkU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGZpbHRlckRhdGUgPT09IHRhcmdldERhdGUgJiYgZmlsdGVyTW9udGggPT09IHRhcmdldE1vbnRoICYmIGZpbHRlclllYXIgPT09IHRhcmdldFllYXIpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRGF0ZSBjb21wYXJhdG9yIHByb3ZpZGVkIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfSk7XG4gIH07XG59O1xuZXhwb3J0cy5maWx0ZXJCeURhdGUgPSBmaWx0ZXJCeURhdGU7XG52YXIgZmlsdGVyQnlBcnJheSA9IGZ1bmN0aW9uIGZpbHRlckJ5QXJyYXkoXykge1xuICByZXR1cm4gZnVuY3Rpb24gKGRhdGEsIGRhdGFGaWVsZCwgX3JlZjQpIHtcbiAgICB2YXIgZmlsdGVyVmFsID0gX3JlZjQuZmlsdGVyVmFsLFxuICAgICAgY29tcGFyYXRvciA9IF9yZWY0LmNvbXBhcmF0b3I7XG4gICAgaWYgKGZpbHRlclZhbC5sZW5ndGggPT09IDApIHJldHVybiBkYXRhO1xuICAgIHZhciByZWZpbmVkRmlsdGVyVmFsID0gZmlsdGVyVmFsLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIF8uaXNEZWZpbmVkKHgpO1xuICAgIH0pLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHgudG9TdHJpbmcoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKHJvdykge1xuICAgICAgdmFyIGNlbGwgPSBfLmdldChyb3csIGRhdGFGaWVsZCk7XG4gICAgICB2YXIgY2VsbFN0ciA9IF8uaXNEZWZpbmVkKGNlbGwpID8gY2VsbC50b1N0cmluZygpIDogXCJcIjtcbiAgICAgIGlmIChjb21wYXJhdG9yID09PSBfXzEuRVEpIHtcbiAgICAgICAgcmV0dXJuIHJlZmluZWRGaWx0ZXJWYWwuaW5kZXhPZihjZWxsU3RyKSAhPT0gLTE7XG4gICAgICB9XG4gICAgICBjZWxsU3RyID0gY2VsbFN0ci50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHJlZmluZWRGaWx0ZXJWYWwuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gY2VsbFN0ci5pbmRleE9mKGl0ZW0udG9Mb2NhbGVVcHBlckNhc2UoKSkgIT09IC0xO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59O1xuZXhwb3J0cy5maWx0ZXJCeUFycmF5ID0gZmlsdGVyQnlBcnJheTtcbnZhciBmaWx0ZXJGYWN0b3J5ID0gZnVuY3Rpb24gZmlsdGVyRmFjdG9yeShfKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZmlsdGVyVHlwZSkge1xuICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkge1xuICAgICAgY2FzZSBfXzEuRklMVEVSX1RZUEVTLk1VTFRJU0VMRUNUOlxuICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuZmlsdGVyQnlBcnJheSkoXyk7XG4gICAgICBjYXNlIF9fMS5GSUxURVJfVFlQRVMuTlVNQkVSOlxuICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuZmlsdGVyQnlOdW1iZXIpKF8pO1xuICAgICAgY2FzZSBfXzEuRklMVEVSX1RZUEVTLkRBVEU6XG4gICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5maWx0ZXJCeURhdGUpKF8pO1xuICAgICAgY2FzZSBfXzEuRklMVEVSX1RZUEVTLlRFWFQ6XG4gICAgICBjYXNlIF9fMS5GSUxURVJfVFlQRVMuU0VMRUNUOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gVXNlIGB0ZXh0YCBmaWx0ZXIgYXMgZGVmYXVsdCBmaWx0ZXJcbiAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmZpbHRlckJ5VGV4dCkoXyk7XG4gICAgfVxuICB9O1xufTtcbmV4cG9ydHMuZmlsdGVyRmFjdG9yeSA9IGZpbHRlckZhY3Rvcnk7XG52YXIgZmlsdGVycyA9IGZ1bmN0aW9uIGZpbHRlcnMoZGF0YSwgY29sdW1ucywgXykge1xuICByZXR1cm4gZnVuY3Rpb24gKGN1cnJGaWx0ZXJzKSB7XG4gICAgdmFyIGNsZWFyRmlsdGVycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIGZhY3RvcnkgPSAoMCwgZXhwb3J0cy5maWx0ZXJGYWN0b3J5KShfKTtcbiAgICB2YXIgZmlsdGVyU3RhdGUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNsZWFyRmlsdGVycyksIGN1cnJGaWx0ZXJzKTtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YTtcbiAgICB2YXIgZmlsdGVyRm47XG4gICAgT2JqZWN0LmtleXMoZmlsdGVyU3RhdGUpLmZvckVhY2goZnVuY3Rpb24gKGRhdGFGaWVsZCkge1xuICAgICAgdmFyIGN1cnJlbnRSZXN1bHQ7XG4gICAgICB2YXIgZmlsdGVyVmFsdWU7XG4gICAgICB2YXIgY3VzdG9tRmlsdGVyO1xuICAgICAgY29sdW1ucyA9IGNvbHVtbnMgIT09IG51bGwgJiYgY29sdW1ucyAhPT0gdm9pZCAwID8gY29sdW1ucyA6IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChjb2x1bW5zW2ldLmRhdGFGaWVsZCA9PT0gZGF0YUZpZWxkKSB7XG4gICAgICAgICAgZmlsdGVyVmFsdWUgPSBjb2x1bW5zW2ldLmZpbHRlclZhbHVlO1xuICAgICAgICAgIGlmIChjb2x1bW5zW2ldLmZpbHRlcikge1xuICAgICAgICAgICAgY3VzdG9tRmlsdGVyID0gY29sdW1uc1tpXS5maWx0ZXIucHJvcHMub25GaWx0ZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2xlYXJGaWx0ZXJzW2RhdGFGaWVsZF0gJiYgY3VzdG9tRmlsdGVyKSB7XG4gICAgICAgIGN1cnJlbnRSZXN1bHQgPSBjdXN0b21GaWx0ZXIoY2xlYXJGaWx0ZXJzW2RhdGFGaWVsZF0uZmlsdGVyVmFsLCByZXN1bHQpO1xuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRSZXN1bHQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICByZXN1bHQgPSBjdXJyZW50UmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZmlsdGVyT2JqID0gZmlsdGVyU3RhdGVbZGF0YUZpZWxkXTtcbiAgICAgICAgZmlsdGVyRm4gPSBmYWN0b3J5KGZpbHRlck9iai5maWx0ZXJUeXBlKTtcbiAgICAgICAgaWYgKGN1c3RvbUZpbHRlcikge1xuICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSBjdXN0b21GaWx0ZXIoZmlsdGVyT2JqLmZpbHRlclZhbCwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRSZXN1bHQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICByZXN1bHQgPSBmaWx0ZXJGbihyZXN1bHQsIGRhdGFGaWVsZCwgZmlsdGVyT2JqLCBmaWx0ZXJWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gY3VycmVudFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuZXhwb3J0cy5maWx0ZXJzID0gZmlsdGVyczsiLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiAwICovXG4vKiBlc2xpbnQgcmVhY3Qvbm8tdW51c2VkLXByb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIEVRLFxuICBGSUxURVJfVFlQRVMsXG4gIE11bHRpU2VsZWN0RmlsdGVyT3B0aW9ucyxcbiAgTXVsdGlTZWxlY3RGaWx0ZXJQcm9wcyxcbn0gZnJvbSBcIi4uLy4uXCI7XG5cbmZ1bmN0aW9uIG9wdGlvbnNFcXVhbHMoY3Vyck9wdHM6IGFueSwgcHJldk9wdHM6IGFueSkge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY3Vyck9wdHMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoY3Vyck9wdHNba2V5c1tpXV0gIT09IHByZXZPcHRzW2tleXNbaV1dKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhjdXJyT3B0cykubGVuZ3RoID09PSBPYmplY3Qua2V5cyhwcmV2T3B0cykubGVuZ3RoO1xufVxuXG5jb25zdCBnZXRTZWxlY3Rpb25zID0gKGNvbnRhaW5lcjogYW55KSA9PiB7XG4gIGlmIChjb250YWluZXIgJiYgY29udGFpbmVyLnNlbGVjdGVkT3B0aW9ucykge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5zZWxlY3RlZE9wdGlvbnMpLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLnZhbHVlKTtcbiAgfVxuICBpZiAoY29udGFpbmVyICYmIEFycmF5LmlzQXJyYXkoY29udGFpbmVyLnZhbHVlKSkge1xuICAgIHJldHVybiBjb250YWluZXIudmFsdWU7XG4gIH1cbiAgY29uc3Qgc2VsZWN0aW9ucyA9IFtdO1xuICBjb25zdCB0b3RhbExlbiA9IGNvbnRhaW5lciAmJiBjb250YWluZXIub3B0aW9ucyA/IGNvbnRhaW5lci5vcHRpb25zLmxlbmd0aCA6IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxMZW47IGkgKz0gMSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNvbnRhaW5lci5vcHRpb25zW2ldO1xuICAgIGlmIChvcHRpb24gJiYgb3B0aW9uLnNlbGVjdGVkKSBzZWxlY3Rpb25zLnB1c2gob3B0aW9uLnZhbHVlKTtcbiAgfVxuICByZXR1cm4gc2VsZWN0aW9ucztcbn07XG5cbmludGVyZmFjZSBNdWx0aVNlbGVjdEZpbHRlclN0YXRlIHtcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbn1cbmNsYXNzIE11bHRpU2VsZWN0RmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50PFxuICBNdWx0aVNlbGVjdEZpbHRlclByb3BzLFxuICBNdWx0aVNlbGVjdEZpbHRlclN0YXRlXG4+IHtcbiAgc2VsZWN0SW5wdXQ6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogTXVsdGlTZWxlY3RGaWx0ZXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5hcHBseUZpbHRlciA9IHRoaXMuYXBwbHlGaWx0ZXIuYmluZCh0aGlzKTtcbiAgICBjb25zdCBpc1NlbGVjdGVkID1cbiAgICAgIChwcm9wcy5kZWZhdWx0VmFsdWUgPz8gW10pLm1hcChcbiAgICAgICAgKGl0ZW06IHN0cmluZykgPT4gKHByb3BzLm9wdGlvbnMgYXMgTXVsdGlTZWxlY3RGaWx0ZXJPcHRpb25zKVtpdGVtXVxuICAgICAgKS5sZW5ndGggPiAwO1xuICAgIHRoaXMuc3RhdGUgPSB7IGlzU2VsZWN0ZWQgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZ2V0RmlsdGVyIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgdmFsdWUgPSBnZXRTZWxlY3Rpb25zKHRoaXMuc2VsZWN0SW5wdXQpO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBleHBvcnQgb25GaWx0ZXIgZnVuY3Rpb24gdG8gYWxsb3cgdXNlcnMgdG8gYWNjZXNzXG4gICAgaWYgKGdldEZpbHRlcikge1xuICAgICAgZ2V0RmlsdGVyKChmaWx0ZXJWYWw6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdElucHV0LnZhbHVlID0gZmlsdGVyVmFsO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKGZpbHRlclZhbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnkpIHtcbiAgICBsZXQgbmVlZEZpbHRlciA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gcHJldlByb3BzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgbmVlZEZpbHRlciA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghb3B0aW9uc0VxdWFscyh0aGlzLnByb3BzLm9wdGlvbnMsIHByZXZQcm9wcy5vcHRpb25zKSkge1xuICAgICAgbmVlZEZpbHRlciA9IHRydWU7XG4gICAgfVxuICAgIGlmIChuZWVkRmlsdGVyKSB7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKGdldFNlbGVjdGlvbnModGhpcy5zZWxlY3RJbnB1dCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldERlZmF1bHRWYWx1ZSgpIHtcbiAgICBjb25zdCB7IGZpbHRlclN0YXRlID0ge30sIGRlZmF1bHRWYWx1ZSA9IFtdIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiB0eXBlb2YgZmlsdGVyU3RhdGUuZmlsdGVyVmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICByZXR1cm4gZmlsdGVyU3RhdGUuZmlsdGVyVmFsO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25UYWdzID0gW107XG4gICAgY29uc3Qge1xuICAgICAgb3B0aW9ucyxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgY29sdW1uLFxuICAgICAgd2l0aG91dEVtcHR5T3B0aW9uID0gZmFsc2UsXG4gICAgICBkZWZhdWx0VmFsdWUgPSBbXSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS5sZW5ndGggPiAwO1xuICAgIGlmICghd2l0aG91dEVtcHR5T3B0aW9uICYmICFpc1NlbGVjdGVkKSB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goXG4gICAgICAgIDxvcHRpb24ga2V5PVwiLTFcIiB2YWx1ZT1cIlwiIGRhdGEtdGVzdGlkPVwibXVsdGlzZWxlY3QtcGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICB7cGxhY2Vob2xkZXIgfHwgYFNlbGVjdCAke2NvbHVtbi50ZXh0fS4uLmB9XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PlxuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT17a2V5fSB2YWx1ZT17a2V5fT5cbiAgICAgICAgICB7KG9wdGlvbnMgYXMgTXVsdGlTZWxlY3RGaWx0ZXJPcHRpb25zKVtrZXldfVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgIClcbiAgICApO1xuICAgIHJldHVybiBvcHRpb25UYWdzO1xuICB9XG5cbiAgY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9XG4gICAgICB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgOiBbXTtcbiAgICB0aGlzLnNlbGVjdElucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSk7XG4gIH1cblxuICBhcHBseUZpbHRlcih2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZVswXSA9PT0gXCJcIikge1xuICAgICAgdmFsdWUgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiB2YWx1ZS5sZW5ndGggPiAwIH0pKTtcbiAgICAvLyBUT0RPXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIEZJTFRFUl9UWVBFUy5NVUxUSVNFTEVDVCkodmFsdWUpO1xuICB9XG5cbiAgZmlsdGVyKGU6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0U2VsZWN0aW9ucyhlLnRhcmdldCk7XG4gICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgaWQgPSBudWxsLFxuICAgICAgc3R5bGUsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgZmlsdGVyU3RhdGUgPSB7fSxcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IFtdLFxuICAgICAgb25GaWx0ZXIsXG4gICAgICBjb2x1bW4sXG4gICAgICBvcHRpb25zLFxuICAgICAgY29tcGFyYXRvciA9IEVRLFxuICAgICAgd2l0aG91dEVtcHR5T3B0aW9uID0gZmFsc2UsXG4gICAgICBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSxcbiAgICAgIGdldEZpbHRlcixcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHNlbGVjdENsYXNzID0gYGZpbHRlciBzZWxlY3QtZmlsdGVyIGZvcm0tY29udHJvbCAke2NsYXNzTmFtZX0gJHt0aGlzLnN0YXRlLmlzU2VsZWN0ZWQgPyBcIlwiIDogXCJwbGFjZWhvbGRlci1zZWxlY3RlZFwiXG4gICAgICB9YDtcbiAgICBjb25zdCBlbG1JZCA9IGBtdWx0aXNlbGVjdC1maWx0ZXItY29sdW1uLSR7Y29sdW1uLmRhdGFGaWVsZH0ke2lkID8gYC0ke2lkfWAgOiBcIlwiXG4gICAgICB9YDtcblxuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZmlsdGVyLWxhYmVsXCIgaHRtbEZvcj17ZWxtSWR9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+RmlsdGVyIGJ5IHtjb2x1bW4udGV4dH08L3NwYW4+XG4gICAgICAgIDxzZWxlY3RcbiAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICByZWY9eyhuKSA9PiAodGhpcy5zZWxlY3RJbnB1dCA9IG4pfVxuICAgICAgICAgIGlkPXtlbG1JZH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICBjbGFzc05hbWU9e3NlbGVjdENsYXNzfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmZpbHRlcn1cbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdFZhbHVlKCl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtdWx0aXNlbGVjdC1maWx0ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMuZ2V0T3B0aW9ucygpfVxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBNdWx0aVNlbGVjdEZpbHRlci5wcm9wVHlwZXMgPSB7XG4vLyAgIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZmlsdGVyU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihbTElLRSwgRVFdKSxcbi8vICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHdpdGhvdXRFbXB0eU9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFycmF5LFxuLy8gICBjYXNlU2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG5cbi8vIE11bHRpU2VsZWN0RmlsdGVyLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgZGVmYXVsdFZhbHVlOiBbXSxcbi8vICAgZmlsdGVyU3RhdGU6IHt9LFxuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyAgIHdpdGhvdXRFbXB0eU9wdGlvbjogZmFsc2UsXG4vLyAgIGNvbXBhcmF0b3I6IEVRLFxuLy8gICBjYXNlU2Vuc2l0aXZlOiB0cnVlLFxuLy8gICBpZDogbnVsbCxcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IE11bHRpU2VsZWN0RmlsdGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3VzdG9tRmlsdGVyID0gZXhwb3J0cy5kYXRlRmlsdGVyID0gZXhwb3J0cy5udW1iZXJGaWx0ZXIgPSBleHBvcnRzLm11bHRpU2VsZWN0RmlsdGVyID0gZXhwb3J0cy5zZWxlY3RGaWx0ZXIgPSBleHBvcnRzLnRleHRGaWx0ZXIgPSBleHBvcnRzLkNvbXBhcmF0b3JOdW1iZXIgPSBleHBvcnRzLkxFID0gZXhwb3J0cy5MVCA9IGV4cG9ydHMuR0UgPSBleHBvcnRzLkdUID0gZXhwb3J0cy5ORSA9IGV4cG9ydHMuRVEgPSBleHBvcnRzLkxJS0UgPSBleHBvcnRzLkZJTFRFUl9ERUxBWSA9IGV4cG9ydHMuRklMVEVSX1RZUEVTID0gdm9pZCAwO1xudmFyIGRhdGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvY29tcG9uZW50cy9kYXRlXCIpKTtcbnZhciBtdWx0aXNlbGVjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3NyYy9jb21wb25lbnRzL211bHRpc2VsZWN0XCIpKTtcbnZhciBudW1iZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvY29tcG9uZW50cy9udW1iZXJcIikpO1xudmFyIHNlbGVjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3NyYy9jb21wb25lbnRzL3NlbGVjdFwiKSk7XG52YXIgdGV4dF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3NyYy9jb21wb25lbnRzL3RleHRcIikpO1xudmFyIGNvbnRleHRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvY29udGV4dFwiKSk7XG52YXIgRklMVEVSX1RZUEVTO1xuKGZ1bmN0aW9uIChGSUxURVJfVFlQRVMpIHtcbiAgRklMVEVSX1RZUEVTW1wiVEVYVFwiXSA9IFwiVEVYVFwiO1xuICBGSUxURVJfVFlQRVNbXCJTRUxFQ1RcIl0gPSBcIlNFTEVDVFwiO1xuICBGSUxURVJfVFlQRVNbXCJNVUxUSVNFTEVDVFwiXSA9IFwiTVVMVElTRUxFQ1RcIjtcbiAgRklMVEVSX1RZUEVTW1wiTlVNQkVSXCJdID0gXCJOVU1CRVJcIjtcbiAgRklMVEVSX1RZUEVTW1wiREFURVwiXSA9IFwiREFURVwiO1xufSkoRklMVEVSX1RZUEVTIHx8IChleHBvcnRzLkZJTFRFUl9UWVBFUyA9IEZJTFRFUl9UWVBFUyA9IHt9KSk7XG5leHBvcnRzLkZJTFRFUl9ERUxBWSA9IDUwMDtcbi8qKlxuICogRmlsdGVyIGNvbXBhcmF0b3JzIHVzZWQgZm9yIHRhYmxlIGZpbHRlcnNcbiAqL1xuZXhwb3J0cy5MSUtFID0gXCJMSUtFXCI7XG5leHBvcnRzLkVRID0gXCI9XCI7XG5leHBvcnRzLk5FID0gXCIhPVwiO1xuZXhwb3J0cy5HVCA9IFwiPlwiO1xuZXhwb3J0cy5HRSA9IFwiPj1cIjtcbmV4cG9ydHMuTFQgPSBcIjxcIjtcbmV4cG9ydHMuTEUgPSBcIjw9XCI7XG5leHBvcnRzLkNvbXBhcmF0b3JOdW1iZXIgPSA3O1xudmFyIHRleHRGaWx0ZXIgPSBmdW5jdGlvbiB0ZXh0RmlsdGVyKCkge1xuICB2YXIgcHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICByZXR1cm4ge1xuICAgIEZpbHRlcjogdGV4dF8xW1wiZGVmYXVsdFwiXSxcbiAgICBwcm9wczogcHJvcHNcbiAgfTtcbn07XG5leHBvcnRzLnRleHRGaWx0ZXIgPSB0ZXh0RmlsdGVyO1xudmFyIHNlbGVjdEZpbHRlciA9IGZ1bmN0aW9uIHNlbGVjdEZpbHRlcigpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBGaWx0ZXI6IHNlbGVjdF8xW1wiZGVmYXVsdFwiXSxcbiAgICBwcm9wczogcHJvcHNcbiAgfTtcbn07XG5leHBvcnRzLnNlbGVjdEZpbHRlciA9IHNlbGVjdEZpbHRlcjtcbnZhciBtdWx0aVNlbGVjdEZpbHRlciA9IGZ1bmN0aW9uIG11bHRpU2VsZWN0RmlsdGVyKCkge1xuICB2YXIgcHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICByZXR1cm4ge1xuICAgIEZpbHRlcjogbXVsdGlzZWxlY3RfMVtcImRlZmF1bHRcIl0sXG4gICAgcHJvcHM6IHByb3BzXG4gIH07XG59O1xuZXhwb3J0cy5tdWx0aVNlbGVjdEZpbHRlciA9IG11bHRpU2VsZWN0RmlsdGVyO1xudmFyIG51bWJlckZpbHRlciA9IGZ1bmN0aW9uIG51bWJlckZpbHRlcigpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBGaWx0ZXI6IG51bWJlcl8xW1wiZGVmYXVsdFwiXSxcbiAgICBwcm9wczogcHJvcHNcbiAgfTtcbn07XG5leHBvcnRzLm51bWJlckZpbHRlciA9IG51bWJlckZpbHRlcjtcbnZhciBkYXRlRmlsdGVyID0gZnVuY3Rpb24gZGF0ZUZpbHRlcigpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBGaWx0ZXI6IGRhdGVfMVtcImRlZmF1bHRcIl0sXG4gICAgcHJvcHM6IHByb3BzXG4gIH07XG59O1xuZXhwb3J0cy5kYXRlRmlsdGVyID0gZGF0ZUZpbHRlcjtcbnZhciBjdXN0b21GaWx0ZXIgPSBmdW5jdGlvbiBjdXN0b21GaWx0ZXIoKSB7XG4gIHZhciBwcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHJldHVybiB7XG4gICAgRmlsdGVyOiBmdW5jdGlvbiBGaWx0ZXIoKSB7fSxcbiAgICBwcm9wczogcHJvcHNcbiAgfTtcbn07XG5leHBvcnRzLmN1c3RvbUZpbHRlciA9IGN1c3RvbUZpbHRlcjtcbi8vIGRlY2xhcmUgZnVuY3Rpb24gZmlsdGVyRmFjdG9yeShwcm9wcz86IEZpbHRlckZhY3RvcnlQcm9wcyk6IHVua25vd247XG4vLyBleHBvcnQgZGVmYXVsdCBmaWx0ZXJGYWN0b3J5O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVDb250ZXh0OiBjb250ZXh0XzFbXCJkZWZhdWx0XCJdLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfTtcbn07IiwiLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCByZWFjdC9uby11bnVzZWQtcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IGNsYXNzLW1ldGhvZHMtdXNlLXRoaXM6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZJTFRFUl9UWVBFUywgU2VsZWN0RmlsdGVyUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuZnVuY3Rpb24gb3B0aW9uc0VxdWFscyhjdXJyT3B0czogYW55LCBwcmV2T3B0czogYW55KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGN1cnJPcHRzKSkge1xuICAgIGlmIChjdXJyT3B0cy5sZW5ndGggPT09IHByZXZPcHRzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyT3B0cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY3Vyck9wdHNbaV0udmFsdWUgIT09IHByZXZPcHRzW2ldLnZhbHVlIHx8XG4gICAgICAgICAgY3Vyck9wdHNbaV0ubGFiZWwgIT09IHByZXZPcHRzW2ldLmxhYmVsXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY3Vyck9wdHMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoY3Vyck9wdHNba2V5c1tpXV0gIT09IHByZXZPcHRzW2tleXNbaV1dKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhjdXJyT3B0cykubGVuZ3RoID09PSBPYmplY3Qua2V5cyhwcmV2T3B0cykubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBnZXRPcHRpb25WYWx1ZShvcHRpb25zOiBhbnksIGtleTogYW55KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gb3B0aW9uc1xuICAgICAgLmZpbHRlcigoeyBsYWJlbCB9KSA9PiBsYWJlbCA9PT0ga2V5KVxuICAgICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG4gICAgcmV0dXJuIHJlc3VsdFswXTtcbiAgfVxuICByZXR1cm4gb3B0aW9uc1trZXldO1xufVxuXG5pbnRlcmZhY2UgU2VsZWN0RmlsdGVyU3RhdGUge1xuICBpc1NlbGVjdGVkOiBib29sZWFuO1xufVxuXG5jbGFzcyBTZWxlY3RGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQ8U2VsZWN0RmlsdGVyUHJvcHMsIFNlbGVjdEZpbHRlclN0YXRlPiB7XG4gIG9wdGlvbnM6IGFueTtcbiAgc2VsZWN0SW5wdXQ6IGFueTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKHByb3BzKTtcbiAgICBjb25zdCBpc1NlbGVjdGVkID1cbiAgICAgIGdldE9wdGlvblZhbHVlKHRoaXMub3B0aW9ucywgdGhpcy5nZXREZWZhdWx0VmFsdWUoKSkgIT09IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0YXRlID0geyBpc1NlbGVjdGVkIH07XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IGNvbHVtbiwgb25GaWx0ZXIsIGdldEZpbHRlciB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3RJbnB1dC52YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUgIT09IFwiXCIpIHtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLlNFTEVDVCwgdHJ1ZSkodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIGV4cG9ydCBvbkZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3NcbiAgICBpZiAoZ2V0RmlsdGVyKSB7XG4gICAgICBnZXRGaWx0ZXIoKGZpbHRlclZhbDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgaXNTZWxlY3RlZDogZmlsdGVyVmFsICE9PSBcIlwiIH0pKTtcbiAgICAgICAgdGhpcy5zZWxlY3RJbnB1dC52YWx1ZSA9IGZpbHRlclZhbDtcblxuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuU0VMRUNUKShmaWx0ZXJWYWwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogU2VsZWN0RmlsdGVyUHJvcHMpIHtcbiAgICBsZXQgbmVlZEZpbHRlciA9IGZhbHNlO1xuICAgIGNvbnN0IHsgY29sdW1uLCBvbkZpbHRlciwgZGVmYXVsdFZhbHVlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG5leHRPcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKHRoaXMucHJvcHMpO1xuICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IHByZXZQcm9wcy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0SW5wdXQudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICBuZWVkRmlsdGVyID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zRXF1YWxzKG5leHRPcHRpb25zLCB0aGlzLm9wdGlvbnMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBuZXh0T3B0aW9ucztcbiAgICAgIG5lZWRGaWx0ZXIgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAobmVlZEZpbHRlcikge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdElucHV0LnZhbHVlO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbkZpbHRlcihjb2x1bW4sIEZJTFRFUl9UWVBFUy5TRUxFQ1QpKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRPcHRpb25zKHByb3BzOiBTZWxlY3RGaWx0ZXJQcm9wcykge1xuICAgIHJldHVybiB0eXBlb2YgcHJvcHMub3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IHByb3BzLm9wdGlvbnMocHJvcHMuY29sdW1uKVxuICAgICAgOiBwcm9wcy5vcHRpb25zO1xuICB9XG5cbiAgZ2V0RGVmYXVsdFZhbHVlKCkge1xuICAgIGNvbnN0IHsgZmlsdGVyU3RhdGUsIGRlZmF1bHRWYWx1ZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmlsdGVyU3RhdGUgJiYgdHlwZW9mIGZpbHRlclN0YXRlLmZpbHRlclZhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgcmV0dXJuIGZpbHRlclN0YXRlLmZpbHRlclZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIGNsZWFuRmlsdGVyZWQoKSB7XG4gICAgY29uc3QgdmFsdWUgPVxuICAgICAgdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlIDogXCJcIjtcbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGlzU2VsZWN0ZWQ6IHZhbHVlICE9PSBcIlwiIH0pKTtcbiAgICB0aGlzLnNlbGVjdElucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgLy8gVE9ET1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBGSUxURVJfVFlQRVMuU0VMRUNUKSh2YWx1ZSk7XG4gIH1cblxuICBhcHBseUZpbHRlcih2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RJbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgaXNTZWxlY3RlZDogdmFsdWUgIT09IFwiXCIgfSkpO1xuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgRklMVEVSX1RZUEVTLlNFTEVDVCkodmFsdWUpO1xuICB9XG5cbiAgZmlsdGVyKGU6IGFueSkge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGUudGFyZ2V0O1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgaXNTZWxlY3RlZDogdmFsdWUgIT09IFwiXCIgfSkpO1xuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgRklMVEVSX1RZUEVTLlNFTEVDVCkodmFsdWUpO1xuICB9XG5cbiAgcmVuZGVyT3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25UYWdzID0gW107XG4gICAgY29uc3QgeyBvcHRpb25zIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgcGxhY2Vob2xkZXIsIGNvbHVtbiwgd2l0aG91dEVtcHR5T3B0aW9uLCBkZWZhdWx0VmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gXCJcIjtcbiAgICBpZiAoIXdpdGhvdXRFbXB0eU9wdGlvbiAmJiAhaXNTZWxlY3RlZCkge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT1cIi0xXCIgdmFsdWU9XCJcIiBkYXRhLXRlc3RpZD1cInNlbGVjdC1maWx0ZXItcGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICB7cGxhY2Vob2xkZXIgfHwgYFNlbGVjdCAke2NvbHVtbi50ZXh0fS4uLmB9XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIG9wdGlvbnMuZm9yRWFjaCgoeyB2YWx1ZSwgbGFiZWwgfSkgPT5cbiAgICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICAgIDxvcHRpb24ga2V5PXt2YWx1ZX0gdmFsdWU9e3ZhbHVlfT5cbiAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PlxuICAgICAgICBvcHRpb25UYWdzLnB1c2goXG4gICAgICAgICAgPG9wdGlvbiBrZXk9e2tleX0gdmFsdWU9e2tleX0+XG4gICAgICAgICAgICB7b3B0aW9uc1trZXldfVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBpZCxcbiAgICAgIHN0eWxlLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgb25GaWx0ZXIsXG4gICAgICBjb2x1bW4sXG4gICAgICBvcHRpb25zLFxuICAgICAgY29tcGFyYXRvcixcbiAgICAgIHdpdGhvdXRFbXB0eU9wdGlvbixcbiAgICAgIGNhc2VTZW5zaXRpdmUsXG4gICAgICBnZXRGaWx0ZXIsXG4gICAgICBmaWx0ZXJTdGF0ZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHNlbGVjdENsYXNzID0gYGZpbHRlciBzZWxlY3QtZmlsdGVyIGZvcm0tY29udHJvbCAke2NsYXNzTmFtZX0gJHt0aGlzLnN0YXRlLmlzU2VsZWN0ZWQgPyBcIlwiIDogXCJwbGFjZWhvbGRlci1zZWxlY3RlZFwiXG4gICAgICB9YDtcbiAgICBjb25zdCBlbG1JZCA9IGBzZWxlY3QtZmlsdGVyLWNvbHVtbi0ke2NvbHVtbi5kYXRhRmllbGR9JHtpZCA/IGAtJHtpZH1gIDogXCJcIlxuICAgICAgfWA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZpbHRlci1sYWJlbFwiIGh0bWxGb3I9e2VsbUlkfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkZpbHRlciBieSB7Y29sdW1uLnRleHR9PC9zcGFuPlxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgcmVmPXsobikgPT4gKHRoaXMuc2VsZWN0SW5wdXQgPSBuKX1cbiAgICAgICAgICBpZD17ZWxtSWR9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgIGNsYXNzTmFtZT17c2VsZWN0Q2xhc3N9XG4gICAgICAgICAgb25DaGFuZ2U9e3RoaXMuZmlsdGVyfVxuICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5nZXREZWZhdWx0VmFsdWUoKSB8fCBcIlwifVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwic2VsZWN0LWZpbHRlclwiXG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5yZW5kZXJPcHRpb25zKCl9XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICB9XG59XG5cbi8vIFNlbGVjdEZpbHRlci5wcm9wVHlwZXMgPSB7XG4vLyAgIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGZpbHRlclN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBvcHRpb25zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYXJyYXldKS5pc1JlcXVpcmVkLFxuLy8gICBjb21wYXJhdG9yOiBQcm9wVHlwZXMub25lT2YoW0xJS0UsIEVRXSksXG4vLyAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICB3aXRob3V0RW1wdHlPcHRpb246IFByb3BUeXBlcy5ib29sLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4vLyAgIGNhc2VTZW5zaXRpdmU6IFByb3BUeXBlcy5ib29sLFxuLy8gICBnZXRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuXG4vLyBTZWxlY3RGaWx0ZXIuZGVmYXVsdFByb3BzID0ge1xuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBmaWx0ZXJTdGF0ZToge30sXG4vLyAgIGNsYXNzTmFtZTogJycsXG4vLyAgIHdpdGhvdXRFbXB0eU9wdGlvbjogZmFsc2UsXG4vLyAgIGNvbXBhcmF0b3I6IEVRLFxuLy8gICBjYXNlU2Vuc2l0aXZlOiB0cnVlLFxuLy8gICBpZDogbnVsbFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0RmlsdGVyO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXzsiLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgRklMVEVSX1RZUEVTLCBUZXh0RmlsdGVyUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuaW50ZXJmYWNlIFRleHRGaWx0ZXJTdGF0ZSB7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmNsYXNzIFRleHRGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQ8VGV4dEZpbHRlclByb3BzLCBUZXh0RmlsdGVyU3RhdGU+IHtcbiAgaW5wdXQ6IHsgdmFsdWU6IGFueSB9IHwgYW55O1xuICB0aW1lb3V0OiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBUZXh0RmlsdGVyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5maWx0ZXIgPSB0aGlzLmZpbHRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLmlucHV0ID0ge307XG4gICAgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKCkge1xuICAgICAgaWYgKFxuICAgICAgICBwcm9wcy5maWx0ZXJTdGF0ZSAmJlxuICAgICAgICB0eXBlb2YgcHJvcHMuZmlsdGVyU3RhdGUuZmlsdGVyVmFsICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHByb3BzLmZpbHRlclN0YXRlLmZpbHRlclZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wcy5kZWZhdWx0VmFsdWUgPz8gXCJcIjtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBnZXREZWZhdWx0VmFsdWUoKSxcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBvbkZpbHRlciwgZ2V0RmlsdGVyLCBjb2x1bW4gfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5pbnB1dC52YWx1ZTtcblxuICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBGSUxURVJfVFlQRVMuVEVYVCwgdHJ1ZSkoZGVmYXVsdFZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBleHBvcnQgb25GaWx0ZXIgZnVuY3Rpb24gdG8gYWxsb3cgdXNlcnMgdG8gYWNjZXNzXG4gICAgaWYgKGdldEZpbHRlcikge1xuICAgICAgZ2V0RmlsdGVyKChmaWx0ZXJWYWw6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IHZhbHVlOiBmaWx0ZXJWYWwgfSkpO1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuVEVYVCkoZmlsdGVyVmFsKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuY2xlYW5UaW1lcigpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55KSB7XG4gICAgaWYgKHByZXZQcm9wcy5kZWZhdWx0VmFsdWUgIT09IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICBjb25zdCBuZXh0VmFsdWUgPSB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSA/PyBcIlwiO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBuZXh0VmFsdWUgfSwgKCkgPT4ge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgRklMVEVSX1RZUEVTLlRFWFQpKG5leHRWYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXIoZTogYW55KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNsZWFuVGltZXIoKTtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgdmFsdWU6IGZpbHRlclZhbHVlIH0pKTtcbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIEZJTFRFUl9UWVBFUy5URVhUKShmaWx0ZXJWYWx1ZSk7XG4gICAgfSwgdGhpcy5wcm9wcy5kZWxheSk7XG4gIH1cblxuICBjbGVhblRpbWVyKCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFuRmlsdGVyZWQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSA/PyBcIlwiO1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgdmFsdWUgfSkpO1xuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgRklMVEVSX1RZUEVTLlRFWFQpKHZhbHVlKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKGZpbHRlclRleHQ6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyVGV4dCA/PyBcIlwiO1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgdmFsdWUgfSkpO1xuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgRklMVEVSX1RZUEVTLlRFWFQpKHZhbHVlKTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKGU6IGFueSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMucHJvcHMub25DbGljaykge1xuICAgICAgdGhpcy5wcm9wcy5vbkNsaWNrKGUpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBpZCA9IG51bGwsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIGNvbHVtbjogeyBkYXRhRmllbGQsIHRleHQgfSxcbiAgICAgIHN0eWxlLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgb25GaWx0ZXIsXG4gICAgICBjYXNlU2Vuc2l0aXZlID0gZmFsc2UsXG4gICAgICBkZWZhdWx0VmFsdWUgPSBcIlwiLFxuICAgICAgZ2V0RmlsdGVyLFxuICAgICAgZmlsdGVyU3RhdGUgPSB7fSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGVsbUlkID0gYHRleHQtZmlsdGVyLWNvbHVtbi0ke2RhdGFGaWVsZH0ke2lkID8gYC0ke2lkfWAgOiBcIlwifWA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZpbHRlci1sYWJlbFwiIGh0bWxGb3I9e2VsbUlkfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkZpbHRlciBieSB7dGV4dH08L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgIHJlZj17KG4pID0+ICh0aGlzLmlucHV0ID0gbil9XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGlkPXtlbG1JZH1cbiAgICAgICAgICBjbGFzc05hbWU9e2BmaWx0ZXIgdGV4dC1maWx0ZXIgZm9ybS1jb250cm9sICR7Y2xhc3NOYW1lfWB9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmZpbHRlcn1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlciB8fCBgRW50ZXIgJHt0ZXh0fS4uLmB9XG4gICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0ZXh0LWZpbHRlclwiXG4gICAgICAgIC8+XG4gICAgICA8L2xhYmVsPlxuICAgICk7XG4gIH1cbn1cblxuLy8gVGV4dEZpbHRlci5wcm9wVHlwZXMgPSB7XG4vLyAgIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGZpbHRlclN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjb21wYXJhdG9yOiBQcm9wVHlwZXMub25lT2YoW0xJS0UsIEVRXSksXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4vLyAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBjYXNlU2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG5cbi8vIFRleHRGaWx0ZXIuZGVmYXVsdFByb3BzID0ge1xuLy8gICBkZWxheTogRklMVEVSX0RFTEFZLFxuLy8gICBmaWx0ZXJTdGF0ZToge30sXG4vLyAgIGRlZmF1bHRWYWx1ZTogXCJcIixcbi8vICAgY2FzZVNlbnNpdGl2ZTogZmFsc2UsXG4vLyAgIGlkOiBudWxsLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgVGV4dEZpbHRlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoUmVhY3RJcy5pc0VsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiaWRcIiwgXCJzdHlsZVwiLCBcImNsYXNzTmFtZVwiLCBcImZpbHRlclN0YXRlXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwib25GaWx0ZXJcIiwgXCJjb2x1bW5cIiwgXCJvcHRpb25zXCIsIFwiY29tcGFyYXRvclwiLCBcIndpdGhvdXRFbXB0eU9wdGlvblwiLCBcImNhc2VTZW5zaXRpdmVcIiwgXCJnZXRGaWx0ZXJcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCBuby1wYXJhbS1yZWFzc2lnbjogMCAqL1xuLyogZXNsaW50IHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzOiAwICovXG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9fMSA9IHJlcXVpcmUoXCIuLi8uLlwiKTtcbmZ1bmN0aW9uIG9wdGlvbnNFcXVhbHMoY3Vyck9wdHMsIHByZXZPcHRzKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY3Vyck9wdHMpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoY3Vyck9wdHNba2V5c1tpXV0gIT09IHByZXZPcHRzW2tleXNbaV1dKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhjdXJyT3B0cykubGVuZ3RoID09PSBPYmplY3Qua2V5cyhwcmV2T3B0cykubGVuZ3RoO1xufVxudmFyIGdldFNlbGVjdGlvbnMgPSBmdW5jdGlvbiBnZXRTZWxlY3Rpb25zKGNvbnRhaW5lcikge1xuICBpZiAoY29udGFpbmVyICYmIGNvbnRhaW5lci5zZWxlY3RlZE9wdGlvbnMpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShjb250YWluZXIuc2VsZWN0ZWRPcHRpb25zKS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICAgIH0pO1xuICB9XG4gIGlmIChjb250YWluZXIgJiYgQXJyYXkuaXNBcnJheShjb250YWluZXIudmFsdWUpKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci52YWx1ZTtcbiAgfVxuICB2YXIgc2VsZWN0aW9ucyA9IFtdO1xuICB2YXIgdG90YWxMZW4gPSBjb250YWluZXIgJiYgY29udGFpbmVyLm9wdGlvbnMgPyBjb250YWluZXIub3B0aW9ucy5sZW5ndGggOiAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsTGVuOyBpICs9IDEpIHtcbiAgICB2YXIgb3B0aW9uID0gY29udGFpbmVyLm9wdGlvbnNbaV07XG4gICAgaWYgKG9wdGlvbiAmJiBvcHRpb24uc2VsZWN0ZWQpIHNlbGVjdGlvbnMucHVzaChvcHRpb24udmFsdWUpO1xuICB9XG4gIHJldHVybiBzZWxlY3Rpb25zO1xufTtcbnZhciBNdWx0aVNlbGVjdEZpbHRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIE11bHRpU2VsZWN0RmlsdGVyKHByb3BzKSB7XG4gICAgdmFyIF9wcm9wcyRkZWZhdWx0VmFsdWU7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNdWx0aVNlbGVjdEZpbHRlcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIE11bHRpU2VsZWN0RmlsdGVyLCBbcHJvcHNdKTtcbiAgICBfdGhpcy5maWx0ZXIgPSBfdGhpcy5maWx0ZXIuYmluZChfdGhpcyk7XG4gICAgX3RoaXMuYXBwbHlGaWx0ZXIgPSBfdGhpcy5hcHBseUZpbHRlci5iaW5kKF90aGlzKTtcbiAgICB2YXIgaXNTZWxlY3RlZCA9ICgoX3Byb3BzJGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZSkgIT09IG51bGwgJiYgX3Byb3BzJGRlZmF1bHRWYWx1ZSAhPT0gdm9pZCAwID8gX3Byb3BzJGRlZmF1bHRWYWx1ZSA6IFtdKS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBwcm9wcy5vcHRpb25zW2l0ZW1dO1xuICAgIH0pLmxlbmd0aCA+IDA7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBpc1NlbGVjdGVkOiBpc1NlbGVjdGVkXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKE11bHRpU2VsZWN0RmlsdGVyLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKE11bHRpU2VsZWN0RmlsdGVyLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIGdldEZpbHRlciA9IHRoaXMucHJvcHMuZ2V0RmlsdGVyO1xuICAgICAgdmFyIHZhbHVlID0gZ2V0U2VsZWN0aW9ucyh0aGlzLnNlbGVjdElucHV0KTtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIodmFsdWUpO1xuICAgICAgfVxuICAgICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgICAgaWYgKGdldEZpbHRlcikge1xuICAgICAgICBnZXRGaWx0ZXIoZnVuY3Rpb24gKGZpbHRlclZhbCkge1xuICAgICAgICAgIF90aGlzMi5zZWxlY3RJbnB1dC52YWx1ZSA9IGZpbHRlclZhbDtcbiAgICAgICAgICBfdGhpczIuYXBwbHlGaWx0ZXIoZmlsdGVyVmFsKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgbmVlZEZpbHRlciA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlICE9PSBwcmV2UHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIG5lZWRGaWx0ZXIgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICghb3B0aW9uc0VxdWFscyh0aGlzLnByb3BzLm9wdGlvbnMsIHByZXZQcm9wcy5vcHRpb25zKSkge1xuICAgICAgICBuZWVkRmlsdGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkRmlsdGVyKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZ2V0U2VsZWN0aW9ucyh0aGlzLnNlbGVjdElucHV0KSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wcyRmaWx0ZXJTdGEgPSBfdGhpcyRwcm9wcy5maWx0ZXJTdGF0ZSxcbiAgICAgICAgZmlsdGVyU3RhdGUgPSBfdGhpcyRwcm9wcyRmaWx0ZXJTdGEgPT09IHZvaWQgMCA/IHt9IDogX3RoaXMkcHJvcHMkZmlsdGVyU3RhLFxuICAgICAgICBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPSBfdGhpcyRwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzJGRlZmF1bHRWYSA9PT0gdm9pZCAwID8gW10gOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmE7XG4gICAgICBpZiAoZmlsdGVyU3RhdGUgJiYgdHlwZW9mIGZpbHRlclN0YXRlLmZpbHRlclZhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gZmlsdGVyU3RhdGUuZmlsdGVyVmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0T3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRPcHRpb25zKCkge1xuICAgICAgdmFyIG9wdGlvblRhZ3MgPSBbXTtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMyLm9wdGlvbnMsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHMyLnBsYWNlaG9sZGVyLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczIuY29sdW1uLFxuICAgICAgICBfdGhpcyRwcm9wczIkd2l0aG91dEUgPSBfdGhpcyRwcm9wczIud2l0aG91dEVtcHR5T3B0aW9uLFxuICAgICAgICB3aXRob3V0RW1wdHlPcHRpb24gPSBfdGhpcyRwcm9wczIkd2l0aG91dEUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMyJHdpdGhvdXRFLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFtdIDogX3RoaXMkcHJvcHMyJGRlZmF1bHRWO1xuICAgICAgdmFyIGlzU2VsZWN0ZWQgPSBkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoIXdpdGhvdXRFbXB0eU9wdGlvbiAmJiAhaXNTZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiBcIi0xXCIsXG4gICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgICAgXCJkYXRhLXRlc3RpZFwiOiBcIm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyXCJcbiAgICAgICAgfSwgcGxhY2Vob2xkZXIgfHwgXCJTZWxlY3QgXCIuY29uY2F0KGNvbHVtbi50ZXh0LCBcIi4uLlwiKSkpO1xuICAgICAgfVxuICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IGtleVxuICAgICAgICB9LCBvcHRpb25zW2tleV0pKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9wdGlvblRhZ3M7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuRmlsdGVyZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSA6IFtdO1xuICAgICAgdGhpcy5zZWxlY3RJbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFwcGx5RmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFwcGx5RmlsdGVyKHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAxICYmIHZhbHVlWzBdID09PSBcIlwiKSB7XG4gICAgICAgIHZhbHVlID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1NlbGVjdGVkOiB2YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuTVVMVElTRUxFQ1QpKHZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpbHRlcihlKSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXRTZWxlY3Rpb25zKGUudGFyZ2V0KTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIodmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMzJGlkID0gX3RoaXMkcHJvcHMzLmlkLFxuICAgICAgICBpZCA9IF90aGlzJHByb3BzMyRpZCA9PT0gdm9pZCAwID8gbnVsbCA6IF90aGlzJHByb3BzMyRpZCxcbiAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczMuc3R5bGUsXG4gICAgICAgIF90aGlzJHByb3BzMyRjbGFzc05hbSA9IF90aGlzJHByb3BzMy5jbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMyRjbGFzc05hbSA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMyRjbGFzc05hbSxcbiAgICAgICAgX3RoaXMkcHJvcHMzJGZpbHRlclN0ID0gX3RoaXMkcHJvcHMzLmZpbHRlclN0YXRlLFxuICAgICAgICBmaWx0ZXJTdGF0ZSA9IF90aGlzJHByb3BzMyRmaWx0ZXJTdCA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wczMkZmlsdGVyU3QsXG4gICAgICAgIF90aGlzJHByb3BzMyRkZWZhdWx0ViA9IF90aGlzJHByb3BzMy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzMyRkZWZhdWx0ViA9PT0gdm9pZCAwID8gW10gOiBfdGhpcyRwcm9wczMkZGVmYXVsdFYsXG4gICAgICAgIG9uRmlsdGVyID0gX3RoaXMkcHJvcHMzLm9uRmlsdGVyLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczMuY29sdW1uLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMzLm9wdGlvbnMsXG4gICAgICAgIF90aGlzJHByb3BzMyRjb21wYXJhdCA9IF90aGlzJHByb3BzMy5jb21wYXJhdG9yLFxuICAgICAgICBjb21wYXJhdG9yID0gX3RoaXMkcHJvcHMzJGNvbXBhcmF0ID09PSB2b2lkIDAgPyBfXzEuRVEgOiBfdGhpcyRwcm9wczMkY29tcGFyYXQsXG4gICAgICAgIF90aGlzJHByb3BzMyR3aXRob3V0RSA9IF90aGlzJHByb3BzMy53aXRob3V0RW1wdHlPcHRpb24sXG4gICAgICAgIHdpdGhvdXRFbXB0eU9wdGlvbiA9IF90aGlzJHByb3BzMyR3aXRob3V0RSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wczMkd2l0aG91dEUsXG4gICAgICAgIF90aGlzJHByb3BzMyRjYXNlU2VucyA9IF90aGlzJHByb3BzMy5jYXNlU2Vuc2l0aXZlLFxuICAgICAgICBjYXNlU2Vuc2l0aXZlID0gX3RoaXMkcHJvcHMzJGNhc2VTZW5zID09PSB2b2lkIDAgPyB0cnVlIDogX3RoaXMkcHJvcHMzJGNhc2VTZW5zLFxuICAgICAgICBnZXRGaWx0ZXIgPSBfdGhpcyRwcm9wczMuZ2V0RmlsdGVyLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBzZWxlY3RDbGFzcyA9IFwiZmlsdGVyIHNlbGVjdC1maWx0ZXIgZm9ybS1jb250cm9sIFwiLmNvbmNhdChjbGFzc05hbWUsIFwiIFwiKS5jb25jYXQodGhpcy5zdGF0ZS5pc1NlbGVjdGVkID8gXCJcIiA6IFwicGxhY2Vob2xkZXItc2VsZWN0ZWRcIik7XG4gICAgICB2YXIgZWxtSWQgPSBcIm11bHRpc2VsZWN0LWZpbHRlci1jb2x1bW4tXCIuY29uY2F0KGNvbHVtbi5kYXRhRmllbGQpLmNvbmNhdChpZCA/IFwiLVwiLmNvbmNhdChpZCkgOiBcIlwiKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyLWxhYmVsXCIsXG4gICAgICAgIGh0bWxGb3I6IGVsbUlkXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzci1vbmx5XCJcbiAgICAgIH0sIFwiRmlsdGVyIGJ5IFwiLCBjb2x1bW4udGV4dCksIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0KSwge30sIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIHJldHVybiBfdGhpczMuc2VsZWN0SW5wdXQgPSBuO1xuICAgICAgICB9LFxuICAgICAgICBpZDogZWxtSWQsXG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgIGNsYXNzTmFtZTogc2VsZWN0Q2xhc3MsXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLmZpbHRlcixcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgICAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5nZXREZWZhdWx0VmFsdWUoKSxcbiAgICAgICAgXCJkYXRhLXRlc3RpZFwiOiBcIm11bHRpc2VsZWN0LWZpbHRlclwiXG4gICAgICB9KSwgdGhpcy5nZXRPcHRpb25zKCkpKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBNdWx0aVNlbGVjdEZpbHRlci5wcm9wVHlwZXMgPSB7XG4vLyAgIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZmlsdGVyU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihbTElLRSwgRVFdKSxcbi8vICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHdpdGhvdXRFbXB0eU9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFycmF5LFxuLy8gICBjYXNlU2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG4vLyBNdWx0aVNlbGVjdEZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGRlZmF1bHRWYWx1ZTogW10sXG4vLyAgIGZpbHRlclN0YXRlOiB7fSxcbi8vICAgY2xhc3NOYW1lOiBcIlwiLFxuLy8gICB3aXRob3V0RW1wdHlPcHRpb246IGZhbHNlLFxuLy8gICBjb21wYXJhdG9yOiBFUSxcbi8vICAgY2FzZVNlbnNpdGl2ZTogdHJ1ZSxcbi8vICAgaWQ6IG51bGwsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBNdWx0aVNlbGVjdEZpbHRlcjsiLCIvKiBlc2xpbnQgZXFlcWVxOiAwICovXG4vKiBlc2xpbnQgbm8tY29uc29sZTogMCAqL1xuaW1wb3J0IHsgRVEsIEZJTFRFUl9UWVBFUywgR0UsIEdULCBMRSwgTElLRSwgTFQsIE5FIH0gZnJvbSBcIi4uXCI7XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJCeVRleHQgPVxuICAoXzogYW55KSA9PlxuICAoXG4gICAgZGF0YTogYW55LFxuICAgIGRhdGFGaWVsZDogYW55LFxuICAgIHsgZmlsdGVyVmFsOiB1c2VySW5wdXQgPSBcIlwiLCBjb21wYXJhdG9yID0gTElLRSwgY2FzZVNlbnNpdGl2ZSB9OiBhbnksXG4gICAgY3VzdG9tRmlsdGVyVmFsdWU6IGFueVxuICApID0+IHtcbiAgICAvLyBtYWtlIHN1cmUgZmlsdGVyIHZhbHVlIHRvIGJlIGEgc3RyaW5nXG4gICAgY29uc3QgZmlsdGVyVmFsID0gdXNlcklucHV0LnRvU3RyaW5nKCk7XG5cbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHJvdzogYW55KSA9PiB7XG4gICAgICBsZXQgY2VsbCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIGlmIChjdXN0b21GaWx0ZXJWYWx1ZSkge1xuICAgICAgICBjZWxsID0gY3VzdG9tRmlsdGVyVmFsdWUoY2VsbCwgcm93KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNlbGxTdHIgPSBfLmlzRGVmaW5lZChjZWxsKSA/IGNlbGwudG9TdHJpbmcoKSA6IFwiXCI7XG4gICAgICBpZiAoY29tcGFyYXRvciA9PT0gRVEpIHtcbiAgICAgICAgcmV0dXJuIGNlbGxTdHIgPT09IGZpbHRlclZhbDtcbiAgICAgIH1cbiAgICAgIGlmIChjYXNlU2Vuc2l0aXZlKSB7XG4gICAgICAgIHJldHVybiBjZWxsU3RyLmluY2x1ZGVzKGZpbHRlclZhbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNlbGxTdHIudG9Mb2NhbGVVcHBlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbC50b0xvY2FsZVVwcGVyQ2FzZSgpKSAhPT1cbiAgICAgICAgLTFcbiAgICAgICk7XG4gICAgfSk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJCeU51bWJlciA9XG4gIChfOiBhbnkpID0+XG4gIChcbiAgICBkYXRhOiBhbnksXG4gICAgZGF0YUZpZWxkOiBhbnksXG4gICAgeyBmaWx0ZXJWYWw6IHsgY29tcGFyYXRvciwgbnVtYmVyIH0gfTogYW55LFxuICAgIGN1c3RvbUZpbHRlclZhbHVlOiBhbnlcbiAgKSA9PlxuICAgIGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4ge1xuICAgICAgaWYgKG51bWJlciA9PT0gXCJcIiB8fCAhY29tcGFyYXRvcikgcmV0dXJuIHRydWU7XG4gICAgICBsZXQgY2VsbCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcblxuICAgICAgaWYgKGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgICAgIGNlbGwgPSBjdXN0b21GaWx0ZXJWYWx1ZShjZWxsLCByb3cpO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGNvbXBhcmF0b3IpIHtcbiAgICAgICAgY2FzZSBFUToge1xuICAgICAgICAgIHJldHVybiBjZWxsID09IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEdUOiB7XG4gICAgICAgICAgcmV0dXJuIGNlbGwgPiBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBHRToge1xuICAgICAgICAgIHJldHVybiBjZWxsID49IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIExUOiB7XG4gICAgICAgICAgcmV0dXJuIGNlbGwgPCBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBMRToge1xuICAgICAgICAgIHJldHVybiBjZWxsIDw9IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIE5FOiB7XG4gICAgICAgICAgcmV0dXJuIGNlbGwgIT0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTnVtYmVyIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQnlEYXRlID1cbiAgKF86IGFueSkgPT5cbiAgKFxuICAgIGRhdGE6IGFueSxcbiAgICBkYXRhRmllbGQ6IGFueSxcbiAgICB7IGZpbHRlclZhbDogeyBjb21wYXJhdG9yLCBkYXRlIH0gfTogYW55LFxuICAgIGN1c3RvbUZpbHRlclZhbHVlOiBhbnlcbiAgKSA9PiB7XG4gICAgaWYgKCFkYXRlIHx8ICFjb21wYXJhdG9yKSByZXR1cm4gZGF0YTtcbiAgICBjb25zdCBmaWx0ZXJEYXRlID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgY29uc3QgZmlsdGVyTW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgY29uc3QgZmlsdGVyWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcblxuICAgIHJldHVybiBkYXRhLmZpbHRlcigocm93OiBhbnkpID0+IHtcbiAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICBsZXQgY2VsbCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcblxuICAgICAgaWYgKGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgICAgIGNlbGwgPSBjdXN0b21GaWx0ZXJWYWx1ZShjZWxsLCByb3cpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNlbGwgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY2VsbCA9IG5ldyBEYXRlKGNlbGwpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXREYXRlID0gY2VsbC5nZXRVVENEYXRlKCk7XG4gICAgICBjb25zdCB0YXJnZXRNb250aCA9IGNlbGwuZ2V0VVRDTW9udGgoKTtcbiAgICAgIGNvbnN0IHRhcmdldFllYXIgPSBjZWxsLmdldFVUQ0Z1bGxZZWFyKCk7XG5cbiAgICAgIHN3aXRjaCAoY29tcGFyYXRvcikge1xuICAgICAgICBjYXNlIEVROiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmlsdGVyRGF0ZSAhPT0gdGFyZ2V0RGF0ZSB8fFxuICAgICAgICAgICAgZmlsdGVyTW9udGggIT09IHRhcmdldE1vbnRoIHx8XG4gICAgICAgICAgICBmaWx0ZXJZZWFyICE9PSB0YXJnZXRZZWFyXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEdUOiB7XG4gICAgICAgICAgaWYgKGNlbGwgPD0gZGF0ZSkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBHRToge1xuICAgICAgICAgIGlmICh0YXJnZXRZZWFyIDwgZmlsdGVyWWVhcikge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFllYXIgPT09IGZpbHRlclllYXIgJiYgdGFyZ2V0TW9udGggPCBmaWx0ZXJNb250aCkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGFyZ2V0WWVhciA9PT0gZmlsdGVyWWVhciAmJlxuICAgICAgICAgICAgdGFyZ2V0TW9udGggPT09IGZpbHRlck1vbnRoICYmXG4gICAgICAgICAgICB0YXJnZXREYXRlIDwgZmlsdGVyRGF0ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBMVDoge1xuICAgICAgICAgIGlmIChjZWxsID49IGRhdGUpIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTEU6IHtcbiAgICAgICAgICBpZiAodGFyZ2V0WWVhciA+IGZpbHRlclllYXIpIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRZZWFyID09PSBmaWx0ZXJZZWFyICYmIHRhcmdldE1vbnRoID4gZmlsdGVyTW9udGgpIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRhcmdldFllYXIgPT09IGZpbHRlclllYXIgJiZcbiAgICAgICAgICAgIHRhcmdldE1vbnRoID09PSBmaWx0ZXJNb250aCAmJlxuICAgICAgICAgICAgdGFyZ2V0RGF0ZSA+IGZpbHRlckRhdGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTkU6IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWx0ZXJEYXRlID09PSB0YXJnZXREYXRlICYmXG4gICAgICAgICAgICBmaWx0ZXJNb250aCA9PT0gdGFyZ2V0TW9udGggJiZcbiAgICAgICAgICAgIGZpbHRlclllYXIgPT09IHRhcmdldFllYXJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRGF0ZSBjb21wYXJhdG9yIHByb3ZpZGVkIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9KTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlckJ5QXJyYXkgPVxuICAoXzogYW55KSA9PlxuICAoZGF0YTogYW55LCBkYXRhRmllbGQ6IGFueSwgeyBmaWx0ZXJWYWwsIGNvbXBhcmF0b3IgfTogYW55KSA9PiB7XG4gICAgaWYgKGZpbHRlclZhbC5sZW5ndGggPT09IDApIHJldHVybiBkYXRhO1xuICAgIGNvbnN0IHJlZmluZWRGaWx0ZXJWYWwgPSBmaWx0ZXJWYWxcbiAgICAgIC5maWx0ZXIoKHg6IGFueSkgPT4gXy5pc0RlZmluZWQoeCkpXG4gICAgICAubWFwKCh4OiBhbnkpID0+IHgudG9TdHJpbmcoKSk7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2VsbCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIGxldCBjZWxsU3RyID0gXy5pc0RlZmluZWQoY2VsbCkgPyBjZWxsLnRvU3RyaW5nKCkgOiBcIlwiO1xuICAgICAgaWYgKGNvbXBhcmF0b3IgPT09IEVRKSB7XG4gICAgICAgIHJldHVybiByZWZpbmVkRmlsdGVyVmFsLmluZGV4T2YoY2VsbFN0cikgIT09IC0xO1xuICAgICAgfVxuICAgICAgY2VsbFN0ciA9IGNlbGxTdHIudG9Mb2NhbGVVcHBlckNhc2UoKTtcbiAgICAgIHJldHVybiByZWZpbmVkRmlsdGVyVmFsLnNvbWUoXG4gICAgICAgIChpdGVtOiBhbnkpID0+IGNlbGxTdHIuaW5kZXhPZihpdGVtLnRvTG9jYWxlVXBwZXJDYXNlKCkpICE9PSAtMVxuICAgICAgKTtcbiAgICB9KTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlckZhY3RvcnkgPSAoXzogYW55KSA9PiAoZmlsdGVyVHlwZTogYW55KSA9PiB7XG4gIHN3aXRjaCAoZmlsdGVyVHlwZSkge1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLk1VTFRJU0VMRUNUOlxuICAgICAgcmV0dXJuIGZpbHRlckJ5QXJyYXkoXyk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuTlVNQkVSOlxuICAgICAgcmV0dXJuIGZpbHRlckJ5TnVtYmVyKF8pO1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLkRBVEU6XG4gICAgICByZXR1cm4gZmlsdGVyQnlEYXRlKF8pO1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLlRFWFQ6XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuU0VMRUNUOlxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBVc2UgYHRleHRgIGZpbHRlciBhcyBkZWZhdWx0IGZpbHRlclxuICAgICAgcmV0dXJuIGZpbHRlckJ5VGV4dChfKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlcnMgPVxuICAoZGF0YTogYW55LCBjb2x1bW5zOiBhbnksIF86IGFueSkgPT5cbiAgKGN1cnJGaWx0ZXJzOiBhbnksIGNsZWFyRmlsdGVyczogeyBbZGF0YUZpZWxkOiBzdHJpbmddOiBhbnkgfSA9IHt9KSA9PiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IGZpbHRlckZhY3RvcnkoXyk7XG4gICAgY29uc3QgZmlsdGVyU3RhdGUgPSB7IC4uLmNsZWFyRmlsdGVycywgLi4uY3VyckZpbHRlcnMgfTtcbiAgICBsZXQgcmVzdWx0ID0gZGF0YTtcbiAgICBsZXQgZmlsdGVyRm47XG4gICAgT2JqZWN0LmtleXMoZmlsdGVyU3RhdGUpLmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRSZXN1bHQ7XG4gICAgICBsZXQgZmlsdGVyVmFsdWU7XG4gICAgICBsZXQgY3VzdG9tRmlsdGVyO1xuICAgICAgY29sdW1ucyA9IGNvbHVtbnMgPz8gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGNvbHVtbnNbaV0uZGF0YUZpZWxkID09PSBkYXRhRmllbGQpIHtcbiAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IGNvbHVtbnNbaV0uZmlsdGVyVmFsdWU7XG4gICAgICAgICAgaWYgKGNvbHVtbnNbaV0uZmlsdGVyKSB7XG4gICAgICAgICAgICBjdXN0b21GaWx0ZXIgPSBjb2x1bW5zW2ldLmZpbHRlci5wcm9wcy5vbkZpbHRlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNsZWFyRmlsdGVyc1tkYXRhRmllbGRdICYmIGN1c3RvbUZpbHRlcikge1xuICAgICAgICBjdXJyZW50UmVzdWx0ID0gY3VzdG9tRmlsdGVyKGNsZWFyRmlsdGVyc1tkYXRhRmllbGRdLmZpbHRlclZhbCwgcmVzdWx0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50UmVzdWx0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgcmVzdWx0ID0gY3VycmVudFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZmlsdGVyT2JqID0gZmlsdGVyU3RhdGVbZGF0YUZpZWxkXTtcbiAgICAgICAgZmlsdGVyRm4gPSBmYWN0b3J5KGZpbHRlck9iai5maWx0ZXJUeXBlKTtcbiAgICAgICAgaWYgKGN1c3RvbUZpbHRlcikge1xuICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSBjdXN0b21GaWx0ZXIoZmlsdGVyT2JqLmZpbHRlclZhbCwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRSZXN1bHQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICByZXN1bHQgPSBmaWx0ZXJGbihyZXN1bHQsIGRhdGFGaWVsZCwgZmlsdGVyT2JqLCBmaWx0ZXJWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gY3VycmVudFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBFUSwgRklMVEVSX1RZUEVTLCBMSUtFIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBmaWx0ZXJzIH0gZnJvbSBcIi4vZmlsdGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyUHJvdmlkZXJQcm9wcyB7XG4gIGRhdGE6IGFueVtdO1xuICBjb2x1bW5zOiBhbnlbXTtcbiAgZGF0YUNoYW5nZUxpc3RlbmVyPzogYW55O1xuICBmaWx0ZXI6IGFueTtcbiAgY2hpbGRyZW46IGFueTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFxuICBfOiBhbnksXG4gIGlzUmVtb3RlRmlsdGVyaW5nOiAoKSA9PiBib29sZWFuLFxuICBoYW5kbGVGaWx0ZXJDaGFuZ2U6IChmaWx0ZXJzOiBhbnkpID0+IHZvaWRcbikgPT4ge1xuICBjb25zdCBGaWx0ZXJDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxhbnk+KHt9KTtcblxuICBjbGFzcyBGaWx0ZXJQcm92aWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxGaWx0ZXJQcm92aWRlclByb3BzPiB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIGRhdGE6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgICAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgICBkYXRhQ2hhbmdlTGlzdGVuZXI6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgfTtcblxuICAgIGN1cnJGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICAgIGNsZWFyRmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBkYXRhOiBhbnlbXTtcbiAgICBpc0VtaXREYXRhQ2hhbmdlOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IEZpbHRlclByb3ZpZGVyUHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHRoaXMuY3VyckZpbHRlcnMgPSB7fTtcbiAgICAgIHRoaXMuY2xlYXJGaWx0ZXJzID0ge307XG4gICAgICB0aGlzLm9uRmlsdGVyID0gdGhpcy5vbkZpbHRlci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5kb0ZpbHRlciA9IHRoaXMuZG9GaWx0ZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMub25FeHRlcm5hbEZpbHRlciA9IHRoaXMub25FeHRlcm5hbEZpbHRlci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5kYXRhID0gcHJvcHMuZGF0YTtcbiAgICAgIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKGlzUmVtb3RlRmlsdGVyaW5nKCkgJiYgT2JqZWN0LmtleXModGhpcy5jdXJyRmlsdGVycykubGVuZ3RoID4gMCkge1xuICAgICAgICBoYW5kbGVGaWx0ZXJDaGFuZ2UodGhpcy5jdXJyRmlsdGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb25GaWx0ZXIoY29sdW1uOiBhbnksIGZpbHRlclR5cGU6IGFueSwgaW5pdGlhbGl6ZSA9IGZhbHNlKSB7XG4gICAgICByZXR1cm4gKGZpbHRlclZhbDogYW55KSA9PiB7XG4gICAgICAgIC8vIHdhdGNoIG91dCBoZXJlIGlmIG1pZ3JhdGlvbiB0byBjb250ZXh0IEFQSSwgIzMzNFxuICAgICAgICBjb25zdCBjdXJyRmlsdGVycyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY3VyckZpbHRlcnMpO1xuICAgICAgICB0aGlzLmNsZWFyRmlsdGVycyA9IHt9O1xuICAgICAgICBjb25zdCB7IGRhdGFGaWVsZCwgZmlsdGVyIH0gPSBjb2x1bW47XG5cbiAgICAgICAgY29uc3QgbmVlZENsZWFyRmlsdGVycyA9XG4gICAgICAgICAgIV8uaXNEZWZpbmVkKGZpbHRlclZhbCkgfHwgZmlsdGVyVmFsID09PSBcIlwiIHx8IGZpbHRlclZhbC5sZW5ndGggPT09IDA7XG5cbiAgICAgICAgaWYgKG5lZWRDbGVhckZpbHRlcnMpIHtcbiAgICAgICAgICBkZWxldGUgY3VyckZpbHRlcnNbZGF0YUZpZWxkXTtcbiAgICAgICAgICB0aGlzLmNsZWFyRmlsdGVycyA9IHsgW2RhdGFGaWVsZF06IHsgY2xlYXI6IHRydWUsIGZpbHRlclZhbCB9IH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gc2VsZWN0IGRlZmF1bHQgY29tcGFyYXRvciBpcyBFUSwgb3RoZXJzIGFyZSBMSUtFXG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY29tcGFyYXRvciA9IGZpbHRlclR5cGUgPT09IEZJTFRFUl9UWVBFUy5TRUxFQ1QgPyBFUSA6IExJS0UsXG4gICAgICAgICAgICBjYXNlU2Vuc2l0aXZlID0gZmFsc2UsXG4gICAgICAgICAgfSA9IGZpbHRlci5wcm9wcztcbiAgICAgICAgICBjdXJyRmlsdGVyc1tkYXRhRmllbGRdID0ge1xuICAgICAgICAgICAgZmlsdGVyVmFsLFxuICAgICAgICAgICAgZmlsdGVyVHlwZSxcbiAgICAgICAgICAgIGNvbXBhcmF0b3IsXG4gICAgICAgICAgICBjYXNlU2Vuc2l0aXZlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN1cnJGaWx0ZXJzID0gY3VyckZpbHRlcnM7XG5cbiAgICAgICAgaWYgKGlzUmVtb3RlRmlsdGVyaW5nKCkpIHtcbiAgICAgICAgICBpZiAoIWluaXRpYWxpemUpIHtcbiAgICAgICAgICAgIGhhbmRsZUZpbHRlckNoYW5nZSh0aGlzLmN1cnJGaWx0ZXJzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvRmlsdGVyKHRoaXMucHJvcHMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBvbkV4dGVybmFsRmlsdGVyKGNvbHVtbjogYW55LCBmaWx0ZXJUeXBlOiBhbnkpIHtcbiAgICAgIHJldHVybiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uRmlsdGVyKGNvbHVtbiwgZmlsdGVyVHlwZSkodmFsdWUpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRGaWx0ZXJlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgfVxuXG4gICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgbmV4dFByb3BzOiBSZWFkb25seTxGaWx0ZXJQcm92aWRlclByb3BzPixcbiAgICAgIG5leHRTdGF0ZTogUmVhZG9ubHk8e30+LFxuICAgICAgbmV4dENvbnRleHQ6IGFueVxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgaWYgKCFpc1JlbW90ZUZpbHRlcmluZygpICYmICFfLmlzRXF1YWwobmV4dFByb3BzLmRhdGEsIHRoaXMuZGF0YSkpIHtcbiAgICAgICAgdGhpcy5kb0ZpbHRlcihuZXh0UHJvcHMsIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXh0UHJvcHMuZGF0YTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGRvRmlsdGVyKHByb3BzOiBGaWx0ZXJQcm92aWRlclByb3BzLCBpZ25vcmVFbWl0RGF0YUNoYW5nZSA9IGZhbHNlKSB7XG4gICAgICBjb25zdCB7IGRhdGFDaGFuZ2VMaXN0ZW5lciwgZGF0YSwgY29sdW1ucywgZmlsdGVyIH0gPSBwcm9wcztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbHRlcnMoXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIF9cbiAgICAgICkodGhpcy5jdXJyRmlsdGVycywgdGhpcy5jbGVhckZpbHRlcnMpO1xuICAgICAgaWYgKGZpbHRlci5hZnRlckZpbHRlcikge1xuICAgICAgICBmaWx0ZXIuYWZ0ZXJGaWx0ZXIocmVzdWx0LCB0aGlzLmN1cnJGaWx0ZXJzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmIChkYXRhQ2hhbmdlTGlzdGVuZXIgJiYgIWlnbm9yZUVtaXREYXRhQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IHRydWU7XG4gICAgICAgIGRhdGFDaGFuZ2VMaXN0ZW5lci5lbWl0KFwiZmlsdGVyQ2hhbmdlZFwiLCByZXN1bHQubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZpbHRlckNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgb25GaWx0ZXI6IHRoaXMub25GaWx0ZXIsXG4gICAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyOiB0aGlzLm9uRXh0ZXJuYWxGaWx0ZXIsXG4gICAgICAgICAgICBjdXJyRmlsdGVyczogdGhpcy5jdXJyRmlsdGVycyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvRmlsdGVyQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogRmlsdGVyUHJvdmlkZXIsXG4gICAgQ29uc3VtZXI6IEZpbHRlckNvbnRleHQuQ29uc3VtZXIsXG4gIH07XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJpZFwiLCBcInBsYWNlaG9sZGVyXCIsIFwiY29sdW1uXCIsIFwic3R5bGVcIiwgXCJjbGFzc05hbWVcIiwgXCJvbkZpbHRlclwiLCBcImNhc2VTZW5zaXRpdmVcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJnZXRGaWx0ZXJcIiwgXCJmaWx0ZXJTdGF0ZVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uLy4uXCIpO1xudmFyIFRleHRGaWx0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBUZXh0RmlsdGVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0RmlsdGVyKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgVGV4dEZpbHRlciwgW3Byb3BzXSk7XG4gICAgX3RoaXMuZmlsdGVyID0gX3RoaXMuZmlsdGVyLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLmhhbmRsZUNsaWNrID0gX3RoaXMuaGFuZGxlQ2xpY2suYmluZChfdGhpcyk7XG4gICAgX3RoaXMudGltZW91dCA9IG51bGw7XG4gICAgX3RoaXMuaW5wdXQgPSB7fTtcbiAgICBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgICB2YXIgX3Byb3BzJGRlZmF1bHRWYWx1ZTtcbiAgICAgIGlmIChwcm9wcy5maWx0ZXJTdGF0ZSAmJiB0eXBlb2YgcHJvcHMuZmlsdGVyU3RhdGUuZmlsdGVyVmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBwcm9wcy5maWx0ZXJTdGF0ZS5maWx0ZXJWYWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gKF9wcm9wcyRkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUpICE9PSBudWxsICYmIF9wcm9wcyRkZWZhdWx0VmFsdWUgIT09IHZvaWQgMCA/IF9wcm9wcyRkZWZhdWx0VmFsdWUgOiBcIlwiO1xuICAgIH1cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBnZXREZWZhdWx0VmFsdWUoKVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhUZXh0RmlsdGVyLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKFRleHRGaWx0ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzLm9uRmlsdGVyLFxuICAgICAgICBnZXRGaWx0ZXIgPSBfdGhpcyRwcm9wcy5nZXRGaWx0ZXIsXG4gICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzLmNvbHVtbjtcbiAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSB0aGlzLmlucHV0LnZhbHVlO1xuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuVEVYVCwgdHJ1ZSkoZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCBvbkZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3NcbiAgICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgICAgZ2V0RmlsdGVyKGZ1bmN0aW9uIChmaWx0ZXJWYWwpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlclZhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKShmaWx0ZXJWYWwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmNsZWFuVGltZXIoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgaWYgKHByZXZQcm9wcy5kZWZhdWx0VmFsdWUgIT09IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRkZWZhdWx0VmE7XG4gICAgICAgIHZhciBuZXh0VmFsdWUgPSAoX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpICE9PSBudWxsICYmIF90aGlzJHByb3BzJGRlZmF1bHRWYSAhPT0gdm9pZCAwID8gX3RoaXMkcHJvcHMkZGVmYXVsdFZhIDogXCJcIjtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgdmFsdWU6IG5leHRWYWx1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBfdGhpczMucHJvcHMub25GaWx0ZXIoX3RoaXMzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKShuZXh0VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpbHRlcihlKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmNsZWFuVGltZXIoKTtcbiAgICAgIHZhciBmaWx0ZXJWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IGZpbHRlclZhbHVlXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgX3RoaXM0LnByb3BzLm9uRmlsdGVyKF90aGlzNC5wcm9wcy5jb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuVEVYVCkoZmlsdGVyVmFsdWUpO1xuICAgICAgfSwgdGhpcy5wcm9wcy5kZWxheSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuVGltZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5UaW1lcigpIHtcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuRmlsdGVyZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRkZWZhdWx0VmEyO1xuICAgICAgdmFyIHZhbHVlID0gKF90aGlzJHByb3BzJGRlZmF1bHRWYTIgPSB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSkgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkZGVmYXVsdFZhMiAhPT0gdm9pZCAwID8gX3RoaXMkcHJvcHMkZGVmYXVsdFZhMiA6IFwiXCI7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKSh2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFwcGx5RmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFwcGx5RmlsdGVyKGZpbHRlclRleHQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGZpbHRlclRleHQgIT09IG51bGwgJiYgZmlsdGVyVGV4dCAhPT0gdm9pZCAwID8gZmlsdGVyVGV4dCA6IFwiXCI7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKSh2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZUNsaWNrXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGUpIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DbGljayhlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzMiRpZCA9IF90aGlzJHByb3BzMi5pZCxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczIkaWQgPT09IHZvaWQgMCA/IG51bGwgOiBfdGhpcyRwcm9wczIkaWQsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHMyLnBsYWNlaG9sZGVyLFxuICAgICAgICBfdGhpcyRwcm9wczIkY29sdW1uID0gX3RoaXMkcHJvcHMyLmNvbHVtbixcbiAgICAgICAgZGF0YUZpZWxkID0gX3RoaXMkcHJvcHMyJGNvbHVtbi5kYXRhRmllbGQsXG4gICAgICAgIHRleHQgPSBfdGhpcyRwcm9wczIkY29sdW1uLnRleHQsXG4gICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHMyLnN0eWxlLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzMi5vbkZpbHRlcixcbiAgICAgICAgX3RoaXMkcHJvcHMyJGNhc2VTZW5zID0gX3RoaXMkcHJvcHMyLmNhc2VTZW5zaXRpdmUsXG4gICAgICAgIGNhc2VTZW5zaXRpdmUgPSBfdGhpcyRwcm9wczIkY2FzZVNlbnMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMyJGNhc2VTZW5zLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkZGVmYXVsdFYsXG4gICAgICAgIGdldEZpbHRlciA9IF90aGlzJHByb3BzMi5nZXRGaWx0ZXIsXG4gICAgICAgIF90aGlzJHByb3BzMiRmaWx0ZXJTdCA9IF90aGlzJHByb3BzMi5maWx0ZXJTdGF0ZSxcbiAgICAgICAgZmlsdGVyU3RhdGUgPSBfdGhpcyRwcm9wczIkZmlsdGVyU3QgPT09IHZvaWQgMCA/IHt9IDogX3RoaXMkcHJvcHMyJGZpbHRlclN0LFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlbG1JZCA9IFwidGV4dC1maWx0ZXItY29sdW1uLVwiLmNvbmNhdChkYXRhRmllbGQpLmNvbmNhdChpZCA/IFwiLVwiLmNvbmNhdChpZCkgOiBcIlwiKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyLWxhYmVsXCIsXG4gICAgICAgIGh0bWxGb3I6IGVsbUlkXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzci1vbmx5XCJcbiAgICAgIH0sIFwiRmlsdGVyIGJ5IFwiLCB0ZXh0KSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG4pIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM1LmlucHV0ID0gbjtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIGlkOiBlbG1JZCxcbiAgICAgICAgY2xhc3NOYW1lOiBcImZpbHRlciB0ZXh0LWZpbHRlciBmb3JtLWNvbnRyb2wgXCIuY29uY2F0KGNsYXNzTmFtZSksXG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuZmlsdGVyLFxuICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZUNsaWNrLFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIgfHwgXCJFbnRlciBcIi5jb25jYXQodGV4dCwgXCIuLi5cIiksXG4gICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwidGV4dC1maWx0ZXJcIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBUZXh0RmlsdGVyLnByb3BUeXBlcyA9IHtcbi8vICAgb25GaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZmlsdGVyU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihbTElLRSwgRVFdKSxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBkZWxheTogUHJvcFR5cGVzLm51bWJlcixcbi8vICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGNhc2VTZW5zaXRpdmU6IFByb3BUeXBlcy5ib29sLFxuLy8gICBnZXRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLFxuLy8gfTtcbi8vIFRleHRGaWx0ZXIuZGVmYXVsdFByb3BzID0ge1xuLy8gICBkZWxheTogRklMVEVSX0RFTEFZLFxuLy8gICBmaWx0ZXJTdGF0ZToge30sXG4vLyAgIGRlZmF1bHRWYWx1ZTogXCJcIixcbi8vICAgY2FzZVNlbnNpdGl2ZTogZmFsc2UsXG4vLyAgIGlkOiBudWxsLFxuLy8gfTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gVGV4dEZpbHRlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuLyogZXNsaW50IHByZWZlci10ZW1wbGF0ZTogMCAqL1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfXzEgPSByZXF1aXJlKFwiLi4vLi5cIik7XG52YXIgRVEgPSBcIj1cIjtcbnZhciBORSA9IFwiIT1cIjtcbnZhciBHVCA9IFwiPlwiO1xudmFyIEdFID0gXCI+PVwiO1xudmFyIExUID0gXCI8XCI7XG52YXIgTEUgPSBcIjw9XCI7XG52YXIgbGVnYWxDb21wYXJhdG9ycyA9IFtFUSwgTkUsIEdULCBHRSwgTFQsIExFXTtcbmZ1bmN0aW9uIGRhdGVQYXJzZXIoZCkge1xuICByZXR1cm4gXCJcIi5jb25jYXQoZC5nZXRVVENGdWxsWWVhcigpLCBcIi1cIikuY29uY2F0KChcIjBcIiArIChkLmdldFVUQ01vbnRoKCkgKyAxKSkuc2xpY2UoLTIpLCBcIi1cIikuY29uY2F0KChcIjBcIiArIGQuZ2V0VVRDRGF0ZSgpKS5zbGljZSgtMikpO1xufVxudmFyIERhdGVGaWx0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBEYXRlRmlsdGVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEYXRlRmlsdGVyKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRGF0ZUZpbHRlciwgW3Byb3BzXSk7XG4gICAgX3RoaXMudGltZW91dCA9IG51bGw7XG4gICAgX3RoaXMuY29tcGFyYXRvcnMgPSBwcm9wcy5jb21wYXJhdG9ycyB8fCBsZWdhbENvbXBhcmF0b3JzO1xuICAgIF90aGlzLmFwcGx5RmlsdGVyID0gX3RoaXMuYXBwbHlGaWx0ZXIuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25DaGFuZ2VEYXRlID0gX3RoaXMub25DaGFuZ2VEYXRlLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uQ2hhbmdlQ29tcGFyYXRvciA9IF90aGlzLm9uQ2hhbmdlQ29tcGFyYXRvci5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKERhdGVGaWx0ZXIsIF9yZWFjdF8xJENvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRGF0ZUZpbHRlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBnZXRGaWx0ZXIgPSB0aGlzLnByb3BzLmdldEZpbHRlcjtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5kYXRlRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICAgIHZhciBkYXRlID0gdGhpcy5pbnB1dERhdGUudmFsdWU7XG4gICAgICBpZiAoY29tcGFyYXRvciAmJiBkYXRlKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZGF0ZSwgY29tcGFyYXRvciwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICAvLyBleHBvcnQgb25GaWx0ZXIgZnVuY3Rpb24gdG8gYWxsb3cgdXNlcnMgdG8gYWNjZXNzXG4gICAgICBpZiAoZ2V0RmlsdGVyKSB7XG4gICAgICAgIGdldEZpbHRlcihmdW5jdGlvbiAoZmlsdGVyVmFsKSB7XG4gICAgICAgICAgdmFyIG51bGxhYmxlRmlsdGVyVmFsID0gZmlsdGVyVmFsIHx8IHtcbiAgICAgICAgICAgIGRhdGU6IG51bGwsXG4gICAgICAgICAgICBjb21wYXJhdG9yOiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBfdGhpczIuZGF0ZUZpbHRlckNvbXBhcmF0b3IudmFsdWUgPSBudWxsYWJsZUZpbHRlclZhbC5jb21wYXJhdG9yO1xuICAgICAgICAgIF90aGlzMi5pbnB1dERhdGUudmFsdWUgPSBudWxsYWJsZUZpbHRlclZhbC5kYXRlID8gZGF0ZVBhcnNlcihudWxsYWJsZUZpbHRlclZhbC5kYXRlKSA6IG51bGw7XG4gICAgICAgICAgX3RoaXMyLmFwcGx5RmlsdGVyKG51bGxhYmxlRmlsdGVyVmFsLmRhdGUsIG51bGxhYmxlRmlsdGVyVmFsLmNvbXBhcmF0b3IpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy50aW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25DaGFuZ2VEYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlRGF0ZShlKSB7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IHRoaXMuZGF0ZUZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgICB2YXIgZmlsdGVyVmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyVmFsdWUsIGNvbXBhcmF0b3IpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbkNoYW5nZUNvbXBhcmF0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25DaGFuZ2VDb21wYXJhdG9yKGUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuaW5wdXREYXRlLnZhbHVlO1xuICAgICAgdmFyIGNvbXBhcmF0b3IgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIodmFsdWUsIGNvbXBhcmF0b3IpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRDb21wYXJhdG9yT3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDb21wYXJhdG9yT3B0aW9ucygpIHtcbiAgICAgIHZhciBvcHRpb25UYWdzID0gW107XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkd2l0aG91dEVtID0gdGhpcy5wcm9wcy53aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uLFxuICAgICAgICB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uID0gX3RoaXMkcHJvcHMkd2l0aG91dEVtID09PSB2b2lkIDAgPyBmYWxzZSA6IF90aGlzJHByb3BzJHdpdGhvdXRFbTtcbiAgICAgIGlmICghd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbikge1xuICAgICAgICBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiBcIi0xXCJcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbXBhcmF0b3JzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICBrZXk6IGksXG4gICAgICAgICAgdmFsdWU6IHRoaXMuY29tcGFyYXRvcnNbaV1cbiAgICAgICAgfSwgdGhpcy5jb21wYXJhdG9yc1tpXSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvblRhZ3M7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHRDb21wYXJhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlZmF1bHRDb21wYXJhdG9yKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IHtcbiAgICAgICAgICBkYXRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tcGFyYXRvcjogXCJcIlxuICAgICAgICB9IDogX3RoaXMkcHJvcHMkZGVmYXVsdFZhLFxuICAgICAgICBfdGhpcyRwcm9wcyRmaWx0ZXJTdGEgPSBfdGhpcyRwcm9wcy5maWx0ZXJTdGF0ZSxcbiAgICAgICAgZmlsdGVyU3RhdGUgPSBfdGhpcyRwcm9wcyRmaWx0ZXJTdGEgPT09IHZvaWQgMCA/IHt9IDogX3RoaXMkcHJvcHMkZmlsdGVyU3RhO1xuICAgICAgaWYgKGZpbHRlclN0YXRlICYmIGZpbHRlclN0YXRlLmZpbHRlclZhbCkge1xuICAgICAgICByZXR1cm4gZmlsdGVyU3RhdGUuZmlsdGVyVmFsLmNvbXBhcmF0b3I7XG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUuY29tcGFyYXRvcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXREZWZhdWx0RGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZWZhdWx0RGF0ZSgpIHtcbiAgICAgIC8vIFNldCB0aGUgYXBwcm9wcmlhdGUgZm9ybWF0IGZvciB0aGUgaW5wdXQgdHlwZT1kYXRlLCBpLmUuIFwiWVlZWS1NTS1ERFwiXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGRlZmF1bHRWID0gX3RoaXMkcHJvcHMyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMyJGRlZmF1bHRWID09PSB2b2lkIDAgPyB7XG4gICAgICAgICAgZGF0ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGNvbXBhcmF0b3I6IFwiXCJcbiAgICAgICAgfSA6IF90aGlzJHByb3BzMiRkZWZhdWx0VixcbiAgICAgICAgX3RoaXMkcHJvcHMyJGZpbHRlclN0ID0gX3RoaXMkcHJvcHMyLmZpbHRlclN0YXRlLFxuICAgICAgICBmaWx0ZXJTdGF0ZSA9IF90aGlzJHByb3BzMiRmaWx0ZXJTdCA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wczIkZmlsdGVyU3Q7XG4gICAgICBpZiAoZmlsdGVyU3RhdGUgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsICYmIGZpbHRlclN0YXRlLmZpbHRlclZhbC5kYXRlKSB7XG4gICAgICAgIHJldHVybiBkYXRlUGFyc2VyKGZpbHRlclN0YXRlLmZpbHRlclZhbC5kYXRlKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGVQYXJzZXIobmV3IERhdGUoZGVmYXVsdFZhbHVlLmRhdGUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhcHBseUZpbHRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhcHBseUZpbHRlcih2YWx1ZSwgY29tcGFyYXRvciwgaXNJbml0aWFsKSB7XG4gICAgICAvLyBpZiAoIWNvbXBhcmF0b3IgfHwgIXZhbHVlKSB7XG4gICAgICAvLyAgcmV0dXJuO1xuICAgICAgLy8gfVxuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzMy5jb2x1bW4sXG4gICAgICAgIG9uRmlsdGVyID0gX3RoaXMkcHJvcHMzLm9uRmlsdGVyLFxuICAgICAgICBfdGhpcyRwcm9wczMkZGVsYXkgPSBfdGhpcyRwcm9wczMuZGVsYXksXG4gICAgICAgIGRlbGF5ID0gX3RoaXMkcHJvcHMzJGRlbGF5ID09PSB2b2lkIDAgPyAwIDogX3RoaXMkcHJvcHMzJGRlbGF5O1xuICAgICAgdmFyIGV4ZWN1dGUgPSBmdW5jdGlvbiBleGVjdXRlKCkge1xuICAgICAgICAvLyBJbmNvbWluZyB2YWx1ZSBzaG91bGQgYWx3YXlzIGJlIGEgc3RyaW5nLCBhbmQgdGhlIGRlZmF1bHREYXRlXG4gICAgICAgIC8vIGFib3ZlIGlzIGltcGxlbWVudGVkIGFzIGFuIGVtcHR5IHN0cmluZywgc28gd2UgY2FuIGp1c3QgY2hlY2sgZm9yIHRoYXQuXG4gICAgICAgIC8vIGluc3RlYWQgb2YgcGFyc2luZyBhbiBpbnZhbGlkIERhdGUuIFRoZSBmaWx0ZXIgZnVuY3Rpb24gd2lsbCBpbnRlcnByZXRcbiAgICAgICAgLy8gbnVsbCBhcyBhbiBlbXB0eSBkYXRlIGZpZWxkXG4gICAgICAgIHZhciBkYXRlID0gdmFsdWUgPT09IFwiXCIgPyBudWxsIDogbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLkRBVEUsIGlzSW5pdGlhbCkoe1xuICAgICAgICAgIGRhdGU6IGRhdGUsXG4gICAgICAgICAgY29tcGFyYXRvcjogY29tcGFyYXRvclxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBpZiAoZGVsYXkpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZXhlY3V0ZSgpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGVjdXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wczQkaWQgPSBfdGhpcyRwcm9wczQuaWQsXG4gICAgICAgIGlkID0gX3RoaXMkcHJvcHM0JGlkID09PSB2b2lkIDAgPyBudWxsIDogX3RoaXMkcHJvcHM0JGlkLFxuICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzNC5wbGFjZWhvbGRlcixcbiAgICAgICAgX3RoaXMkcHJvcHM0JGNvbHVtbiA9IF90aGlzJHByb3BzNC5jb2x1bW4sXG4gICAgICAgIGRhdGFGaWVsZCA9IF90aGlzJHByb3BzNCRjb2x1bW4uZGF0YUZpZWxkLFxuICAgICAgICB0ZXh0ID0gX3RoaXMkcHJvcHM0JGNvbHVtbi50ZXh0LFxuICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNC5zdHlsZSxcbiAgICAgICAgY29tcGFyYXRvclN0eWxlID0gX3RoaXMkcHJvcHM0LmNvbXBhcmF0b3JTdHlsZSxcbiAgICAgICAgZGF0ZVN0eWxlID0gX3RoaXMkcHJvcHM0LmRhdGVTdHlsZSxcbiAgICAgICAgX3RoaXMkcHJvcHM0JGNsYXNzTmFtID0gX3RoaXMkcHJvcHM0LmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM0JGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHM0JGNsYXNzTmFtLFxuICAgICAgICBfdGhpcyRwcm9wczQkY29tcGFyYXQgPSBfdGhpcyRwcm9wczQuY29tcGFyYXRvckNsYXNzTmFtZSxcbiAgICAgICAgY29tcGFyYXRvckNsYXNzTmFtZSA9IF90aGlzJHByb3BzNCRjb21wYXJhdCA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzNCRjb21wYXJhdCxcbiAgICAgICAgX3RoaXMkcHJvcHM0JGRhdGVDbGFzID0gX3RoaXMkcHJvcHM0LmRhdGVDbGFzc05hbWUsXG4gICAgICAgIGRhdGVDbGFzc05hbWUgPSBfdGhpcyRwcm9wczQkZGF0ZUNsYXMgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczQkZGF0ZUNsYXM7XG4gICAgICB2YXIgY29tcGFyYXRvckVsbUlkID0gXCJkYXRlLWZpbHRlci1jb21wYXJhdG9yLVwiLmNvbmNhdChkYXRhRmllbGQpLmNvbmNhdChpZCA/IFwiLVwiLmNvbmNhdChpZCkgOiBcIlwiKTtcbiAgICAgIHZhciBpbnB1dEVsbUlkID0gXCJkYXRlLWZpbHRlci1jb2x1bW4tXCIuY29uY2F0KGRhdGFGaWVsZCkuY29uY2F0KGlkID8gXCItXCIuY29uY2F0KGlkKSA6IFwiXCIpO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lOiBcImZpbHRlciBkYXRlLWZpbHRlciBcIi5jb25jYXQoY2xhc3NOYW1lKSxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwiZGF0ZS1maWx0ZXJcIlxuICAgICAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImZpbHRlci1sYWJlbFwiLFxuICAgICAgICBodG1sRm9yOiBjb21wYXJhdG9yRWxtSWRcbiAgICAgIH0sIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInNyLW9ubHlcIlxuICAgICAgfSwgXCJGaWx0ZXIgY29tcGFyYXRvclwiKSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG4pIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMzLmRhdGVGaWx0ZXJDb21wYXJhdG9yID0gbjtcbiAgICAgICAgfSxcbiAgICAgICAgaWQ6IGNvbXBhcmF0b3JFbG1JZCxcbiAgICAgICAgc3R5bGU6IGNvbXBhcmF0b3JTdHlsZSxcbiAgICAgICAgY2xhc3NOYW1lOiBcImRhdGUtZmlsdGVyLWNvbXBhcmF0b3IgZm9ybS1jb250cm9sIFwiLmNvbmNhdChjb21wYXJhdG9yQ2xhc3NOYW1lKSxcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2VDb21wYXJhdG9yLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZ2V0RGVmYXVsdENvbXBhcmF0b3IoKSxcbiAgICAgICAgXCJkYXRhLXRlc3RpZFwiOiBcImRhdGUtZmlsdGVyLWNvbXBhcmF0b3JcIlxuICAgICAgfSwgdGhpcy5nZXRDb21wYXJhdG9yT3B0aW9ucygpKSksIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7XG4gICAgICAgIGh0bWxGb3I6IGlucHV0RWxtSWRcbiAgICAgIH0sIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInNyLW9ubHlcIlxuICAgICAgfSwgXCJFbnRlciAkXCIsIHRleHQpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihuKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMy5pbnB1dERhdGUgPSBuO1xuICAgICAgICB9LFxuICAgICAgICBpZDogaW5wdXRFbG1JZCxcbiAgICAgICAgY2xhc3NOYW1lOiBcImZpbHRlciBkYXRlLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wgXCIuY29uY2F0KGRhdGVDbGFzc05hbWUpLFxuICAgICAgICBzdHlsZTogZGF0ZVN0eWxlLFxuICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2VEYXRlLFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIgfHwgXCJFbnRlciBcIi5jb25jYXQodGV4dCwgXCIuLi5cIiksXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5nZXREZWZhdWx0RGF0ZSgpLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwiZGF0ZS1maWx0ZXItaW5wdXRcIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBEYXRlRmlsdGVyLnByb3BUeXBlcyA9IHtcbi8vICAgb25GaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZmlsdGVyU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGRlbGF5OiBQcm9wVHlwZXMubnVtYmVyLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zaGFwZSh7XG4vLyAgICAgZGF0ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdF0pLFxuLy8gICAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihbLi4ubGVnYWxDb21wYXJhdG9ycywgJyddKVxuLy8gICB9KSxcbi8vICAgLyogZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOiAwICovXG4vLyAgIGNvbXBhcmF0b3JzOiAocHJvcHM6IGFueSwgcHJvcE5hbWU6IGFueSkgPT4ge1xuLy8gICAgIGlmICghcHJvcHNbcHJvcE5hbWVdKSB7XG4vLyAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHNbcHJvcE5hbWVdLmxlbmd0aDsgaSArPSAxKSB7XG4vLyAgICAgICBsZXQgY29tcGFyYXRvcklzVmFsaWQgPSBmYWxzZTtcbi8vICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVnYWxDb21wYXJhdG9ycy5sZW5ndGg7IGogKz0gMSkge1xuLy8gICAgICAgICBpZiAobGVnYWxDb21wYXJhdG9yc1tqXSA9PT0gcHJvcHNbcHJvcE5hbWVdW2ldIHx8IHByb3BzW3Byb3BOYW1lXVtpXSA9PT0gJycpIHtcbi8vICAgICAgICAgICBjb21wYXJhdG9ySXNWYWxpZCA9IHRydWU7XG4vLyAgICAgICAgICAgYnJlYWs7XG4vLyAgICAgICAgIH1cbi8vICAgICAgIH1cbi8vICAgICAgIGlmICghY29tcGFyYXRvcklzVmFsaWQpIHtcbi8vICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihgRGF0ZSBjb21wYXJhdG9yIHByb3ZpZGVkIGlzIG5vdCBzdXBwb3J0ZWQuXG4vLyAgICAgICAgICAgVXNlIG9ubHkgJHtsZWdhbENvbXBhcmF0b3JzfWApO1xuLy8gICAgICAgfVxuLy8gICAgIH1cbi8vICAgfSxcbi8vICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb246IFByb3BUeXBlcy5ib29sLFxuLy8gICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY29tcGFyYXRvclN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBkYXRlU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgY29tcGFyYXRvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZGF0ZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcbi8vIERhdGVGaWx0ZXIuZGVmYXVsdFByb3BzID0ge1xuLy8gICBkZWxheTogMCxcbi8vICAgZGVmYXVsdFZhbHVlOiB7XG4vLyAgICAgZGF0ZTogdW5kZWZpbmVkLFxuLy8gICAgIGNvbXBhcmF0b3I6ICcnXG4vLyAgIH0sXG4vLyAgIGZpbHRlclN0YXRlOiB7fSxcbi8vICAgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbjogZmFsc2UsXG4vLyAgIGNvbXBhcmF0b3JzOiBsZWdhbENvbXBhcmF0b3JzLFxuLy8gICBwbGFjZWhvbGRlcjogdW5kZWZpbmVkLFxuLy8gICBzdHlsZTogdW5kZWZpbmVkLFxuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBjb21wYXJhdG9yU3R5bGU6IHVuZGVmaW5lZCxcbi8vICAgY29tcGFyYXRvckNsYXNzTmFtZTogJycsXG4vLyAgIGRhdGVTdHlsZTogdW5kZWZpbmVkLFxuLy8gICBkYXRlQ2xhc3NOYW1lOiAnJyxcbi8vICAgaWQ6IG51bGxcbi8vIH07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IERhdGVGaWx0ZXI7IiwiLy8gVGhlIGluZmVycmVkIHR5cGUgb2YgJ2RlZmF1bHQnIGNhbm5vdCBiZSBuYW1lZCB3aXRob3V0IGEgcmVmZXJlbmNlIHRvICdyZWFjdC1ib290c3RyYXAtdGFibGUtbmcvbm9kZV9tb2R1bGVzL0B0eXBlcy9wcm9wLXR5cGVzJy5cbi8vIFRoaXMgaXMgbGlrZWx5IG5vdCBwb3J0YWJsZS4gQSB0eXBlIGFubm90YXRpb24gaXMgbmVjZXNzYXJ5LnRzKDI3NDIpXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzLCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQ29sdW1uRGVzY3JpcHRpb24sXG4gIFRhYmxlQ29sdW1uRmlsdGVyUHJvcHMsXG59IGZyb20gXCJyZWFjdC1ib290c3RyYXAtdGFibGUtbmdcIjtcblxuaW1wb3J0IERhdGVGaWx0ZXIgZnJvbSBcIi4vc3JjL2NvbXBvbmVudHMvZGF0ZVwiO1xuaW1wb3J0IE11bHRpU2VsZWN0RmlsdGVyIGZyb20gXCIuL3NyYy9jb21wb25lbnRzL211bHRpc2VsZWN0XCI7XG5pbXBvcnQgTnVtYmVyRmlsdGVyIGZyb20gXCIuL3NyYy9jb21wb25lbnRzL251bWJlclwiO1xuaW1wb3J0IFNlbGVjdEZpbHRlciBmcm9tIFwiLi9zcmMvY29tcG9uZW50cy9zZWxlY3RcIjtcbmltcG9ydCBUZXh0RmlsdGVyIGZyb20gXCIuL3NyYy9jb21wb25lbnRzL3RleHRcIjtcbmltcG9ydCBjcmVhdGVDb250ZXh0IGZyb20gXCIuL3NyYy9jb250ZXh0XCI7XG5cbmV4cG9ydCBlbnVtIEZJTFRFUl9UWVBFUyB7XG4gIFRFWFQgPSBcIlRFWFRcIixcbiAgU0VMRUNUID0gXCJTRUxFQ1RcIixcbiAgTVVMVElTRUxFQ1QgPSBcIk1VTFRJU0VMRUNUXCIsXG4gIE5VTUJFUiA9IFwiTlVNQkVSXCIsXG4gIERBVEUgPSBcIkRBVEVcIixcbn1cblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9ERUxBWSA9IDUwMDtcblxuLyoqXG4gKiBGaWx0ZXIgY29tcGFyYXRvcnMgdXNlZCBmb3IgdGFibGUgZmlsdGVyc1xuICovXG5leHBvcnQgY29uc3QgTElLRSA9IFwiTElLRVwiO1xuZXhwb3J0IGNvbnN0IEVRID0gXCI9XCI7XG5leHBvcnQgY29uc3QgTkUgPSBcIiE9XCI7XG5leHBvcnQgY29uc3QgR1QgPSBcIj5cIjtcbmV4cG9ydCBjb25zdCBHRSA9IFwiPj1cIjtcbmV4cG9ydCBjb25zdCBMVCA9IFwiPFwiO1xuZXhwb3J0IGNvbnN0IExFID0gXCI8PVwiO1xuXG5leHBvcnQgdHlwZSBDb21wYXJhdG9yID0gc3RyaW5nO1xuXG5leHBvcnQgY29uc3QgQ29tcGFyYXRvck51bWJlciA9IDc7XG5cbmV4cG9ydCB0eXBlIFRleHRGaWx0ZXJQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IFRhYmxlQ29sdW1uRmlsdGVyUHJvcHM8XG4gIHN0cmluZyxcbiAgVFxuPiAmXG4gIFBhcnRpYWw8e1xuICAgIC8vIGRlZmF1bHQgaXMgZmFsc2UsIGFuZCB0cnVlIHdpbGwgb25seSB3b3JrIHdoZW4gY29tcGFyYXRvciBpcyBMSUtFXG4gICAgY2FzZVNlbnNpdGl2ZTogYm9vbGVhbjtcbiAgICBjb21wYXJhdG9yOiBDb21wYXJhdG9yO1xuICAgIC8vIG9uIGZpbHRlciBlbGVtZW50IGNsaWNrIGV2ZW50XG4gICAgb25DbGljazogKChlOiBTeW50aGV0aWNFdmVudCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgZmlsdGVyU3RhdGU/OiBhbnk7XG4gICAgY29sdW1uOiBhbnk7XG4gIH0+O1xuXG5leHBvcnQgY29uc3QgdGV4dEZpbHRlciA9IChwcm9wczogUGFydGlhbDxUZXh0RmlsdGVyUHJvcHM+ID0ge30pID0+ICh7XG4gIEZpbHRlcjogVGV4dEZpbHRlcixcbiAgcHJvcHMsXG59KTtcblxuZXhwb3J0IHR5cGUgU2VsZWN0RmlsdGVyT3B0aW9ucyA9XG4gIHwgeyBbaW5kZXg6IHN0cmluZ106IHN0cmluZyB9XG4gIHwgQXJyYXk8eyB2YWx1ZTogbnVtYmVyOyBsYWJlbDogc3RyaW5nIH0+O1xuXG5leHBvcnQgdHlwZSBTZWxlY3RGaWx0ZXJQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IFRhYmxlQ29sdW1uRmlsdGVyUHJvcHM8XG4gIHN0cmluZyxcbiAgVFxuPiAmIHtcbiAgb3B0aW9uczpcbiAgICB8IFNlbGVjdEZpbHRlck9wdGlvbnNcbiAgICB8ICgoY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxUPikgPT4gU2VsZWN0RmlsdGVyT3B0aW9ucyk7XG4gIGNvbXBhcmF0b3I/OiBDb21wYXJhdG9yIHwgdW5kZWZpbmVkO1xuICAvLyBXaGVuIHRoZSBkZWZhdWx0IHVuc2V0IHNlbGVjdGlvbiBpcyBoaWRkZW4gZnJvbSBkcm9wZG93blxuICB3aXRob3V0RW1wdHlPcHRpb24/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBmaWx0ZXJTdGF0ZT86IGFueTtcbiAgY29sdW1uOiBhbnk7XG4gIGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdEZpbHRlciA9IChwcm9wczogUGFydGlhbDxTZWxlY3RGaWx0ZXJQcm9wcz4gPSB7fSkgPT4gKHtcbiAgRmlsdGVyOiBTZWxlY3RGaWx0ZXIsXG4gIHByb3BzLFxufSk7XG5cbmV4cG9ydCB0eXBlIE11bHRpU2VsZWN0RmlsdGVyT3B0aW9ucyA9IHtcbiAgW2luZGV4OiBzdHJpbmddOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBNdWx0aVNlbGVjdEZpbHRlclByb3BzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+ID1cbiAgVGFibGVDb2x1bW5GaWx0ZXJQcm9wczxzdHJpbmdbXSwgVD4gJiB7XG4gICAgb3B0aW9uczogTXVsdGlTZWxlY3RGaWx0ZXJPcHRpb25zIHwgKCgpID0+IE11bHRpU2VsZWN0RmlsdGVyT3B0aW9ucyk7XG4gICAgY29tcGFyYXRvcj86IENvbXBhcmF0b3IgfCB1bmRlZmluZWQ7XG4gICAgLy8gV2hlbiBzZXQgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIGlzIGhpZGRlbiBmcm9tIGRyb3Bkb3duXG4gICAgd2l0aG91dEVtcHR5T3B0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICBmaWx0ZXJTdGF0ZT86IGFueTtcbiAgICBjb2x1bW46IGFueTtcbiAgICBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IG11bHRpU2VsZWN0RmlsdGVyID0gKFxuICBwcm9wczogUGFydGlhbDxNdWx0aVNlbGVjdEZpbHRlclByb3BzPiA9IHt9XG4pID0+ICh7XG4gIEZpbHRlcjogTXVsdGlTZWxlY3RGaWx0ZXIsXG4gIHByb3BzLFxufSk7XG5cbmV4cG9ydCB0eXBlIE51bWJlckZpbHRlclByb3BzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+ID0gVGFibGVDb2x1bW5GaWx0ZXJQcm9wczxcbiAgeyBudW1iZXI6IG51bWJlciB8IFwiXCI7IGNvbXBhcmF0b3I6IENvbXBhcmF0b3IgfSxcbiAgVFxuPiAmIHtcbiAgb3B0aW9ucz86IG51bWJlcltdIHwgdW5kZWZpbmVkO1xuICBjb21wYXJhdG9ycz86IENvbXBhcmF0b3JbXSB8IHVuZGVmaW5lZDtcbiAgLy8gV2hlbiBzZXQgdG8gdHJ1ZSBjb21wYXJhdG9yIGRyb3Bkb3duIGRvZXMgbm90IHNob3cgYSBcIm5vIHNlbGVjdGlvblwiIG9wdGlvblxuICB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgY29tcGFyYXRvckNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbnVtYmVyQ2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb21wYXJhdG9yU3R5bGU/OiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBudW1iZXJTdHlsZT86IENTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHRWYWx1ZT86IHsgbnVtYmVyOiBudW1iZXI7IGNvbXBhcmF0b3I6IENvbXBhcmF0b3IgfSB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyU3RhdGU/OiBhbnk7XG4gIGNvbHVtbjogYW55O1xufTtcblxuZXhwb3J0IGNvbnN0IG51bWJlckZpbHRlciA9IChwcm9wczogUGFydGlhbDxOdW1iZXJGaWx0ZXJQcm9wcz4gPSB7fSkgPT4gKHtcbiAgRmlsdGVyOiBOdW1iZXJGaWx0ZXIsXG4gIHByb3BzLFxufSk7XG5cbmV4cG9ydCB0eXBlIERhdGVGaWx0ZXJQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IFRhYmxlQ29sdW1uRmlsdGVyUHJvcHM8XG4gIERhdGUsXG4gIFRcbj4gJiB7XG4gIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0VmFsdWU/OlxuICAgIHwge1xuICAgICAgICBkYXRlPzogRGF0ZTtcbiAgICAgICAgY29tcGFyYXRvcj86IENvbXBhcmF0b3I7XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWQ7XG4gIGNvbXBhcmF0b3JzPzogQ29tcGFyYXRvcltdIHwgdW5kZWZpbmVkO1xuICBjb21wYXJhdG9yQ2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkYXRlQ2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb21wYXJhdG9yU3R5bGU/OiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBkYXRlU3R5bGU/OiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBmaWx0ZXJTdGF0ZT86IGFueTtcbiAgY29sdW1uOiBhbnk7XG59O1xuXG5leHBvcnQgY29uc3QgZGF0ZUZpbHRlciA9IChwcm9wczogUGFydGlhbDxEYXRlRmlsdGVyUHJvcHM+ID0ge30pID0+ICh7XG4gIEZpbHRlcjogRGF0ZUZpbHRlcixcbiAgcHJvcHMsXG59KTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tRmlsdGVyUHJvcHMgPSB7XG4gIHR5cGU/OiBzdHJpbmcgfCBGSUxURVJfVFlQRVMgfCB1bmRlZmluZWQ7XG4gIGNvbXBhcmF0b3I/OiBDb21wYXJhdG9yIHwgdW5kZWZpbmVkO1xuICBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBjdXN0b21GaWx0ZXIgPSAocHJvcHM6IFBhcnRpYWw8Q3VzdG9tRmlsdGVyUHJvcHM+ID0ge30pID0+ICh7XG4gIEZpbHRlcjogKCkgPT4ge30sXG4gIHByb3BzLFxufSk7XG5cbi8qKlxuICogZGVjbGFyYXRpb24gZm9yIHRhYmxlIGZpbHRlciBzdWIgbW9kdWxlXG4gKi9cbmV4cG9ydCB0eXBlIEZpbHRlckZhY3RvcnlQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IHtcbiAgLy8gVE9ETyBuZXdGaWx0ZXJzIGlzIG5vdCB0ZXN0ZWQgbm90IGl0cyB0eXBlIGlzIHZhbGlkYXRlZCBzaW5jZSB0aGUgYXV0aG9yIG9mIHRoaXMgY29tbWl0IGhhcyBubyBleHBlcmllbmNlIHdpdGggdGhpcyBmaWVsZFxuICBhZnRlckZpbHRlcj86ICgobmV3UmVzdWx0OiBUW10sIG5ld0ZpbHRlcnM/OiB1bmtub3duW10pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xufTtcblxuLy8gZGVjbGFyZSBmdW5jdGlvbiBmaWx0ZXJGYWN0b3J5KHByb3BzPzogRmlsdGVyRmFjdG9yeVByb3BzKTogdW5rbm93bjtcbi8vIGV4cG9ydCBkZWZhdWx0IGZpbHRlckZhY3Rvcnk7XG5cbmV4cG9ydCBkZWZhdWx0IChvcHRpb25zID0ge30pID0+ICh7XG4gIGNyZWF0ZUNvbnRleHQsXG4gIG9wdGlvbnMsXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgcHJlZmVyLXRlbXBsYXRlOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IERhdGVGaWx0ZXJQcm9wcywgRklMVEVSX1RZUEVTIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmNvbnN0IEVRID0gXCI9XCI7XG5jb25zdCBORSA9IFwiIT1cIjtcbmNvbnN0IEdUID0gXCI+XCI7XG5jb25zdCBHRSA9IFwiPj1cIjtcbmNvbnN0IExUID0gXCI8XCI7XG5jb25zdCBMRSA9IFwiPD1cIjtcblxuY29uc3QgbGVnYWxDb21wYXJhdG9ycyA9IFtFUSwgTkUsIEdULCBHRSwgTFQsIExFXTtcblxuZnVuY3Rpb24gZGF0ZVBhcnNlcihkOiBhbnkpIHtcbiAgcmV0dXJuIGAke2QuZ2V0VVRDRnVsbFllYXIoKX0tJHsoXCIwXCIgKyAoZC5nZXRVVENNb250aCgpICsgMSkpLnNsaWNlKC0yKX0tJHsoXG4gICAgXCIwXCIgKyBkLmdldFVUQ0RhdGUoKVxuICApLnNsaWNlKC0yKX1gO1xufVxuXG5jbGFzcyBEYXRlRmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50PERhdGVGaWx0ZXJQcm9wcz4ge1xuICBjb21wYXJhdG9yczogYW55O1xuICBkYXRlRmlsdGVyQ29tcGFyYXRvcjogYW55O1xuICBpbnB1dERhdGU6IGFueTtcbiAgdGltZW91dDogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5jb21wYXJhdG9ycyA9IHByb3BzLmNvbXBhcmF0b3JzIHx8IGxlZ2FsQ29tcGFyYXRvcnM7XG4gICAgdGhpcy5hcHBseUZpbHRlciA9IHRoaXMuYXBwbHlGaWx0ZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uQ2hhbmdlRGF0ZSA9IHRoaXMub25DaGFuZ2VEYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkNoYW5nZUNvbXBhcmF0b3IgPSB0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBnZXRGaWx0ZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY29tcGFyYXRvciA9IHRoaXMuZGF0ZUZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuaW5wdXREYXRlLnZhbHVlO1xuICAgIGlmIChjb21wYXJhdG9yICYmIGRhdGUpIHtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZGF0ZSwgY29tcGFyYXRvciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgIGdldEZpbHRlcigoZmlsdGVyVmFsOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgbnVsbGFibGVGaWx0ZXJWYWwgPSBmaWx0ZXJWYWwgfHwgeyBkYXRlOiBudWxsLCBjb21wYXJhdG9yOiBudWxsIH07XG4gICAgICAgIHRoaXMuZGF0ZUZpbHRlckNvbXBhcmF0b3IudmFsdWUgPSBudWxsYWJsZUZpbHRlclZhbC5jb21wYXJhdG9yO1xuICAgICAgICB0aGlzLmlucHV0RGF0ZS52YWx1ZSA9IG51bGxhYmxlRmlsdGVyVmFsLmRhdGVcbiAgICAgICAgICA/IGRhdGVQYXJzZXIobnVsbGFibGVGaWx0ZXJWYWwuZGF0ZSlcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcihudWxsYWJsZUZpbHRlclZhbC5kYXRlLCBudWxsYWJsZUZpbHRlclZhbC5jb21wYXJhdG9yKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgb25DaGFuZ2VEYXRlKGU6IGFueSkge1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSB0aGlzLmRhdGVGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXJWYWx1ZSwgY29tcGFyYXRvcik7XG4gIH1cblxuICBvbkNoYW5nZUNvbXBhcmF0b3IoZTogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmlucHV0RGF0ZS52YWx1ZTtcbiAgICBjb25zdCBjb21wYXJhdG9yID0gZS50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSwgY29tcGFyYXRvcik7XG4gIH1cblxuICBnZXRDb21wYXJhdG9yT3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25UYWdzID0gW107XG4gICAgY29uc3QgeyB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uID0gZmFsc2UgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCF3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uKSB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goPG9wdGlvbiBrZXk9XCItMVwiIC8+KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbXBhcmF0b3JzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goXG4gICAgICAgIDxvcHRpb24ga2V5PXtpfSB2YWx1ZT17dGhpcy5jb21wYXJhdG9yc1tpXX0+XG4gICAgICAgICAge3RoaXMuY29tcGFyYXRvcnNbaV19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvblRhZ3M7XG4gIH1cblxuICBnZXREZWZhdWx0Q29tcGFyYXRvcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSB7IGRhdGU6IHVuZGVmaW5lZCwgY29tcGFyYXRvcjogXCJcIiB9LFxuICAgICAgZmlsdGVyU3RhdGUgPSB7fSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmlsdGVyU3RhdGUgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsKSB7XG4gICAgICByZXR1cm4gZmlsdGVyU3RhdGUuZmlsdGVyVmFsLmNvbXBhcmF0b3I7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3IpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUuY29tcGFyYXRvcjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXREZWZhdWx0RGF0ZSgpIHtcbiAgICAvLyBTZXQgdGhlIGFwcHJvcHJpYXRlIGZvcm1hdCBmb3IgdGhlIGlucHV0IHR5cGU9ZGF0ZSwgaS5lLiBcIllZWVktTU0tRERcIlxuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHsgZGF0ZTogdW5kZWZpbmVkLCBjb21wYXJhdG9yOiBcIlwiIH0sXG4gICAgICBmaWx0ZXJTdGF0ZSA9IHt9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsLmRhdGUpIHtcbiAgICAgIHJldHVybiBkYXRlUGFyc2VyKGZpbHRlclN0YXRlLmZpbHRlclZhbC5kYXRlKTtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUuZGF0ZSkge1xuICAgICAgcmV0dXJuIGRhdGVQYXJzZXIobmV3IERhdGUoZGVmYXVsdFZhbHVlLmRhdGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBhcHBseUZpbHRlcih2YWx1ZTogYW55LCBjb21wYXJhdG9yOiBhbnksIGlzSW5pdGlhbD86IGFueSkge1xuICAgIC8vIGlmICghY29tcGFyYXRvciB8fCAhdmFsdWUpIHtcbiAgICAvLyAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICBjb25zdCB7IGNvbHVtbiwgb25GaWx0ZXIsIGRlbGF5ID0gMCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBleGVjdXRlID0gKCkgPT4ge1xuICAgICAgLy8gSW5jb21pbmcgdmFsdWUgc2hvdWxkIGFsd2F5cyBiZSBhIHN0cmluZywgYW5kIHRoZSBkZWZhdWx0RGF0ZVxuICAgICAgLy8gYWJvdmUgaXMgaW1wbGVtZW50ZWQgYXMgYW4gZW1wdHkgc3RyaW5nLCBzbyB3ZSBjYW4ganVzdCBjaGVjayBmb3IgdGhhdC5cbiAgICAgIC8vIGluc3RlYWQgb2YgcGFyc2luZyBhbiBpbnZhbGlkIERhdGUuIFRoZSBmaWx0ZXIgZnVuY3Rpb24gd2lsbCBpbnRlcnByZXRcbiAgICAgIC8vIG51bGwgYXMgYW4gZW1wdHkgZGF0ZSBmaWVsZFxuICAgICAgY29uc3QgZGF0ZSA9IHZhbHVlID09PSBcIlwiID8gbnVsbCA6IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLkRBVEUsIGlzSW5pdGlhbCkoeyBkYXRlLCBjb21wYXJhdG9yIH0pO1xuICAgIH07XG4gICAgaWYgKGRlbGF5KSB7XG4gICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZXhlY3V0ZSgpO1xuICAgICAgfSwgZGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGVjdXRlKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGlkID0gbnVsbCxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgY29sdW1uOiB7IGRhdGFGaWVsZCwgdGV4dCB9LFxuICAgICAgc3R5bGUsXG4gICAgICBjb21wYXJhdG9yU3R5bGUsXG4gICAgICBkYXRlU3R5bGUsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgY29tcGFyYXRvckNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBkYXRlQ2xhc3NOYW1lID0gXCJcIixcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGNvbXBhcmF0b3JFbG1JZCA9IGBkYXRlLWZpbHRlci1jb21wYXJhdG9yLSR7ZGF0YUZpZWxkfSR7aWQgPyBgLSR7aWR9YCA6IFwiXCJcbiAgICAgIH1gO1xuICAgIGNvbnN0IGlucHV0RWxtSWQgPSBgZGF0ZS1maWx0ZXItY29sdW1uLSR7ZGF0YUZpZWxkfSR7aWQgPyBgLSR7aWR9YCA6IFwiXCJ9YDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICBjbGFzc05hbWU9e2BmaWx0ZXIgZGF0ZS1maWx0ZXIgJHtjbGFzc05hbWV9YH1cbiAgICAgICAgc3R5bGU9e3N0eWxlIGFzIGFueX1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXRlLWZpbHRlclwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmaWx0ZXItbGFiZWxcIiBodG1sRm9yPXtjb21wYXJhdG9yRWxtSWR9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5GaWx0ZXIgY29tcGFyYXRvcjwvc3Bhbj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICByZWY9eyhuKSA9PiAodGhpcy5kYXRlRmlsdGVyQ29tcGFyYXRvciA9IG4pfVxuICAgICAgICAgICAgaWQ9e2NvbXBhcmF0b3JFbG1JZH1cbiAgICAgICAgICAgIHN0eWxlPXtjb21wYXJhdG9yU3R5bGUgYXMgYW55fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgZGF0ZS1maWx0ZXItY29tcGFyYXRvciBmb3JtLWNvbnRyb2wgJHtjb21wYXJhdG9yQ2xhc3NOYW1lfWB9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZUNvbXBhcmF0b3J9XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdENvbXBhcmF0b3IoKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF0ZS1maWx0ZXItY29tcGFyYXRvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMuZ2V0Q29tcGFyYXRvck9wdGlvbnMoKX1cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGxhYmVsIGh0bWxGb3I9e2lucHV0RWxtSWR9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5FbnRlciAke3RleHR9PC9zcGFuPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVmPXsobikgPT4gKHRoaXMuaW5wdXREYXRlID0gbil9XG4gICAgICAgICAgICBpZD17aW5wdXRFbG1JZH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17YGZpbHRlciBkYXRlLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wgJHtkYXRlQ2xhc3NOYW1lfWB9XG4gICAgICAgICAgICBzdHlsZT17ZGF0ZVN0eWxlIGFzIGFueX1cbiAgICAgICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlRGF0ZX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlciB8fCBgRW50ZXIgJHt0ZXh0fS4uLmB9XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdERhdGUoKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF0ZS1maWx0ZXItaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbi8vIERhdGVGaWx0ZXIucHJvcFR5cGVzID0ge1xuLy8gICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgY29sdW1uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBmaWx0ZXJTdGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnNoYXBlKHtcbi8vICAgICBkYXRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0XSksXG4vLyAgICAgY29tcGFyYXRvcjogUHJvcFR5cGVzLm9uZU9mKFsuLi5sZWdhbENvbXBhcmF0b3JzLCAnJ10pXG4vLyAgIH0pLFxuLy8gICAvKiBlc2xpbnQgY29uc2lzdGVudC1yZXR1cm46IDAgKi9cbi8vICAgY29tcGFyYXRvcnM6IChwcm9wczogYW55LCBwcm9wTmFtZTogYW55KSA9PiB7XG4vLyAgICAgaWYgKCFwcm9wc1twcm9wTmFtZV0pIHtcbi8vICAgICAgIHJldHVybjtcbi8vICAgICB9XG4vLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wc1twcm9wTmFtZV0ubGVuZ3RoOyBpICs9IDEpIHtcbi8vICAgICAgIGxldCBjb21wYXJhdG9ySXNWYWxpZCA9IGZhbHNlO1xuLy8gICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZWdhbENvbXBhcmF0b3JzLmxlbmd0aDsgaiArPSAxKSB7XG4vLyAgICAgICAgIGlmIChsZWdhbENvbXBhcmF0b3JzW2pdID09PSBwcm9wc1twcm9wTmFtZV1baV0gfHwgcHJvcHNbcHJvcE5hbWVdW2ldID09PSAnJykge1xuLy8gICAgICAgICAgIGNvbXBhcmF0b3JJc1ZhbGlkID0gdHJ1ZTtcbi8vICAgICAgICAgICBicmVhaztcbi8vICAgICAgICAgfVxuLy8gICAgICAgfVxuLy8gICAgICAgaWYgKCFjb21wYXJhdG9ySXNWYWxpZCkge1xuLy8gICAgICAgICByZXR1cm4gbmV3IEVycm9yKGBEYXRlIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZC5cbi8vICAgICAgICAgICBVc2Ugb25seSAke2xlZ2FsQ29tcGFyYXRvcnN9YCk7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICB9LFxuLy8gICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjb21wYXJhdG9yU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGRhdGVTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBjb21wYXJhdG9yQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBkYXRlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBnZXRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuXG4vLyBEYXRlRmlsdGVyLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgZGVsYXk6IDAsXG4vLyAgIGRlZmF1bHRWYWx1ZToge1xuLy8gICAgIGRhdGU6IHVuZGVmaW5lZCxcbi8vICAgICBjb21wYXJhdG9yOiAnJ1xuLy8gICB9LFxuLy8gICBmaWx0ZXJTdGF0ZToge30sXG4vLyAgIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb246IGZhbHNlLFxuLy8gICBjb21wYXJhdG9yczogbGVnYWxDb21wYXJhdG9ycyxcbi8vICAgcGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbi8vICAgc3R5bGU6IHVuZGVmaW5lZCxcbi8vICAgY2xhc3NOYW1lOiAnJyxcbi8vICAgY29tcGFyYXRvclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNvbXBhcmF0b3JDbGFzc05hbWU6ICcnLFxuLy8gICBkYXRlU3R5bGU6IHVuZGVmaW5lZCxcbi8vICAgZGF0ZUNsYXNzTmFtZTogJycsXG4vLyAgIGlkOiBudWxsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlRmlsdGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9uczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uLy4uXCIpO1xudmFyIEVRID0gXCI9XCI7XG52YXIgTkUgPSBcIiE9XCI7XG52YXIgR1QgPSBcIj5cIjtcbnZhciBHRSA9IFwiPj1cIjtcbnZhciBMVCA9IFwiPFwiO1xudmFyIExFID0gXCI8PVwiO1xudmFyIGxlZ2FsQ29tcGFyYXRvcnMgPSBbRVEsIE5FLCBHVCwgR0UsIExULCBMRV07XG52YXIgTnVtYmVyRmlsdGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gTnVtYmVyRmlsdGVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOdW1iZXJGaWx0ZXIpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBOdW1iZXJGaWx0ZXIsIFtwcm9wc10pO1xuICAgIF90aGlzLmNvbXBhcmF0b3JzID0gcHJvcHMuY29tcGFyYXRvcnMgfHwgbGVnYWxDb21wYXJhdG9ycztcbiAgICBfdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICB2YXIgaXNTZWxlY3RlZCA9IHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMub3B0aW9ucyAmJiBpc1NlbGVjdGVkKSB7XG4gICAgICBpc1NlbGVjdGVkID0gcHJvcHMub3B0aW9ucy5pbmRleE9mKHByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIpID4gLTE7XG4gICAgfVxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZFxuICAgIH07XG4gICAgX3RoaXMub25DaGFuZ2VOdW1iZXIgPSBfdGhpcy5vbkNoYW5nZU51bWJlci5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZU51bWJlclNldCA9IF90aGlzLm9uQ2hhbmdlTnVtYmVyU2V0LmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uQ2hhbmdlQ29tcGFyYXRvciA9IF90aGlzLm9uQ2hhbmdlQ29tcGFyYXRvci5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKE51bWJlckZpbHRlciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhOdW1iZXJGaWx0ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wcy5jb2x1bW4sXG4gICAgICAgIG9uRmlsdGVyID0gX3RoaXMkcHJvcHMub25GaWx0ZXIsXG4gICAgICAgIGdldEZpbHRlciA9IF90aGlzJHByb3BzLmdldEZpbHRlcjtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlID09PSBcIlwiID8gRVEgOiB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgICB2YXIgbnVtYmVyID0gdGhpcy5udW1iZXJGaWx0ZXIudmFsdWU7XG4gICAgICBpZiAoY29tcGFyYXRvciAmJiBudW1iZXIpIHtcbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5OVU1CRVIsIHRydWUpKHtcbiAgICAgICAgICBudW1iZXI6IG51bWJlcixcbiAgICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgICAgaWYgKGdldEZpbHRlcikge1xuICAgICAgICBnZXRGaWx0ZXIoZnVuY3Rpb24gKGZpbHRlclZhbCkge1xuICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBmaWx0ZXJWYWwgIT09IFwiXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX3RoaXMyLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWUgPSBmaWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgICAgICBfdGhpczIubnVtYmVyRmlsdGVyLnZhbHVlID0gZmlsdGVyVmFsLm51bWJlcjtcbiAgICAgICAgICB2YXIgZm4gPSBmaWx0ZXJWYWwubnVtYmVyO1xuICAgICAgICAgIHZhciBmYyA9IGZpbHRlclZhbC5jb21wYXJhdG9yO1xuICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICAgICAgbnVtYmVyOiBmbixcbiAgICAgICAgICAgIGNvbXBhcmF0b3I6IGZjXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbkNoYW5nZU51bWJlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZU51bWJlcihlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGRlbGF5ID0gX3RoaXMkcHJvcHMyLmRlbGF5LFxuICAgICAgICBkZWxheSA9IF90aGlzJHByb3BzMiRkZWxheSA9PT0gdm9pZCAwID8gX18xLkZJTFRFUl9ERUxBWSA6IF90aGlzJHByb3BzMiRkZWxheSxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMyLmNvbHVtbixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczIub25GaWx0ZXI7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICAgIGlmIChjb21wYXJhdG9yID09PSBcIlwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB9XG4gICAgICB2YXIgdiA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbkZpbHRlcihjb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuTlVNQkVSKSh7XG4gICAgICAgICAgbnVtYmVyOiB2LFxuICAgICAgICAgIGNvbXBhcmF0b3I6IGNvbXBhcmF0b3JcbiAgICAgICAgfSk7XG4gICAgICB9LCBkZWxheSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ2hhbmdlTnVtYmVyU2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlTnVtYmVyU2V0KGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczMuY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzMy5vbkZpbHRlcjtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgICAgdmFyIHZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIlxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICAvLyBpZiAoY29tcGFyYXRvciA9PT0gJycpIHtcbiAgICAgIC8vICAgcmV0dXJuO1xuICAgICAgLy8gfVxuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICBudW1iZXI6IHZhbHVlLFxuICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25DaGFuZ2VDb21wYXJhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlQ29tcGFyYXRvcihlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHM0LmNvbHVtbixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczQub25GaWx0ZXI7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLm51bWJlckZpbHRlci52YWx1ZTtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAvLyBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAvLyAgIHJldHVybjtcbiAgICAgIC8vIH1cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5OVU1CRVIpKHtcbiAgICAgICAgbnVtYmVyOiB2YWx1ZSxcbiAgICAgICAgY29tcGFyYXRvcjogY29tcGFyYXRvclxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHRDb21wYXJhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlZmF1bHRDb21wYXJhdG9yKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzNSRkZWZhdWx0ViA9IF90aGlzJHByb3BzNS5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzNSRkZWZhdWx0ViA9PT0gdm9pZCAwID8ge1xuICAgICAgICAgIG51bWJlcjogdW5kZWZpbmVkLFxuICAgICAgICAgIGNvbXBhcmF0b3I6IFwiXCJcbiAgICAgICAgfSA6IF90aGlzJHByb3BzNSRkZWZhdWx0VixcbiAgICAgICAgX3RoaXMkcHJvcHM1JGZpbHRlclN0ID0gX3RoaXMkcHJvcHM1LmZpbHRlclN0YXRlLFxuICAgICAgICBmaWx0ZXJTdGF0ZSA9IF90aGlzJHByb3BzNSRmaWx0ZXJTdCA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wczUkZmlsdGVyU3Q7XG4gICAgICBpZiAoZmlsdGVyU3RhdGUgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHM2JGRlZmF1bHRWID0gX3RoaXMkcHJvcHM2LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHM2JGRlZmF1bHRWID09PSB2b2lkIDAgPyB7XG4gICAgICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tcGFyYXRvcjogXCJcIlxuICAgICAgICB9IDogX3RoaXMkcHJvcHM2JGRlZmF1bHRWLFxuICAgICAgICBfdGhpcyRwcm9wczYkZmlsdGVyU3QgPSBfdGhpcyRwcm9wczYuZmlsdGVyU3RhdGUsXG4gICAgICAgIGZpbHRlclN0YXRlID0gX3RoaXMkcHJvcHM2JGZpbHRlclN0ID09PSB2b2lkIDAgPyB7fSA6IF90aGlzJHByb3BzNiRmaWx0ZXJTdDtcbiAgICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlclN0YXRlLmZpbHRlclZhbC5udW1iZXI7XG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS5udW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5udW1iZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Q29tcGFyYXRvck9wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29tcGFyYXRvck9wdGlvbnMoKSB7XG4gICAgICB2YXIgb3B0aW9uVGFncyA9IFtdO1xuICAgICAgdmFyIF90aGlzJHByb3BzJHdpdGhvdXRFbSA9IHRoaXMucHJvcHMud2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbixcbiAgICAgICAgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbiA9IF90aGlzJHByb3BzJHdpdGhvdXRFbSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wcyR3aXRob3V0RW07XG4gICAgICBpZiAoIXdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24pIHtcbiAgICAgICAgb3B0aW9uVGFncy5wdXNoKHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgIGtleTogXCItMVwiXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb21wYXJhdG9ycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiBpLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbXBhcmF0b3JzW2ldXG4gICAgICAgIH0sIHRoaXMuY29tcGFyYXRvcnNbaV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25UYWdzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXROdW1iZXJPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE51bWJlck9wdGlvbnMoKSB7XG4gICAgICB2YXIgb3B0aW9uVGFncyA9IFtdO1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczcub3B0aW9ucyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHM3LmNvbHVtbixcbiAgICAgICAgX3RoaXMkcHJvcHM3JHdpdGhvdXRFID0gX3RoaXMkcHJvcHM3LndpdGhvdXRFbXB0eU51bWJlck9wdGlvbixcbiAgICAgICAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uID0gX3RoaXMkcHJvcHM3JHdpdGhvdXRFID09PSB2b2lkIDAgPyBmYWxzZSA6IF90aGlzJHByb3BzNyR3aXRob3V0RTtcbiAgICAgIGlmICghd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uKSB7XG4gICAgICAgIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICBrZXk6IFwiLTFcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIlxuICAgICAgICB9LCB0aGlzLnByb3BzLnBsYWNlaG9sZGVyIHx8IFwiU2VsZWN0IFwiLmNvbmNhdChjb2x1bW4udGV4dCwgXCIuLi5cIikpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiBpLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb25zW2ldXG4gICAgICAgIH0sIG9wdGlvbnNbaV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25UYWdzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhcHBseUZpbHRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhcHBseUZpbHRlcihmaWx0ZXJPYmopIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczguY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzOC5vbkZpbHRlcjtcbiAgICAgIHZhciBudW1iZXIgPSBmaWx0ZXJPYmoubnVtYmVyLFxuICAgICAgICBjb21wYXJhdG9yID0gZmlsdGVyT2JqLmNvbXBhcmF0b3I7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1NlbGVjdGVkOiBudW1iZXIgIT09IFwiXCJcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlID0gY29tcGFyYXRvcjtcbiAgICAgIHRoaXMubnVtYmVyRmlsdGVyLnZhbHVlID0gbnVtYmVyO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICBudW1iZXI6IG51bWJlcixcbiAgICAgICAgY29tcGFyYXRvcjogY29tcGFyYXRvclxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuRmlsdGVyZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczkuY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzOS5vbkZpbHRlcixcbiAgICAgICAgX3RoaXMkcHJvcHM5JGRlZmF1bHRWID0gX3RoaXMkcHJvcHM5LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHM5JGRlZmF1bHRWID09PSB2b2lkIDAgPyB7XG4gICAgICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tcGFyYXRvcjogXCJcIlxuICAgICAgICB9IDogX3RoaXMkcHJvcHM5JGRlZmF1bHRWO1xuICAgICAgdmFyIHZhbHVlID0gZGVmYXVsdFZhbHVlID8gZGVmYXVsdFZhbHVlLm51bWJlciA6IFwiXCI7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGRlZmF1bHRWYWx1ZSA/IGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yIDogXCJcIjtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2VsZWN0ZWQ6IHZhbHVlICE9PSBcIlwiXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZSA9IGNvbXBhcmF0b3I7XG4gICAgICB0aGlzLm51bWJlckZpbHRlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICBudW1iZXI6IHZhbHVlLFxuICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIGlzU2VsZWN0ZWQgPSB0aGlzLnN0YXRlLmlzU2VsZWN0ZWQ7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMwID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMwJGlkID0gX3RoaXMkcHJvcHMwLmlkLFxuICAgICAgICBpZCA9IF90aGlzJHByb3BzMCRpZCA9PT0gdm9pZCAwID8gbnVsbCA6IF90aGlzJHByb3BzMCRpZCxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMwLmNvbHVtbixcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMC5vcHRpb25zLFxuICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzMC5zdHlsZSxcbiAgICAgICAgX3RoaXMkcHJvcHMwJGNsYXNzTmFtID0gX3RoaXMkcHJvcHMwLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMwJGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMwJGNsYXNzTmFtLFxuICAgICAgICBudW1iZXJTdHlsZSA9IF90aGlzJHByb3BzMC5udW1iZXJTdHlsZSxcbiAgICAgICAgX3RoaXMkcHJvcHMwJG51bWJlckNsID0gX3RoaXMkcHJvcHMwLm51bWJlckNsYXNzTmFtZSxcbiAgICAgICAgbnVtYmVyQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMwJG51bWJlckNsID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMwJG51bWJlckNsLFxuICAgICAgICBjb21wYXJhdG9yU3R5bGUgPSBfdGhpcyRwcm9wczAuY29tcGFyYXRvclN0eWxlLFxuICAgICAgICBfdGhpcyRwcm9wczAkY29tcGFyYXQgPSBfdGhpcyRwcm9wczAuY29tcGFyYXRvckNsYXNzTmFtZSxcbiAgICAgICAgY29tcGFyYXRvckNsYXNzTmFtZSA9IF90aGlzJHByb3BzMCRjb21wYXJhdCA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMCRjb21wYXJhdCxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczAucGxhY2Vob2xkZXI7XG4gICAgICB2YXIgc2VsZWN0Q2xhc3MgPSBcIlxcbiAgICAgIHNlbGVjdC1maWx0ZXJcXG4gICAgICBudW1iZXItZmlsdGVyLWlucHV0XFxuICAgICAgZm9ybS1jb250cm9sXFxuICAgICAgXCIuY29uY2F0KG51bWJlckNsYXNzTmFtZSwgXCJcXG4gICAgICBcIikuY29uY2F0KCFpc1NlbGVjdGVkID8gXCJwbGFjZWhvbGRlci1zZWxlY3RlZFwiIDogXCJcIiwgXCJcXG4gICAgXCIpO1xuICAgICAgdmFyIGNvbXBhcmF0b3JFbG1JZCA9IFwibnVtYmVyLWZpbHRlci1jb21wYXJhdG9yLVwiLmNvbmNhdChjb2x1bW4uZGF0YUZpZWxkKS5jb25jYXQoaWQgPyBcIi1cIi5jb25jYXQoaWQpIDogXCJcIik7XG4gICAgICB2YXIgaW5wdXRFbG1JZCA9IFwibnVtYmVyLWZpbHRlci1jb2x1bW4tXCIuY29uY2F0KGNvbHVtbi5kYXRhRmllbGQpLmNvbmNhdChpZCA/IFwiLVwiLmNvbmNhdChpZCkgOiBcIlwiKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgICAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZTogXCJmaWx0ZXIgbnVtYmVyLWZpbHRlciBcIi5jb25jYXQoY2xhc3NOYW1lKSxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwibnVtYmVyLWZpbHRlclwiXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyLWxhYmVsXCIsXG4gICAgICAgIGh0bWxGb3I6IGNvbXBhcmF0b3JFbG1JZFxuICAgICAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwic3Itb25seVwiXG4gICAgICB9LCBcIkZpbHRlciBjb21wYXJhdG9yXCIpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIHJldHVybiBfdGhpczMubnVtYmVyRmlsdGVyQ29tcGFyYXRvciA9IG47XG4gICAgICAgIH0sXG4gICAgICAgIHN0eWxlOiBjb21wYXJhdG9yU3R5bGUsXG4gICAgICAgIGlkOiBjb21wYXJhdG9yRWxtSWQsXG4gICAgICAgIGNsYXNzTmFtZTogXCJudW1iZXItZmlsdGVyLWNvbXBhcmF0b3IgZm9ybS1jb250cm9sIFwiLmNvbmNhdChjb21wYXJhdG9yQ2xhc3NOYW1lKSxcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2VDb21wYXJhdG9yLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZ2V0RGVmYXVsdENvbXBhcmF0b3IoKSxcbiAgICAgICAgXCJkYXRhLXRlc3RpZFwiOiBcIm51bWJlci1maWx0ZXItY29tcGFyYXRvclwiXG4gICAgICB9LCB0aGlzLmdldENvbXBhcmF0b3JPcHRpb25zKCkpKSwgb3B0aW9ucyA/IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJmaWx0ZXItbGFiZWxcIixcbiAgICAgICAgaHRtbEZvcjogaW5wdXRFbG1JZFxuICAgICAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwic3Itb25seVwiXG4gICAgICB9LCBcIlNlbGVjdCBcIi5jb25jYXQoY29sdW1uLnRleHQpKSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG4pIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMzLm51bWJlckZpbHRlciA9IG47XG4gICAgICAgIH0sXG4gICAgICAgIGlkOiBpbnB1dEVsbUlkLFxuICAgICAgICBzdHlsZTogbnVtYmVyU3R5bGUsXG4gICAgICAgIGNsYXNzTmFtZTogc2VsZWN0Q2xhc3MsXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlTnVtYmVyU2V0LFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCksXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJudW1iZXItZmlsdGVyLXNlbGVjdFwiXG4gICAgICB9LCB0aGlzLmdldE51bWJlck9wdGlvbnMoKSkpIDogcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHtcbiAgICAgICAgaHRtbEZvcjogaW5wdXRFbG1JZFxuICAgICAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwic3Itb25seVwiXG4gICAgICB9LCBcIkVudGVyIFwiLmNvbmNhdChjb2x1bW4udGV4dCkpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihuKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMy5udW1iZXJGaWx0ZXIgPSBuO1xuICAgICAgICB9LFxuICAgICAgICBpZDogaW5wdXRFbG1JZCxcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgc3R5bGU6IG51bWJlclN0eWxlLFxuICAgICAgICBjbGFzc05hbWU6IFwibnVtYmVyLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wgXCIuY29uY2F0KG51bWJlckNsYXNzTmFtZSksXG4gICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciB8fCBcIkVudGVyIFwiLmNvbmNhdChjb2x1bW4udGV4dCwgXCIuLi5cIiksXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlTnVtYmVyLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCksXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJudW1iZXItZmlsdGVyLWlucHV0XCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTsgLy8gTnVtYmVyRmlsdGVyLnByb3BUeXBlcyA9IHtcbi8vICAgb25GaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZmlsdGVyU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zaGFwZSh7XG4vLyAgICAgbnVtYmVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4vLyAgICAgY29tcGFyYXRvcjogUHJvcFR5cGVzLm9uZU9mKFsuLi5sZWdhbENvbXBhcmF0b3JzLCBcIlwiXSksXG4vLyAgIH0pLFxuLy8gICBkZWxheTogUHJvcFR5cGVzLm51bWJlcixcbi8vICAgLyogZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOiAwICovXG4vLyAgIGNvbXBhcmF0b3JzOiAocHJvcHM6IGFueSwgcHJvcE5hbWU6IGFueSkgPT4ge1xuLy8gICAgIGlmICghcHJvcHNbcHJvcE5hbWVdKSB7XG4vLyAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHNbcHJvcE5hbWVdLmxlbmd0aDsgaSArPSAxKSB7XG4vLyAgICAgICBsZXQgY29tcGFyYXRvcklzVmFsaWQgPSBmYWxzZTtcbi8vICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVnYWxDb21wYXJhdG9ycy5sZW5ndGg7IGogKz0gMSkge1xuLy8gICAgICAgICBpZiAoXG4vLyAgICAgICAgICAgbGVnYWxDb21wYXJhdG9yc1tqXSA9PT0gcHJvcHNbcHJvcE5hbWVdW2ldIHx8XG4vLyAgICAgICAgICAgcHJvcHNbcHJvcE5hbWVdW2ldID09PSBcIlwiXG4vLyAgICAgICAgICkge1xuLy8gICAgICAgICAgIGNvbXBhcmF0b3JJc1ZhbGlkID0gdHJ1ZTtcbi8vICAgICAgICAgICBicmVhaztcbi8vICAgICAgICAgfVxuLy8gICAgICAgfVxuLy8gICAgICAgaWYgKCFjb21wYXJhdG9ySXNWYWxpZCkge1xuLy8gICAgICAgICByZXR1cm4gbmV3IEVycm9yKGBOdW1iZXIgY29tcGFyYXRvciBwcm92aWRlZCBpcyBub3Qgc3VwcG9ydGVkLlxuLy8gICAgICAgICAgIFVzZSBvbmx5ICR7bGVnYWxDb21wYXJhdG9yc31gKTtcbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgIH0sXG4vLyAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgY29tcGFyYXRvclN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjb21wYXJhdG9yQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBudW1iZXJTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgbnVtYmVyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBnZXRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLFxuLy8gfTtcbi8vIE51bWJlckZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGRlbGF5OiBGSUxURVJfREVMQVksXG4vLyAgIG9wdGlvbnM6IHVuZGVmaW5lZCxcbi8vICAgZGVmYXVsdFZhbHVlOiB7XG4vLyAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4vLyAgICAgY29tcGFyYXRvcjogXCJcIixcbi8vICAgfSxcbi8vICAgZmlsdGVyU3RhdGU6IHt9LFxuLy8gICB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uOiBmYWxzZSxcbi8vICAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uOiBmYWxzZSxcbi8vICAgY29tcGFyYXRvcnM6IGxlZ2FsQ29tcGFyYXRvcnMsXG4vLyAgIHBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4vLyAgIHN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vICAgY29tcGFyYXRvclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNvbXBhcmF0b3JDbGFzc05hbWU6IFwiXCIsXG4vLyAgIG51bWJlclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIG51bWJlckNsYXNzTmFtZTogXCJcIixcbi8vICAgaWQ6IG51bGwsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBOdW1iZXJGaWx0ZXI7IiwiLyogZXNsaW50IGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9uczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZJTFRFUl9ERUxBWSwgRklMVEVSX1RZUEVTLCBOdW1iZXJGaWx0ZXJQcm9wcyB9IGZyb20gXCIuLi8uLlwiO1xuXG5jb25zdCBFUSA9IFwiPVwiO1xuY29uc3QgTkUgPSBcIiE9XCI7XG5jb25zdCBHVCA9IFwiPlwiO1xuY29uc3QgR0UgPSBcIj49XCI7XG5jb25zdCBMVCA9IFwiPFwiO1xuY29uc3QgTEUgPSBcIjw9XCI7XG5cbmNvbnN0IGxlZ2FsQ29tcGFyYXRvcnMgPSBbRVEsIE5FLCBHVCwgR0UsIExULCBMRV07XG5cbmludGVyZmFjZSBOdW1iZXJGaWx0ZXJTdGF0ZSB7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5cbmNsYXNzIE51bWJlckZpbHRlciBleHRlbmRzIENvbXBvbmVudDxOdW1iZXJGaWx0ZXJQcm9wcywgTnVtYmVyRmlsdGVyU3RhdGU+IHtcbiAgY29tcGFyYXRvcnM6IGFueVtdO1xuICBudW1iZXJGaWx0ZXI6IGFueTtcbiAgbnVtYmVyRmlsdGVyQ29tcGFyYXRvcjogYW55O1xuICB0aW1lb3V0OiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IE51bWJlckZpbHRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29tcGFyYXRvcnMgPSBwcm9wcy5jb21wYXJhdG9ycyB8fCBsZWdhbENvbXBhcmF0b3JzO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgbGV0IGlzU2VsZWN0ZWQgPVxuICAgICAgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMub3B0aW9ucyAmJiBpc1NlbGVjdGVkKSB7XG4gICAgICBpc1NlbGVjdGVkID0gcHJvcHMub3B0aW9ucy5pbmRleE9mKHByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIpID4gLTE7XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSB7IGlzU2VsZWN0ZWQgfTtcbiAgICB0aGlzLm9uQ2hhbmdlTnVtYmVyID0gdGhpcy5vbkNoYW5nZU51bWJlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25DaGFuZ2VOdW1iZXJTZXQgPSB0aGlzLm9uQ2hhbmdlTnVtYmVyU2V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkNoYW5nZUNvbXBhcmF0b3IgPSB0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBjb2x1bW4sIG9uRmlsdGVyLCBnZXRGaWx0ZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY29tcGFyYXRvciA9XG4gICAgICB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWUgPT09IFwiXCJcbiAgICAgICAgPyBFUVxuICAgICAgICA6IHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICBjb25zdCBudW1iZXIgPSB0aGlzLm51bWJlckZpbHRlci52YWx1ZTtcbiAgICBpZiAoY29tcGFyYXRvciAmJiBudW1iZXIpIHtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLk5VTUJFUiwgdHJ1ZSkoeyBudW1iZXIsIGNvbXBhcmF0b3IgfSk7XG4gICAgfVxuXG4gICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgIGdldEZpbHRlcigoZmlsdGVyVmFsOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiBmaWx0ZXJWYWwgIT09IFwiXCIgfSkpO1xuICAgICAgICB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWUgPSBmaWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgICAgdGhpcy5udW1iZXJGaWx0ZXIudmFsdWUgPSBmaWx0ZXJWYWwubnVtYmVyO1xuXG4gICAgICAgIGNvbnN0IGZuID0gZmlsdGVyVmFsLm51bWJlcjtcbiAgICAgICAgY29uc3QgZmMgPSBmaWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLk5VTUJFUikoeyBudW1iZXI6IGZuLCBjb21wYXJhdG9yOiBmYyB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgb25DaGFuZ2VOdW1iZXIoZTogYW55KSB7XG4gICAgY29uc3QgeyBkZWxheSA9IEZJTFRFUl9ERUxBWSwgY29sdW1uLCBvbkZpbHRlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb21wYXJhdG9yID0gdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgIGlmIChjb21wYXJhdG9yID09PSBcIlwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgICBjb25zdCB2ID0gZS50YXJnZXQudmFsdWU7XG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBUT0RPXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBvbkZpbHRlcihjb2x1bW4sIEZJTFRFUl9UWVBFUy5OVU1CRVIpKHsgbnVtYmVyOiB2LCBjb21wYXJhdG9yIH0pO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxuXG4gIG9uQ2hhbmdlTnVtYmVyU2V0KGU6IGFueSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCBvbkZpbHRlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb21wYXJhdG9yID0gdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGUudGFyZ2V0O1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgaXNTZWxlY3RlZDogdmFsdWUgIT09IFwiXCIgfSkpO1xuICAgIC8vIGlmIChjb21wYXJhdG9yID09PSAnJykge1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICAvLyBUT0RPXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLk5VTUJFUikoeyBudW1iZXI6IHZhbHVlLCBjb21wYXJhdG9yIH0pO1xuICB9XG5cbiAgb25DaGFuZ2VDb21wYXJhdG9yKGU6IGFueSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCBvbkZpbHRlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubnVtYmVyRmlsdGVyLnZhbHVlO1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAvLyBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuTlVNQkVSKSh7IG51bWJlcjogdmFsdWUsIGNvbXBhcmF0b3IgfSk7XG4gIH1cblxuICBnZXREZWZhdWx0Q29tcGFyYXRvcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSB7IG51bWJlcjogdW5kZWZpbmVkLCBjb21wYXJhdG9yOiBcIlwiIH0sXG4gICAgICBmaWx0ZXJTdGF0ZSA9IHt9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwpIHtcbiAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUuY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldERlZmF1bHRWYWx1ZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSB7IG51bWJlcjogdW5kZWZpbmVkLCBjb21wYXJhdG9yOiBcIlwiIH0sXG4gICAgICBmaWx0ZXJTdGF0ZSA9IHt9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwpIHtcbiAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwubnVtYmVyO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS5udW1iZXIpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUubnVtYmVyO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldENvbXBhcmF0b3JPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvblRhZ3MgPSBbXTtcbiAgICBjb25zdCB7IHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24gPSBmYWxzZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoIXdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24pIHtcbiAgICAgIG9wdGlvblRhZ3MucHVzaCg8b3B0aW9uIGtleT1cIi0xXCIgLz4pO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29tcGFyYXRvcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIG9wdGlvblRhZ3MucHVzaChcbiAgICAgICAgPG9wdGlvbiBrZXk9e2l9IHZhbHVlPXt0aGlzLmNvbXBhcmF0b3JzW2ldfT5cbiAgICAgICAgICB7dGhpcy5jb21wYXJhdG9yc1tpXX1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgfVxuXG4gIGdldE51bWJlck9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9uVGFncyA9IFtdO1xuICAgIGNvbnN0IHsgb3B0aW9ucywgY29sdW1uLCB3aXRob3V0RW1wdHlOdW1iZXJPcHRpb24gPSBmYWxzZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoIXdpdGhvdXRFbXB0eU51bWJlck9wdGlvbikge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT1cIi0xXCIgdmFsdWU9XCJcIj5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5wbGFjZWhvbGRlciB8fCBgU2VsZWN0ICR7Y29sdW1uLnRleHR9Li4uYH1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IChvcHRpb25zIGFzIG51bWJlcltdKS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT17aX0gdmFsdWU9eyhvcHRpb25zIGFzIG51bWJlcltdKVtpXX0+XG4gICAgICAgICAgeyhvcHRpb25zIGFzIG51bWJlcltdKVtpXX1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKGZpbHRlck9iajogYW55KSB7XG4gICAgY29uc3QgeyBjb2x1bW4sIG9uRmlsdGVyIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgbnVtYmVyLCBjb21wYXJhdG9yIH0gPSBmaWx0ZXJPYmo7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiBudW1iZXIgIT09IFwiXCIgfSkpO1xuICAgIHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZSA9IGNvbXBhcmF0b3I7XG4gICAgdGhpcy5udW1iZXJGaWx0ZXIudmFsdWUgPSBudW1iZXI7XG4gICAgLy8gVE9ET1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvbkZpbHRlcihjb2x1bW4sIEZJTFRFUl9UWVBFUy5OVU1CRVIpKHsgbnVtYmVyLCBjb21wYXJhdG9yIH0pO1xuICB9XG5cbiAgY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb2x1bW4sXG4gICAgICBvbkZpbHRlcixcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHsgbnVtYmVyOiB1bmRlZmluZWQsIGNvbXBhcmF0b3I6IFwiXCIgfSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSA/IGRlZmF1bHRWYWx1ZS5udW1iZXIgOiBcIlwiO1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSBkZWZhdWx0VmFsdWUgPyBkZWZhdWx0VmFsdWUuY29tcGFyYXRvciA6IFwiXCI7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIiB9KSk7XG4gICAgdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlID0gY29tcGFyYXRvcjtcbiAgICB0aGlzLm51bWJlckZpbHRlci52YWx1ZSA9IHZhbHVlO1xuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuTlVNQkVSKSh7IG51bWJlcjogdmFsdWUsIGNvbXBhcmF0b3IgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpc1NlbGVjdGVkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHtcbiAgICAgIGlkID0gbnVsbCxcbiAgICAgIGNvbHVtbixcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzdHlsZSxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBudW1iZXJTdHlsZSxcbiAgICAgIG51bWJlckNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBjb21wYXJhdG9yU3R5bGUsXG4gICAgICBjb21wYXJhdG9yQ2xhc3NOYW1lID0gXCJcIixcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHNlbGVjdENsYXNzID0gYFxuICAgICAgc2VsZWN0LWZpbHRlclxuICAgICAgbnVtYmVyLWZpbHRlci1pbnB1dFxuICAgICAgZm9ybS1jb250cm9sXG4gICAgICAke251bWJlckNsYXNzTmFtZX1cbiAgICAgICR7IWlzU2VsZWN0ZWQgPyBcInBsYWNlaG9sZGVyLXNlbGVjdGVkXCIgOiBcIlwifVxuICAgIGA7XG5cbiAgICBjb25zdCBjb21wYXJhdG9yRWxtSWQgPSBgbnVtYmVyLWZpbHRlci1jb21wYXJhdG9yLSR7Y29sdW1uLmRhdGFGaWVsZH0ke2lkID8gYC0ke2lkfWAgOiBcIlwiXG4gICAgICB9YDtcbiAgICBjb25zdCBpbnB1dEVsbUlkID0gYG51bWJlci1maWx0ZXItY29sdW1uLSR7Y29sdW1uLmRhdGFGaWVsZH0ke2lkID8gYC0ke2lkfWAgOiBcIlwiXG4gICAgICB9YDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICBjbGFzc05hbWU9e2BmaWx0ZXIgbnVtYmVyLWZpbHRlciAke2NsYXNzTmFtZX1gfVxuICAgICAgICBzdHlsZT17c3R5bGUgYXMgYW55fVxuICAgICAgICBkYXRhLXRlc3RpZD1cIm51bWJlci1maWx0ZXJcIlxuICAgICAgPlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZmlsdGVyLWxhYmVsXCIgaHRtbEZvcj17Y29tcGFyYXRvckVsbUlkfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+RmlsdGVyIGNvbXBhcmF0b3I8L3NwYW4+XG4gICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgcmVmPXsobikgPT4gKHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvciA9IG4pfVxuICAgICAgICAgICAgc3R5bGU9e2NvbXBhcmF0b3JTdHlsZSBhcyBhbnl9XG4gICAgICAgICAgICBpZD17Y29tcGFyYXRvckVsbUlkfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgbnVtYmVyLWZpbHRlci1jb21wYXJhdG9yIGZvcm0tY29udHJvbCAke2NvbXBhcmF0b3JDbGFzc05hbWV9YH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvcn1cbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5nZXREZWZhdWx0Q29tcGFyYXRvcigpfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJudW1iZXItZmlsdGVyLWNvbXBhcmF0b3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLmdldENvbXBhcmF0b3JPcHRpb25zKCl9XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIHtvcHRpb25zID8gKFxuICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmaWx0ZXItbGFiZWxcIiBodG1sRm9yPXtpbnB1dEVsbUlkfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj57YFNlbGVjdCAke2NvbHVtbi50ZXh0fWB9PC9zcGFuPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICByZWY9eyhuKSA9PiAodGhpcy5udW1iZXJGaWx0ZXIgPSBuKX1cbiAgICAgICAgICAgICAgaWQ9e2lucHV0RWxtSWR9XG4gICAgICAgICAgICAgIHN0eWxlPXtudW1iZXJTdHlsZSBhcyBhbnl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c2VsZWN0Q2xhc3N9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlTnVtYmVyU2V0fVxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdFZhbHVlKCl9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibnVtYmVyLWZpbHRlci1zZWxlY3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dGhpcy5nZXROdW1iZXJPcHRpb25zKCl9XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxsYWJlbCBodG1sRm9yPXtpbnB1dEVsbUlkfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj57YEVudGVyICR7Y29sdW1uLnRleHR9YH08L3NwYW4+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgcmVmPXsobikgPT4gKHRoaXMubnVtYmVyRmlsdGVyID0gbil9XG4gICAgICAgICAgICAgIGlkPXtpbnB1dEVsbUlkfVxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgc3R5bGU9e251bWJlclN0eWxlIGFzIGFueX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgbnVtYmVyLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wgJHtudW1iZXJDbGFzc05hbWV9YH1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyIHx8IGBFbnRlciAke2NvbHVtbi50ZXh0fS4uLmB9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlTnVtYmVyfVxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdFZhbHVlKCl9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibnVtYmVyLWZpbHRlci1pbnB1dFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbi8vIE51bWJlckZpbHRlci5wcm9wVHlwZXMgPSB7XG4vLyAgIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGZpbHRlclN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubnVtYmVyKSxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuc2hhcGUoe1xuLy8gICAgIG51bWJlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuLy8gICAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihbLi4ubGVnYWxDb21wYXJhdG9ycywgXCJcIl0pLFxuLy8gICB9KSxcbi8vICAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4vLyAgIC8qIGVzbGludCBjb25zaXN0ZW50LXJldHVybjogMCAqL1xuLy8gICBjb21wYXJhdG9yczogKHByb3BzOiBhbnksIHByb3BOYW1lOiBhbnkpID0+IHtcbi8vICAgICBpZiAoIXByb3BzW3Byb3BOYW1lXSkge1xuLy8gICAgICAgcmV0dXJuO1xuLy8gICAgIH1cbi8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzW3Byb3BOYW1lXS5sZW5ndGg7IGkgKz0gMSkge1xuLy8gICAgICAgbGV0IGNvbXBhcmF0b3JJc1ZhbGlkID0gZmFsc2U7XG4vLyAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlZ2FsQ29tcGFyYXRvcnMubGVuZ3RoOyBqICs9IDEpIHtcbi8vICAgICAgICAgaWYgKFxuLy8gICAgICAgICAgIGxlZ2FsQ29tcGFyYXRvcnNbal0gPT09IHByb3BzW3Byb3BOYW1lXVtpXSB8fFxuLy8gICAgICAgICAgIHByb3BzW3Byb3BOYW1lXVtpXSA9PT0gXCJcIlxuLy8gICAgICAgICApIHtcbi8vICAgICAgICAgICBjb21wYXJhdG9ySXNWYWxpZCA9IHRydWU7XG4vLyAgICAgICAgICAgYnJlYWs7XG4vLyAgICAgICAgIH1cbi8vICAgICAgIH1cbi8vICAgICAgIGlmICghY29tcGFyYXRvcklzVmFsaWQpIHtcbi8vICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihgTnVtYmVyIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZC5cbi8vICAgICAgICAgICBVc2Ugb25seSAke2xlZ2FsQ29tcGFyYXRvcnN9YCk7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICB9LFxuLy8gICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIHdpdGhvdXRFbXB0eU51bWJlck9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGNvbXBhcmF0b3JTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY29tcGFyYXRvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgbnVtYmVyU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIG51bWJlckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG5cbi8vIE51bWJlckZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGRlbGF5OiBGSUxURVJfREVMQVksXG4vLyAgIG9wdGlvbnM6IHVuZGVmaW5lZCxcbi8vICAgZGVmYXVsdFZhbHVlOiB7XG4vLyAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4vLyAgICAgY29tcGFyYXRvcjogXCJcIixcbi8vICAgfSxcbi8vICAgZmlsdGVyU3RhdGU6IHt9LFxuLy8gICB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uOiBmYWxzZSxcbi8vICAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uOiBmYWxzZSxcbi8vICAgY29tcGFyYXRvcnM6IGxlZ2FsQ29tcGFyYXRvcnMsXG4vLyAgIHBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4vLyAgIHN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vICAgY29tcGFyYXRvclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNvbXBhcmF0b3JDbGFzc05hbWU6IFwiXCIsXG4vLyAgIG51bWJlclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIG51bWJlckNsYXNzTmFtZTogXCJcIixcbi8vICAgaWQ6IG51bGwsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBOdW1iZXJGaWx0ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjg0KTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fIiwiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX2RlZmluZVByb3BlcnRpZXMiLCJlIiwiciIsInQiLCJsZW5ndGgiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiaSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl90b1ByaW1pdGl2ZSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJSZWZlcmVuY2VFcnJvciIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiYXBwbHkiLCJCb29sZWFuIiwidmFsdWVPZiIsInNldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJiaW5kIiwiX19wcm90b19fIiwiX3NldFByb3RvdHlwZU9mIiwiX19pbXBvcnREZWZhdWx0IiwibW9kIiwiX19lc01vZHVsZSIsInZhbHVlIiwicHJvcF90eXBlc18xIiwicmVhY3RfMSIsIl9fMSIsImZpbHRlcl8xIiwiXyIsImlzUmVtb3RlRmlsdGVyaW5nIiwiaGFuZGxlRmlsdGVyQ2hhbmdlIiwiRmlsdGVyQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJGaWx0ZXJQcm92aWRlciIsIl9yZWFjdF8xJGRlZmF1bHQkQ29tcCIsInByb3BzIiwiX3RoaXMiLCJhIiwibiIsIl9jbGFzc0NhbGxDaGVjayIsInRoaXMiLCJjdXJyRmlsdGVycyIsImNsZWFyRmlsdGVycyIsIm9uRmlsdGVyIiwiZG9GaWx0ZXIiLCJvbkV4dGVybmFsRmlsdGVyIiwiZGF0YSIsImlzRW1pdERhdGFDaGFuZ2UiLCJjcmVhdGUiLCJfaW5oZXJpdHMiLCJrZXlzIiwiY29sdW1uIiwiZmlsdGVyVHlwZSIsIl90aGlzMiIsImluaXRpYWxpemUiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJmaWx0ZXJWYWwiLCJhc3NpZ24iLCJkYXRhRmllbGQiLCJmaWx0ZXIiLCJpc0RlZmluZWQiLCJfZmlsdGVyJHByb3BzIiwiX2ZpbHRlciRwcm9wcyRjb21wYXJhIiwiY29tcGFyYXRvciIsIkZJTFRFUl9UWVBFUyIsIlNFTEVDVCIsIkVRIiwiTElLRSIsIl9maWx0ZXIkcHJvcHMkY2FzZVNlbiIsImNhc2VTZW5zaXRpdmUiLCJjbGVhciIsImZvcmNlVXBkYXRlIiwiX3RoaXMzIiwibmV4dFByb3BzIiwibmV4dFN0YXRlIiwibmV4dENvbnRleHQiLCJpc0VxdWFsIiwiaWdub3JlRW1pdERhdGFDaGFuZ2UiLCJkYXRhQ2hhbmdlTGlzdGVuZXIiLCJjb2x1bW5zIiwicmVzdWx0IiwiZmlsdGVycyIsImFmdGVyRmlsdGVyIiwiZW1pdCIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciIsImNoaWxkcmVuIiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwiYXJyYXkiLCJpc1JlcXVpcmVkIiwib2JqZWN0IiwiQ29uc3VtZXIiLCJfZXhjbHVkZWQiLCJvd25LZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfb3duS2V5cyIsIl9fY3JlYXRlQmluZGluZyIsIm0iLCJrIiwiazIiLCJkZXNjIiwiZ2V0IiwiX19zZXRNb2R1bGVEZWZhdWx0IiwidiIsIl9faW1wb3J0U3RhciIsImdldE93blByb3BlcnR5TmFtZXMiLCJhciIsImhhc093blByb3BlcnR5IiwiU2VsZWN0RmlsdGVyIiwiX3JlYWN0XzEkQ29tcG9uZW50Iiwib3B0aW9ucyIsImdldE9wdGlvbnMiLCJpc1NlbGVjdGVkIiwiZ2V0RGVmYXVsdFZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwiX3JlZiIsImxhYmVsIiwibWFwIiwiX3JlZjIiLCJzdGF0ZSIsIl90aGlzJHByb3BzIiwiZ2V0RmlsdGVyIiwic2VsZWN0SW5wdXQiLCJzZXRTdGF0ZSIsInByZXZQcm9wcyIsIm5lZWRGaWx0ZXIiLCJfdGhpcyRwcm9wczIiLCJkZWZhdWx0VmFsdWUiLCJuZXh0T3B0aW9ucyIsImN1cnJPcHRzIiwicHJldk9wdHMiLCJfaSIsIm9wdGlvbnNFcXVhbHMiLCJfdGhpcyRwcm9wczMiLCJmaWx0ZXJTdGF0ZSIsInRhcmdldCIsIm9wdGlvblRhZ3MiLCJfdGhpcyRwcm9wczQiLCJwbGFjZWhvbGRlciIsIndpdGhvdXRFbXB0eU9wdGlvbiIsImNvbmNhdCIsInRleHQiLCJfcmVmMyIsIl90aGlzJHByb3BzNSIsImlkIiwic3R5bGUiLCJjbGFzc05hbWUiLCJyZXN0IiwiaW5kZXhPZiIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJzZWxlY3RDbGFzcyIsImVsbUlkIiwiaHRtbEZvciIsInJlZiIsIm9uQ2hhbmdlIiwib25DbGljayIsInN0b3BQcm9wYWdhdGlvbiIsInJlbmRlck9wdGlvbnMiLCJmaWx0ZXJGYWN0b3J5IiwiZmlsdGVyQnlBcnJheSIsImZpbHRlckJ5RGF0ZSIsImZpbHRlckJ5TnVtYmVyIiwiZmlsdGVyQnlUZXh0IiwiY3VzdG9tRmlsdGVyVmFsdWUiLCJfcmVmJGZpbHRlclZhbCIsInVzZXJJbnB1dCIsIl9yZWYkY29tcGFyYXRvciIsInRvU3RyaW5nIiwicm93IiwiY2VsbCIsImNlbGxTdHIiLCJpbmNsdWRlcyIsInRvTG9jYWxlVXBwZXJDYXNlIiwiX3JlZjIkZmlsdGVyVmFsIiwibnVtYmVyIiwiR1QiLCJHRSIsIkxUIiwiTEUiLCJORSIsImNvbnNvbGUiLCJlcnJvciIsIl9yZWYzJGZpbHRlclZhbCIsImRhdGUiLCJmaWx0ZXJEYXRlIiwiZ2V0VVRDRGF0ZSIsImZpbHRlck1vbnRoIiwiZ2V0VVRDTW9udGgiLCJmaWx0ZXJZZWFyIiwiZ2V0VVRDRnVsbFllYXIiLCJ2YWxpZCIsIkRhdGUiLCJ0YXJnZXREYXRlIiwidGFyZ2V0TW9udGgiLCJ0YXJnZXRZZWFyIiwiX3JlZjQiLCJyZWZpbmVkRmlsdGVyVmFsIiwieCIsInNvbWUiLCJpdGVtIiwiTVVMVElTRUxFQ1QiLCJOVU1CRVIiLCJEQVRFIiwiVEVYVCIsImZpbHRlckZuIiwiY3VycmVudFJlc3VsdCIsImZpbHRlclZhbHVlIiwiY3VzdG9tRmlsdGVyIiwiZmlsdGVyT2JqIiwiZ2V0U2VsZWN0aW9ucyIsImNvbnRhaW5lciIsInNlbGVjdGVkT3B0aW9ucyIsImZyb20iLCJzZWxlY3Rpb25zIiwidG90YWxMZW4iLCJvcHRpb24iLCJzZWxlY3RlZCIsIk11bHRpU2VsZWN0RmlsdGVyIiwic3VwZXIiLCJhcHBseUZpbHRlciIsImNvbXBvbmVudERpZE1vdW50IiwiY29tcG9uZW50RGlkVXBkYXRlIiwiY2xlYW5GaWx0ZXJlZCIsInJlbmRlciIsIm11bHRpcGxlIiwiZGF0ZUZpbHRlciIsIm51bWJlckZpbHRlciIsIm11bHRpU2VsZWN0RmlsdGVyIiwic2VsZWN0RmlsdGVyIiwidGV4dEZpbHRlciIsIkNvbXBhcmF0b3JOdW1iZXIiLCJGSUxURVJfREVMQVkiLCJkYXRlXzEiLCJtdWx0aXNlbGVjdF8xIiwibnVtYmVyXzEiLCJzZWxlY3RfMSIsInRleHRfMSIsImNvbnRleHRfMSIsIkZpbHRlciIsIlRleHRGaWx0ZXIiLCJoYW5kbGVDbGljayIsInRpbWVvdXQiLCJpbnB1dCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiY2xlYW5UaW1lciIsIm5leHRWYWx1ZSIsInNldFRpbWVvdXQiLCJkZWxheSIsImNsZWFyVGltZW91dCIsImZpbHRlclRleHQiLCJ0eXBlIiwiX3Byb3BzJGRlZmF1bHRWYWx1ZSIsIl90aGlzJHByb3BzJGZpbHRlclN0YSIsIl90aGlzJHByb3BzJGRlZmF1bHRWYSIsIl90aGlzJHByb3BzMiR3aXRob3V0RSIsIl90aGlzJHByb3BzMiRkZWZhdWx0ViIsIl90aGlzJHByb3BzMyRpZCIsIl90aGlzJHByb3BzMyRjbGFzc05hbSIsIl90aGlzJHByb3BzMyRjb21wYXJhdCIsImdldEZpbHRlcmVkIiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwiX3RoaXM0IiwiX3RoaXMkcHJvcHMkZGVmYXVsdFZhMiIsIl90aGlzNSIsIl90aGlzJHByb3BzMiRpZCIsIl90aGlzJHByb3BzMiRjb2x1bW4iLCJsZWdhbENvbXBhcmF0b3JzIiwiZGF0ZVBhcnNlciIsImQiLCJzbGljZSIsIkRhdGVGaWx0ZXIiLCJjb21wYXJhdG9ycyIsIm9uQ2hhbmdlRGF0ZSIsIm9uQ2hhbmdlQ29tcGFyYXRvciIsImRhdGVGaWx0ZXJDb21wYXJhdG9yIiwiaW5wdXREYXRlIiwibnVsbGFibGVGaWx0ZXJWYWwiLCJfdGhpcyRwcm9wcyR3aXRob3V0RW0iLCJ3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uIiwiX3RoaXMkcHJvcHMyJGZpbHRlclN0IiwiaXNJbml0aWFsIiwiX3RoaXMkcHJvcHMzJGRlbGF5IiwiZXhlY3V0ZSIsIl90aGlzJHByb3BzNCRpZCIsIl90aGlzJHByb3BzNCRjb2x1bW4iLCJjb21wYXJhdG9yU3R5bGUiLCJkYXRlU3R5bGUiLCJfdGhpcyRwcm9wczQkY2xhc3NOYW0iLCJfdGhpcyRwcm9wczQkY29tcGFyYXQiLCJjb21wYXJhdG9yQ2xhc3NOYW1lIiwiX3RoaXMkcHJvcHM0JGRhdGVDbGFzIiwiZGF0ZUNsYXNzTmFtZSIsImNvbXBhcmF0b3JFbG1JZCIsImlucHV0RWxtSWQiLCJnZXREZWZhdWx0Q29tcGFyYXRvciIsImdldENvbXBhcmF0b3JPcHRpb25zIiwiZ2V0RGVmYXVsdERhdGUiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsImVtcHR5RnVuY3Rpb24iLCJlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0IiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJzaGltIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwibG9jYXRpb24iLCJwcm9wRnVsbE5hbWUiLCJzZWNyZXQiLCJlcnIiLCJFcnJvciIsIm5hbWUiLCJnZXRTaGltIiwiUmVhY3RQcm9wVHlwZXMiLCJiaWdpbnQiLCJib29sIiwiZnVuYyIsInN0cmluZyIsInN5bWJvbCIsImFueSIsImFycmF5T2YiLCJlbGVtZW50IiwiZWxlbWVudFR5cGUiLCJpbnN0YW5jZU9mIiwibm9kZSIsIm9iamVjdE9mIiwib25lT2YiLCJvbmVPZlR5cGUiLCJzaGFwZSIsImV4YWN0IiwiY2hlY2tQcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJOdW1iZXJGaWx0ZXIiLCJvbkNoYW5nZU51bWJlciIsIm9uQ2hhbmdlTnVtYmVyU2V0IiwibnVtYmVyRmlsdGVyQ29tcGFyYXRvciIsImZuIiwiZmMiLCJfdGhpcyRwcm9wczIkZGVsYXkiLCJfdGhpcyRwcm9wczUkZGVmYXVsdFYiLCJfdGhpcyRwcm9wczUkZmlsdGVyU3QiLCJfdGhpcyRwcm9wczYiLCJfdGhpcyRwcm9wczYkZGVmYXVsdFYiLCJfdGhpcyRwcm9wczYkZmlsdGVyU3QiLCJfdGhpcyRwcm9wczciLCJfdGhpcyRwcm9wczckd2l0aG91dEUiLCJ3aXRob3V0RW1wdHlOdW1iZXJPcHRpb24iLCJfdGhpcyRwcm9wczgiLCJfdGhpcyRwcm9wczkiLCJfdGhpcyRwcm9wczkkZGVmYXVsdFYiLCJfdGhpcyRwcm9wczAiLCJfdGhpcyRwcm9wczAkaWQiLCJfdGhpcyRwcm9wczAkY2xhc3NOYW0iLCJudW1iZXJTdHlsZSIsIl90aGlzJHByb3BzMCRudW1iZXJDbCIsIm51bWJlckNsYXNzTmFtZSIsIl90aGlzJHByb3BzMCRjb21wYXJhdCIsImdldE51bWJlck9wdGlvbnMiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("react")):"function"==typeof define&&define.amd?define(["react"],e):"object"==typeof exports?exports.ReactBootstrapTableNgFilter=e(require("react")):t.ReactBootstrapTableNgFilter=e(t.React)}(self,t=>{return e={37(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function i(t,e,r){return e=u(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,l()?Reflect.construct(e,r||[],u(t).constructor):e.apply(t,r))}function l(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(l=function(){return!!t})()}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function c(t,e){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},c(t,e)}var s=function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var f=s(r(556)),p=s(r(442)),d=r(355),m=r(206);e.default=function(t,e,r){var n=p.default.createContext({}),l=function(l){function u(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,u),(e=i(this,u,[t])).currFilters={},e.clearFilters={},e.onFilter=e.onFilter.bind(e),e.doFilter=e.doFilter.bind(e),e.onExternalFilter=e.onExternalFilter.bind(e),e.data=t.data,e.isEmitDataChange=!1,e}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&c(t,e)}(u,l),s=u,f=[{key:"componentDidMount",value:function(){e()&&Object.keys(this.currFilters).length>0&&r(this.currFilters)}},{key:"onFilter",value:function(n,o){var i=this,l=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return function(u){var c=Object.assign({},i.currFilters);i.clearFilters={};var s,f,p,m=n.dataField,h=n.filter;if(t.isDefined(u)&&""!==u&&0!==u.length){var y=h.props,b=y.comparator,v=void 0===b?o===d.FILTER_TYPES.SELECT?d.EQ:d.LIKE:b,E=y.caseSensitive,g=void 0!==E&&E;c[m]={filterVal:u,filterType:o,comparator:v,caseSensitive:g}}else delete c[m],i.clearFilters=(s={},p={clear:!0,filterVal:u},(f=a(f=m))in s?Object.defineProperty(s,f,{value:p,enumerable:!0,configurable:!0,writable:!0}):s[f]=p,s);if(i.currFilters=c,e())return l||r(i.currFilters),void i.forceUpdate();i.doFilter(i.props)}}},{key:"onExternalFilter",value:function(t,e){var r=this;return function(n){r.onFilter(t,e)(n)}}},{key:"getFiltered",value:function(){return this.data}},{key:"shouldComponentUpdate",value:function(r,n,o){return e()||t.isEqual(r.data,this.data)?this.data=r.data:this.doFilter(r,this.isEmitDataChange),!0}},{key:"doFilter",value:function(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.dataChangeListener,o=e.data,a=e.columns,i=e.filter,l=(0,m.filters)(o,a,t)(this.currFilters,this.clearFilters);i.afterFilter&&i.afterFilter(l,this.currFilters),this.data=l,n&&!r?(this.isEmitDataChange=!0,n.emit("filterChanged",l.length)):(this.isEmitDataChange=!1,this.forceUpdate())}},{key:"render",value:function(){return p.default.createElement(n.Provider,{value:{data:this.data,onFilter:this.onFilter,onExternalFilter:this.onExternalFilter,currFilters:this.currFilters}},this.props.children)}}],f&&o(s.prototype,f),h&&o(s,h),Object.defineProperty(s,"prototype",{writable:!1}),s;var s,f,h}(p.default.Component);return l.propTypes={data:f.default.array.isRequired,columns:f.default.array.isRequired,dataChangeListener:f.default.object},{Provider:l,Consumer:n.Consumer}}},63(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}var o=["id","style","className","defaultValue","onFilter","column","options","comparator","withoutEmptyOption","caseSensitive","getFilter","filterState"];function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function i(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?a(Object(r),!0).forEach(function(e){l(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function l(t,e,r){return(e=c(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function u(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,c(n.key),n)}}function c(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function s(t,e,r){return e=p(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,f()?Reflect.construct(e,r||[],p(t).constructor):e.apply(t,r))}function f(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(f=function(){return!!t})()}function p(t){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},p(t)}function d(t,e){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},d(t,e)}var m,h=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},y=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},b=(m=function(t){return m=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},m(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=m(t),n=0;n<r.length;n++)"default"!==r[n]&&h(e,t,r[n]);return y(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var v=b(r(442)),E=r(355),g=function(t){function e(t){var r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(r=s(this,e,[t])).filter=r.filter.bind(r),r.options=r.getOptions(t);var n,o,a=void 0!==(n=r.options,o=r.getDefaultValue(),Array.isArray(n)?n.filter(function(t){return t.label===o}).map(function(t){return t.value})[0]:n[o]);return r.state={isSelected:a},r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&d(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props,r=e.column,n=e.onFilter,o=e.getFilter,a=this.selectInput.value;a&&""!==a&&n(r,E.FILTER_TYPES.SELECT,!0)(a),o&&o(function(e){t.setState(function(){return{isSelected:""!==e}}),t.selectInput.value=e,n(r,E.FILTER_TYPES.SELECT)(e)})}},{key:"componentDidUpdate",value:function(t){var e=!1,r=this.props,n=r.column,o=r.onFilter,a=r.defaultValue,i=this.getOptions(this.props);if(a!==t.defaultValue?(this.selectInput.value=a,e=!0):function(t,e){if(Array.isArray(t)){if(t.length===e.length){for(var r=0;r<t.length;r+=1)if(t[r].value!==e[r].value||t[r].label!==e[r].label)return!1;return!0}return!1}for(var n=Object.keys(t),o=0;o<n.length;o+=1)if(t[n[o]]!==e[n[o]])return!1;return Object.keys(t).length===Object.keys(e).length}(i,this.options)||(this.options=i,e=!0),e){var l=this.selectInput.value;l&&o(n,E.FILTER_TYPES.SELECT)(l)}}},{key:"getOptions",value:function(t){return"function"==typeof t.options?t.options(t.column):t.options}},{key:"getDefaultValue",value:function(){var t=this.props,e=t.filterState,r=t.defaultValue;return e&&void 0!==e.filterVal?e.filterVal:r}},{key:"cleanFiltered",value:function(){var t=void 0!==this.props.defaultValue?this.props.defaultValue:"";this.setState(function(){return{isSelected:""!==t}}),this.selectInput.value=t,this.props.onFilter(this.props.column,E.FILTER_TYPES.SELECT)(t)}},{key:"applyFilter",value:function(t){this.selectInput.value=t,this.setState(function(){return{isSelected:""!==t}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.SELECT)(t)}},{key:"filter",value:function(t){var e=t.target.value;this.setState(function(){return{isSelected:""!==e}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.SELECT)(e)}},{key:"renderOptions",value:function(){var t=[],e=this.options,r=this.props,n=r.placeholder,o=r.column,a=r.withoutEmptyOption,i=r.defaultValue;return a||void 0!==i&&""!==i||t.push(v.default.createElement("option",{key:"-1",value:"","data-testid":"select-filter-placeholder"},n||"Select ".concat(o.text,"..."))),Array.isArray(e)?e.forEach(function(e){var r=e.value,n=e.label;return t.push(v.default.createElement("option",{key:r,value:r},n))}):Object.keys(e).forEach(function(r){return t.push(v.default.createElement("option",{key:r,value:r},e[r]))}),t}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=e.style,a=e.className,l=(e.defaultValue,e.onFilter,e.column),u=(e.options,e.comparator,e.withoutEmptyOption,e.caseSensitive,e.getFilter,e.filterState,function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(-1!==e.indexOf(n))continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n<a.length;n++)r=a[n],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(e,o)),c="filter select-filter form-control ".concat(a," ").concat(this.state.isSelected?"":"placeholder-selected"),s="select-filter-column-".concat(l.dataField).concat(r?"-".concat(r):"");return v.default.createElement("label",{className:"filter-label",htmlFor:s},v.default.createElement("span",{className:"sr-only"},"Filter by ",l.text),v.default.createElement("select",i(i({},u),{},{ref:function(e){t.selectInput=e},id:s,style:n,className:c,onChange:this.filter,onClick:function(t){return t.stopPropagation()},defaultValue:this.getDefaultValue()||"","data-testid":"select-filter"}),this.renderOptions()))}}],n&&u(r.prototype,n),a&&u(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(v.Component);e.default=g},206(t,e,r){"use strict";function n(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function o(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?n(Object(r),!0).forEach(function(e){a(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function a(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=i(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==i(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.filters=e.filterFactory=e.filterByArray=e.filterByDate=e.filterByNumber=e.filterByText=void 0;var l=r(355);e.filterByText=function(t){return function(e,r,n,o){var a=n.filterVal,i=void 0===a?"":a,u=n.comparator,c=void 0===u?l.LIKE:u,s=n.caseSensitive,f=i.toString();return e.filter(function(e){var n=t.get(e,r);o&&(n=o(n,e));var a=t.isDefined(n)?n.toString():"";return c===l.EQ?a===f:s?a.includes(f):-1!==a.toLocaleUpperCase().indexOf(f.toLocaleUpperCase())})}},e.filterByNumber=function(t){return function(e,r,n,o){var a=n.filterVal,i=a.comparator,u=a.number;return e.filter(function(e){if(""===u||!i)return!0;var n=t.get(e,r);switch(o&&(n=o(n,e)),i){case l.EQ:return n==u;case l.GT:return n>u;case l.GE:return n>=u;case l.LT:return n<u;case l.LE:return n<=u;case l.NE:return n!=u;default:return console.error("Number comparator provided is not supported"),!0}})}},e.filterByDate=function(t){return function(e,r,n,o){var a=n.filterVal,u=a.comparator,c=a.date;if(!c||!u)return e;var s=c.getUTCDate(),f=c.getUTCMonth(),p=c.getUTCFullYear();return e.filter(function(e){var n=!0,a=t.get(e,r);o&&(a=o(a,e)),"object"!==i(a)&&(a=new Date(a));var d=a.getUTCDate(),m=a.getUTCMonth(),h=a.getUTCFullYear();switch(u){case l.EQ:s===d&&f===m&&p===h||(n=!1);break;case l.GT:a<=c&&(n=!1);break;case l.GE:(h<p||h===p&&m<f||h===p&&m===f&&d<s)&&(n=!1);break;case l.LT:a>=c&&(n=!1);break;case l.LE:(h>p||h===p&&m>f||h===p&&m===f&&d>s)&&(n=!1);break;case l.NE:s===d&&f===m&&p===h&&(n=!1);break;default:console.error("Date comparator provided is not supported")}return n})}},e.filterByArray=function(t){return function(e,r,n){var o=n.filterVal,a=n.comparator;if(0===o.length)return e;var i=o.filter(function(e){return t.isDefined(e)}).map(function(t){return t.toString()});return e.filter(function(e){var n=t.get(e,r),o=t.isDefined(n)?n.toString():"";return a===l.EQ?-1!==i.indexOf(o):(o=o.toLocaleUpperCase(),i.some(function(t){return-1!==o.indexOf(t.toLocaleUpperCase())}))})}},e.filterFactory=function(t){return function(r){switch(r){case l.FILTER_TYPES.MULTISELECT:return(0,e.filterByArray)(t);case l.FILTER_TYPES.NUMBER:return(0,e.filterByNumber)(t);case l.FILTER_TYPES.DATE:return(0,e.filterByDate)(t);case l.FILTER_TYPES.TEXT:case l.FILTER_TYPES.SELECT:default:return(0,e.filterByText)(t)}}},e.filters=function(t,r,n){return function(a){var i,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},u=(0,e.filterFactory)(n),c=o(o({},l),a),s=t;return Object.keys(c).forEach(function(t){var e,n,o;r=null!=r?r:[];for(var a=0;a<r.length;a+=1)if(r[a].dataField===t){n=r[a].filterValue,r[a].filter&&(o=r[a].filter.props.onFilter);break}if(l[t]&&o)void 0!==(e=o(l[t].filterVal,s))&&(s=e);else{var f=c[t];i=u(f.filterType),o&&(e=o(f.filterVal,s)),s=void 0===e?i(s,t,f,n):e}}),s}}},321(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355),c=t=>{if(t&&t.selectedOptions)return Array.from(t.selectedOptions).map(t=>t.value);if(t&&Array.isArray(t.value))return t.value;const e=[],r=t&&t.options?t.options.length:0;for(let n=0;n<r;n+=1){const r=t.options[n];r&&r.selected&&e.push(r.value)}return e};class s extends l.Component{constructor(t){super(t),this.filter=this.filter.bind(this),this.applyFilter=this.applyFilter.bind(this);const e=(t.defaultValue??[]).map(e=>t.options[e]).length>0;this.state={isSelected:e}}componentDidMount(){const{getFilter:t}=this.props,e=c(this.selectInput);e&&e.length>0&&this.applyFilter(e),t&&t(t=>{this.selectInput.value=t,this.applyFilter(t)})}componentDidUpdate(t){let e=!1;this.props.defaultValue!==t.defaultValue?e=!0:function(t,e){const r=Object.keys(t);for(let n=0;n<r.length;n+=1)if(t[r[n]]!==e[r[n]])return!1;return Object.keys(t).length===Object.keys(e).length}(this.props.options,t.options)||(e=!0),e&&this.applyFilter(c(this.selectInput))}getDefaultValue(){const{filterState:t={},defaultValue:e=[]}=this.props;return t&&void 0!==t.filterVal?t.filterVal:e}getOptions(){const t=[],{options:e,placeholder:r,column:n,withoutEmptyOption:o=!1,defaultValue:a=[]}=this.props,i=a&&a.length>0;return o||i||t.push(l.default.createElement("option",{key:"-1",value:"","data-testid":"multiselect-placeholder"},r||`Select ${n.text}...`)),Object.keys(e).forEach(r=>t.push(l.default.createElement("option",{key:r,value:r},e[r]))),t}cleanFiltered(){const t=void 0!==this.props.defaultValue?this.props.defaultValue:[];this.selectInput.value=t,this.applyFilter(t)}applyFilter(t){1===t.length&&""===t[0]&&(t=[]),this.setState(()=>({isSelected:t.length>0})),this.props.onFilter(this.props.column,u.FILTER_TYPES.MULTISELECT)(t)}filter(t){const e=c(t.target);this.applyFilter(e)}render(){const{id:t=null,style:e,className:r="",filterState:n={},defaultValue:o=[],onFilter:a,column:i,options:c,comparator:s=u.EQ,withoutEmptyOption:f=!1,caseSensitive:p=!0,getFilter:d,...m}=this.props,h=`filter select-filter form-control ${r} ${this.state.isSelected?"":"placeholder-selected"}`,y=`multiselect-filter-column-${i.dataField}${t?`-${t}`:""}`;return l.default.createElement("label",{className:"filter-label",htmlFor:y},l.default.createElement("span",{className:"sr-only"},"Filter by ",i.text),l.default.createElement("select",{...m,ref:t=>{this.selectInput=t},id:y,style:e,multiple:!0,className:h,onChange:this.filter,onClick:t=>t.stopPropagation(),defaultValue:this.getDefaultValue(),"data-testid":"multiselect-filter"},this.getOptions()))}}e.default=s},355(t,e,r){"use strict";var n=function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.customFilter=e.dateFilter=e.numberFilter=e.multiSelectFilter=e.selectFilter=e.textFilter=e.ComparatorNumber=e.LE=e.LT=e.GE=e.GT=e.NE=e.EQ=e.LIKE=e.FILTER_DELAY=e.FILTER_TYPES=void 0;var o,a=n(r(659)),i=n(r(558)),l=n(r(834)),u=n(r(63)),c=n(r(652)),s=n(r(37));!function(t){t.TEXT="TEXT",t.SELECT="SELECT",t.MULTISELECT="MULTISELECT",t.NUMBER="NUMBER",t.DATE="DATE"}(o||(e.FILTER_TYPES=o={})),e.FILTER_DELAY=500,e.LIKE="LIKE",e.EQ="=",e.NE="!=",e.GT=">",e.GE=">=",e.LT="<",e.LE="<=",e.ComparatorNumber=7,e.textFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:c.default,props:t}},e.selectFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:u.default,props:t}},e.multiSelectFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:i.default,props:t}},e.numberFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:l.default,props:t}},e.dateFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:a.default,props:t}},e.customFilter=function(){return{Filter:function(){},props:arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}}},e.default=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:s.default,options:t}}},388(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355);class c extends l.Component{constructor(t){super(t),this.filter=this.filter.bind(this),this.options=this.getOptions(t);const e=void 0!==(r=this.options,n=this.getDefaultValue(),Array.isArray(r)?r.filter(({label:t})=>t===n).map(({value:t})=>t)[0]:r[n]);var r,n;this.state={isSelected:e}}componentDidMount(){const{column:t,onFilter:e,getFilter:r}=this.props,n=this.selectInput.value;n&&""!==n&&e(t,u.FILTER_TYPES.SELECT,!0)(n),r&&r(r=>{this.setState(()=>({isSelected:""!==r})),this.selectInput.value=r,e(t,u.FILTER_TYPES.SELECT)(r)})}componentDidUpdate(t){let e=!1;const{column:r,onFilter:n,defaultValue:o}=this.props,a=this.getOptions(this.props);if(o!==t.defaultValue?(this.selectInput.value=o,e=!0):function(t,e){if(Array.isArray(t)){if(t.length===e.length){for(let r=0;r<t.length;r+=1)if(t[r].value!==e[r].value||t[r].label!==e[r].label)return!1;return!0}return!1}const r=Object.keys(t);for(let n=0;n<r.length;n+=1)if(t[r[n]]!==e[r[n]])return!1;return Object.keys(t).length===Object.keys(e).length}(a,this.options)||(this.options=a,e=!0),e){const t=this.selectInput.value;t&&n(r,u.FILTER_TYPES.SELECT)(t)}}getOptions(t){return"function"==typeof t.options?t.options(t.column):t.options}getDefaultValue(){const{filterState:t,defaultValue:e}=this.props;return t&&void 0!==t.filterVal?t.filterVal:e}cleanFiltered(){const t=void 0!==this.props.defaultValue?this.props.defaultValue:"";this.setState(()=>({isSelected:""!==t})),this.selectInput.value=t,this.props.onFilter(this.props.column,u.FILTER_TYPES.SELECT)(t)}applyFilter(t){this.selectInput.value=t,this.setState(()=>({isSelected:""!==t})),this.props.onFilter(this.props.column,u.FILTER_TYPES.SELECT)(t)}filter(t){const{value:e}=t.target;this.setState(()=>({isSelected:""!==e})),this.props.onFilter(this.props.column,u.FILTER_TYPES.SELECT)(e)}renderOptions(){const t=[],{options:e}=this,{placeholder:r,column:n,withoutEmptyOption:o,defaultValue:a}=this.props;return o||void 0!==a&&""!==a||t.push(l.default.createElement("option",{key:"-1",value:"","data-testid":"select-filter-placeholder"},r||`Select ${n.text}...`)),Array.isArray(e)?e.forEach(({value:e,label:r})=>t.push(l.default.createElement("option",{key:e,value:e},r))):Object.keys(e).forEach(r=>t.push(l.default.createElement("option",{key:r,value:r},e[r]))),t}render(){const{id:t,style:e,className:r,defaultValue:n,onFilter:o,column:a,options:i,comparator:u,withoutEmptyOption:c,caseSensitive:s,getFilter:f,filterState:p,...d}=this.props,m=`filter select-filter form-control ${r} ${this.state.isSelected?"":"placeholder-selected"}`,h=`select-filter-column-${a.dataField}${t?`-${t}`:""}`;return l.default.createElement("label",{className:"filter-label",htmlFor:h},l.default.createElement("span",{className:"sr-only"},"Filter by ",a.text),l.default.createElement("select",{...d,ref:t=>{this.selectInput=t},id:h,style:e,className:m,onChange:this.filter,onClick:t=>t.stopPropagation(),defaultValue:this.getDefaultValue()||"","data-testid":"select-filter"},this.renderOptions()))}}e.default=c},442(e){"use strict";e.exports=t},461(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355);class c extends l.Component{constructor(t){super(t),this.filter=this.filter.bind(this),this.handleClick=this.handleClick.bind(this),this.timeout=null,this.input={},this.state={value:t.filterState&&void 0!==t.filterState.filterVal?t.filterState.filterVal:t.defaultValue??""}}componentDidMount(){const{onFilter:t,getFilter:e,column:r}=this.props,n=this.input.value;n&&t(this.props.column,u.FILTER_TYPES.TEXT,!0)(n),e&&e(e=>{this.setState(()=>({value:e})),t(r,u.FILTER_TYPES.TEXT)(e)})}componentWillUnmount(){this.cleanTimer()}componentDidUpdate(t){if(t.defaultValue!==this.props.defaultValue){const t=this.props.defaultValue??"";this.setState({value:t},()=>{this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(t)})}}filter(t){t.stopPropagation(),this.cleanTimer();const e=t.target.value;this.setState(()=>({value:e})),this.timeout=setTimeout(()=>{this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(e)},this.props.delay)}cleanTimer(){this.timeout&&clearTimeout(this.timeout)}cleanFiltered(){const t=this.props.defaultValue??"";this.setState(()=>({value:t})),this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(t)}applyFilter(t){const e=t??"";this.setState(()=>({value:e})),this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(e)}handleClick(t){t.stopPropagation(),this.props.onClick&&this.props.onClick(t)}render(){const{id:t=null,placeholder:e,column:{dataField:r,text:n},style:o,className:a,onFilter:i,caseSensitive:u=!1,defaultValue:c="",getFilter:s,filterState:f={},...p}=this.props,d=`text-filter-column-${r}${t?`-${t}`:""}`;return l.default.createElement("label",{className:"filter-label",htmlFor:d},l.default.createElement("span",{className:"sr-only"},"Filter by ",n),l.default.createElement("input",{...p,ref:t=>{this.input=t},type:"text",id:d,className:`filter text-filter form-control ${a}`,style:o,onChange:this.filter,onClick:this.handleClick,placeholder:e||`Enter ${n}...`,value:this.state.value,"data-testid":"text-filter"}))}}e.default=c},556(t,e,r){t.exports=r(694)()},558(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}var o=["id","style","className","filterState","defaultValue","onFilter","column","options","comparator","withoutEmptyOption","caseSensitive","getFilter"];function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function i(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?a(Object(r),!0).forEach(function(e){l(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function l(t,e,r){return(e=c(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function u(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,c(n.key),n)}}function c(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function s(t,e,r){return e=p(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,f()?Reflect.construct(e,r||[],p(t).constructor):e.apply(t,r))}function f(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(f=function(){return!!t})()}function p(t){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},p(t)}function d(t,e){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},d(t,e)}var m,h=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},y=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},b=(m=function(t){return m=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},m(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=m(t),n=0;n<r.length;n++)"default"!==r[n]&&h(e,t,r[n]);return y(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var v=b(r(442)),E=r(355),g=function(t){if(t&&t.selectedOptions)return Array.from(t.selectedOptions).map(function(t){return t.value});if(t&&Array.isArray(t.value))return t.value;for(var e=[],r=t&&t.options?t.options.length:0,n=0;n<r;n+=1){var o=t.options[n];o&&o.selected&&e.push(o.value)}return e},O=function(t){function e(t){var r,n;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(n=s(this,e,[t])).filter=n.filter.bind(n),n.applyFilter=n.applyFilter.bind(n);var o=(null!==(r=t.defaultValue)&&void 0!==r?r:[]).map(function(e){return t.options[e]}).length>0;return n.state={isSelected:o},n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&d(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props.getFilter,r=g(this.selectInput);r&&r.length>0&&this.applyFilter(r),e&&e(function(e){t.selectInput.value=e,t.applyFilter(e)})}},{key:"componentDidUpdate",value:function(t){var e=!1;this.props.defaultValue!==t.defaultValue?e=!0:function(t,e){for(var r=Object.keys(t),n=0;n<r.length;n+=1)if(t[r[n]]!==e[r[n]])return!1;return Object.keys(t).length===Object.keys(e).length}(this.props.options,t.options)||(e=!0),e&&this.applyFilter(g(this.selectInput))}},{key:"getDefaultValue",value:function(){var t=this.props,e=t.filterState,r=void 0===e?{}:e,n=t.defaultValue,o=void 0===n?[]:n;return r&&void 0!==r.filterVal?r.filterVal:o}},{key:"getOptions",value:function(){var t=[],e=this.props,r=e.options,n=e.placeholder,o=e.column,a=e.withoutEmptyOption,i=void 0!==a&&a,l=e.defaultValue,u=void 0===l?[]:l,c=u&&u.length>0;return i||c||t.push(v.default.createElement("option",{key:"-1",value:"","data-testid":"multiselect-placeholder"},n||"Select ".concat(o.text,"..."))),Object.keys(r).forEach(function(e){return t.push(v.default.createElement("option",{key:e,value:e},r[e]))}),t}},{key:"cleanFiltered",value:function(){var t=void 0!==this.props.defaultValue?this.props.defaultValue:[];this.selectInput.value=t,this.applyFilter(t)}},{key:"applyFilter",value:function(t){1===t.length&&""===t[0]&&(t=[]),this.setState(function(){return{isSelected:t.length>0}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.MULTISELECT)(t)}},{key:"filter",value:function(t){var e=g(t.target);this.applyFilter(e)}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=void 0===r?null:r,a=e.style,l=e.className,u=void 0===l?"":l,c=(e.filterState,e.defaultValue,e.onFilter,e.column),s=(e.options,e.comparator),f=(void 0===s&&E.EQ,e.withoutEmptyOption,e.caseSensitive,e.getFilter,function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(-1!==e.indexOf(n))continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n<a.length;n++)r=a[n],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(e,o)),p="filter select-filter form-control ".concat(u," ").concat(this.state.isSelected?"":"placeholder-selected"),d="multiselect-filter-column-".concat(c.dataField).concat(n?"-".concat(n):"");return v.default.createElement("label",{className:"filter-label",htmlFor:d},v.default.createElement("span",{className:"sr-only"},"Filter by ",c.text),v.default.createElement("select",i(i({},f),{},{ref:function(e){t.selectInput=e},id:d,style:a,multiple:!0,className:p,onChange:this.filter,onClick:function(t){return t.stopPropagation()},defaultValue:this.getDefaultValue(),"data-testid":"multiselect-filter"}),this.getOptions()))}}],n&&u(r.prototype,n),a&&u(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(v.Component);e.default=O},599(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.filters=e.filterFactory=e.filterByArray=e.filterByDate=e.filterByNumber=e.filterByText=void 0;const n=r(355);e.filterByText=t=>(e,r,{filterVal:o="",comparator:a=n.LIKE,caseSensitive:i},l)=>{const u=o.toString();return e.filter(e=>{let o=t.get(e,r);l&&(o=l(o,e));const c=t.isDefined(o)?o.toString():"";return a===n.EQ?c===u:i?c.includes(u):-1!==c.toLocaleUpperCase().indexOf(u.toLocaleUpperCase())})},e.filterByNumber=t=>(e,r,{filterVal:{comparator:o,number:a}},i)=>e.filter(e=>{if(""===a||!o)return!0;let l=t.get(e,r);switch(i&&(l=i(l,e)),o){case n.EQ:return l==a;case n.GT:return l>a;case n.GE:return l>=a;case n.LT:return l<a;case n.LE:return l<=a;case n.NE:return l!=a;default:return console.error("Number comparator provided is not supported"),!0}}),e.filterByDate=t=>(e,r,{filterVal:{comparator:o,date:a}},i)=>{if(!a||!o)return e;const l=a.getUTCDate(),u=a.getUTCMonth(),c=a.getUTCFullYear();return e.filter(e=>{let s=!0,f=t.get(e,r);i&&(f=i(f,e)),"object"!=typeof f&&(f=new Date(f));const p=f.getUTCDate(),d=f.getUTCMonth(),m=f.getUTCFullYear();switch(o){case n.EQ:l===p&&u===d&&c===m||(s=!1);break;case n.GT:f<=a&&(s=!1);break;case n.GE:(m<c||m===c&&d<u||m===c&&d===u&&p<l)&&(s=!1);break;case n.LT:f>=a&&(s=!1);break;case n.LE:(m>c||m===c&&d>u||m===c&&d===u&&p>l)&&(s=!1);break;case n.NE:l===p&&u===d&&c===m&&(s=!1);break;default:console.error("Date comparator provided is not supported")}return s})},e.filterByArray=t=>(e,r,{filterVal:o,comparator:a})=>{if(0===o.length)return e;const i=o.filter(e=>t.isDefined(e)).map(t=>t.toString());return e.filter(e=>{const o=t.get(e,r);let l=t.isDefined(o)?o.toString():"";return a===n.EQ?-1!==i.indexOf(l):(l=l.toLocaleUpperCase(),i.some(t=>-1!==l.indexOf(t.toLocaleUpperCase())))})},e.filterFactory=t=>r=>{switch(r){case n.FILTER_TYPES.MULTISELECT:return(0,e.filterByArray)(t);case n.FILTER_TYPES.NUMBER:return(0,e.filterByNumber)(t);case n.FILTER_TYPES.DATE:return(0,e.filterByDate)(t);case n.FILTER_TYPES.TEXT:case n.FILTER_TYPES.SELECT:default:return(0,e.filterByText)(t)}},e.filters=(t,r,n)=>(o,a={})=>{const i=(0,e.filterFactory)(n),l={...a,...o};let u,c=t;return Object.keys(l).forEach(t=>{let e,n,o;r=r??[];for(let e=0;e<r.length;e+=1)if(r[e].dataField===t){n=r[e].filterValue,r[e].filter&&(o=r[e].filter.props.onFilter);break}if(a[t]&&o)e=o(a[t].filterVal,c),void 0!==e&&(c=e);else{const r=l[t];u=i(r.filterType),o&&(e=o(r.filterVal,c)),c=void 0===e?u(c,t,r,n):e}}),c}},610(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const o=n(r(556)),a=n(r(442)),i=r(355),l=r(599);e.default=(t,e,r)=>{const n=a.default.createContext({});class u extends a.default.Component{constructor(t){super(t),this.currFilters={},this.clearFilters={},this.onFilter=this.onFilter.bind(this),this.doFilter=this.doFilter.bind(this),this.onExternalFilter=this.onExternalFilter.bind(this),this.data=t.data,this.isEmitDataChange=!1}componentDidMount(){e()&&Object.keys(this.currFilters).length>0&&r(this.currFilters)}onFilter(n,o,a=!1){return l=>{const u=Object.assign({},this.currFilters);this.clearFilters={};const{dataField:c,filter:s}=n;if(t.isDefined(l)&&""!==l&&0!==l.length){const{comparator:t=(o===i.FILTER_TYPES.SELECT?i.EQ:i.LIKE),caseSensitive:e=!1}=s.props;u[c]={filterVal:l,filterType:o,comparator:t,caseSensitive:e}}else delete u[c],this.clearFilters={[c]:{clear:!0,filterVal:l}};if(this.currFilters=u,e())return a||r(this.currFilters),void this.forceUpdate();this.doFilter(this.props)}}onExternalFilter(t,e){return r=>{this.onFilter(t,e)(r)}}getFiltered(){return this.data}shouldComponentUpdate(r,n,o){return e()||t.isEqual(r.data,this.data)?this.data=r.data:this.doFilter(r,this.isEmitDataChange),!0}doFilter(e,r=!1){const{dataChangeListener:n,data:o,columns:a,filter:i}=e,u=(0,l.filters)(o,a,t)(this.currFilters,this.clearFilters);i.afterFilter&&i.afterFilter(u,this.currFilters),this.data=u,n&&!r?(this.isEmitDataChange=!0,n.emit("filterChanged",u.length)):(this.isEmitDataChange=!1,this.forceUpdate())}render(){return a.default.createElement(n.Provider,{value:{data:this.data,onFilter:this.onFilter,onExternalFilter:this.onExternalFilter,currFilters:this.currFilters}},this.props.children)}}return u.propTypes={data:o.default.array.isRequired,columns:o.default.array.isRequired,dataChangeListener:o.default.object},{Provider:u,Consumer:n.Consumer}}},652(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}var o=["id","placeholder","column","style","className","onFilter","caseSensitive","defaultValue","getFilter","filterState"];function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function i(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?a(Object(r),!0).forEach(function(e){l(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function l(t,e,r){return(e=c(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function u(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,c(n.key),n)}}function c(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function s(t,e,r){return e=p(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,f()?Reflect.construct(e,r||[],p(t).constructor):e.apply(t,r))}function f(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(f=function(){return!!t})()}function p(t){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},p(t)}function d(t,e){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},d(t,e)}var m,h=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},y=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},b=(m=function(t){return m=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},m(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=m(t),n=0;n<r.length;n++)"default"!==r[n]&&h(e,t,r[n]);return y(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var v=b(r(442)),E=r(355),g=function(t){function e(t){var r,n;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(r=s(this,e,[t])).filter=r.filter.bind(r),r.handleClick=r.handleClick.bind(r),r.timeout=null,r.input={},r.state={value:t.filterState&&void 0!==t.filterState.filterVal?t.filterState.filterVal:null!==(n=t.defaultValue)&&void 0!==n?n:""},r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&d(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props,r=e.onFilter,n=e.getFilter,o=e.column,a=this.input.value;a&&r(this.props.column,E.FILTER_TYPES.TEXT,!0)(a),n&&n(function(e){t.setState(function(){return{value:e}}),r(o,E.FILTER_TYPES.TEXT)(e)})}},{key:"componentWillUnmount",value:function(){this.cleanTimer()}},{key:"componentDidUpdate",value:function(t){var e=this;if(t.defaultValue!==this.props.defaultValue){var r,n=null!==(r=this.props.defaultValue)&&void 0!==r?r:"";this.setState({value:n},function(){e.props.onFilter(e.props.column,E.FILTER_TYPES.TEXT)(n)})}}},{key:"filter",value:function(t){var e=this;t.stopPropagation(),this.cleanTimer();var r=t.target.value;this.setState(function(){return{value:r}}),this.timeout=setTimeout(function(){e.props.onFilter(e.props.column,E.FILTER_TYPES.TEXT)(r)},this.props.delay)}},{key:"cleanTimer",value:function(){this.timeout&&clearTimeout(this.timeout)}},{key:"cleanFiltered",value:function(){var t,e=null!==(t=this.props.defaultValue)&&void 0!==t?t:"";this.setState(function(){return{value:e}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.TEXT)(e)}},{key:"applyFilter",value:function(t){var e=null!=t?t:"";this.setState(function(){return{value:e}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.TEXT)(e)}},{key:"handleClick",value:function(t){t.stopPropagation(),this.props.onClick&&this.props.onClick(t)}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=void 0===r?null:r,a=e.placeholder,l=e.column,u=l.dataField,c=l.text,s=e.style,f=e.className,p=(e.onFilter,e.caseSensitive,e.defaultValue,e.getFilter,e.filterState,function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(-1!==e.indexOf(n))continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n<a.length;n++)r=a[n],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(e,o)),d="text-filter-column-".concat(u).concat(n?"-".concat(n):"");return v.default.createElement("label",{className:"filter-label",htmlFor:d},v.default.createElement("span",{className:"sr-only"},"Filter by ",c),v.default.createElement("input",i(i({},p),{},{ref:function(e){t.input=e},type:"text",id:d,className:"filter text-filter form-control ".concat(f),style:s,onChange:this.filter,onClick:this.handleClick,placeholder:a||"Enter ".concat(c,"..."),value:this.state.value,"data-testid":"text-filter"})))}}],n&&u(r.prototype,n),a&&u(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(v.Component);e.default=g},659(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function i(t,e,r){return e=u(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,l()?Reflect.construct(e,r||[],u(t).constructor):e.apply(t,r))}function l(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(l=function(){return!!t})()}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function c(t,e){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},c(t,e)}var s,f=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},p=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},d=(s=function(t){return s=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},s(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=s(t),n=0;n<r.length;n++)"default"!==r[n]&&f(e,t,r[n]);return p(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var m=d(r(442)),h=r(355),y=["=","!=",">",">=","<","<="];function b(t){return"".concat(t.getUTCFullYear(),"-").concat(("0"+(t.getUTCMonth()+1)).slice(-2),"-").concat(("0"+t.getUTCDate()).slice(-2))}var v=function(t){function e(t){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(r=i(this,e,[t])).timeout=null,r.comparators=t.comparators||y,r.applyFilter=r.applyFilter.bind(r),r.onChangeDate=r.onChangeDate.bind(r),r.onChangeComparator=r.onChangeComparator.bind(r),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&c(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props.getFilter,r=this.dateFilterComparator.value,n=this.inputDate.value;r&&n&&this.applyFilter(n,r,!0),e&&e(function(e){var r=e||{date:null,comparator:null};t.dateFilterComparator.value=r.comparator,t.inputDate.value=r.date?b(r.date):null,t.applyFilter(r.date,r.comparator)})}},{key:"componentWillUnmount",value:function(){this.timeout&&clearTimeout(this.timeout)}},{key:"onChangeDate",value:function(t){var e=this.dateFilterComparator.value,r=t.target.value;this.applyFilter(r,e)}},{key:"onChangeComparator",value:function(t){var e=this.inputDate.value,r=t.target.value;this.applyFilter(e,r)}},{key:"getComparatorOptions",value:function(){var t=[],e=this.props.withoutEmptyComparatorOption;void 0!==e&&e||t.push(m.default.createElement("option",{key:"-1"}));for(var r=0;r<this.comparators.length;r+=1)t.push(m.default.createElement("option",{key:r,value:this.comparators[r]},this.comparators[r]));return t}},{key:"getDefaultComparator",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{date:void 0,comparator:""}:e,n=t.filterState,o=void 0===n?{}:n;return o&&o.filterVal?o.filterVal.comparator:r&&r.comparator?r.comparator:""}},{key:"getDefaultDate",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{date:void 0,comparator:""}:e,n=t.filterState,o=void 0===n?{}:n;return o&&o.filterVal&&o.filterVal.date?b(o.filterVal.date):r&&r.date?b(new Date(r.date)):""}},{key:"applyFilter",value:function(t,e,r){var n=this.props,o=n.column,a=n.onFilter,i=n.delay,l=void 0===i?0:i,u=function(){var n=""===t?null:new Date(t);a(o,h.FILTER_TYPES.DATE,r)({date:n,comparator:e})};l?this.timeout=setTimeout(function(){u()},l):u()}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=void 0===r?null:r,o=e.placeholder,a=e.column,i=a.dataField,l=a.text,u=e.style,c=e.comparatorStyle,s=e.dateStyle,f=e.className,p=void 0===f?"":f,d=e.comparatorClassName,h=void 0===d?"":d,y=e.dateClassName,b=void 0===y?"":y,v="date-filter-comparator-".concat(i).concat(n?"-".concat(n):""),E="date-filter-column-".concat(i).concat(n?"-".concat(n):"");return m.default.createElement("div",{onClick:function(t){return t.stopPropagation()},className:"filter date-filter ".concat(p),style:u,"data-testid":"date-filter"},m.default.createElement("label",{className:"filter-label",htmlFor:v},m.default.createElement("span",{className:"sr-only"},"Filter comparator"),m.default.createElement("select",{ref:function(e){t.dateFilterComparator=e},id:v,style:c,className:"date-filter-comparator form-control ".concat(h),onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"date-filter-comparator"},this.getComparatorOptions())),m.default.createElement("label",{htmlFor:E},m.default.createElement("span",{className:"sr-only"},"Enter $",l),m.default.createElement("input",{ref:function(e){t.inputDate=e},id:E,className:"filter date-filter-input form-control ".concat(b),style:s,type:"date",onChange:this.onChangeDate,placeholder:o||"Enter ".concat(l,"..."),defaultValue:this.getDefaultDate(),"data-testid":"date-filter-input"})))}}],n&&o(r.prototype,n),a&&o(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(m.Component);e.default=v},684(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.customFilter=e.dateFilter=e.numberFilter=e.multiSelectFilter=e.selectFilter=e.textFilter=e.ComparatorNumber=e.LE=e.LT=e.GE=e.GT=e.NE=e.EQ=e.LIKE=e.FILTER_DELAY=e.FILTER_TYPES=void 0;const o=n(r(696)),a=n(r(321)),i=n(r(851)),l=n(r(388)),u=n(r(461)),c=n(r(610));var s;!function(t){t.TEXT="TEXT",t.SELECT="SELECT",t.MULTISELECT="MULTISELECT",t.NUMBER="NUMBER",t.DATE="DATE"}(s||(e.FILTER_TYPES=s={})),e.FILTER_DELAY=500,e.LIKE="LIKE",e.EQ="=",e.NE="!=",e.GT=">",e.GE=">=",e.LT="<",e.LE="<=",e.ComparatorNumber=7,e.textFilter=(t={})=>({Filter:u.default,props:t}),e.selectFilter=(t={})=>({Filter:l.default,props:t}),e.multiSelectFilter=(t={})=>({Filter:a.default,props:t}),e.numberFilter=(t={})=>({Filter:i.default,props:t}),e.dateFilter=(t={})=>({Filter:o.default,props:t}),e.customFilter=(t={})=>({Filter:()=>{},props:t}),e.default=(t={})=>({createContext:c.default,options:t})},694(t,e,r){"use strict";var n=r(925);function o(){}function a(){}a.resetWarningCache=o,t.exports=function(){function t(t,e,r,o,a,i){if(i!==n){var l=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 l.name="Invariant Violation",l}}function e(){return t}t.isRequired=t;var r={array:t,bigint:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:e,element:t,elementType:t,instanceOf:e,node:t,objectOf:e,oneOf:e,oneOfType:e,shape:e,exact:e,checkPropTypes:a,resetWarningCache:o};return r.PropTypes=r,r}},696(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355),c=["=","!=",">",">=","<","<="];function s(t){return`${t.getUTCFullYear()}-${("0"+(t.getUTCMonth()+1)).slice(-2)}-${("0"+t.getUTCDate()).slice(-2)}`}class f extends l.Component{constructor(t){super(t),this.timeout=null,this.comparators=t.comparators||c,this.applyFilter=this.applyFilter.bind(this),this.onChangeDate=this.onChangeDate.bind(this),this.onChangeComparator=this.onChangeComparator.bind(this)}componentDidMount(){const{getFilter:t}=this.props,e=this.dateFilterComparator.value,r=this.inputDate.value;e&&r&&this.applyFilter(r,e,!0),t&&t(t=>{const e=t||{date:null,comparator:null};this.dateFilterComparator.value=e.comparator,this.inputDate.value=e.date?s(e.date):null,this.applyFilter(e.date,e.comparator)})}componentWillUnmount(){this.timeout&&clearTimeout(this.timeout)}onChangeDate(t){const e=this.dateFilterComparator.value,r=t.target.value;this.applyFilter(r,e)}onChangeComparator(t){const e=this.inputDate.value,r=t.target.value;this.applyFilter(e,r)}getComparatorOptions(){const t=[],{withoutEmptyComparatorOption:e=!1}=this.props;e||t.push(l.default.createElement("option",{key:"-1"}));for(let e=0;e<this.comparators.length;e+=1)t.push(l.default.createElement("option",{key:e,value:this.comparators[e]},this.comparators[e]));return t}getDefaultComparator(){const{defaultValue:t={date:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal?e.filterVal.comparator:t&&t.comparator?t.comparator:""}getDefaultDate(){const{defaultValue:t={date:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal&&e.filterVal.date?s(e.filterVal.date):t&&t.date?s(new Date(t.date)):""}applyFilter(t,e,r){const{column:n,onFilter:o,delay:a=0}=this.props,i=()=>{const a=""===t?null:new Date(t);o(n,u.FILTER_TYPES.DATE,r)({date:a,comparator:e})};a?this.timeout=setTimeout(()=>{i()},a):i()}render(){const{id:t=null,placeholder:e,column:{dataField:r,text:n},style:o,comparatorStyle:a,dateStyle:i,className:u="",comparatorClassName:c="",dateClassName:s=""}=this.props,f=`date-filter-comparator-${r}${t?`-${t}`:""}`,p=`date-filter-column-${r}${t?`-${t}`:""}`;return l.default.createElement("div",{onClick:t=>t.stopPropagation(),className:`filter date-filter ${u}`,style:o,"data-testid":"date-filter"},l.default.createElement("label",{className:"filter-label",htmlFor:f},l.default.createElement("span",{className:"sr-only"},"Filter comparator"),l.default.createElement("select",{ref:t=>{this.dateFilterComparator=t},id:f,style:a,className:`date-filter-comparator form-control ${c}`,onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"date-filter-comparator"},this.getComparatorOptions())),l.default.createElement("label",{htmlFor:p},l.default.createElement("span",{className:"sr-only"},"Enter $",n),l.default.createElement("input",{ref:t=>{this.inputDate=t},id:p,className:`filter date-filter-input form-control ${s}`,style:i,type:"date",onChange:this.onChangeDate,placeholder:e||`Enter ${n}...`,defaultValue:this.getDefaultDate(),"data-testid":"date-filter-input"})))}}e.default=f},834(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function i(t,e,r){return e=u(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,l()?Reflect.construct(e,r||[],u(t).constructor):e.apply(t,r))}function l(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(l=function(){return!!t})()}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function c(t,e){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},c(t,e)}var s,f=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},p=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},d=(s=function(t){return s=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},s(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=s(t),n=0;n<r.length;n++)"default"!==r[n]&&f(e,t,r[n]);return p(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var m=d(r(442)),h=r(355),y=["=","!=",">",">=","<","<="],b=function(t){function e(t){var r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(r=i(this,e,[t])).comparators=t.comparators||y,r.timeout=null;var n=void 0!==t.defaultValue&&void 0!==t.defaultValue.number;return t.options&&n&&(n=t.options.indexOf(t.defaultValue.number)>-1),r.state={isSelected:n},r.onChangeNumber=r.onChangeNumber.bind(r),r.onChangeNumberSet=r.onChangeNumberSet.bind(r),r.onChangeComparator=r.onChangeComparator.bind(r),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&c(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props,r=e.column,n=e.onFilter,o=e.getFilter,a=""===this.numberFilterComparator.value?"=":this.numberFilterComparator.value,i=this.numberFilter.value;a&&i&&n(r,h.FILTER_TYPES.NUMBER,!0)({number:i,comparator:a}),o&&o(function(e){t.setState(function(){return{isSelected:""!==e}}),t.numberFilterComparator.value=e.comparator,t.numberFilter.value=e.number;var o=e.number,a=e.comparator;n(r,h.FILTER_TYPES.NUMBER)({number:o,comparator:a})})}},{key:"componentWillUnmount",value:function(){clearTimeout(this.timeout)}},{key:"onChangeNumber",value:function(t){var e=this.props,r=e.delay,n=void 0===r?h.FILTER_DELAY:r,o=e.column,a=e.onFilter,i=this.numberFilterComparator.value;if(""!==i){this.timeout&&clearTimeout(this.timeout);var l=t.target.value;this.timeout=setTimeout(function(){a(o,h.FILTER_TYPES.NUMBER)({number:l,comparator:i})},n)}}},{key:"onChangeNumberSet",value:function(t){var e=this.props,r=e.column,n=e.onFilter,o=this.numberFilterComparator.value,a=t.target.value;this.setState(function(){return{isSelected:""!==a}}),n(r,h.FILTER_TYPES.NUMBER)({number:a,comparator:o})}},{key:"onChangeComparator",value:function(t){var e=this.props,r=e.column,n=e.onFilter,o=this.numberFilter.value,a=t.target.value;n(r,h.FILTER_TYPES.NUMBER)({number:o,comparator:a})}},{key:"getDefaultComparator",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{number:void 0,comparator:""}:e,n=t.filterState,o=void 0===n?{}:n;return o&&o.filterVal?o.filterVal.comparator:r&&r.comparator?r.comparator:""}},{key:"getDefaultValue",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{number:void 0,comparator:""}:e,n=t.filterState,o=void 0===n?{}:n;return o&&o.filterVal?o.filterVal.number:r&&r.number?r.number:""}},{key:"getComparatorOptions",value:function(){var t=[],e=this.props.withoutEmptyComparatorOption;void 0!==e&&e||t.push(m.default.createElement("option",{key:"-1"}));for(var r=0;r<this.comparators.length;r+=1)t.push(m.default.createElement("option",{key:r,value:this.comparators[r]},this.comparators[r]));return t}},{key:"getNumberOptions",value:function(){var t=[],e=this.props,r=e.options,n=e.column,o=e.withoutEmptyNumberOption;void 0!==o&&o||t.push(m.default.createElement("option",{key:"-1",value:""},this.props.placeholder||"Select ".concat(n.text,"...")));for(var a=0;a<r.length;a+=1)t.push(m.default.createElement("option",{key:a,value:r[a]},r[a]));return t}},{key:"applyFilter",value:function(t){var e=this.props,r=e.column,n=e.onFilter,o=t.number,a=t.comparator;this.setState(function(){return{isSelected:""!==o}}),this.numberFilterComparator.value=a,this.numberFilter.value=o,n(r,h.FILTER_TYPES.NUMBER)({number:o,comparator:a})}},{key:"cleanFiltered",value:function(){var t=this.props,e=t.column,r=t.onFilter,n=t.defaultValue,o=void 0===n?{number:void 0,comparator:""}:n,a=o?o.number:"",i=o?o.comparator:"";this.setState(function(){return{isSelected:""!==a}}),this.numberFilterComparator.value=i,this.numberFilter.value=a,r(e,h.FILTER_TYPES.NUMBER)({number:a,comparator:i})}},{key:"render",value:function(){var t=this,e=this.state.isSelected,r=this.props,n=r.id,o=void 0===n?null:n,a=r.column,i=r.options,l=r.style,u=r.className,c=void 0===u?"":u,s=r.numberStyle,f=r.numberClassName,p=void 0===f?"":f,d=r.comparatorStyle,h=r.comparatorClassName,y=void 0===h?"":h,b=r.placeholder,v="\n select-filter\n number-filter-input\n form-control\n ".concat(p,"\n ").concat(e?"":"placeholder-selected","\n "),E="number-filter-comparator-".concat(a.dataField).concat(o?"-".concat(o):""),g="number-filter-column-".concat(a.dataField).concat(o?"-".concat(o):"");return m.default.createElement("div",{onClick:function(t){return t.stopPropagation()},className:"filter number-filter ".concat(c),style:l,"data-testid":"number-filter"},m.default.createElement("label",{className:"filter-label",htmlFor:E},m.default.createElement("span",{className:"sr-only"},"Filter comparator"),m.default.createElement("select",{ref:function(e){t.numberFilterComparator=e},style:d,id:E,className:"number-filter-comparator form-control ".concat(y),onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"number-filter-comparator"},this.getComparatorOptions())),i?m.default.createElement("label",{className:"filter-label",htmlFor:g},m.default.createElement("span",{className:"sr-only"},"Select ".concat(a.text)),m.default.createElement("select",{ref:function(e){t.numberFilter=e},id:g,style:s,className:v,onChange:this.onChangeNumberSet,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-select"},this.getNumberOptions())):m.default.createElement("label",{htmlFor:g},m.default.createElement("span",{className:"sr-only"},"Enter ".concat(a.text)),m.default.createElement("input",{ref:function(e){t.numberFilter=e},id:g,type:"number",style:s,className:"number-filter-input form-control ".concat(p),placeholder:b||"Enter ".concat(a.text,"..."),onChange:this.onChangeNumber,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-input"})))}}],n&&o(r.prototype,n),a&&o(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(m.Component);e.default=b},851(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355),c=["=","!=",">",">=","<","<="];class s extends l.Component{constructor(t){super(t),this.comparators=t.comparators||c,this.timeout=null;let e=void 0!==t.defaultValue&&void 0!==t.defaultValue.number;t.options&&e&&(e=t.options.indexOf(t.defaultValue.number)>-1),this.state={isSelected:e},this.onChangeNumber=this.onChangeNumber.bind(this),this.onChangeNumberSet=this.onChangeNumberSet.bind(this),this.onChangeComparator=this.onChangeComparator.bind(this)}componentDidMount(){const{column:t,onFilter:e,getFilter:r}=this.props,n=""===this.numberFilterComparator.value?"=":this.numberFilterComparator.value,o=this.numberFilter.value;n&&o&&e(t,u.FILTER_TYPES.NUMBER,!0)({number:o,comparator:n}),r&&r(r=>{this.setState(()=>({isSelected:""!==r})),this.numberFilterComparator.value=r.comparator,this.numberFilter.value=r.number;const n=r.number,o=r.comparator;e(t,u.FILTER_TYPES.NUMBER)({number:n,comparator:o})})}componentWillUnmount(){clearTimeout(this.timeout)}onChangeNumber(t){const{delay:e=u.FILTER_DELAY,column:r,onFilter:n}=this.props,o=this.numberFilterComparator.value;if(""===o)return;this.timeout&&clearTimeout(this.timeout);const a=t.target.value;this.timeout=setTimeout(()=>{n(r,u.FILTER_TYPES.NUMBER)({number:a,comparator:o})},e)}onChangeNumberSet(t){const{column:e,onFilter:r}=this.props,n=this.numberFilterComparator.value,{value:o}=t.target;this.setState(()=>({isSelected:""!==o})),r(e,u.FILTER_TYPES.NUMBER)({number:o,comparator:n})}onChangeComparator(t){const{column:e,onFilter:r}=this.props,n=this.numberFilter.value,o=t.target.value;r(e,u.FILTER_TYPES.NUMBER)({number:n,comparator:o})}getDefaultComparator(){const{defaultValue:t={number:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal?e.filterVal.comparator:t&&t.comparator?t.comparator:""}getDefaultValue(){const{defaultValue:t={number:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal?e.filterVal.number:t&&t.number?t.number:""}getComparatorOptions(){const t=[],{withoutEmptyComparatorOption:e=!1}=this.props;e||t.push(l.default.createElement("option",{key:"-1"}));for(let e=0;e<this.comparators.length;e+=1)t.push(l.default.createElement("option",{key:e,value:this.comparators[e]},this.comparators[e]));return t}getNumberOptions(){const t=[],{options:e,column:r,withoutEmptyNumberOption:n=!1}=this.props;n||t.push(l.default.createElement("option",{key:"-1",value:""},this.props.placeholder||`Select ${r.text}...`));for(let r=0;r<e.length;r+=1)t.push(l.default.createElement("option",{key:r,value:e[r]},e[r]));return t}applyFilter(t){const{column:e,onFilter:r}=this.props,{number:n,comparator:o}=t;this.setState(()=>({isSelected:""!==n})),this.numberFilterComparator.value=o,this.numberFilter.value=n,r(e,u.FILTER_TYPES.NUMBER)({number:n,comparator:o})}cleanFiltered(){const{column:t,onFilter:e,defaultValue:r={number:void 0,comparator:""}}=this.props,n=r?r.number:"",o=r?r.comparator:"";this.setState(()=>({isSelected:""!==n})),this.numberFilterComparator.value=o,this.numberFilter.value=n,e(t,u.FILTER_TYPES.NUMBER)({number:n,comparator:o})}render(){const{isSelected:t}=this.state,{id:e=null,column:r,options:n,style:o,className:a="",numberStyle:i,numberClassName:u="",comparatorStyle:c,comparatorClassName:s="",placeholder:f}=this.props,p=`\n select-filter\n number-filter-input\n form-control\n ${u}\n ${t?"":"placeholder-selected"}\n `,d=`number-filter-comparator-${r.dataField}${e?`-${e}`:""}`,m=`number-filter-column-${r.dataField}${e?`-${e}`:""}`;return l.default.createElement("div",{onClick:t=>t.stopPropagation(),className:`filter number-filter ${a}`,style:o,"data-testid":"number-filter"},l.default.createElement("label",{className:"filter-label",htmlFor:d},l.default.createElement("span",{className:"sr-only"},"Filter comparator"),l.default.createElement("select",{ref:t=>{this.numberFilterComparator=t},style:c,id:d,className:`number-filter-comparator form-control ${s}`,onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"number-filter-comparator"},this.getComparatorOptions())),n?l.default.createElement("label",{className:"filter-label",htmlFor:m},l.default.createElement("span",{className:"sr-only"},`Select ${r.text}`),l.default.createElement("select",{ref:t=>{this.numberFilter=t},id:m,style:i,className:p,onChange:this.onChangeNumberSet,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-select"},this.getNumberOptions())):l.default.createElement("label",{htmlFor:m},l.default.createElement("span",{className:"sr-only"},`Enter ${r.text}`),l.default.createElement("input",{ref:t=>{this.numberFilter=t},id:m,type:"number",style:i,className:`number-filter-input form-control ${u}`,placeholder:f||`Enter ${r.text}...`,onChange:this.onChangeNumber,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-input"})))}}e.default=s},925(t){"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"}},r={},function t(n){var o=r[n];if(void 0!==o)return o.exports;var a=r[n]={exports:{}};return e[n].call(a.exports,a,a.exports,t),a.exports}(684);var e,r});
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIuanMiLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsVUFDUixtQkFBWEMsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLENBQUMsU0FBVUosR0FDUSxpQkFBWkMsUUFDZEEsUUFBcUMsNEJBQUlELEVBQVFHLFFBQVEsVUFFekRKLEVBQWtDLDRCQUFJQyxFQUFRRCxFQUFZLE1BQzNELENBVEQsQ0FTR08sS0FBT0MsSUFDVixPLDBCQ1JBLFNBQVNDLEVBQVFDLEdBQWdDLE9BQU9ELEVBQVUsbUJBQXFCRSxRQUFVLGlCQUFtQkEsT0FBT0MsU0FBVyxTQUFVRixHQUFLLGNBQWNBLENBQUcsRUFBSSxTQUFVQSxHQUFLLE9BQU9BLEdBQUssbUJBQXFCQyxRQUFVRCxFQUFFRyxjQUFnQkYsUUFBVUQsSUFBTUMsT0FBT0csVUFBWSxnQkFBa0JKLENBQUcsRUFBR0QsRUFBUUMsRUFBSSxDQUc3VCxTQUFTSyxFQUFrQkMsRUFBR0MsR0FBSyxJQUFLLElBQUlDLEVBQUksRUFBR0EsRUFBSUQsRUFBRUUsT0FBUUQsSUFBSyxDQUFFLElBQUlSLEVBQUlPLEVBQUVDLEdBQUlSLEVBQUVVLFdBQWFWLEVBQUVVLGFBQWMsRUFBSVYsRUFBRVcsY0FBZSxFQUFJLFVBQVdYLElBQU1BLEVBQUVZLFVBQVcsR0FBS0MsT0FBT0MsZUFBZVIsRUFBR1MsRUFBZWYsRUFBRWdCLEtBQU1oQixFQUFJLENBQUUsQ0FFdk8sU0FBU2UsRUFBZVAsR0FBSyxJQUFJUyxFQUNqQyxTQUFzQlQsRUFBR0QsR0FBSyxHQUFJLFVBQVlSLEVBQVFTLEtBQU9BLEVBQUcsT0FBT0EsRUFBRyxJQUFJRixFQUFJRSxFQUFFUCxPQUFPaUIsYUFBYyxRQUFTLElBQU1aLEVBQUcsQ0FBRSxJQUFJ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UUFBUyxDQUFDLEdBT1gsT0FIQWdaLEVBQW9CRixHQUFVblgsS0FBSzFCLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVM2WSxHQUdwRTVZLEVBQU9ELE9BQ2YsQ0NuQjBCNlksQ0FBb0IsSyxNREYxQ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvbGliL3NyYy9jb250ZXh0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvbGliL3NyYy9jb21wb25lbnRzL3NlbGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL2xpYi9zcmMvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvc3JjL2NvbXBvbmVudHMvbXVsdGlzZWxlY3QudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvbGliL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvc3JjL2NvbXBvbmVudHMvc2VsZWN0LnRzeCIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9zcmMvY29tcG9uZW50cy90ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL2xpYi9zcmMvY29tcG9uZW50cy9tdWx0aXNlbGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL3NyYy9maWx0ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9zcmMvY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9saWIvc3JjL2NvbXBvbmVudHMvdGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL2xpYi9zcmMvY29tcG9uZW50cy9kYXRlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvc3JjL2NvbXBvbmVudHMvZGF0ZS50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9saWIvc3JjL2NvbXBvbmVudHMvbnVtYmVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvc3JjL2NvbXBvbmVudHMvbnVtYmVyLnRzeCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZU5nRmlsdGVyXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ0ZpbHRlclwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXykgPT4ge1xucmV0dXJuICIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbnZhciBwcm9wX3R5cGVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfXzEgPSByZXF1aXJlKFwiLi5cIik7XG52YXIgZmlsdGVyXzEgPSByZXF1aXJlKFwiLi9maWx0ZXJcIik7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChfLCBpc1JlbW90ZUZpbHRlcmluZywgaGFuZGxlRmlsdGVyQ2hhbmdlKSB7XG4gIHZhciBGaWx0ZXJDb250ZXh0ID0gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlQ29udGV4dCh7fSk7XG4gIHZhciBGaWx0ZXJQcm92aWRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkZGVmYXVsdCRDb21wKSB7XG4gICAgZnVuY3Rpb24gRmlsdGVyUHJvdmlkZXIocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGaWx0ZXJQcm92aWRlcik7XG4gICAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRmlsdGVyUHJvdmlkZXIsIFtwcm9wc10pO1xuICAgICAgX3RoaXMuY3VyckZpbHRlcnMgPSB7fTtcbiAgICAgIF90aGlzLmNsZWFyRmlsdGVycyA9IHt9O1xuICAgICAgX3RoaXMub25GaWx0ZXIgPSBfdGhpcy5vbkZpbHRlci5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmRvRmlsdGVyID0gX3RoaXMuZG9GaWx0ZXIuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5vbkV4dGVybmFsRmlsdGVyID0gX3RoaXMub25FeHRlcm5hbEZpbHRlci5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmRhdGEgPSBwcm9wcy5kYXRhO1xuICAgICAgX3RoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfaW5oZXJpdHMoRmlsdGVyUHJvdmlkZXIsIF9yZWFjdF8xJGRlZmF1bHQkQ29tcCk7XG4gICAgcmV0dXJuIF9jcmVhdGVDbGFzcyhGaWx0ZXJQcm92aWRlciwgW3tcbiAgICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBpZiAoaXNSZW1vdGVGaWx0ZXJpbmcoKSAmJiBPYmplY3Qua2V5cyh0aGlzLmN1cnJGaWx0ZXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaGFuZGxlRmlsdGVyQ2hhbmdlKHRoaXMuY3VyckZpbHRlcnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIm9uRmlsdGVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gb25GaWx0ZXIoY29sdW1uLCBmaWx0ZXJUeXBlKSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgICB2YXIgaW5pdGlhbGl6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZmlsdGVyVmFsKSB7XG4gICAgICAgICAgLy8gd2F0Y2ggb3V0IGhlcmUgaWYgbWlncmF0aW9uIHRvIGNvbnRleHQgQVBJLCAjMzM0XG4gICAgICAgICAgdmFyIGN1cnJGaWx0ZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgX3RoaXMyLmN1cnJGaWx0ZXJzKTtcbiAgICAgICAgICBfdGhpczIuY2xlYXJGaWx0ZXJzID0ge307XG4gICAgICAgICAgdmFyIGRhdGFGaWVsZCA9IGNvbHVtbi5kYXRhRmllbGQsXG4gICAgICAgICAgICBmaWx0ZXIgPSBjb2x1bW4uZmlsdGVyO1xuICAgICAgICAgIHZhciBuZWVkQ2xlYXJGaWx0ZXJzID0gIV8uaXNEZWZpbmVkKGZpbHRlclZhbCkgfHwgZmlsdGVyVmFsID09PSBcIlwiIHx8IGZpbHRlclZhbC5sZW5ndGggPT09IDA7XG4gICAgICAgICAgaWYgKG5lZWRDbGVhckZpbHRlcnMpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjdXJyRmlsdGVyc1tkYXRhRmllbGRdO1xuICAgICAgICAgICAgX3RoaXMyLmNsZWFyRmlsdGVycyA9IF9kZWZpbmVQcm9wZXJ0eSh7fSwgZGF0YUZpZWxkLCB7XG4gICAgICAgICAgICAgIGNsZWFyOiB0cnVlLFxuICAgICAgICAgICAgICBmaWx0ZXJWYWw6IGZpbHRlclZhbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNlbGVjdCBkZWZhdWx0IGNvbXBhcmF0b3IgaXMgRVEsIG90aGVycyBhcmUgTElLRVxuICAgICAgICAgICAgdmFyIF9maWx0ZXIkcHJvcHMgPSBmaWx0ZXIucHJvcHMsXG4gICAgICAgICAgICAgIF9maWx0ZXIkcHJvcHMkY29tcGFyYSA9IF9maWx0ZXIkcHJvcHMuY29tcGFyYXRvcixcbiAgICAgICAgICAgICAgY29tcGFyYXRvciA9IF9maWx0ZXIkcHJvcHMkY29tcGFyYSA9PT0gdm9pZCAwID8gZmlsdGVyVHlwZSA9PT0gX18xLkZJTFRFUl9UWVBFUy5TRUxFQ1QgPyBfXzEuRVEgOiBfXzEuTElLRSA6IF9maWx0ZXIkcHJvcHMkY29tcGFyYSxcbiAgICAgICAgICAgICAgX2ZpbHRlciRwcm9wcyRjYXNlU2VuID0gX2ZpbHRlciRwcm9wcy5jYXNlU2Vuc2l0aXZlLFxuICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlID0gX2ZpbHRlciRwcm9wcyRjYXNlU2VuID09PSB2b2lkIDAgPyBmYWxzZSA6IF9maWx0ZXIkcHJvcHMkY2FzZVNlbjtcbiAgICAgICAgICAgIGN1cnJGaWx0ZXJzW2RhdGFGaWVsZF0gPSB7XG4gICAgICAgICAgICAgIGZpbHRlclZhbDogZmlsdGVyVmFsLFxuICAgICAgICAgICAgICBmaWx0ZXJUeXBlOiBmaWx0ZXJUeXBlLFxuICAgICAgICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yLFxuICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiBjYXNlU2Vuc2l0aXZlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpczIuY3VyckZpbHRlcnMgPSBjdXJyRmlsdGVycztcbiAgICAgICAgICBpZiAoaXNSZW1vdGVGaWx0ZXJpbmcoKSkge1xuICAgICAgICAgICAgaWYgKCFpbml0aWFsaXplKSB7XG4gICAgICAgICAgICAgIGhhbmRsZUZpbHRlckNoYW5nZShfdGhpczIuY3VyckZpbHRlcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMyLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIF90aGlzMi5kb0ZpbHRlcihfdGhpczIucHJvcHMpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvbkV4dGVybmFsRmlsdGVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gb25FeHRlcm5hbEZpbHRlcihjb2x1bW4sIGZpbHRlclR5cGUpIHtcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBfdGhpczMub25GaWx0ZXIoY29sdW1uLCBmaWx0ZXJUeXBlKSh2YWx1ZSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImdldEZpbHRlcmVkXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RmlsdGVyZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInNob3VsZENvbXBvbmVudFVwZGF0ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpIHtcbiAgICAgICAgaWYgKCFpc1JlbW90ZUZpbHRlcmluZygpICYmICFfLmlzRXF1YWwobmV4dFByb3BzLmRhdGEsIHRoaXMuZGF0YSkpIHtcbiAgICAgICAgICB0aGlzLmRvRmlsdGVyKG5leHRQcm9wcywgdGhpcy5pc0VtaXREYXRhQ2hhbmdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRhdGEgPSBuZXh0UHJvcHMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZG9GaWx0ZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkb0ZpbHRlcihwcm9wcykge1xuICAgICAgICB2YXIgaWdub3JlRW1pdERhdGFDaGFuZ2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICB2YXIgZGF0YUNoYW5nZUxpc3RlbmVyID0gcHJvcHMuZGF0YUNoYW5nZUxpc3RlbmVyLFxuICAgICAgICAgIGRhdGEgPSBwcm9wcy5kYXRhLFxuICAgICAgICAgIGNvbHVtbnMgPSBwcm9wcy5jb2x1bW5zLFxuICAgICAgICAgIGZpbHRlciA9IHByb3BzLmZpbHRlcjtcbiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBmaWx0ZXJfMS5maWx0ZXJzKShkYXRhLCBjb2x1bW5zLCBfKSh0aGlzLmN1cnJGaWx0ZXJzLCB0aGlzLmNsZWFyRmlsdGVycyk7XG4gICAgICAgIGlmIChmaWx0ZXIuYWZ0ZXJGaWx0ZXIpIHtcbiAgICAgICAgICBmaWx0ZXIuYWZ0ZXJGaWx0ZXIocmVzdWx0LCB0aGlzLmN1cnJGaWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGEgPSByZXN1bHQ7XG4gICAgICAgIGlmIChkYXRhQ2hhbmdlTGlzdGVuZXIgJiYgIWlnbm9yZUVtaXREYXRhQ2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5pc0VtaXREYXRhQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICBkYXRhQ2hhbmdlTGlzdGVuZXIuZW1pdChcImZpbHRlckNoYW5nZWRcIiwgcmVzdWx0Lmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pc0VtaXREYXRhQ2hhbmdlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoRmlsdGVyQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBvbkZpbHRlcjogdGhpcy5vbkZpbHRlcixcbiAgICAgICAgICAgIG9uRXh0ZXJuYWxGaWx0ZXI6IHRoaXMub25FeHRlcm5hbEZpbHRlcixcbiAgICAgICAgICAgIGN1cnJGaWx0ZXJzOiB0aGlzLmN1cnJGaWx0ZXJzXG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XSk7XG4gIH0ocmVhY3RfMVtcImRlZmF1bHRcIl0uQ29tcG9uZW50KTtcbiAgRmlsdGVyUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAgIGRhdGE6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBjb2x1bW5zOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgZGF0YUNoYW5nZUxpc3RlbmVyOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm9iamVjdFxuICB9O1xuICByZXR1cm4ge1xuICAgIFByb3ZpZGVyOiBGaWx0ZXJQcm92aWRlcixcbiAgICBDb25zdW1lcjogRmlsdGVyQ29udGV4dC5Db25zdW1lclxuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImlkXCIsIFwic3R5bGVcIiwgXCJjbGFzc05hbWVcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJvbkZpbHRlclwiLCBcImNvbHVtblwiLCBcIm9wdGlvbnNcIiwgXCJjb21wYXJhdG9yXCIsIFwid2l0aG91dEVtcHR5T3B0aW9uXCIsIFwiY2FzZVNlbnNpdGl2ZVwiLCBcImdldEZpbHRlclwiLCBcImZpbHRlclN0YXRlXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgcmVhY3Qvbm8tdW51c2VkLXByb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCBjbGFzcy1tZXRob2RzLXVzZS10aGlzOiAwICovXG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9fMSA9IHJlcXVpcmUoXCIuLi8uLlwiKTtcbmZ1bmN0aW9uIG9wdGlvbnNFcXVhbHMoY3Vyck9wdHMsIHByZXZPcHRzKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGN1cnJPcHRzKSkge1xuICAgIGlmIChjdXJyT3B0cy5sZW5ndGggPT09IHByZXZPcHRzLmxlbmd0aCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyT3B0cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoY3Vyck9wdHNbaV0udmFsdWUgIT09IHByZXZPcHRzW2ldLnZhbHVlIHx8IGN1cnJPcHRzW2ldLmxhYmVsICE9PSBwcmV2T3B0c1tpXS5sYWJlbCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGN1cnJPcHRzKTtcbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGtleXMubGVuZ3RoOyBfaSArPSAxKSB7XG4gICAgaWYgKGN1cnJPcHRzW2tleXNbX2ldXSAhPT0gcHJldk9wdHNba2V5c1tfaV1dKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhjdXJyT3B0cykubGVuZ3RoID09PSBPYmplY3Qua2V5cyhwcmV2T3B0cykubGVuZ3RoO1xufVxuZnVuY3Rpb24gZ2V0T3B0aW9uVmFsdWUob3B0aW9ucywga2V5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgdmFyIHJlc3VsdCA9IG9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgbGFiZWwgPSBfcmVmLmxhYmVsO1xuICAgICAgcmV0dXJuIGxhYmVsID09PSBrZXk7XG4gICAgfSkubWFwKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgdmFyIHZhbHVlID0gX3JlZjIudmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdFswXTtcbiAgfVxuICByZXR1cm4gb3B0aW9uc1trZXldO1xufVxudmFyIFNlbGVjdEZpbHRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIFNlbGVjdEZpbHRlcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2VsZWN0RmlsdGVyKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgU2VsZWN0RmlsdGVyLCBbcHJvcHNdKTtcbiAgICBfdGhpcy5maWx0ZXIgPSBfdGhpcy5maWx0ZXIuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub3B0aW9ucyA9IF90aGlzLmdldE9wdGlvbnMocHJvcHMpO1xuICAgIHZhciBpc1NlbGVjdGVkID0gZ2V0T3B0aW9uVmFsdWUoX3RoaXMub3B0aW9ucywgX3RoaXMuZ2V0RGVmYXVsdFZhbHVlKCkpICE9PSB1bmRlZmluZWQ7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBpc1NlbGVjdGVkOiBpc1NlbGVjdGVkXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKFNlbGVjdEZpbHRlciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhTZWxlY3RGaWx0ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wcy5jb2x1bW4sXG4gICAgICAgIG9uRmlsdGVyID0gX3RoaXMkcHJvcHMub25GaWx0ZXIsXG4gICAgICAgIGdldEZpbHRlciA9IF90aGlzJHByb3BzLmdldEZpbHRlcjtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuc2VsZWN0SW5wdXQudmFsdWU7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUgIT09IFwiXCIpIHtcbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5TRUxFQ1QsIHRydWUpKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCBvbkZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3NcbiAgICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgICAgZ2V0RmlsdGVyKGZ1bmN0aW9uIChmaWx0ZXJWYWwpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaXNTZWxlY3RlZDogZmlsdGVyVmFsICE9PSBcIlwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIF90aGlzMi5zZWxlY3RJbnB1dC52YWx1ZSA9IGZpbHRlclZhbDtcbiAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5TRUxFQ1QpKGZpbHRlclZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIG5lZWRGaWx0ZXIgPSBmYWxzZTtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczIuY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzMi5vbkZpbHRlcixcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMyLmRlZmF1bHRWYWx1ZTtcbiAgICAgIHZhciBuZXh0T3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucyh0aGlzLnByb3BzKTtcbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IHByZXZQcm9wcy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RJbnB1dC52YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgbmVlZEZpbHRlciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zRXF1YWxzKG5leHRPcHRpb25zLCB0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG5leHRPcHRpb25zO1xuICAgICAgICBuZWVkRmlsdGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkRmlsdGVyKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuc2VsZWN0SW5wdXQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLlNFTEVDVCkodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldE9wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3B0aW9ucyhwcm9wcykge1xuICAgICAgcmV0dXJuIHR5cGVvZiBwcm9wcy5vcHRpb25zID09PSBcImZ1bmN0aW9uXCIgPyBwcm9wcy5vcHRpb25zKHByb3BzLmNvbHVtbikgOiBwcm9wcy5vcHRpb25zO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXREZWZhdWx0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGZpbHRlclN0YXRlID0gX3RoaXMkcHJvcHMzLmZpbHRlclN0YXRlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczMuZGVmYXVsdFZhbHVlO1xuICAgICAgaWYgKGZpbHRlclN0YXRlICYmIHR5cGVvZiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlclN0YXRlLmZpbHRlclZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuRmlsdGVyZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSA6IFwiXCI7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIlxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNlbGVjdElucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBUT0RPXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLlNFTEVDVCkodmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhcHBseUZpbHRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhcHBseUZpbHRlcih2YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RJbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTZWxlY3RlZDogdmFsdWUgIT09IFwiXCJcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5TRUxFQ1QpKHZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpbHRlcihlKSB7XG4gICAgICB2YXIgdmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2VsZWN0ZWQ6IHZhbHVlICE9PSBcIlwiXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuU0VMRUNUKSh2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlck9wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyT3B0aW9ucygpIHtcbiAgICAgIHZhciBvcHRpb25UYWdzID0gW107XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzNC5wbGFjZWhvbGRlcixcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHM0LmNvbHVtbixcbiAgICAgICAgd2l0aG91dEVtcHR5T3B0aW9uID0gX3RoaXMkcHJvcHM0LndpdGhvdXRFbXB0eU9wdGlvbixcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHM0LmRlZmF1bHRWYWx1ZTtcbiAgICAgIHZhciBpc1NlbGVjdGVkID0gZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgZGVmYXVsdFZhbHVlICE9PSBcIlwiO1xuICAgICAgaWYgKCF3aXRob3V0RW1wdHlPcHRpb24gJiYgIWlzU2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uVGFncy5wdXNoKHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgIGtleTogXCItMVwiLFxuICAgICAgICAgIHZhbHVlOiBcIlwiLFxuICAgICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJzZWxlY3QtZmlsdGVyLXBsYWNlaG9sZGVyXCJcbiAgICAgICAgfSwgcGxhY2Vob2xkZXIgfHwgXCJTZWxlY3QgXCIuY29uY2F0KGNvbHVtbi50ZXh0LCBcIi4uLlwiKSkpO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IF9yZWYzLnZhbHVlLFxuICAgICAgICAgICAgbGFiZWwgPSBfcmVmMy5sYWJlbDtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uVGFncy5wdXNoKHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgICAga2V5OiB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgIH0sIGxhYmVsKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgdmFsdWU6IGtleVxuICAgICAgICAgIH0sIG9wdGlvbnNba2V5XSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25UYWdzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczUuaWQsXG4gICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHM1LnN0eWxlLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczUuY2xhc3NOYW1lLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczUuZGVmYXVsdFZhbHVlLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzNS5vbkZpbHRlcixcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHM1LmNvbHVtbixcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzNS5vcHRpb25zLFxuICAgICAgICBjb21wYXJhdG9yID0gX3RoaXMkcHJvcHM1LmNvbXBhcmF0b3IsXG4gICAgICAgIHdpdGhvdXRFbXB0eU9wdGlvbiA9IF90aGlzJHByb3BzNS53aXRob3V0RW1wdHlPcHRpb24sXG4gICAgICAgIGNhc2VTZW5zaXRpdmUgPSBfdGhpcyRwcm9wczUuY2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgZ2V0RmlsdGVyID0gX3RoaXMkcHJvcHM1LmdldEZpbHRlcixcbiAgICAgICAgZmlsdGVyU3RhdGUgPSBfdGhpcyRwcm9wczUuZmlsdGVyU3RhdGUsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHM1LCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIHNlbGVjdENsYXNzID0gXCJmaWx0ZXIgc2VsZWN0LWZpbHRlciBmb3JtLWNvbnRyb2wgXCIuY29uY2F0KGNsYXNzTmFtZSwgXCIgXCIpLmNvbmNhdCh0aGlzLnN0YXRlLmlzU2VsZWN0ZWQgPyBcIlwiIDogXCJwbGFjZWhvbGRlci1zZWxlY3RlZFwiKTtcbiAgICAgIHZhciBlbG1JZCA9IFwic2VsZWN0LWZpbHRlci1jb2x1bW4tXCIuY29uY2F0KGNvbHVtbi5kYXRhRmllbGQpLmNvbmNhdChpZCA/IFwiLVwiLmNvbmNhdChpZCkgOiBcIlwiKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyLWxhYmVsXCIsXG4gICAgICAgIGh0bWxGb3I6IGVsbUlkXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzci1vbmx5XCJcbiAgICAgIH0sIFwiRmlsdGVyIGJ5IFwiLCBjb2x1bW4udGV4dCksIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0KSwge30sIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5zZWxlY3RJbnB1dCA9IG47XG4gICAgICAgIH0sXG4gICAgICAgIGlkOiBlbG1JZCxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBjbGFzc05hbWU6IHNlbGVjdENsYXNzLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5maWx0ZXIsXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgICAgIHJldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCkgfHwgXCJcIixcbiAgICAgICAgXCJkYXRhLXRlc3RpZFwiOiBcInNlbGVjdC1maWx0ZXJcIlxuICAgICAgfSksIHRoaXMucmVuZGVyT3B0aW9ucygpKSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTsgLy8gU2VsZWN0RmlsdGVyLnByb3BUeXBlcyA9IHtcbi8vICAgb25GaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZmlsdGVyU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIG9wdGlvbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5hcnJheV0pLmlzUmVxdWlyZWQsXG4vLyAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihbTElLRSwgRVFdKSxcbi8vICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHdpdGhvdXRFbXB0eU9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbi8vICAgY2FzZVNlbnNpdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGdldEZpbHRlcjogUHJvcFR5cGVzLmZ1bmNcbi8vIH07XG4vLyBTZWxlY3RGaWx0ZXIuZGVmYXVsdFByb3BzID0ge1xuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBmaWx0ZXJTdGF0ZToge30sXG4vLyAgIGNsYXNzTmFtZTogJycsXG4vLyAgIHdpdGhvdXRFbXB0eU9wdGlvbjogZmFsc2UsXG4vLyAgIGNvbXBhcmF0b3I6IEVRLFxuLy8gICBjYXNlU2Vuc2l0aXZlOiB0cnVlLFxuLy8gICBpZDogbnVsbFxuLy8gfTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gU2VsZWN0RmlsdGVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZpbHRlcnMgPSBleHBvcnRzLmZpbHRlckZhY3RvcnkgPSBleHBvcnRzLmZpbHRlckJ5QXJyYXkgPSBleHBvcnRzLmZpbHRlckJ5RGF0ZSA9IGV4cG9ydHMuZmlsdGVyQnlOdW1iZXIgPSBleHBvcnRzLmZpbHRlckJ5VGV4dCA9IHZvaWQgMDtcbi8qIGVzbGludCBlcWVxZXE6IDAgKi9cbi8qIGVzbGludCBuby1jb25zb2xlOiAwICovXG52YXIgX18xID0gcmVxdWlyZShcIi4uXCIpO1xudmFyIGZpbHRlckJ5VGV4dCA9IGZ1bmN0aW9uIGZpbHRlckJ5VGV4dChfKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGF0YSwgZGF0YUZpZWxkLCBfcmVmLCBjdXN0b21GaWx0ZXJWYWx1ZSkge1xuICAgIHZhciBfcmVmJGZpbHRlclZhbCA9IF9yZWYuZmlsdGVyVmFsLFxuICAgICAgdXNlcklucHV0ID0gX3JlZiRmaWx0ZXJWYWwgPT09IHZvaWQgMCA/IFwiXCIgOiBfcmVmJGZpbHRlclZhbCxcbiAgICAgIF9yZWYkY29tcGFyYXRvciA9IF9yZWYuY29tcGFyYXRvcixcbiAgICAgIGNvbXBhcmF0b3IgPSBfcmVmJGNvbXBhcmF0b3IgPT09IHZvaWQgMCA/IF9fMS5MSUtFIDogX3JlZiRjb21wYXJhdG9yLFxuICAgICAgY2FzZVNlbnNpdGl2ZSA9IF9yZWYuY2FzZVNlbnNpdGl2ZTtcbiAgICAvLyBtYWtlIHN1cmUgZmlsdGVyIHZhbHVlIHRvIGJlIGEgc3RyaW5nXG4gICAgdmFyIGZpbHRlclZhbCA9IHVzZXJJbnB1dC50b1N0cmluZygpO1xuICAgIHJldHVybiBkYXRhLmZpbHRlcihmdW5jdGlvbiAocm93KSB7XG4gICAgICB2YXIgY2VsbCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIGlmIChjdXN0b21GaWx0ZXJWYWx1ZSkge1xuICAgICAgICBjZWxsID0gY3VzdG9tRmlsdGVyVmFsdWUoY2VsbCwgcm93KTtcbiAgICAgIH1cbiAgICAgIHZhciBjZWxsU3RyID0gXy5pc0RlZmluZWQoY2VsbCkgPyBjZWxsLnRvU3RyaW5nKCkgOiBcIlwiO1xuICAgICAgaWYgKGNvbXBhcmF0b3IgPT09IF9fMS5FUSkge1xuICAgICAgICByZXR1cm4gY2VsbFN0ciA9PT0gZmlsdGVyVmFsO1xuICAgICAgfVxuICAgICAgaWYgKGNhc2VTZW5zaXRpdmUpIHtcbiAgICAgICAgcmV0dXJuIGNlbGxTdHIuaW5jbHVkZXMoZmlsdGVyVmFsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjZWxsU3RyLnRvTG9jYWxlVXBwZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJWYWwudG9Mb2NhbGVVcHBlckNhc2UoKSkgIT09IC0xO1xuICAgIH0pO1xuICB9O1xufTtcbmV4cG9ydHMuZmlsdGVyQnlUZXh0ID0gZmlsdGVyQnlUZXh0O1xudmFyIGZpbHRlckJ5TnVtYmVyID0gZnVuY3Rpb24gZmlsdGVyQnlOdW1iZXIoXykge1xuICByZXR1cm4gZnVuY3Rpb24gKGRhdGEsIGRhdGFGaWVsZCwgX3JlZjIsIGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgdmFyIF9yZWYyJGZpbHRlclZhbCA9IF9yZWYyLmZpbHRlclZhbCxcbiAgICAgIGNvbXBhcmF0b3IgPSBfcmVmMiRmaWx0ZXJWYWwuY29tcGFyYXRvcixcbiAgICAgIG51bWJlciA9IF9yZWYyJGZpbHRlclZhbC5udW1iZXI7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgIGlmIChudW1iZXIgPT09IFwiXCIgfHwgIWNvbXBhcmF0b3IpIHJldHVybiB0cnVlO1xuICAgICAgdmFyIGNlbGwgPSBfLmdldChyb3csIGRhdGFGaWVsZCk7XG4gICAgICBpZiAoY3VzdG9tRmlsdGVyVmFsdWUpIHtcbiAgICAgICAgY2VsbCA9IGN1c3RvbUZpbHRlclZhbHVlKGNlbGwsIHJvdyk7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGNvbXBhcmF0b3IpIHtcbiAgICAgICAgY2FzZSBfXzEuRVE6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGNlbGwgPT0gbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfXzEuR1Q6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGNlbGwgPiBudW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIF9fMS5HRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gY2VsbCA+PSBudW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIF9fMS5MVDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gY2VsbCA8IG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX18xLkxFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBjZWxsIDw9IG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX18xLk5FOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBjZWxsICE9IG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk51bWJlciBjb21wYXJhdG9yIHByb3ZpZGVkIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59O1xuZXhwb3J0cy5maWx0ZXJCeU51bWJlciA9IGZpbHRlckJ5TnVtYmVyO1xudmFyIGZpbHRlckJ5RGF0ZSA9IGZ1bmN0aW9uIGZpbHRlckJ5RGF0ZShfKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGF0YSwgZGF0YUZpZWxkLCBfcmVmMywgY3VzdG9tRmlsdGVyVmFsdWUpIHtcbiAgICB2YXIgX3JlZjMkZmlsdGVyVmFsID0gX3JlZjMuZmlsdGVyVmFsLFxuICAgICAgY29tcGFyYXRvciA9IF9yZWYzJGZpbHRlclZhbC5jb21wYXJhdG9yLFxuICAgICAgZGF0ZSA9IF9yZWYzJGZpbHRlclZhbC5kYXRlO1xuICAgIGlmICghZGF0ZSB8fCAhY29tcGFyYXRvcikgcmV0dXJuIGRhdGE7XG4gICAgdmFyIGZpbHRlckRhdGUgPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICB2YXIgZmlsdGVyTW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgdmFyIGZpbHRlclllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgIHZhciB2YWxpZCA9IHRydWU7XG4gICAgICB2YXIgY2VsbCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIGlmIChjdXN0b21GaWx0ZXJWYWx1ZSkge1xuICAgICAgICBjZWxsID0gY3VzdG9tRmlsdGVyVmFsdWUoY2VsbCwgcm93KTtcbiAgICAgIH1cbiAgICAgIGlmIChfdHlwZW9mKGNlbGwpICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGNlbGwgPSBuZXcgRGF0ZShjZWxsKTtcbiAgICAgIH1cbiAgICAgIHZhciB0YXJnZXREYXRlID0gY2VsbC5nZXRVVENEYXRlKCk7XG4gICAgICB2YXIgdGFyZ2V0TW9udGggPSBjZWxsLmdldFVUQ01vbnRoKCk7XG4gICAgICB2YXIgdGFyZ2V0WWVhciA9IGNlbGwuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgIHN3aXRjaCAoY29tcGFyYXRvcikge1xuICAgICAgICBjYXNlIF9fMS5FUTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyRGF0ZSAhPT0gdGFyZ2V0RGF0ZSB8fCBmaWx0ZXJNb250aCAhPT0gdGFyZ2V0TW9udGggfHwgZmlsdGVyWWVhciAhPT0gdGFyZ2V0WWVhcikge1xuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIF9fMS5HVDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoY2VsbCA8PSBkYXRlKSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX18xLkdFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXRZZWFyIDwgZmlsdGVyWWVhcikge1xuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRZZWFyID09PSBmaWx0ZXJZZWFyICYmIHRhcmdldE1vbnRoIDwgZmlsdGVyTW9udGgpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0WWVhciA9PT0gZmlsdGVyWWVhciAmJiB0YXJnZXRNb250aCA9PT0gZmlsdGVyTW9udGggJiYgdGFyZ2V0RGF0ZSA8IGZpbHRlckRhdGUpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfXzEuTFQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGNlbGwgPj0gZGF0ZSkge1xuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIF9fMS5MRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0WWVhciA+IGZpbHRlclllYXIpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0WWVhciA9PT0gZmlsdGVyWWVhciAmJiB0YXJnZXRNb250aCA+IGZpbHRlck1vbnRoKSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFllYXIgPT09IGZpbHRlclllYXIgJiYgdGFyZ2V0TW9udGggPT09IGZpbHRlck1vbnRoICYmIHRhcmdldERhdGUgPiBmaWx0ZXJEYXRlKSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX18xLk5FOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJEYXRlID09PSB0YXJnZXREYXRlICYmIGZpbHRlck1vbnRoID09PSB0YXJnZXRNb250aCAmJiBmaWx0ZXJZZWFyID09PSB0YXJnZXRZZWFyKSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkRhdGUgY29tcGFyYXRvciBwcm92aWRlZCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH0pO1xuICB9O1xufTtcbmV4cG9ydHMuZmlsdGVyQnlEYXRlID0gZmlsdGVyQnlEYXRlO1xudmFyIGZpbHRlckJ5QXJyYXkgPSBmdW5jdGlvbiBmaWx0ZXJCeUFycmF5KF8pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhLCBkYXRhRmllbGQsIF9yZWY0KSB7XG4gICAgdmFyIGZpbHRlclZhbCA9IF9yZWY0LmZpbHRlclZhbCxcbiAgICAgIGNvbXBhcmF0b3IgPSBfcmVmNC5jb21wYXJhdG9yO1xuICAgIGlmIChmaWx0ZXJWYWwubGVuZ3RoID09PSAwKSByZXR1cm4gZGF0YTtcbiAgICB2YXIgcmVmaW5lZEZpbHRlclZhbCA9IGZpbHRlclZhbC5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBfLmlzRGVmaW5lZCh4KTtcbiAgICB9KS5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnRvU3RyaW5nKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgIHZhciBjZWxsID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuICAgICAgdmFyIGNlbGxTdHIgPSBfLmlzRGVmaW5lZChjZWxsKSA/IGNlbGwudG9TdHJpbmcoKSA6IFwiXCI7XG4gICAgICBpZiAoY29tcGFyYXRvciA9PT0gX18xLkVRKSB7XG4gICAgICAgIHJldHVybiByZWZpbmVkRmlsdGVyVmFsLmluZGV4T2YoY2VsbFN0cikgIT09IC0xO1xuICAgICAgfVxuICAgICAgY2VsbFN0ciA9IGNlbGxTdHIudG9Mb2NhbGVVcHBlckNhc2UoKTtcbiAgICAgIHJldHVybiByZWZpbmVkRmlsdGVyVmFsLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGNlbGxTdHIuaW5kZXhPZihpdGVtLnRvTG9jYWxlVXBwZXJDYXNlKCkpICE9PSAtMTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufTtcbmV4cG9ydHMuZmlsdGVyQnlBcnJheSA9IGZpbHRlckJ5QXJyYXk7XG52YXIgZmlsdGVyRmFjdG9yeSA9IGZ1bmN0aW9uIGZpbHRlckZhY3RvcnkoXykge1xuICByZXR1cm4gZnVuY3Rpb24gKGZpbHRlclR5cGUpIHtcbiAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHtcbiAgICAgIGNhc2UgX18xLkZJTFRFUl9UWVBFUy5NVUxUSVNFTEVDVDpcbiAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmZpbHRlckJ5QXJyYXkpKF8pO1xuICAgICAgY2FzZSBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUjpcbiAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmZpbHRlckJ5TnVtYmVyKShfKTtcbiAgICAgIGNhc2UgX18xLkZJTFRFUl9UWVBFUy5EQVRFOlxuICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuZmlsdGVyQnlEYXRlKShfKTtcbiAgICAgIGNhc2UgX18xLkZJTFRFUl9UWVBFUy5URVhUOlxuICAgICAgY2FzZSBfXzEuRklMVEVSX1RZUEVTLlNFTEVDVDpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIFVzZSBgdGV4dGAgZmlsdGVyIGFzIGRlZmF1bHQgZmlsdGVyXG4gICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5maWx0ZXJCeVRleHQpKF8pO1xuICAgIH1cbiAgfTtcbn07XG5leHBvcnRzLmZpbHRlckZhY3RvcnkgPSBmaWx0ZXJGYWN0b3J5O1xudmFyIGZpbHRlcnMgPSBmdW5jdGlvbiBmaWx0ZXJzKGRhdGEsIGNvbHVtbnMsIF8pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChjdXJyRmlsdGVycykge1xuICAgIHZhciBjbGVhckZpbHRlcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciBmYWN0b3J5ID0gKDAsIGV4cG9ydHMuZmlsdGVyRmFjdG9yeSkoXyk7XG4gICAgdmFyIGZpbHRlclN0YXRlID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjbGVhckZpbHRlcnMpLCBjdXJyRmlsdGVycyk7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGE7XG4gICAgdmFyIGZpbHRlckZuO1xuICAgIE9iamVjdC5rZXlzKGZpbHRlclN0YXRlKS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhRmllbGQpIHtcbiAgICAgIHZhciBjdXJyZW50UmVzdWx0O1xuICAgICAgdmFyIGZpbHRlclZhbHVlO1xuICAgICAgdmFyIGN1c3RvbUZpbHRlcjtcbiAgICAgIGNvbHVtbnMgPSBjb2x1bW5zICE9PSBudWxsICYmIGNvbHVtbnMgIT09IHZvaWQgMCA/IGNvbHVtbnMgOiBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoY29sdW1uc1tpXS5kYXRhRmllbGQgPT09IGRhdGFGaWVsZCkge1xuICAgICAgICAgIGZpbHRlclZhbHVlID0gY29sdW1uc1tpXS5maWx0ZXJWYWx1ZTtcbiAgICAgICAgICBpZiAoY29sdW1uc1tpXS5maWx0ZXIpIHtcbiAgICAgICAgICAgIGN1c3RvbUZpbHRlciA9IGNvbHVtbnNbaV0uZmlsdGVyLnByb3BzLm9uRmlsdGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNsZWFyRmlsdGVyc1tkYXRhRmllbGRdICYmIGN1c3RvbUZpbHRlcikge1xuICAgICAgICBjdXJyZW50UmVzdWx0ID0gY3VzdG9tRmlsdGVyKGNsZWFyRmlsdGVyc1tkYXRhRmllbGRdLmZpbHRlclZhbCwgcmVzdWx0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50UmVzdWx0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgcmVzdWx0ID0gY3VycmVudFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGZpbHRlck9iaiA9IGZpbHRlclN0YXRlW2RhdGFGaWVsZF07XG4gICAgICAgIGZpbHRlckZuID0gZmFjdG9yeShmaWx0ZXJPYmouZmlsdGVyVHlwZSk7XG4gICAgICAgIGlmIChjdXN0b21GaWx0ZXIpIHtcbiAgICAgICAgICBjdXJyZW50UmVzdWx0ID0gY3VzdG9tRmlsdGVyKGZpbHRlck9iai5maWx0ZXJWYWwsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50UmVzdWx0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZmlsdGVyRm4ocmVzdWx0LCBkYXRhRmllbGQsIGZpbHRlck9iaiwgZmlsdGVyVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnRSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcbmV4cG9ydHMuZmlsdGVycyA9IGZpbHRlcnM7IiwiLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCBuby1wYXJhbS1yZWFzc2lnbjogMCAqL1xuLyogZXNsaW50IHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBFUSxcbiAgRklMVEVSX1RZUEVTLFxuICBNdWx0aVNlbGVjdEZpbHRlck9wdGlvbnMsXG4gIE11bHRpU2VsZWN0RmlsdGVyUHJvcHMsXG59IGZyb20gXCIuLi8uLlwiO1xuXG5mdW5jdGlvbiBvcHRpb25zRXF1YWxzKGN1cnJPcHRzOiBhbnksIHByZXZPcHRzOiBhbnkpIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGN1cnJPcHRzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGN1cnJPcHRzW2tleXNbaV1dICE9PSBwcmV2T3B0c1trZXlzW2ldXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMoY3Vyck9wdHMpLmxlbmd0aCA9PT0gT2JqZWN0LmtleXMocHJldk9wdHMpLmxlbmd0aDtcbn1cblxuY29uc3QgZ2V0U2VsZWN0aW9ucyA9IChjb250YWluZXI6IGFueSkgPT4ge1xuICBpZiAoY29udGFpbmVyICYmIGNvbnRhaW5lci5zZWxlY3RlZE9wdGlvbnMpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShjb250YWluZXIuc2VsZWN0ZWRPcHRpb25zKS5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS52YWx1ZSk7XG4gIH1cbiAgaWYgKGNvbnRhaW5lciAmJiBBcnJheS5pc0FycmF5KGNvbnRhaW5lci52YWx1ZSkpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLnZhbHVlO1xuICB9XG4gIGNvbnN0IHNlbGVjdGlvbnMgPSBbXTtcbiAgY29uc3QgdG90YWxMZW4gPSBjb250YWluZXIgJiYgY29udGFpbmVyLm9wdGlvbnMgPyBjb250YWluZXIub3B0aW9ucy5sZW5ndGggOiAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsTGVuOyBpICs9IDEpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjb250YWluZXIub3B0aW9uc1tpXTtcbiAgICBpZiAob3B0aW9uICYmIG9wdGlvbi5zZWxlY3RlZCkgc2VsZWN0aW9ucy5wdXNoKG9wdGlvbi52YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdGlvbnM7XG59O1xuXG5pbnRlcmZhY2UgTXVsdGlTZWxlY3RGaWx0ZXJTdGF0ZSB7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5jbGFzcyBNdWx0aVNlbGVjdEZpbHRlciBleHRlbmRzIENvbXBvbmVudDxcbiAgTXVsdGlTZWxlY3RGaWx0ZXJQcm9wcyxcbiAgTXVsdGlTZWxlY3RGaWx0ZXJTdGF0ZVxuPiB7XG4gIHNlbGVjdElucHV0OiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IE11bHRpU2VsZWN0RmlsdGVyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5maWx0ZXIgPSB0aGlzLmZpbHRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIgPSB0aGlzLmFwcGx5RmlsdGVyLmJpbmQodGhpcyk7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9XG4gICAgICAocHJvcHMuZGVmYXVsdFZhbHVlID8/IFtdKS5tYXAoXG4gICAgICAgIChpdGVtOiBzdHJpbmcpID0+IChwcm9wcy5vcHRpb25zIGFzIE11bHRpU2VsZWN0RmlsdGVyT3B0aW9ucylbaXRlbV1cbiAgICAgICkubGVuZ3RoID4gMDtcbiAgICB0aGlzLnN0YXRlID0geyBpc1NlbGVjdGVkIH07XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IGdldEZpbHRlciB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHZhbHVlID0gZ2V0U2VsZWN0aW9ucyh0aGlzLnNlbGVjdElucHV0KTtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgIGdldEZpbHRlcigoZmlsdGVyVmFsOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RJbnB1dC52YWx1ZSA9IGZpbHRlclZhbDtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXJWYWwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55KSB7XG4gICAgbGV0IG5lZWRGaWx0ZXIgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgIT09IHByZXZQcm9wcy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgIG5lZWRGaWx0ZXIgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnNFcXVhbHModGhpcy5wcm9wcy5vcHRpb25zLCBwcmV2UHJvcHMub3B0aW9ucykpIHtcbiAgICAgIG5lZWRGaWx0ZXIgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAobmVlZEZpbHRlcikge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcihnZXRTZWxlY3Rpb25zKHRoaXMuc2VsZWN0SW5wdXQpKTtcbiAgICB9XG4gIH1cblxuICBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXJTdGF0ZSA9IHt9LCBkZWZhdWx0VmFsdWUgPSBbXSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmlsdGVyU3RhdGUgJiYgdHlwZW9mIGZpbHRlclN0YXRlLmZpbHRlclZhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgcmV0dXJuIGZpbHRlclN0YXRlLmZpbHRlclZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIGdldE9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9uVGFncyA9IFtdO1xuICAgIGNvbnN0IHtcbiAgICAgIG9wdGlvbnMsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIGNvbHVtbixcbiAgICAgIHdpdGhvdXRFbXB0eU9wdGlvbiA9IGZhbHNlLFxuICAgICAgZGVmYXVsdFZhbHVlID0gW10sXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGRlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUubGVuZ3RoID4gMDtcbiAgICBpZiAoIXdpdGhvdXRFbXB0eU9wdGlvbiAmJiAhaXNTZWxlY3RlZCkge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT1cIi0xXCIgdmFsdWU9XCJcIiBkYXRhLXRlc3RpZD1cIm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAge3BsYWNlaG9sZGVyIHx8IGBTZWxlY3QgJHtjb2x1bW4udGV4dH0uLi5gfVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT5cbiAgICAgIG9wdGlvblRhZ3MucHVzaChcbiAgICAgICAgPG9wdGlvbiBrZXk9e2tleX0gdmFsdWU9e2tleX0+XG4gICAgICAgICAgeyhvcHRpb25zIGFzIE11bHRpU2VsZWN0RmlsdGVyT3B0aW9ucylba2V5XX1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgfVxuXG4gIGNsZWFuRmlsdGVyZWQoKSB7XG4gICAgY29uc3QgdmFsdWUgPVxuICAgICAgdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlIDogW107XG4gICAgdGhpcy5zZWxlY3RJbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIodmFsdWUpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEgJiYgdmFsdWVbMF0gPT09IFwiXCIpIHtcbiAgICAgIHZhbHVlID0gW107XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgaXNTZWxlY3RlZDogdmFsdWUubGVuZ3RoID4gMCB9KSk7XG4gICAgLy8gVE9ET1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBGSUxURVJfVFlQRVMuTVVMVElTRUxFQ1QpKHZhbHVlKTtcbiAgfVxuXG4gIGZpbHRlcihlOiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGdldFNlbGVjdGlvbnMoZS50YXJnZXQpO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIodmFsdWUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGlkID0gbnVsbCxcbiAgICAgIHN0eWxlLFxuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIGZpbHRlclN0YXRlID0ge30sXG4gICAgICBkZWZhdWx0VmFsdWUgPSBbXSxcbiAgICAgIG9uRmlsdGVyLFxuICAgICAgY29sdW1uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGNvbXBhcmF0b3IgPSBFUSxcbiAgICAgIHdpdGhvdXRFbXB0eU9wdGlvbiA9IGZhbHNlLFxuICAgICAgY2FzZVNlbnNpdGl2ZSA9IHRydWUsXG4gICAgICBnZXRGaWx0ZXIsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBzZWxlY3RDbGFzcyA9IGBmaWx0ZXIgc2VsZWN0LWZpbHRlciBmb3JtLWNvbnRyb2wgJHtjbGFzc05hbWV9ICR7dGhpcy5zdGF0ZS5pc1NlbGVjdGVkID8gXCJcIiA6IFwicGxhY2Vob2xkZXItc2VsZWN0ZWRcIlxuICAgICAgfWA7XG4gICAgY29uc3QgZWxtSWQgPSBgbXVsdGlzZWxlY3QtZmlsdGVyLWNvbHVtbi0ke2NvbHVtbi5kYXRhRmllbGR9JHtpZCA/IGAtJHtpZH1gIDogXCJcIlxuICAgICAgfWA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZpbHRlci1sYWJlbFwiIGh0bWxGb3I9e2VsbUlkfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkZpbHRlciBieSB7Y29sdW1uLnRleHR9PC9zcGFuPlxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgcmVmPXsobikgPT4geyB0aGlzLnNlbGVjdElucHV0ID0gbjsgfX1cbiAgICAgICAgICBpZD17ZWxtSWR9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgY2xhc3NOYW1lPXtzZWxlY3RDbGFzc31cbiAgICAgICAgICBvbkNoYW5nZT17dGhpcy5maWx0ZXJ9XG4gICAgICAgICAgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgZGVmYXVsdFZhbHVlPXt0aGlzLmdldERlZmF1bHRWYWx1ZSgpfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibXVsdGlzZWxlY3QtZmlsdGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLmdldE9wdGlvbnMoKX1cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2xhYmVsPlxuICAgICk7XG4gIH1cbn1cblxuLy8gTXVsdGlTZWxlY3RGaWx0ZXIucHJvcFR5cGVzID0ge1xuLy8gICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgY29sdW1uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIG9wdGlvbnM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGZpbHRlclN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjb21wYXJhdG9yOiBQcm9wVHlwZXMub25lT2YoW0xJS0UsIEVRXSksXG4vLyAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICB3aXRob3V0RW1wdHlPcHRpb246IFByb3BUeXBlcy5ib29sLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hcnJheSxcbi8vICAgY2FzZVNlbnNpdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGdldEZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4vLyB9O1xuXG4vLyBNdWx0aVNlbGVjdEZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGRlZmF1bHRWYWx1ZTogW10sXG4vLyAgIGZpbHRlclN0YXRlOiB7fSxcbi8vICAgY2xhc3NOYW1lOiBcIlwiLFxuLy8gICB3aXRob3V0RW1wdHlPcHRpb246IGZhbHNlLFxuLy8gICBjb21wYXJhdG9yOiBFUSxcbi8vICAgY2FzZVNlbnNpdGl2ZTogdHJ1ZSxcbi8vICAgaWQ6IG51bGwsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBNdWx0aVNlbGVjdEZpbHRlcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmN1c3RvbUZpbHRlciA9IGV4cG9ydHMuZGF0ZUZpbHRlciA9IGV4cG9ydHMubnVtYmVyRmlsdGVyID0gZXhwb3J0cy5tdWx0aVNlbGVjdEZpbHRlciA9IGV4cG9ydHMuc2VsZWN0RmlsdGVyID0gZXhwb3J0cy50ZXh0RmlsdGVyID0gZXhwb3J0cy5Db21wYXJhdG9yTnVtYmVyID0gZXhwb3J0cy5MRSA9IGV4cG9ydHMuTFQgPSBleHBvcnRzLkdFID0gZXhwb3J0cy5HVCA9IGV4cG9ydHMuTkUgPSBleHBvcnRzLkVRID0gZXhwb3J0cy5MSUtFID0gZXhwb3J0cy5GSUxURVJfREVMQVkgPSBleHBvcnRzLkZJTFRFUl9UWVBFUyA9IHZvaWQgMDtcbnZhciBkYXRlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vc3JjL2NvbXBvbmVudHMvZGF0ZVwiKSk7XG52YXIgbXVsdGlzZWxlY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvY29tcG9uZW50cy9tdWx0aXNlbGVjdFwiKSk7XG52YXIgbnVtYmVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vc3JjL2NvbXBvbmVudHMvbnVtYmVyXCIpKTtcbnZhciBzZWxlY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvY29tcG9uZW50cy9zZWxlY3RcIikpO1xudmFyIHRleHRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvY29tcG9uZW50cy90ZXh0XCIpKTtcbnZhciBjb250ZXh0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vc3JjL2NvbnRleHRcIikpO1xudmFyIEZJTFRFUl9UWVBFUztcbihmdW5jdGlvbiAoRklMVEVSX1RZUEVTKSB7XG4gIEZJTFRFUl9UWVBFU1tcIlRFWFRcIl0gPSBcIlRFWFRcIjtcbiAgRklMVEVSX1RZUEVTW1wiU0VMRUNUXCJdID0gXCJTRUxFQ1RcIjtcbiAgRklMVEVSX1RZUEVTW1wiTVVMVElTRUxFQ1RcIl0gPSBcIk1VTFRJU0VMRUNUXCI7XG4gIEZJTFRFUl9UWVBFU1tcIk5VTUJFUlwiXSA9IFwiTlVNQkVSXCI7XG4gIEZJTFRFUl9UWVBFU1tcIkRBVEVcIl0gPSBcIkRBVEVcIjtcbn0pKEZJTFRFUl9UWVBFUyB8fCAoZXhwb3J0cy5GSUxURVJfVFlQRVMgPSBGSUxURVJfVFlQRVMgPSB7fSkpO1xuZXhwb3J0cy5GSUxURVJfREVMQVkgPSA1MDA7XG4vKipcbiAqIEZpbHRlciBjb21wYXJhdG9ycyB1c2VkIGZvciB0YWJsZSBmaWx0ZXJzXG4gKi9cbmV4cG9ydHMuTElLRSA9IFwiTElLRVwiO1xuZXhwb3J0cy5FUSA9IFwiPVwiO1xuZXhwb3J0cy5ORSA9IFwiIT1cIjtcbmV4cG9ydHMuR1QgPSBcIj5cIjtcbmV4cG9ydHMuR0UgPSBcIj49XCI7XG5leHBvcnRzLkxUID0gXCI8XCI7XG5leHBvcnRzLkxFID0gXCI8PVwiO1xuZXhwb3J0cy5Db21wYXJhdG9yTnVtYmVyID0gNztcbnZhciB0ZXh0RmlsdGVyID0gZnVuY3Rpb24gdGV4dEZpbHRlcigpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBGaWx0ZXI6IHRleHRfMVtcImRlZmF1bHRcIl0sXG4gICAgcHJvcHM6IHByb3BzXG4gIH07XG59O1xuZXhwb3J0cy50ZXh0RmlsdGVyID0gdGV4dEZpbHRlcjtcbnZhciBzZWxlY3RGaWx0ZXIgPSBmdW5jdGlvbiBzZWxlY3RGaWx0ZXIoKSB7XG4gIHZhciBwcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHJldHVybiB7XG4gICAgRmlsdGVyOiBzZWxlY3RfMVtcImRlZmF1bHRcIl0sXG4gICAgcHJvcHM6IHByb3BzXG4gIH07XG59O1xuZXhwb3J0cy5zZWxlY3RGaWx0ZXIgPSBzZWxlY3RGaWx0ZXI7XG52YXIgbXVsdGlTZWxlY3RGaWx0ZXIgPSBmdW5jdGlvbiBtdWx0aVNlbGVjdEZpbHRlcigpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBGaWx0ZXI6IG11bHRpc2VsZWN0XzFbXCJkZWZhdWx0XCJdLFxuICAgIHByb3BzOiBwcm9wc1xuICB9O1xufTtcbmV4cG9ydHMubXVsdGlTZWxlY3RGaWx0ZXIgPSBtdWx0aVNlbGVjdEZpbHRlcjtcbnZhciBudW1iZXJGaWx0ZXIgPSBmdW5jdGlvbiBudW1iZXJGaWx0ZXIoKSB7XG4gIHZhciBwcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHJldHVybiB7XG4gICAgRmlsdGVyOiBudW1iZXJfMVtcImRlZmF1bHRcIl0sXG4gICAgcHJvcHM6IHByb3BzXG4gIH07XG59O1xuZXhwb3J0cy5udW1iZXJGaWx0ZXIgPSBudW1iZXJGaWx0ZXI7XG52YXIgZGF0ZUZpbHRlciA9IGZ1bmN0aW9uIGRhdGVGaWx0ZXIoKSB7XG4gIHZhciBwcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHJldHVybiB7XG4gICAgRmlsdGVyOiBkYXRlXzFbXCJkZWZhdWx0XCJdLFxuICAgIHByb3BzOiBwcm9wc1xuICB9O1xufTtcbmV4cG9ydHMuZGF0ZUZpbHRlciA9IGRhdGVGaWx0ZXI7XG52YXIgY3VzdG9tRmlsdGVyID0gZnVuY3Rpb24gY3VzdG9tRmlsdGVyKCkge1xuICB2YXIgcHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICByZXR1cm4ge1xuICAgIEZpbHRlcjogZnVuY3Rpb24gRmlsdGVyKCkge30sXG4gICAgcHJvcHM6IHByb3BzXG4gIH07XG59O1xuZXhwb3J0cy5jdXN0b21GaWx0ZXIgPSBjdXN0b21GaWx0ZXI7XG4vLyBkZWNsYXJlIGZ1bmN0aW9uIGZpbHRlckZhY3RvcnkocHJvcHM/OiBGaWx0ZXJGYWN0b3J5UHJvcHMpOiB1bmtub3duO1xuLy8gZXhwb3J0IGRlZmF1bHQgZmlsdGVyRmFjdG9yeTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHJldHVybiB7XG4gICAgY3JlYXRlQ29udGV4dDogY29udGV4dF8xW1wiZGVmYXVsdFwiXSxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH07XG59OyIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgcmVhY3Qvbm8tdW51c2VkLXByb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCBjbGFzcy1tZXRob2RzLXVzZS10aGlzOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBGSUxURVJfVFlQRVMsIFNlbGVjdEZpbHRlclByb3BzIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmZ1bmN0aW9uIG9wdGlvbnNFcXVhbHMoY3Vyck9wdHM6IGFueSwgcHJldk9wdHM6IGFueSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShjdXJyT3B0cykpIHtcbiAgICBpZiAoY3Vyck9wdHMubGVuZ3RoID09PSBwcmV2T3B0cy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3Vyck9wdHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGN1cnJPcHRzW2ldLnZhbHVlICE9PSBwcmV2T3B0c1tpXS52YWx1ZSB8fFxuICAgICAgICAgIGN1cnJPcHRzW2ldLmxhYmVsICE9PSBwcmV2T3B0c1tpXS5sYWJlbFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGN1cnJPcHRzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGN1cnJPcHRzW2tleXNbaV1dICE9PSBwcmV2T3B0c1trZXlzW2ldXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMoY3Vyck9wdHMpLmxlbmd0aCA9PT0gT2JqZWN0LmtleXMocHJldk9wdHMpLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gZ2V0T3B0aW9uVmFsdWUob3B0aW9uczogYW55LCBrZXk6IGFueSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG9wdGlvbnNcbiAgICAgIC5maWx0ZXIoKHsgbGFiZWwgfSkgPT4gbGFiZWwgPT09IGtleSlcbiAgICAgIC5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpO1xuICAgIHJldHVybiByZXN1bHRbMF07XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNba2V5XTtcbn1cblxuaW50ZXJmYWNlIFNlbGVjdEZpbHRlclN0YXRlIHtcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbn1cblxuY2xhc3MgU2VsZWN0RmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50PFNlbGVjdEZpbHRlclByb3BzLCBTZWxlY3RGaWx0ZXJTdGF0ZT4ge1xuICBvcHRpb25zOiBhbnk7XG4gIHNlbGVjdElucHV0OiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5maWx0ZXIgPSB0aGlzLmZpbHRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucyhwcm9wcyk7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9XG4gICAgICBnZXRPcHRpb25WYWx1ZSh0aGlzLm9wdGlvbnMsIHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCkpICE9PSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zdGF0ZSA9IHsgaXNTZWxlY3RlZCB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBjb2x1bW4sIG9uRmlsdGVyLCBnZXRGaWx0ZXIgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0SW5wdXQudmFsdWU7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgICAvLyBUT0RPXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBvbkZpbHRlcihjb2x1bW4sIEZJTFRFUl9UWVBFUy5TRUxFQ1QsIHRydWUpKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBleHBvcnQgb25GaWx0ZXIgZnVuY3Rpb24gdG8gYWxsb3cgdXNlcnMgdG8gYWNjZXNzXG4gICAgaWYgKGdldEZpbHRlcikge1xuICAgICAgZ2V0RmlsdGVyKChmaWx0ZXJWYWw6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGlzU2VsZWN0ZWQ6IGZpbHRlclZhbCAhPT0gXCJcIiB9KSk7XG4gICAgICAgIHRoaXMuc2VsZWN0SW5wdXQudmFsdWUgPSBmaWx0ZXJWYWw7XG5cbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLlNFTEVDVCkoZmlsdGVyVmFsKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFNlbGVjdEZpbHRlclByb3BzKSB7XG4gICAgbGV0IG5lZWRGaWx0ZXIgPSBmYWxzZTtcbiAgICBjb25zdCB7IGNvbHVtbiwgb25GaWx0ZXIsIGRlZmF1bHRWYWx1ZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBuZXh0T3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucyh0aGlzLnByb3BzKTtcbiAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSBwcmV2UHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdElucHV0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgbmVlZEZpbHRlciA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghb3B0aW9uc0VxdWFscyhuZXh0T3B0aW9ucywgdGhpcy5vcHRpb25zKSkge1xuICAgICAgdGhpcy5vcHRpb25zID0gbmV4dE9wdGlvbnM7XG4gICAgICBuZWVkRmlsdGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG5lZWRGaWx0ZXIpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3RJbnB1dC52YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuU0VMRUNUKSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0T3B0aW9ucyhwcm9wczogU2VsZWN0RmlsdGVyUHJvcHMpIHtcbiAgICByZXR1cm4gdHlwZW9mIHByb3BzLm9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBwcm9wcy5vcHRpb25zKHByb3BzLmNvbHVtbilcbiAgICAgIDogcHJvcHMub3B0aW9ucztcbiAgfVxuXG4gIGdldERlZmF1bHRWYWx1ZSgpIHtcbiAgICBjb25zdCB7IGZpbHRlclN0YXRlLCBkZWZhdWx0VmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGZpbHRlclN0YXRlICYmIHR5cGVvZiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWw7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBjbGVhbkZpbHRlcmVkKCkge1xuICAgIGNvbnN0IHZhbHVlID1cbiAgICAgIHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSA6IFwiXCI7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIiB9KSk7XG4gICAgdGhpcy5zZWxlY3RJbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgRklMVEVSX1RZUEVTLlNFTEVDVCkodmFsdWUpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIodmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0SW5wdXQudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGlzU2VsZWN0ZWQ6IHZhbHVlICE9PSBcIlwiIH0pKTtcbiAgICAvLyBUT0RPXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIEZJTFRFUl9UWVBFUy5TRUxFQ1QpKHZhbHVlKTtcbiAgfVxuXG4gIGZpbHRlcihlOiBhbnkpIHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBlLnRhcmdldDtcbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGlzU2VsZWN0ZWQ6IHZhbHVlICE9PSBcIlwiIH0pKTtcbiAgICAvLyBUT0RPXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIEZJTFRFUl9UWVBFUy5TRUxFQ1QpKHZhbHVlKTtcbiAgfVxuXG4gIHJlbmRlck9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9uVGFncyA9IFtdO1xuICAgIGNvbnN0IHsgb3B0aW9ucyB9ID0gdGhpcztcbiAgICBjb25zdCB7IHBsYWNlaG9sZGVyLCBjb2x1bW4sIHdpdGhvdXRFbXB0eU9wdGlvbiwgZGVmYXVsdFZhbHVlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0VmFsdWUgIT09IFwiXCI7XG4gICAgaWYgKCF3aXRob3V0RW1wdHlPcHRpb24gJiYgIWlzU2VsZWN0ZWQpIHtcbiAgICAgIG9wdGlvblRhZ3MucHVzaChcbiAgICAgICAgPG9wdGlvbiBrZXk9XCItMVwiIHZhbHVlPVwiXCIgZGF0YS10ZXN0aWQ9XCJzZWxlY3QtZmlsdGVyLXBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAge3BsYWNlaG9sZGVyIHx8IGBTZWxlY3QgJHtjb2x1bW4udGV4dH0uLi5gfVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICBvcHRpb25zLmZvckVhY2goKHsgdmFsdWUsIGxhYmVsIH0pID0+XG4gICAgICAgIG9wdGlvblRhZ3MucHVzaChcbiAgICAgICAgICA8b3B0aW9uIGtleT17dmFsdWV9IHZhbHVlPXt2YWx1ZX0+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT5cbiAgICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICAgIDxvcHRpb24ga2V5PXtrZXl9IHZhbHVlPXtrZXl9PlxuICAgICAgICAgICAge29wdGlvbnNba2V5XX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvblRhZ3M7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgaWQsXG4gICAgICBzdHlsZSxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIG9uRmlsdGVyLFxuICAgICAgY29sdW1uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGNvbXBhcmF0b3IsXG4gICAgICB3aXRob3V0RW1wdHlPcHRpb24sXG4gICAgICBjYXNlU2Vuc2l0aXZlLFxuICAgICAgZ2V0RmlsdGVyLFxuICAgICAgZmlsdGVyU3RhdGUsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBzZWxlY3RDbGFzcyA9IGBmaWx0ZXIgc2VsZWN0LWZpbHRlciBmb3JtLWNvbnRyb2wgJHtjbGFzc05hbWV9ICR7dGhpcy5zdGF0ZS5pc1NlbGVjdGVkID8gXCJcIiA6IFwicGxhY2Vob2xkZXItc2VsZWN0ZWRcIlxuICAgICAgfWA7XG4gICAgY29uc3QgZWxtSWQgPSBgc2VsZWN0LWZpbHRlci1jb2x1bW4tJHtjb2x1bW4uZGF0YUZpZWxkfSR7aWQgPyBgLSR7aWR9YCA6IFwiXCJcbiAgICAgIH1gO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmaWx0ZXItbGFiZWxcIiBodG1sRm9yPXtlbG1JZH0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5GaWx0ZXIgYnkge2NvbHVtbi50ZXh0fTwvc3Bhbj5cbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgIHJlZj17KG4pID0+IHsgdGhpcy5zZWxlY3RJbnB1dCA9IG47IH19XG4gICAgICAgICAgaWQ9e2VsbUlkfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICBjbGFzc05hbWU9e3NlbGVjdENsYXNzfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmZpbHRlcn1cbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdFZhbHVlKCkgfHwgXCJcIn1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cInNlbGVjdC1maWx0ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucmVuZGVyT3B0aW9ucygpfVxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBTZWxlY3RGaWx0ZXIucHJvcFR5cGVzID0ge1xuLy8gICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgY29sdW1uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBmaWx0ZXJTdGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgb3B0aW9uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmFycmF5XSkuaXNSZXF1aXJlZCxcbi8vICAgY29tcGFyYXRvcjogUHJvcFR5cGVzLm9uZU9mKFtMSUtFLCBFUV0pLFxuLy8gICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgd2l0aG91dEVtcHR5T3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuLy8gICBjYXNlU2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcblxuLy8gU2VsZWN0RmlsdGVyLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgZGVmYXVsdFZhbHVlOiAnJyxcbi8vICAgZmlsdGVyU3RhdGU6IHt9LFxuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICB3aXRob3V0RW1wdHlPcHRpb246IGZhbHNlLFxuLy8gICBjb21wYXJhdG9yOiBFUSxcbi8vICAgY2FzZVNlbnNpdGl2ZTogdHJ1ZSxcbi8vICAgaWQ6IG51bGxcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdEZpbHRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX187IiwiLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEZJTFRFUl9UWVBFUywgVGV4dEZpbHRlclByb3BzIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmludGVyZmFjZSBUZXh0RmlsdGVyU3RhdGUge1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5jbGFzcyBUZXh0RmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50PFRleHRGaWx0ZXJQcm9wcywgVGV4dEZpbHRlclN0YXRlPiB7XG4gIGlucHV0OiB7IHZhbHVlOiBhbnkgfSB8IGFueTtcbiAgdGltZW91dDogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogVGV4dEZpbHRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuZmlsdGVyID0gdGhpcy5maWx0ZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5pbnB1dCA9IHt9O1xuICAgIGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZSgpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcHJvcHMuZmlsdGVyU3RhdGUgJiZcbiAgICAgICAgdHlwZW9mIHByb3BzLmZpbHRlclN0YXRlLmZpbHRlclZhbCAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBwcm9wcy5maWx0ZXJTdGF0ZS5maWx0ZXJWYWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvcHMuZGVmYXVsdFZhbHVlID8/IFwiXCI7XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB2YWx1ZTogZ2V0RGVmYXVsdFZhbHVlKCksXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgb25GaWx0ZXIsIGdldEZpbHRlciwgY29sdW1uIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMuaW5wdXQudmFsdWU7XG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICAvLyBUT0RPXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBvbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgRklMVEVSX1RZUEVTLlRFWFQsIHRydWUpKGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgIGdldEZpbHRlcigoZmlsdGVyVmFsOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyB2YWx1ZTogZmlsdGVyVmFsIH0pKTtcbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLlRFWFQpKGZpbHRlclZhbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNsZWFuVGltZXIoKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSkge1xuICAgIGlmIChwcmV2UHJvcHMuZGVmYXVsdFZhbHVlICE9PSB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgY29uc3QgbmV4dFZhbHVlID0gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgPz8gXCJcIjtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogbmV4dFZhbHVlIH0sICgpID0+IHtcbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIEZJTFRFUl9UWVBFUy5URVhUKShuZXh0VmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyKGU6IGFueSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5jbGVhblRpbWVyKCk7XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IHZhbHVlOiBmaWx0ZXJWYWx1ZSB9KSk7XG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBUT0RPXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBGSUxURVJfVFlQRVMuVEVYVCkoZmlsdGVyVmFsdWUpO1xuICAgIH0sIHRoaXMucHJvcHMuZGVsYXkpO1xuICB9XG5cbiAgY2xlYW5UaW1lcigpIHtcbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICB9XG4gIH1cblxuICBjbGVhbkZpbHRlcmVkKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgPz8gXCJcIjtcbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IHZhbHVlIH0pKTtcbiAgICAvLyBUT0RPXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIEZJTFRFUl9UWVBFUy5URVhUKSh2YWx1ZSk7XG4gIH1cblxuICBhcHBseUZpbHRlcihmaWx0ZXJUZXh0OiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGZpbHRlclRleHQgPz8gXCJcIjtcbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IHZhbHVlIH0pKTtcbiAgICAvLyBUT0RPXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIEZJTFRFUl9UWVBFUy5URVhUKSh2YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVDbGljayhlOiBhbnkpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLnByb3BzLm9uQ2xpY2spIHtcbiAgICAgIHRoaXMucHJvcHMub25DbGljayhlKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgaWQgPSBudWxsLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICBjb2x1bW46IHsgZGF0YUZpZWxkLCB0ZXh0IH0sXG4gICAgICBzdHlsZSxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIG9uRmlsdGVyLFxuICAgICAgY2FzZVNlbnNpdGl2ZSA9IGZhbHNlLFxuICAgICAgZGVmYXVsdFZhbHVlID0gXCJcIixcbiAgICAgIGdldEZpbHRlcixcbiAgICAgIGZpbHRlclN0YXRlID0ge30sXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBlbG1JZCA9IGB0ZXh0LWZpbHRlci1jb2x1bW4tJHtkYXRhRmllbGR9JHtpZCA/IGAtJHtpZH1gIDogXCJcIn1gO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmaWx0ZXItbGFiZWxcIiBodG1sRm9yPXtlbG1JZH0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5GaWx0ZXIgYnkge3RleHR9PC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICByZWY9eyhuKSA9PiB7IHRoaXMuaW5wdXQgPSBuOyB9fVxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBpZD17ZWxtSWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtgZmlsdGVyIHRleHQtZmlsdGVyIGZvcm0tY29udHJvbCAke2NsYXNzTmFtZX1gfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICBvbkNoYW5nZT17dGhpcy5maWx0ZXJ9XG4gICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja31cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXIgfHwgYEVudGVyICR7dGV4dH0uLi5gfVxuICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwidGV4dC1maWx0ZXJcIlxuICAgICAgICAvPlxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICB9XG59XG5cbi8vIFRleHRGaWx0ZXIucHJvcFR5cGVzID0ge1xuLy8gICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgY29sdW1uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBmaWx0ZXJTdGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY29tcGFyYXRvcjogUHJvcFR5cGVzLm9uZU9mKFtMSUtFLCBFUV0pLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGRlbGF5OiBQcm9wVHlwZXMubnVtYmVyLFxuLy8gICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgY2FzZVNlbnNpdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGdldEZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4vLyB9O1xuXG4vLyBUZXh0RmlsdGVyLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgZGVsYXk6IEZJTFRFUl9ERUxBWSxcbi8vICAgZmlsdGVyU3RhdGU6IHt9LFxuLy8gICBkZWZhdWx0VmFsdWU6IFwiXCIsXG4vLyAgIGNhc2VTZW5zaXRpdmU6IGZhbHNlLFxuLy8gICBpZDogbnVsbCxcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRGaWx0ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImlkXCIsIFwic3R5bGVcIiwgXCJjbGFzc05hbWVcIiwgXCJmaWx0ZXJTdGF0ZVwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcIm9uRmlsdGVyXCIsIFwiY29sdW1uXCIsIFwib3B0aW9uc1wiLCBcImNvbXBhcmF0b3JcIiwgXCJ3aXRob3V0RW1wdHlPcHRpb25cIiwgXCJjYXNlU2Vuc2l0aXZlXCIsIFwiZ2V0RmlsdGVyXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbi8qIGVzbGludCByZWFjdC9uby11bnVzZWQtcHJvcC10eXBlczogMCAqL1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfXzEgPSByZXF1aXJlKFwiLi4vLi5cIik7XG5mdW5jdGlvbiBvcHRpb25zRXF1YWxzKGN1cnJPcHRzLCBwcmV2T3B0cykge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGN1cnJPcHRzKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGN1cnJPcHRzW2tleXNbaV1dICE9PSBwcmV2T3B0c1trZXlzW2ldXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMoY3Vyck9wdHMpLmxlbmd0aCA9PT0gT2JqZWN0LmtleXMocHJldk9wdHMpLmxlbmd0aDtcbn1cbnZhciBnZXRTZWxlY3Rpb25zID0gZnVuY3Rpb24gZ2V0U2VsZWN0aW9ucyhjb250YWluZXIpIHtcbiAgaWYgKGNvbnRhaW5lciAmJiBjb250YWluZXIuc2VsZWN0ZWRPcHRpb25zKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oY29udGFpbmVyLnNlbGVjdGVkT3B0aW9ucykubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS52YWx1ZTtcbiAgICB9KTtcbiAgfVxuICBpZiAoY29udGFpbmVyICYmIEFycmF5LmlzQXJyYXkoY29udGFpbmVyLnZhbHVlKSkge1xuICAgIHJldHVybiBjb250YWluZXIudmFsdWU7XG4gIH1cbiAgdmFyIHNlbGVjdGlvbnMgPSBbXTtcbiAgdmFyIHRvdGFsTGVuID0gY29udGFpbmVyICYmIGNvbnRhaW5lci5vcHRpb25zID8gY29udGFpbmVyLm9wdGlvbnMubGVuZ3RoIDogMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbExlbjsgaSArPSAxKSB7XG4gICAgdmFyIG9wdGlvbiA9IGNvbnRhaW5lci5vcHRpb25zW2ldO1xuICAgIGlmIChvcHRpb24gJiYgb3B0aW9uLnNlbGVjdGVkKSBzZWxlY3Rpb25zLnB1c2gob3B0aW9uLnZhbHVlKTtcbiAgfVxuICByZXR1cm4gc2VsZWN0aW9ucztcbn07XG52YXIgTXVsdGlTZWxlY3RGaWx0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBNdWx0aVNlbGVjdEZpbHRlcihwcm9wcykge1xuICAgIHZhciBfcHJvcHMkZGVmYXVsdFZhbHVlO1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTXVsdGlTZWxlY3RGaWx0ZXIpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBNdWx0aVNlbGVjdEZpbHRlciwgW3Byb3BzXSk7XG4gICAgX3RoaXMuZmlsdGVyID0gX3RoaXMuZmlsdGVyLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLmFwcGx5RmlsdGVyID0gX3RoaXMuYXBwbHlGaWx0ZXIuYmluZChfdGhpcyk7XG4gICAgdmFyIGlzU2VsZWN0ZWQgPSAoKF9wcm9wcyRkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUpICE9PSBudWxsICYmIF9wcm9wcyRkZWZhdWx0VmFsdWUgIT09IHZvaWQgMCA/IF9wcm9wcyRkZWZhdWx0VmFsdWUgOiBbXSkubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gcHJvcHMub3B0aW9uc1tpdGVtXTtcbiAgICB9KS5sZW5ndGggPiAwO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZFxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhNdWx0aVNlbGVjdEZpbHRlciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhNdWx0aVNlbGVjdEZpbHRlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBnZXRGaWx0ZXIgPSB0aGlzLnByb3BzLmdldEZpbHRlcjtcbiAgICAgIHZhciB2YWx1ZSA9IGdldFNlbGVjdGlvbnModGhpcy5zZWxlY3RJbnB1dCk7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCBvbkZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3NcbiAgICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgICAgZ2V0RmlsdGVyKGZ1bmN0aW9uIChmaWx0ZXJWYWwpIHtcbiAgICAgICAgICBfdGhpczIuc2VsZWN0SW5wdXQudmFsdWUgPSBmaWx0ZXJWYWw7XG4gICAgICAgICAgX3RoaXMyLmFwcGx5RmlsdGVyKGZpbHRlclZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIG5lZWRGaWx0ZXIgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gcHJldlByb3BzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgICBuZWVkRmlsdGVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnNFcXVhbHModGhpcy5wcm9wcy5vcHRpb25zLCBwcmV2UHJvcHMub3B0aW9ucykpIHtcbiAgICAgICAgbmVlZEZpbHRlciA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAobmVlZEZpbHRlcikge1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKGdldFNlbGVjdGlvbnModGhpcy5zZWxlY3RJbnB1dCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXREZWZhdWx0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZmlsdGVyU3RhID0gX3RoaXMkcHJvcHMuZmlsdGVyU3RhdGUsXG4gICAgICAgIGZpbHRlclN0YXRlID0gX3RoaXMkcHJvcHMkZmlsdGVyU3RhID09PSB2b2lkIDAgPyB7fSA6IF90aGlzJHByb3BzJGZpbHRlclN0YSxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IFtdIDogX3RoaXMkcHJvcHMkZGVmYXVsdFZhO1xuICAgICAgaWYgKGZpbHRlclN0YXRlICYmIHR5cGVvZiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlclN0YXRlLmZpbHRlclZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldE9wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3B0aW9ucygpIHtcbiAgICAgIHZhciBvcHRpb25UYWdzID0gW107XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMi5vcHRpb25zLFxuICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzMi5wbGFjZWhvbGRlcixcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMyLmNvbHVtbixcbiAgICAgICAgX3RoaXMkcHJvcHMyJHdpdGhvdXRFID0gX3RoaXMkcHJvcHMyLndpdGhvdXRFbXB0eU9wdGlvbixcbiAgICAgICAgd2l0aG91dEVtcHR5T3B0aW9uID0gX3RoaXMkcHJvcHMyJHdpdGhvdXRFID09PSB2b2lkIDAgPyBmYWxzZSA6IF90aGlzJHByb3BzMiR3aXRob3V0RSxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGRlZmF1bHRWID0gX3RoaXMkcHJvcHMyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMyJGRlZmF1bHRWID09PSB2b2lkIDAgPyBbXSA6IF90aGlzJHByb3BzMiRkZWZhdWx0VjtcbiAgICAgIHZhciBpc1NlbGVjdGVkID0gZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS5sZW5ndGggPiAwO1xuICAgICAgaWYgKCF3aXRob3V0RW1wdHlPcHRpb24gJiYgIWlzU2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uVGFncy5wdXNoKHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgIGtleTogXCItMVwiLFxuICAgICAgICAgIHZhbHVlOiBcIlwiLFxuICAgICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJtdWx0aXNlbGVjdC1wbGFjZWhvbGRlclwiXG4gICAgICAgIH0sIHBsYWNlaG9sZGVyIHx8IFwiU2VsZWN0IFwiLmNvbmNhdChjb2x1bW4udGV4dCwgXCIuLi5cIikpKTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gb3B0aW9uVGFncy5wdXNoKHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiBrZXlcbiAgICAgICAgfSwgb3B0aW9uc1trZXldKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvcHRpb25UYWdzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhbkZpbHRlcmVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFuRmlsdGVyZWQoKSB7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgOiBbXTtcbiAgICAgIHRoaXMuc2VsZWN0SW5wdXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIodmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhcHBseUZpbHRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhcHBseUZpbHRlcih2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZVswXSA9PT0gXCJcIikge1xuICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTZWxlY3RlZDogdmFsdWUubGVuZ3RoID4gMFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICAvLyBUT0RPXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk1VTFRJU0VMRUNUKSh2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZpbHRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaWx0ZXIoZSkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0U2VsZWN0aW9ucyhlLnRhcmdldCk7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKHZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzMyRpZCA9IF90aGlzJHByb3BzMy5pZCxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczMkaWQgPT09IHZvaWQgMCA/IG51bGwgOiBfdGhpcyRwcm9wczMkaWQsXG4gICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHMzLnN0eWxlLFxuICAgICAgICBfdGhpcyRwcm9wczMkY2xhc3NOYW0gPSBfdGhpcyRwcm9wczMuY2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczMkY2xhc3NOYW0gPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczMkY2xhc3NOYW0sXG4gICAgICAgIF90aGlzJHByb3BzMyRmaWx0ZXJTdCA9IF90aGlzJHByb3BzMy5maWx0ZXJTdGF0ZSxcbiAgICAgICAgZmlsdGVyU3RhdGUgPSBfdGhpcyRwcm9wczMkZmlsdGVyU3QgPT09IHZvaWQgMCA/IHt9IDogX3RoaXMkcHJvcHMzJGZpbHRlclN0LFxuICAgICAgICBfdGhpcyRwcm9wczMkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczMkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFtdIDogX3RoaXMkcHJvcHMzJGRlZmF1bHRWLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzMy5vbkZpbHRlcixcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMzLmNvbHVtbixcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMy5vcHRpb25zLFxuICAgICAgICBfdGhpcyRwcm9wczMkY29tcGFyYXQgPSBfdGhpcyRwcm9wczMuY29tcGFyYXRvcixcbiAgICAgICAgY29tcGFyYXRvciA9IF90aGlzJHByb3BzMyRjb21wYXJhdCA9PT0gdm9pZCAwID8gX18xLkVRIDogX3RoaXMkcHJvcHMzJGNvbXBhcmF0LFxuICAgICAgICBfdGhpcyRwcm9wczMkd2l0aG91dEUgPSBfdGhpcyRwcm9wczMud2l0aG91dEVtcHR5T3B0aW9uLFxuICAgICAgICB3aXRob3V0RW1wdHlPcHRpb24gPSBfdGhpcyRwcm9wczMkd2l0aG91dEUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMzJHdpdGhvdXRFLFxuICAgICAgICBfdGhpcyRwcm9wczMkY2FzZVNlbnMgPSBfdGhpcyRwcm9wczMuY2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IF90aGlzJHByb3BzMyRjYXNlU2VucyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF90aGlzJHByb3BzMyRjYXNlU2VucyxcbiAgICAgICAgZ2V0RmlsdGVyID0gX3RoaXMkcHJvcHMzLmdldEZpbHRlcixcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczMsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgc2VsZWN0Q2xhc3MgPSBcImZpbHRlciBzZWxlY3QtZmlsdGVyIGZvcm0tY29udHJvbCBcIi5jb25jYXQoY2xhc3NOYW1lLCBcIiBcIikuY29uY2F0KHRoaXMuc3RhdGUuaXNTZWxlY3RlZCA/IFwiXCIgOiBcInBsYWNlaG9sZGVyLXNlbGVjdGVkXCIpO1xuICAgICAgdmFyIGVsbUlkID0gXCJtdWx0aXNlbGVjdC1maWx0ZXItY29sdW1uLVwiLmNvbmNhdChjb2x1bW4uZGF0YUZpZWxkKS5jb25jYXQoaWQgPyBcIi1cIi5jb25jYXQoaWQpIDogXCJcIik7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImZpbHRlci1sYWJlbFwiLFxuICAgICAgICBodG1sRm9yOiBlbG1JZFxuICAgICAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwic3Itb25seVwiXG4gICAgICB9LCBcIkZpbHRlciBieSBcIiwgY29sdW1uLnRleHQpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG4pIHtcbiAgICAgICAgICBfdGhpczMuc2VsZWN0SW5wdXQgPSBuO1xuICAgICAgICB9LFxuICAgICAgICBpZDogZWxtSWQsXG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgIGNsYXNzTmFtZTogc2VsZWN0Q2xhc3MsXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLmZpbHRlcixcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgICAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5nZXREZWZhdWx0VmFsdWUoKSxcbiAgICAgICAgXCJkYXRhLXRlc3RpZFwiOiBcIm11bHRpc2VsZWN0LWZpbHRlclwiXG4gICAgICB9KSwgdGhpcy5nZXRPcHRpb25zKCkpKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBNdWx0aVNlbGVjdEZpbHRlci5wcm9wVHlwZXMgPSB7XG4vLyAgIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZmlsdGVyU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihbTElLRSwgRVFdKSxcbi8vICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHdpdGhvdXRFbXB0eU9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFycmF5LFxuLy8gICBjYXNlU2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG4vLyBNdWx0aVNlbGVjdEZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGRlZmF1bHRWYWx1ZTogW10sXG4vLyAgIGZpbHRlclN0YXRlOiB7fSxcbi8vICAgY2xhc3NOYW1lOiBcIlwiLFxuLy8gICB3aXRob3V0RW1wdHlPcHRpb246IGZhbHNlLFxuLy8gICBjb21wYXJhdG9yOiBFUSxcbi8vICAgY2FzZVNlbnNpdGl2ZTogdHJ1ZSxcbi8vICAgaWQ6IG51bGwsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBNdWx0aVNlbGVjdEZpbHRlcjsiLCIvKiBlc2xpbnQgZXFlcWVxOiAwICovXG4vKiBlc2xpbnQgbm8tY29uc29sZTogMCAqL1xuaW1wb3J0IHsgRVEsIEZJTFRFUl9UWVBFUywgR0UsIEdULCBMRSwgTElLRSwgTFQsIE5FIH0gZnJvbSBcIi4uXCI7XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJCeVRleHQgPVxuICAoXzogYW55KSA9PlxuICAoXG4gICAgZGF0YTogYW55LFxuICAgIGRhdGFGaWVsZDogYW55LFxuICAgIHsgZmlsdGVyVmFsOiB1c2VySW5wdXQgPSBcIlwiLCBjb21wYXJhdG9yID0gTElLRSwgY2FzZVNlbnNpdGl2ZSB9OiBhbnksXG4gICAgY3VzdG9tRmlsdGVyVmFsdWU6IGFueVxuICApID0+IHtcbiAgICAvLyBtYWtlIHN1cmUgZmlsdGVyIHZhbHVlIHRvIGJlIGEgc3RyaW5nXG4gICAgY29uc3QgZmlsdGVyVmFsID0gdXNlcklucHV0LnRvU3RyaW5nKCk7XG5cbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHJvdzogYW55KSA9PiB7XG4gICAgICBsZXQgY2VsbCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIGlmIChjdXN0b21GaWx0ZXJWYWx1ZSkge1xuICAgICAgICBjZWxsID0gY3VzdG9tRmlsdGVyVmFsdWUoY2VsbCwgcm93KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNlbGxTdHIgPSBfLmlzRGVmaW5lZChjZWxsKSA/IGNlbGwudG9TdHJpbmcoKSA6IFwiXCI7XG4gICAgICBpZiAoY29tcGFyYXRvciA9PT0gRVEpIHtcbiAgICAgICAgcmV0dXJuIGNlbGxTdHIgPT09IGZpbHRlclZhbDtcbiAgICAgIH1cbiAgICAgIGlmIChjYXNlU2Vuc2l0aXZlKSB7XG4gICAgICAgIHJldHVybiBjZWxsU3RyLmluY2x1ZGVzKGZpbHRlclZhbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNlbGxTdHIudG9Mb2NhbGVVcHBlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbC50b0xvY2FsZVVwcGVyQ2FzZSgpKSAhPT1cbiAgICAgICAgLTFcbiAgICAgICk7XG4gICAgfSk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJCeU51bWJlciA9XG4gIChfOiBhbnkpID0+XG4gIChcbiAgICBkYXRhOiBhbnksXG4gICAgZGF0YUZpZWxkOiBhbnksXG4gICAgeyBmaWx0ZXJWYWw6IHsgY29tcGFyYXRvciwgbnVtYmVyIH0gfTogYW55LFxuICAgIGN1c3RvbUZpbHRlclZhbHVlOiBhbnlcbiAgKSA9PlxuICAgIGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4ge1xuICAgICAgaWYgKG51bWJlciA9PT0gXCJcIiB8fCAhY29tcGFyYXRvcikgcmV0dXJuIHRydWU7XG4gICAgICBsZXQgY2VsbCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcblxuICAgICAgaWYgKGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgICAgIGNlbGwgPSBjdXN0b21GaWx0ZXJWYWx1ZShjZWxsLCByb3cpO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGNvbXBhcmF0b3IpIHtcbiAgICAgICAgY2FzZSBFUToge1xuICAgICAgICAgIHJldHVybiBjZWxsID09IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEdUOiB7XG4gICAgICAgICAgcmV0dXJuIGNlbGwgPiBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBHRToge1xuICAgICAgICAgIHJldHVybiBjZWxsID49IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIExUOiB7XG4gICAgICAgICAgcmV0dXJuIGNlbGwgPCBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBMRToge1xuICAgICAgICAgIHJldHVybiBjZWxsIDw9IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIE5FOiB7XG4gICAgICAgICAgcmV0dXJuIGNlbGwgIT0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTnVtYmVyIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQnlEYXRlID1cbiAgKF86IGFueSkgPT5cbiAgKFxuICAgIGRhdGE6IGFueSxcbiAgICBkYXRhRmllbGQ6IGFueSxcbiAgICB7IGZpbHRlclZhbDogeyBjb21wYXJhdG9yLCBkYXRlIH0gfTogYW55LFxuICAgIGN1c3RvbUZpbHRlclZhbHVlOiBhbnlcbiAgKSA9PiB7XG4gICAgaWYgKCFkYXRlIHx8ICFjb21wYXJhdG9yKSByZXR1cm4gZGF0YTtcbiAgICBjb25zdCBmaWx0ZXJEYXRlID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgY29uc3QgZmlsdGVyTW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgY29uc3QgZmlsdGVyWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcblxuICAgIHJldHVybiBkYXRhLmZpbHRlcigocm93OiBhbnkpID0+IHtcbiAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICBsZXQgY2VsbCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcblxuICAgICAgaWYgKGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgICAgIGNlbGwgPSBjdXN0b21GaWx0ZXJWYWx1ZShjZWxsLCByb3cpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNlbGwgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY2VsbCA9IG5ldyBEYXRlKGNlbGwpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXREYXRlID0gY2VsbC5nZXRVVENEYXRlKCk7XG4gICAgICBjb25zdCB0YXJnZXRNb250aCA9IGNlbGwuZ2V0VVRDTW9udGgoKTtcbiAgICAgIGNvbnN0IHRhcmdldFllYXIgPSBjZWxsLmdldFVUQ0Z1bGxZZWFyKCk7XG5cbiAgICAgIHN3aXRjaCAoY29tcGFyYXRvcikge1xuICAgICAgICBjYXNlIEVROiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmlsdGVyRGF0ZSAhPT0gdGFyZ2V0RGF0ZSB8fFxuICAgICAgICAgICAgZmlsdGVyTW9udGggIT09IHRhcmdldE1vbnRoIHx8XG4gICAgICAgICAgICBmaWx0ZXJZZWFyICE9PSB0YXJnZXRZZWFyXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEdUOiB7XG4gICAgICAgICAgaWYgKGNlbGwgPD0gZGF0ZSkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBHRToge1xuICAgICAgICAgIGlmICh0YXJnZXRZZWFyIDwgZmlsdGVyWWVhcikge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFllYXIgPT09IGZpbHRlclllYXIgJiYgdGFyZ2V0TW9udGggPCBmaWx0ZXJNb250aCkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGFyZ2V0WWVhciA9PT0gZmlsdGVyWWVhciAmJlxuICAgICAgICAgICAgdGFyZ2V0TW9udGggPT09IGZpbHRlck1vbnRoICYmXG4gICAgICAgICAgICB0YXJnZXREYXRlIDwgZmlsdGVyRGF0ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBMVDoge1xuICAgICAgICAgIGlmIChjZWxsID49IGRhdGUpIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTEU6IHtcbiAgICAgICAgICBpZiAodGFyZ2V0WWVhciA+IGZpbHRlclllYXIpIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRZZWFyID09PSBmaWx0ZXJZZWFyICYmIHRhcmdldE1vbnRoID4gZmlsdGVyTW9udGgpIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRhcmdldFllYXIgPT09IGZpbHRlclllYXIgJiZcbiAgICAgICAgICAgIHRhcmdldE1vbnRoID09PSBmaWx0ZXJNb250aCAmJlxuICAgICAgICAgICAgdGFyZ2V0RGF0ZSA+IGZpbHRlckRhdGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTkU6IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWx0ZXJEYXRlID09PSB0YXJnZXREYXRlICYmXG4gICAgICAgICAgICBmaWx0ZXJNb250aCA9PT0gdGFyZ2V0TW9udGggJiZcbiAgICAgICAgICAgIGZpbHRlclllYXIgPT09IHRhcmdldFllYXJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRGF0ZSBjb21wYXJhdG9yIHByb3ZpZGVkIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9KTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlckJ5QXJyYXkgPVxuICAoXzogYW55KSA9PlxuICAoZGF0YTogYW55LCBkYXRhRmllbGQ6IGFueSwgeyBmaWx0ZXJWYWwsIGNvbXBhcmF0b3IgfTogYW55KSA9PiB7XG4gICAgaWYgKGZpbHRlclZhbC5sZW5ndGggPT09IDApIHJldHVybiBkYXRhO1xuICAgIGNvbnN0IHJlZmluZWRGaWx0ZXJWYWwgPSBmaWx0ZXJWYWxcbiAgICAgIC5maWx0ZXIoKHg6IGFueSkgPT4gXy5pc0RlZmluZWQoeCkpXG4gICAgICAubWFwKCh4OiBhbnkpID0+IHgudG9TdHJpbmcoKSk7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2VsbCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIGxldCBjZWxsU3RyID0gXy5pc0RlZmluZWQoY2VsbCkgPyBjZWxsLnRvU3RyaW5nKCkgOiBcIlwiO1xuICAgICAgaWYgKGNvbXBhcmF0b3IgPT09IEVRKSB7XG4gICAgICAgIHJldHVybiByZWZpbmVkRmlsdGVyVmFsLmluZGV4T2YoY2VsbFN0cikgIT09IC0xO1xuICAgICAgfVxuICAgICAgY2VsbFN0ciA9IGNlbGxTdHIudG9Mb2NhbGVVcHBlckNhc2UoKTtcbiAgICAgIHJldHVybiByZWZpbmVkRmlsdGVyVmFsLnNvbWUoXG4gICAgICAgIChpdGVtOiBhbnkpID0+IGNlbGxTdHIuaW5kZXhPZihpdGVtLnRvTG9jYWxlVXBwZXJDYXNlKCkpICE9PSAtMVxuICAgICAgKTtcbiAgICB9KTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlckZhY3RvcnkgPSAoXzogYW55KSA9PiAoZmlsdGVyVHlwZTogYW55KSA9PiB7XG4gIHN3aXRjaCAoZmlsdGVyVHlwZSkge1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLk1VTFRJU0VMRUNUOlxuICAgICAgcmV0dXJuIGZpbHRlckJ5QXJyYXkoXyk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuTlVNQkVSOlxuICAgICAgcmV0dXJuIGZpbHRlckJ5TnVtYmVyKF8pO1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLkRBVEU6XG4gICAgICByZXR1cm4gZmlsdGVyQnlEYXRlKF8pO1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLlRFWFQ6XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuU0VMRUNUOlxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBVc2UgYHRleHRgIGZpbHRlciBhcyBkZWZhdWx0IGZpbHRlclxuICAgICAgcmV0dXJuIGZpbHRlckJ5VGV4dChfKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlcnMgPVxuICAoZGF0YTogYW55LCBjb2x1bW5zOiBhbnksIF86IGFueSkgPT5cbiAgKGN1cnJGaWx0ZXJzOiBhbnksIGNsZWFyRmlsdGVyczogeyBbZGF0YUZpZWxkOiBzdHJpbmddOiBhbnkgfSA9IHt9KSA9PiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IGZpbHRlckZhY3RvcnkoXyk7XG4gICAgY29uc3QgZmlsdGVyU3RhdGUgPSB7IC4uLmNsZWFyRmlsdGVycywgLi4uY3VyckZpbHRlcnMgfTtcbiAgICBsZXQgcmVzdWx0ID0gZGF0YTtcbiAgICBsZXQgZmlsdGVyRm47XG4gICAgT2JqZWN0LmtleXMoZmlsdGVyU3RhdGUpLmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRSZXN1bHQ7XG4gICAgICBsZXQgZmlsdGVyVmFsdWU7XG4gICAgICBsZXQgY3VzdG9tRmlsdGVyO1xuICAgICAgY29sdW1ucyA9IGNvbHVtbnMgPz8gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGNvbHVtbnNbaV0uZGF0YUZpZWxkID09PSBkYXRhRmllbGQpIHtcbiAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IGNvbHVtbnNbaV0uZmlsdGVyVmFsdWU7XG4gICAgICAgICAgaWYgKGNvbHVtbnNbaV0uZmlsdGVyKSB7XG4gICAgICAgICAgICBjdXN0b21GaWx0ZXIgPSBjb2x1bW5zW2ldLmZpbHRlci5wcm9wcy5vbkZpbHRlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNsZWFyRmlsdGVyc1tkYXRhRmllbGRdICYmIGN1c3RvbUZpbHRlcikge1xuICAgICAgICBjdXJyZW50UmVzdWx0ID0gY3VzdG9tRmlsdGVyKGNsZWFyRmlsdGVyc1tkYXRhRmllbGRdLmZpbHRlclZhbCwgcmVzdWx0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50UmVzdWx0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgcmVzdWx0ID0gY3VycmVudFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZmlsdGVyT2JqID0gZmlsdGVyU3RhdGVbZGF0YUZpZWxkXTtcbiAgICAgICAgZmlsdGVyRm4gPSBmYWN0b3J5KGZpbHRlck9iai5maWx0ZXJUeXBlKTtcbiAgICAgICAgaWYgKGN1c3RvbUZpbHRlcikge1xuICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSBjdXN0b21GaWx0ZXIoZmlsdGVyT2JqLmZpbHRlclZhbCwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRSZXN1bHQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICByZXN1bHQgPSBmaWx0ZXJGbihyZXN1bHQsIGRhdGFGaWVsZCwgZmlsdGVyT2JqLCBmaWx0ZXJWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gY3VycmVudFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBFUSwgRklMVEVSX1RZUEVTLCBMSUtFIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBmaWx0ZXJzIH0gZnJvbSBcIi4vZmlsdGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyUHJvdmlkZXJQcm9wcyB7XG4gIGRhdGE6IGFueVtdO1xuICBjb2x1bW5zOiBhbnlbXTtcbiAgZGF0YUNoYW5nZUxpc3RlbmVyPzogYW55O1xuICBmaWx0ZXI6IGFueTtcbiAgY2hpbGRyZW46IGFueTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFxuICBfOiBhbnksXG4gIGlzUmVtb3RlRmlsdGVyaW5nOiAoKSA9PiBib29sZWFuLFxuICBoYW5kbGVGaWx0ZXJDaGFuZ2U6IChmaWx0ZXJzOiBhbnkpID0+IHZvaWRcbikgPT4ge1xuICBjb25zdCBGaWx0ZXJDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxhbnk+KHt9KTtcblxuICBjbGFzcyBGaWx0ZXJQcm92aWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxGaWx0ZXJQcm92aWRlclByb3BzPiB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIGRhdGE6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgICAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgICBkYXRhQ2hhbmdlTGlzdGVuZXI6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgfTtcblxuICAgIGN1cnJGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICAgIGNsZWFyRmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBkYXRhOiBhbnlbXTtcbiAgICBpc0VtaXREYXRhQ2hhbmdlOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IEZpbHRlclByb3ZpZGVyUHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHRoaXMuY3VyckZpbHRlcnMgPSB7fTtcbiAgICAgIHRoaXMuY2xlYXJGaWx0ZXJzID0ge307XG4gICAgICB0aGlzLm9uRmlsdGVyID0gdGhpcy5vbkZpbHRlci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5kb0ZpbHRlciA9IHRoaXMuZG9GaWx0ZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMub25FeHRlcm5hbEZpbHRlciA9IHRoaXMub25FeHRlcm5hbEZpbHRlci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5kYXRhID0gcHJvcHMuZGF0YTtcbiAgICAgIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKGlzUmVtb3RlRmlsdGVyaW5nKCkgJiYgT2JqZWN0LmtleXModGhpcy5jdXJyRmlsdGVycykubGVuZ3RoID4gMCkge1xuICAgICAgICBoYW5kbGVGaWx0ZXJDaGFuZ2UodGhpcy5jdXJyRmlsdGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb25GaWx0ZXIoY29sdW1uOiBhbnksIGZpbHRlclR5cGU6IGFueSwgaW5pdGlhbGl6ZSA9IGZhbHNlKSB7XG4gICAgICByZXR1cm4gKGZpbHRlclZhbDogYW55KSA9PiB7XG4gICAgICAgIC8vIHdhdGNoIG91dCBoZXJlIGlmIG1pZ3JhdGlvbiB0byBjb250ZXh0IEFQSSwgIzMzNFxuICAgICAgICBjb25zdCBjdXJyRmlsdGVycyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY3VyckZpbHRlcnMpO1xuICAgICAgICB0aGlzLmNsZWFyRmlsdGVycyA9IHt9O1xuICAgICAgICBjb25zdCB7IGRhdGFGaWVsZCwgZmlsdGVyIH0gPSBjb2x1bW47XG5cbiAgICAgICAgY29uc3QgbmVlZENsZWFyRmlsdGVycyA9XG4gICAgICAgICAgIV8uaXNEZWZpbmVkKGZpbHRlclZhbCkgfHwgZmlsdGVyVmFsID09PSBcIlwiIHx8IGZpbHRlclZhbC5sZW5ndGggPT09IDA7XG5cbiAgICAgICAgaWYgKG5lZWRDbGVhckZpbHRlcnMpIHtcbiAgICAgICAgICBkZWxldGUgY3VyckZpbHRlcnNbZGF0YUZpZWxkXTtcbiAgICAgICAgICB0aGlzLmNsZWFyRmlsdGVycyA9IHsgW2RhdGFGaWVsZF06IHsgY2xlYXI6IHRydWUsIGZpbHRlclZhbCB9IH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gc2VsZWN0IGRlZmF1bHQgY29tcGFyYXRvciBpcyBFUSwgb3RoZXJzIGFyZSBMSUtFXG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY29tcGFyYXRvciA9IGZpbHRlclR5cGUgPT09IEZJTFRFUl9UWVBFUy5TRUxFQ1QgPyBFUSA6IExJS0UsXG4gICAgICAgICAgICBjYXNlU2Vuc2l0aXZlID0gZmFsc2UsXG4gICAgICAgICAgfSA9IGZpbHRlci5wcm9wcztcbiAgICAgICAgICBjdXJyRmlsdGVyc1tkYXRhRmllbGRdID0ge1xuICAgICAgICAgICAgZmlsdGVyVmFsLFxuICAgICAgICAgICAgZmlsdGVyVHlwZSxcbiAgICAgICAgICAgIGNvbXBhcmF0b3IsXG4gICAgICAgICAgICBjYXNlU2Vuc2l0aXZlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN1cnJGaWx0ZXJzID0gY3VyckZpbHRlcnM7XG5cbiAgICAgICAgaWYgKGlzUmVtb3RlRmlsdGVyaW5nKCkpIHtcbiAgICAgICAgICBpZiAoIWluaXRpYWxpemUpIHtcbiAgICAgICAgICAgIGhhbmRsZUZpbHRlckNoYW5nZSh0aGlzLmN1cnJGaWx0ZXJzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvRmlsdGVyKHRoaXMucHJvcHMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBvbkV4dGVybmFsRmlsdGVyKGNvbHVtbjogYW55LCBmaWx0ZXJUeXBlOiBhbnkpIHtcbiAgICAgIHJldHVybiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uRmlsdGVyKGNvbHVtbiwgZmlsdGVyVHlwZSkodmFsdWUpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRGaWx0ZXJlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgfVxuXG4gICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgbmV4dFByb3BzOiBSZWFkb25seTxGaWx0ZXJQcm92aWRlclByb3BzPixcbiAgICAgIG5leHRTdGF0ZTogUmVhZG9ubHk8e30+LFxuICAgICAgbmV4dENvbnRleHQ6IGFueVxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgaWYgKCFpc1JlbW90ZUZpbHRlcmluZygpICYmICFfLmlzRXF1YWwobmV4dFByb3BzLmRhdGEsIHRoaXMuZGF0YSkpIHtcbiAgICAgICAgdGhpcy5kb0ZpbHRlcihuZXh0UHJvcHMsIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXh0UHJvcHMuZGF0YTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGRvRmlsdGVyKHByb3BzOiBGaWx0ZXJQcm92aWRlclByb3BzLCBpZ25vcmVFbWl0RGF0YUNoYW5nZSA9IGZhbHNlKSB7XG4gICAgICBjb25zdCB7IGRhdGFDaGFuZ2VMaXN0ZW5lciwgZGF0YSwgY29sdW1ucywgZmlsdGVyIH0gPSBwcm9wcztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbHRlcnMoXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIF9cbiAgICAgICkodGhpcy5jdXJyRmlsdGVycywgdGhpcy5jbGVhckZpbHRlcnMpO1xuICAgICAgaWYgKGZpbHRlci5hZnRlckZpbHRlcikge1xuICAgICAgICBmaWx0ZXIuYWZ0ZXJGaWx0ZXIocmVzdWx0LCB0aGlzLmN1cnJGaWx0ZXJzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmIChkYXRhQ2hhbmdlTGlzdGVuZXIgJiYgIWlnbm9yZUVtaXREYXRhQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IHRydWU7XG4gICAgICAgIGRhdGFDaGFuZ2VMaXN0ZW5lci5lbWl0KFwiZmlsdGVyQ2hhbmdlZFwiLCByZXN1bHQubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZpbHRlckNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgb25GaWx0ZXI6IHRoaXMub25GaWx0ZXIsXG4gICAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyOiB0aGlzLm9uRXh0ZXJuYWxGaWx0ZXIsXG4gICAgICAgICAgICBjdXJyRmlsdGVyczogdGhpcy5jdXJyRmlsdGVycyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvRmlsdGVyQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogRmlsdGVyUHJvdmlkZXIsXG4gICAgQ29uc3VtZXI6IEZpbHRlckNvbnRleHQuQ29uc3VtZXIsXG4gIH07XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJpZFwiLCBcInBsYWNlaG9sZGVyXCIsIFwiY29sdW1uXCIsIFwic3R5bGVcIiwgXCJjbGFzc05hbWVcIiwgXCJvbkZpbHRlclwiLCBcImNhc2VTZW5zaXRpdmVcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJnZXRGaWx0ZXJcIiwgXCJmaWx0ZXJTdGF0ZVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uLy4uXCIpO1xudmFyIFRleHRGaWx0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBUZXh0RmlsdGVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0RmlsdGVyKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgVGV4dEZpbHRlciwgW3Byb3BzXSk7XG4gICAgX3RoaXMuZmlsdGVyID0gX3RoaXMuZmlsdGVyLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLmhhbmRsZUNsaWNrID0gX3RoaXMuaGFuZGxlQ2xpY2suYmluZChfdGhpcyk7XG4gICAgX3RoaXMudGltZW91dCA9IG51bGw7XG4gICAgX3RoaXMuaW5wdXQgPSB7fTtcbiAgICBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgICB2YXIgX3Byb3BzJGRlZmF1bHRWYWx1ZTtcbiAgICAgIGlmIChwcm9wcy5maWx0ZXJTdGF0ZSAmJiB0eXBlb2YgcHJvcHMuZmlsdGVyU3RhdGUuZmlsdGVyVmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBwcm9wcy5maWx0ZXJTdGF0ZS5maWx0ZXJWYWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gKF9wcm9wcyRkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUpICE9PSBudWxsICYmIF9wcm9wcyRkZWZhdWx0VmFsdWUgIT09IHZvaWQgMCA/IF9wcm9wcyRkZWZhdWx0VmFsdWUgOiBcIlwiO1xuICAgIH1cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBnZXREZWZhdWx0VmFsdWUoKVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhUZXh0RmlsdGVyLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKFRleHRGaWx0ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzLm9uRmlsdGVyLFxuICAgICAgICBnZXRGaWx0ZXIgPSBfdGhpcyRwcm9wcy5nZXRGaWx0ZXIsXG4gICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzLmNvbHVtbjtcbiAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSB0aGlzLmlucHV0LnZhbHVlO1xuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuVEVYVCwgdHJ1ZSkoZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCBvbkZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3NcbiAgICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgICAgZ2V0RmlsdGVyKGZ1bmN0aW9uIChmaWx0ZXJWYWwpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlclZhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKShmaWx0ZXJWYWwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmNsZWFuVGltZXIoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgaWYgKHByZXZQcm9wcy5kZWZhdWx0VmFsdWUgIT09IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRkZWZhdWx0VmE7XG4gICAgICAgIHZhciBuZXh0VmFsdWUgPSAoX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpICE9PSBudWxsICYmIF90aGlzJHByb3BzJGRlZmF1bHRWYSAhPT0gdm9pZCAwID8gX3RoaXMkcHJvcHMkZGVmYXVsdFZhIDogXCJcIjtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgdmFsdWU6IG5leHRWYWx1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBfdGhpczMucHJvcHMub25GaWx0ZXIoX3RoaXMzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKShuZXh0VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpbHRlcihlKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmNsZWFuVGltZXIoKTtcbiAgICAgIHZhciBmaWx0ZXJWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IGZpbHRlclZhbHVlXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgX3RoaXM0LnByb3BzLm9uRmlsdGVyKF90aGlzNC5wcm9wcy5jb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuVEVYVCkoZmlsdGVyVmFsdWUpO1xuICAgICAgfSwgdGhpcy5wcm9wcy5kZWxheSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuVGltZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5UaW1lcigpIHtcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuRmlsdGVyZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRkZWZhdWx0VmEyO1xuICAgICAgdmFyIHZhbHVlID0gKF90aGlzJHByb3BzJGRlZmF1bHRWYTIgPSB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSkgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkZGVmYXVsdFZhMiAhPT0gdm9pZCAwID8gX3RoaXMkcHJvcHMkZGVmYXVsdFZhMiA6IFwiXCI7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKSh2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFwcGx5RmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFwcGx5RmlsdGVyKGZpbHRlclRleHQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGZpbHRlclRleHQgIT09IG51bGwgJiYgZmlsdGVyVGV4dCAhPT0gdm9pZCAwID8gZmlsdGVyVGV4dCA6IFwiXCI7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKSh2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZUNsaWNrXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGUpIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DbGljayhlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzMiRpZCA9IF90aGlzJHByb3BzMi5pZCxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczIkaWQgPT09IHZvaWQgMCA/IG51bGwgOiBfdGhpcyRwcm9wczIkaWQsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHMyLnBsYWNlaG9sZGVyLFxuICAgICAgICBfdGhpcyRwcm9wczIkY29sdW1uID0gX3RoaXMkcHJvcHMyLmNvbHVtbixcbiAgICAgICAgZGF0YUZpZWxkID0gX3RoaXMkcHJvcHMyJGNvbHVtbi5kYXRhRmllbGQsXG4gICAgICAgIHRleHQgPSBfdGhpcyRwcm9wczIkY29sdW1uLnRleHQsXG4gICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHMyLnN0eWxlLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzMi5vbkZpbHRlcixcbiAgICAgICAgX3RoaXMkcHJvcHMyJGNhc2VTZW5zID0gX3RoaXMkcHJvcHMyLmNhc2VTZW5zaXRpdmUsXG4gICAgICAgIGNhc2VTZW5zaXRpdmUgPSBfdGhpcyRwcm9wczIkY2FzZVNlbnMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMyJGNhc2VTZW5zLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkZGVmYXVsdFYsXG4gICAgICAgIGdldEZpbHRlciA9IF90aGlzJHByb3BzMi5nZXRGaWx0ZXIsXG4gICAgICAgIF90aGlzJHByb3BzMiRmaWx0ZXJTdCA9IF90aGlzJHByb3BzMi5maWx0ZXJTdGF0ZSxcbiAgICAgICAgZmlsdGVyU3RhdGUgPSBfdGhpcyRwcm9wczIkZmlsdGVyU3QgPT09IHZvaWQgMCA/IHt9IDogX3RoaXMkcHJvcHMyJGZpbHRlclN0LFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlbG1JZCA9IFwidGV4dC1maWx0ZXItY29sdW1uLVwiLmNvbmNhdChkYXRhRmllbGQpLmNvbmNhdChpZCA/IFwiLVwiLmNvbmNhdChpZCkgOiBcIlwiKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyLWxhYmVsXCIsXG4gICAgICAgIGh0bWxGb3I6IGVsbUlkXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzci1vbmx5XCJcbiAgICAgIH0sIFwiRmlsdGVyIGJ5IFwiLCB0ZXh0KSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG4pIHtcbiAgICAgICAgICBfdGhpczUuaW5wdXQgPSBuO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgaWQ6IGVsbUlkLFxuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyIHRleHQtZmlsdGVyIGZvcm0tY29udHJvbCBcIi5jb25jYXQoY2xhc3NOYW1lKSxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5maWx0ZXIsXG4gICAgICAgIG9uQ2xpY2s6IHRoaXMuaGFuZGxlQ2xpY2ssXG4gICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciB8fCBcIkVudGVyIFwiLmNvbmNhdCh0ZXh0LCBcIi4uLlwiKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUsXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJ0ZXh0LWZpbHRlclwiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xufShyZWFjdF8xLkNvbXBvbmVudCk7IC8vIFRleHRGaWx0ZXIucHJvcFR5cGVzID0ge1xuLy8gICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgY29sdW1uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBmaWx0ZXJTdGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY29tcGFyYXRvcjogUHJvcFR5cGVzLm9uZU9mKFtMSUtFLCBFUV0pLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGRlbGF5OiBQcm9wVHlwZXMubnVtYmVyLFxuLy8gICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgY2FzZVNlbnNpdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGdldEZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4vLyB9O1xuLy8gVGV4dEZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGRlbGF5OiBGSUxURVJfREVMQVksXG4vLyAgIGZpbHRlclN0YXRlOiB7fSxcbi8vICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuLy8gICBjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbi8vICAgaWQ6IG51bGwsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBUZXh0RmlsdGVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgcHJlZmVyLXRlbXBsYXRlOiAwICovXG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9fMSA9IHJlcXVpcmUoXCIuLi8uLlwiKTtcbnZhciBFUSA9IFwiPVwiO1xudmFyIE5FID0gXCIhPVwiO1xudmFyIEdUID0gXCI+XCI7XG52YXIgR0UgPSBcIj49XCI7XG52YXIgTFQgPSBcIjxcIjtcbnZhciBMRSA9IFwiPD1cIjtcbnZhciBsZWdhbENvbXBhcmF0b3JzID0gW0VRLCBORSwgR1QsIEdFLCBMVCwgTEVdO1xuZnVuY3Rpb24gZGF0ZVBhcnNlcihkKSB7XG4gIHJldHVybiBcIlwiLmNvbmNhdChkLmdldFVUQ0Z1bGxZZWFyKCksIFwiLVwiKS5jb25jYXQoKFwiMFwiICsgKGQuZ2V0VVRDTW9udGgoKSArIDEpKS5zbGljZSgtMiksIFwiLVwiKS5jb25jYXQoKFwiMFwiICsgZC5nZXRVVENEYXRlKCkpLnNsaWNlKC0yKSk7XG59XG52YXIgRGF0ZUZpbHRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIERhdGVGaWx0ZXIocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERhdGVGaWx0ZXIpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBEYXRlRmlsdGVyLCBbcHJvcHNdKTtcbiAgICBfdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICBfdGhpcy5jb21wYXJhdG9ycyA9IHByb3BzLmNvbXBhcmF0b3JzIHx8IGxlZ2FsQ29tcGFyYXRvcnM7XG4gICAgX3RoaXMuYXBwbHlGaWx0ZXIgPSBfdGhpcy5hcHBseUZpbHRlci5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZURhdGUgPSBfdGhpcy5vbkNoYW5nZURhdGUuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25DaGFuZ2VDb21wYXJhdG9yID0gX3RoaXMub25DaGFuZ2VDb21wYXJhdG9yLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRGF0ZUZpbHRlciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhEYXRlRmlsdGVyLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIGdldEZpbHRlciA9IHRoaXMucHJvcHMuZ2V0RmlsdGVyO1xuICAgICAgdmFyIGNvbXBhcmF0b3IgPSB0aGlzLmRhdGVGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgICAgdmFyIGRhdGUgPSB0aGlzLmlucHV0RGF0ZS52YWx1ZTtcbiAgICAgIGlmIChjb21wYXJhdG9yICYmIGRhdGUpIHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcihkYXRlLCBjb21wYXJhdG9yLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCBvbkZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3NcbiAgICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgICAgZ2V0RmlsdGVyKGZ1bmN0aW9uIChmaWx0ZXJWYWwpIHtcbiAgICAgICAgICB2YXIgbnVsbGFibGVGaWx0ZXJWYWwgPSBmaWx0ZXJWYWwgfHwge1xuICAgICAgICAgICAgZGF0ZTogbnVsbCxcbiAgICAgICAgICAgIGNvbXBhcmF0b3I6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIF90aGlzMi5kYXRlRmlsdGVyQ29tcGFyYXRvci52YWx1ZSA9IG51bGxhYmxlRmlsdGVyVmFsLmNvbXBhcmF0b3I7XG4gICAgICAgICAgX3RoaXMyLmlucHV0RGF0ZS52YWx1ZSA9IG51bGxhYmxlRmlsdGVyVmFsLmRhdGUgPyBkYXRlUGFyc2VyKG51bGxhYmxlRmlsdGVyVmFsLmRhdGUpIDogbnVsbDtcbiAgICAgICAgICBfdGhpczIuYXBwbHlGaWx0ZXIobnVsbGFibGVGaWx0ZXJWYWwuZGF0ZSwgbnVsbGFibGVGaWx0ZXJWYWwuY29tcGFyYXRvcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbkNoYW5nZURhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25DaGFuZ2VEYXRlKGUpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5kYXRlRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICAgIHZhciBmaWx0ZXJWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXJWYWx1ZSwgY29tcGFyYXRvcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ2hhbmdlQ29tcGFyYXRvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZUNvbXBhcmF0b3IoZSkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5pbnB1dERhdGUudmFsdWU7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSwgY29tcGFyYXRvcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldENvbXBhcmF0b3JPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbXBhcmF0b3JPcHRpb25zKCkge1xuICAgICAgdmFyIG9wdGlvblRhZ3MgPSBbXTtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyR3aXRob3V0RW0gPSB0aGlzLnByb3BzLndpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24sXG4gICAgICAgIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24gPSBfdGhpcyRwcm9wcyR3aXRob3V0RW0gPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMkd2l0aG91dEVtO1xuICAgICAgaWYgKCF3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uKSB7XG4gICAgICAgIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICBrZXk6IFwiLTFcIlxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29tcGFyYXRvcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgb3B0aW9uVGFncy5wdXNoKHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgIGtleTogaSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5jb21wYXJhdG9yc1tpXVxuICAgICAgICB9LCB0aGlzLmNvbXBhcmF0b3JzW2ldKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RGVmYXVsdENvbXBhcmF0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVmYXVsdENvbXBhcmF0b3IoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPSBfdGhpcyRwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzJGRlZmF1bHRWYSA9PT0gdm9pZCAwID8ge1xuICAgICAgICAgIGRhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjb21wYXJhdG9yOiBcIlwiXG4gICAgICAgIH0gOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIF90aGlzJHByb3BzJGZpbHRlclN0YSA9IF90aGlzJHByb3BzLmZpbHRlclN0YXRlLFxuICAgICAgICBmaWx0ZXJTdGF0ZSA9IF90aGlzJHByb3BzJGZpbHRlclN0YSA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wcyRmaWx0ZXJTdGE7XG4gICAgICBpZiAoZmlsdGVyU3RhdGUgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHREYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlZmF1bHREYXRlKCkge1xuICAgICAgLy8gU2V0IHRoZSBhcHByb3ByaWF0ZSBmb3JtYXQgZm9yIHRoZSBpbnB1dCB0eXBlPWRhdGUsIGkuZS4gXCJZWVlZLU1NLUREXCJcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IHtcbiAgICAgICAgICBkYXRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tcGFyYXRvcjogXCJcIlxuICAgICAgICB9IDogX3RoaXMkcHJvcHMyJGRlZmF1bHRWLFxuICAgICAgICBfdGhpcyRwcm9wczIkZmlsdGVyU3QgPSBfdGhpcyRwcm9wczIuZmlsdGVyU3RhdGUsXG4gICAgICAgIGZpbHRlclN0YXRlID0gX3RoaXMkcHJvcHMyJGZpbHRlclN0ID09PSB2b2lkIDAgPyB7fSA6IF90aGlzJHByb3BzMiRmaWx0ZXJTdDtcbiAgICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsLmRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGVQYXJzZXIoZmlsdGVyU3RhdGUuZmlsdGVyVmFsLmRhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUuZGF0ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZVBhcnNlcihuZXcgRGF0ZShkZWZhdWx0VmFsdWUuZGF0ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFwcGx5RmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFwcGx5RmlsdGVyKHZhbHVlLCBjb21wYXJhdG9yLCBpc0luaXRpYWwpIHtcbiAgICAgIC8vIGlmICghY29tcGFyYXRvciB8fCAhdmFsdWUpIHtcbiAgICAgIC8vICByZXR1cm47XG4gICAgICAvLyB9XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMzLmNvbHVtbixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczMub25GaWx0ZXIsXG4gICAgICAgIF90aGlzJHByb3BzMyRkZWxheSA9IF90aGlzJHByb3BzMy5kZWxheSxcbiAgICAgICAgZGVsYXkgPSBfdGhpcyRwcm9wczMkZGVsYXkgPT09IHZvaWQgMCA/IDAgOiBfdGhpcyRwcm9wczMkZGVsYXk7XG4gICAgICB2YXIgZXhlY3V0ZSA9IGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgIC8vIEluY29taW5nIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgYSBzdHJpbmcsIGFuZCB0aGUgZGVmYXVsdERhdGVcbiAgICAgICAgLy8gYWJvdmUgaXMgaW1wbGVtZW50ZWQgYXMgYW4gZW1wdHkgc3RyaW5nLCBzbyB3ZSBjYW4ganVzdCBjaGVjayBmb3IgdGhhdC5cbiAgICAgICAgLy8gaW5zdGVhZCBvZiBwYXJzaW5nIGFuIGludmFsaWQgRGF0ZS4gVGhlIGZpbHRlciBmdW5jdGlvbiB3aWxsIGludGVycHJldFxuICAgICAgICAvLyBudWxsIGFzIGFuIGVtcHR5IGRhdGUgZmllbGRcbiAgICAgICAgdmFyIGRhdGUgPSB2YWx1ZSA9PT0gXCJcIiA/IG51bGwgOiBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbkZpbHRlcihjb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuREFURSwgaXNJbml0aWFsKSh7XG4gICAgICAgICAgZGF0ZTogZGF0ZSxcbiAgICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGlmIChkZWxheSkge1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBleGVjdXRlKCk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4ZWN1dGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzNCRpZCA9IF90aGlzJHByb3BzNC5pZCxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczQkaWQgPT09IHZvaWQgMCA/IG51bGwgOiBfdGhpcyRwcm9wczQkaWQsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHM0LnBsYWNlaG9sZGVyLFxuICAgICAgICBfdGhpcyRwcm9wczQkY29sdW1uID0gX3RoaXMkcHJvcHM0LmNvbHVtbixcbiAgICAgICAgZGF0YUZpZWxkID0gX3RoaXMkcHJvcHM0JGNvbHVtbi5kYXRhRmllbGQsXG4gICAgICAgIHRleHQgPSBfdGhpcyRwcm9wczQkY29sdW1uLnRleHQsXG4gICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHM0LnN0eWxlLFxuICAgICAgICBjb21wYXJhdG9yU3R5bGUgPSBfdGhpcyRwcm9wczQuY29tcGFyYXRvclN0eWxlLFxuICAgICAgICBkYXRlU3R5bGUgPSBfdGhpcyRwcm9wczQuZGF0ZVN0eWxlLFxuICAgICAgICBfdGhpcyRwcm9wczQkY2xhc3NOYW0gPSBfdGhpcyRwcm9wczQuY2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczQkY2xhc3NOYW0gPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczQkY2xhc3NOYW0sXG4gICAgICAgIF90aGlzJHByb3BzNCRjb21wYXJhdCA9IF90aGlzJHByb3BzNC5jb21wYXJhdG9yQ2xhc3NOYW1lLFxuICAgICAgICBjb21wYXJhdG9yQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHM0JGNvbXBhcmF0ID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHM0JGNvbXBhcmF0LFxuICAgICAgICBfdGhpcyRwcm9wczQkZGF0ZUNsYXMgPSBfdGhpcyRwcm9wczQuZGF0ZUNsYXNzTmFtZSxcbiAgICAgICAgZGF0ZUNsYXNzTmFtZSA9IF90aGlzJHByb3BzNCRkYXRlQ2xhcyA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzNCRkYXRlQ2xhcztcbiAgICAgIHZhciBjb21wYXJhdG9yRWxtSWQgPSBcImRhdGUtZmlsdGVyLWNvbXBhcmF0b3ItXCIuY29uY2F0KGRhdGFGaWVsZCkuY29uY2F0KGlkID8gXCItXCIuY29uY2F0KGlkKSA6IFwiXCIpO1xuICAgICAgdmFyIGlucHV0RWxtSWQgPSBcImRhdGUtZmlsdGVyLWNvbHVtbi1cIi5jb25jYXQoZGF0YUZpZWxkKS5jb25jYXQoaWQgPyBcIi1cIi5jb25jYXQoaWQpIDogXCJcIik7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgICAgIHJldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyIGRhdGUtZmlsdGVyIFwiLmNvbmNhdChjbGFzc05hbWUpLFxuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJkYXRlLWZpbHRlclwiXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyLWxhYmVsXCIsXG4gICAgICAgIGh0bWxGb3I6IGNvbXBhcmF0b3JFbG1JZFxuICAgICAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwic3Itb25seVwiXG4gICAgICB9LCBcIkZpbHRlciBjb21wYXJhdG9yXCIpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5kYXRlRmlsdGVyQ29tcGFyYXRvciA9IG47XG4gICAgICAgIH0sXG4gICAgICAgIGlkOiBjb21wYXJhdG9yRWxtSWQsXG4gICAgICAgIHN0eWxlOiBjb21wYXJhdG9yU3R5bGUsXG4gICAgICAgIGNsYXNzTmFtZTogXCJkYXRlLWZpbHRlci1jb21wYXJhdG9yIGZvcm0tY29udHJvbCBcIi5jb25jYXQoY29tcGFyYXRvckNsYXNzTmFtZSksXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvcixcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLmdldERlZmF1bHRDb21wYXJhdG9yKCksXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJkYXRlLWZpbHRlci1jb21wYXJhdG9yXCJcbiAgICAgIH0sIHRoaXMuZ2V0Q29tcGFyYXRvck9wdGlvbnMoKSkpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBodG1sRm9yOiBpbnB1dEVsbUlkXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzci1vbmx5XCJcbiAgICAgIH0sIFwiRW50ZXIgJFwiLCB0ZXh0KSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5pbnB1dERhdGUgPSBuO1xuICAgICAgICB9LFxuICAgICAgICBpZDogaW5wdXRFbG1JZCxcbiAgICAgICAgY2xhc3NOYW1lOiBcImZpbHRlciBkYXRlLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wgXCIuY29uY2F0KGRhdGVDbGFzc05hbWUpLFxuICAgICAgICBzdHlsZTogZGF0ZVN0eWxlLFxuICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2VEYXRlLFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIgfHwgXCJFbnRlciBcIi5jb25jYXQodGV4dCwgXCIuLi5cIiksXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5nZXREZWZhdWx0RGF0ZSgpLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwiZGF0ZS1maWx0ZXItaW5wdXRcIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBEYXRlRmlsdGVyLnByb3BUeXBlcyA9IHtcbi8vICAgb25GaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZmlsdGVyU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGRlbGF5OiBQcm9wVHlwZXMubnVtYmVyLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zaGFwZSh7XG4vLyAgICAgZGF0ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdF0pLFxuLy8gICAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihbLi4ubGVnYWxDb21wYXJhdG9ycywgJyddKVxuLy8gICB9KSxcbi8vICAgLyogZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOiAwICovXG4vLyAgIGNvbXBhcmF0b3JzOiAocHJvcHM6IGFueSwgcHJvcE5hbWU6IGFueSkgPT4ge1xuLy8gICAgIGlmICghcHJvcHNbcHJvcE5hbWVdKSB7XG4vLyAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHNbcHJvcE5hbWVdLmxlbmd0aDsgaSArPSAxKSB7XG4vLyAgICAgICBsZXQgY29tcGFyYXRvcklzVmFsaWQgPSBmYWxzZTtcbi8vICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVnYWxDb21wYXJhdG9ycy5sZW5ndGg7IGogKz0gMSkge1xuLy8gICAgICAgICBpZiAobGVnYWxDb21wYXJhdG9yc1tqXSA9PT0gcHJvcHNbcHJvcE5hbWVdW2ldIHx8IHByb3BzW3Byb3BOYW1lXVtpXSA9PT0gJycpIHtcbi8vICAgICAgICAgICBjb21wYXJhdG9ySXNWYWxpZCA9IHRydWU7XG4vLyAgICAgICAgICAgYnJlYWs7XG4vLyAgICAgICAgIH1cbi8vICAgICAgIH1cbi8vICAgICAgIGlmICghY29tcGFyYXRvcklzVmFsaWQpIHtcbi8vICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihgRGF0ZSBjb21wYXJhdG9yIHByb3ZpZGVkIGlzIG5vdCBzdXBwb3J0ZWQuXG4vLyAgICAgICAgICAgVXNlIG9ubHkgJHtsZWdhbENvbXBhcmF0b3JzfWApO1xuLy8gICAgICAgfVxuLy8gICAgIH1cbi8vICAgfSxcbi8vICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb246IFByb3BUeXBlcy5ib29sLFxuLy8gICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY29tcGFyYXRvclN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBkYXRlU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgY29tcGFyYXRvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZGF0ZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcbi8vIERhdGVGaWx0ZXIuZGVmYXVsdFByb3BzID0ge1xuLy8gICBkZWxheTogMCxcbi8vICAgZGVmYXVsdFZhbHVlOiB7XG4vLyAgICAgZGF0ZTogdW5kZWZpbmVkLFxuLy8gICAgIGNvbXBhcmF0b3I6ICcnXG4vLyAgIH0sXG4vLyAgIGZpbHRlclN0YXRlOiB7fSxcbi8vICAgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbjogZmFsc2UsXG4vLyAgIGNvbXBhcmF0b3JzOiBsZWdhbENvbXBhcmF0b3JzLFxuLy8gICBwbGFjZWhvbGRlcjogdW5kZWZpbmVkLFxuLy8gICBzdHlsZTogdW5kZWZpbmVkLFxuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBjb21wYXJhdG9yU3R5bGU6IHVuZGVmaW5lZCxcbi8vICAgY29tcGFyYXRvckNsYXNzTmFtZTogJycsXG4vLyAgIGRhdGVTdHlsZTogdW5kZWZpbmVkLFxuLy8gICBkYXRlQ2xhc3NOYW1lOiAnJyxcbi8vICAgaWQ6IG51bGxcbi8vIH07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IERhdGVGaWx0ZXI7IiwiLy8gVGhlIGluZmVycmVkIHR5cGUgb2YgJ2RlZmF1bHQnIGNhbm5vdCBiZSBuYW1lZCB3aXRob3V0IGEgcmVmZXJlbmNlIHRvICdyZWFjdC1ib290c3RyYXAtdGFibGUtbmcvbm9kZV9tb2R1bGVzL0B0eXBlcy9wcm9wLXR5cGVzJy5cbi8vIFRoaXMgaXMgbGlrZWx5IG5vdCBwb3J0YWJsZS4gQSB0eXBlIGFubm90YXRpb24gaXMgbmVjZXNzYXJ5LnRzKDI3NDIpXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzLCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQ29sdW1uRGVzY3JpcHRpb24sXG4gIFRhYmxlQ29sdW1uRmlsdGVyUHJvcHMsXG59IGZyb20gXCJyZWFjdC1ib290c3RyYXAtdGFibGUtbmdcIjtcblxuaW1wb3J0IERhdGVGaWx0ZXIgZnJvbSBcIi4vc3JjL2NvbXBvbmVudHMvZGF0ZVwiO1xuaW1wb3J0IE11bHRpU2VsZWN0RmlsdGVyIGZyb20gXCIuL3NyYy9jb21wb25lbnRzL211bHRpc2VsZWN0XCI7XG5pbXBvcnQgTnVtYmVyRmlsdGVyIGZyb20gXCIuL3NyYy9jb21wb25lbnRzL251bWJlclwiO1xuaW1wb3J0IFNlbGVjdEZpbHRlciBmcm9tIFwiLi9zcmMvY29tcG9uZW50cy9zZWxlY3RcIjtcbmltcG9ydCBUZXh0RmlsdGVyIGZyb20gXCIuL3NyYy9jb21wb25lbnRzL3RleHRcIjtcbmltcG9ydCBjcmVhdGVDb250ZXh0IGZyb20gXCIuL3NyYy9jb250ZXh0XCI7XG5cbmV4cG9ydCBlbnVtIEZJTFRFUl9UWVBFUyB7XG4gIFRFWFQgPSBcIlRFWFRcIixcbiAgU0VMRUNUID0gXCJTRUxFQ1RcIixcbiAgTVVMVElTRUxFQ1QgPSBcIk1VTFRJU0VMRUNUXCIsXG4gIE5VTUJFUiA9IFwiTlVNQkVSXCIsXG4gIERBVEUgPSBcIkRBVEVcIixcbn1cblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9ERUxBWSA9IDUwMDtcblxuLyoqXG4gKiBGaWx0ZXIgY29tcGFyYXRvcnMgdXNlZCBmb3IgdGFibGUgZmlsdGVyc1xuICovXG5leHBvcnQgY29uc3QgTElLRSA9IFwiTElLRVwiO1xuZXhwb3J0IGNvbnN0IEVRID0gXCI9XCI7XG5leHBvcnQgY29uc3QgTkUgPSBcIiE9XCI7XG5leHBvcnQgY29uc3QgR1QgPSBcIj5cIjtcbmV4cG9ydCBjb25zdCBHRSA9IFwiPj1cIjtcbmV4cG9ydCBjb25zdCBMVCA9IFwiPFwiO1xuZXhwb3J0IGNvbnN0IExFID0gXCI8PVwiO1xuXG5leHBvcnQgdHlwZSBDb21wYXJhdG9yID0gc3RyaW5nO1xuXG5leHBvcnQgY29uc3QgQ29tcGFyYXRvck51bWJlciA9IDc7XG5cbmV4cG9ydCB0eXBlIFRleHRGaWx0ZXJQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IFRhYmxlQ29sdW1uRmlsdGVyUHJvcHM8XG4gIHN0cmluZyxcbiAgVFxuPiAmXG4gIFBhcnRpYWw8e1xuICAgIC8vIGRlZmF1bHQgaXMgZmFsc2UsIGFuZCB0cnVlIHdpbGwgb25seSB3b3JrIHdoZW4gY29tcGFyYXRvciBpcyBMSUtFXG4gICAgY2FzZVNlbnNpdGl2ZTogYm9vbGVhbjtcbiAgICBjb21wYXJhdG9yOiBDb21wYXJhdG9yO1xuICAgIC8vIG9uIGZpbHRlciBlbGVtZW50IGNsaWNrIGV2ZW50XG4gICAgb25DbGljazogKChlOiBTeW50aGV0aWNFdmVudCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgZmlsdGVyU3RhdGU/OiBhbnk7XG4gICAgY29sdW1uOiBhbnk7XG4gIH0+O1xuXG5leHBvcnQgY29uc3QgdGV4dEZpbHRlciA9IChwcm9wczogUGFydGlhbDxUZXh0RmlsdGVyUHJvcHM+ID0ge30pID0+ICh7XG4gIEZpbHRlcjogVGV4dEZpbHRlcixcbiAgcHJvcHMsXG59KTtcblxuZXhwb3J0IHR5cGUgU2VsZWN0RmlsdGVyT3B0aW9ucyA9XG4gIHwgeyBbaW5kZXg6IHN0cmluZ106IHN0cmluZyB9XG4gIHwgQXJyYXk8eyB2YWx1ZTogbnVtYmVyOyBsYWJlbDogc3RyaW5nIH0+O1xuXG5leHBvcnQgdHlwZSBTZWxlY3RGaWx0ZXJQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IFRhYmxlQ29sdW1uRmlsdGVyUHJvcHM8XG4gIHN0cmluZyxcbiAgVFxuPiAmIHtcbiAgb3B0aW9uczpcbiAgICB8IFNlbGVjdEZpbHRlck9wdGlvbnNcbiAgICB8ICgoY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxUPikgPT4gU2VsZWN0RmlsdGVyT3B0aW9ucyk7XG4gIGNvbXBhcmF0b3I/OiBDb21wYXJhdG9yIHwgdW5kZWZpbmVkO1xuICAvLyBXaGVuIHRoZSBkZWZhdWx0IHVuc2V0IHNlbGVjdGlvbiBpcyBoaWRkZW4gZnJvbSBkcm9wZG93blxuICB3aXRob3V0RW1wdHlPcHRpb24/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBmaWx0ZXJTdGF0ZT86IGFueTtcbiAgY29sdW1uOiBhbnk7XG4gIGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdEZpbHRlciA9IChwcm9wczogUGFydGlhbDxTZWxlY3RGaWx0ZXJQcm9wcz4gPSB7fSkgPT4gKHtcbiAgRmlsdGVyOiBTZWxlY3RGaWx0ZXIsXG4gIHByb3BzLFxufSk7XG5cbmV4cG9ydCB0eXBlIE11bHRpU2VsZWN0RmlsdGVyT3B0aW9ucyA9IHtcbiAgW2luZGV4OiBzdHJpbmddOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBNdWx0aVNlbGVjdEZpbHRlclByb3BzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+ID1cbiAgVGFibGVDb2x1bW5GaWx0ZXJQcm9wczxzdHJpbmdbXSwgVD4gJiB7XG4gICAgb3B0aW9uczogTXVsdGlTZWxlY3RGaWx0ZXJPcHRpb25zIHwgKCgpID0+IE11bHRpU2VsZWN0RmlsdGVyT3B0aW9ucyk7XG4gICAgY29tcGFyYXRvcj86IENvbXBhcmF0b3IgfCB1bmRlZmluZWQ7XG4gICAgLy8gV2hlbiBzZXQgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIGlzIGhpZGRlbiBmcm9tIGRyb3Bkb3duXG4gICAgd2l0aG91dEVtcHR5T3B0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICBmaWx0ZXJTdGF0ZT86IGFueTtcbiAgICBjb2x1bW46IGFueTtcbiAgICBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IG11bHRpU2VsZWN0RmlsdGVyID0gKFxuICBwcm9wczogUGFydGlhbDxNdWx0aVNlbGVjdEZpbHRlclByb3BzPiA9IHt9XG4pID0+ICh7XG4gIEZpbHRlcjogTXVsdGlTZWxlY3RGaWx0ZXIsXG4gIHByb3BzLFxufSk7XG5cbmV4cG9ydCB0eXBlIE51bWJlckZpbHRlclByb3BzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+ID0gVGFibGVDb2x1bW5GaWx0ZXJQcm9wczxcbiAgeyBudW1iZXI6IG51bWJlciB8IFwiXCI7IGNvbXBhcmF0b3I6IENvbXBhcmF0b3IgfSxcbiAgVFxuPiAmIHtcbiAgb3B0aW9ucz86IG51bWJlcltdIHwgdW5kZWZpbmVkO1xuICBjb21wYXJhdG9ycz86IENvbXBhcmF0b3JbXSB8IHVuZGVmaW5lZDtcbiAgLy8gV2hlbiBzZXQgdG8gdHJ1ZSBjb21wYXJhdG9yIGRyb3Bkb3duIGRvZXMgbm90IHNob3cgYSBcIm5vIHNlbGVjdGlvblwiIG9wdGlvblxuICB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgY29tcGFyYXRvckNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbnVtYmVyQ2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb21wYXJhdG9yU3R5bGU/OiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBudW1iZXJTdHlsZT86IENTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHRWYWx1ZT86IHsgbnVtYmVyOiBudW1iZXI7IGNvbXBhcmF0b3I6IENvbXBhcmF0b3IgfSB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyU3RhdGU/OiBhbnk7XG4gIGNvbHVtbjogYW55O1xufTtcblxuZXhwb3J0IGNvbnN0IG51bWJlckZpbHRlciA9IChwcm9wczogUGFydGlhbDxOdW1iZXJGaWx0ZXJQcm9wcz4gPSB7fSkgPT4gKHtcbiAgRmlsdGVyOiBOdW1iZXJGaWx0ZXIsXG4gIHByb3BzLFxufSk7XG5cbmV4cG9ydCB0eXBlIERhdGVGaWx0ZXJQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IFRhYmxlQ29sdW1uRmlsdGVyUHJvcHM8XG4gIERhdGUsXG4gIFRcbj4gJiB7XG4gIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0VmFsdWU/OlxuICAgIHwge1xuICAgICAgICBkYXRlPzogRGF0ZTtcbiAgICAgICAgY29tcGFyYXRvcj86IENvbXBhcmF0b3I7XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWQ7XG4gIGNvbXBhcmF0b3JzPzogQ29tcGFyYXRvcltdIHwgdW5kZWZpbmVkO1xuICBjb21wYXJhdG9yQ2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkYXRlQ2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb21wYXJhdG9yU3R5bGU/OiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBkYXRlU3R5bGU/OiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBmaWx0ZXJTdGF0ZT86IGFueTtcbiAgY29sdW1uOiBhbnk7XG59O1xuXG5leHBvcnQgY29uc3QgZGF0ZUZpbHRlciA9IChwcm9wczogUGFydGlhbDxEYXRlRmlsdGVyUHJvcHM+ID0ge30pID0+ICh7XG4gIEZpbHRlcjogRGF0ZUZpbHRlcixcbiAgcHJvcHMsXG59KTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tRmlsdGVyUHJvcHMgPSB7XG4gIHR5cGU/OiBzdHJpbmcgfCBGSUxURVJfVFlQRVMgfCB1bmRlZmluZWQ7XG4gIGNvbXBhcmF0b3I/OiBDb21wYXJhdG9yIHwgdW5kZWZpbmVkO1xuICBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBjdXN0b21GaWx0ZXIgPSAocHJvcHM6IFBhcnRpYWw8Q3VzdG9tRmlsdGVyUHJvcHM+ID0ge30pID0+ICh7XG4gIEZpbHRlcjogKCkgPT4ge30sXG4gIHByb3BzLFxufSk7XG5cbi8qKlxuICogZGVjbGFyYXRpb24gZm9yIHRhYmxlIGZpbHRlciBzdWIgbW9kdWxlXG4gKi9cbmV4cG9ydCB0eXBlIEZpbHRlckZhY3RvcnlQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IHtcbiAgLy8gVE9ETyBuZXdGaWx0ZXJzIGlzIG5vdCB0ZXN0ZWQgbm90IGl0cyB0eXBlIGlzIHZhbGlkYXRlZCBzaW5jZSB0aGUgYXV0aG9yIG9mIHRoaXMgY29tbWl0IGhhcyBubyBleHBlcmllbmNlIHdpdGggdGhpcyBmaWVsZFxuICBhZnRlckZpbHRlcj86ICgobmV3UmVzdWx0OiBUW10sIG5ld0ZpbHRlcnM/OiB1bmtub3duW10pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xufTtcblxuLy8gZGVjbGFyZSBmdW5jdGlvbiBmaWx0ZXJGYWN0b3J5KHByb3BzPzogRmlsdGVyRmFjdG9yeVByb3BzKTogdW5rbm93bjtcbi8vIGV4cG9ydCBkZWZhdWx0IGZpbHRlckZhY3Rvcnk7XG5cbmV4cG9ydCBkZWZhdWx0IChvcHRpb25zID0ge30pID0+ICh7XG4gIGNyZWF0ZUNvbnRleHQsXG4gIG9wdGlvbnMsXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgcHJlZmVyLXRlbXBsYXRlOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IERhdGVGaWx0ZXJQcm9wcywgRklMVEVSX1RZUEVTIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmNvbnN0IEVRID0gXCI9XCI7XG5jb25zdCBORSA9IFwiIT1cIjtcbmNvbnN0IEdUID0gXCI+XCI7XG5jb25zdCBHRSA9IFwiPj1cIjtcbmNvbnN0IExUID0gXCI8XCI7XG5jb25zdCBMRSA9IFwiPD1cIjtcblxuY29uc3QgbGVnYWxDb21wYXJhdG9ycyA9IFtFUSwgTkUsIEdULCBHRSwgTFQsIExFXTtcblxuZnVuY3Rpb24gZGF0ZVBhcnNlcihkOiBhbnkpIHtcbiAgcmV0dXJuIGAke2QuZ2V0VVRDRnVsbFllYXIoKX0tJHsoXCIwXCIgKyAoZC5nZXRVVENNb250aCgpICsgMSkpLnNsaWNlKC0yKX0tJHsoXG4gICAgXCIwXCIgKyBkLmdldFVUQ0RhdGUoKVxuICApLnNsaWNlKC0yKX1gO1xufVxuXG5jbGFzcyBEYXRlRmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50PERhdGVGaWx0ZXJQcm9wcz4ge1xuICBjb21wYXJhdG9yczogYW55O1xuICBkYXRlRmlsdGVyQ29tcGFyYXRvcjogYW55O1xuICBpbnB1dERhdGU6IGFueTtcbiAgdGltZW91dDogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5jb21wYXJhdG9ycyA9IHByb3BzLmNvbXBhcmF0b3JzIHx8IGxlZ2FsQ29tcGFyYXRvcnM7XG4gICAgdGhpcy5hcHBseUZpbHRlciA9IHRoaXMuYXBwbHlGaWx0ZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uQ2hhbmdlRGF0ZSA9IHRoaXMub25DaGFuZ2VEYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkNoYW5nZUNvbXBhcmF0b3IgPSB0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBnZXRGaWx0ZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY29tcGFyYXRvciA9IHRoaXMuZGF0ZUZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuaW5wdXREYXRlLnZhbHVlO1xuICAgIGlmIChjb21wYXJhdG9yICYmIGRhdGUpIHtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZGF0ZSwgY29tcGFyYXRvciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgIGdldEZpbHRlcigoZmlsdGVyVmFsOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgbnVsbGFibGVGaWx0ZXJWYWwgPSBmaWx0ZXJWYWwgfHwgeyBkYXRlOiBudWxsLCBjb21wYXJhdG9yOiBudWxsIH07XG4gICAgICAgIHRoaXMuZGF0ZUZpbHRlckNvbXBhcmF0b3IudmFsdWUgPSBudWxsYWJsZUZpbHRlclZhbC5jb21wYXJhdG9yO1xuICAgICAgICB0aGlzLmlucHV0RGF0ZS52YWx1ZSA9IG51bGxhYmxlRmlsdGVyVmFsLmRhdGVcbiAgICAgICAgICA/IGRhdGVQYXJzZXIobnVsbGFibGVGaWx0ZXJWYWwuZGF0ZSlcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcihudWxsYWJsZUZpbHRlclZhbC5kYXRlLCBudWxsYWJsZUZpbHRlclZhbC5jb21wYXJhdG9yKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgb25DaGFuZ2VEYXRlKGU6IGFueSkge1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSB0aGlzLmRhdGVGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXJWYWx1ZSwgY29tcGFyYXRvcik7XG4gIH1cblxuICBvbkNoYW5nZUNvbXBhcmF0b3IoZTogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmlucHV0RGF0ZS52YWx1ZTtcbiAgICBjb25zdCBjb21wYXJhdG9yID0gZS50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSwgY29tcGFyYXRvcik7XG4gIH1cblxuICBnZXRDb21wYXJhdG9yT3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25UYWdzID0gW107XG4gICAgY29uc3QgeyB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uID0gZmFsc2UgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCF3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uKSB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goPG9wdGlvbiBrZXk9XCItMVwiIC8+KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbXBhcmF0b3JzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goXG4gICAgICAgIDxvcHRpb24ga2V5PXtpfSB2YWx1ZT17dGhpcy5jb21wYXJhdG9yc1tpXX0+XG4gICAgICAgICAge3RoaXMuY29tcGFyYXRvcnNbaV19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvblRhZ3M7XG4gIH1cblxuICBnZXREZWZhdWx0Q29tcGFyYXRvcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSB7IGRhdGU6IHVuZGVmaW5lZCwgY29tcGFyYXRvcjogXCJcIiB9LFxuICAgICAgZmlsdGVyU3RhdGUgPSB7fSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmlsdGVyU3RhdGUgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsKSB7XG4gICAgICByZXR1cm4gZmlsdGVyU3RhdGUuZmlsdGVyVmFsLmNvbXBhcmF0b3I7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3IpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUuY29tcGFyYXRvcjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXREZWZhdWx0RGF0ZSgpIHtcbiAgICAvLyBTZXQgdGhlIGFwcHJvcHJpYXRlIGZvcm1hdCBmb3IgdGhlIGlucHV0IHR5cGU9ZGF0ZSwgaS5lLiBcIllZWVktTU0tRERcIlxuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHsgZGF0ZTogdW5kZWZpbmVkLCBjb21wYXJhdG9yOiBcIlwiIH0sXG4gICAgICBmaWx0ZXJTdGF0ZSA9IHt9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsLmRhdGUpIHtcbiAgICAgIHJldHVybiBkYXRlUGFyc2VyKGZpbHRlclN0YXRlLmZpbHRlclZhbC5kYXRlKTtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUuZGF0ZSkge1xuICAgICAgcmV0dXJuIGRhdGVQYXJzZXIobmV3IERhdGUoZGVmYXVsdFZhbHVlLmRhdGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBhcHBseUZpbHRlcih2YWx1ZTogYW55LCBjb21wYXJhdG9yOiBhbnksIGlzSW5pdGlhbD86IGFueSkge1xuICAgIC8vIGlmICghY29tcGFyYXRvciB8fCAhdmFsdWUpIHtcbiAgICAvLyAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICBjb25zdCB7IGNvbHVtbiwgb25GaWx0ZXIsIGRlbGF5ID0gMCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBleGVjdXRlID0gKCkgPT4ge1xuICAgICAgLy8gSW5jb21pbmcgdmFsdWUgc2hvdWxkIGFsd2F5cyBiZSBhIHN0cmluZywgYW5kIHRoZSBkZWZhdWx0RGF0ZVxuICAgICAgLy8gYWJvdmUgaXMgaW1wbGVtZW50ZWQgYXMgYW4gZW1wdHkgc3RyaW5nLCBzbyB3ZSBjYW4ganVzdCBjaGVjayBmb3IgdGhhdC5cbiAgICAgIC8vIGluc3RlYWQgb2YgcGFyc2luZyBhbiBpbnZhbGlkIERhdGUuIFRoZSBmaWx0ZXIgZnVuY3Rpb24gd2lsbCBpbnRlcnByZXRcbiAgICAgIC8vIG51bGwgYXMgYW4gZW1wdHkgZGF0ZSBmaWVsZFxuICAgICAgY29uc3QgZGF0ZSA9IHZhbHVlID09PSBcIlwiID8gbnVsbCA6IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLkRBVEUsIGlzSW5pdGlhbCkoeyBkYXRlLCBjb21wYXJhdG9yIH0pO1xuICAgIH07XG4gICAgaWYgKGRlbGF5KSB7XG4gICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZXhlY3V0ZSgpO1xuICAgICAgfSwgZGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGVjdXRlKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGlkID0gbnVsbCxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgY29sdW1uOiB7IGRhdGFGaWVsZCwgdGV4dCB9LFxuICAgICAgc3R5bGUsXG4gICAgICBjb21wYXJhdG9yU3R5bGUsXG4gICAgICBkYXRlU3R5bGUsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgY29tcGFyYXRvckNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBkYXRlQ2xhc3NOYW1lID0gXCJcIixcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGNvbXBhcmF0b3JFbG1JZCA9IGBkYXRlLWZpbHRlci1jb21wYXJhdG9yLSR7ZGF0YUZpZWxkfSR7aWQgPyBgLSR7aWR9YCA6IFwiXCJcbiAgICAgIH1gO1xuICAgIGNvbnN0IGlucHV0RWxtSWQgPSBgZGF0ZS1maWx0ZXItY29sdW1uLSR7ZGF0YUZpZWxkfSR7aWQgPyBgLSR7aWR9YCA6IFwiXCJ9YDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICBjbGFzc05hbWU9e2BmaWx0ZXIgZGF0ZS1maWx0ZXIgJHtjbGFzc05hbWV9YH1cbiAgICAgICAgc3R5bGU9e3N0eWxlIGFzIGFueX1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXRlLWZpbHRlclwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmaWx0ZXItbGFiZWxcIiBodG1sRm9yPXtjb21wYXJhdG9yRWxtSWR9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5GaWx0ZXIgY29tcGFyYXRvcjwvc3Bhbj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICByZWY9eyhuKSA9PiB7IHRoaXMuZGF0ZUZpbHRlckNvbXBhcmF0b3IgPSBuOyB9fVxuICAgICAgICAgICAgaWQ9e2NvbXBhcmF0b3JFbG1JZH1cbiAgICAgICAgICAgIHN0eWxlPXtjb21wYXJhdG9yU3R5bGUgYXMgYW55fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgZGF0ZS1maWx0ZXItY29tcGFyYXRvciBmb3JtLWNvbnRyb2wgJHtjb21wYXJhdG9yQ2xhc3NOYW1lfWB9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZUNvbXBhcmF0b3J9XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdENvbXBhcmF0b3IoKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF0ZS1maWx0ZXItY29tcGFyYXRvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMuZ2V0Q29tcGFyYXRvck9wdGlvbnMoKX1cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGxhYmVsIGh0bWxGb3I9e2lucHV0RWxtSWR9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5FbnRlciAke3RleHR9PC9zcGFuPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVmPXsobikgPT4geyB0aGlzLmlucHV0RGF0ZSA9IG47IH19XG4gICAgICAgICAgICBpZD17aW5wdXRFbG1JZH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17YGZpbHRlciBkYXRlLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wgJHtkYXRlQ2xhc3NOYW1lfWB9XG4gICAgICAgICAgICBzdHlsZT17ZGF0ZVN0eWxlIGFzIGFueX1cbiAgICAgICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlRGF0ZX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlciB8fCBgRW50ZXIgJHt0ZXh0fS4uLmB9XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdERhdGUoKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF0ZS1maWx0ZXItaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbi8vIERhdGVGaWx0ZXIucHJvcFR5cGVzID0ge1xuLy8gICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgY29sdW1uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBmaWx0ZXJTdGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnNoYXBlKHtcbi8vICAgICBkYXRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0XSksXG4vLyAgICAgY29tcGFyYXRvcjogUHJvcFR5cGVzLm9uZU9mKFsuLi5sZWdhbENvbXBhcmF0b3JzLCAnJ10pXG4vLyAgIH0pLFxuLy8gICAvKiBlc2xpbnQgY29uc2lzdGVudC1yZXR1cm46IDAgKi9cbi8vICAgY29tcGFyYXRvcnM6IChwcm9wczogYW55LCBwcm9wTmFtZTogYW55KSA9PiB7XG4vLyAgICAgaWYgKCFwcm9wc1twcm9wTmFtZV0pIHtcbi8vICAgICAgIHJldHVybjtcbi8vICAgICB9XG4vLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wc1twcm9wTmFtZV0ubGVuZ3RoOyBpICs9IDEpIHtcbi8vICAgICAgIGxldCBjb21wYXJhdG9ySXNWYWxpZCA9IGZhbHNlO1xuLy8gICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZWdhbENvbXBhcmF0b3JzLmxlbmd0aDsgaiArPSAxKSB7XG4vLyAgICAgICAgIGlmIChsZWdhbENvbXBhcmF0b3JzW2pdID09PSBwcm9wc1twcm9wTmFtZV1baV0gfHwgcHJvcHNbcHJvcE5hbWVdW2ldID09PSAnJykge1xuLy8gICAgICAgICAgIGNvbXBhcmF0b3JJc1ZhbGlkID0gdHJ1ZTtcbi8vICAgICAgICAgICBicmVhaztcbi8vICAgICAgICAgfVxuLy8gICAgICAgfVxuLy8gICAgICAgaWYgKCFjb21wYXJhdG9ySXNWYWxpZCkge1xuLy8gICAgICAgICByZXR1cm4gbmV3IEVycm9yKGBEYXRlIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZC5cbi8vICAgICAgICAgICBVc2Ugb25seSAke2xlZ2FsQ29tcGFyYXRvcnN9YCk7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICB9LFxuLy8gICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjb21wYXJhdG9yU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGRhdGVTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBjb21wYXJhdG9yQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBkYXRlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBnZXRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuXG4vLyBEYXRlRmlsdGVyLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgZGVsYXk6IDAsXG4vLyAgIGRlZmF1bHRWYWx1ZToge1xuLy8gICAgIGRhdGU6IHVuZGVmaW5lZCxcbi8vICAgICBjb21wYXJhdG9yOiAnJ1xuLy8gICB9LFxuLy8gICBmaWx0ZXJTdGF0ZToge30sXG4vLyAgIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb246IGZhbHNlLFxuLy8gICBjb21wYXJhdG9yczogbGVnYWxDb21wYXJhdG9ycyxcbi8vICAgcGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbi8vICAgc3R5bGU6IHVuZGVmaW5lZCxcbi8vICAgY2xhc3NOYW1lOiAnJyxcbi8vICAgY29tcGFyYXRvclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNvbXBhcmF0b3JDbGFzc05hbWU6ICcnLFxuLy8gICBkYXRlU3R5bGU6IHVuZGVmaW5lZCxcbi8vICAgZGF0ZUNsYXNzTmFtZTogJycsXG4vLyAgIGlkOiBudWxsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlRmlsdGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9uczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uLy4uXCIpO1xudmFyIEVRID0gXCI9XCI7XG52YXIgTkUgPSBcIiE9XCI7XG52YXIgR1QgPSBcIj5cIjtcbnZhciBHRSA9IFwiPj1cIjtcbnZhciBMVCA9IFwiPFwiO1xudmFyIExFID0gXCI8PVwiO1xudmFyIGxlZ2FsQ29tcGFyYXRvcnMgPSBbRVEsIE5FLCBHVCwgR0UsIExULCBMRV07XG52YXIgTnVtYmVyRmlsdGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gTnVtYmVyRmlsdGVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOdW1iZXJGaWx0ZXIpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBOdW1iZXJGaWx0ZXIsIFtwcm9wc10pO1xuICAgIF90aGlzLmNvbXBhcmF0b3JzID0gcHJvcHMuY29tcGFyYXRvcnMgfHwgbGVnYWxDb21wYXJhdG9ycztcbiAgICBfdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICB2YXIgaXNTZWxlY3RlZCA9IHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMub3B0aW9ucyAmJiBpc1NlbGVjdGVkKSB7XG4gICAgICBpc1NlbGVjdGVkID0gcHJvcHMub3B0aW9ucy5pbmRleE9mKHByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIpID4gLTE7XG4gICAgfVxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZFxuICAgIH07XG4gICAgX3RoaXMub25DaGFuZ2VOdW1iZXIgPSBfdGhpcy5vbkNoYW5nZU51bWJlci5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZU51bWJlclNldCA9IF90aGlzLm9uQ2hhbmdlTnVtYmVyU2V0LmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uQ2hhbmdlQ29tcGFyYXRvciA9IF90aGlzLm9uQ2hhbmdlQ29tcGFyYXRvci5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKE51bWJlckZpbHRlciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhOdW1iZXJGaWx0ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wcy5jb2x1bW4sXG4gICAgICAgIG9uRmlsdGVyID0gX3RoaXMkcHJvcHMub25GaWx0ZXIsXG4gICAgICAgIGdldEZpbHRlciA9IF90aGlzJHByb3BzLmdldEZpbHRlcjtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlID09PSBcIlwiID8gRVEgOiB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgICB2YXIgbnVtYmVyID0gdGhpcy5udW1iZXJGaWx0ZXIudmFsdWU7XG4gICAgICBpZiAoY29tcGFyYXRvciAmJiBudW1iZXIpIHtcbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5OVU1CRVIsIHRydWUpKHtcbiAgICAgICAgICBudW1iZXI6IG51bWJlcixcbiAgICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgICAgaWYgKGdldEZpbHRlcikge1xuICAgICAgICBnZXRGaWx0ZXIoZnVuY3Rpb24gKGZpbHRlclZhbCkge1xuICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBmaWx0ZXJWYWwgIT09IFwiXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX3RoaXMyLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWUgPSBmaWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgICAgICBfdGhpczIubnVtYmVyRmlsdGVyLnZhbHVlID0gZmlsdGVyVmFsLm51bWJlcjtcbiAgICAgICAgICB2YXIgZm4gPSBmaWx0ZXJWYWwubnVtYmVyO1xuICAgICAgICAgIHZhciBmYyA9IGZpbHRlclZhbC5jb21wYXJhdG9yO1xuICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICAgICAgbnVtYmVyOiBmbixcbiAgICAgICAgICAgIGNvbXBhcmF0b3I6IGZjXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbkNoYW5nZU51bWJlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZU51bWJlcihlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGRlbGF5ID0gX3RoaXMkcHJvcHMyLmRlbGF5LFxuICAgICAgICBkZWxheSA9IF90aGlzJHByb3BzMiRkZWxheSA9PT0gdm9pZCAwID8gX18xLkZJTFRFUl9ERUxBWSA6IF90aGlzJHByb3BzMiRkZWxheSxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMyLmNvbHVtbixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczIub25GaWx0ZXI7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICAgIGlmIChjb21wYXJhdG9yID09PSBcIlwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB9XG4gICAgICB2YXIgdiA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbkZpbHRlcihjb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuTlVNQkVSKSh7XG4gICAgICAgICAgbnVtYmVyOiB2LFxuICAgICAgICAgIGNvbXBhcmF0b3I6IGNvbXBhcmF0b3JcbiAgICAgICAgfSk7XG4gICAgICB9LCBkZWxheSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ2hhbmdlTnVtYmVyU2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlTnVtYmVyU2V0KGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczMuY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzMy5vbkZpbHRlcjtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgICAgdmFyIHZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIlxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICAvLyBpZiAoY29tcGFyYXRvciA9PT0gJycpIHtcbiAgICAgIC8vICAgcmV0dXJuO1xuICAgICAgLy8gfVxuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICBudW1iZXI6IHZhbHVlLFxuICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25DaGFuZ2VDb21wYXJhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlQ29tcGFyYXRvcihlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHM0LmNvbHVtbixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczQub25GaWx0ZXI7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLm51bWJlckZpbHRlci52YWx1ZTtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAvLyBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAvLyAgIHJldHVybjtcbiAgICAgIC8vIH1cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5OVU1CRVIpKHtcbiAgICAgICAgbnVtYmVyOiB2YWx1ZSxcbiAgICAgICAgY29tcGFyYXRvcjogY29tcGFyYXRvclxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHRDb21wYXJhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlZmF1bHRDb21wYXJhdG9yKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzNSRkZWZhdWx0ViA9IF90aGlzJHByb3BzNS5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzNSRkZWZhdWx0ViA9PT0gdm9pZCAwID8ge1xuICAgICAgICAgIG51bWJlcjogdW5kZWZpbmVkLFxuICAgICAgICAgIGNvbXBhcmF0b3I6IFwiXCJcbiAgICAgICAgfSA6IF90aGlzJHByb3BzNSRkZWZhdWx0VixcbiAgICAgICAgX3RoaXMkcHJvcHM1JGZpbHRlclN0ID0gX3RoaXMkcHJvcHM1LmZpbHRlclN0YXRlLFxuICAgICAgICBmaWx0ZXJTdGF0ZSA9IF90aGlzJHByb3BzNSRmaWx0ZXJTdCA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wczUkZmlsdGVyU3Q7XG4gICAgICBpZiAoZmlsdGVyU3RhdGUgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHM2JGRlZmF1bHRWID0gX3RoaXMkcHJvcHM2LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHM2JGRlZmF1bHRWID09PSB2b2lkIDAgPyB7XG4gICAgICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tcGFyYXRvcjogXCJcIlxuICAgICAgICB9IDogX3RoaXMkcHJvcHM2JGRlZmF1bHRWLFxuICAgICAgICBfdGhpcyRwcm9wczYkZmlsdGVyU3QgPSBfdGhpcyRwcm9wczYuZmlsdGVyU3RhdGUsXG4gICAgICAgIGZpbHRlclN0YXRlID0gX3RoaXMkcHJvcHM2JGZpbHRlclN0ID09PSB2b2lkIDAgPyB7fSA6IF90aGlzJHByb3BzNiRmaWx0ZXJTdDtcbiAgICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlclN0YXRlLmZpbHRlclZhbC5udW1iZXI7XG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS5udW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5udW1iZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Q29tcGFyYXRvck9wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29tcGFyYXRvck9wdGlvbnMoKSB7XG4gICAgICB2YXIgb3B0aW9uVGFncyA9IFtdO1xuICAgICAgdmFyIF90aGlzJHByb3BzJHdpdGhvdXRFbSA9IHRoaXMucHJvcHMud2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbixcbiAgICAgICAgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbiA9IF90aGlzJHByb3BzJHdpdGhvdXRFbSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wcyR3aXRob3V0RW07XG4gICAgICBpZiAoIXdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24pIHtcbiAgICAgICAgb3B0aW9uVGFncy5wdXNoKHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgIGtleTogXCItMVwiXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb21wYXJhdG9ycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiBpLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbXBhcmF0b3JzW2ldXG4gICAgICAgIH0sIHRoaXMuY29tcGFyYXRvcnNbaV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25UYWdzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXROdW1iZXJPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE51bWJlck9wdGlvbnMoKSB7XG4gICAgICB2YXIgb3B0aW9uVGFncyA9IFtdO1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczcub3B0aW9ucyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHM3LmNvbHVtbixcbiAgICAgICAgX3RoaXMkcHJvcHM3JHdpdGhvdXRFID0gX3RoaXMkcHJvcHM3LndpdGhvdXRFbXB0eU51bWJlck9wdGlvbixcbiAgICAgICAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uID0gX3RoaXMkcHJvcHM3JHdpdGhvdXRFID09PSB2b2lkIDAgPyBmYWxzZSA6IF90aGlzJHByb3BzNyR3aXRob3V0RTtcbiAgICAgIGlmICghd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uKSB7XG4gICAgICAgIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICBrZXk6IFwiLTFcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIlxuICAgICAgICB9LCB0aGlzLnByb3BzLnBsYWNlaG9sZGVyIHx8IFwiU2VsZWN0IFwiLmNvbmNhdChjb2x1bW4udGV4dCwgXCIuLi5cIikpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiBpLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb25zW2ldXG4gICAgICAgIH0sIG9wdGlvbnNbaV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25UYWdzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhcHBseUZpbHRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhcHBseUZpbHRlcihmaWx0ZXJPYmopIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczguY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzOC5vbkZpbHRlcjtcbiAgICAgIHZhciBudW1iZXIgPSBmaWx0ZXJPYmoubnVtYmVyLFxuICAgICAgICBjb21wYXJhdG9yID0gZmlsdGVyT2JqLmNvbXBhcmF0b3I7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1NlbGVjdGVkOiBudW1iZXIgIT09IFwiXCJcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlID0gY29tcGFyYXRvcjtcbiAgICAgIHRoaXMubnVtYmVyRmlsdGVyLnZhbHVlID0gbnVtYmVyO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICBudW1iZXI6IG51bWJlcixcbiAgICAgICAgY29tcGFyYXRvcjogY29tcGFyYXRvclxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuRmlsdGVyZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczkuY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzOS5vbkZpbHRlcixcbiAgICAgICAgX3RoaXMkcHJvcHM5JGRlZmF1bHRWID0gX3RoaXMkcHJvcHM5LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHM5JGRlZmF1bHRWID09PSB2b2lkIDAgPyB7XG4gICAgICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tcGFyYXRvcjogXCJcIlxuICAgICAgICB9IDogX3RoaXMkcHJvcHM5JGRlZmF1bHRWO1xuICAgICAgdmFyIHZhbHVlID0gZGVmYXVsdFZhbHVlID8gZGVmYXVsdFZhbHVlLm51bWJlciA6IFwiXCI7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGRlZmF1bHRWYWx1ZSA/IGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yIDogXCJcIjtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2VsZWN0ZWQ6IHZhbHVlICE9PSBcIlwiXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZSA9IGNvbXBhcmF0b3I7XG4gICAgICB0aGlzLm51bWJlckZpbHRlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICBudW1iZXI6IHZhbHVlLFxuICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIGlzU2VsZWN0ZWQgPSB0aGlzLnN0YXRlLmlzU2VsZWN0ZWQ7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMwID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMwJGlkID0gX3RoaXMkcHJvcHMwLmlkLFxuICAgICAgICBpZCA9IF90aGlzJHByb3BzMCRpZCA9PT0gdm9pZCAwID8gbnVsbCA6IF90aGlzJHByb3BzMCRpZCxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMwLmNvbHVtbixcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMC5vcHRpb25zLFxuICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzMC5zdHlsZSxcbiAgICAgICAgX3RoaXMkcHJvcHMwJGNsYXNzTmFtID0gX3RoaXMkcHJvcHMwLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMwJGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMwJGNsYXNzTmFtLFxuICAgICAgICBudW1iZXJTdHlsZSA9IF90aGlzJHByb3BzMC5udW1iZXJTdHlsZSxcbiAgICAgICAgX3RoaXMkcHJvcHMwJG51bWJlckNsID0gX3RoaXMkcHJvcHMwLm51bWJlckNsYXNzTmFtZSxcbiAgICAgICAgbnVtYmVyQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMwJG51bWJlckNsID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMwJG51bWJlckNsLFxuICAgICAgICBjb21wYXJhdG9yU3R5bGUgPSBfdGhpcyRwcm9wczAuY29tcGFyYXRvclN0eWxlLFxuICAgICAgICBfdGhpcyRwcm9wczAkY29tcGFyYXQgPSBfdGhpcyRwcm9wczAuY29tcGFyYXRvckNsYXNzTmFtZSxcbiAgICAgICAgY29tcGFyYXRvckNsYXNzTmFtZSA9IF90aGlzJHByb3BzMCRjb21wYXJhdCA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMCRjb21wYXJhdCxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczAucGxhY2Vob2xkZXI7XG4gICAgICB2YXIgc2VsZWN0Q2xhc3MgPSBcIlxcbiAgICAgIHNlbGVjdC1maWx0ZXJcXG4gICAgICBudW1iZXItZmlsdGVyLWlucHV0XFxuICAgICAgZm9ybS1jb250cm9sXFxuICAgICAgXCIuY29uY2F0KG51bWJlckNsYXNzTmFtZSwgXCJcXG4gICAgICBcIikuY29uY2F0KCFpc1NlbGVjdGVkID8gXCJwbGFjZWhvbGRlci1zZWxlY3RlZFwiIDogXCJcIiwgXCJcXG4gICAgXCIpO1xuICAgICAgdmFyIGNvbXBhcmF0b3JFbG1JZCA9IFwibnVtYmVyLWZpbHRlci1jb21wYXJhdG9yLVwiLmNvbmNhdChjb2x1bW4uZGF0YUZpZWxkKS5jb25jYXQoaWQgPyBcIi1cIi5jb25jYXQoaWQpIDogXCJcIik7XG4gICAgICB2YXIgaW5wdXRFbG1JZCA9IFwibnVtYmVyLWZpbHRlci1jb2x1bW4tXCIuY29uY2F0KGNvbHVtbi5kYXRhRmllbGQpLmNvbmNhdChpZCA/IFwiLVwiLmNvbmNhdChpZCkgOiBcIlwiKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgICAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZTogXCJmaWx0ZXIgbnVtYmVyLWZpbHRlciBcIi5jb25jYXQoY2xhc3NOYW1lKSxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwibnVtYmVyLWZpbHRlclwiXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyLWxhYmVsXCIsXG4gICAgICAgIGh0bWxGb3I6IGNvbXBhcmF0b3JFbG1JZFxuICAgICAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwic3Itb25seVwiXG4gICAgICB9LCBcIkZpbHRlciBjb21wYXJhdG9yXCIpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yID0gbjtcbiAgICAgICAgfSxcbiAgICAgICAgc3R5bGU6IGNvbXBhcmF0b3JTdHlsZSxcbiAgICAgICAgaWQ6IGNvbXBhcmF0b3JFbG1JZCxcbiAgICAgICAgY2xhc3NOYW1lOiBcIm51bWJlci1maWx0ZXItY29tcGFyYXRvciBmb3JtLWNvbnRyb2wgXCIuY29uY2F0KGNvbXBhcmF0b3JDbGFzc05hbWUpLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZUNvbXBhcmF0b3IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5nZXREZWZhdWx0Q29tcGFyYXRvcigpLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwibnVtYmVyLWZpbHRlci1jb21wYXJhdG9yXCJcbiAgICAgIH0sIHRoaXMuZ2V0Q29tcGFyYXRvck9wdGlvbnMoKSkpLCBvcHRpb25zID8gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImZpbHRlci1sYWJlbFwiLFxuICAgICAgICBodG1sRm9yOiBpbnB1dEVsbUlkXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzci1vbmx5XCJcbiAgICAgIH0sIFwiU2VsZWN0IFwiLmNvbmNhdChjb2x1bW4udGV4dCkpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5udW1iZXJGaWx0ZXIgPSBuO1xuICAgICAgICB9LFxuICAgICAgICBpZDogaW5wdXRFbG1JZCxcbiAgICAgICAgc3R5bGU6IG51bWJlclN0eWxlLFxuICAgICAgICBjbGFzc05hbWU6IHNlbGVjdENsYXNzLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZU51bWJlclNldCxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLmdldERlZmF1bHRWYWx1ZSgpLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwibnVtYmVyLWZpbHRlci1zZWxlY3RcIlxuICAgICAgfSwgdGhpcy5nZXROdW1iZXJPcHRpb25zKCkpKSA6IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7XG4gICAgICAgIGh0bWxGb3I6IGlucHV0RWxtSWRcbiAgICAgIH0sIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInNyLW9ubHlcIlxuICAgICAgfSwgXCJFbnRlciBcIi5jb25jYXQoY29sdW1uLnRleHQpKSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5udW1iZXJGaWx0ZXIgPSBuO1xuICAgICAgICB9LFxuICAgICAgICBpZDogaW5wdXRFbG1JZCxcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgc3R5bGU6IG51bWJlclN0eWxlLFxuICAgICAgICBjbGFzc05hbWU6IFwibnVtYmVyLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wgXCIuY29uY2F0KG51bWJlckNsYXNzTmFtZSksXG4gICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciB8fCBcIkVudGVyIFwiLmNvbmNhdChjb2x1bW4udGV4dCwgXCIuLi5cIiksXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlTnVtYmVyLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCksXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJudW1iZXItZmlsdGVyLWlucHV0XCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTsgLy8gTnVtYmVyRmlsdGVyLnByb3BUeXBlcyA9IHtcbi8vICAgb25GaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZmlsdGVyU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zaGFwZSh7XG4vLyAgICAgbnVtYmVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4vLyAgICAgY29tcGFyYXRvcjogUHJvcFR5cGVzLm9uZU9mKFsuLi5sZWdhbENvbXBhcmF0b3JzLCBcIlwiXSksXG4vLyAgIH0pLFxuLy8gICBkZWxheTogUHJvcFR5cGVzLm51bWJlcixcbi8vICAgLyogZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOiAwICovXG4vLyAgIGNvbXBhcmF0b3JzOiAocHJvcHM6IGFueSwgcHJvcE5hbWU6IGFueSkgPT4ge1xuLy8gICAgIGlmICghcHJvcHNbcHJvcE5hbWVdKSB7XG4vLyAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHNbcHJvcE5hbWVdLmxlbmd0aDsgaSArPSAxKSB7XG4vLyAgICAgICBsZXQgY29tcGFyYXRvcklzVmFsaWQgPSBmYWxzZTtcbi8vICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVnYWxDb21wYXJhdG9ycy5sZW5ndGg7IGogKz0gMSkge1xuLy8gICAgICAgICBpZiAoXG4vLyAgICAgICAgICAgbGVnYWxDb21wYXJhdG9yc1tqXSA9PT0gcHJvcHNbcHJvcE5hbWVdW2ldIHx8XG4vLyAgICAgICAgICAgcHJvcHNbcHJvcE5hbWVdW2ldID09PSBcIlwiXG4vLyAgICAgICAgICkge1xuLy8gICAgICAgICAgIGNvbXBhcmF0b3JJc1ZhbGlkID0gdHJ1ZTtcbi8vICAgICAgICAgICBicmVhaztcbi8vICAgICAgICAgfVxuLy8gICAgICAgfVxuLy8gICAgICAgaWYgKCFjb21wYXJhdG9ySXNWYWxpZCkge1xuLy8gICAgICAgICByZXR1cm4gbmV3IEVycm9yKGBOdW1iZXIgY29tcGFyYXRvciBwcm92aWRlZCBpcyBub3Qgc3VwcG9ydGVkLlxuLy8gICAgICAgICAgIFVzZSBvbmx5ICR7bGVnYWxDb21wYXJhdG9yc31gKTtcbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgIH0sXG4vLyAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgY29tcGFyYXRvclN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjb21wYXJhdG9yQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBudW1iZXJTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgbnVtYmVyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBnZXRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLFxuLy8gfTtcbi8vIE51bWJlckZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGRlbGF5OiBGSUxURVJfREVMQVksXG4vLyAgIG9wdGlvbnM6IHVuZGVmaW5lZCxcbi8vICAgZGVmYXVsdFZhbHVlOiB7XG4vLyAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4vLyAgICAgY29tcGFyYXRvcjogXCJcIixcbi8vICAgfSxcbi8vICAgZmlsdGVyU3RhdGU6IHt9LFxuLy8gICB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uOiBmYWxzZSxcbi8vICAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uOiBmYWxzZSxcbi8vICAgY29tcGFyYXRvcnM6IGxlZ2FsQ29tcGFyYXRvcnMsXG4vLyAgIHBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4vLyAgIHN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vICAgY29tcGFyYXRvclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNvbXBhcmF0b3JDbGFzc05hbWU6IFwiXCIsXG4vLyAgIG51bWJlclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIG51bWJlckNsYXNzTmFtZTogXCJcIixcbi8vICAgaWQ6IG51bGwsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBOdW1iZXJGaWx0ZXI7IiwiLyogZXNsaW50IGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9uczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZJTFRFUl9ERUxBWSwgRklMVEVSX1RZUEVTLCBOdW1iZXJGaWx0ZXJQcm9wcyB9IGZyb20gXCIuLi8uLlwiO1xuXG5jb25zdCBFUSA9IFwiPVwiO1xuY29uc3QgTkUgPSBcIiE9XCI7XG5jb25zdCBHVCA9IFwiPlwiO1xuY29uc3QgR0UgPSBcIj49XCI7XG5jb25zdCBMVCA9IFwiPFwiO1xuY29uc3QgTEUgPSBcIjw9XCI7XG5cbmNvbnN0IGxlZ2FsQ29tcGFyYXRvcnMgPSBbRVEsIE5FLCBHVCwgR0UsIExULCBMRV07XG5cbmludGVyZmFjZSBOdW1iZXJGaWx0ZXJTdGF0ZSB7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5cbmNsYXNzIE51bWJlckZpbHRlciBleHRlbmRzIENvbXBvbmVudDxOdW1iZXJGaWx0ZXJQcm9wcywgTnVtYmVyRmlsdGVyU3RhdGU+IHtcbiAgY29tcGFyYXRvcnM6IGFueVtdO1xuICBudW1iZXJGaWx0ZXI6IGFueTtcbiAgbnVtYmVyRmlsdGVyQ29tcGFyYXRvcjogYW55O1xuICB0aW1lb3V0OiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IE51bWJlckZpbHRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29tcGFyYXRvcnMgPSBwcm9wcy5jb21wYXJhdG9ycyB8fCBsZWdhbENvbXBhcmF0b3JzO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgbGV0IGlzU2VsZWN0ZWQgPVxuICAgICAgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMub3B0aW9ucyAmJiBpc1NlbGVjdGVkKSB7XG4gICAgICBpc1NlbGVjdGVkID0gcHJvcHMub3B0aW9ucy5pbmRleE9mKHByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIpID4gLTE7XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSB7IGlzU2VsZWN0ZWQgfTtcbiAgICB0aGlzLm9uQ2hhbmdlTnVtYmVyID0gdGhpcy5vbkNoYW5nZU51bWJlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25DaGFuZ2VOdW1iZXJTZXQgPSB0aGlzLm9uQ2hhbmdlTnVtYmVyU2V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkNoYW5nZUNvbXBhcmF0b3IgPSB0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBjb2x1bW4sIG9uRmlsdGVyLCBnZXRGaWx0ZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY29tcGFyYXRvciA9XG4gICAgICB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWUgPT09IFwiXCJcbiAgICAgICAgPyBFUVxuICAgICAgICA6IHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICBjb25zdCBudW1iZXIgPSB0aGlzLm51bWJlckZpbHRlci52YWx1ZTtcbiAgICBpZiAoY29tcGFyYXRvciAmJiBudW1iZXIpIHtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLk5VTUJFUiwgdHJ1ZSkoeyBudW1iZXIsIGNvbXBhcmF0b3IgfSk7XG4gICAgfVxuXG4gICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgIGdldEZpbHRlcigoZmlsdGVyVmFsOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiBmaWx0ZXJWYWwgIT09IFwiXCIgfSkpO1xuICAgICAgICB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWUgPSBmaWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgICAgdGhpcy5udW1iZXJGaWx0ZXIudmFsdWUgPSBmaWx0ZXJWYWwubnVtYmVyO1xuXG4gICAgICAgIGNvbnN0IGZuID0gZmlsdGVyVmFsLm51bWJlcjtcbiAgICAgICAgY29uc3QgZmMgPSBmaWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLk5VTUJFUikoeyBudW1iZXI6IGZuLCBjb21wYXJhdG9yOiBmYyB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgb25DaGFuZ2VOdW1iZXIoZTogYW55KSB7XG4gICAgY29uc3QgeyBkZWxheSA9IEZJTFRFUl9ERUxBWSwgY29sdW1uLCBvbkZpbHRlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb21wYXJhdG9yID0gdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgIGlmIChjb21wYXJhdG9yID09PSBcIlwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgICBjb25zdCB2ID0gZS50YXJnZXQudmFsdWU7XG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBUT0RPXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBvbkZpbHRlcihjb2x1bW4sIEZJTFRFUl9UWVBFUy5OVU1CRVIpKHsgbnVtYmVyOiB2LCBjb21wYXJhdG9yIH0pO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxuXG4gIG9uQ2hhbmdlTnVtYmVyU2V0KGU6IGFueSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCBvbkZpbHRlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb21wYXJhdG9yID0gdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGUudGFyZ2V0O1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgaXNTZWxlY3RlZDogdmFsdWUgIT09IFwiXCIgfSkpO1xuICAgIC8vIGlmIChjb21wYXJhdG9yID09PSAnJykge1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICAvLyBUT0RPXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLk5VTUJFUikoeyBudW1iZXI6IHZhbHVlLCBjb21wYXJhdG9yIH0pO1xuICB9XG5cbiAgb25DaGFuZ2VDb21wYXJhdG9yKGU6IGFueSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCBvbkZpbHRlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubnVtYmVyRmlsdGVyLnZhbHVlO1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAvLyBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuTlVNQkVSKSh7IG51bWJlcjogdmFsdWUsIGNvbXBhcmF0b3IgfSk7XG4gIH1cblxuICBnZXREZWZhdWx0Q29tcGFyYXRvcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSB7IG51bWJlcjogdW5kZWZpbmVkLCBjb21wYXJhdG9yOiBcIlwiIH0sXG4gICAgICBmaWx0ZXJTdGF0ZSA9IHt9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwpIHtcbiAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUuY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldERlZmF1bHRWYWx1ZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSB7IG51bWJlcjogdW5kZWZpbmVkLCBjb21wYXJhdG9yOiBcIlwiIH0sXG4gICAgICBmaWx0ZXJTdGF0ZSA9IHt9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwpIHtcbiAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwubnVtYmVyO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS5udW1iZXIpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUubnVtYmVyO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldENvbXBhcmF0b3JPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvblRhZ3MgPSBbXTtcbiAgICBjb25zdCB7IHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24gPSBmYWxzZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoIXdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24pIHtcbiAgICAgIG9wdGlvblRhZ3MucHVzaCg8b3B0aW9uIGtleT1cIi0xXCIgLz4pO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29tcGFyYXRvcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIG9wdGlvblRhZ3MucHVzaChcbiAgICAgICAgPG9wdGlvbiBrZXk9e2l9IHZhbHVlPXt0aGlzLmNvbXBhcmF0b3JzW2ldfT5cbiAgICAgICAgICB7dGhpcy5jb21wYXJhdG9yc1tpXX1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgfVxuXG4gIGdldE51bWJlck9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9uVGFncyA9IFtdO1xuICAgIGNvbnN0IHsgb3B0aW9ucywgY29sdW1uLCB3aXRob3V0RW1wdHlOdW1iZXJPcHRpb24gPSBmYWxzZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoIXdpdGhvdXRFbXB0eU51bWJlck9wdGlvbikge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT1cIi0xXCIgdmFsdWU9XCJcIj5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5wbGFjZWhvbGRlciB8fCBgU2VsZWN0ICR7Y29sdW1uLnRleHR9Li4uYH1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IChvcHRpb25zIGFzIG51bWJlcltdKS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT17aX0gdmFsdWU9eyhvcHRpb25zIGFzIG51bWJlcltdKVtpXX0+XG4gICAgICAgICAgeyhvcHRpb25zIGFzIG51bWJlcltdKVtpXX1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKGZpbHRlck9iajogYW55KSB7XG4gICAgY29uc3QgeyBjb2x1bW4sIG9uRmlsdGVyIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgbnVtYmVyLCBjb21wYXJhdG9yIH0gPSBmaWx0ZXJPYmo7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiBudW1iZXIgIT09IFwiXCIgfSkpO1xuICAgIHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZSA9IGNvbXBhcmF0b3I7XG4gICAgdGhpcy5udW1iZXJGaWx0ZXIudmFsdWUgPSBudW1iZXI7XG4gICAgLy8gVE9ET1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvbkZpbHRlcihjb2x1bW4sIEZJTFRFUl9UWVBFUy5OVU1CRVIpKHsgbnVtYmVyLCBjb21wYXJhdG9yIH0pO1xuICB9XG5cbiAgY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb2x1bW4sXG4gICAgICBvbkZpbHRlcixcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHsgbnVtYmVyOiB1bmRlZmluZWQsIGNvbXBhcmF0b3I6IFwiXCIgfSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSA/IGRlZmF1bHRWYWx1ZS5udW1iZXIgOiBcIlwiO1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSBkZWZhdWx0VmFsdWUgPyBkZWZhdWx0VmFsdWUuY29tcGFyYXRvciA6IFwiXCI7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIiB9KSk7XG4gICAgdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlID0gY29tcGFyYXRvcjtcbiAgICB0aGlzLm51bWJlckZpbHRlci52YWx1ZSA9IHZhbHVlO1xuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuTlVNQkVSKSh7IG51bWJlcjogdmFsdWUsIGNvbXBhcmF0b3IgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpc1NlbGVjdGVkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHtcbiAgICAgIGlkID0gbnVsbCxcbiAgICAgIGNvbHVtbixcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzdHlsZSxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBudW1iZXJTdHlsZSxcbiAgICAgIG51bWJlckNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBjb21wYXJhdG9yU3R5bGUsXG4gICAgICBjb21wYXJhdG9yQ2xhc3NOYW1lID0gXCJcIixcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHNlbGVjdENsYXNzID0gYFxuICAgICAgc2VsZWN0LWZpbHRlclxuICAgICAgbnVtYmVyLWZpbHRlci1pbnB1dFxuICAgICAgZm9ybS1jb250cm9sXG4gICAgICAke251bWJlckNsYXNzTmFtZX1cbiAgICAgICR7IWlzU2VsZWN0ZWQgPyBcInBsYWNlaG9sZGVyLXNlbGVjdGVkXCIgOiBcIlwifVxuICAgIGA7XG5cbiAgICBjb25zdCBjb21wYXJhdG9yRWxtSWQgPSBgbnVtYmVyLWZpbHRlci1jb21wYXJhdG9yLSR7Y29sdW1uLmRhdGFGaWVsZH0ke2lkID8gYC0ke2lkfWAgOiBcIlwiXG4gICAgICB9YDtcbiAgICBjb25zdCBpbnB1dEVsbUlkID0gYG51bWJlci1maWx0ZXItY29sdW1uLSR7Y29sdW1uLmRhdGFGaWVsZH0ke2lkID8gYC0ke2lkfWAgOiBcIlwiXG4gICAgICB9YDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICBjbGFzc05hbWU9e2BmaWx0ZXIgbnVtYmVyLWZpbHRlciAke2NsYXNzTmFtZX1gfVxuICAgICAgICBzdHlsZT17c3R5bGUgYXMgYW55fVxuICAgICAgICBkYXRhLXRlc3RpZD1cIm51bWJlci1maWx0ZXJcIlxuICAgICAgPlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZmlsdGVyLWxhYmVsXCIgaHRtbEZvcj17Y29tcGFyYXRvckVsbUlkfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+RmlsdGVyIGNvbXBhcmF0b3I8L3NwYW4+XG4gICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgcmVmPXsobikgPT4geyB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IgPSBuOyB9fVxuICAgICAgICAgICAgc3R5bGU9e2NvbXBhcmF0b3JTdHlsZSBhcyBhbnl9XG4gICAgICAgICAgICBpZD17Y29tcGFyYXRvckVsbUlkfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgbnVtYmVyLWZpbHRlci1jb21wYXJhdG9yIGZvcm0tY29udHJvbCAke2NvbXBhcmF0b3JDbGFzc05hbWV9YH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvcn1cbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5nZXREZWZhdWx0Q29tcGFyYXRvcigpfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJudW1iZXItZmlsdGVyLWNvbXBhcmF0b3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLmdldENvbXBhcmF0b3JPcHRpb25zKCl9XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIHtvcHRpb25zID8gKFxuICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmaWx0ZXItbGFiZWxcIiBodG1sRm9yPXtpbnB1dEVsbUlkfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj57YFNlbGVjdCAke2NvbHVtbi50ZXh0fWB9PC9zcGFuPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICByZWY9eyhuKSA9PiB7IHRoaXMubnVtYmVyRmlsdGVyID0gbjsgfX1cbiAgICAgICAgICAgICAgaWQ9e2lucHV0RWxtSWR9XG4gICAgICAgICAgICAgIHN0eWxlPXtudW1iZXJTdHlsZSBhcyBhbnl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c2VsZWN0Q2xhc3N9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlTnVtYmVyU2V0fVxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdFZhbHVlKCl9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibnVtYmVyLWZpbHRlci1zZWxlY3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dGhpcy5nZXROdW1iZXJPcHRpb25zKCl9XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxsYWJlbCBodG1sRm9yPXtpbnB1dEVsbUlkfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj57YEVudGVyICR7Y29sdW1uLnRleHR9YH08L3NwYW4+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgcmVmPXsobikgPT4geyB0aGlzLm51bWJlckZpbHRlciA9IG47IH19XG4gICAgICAgICAgICAgIGlkPXtpbnB1dEVsbUlkfVxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgc3R5bGU9e251bWJlclN0eWxlIGFzIGFueX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgbnVtYmVyLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wgJHtudW1iZXJDbGFzc05hbWV9YH1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyIHx8IGBFbnRlciAke2NvbHVtbi50ZXh0fS4uLmB9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlTnVtYmVyfVxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdFZhbHVlKCl9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibnVtYmVyLWZpbHRlci1pbnB1dFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbi8vIE51bWJlckZpbHRlci5wcm9wVHlwZXMgPSB7XG4vLyAgIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGZpbHRlclN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubnVtYmVyKSxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuc2hhcGUoe1xuLy8gICAgIG51bWJlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuLy8gICAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihbLi4ubGVnYWxDb21wYXJhdG9ycywgXCJcIl0pLFxuLy8gICB9KSxcbi8vICAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4vLyAgIC8qIGVzbGludCBjb25zaXN0ZW50LXJldHVybjogMCAqL1xuLy8gICBjb21wYXJhdG9yczogKHByb3BzOiBhbnksIHByb3BOYW1lOiBhbnkpID0+IHtcbi8vICAgICBpZiAoIXByb3BzW3Byb3BOYW1lXSkge1xuLy8gICAgICAgcmV0dXJuO1xuLy8gICAgIH1cbi8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzW3Byb3BOYW1lXS5sZW5ndGg7IGkgKz0gMSkge1xuLy8gICAgICAgbGV0IGNvbXBhcmF0b3JJc1ZhbGlkID0gZmFsc2U7XG4vLyAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlZ2FsQ29tcGFyYXRvcnMubGVuZ3RoOyBqICs9IDEpIHtcbi8vICAgICAgICAgaWYgKFxuLy8gICAgICAgICAgIGxlZ2FsQ29tcGFyYXRvcnNbal0gPT09IHByb3BzW3Byb3BOYW1lXVtpXSB8fFxuLy8gICAgICAgICAgIHByb3BzW3Byb3BOYW1lXVtpXSA9PT0gXCJcIlxuLy8gICAgICAgICApIHtcbi8vICAgICAgICAgICBjb21wYXJhdG9ySXNWYWxpZCA9IHRydWU7XG4vLyAgICAgICAgICAgYnJlYWs7XG4vLyAgICAgICAgIH1cbi8vICAgICAgIH1cbi8vICAgICAgIGlmICghY29tcGFyYXRvcklzVmFsaWQpIHtcbi8vICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihgTnVtYmVyIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZC5cbi8vICAgICAgICAgICBVc2Ugb25seSAke2xlZ2FsQ29tcGFyYXRvcnN9YCk7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICB9LFxuLy8gICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIHdpdGhvdXRFbXB0eU51bWJlck9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGNvbXBhcmF0b3JTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY29tcGFyYXRvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgbnVtYmVyU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIG51bWJlckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG5cbi8vIE51bWJlckZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGRlbGF5OiBGSUxURVJfREVMQVksXG4vLyAgIG9wdGlvbnM6IHVuZGVmaW5lZCxcbi8vICAgZGVmYXVsdFZhbHVlOiB7XG4vLyAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4vLyAgICAgY29tcGFyYXRvcjogXCJcIixcbi8vICAgfSxcbi8vICAgZmlsdGVyU3RhdGU6IHt9LFxuLy8gICB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uOiBmYWxzZSxcbi8vICAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uOiBmYWxzZSxcbi8vICAgY29tcGFyYXRvcnM6IGxlZ2FsQ29tcGFyYXRvcnMsXG4vLyAgIHBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4vLyAgIHN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vICAgY29tcGFyYXRvclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNvbXBhcmF0b3JDbGFzc05hbWU6IFwiXCIsXG4vLyAgIG51bWJlclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIG51bWJlckNsYXNzTmFtZTogXCJcIixcbi8vICAgaWQ6IG51bGwsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBOdW1iZXJGaWx0ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjg0KTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fIiwiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX2RlZmluZVByb3BlcnRpZXMiLCJlIiwiciIsInQiLCJsZW5ndGgiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiaSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl90b1ByaW1pdGl2ZSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJSZWZlcmVuY2VFcnJvciIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiYXBwbHkiLCJCb29sZWFuIiwidmFsdWVPZiIsInNldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJiaW5kIiwiX19wcm90b19fIiwiX3NldFByb3RvdHlwZU9mIiwiX19pbXBvcnREZWZhdWx0IiwibW9kIiwiX19lc01vZHVsZSIsInZhbHVlIiwicHJvcF90eXBlc18xIiwicmVhY3RfMSIsIl9fMSIsImZpbHRlcl8xIiwiXyIsImlzUmVtb3RlRmlsdGVyaW5nIiwiaGFuZGxlRmlsdGVyQ2hhbmdlIiwiRmlsdGVyQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJGaWx0ZXJQcm92aWRlciIsIl9yZWFjdF8xJGRlZmF1bHQkQ29tcCIsInByb3BzIiwiX3RoaXMiLCJhIiwibiIsIl9jbGFzc0NhbGxDaGVjayIsInRoaXMiLCJjdXJyRmlsdGVycyIsImNsZWFyRmlsdGVycyIsIm9uRmlsdGVyIiwiZG9GaWx0ZXIiLCJvbkV4dGVybmFsRmlsdGVyIiwiZGF0YSIsImlzRW1pdERhdGFDaGFuZ2UiLCJjcmVhdGUiLCJfaW5oZXJpdHMiLCJrZXlzIiwiY29sdW1uIiwiZmlsdGVyVHlwZSIsIl90aGlzMiIsImluaXRpYWxpemUiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJmaWx0ZXJWYWwiLCJhc3NpZ24iLCJkYXRhRmllbGQiLCJmaWx0ZXIiLCJpc0RlZmluZWQiLCJfZmlsdGVyJHByb3BzIiwiX2ZpbHRlciRwcm9wcyRjb21wYXJhIiwiY29tcGFyYXRvciIsIkZJTFRFUl9UWVBFUyIsIlNFTEVDVCIsIkVRIiwiTElLRSIsIl9maWx0ZXIkcHJvcHMkY2FzZVNlbiIsImNhc2VTZW5zaXRpdmUiLCJjbGVhciIsImZvcmNlVXBkYXRlIiwiX3RoaXMzIiwibmV4dFByb3BzIiwibmV4dFN0YXRlIiwibmV4dENvbnRleHQiLCJpc0VxdWFsIiwiaWdub3JlRW1pdERhdGFDaGFuZ2UiLCJkYXRhQ2hhbmdlTGlzdGVuZXIiLCJjb2x1bW5zIiwicmVzdWx0IiwiZmlsdGVycyIsImFmdGVyRmlsdGVyIiwiZW1pdCIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciIsImNoaWxkcmVuIiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwiYXJyYXkiLCJpc1JlcXVpcmVkIiwib2JqZWN0IiwiQ29uc3VtZXIiLCJfZXhjbHVkZWQiLCJvd25LZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfb3duS2V5cyIsIl9fY3JlYXRlQmluZGluZyIsIm0iLCJrIiwiazIiLCJkZXNjIiwiZ2V0IiwiX19zZXRNb2R1bGVEZWZhdWx0IiwidiIsIl9faW1wb3J0U3RhciIsImdldE93blByb3BlcnR5TmFtZXMiLCJhciIsImhhc093blByb3BlcnR5IiwiU2VsZWN0RmlsdGVyIiwiX3JlYWN0XzEkQ29tcG9uZW50Iiwib3B0aW9ucyIsImdldE9wdGlvbnMiLCJpc1NlbGVjdGVkIiwiZ2V0RGVmYXVsdFZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwiX3JlZiIsImxhYmVsIiwibWFwIiwiX3JlZjIiLCJzdGF0ZSIsIl90aGlzJHByb3BzIiwiZ2V0RmlsdGVyIiwic2VsZWN0SW5wdXQiLCJzZXRTdGF0ZSIsInByZXZQcm9wcyIsIm5lZWRGaWx0ZXIiLCJfdGhpcyRwcm9wczIiLCJkZWZhdWx0VmFsdWUiLCJuZXh0T3B0aW9ucyIsImN1cnJPcHRzIiwicHJldk9wdHMiLCJfaSIsIm9wdGlvbnNFcXVhbHMiLCJfdGhpcyRwcm9wczMiLCJmaWx0ZXJTdGF0ZSIsInRhcmdldCIsIm9wdGlvblRhZ3MiLCJfdGhpcyRwcm9wczQiLCJwbGFjZWhvbGRlciIsIndpdGhvdXRFbXB0eU9wdGlvbiIsImNvbmNhdCIsInRleHQiLCJfcmVmMyIsIl90aGlzJHByb3BzNSIsImlkIiwic3R5bGUiLCJjbGFzc05hbWUiLCJyZXN0IiwiaW5kZXhPZiIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJzZWxlY3RDbGFzcyIsImVsbUlkIiwiaHRtbEZvciIsInJlZiIsIm9uQ2hhbmdlIiwib25DbGljayIsInN0b3BQcm9wYWdhdGlvbiIsInJlbmRlck9wdGlvbnMiLCJmaWx0ZXJGYWN0b3J5IiwiZmlsdGVyQnlBcnJheSIsImZpbHRlckJ5RGF0ZSIsImZpbHRlckJ5TnVtYmVyIiwiZmlsdGVyQnlUZXh0IiwiY3VzdG9tRmlsdGVyVmFsdWUiLCJfcmVmJGZpbHRlclZhbCIsInVzZXJJbnB1dCIsIl9yZWYkY29tcGFyYXRvciIsInRvU3RyaW5nIiwicm93IiwiY2VsbCIsImNlbGxTdHIiLCJpbmNsdWRlcyIsInRvTG9jYWxlVXBwZXJDYXNlIiwiX3JlZjIkZmlsdGVyVmFsIiwibnVtYmVyIiwiR1QiLCJHRSIsIkxUIiwiTEUiLCJORSIsImNvbnNvbGUiLCJlcnJvciIsIl9yZWYzJGZpbHRlclZhbCIsImRhdGUiLCJmaWx0ZXJEYXRlIiwiZ2V0VVRDRGF0ZSIsImZpbHRlck1vbnRoIiwiZ2V0VVRDTW9udGgiLCJmaWx0ZXJZZWFyIiwiZ2V0VVRDRnVsbFllYXIiLCJ2YWxpZCIsIkRhdGUiLCJ0YXJnZXREYXRlIiwidGFyZ2V0TW9udGgiLCJ0YXJnZXRZZWFyIiwiX3JlZjQiLCJyZWZpbmVkRmlsdGVyVmFsIiwieCIsInNvbWUiLCJpdGVtIiwiTVVMVElTRUxFQ1QiLCJOVU1CRVIiLCJEQVRFIiwiVEVYVCIsImZpbHRlckZuIiwiY3VycmVudFJlc3VsdCIsImZpbHRlclZhbHVlIiwiY3VzdG9tRmlsdGVyIiwiZmlsdGVyT2JqIiwiZ2V0U2VsZWN0aW9ucyIsImNvbnRhaW5lciIsInNlbGVjdGVkT3B0aW9ucyIsImZyb20iLCJzZWxlY3Rpb25zIiwidG90YWxMZW4iLCJvcHRpb24iLCJzZWxlY3RlZCIsIk11bHRpU2VsZWN0RmlsdGVyIiwic3VwZXIiLCJhcHBseUZpbHRlciIsImNvbXBvbmVudERpZE1vdW50IiwiY29tcG9uZW50RGlkVXBkYXRlIiwiY2xlYW5GaWx0ZXJlZCIsInJlbmRlciIsIm11bHRpcGxlIiwiZGF0ZUZpbHRlciIsIm51bWJlckZpbHRlciIsIm11bHRpU2VsZWN0RmlsdGVyIiwic2VsZWN0RmlsdGVyIiwidGV4dEZpbHRlciIsIkNvbXBhcmF0b3JOdW1iZXIiLCJGSUxURVJfREVMQVkiLCJkYXRlXzEiLCJtdWx0aXNlbGVjdF8xIiwibnVtYmVyXzEiLCJzZWxlY3RfMSIsInRleHRfMSIsImNvbnRleHRfMSIsIkZpbHRlciIsIlRleHRGaWx0ZXIiLCJoYW5kbGVDbGljayIsInRpbWVvdXQiLCJpbnB1dCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiY2xlYW5UaW1lciIsIm5leHRWYWx1ZSIsInNldFRpbWVvdXQiLCJkZWxheSIsImNsZWFyVGltZW91dCIsImZpbHRlclRleHQiLCJ0eXBlIiwiX3Byb3BzJGRlZmF1bHRWYWx1ZSIsIl90aGlzJHByb3BzJGZpbHRlclN0YSIsIl90aGlzJHByb3BzJGRlZmF1bHRWYSIsIl90aGlzJHByb3BzMiR3aXRob3V0RSIsIl90aGlzJHByb3BzMiRkZWZhdWx0ViIsIl90aGlzJHByb3BzMyRpZCIsIl90aGlzJHByb3BzMyRjbGFzc05hbSIsIl90aGlzJHByb3BzMyRjb21wYXJhdCIsImdldEZpbHRlcmVkIiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwiX3RoaXM0IiwiX3RoaXMkcHJvcHMkZGVmYXVsdFZhMiIsIl90aGlzNSIsIl90aGlzJHByb3BzMiRpZCIsIl90aGlzJHByb3BzMiRjb2x1bW4iLCJsZWdhbENvbXBhcmF0b3JzIiwiZGF0ZVBhcnNlciIsImQiLCJzbGljZSIsIkRhdGVGaWx0ZXIiLCJjb21wYXJhdG9ycyIsIm9uQ2hhbmdlRGF0ZSIsIm9uQ2hhbmdlQ29tcGFyYXRvciIsImRhdGVGaWx0ZXJDb21wYXJhdG9yIiwiaW5wdXREYXRlIiwibnVsbGFibGVGaWx0ZXJWYWwiLCJfdGhpcyRwcm9wcyR3aXRob3V0RW0iLCJ3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uIiwiX3RoaXMkcHJvcHMyJGZpbHRlclN0IiwiaXNJbml0aWFsIiwiX3RoaXMkcHJvcHMzJGRlbGF5IiwiZXhlY3V0ZSIsIl90aGlzJHByb3BzNCRpZCIsIl90aGlzJHByb3BzNCRjb2x1bW4iLCJjb21wYXJhdG9yU3R5bGUiLCJkYXRlU3R5bGUiLCJfdGhpcyRwcm9wczQkY2xhc3NOYW0iLCJfdGhpcyRwcm9wczQkY29tcGFyYXQiLCJjb21wYXJhdG9yQ2xhc3NOYW1lIiwiX3RoaXMkcHJvcHM0JGRhdGVDbGFzIiwiZGF0ZUNsYXNzTmFtZSIsImNvbXBhcmF0b3JFbG1JZCIsImlucHV0RWxtSWQiLCJnZXREZWZhdWx0Q29tcGFyYXRvciIsImdldENvbXBhcmF0b3JPcHRpb25zIiwiZ2V0RGVmYXVsdERhdGUiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsImVtcHR5RnVuY3Rpb24iLCJlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0IiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJzaGltIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwibG9jYXRpb24iLCJwcm9wRnVsbE5hbWUiLCJzZWNyZXQiLCJlcnIiLCJFcnJvciIsIm5hbWUiLCJnZXRTaGltIiwiUmVhY3RQcm9wVHlwZXMiLCJiaWdpbnQiLCJib29sIiwiZnVuYyIsInN0cmluZyIsInN5bWJvbCIsImFueSIsImFycmF5T2YiLCJlbGVtZW50IiwiZWxlbWVudFR5cGUiLCJpbnN0YW5jZU9mIiwibm9kZSIsIm9iamVjdE9mIiwib25lT2YiLCJvbmVPZlR5cGUiLCJzaGFwZSIsImV4YWN0IiwiY2hlY2tQcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJOdW1iZXJGaWx0ZXIiLCJvbkNoYW5nZU51bWJlciIsIm9uQ2hhbmdlTnVtYmVyU2V0IiwibnVtYmVyRmlsdGVyQ29tcGFyYXRvciIsImZuIiwiZmMiLCJfdGhpcyRwcm9wczIkZGVsYXkiLCJfdGhpcyRwcm9wczUkZGVmYXVsdFYiLCJfdGhpcyRwcm9wczUkZmlsdGVyU3QiLCJfdGhpcyRwcm9wczYiLCJfdGhpcyRwcm9wczYkZGVmYXVsdFYiLCJfdGhpcyRwcm9wczYkZmlsdGVyU3QiLCJfdGhpcyRwcm9wczciLCJfdGhpcyRwcm9wczckd2l0aG91dEUiLCJ3aXRob3V0RW1wdHlOdW1iZXJPcHRpb24iLCJfdGhpcyRwcm9wczgiLCJfdGhpcyRwcm9wczkiLCJfdGhpcyRwcm9wczkkZGVmYXVsdFYiLCJfdGhpcyRwcm9wczAiLCJfdGhpcyRwcm9wczAkaWQiLCJfdGhpcyRwcm9wczAkY2xhc3NOYW0iLCJudW1iZXJTdHlsZSIsIl90aGlzJHByb3BzMCRudW1iZXJDbCIsIm51bWJlckNsYXNzTmFtZSIsIl90aGlzJHByb3BzMCRjb21wYXJhdCIsImdldE51bWJlck9wdGlvbnMiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
|