react-bootstrap-table-ng-editor 4.18.0 → 4.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/react-bootstrap-table-ng-editor.js +2 -2
- package/dist/react-bootstrap-table-ng-editor.min.js +2 -2
- package/lib/index.d.ts +0 -3
- package/lib/src/checkbox-editor.js +1 -1
- package/lib/src/checkbox-editor.js.map +1 -1
- package/lib/src/context.d.ts +0 -3
- package/lib/src/date-editor.js +1 -1
- package/lib/src/date-editor.js.map +1 -1
- package/lib/src/dropdown-editor.js +1 -1
- package/lib/src/dropdown-editor.js.map +1 -1
- package/lib/src/editing-cell.d.ts +0 -3
- package/lib/src/text-editor.js +1 -1
- package/lib/src/text-editor.js.map +1 -1
- package/lib/src/textarea-editor.js +1 -1
- package/lib/src/textarea-editor.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! For license information please see react-bootstrap-table-ng-editor.min.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrapTableNgEditor=t(require("react")):e.ReactBootstrapTableNgEditor=t(e.React)}(self,e=>{return t={33(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(442)),i=r(564),u=r(511);t.default=(e,t)=>{function r(r){return o.default.createElement(u.Consumer,null,n=>((r,n)=>{const u=r.value,a=!(n.nonEditableRows.length>0&&n.nonEditableRows.indexOf(u)>-1),l={};return t&&n.mode===i.DBCLICK_TO_CELL_EDIT&&(l.DELAY_FOR_DBCLICK=i.DELAY_FOR_DBCLICK),o.default.createElement(e,{...r,...l,editingRowIdx:n.ridx,editingColIdx:n.cidx,isEditable:a,atstart:n.atstart,clickToEdit:n.mode===i.CLICK_TO_CELL_EDIT,dbclickToEdit:n.mode===i.DBCLICK_TO_CELL_EDIT})})(r,n))}return r.displayName="WithCellEditingRowConsumer",r}},88(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(556)),i=n(r(442)),u=function(e){var t=e.invalidMessage;return i.default.createElement("div",{className:"alert alert-danger in",role:"alert","data-testid":"editor-indicator"},i.default.createElement("strong",null,t))};u.propTypes={invalidMessage:o.default.string},t.default=u},98(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","autoSelectText","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=h(r(442)),g=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),c(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount,o=e.autoSelectText,i=void 0!==o&&o;this.text.value=r,this.text.focus(),i&&this.text.select(),n&&n()}},{key:"getValue",value:function(){return this.text.value}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,a=(t.autoSelectText,t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),l=(0,m.default)(n,"form-control editor edit-text");return O.default.createElement("input",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({ref:function(t){return e.text=t},type:"text",className:l},a))}}],n&&a(r.prototype,n),l&&a(r,l),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,l}(O.Component);t.default=g},121(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e);let t=e.options??[];e.getOptions&&(t=e.getOptions(this.setOptions.bind(this),{row:e.row,column:e.column})||[]),this.state={options:t}}componentDidMount(){const{defaultValue:e="",didMount:t}=this.props;this.select.value=e,this.select.focus(),t&&t()}setOptions(e){this.setState({options:e})}getValue(){return this.select.value}render(){const{defaultValue:e="",didMount:t,getOptions:r,className:n="",onUpdate:o,...i}=this.props,u={...i,className:(0,l.default)(n,"form-control editor edit-select")};return c.default.createElement("select",{...u,ref:e=>this.select=e,defaultValue:e},this.state.options.map(({label:e,value:t})=>c.default.createElement("option",{key:t,value:t},e)))}}t.default=s},137(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","autoSelectText"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=c(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,c(n.key),n)}}function c(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function s(e,t,r){return t=d(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(t,r||[],d(e).constructor):t.apply(e,r))}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(f=function(){return!!e})()}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function p(e,t){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},p(e,t)}var b,y=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},h=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},v=(b=function(e){return b=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},b(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=b(e),n=0;n<r.length;n++)"default"!==r[n]&&y(t,e,r[n]);return h(t,e),t}),m=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var O=m(r(942)),g=v(r(442)),_=function(e){function t(e){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=s(this,t,[e])).handleKeyDown=r.handleKeyDown.bind(r),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&p(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?null:t,n=e.didMount,o=e.autoSelectText,i=void 0!==o&&o;this.text.value=r,this.text.focus(),i&&this.text.select(),n&&n()}},{key:"getValue",value:function(){return this.text.value}},{key:"handleKeyDown",value:function(e){(13!==e.keyCode||e.shiftKey)&&this.props.onKeyDown&&this.props.onKeyDown(e)}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,i=(t.autoSelectText,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),a=(0,O.default)(n,"form-control editor edit-textarea");return g.default.createElement("textarea",u(u({ref:function(t){return e.text=t},className:a},i),{},{onKeyDown:this.handleKeyDown}))}}],n&&l(r.prototype,n),i&&l(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(g.Component);t.default=_},167(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(556)),i=n(r(442)),u=({invalidMessage:e})=>i.default.createElement("div",{className:"alert alert-danger in",role:"alert","data-testid":"editor-indicator"},i.default.createElement("strong",null,e));u.propTypes={invalidMessage:o.default.string},t.default=u},205(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=a(r(556)),s=u(r(442)),f=r(564),d=a(r(937)),p=a(r(868)),b=a(r(121)),y=a(r(167)),h=a(r(871)),v=a(r(462));t.default=(e,t)=>{var r;return(r=class extends s.Component{constructor(e){super(e),this.indicatorTimer=null,this.clearTimer=this.clearTimer.bind(this),this.handleBlur=this.handleBlur.bind(this),this.handleClick=this.handleClick.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.beforeComplete=this.beforeComplete.bind(this),this.asyncbeforeCompete=this.asyncbeforeCompete.bind(this),this.displayErrorMessage=this.displayErrorMessage.bind(this),this.state={invalidMessage:null}}componentWillUnmount(){this.clearTimer()}componentDidUpdate({message:t}){e.isDefined(t)&&(this.createTimer(),this.setState(()=>({invalidMessage:t})))}clearTimer(){this.indicatorTimer&&clearTimeout(this.indicatorTimer)}createTimer(){this.clearTimer();const{timeToCloseMessage:t,onErrorMessageDisappear:r}=this.props;this.indicatorTimer=e.sleep(()=>{this.setState(()=>({invalidMessage:null})),e.isFunction(r)&&r()},t)}displayErrorMessage(e){this.setState(()=>({invalidMessage:e})),this.createTimer()}asyncbeforeCompete(e){return(t={valid:!0})=>{const{valid:r,message:n}=t,{onUpdate:o,row:i,column:u}=this.props;r?o(i,u,e):this.displayErrorMessage(n)}}beforeComplete(t){const{onUpdate:r,row:n,column:o}=this.props;if(e.isFunction(o.validator)){const r=o.validator(t,n,o,this.asyncbeforeCompete(t));if(e.isObject(r)){if(r.async)return;if(!r.valid)return void this.displayErrorMessage(r.message)}}r(n,o,t)}handleBlur(){const{onEscape:e,blurToSave:t}=this.props;t?this.beforeComplete(this.editor.getValue()):e()}handleKeyDown(e){const{onEscape:t}=this.props;27===e.keyCode?t():13===e.keyCode&&this.beforeComplete(this.editor.getValue())}handleClick(e){"TD"!==e.target.tagName&&e.stopPropagation()}render(){let r;const{row:n,column:o,className:i,style:u,rowIndex:a,columnIndex:c,autoSelectText:m}=this.props,{dataField:O}=o,g=e.get(n,O),_=e.isDefined(this.state.invalidMessage);let j=o.editorClasses||"";e.isFunction(o.editorClasses)&&(j=o.editorClasses(g,n,a,c));let E=o.editorStyle||{};e.isFunction(o.editorStyle)&&(E=o.editorStyle(g,n,a,c));let w={ref:e=>this.editor=e,defaultValue:g,style:E,className:(0,l.default)({animated:_,shake:_},j),onKeyDown:this.handleKeyDown,onBlur:this.handleBlur,didMount:()=>{},onUpdate:e=>{}};t&&(w.didMount=()=>t(n,o,a,c));const P=e.isObject(o.editor);return P?w={...w,...o.editor}:e.isFunction(o.editorRenderer)&&(w={...w,onUpdate:this.beforeComplete}),r=e.isFunction(o.editorRenderer)?o.editorRenderer(w,g,n,o,a,c):P&&o.editor?.type===f.EDITTYPE.SELECT?s.default.createElement(b.default,{...w,row:n,column:o}):P&&o.editor?.type===f.EDITTYPE.TEXTAREA?s.default.createElement(v.default,{...w,autoSelectText:m}):P&&o.editor?.type===f.EDITTYPE.CHECKBOX?s.default.createElement(d.default,{...w}):P&&o.editor?.type===f.EDITTYPE.DATE?s.default.createElement(p.default,{...w}):s.default.createElement(h.default,{...w,autoSelectText:m}),s.default.createElement("td",{className:(0,l.default)("react-bootstrap-table-editing-cell",i),style:u,onClick:this.handleClick},r,_?s.default.createElement(y.default,{invalidMessage:this.state.invalidMessage}):null)}}).propTypes={row:c.default.object.isRequired,rowIndex:c.default.number.isRequired,column:c.default.object.isRequired,columnIndex:c.default.number.isRequired,onUpdate:c.default.func.isRequired,onEscape:c.default.func.isRequired,timeToCloseMessage:c.default.number,autoSelectText:c.default.bool,className:c.default.string,style:c.default.object},r.defaultProps={timeToCloseMessage:f.TIME_TO_CLOSE_MESSAGE,className:null,autoSelectText:!1,style:{}},r}},282(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=v(r(556)),g=h(r(442)),_=r(564),j=v(r(512)),E=v(r(855)),w=v(r(900)),P=v(r(88)),C=v(r(98)),T=v(r(137));t.default=function(e,t){var r;return r=function(r){function n(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),(t=c(this,n,[e])).indicatorTimer=null,t.clearTimer=t.clearTimer.bind(t),t.handleBlur=t.handleBlur.bind(t),t.handleClick=t.handleClick.bind(t),t.handleKeyDown=t.handleKeyDown.bind(t),t.beforeComplete=t.beforeComplete.bind(t),t.asyncbeforeCompete=t.asyncbeforeCompete.bind(t),t.displayErrorMessage=t.displayErrorMessage.bind(t),t.state={invalidMessage:null},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(n,r),o=n,u=[{key:"componentWillUnmount",value:function(){this.clearTimer()}},{key:"componentDidUpdate",value:function(t){var r=t.message;e.isDefined(r)&&(this.createTimer(),this.setState(function(){return{invalidMessage:r}}))}},{key:"clearTimer",value:function(){this.indicatorTimer&&clearTimeout(this.indicatorTimer)}},{key:"createTimer",value:function(){var t=this;this.clearTimer();var r=this.props,n=r.timeToCloseMessage,o=r.onErrorMessageDisappear;this.indicatorTimer=e.sleep(function(){t.setState(function(){return{invalidMessage:null}}),e.isFunction(o)&&o()},n)}},{key:"displayErrorMessage",value:function(e){this.setState(function(){return{invalidMessage:e}}),this.createTimer()}},{key:"asyncbeforeCompete",value:function(e){var t=this;return function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{valid:!0},n=r.valid,o=r.message,i=t.props,u=i.onUpdate,a=i.row,l=i.column;n?u(a,l,e):t.displayErrorMessage(o)}}},{key:"beforeComplete",value:function(t){var r=this.props,n=r.onUpdate,o=r.row,i=r.column;if(e.isFunction(i.validator)){var u=i.validator(t,o,i,this.asyncbeforeCompete(t));if(e.isObject(u)){if(u.async)return;if(!u.valid)return void this.displayErrorMessage(u.message)}}n(o,i,t)}},{key:"handleBlur",value:function(){var e=this.props,t=e.onEscape;e.blurToSave?this.beforeComplete(this.editor.getValue()):t()}},{key:"handleKeyDown",value:function(e){var t=this.props.onEscape;27===e.keyCode?t():13===e.keyCode&&this.beforeComplete(this.editor.getValue())}},{key:"handleClick",value:function(e){"TD"!==e.target.tagName&&e.stopPropagation()}},{key:"render",value:function(){var r,n,o,u,a,l=this,c=this.props,s=c.row,f=c.column,d=c.className,p=c.style,b=c.rowIndex,y=c.columnIndex,h=c.autoSelectText,v=f.dataField,O=e.get(s,v),S=e.isDefined(this.state.invalidMessage),D=f.editorClasses||"";e.isFunction(f.editorClasses)&&(D=f.editorClasses(O,s,b,y));var x=f.editorStyle||{};e.isFunction(f.editorStyle)&&(x=f.editorStyle(O,s,b,y));var M={ref:function(e){return l.editor=e},defaultValue:O,style:x,className:(0,m.default)({animated:S,shake:S},D),onKeyDown:this.handleKeyDown,onBlur:this.handleBlur,didMount:function(){},onUpdate:function(e){}};t&&(M.didMount=function(){return t(s,f,b,y)});var k=e.isObject(f.editor);return k?M=i(i({},M),f.editor):e.isFunction(f.editorRenderer)&&(M=i(i({},M),{},{onUpdate:this.beforeComplete})),a=e.isFunction(f.editorRenderer)?f.editorRenderer(M,O,s,f,b,y):k&&(null===(r=f.editor)||void 0===r?void 0:r.type)===_.EDITTYPE.SELECT?g.default.createElement(w.default,i(i({},M),{},{row:s,column:f})):k&&(null===(n=f.editor)||void 0===n?void 0:n.type)===_.EDITTYPE.TEXTAREA?g.default.createElement(T.default,i(i({},M),{},{autoSelectText:h})):k&&(null===(o=f.editor)||void 0===o?void 0:o.type)===_.EDITTYPE.CHECKBOX?g.default.createElement(j.default,i({},M)):k&&(null===(u=f.editor)||void 0===u?void 0:u.type)===_.EDITTYPE.DATE?g.default.createElement(E.default,i({},M)):g.default.createElement(C.default,i(i({},M),{},{autoSelectText:h})),g.default.createElement("td",{className:(0,m.default)("react-bootstrap-table-editing-cell",d),style:p,onClick:this.handleClick},a,S?g.default.createElement(P.default,{invalidMessage:this.state.invalidMessage}):null)}}],u&&a(o.prototype,u),l&&a(o,l),Object.defineProperty(o,"prototype",{writable:!1}),o;var o,u,l}(g.Component),r.propTypes={row:O.default.object.isRequired,rowIndex:O.default.number.isRequired,column:O.default.object.isRequired,columnIndex:O.default.number.isRequired,onUpdate:O.default.func.isRequired,onEscape:O.default.func.isRequired,timeToCloseMessage:O.default.number,autoSelectText:O.default.bool,className:O.default.string,style:O.default.object},r.defaultProps={timeToCloseMessage:_.TIME_TO_CLOSE_MESSAGE,className:null,autoSelectText:!1,style:{}},r}},351(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(r(442)),c=r(898),s=a(r(282));t.default=function(e,t){var r=(0,s.default)(e,t);return function(t){return l.default.createElement(c.Consumer,null,function(n){return function(t,n){var o=e.get(t.row,t.column.dataField),u=t.column.editCellStyle||{},a=t.column.editCellClasses;return e.isFunction(t.column.editCellStyle)&&(u=t.column.editCellStyle(o,t.row,t.rowIndex,t.columnIndex)),e.isFunction(t.column.editCellClasses)&&(a=t.column.editCellClasses(o,t.row,t.rowIndex,t.columnIndex)),l.default.createElement(r,i(i({},t),{},{className:a,style:u},n))}(t,n)})}}},404(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(442)),i=r(511),u=n(r(205));t.default=(e,t)=>{const r=(0,u.default)(e,t);return t=>o.default.createElement(i.Consumer,null,n=>((t,n)=>{const i=e.get(t.row,t.column.dataField);let u=t.column.editCellStyle||{},a=t.column.editCellClasses;return e.isFunction(t.column.editCellStyle)&&(u=t.column.editCellStyle(i,t.row,t.rowIndex,t.columnIndex)),e.isFunction(t.column.editCellClasses)&&(a=t.column.editCellClasses(i,t.row,t.rowIndex,t.columnIndex)),o.default.createElement(r,{...t,className:a,style:u,...n})})(t,n))}},442(t){"use strict";t.exports=e},462(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e),this.handleKeyDown=this.handleKeyDown.bind(this)}componentDidMount(){const{defaultValue:e=null,didMount:t,autoSelectText:r=!1}=this.props;this.text.value=e,this.text.focus(),r&&this.text.select(),t&&t()}getValue(){return this.text.value}handleKeyDown(e){(13!==e.keyCode||e.shiftKey)&&this.props.onKeyDown&&this.props.onKeyDown(e)}render(){const{defaultValue:e="",didMount:t,className:r="",autoSelectText:n=!1,...o}=this.props,i=(0,l.default)(r,"form-control editor edit-textarea");return c.default.createElement("textarea",{ref:e=>this.text=e,className:i,...o,onKeyDown:this.handleKeyDown})}}t.default=s},511(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Consumer=void 0;const o=n(r(556)),i=n(r(442)),u=r(564),a=i.default.createContext(null);t.default=(e,t,r,n)=>{class l extends i.default.Component{constructor(e){super(e),this.doUpdate=this.doUpdate.bind(this),this.startEditing=this.startEditing.bind(this),this.escapeEditing=this.escapeEditing.bind(this),this.completeEditing=this.completeEditing.bind(this),this.handleCellUpdate=this.handleCellUpdate.bind(this),this.state={ridx:null,cidx:null,message:null}}static getDerivedStateFromProps(t,n){return t.cellEdit&&e.isFunction(r)&&r()?t.cellEdit.options.errorMessage?{message:t.cellEdit.options.errorMessage}:{ridx:n.ridx,cidx:n.cidx,message:null}:{...n}}handleCellUpdate(r,n,o){const i=t.typeConvert(n.type,o),{cellEdit:u}=this.props,{beforeSaveCell:a}=u.options,l=e.get(r,n.dataField),c=(e=!0)=>{e?this.doUpdate(r,n,i):this.escapeEditing()};if(e.isFunction(a)){const t=a(l,i,r,n,c);if(e.isObject(t)&&t.async)return}this.doUpdate(r,n,i)}doUpdate(o,i,u){const{keyField:a,cellEdit:l,data:c}=this.props,{afterSaveCell:s}=l.options,f=e.get(o,a),d=e.get(o,i.dataField);r()?n(f,i.dataField,u):(t.editCell(c,a,f,i.dataField,u),e.isFunction(s)&&s(d,u,o,i),this.completeEditing())}completeEditing(){this.setState(()=>({ridx:null,cidx:null,message:null}))}startEditing(e,t){const r=()=>{this.setState(()=>({ridx:e,cidx:t}))},{selectRow:n}=this.props;n&&!n.clickToEdit&&n.clickToSelect||r()}escapeEditing(){this.setState(()=>({ridx:null,cidx:null}))}render(){const{cellEdit:{options:{nonEditableRows:t,errorMessage:r,...n},ridx:o,cidx:u,...l}}=this.props,c={...n,...l,ridx:null!==this.state.ridx?this.state.ridx:o??null,cidx:null!==this.state.cidx?this.state.cidx:u??null,message:this.state.message,nonEditableRows:e.isDefined(t)?t():[],atstart:this.startEditing,onEscape:this.escapeEditing,onUpdate:this.handleCellUpdate};return i.default.createElement(a.Provider,{value:{...c}},this.props.children)}}return l.propTypes={data:o.default.array.isRequired,selectRow:o.default.object,options:o.default.shape({mode:o.default.oneOf([u.CLICK_TO_CELL_EDIT,u.DBCLICK_TO_CELL_EDIT]).isRequired,onErrorMessageDisappear:o.default.func,blurToSave:o.default.bool,beforeSaveCell:o.default.func,afterSaveCell:o.default.func,onStartEdit:o.default.func,nonEditableRows:o.default.func,timeToCloseMessage:o.default.number,errorMessage:o.default.any})},{Provider:l}},t.Consumer=a.Consumer},512(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=f(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,u,a=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(a.push(n.value),a.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(u=r.return(),Object(u)!==u))return}finally{if(c)throw o}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,f(n.key),n)}}function f(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function d(e,t,r){return t=b(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,p()?Reflect.construct(t,r||[],b(e).constructor):t.apply(e,r))}function p(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(p=function(){return!!e})()}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var h,v=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},m=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},O=(h=function(e){return h=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},h(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=h(e),n=0;n<r.length;n++)"default"!==r[n]&&v(t,e,r[n]);return m(t,e),t}),g=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var _=g(r(942)),j=O(r(442)),E=function(e){function t(e){var r,n,o;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(o=d(this,t,[e])).state={checked:(null!==(r=e.defaultValue)&&void 0!==r&&r).toString()===(null!==(n=e.value)&&void 0!==n?n:"on:off").split(":")[0]},o.handleChange=o.handleChange.bind(o),o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props.didMount;this.checkbox.focus(),e&&e()}},{key:"getValue",value:function(){var e,t=l((null!==(e=this.props.value)&&void 0!==e?e:"on:off").split(":"),2),r=t[0],n=t[1];return this.checkbox.checked?r:n}},{key:"handleChange",value:function(e){this.props.onChange&&this.props.onChange(e);var t=e.target;this.setState(function(){return{checked:t.checked}})}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,i=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),a=(0,_.default)("editor edit-chseckbox checkbox",n);return j.default.createElement("input",u(u({ref:function(t){return e.checkbox=t},type:"checkbox",className:a},i),{},{checked:this.state.checked,onChange:this.handleChange}))}}],n&&s(r.prototype,n),i&&s(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(j.Component);t.default=E},556(e,t,r){e.exports=r(694)()},564(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.EDITTYPE=t.DBCLICK_TO_CELL_EDIT=t.CLICK_TO_CELL_EDIT=t.DELAY_FOR_DBCLICK=t.TIME_TO_CLOSE_MESSAGE=void 0;var o=n(r(898)),i=n(r(351)),u=n(r(810));t.TIME_TO_CLOSE_MESSAGE=3e3,t.DELAY_FOR_DBCLICK=200,t.CLICK_TO_CELL_EDIT="click",t.DBCLICK_TO_CELL_EDIT="dbclick",t.EDITTYPE={TEXT:"text",SELECT:"select",TEXTAREA:"textarea",CHECKBOX:"checkbox",DATE:"date"},t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:o.default,createEditingCell:i.default,withRowLevelCellEdit:u.default,DBCLICK_TO_CELL_EDIT:t.DBCLICK_TO_CELL_EDIT,DELAY_FOR_DBCLICK:t.DELAY_FOR_DBCLICK,options:e}},t.Type=t.EDITTYPE},694(e,t,r){"use strict";var n=r(925);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,r,o,i,u){if(u!==n){var a=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 a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return r.PropTypes=r,r}},810(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(r(442)),c=r(564),s=r(898);t.default=function(e,t){function r(r){return l.default.createElement(s.Consumer,null,function(n){return function(r,n){var o=r.value,u=!(n.nonEditableRows.length>0&&n.nonEditableRows.indexOf(o)>-1),a={};return t&&n.mode===c.DBCLICK_TO_CELL_EDIT&&(a.DELAY_FOR_DBCLICK=c.DELAY_FOR_DBCLICK),l.default.createElement(e,i(i(i({},r),a),{},{editingRowIdx:n.ridx,editingColIdx:n.cidx,isEditable:u,atstart:n.atstart,clickToEdit:n.mode===c.CLICK_TO_CELL_EDIT,dbclickToEdit:n.mode===c.DBCLICK_TO_CELL_EDIT}))}(r,n)})}return r.displayName="WithCellEditingRowConsumer",r}},855(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=h(r(442)),g=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),c(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount;this.date.valueAsDate=new Date(r),this.date.focus(),n&&n()}},{key:"getValue",value:function(){return this.date.value}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,a=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),l=(0,m.default)(n,"form-control editor edit-date");return O.default.createElement("input",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({ref:function(t){return e.date=t},type:"date",className:l},a))}}],n&&a(r.prototype,n),l&&a(r,l),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,l}(O.Component);t.default=g},856(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.EDITTYPE=t.DBCLICK_TO_CELL_EDIT=t.CLICK_TO_CELL_EDIT=t.DELAY_FOR_DBCLICK=t.TIME_TO_CLOSE_MESSAGE=void 0;var o=n(r(511)),i=n(r(404)),u=n(r(33));t.TIME_TO_CLOSE_MESSAGE=3e3,t.DELAY_FOR_DBCLICK=200,t.CLICK_TO_CELL_EDIT="click",t.DBCLICK_TO_CELL_EDIT="dbclick",t.EDITTYPE={TEXT:"text",SELECT:"select",TEXTAREA:"textarea",CHECKBOX:"checkbox",DATE:"date"},t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:o.default,createEditingCell:i.default,withRowLevelCellEdit:u.default,DBCLICK_TO_CELL_EDIT:t.DBCLICK_TO_CELL_EDIT,DELAY_FOR_DBCLICK:t.DELAY_FOR_DBCLICK,options:e}},t.Type=t.EDITTYPE},868(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{componentDidMount(){const{defaultValue:e="",didMount:t}=this.props;this.date.valueAsDate=new Date(e),this.date.focus(),t&&t()}getValue(){return this.date.value}render(){const{defaultValue:e="",didMount:t,className:r="",onUpdate:n,...o}=this.props,i=(0,l.default)(r,"form-control editor edit-date");return c.default.createElement("input",{ref:e=>this.date=e,type:"date",className:i,...o})}}t.default=s},871(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{componentDidMount(){const{defaultValue:e="",didMount:t,autoSelectText:r=!1}=this.props;this.text.value=e,this.text.focus(),r&&this.text.select(),t&&t()}getValue(){return this.text.value}render(){const{defaultValue:e="",didMount:t,className:r="",autoSelectText:n=!1,onUpdate:o,...i}=this.props,u=(0,l.default)(r,"form-control editor edit-text");return c.default.createElement("input",{ref:e=>this.text=e,type:"text",className:u,...i})}}t.default=s},898(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["nonEditableRows","errorMessage"],i=["options","ridx","cidx"];function u(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?u(Object(r),!0).forEach(function(t){l(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):u(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function l(e,t,r){return(t=f(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,f(n.key),n)}}function f(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function d(e,t,r){return t=b(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,p()?Reflect.construct(t,r||[],b(e).constructor):t.apply(e,r))}function p(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(p=function(){return!!e})()}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var h=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Consumer=void 0;var v=h(r(556)),m=h(r(442)),O=r(564),g=m.default.createContext(null);t.default=function(e,t,r,n){var u=function(u){function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),(t=d(this,l,[e])).doUpdate=t.doUpdate.bind(t),t.startEditing=t.startEditing.bind(t),t.escapeEditing=t.escapeEditing.bind(t),t.completeEditing=t.completeEditing.bind(t),t.handleCellUpdate=t.handleCellUpdate.bind(t),t.state={ridx:null,cidx:null,message:null},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(l,u),f=l,p=[{key:"handleCellUpdate",value:function(r,n,o){var i=this,u=t.typeConvert(n.type,o),a=this.props.cellEdit.options.beforeSaveCell,l=e.get(r,n.dataField);if(e.isFunction(a)){var c=a(l,u,r,n,function(){arguments.length>0&&void 0!==arguments[0]&&!arguments[0]?i.escapeEditing():i.doUpdate(r,n,u)});if(e.isObject(c)&&c.async)return}this.doUpdate(r,n,u)}},{key:"doUpdate",value:function(o,i,u){var a=this.props,l=a.keyField,c=a.cellEdit,s=a.data,f=c.options.afterSaveCell,d=e.get(o,l),p=e.get(o,i.dataField);r()?n(d,i.dataField,u):(t.editCell(s,l,d,i.dataField,u),e.isFunction(f)&&f(p,u,o,i),this.completeEditing())}},{key:"completeEditing",value:function(){this.setState(function(){return{ridx:null,cidx:null,message:null}})}},{key:"startEditing",value:function(e,t){var r=this,n=this.props.selectRow;n&&!n.clickToEdit&&n.clickToSelect||r.setState(function(){return{ridx:e,cidx:t}})}},{key:"escapeEditing",value:function(){this.setState(function(){return{ridx:null,cidx:null}})}},{key:"render",value:function(){var t=this.props.cellEdit,r=t.options,n=r.nonEditableRows,u=(r.errorMessage,c(r,o)),l=t.ridx,s=t.cidx,f=c(t,i),d=a(a(a({},u),f),{},{ridx:null!==this.state.ridx?this.state.ridx:null!=l?l:null,cidx:null!==this.state.cidx?this.state.cidx:null!=s?s:null,message:this.state.message,nonEditableRows:e.isDefined(n)?n():[],atstart:this.startEditing,onEscape:this.escapeEditing,onUpdate:this.handleCellUpdate});return m.default.createElement(g.Provider,{value:a({},d)},this.props.children)}}],b=[{key:"getDerivedStateFromProps",value:function(t,n){return t.cellEdit&&e.isFunction(r)&&r()?t.cellEdit.options.errorMessage?{message:t.cellEdit.options.errorMessage}:{ridx:n.ridx,cidx:n.cidx,message:null}:a({},n)}}],p&&s(f.prototype,p),b&&s(f,b),Object.defineProperty(f,"prototype",{writable:!1}),f;var f,p,b}(m.default.Component);return u.propTypes={data:v.default.array.isRequired,selectRow:v.default.object,options:v.default.shape({mode:v.default.oneOf([O.CLICK_TO_CELL_EDIT,O.DBCLICK_TO_CELL_EDIT]).isRequired,onErrorMessageDisappear:v.default.func,blurToSave:v.default.bool,beforeSaveCell:v.default.func,afterSaveCell:v.default.func,onStartEdit:v.default.func,nonEditableRows:v.default.func,timeToCloseMessage:v.default.number,errorMessage:v.default.any})},{Provider:u}},t.Consumer=g.Consumer},900(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","getOptions","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=c(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,c(n.key),n)}}function c(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function s(e,t,r){return t=d(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(t,r||[],d(e).constructor):t.apply(e,r))}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(f=function(){return!!e})()}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function p(e,t){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},p(e,t)}var b,y=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},h=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},v=(b=function(e){return b=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},b(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=b(e),n=0;n<r.length;n++)"default"!==r[n]&&y(t,e,r[n]);return h(t,e),t}),m=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var O=m(r(942)),g=v(r(442)),_=function(e){function t(e){var r,n;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),n=s(this,t,[e]);var o=null!==(r=e.options)&&void 0!==r?r:[];return e.getOptions&&(o=e.getOptions(n.setOptions.bind(n),{row:e.row,column:e.column})||[]),n.state={options:o},n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&p(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount;this.select.value=r,this.select.focus(),n&&n()}},{key:"setOptions",value:function(e){this.setState({options:e})}},{key:"getValue",value:function(){return this.select.value}},{key:"render",value:function(){var e=this,t=this.props,r=t.defaultValue,n=void 0===r?"":r,i=(t.didMount,t.getOptions,t.className),a=void 0===i?"":i,l=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),c=(0,O.default)(a,"form-control editor edit-select"),s=u(u({},l),{},{className:c});return g.default.createElement("select",u(u({},s),{},{ref:function(t){return e.select=t},defaultValue:n}),this.state.options.map(function(e){var t=e.label,r=e.value;return g.default.createElement("option",{key:r,value:r},t)}))}}],n&&l(r.prototype,n),i&&l(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(g.Component);t.default=_},925(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},937(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e),this.state={checked:(e.defaultValue??!1).toString()===(e.value??"on:off").split(":")[0]},this.handleChange=this.handleChange.bind(this)}componentDidMount(){const{didMount:e}=this.props;this.checkbox.focus(),e&&e()}getValue(){const[e,t]=(this.props.value??"on:off").split(":");return this.checkbox.checked?e:t}handleChange(e){this.props.onChange&&this.props.onChange(e);const{target:t}=e;this.setState(()=>({checked:t.checked}))}render(){const{defaultValue:e=!1,didMount:t,className:r="",onUpdate:n,...o}=this.props,i=(0,l.default)("editor edit-chseckbox checkbox",r);return c.default.createElement("input",{ref:e=>this.checkbox=e,type:"checkbox",className:i,...o,checked:this.state.checked,onChange:this.handleChange})}}t.default=s},942(e,t){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var r=arguments[t];r&&(e=u(e,i(r)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var r in e)n.call(e,r)&&e[r]&&(t=u(t,r));return t}function u(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(r=function(){return o}.apply(t,[]))||(e.exports=r)}()}},r={},function e(n){var o=r[n];if(void 0!==o)return o.exports;var i=r[n]={exports:{}};return t[n].call(i.exports,i,i.exports,e),i.exports}(856);var t,r});
|
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IubWluLmpzIiwibWFwcGluZ3MiOiI7Q0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxVQUNSLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sQ0FBQyxTQUFVSixHQUNRLGlCQUFaQyxRQUNkQSxRQUFxQyw0QkFBSUQsRUFBUUcsUUFBUSxVQUV6REosRUFBa0MsNEJBQUlDLEVBQVFELEVBQVksTUFDM0QsQ0FURCxDQVNHTyxLQUFPQyxJQUNWLE8sK0pDVEEsa0JBQ0EsU0FLQSxTQUVBLFVBQWUsQ0FBQ0MsRUFBZ0JDLEtBMkI5QixTQUFTQyxFQUFhQyxHQUNwQixPQUNFLHdCQUFDLEVBQUFDLFNBQVEsS0FBR0MsR0E1QlcsRUFBQ0YsRUFBWUUsS0FDdEMsTUFBTUMsRUFBTUgsRUFBTUksTUFDWkMsSUFDSkgsRUFBU0ksZ0JBQWdCQyxPQUFTLEdBQ2xDTCxFQUFTSSxnQkFBZ0JFLFFBQVFMLElBQVEsR0FHckNNLEVBQWlELENBQUMsRUFNeEQsT0FKSVgsR0FBb0JJLEVBQVNRLE9BQVMsRUFBQUMsdUJBQ3hDRixFQUFNRyxrQkFBb0IsRUFBQUEsbUJBSTFCLHdCQUFDZixFQUFTLElBQ0pHLEtBQ0FTLEVBQ0pJLGNBQWVYLEVBQVNZLEtBQ3hCQyxjQUFlYixFQUFTYyxLQUN4QkMsV0FBWVosRUFDWmEsUUFBU2hCLEVBQVNnQixRQUNsQkMsWUFBYWpCLEVBQVNRLE9BQVMsRUFBQVUsbUJBQy9CQyxjQUFlbkIsRUFBU1EsT0FBUyxFQUFBQyx3QkFNVlcsQ0FBbUJ0QixFQUFPRSxHQUV2RCxDQUdBLE9BREFILEVBQWF3QixZQUFjLDZCQUNwQnhCLEUseUJDekNULElBQUl5QixFQUF3RCxTQUFVQyxHQUNwRSxPQUFPQSxHQUFPQSxFQUFJQyxXQUFhRCxFQUFN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dmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9yb3ctY29uc3VtZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9lZGl0b3ItaW5kaWNhdG9yLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy90ZXh0LWVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9kcm9wZG93bi1lZGl0b3IudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy90ZXh0YXJlYS1lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvZWRpdG9yLWluZGljYXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvZWRpdGluZy1jZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvZWRpdGluZy1jZWxsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9lZGl0aW5nLWNlbGwtY29uc3VtZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvZWRpdGluZy1jZWxsLWNvbnN1bWVyLnRzeCIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvdGV4dGFyZWEtZWRpdG9yLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvY2hlY2tib3gtZWRpdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvcm93LWNvbnN1bWVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9kYXRlLWVkaXRvci5qcyIsIndlYnBhY2s6Ly8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvZGF0ZS1lZGl0b3IudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL3RleHQtZWRpdG9yLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvZHJvcGRvd24tZWRpdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9jaGVja2JveC1lZGl0b3IudHN4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ0VkaXRvclwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdFZGl0b3JcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSk7XG59KShzZWxmLCAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18pID0+IHtcbnJldHVybiAiLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQ0xJQ0tfVE9fQ0VMTF9FRElULFxuICBEQkNMSUNLX1RPX0NFTExfRURJVCxcbiAgREVMQVlfRk9SX0RCQ0xJQ0ssXG59IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgQ29uc3VtZXIgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IChDb21wb25lbnQ6IGFueSwgc2VsZWN0Um93RW5hYmxlZDogYW55KSA9PiB7XG4gIGNvbnN0IHJlbmRlcldpdGhDZWxsRWRpdCA9IChwcm9wczogYW55LCBjZWxsRWRpdDogYW55KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gcHJvcHMudmFsdWU7XG4gICAgY29uc3QgZWRpdGFibGVSb3cgPSAhKFxuICAgICAgY2VsbEVkaXQubm9uRWRpdGFibGVSb3dzLmxlbmd0aCA+IDAgJiZcbiAgICAgIGNlbGxFZGl0Lm5vbkVkaXRhYmxlUm93cy5pbmRleE9mKGtleSkgPiAtMVxuICAgICk7XG5cbiAgICBjb25zdCBhdHRyczogeyBERUxBWV9GT1JfREJDTElDSz86IG51bWJlciB8IHN0cmluZyB9ID0ge307XG5cbiAgICBpZiAoc2VsZWN0Um93RW5hYmxlZCAmJiBjZWxsRWRpdC5tb2RlID09PSBEQkNMSUNLX1RPX0NFTExfRURJVCkge1xuICAgICAgYXR0cnMuREVMQVlfRk9SX0RCQ0xJQ0sgPSBERUxBWV9GT1JfREJDTElDSztcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPENvbXBvbmVudFxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIHsuLi5hdHRyc31cbiAgICAgICAgZWRpdGluZ1Jvd0lkeD17Y2VsbEVkaXQucmlkeH1cbiAgICAgICAgZWRpdGluZ0NvbElkeD17Y2VsbEVkaXQuY2lkeH1cbiAgICAgICAgaXNFZGl0YWJsZT17ZWRpdGFibGVSb3d9XG4gICAgICAgIGF0c3RhcnQ9e2NlbGxFZGl0LmF0c3RhcnR9XG4gICAgICAgIGNsaWNrVG9FZGl0PXtjZWxsRWRpdC5tb2RlID09PSBDTElDS19UT19DRUxMX0VESVR9XG4gICAgICAgIGRiY2xpY2tUb0VkaXQ9e2NlbGxFZGl0Lm1vZGUgPT09IERCQ0xJQ0tfVE9fQ0VMTF9FRElUfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuICBmdW5jdGlvbiB3aXRoQ29uc3VtZXIocHJvcHM6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Q29uc3VtZXI+eyhjZWxsRWRpdCkgPT4gcmVuZGVyV2l0aENlbGxFZGl0KHByb3BzLCBjZWxsRWRpdCl9PC9Db25zdW1lcj5cbiAgICApO1xuICB9XG5cbiAgd2l0aENvbnN1bWVyLmRpc3BsYXlOYW1lID0gXCJXaXRoQ2VsbEVkaXRpbmdSb3dDb25zdW1lclwiO1xuICByZXR1cm4gd2l0aENvbnN1bWVyO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xudmFyIHByb3BfdHlwZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIEVkaXRvckluZGljYXRvciA9IGZ1bmN0aW9uIEVkaXRvckluZGljYXRvcihfcmVmKSB7XG4gIHZhciBpbnZhbGlkTWVzc2FnZSA9IF9yZWYuaW52YWxpZE1lc3NhZ2U7XG4gIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiYWxlcnQgYWxlcnQtZGFuZ2VyIGluXCIsXG4gICAgcm9sZTogXCJhbGVydFwiLFxuICAgIFwiZGF0YS10ZXN0aWRcIjogXCJlZGl0b3ItaW5kaWNhdG9yXCJcbiAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInN0cm9uZ1wiLCBudWxsLCBpbnZhbGlkTWVzc2FnZSkpO1xufTtcbkVkaXRvckluZGljYXRvci5wcm9wVHlwZXMgPSB7XG4gIGludmFsaWRNZXNzYWdlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLnN0cmluZ1xufTtcbi8vIEVkaXRvckluZGljYXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGludmFsaWRNZXNzYWdlOiBudWxsLFxuLy8gfTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gRWRpdG9ySW5kaWNhdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiZGVmYXVsdFZhbHVlXCIsIFwiZGlkTW91bnRcIiwgXCJjbGFzc05hbWVcIiwgXCJhdXRvU2VsZWN0VGV4dFwiLCBcIm9uVXBkYXRlXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbnZhciBjbGFzc25hbWVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsYXNzbmFtZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBUZXh0RWRpdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gVGV4dEVkaXRvcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGV4dEVkaXRvcik7XG4gICAgcmV0dXJuIF9jYWxsU3VwZXIodGhpcywgVGV4dEVkaXRvciwgYXJndW1lbnRzKTtcbiAgfVxuICBfaW5oZXJpdHMoVGV4dEVkaXRvciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhUZXh0RWRpdG9yLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzJGRlZmF1bHRWYSA9IF90aGlzJHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMkZGVmYXVsdFZhID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMkZGVmYXVsdFZhLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzLmRpZE1vdW50LFxuICAgICAgICBfdGhpcyRwcm9wcyRhdXRvU2VsZWMgPSBfdGhpcyRwcm9wcy5hdXRvU2VsZWN0VGV4dCxcbiAgICAgICAgYXV0b1NlbGVjdFRleHQgPSBfdGhpcyRwcm9wcyRhdXRvU2VsZWMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMkYXV0b1NlbGVjO1xuICAgICAgdGhpcy50ZXh0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgdGhpcy50ZXh0LmZvY3VzKCk7XG4gICAgICBpZiAoYXV0b1NlbGVjdFRleHQpIHRoaXMudGV4dC5zZWxlY3QoKTtcbiAgICAgIGlmIChkaWRNb3VudCkgZGlkTW91bnQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0LnZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkZGVmYXVsdFYsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMyLmRpZE1vdW50LFxuICAgICAgICBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkY2xhc3NOYW0sXG4gICAgICAgIF90aGlzJHByb3BzMiRhdXRvU2VsZSA9IF90aGlzJHByb3BzMi5hdXRvU2VsZWN0VGV4dCxcbiAgICAgICAgYXV0b1NlbGVjdFRleHQgPSBfdGhpcyRwcm9wczIkYXV0b1NlbGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMyJGF1dG9TZWxlLFxuICAgICAgICBvblVwZGF0ZSA9IF90aGlzJHByb3BzMi5vblVwZGF0ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0XCIpO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy50ZXh0ID0gbm9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3NcbiAgICAgIH0sIHJlc3QpKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBUZXh0RWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgIFByb3BUeXBlcy5vYmplY3Rcbi8vICAgXSksXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICBQcm9wVHlwZXMubnVtYmVyXG4vLyAgIF0pLFxuLy8gICBhdXRvU2VsZWN0VGV4dDogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcbi8vIFRleHRFZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6IG51bGwsXG4vLyAgIGRlZmF1bHRWYWx1ZTogJycsXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBmYWxzZSxcbi8vICAgZGlkTW91bnQ6IHVuZGVmaW5lZFxuLy8gfTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gVGV4dEVkaXRvcjsiLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBPcHRpb24ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xufVxuXG5pbnRlcmZhY2UgRHJvcERvd25FZGl0b3JQcm9wcyB7XG4gIHJvdzogb2JqZWN0O1xuICBjb2x1bW46IG9iamVjdDtcbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHN0eWxlPzogb2JqZWN0O1xuICBvcHRpb25zPzogT3B0aW9uW107XG4gIGRpZE1vdW50PzogKCkgPT4gdm9pZDtcbiAgZ2V0T3B0aW9ucz86IChcbiAgICBzZXRPcHRpb25zOiAob3B0aW9uczogT3B0aW9uW10pID0+IHZvaWQsXG4gICAgY29udGV4dDogeyByb3c6IG9iamVjdDsgY29sdW1uOiBvYmplY3QgfVxuICApID0+IE9wdGlvbltdIHwgdm9pZDtcbiAgb25VcGRhdGU/OiBhbnk7XG59XG5cbmludGVyZmFjZSBEcm9wRG93bkVkaXRvclN0YXRlIHtcbiAgb3B0aW9uczogT3B0aW9uW107XG59XG5cbmNsYXNzIERyb3BEb3duRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50PFxuICBEcm9wRG93bkVkaXRvclByb3BzLFxuICBEcm9wRG93bkVkaXRvclN0YXRlXG4+IHtcbiAgc2VsZWN0OiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgbGV0IG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zID8/IFtdO1xuICAgIGlmIChwcm9wcy5nZXRPcHRpb25zKSB7XG4gICAgICBvcHRpb25zID1cbiAgICAgICAgcHJvcHMuZ2V0T3B0aW9ucyh0aGlzLnNldE9wdGlvbnMuYmluZCh0aGlzKSwge1xuICAgICAgICAgIHJvdzogcHJvcHMucm93LFxuICAgICAgICAgIGNvbHVtbjogcHJvcHMuY29sdW1uLFxuICAgICAgICB9KSB8fCBbXTtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9IHsgb3B0aW9ucyB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBkZWZhdWx0VmFsdWUgPSBcIlwiLCBkaWRNb3VudCB9ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLnNlbGVjdC52YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLnNlbGVjdC5mb2N1cygpO1xuICAgIGlmIChkaWRNb3VudCkge1xuICAgICAgZGlkTW91bnQoKTtcbiAgICB9XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IGFueSkge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBvcHRpb25zIH0pO1xuICB9XG5cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0LnZhbHVlO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IFwiXCIsXG4gICAgICBkaWRNb3VudCxcbiAgICAgIGdldE9wdGlvbnMsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgb25VcGRhdGUsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZWRpdG9yQ2xhc3MgPSBjcyhjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXNlbGVjdFwiKTtcblxuICAgIGNvbnN0IGF0dHIgPSB7XG4gICAgICAuLi5yZXN0LFxuICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxzZWxlY3RcbiAgICAgICAgey4uLmF0dHJ9XG4gICAgICAgIHJlZj17KG5vZGUpID0+ICh0aGlzLnNlbGVjdCA9IG5vZGUpfVxuICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgID5cbiAgICAgICAge3RoaXMuc3RhdGUub3B0aW9ucy5tYXAoKHsgbGFiZWwsIHZhbHVlIH06IGFueSkgPT4gKFxuICAgICAgICAgIDxvcHRpb24ga2V5PXt2YWx1ZX0gdmFsdWU9e3ZhbHVlfT5cbiAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgKSl9XG4gICAgICA8L3NlbGVjdD5cbiAgICApO1xuICB9XG59XG5cbi8vIERyb3BEb3duRWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgcm93OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgUHJvcFR5cGVzLm51bWJlclxuLy8gICBdKSxcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgb3B0aW9uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbi8vICAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbi8vICAgICB9KSlcbi8vICAgXSksXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuYyxcbi8vICAgZ2V0T3B0aW9uczogUHJvcFR5cGVzLmZ1bmNcbi8vIH07XG5cbi8vIERyb3BEb3duRWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiAnJyxcbi8vICAgZGVmYXVsdFZhbHVlOiAnJyxcbi8vICAgc3R5bGU6IHt9LFxuLy8gICBvcHRpb25zOiBbXSxcbi8vICAgZGlkTW91bnQ6IHVuZGVmaW5lZCxcbi8vICAgZ2V0T3B0aW9uczogdW5kZWZpbmVkXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBEcm9wRG93bkVkaXRvcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiZGVmYXVsdFZhbHVlXCIsIFwiZGlkTW91bnRcIiwgXCJjbGFzc05hbWVcIiwgXCJhdXRvU2VsZWN0VGV4dFwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG52YXIgY2xhc3NuYW1lc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgVGV4dEFyZWFFZGl0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBUZXh0QXJlYUVkaXRvcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGV4dEFyZWFFZGl0b3IpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBUZXh0QXJlYUVkaXRvciwgW3Byb3BzXSk7XG4gICAgX3RoaXMuaGFuZGxlS2V5RG93biA9IF90aGlzLmhhbmRsZUtleURvd24uYmluZChfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhUZXh0QXJlYUVkaXRvciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhUZXh0QXJlYUVkaXRvciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPSBfdGhpcyRwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzJGRlZmF1bHRWYSA9PT0gdm9pZCAwID8gbnVsbCA6IF90aGlzJHByb3BzJGRlZmF1bHRWYSxcbiAgICAgICAgZGlkTW91bnQgPSBfdGhpcyRwcm9wcy5kaWRNb3VudCxcbiAgICAgICAgX3RoaXMkcHJvcHMkYXV0b1NlbGVjID0gX3RoaXMkcHJvcHMuYXV0b1NlbGVjdFRleHQsXG4gICAgICAgIGF1dG9TZWxlY3RUZXh0ID0gX3RoaXMkcHJvcHMkYXV0b1NlbGVjID09PSB2b2lkIDAgPyBmYWxzZSA6IF90aGlzJHByb3BzJGF1dG9TZWxlYztcbiAgICAgIHRoaXMudGV4dC52YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIHRoaXMudGV4dC5mb2N1cygpO1xuICAgICAgaWYgKGF1dG9TZWxlY3RUZXh0KSB0aGlzLnRleHQuc2VsZWN0KCk7XG4gICAgICBpZiAoZGlkTW91bnQpIGRpZE1vdW50KCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dC52YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFuZGxlS2V5RG93blwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGUpIHtcbiAgICAgIGlmIChlLmtleUNvZGUgPT09IDEzICYmICFlLnNoaWZ0S2V5KSByZXR1cm47XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbktleURvd24pIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbktleURvd24oZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkZGVmYXVsdFYsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMyLmRpZE1vdW50LFxuICAgICAgICBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkY2xhc3NOYW0sXG4gICAgICAgIF90aGlzJHByb3BzMiRhdXRvU2VsZSA9IF90aGlzJHByb3BzMi5hdXRvU2VsZWN0VGV4dCxcbiAgICAgICAgYXV0b1NlbGVjdFRleHQgPSBfdGhpcyRwcm9wczIkYXV0b1NlbGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMyJGF1dG9TZWxlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlZGl0b3JDbGFzcyA9ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKShjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXRleHRhcmVhXCIpO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi50ZXh0ID0gbm9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdHlwZT1cInRleHRhcmVhXCJcbiAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzc1xuICAgICAgfSwgcmVzdCksIHt9LCB7XG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVLZXlEb3duXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTsgLy8gVGV4dEFyZWFFZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3RdKSxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4vLyAgIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jLFxuLy8gfTtcbi8vIFRleHRBcmVhRWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBcIlwiLFxuLy8gICBkZWZhdWx0VmFsdWU6IFwiXCIsXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBmYWxzZSxcbi8vICAgb25LZXlEb3duOiB1bmRlZmluZWQsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBUZXh0QXJlYUVkaXRvcjsiLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5jb25zdCBFZGl0b3JJbmRpY2F0b3IgPSAoeyBpbnZhbGlkTWVzc2FnZSB9OiBhbnkpID0+IChcbiAgPGRpdiBjbGFzc05hbWU9XCJhbGVydCBhbGVydC1kYW5nZXIgaW5cIiByb2xlPVwiYWxlcnRcIiBkYXRhLXRlc3RpZD1cImVkaXRvci1pbmRpY2F0b3JcIj5cbiAgICA8c3Ryb25nPntpbnZhbGlkTWVzc2FnZX08L3N0cm9uZz5cbiAgPC9kaXY+XG4pO1xuXG5FZGl0b3JJbmRpY2F0b3IucHJvcFR5cGVzID0ge1xuICBpbnZhbGlkTWVzc2FnZTogUHJvcFR5cGVzLnN0cmluZyxcbn07XG5cbi8vIEVkaXRvckluZGljYXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGludmFsaWRNZXNzYWdlOiBudWxsLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgRWRpdG9ySW5kaWNhdG9yO1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgY2xhc3MtbWV0aG9kcy11c2UtdGhpczogMCAqL1xuLyogZXNsaW50IGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLWVsZW1lbnQtaW50ZXJhY3Rpb25zOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgRURJVFRZUEUsIFRJTUVfVE9fQ0xPU0VfTUVTU0FHRSB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IENoZWNrQm94RWRpdG9yIGZyb20gXCIuL2NoZWNrYm94LWVkaXRvclwiO1xuaW1wb3J0IERhdGVFZGl0b3IgZnJvbSBcIi4vZGF0ZS1lZGl0b3JcIjtcbmltcG9ydCBEcm9wZG93bkVkaXRvciBmcm9tIFwiLi9kcm9wZG93bi1lZGl0b3JcIjtcbmltcG9ydCBFZGl0b3JJbmRpY2F0b3IgZnJvbSBcIi4vZWRpdG9yLWluZGljYXRvclwiO1xuaW1wb3J0IFRleHRFZGl0b3IgZnJvbSBcIi4vdGV4dC1lZGl0b3JcIjtcbmltcG9ydCBUZXh0QXJlYUVkaXRvciBmcm9tIFwiLi90ZXh0YXJlYS1lZGl0b3JcIjtcblxuaW50ZXJmYWNlIEVkaXRpbmdDZWxsUHJvcHMge1xuICByb3c6IG9iamVjdDtcbiAgcm93SW5kZXg6IG51bWJlcjtcbiAgY29sdW1uOiB7XG4gICAgZGF0YUZpZWxkOiBhbnk7XG4gICAgdmFsaWRhdG9yPzogYW55O1xuICAgIGVkaXRvckNsYXNzZXM/OiBhbnk7XG4gICAgZWRpdG9yU3R5bGU/OiBhbnk7XG4gICAgZWRpdG9yPzogeyB0eXBlOiBhbnk7IG9wdGlvbnM/OiBhbnkgfTtcbiAgICBlZGl0b3JSZW5kZXJlcj86IEZ1bmN0aW9uO1xuICAgIHRleHQ6IGFueTtcbiAgfTtcbiAgY29sdW1uSW5kZXg6IG51bWJlcjtcbiAgb25VcGRhdGU6IChyb3c6IG9iamVjdCwgY29sdW1uOiBvYmplY3QsIHZhbHVlOiBhbnkpID0+IHZvaWQ7XG4gIG9uRXNjYXBlOiAoKSA9PiB2b2lkO1xuICB0aW1lVG9DbG9zZU1lc3NhZ2U/OiBudW1iZXI7XG4gIGF1dG9TZWxlY3RUZXh0PzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IG9iamVjdDtcbiAgb25FcnJvck1lc3NhZ2VEaXNhcHBlYXI/OiBhbnk7XG4gIGJsdXJUb1NhdmU/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRWRpdGluZ0NlbGxTdGF0ZSB7XG4gIGludmFsaWRNZXNzYWdlOiBhbnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChfOiBhbnksIG9uU3RhcnRFZGl0PzogYW55KSA9PlxuICBjbGFzcyBFZGl0aW5nQ2VsbCBleHRlbmRzIENvbXBvbmVudDxFZGl0aW5nQ2VsbFByb3BzLCBFZGl0aW5nQ2VsbFN0YXRlPiB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIHJvdzogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgcm93SW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICAgIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgY29sdW1uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICAgIG9uVXBkYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgb25Fc2NhcGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICB0aW1lVG9DbG9zZU1lc3NhZ2U6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICBhdXRvU2VsZWN0VGV4dDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB9O1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIHRpbWVUb0Nsb3NlTWVzc2FnZTogVElNRV9UT19DTE9TRV9NRVNTQUdFLFxuICAgICAgY2xhc3NOYW1lOiBudWxsLFxuICAgICAgYXV0b1NlbGVjdFRleHQ6IGZhbHNlLFxuICAgICAgc3R5bGU6IHt9LFxuICAgIH07XG5cbiAgICBlZGl0b3I6IGFueTtcbiAgICBpbmRpY2F0b3JUaW1lcjogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5pbmRpY2F0b3JUaW1lciA9IG51bGw7XG4gICAgICB0aGlzLmNsZWFyVGltZXIgPSB0aGlzLmNsZWFyVGltZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuaGFuZGxlQmx1ciA9IHRoaXMuaGFuZGxlQmx1ci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5oYW5kbGVDbGljayA9IHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IHRoaXMuaGFuZGxlS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5iZWZvcmVDb21wbGV0ZSA9IHRoaXMuYmVmb3JlQ29tcGxldGUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuYXN5bmNiZWZvcmVDb21wZXRlID0gdGhpcy5hc3luY2JlZm9yZUNvbXBldGUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZGlzcGxheUVycm9yTWVzc2FnZSA9IHRoaXMuZGlzcGxheUVycm9yTWVzc2FnZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgaW52YWxpZE1lc3NhZ2U6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhclRpbWVyKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHsgbWVzc2FnZSB9OiBhbnkpIHtcbiAgICAgIGlmIChfLmlzRGVmaW5lZChtZXNzYWdlKSkge1xuICAgICAgICB0aGlzLmNyZWF0ZVRpbWVyKCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHtcbiAgICAgICAgICBpbnZhbGlkTWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyVGltZXIoKSB7XG4gICAgICBpZiAodGhpcy5pbmRpY2F0b3JUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5pbmRpY2F0b3JUaW1lcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlVGltZXIoKSB7XG4gICAgICB0aGlzLmNsZWFyVGltZXIoKTtcbiAgICAgIGNvbnN0IHsgdGltZVRvQ2xvc2VNZXNzYWdlLCBvbkVycm9yTWVzc2FnZURpc2FwcGVhciB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHRoaXMuaW5kaWNhdG9yVGltZXIgPSBfLnNsZWVwKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICAgIGludmFsaWRNZXNzYWdlOiBudWxsLFxuICAgICAgICB9KSk7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24ob25FcnJvck1lc3NhZ2VEaXNhcHBlYXIpKSBvbkVycm9yTWVzc2FnZURpc2FwcGVhcigpO1xuICAgICAgfSwgdGltZVRvQ2xvc2VNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBkaXNwbGF5RXJyb3JNZXNzYWdlKG1lc3NhZ2U6IGFueSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICBpbnZhbGlkTWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMuY3JlYXRlVGltZXIoKTtcbiAgICB9XG5cbiAgICBhc3luY2JlZm9yZUNvbXBldGUobmV3VmFsdWU6IGFueSkge1xuICAgICAgcmV0dXJuIChyZXN1bHQgPSB7IHZhbGlkOiB0cnVlIH0pID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCB7IHZhbGlkLCBtZXNzYWdlIH0gPSByZXN1bHQ7XG4gICAgICAgIGNvbnN0IHsgb25VcGRhdGUsIHJvdywgY29sdW1uIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBvblVwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWUpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBiZWZvcmVDb21wbGV0ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgICBjb25zdCB7IG9uVXBkYXRlLCByb3csIGNvbHVtbiB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLnZhbGlkYXRvcikpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVGb3JtID0gY29sdW1uLnZhbGlkYXRvcihcbiAgICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgICByb3csXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHRoaXMuYXN5bmNiZWZvcmVDb21wZXRlKG5ld1ZhbHVlKVxuICAgICAgICApO1xuICAgICAgICBpZiAoXy5pc09iamVjdCh2YWxpZGF0ZUZvcm0pKSB7XG4gICAgICAgICAgaWYgKHZhbGlkYXRlRm9ybS5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXZhbGlkYXRlRm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlKHZhbGlkYXRlRm9ybS5tZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9uVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQmx1cigpIHtcbiAgICAgIGNvbnN0IHsgb25Fc2NhcGUsIGJsdXJUb1NhdmUgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoYmx1clRvU2F2ZSkge1xuICAgICAgICB0aGlzLmJlZm9yZUNvbXBsZXRlKHRoaXMuZWRpdG9yLmdldFZhbHVlKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25Fc2NhcGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVLZXlEb3duKGU6IGFueSkge1xuICAgICAgY29uc3QgeyBvbkVzY2FwZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgIC8vIEVTQ1xuICAgICAgICBvbkVzY2FwZSgpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgIC8vIEVOVEVSXG4gICAgICAgIHRoaXMuYmVmb3JlQ29tcGxldGUodGhpcy5lZGl0b3IuZ2V0VmFsdWUoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2xpY2soZTogYW55KSB7XG4gICAgICBpZiAoZS50YXJnZXQudGFnTmFtZSAhPT0gXCJURFwiKSB7XG4gICAgICAgIC8vIFRvIGF2b2lkIHRoZSByb3cgc2VsZWN0aW9uIGV2ZW50IGJlIHRyaWdnZXJlZCxcbiAgICAgICAgLy8gV2hlbiB1c2VyIGRlZmluZSBzZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCBhbmQgc2VsZWN0Um93LmNsaWNrVG9FZGl0XG4gICAgICAgIC8vIFdlIHNob3VsZG4ndCB0cmlnZ2VyIHNlbGVjdGlvbiBldmVudCBldmVuIGlmIHVzZXIgY2xpY2sgb24gdGhlIGNlbGwgZWRpdG9yKGlucHV0KVxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGxldCBlZGl0b3I6IGFueTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcm93LFxuICAgICAgICBjb2x1bW4sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHJvd0luZGV4LFxuICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgYXV0b1NlbGVjdFRleHQsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgZGF0YUZpZWxkIH0gPSBjb2x1bW47XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuICAgICAgY29uc3QgaGFzRXJyb3IgPSBfLmlzRGVmaW5lZCh0aGlzLnN0YXRlLmludmFsaWRNZXNzYWdlKTtcblxuICAgICAgbGV0IGN1c3RvbUVkaXRvckNsYXNzID0gY29sdW1uLmVkaXRvckNsYXNzZXMgfHwgXCJcIjtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvckNsYXNzZXMpKSB7XG4gICAgICAgIGN1c3RvbUVkaXRvckNsYXNzID0gY29sdW1uLmVkaXRvckNsYXNzZXMoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgIGNvbHVtbkluZGV4XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGxldCBlZGl0b3JTdHlsZSA9IGNvbHVtbi5lZGl0b3JTdHlsZSB8fCB7fTtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvclN0eWxlKSkge1xuICAgICAgICBlZGl0b3JTdHlsZSA9IGNvbHVtbi5lZGl0b3JTdHlsZSh2YWx1ZSwgcm93LCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlZGl0b3JDbGFzcyA9IGNzKFxuICAgICAgICB7XG4gICAgICAgICAgYW5pbWF0ZWQ6IGhhc0Vycm9yLFxuICAgICAgICAgIHNoYWtlOiBoYXNFcnJvcixcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tRWRpdG9yQ2xhc3NcbiAgICAgICk7XG5cbiAgICAgIGxldCBlZGl0b3JQcm9wcyA9IHtcbiAgICAgICAgcmVmOiAobm9kZTogYW55KSA9PiAodGhpcy5lZGl0b3IgPSBub2RlKSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgc3R5bGU6IGVkaXRvclN0eWxlLFxuICAgICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzLFxuICAgICAgICBvbktleURvd246IHRoaXMuaGFuZGxlS2V5RG93bixcbiAgICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXIsXG4gICAgICAgIGRpZE1vdW50OiAoKSA9PiB7IH0sXG4gICAgICAgIG9uVXBkYXRlOiAobmV3VmFsdWU6IGFueSkgPT4geyB9LFxuICAgICAgfTtcblxuICAgICAgaWYgKG9uU3RhcnRFZGl0KSB7XG4gICAgICAgIGVkaXRvclByb3BzLmRpZE1vdW50ID0gKCkgPT5cbiAgICAgICAgICBvblN0YXJ0RWRpdChyb3csIGNvbHVtbiwgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCA9IF8uaXNPYmplY3QoY29sdW1uLmVkaXRvcik7XG5cbiAgICAgIGlmIChpc0RlZmF1bHRFZGl0b3JEZWZpbmVkKSB7XG4gICAgICAgIGVkaXRvclByb3BzID0ge1xuICAgICAgICAgIC4uLmVkaXRvclByb3BzLFxuICAgICAgICAgIC4uLmNvbHVtbi5lZGl0b3IsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yUmVuZGVyZXIpKSB7XG4gICAgICAgIGVkaXRvclByb3BzID0ge1xuICAgICAgICAgIC4uLmVkaXRvclByb3BzLFxuICAgICAgICAgIG9uVXBkYXRlOiB0aGlzLmJlZm9yZUNvbXBsZXRlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi5lZGl0b3JSZW5kZXJlcikpIHtcbiAgICAgICAgZWRpdG9yID0gY29sdW1uLmVkaXRvclJlbmRlcmVyIShcbiAgICAgICAgICBlZGl0b3JQcm9wcyxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICByb3csXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgIGNvbHVtbkluZGV4XG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmXG4gICAgICAgIGNvbHVtbi5lZGl0b3I/LnR5cGUgPT09IEVESVRUWVBFLlNFTEVDVFxuICAgICAgKSB7XG4gICAgICAgIGVkaXRvciA9IDxEcm9wZG93bkVkaXRvciB7Li4uZWRpdG9yUHJvcHN9IHJvdz17cm93fSBjb2x1bW49e2NvbHVtbn0gLz47XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmXG4gICAgICAgIGNvbHVtbi5lZGl0b3I/LnR5cGUgPT09IEVESVRUWVBFLlRFWFRBUkVBXG4gICAgICApIHtcbiAgICAgICAgZWRpdG9yID0gKFxuICAgICAgICAgIDxUZXh0QXJlYUVkaXRvciB7Li4uZWRpdG9yUHJvcHN9IGF1dG9TZWxlY3RUZXh0PXthdXRvU2VsZWN0VGV4dH0gLz5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiZcbiAgICAgICAgY29sdW1uLmVkaXRvcj8udHlwZSA9PT0gRURJVFRZUEUuQ0hFQ0tCT1hcbiAgICAgICkge1xuICAgICAgICBlZGl0b3IgPSA8Q2hlY2tCb3hFZGl0b3Igey4uLmVkaXRvclByb3BzfSAvPjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiZcbiAgICAgICAgY29sdW1uLmVkaXRvcj8udHlwZSA9PT0gRURJVFRZUEUuREFURVxuICAgICAgKSB7XG4gICAgICAgIGVkaXRvciA9IDxEYXRlRWRpdG9yIHsuLi5lZGl0b3JQcm9wc30gLz47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3IgPSAoXG4gICAgICAgICAgPFRleHRFZGl0b3Igey4uLmVkaXRvclByb3BzfSBhdXRvU2VsZWN0VGV4dD17YXV0b1NlbGVjdFRleHR9IC8+XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDx0ZFxuICAgICAgICAgIGNsYXNzTmFtZT17Y3MoXCJyZWFjdC1ib290c3RyYXAtdGFibGUtZWRpdGluZy1jZWxsXCIsIGNsYXNzTmFtZSl9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9XG4gICAgICAgID5cbiAgICAgICAgICB7ZWRpdG9yfVxuICAgICAgICAgIHtoYXNFcnJvciA/IChcbiAgICAgICAgICAgIDxFZGl0b3JJbmRpY2F0b3IgaW52YWxpZE1lc3NhZ2U9e3RoaXMuc3RhdGUuaW52YWxpZE1lc3NhZ2V9IC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvdGQ+XG4gICAgICApO1xuICAgIH1cbiAgfTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuLyogZXNsaW50IGNsYXNzLW1ldGhvZHMtdXNlLXRoaXM6IDAgKi9cbi8qIGVzbGludCBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS1lbGVtZW50LWludGVyYWN0aW9uczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcHJvcF90eXBlc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uXCIpO1xudmFyIGNoZWNrYm94X2VkaXRvcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2NoZWNrYm94LWVkaXRvclwiKSk7XG52YXIgZGF0ZV9lZGl0b3JfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9kYXRlLWVkaXRvclwiKSk7XG52YXIgZHJvcGRvd25fZWRpdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZHJvcGRvd24tZWRpdG9yXCIpKTtcbnZhciBlZGl0b3JfaW5kaWNhdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZWRpdG9yLWluZGljYXRvclwiKSk7XG52YXIgdGV4dF9lZGl0b3JfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi90ZXh0LWVkaXRvclwiKSk7XG52YXIgdGV4dGFyZWFfZWRpdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdGV4dGFyZWEtZWRpdG9yXCIpKTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKF8sIG9uU3RhcnRFZGl0KSB7XG4gIHZhciBfYTtcbiAgcmV0dXJuIF9hID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgICBmdW5jdGlvbiBFZGl0aW5nQ2VsbChwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEVkaXRpbmdDZWxsKTtcbiAgICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFZGl0aW5nQ2VsbCwgW3Byb3BzXSk7XG4gICAgICBfdGhpcy5pbmRpY2F0b3JUaW1lciA9IG51bGw7XG4gICAgICBfdGhpcy5jbGVhclRpbWVyID0gX3RoaXMuY2xlYXJUaW1lci5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmhhbmRsZUJsdXIgPSBfdGhpcy5oYW5kbGVCbHVyLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuaGFuZGxlQ2xpY2sgPSBfdGhpcy5oYW5kbGVDbGljay5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmhhbmRsZUtleURvd24gPSBfdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuYmVmb3JlQ29tcGxldGUgPSBfdGhpcy5iZWZvcmVDb21wbGV0ZS5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmFzeW5jYmVmb3JlQ29tcGV0ZSA9IF90aGlzLmFzeW5jYmVmb3JlQ29tcGV0ZS5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2UgPSBfdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIGludmFsaWRNZXNzYWdlOiBudWxsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfaW5oZXJpdHMoRWRpdGluZ0NlbGwsIF9yZWFjdF8xJENvbXBvbmVudCk7XG4gICAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFZGl0aW5nQ2VsbCwgW3tcbiAgICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICB0aGlzLmNsZWFyVGltZXIoKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKF9yZWYpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBfcmVmLm1lc3NhZ2U7XG4gICAgICAgIGlmIChfLmlzRGVmaW5lZChtZXNzYWdlKSkge1xuICAgICAgICAgIHRoaXMuY3JlYXRlVGltZXIoKTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGludmFsaWRNZXNzYWdlOiBtZXNzYWdlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNsZWFyVGltZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhclRpbWVyKCkge1xuICAgICAgICBpZiAodGhpcy5pbmRpY2F0b3JUaW1lcikge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmluZGljYXRvclRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJjcmVhdGVUaW1lclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZVRpbWVyKCkge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgICAgdGhpcy5jbGVhclRpbWVyKCk7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgdGltZVRvQ2xvc2VNZXNzYWdlID0gX3RoaXMkcHJvcHMudGltZVRvQ2xvc2VNZXNzYWdlLFxuICAgICAgICAgIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyID0gX3RoaXMkcHJvcHMub25FcnJvck1lc3NhZ2VEaXNhcHBlYXI7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yVGltZXIgPSBfLnNsZWVwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaW52YWxpZE1lc3NhZ2U6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihvbkVycm9yTWVzc2FnZURpc2FwcGVhcikpIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyKCk7XG4gICAgICAgIH0sIHRpbWVUb0Nsb3NlTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImRpc3BsYXlFcnJvck1lc3NhZ2VcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwbGF5RXJyb3JNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGludmFsaWRNZXNzYWdlOiBtZXNzYWdlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY3JlYXRlVGltZXIoKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiYXN5bmNiZWZvcmVDb21wZXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gYXN5bmNiZWZvcmVDb21wZXRlKG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHtcbiAgICAgICAgICAgIHZhbGlkOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgdmFyIHZhbGlkID0gcmVzdWx0LnZhbGlkLFxuICAgICAgICAgICAgbWVzc2FnZSA9IHJlc3VsdC5tZXNzYWdlO1xuICAgICAgICAgIHZhciBfdGhpczMkcHJvcHMgPSBfdGhpczMucHJvcHMsXG4gICAgICAgICAgICBvblVwZGF0ZSA9IF90aGlzMyRwcm9wcy5vblVwZGF0ZSxcbiAgICAgICAgICAgIHJvdyA9IF90aGlzMyRwcm9wcy5yb3csXG4gICAgICAgICAgICBjb2x1bW4gPSBfdGhpczMkcHJvcHMuY29sdW1uO1xuICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIF90aGlzMy5kaXNwbGF5RXJyb3JNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvblVwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJiZWZvcmVDb21wbGV0ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJlZm9yZUNvbXBsZXRlKG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIG9uVXBkYXRlID0gX3RoaXMkcHJvcHMyLm9uVXBkYXRlLFxuICAgICAgICAgIHJvdyA9IF90aGlzJHByb3BzMi5yb3csXG4gICAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMyLmNvbHVtbjtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4udmFsaWRhdG9yKSkge1xuICAgICAgICAgIHZhciB2YWxpZGF0ZUZvcm0gPSBjb2x1bW4udmFsaWRhdG9yKG5ld1ZhbHVlLCByb3csIGNvbHVtbiwgdGhpcy5hc3luY2JlZm9yZUNvbXBldGUobmV3VmFsdWUpKTtcbiAgICAgICAgICBpZiAoXy5pc09iamVjdCh2YWxpZGF0ZUZvcm0pKSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGVGb3JtLmFzeW5jKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXZhbGlkYXRlRm9ybS52YWxpZCkge1xuICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2UodmFsaWRhdGVGb3JtLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImhhbmRsZUJsdXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVCbHVyKCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkVzY2FwZSA9IF90aGlzJHByb3BzMy5vbkVzY2FwZSxcbiAgICAgICAgICBibHVyVG9TYXZlID0gX3RoaXMkcHJvcHMzLmJsdXJUb1NhdmU7XG4gICAgICAgIGlmIChibHVyVG9TYXZlKSB7XG4gICAgICAgICAgdGhpcy5iZWZvcmVDb21wbGV0ZSh0aGlzLmVkaXRvci5nZXRWYWx1ZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbkVzY2FwZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImhhbmRsZUtleURvd25cIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGUpIHtcbiAgICAgICAgdmFyIG9uRXNjYXBlID0gdGhpcy5wcm9wcy5vbkVzY2FwZTtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICAvLyBFU0NcbiAgICAgICAgICBvbkVzY2FwZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAvLyBFTlRFUlxuICAgICAgICAgIHRoaXMuYmVmb3JlQ29tcGxldGUodGhpcy5lZGl0b3IuZ2V0VmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiaGFuZGxlQ2xpY2tcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDbGljayhlKSB7XG4gICAgICAgIGlmIChlLnRhcmdldC50YWdOYW1lICE9PSBcIlREXCIpIHtcbiAgICAgICAgICAvLyBUbyBhdm9pZCB0aGUgcm93IHNlbGVjdGlvbiBldmVudCBiZSB0cmlnZ2VyZWQsXG4gICAgICAgICAgLy8gV2hlbiB1c2VyIGRlZmluZSBzZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCBhbmQgc2VsZWN0Um93LmNsaWNrVG9FZGl0XG4gICAgICAgICAgLy8gV2Ugc2hvdWxkbid0IHRyaWdnZXIgc2VsZWN0aW9uIGV2ZW50IGV2ZW4gaWYgdXNlciBjbGljayBvbiB0aGUgY2VsbCBlZGl0b3IoaW5wdXQpXG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHZhciBfdGhpczQgPSB0aGlzLFxuICAgICAgICAgIF9jb2x1bW4kZWRpdG9yLFxuICAgICAgICAgIF9jb2x1bW4kZWRpdG9yMixcbiAgICAgICAgICBfY29sdW1uJGVkaXRvcjMsXG4gICAgICAgICAgX2NvbHVtbiRlZGl0b3I0O1xuICAgICAgICB2YXIgZWRpdG9yO1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICByb3cgPSBfdGhpcyRwcm9wczQucm93LFxuICAgICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzNC5jb2x1bW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM0LmNsYXNzTmFtZSxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNC5zdHlsZSxcbiAgICAgICAgICByb3dJbmRleCA9IF90aGlzJHByb3BzNC5yb3dJbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleCA9IF90aGlzJHByb3BzNC5jb2x1bW5JbmRleCxcbiAgICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzNC5hdXRvU2VsZWN0VGV4dDtcbiAgICAgICAgdmFyIGRhdGFGaWVsZCA9IGNvbHVtbi5kYXRhRmllbGQ7XG4gICAgICAgIHZhciB2YWx1ZSA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgICAgdmFyIGhhc0Vycm9yID0gXy5pc0RlZmluZWQodGhpcy5zdGF0ZS5pbnZhbGlkTWVzc2FnZSk7XG4gICAgICAgIHZhciBjdXN0b21FZGl0b3JDbGFzcyA9IGNvbHVtbi5lZGl0b3JDbGFzc2VzIHx8IFwiXCI7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvckNsYXNzZXMpKSB7XG4gICAgICAgICAgY3VzdG9tRWRpdG9yQ2xhc3MgPSBjb2x1bW4uZWRpdG9yQ2xhc3Nlcyh2YWx1ZSwgcm93LCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlZGl0b3JTdHlsZSA9IGNvbHVtbi5lZGl0b3JTdHlsZSB8fCB7fTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yU3R5bGUpKSB7XG4gICAgICAgICAgZWRpdG9yU3R5bGUgPSBjb2x1bW4uZWRpdG9yU3R5bGUodmFsdWUsIHJvdywgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoe1xuICAgICAgICAgIGFuaW1hdGVkOiBoYXNFcnJvcixcbiAgICAgICAgICBzaGFrZTogaGFzRXJyb3JcbiAgICAgICAgfSwgY3VzdG9tRWRpdG9yQ2xhc3MpO1xuICAgICAgICB2YXIgZWRpdG9yUHJvcHMgPSB7XG4gICAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5lZGl0b3IgPSBub2RlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBzdHlsZTogZWRpdG9yU3R5bGUsXG4gICAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzcyxcbiAgICAgICAgICBvbktleURvd246IHRoaXMuaGFuZGxlS2V5RG93bixcbiAgICAgICAgICBvbkJsdXI6IHRoaXMuaGFuZGxlQmx1cixcbiAgICAgICAgICBkaWRNb3VudDogZnVuY3Rpb24gZGlkTW91bnQoKSB7fSxcbiAgICAgICAgICBvblVwZGF0ZTogZnVuY3Rpb24gb25VcGRhdGUobmV3VmFsdWUpIHt9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvblN0YXJ0RWRpdCkge1xuICAgICAgICAgIGVkaXRvclByb3BzLmRpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG9uU3RhcnRFZGl0KHJvdywgY29sdW1uLCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlzRGVmYXVsdEVkaXRvckRlZmluZWQgPSBfLmlzT2JqZWN0KGNvbHVtbi5lZGl0b3IpO1xuICAgICAgICBpZiAoaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCkge1xuICAgICAgICAgIGVkaXRvclByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcyksIGNvbHVtbi5lZGl0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yUmVuZGVyZXIpKSB7XG4gICAgICAgICAgZWRpdG9yUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVkaXRvclByb3BzKSwge30sIHtcbiAgICAgICAgICAgIG9uVXBkYXRlOiB0aGlzLmJlZm9yZUNvbXBsZXRlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yUmVuZGVyZXIpKSB7XG4gICAgICAgICAgZWRpdG9yID0gY29sdW1uLmVkaXRvclJlbmRlcmVyKGVkaXRvclByb3BzLCB2YWx1ZSwgcm93LCBjb2x1bW4sIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCAmJiAoKF9jb2x1bW4kZWRpdG9yID0gY29sdW1uLmVkaXRvcikgPT09IG51bGwgfHwgX2NvbHVtbiRlZGl0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb2x1bW4kZWRpdG9yLnR5cGUpID09PSBfXzEuRURJVFRZUEUuU0VMRUNUKSB7XG4gICAgICAgICAgZWRpdG9yID0gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChkcm9wZG93bl9lZGl0b3JfMVtcImRlZmF1bHRcIl0sIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWRpdG9yUHJvcHMpLCB7fSwge1xuICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICBjb2x1bW46IGNvbHVtblxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmICgoX2NvbHVtbiRlZGl0b3IyID0gY29sdW1uLmVkaXRvcikgPT09IG51bGwgfHwgX2NvbHVtbiRlZGl0b3IyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uJGVkaXRvcjIudHlwZSkgPT09IF9fMS5FRElUVFlQRS5URVhUQVJFQSkge1xuICAgICAgICAgIGVkaXRvciA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQodGV4dGFyZWFfZWRpdG9yXzFbXCJkZWZhdWx0XCJdLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVkaXRvclByb3BzKSwge30sIHtcbiAgICAgICAgICAgIGF1dG9TZWxlY3RUZXh0OiBhdXRvU2VsZWN0VGV4dFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmICgoX2NvbHVtbiRlZGl0b3IzID0gY29sdW1uLmVkaXRvcikgPT09IG51bGwgfHwgX2NvbHVtbiRlZGl0b3IzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uJGVkaXRvcjMudHlwZSkgPT09IF9fMS5FRElUVFlQRS5DSEVDS0JPWCkge1xuICAgICAgICAgIGVkaXRvciA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoY2hlY2tib3hfZWRpdG9yXzFbXCJkZWZhdWx0XCJdLCBfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcykpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiYgKChfY29sdW1uJGVkaXRvcjQgPSBjb2x1bW4uZWRpdG9yKSA9PT0gbnVsbCB8fCBfY29sdW1uJGVkaXRvcjQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb2x1bW4kZWRpdG9yNC50eXBlKSA9PT0gX18xLkVESVRUWVBFLkRBVEUpIHtcbiAgICAgICAgICBlZGl0b3IgPSByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KGRhdGVfZWRpdG9yXzFbXCJkZWZhdWx0XCJdLCBfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVkaXRvciA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQodGV4dF9lZGl0b3JfMVtcImRlZmF1bHRcIl0sIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWRpdG9yUHJvcHMpLCB7fSwge1xuICAgICAgICAgICAgYXV0b1NlbGVjdFRleHQ6IGF1dG9TZWxlY3RUZXh0XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwidGRcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogKDAsIGNsYXNzbmFtZXNfMVtcImRlZmF1bHRcIl0pKFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLWVkaXRpbmctY2VsbFwiLCBjbGFzc05hbWUpLFxuICAgICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZUNsaWNrXG4gICAgICAgIH0sIGVkaXRvciwgaGFzRXJyb3IgPyByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KGVkaXRvcl9pbmRpY2F0b3JfMVtcImRlZmF1bHRcIl0sIHtcbiAgICAgICAgICBpbnZhbGlkTWVzc2FnZTogdGhpcy5zdGF0ZS5pbnZhbGlkTWVzc2FnZVxuICAgICAgICB9KSA6IG51bGwpO1xuICAgICAgfVxuICAgIH1dKTtcbiAgfShyZWFjdF8xLkNvbXBvbmVudCksIF9hLnByb3BUeXBlcyA9IHtcbiAgICByb3c6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgcm93SW5kZXg6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgY29sdW1uOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIGNvbHVtbkluZGV4OiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIG9uVXBkYXRlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkVzY2FwZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdGltZVRvQ2xvc2VNZXNzYWdlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm51bWJlcixcbiAgICBhdXRvU2VsZWN0VGV4dDogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5ib29sLFxuICAgIGNsYXNzTmFtZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5zdHJpbmcsXG4gICAgc3R5bGU6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ub2JqZWN0XG4gIH0sIF9hLmRlZmF1bHRQcm9wcyA9IHtcbiAgICB0aW1lVG9DbG9zZU1lc3NhZ2U6IF9fMS5USU1FX1RPX0NMT1NFX01FU1NBR0UsXG4gICAgY2xhc3NOYW1lOiBudWxsLFxuICAgIGF1dG9TZWxlY3RUZXh0OiBmYWxzZSxcbiAgICBzdHlsZToge31cbiAgfSwgX2E7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIGNvbnRleHRfMSA9IHJlcXVpcmUoXCIuL2NvbnRleHRcIik7XG52YXIgZWRpdGluZ19jZWxsXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZWRpdGluZy1jZWxsXCIpKTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKF8sIG9uU3RhcnRFZGl0KSB7XG4gIHZhciBFZGl0aW5nQ2VsbCA9ICgwLCBlZGl0aW5nX2NlbGxfMVtcImRlZmF1bHRcIl0pKF8sIG9uU3RhcnRFZGl0KTtcbiAgdmFyIHJlbmRlcldpdGhFZGl0aW5nQ2VsbCA9IGZ1bmN0aW9uIHJlbmRlcldpdGhFZGl0aW5nQ2VsbChwcm9wcywgY2VsbEVkaXQpIHtcbiAgICB2YXIgY29udGVudCA9IF8uZ2V0KHByb3BzLnJvdywgcHJvcHMuY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgdmFyIGVkaXRDZWxsc3R5bGUgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxTdHlsZSB8fCB7fTtcbiAgICB2YXIgZWRpdENlbGxjbGFzc2VzID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsQ2xhc3NlcztcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlKSkge1xuICAgICAgZWRpdENlbGxzdHlsZSA9IHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlKGNvbnRlbnQsIHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgsIHByb3BzLmNvbHVtbkluZGV4KTtcbiAgICB9XG4gICAgaWYgKF8uaXNGdW5jdGlvbihwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzKSkge1xuICAgICAgZWRpdENlbGxjbGFzc2VzID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsQ2xhc3Nlcyhjb250ZW50LCBwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4LCBwcm9wcy5jb2x1bW5JbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KEVkaXRpbmdDZWxsLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIGNsYXNzTmFtZTogZWRpdENlbGxjbGFzc2VzLFxuICAgICAgc3R5bGU6IGVkaXRDZWxsc3R5bGVcbiAgICB9LCBjZWxsRWRpdCkpO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoY29udGV4dF8xLkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoY2VsbEVkaXQpIHtcbiAgICAgIHJldHVybiByZW5kZXJXaXRoRWRpdGluZ0NlbGwocHJvcHMsIGNlbGxFZGl0KTtcbiAgICB9KTtcbiAgfTtcbn07IiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENvbnN1bWVyIH0gZnJvbSBcIi4vY29udGV4dFwiO1xuaW1wb3J0IGNyZWF0ZUVkaXRpbmdDZWxsIGZyb20gXCIuL2VkaXRpbmctY2VsbFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoXzogYW55LCBvblN0YXJ0RWRpdD86IGFueSkgPT4ge1xuICBjb25zdCBFZGl0aW5nQ2VsbCA9IGNyZWF0ZUVkaXRpbmdDZWxsKF8sIG9uU3RhcnRFZGl0KTtcbiAgY29uc3QgcmVuZGVyV2l0aEVkaXRpbmdDZWxsID0gKHByb3BzOiBhbnksIGNlbGxFZGl0OiBhbnkpID0+IHtcbiAgICBjb25zdCBjb250ZW50ID0gXy5nZXQocHJvcHMucm93LCBwcm9wcy5jb2x1bW4uZGF0YUZpZWxkKTtcbiAgICBsZXQgZWRpdENlbGxzdHlsZSA9IHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlIHx8IHt9O1xuICAgIGxldCBlZGl0Q2VsbGNsYXNzZXMgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzO1xuICAgIGlmIChfLmlzRnVuY3Rpb24ocHJvcHMuY29sdW1uLmVkaXRDZWxsU3R5bGUpKSB7XG4gICAgICBlZGl0Q2VsbHN0eWxlID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsU3R5bGUoXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHByb3BzLnJvdyxcbiAgICAgICAgcHJvcHMucm93SW5kZXgsXG4gICAgICAgIHByb3BzLmNvbHVtbkluZGV4XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHByb3BzLmNvbHVtbi5lZGl0Q2VsbENsYXNzZXMpKSB7XG4gICAgICBlZGl0Q2VsbGNsYXNzZXMgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzKFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBwcm9wcy5yb3csXG4gICAgICAgIHByb3BzLnJvd0luZGV4LFxuICAgICAgICBwcm9wcy5jb2x1bW5JbmRleFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEVkaXRpbmdDZWxsXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0Q2VsbGNsYXNzZXN9XG4gICAgICAgIHN0eWxlPXtlZGl0Q2VsbHN0eWxlfVxuICAgICAgICB7Li4uY2VsbEVkaXR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIChwcm9wczogYW55KSA9PiAoXG4gICAgPENvbnN1bWVyPnsoY2VsbEVkaXQpID0+IHJlbmRlcldpdGhFZGl0aW5nQ2VsbChwcm9wcywgY2VsbEVkaXQpfTwvQ29uc3VtZXI+XG4gICk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXzsiLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBUZXh0RWRpdG9yUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bWJlcjtcbiAgYXV0b1NlbGVjdFRleHQ/OiBib29sZWFuO1xuICBkaWRNb3VudD86ICgpID0+IHZvaWQ7XG4gIG9uS2V5RG93bjogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG59XG5cbmNsYXNzIFRleHRBcmVhRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50PFRleHRFZGl0b3JQcm9wcz4ge1xuICB0ZXh0OiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBUZXh0RWRpdG9yUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVLZXlEb3duID0gdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQodGhpcyk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBudWxsLFxuICAgICAgZGlkTW91bnQsXG4gICAgICBhdXRvU2VsZWN0VGV4dCA9IGZhbHNlLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMudGV4dC52YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLnRleHQuZm9jdXMoKTtcbiAgICBpZiAoYXV0b1NlbGVjdFRleHQpIHRoaXMudGV4dC5zZWxlY3QoKTtcbiAgICBpZiAoZGlkTW91bnQpIGRpZE1vdW50KCk7XG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0LnZhbHVlO1xuICB9XG5cbiAgaGFuZGxlS2V5RG93bihlOiBhbnkpIHtcbiAgICBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiAhZS5zaGlmdEtleSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnByb3BzLm9uS2V5RG93bikge1xuICAgICAgdGhpcy5wcm9wcy5vbktleURvd24oZSk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IFwiXCIsXG4gICAgICBkaWRNb3VudCxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBhdXRvU2VsZWN0VGV4dCA9IGZhbHNlLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGVkaXRvckNsYXNzID0gY3MoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0YXJlYVwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIHJlZj17KG5vZGUpID0+ICh0aGlzLnRleHQgPSBub2RlKX1cbiAgICAgICAgLy8gdHlwZT1cInRleHRhcmVhXCJcbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0b3JDbGFzc31cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlEb3dufVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cbi8vIFRleHRBcmVhRWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSksXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuLy8gICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuLy8gICBhdXRvU2VsZWN0VGV4dDogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG5cbi8vIFRleHRBcmVhRWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBcIlwiLFxuLy8gICBkZWZhdWx0VmFsdWU6IFwiXCIsXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBmYWxzZSxcbi8vICAgb25LZXlEb3duOiB1bmRlZmluZWQsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0QXJlYUVkaXRvcjtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG4vKiBlc2xpbnQgcmVhY3Qvbm8tdW51c2VkLXByb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIENMSUNLX1RPX0NFTExfRURJVCxcbiAgQ2VsbEVkaXRQcm92aWRlclByb3BzLFxuICBDZWxsRWRpdFByb3ZpZGVyU3RhdGUsXG4gIERCQ0xJQ0tfVE9fQ0VMTF9FRElULFxufSBmcm9tIFwiLi5cIjtcblxuY29uc3QgQ2VsbEVkaXRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxhbnk+KG51bGwpO1xuXG5leHBvcnQgZGVmYXVsdCAoXG4gIF86IGFueSxcbiAgZGF0YU9wZXJhdG9yPzogYW55LFxuICBpc1JlbW90ZUNlbGxFZGl0PzogYW55LFxuICBoYW5kbGVDZWxsQ2hhbmdlPzogYW55XG4pID0+IHtcbiAgY2xhc3MgQ2VsbEVkaXRQcm92aWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgICBDZWxsRWRpdFByb3ZpZGVyUHJvcHMsXG4gICAgQ2VsbEVkaXRQcm92aWRlclN0YXRlXG4gID4ge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICAgIHNlbGVjdFJvdzogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIG1vZGU6IFByb3BUeXBlcy5vbmVPZihbQ0xJQ0tfVE9fQ0VMTF9FRElULCBEQkNMSUNLX1RPX0NFTExfRURJVF0pXG4gICAgICAgICAgLmlzUmVxdWlyZWQsXG4gICAgICAgIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgYmx1clRvU2F2ZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIGJlZm9yZVNhdmVDZWxsOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgYWZ0ZXJTYXZlQ2VsbDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIG9uU3RhcnRFZGl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgbm9uRWRpdGFibGVSb3dzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgdGltZVRvQ2xvc2VNZXNzYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBlcnJvck1lc3NhZ2U6IFByb3BUeXBlcy5hbnksXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5kb1VwZGF0ZSA9IHRoaXMuZG9VcGRhdGUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuc3RhcnRFZGl0aW5nID0gdGhpcy5zdGFydEVkaXRpbmcuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZXNjYXBlRWRpdGluZyA9IHRoaXMuZXNjYXBlRWRpdGluZy5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5jb21wbGV0ZUVkaXRpbmcgPSB0aGlzLmNvbXBsZXRlRWRpdGluZy5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5oYW5kbGVDZWxsVXBkYXRlID0gdGhpcy5oYW5kbGVDZWxsVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICByaWR4OiBudWxsLFxuICAgICAgICBjaWR4OiBudWxsLFxuICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgICAgaWYgKFxuICAgICAgICBuZXh0UHJvcHMuY2VsbEVkaXQgJiZcbiAgICAgICAgXy5pc0Z1bmN0aW9uKGlzUmVtb3RlQ2VsbEVkaXQpICYmXG4gICAgICAgIGlzUmVtb3RlQ2VsbEVkaXQoKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChuZXh0UHJvcHMuY2VsbEVkaXQub3B0aW9ucy5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogbmV4dFByb3BzLmNlbGxFZGl0Lm9wdGlvbnMuZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJpZHg6IHByZXZTdGF0ZS5yaWR4LFxuICAgICAgICAgICAgY2lkeDogcHJldlN0YXRlLmNpZHgsXG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNlbGxVcGRhdGUocm93OiBhbnksIGNvbHVtbjogYW55LCBuZXdWYWx1ZTogYW55KSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZVdpdGhUeXBlID0gZGF0YU9wZXJhdG9yLnR5cGVDb252ZXJ0KGNvbHVtbi50eXBlLCBuZXdWYWx1ZSk7XG4gICAgICBjb25zdCB7IGNlbGxFZGl0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBiZWZvcmVTYXZlQ2VsbCB9ID0gY2VsbEVkaXQub3B0aW9ucztcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gXy5nZXQocm93LCBjb2x1bW4uZGF0YUZpZWxkKTtcbiAgICAgIGNvbnN0IGJlZm9yZVNhdmVDZWxsRG9uZSA9IChyZXN1bHQgPSB0cnVlKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICB0aGlzLmRvVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZVdpdGhUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVzY2FwZUVkaXRpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oYmVmb3JlU2F2ZUNlbGwpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGJlZm9yZVNhdmVDZWxsKFxuICAgICAgICAgIG9sZFZhbHVlLFxuICAgICAgICAgIG5ld1ZhbHVlV2l0aFR5cGUsXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICBiZWZvcmVTYXZlQ2VsbERvbmVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSAmJiByZXN1bHQuYXN5bmMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZG9VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlV2l0aFR5cGUpO1xuICAgIH1cblxuICAgIGRvVXBkYXRlKHJvdzogYW55LCBjb2x1bW46IGFueSwgbmV3VmFsdWU6IGFueSkge1xuICAgICAgY29uc3QgeyBrZXlGaWVsZCwgY2VsbEVkaXQsIGRhdGEgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGFmdGVyU2F2ZUNlbGwgfSA9IGNlbGxFZGl0Lm9wdGlvbnM7XG4gICAgICBjb25zdCByb3dJZCA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSBfLmdldChyb3csIGNvbHVtbi5kYXRhRmllbGQpO1xuICAgICAgaWYgKGlzUmVtb3RlQ2VsbEVkaXQoKSkge1xuICAgICAgICBoYW5kbGVDZWxsQ2hhbmdlKHJvd0lkLCBjb2x1bW4uZGF0YUZpZWxkLCBuZXdWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhT3BlcmF0b3IuZWRpdENlbGwoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgICByb3dJZCxcbiAgICAgICAgICBjb2x1bW4uZGF0YUZpZWxkLFxuICAgICAgICAgIG5ld1ZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oYWZ0ZXJTYXZlQ2VsbCkpIHtcbiAgICAgICAgICBhZnRlclNhdmVDZWxsKG9sZFZhbHVlLCBuZXdWYWx1ZSwgcm93LCBjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tcGxldGVFZGl0aW5nKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGxldGVFZGl0aW5nKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICByaWR4OiBudWxsLFxuICAgICAgICBjaWR4OiBudWxsLFxuICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHN0YXJ0RWRpdGluZyhyaWR4OiBhbnksIGNpZHg6IGFueSkge1xuICAgICAgY29uc3QgZWRpdGluZyA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICAgIHJpZHgsXG4gICAgICAgICAgY2lkeCxcbiAgICAgICAgfSkpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgeyBzZWxlY3RSb3cgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoIXNlbGVjdFJvdyB8fCBzZWxlY3RSb3cuY2xpY2tUb0VkaXQgfHwgIXNlbGVjdFJvdy5jbGlja1RvU2VsZWN0KSB7XG4gICAgICAgIGVkaXRpbmcoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlc2NhcGVFZGl0aW5nKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICByaWR4OiBudWxsLFxuICAgICAgICBjaWR4OiBudWxsLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2VsbEVkaXQ6IHtcbiAgICAgICAgICBvcHRpb25zOiB7IG5vbkVkaXRhYmxlUm93cywgZXJyb3JNZXNzYWdlLCAuLi5vcHRpb25zUmVzdCB9LFxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICByaWR4OiBwcm9wUmlkeCxcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgY2lkeDogcHJvcENpZHgsXG4gICAgICAgICAgLi4uY2VsbEVkaXRSZXN0XG4gICAgICAgIH0sXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3QgbmV3Q2VsbEVkaXQgPSB7XG4gICAgICAgIC4uLm9wdGlvbnNSZXN0LFxuICAgICAgICAuLi5jZWxsRWRpdFJlc3QsXG4gICAgICAgIHJpZHg6IHRoaXMuc3RhdGUucmlkeCAhPT0gbnVsbCA/IHRoaXMuc3RhdGUucmlkeCA6IChwcm9wUmlkeCA/PyBudWxsKSxcbiAgICAgICAgY2lkeDogdGhpcy5zdGF0ZS5jaWR4ICE9PSBudWxsID8gdGhpcy5zdGF0ZS5jaWR4IDogKHByb3BDaWR4ID8/IG51bGwpLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLnN0YXRlLm1lc3NhZ2UsXG4gICAgICAgIG5vbkVkaXRhYmxlUm93czogXy5pc0RlZmluZWQobm9uRWRpdGFibGVSb3dzKSA/IG5vbkVkaXRhYmxlUm93cygpIDogW10sXG4gICAgICAgIGF0c3RhcnQ6IHRoaXMuc3RhcnRFZGl0aW5nLFxuICAgICAgICBvbkVzY2FwZTogdGhpcy5lc2NhcGVFZGl0aW5nLFxuICAgICAgICBvblVwZGF0ZTogdGhpcy5oYW5kbGVDZWxsVXBkYXRlLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENlbGxFZGl0Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17eyAuLi5uZXdDZWxsRWRpdCB9fT5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgPC9DZWxsRWRpdENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIFByb3ZpZGVyOiBDZWxsRWRpdFByb3ZpZGVyLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IENvbnN1bWVyID0gQ2VsbEVkaXRDb250ZXh0LkNvbnN1bWVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJkZWZhdWx0VmFsdWVcIiwgXCJkaWRNb3VudFwiLCBcImNsYXNzTmFtZVwiLCBcIm9uVXBkYXRlXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbnZhciBjbGFzc25hbWVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsYXNzbmFtZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBDaGVja0JveEVkaXRvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIENoZWNrQm94RWRpdG9yKHByb3BzKSB7XG4gICAgdmFyIF9wcm9wcyRkZWZhdWx0VmFsdWUsIF9wcm9wcyR2YWx1ZTtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENoZWNrQm94RWRpdG9yKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgQ2hlY2tCb3hFZGl0b3IsIFtwcm9wc10pO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY2hlY2tlZDogKChfcHJvcHMkZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlKSAhPT0gbnVsbCAmJiBfcHJvcHMkZGVmYXVsdFZhbHVlICE9PSB2b2lkIDAgPyBfcHJvcHMkZGVmYXVsdFZhbHVlIDogZmFsc2UpLnRvU3RyaW5nKCkgPT09ICgoX3Byb3BzJHZhbHVlID0gcHJvcHMudmFsdWUpICE9PSBudWxsICYmIF9wcm9wcyR2YWx1ZSAhPT0gdm9pZCAwID8gX3Byb3BzJHZhbHVlIDogXCJvbjpvZmZcIikuc3BsaXQoXCI6XCIpWzBdXG4gICAgfTtcbiAgICBfdGhpcy5oYW5kbGVDaGFuZ2UgPSBfdGhpcy5oYW5kbGVDaGFuZ2UuYmluZChfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhDaGVja0JveEVkaXRvciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhDaGVja0JveEVkaXRvciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgZGlkTW91bnQgPSB0aGlzLnByb3BzLmRpZE1vdW50O1xuICAgICAgdGhpcy5jaGVja2JveC5mb2N1cygpO1xuICAgICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyR2YWx1ZTtcbiAgICAgIHZhciBfc3BsaXQgPSAoKF90aGlzJHByb3BzJHZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZSkgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkdmFsdWUgIT09IHZvaWQgMCA/IF90aGlzJHByb3BzJHZhbHVlIDogXCJvbjpvZmZcIikuc3BsaXQoXCI6XCIpLFxuICAgICAgICBfc3BsaXQyID0gX3NsaWNlZFRvQXJyYXkoX3NwbGl0LCAyKSxcbiAgICAgICAgcG9zaXRpdmUgPSBfc3BsaXQyWzBdLFxuICAgICAgICBuZWdhdGl2ZSA9IF9zcGxpdDJbMV07XG4gICAgICByZXR1cm4gdGhpcy5jaGVja2JveC5jaGVja2VkID8gcG9zaXRpdmUgOiBuZWdhdGl2ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFuZGxlQ2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShlKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkgdGhpcy5wcm9wcy5vbkNoYW5nZShlKTtcbiAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNoZWNrZWQ6IHRhcmdldC5jaGVja2VkXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMkZGVmYXVsdFZhLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzLmRpZE1vdW50LFxuICAgICAgICBfdGhpcyRwcm9wcyRjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzJGNsYXNzTmFtZSA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzJGNsYXNzTmFtZSxcbiAgICAgICAgb25VcGRhdGUgPSBfdGhpcyRwcm9wcy5vblVwZGF0ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlZGl0b3JDbGFzcyA9ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKShcImVkaXRvciBlZGl0LWNoc2Vja2JveCBjaGVja2JveFwiLCBjbGFzc05hbWUpO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5jaGVja2JveCA9IG5vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzc1xuICAgICAgfSwgcmVzdCksIHt9LCB7XG4gICAgICAgIGNoZWNrZWQ6IHRoaXMuc3RhdGUuY2hlY2tlZCxcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuaGFuZGxlQ2hhbmdlXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTsgLy8gQ2hlY2tCb3hFZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3RdKSxcbi8vICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbi8vICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmMsXG4vLyB9O1xuLy8gQ2hlY2tCb3hFZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyAgIHZhbHVlOiBcIm9uOm9mZlwiLFxuLy8gICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuLy8gICBvbkNoYW5nZTogdW5kZWZpbmVkLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkLFxuLy8gfTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gQ2hlY2tCb3hFZGl0b3I7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVHlwZSA9IGV4cG9ydHMuRURJVFRZUEUgPSBleHBvcnRzLkRCQ0xJQ0tfVE9fQ0VMTF9FRElUID0gZXhwb3J0cy5DTElDS19UT19DRUxMX0VESVQgPSBleHBvcnRzLkRFTEFZX0ZPUl9EQkNMSUNLID0gZXhwb3J0cy5USU1FX1RPX0NMT1NFX01FU1NBR0UgPSB2b2lkIDA7XG52YXIgY29udGV4dF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3NyYy9jb250ZXh0XCIpKTtcbnZhciBlZGl0aW5nX2NlbGxfY29uc3VtZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvZWRpdGluZy1jZWxsLWNvbnN1bWVyXCIpKTtcbnZhciByb3dfY29uc3VtZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvcm93LWNvbnN1bWVyXCIpKTtcbmV4cG9ydHMuVElNRV9UT19DTE9TRV9NRVNTQUdFID0gMzAwMDtcbmV4cG9ydHMuREVMQVlfRk9SX0RCQ0xJQ0sgPSAyMDA7XG5leHBvcnRzLkNMSUNLX1RPX0NFTExfRURJVCA9IFwiY2xpY2tcIjtcbmV4cG9ydHMuREJDTElDS19UT19DRUxMX0VESVQgPSBcImRiY2xpY2tcIjtcbmV4cG9ydHMuRURJVFRZUEUgPSB7XG4gIFRFWFQ6IFwidGV4dFwiLFxuICBTRUxFQ1Q6IFwic2VsZWN0XCIsXG4gIFRFWFRBUkVBOiBcInRleHRhcmVhXCIsXG4gIENIRUNLQk9YOiBcImNoZWNrYm94XCIsXG4gIERBVEU6IFwiZGF0ZVwiXG59O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVDb250ZXh0OiBjb250ZXh0XzFbXCJkZWZhdWx0XCJdLFxuICAgIGNyZWF0ZUVkaXRpbmdDZWxsOiBlZGl0aW5nX2NlbGxfY29uc3VtZXJfMVtcImRlZmF1bHRcIl0sXG4gICAgd2l0aFJvd0xldmVsQ2VsbEVkaXQ6IHJvd19jb25zdW1lcl8xW1wiZGVmYXVsdFwiXSxcbiAgICBEQkNMSUNLX1RPX0NFTExfRURJVDogZXhwb3J0cy5EQkNMSUNLX1RPX0NFTExfRURJVCxcbiAgICBERUxBWV9GT1JfREJDTElDSzogZXhwb3J0cy5ERUxBWV9GT1JfREJDTElDSyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH07XG59O1xuZXhwb3J0cy5UeXBlID0gZXhwb3J0cy5FRElUVFlQRTsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0KCkge31cbmVtcHR5RnVuY3Rpb25XaXRoUmVzZXQucmVzZXRXYXJuaW5nQ2FjaGUgPSBlbXB0eUZ1bmN0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICk7XG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgdGhyb3cgZXJyO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYmlnaW50OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGVsZW1lbnRUeXBlOiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW0sXG4gICAgZXhhY3Q6IGdldFNoaW0sXG5cbiAgICBjaGVja1Byb3BUeXBlczogZW1wdHlGdW5jdGlvbldpdGhSZXNldCxcbiAgICByZXNldFdhcm5pbmdDYWNoZTogZW1wdHlGdW5jdGlvblxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfXzEgPSByZXF1aXJlKFwiLi5cIik7XG52YXIgY29udGV4dF8xID0gcmVxdWlyZShcIi4vY29udGV4dFwiKTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKENvbXBvbmVudCwgc2VsZWN0Um93RW5hYmxlZCkge1xuICB2YXIgcmVuZGVyV2l0aENlbGxFZGl0ID0gZnVuY3Rpb24gcmVuZGVyV2l0aENlbGxFZGl0KHByb3BzLCBjZWxsRWRpdCkge1xuICAgIHZhciBrZXkgPSBwcm9wcy52YWx1ZTtcbiAgICB2YXIgZWRpdGFibGVSb3cgPSAhKGNlbGxFZGl0Lm5vbkVkaXRhYmxlUm93cy5sZW5ndGggPiAwICYmIGNlbGxFZGl0Lm5vbkVkaXRhYmxlUm93cy5pbmRleE9mKGtleSkgPiAtMSk7XG4gICAgdmFyIGF0dHJzID0ge307XG4gICAgaWYgKHNlbGVjdFJvd0VuYWJsZWQgJiYgY2VsbEVkaXQubW9kZSA9PT0gX18xLkRCQ0xJQ0tfVE9fQ0VMTF9FRElUKSB7XG4gICAgICBhdHRycy5ERUxBWV9GT1JfREJDTElDSyA9IF9fMS5ERUxBWV9GT1JfREJDTElDSztcbiAgICB9XG4gICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCBhdHRycyksIHt9LCB7XG4gICAgICBlZGl0aW5nUm93SWR4OiBjZWxsRWRpdC5yaWR4LFxuICAgICAgZWRpdGluZ0NvbElkeDogY2VsbEVkaXQuY2lkeCxcbiAgICAgIGlzRWRpdGFibGU6IGVkaXRhYmxlUm93LFxuICAgICAgYXRzdGFydDogY2VsbEVkaXQuYXRzdGFydCxcbiAgICAgIGNsaWNrVG9FZGl0OiBjZWxsRWRpdC5tb2RlID09PSBfXzEuQ0xJQ0tfVE9fQ0VMTF9FRElULFxuICAgICAgZGJjbGlja1RvRWRpdDogY2VsbEVkaXQubW9kZSA9PT0gX18xLkRCQ0xJQ0tfVE9fQ0VMTF9FRElUXG4gICAgfSkpO1xuICB9O1xuICBmdW5jdGlvbiB3aXRoQ29uc3VtZXIocHJvcHMpIHtcbiAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChjb250ZXh0XzEuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChjZWxsRWRpdCkge1xuICAgICAgcmV0dXJuIHJlbmRlcldpdGhDZWxsRWRpdChwcm9wcywgY2VsbEVkaXQpO1xuICAgIH0pO1xuICB9XG4gIHdpdGhDb25zdW1lci5kaXNwbGF5TmFtZSA9IFwiV2l0aENlbGxFZGl0aW5nUm93Q29uc3VtZXJcIjtcbiAgcmV0dXJuIHdpdGhDb25zdW1lcjtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJkZWZhdWx0VmFsdWVcIiwgXCJkaWRNb3VudFwiLCBcImNsYXNzTmFtZVwiLCBcIm9uVXBkYXRlXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbnZhciBjbGFzc25hbWVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsYXNzbmFtZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBEYXRlRWRpdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRGF0ZUVkaXRvcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGF0ZUVkaXRvcik7XG4gICAgcmV0dXJuIF9jYWxsU3VwZXIodGhpcywgRGF0ZUVkaXRvciwgYXJndW1lbnRzKTtcbiAgfVxuICBfaW5oZXJpdHMoRGF0ZUVkaXRvciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhEYXRlRWRpdG9yLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzJGRlZmF1bHRWYSA9IF90aGlzJHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMkZGVmYXVsdFZhID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMkZGVmYXVsdFZhLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzLmRpZE1vdW50O1xuICAgICAgdGhpcy5kYXRlLnZhbHVlQXNEYXRlID0gbmV3IERhdGUoZGVmYXVsdFZhbHVlKTtcbiAgICAgIHRoaXMuZGF0ZS5mb2N1cygpO1xuICAgICAgaWYgKGRpZE1vdW50KSB7XG4gICAgICAgIGRpZE1vdW50KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZS52YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGRlZmF1bHRWID0gX3RoaXMkcHJvcHMyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMyJGRlZmF1bHRWID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGRlZmF1bHRWLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzMi5kaWRNb3VudCxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGNsYXNzTmFtID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyJGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGNsYXNzTmFtLFxuICAgICAgICBvblVwZGF0ZSA9IF90aGlzJHByb3BzMi5vblVwZGF0ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC1kYXRlXCIpO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5kYXRlID0gbm9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3NcbiAgICAgIH0sIHJlc3QpKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBEYXRlRWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgIFByb3BUeXBlcy5vYmplY3Rcbi8vICAgXSksXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuLy8gRGF0ZUVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogJycsXG4vLyAgIGRlZmF1bHRWYWx1ZTogJycsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWRcbi8vIH07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IERhdGVFZGl0b3I7IixudWxsLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBEYXRlRWRpdG9yUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcbiAgZGlkTW91bnQ/OiAoKSA9PiB2b2lkO1xuICBvblVwZGF0ZT86IGFueTtcbn1cblxuY2xhc3MgRGF0ZUVkaXRvciBleHRlbmRzIENvbXBvbmVudDxEYXRlRWRpdG9yUHJvcHM+IHtcbiAgZGF0ZTogYW55O1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IGRlZmF1bHRWYWx1ZSA9IFwiXCIsIGRpZE1vdW50IH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuZGF0ZS52YWx1ZUFzRGF0ZSA9IG5ldyBEYXRlKGRlZmF1bHRWYWx1ZSk7XG4gICAgdGhpcy5kYXRlLmZvY3VzKCk7XG4gICAgaWYgKGRpZE1vdW50KSB7XG4gICAgICBkaWRNb3VudCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGUudmFsdWU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVmYXVsdFZhbHVlID0gXCJcIixcbiAgICAgIGRpZE1vdW50LFxuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGVkaXRvckNsYXNzID0gY3MoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC1kYXRlXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgcmVmPXsobm9kZSkgPT4gKHRoaXMuZGF0ZSA9IG5vZGUpfVxuICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgIGNsYXNzTmFtZT17ZWRpdG9yQ2xhc3N9XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cbi8vIERhdGVFZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgUHJvcFR5cGVzLm9iamVjdFxuLy8gICBdKSxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmNcbi8vIH07XG4vLyBEYXRlRWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiAnJyxcbi8vICAgZGVmYXVsdFZhbHVlOiAnJyxcbi8vICAgZGlkTW91bnQ6IHVuZGVmaW5lZFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgRGF0ZUVkaXRvcjtcbiIsIi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIFRleHRFZGl0b3JQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xuICBhdXRvU2VsZWN0VGV4dD86IGJvb2xlYW47XG4gIGRpZE1vdW50PzogKCkgPT4gdm9pZDtcbiAgb25VcGRhdGU6IChyb3c6IG9iamVjdCwgY29sdW1uOiBvYmplY3QsIHZhbHVlOiBhbnkpID0+IHZvaWQ7XG59XG5cbmNsYXNzIFRleHRFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQ8VGV4dEVkaXRvclByb3BzPiB7XG4gIHRleHQ6IGFueTtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBkZWZhdWx0VmFsdWUgPSBcIlwiLCBkaWRNb3VudCwgYXV0b1NlbGVjdFRleHQgPSBmYWxzZSB9ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLnRleHQudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgdGhpcy50ZXh0LmZvY3VzKCk7XG4gICAgaWYgKGF1dG9TZWxlY3RUZXh0KSB0aGlzLnRleHQuc2VsZWN0KCk7XG4gICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICB9XG5cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dC52YWx1ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBcIlwiLFxuICAgICAgZGlkTW91bnQsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgYXV0b1NlbGVjdFRleHQgPSBmYWxzZSxcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGVkaXRvckNsYXNzID0gY3MoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0XCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgcmVmPXsobm9kZSkgPT4gKHRoaXMudGV4dCA9IG5vZGUpfVxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzTmFtZT17ZWRpdG9yQ2xhc3N9XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cbi8vIFRleHRFZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgUHJvcFR5cGVzLm9iamVjdFxuLy8gICBdKSxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgIFByb3BUeXBlcy5udW1iZXJcbi8vICAgXSksXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuXG4vLyBUZXh0RWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBudWxsLFxuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBhdXRvU2VsZWN0VGV4dDogZmFsc2UsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWRcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRFZGl0b3I7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcIm5vbkVkaXRhYmxlUm93c1wiLCBcImVycm9yTWVzc2FnZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcIm9wdGlvbnNcIiwgXCJyaWR4XCIsIFwiY2lkeFwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNvbnN1bWVyID0gdm9pZCAwO1xuLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbi8qIGVzbGludCByZWFjdC9uby11bnVzZWQtcHJvcC10eXBlczogMCAqL1xudmFyIHByb3BfdHlwZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9fMSA9IHJlcXVpcmUoXCIuLlwiKTtcbnZhciBDZWxsRWRpdENvbnRleHQgPSByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVDb250ZXh0KG51bGwpO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoXywgZGF0YU9wZXJhdG9yLCBpc1JlbW90ZUNlbGxFZGl0LCBoYW5kbGVDZWxsQ2hhbmdlKSB7XG4gIHZhciBDZWxsRWRpdFByb3ZpZGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRkZWZhdWx0JENvbXApIHtcbiAgICBmdW5jdGlvbiBDZWxsRWRpdFByb3ZpZGVyKHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2VsbEVkaXRQcm92aWRlcik7XG4gICAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgQ2VsbEVkaXRQcm92aWRlciwgW3Byb3BzXSk7XG4gICAgICBfdGhpcy5kb1VwZGF0ZSA9IF90aGlzLmRvVXBkYXRlLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuc3RhcnRFZGl0aW5nID0gX3RoaXMuc3RhcnRFZGl0aW5nLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuZXNjYXBlRWRpdGluZyA9IF90aGlzLmVzY2FwZUVkaXRpbmcuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5jb21wbGV0ZUVkaXRpbmcgPSBfdGhpcy5jb21wbGV0ZUVkaXRpbmcuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5oYW5kbGVDZWxsVXBkYXRlID0gX3RoaXMuaGFuZGxlQ2VsbFVwZGF0ZS5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICByaWR4OiBudWxsLFxuICAgICAgICBjaWR4OiBudWxsLFxuICAgICAgICBtZXNzYWdlOiBudWxsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfaW5oZXJpdHMoQ2VsbEVkaXRQcm92aWRlciwgX3JlYWN0XzEkZGVmYXVsdCRDb21wKTtcbiAgICByZXR1cm4gX2NyZWF0ZUNsYXNzKENlbGxFZGl0UHJvdmlkZXIsIFt7XG4gICAgICBrZXk6IFwiaGFuZGxlQ2VsbFVwZGF0ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNlbGxVcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgICB2YXIgbmV3VmFsdWVXaXRoVHlwZSA9IGRhdGFPcGVyYXRvci50eXBlQ29udmVydChjb2x1bW4udHlwZSwgbmV3VmFsdWUpO1xuICAgICAgICB2YXIgY2VsbEVkaXQgPSB0aGlzLnByb3BzLmNlbGxFZGl0O1xuICAgICAgICB2YXIgYmVmb3JlU2F2ZUNlbGwgPSBjZWxsRWRpdC5vcHRpb25zLmJlZm9yZVNhdmVDZWxsO1xuICAgICAgICB2YXIgb2xkVmFsdWUgPSBfLmdldChyb3csIGNvbHVtbi5kYXRhRmllbGQpO1xuICAgICAgICB2YXIgYmVmb3JlU2F2ZUNlbGxEb25lID0gZnVuY3Rpb24gYmVmb3JlU2F2ZUNlbGxEb25lKCkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRydWU7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgX3RoaXMyLmRvVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZVdpdGhUeXBlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMyLmVzY2FwZUVkaXRpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oYmVmb3JlU2F2ZUNlbGwpKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGJlZm9yZVNhdmVDZWxsKG9sZFZhbHVlLCBuZXdWYWx1ZVdpdGhUeXBlLCByb3csIGNvbHVtbiwgYmVmb3JlU2F2ZUNlbGxEb25lKTtcbiAgICAgICAgICBpZiAoXy5pc09iamVjdChyZXN1bHQpICYmIHJlc3VsdC5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZVdpdGhUeXBlKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZG9VcGRhdGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkb1VwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBrZXlGaWVsZCA9IF90aGlzJHByb3BzLmtleUZpZWxkLFxuICAgICAgICAgIGNlbGxFZGl0ID0gX3RoaXMkcHJvcHMuY2VsbEVkaXQsXG4gICAgICAgICAgZGF0YSA9IF90aGlzJHByb3BzLmRhdGE7XG4gICAgICAgIHZhciBhZnRlclNhdmVDZWxsID0gY2VsbEVkaXQub3B0aW9ucy5hZnRlclNhdmVDZWxsO1xuICAgICAgICB2YXIgcm93SWQgPSBfLmdldChyb3csIGtleUZpZWxkKTtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gXy5nZXQocm93LCBjb2x1bW4uZGF0YUZpZWxkKTtcbiAgICAgICAgaWYgKGlzUmVtb3RlQ2VsbEVkaXQoKSkge1xuICAgICAgICAgIGhhbmRsZUNlbGxDaGFuZ2Uocm93SWQsIGNvbHVtbi5kYXRhRmllbGQsIG5ld1ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhT3BlcmF0b3IuZWRpdENlbGwoZGF0YSwga2V5RmllbGQsIHJvd0lkLCBjb2x1bW4uZGF0YUZpZWxkLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihhZnRlclNhdmVDZWxsKSkge1xuICAgICAgICAgICAgYWZ0ZXJTYXZlQ2VsbChvbGRWYWx1ZSwgbmV3VmFsdWUsIHJvdywgY29sdW1uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZUVkaXRpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJjb21wbGV0ZUVkaXRpbmdcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wbGV0ZUVkaXRpbmcoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByaWR4OiBudWxsLFxuICAgICAgICAgICAgY2lkeDogbnVsbCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwic3RhcnRFZGl0aW5nXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnRFZGl0aW5nKHJpZHgsIGNpZHgpIHtcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICAgIHZhciBlZGl0aW5nID0gZnVuY3Rpb24gZWRpdGluZygpIHtcbiAgICAgICAgICBfdGhpczMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcmlkeDogcmlkeCxcbiAgICAgICAgICAgICAgY2lkeDogY2lkeFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHNlbGVjdFJvdyA9IHRoaXMucHJvcHMuc2VsZWN0Um93O1xuICAgICAgICBpZiAoIXNlbGVjdFJvdyB8fCBzZWxlY3RSb3cuY2xpY2tUb0VkaXQgfHwgIXNlbGVjdFJvdy5jbGlja1RvU2VsZWN0KSB7XG4gICAgICAgICAgZWRpdGluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImVzY2FwZUVkaXRpbmdcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBlc2NhcGVFZGl0aW5nKCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmlkeDogbnVsbCxcbiAgICAgICAgICAgIGNpZHg6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkY2VsbEVkaXQgPSB0aGlzLnByb3BzLmNlbGxFZGl0LFxuICAgICAgICAgIF90aGlzJHByb3BzJGNlbGxFZGl0JCA9IF90aGlzJHByb3BzJGNlbGxFZGl0Lm9wdGlvbnMsXG4gICAgICAgICAgbm9uRWRpdGFibGVSb3dzID0gX3RoaXMkcHJvcHMkY2VsbEVkaXQkLm5vbkVkaXRhYmxlUm93cyxcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBfdGhpcyRwcm9wcyRjZWxsRWRpdCQuZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIG9wdGlvbnNSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzJGNlbGxFZGl0JCwgX2V4Y2x1ZGVkKSxcbiAgICAgICAgICBwcm9wUmlkeCA9IF90aGlzJHByb3BzJGNlbGxFZGl0LnJpZHgsXG4gICAgICAgICAgcHJvcENpZHggPSBfdGhpcyRwcm9wcyRjZWxsRWRpdC5jaWR4LFxuICAgICAgICAgIGNlbGxFZGl0UmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcyRjZWxsRWRpdCwgX2V4Y2x1ZGVkMik7XG4gICAgICAgIHZhciBuZXdDZWxsRWRpdCA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb25zUmVzdCksIGNlbGxFZGl0UmVzdCksIHt9LCB7XG4gICAgICAgICAgcmlkeDogdGhpcy5zdGF0ZS5yaWR4ICE9PSBudWxsID8gdGhpcy5zdGF0ZS5yaWR4IDogcHJvcFJpZHggIT09IG51bGwgJiYgcHJvcFJpZHggIT09IHZvaWQgMCA/IHByb3BSaWR4IDogbnVsbCxcbiAgICAgICAgICBjaWR4OiB0aGlzLnN0YXRlLmNpZHggIT09IG51bGwgPyB0aGlzLnN0YXRlLmNpZHggOiBwcm9wQ2lkeCAhPT0gbnVsbCAmJiBwcm9wQ2lkeCAhPT0gdm9pZCAwID8gcHJvcENpZHggOiBudWxsLFxuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuc3RhdGUubWVzc2FnZSxcbiAgICAgICAgICBub25FZGl0YWJsZVJvd3M6IF8uaXNEZWZpbmVkKG5vbkVkaXRhYmxlUm93cykgPyBub25FZGl0YWJsZVJvd3MoKSA6IFtdLFxuICAgICAgICAgIGF0c3RhcnQ6IHRoaXMuc3RhcnRFZGl0aW5nLFxuICAgICAgICAgIG9uRXNjYXBlOiB0aGlzLmVzY2FwZUVkaXRpbmcsXG4gICAgICAgICAgb25VcGRhdGU6IHRoaXMuaGFuZGxlQ2VsbFVwZGF0ZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoQ2VsbEVkaXRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgdmFsdWU6IF9vYmplY3RTcHJlYWQoe30sIG5ld0NlbGxFZGl0KVxuICAgICAgICB9LCB0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XSwgW3tcbiAgICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgICAgaWYgKG5leHRQcm9wcy5jZWxsRWRpdCAmJiBfLmlzRnVuY3Rpb24oaXNSZW1vdGVDZWxsRWRpdCkgJiYgaXNSZW1vdGVDZWxsRWRpdCgpKSB7XG4gICAgICAgICAgaWYgKG5leHRQcm9wcy5jZWxsRWRpdC5vcHRpb25zLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogbmV4dFByb3BzLmNlbGxFZGl0Lm9wdGlvbnMuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByaWR4OiBwcmV2U3RhdGUucmlkeCxcbiAgICAgICAgICAgICAgY2lkeDogcHJldlN0YXRlLmNpZHgsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKHt9LCBwcmV2U3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfV0pO1xuICB9KHJlYWN0XzFbXCJkZWZhdWx0XCJdLkNvbXBvbmVudCk7XG4gIENlbGxFZGl0UHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAgIGRhdGE6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBzZWxlY3RSb3c6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ub2JqZWN0LFxuICAgIG9wdGlvbnM6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uc2hhcGUoe1xuICAgICAgbW9kZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5vbmVPZihbX18xLkNMSUNLX1RPX0NFTExfRURJVCwgX18xLkRCQ0xJQ0tfVE9fQ0VMTF9FRElUXSkuaXNSZXF1aXJlZCxcbiAgICAgIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gICAgICBibHVyVG9TYXZlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmJvb2wsXG4gICAgICBiZWZvcmVTYXZlQ2VsbDogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5mdW5jLFxuICAgICAgYWZ0ZXJTYXZlQ2VsbDogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5mdW5jLFxuICAgICAgb25TdGFydEVkaXQ6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uZnVuYyxcbiAgICAgIG5vbkVkaXRhYmxlUm93czogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5mdW5jLFxuICAgICAgdGltZVRvQ2xvc2VNZXNzYWdlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm51bWJlcixcbiAgICAgIGVycm9yTWVzc2FnZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5hbnlcbiAgICB9KVxuICB9O1xuICByZXR1cm4ge1xuICAgIFByb3ZpZGVyOiBDZWxsRWRpdFByb3ZpZGVyXG4gIH07XG59O1xuZXhwb3J0cy5Db25zdW1lciA9IENlbGxFZGl0Q29udGV4dC5Db25zdW1lcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImRlZmF1bHRWYWx1ZVwiLCBcImRpZE1vdW50XCIsIFwiZ2V0T3B0aW9uc1wiLCBcImNsYXNzTmFtZVwiLCBcIm9uVXBkYXRlXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbnZhciBjbGFzc25hbWVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsYXNzbmFtZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBEcm9wRG93bkVkaXRvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIERyb3BEb3duRWRpdG9yKHByb3BzKSB7XG4gICAgdmFyIF9wcm9wcyRvcHRpb25zO1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRHJvcERvd25FZGl0b3IpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBEcm9wRG93bkVkaXRvciwgW3Byb3BzXSk7XG4gICAgdmFyIG9wdGlvbnMgPSAoX3Byb3BzJG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zKSAhPT0gbnVsbCAmJiBfcHJvcHMkb3B0aW9ucyAhPT0gdm9pZCAwID8gX3Byb3BzJG9wdGlvbnMgOiBbXTtcbiAgICBpZiAocHJvcHMuZ2V0T3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHByb3BzLmdldE9wdGlvbnMoX3RoaXMuc2V0T3B0aW9ucy5iaW5kKF90aGlzKSwge1xuICAgICAgICByb3c6IHByb3BzLnJvdyxcbiAgICAgICAgY29sdW1uOiBwcm9wcy5jb2x1bW5cbiAgICAgIH0pIHx8IFtdO1xuICAgIH1cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRHJvcERvd25FZGl0b3IsIF9yZWFjdF8xJENvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoRHJvcERvd25FZGl0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMuZGlkTW91bnQ7XG4gICAgICB0aGlzLnNlbGVjdC52YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIHRoaXMuc2VsZWN0LmZvY3VzKCk7XG4gICAgICBpZiAoZGlkTW91bnQpIHtcbiAgICAgICAgZGlkTW91bnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0T3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3QudmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkZGVmYXVsdFYsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMyLmRpZE1vdW50LFxuICAgICAgICBnZXRPcHRpb25zID0gX3RoaXMkcHJvcHMyLmdldE9wdGlvbnMsXG4gICAgICAgIF90aGlzJHByb3BzMiRjbGFzc05hbSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMiRjbGFzc05hbSA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMiRjbGFzc05hbSxcbiAgICAgICAgb25VcGRhdGUgPSBfdGhpcyRwcm9wczIub25VcGRhdGUsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIGVkaXRvckNsYXNzID0gKDAsIGNsYXNzbmFtZXNfMVtcImRlZmF1bHRcIl0pKGNsYXNzTmFtZSwgXCJmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtc2VsZWN0XCIpO1xuICAgICAgdmFyIGF0dHIgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3QpLCB7fSwge1xuICAgICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYXR0ciksIHt9LCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnNlbGVjdCA9IG5vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlXG4gICAgICB9KSwgdGhpcy5zdGF0ZS5vcHRpb25zLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgICAgICAgIHZhbHVlID0gX3JlZi52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgIGtleTogdmFsdWUsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH0sIGxhYmVsKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBEcm9wRG93bkVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIHJvdzogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgIFByb3BUeXBlcy5udW1iZXJcbi8vICAgXSksXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIG9wdGlvbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4vLyAgICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55XG4vLyAgICAgfSkpXG4vLyAgIF0pLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGdldE9wdGlvbnM6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuLy8gRHJvcERvd25FZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBzdHlsZToge30sXG4vLyAgIG9wdGlvbnM6IFtdLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkLFxuLy8gICBnZXRPcHRpb25zOiB1bmRlZmluZWRcbi8vIH07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IERyb3BEb3duRWRpdG9yOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwiLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50LCBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIENoZWNrQm94RWRpdG9yUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBkZWZhdWx0VmFsdWU/OiBhbnk7XG4gIG9uQ2hhbmdlPzogKGU6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBkaWRNb3VudD86ICgpID0+IHZvaWQ7XG4gIG9uVXBkYXRlPzogYW55O1xufVxuXG5pbnRlcmZhY2UgQ2hlY2tCb3hFZGl0b3JTdGF0ZSB7XG4gIGNoZWNrZWQ6IGJvb2xlYW47XG59XG5cbmNsYXNzIENoZWNrQm94RWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50PFxuICBDaGVja0JveEVkaXRvclByb3BzLFxuICBDaGVja0JveEVkaXRvclN0YXRlXG4+IHtcbiAgY2hlY2tib3g6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ2hlY2tCb3hFZGl0b3JQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgY2hlY2tlZDpcbiAgICAgICAgKHByb3BzLmRlZmF1bHRWYWx1ZSA/PyBmYWxzZSkudG9TdHJpbmcoKSA9PT1cbiAgICAgICAgKHByb3BzLnZhbHVlID8/IFwib246b2ZmXCIpLnNwbGl0KFwiOlwiKVswXSxcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZGlkTW91bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy5jaGVja2JveC5mb2N1cygpO1xuICAgIGlmIChkaWRNb3VudCkgZGlkTW91bnQoKTtcbiAgfVxuXG4gIGdldFZhbHVlKCkge1xuICAgIGNvbnN0IFtwb3NpdGl2ZSwgbmVnYXRpdmVdID0gKHRoaXMucHJvcHMudmFsdWUgPz8gXCJvbjpvZmZcIikuc3BsaXQoXCI6XCIpO1xuICAgIHJldHVybiB0aGlzLmNoZWNrYm94LmNoZWNrZWQgPyBwb3NpdGl2ZSA6IG5lZ2F0aXZlO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlKGU6IGFueSkge1xuICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB0aGlzLnByb3BzLm9uQ2hhbmdlKGUpO1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBlO1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgY2hlY2tlZDogdGFyZ2V0LmNoZWNrZWQgfSkpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IGZhbHNlLFxuICAgICAgZGlkTW91bnQsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgb25VcGRhdGUsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZWRpdG9yQ2xhc3MgPSBjcyhcImVkaXRvciBlZGl0LWNoc2Vja2JveCBjaGVja2JveFwiLCBjbGFzc05hbWUpO1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgcmVmPXsobm9kZSkgPT4gKHRoaXMuY2hlY2tib3ggPSBub2RlKX1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0b3JDbGFzc31cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIGNoZWNrZWQ9e3RoaXMuc3RhdGUuY2hlY2tlZH1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cbi8vIENoZWNrQm94RWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSksXG4vLyAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4vLyAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jLFxuLy8gfTtcblxuLy8gQ2hlY2tCb3hFZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyAgIHZhbHVlOiBcIm9uOm9mZlwiLFxuLy8gICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuLy8gICBvbkNoYW5nZTogdW5kZWZpbmVkLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tCb3hFZGl0b3I7XG4iLCIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKGFyZykge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3NlcywgcGFyc2VWYWx1ZShhcmcpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlVmFsdWUgKGFyZykge1xuXHRcdGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuXHRcdFx0cmV0dXJuIGFyZztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdH1cblxuXHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdHJldHVybiBhcmcudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3Nlcywga2V5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZENsYXNzICh2YWx1ZSwgbmV3Q2xhc3MpIHtcblx0XHRpZiAoIW5ld0NsYXNzKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSArICcgJyArIG5ld0NsYXNzO1xuXHRcdH1cblx0XG5cdFx0cmV0dXJuIHZhbHVlICsgbmV3Q2xhc3M7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1Nik7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwicmVxdWlyZSIsImRlZmluZSIsImFtZCIsInNlbGYiLCJfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXyIsIkNvbXBvbmVudCIsInNlbGVjdFJvd0VuYWJsZWQiLCJ3aXRoQ29uc3VtZXIiLCJwcm9wcyIsIkNvbnN1bWVyIiwiY2VsbEVkaXQiLCJrZXkiLCJ2YWx1ZSIsImVkaXRhYmxlUm93Iiwibm9uRWRpdGFibGVSb3dzIiwibGVuZ3RoIiwiaW5kZXhPZiIsImF0dHJzIiwibW9kZSIsIkRCQ0xJQ0tfVE9fQ0VMTF9FRElUIiwiREVMQVlfRk9SX0RCQ0xJQ0siLCJlZGl0aW5nUm93SWR4IiwicmlkeCIsImVkaXRpbmdDb2xJZHgiLCJjaWR4IiwiaXNFZGl0YWJsZSIsImF0c3RhcnQiLCJjbGlja1RvRWRpdCIsIkNMSUNLX1RPX0NFTExfRURJVCIsImRiY2xpY2tUb0VkaXQiLCJyZW5kZXJXaXRoQ2VsbEVkaXQiLCJkaXNwbGF5TmFtZSIsIl9faW1wb3J0RGVmYXVsdCIsIm1vZCIsIl9fZXNNb2R1bGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInByb3BfdHlwZXNfMSIsInJlYWN0XzEiLCJFZGl0b3JJbmRpY2F0b3IiLCJfcmVmIiwiaW52YWxpZE1lc3NhZ2UiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwicm9sZSIsInByb3BUeXBlcyIsInN0cmluZyIsIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9leGNsdWRlZCIsIm93bktleXMiLCJlIiwiciIsInQiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfZGVmaW5lUHJvcGVydGllcyIsImkiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfdG9QcmltaXRpdmUiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiUmVmZXJlbmNlRXJyb3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwic2V0UHJvdG90eXBlT2YiLCJnZXRQcm90b3R5cGVPZiIsImJpbmQiLCJfX3Byb3RvX18iLCJfc2V0UHJvdG90eXBlT2YiLCJfb3duS2V5cyIsIl9fY3JlYXRlQmluZGluZyIsImNyZWF0ZSIsIm0iLCJrIiwiazIiLCJ1bmRlZmluZWQiLCJkZXNjIiwiZ2V0IiwiX19zZXRNb2R1bGVEZWZhdWx0IiwidiIsIl9faW1wb3J0U3RhciIsImdldE93blByb3BlcnR5TmFtZXMiLCJhciIsImhhc093blByb3BlcnR5IiwicmVzdWx0IiwiY2xhc3NuYW1lc18xIiwiVGV4dEVkaXRvciIsIl9yZWFjdF8xJENvbXBvbmVudCIsImEiLCJuIiwiX2NsYXNzQ2FsbENoZWNrIiwidGhpcyIsImFyZ3VtZW50cyIsIl9pbmhlcml0cyIsIl90aGlzJHByb3BzIiwiX3RoaXMkcHJvcHMkZGVmYXVsdFZhIiwiZGVmYXVsdFZhbHVlIiwiZGlkTW91bnQiLCJfdGhpcyRwcm9wcyRhdXRvU2VsZWMiLCJhdXRvU2VsZWN0VGV4dCIsInRleHQiLCJmb2N1cyIsInNlbGVjdCIsIl90aGlzIiwiX3RoaXMkcHJvcHMyIiwiX3RoaXMkcHJvcHMyJGNsYXNzTmFtIiwicmVzdCIsIm9uVXBkYXRlIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsImVkaXRvckNsYXNzIiwiZm9yRWFjaCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX29iamVjdFNwcmVhZCIsInJlZiIsIm5vZGUiLCJ0eXBlIiwiRHJvcERvd25FZGl0b3IiLCJzdXBlciIsIm9wdGlvbnMiLCJnZXRPcHRpb25zIiwic2V0T3B0aW9ucyIsInJvdyIsImNvbHVtbiIsInN0YXRlIiwiY29tcG9uZW50RGlkTW91bnQiLCJzZXRTdGF0ZSIsImdldFZhbHVlIiwicmVuZGVyIiwiYXR0ciIsIm1hcCIsImxhYmVsIiwiVGV4dEFyZWFFZGl0b3IiLCJoYW5kbGVLZXlEb3duIiwia2V5Q29kZSIsInNoaWZ0S2V5Iiwib25LZXlEb3duIiwiX3RoaXMyIiwiXyIsIm9uU3RhcnRFZGl0IiwiaW5kaWNhdG9yVGltZXIiLCJjbGVhclRpbWVyIiwiaGFuZGxlQmx1ciIsImhhbmRsZUNsaWNrIiwiYmVmb3JlQ29tcGxldGUiLCJhc3luY2JlZm9yZUNvbXBldGUiLCJkaXNwbGF5RXJyb3JNZXNzYWdlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJtZXNzYWdlIiwiaXNEZWZpbmVkIiwiY3JlYXRlVGltZXIiLCJjbGVhclRpbWVvdXQiLCJ0aW1lVG9DbG9zZU1lc3NhZ2UiLCJvbkVycm9yTWVzc2FnZURpc2FwcGVhciIsInNsZWVwIiwiaXNGdW5jdGlvbiIsIm5ld1ZhbHVlIiwidmFsaWQiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZUZvcm0iLCJpc09iamVjdCIsImFzeW5jIiwib25Fc2NhcGUiLCJibHVyVG9TYXZlIiwiZWRpdG9yIiwidGFyZ2V0IiwidGFnTmFtZSIsInN0b3BQcm9wYWdhdGlvbiIsInN0eWxlIiwicm93SW5kZXgiLCJjb2x1bW5JbmRleCIsImRhdGFGaWVsZCIsImhhc0Vycm9yIiwiY3VzdG9tRWRpdG9yQ2xhc3MiLCJlZGl0b3JDbGFzc2VzIiwiZWRpdG9yU3R5bGUiLCJlZGl0b3JQcm9wcyIsImFuaW1hdGVkIiwic2hha2UiLCJvbkJsdXIiLCJpc0RlZmF1bHRFZGl0b3JEZWZpbmVkIiwiZWRpdG9yUmVuZGVyZXIiLCJFRElUVFlQRSIsIlNFTEVDVCIsIlRFWFRBUkVBIiwiQ0hFQ0tCT1giLCJEQVRFIiwib25DbGljayIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJudW1iZXIiLCJmdW5jIiwiYm9vbCIsImRlZmF1bHRQcm9wcyIsIlRJTUVfVE9fQ0xPU0VfTUVTU0FHRSIsIl9fMSIsImNoZWNrYm94X2VkaXRvcl8xIiwiZGF0ZV9lZGl0b3JfMSIsImRyb3Bkb3duX2VkaXRvcl8xIiwiZWRpdG9yX2luZGljYXRvcl8xIiwidGV4dF9lZGl0b3JfMSIsInRleHRhcmVhX2VkaXRvcl8xIiwiX2EiLCJFZGl0aW5nQ2VsbCIsIl90aGlzMyIsIl90aGlzMyRwcm9wcyIsIl90aGlzJHByb3BzMyIsIl9jb2x1bW4kZWRpdG9yIiwiX2NvbHVtbiRlZGl0b3IyIiwiX2NvbHVtbiRlZGl0b3IzIiwiX2NvbHVtbiRlZGl0b3I0IiwiX3RoaXM0IiwiX3RoaXMkcHJvcHM0IiwiY29udGV4dF8xIiwiZWRpdGluZ19jZWxsXzEiLCJjb250ZW50IiwiZWRpdENlbGxzdHlsZSIsImVkaXRDZWxsU3R5bGUiLCJlZGl0Q2VsbGNsYXNzZXMiLCJlZGl0Q2VsbENsYXNzZXMiLCJyZW5kZXJXaXRoRWRpdGluZ0NlbGwiLCJDZWxsRWRpdENvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiZGF0YU9wZXJhdG9yIiwiaXNSZW1vdGVDZWxsRWRpdCIsImhhbmRsZUNlbGxDaGFuZ2UiLCJDZWxsRWRpdFByb3ZpZGVyIiwiZG9VcGRhdGUiLCJzdGFydEVkaXRpbmciLCJlc2NhcGVFZGl0aW5nIiwiY29tcGxldGVFZGl0aW5nIiwiaGFuZGxlQ2VsbFVwZGF0ZSIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsIm5leHRQcm9wcyIsInByZXZTdGF0ZSIsImVycm9yTWVzc2FnZSIsIm5ld1ZhbHVlV2l0aFR5cGUiLCJ0eXBlQ29udmVydCIsImJlZm9yZVNhdmVDZWxsIiwib2xkVmFsdWUiLCJiZWZvcmVTYXZlQ2VsbERvbmUiLCJrZXlGaWVsZCIsImRhdGEiLCJhZnRlclNhdmVDZWxsIiwicm93SWQiLCJlZGl0Q2VsbCIsImVkaXRpbmciLCJzZWxlY3RSb3ciLCJjbGlja1RvU2VsZWN0Iiwib3B0aW9uc1Jlc3QiLCJwcm9wUmlkeCIsInByb3BDaWR4IiwiY2VsbEVkaXRSZXN0IiwibmV3Q2VsbEVkaXQiLCJQcm92aWRlciIsImNoaWxkcmVuIiwiYXJyYXkiLCJzaGFwZSIsIm9uZU9mIiwiYW55IiwiX3NsaWNlZFRvQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJsIiwidSIsImYiLCJuZXh0IiwiZG9uZSIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJDaGVja0JveEVkaXRvciIsIl9wcm9wcyRkZWZhdWx0VmFsdWUiLCJfcHJvcHMkdmFsdWUiLCJjaGVja2VkIiwic3BsaXQiLCJoYW5kbGVDaGFuZ2UiLCJjaGVja2JveCIsIl90aGlzJHByb3BzJHZhbHVlIiwiX3NwbGl0MiIsInBvc2l0aXZlIiwibmVnYXRpdmUiLCJvbkNoYW5nZSIsIl90aGlzJHByb3BzJGNsYXNzTmFtZSIsIlR5cGUiLCJlZGl0aW5nX2NlbGxfY29uc3VtZXJfMSIsInJvd19jb25zdW1lcl8xIiwiVEVYVCIsImNyZWF0ZUVkaXRpbmdDZWxsIiwid2l0aFJvd0xldmVsQ2VsbEVkaXQiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsImVtcHR5RnVuY3Rpb24iLCJlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0IiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJzaGltIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwibG9jYXRpb24iLCJwcm9wRnVsbE5hbWUiLCJzZWNyZXQiLCJlcnIiLCJFcnJvciIsImdldFNoaW0iLCJSZWFjdFByb3BUeXBlcyIsImJpZ2ludCIsInN5bWJvbCIsImFycmF5T2YiLCJlbGVtZW50IiwiZWxlbWVudFR5cGUiLCJpbnN0YW5jZU9mIiwib2JqZWN0T2YiLCJvbmVPZlR5cGUiLCJleGFjdCIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiRGF0ZUVkaXRvciIsImRhdGUiLCJ2YWx1ZUFzRGF0ZSIsIkRhdGUiLCJfZXhjbHVkZWQyIiwiX3JlYWN0XzEkZGVmYXVsdCRDb21wIiwiX3RoaXMkcHJvcHMkY2VsbEVkaXQiLCJfdGhpcyRwcm9wcyRjZWxsRWRpdCQiLCJfcHJvcHMkb3B0aW9ucyIsIl90aGlzJHByb3BzMiRkZWZhdWx0ViIsImhhc093biIsImNsYXNzTmFtZXMiLCJjbGFzc2VzIiwiYXJnIiwiYXBwZW5kQ2xhc3MiLCJwYXJzZVZhbHVlIiwiaW5jbHVkZXMiLCJuZXdDbGFzcyIsImRlZmF1bHQiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrapTableNgEditor=t(require("react")):e.ReactBootstrapTableNgEditor=t(e.React)}(self,e=>{return t={33(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(442)),i=r(564),u=r(511);t.default=(e,t)=>{function r(r){return o.default.createElement(u.Consumer,null,n=>((r,n)=>{const u=r.value,a=!(n.nonEditableRows.length>0&&n.nonEditableRows.indexOf(u)>-1),l={};return t&&n.mode===i.DBCLICK_TO_CELL_EDIT&&(l.DELAY_FOR_DBCLICK=i.DELAY_FOR_DBCLICK),o.default.createElement(e,{...r,...l,editingRowIdx:n.ridx,editingColIdx:n.cidx,isEditable:a,atstart:n.atstart,clickToEdit:n.mode===i.CLICK_TO_CELL_EDIT,dbclickToEdit:n.mode===i.DBCLICK_TO_CELL_EDIT})})(r,n))}return r.displayName="WithCellEditingRowConsumer",r}},88(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(556)),i=n(r(442)),u=function(e){var t=e.invalidMessage;return i.default.createElement("div",{className:"alert alert-danger in",role:"alert","data-testid":"editor-indicator"},i.default.createElement("strong",null,t))};u.propTypes={invalidMessage:o.default.string},t.default=u},98(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","autoSelectText","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=h(r(442)),g=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),c(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount,o=e.autoSelectText,i=void 0!==o&&o;this.text.value=r,this.text.focus(),i&&this.text.select(),n&&n()}},{key:"getValue",value:function(){return this.text.value}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,a=(t.autoSelectText,t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),l=(0,m.default)(n,"form-control editor edit-text");return O.default.createElement("input",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({ref:function(t){e.text=t},type:"text",className:l},a))}}],n&&a(r.prototype,n),l&&a(r,l),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,l}(O.Component);t.default=g},121(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e);let t=e.options??[];e.getOptions&&(t=e.getOptions(this.setOptions.bind(this),{row:e.row,column:e.column})||[]),this.state={options:t}}componentDidMount(){const{defaultValue:e="",didMount:t}=this.props;this.select.value=e,this.select.focus(),t&&t()}setOptions(e){this.setState({options:e})}getValue(){return this.select.value}render(){const{defaultValue:e="",didMount:t,getOptions:r,className:n="",onUpdate:o,...i}=this.props,u={...i,className:(0,l.default)(n,"form-control editor edit-select")};return c.default.createElement("select",{...u,ref:e=>{this.select=e},defaultValue:e},this.state.options.map(({label:e,value:t})=>c.default.createElement("option",{key:t,value:t},e)))}}t.default=s},137(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","autoSelectText"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=c(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,c(n.key),n)}}function c(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function s(e,t,r){return t=d(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(t,r||[],d(e).constructor):t.apply(e,r))}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(f=function(){return!!e})()}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function p(e,t){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},p(e,t)}var b,y=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},h=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},v=(b=function(e){return b=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},b(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=b(e),n=0;n<r.length;n++)"default"!==r[n]&&y(t,e,r[n]);return h(t,e),t}),m=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var O=m(r(942)),g=v(r(442)),_=function(e){function t(e){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=s(this,t,[e])).handleKeyDown=r.handleKeyDown.bind(r),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&p(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?null:t,n=e.didMount,o=e.autoSelectText,i=void 0!==o&&o;this.text.value=r,this.text.focus(),i&&this.text.select(),n&&n()}},{key:"getValue",value:function(){return this.text.value}},{key:"handleKeyDown",value:function(e){(13!==e.keyCode||e.shiftKey)&&this.props.onKeyDown&&this.props.onKeyDown(e)}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,i=(t.autoSelectText,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),a=(0,O.default)(n,"form-control editor edit-textarea");return g.default.createElement("textarea",u(u({ref:function(t){e.text=t},className:a},i),{},{onKeyDown:this.handleKeyDown}))}}],n&&l(r.prototype,n),i&&l(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(g.Component);t.default=_},167(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(556)),i=n(r(442)),u=({invalidMessage:e})=>i.default.createElement("div",{className:"alert alert-danger in",role:"alert","data-testid":"editor-indicator"},i.default.createElement("strong",null,e));u.propTypes={invalidMessage:o.default.string},t.default=u},205(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=a(r(556)),s=u(r(442)),f=r(564),d=a(r(937)),p=a(r(868)),b=a(r(121)),y=a(r(167)),h=a(r(871)),v=a(r(462));t.default=(e,t)=>{var r;return(r=class extends s.Component{constructor(e){super(e),this.indicatorTimer=null,this.clearTimer=this.clearTimer.bind(this),this.handleBlur=this.handleBlur.bind(this),this.handleClick=this.handleClick.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.beforeComplete=this.beforeComplete.bind(this),this.asyncbeforeCompete=this.asyncbeforeCompete.bind(this),this.displayErrorMessage=this.displayErrorMessage.bind(this),this.state={invalidMessage:null}}componentWillUnmount(){this.clearTimer()}componentDidUpdate({message:t}){e.isDefined(t)&&(this.createTimer(),this.setState(()=>({invalidMessage:t})))}clearTimer(){this.indicatorTimer&&clearTimeout(this.indicatorTimer)}createTimer(){this.clearTimer();const{timeToCloseMessage:t,onErrorMessageDisappear:r}=this.props;this.indicatorTimer=e.sleep(()=>{this.setState(()=>({invalidMessage:null})),e.isFunction(r)&&r()},t)}displayErrorMessage(e){this.setState(()=>({invalidMessage:e})),this.createTimer()}asyncbeforeCompete(e){return(t={valid:!0})=>{const{valid:r,message:n}=t,{onUpdate:o,row:i,column:u}=this.props;r?o(i,u,e):this.displayErrorMessage(n)}}beforeComplete(t){const{onUpdate:r,row:n,column:o}=this.props;if(e.isFunction(o.validator)){const r=o.validator(t,n,o,this.asyncbeforeCompete(t));if(e.isObject(r)){if(r.async)return;if(!r.valid)return void this.displayErrorMessage(r.message)}}r(n,o,t)}handleBlur(){const{onEscape:e,blurToSave:t}=this.props;t?this.beforeComplete(this.editor.getValue()):e()}handleKeyDown(e){const{onEscape:t}=this.props;27===e.keyCode?t():13===e.keyCode&&this.beforeComplete(this.editor.getValue())}handleClick(e){"TD"!==e.target.tagName&&e.stopPropagation()}render(){let r;const{row:n,column:o,className:i,style:u,rowIndex:a,columnIndex:c,autoSelectText:m}=this.props,{dataField:O}=o,g=e.get(n,O),_=e.isDefined(this.state.invalidMessage);let j=o.editorClasses||"";e.isFunction(o.editorClasses)&&(j=o.editorClasses(g,n,a,c));let E=o.editorStyle||{};e.isFunction(o.editorStyle)&&(E=o.editorStyle(g,n,a,c));let w={ref:e=>this.editor=e,defaultValue:g,style:E,className:(0,l.default)({animated:_,shake:_},j),onKeyDown:this.handleKeyDown,onBlur:this.handleBlur,didMount:()=>{},onUpdate:e=>{}};t&&(w.didMount=()=>t(n,o,a,c));const P=e.isObject(o.editor);return P?w={...w,...o.editor}:e.isFunction(o.editorRenderer)&&(w={...w,onUpdate:this.beforeComplete}),r=e.isFunction(o.editorRenderer)?o.editorRenderer(w,g,n,o,a,c):P&&o.editor?.type===f.EDITTYPE.SELECT?s.default.createElement(b.default,{...w,row:n,column:o}):P&&o.editor?.type===f.EDITTYPE.TEXTAREA?s.default.createElement(v.default,{...w,autoSelectText:m}):P&&o.editor?.type===f.EDITTYPE.CHECKBOX?s.default.createElement(d.default,{...w}):P&&o.editor?.type===f.EDITTYPE.DATE?s.default.createElement(p.default,{...w}):s.default.createElement(h.default,{...w,autoSelectText:m}),s.default.createElement("td",{className:(0,l.default)("react-bootstrap-table-editing-cell",i),style:u,onClick:this.handleClick},r,_?s.default.createElement(y.default,{invalidMessage:this.state.invalidMessage}):null)}}).propTypes={row:c.default.object.isRequired,rowIndex:c.default.number.isRequired,column:c.default.object.isRequired,columnIndex:c.default.number.isRequired,onUpdate:c.default.func.isRequired,onEscape:c.default.func.isRequired,timeToCloseMessage:c.default.number,autoSelectText:c.default.bool,className:c.default.string,style:c.default.object},r.defaultProps={timeToCloseMessage:f.TIME_TO_CLOSE_MESSAGE,className:null,autoSelectText:!1,style:{}},r}},282(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=v(r(556)),g=h(r(442)),_=r(564),j=v(r(512)),E=v(r(855)),w=v(r(900)),P=v(r(88)),C=v(r(98)),T=v(r(137));t.default=function(e,t){var r;return r=function(r){function n(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),(t=c(this,n,[e])).indicatorTimer=null,t.clearTimer=t.clearTimer.bind(t),t.handleBlur=t.handleBlur.bind(t),t.handleClick=t.handleClick.bind(t),t.handleKeyDown=t.handleKeyDown.bind(t),t.beforeComplete=t.beforeComplete.bind(t),t.asyncbeforeCompete=t.asyncbeforeCompete.bind(t),t.displayErrorMessage=t.displayErrorMessage.bind(t),t.state={invalidMessage:null},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(n,r),o=n,u=[{key:"componentWillUnmount",value:function(){this.clearTimer()}},{key:"componentDidUpdate",value:function(t){var r=t.message;e.isDefined(r)&&(this.createTimer(),this.setState(function(){return{invalidMessage:r}}))}},{key:"clearTimer",value:function(){this.indicatorTimer&&clearTimeout(this.indicatorTimer)}},{key:"createTimer",value:function(){var t=this;this.clearTimer();var r=this.props,n=r.timeToCloseMessage,o=r.onErrorMessageDisappear;this.indicatorTimer=e.sleep(function(){t.setState(function(){return{invalidMessage:null}}),e.isFunction(o)&&o()},n)}},{key:"displayErrorMessage",value:function(e){this.setState(function(){return{invalidMessage:e}}),this.createTimer()}},{key:"asyncbeforeCompete",value:function(e){var t=this;return function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{valid:!0},n=r.valid,o=r.message,i=t.props,u=i.onUpdate,a=i.row,l=i.column;n?u(a,l,e):t.displayErrorMessage(o)}}},{key:"beforeComplete",value:function(t){var r=this.props,n=r.onUpdate,o=r.row,i=r.column;if(e.isFunction(i.validator)){var u=i.validator(t,o,i,this.asyncbeforeCompete(t));if(e.isObject(u)){if(u.async)return;if(!u.valid)return void this.displayErrorMessage(u.message)}}n(o,i,t)}},{key:"handleBlur",value:function(){var e=this.props,t=e.onEscape;e.blurToSave?this.beforeComplete(this.editor.getValue()):t()}},{key:"handleKeyDown",value:function(e){var t=this.props.onEscape;27===e.keyCode?t():13===e.keyCode&&this.beforeComplete(this.editor.getValue())}},{key:"handleClick",value:function(e){"TD"!==e.target.tagName&&e.stopPropagation()}},{key:"render",value:function(){var r,n,o,u,a,l=this,c=this.props,s=c.row,f=c.column,d=c.className,p=c.style,b=c.rowIndex,y=c.columnIndex,h=c.autoSelectText,v=f.dataField,O=e.get(s,v),S=e.isDefined(this.state.invalidMessage),D=f.editorClasses||"";e.isFunction(f.editorClasses)&&(D=f.editorClasses(O,s,b,y));var x=f.editorStyle||{};e.isFunction(f.editorStyle)&&(x=f.editorStyle(O,s,b,y));var M={ref:function(e){return l.editor=e},defaultValue:O,style:x,className:(0,m.default)({animated:S,shake:S},D),onKeyDown:this.handleKeyDown,onBlur:this.handleBlur,didMount:function(){},onUpdate:function(e){}};t&&(M.didMount=function(){return t(s,f,b,y)});var k=e.isObject(f.editor);return k?M=i(i({},M),f.editor):e.isFunction(f.editorRenderer)&&(M=i(i({},M),{},{onUpdate:this.beforeComplete})),a=e.isFunction(f.editorRenderer)?f.editorRenderer(M,O,s,f,b,y):k&&(null===(r=f.editor)||void 0===r?void 0:r.type)===_.EDITTYPE.SELECT?g.default.createElement(w.default,i(i({},M),{},{row:s,column:f})):k&&(null===(n=f.editor)||void 0===n?void 0:n.type)===_.EDITTYPE.TEXTAREA?g.default.createElement(T.default,i(i({},M),{},{autoSelectText:h})):k&&(null===(o=f.editor)||void 0===o?void 0:o.type)===_.EDITTYPE.CHECKBOX?g.default.createElement(j.default,i({},M)):k&&(null===(u=f.editor)||void 0===u?void 0:u.type)===_.EDITTYPE.DATE?g.default.createElement(E.default,i({},M)):g.default.createElement(C.default,i(i({},M),{},{autoSelectText:h})),g.default.createElement("td",{className:(0,m.default)("react-bootstrap-table-editing-cell",d),style:p,onClick:this.handleClick},a,S?g.default.createElement(P.default,{invalidMessage:this.state.invalidMessage}):null)}}],u&&a(o.prototype,u),l&&a(o,l),Object.defineProperty(o,"prototype",{writable:!1}),o;var o,u,l}(g.Component),r.propTypes={row:O.default.object.isRequired,rowIndex:O.default.number.isRequired,column:O.default.object.isRequired,columnIndex:O.default.number.isRequired,onUpdate:O.default.func.isRequired,onEscape:O.default.func.isRequired,timeToCloseMessage:O.default.number,autoSelectText:O.default.bool,className:O.default.string,style:O.default.object},r.defaultProps={timeToCloseMessage:_.TIME_TO_CLOSE_MESSAGE,className:null,autoSelectText:!1,style:{}},r}},351(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(r(442)),c=r(898),s=a(r(282));t.default=function(e,t){var r=(0,s.default)(e,t);return function(t){return l.default.createElement(c.Consumer,null,function(n){return function(t,n){var o=e.get(t.row,t.column.dataField),u=t.column.editCellStyle||{},a=t.column.editCellClasses;return e.isFunction(t.column.editCellStyle)&&(u=t.column.editCellStyle(o,t.row,t.rowIndex,t.columnIndex)),e.isFunction(t.column.editCellClasses)&&(a=t.column.editCellClasses(o,t.row,t.rowIndex,t.columnIndex)),l.default.createElement(r,i(i({},t),{},{className:a,style:u},n))}(t,n)})}}},404(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(442)),i=r(511),u=n(r(205));t.default=(e,t)=>{const r=(0,u.default)(e,t);return t=>o.default.createElement(i.Consumer,null,n=>((t,n)=>{const i=e.get(t.row,t.column.dataField);let u=t.column.editCellStyle||{},a=t.column.editCellClasses;return e.isFunction(t.column.editCellStyle)&&(u=t.column.editCellStyle(i,t.row,t.rowIndex,t.columnIndex)),e.isFunction(t.column.editCellClasses)&&(a=t.column.editCellClasses(i,t.row,t.rowIndex,t.columnIndex)),o.default.createElement(r,{...t,className:a,style:u,...n})})(t,n))}},442(t){"use strict";t.exports=e},462(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e),this.handleKeyDown=this.handleKeyDown.bind(this)}componentDidMount(){const{defaultValue:e=null,didMount:t,autoSelectText:r=!1}=this.props;this.text.value=e,this.text.focus(),r&&this.text.select(),t&&t()}getValue(){return this.text.value}handleKeyDown(e){(13!==e.keyCode||e.shiftKey)&&this.props.onKeyDown&&this.props.onKeyDown(e)}render(){const{defaultValue:e="",didMount:t,className:r="",autoSelectText:n=!1,...o}=this.props,i=(0,l.default)(r,"form-control editor edit-textarea");return c.default.createElement("textarea",{ref:e=>{this.text=e},className:i,...o,onKeyDown:this.handleKeyDown})}}t.default=s},511(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Consumer=void 0;const o=n(r(556)),i=n(r(442)),u=r(564),a=i.default.createContext(null);t.default=(e,t,r,n)=>{class l extends i.default.Component{constructor(e){super(e),this.doUpdate=this.doUpdate.bind(this),this.startEditing=this.startEditing.bind(this),this.escapeEditing=this.escapeEditing.bind(this),this.completeEditing=this.completeEditing.bind(this),this.handleCellUpdate=this.handleCellUpdate.bind(this),this.state={ridx:null,cidx:null,message:null}}static getDerivedStateFromProps(t,n){return t.cellEdit&&e.isFunction(r)&&r()?t.cellEdit.options.errorMessage?{message:t.cellEdit.options.errorMessage}:{ridx:n.ridx,cidx:n.cidx,message:null}:{...n}}handleCellUpdate(r,n,o){const i=t.typeConvert(n.type,o),{cellEdit:u}=this.props,{beforeSaveCell:a}=u.options,l=e.get(r,n.dataField),c=(e=!0)=>{e?this.doUpdate(r,n,i):this.escapeEditing()};if(e.isFunction(a)){const t=a(l,i,r,n,c);if(e.isObject(t)&&t.async)return}this.doUpdate(r,n,i)}doUpdate(o,i,u){const{keyField:a,cellEdit:l,data:c}=this.props,{afterSaveCell:s}=l.options,f=e.get(o,a),d=e.get(o,i.dataField);r()?n(f,i.dataField,u):(t.editCell(c,a,f,i.dataField,u),e.isFunction(s)&&s(d,u,o,i),this.completeEditing())}completeEditing(){this.setState(()=>({ridx:null,cidx:null,message:null}))}startEditing(e,t){const r=()=>{this.setState(()=>({ridx:e,cidx:t}))},{selectRow:n}=this.props;n&&!n.clickToEdit&&n.clickToSelect||r()}escapeEditing(){this.setState(()=>({ridx:null,cidx:null}))}render(){const{cellEdit:{options:{nonEditableRows:t,errorMessage:r,...n},ridx:o,cidx:u,...l}}=this.props,c={...n,...l,ridx:null!==this.state.ridx?this.state.ridx:o??null,cidx:null!==this.state.cidx?this.state.cidx:u??null,message:this.state.message,nonEditableRows:e.isDefined(t)?t():[],atstart:this.startEditing,onEscape:this.escapeEditing,onUpdate:this.handleCellUpdate};return i.default.createElement(a.Provider,{value:{...c}},this.props.children)}}return l.propTypes={data:o.default.array.isRequired,selectRow:o.default.object,options:o.default.shape({mode:o.default.oneOf([u.CLICK_TO_CELL_EDIT,u.DBCLICK_TO_CELL_EDIT]).isRequired,onErrorMessageDisappear:o.default.func,blurToSave:o.default.bool,beforeSaveCell:o.default.func,afterSaveCell:o.default.func,onStartEdit:o.default.func,nonEditableRows:o.default.func,timeToCloseMessage:o.default.number,errorMessage:o.default.any})},{Provider:l}},t.Consumer=a.Consumer},512(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=f(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,u,a=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(a.push(n.value),a.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(u=r.return(),Object(u)!==u))return}finally{if(c)throw o}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,f(n.key),n)}}function f(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function d(e,t,r){return t=b(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,p()?Reflect.construct(t,r||[],b(e).constructor):t.apply(e,r))}function p(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(p=function(){return!!e})()}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var h,v=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},m=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},O=(h=function(e){return h=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},h(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=h(e),n=0;n<r.length;n++)"default"!==r[n]&&v(t,e,r[n]);return m(t,e),t}),g=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var _=g(r(942)),j=O(r(442)),E=function(e){function t(e){var r,n,o;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(o=d(this,t,[e])).state={checked:(null!==(r=e.defaultValue)&&void 0!==r&&r).toString()===(null!==(n=e.value)&&void 0!==n?n:"on:off").split(":")[0]},o.handleChange=o.handleChange.bind(o),o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props.didMount;this.checkbox.focus(),e&&e()}},{key:"getValue",value:function(){var e,t=l((null!==(e=this.props.value)&&void 0!==e?e:"on:off").split(":"),2),r=t[0],n=t[1];return this.checkbox.checked?r:n}},{key:"handleChange",value:function(e){this.props.onChange&&this.props.onChange(e);var t=e.target;this.setState(function(){return{checked:t.checked}})}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,i=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),a=(0,_.default)("editor edit-chseckbox checkbox",n);return j.default.createElement("input",u(u({ref:function(t){e.checkbox=t},type:"checkbox",className:a},i),{},{checked:this.state.checked,onChange:this.handleChange}))}}],n&&s(r.prototype,n),i&&s(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(j.Component);t.default=E},556(e,t,r){e.exports=r(694)()},564(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.EDITTYPE=t.DBCLICK_TO_CELL_EDIT=t.CLICK_TO_CELL_EDIT=t.DELAY_FOR_DBCLICK=t.TIME_TO_CLOSE_MESSAGE=void 0;var o=n(r(898)),i=n(r(351)),u=n(r(810));t.TIME_TO_CLOSE_MESSAGE=3e3,t.DELAY_FOR_DBCLICK=200,t.CLICK_TO_CELL_EDIT="click",t.DBCLICK_TO_CELL_EDIT="dbclick",t.EDITTYPE={TEXT:"text",SELECT:"select",TEXTAREA:"textarea",CHECKBOX:"checkbox",DATE:"date"},t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:o.default,createEditingCell:i.default,withRowLevelCellEdit:u.default,DBCLICK_TO_CELL_EDIT:t.DBCLICK_TO_CELL_EDIT,DELAY_FOR_DBCLICK:t.DELAY_FOR_DBCLICK,options:e}},t.Type=t.EDITTYPE},694(e,t,r){"use strict";var n=r(925);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,r,o,i,u){if(u!==n){var a=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 a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return r.PropTypes=r,r}},810(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(r(442)),c=r(564),s=r(898);t.default=function(e,t){function r(r){return l.default.createElement(s.Consumer,null,function(n){return function(r,n){var o=r.value,u=!(n.nonEditableRows.length>0&&n.nonEditableRows.indexOf(o)>-1),a={};return t&&n.mode===c.DBCLICK_TO_CELL_EDIT&&(a.DELAY_FOR_DBCLICK=c.DELAY_FOR_DBCLICK),l.default.createElement(e,i(i(i({},r),a),{},{editingRowIdx:n.ridx,editingColIdx:n.cidx,isEditable:u,atstart:n.atstart,clickToEdit:n.mode===c.CLICK_TO_CELL_EDIT,dbclickToEdit:n.mode===c.DBCLICK_TO_CELL_EDIT}))}(r,n)})}return r.displayName="WithCellEditingRowConsumer",r}},855(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=h(r(442)),g=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),c(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount;this.date.valueAsDate=new Date(r),this.date.focus(),n&&n()}},{key:"getValue",value:function(){return this.date.value}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,a=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),l=(0,m.default)(n,"form-control editor edit-date");return O.default.createElement("input",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({ref:function(t){e.date=t},type:"date",className:l},a))}}],n&&a(r.prototype,n),l&&a(r,l),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,l}(O.Component);t.default=g},856(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.EDITTYPE=t.DBCLICK_TO_CELL_EDIT=t.CLICK_TO_CELL_EDIT=t.DELAY_FOR_DBCLICK=t.TIME_TO_CLOSE_MESSAGE=void 0;var o=n(r(511)),i=n(r(404)),u=n(r(33));t.TIME_TO_CLOSE_MESSAGE=3e3,t.DELAY_FOR_DBCLICK=200,t.CLICK_TO_CELL_EDIT="click",t.DBCLICK_TO_CELL_EDIT="dbclick",t.EDITTYPE={TEXT:"text",SELECT:"select",TEXTAREA:"textarea",CHECKBOX:"checkbox",DATE:"date"},t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:o.default,createEditingCell:i.default,withRowLevelCellEdit:u.default,DBCLICK_TO_CELL_EDIT:t.DBCLICK_TO_CELL_EDIT,DELAY_FOR_DBCLICK:t.DELAY_FOR_DBCLICK,options:e}},t.Type=t.EDITTYPE},868(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{componentDidMount(){const{defaultValue:e="",didMount:t}=this.props;this.date.valueAsDate=new Date(e),this.date.focus(),t&&t()}getValue(){return this.date.value}render(){const{defaultValue:e="",didMount:t,className:r="",onUpdate:n,...o}=this.props,i=(0,l.default)(r,"form-control editor edit-date");return c.default.createElement("input",{ref:e=>{this.date=e},type:"date",className:i,...o})}}t.default=s},871(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{componentDidMount(){const{defaultValue:e="",didMount:t,autoSelectText:r=!1}=this.props;this.text.value=e,this.text.focus(),r&&this.text.select(),t&&t()}getValue(){return this.text.value}render(){const{defaultValue:e="",didMount:t,className:r="",autoSelectText:n=!1,onUpdate:o,...i}=this.props,u=(0,l.default)(r,"form-control editor edit-text");return c.default.createElement("input",{ref:e=>{this.text=e},type:"text",className:u,...i})}}t.default=s},898(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["nonEditableRows","errorMessage"],i=["options","ridx","cidx"];function u(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?u(Object(r),!0).forEach(function(t){l(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):u(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function l(e,t,r){return(t=f(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,f(n.key),n)}}function f(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function d(e,t,r){return t=b(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,p()?Reflect.construct(t,r||[],b(e).constructor):t.apply(e,r))}function p(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(p=function(){return!!e})()}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var h=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Consumer=void 0;var v=h(r(556)),m=h(r(442)),O=r(564),g=m.default.createContext(null);t.default=function(e,t,r,n){var u=function(u){function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),(t=d(this,l,[e])).doUpdate=t.doUpdate.bind(t),t.startEditing=t.startEditing.bind(t),t.escapeEditing=t.escapeEditing.bind(t),t.completeEditing=t.completeEditing.bind(t),t.handleCellUpdate=t.handleCellUpdate.bind(t),t.state={ridx:null,cidx:null,message:null},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(l,u),f=l,p=[{key:"handleCellUpdate",value:function(r,n,o){var i=this,u=t.typeConvert(n.type,o),a=this.props.cellEdit.options.beforeSaveCell,l=e.get(r,n.dataField);if(e.isFunction(a)){var c=a(l,u,r,n,function(){arguments.length>0&&void 0!==arguments[0]&&!arguments[0]?i.escapeEditing():i.doUpdate(r,n,u)});if(e.isObject(c)&&c.async)return}this.doUpdate(r,n,u)}},{key:"doUpdate",value:function(o,i,u){var a=this.props,l=a.keyField,c=a.cellEdit,s=a.data,f=c.options.afterSaveCell,d=e.get(o,l),p=e.get(o,i.dataField);r()?n(d,i.dataField,u):(t.editCell(s,l,d,i.dataField,u),e.isFunction(f)&&f(p,u,o,i),this.completeEditing())}},{key:"completeEditing",value:function(){this.setState(function(){return{ridx:null,cidx:null,message:null}})}},{key:"startEditing",value:function(e,t){var r=this,n=this.props.selectRow;n&&!n.clickToEdit&&n.clickToSelect||r.setState(function(){return{ridx:e,cidx:t}})}},{key:"escapeEditing",value:function(){this.setState(function(){return{ridx:null,cidx:null}})}},{key:"render",value:function(){var t=this.props.cellEdit,r=t.options,n=r.nonEditableRows,u=(r.errorMessage,c(r,o)),l=t.ridx,s=t.cidx,f=c(t,i),d=a(a(a({},u),f),{},{ridx:null!==this.state.ridx?this.state.ridx:null!=l?l:null,cidx:null!==this.state.cidx?this.state.cidx:null!=s?s:null,message:this.state.message,nonEditableRows:e.isDefined(n)?n():[],atstart:this.startEditing,onEscape:this.escapeEditing,onUpdate:this.handleCellUpdate});return m.default.createElement(g.Provider,{value:a({},d)},this.props.children)}}],b=[{key:"getDerivedStateFromProps",value:function(t,n){return t.cellEdit&&e.isFunction(r)&&r()?t.cellEdit.options.errorMessage?{message:t.cellEdit.options.errorMessage}:{ridx:n.ridx,cidx:n.cidx,message:null}:a({},n)}}],p&&s(f.prototype,p),b&&s(f,b),Object.defineProperty(f,"prototype",{writable:!1}),f;var f,p,b}(m.default.Component);return u.propTypes={data:v.default.array.isRequired,selectRow:v.default.object,options:v.default.shape({mode:v.default.oneOf([O.CLICK_TO_CELL_EDIT,O.DBCLICK_TO_CELL_EDIT]).isRequired,onErrorMessageDisappear:v.default.func,blurToSave:v.default.bool,beforeSaveCell:v.default.func,afterSaveCell:v.default.func,onStartEdit:v.default.func,nonEditableRows:v.default.func,timeToCloseMessage:v.default.number,errorMessage:v.default.any})},{Provider:u}},t.Consumer=g.Consumer},900(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","getOptions","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=c(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,c(n.key),n)}}function c(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function s(e,t,r){return t=d(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(t,r||[],d(e).constructor):t.apply(e,r))}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(f=function(){return!!e})()}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function p(e,t){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},p(e,t)}var b,y=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},h=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},v=(b=function(e){return b=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},b(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=b(e),n=0;n<r.length;n++)"default"!==r[n]&&y(t,e,r[n]);return h(t,e),t}),m=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var O=m(r(942)),g=v(r(442)),_=function(e){function t(e){var r,n;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),n=s(this,t,[e]);var o=null!==(r=e.options)&&void 0!==r?r:[];return e.getOptions&&(o=e.getOptions(n.setOptions.bind(n),{row:e.row,column:e.column})||[]),n.state={options:o},n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&p(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount;this.select.value=r,this.select.focus(),n&&n()}},{key:"setOptions",value:function(e){this.setState({options:e})}},{key:"getValue",value:function(){return this.select.value}},{key:"render",value:function(){var e=this,t=this.props,r=t.defaultValue,n=void 0===r?"":r,i=(t.didMount,t.getOptions,t.className),a=void 0===i?"":i,l=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),c=(0,O.default)(a,"form-control editor edit-select"),s=u(u({},l),{},{className:c});return g.default.createElement("select",u(u({},s),{},{ref:function(t){e.select=t},defaultValue:n}),this.state.options.map(function(e){var t=e.label,r=e.value;return g.default.createElement("option",{key:r,value:r},t)}))}}],n&&l(r.prototype,n),i&&l(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(g.Component);t.default=_},925(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},937(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e),this.state={checked:(e.defaultValue??!1).toString()===(e.value??"on:off").split(":")[0]},this.handleChange=this.handleChange.bind(this)}componentDidMount(){const{didMount:e}=this.props;this.checkbox.focus(),e&&e()}getValue(){const[e,t]=(this.props.value??"on:off").split(":");return this.checkbox.checked?e:t}handleChange(e){this.props.onChange&&this.props.onChange(e);const{target:t}=e;this.setState(()=>({checked:t.checked}))}render(){const{defaultValue:e=!1,didMount:t,className:r="",onUpdate:n,...o}=this.props,i=(0,l.default)("editor edit-chseckbox checkbox",r);return c.default.createElement("input",{ref:e=>{this.checkbox=e},type:"checkbox",className:i,...o,checked:this.state.checked,onChange:this.handleChange})}}t.default=s},942(e,t){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var r=arguments[t];r&&(e=u(e,i(r)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var r in e)n.call(e,r)&&e[r]&&(t=u(t,r));return t}function u(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(r=function(){return o}.apply(t,[]))||(e.exports=r)}()}},r={},function e(n){var o=r[n];if(void 0!==o)return o.exports;var i=r[n]={exports:{}};return t[n].call(i.exports,i,i.exports,e),i.exports}(856);var t,r});
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IubWluLmpzIiwibWFwcGluZ3MiOiI7Q0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxVQUNSLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sQ0FBQyxTQUFVSixHQUNRLGlCQUFaQyxRQUNkQSxRQUFxQyw0QkFBSUQsRUFBUUcsUUFBUSxVQUV6REosRUFBa0MsNEJBQUlDLEVBQVFELEVBQVksTUFDM0QsQ0FURCxDQVNHTyxLQUFPQyxJQUNWLE8sK0pDVEEsa0JBQ0EsU0FLQSxTQUVBLFVBQWUsQ0FBQ0MsRUFBZ0JDLEtBMkI5QixTQUFTQyxFQUFhQyxHQUNwQixPQUNFLHdCQUFDLEVBQUFDLFNBQVEsS0FBR0MsR0E1QlcsRUFBQ0YsRUFBWUUsS0FDdEMsTUFBTUMsRUFBTUgsRUFBTUksTUFDWkMsSUFDSkgsRUFBU0ksZ0JBQWdCQyxPQUFTLEdBQ2xDTCxFQUFTSSxnQkFBZ0JFLFFBQVFMLElBQVEsR0FHckNNLEVBQWlELENBQUMsRUFNeEQsT0FKSVgsR0FBb0JJLEVBQVNRLE9BQVMsRUFBQUMsdUJBQ3hDRixFQUFNRyxrQkFBb0IsRUFBQUEsbUJBSTFCLHdCQUFDZixFQUFTLElBQ0pHLEtBQ0FTLEVBQ0pJLGNBQWVYLEVBQVNZLEtBQ3hCQyxjQUFlYixFQUFTYyxLQUN4QkMsV0FBWVosRUFDWmEsUUFBU2hCLEVBQVNnQixRQUNsQkMsWUFBYWpCLEVBQVNRLE9BQVMsRUFBQVUsbUJBQy9CQyxjQUFlbkIsRUFBU1EsT0FBUyxFQUFBQyx3QkFNVlcsQ0FBbUJ0QixFQUFPRSxHQUV2RCxDQUdBLE9BREFILEVBQWF3QixZQUFjLDZCQUNwQnhCLEUseUJDekNULElBQUl5QixFQUF3RCxTQUFVQyxHQUNwRSxPQUFPQSxHQUFPQSxFQUFJQyxXQUFhRCxFQUFN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YnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9yb3ctY29uc3VtZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9lZGl0b3ItaW5kaWNhdG9yLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy90ZXh0LWVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9kcm9wZG93bi1lZGl0b3IudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy90ZXh0YXJlYS1lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvZWRpdG9yLWluZGljYXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvZWRpdGluZy1jZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvZWRpdGluZy1jZWxsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9lZGl0aW5nLWNlbGwtY29uc3VtZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvZWRpdGluZy1jZWxsLWNvbnN1bWVyLnRzeCIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvdGV4dGFyZWEtZWRpdG9yLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvY2hlY2tib3gtZWRpdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvcm93LWNvbnN1bWVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9kYXRlLWVkaXRvci5qcyIsIndlYnBhY2s6Ly8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvZGF0ZS1lZGl0b3IudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL3RleHQtZWRpdG9yLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvZHJvcGRvd24tZWRpdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9jaGVja2JveC1lZGl0b3IudHN4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ0VkaXRvclwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdFZGl0b3JcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSk7XG59KShzZWxmLCAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18pID0+IHtcbnJldHVybiAiLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQ0xJQ0tfVE9fQ0VMTF9FRElULFxuICBEQkNMSUNLX1RPX0NFTExfRURJVCxcbiAgREVMQVlfRk9SX0RCQ0xJQ0ssXG59IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgQ29uc3VtZXIgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IChDb21wb25lbnQ6IGFueSwgc2VsZWN0Um93RW5hYmxlZDogYW55KSA9PiB7XG4gIGNvbnN0IHJlbmRlcldpdGhDZWxsRWRpdCA9IChwcm9wczogYW55LCBjZWxsRWRpdDogYW55KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gcHJvcHMudmFsdWU7XG4gICAgY29uc3QgZWRpdGFibGVSb3cgPSAhKFxuICAgICAgY2VsbEVkaXQubm9uRWRpdGFibGVSb3dzLmxlbmd0aCA+IDAgJiZcbiAgICAgIGNlbGxFZGl0Lm5vbkVkaXRhYmxlUm93cy5pbmRleE9mKGtleSkgPiAtMVxuICAgICk7XG5cbiAgICBjb25zdCBhdHRyczogeyBERUxBWV9GT1JfREJDTElDSz86IG51bWJlciB8IHN0cmluZyB9ID0ge307XG5cbiAgICBpZiAoc2VsZWN0Um93RW5hYmxlZCAmJiBjZWxsRWRpdC5tb2RlID09PSBEQkNMSUNLX1RPX0NFTExfRURJVCkge1xuICAgICAgYXR0cnMuREVMQVlfRk9SX0RCQ0xJQ0sgPSBERUxBWV9GT1JfREJDTElDSztcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPENvbXBvbmVudFxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIHsuLi5hdHRyc31cbiAgICAgICAgZWRpdGluZ1Jvd0lkeD17Y2VsbEVkaXQucmlkeH1cbiAgICAgICAgZWRpdGluZ0NvbElkeD17Y2VsbEVkaXQuY2lkeH1cbiAgICAgICAgaXNFZGl0YWJsZT17ZWRpdGFibGVSb3d9XG4gICAgICAgIGF0c3RhcnQ9e2NlbGxFZGl0LmF0c3RhcnR9XG4gICAgICAgIGNsaWNrVG9FZGl0PXtjZWxsRWRpdC5tb2RlID09PSBDTElDS19UT19DRUxMX0VESVR9XG4gICAgICAgIGRiY2xpY2tUb0VkaXQ9e2NlbGxFZGl0Lm1vZGUgPT09IERCQ0xJQ0tfVE9fQ0VMTF9FRElUfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuICBmdW5jdGlvbiB3aXRoQ29uc3VtZXIocHJvcHM6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Q29uc3VtZXI+eyhjZWxsRWRpdCkgPT4gcmVuZGVyV2l0aENlbGxFZGl0KHByb3BzLCBjZWxsRWRpdCl9PC9Db25zdW1lcj5cbiAgICApO1xuICB9XG5cbiAgd2l0aENvbnN1bWVyLmRpc3BsYXlOYW1lID0gXCJXaXRoQ2VsbEVkaXRpbmdSb3dDb25zdW1lclwiO1xuICByZXR1cm4gd2l0aENvbnN1bWVyO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xudmFyIHByb3BfdHlwZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIEVkaXRvckluZGljYXRvciA9IGZ1bmN0aW9uIEVkaXRvckluZGljYXRvcihfcmVmKSB7XG4gIHZhciBpbnZhbGlkTWVzc2FnZSA9IF9yZWYuaW52YWxpZE1lc3NhZ2U7XG4gIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiYWxlcnQgYWxlcnQtZGFuZ2VyIGluXCIsXG4gICAgcm9sZTogXCJhbGVydFwiLFxuICAgIFwiZGF0YS10ZXN0aWRcIjogXCJlZGl0b3ItaW5kaWNhdG9yXCJcbiAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInN0cm9uZ1wiLCBudWxsLCBpbnZhbGlkTWVzc2FnZSkpO1xufTtcbkVkaXRvckluZGljYXRvci5wcm9wVHlwZXMgPSB7XG4gIGludmFsaWRNZXNzYWdlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLnN0cmluZ1xufTtcbi8vIEVkaXRvckluZGljYXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGludmFsaWRNZXNzYWdlOiBudWxsLFxuLy8gfTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gRWRpdG9ySW5kaWNhdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiZGVmYXVsdFZhbHVlXCIsIFwiZGlkTW91bnRcIiwgXCJjbGFzc05hbWVcIiwgXCJhdXRvU2VsZWN0VGV4dFwiLCBcIm9uVXBkYXRlXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbnZhciBjbGFzc25hbWVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsYXNzbmFtZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBUZXh0RWRpdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gVGV4dEVkaXRvcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGV4dEVkaXRvcik7XG4gICAgcmV0dXJuIF9jYWxsU3VwZXIodGhpcywgVGV4dEVkaXRvciwgYXJndW1lbnRzKTtcbiAgfVxuICBfaW5oZXJpdHMoVGV4dEVkaXRvciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhUZXh0RWRpdG9yLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzJGRlZmF1bHRWYSA9IF90aGlzJHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMkZGVmYXVsdFZhID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMkZGVmYXVsdFZhLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzLmRpZE1vdW50LFxuICAgICAgICBfdGhpcyRwcm9wcyRhdXRvU2VsZWMgPSBfdGhpcyRwcm9wcy5hdXRvU2VsZWN0VGV4dCxcbiAgICAgICAgYXV0b1NlbGVjdFRleHQgPSBfdGhpcyRwcm9wcyRhdXRvU2VsZWMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMkYXV0b1NlbGVjO1xuICAgICAgdGhpcy50ZXh0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgdGhpcy50ZXh0LmZvY3VzKCk7XG4gICAgICBpZiAoYXV0b1NlbGVjdFRleHQpIHRoaXMudGV4dC5zZWxlY3QoKTtcbiAgICAgIGlmIChkaWRNb3VudCkgZGlkTW91bnQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0LnZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkZGVmYXVsdFYsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMyLmRpZE1vdW50LFxuICAgICAgICBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkY2xhc3NOYW0sXG4gICAgICAgIF90aGlzJHByb3BzMiRhdXRvU2VsZSA9IF90aGlzJHByb3BzMi5hdXRvU2VsZWN0VGV4dCxcbiAgICAgICAgYXV0b1NlbGVjdFRleHQgPSBfdGhpcyRwcm9wczIkYXV0b1NlbGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMyJGF1dG9TZWxlLFxuICAgICAgICBvblVwZGF0ZSA9IF90aGlzJHByb3BzMi5vblVwZGF0ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0XCIpO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIF90aGlzLnRleHQgPSBub2RlO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzc1xuICAgICAgfSwgcmVzdCkpO1xuICAgIH1cbiAgfV0pO1xufShyZWFjdF8xLkNvbXBvbmVudCk7IC8vIFRleHRFZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgUHJvcFR5cGVzLm9iamVjdFxuLy8gICBdKSxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgIFByb3BUeXBlcy5udW1iZXJcbi8vICAgXSksXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuLy8gVGV4dEVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogbnVsbCxcbi8vICAgZGVmYXVsdFZhbHVlOiAnJyxcbi8vICAgYXV0b1NlbGVjdFRleHQ6IGZhbHNlLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBUZXh0RWRpdG9yOyIsIi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIE9wdGlvbiB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG59XG5cbmludGVyZmFjZSBEcm9wRG93bkVkaXRvclByb3BzIHtcbiAgcm93OiBvYmplY3Q7XG4gIGNvbHVtbjogb2JqZWN0O1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBvYmplY3Q7XG4gIG9wdGlvbnM/OiBPcHRpb25bXTtcbiAgZGlkTW91bnQ/OiAoKSA9PiB2b2lkO1xuICBnZXRPcHRpb25zPzogKFxuICAgIHNldE9wdGlvbnM6IChvcHRpb25zOiBPcHRpb25bXSkgPT4gdm9pZCxcbiAgICBjb250ZXh0OiB7IHJvdzogb2JqZWN0OyBjb2x1bW46IG9iamVjdCB9XG4gICkgPT4gT3B0aW9uW10gfCB2b2lkO1xuICBvblVwZGF0ZT86IGFueTtcbn1cblxuaW50ZXJmYWNlIERyb3BEb3duRWRpdG9yU3RhdGUge1xuICBvcHRpb25zOiBPcHRpb25bXTtcbn1cblxuY2xhc3MgRHJvcERvd25FZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQ8XG4gIERyb3BEb3duRWRpdG9yUHJvcHMsXG4gIERyb3BEb3duRWRpdG9yU3RhdGVcbj4ge1xuICBzZWxlY3Q6IGFueTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBsZXQgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMgPz8gW107XG4gICAgaWYgKHByb3BzLmdldE9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPVxuICAgICAgICBwcm9wcy5nZXRPcHRpb25zKHRoaXMuc2V0T3B0aW9ucy5iaW5kKHRoaXMpLCB7XG4gICAgICAgICAgcm93OiBwcm9wcy5yb3csXG4gICAgICAgICAgY29sdW1uOiBwcm9wcy5jb2x1bW4sXG4gICAgICAgIH0pIHx8IFtdO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0geyBvcHRpb25zIH07XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IGRlZmF1bHRWYWx1ZSA9IFwiXCIsIGRpZE1vdW50IH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIHRoaXMuc2VsZWN0LmZvY3VzKCk7XG4gICAgaWYgKGRpZE1vdW50KSB7XG4gICAgICBkaWRNb3VudCgpO1xuICAgIH1cbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IG9wdGlvbnMgfSk7XG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QudmFsdWU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVmYXVsdFZhbHVlID0gXCJcIixcbiAgICAgIGRpZE1vdW50LFxuICAgICAgZ2V0T3B0aW9ucyxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBlZGl0b3JDbGFzcyA9IGNzKGNsYXNzTmFtZSwgXCJmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtc2VsZWN0XCIpO1xuXG4gICAgY29uc3QgYXR0ciA9IHtcbiAgICAgIC4uLnJlc3QsXG4gICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHNlbGVjdFxuICAgICAgICB7Li4uYXR0cn1cbiAgICAgICAgcmVmPXsobm9kZSkgPT4geyB0aGlzLnNlbGVjdCA9IG5vZGU7IH19XG4gICAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5zdGF0ZS5vcHRpb25zLm1hcCgoeyBsYWJlbCwgdmFsdWUgfTogYW55KSA9PiAoXG4gICAgICAgICAgPG9wdGlvbiBrZXk9e3ZhbHVlfSB2YWx1ZT17dmFsdWV9PlxuICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICApKX1cbiAgICAgIDwvc2VsZWN0PlxuICAgICk7XG4gIH1cbn1cblxuLy8gRHJvcERvd25FZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICByb3c6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgY29sdW1uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICBQcm9wVHlwZXMubnVtYmVyXG4vLyAgIF0pLFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBvcHRpb25zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuLy8gICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueVxuLy8gICAgIH0pKVxuLy8gICBdKSxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jLFxuLy8gICBnZXRPcHRpb25zOiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcblxuLy8gRHJvcERvd25FZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBzdHlsZToge30sXG4vLyAgIG9wdGlvbnM6IFtdLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkLFxuLy8gICBnZXRPcHRpb25zOiB1bmRlZmluZWRcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IERyb3BEb3duRWRpdG9yO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJkZWZhdWx0VmFsdWVcIiwgXCJkaWRNb3VudFwiLCBcImNsYXNzTmFtZVwiLCBcImF1dG9TZWxlY3RUZXh0XCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbnZhciBjbGFzc25hbWVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsYXNzbmFtZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBUZXh0QXJlYUVkaXRvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIFRleHRBcmVhRWRpdG9yKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0QXJlYUVkaXRvcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIFRleHRBcmVhRWRpdG9yLCBbcHJvcHNdKTtcbiAgICBfdGhpcy5oYW5kbGVLZXlEb3duID0gX3RoaXMuaGFuZGxlS2V5RG93bi5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKFRleHRBcmVhRWRpdG9yLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKFRleHRBcmVhRWRpdG9yLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzJGRlZmF1bHRWYSA9IF90aGlzJHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMkZGVmYXVsdFZhID09PSB2b2lkIDAgPyBudWxsIDogX3RoaXMkcHJvcHMkZGVmYXVsdFZhLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzLmRpZE1vdW50LFxuICAgICAgICBfdGhpcyRwcm9wcyRhdXRvU2VsZWMgPSBfdGhpcyRwcm9wcy5hdXRvU2VsZWN0VGV4dCxcbiAgICAgICAgYXV0b1NlbGVjdFRleHQgPSBfdGhpcyRwcm9wcyRhdXRvU2VsZWMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMkYXV0b1NlbGVjO1xuICAgICAgdGhpcy50ZXh0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgdGhpcy50ZXh0LmZvY3VzKCk7XG4gICAgICBpZiAoYXV0b1NlbGVjdFRleHQpIHRoaXMudGV4dC5zZWxlY3QoKTtcbiAgICAgIGlmIChkaWRNb3VudCkgZGlkTW91bnQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0LnZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYW5kbGVLZXlEb3duXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZSkge1xuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMgJiYgIWUuc2hpZnRLZXkpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uS2V5RG93bikge1xuICAgICAgICB0aGlzLnByb3BzLm9uS2V5RG93bihlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzMiRkZWZhdWx0ViA9IF90aGlzJHByb3BzMi5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzMiRkZWZhdWx0ViA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMiRkZWZhdWx0VixcbiAgICAgICAgZGlkTW91bnQgPSBfdGhpcyRwcm9wczIuZGlkTW91bnQsXG4gICAgICAgIF90aGlzJHByb3BzMiRjbGFzc05hbSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMiRjbGFzc05hbSA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMiRjbGFzc05hbSxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGF1dG9TZWxlID0gX3RoaXMkcHJvcHMyLmF1dG9TZWxlY3RUZXh0LFxuICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzMiRhdXRvU2VsZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wczIkYXV0b1NlbGUsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIGVkaXRvckNsYXNzID0gKDAsIGNsYXNzbmFtZXNfMVtcImRlZmF1bHRcIl0pKGNsYXNzTmFtZSwgXCJmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtdGV4dGFyZWFcIik7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgICBfdGhpczIudGV4dCA9IG5vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHR5cGU9XCJ0ZXh0YXJlYVwiXG4gICAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3NcbiAgICAgIH0sIHJlc3QpLCB7fSwge1xuICAgICAgICBvbktleURvd246IHRoaXMuaGFuZGxlS2V5RG93blxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xufShyZWFjdF8xLkNvbXBvbmVudCk7IC8vIFRleHRBcmVhRWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSksXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuLy8gICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuLy8gICBhdXRvU2VsZWN0VGV4dDogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG4vLyBUZXh0QXJlYUVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuLy8gICBhdXRvU2VsZWN0VGV4dDogZmFsc2UsXG4vLyAgIG9uS2V5RG93bjogdW5kZWZpbmVkLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkLFxuLy8gfTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gVGV4dEFyZWFFZGl0b3I7IiwiLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuY29uc3QgRWRpdG9ySW5kaWNhdG9yID0gKHsgaW52YWxpZE1lc3NhZ2UgfTogYW55KSA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGluXCIgcm9sZT1cImFsZXJ0XCIgZGF0YS10ZXN0aWQ9XCJlZGl0b3ItaW5kaWNhdG9yXCI+XG4gICAgPHN0cm9uZz57aW52YWxpZE1lc3NhZ2V9PC9zdHJvbmc+XG4gIDwvZGl2PlxuKTtcblxuRWRpdG9ySW5kaWNhdG9yLnByb3BUeXBlcyA9IHtcbiAgaW52YWxpZE1lc3NhZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG4vLyBFZGl0b3JJbmRpY2F0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBpbnZhbGlkTWVzc2FnZTogbnVsbCxcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRvckluZGljYXRvcjtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuLyogZXNsaW50IGNsYXNzLW1ldGhvZHMtdXNlLXRoaXM6IDAgKi9cbi8qIGVzbGludCBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS1lbGVtZW50LWludGVyYWN0aW9uczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEVESVRUWVBFLCBUSU1FX1RPX0NMT1NFX01FU1NBR0UgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCBDaGVja0JveEVkaXRvciBmcm9tIFwiLi9jaGVja2JveC1lZGl0b3JcIjtcbmltcG9ydCBEYXRlRWRpdG9yIGZyb20gXCIuL2RhdGUtZWRpdG9yXCI7XG5pbXBvcnQgRHJvcGRvd25FZGl0b3IgZnJvbSBcIi4vZHJvcGRvd24tZWRpdG9yXCI7XG5pbXBvcnQgRWRpdG9ySW5kaWNhdG9yIGZyb20gXCIuL2VkaXRvci1pbmRpY2F0b3JcIjtcbmltcG9ydCBUZXh0RWRpdG9yIGZyb20gXCIuL3RleHQtZWRpdG9yXCI7XG5pbXBvcnQgVGV4dEFyZWFFZGl0b3IgZnJvbSBcIi4vdGV4dGFyZWEtZWRpdG9yXCI7XG5cbmludGVyZmFjZSBFZGl0aW5nQ2VsbFByb3BzIHtcbiAgcm93OiBvYmplY3Q7XG4gIHJvd0luZGV4OiBudW1iZXI7XG4gIGNvbHVtbjoge1xuICAgIGRhdGFGaWVsZDogYW55O1xuICAgIHZhbGlkYXRvcj86IGFueTtcbiAgICBlZGl0b3JDbGFzc2VzPzogYW55O1xuICAgIGVkaXRvclN0eWxlPzogYW55O1xuICAgIGVkaXRvcj86IHsgdHlwZTogYW55OyBvcHRpb25zPzogYW55IH07XG4gICAgZWRpdG9yUmVuZGVyZXI/OiBGdW5jdGlvbjtcbiAgICB0ZXh0OiBhbnk7XG4gIH07XG4gIGNvbHVtbkluZGV4OiBudW1iZXI7XG4gIG9uVXBkYXRlOiAocm93OiBvYmplY3QsIGNvbHVtbjogb2JqZWN0LCB2YWx1ZTogYW55KSA9PiB2b2lkO1xuICBvbkVzY2FwZTogKCkgPT4gdm9pZDtcbiAgdGltZVRvQ2xvc2VNZXNzYWdlPzogbnVtYmVyO1xuICBhdXRvU2VsZWN0VGV4dD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBvYmplY3Q7XG4gIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyPzogYW55O1xuICBibHVyVG9TYXZlPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEVkaXRpbmdDZWxsU3RhdGUge1xuICBpbnZhbGlkTWVzc2FnZTogYW55O1xufVxuXG5leHBvcnQgZGVmYXVsdCAoXzogYW55LCBvblN0YXJ0RWRpdD86IGFueSkgPT5cbiAgY2xhc3MgRWRpdGluZ0NlbGwgZXh0ZW5kcyBDb21wb25lbnQ8RWRpdGluZ0NlbGxQcm9wcywgRWRpdGluZ0NlbGxTdGF0ZT4ge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICByb3c6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICAgIHJvd0luZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICAgIGNvbHVtbkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgICBvblVwZGF0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIG9uRXNjYXBlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgdGltZVRvQ2xvc2VNZXNzYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgYXV0b1NlbGVjdFRleHQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgfTtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICB0aW1lVG9DbG9zZU1lc3NhZ2U6IFRJTUVfVE9fQ0xPU0VfTUVTU0FHRSxcbiAgICAgIGNsYXNzTmFtZTogbnVsbCxcbiAgICAgIGF1dG9TZWxlY3RUZXh0OiBmYWxzZSxcbiAgICAgIHN0eWxlOiB7fSxcbiAgICB9O1xuXG4gICAgZWRpdG9yOiBhbnk7XG4gICAgaW5kaWNhdG9yVGltZXI6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHRoaXMuaW5kaWNhdG9yVGltZXIgPSBudWxsO1xuICAgICAgdGhpcy5jbGVhclRpbWVyID0gdGhpcy5jbGVhclRpbWVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmhhbmRsZUJsdXIgPSB0aGlzLmhhbmRsZUJsdXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmhhbmRsZUtleURvd24gPSB0aGlzLmhhbmRsZUtleURvd24uYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuYmVmb3JlQ29tcGxldGUgPSB0aGlzLmJlZm9yZUNvbXBsZXRlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmFzeW5jYmVmb3JlQ29tcGV0ZSA9IHRoaXMuYXN5bmNiZWZvcmVDb21wZXRlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2UgPSB0aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2UuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgIGludmFsaWRNZXNzYWdlOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuY2xlYXJUaW1lcigpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSh7IG1lc3NhZ2UgfTogYW55KSB7XG4gICAgICBpZiAoXy5pc0RlZmluZWQobWVzc2FnZSkpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVUaW1lcigpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgICAgaW52YWxpZE1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhclRpbWVyKCkge1xuICAgICAgaWYgKHRoaXMuaW5kaWNhdG9yVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaW5kaWNhdG9yVGltZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZVRpbWVyKCkge1xuICAgICAgdGhpcy5jbGVhclRpbWVyKCk7XG4gICAgICBjb25zdCB7IHRpbWVUb0Nsb3NlTWVzc2FnZSwgb25FcnJvck1lc3NhZ2VEaXNhcHBlYXIgfSA9IHRoaXMucHJvcHM7XG4gICAgICB0aGlzLmluZGljYXRvclRpbWVyID0gXy5zbGVlcCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHtcbiAgICAgICAgICBpbnZhbGlkTWVzc2FnZTogbnVsbCxcbiAgICAgICAgfSkpO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyKSkgb25FcnJvck1lc3NhZ2VEaXNhcHBlYXIoKTtcbiAgICAgIH0sIHRpbWVUb0Nsb3NlTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgZGlzcGxheUVycm9yTWVzc2FnZShtZXNzYWdlOiBhbnkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHtcbiAgICAgICAgaW52YWxpZE1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICB9KSk7XG4gICAgICB0aGlzLmNyZWF0ZVRpbWVyKCk7XG4gICAgfVxuXG4gICAgYXN5bmNiZWZvcmVDb21wZXRlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICAgIHJldHVybiAocmVzdWx0ID0geyB2YWxpZDogdHJ1ZSB9KSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgeyB2YWxpZCwgbWVzc2FnZSB9ID0gcmVzdWx0O1xuICAgICAgICBjb25zdCB7IG9uVXBkYXRlLCByb3csIGNvbHVtbiB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgIHRoaXMuZGlzcGxheUVycm9yTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgb25VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgYmVmb3JlQ29tcGxldGUobmV3VmFsdWU6IGFueSkge1xuICAgICAgY29uc3QgeyBvblVwZGF0ZSwgcm93LCBjb2x1bW4gfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi52YWxpZGF0b3IpKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlRm9ybSA9IGNvbHVtbi52YWxpZGF0b3IoXG4gICAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICB0aGlzLmFzeW5jYmVmb3JlQ29tcGV0ZShuZXdWYWx1ZSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKF8uaXNPYmplY3QodmFsaWRhdGVGb3JtKSkge1xuICAgICAgICAgIGlmICh2YWxpZGF0ZUZvcm0uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGVsc2UgaWYgKCF2YWxpZGF0ZUZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheUVycm9yTWVzc2FnZSh2YWxpZGF0ZUZvcm0ubWVzc2FnZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvblVwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWUpO1xuICAgIH1cblxuICAgIGhhbmRsZUJsdXIoKSB7XG4gICAgICBjb25zdCB7IG9uRXNjYXBlLCBibHVyVG9TYXZlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKGJsdXJUb1NhdmUpIHtcbiAgICAgICAgdGhpcy5iZWZvcmVDb21wbGV0ZSh0aGlzLmVkaXRvci5nZXRWYWx1ZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uRXNjYXBlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlS2V5RG93bihlOiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgb25Fc2NhcGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAvLyBFU0NcbiAgICAgICAgb25Fc2NhcGUoKTtcbiAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAvLyBFTlRFUlxuICAgICAgICB0aGlzLmJlZm9yZUNvbXBsZXRlKHRoaXMuZWRpdG9yLmdldFZhbHVlKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNsaWNrKGU6IGFueSkge1xuICAgICAgaWYgKGUudGFyZ2V0LnRhZ05hbWUgIT09IFwiVERcIikge1xuICAgICAgICAvLyBUbyBhdm9pZCB0aGUgcm93IHNlbGVjdGlvbiBldmVudCBiZSB0cmlnZ2VyZWQsXG4gICAgICAgIC8vIFdoZW4gdXNlciBkZWZpbmUgc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QgYW5kIHNlbGVjdFJvdy5jbGlja1RvRWRpdFxuICAgICAgICAvLyBXZSBzaG91bGRuJ3QgdHJpZ2dlciBzZWxlY3Rpb24gZXZlbnQgZXZlbiBpZiB1c2VyIGNsaWNrIG9uIHRoZSBjZWxsIGVkaXRvcihpbnB1dClcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBsZXQgZWRpdG9yOiBhbnk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJvdyxcbiAgICAgICAgY29sdW1uLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHN0eWxlLFxuICAgICAgICByb3dJbmRleCxcbiAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgIGF1dG9TZWxlY3RUZXh0LFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGRhdGFGaWVsZCB9ID0gY29sdW1uO1xuXG4gICAgICBjb25zdCB2YWx1ZSA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIGNvbnN0IGhhc0Vycm9yID0gXy5pc0RlZmluZWQodGhpcy5zdGF0ZS5pbnZhbGlkTWVzc2FnZSk7XG5cbiAgICAgIGxldCBjdXN0b21FZGl0b3JDbGFzcyA9IGNvbHVtbi5lZGl0b3JDbGFzc2VzIHx8IFwiXCI7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi5lZGl0b3JDbGFzc2VzKSkge1xuICAgICAgICBjdXN0b21FZGl0b3JDbGFzcyA9IGNvbHVtbi5lZGl0b3JDbGFzc2VzKFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHJvdyxcbiAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBsZXQgZWRpdG9yU3R5bGUgPSBjb2x1bW4uZWRpdG9yU3R5bGUgfHwge307XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi5lZGl0b3JTdHlsZSkpIHtcbiAgICAgICAgZWRpdG9yU3R5bGUgPSBjb2x1bW4uZWRpdG9yU3R5bGUodmFsdWUsIHJvdywgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWRpdG9yQ2xhc3MgPSBjcyhcbiAgICAgICAge1xuICAgICAgICAgIGFuaW1hdGVkOiBoYXNFcnJvcixcbiAgICAgICAgICBzaGFrZTogaGFzRXJyb3IsXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbUVkaXRvckNsYXNzXG4gICAgICApO1xuXG4gICAgICBsZXQgZWRpdG9yUHJvcHMgPSB7XG4gICAgICAgIHJlZjogKG5vZGU6IGFueSkgPT4gKHRoaXMuZWRpdG9yID0gbm9kZSksXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdmFsdWUsXG4gICAgICAgIHN0eWxlOiBlZGl0b3JTdHlsZSxcbiAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzcyxcbiAgICAgICAgb25LZXlEb3duOiB0aGlzLmhhbmRsZUtleURvd24sXG4gICAgICAgIG9uQmx1cjogdGhpcy5oYW5kbGVCbHVyLFxuICAgICAgICBkaWRNb3VudDogKCkgPT4geyB9LFxuICAgICAgICBvblVwZGF0ZTogKG5ld1ZhbHVlOiBhbnkpID0+IHsgfSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChvblN0YXJ0RWRpdCkge1xuICAgICAgICBlZGl0b3JQcm9wcy5kaWRNb3VudCA9ICgpID0+XG4gICAgICAgICAgb25TdGFydEVkaXQocm93LCBjb2x1bW4sIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzRGVmYXVsdEVkaXRvckRlZmluZWQgPSBfLmlzT2JqZWN0KGNvbHVtbi5lZGl0b3IpO1xuXG4gICAgICBpZiAoaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCkge1xuICAgICAgICBlZGl0b3JQcm9wcyA9IHtcbiAgICAgICAgICAuLi5lZGl0b3JQcm9wcyxcbiAgICAgICAgICAuLi5jb2x1bW4uZWRpdG9yLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvclJlbmRlcmVyKSkge1xuICAgICAgICBlZGl0b3JQcm9wcyA9IHtcbiAgICAgICAgICAuLi5lZGl0b3JQcm9wcyxcbiAgICAgICAgICBvblVwZGF0ZTogdGhpcy5iZWZvcmVDb21wbGV0ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yUmVuZGVyZXIpKSB7XG4gICAgICAgIGVkaXRvciA9IGNvbHVtbi5lZGl0b3JSZW5kZXJlciEoXG4gICAgICAgICAgZWRpdG9yUHJvcHMsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCAmJlxuICAgICAgICBjb2x1bW4uZWRpdG9yPy50eXBlID09PSBFRElUVFlQRS5TRUxFQ1RcbiAgICAgICkge1xuICAgICAgICBlZGl0b3IgPSA8RHJvcGRvd25FZGl0b3Igey4uLmVkaXRvclByb3BzfSByb3c9e3Jvd30gY29sdW1uPXtjb2x1bW59IC8+O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCAmJlxuICAgICAgICBjb2x1bW4uZWRpdG9yPy50eXBlID09PSBFRElUVFlQRS5URVhUQVJFQVxuICAgICAgKSB7XG4gICAgICAgIGVkaXRvciA9IChcbiAgICAgICAgICA8VGV4dEFyZWFFZGl0b3Igey4uLmVkaXRvclByb3BzfSBhdXRvU2VsZWN0VGV4dD17YXV0b1NlbGVjdFRleHR9IC8+XG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmXG4gICAgICAgIGNvbHVtbi5lZGl0b3I/LnR5cGUgPT09IEVESVRUWVBFLkNIRUNLQk9YXG4gICAgICApIHtcbiAgICAgICAgZWRpdG9yID0gPENoZWNrQm94RWRpdG9yIHsuLi5lZGl0b3JQcm9wc30gLz47XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmXG4gICAgICAgIGNvbHVtbi5lZGl0b3I/LnR5cGUgPT09IEVESVRUWVBFLkRBVEVcbiAgICAgICkge1xuICAgICAgICBlZGl0b3IgPSA8RGF0ZUVkaXRvciB7Li4uZWRpdG9yUHJvcHN9IC8+O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdG9yID0gKFxuICAgICAgICAgIDxUZXh0RWRpdG9yIHsuLi5lZGl0b3JQcm9wc30gYXV0b1NlbGVjdFRleHQ9e2F1dG9TZWxlY3RUZXh0fSAvPlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8dGRcbiAgICAgICAgICBjbGFzc05hbWU9e2NzKFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLWVkaXRpbmctY2VsbFwiLCBjbGFzc05hbWUpfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfVxuICAgICAgICA+XG4gICAgICAgICAge2VkaXRvcn1cbiAgICAgICAgICB7aGFzRXJyb3IgPyAoXG4gICAgICAgICAgICA8RWRpdG9ySW5kaWNhdG9yIGludmFsaWRNZXNzYWdlPXt0aGlzLnN0YXRlLmludmFsaWRNZXNzYWdlfSAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L3RkPlxuICAgICAgKTtcbiAgICB9XG4gIH07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCBjbGFzcy1tZXRob2RzLXVzZS10aGlzOiAwICovXG4vKiBlc2xpbnQganN4LWExMXkvbm8tbm9uaW50ZXJhY3RpdmUtZWxlbWVudC1pbnRlcmFjdGlvbnM6IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbnZhciBjbGFzc25hbWVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsYXNzbmFtZXNcIikpO1xudmFyIHByb3BfdHlwZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9fMSA9IHJlcXVpcmUoXCIuLlwiKTtcbnZhciBjaGVja2JveF9lZGl0b3JfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9jaGVja2JveC1lZGl0b3JcIikpO1xudmFyIGRhdGVfZWRpdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZGF0ZS1lZGl0b3JcIikpO1xudmFyIGRyb3Bkb3duX2VkaXRvcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2Ryb3Bkb3duLWVkaXRvclwiKSk7XG52YXIgZWRpdG9yX2luZGljYXRvcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2VkaXRvci1pbmRpY2F0b3JcIikpO1xudmFyIHRleHRfZWRpdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdGV4dC1lZGl0b3JcIikpO1xudmFyIHRleHRhcmVhX2VkaXRvcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3RleHRhcmVhLWVkaXRvclwiKSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChfLCBvblN0YXJ0RWRpdCkge1xuICB2YXIgX2E7XG4gIHJldHVybiBfYSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gICAgZnVuY3Rpb24gRWRpdGluZ0NlbGwocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFZGl0aW5nQ2VsbCk7XG4gICAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRWRpdGluZ0NlbGwsIFtwcm9wc10pO1xuICAgICAgX3RoaXMuaW5kaWNhdG9yVGltZXIgPSBudWxsO1xuICAgICAgX3RoaXMuY2xlYXJUaW1lciA9IF90aGlzLmNsZWFyVGltZXIuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5oYW5kbGVCbHVyID0gX3RoaXMuaGFuZGxlQmx1ci5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmhhbmRsZUNsaWNrID0gX3RoaXMuaGFuZGxlQ2xpY2suYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5oYW5kbGVLZXlEb3duID0gX3RoaXMuaGFuZGxlS2V5RG93bi5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmJlZm9yZUNvbXBsZXRlID0gX3RoaXMuYmVmb3JlQ29tcGxldGUuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5hc3luY2JlZm9yZUNvbXBldGUgPSBfdGhpcy5hc3luY2JlZm9yZUNvbXBldGUuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlID0gX3RoaXMuZGlzcGxheUVycm9yTWVzc2FnZS5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICBpbnZhbGlkTWVzc2FnZTogbnVsbFxuICAgICAgfTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2luaGVyaXRzKEVkaXRpbmdDZWxsLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICAgIHJldHVybiBfY3JlYXRlQ2xhc3MoRWRpdGluZ0NlbGwsIFt7XG4gICAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdGhpcy5jbGVhclRpbWVyKCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShfcmVmKSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0gX3JlZi5tZXNzYWdlO1xuICAgICAgICBpZiAoXy5pc0RlZmluZWQobWVzc2FnZSkpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVRpbWVyKCk7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpbnZhbGlkTWVzc2FnZTogbWVzc2FnZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJjbGVhclRpbWVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXJUaW1lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kaWNhdG9yVGltZXIpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5pbmRpY2F0b3JUaW1lcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY3JlYXRlVGltZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGVUaW1lcigpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICAgIHRoaXMuY2xlYXJUaW1lcigpO1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHRpbWVUb0Nsb3NlTWVzc2FnZSA9IF90aGlzJHByb3BzLnRpbWVUb0Nsb3NlTWVzc2FnZSxcbiAgICAgICAgICBvbkVycm9yTWVzc2FnZURpc2FwcGVhciA9IF90aGlzJHByb3BzLm9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyO1xuICAgICAgICB0aGlzLmluZGljYXRvclRpbWVyID0gXy5zbGVlcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGludmFsaWRNZXNzYWdlOiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24ob25FcnJvck1lc3NhZ2VEaXNhcHBlYXIpKSBvbkVycm9yTWVzc2FnZURpc2FwcGVhcigpO1xuICAgICAgICB9LCB0aW1lVG9DbG9zZU1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkaXNwbGF5RXJyb3JNZXNzYWdlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZGlzcGxheUVycm9yTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbnZhbGlkTWVzc2FnZTogbWVzc2FnZVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNyZWF0ZVRpbWVyKCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImFzeW5jYmVmb3JlQ29tcGV0ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzeW5jYmVmb3JlQ29tcGV0ZShuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7XG4gICAgICAgICAgICB2YWxpZDogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHZhciB2YWxpZCA9IHJlc3VsdC52YWxpZCxcbiAgICAgICAgICAgIG1lc3NhZ2UgPSByZXN1bHQubWVzc2FnZTtcbiAgICAgICAgICB2YXIgX3RoaXMzJHByb3BzID0gX3RoaXMzLnByb3BzLFxuICAgICAgICAgICAgb25VcGRhdGUgPSBfdGhpczMkcHJvcHMub25VcGRhdGUsXG4gICAgICAgICAgICByb3cgPSBfdGhpczMkcHJvcHMucm93LFxuICAgICAgICAgICAgY29sdW1uID0gX3RoaXMzJHByb3BzLmNvbHVtbjtcbiAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICBfdGhpczMuZGlzcGxheUVycm9yTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgb25VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiYmVmb3JlQ29tcGxldGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBiZWZvcmVDb21wbGV0ZShuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvblVwZGF0ZSA9IF90aGlzJHByb3BzMi5vblVwZGF0ZSxcbiAgICAgICAgICByb3cgPSBfdGhpcyRwcm9wczIucm93LFxuICAgICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzMi5jb2x1bW47XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLnZhbGlkYXRvcikpIHtcbiAgICAgICAgICB2YXIgdmFsaWRhdGVGb3JtID0gY29sdW1uLnZhbGlkYXRvcihuZXdWYWx1ZSwgcm93LCBjb2x1bW4sIHRoaXMuYXN5bmNiZWZvcmVDb21wZXRlKG5ld1ZhbHVlKSk7XG4gICAgICAgICAgaWYgKF8uaXNPYmplY3QodmFsaWRhdGVGb3JtKSkge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlRm9ybS5hc3luYykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF2YWxpZGF0ZUZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlKHZhbGlkYXRlRm9ybS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblVwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWUpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJoYW5kbGVCbHVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cigpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgb25Fc2NhcGUgPSBfdGhpcyRwcm9wczMub25Fc2NhcGUsXG4gICAgICAgICAgYmx1clRvU2F2ZSA9IF90aGlzJHByb3BzMy5ibHVyVG9TYXZlO1xuICAgICAgICBpZiAoYmx1clRvU2F2ZSkge1xuICAgICAgICAgIHRoaXMuYmVmb3JlQ29tcGxldGUodGhpcy5lZGl0b3IuZ2V0VmFsdWUoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb25Fc2NhcGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJoYW5kbGVLZXlEb3duXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlS2V5RG93bihlKSB7XG4gICAgICAgIHZhciBvbkVzY2FwZSA9IHRoaXMucHJvcHMub25Fc2NhcGU7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgLy8gRVNDXG4gICAgICAgICAgb25Fc2NhcGUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgLy8gRU5URVJcbiAgICAgICAgICB0aGlzLmJlZm9yZUNvbXBsZXRlKHRoaXMuZWRpdG9yLmdldFZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImhhbmRsZUNsaWNrXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ2xpY2soZSkge1xuICAgICAgICBpZiAoZS50YXJnZXQudGFnTmFtZSAhPT0gXCJURFwiKSB7XG4gICAgICAgICAgLy8gVG8gYXZvaWQgdGhlIHJvdyBzZWxlY3Rpb24gZXZlbnQgYmUgdHJpZ2dlcmVkLFxuICAgICAgICAgIC8vIFdoZW4gdXNlciBkZWZpbmUgc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QgYW5kIHNlbGVjdFJvdy5jbGlja1RvRWRpdFxuICAgICAgICAgIC8vIFdlIHNob3VsZG4ndCB0cmlnZ2VyIHNlbGVjdGlvbiBldmVudCBldmVuIGlmIHVzZXIgY2xpY2sgb24gdGhlIGNlbGwgZWRpdG9yKGlucHV0KVxuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcyxcbiAgICAgICAgICBfY29sdW1uJGVkaXRvcixcbiAgICAgICAgICBfY29sdW1uJGVkaXRvcjIsXG4gICAgICAgICAgX2NvbHVtbiRlZGl0b3IzLFxuICAgICAgICAgIF9jb2x1bW4kZWRpdG9yNDtcbiAgICAgICAgdmFyIGVkaXRvcjtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgcm93ID0gX3RoaXMkcHJvcHM0LnJvdyxcbiAgICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczQuY29sdW1uLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzNC5jbGFzc05hbWUsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczQuc3R5bGUsXG4gICAgICAgICAgcm93SW5kZXggPSBfdGhpcyRwcm9wczQucm93SW5kZXgsXG4gICAgICAgICAgY29sdW1uSW5kZXggPSBfdGhpcyRwcm9wczQuY29sdW1uSW5kZXgsXG4gICAgICAgICAgYXV0b1NlbGVjdFRleHQgPSBfdGhpcyRwcm9wczQuYXV0b1NlbGVjdFRleHQ7XG4gICAgICAgIHZhciBkYXRhRmllbGQgPSBjb2x1bW4uZGF0YUZpZWxkO1xuICAgICAgICB2YXIgdmFsdWUgPSBfLmdldChyb3csIGRhdGFGaWVsZCk7XG4gICAgICAgIHZhciBoYXNFcnJvciA9IF8uaXNEZWZpbmVkKHRoaXMuc3RhdGUuaW52YWxpZE1lc3NhZ2UpO1xuICAgICAgICB2YXIgY3VzdG9tRWRpdG9yQ2xhc3MgPSBjb2x1bW4uZWRpdG9yQ2xhc3NlcyB8fCBcIlwiO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi5lZGl0b3JDbGFzc2VzKSkge1xuICAgICAgICAgIGN1c3RvbUVkaXRvckNsYXNzID0gY29sdW1uLmVkaXRvckNsYXNzZXModmFsdWUsIHJvdywgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZWRpdG9yU3R5bGUgPSBjb2x1bW4uZWRpdG9yU3R5bGUgfHwge307XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvclN0eWxlKSkge1xuICAgICAgICAgIGVkaXRvclN0eWxlID0gY29sdW1uLmVkaXRvclN0eWxlKHZhbHVlLCByb3csIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVkaXRvckNsYXNzID0gKDAsIGNsYXNzbmFtZXNfMVtcImRlZmF1bHRcIl0pKHtcbiAgICAgICAgICBhbmltYXRlZDogaGFzRXJyb3IsXG4gICAgICAgICAgc2hha2U6IGhhc0Vycm9yXG4gICAgICAgIH0sIGN1c3RvbUVkaXRvckNsYXNzKTtcbiAgICAgICAgdmFyIGVkaXRvclByb3BzID0ge1xuICAgICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczQuZWRpdG9yID0gbm9kZTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgc3R5bGU6IGVkaXRvclN0eWxlLFxuICAgICAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3MsXG4gICAgICAgICAgb25LZXlEb3duOiB0aGlzLmhhbmRsZUtleURvd24sXG4gICAgICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXIsXG4gICAgICAgICAgZGlkTW91bnQ6IGZ1bmN0aW9uIGRpZE1vdW50KCkge30sXG4gICAgICAgICAgb25VcGRhdGU6IGZ1bmN0aW9uIG9uVXBkYXRlKG5ld1ZhbHVlKSB7fVxuICAgICAgICB9O1xuICAgICAgICBpZiAob25TdGFydEVkaXQpIHtcbiAgICAgICAgICBlZGl0b3JQcm9wcy5kaWRNb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBvblN0YXJ0RWRpdChyb3csIGNvbHVtbiwgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHZhciBpc0RlZmF1bHRFZGl0b3JEZWZpbmVkID0gXy5pc09iamVjdChjb2x1bW4uZWRpdG9yKTtcbiAgICAgICAgaWYgKGlzRGVmYXVsdEVkaXRvckRlZmluZWQpIHtcbiAgICAgICAgICBlZGl0b3JQcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWRpdG9yUHJvcHMpLCBjb2x1bW4uZWRpdG9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvclJlbmRlcmVyKSkge1xuICAgICAgICAgIGVkaXRvclByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcyksIHt9LCB7XG4gICAgICAgICAgICBvblVwZGF0ZTogdGhpcy5iZWZvcmVDb21wbGV0ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvclJlbmRlcmVyKSkge1xuICAgICAgICAgIGVkaXRvciA9IGNvbHVtbi5lZGl0b3JSZW5kZXJlcihlZGl0b3JQcm9wcywgdmFsdWUsIHJvdywgY29sdW1uLCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiYgKChfY29sdW1uJGVkaXRvciA9IGNvbHVtbi5lZGl0b3IpID09PSBudWxsIHx8IF9jb2x1bW4kZWRpdG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uJGVkaXRvci50eXBlKSA9PT0gX18xLkVESVRUWVBFLlNFTEVDVCkge1xuICAgICAgICAgIGVkaXRvciA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoZHJvcGRvd25fZWRpdG9yXzFbXCJkZWZhdWx0XCJdLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVkaXRvclByb3BzKSwge30sIHtcbiAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgY29sdW1uOiBjb2x1bW5cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCAmJiAoKF9jb2x1bW4kZWRpdG9yMiA9IGNvbHVtbi5lZGl0b3IpID09PSBudWxsIHx8IF9jb2x1bW4kZWRpdG9yMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NvbHVtbiRlZGl0b3IyLnR5cGUpID09PSBfXzEuRURJVFRZUEUuVEVYVEFSRUEpIHtcbiAgICAgICAgICBlZGl0b3IgPSByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KHRleHRhcmVhX2VkaXRvcl8xW1wiZGVmYXVsdFwiXSwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcyksIHt9LCB7XG4gICAgICAgICAgICBhdXRvU2VsZWN0VGV4dDogYXV0b1NlbGVjdFRleHRcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCAmJiAoKF9jb2x1bW4kZWRpdG9yMyA9IGNvbHVtbi5lZGl0b3IpID09PSBudWxsIHx8IF9jb2x1bW4kZWRpdG9yMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NvbHVtbiRlZGl0b3IzLnR5cGUpID09PSBfXzEuRURJVFRZUEUuQ0hFQ0tCT1gpIHtcbiAgICAgICAgICBlZGl0b3IgPSByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KGNoZWNrYm94X2VkaXRvcl8xW1wiZGVmYXVsdFwiXSwgX29iamVjdFNwcmVhZCh7fSwgZWRpdG9yUHJvcHMpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmICgoX2NvbHVtbiRlZGl0b3I0ID0gY29sdW1uLmVkaXRvcikgPT09IG51bGwgfHwgX2NvbHVtbiRlZGl0b3I0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uJGVkaXRvcjQudHlwZSkgPT09IF9fMS5FRElUVFlQRS5EQVRFKSB7XG4gICAgICAgICAgZWRpdG9yID0gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChkYXRlX2VkaXRvcl8xW1wiZGVmYXVsdFwiXSwgX29iamVjdFNwcmVhZCh7fSwgZWRpdG9yUHJvcHMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlZGl0b3IgPSByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KHRleHRfZWRpdG9yXzFbXCJkZWZhdWx0XCJdLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVkaXRvclByb3BzKSwge30sIHtcbiAgICAgICAgICAgIGF1dG9TZWxlY3RUZXh0OiBhdXRvU2VsZWN0VGV4dFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInRkXCIsIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKShcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1lZGl0aW5nLWNlbGxcIiwgY2xhc3NOYW1lKSxcbiAgICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgICAgb25DbGljazogdGhpcy5oYW5kbGVDbGlja1xuICAgICAgICB9LCBlZGl0b3IsIGhhc0Vycm9yID8gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChlZGl0b3JfaW5kaWNhdG9yXzFbXCJkZWZhdWx0XCJdLCB7XG4gICAgICAgICAgaW52YWxpZE1lc3NhZ2U6IHRoaXMuc3RhdGUuaW52YWxpZE1lc3NhZ2VcbiAgICAgICAgfSkgOiBudWxsKTtcbiAgICAgIH1cbiAgICB9XSk7XG4gIH0ocmVhY3RfMS5Db21wb25lbnQpLCBfYS5wcm9wVHlwZXMgPSB7XG4gICAgcm93OiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIHJvd0luZGV4OiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIGNvbHVtbjogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBjb2x1bW5JbmRleDogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBvblVwZGF0ZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25Fc2NhcGU6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uZnVuYy5pc1JlcXVpcmVkLFxuICAgIHRpbWVUb0Nsb3NlTWVzc2FnZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5udW1iZXIsXG4gICAgYXV0b1NlbGVjdFRleHQ6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICBjbGFzc05hbWU6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uc3RyaW5nLFxuICAgIHN0eWxlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm9iamVjdFxuICB9LCBfYS5kZWZhdWx0UHJvcHMgPSB7XG4gICAgdGltZVRvQ2xvc2VNZXNzYWdlOiBfXzEuVElNRV9UT19DTE9TRV9NRVNTQUdFLFxuICAgIGNsYXNzTmFtZTogbnVsbCxcbiAgICBhdXRvU2VsZWN0VGV4dDogZmFsc2UsXG4gICAgc3R5bGU6IHt9XG4gIH0sIF9hO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBjb250ZXh0XzEgPSByZXF1aXJlKFwiLi9jb250ZXh0XCIpO1xudmFyIGVkaXRpbmdfY2VsbF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2VkaXRpbmctY2VsbFwiKSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChfLCBvblN0YXJ0RWRpdCkge1xuICB2YXIgRWRpdGluZ0NlbGwgPSAoMCwgZWRpdGluZ19jZWxsXzFbXCJkZWZhdWx0XCJdKShfLCBvblN0YXJ0RWRpdCk7XG4gIHZhciByZW5kZXJXaXRoRWRpdGluZ0NlbGwgPSBmdW5jdGlvbiByZW5kZXJXaXRoRWRpdGluZ0NlbGwocHJvcHMsIGNlbGxFZGl0KSB7XG4gICAgdmFyIGNvbnRlbnQgPSBfLmdldChwcm9wcy5yb3csIHByb3BzLmNvbHVtbi5kYXRhRmllbGQpO1xuICAgIHZhciBlZGl0Q2VsbHN0eWxlID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsU3R5bGUgfHwge307XG4gICAgdmFyIGVkaXRDZWxsY2xhc3NlcyA9IHByb3BzLmNvbHVtbi5lZGl0Q2VsbENsYXNzZXM7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihwcm9wcy5jb2x1bW4uZWRpdENlbGxTdHlsZSkpIHtcbiAgICAgIGVkaXRDZWxsc3R5bGUgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxTdHlsZShjb250ZW50LCBwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4LCBwcm9wcy5jb2x1bW5JbmRleCk7XG4gICAgfVxuICAgIGlmIChfLmlzRnVuY3Rpb24ocHJvcHMuY29sdW1uLmVkaXRDZWxsQ2xhc3NlcykpIHtcbiAgICAgIGVkaXRDZWxsY2xhc3NlcyA9IHByb3BzLmNvbHVtbi5lZGl0Q2VsbENsYXNzZXMoY29udGVudCwgcHJvcHMucm93LCBwcm9wcy5yb3dJbmRleCwgcHJvcHMuY29sdW1uSW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChFZGl0aW5nQ2VsbCwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICBjbGFzc05hbWU6IGVkaXRDZWxsY2xhc3NlcyxcbiAgICAgIHN0eWxlOiBlZGl0Q2VsbHN0eWxlXG4gICAgfSwgY2VsbEVkaXQpKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KGNvbnRleHRfMS5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKGNlbGxFZGl0KSB7XG4gICAgICByZXR1cm4gcmVuZGVyV2l0aEVkaXRpbmdDZWxsKHByb3BzLCBjZWxsRWRpdCk7XG4gICAgfSk7XG4gIH07XG59OyIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDb25zdW1lciB9IGZyb20gXCIuL2NvbnRleHRcIjtcbmltcG9ydCBjcmVhdGVFZGl0aW5nQ2VsbCBmcm9tIFwiLi9lZGl0aW5nLWNlbGxcIjtcblxuZXhwb3J0IGRlZmF1bHQgKF86IGFueSwgb25TdGFydEVkaXQ/OiBhbnkpID0+IHtcbiAgY29uc3QgRWRpdGluZ0NlbGwgPSBjcmVhdGVFZGl0aW5nQ2VsbChfLCBvblN0YXJ0RWRpdCk7XG4gIGNvbnN0IHJlbmRlcldpdGhFZGl0aW5nQ2VsbCA9IChwcm9wczogYW55LCBjZWxsRWRpdDogYW55KSA9PiB7XG4gICAgY29uc3QgY29udGVudCA9IF8uZ2V0KHByb3BzLnJvdywgcHJvcHMuY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgbGV0IGVkaXRDZWxsc3R5bGUgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxTdHlsZSB8fCB7fTtcbiAgICBsZXQgZWRpdENlbGxjbGFzc2VzID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsQ2xhc3NlcztcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlKSkge1xuICAgICAgZWRpdENlbGxzdHlsZSA9IHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlKFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBwcm9wcy5yb3csXG4gICAgICAgIHByb3BzLnJvd0luZGV4LFxuICAgICAgICBwcm9wcy5jb2x1bW5JbmRleFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF8uaXNGdW5jdGlvbihwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzKSkge1xuICAgICAgZWRpdENlbGxjbGFzc2VzID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsQ2xhc3NlcyhcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgcHJvcHMucm93LFxuICAgICAgICBwcm9wcy5yb3dJbmRleCxcbiAgICAgICAgcHJvcHMuY29sdW1uSW5kZXhcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxFZGl0aW5nQ2VsbFxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZT17ZWRpdENlbGxjbGFzc2VzfVxuICAgICAgICBzdHlsZT17ZWRpdENlbGxzdHlsZX1cbiAgICAgICAgey4uLmNlbGxFZGl0fVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiAocHJvcHM6IGFueSkgPT4gKFxuICAgIDxDb25zdW1lcj57KGNlbGxFZGl0KSA9PiByZW5kZXJXaXRoRWRpdGluZ0NlbGwocHJvcHMsIGNlbGxFZGl0KX08L0NvbnN1bWVyPlxuICApO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX187IiwiLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgVGV4dEVkaXRvclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGF1dG9TZWxlY3RUZXh0PzogYm9vbGVhbjtcbiAgZGlkTW91bnQ/OiAoKSA9PiB2b2lkO1xuICBvbktleURvd246IChldmVudDogYW55KSA9PiB2b2lkO1xufVxuXG5jbGFzcyBUZXh0QXJlYUVkaXRvciBleHRlbmRzIENvbXBvbmVudDxUZXh0RWRpdG9yUHJvcHM+IHtcbiAgdGV4dDogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogVGV4dEVkaXRvclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IHRoaXMuaGFuZGxlS2V5RG93bi5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVmYXVsdFZhbHVlID0gbnVsbCxcbiAgICAgIGRpZE1vdW50LFxuICAgICAgYXV0b1NlbGVjdFRleHQgPSBmYWxzZSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLnRleHQudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgdGhpcy50ZXh0LmZvY3VzKCk7XG4gICAgaWYgKGF1dG9TZWxlY3RUZXh0KSB0aGlzLnRleHQuc2VsZWN0KCk7XG4gICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICB9XG5cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dC52YWx1ZTtcbiAgfVxuXG4gIGhhbmRsZUtleURvd24oZTogYW55KSB7XG4gICAgaWYgKGUua2V5Q29kZSA9PT0gMTMgJiYgIWUuc2hpZnRLZXkpIHJldHVybjtcbiAgICBpZiAodGhpcy5wcm9wcy5vbktleURvd24pIHtcbiAgICAgIHRoaXMucHJvcHMub25LZXlEb3duKGUpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBcIlwiLFxuICAgICAgZGlkTW91bnQsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgYXV0b1NlbGVjdFRleHQgPSBmYWxzZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBlZGl0b3JDbGFzcyA9IGNzKGNsYXNzTmFtZSwgXCJmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtdGV4dGFyZWFcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICByZWY9eyhub2RlKSA9PiB7IHRoaXMudGV4dCA9IG5vZGU7IH19XG4gICAgICAgIC8vIHR5cGU9XCJ0ZXh0YXJlYVwiXG4gICAgICAgIGNsYXNzTmFtZT17ZWRpdG9yQ2xhc3N9XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgICBvbktleURvd249e3RoaXMuaGFuZGxlS2V5RG93bn1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBUZXh0QXJlYUVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdF0pLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKSxcbi8vICAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbi8vICAgYXV0b1NlbGVjdFRleHQ6IFByb3BUeXBlcy5ib29sLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmMsXG4vLyB9O1xuXG4vLyBUZXh0QXJlYUVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuLy8gICBhdXRvU2VsZWN0VGV4dDogZmFsc2UsXG4vLyAgIG9uS2V5RG93bjogdW5kZWZpbmVkLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgVGV4dEFyZWFFZGl0b3I7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuLyogZXNsaW50IHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBDTElDS19UT19DRUxMX0VESVQsXG4gIENlbGxFZGl0UHJvdmlkZXJQcm9wcyxcbiAgQ2VsbEVkaXRQcm92aWRlclN0YXRlLFxuICBEQkNMSUNLX1RPX0NFTExfRURJVCxcbn0gZnJvbSBcIi4uXCI7XG5cbmNvbnN0IENlbGxFZGl0Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8YW55PihudWxsKTtcblxuZXhwb3J0IGRlZmF1bHQgKFxuICBfOiBhbnksXG4gIGRhdGFPcGVyYXRvcj86IGFueSxcbiAgaXNSZW1vdGVDZWxsRWRpdD86IGFueSxcbiAgaGFuZGxlQ2VsbENoYW5nZT86IGFueVxuKSA9PiB7XG4gIGNsYXNzIENlbGxFZGl0UHJvdmlkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gICAgQ2VsbEVkaXRQcm92aWRlclByb3BzLFxuICAgIENlbGxFZGl0UHJvdmlkZXJTdGF0ZVxuICA+IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgZGF0YTogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgICBzZWxlY3RSb3c6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICBtb2RlOiBQcm9wVHlwZXMub25lT2YoW0NMSUNLX1RPX0NFTExfRURJVCwgREJDTElDS19UT19DRUxMX0VESVRdKVxuICAgICAgICAgIC5pc1JlcXVpcmVkLFxuICAgICAgICBvbkVycm9yTWVzc2FnZURpc2FwcGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGJsdXJUb1NhdmU6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICBiZWZvcmVTYXZlQ2VsbDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGFmdGVyU2F2ZUNlbGw6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBvblN0YXJ0RWRpdDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIG5vbkVkaXRhYmxlUm93czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIHRpbWVUb0Nsb3NlTWVzc2FnZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHRoaXMuZG9VcGRhdGUgPSB0aGlzLmRvVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLnN0YXJ0RWRpdGluZyA9IHRoaXMuc3RhcnRFZGl0aW5nLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmVzY2FwZUVkaXRpbmcgPSB0aGlzLmVzY2FwZUVkaXRpbmcuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuY29tcGxldGVFZGl0aW5nID0gdGhpcy5jb21wbGV0ZUVkaXRpbmcuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuaGFuZGxlQ2VsbFVwZGF0ZSA9IHRoaXMuaGFuZGxlQ2VsbFVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgcmlkeDogbnVsbCxcbiAgICAgICAgY2lkeDogbnVsbCxcbiAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbmV4dFByb3BzLmNlbGxFZGl0ICYmXG4gICAgICAgIF8uaXNGdW5jdGlvbihpc1JlbW90ZUNlbGxFZGl0KSAmJlxuICAgICAgICBpc1JlbW90ZUNlbGxFZGl0KClcbiAgICAgICkge1xuICAgICAgICBpZiAobmV4dFByb3BzLmNlbGxFZGl0Lm9wdGlvbnMuZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IG5leHRQcm9wcy5jZWxsRWRpdC5vcHRpb25zLmVycm9yTWVzc2FnZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByaWR4OiBwcmV2U3RhdGUucmlkeCxcbiAgICAgICAgICAgIGNpZHg6IHByZXZTdGF0ZS5jaWR4LFxuICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDZWxsVXBkYXRlKHJvdzogYW55LCBjb2x1bW46IGFueSwgbmV3VmFsdWU6IGFueSkge1xuICAgICAgY29uc3QgbmV3VmFsdWVXaXRoVHlwZSA9IGRhdGFPcGVyYXRvci50eXBlQ29udmVydChjb2x1bW4udHlwZSwgbmV3VmFsdWUpO1xuICAgICAgY29uc3QgeyBjZWxsRWRpdCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgYmVmb3JlU2F2ZUNlbGwgfSA9IGNlbGxFZGl0Lm9wdGlvbnM7XG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IF8uZ2V0KHJvdywgY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgICBjb25zdCBiZWZvcmVTYXZlQ2VsbERvbmUgPSAocmVzdWx0ID0gdHJ1ZSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5kb1VwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWVXaXRoVHlwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lc2NhcGVFZGl0aW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKGJlZm9yZVNhdmVDZWxsKSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBiZWZvcmVTYXZlQ2VsbChcbiAgICAgICAgICBvbGRWYWx1ZSxcbiAgICAgICAgICBuZXdWYWx1ZVdpdGhUeXBlLFxuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgYmVmb3JlU2F2ZUNlbGxEb25lXG4gICAgICAgICk7XG4gICAgICAgIGlmIChfLmlzT2JqZWN0KHJlc3VsdCkgJiYgcmVzdWx0LmFzeW5jKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmRvVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZVdpdGhUeXBlKTtcbiAgICB9XG5cbiAgICBkb1VwZGF0ZShyb3c6IGFueSwgY29sdW1uOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICAgIGNvbnN0IHsga2V5RmllbGQsIGNlbGxFZGl0LCBkYXRhIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBhZnRlclNhdmVDZWxsIH0gPSBjZWxsRWRpdC5vcHRpb25zO1xuICAgICAgY29uc3Qgcm93SWQgPSBfLmdldChyb3csIGtleUZpZWxkKTtcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gXy5nZXQocm93LCBjb2x1bW4uZGF0YUZpZWxkKTtcbiAgICAgIGlmIChpc1JlbW90ZUNlbGxFZGl0KCkpIHtcbiAgICAgICAgaGFuZGxlQ2VsbENoYW5nZShyb3dJZCwgY29sdW1uLmRhdGFGaWVsZCwgbmV3VmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YU9wZXJhdG9yLmVkaXRDZWxsKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAga2V5RmllbGQsXG4gICAgICAgICAgcm93SWQsXG4gICAgICAgICAgY29sdW1uLmRhdGFGaWVsZCxcbiAgICAgICAgICBuZXdWYWx1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGFmdGVyU2F2ZUNlbGwpKSB7XG4gICAgICAgICAgYWZ0ZXJTYXZlQ2VsbChvbGRWYWx1ZSwgbmV3VmFsdWUsIHJvdywgY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBsZXRlRWRpdGluZygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBsZXRlRWRpdGluZygpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHtcbiAgICAgICAgcmlkeDogbnVsbCxcbiAgICAgICAgY2lkeDogbnVsbCxcbiAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBzdGFydEVkaXRpbmcocmlkeDogYW55LCBjaWR4OiBhbnkpIHtcbiAgICAgIGNvbnN0IGVkaXRpbmcgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHtcbiAgICAgICAgICByaWR4LFxuICAgICAgICAgIGNpZHgsXG4gICAgICAgIH0pKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHsgc2VsZWN0Um93IH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKCFzZWxlY3RSb3cgfHwgc2VsZWN0Um93LmNsaWNrVG9FZGl0IHx8ICFzZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCkge1xuICAgICAgICBlZGl0aW5nKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXNjYXBlRWRpdGluZygpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHtcbiAgICAgICAgcmlkeDogbnVsbCxcbiAgICAgICAgY2lkeDogbnVsbCxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNlbGxFZGl0OiB7XG4gICAgICAgICAgb3B0aW9uczogeyBub25FZGl0YWJsZVJvd3MsIGVycm9yTWVzc2FnZSwgLi4ub3B0aW9uc1Jlc3QgfSxcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgcmlkeDogcHJvcFJpZHgsXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGNpZHg6IHByb3BDaWR4LFxuICAgICAgICAgIC4uLmNlbGxFZGl0UmVzdFxuICAgICAgICB9LFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IG5ld0NlbGxFZGl0ID0ge1xuICAgICAgICAuLi5vcHRpb25zUmVzdCxcbiAgICAgICAgLi4uY2VsbEVkaXRSZXN0LFxuICAgICAgICByaWR4OiB0aGlzLnN0YXRlLnJpZHggIT09IG51bGwgPyB0aGlzLnN0YXRlLnJpZHggOiAocHJvcFJpZHggPz8gbnVsbCksXG4gICAgICAgIGNpZHg6IHRoaXMuc3RhdGUuY2lkeCAhPT0gbnVsbCA/IHRoaXMuc3RhdGUuY2lkeCA6IChwcm9wQ2lkeCA/PyBudWxsKSxcbiAgICAgICAgbWVzc2FnZTogdGhpcy5zdGF0ZS5tZXNzYWdlLFxuICAgICAgICBub25FZGl0YWJsZVJvd3M6IF8uaXNEZWZpbmVkKG5vbkVkaXRhYmxlUm93cykgPyBub25FZGl0YWJsZVJvd3MoKSA6IFtdLFxuICAgICAgICBhdHN0YXJ0OiB0aGlzLnN0YXJ0RWRpdGluZyxcbiAgICAgICAgb25Fc2NhcGU6IHRoaXMuZXNjYXBlRWRpdGluZyxcbiAgICAgICAgb25VcGRhdGU6IHRoaXMuaGFuZGxlQ2VsbFVwZGF0ZSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDZWxsRWRpdENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgLi4ubmV3Q2VsbEVkaXQgfX0+XG4gICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvQ2VsbEVkaXRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogQ2VsbEVkaXRQcm92aWRlcixcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBDb25zdW1lciA9IENlbGxFZGl0Q29udGV4dC5Db25zdW1lcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiZGVmYXVsdFZhbHVlXCIsIFwiZGlkTW91bnRcIiwgXCJjbGFzc05hbWVcIiwgXCJvblVwZGF0ZVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkgeyBpZiAocikgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpOyB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpOyByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDsgfSB9XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7IChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTsgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07IHJldHVybiBuOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkgeyB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAobnVsbCAhPSB0KSB7IHZhciBlLCBuLCBpLCB1LCBhID0gW10sIGYgPSAhMCwgbyA9ICExOyB0cnkgeyBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7IGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjsgZiA9ICExOyB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7IH0gY2F0Y2ggKHIpIHsgbyA9ICEwLCBuID0gcjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFmICYmIG51bGwgIT0gdFtcInJldHVyblwiXSAmJiAodSA9IHRbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOyB9IGZpbmFsbHkgeyBpZiAobykgdGhyb3cgbjsgfSB9IHJldHVybiBhOyB9IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7IGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG52YXIgY2xhc3NuYW1lc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgQ2hlY2tCb3hFZGl0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBDaGVja0JveEVkaXRvcihwcm9wcykge1xuICAgIHZhciBfcHJvcHMkZGVmYXVsdFZhbHVlLCBfcHJvcHMkdmFsdWU7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDaGVja0JveEVkaXRvcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIENoZWNrQm94RWRpdG9yLCBbcHJvcHNdKTtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNoZWNrZWQ6ICgoX3Byb3BzJGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZSkgIT09IG51bGwgJiYgX3Byb3BzJGRlZmF1bHRWYWx1ZSAhPT0gdm9pZCAwID8gX3Byb3BzJGRlZmF1bHRWYWx1ZSA6IGZhbHNlKS50b1N0cmluZygpID09PSAoKF9wcm9wcyR2YWx1ZSA9IHByb3BzLnZhbHVlKSAhPT0gbnVsbCAmJiBfcHJvcHMkdmFsdWUgIT09IHZvaWQgMCA/IF9wcm9wcyR2YWx1ZSA6IFwib246b2ZmXCIpLnNwbGl0KFwiOlwiKVswXVxuICAgIH07XG4gICAgX3RoaXMuaGFuZGxlQ2hhbmdlID0gX3RoaXMuaGFuZGxlQ2hhbmdlLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoQ2hlY2tCb3hFZGl0b3IsIF9yZWFjdF8xJENvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoQ2hlY2tCb3hFZGl0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIGRpZE1vdW50ID0gdGhpcy5wcm9wcy5kaWRNb3VudDtcbiAgICAgIHRoaXMuY2hlY2tib3guZm9jdXMoKTtcbiAgICAgIGlmIChkaWRNb3VudCkgZGlkTW91bnQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkdmFsdWU7XG4gICAgICB2YXIgX3NwbGl0ID0gKChfdGhpcyRwcm9wcyR2YWx1ZSA9IHRoaXMucHJvcHMudmFsdWUpICE9PSBudWxsICYmIF90aGlzJHByb3BzJHZhbHVlICE9PSB2b2lkIDAgPyBfdGhpcyRwcm9wcyR2YWx1ZSA6IFwib246b2ZmXCIpLnNwbGl0KFwiOlwiKSxcbiAgICAgICAgX3NwbGl0MiA9IF9zbGljZWRUb0FycmF5KF9zcGxpdCwgMiksXG4gICAgICAgIHBvc2l0aXZlID0gX3NwbGl0MlswXSxcbiAgICAgICAgbmVnYXRpdmUgPSBfc3BsaXQyWzFdO1xuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tib3guY2hlY2tlZCA/IHBvc2l0aXZlIDogbmVnYXRpdmU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZUNoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZSkge1xuICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHRoaXMucHJvcHMub25DaGFuZ2UoZSk7XG4gICAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQ7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaGVja2VkOiB0YXJnZXQuY2hlY2tlZFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzJGRlZmF1bHRWYSA9IF90aGlzJHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMkZGVmYXVsdFZhID09PSB2b2lkIDAgPyBmYWxzZSA6IF90aGlzJHByb3BzJGRlZmF1bHRWYSxcbiAgICAgICAgZGlkTW91bnQgPSBfdGhpcyRwcm9wcy5kaWRNb3VudCxcbiAgICAgICAgX3RoaXMkcHJvcHMkY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcyRjbGFzc05hbWUgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wcyRjbGFzc05hbWUsXG4gICAgICAgIG9uVXBkYXRlID0gX3RoaXMkcHJvcHMub25VcGRhdGUsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoXCJlZGl0b3IgZWRpdC1jaHNlY2tib3ggY2hlY2tib3hcIiwgY2xhc3NOYW1lKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIF90aGlzMi5jaGVja2JveCA9IG5vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzc1xuICAgICAgfSwgcmVzdCksIHt9LCB7XG4gICAgICAgIGNoZWNrZWQ6IHRoaXMuc3RhdGUuY2hlY2tlZCxcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuaGFuZGxlQ2hhbmdlXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTsgLy8gQ2hlY2tCb3hFZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3RdKSxcbi8vICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbi8vICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmMsXG4vLyB9O1xuLy8gQ2hlY2tCb3hFZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyAgIHZhbHVlOiBcIm9uOm9mZlwiLFxuLy8gICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuLy8gICBvbkNoYW5nZTogdW5kZWZpbmVkLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkLFxuLy8gfTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gQ2hlY2tCb3hFZGl0b3I7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVHlwZSA9IGV4cG9ydHMuRURJVFRZUEUgPSBleHBvcnRzLkRCQ0xJQ0tfVE9fQ0VMTF9FRElUID0gZXhwb3J0cy5DTElDS19UT19DRUxMX0VESVQgPSBleHBvcnRzLkRFTEFZX0ZPUl9EQkNMSUNLID0gZXhwb3J0cy5USU1FX1RPX0NMT1NFX01FU1NBR0UgPSB2b2lkIDA7XG52YXIgY29udGV4dF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3NyYy9jb250ZXh0XCIpKTtcbnZhciBlZGl0aW5nX2NlbGxfY29uc3VtZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvZWRpdGluZy1jZWxsLWNvbnN1bWVyXCIpKTtcbnZhciByb3dfY29uc3VtZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvcm93LWNvbnN1bWVyXCIpKTtcbmV4cG9ydHMuVElNRV9UT19DTE9TRV9NRVNTQUdFID0gMzAwMDtcbmV4cG9ydHMuREVMQVlfRk9SX0RCQ0xJQ0sgPSAyMDA7XG5leHBvcnRzLkNMSUNLX1RPX0NFTExfRURJVCA9IFwiY2xpY2tcIjtcbmV4cG9ydHMuREJDTElDS19UT19DRUxMX0VESVQgPSBcImRiY2xpY2tcIjtcbmV4cG9ydHMuRURJVFRZUEUgPSB7XG4gIFRFWFQ6IFwidGV4dFwiLFxuICBTRUxFQ1Q6IFwic2VsZWN0XCIsXG4gIFRFWFRBUkVBOiBcInRleHRhcmVhXCIsXG4gIENIRUNLQk9YOiBcImNoZWNrYm94XCIsXG4gIERBVEU6IFwiZGF0ZVwiXG59O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVDb250ZXh0OiBjb250ZXh0XzFbXCJkZWZhdWx0XCJdLFxuICAgIGNyZWF0ZUVkaXRpbmdDZWxsOiBlZGl0aW5nX2NlbGxfY29uc3VtZXJfMVtcImRlZmF1bHRcIl0sXG4gICAgd2l0aFJvd0xldmVsQ2VsbEVkaXQ6IHJvd19jb25zdW1lcl8xW1wiZGVmYXVsdFwiXSxcbiAgICBEQkNMSUNLX1RPX0NFTExfRURJVDogZXhwb3J0cy5EQkNMSUNLX1RPX0NFTExfRURJVCxcbiAgICBERUxBWV9GT1JfREJDTElDSzogZXhwb3J0cy5ERUxBWV9GT1JfREJDTElDSyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH07XG59O1xuZXhwb3J0cy5UeXBlID0gZXhwb3J0cy5FRElUVFlQRTsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0KCkge31cbmVtcHR5RnVuY3Rpb25XaXRoUmVzZXQucmVzZXRXYXJuaW5nQ2FjaGUgPSBlbXB0eUZ1bmN0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICk7XG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgdGhyb3cgZXJyO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYmlnaW50OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGVsZW1lbnRUeXBlOiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW0sXG4gICAgZXhhY3Q6IGdldFNoaW0sXG5cbiAgICBjaGVja1Byb3BUeXBlczogZW1wdHlGdW5jdGlvbldpdGhSZXNldCxcbiAgICByZXNldFdhcm5pbmdDYWNoZTogZW1wdHlGdW5jdGlvblxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfXzEgPSByZXF1aXJlKFwiLi5cIik7XG52YXIgY29udGV4dF8xID0gcmVxdWlyZShcIi4vY29udGV4dFwiKTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKENvbXBvbmVudCwgc2VsZWN0Um93RW5hYmxlZCkge1xuICB2YXIgcmVuZGVyV2l0aENlbGxFZGl0ID0gZnVuY3Rpb24gcmVuZGVyV2l0aENlbGxFZGl0KHByb3BzLCBjZWxsRWRpdCkge1xuICAgIHZhciBrZXkgPSBwcm9wcy52YWx1ZTtcbiAgICB2YXIgZWRpdGFibGVSb3cgPSAhKGNlbGxFZGl0Lm5vbkVkaXRhYmxlUm93cy5sZW5ndGggPiAwICYmIGNlbGxFZGl0Lm5vbkVkaXRhYmxlUm93cy5pbmRleE9mKGtleSkgPiAtMSk7XG4gICAgdmFyIGF0dHJzID0ge307XG4gICAgaWYgKHNlbGVjdFJvd0VuYWJsZWQgJiYgY2VsbEVkaXQubW9kZSA9PT0gX18xLkRCQ0xJQ0tfVE9fQ0VMTF9FRElUKSB7XG4gICAgICBhdHRycy5ERUxBWV9GT1JfREJDTElDSyA9IF9fMS5ERUxBWV9GT1JfREJDTElDSztcbiAgICB9XG4gICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCBhdHRycyksIHt9LCB7XG4gICAgICBlZGl0aW5nUm93SWR4OiBjZWxsRWRpdC5yaWR4LFxuICAgICAgZWRpdGluZ0NvbElkeDogY2VsbEVkaXQuY2lkeCxcbiAgICAgIGlzRWRpdGFibGU6IGVkaXRhYmxlUm93LFxuICAgICAgYXRzdGFydDogY2VsbEVkaXQuYXRzdGFydCxcbiAgICAgIGNsaWNrVG9FZGl0OiBjZWxsRWRpdC5tb2RlID09PSBfXzEuQ0xJQ0tfVE9fQ0VMTF9FRElULFxuICAgICAgZGJjbGlja1RvRWRpdDogY2VsbEVkaXQubW9kZSA9PT0gX18xLkRCQ0xJQ0tfVE9fQ0VMTF9FRElUXG4gICAgfSkpO1xuICB9O1xuICBmdW5jdGlvbiB3aXRoQ29uc3VtZXIocHJvcHMpIHtcbiAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChjb250ZXh0XzEuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChjZWxsRWRpdCkge1xuICAgICAgcmV0dXJuIHJlbmRlcldpdGhDZWxsRWRpdChwcm9wcywgY2VsbEVkaXQpO1xuICAgIH0pO1xuICB9XG4gIHdpdGhDb25zdW1lci5kaXNwbGF5TmFtZSA9IFwiV2l0aENlbGxFZGl0aW5nUm93Q29uc3VtZXJcIjtcbiAgcmV0dXJuIHdpdGhDb25zdW1lcjtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJkZWZhdWx0VmFsdWVcIiwgXCJkaWRNb3VudFwiLCBcImNsYXNzTmFtZVwiLCBcIm9uVXBkYXRlXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbnZhciBjbGFzc25hbWVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsYXNzbmFtZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBEYXRlRWRpdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRGF0ZUVkaXRvcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGF0ZUVkaXRvcik7XG4gICAgcmV0dXJuIF9jYWxsU3VwZXIodGhpcywgRGF0ZUVkaXRvciwgYXJndW1lbnRzKTtcbiAgfVxuICBfaW5oZXJpdHMoRGF0ZUVkaXRvciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhEYXRlRWRpdG9yLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzJGRlZmF1bHRWYSA9IF90aGlzJHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMkZGVmYXVsdFZhID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMkZGVmYXVsdFZhLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzLmRpZE1vdW50O1xuICAgICAgdGhpcy5kYXRlLnZhbHVlQXNEYXRlID0gbmV3IERhdGUoZGVmYXVsdFZhbHVlKTtcbiAgICAgIHRoaXMuZGF0ZS5mb2N1cygpO1xuICAgICAgaWYgKGRpZE1vdW50KSB7XG4gICAgICAgIGRpZE1vdW50KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZS52YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGRlZmF1bHRWID0gX3RoaXMkcHJvcHMyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMyJGRlZmF1bHRWID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGRlZmF1bHRWLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzMi5kaWRNb3VudCxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGNsYXNzTmFtID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyJGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGNsYXNzTmFtLFxuICAgICAgICBvblVwZGF0ZSA9IF90aGlzJHByb3BzMi5vblVwZGF0ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC1kYXRlXCIpO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIF90aGlzLmRhdGUgPSBub2RlO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzc1xuICAgICAgfSwgcmVzdCkpO1xuICAgIH1cbiAgfV0pO1xufShyZWFjdF8xLkNvbXBvbmVudCk7IC8vIERhdGVFZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgUHJvcFR5cGVzLm9iamVjdFxuLy8gICBdKSxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmNcbi8vIH07XG4vLyBEYXRlRWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiAnJyxcbi8vICAgZGVmYXVsdFZhbHVlOiAnJyxcbi8vICAgZGlkTW91bnQ6IHVuZGVmaW5lZFxuLy8gfTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gRGF0ZUVkaXRvcjsiLG51bGwsIi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIERhdGVFZGl0b3JQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuICBkaWRNb3VudD86ICgpID0+IHZvaWQ7XG4gIG9uVXBkYXRlPzogYW55O1xufVxuXG5jbGFzcyBEYXRlRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50PERhdGVFZGl0b3JQcm9wcz4ge1xuICBkYXRlOiBhbnk7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZGVmYXVsdFZhbHVlID0gXCJcIiwgZGlkTW91bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy5kYXRlLnZhbHVlQXNEYXRlID0gbmV3IERhdGUoZGVmYXVsdFZhbHVlKTtcbiAgICB0aGlzLmRhdGUuZm9jdXMoKTtcbiAgICBpZiAoZGlkTW91bnQpIHtcbiAgICAgIGRpZE1vdW50KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZS52YWx1ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBcIlwiLFxuICAgICAgZGlkTW91bnQsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgb25VcGRhdGUsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZWRpdG9yQ2xhc3MgPSBjcyhjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LWRhdGVcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICByZWY9eyhub2RlKSA9PiB7IHRoaXMuZGF0ZSA9IG5vZGU7IH19XG4gICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0b3JDbGFzc31cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuLy8gRGF0ZUVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICBQcm9wVHlwZXMub2JqZWN0XG4vLyAgIF0pLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcbi8vIERhdGVFZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlRWRpdG9yO1xuIiwiLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgVGV4dEVkaXRvclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGF1dG9TZWxlY3RUZXh0PzogYm9vbGVhbjtcbiAgZGlkTW91bnQ/OiAoKSA9PiB2b2lkO1xuICBvblVwZGF0ZTogKHJvdzogb2JqZWN0LCBjb2x1bW46IG9iamVjdCwgdmFsdWU6IGFueSkgPT4gdm9pZDtcbn1cblxuY2xhc3MgVGV4dEVkaXRvciBleHRlbmRzIENvbXBvbmVudDxUZXh0RWRpdG9yUHJvcHM+IHtcbiAgdGV4dDogYW55O1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IGRlZmF1bHRWYWx1ZSA9IFwiXCIsIGRpZE1vdW50LCBhdXRvU2VsZWN0VGV4dCA9IGZhbHNlIH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMudGV4dC52YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLnRleHQuZm9jdXMoKTtcbiAgICBpZiAoYXV0b1NlbGVjdFRleHQpIHRoaXMudGV4dC5zZWxlY3QoKTtcbiAgICBpZiAoZGlkTW91bnQpIGRpZE1vdW50KCk7XG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0LnZhbHVlO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IFwiXCIsXG4gICAgICBkaWRNb3VudCxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBhdXRvU2VsZWN0VGV4dCA9IGZhbHNlLFxuICAgICAgb25VcGRhdGUsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZWRpdG9yQ2xhc3MgPSBjcyhjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXRleHRcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICByZWY9eyhub2RlKSA9PiB7IHRoaXMudGV4dCA9IG5vZGU7IH19XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0b3JDbGFzc31cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuLy8gVGV4dEVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICBQcm9wVHlwZXMub2JqZWN0XG4vLyAgIF0pLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgUHJvcFR5cGVzLm51bWJlclxuLy8gICBdKSxcbi8vICAgYXV0b1NlbGVjdFRleHQ6IFByb3BUeXBlcy5ib29sLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmNcbi8vIH07XG5cbi8vIFRleHRFZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6IG51bGwsXG4vLyAgIGRlZmF1bHRWYWx1ZTogJycsXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBmYWxzZSxcbi8vICAgZGlkTW91bnQ6IHVuZGVmaW5lZFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgVGV4dEVkaXRvcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wibm9uRWRpdGFibGVSb3dzXCIsIFwiZXJyb3JNZXNzYWdlXCJdLFxuICBfZXhjbHVkZWQyID0gW1wib3B0aW9uc1wiLCBcInJpZHhcIiwgXCJjaWR4XCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ29uc3VtZXIgPSB2b2lkIDA7XG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuLyogZXNsaW50IHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzOiAwICovXG52YXIgcHJvcF90eXBlc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uXCIpO1xudmFyIENlbGxFZGl0Q29udGV4dCA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUNvbnRleHQobnVsbCk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChfLCBkYXRhT3BlcmF0b3IsIGlzUmVtb3RlQ2VsbEVkaXQsIGhhbmRsZUNlbGxDaGFuZ2UpIHtcbiAgdmFyIENlbGxFZGl0UHJvdmlkZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJGRlZmF1bHQkQ29tcCkge1xuICAgIGZ1bmN0aW9uIENlbGxFZGl0UHJvdmlkZXIocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDZWxsRWRpdFByb3ZpZGVyKTtcbiAgICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBDZWxsRWRpdFByb3ZpZGVyLCBbcHJvcHNdKTtcbiAgICAgIF90aGlzLmRvVXBkYXRlID0gX3RoaXMuZG9VcGRhdGUuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5zdGFydEVkaXRpbmcgPSBfdGhpcy5zdGFydEVkaXRpbmcuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5lc2NhcGVFZGl0aW5nID0gX3RoaXMuZXNjYXBlRWRpdGluZy5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmNvbXBsZXRlRWRpdGluZyA9IF90aGlzLmNvbXBsZXRlRWRpdGluZy5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmhhbmRsZUNlbGxVcGRhdGUgPSBfdGhpcy5oYW5kbGVDZWxsVXBkYXRlLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIHJpZHg6IG51bGwsXG4gICAgICAgIGNpZHg6IG51bGwsXG4gICAgICAgIG1lc3NhZ2U6IG51bGxcbiAgICAgIH07XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9pbmhlcml0cyhDZWxsRWRpdFByb3ZpZGVyLCBfcmVhY3RfMSRkZWZhdWx0JENvbXApO1xuICAgIHJldHVybiBfY3JlYXRlQ2xhc3MoQ2VsbEVkaXRQcm92aWRlciwgW3tcbiAgICAgIGtleTogXCJoYW5kbGVDZWxsVXBkYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ2VsbFVwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICAgIHZhciBuZXdWYWx1ZVdpdGhUeXBlID0gZGF0YU9wZXJhdG9yLnR5cGVDb252ZXJ0KGNvbHVtbi50eXBlLCBuZXdWYWx1ZSk7XG4gICAgICAgIHZhciBjZWxsRWRpdCA9IHRoaXMucHJvcHMuY2VsbEVkaXQ7XG4gICAgICAgIHZhciBiZWZvcmVTYXZlQ2VsbCA9IGNlbGxFZGl0Lm9wdGlvbnMuYmVmb3JlU2F2ZUNlbGw7XG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IF8uZ2V0KHJvdywgY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgICAgIHZhciBiZWZvcmVTYXZlQ2VsbERvbmUgPSBmdW5jdGlvbiBiZWZvcmVTYXZlQ2VsbERvbmUoKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBfdGhpczIuZG9VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlV2l0aFR5cGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpczIuZXNjYXBlRWRpdGluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihiZWZvcmVTYXZlQ2VsbCkpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gYmVmb3JlU2F2ZUNlbGwob2xkVmFsdWUsIG5ld1ZhbHVlV2l0aFR5cGUsIHJvdywgY29sdW1uLCBiZWZvcmVTYXZlQ2VsbERvbmUpO1xuICAgICAgICAgIGlmIChfLmlzT2JqZWN0KHJlc3VsdCkgJiYgcmVzdWx0LmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlV2l0aFR5cGUpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkb1VwZGF0ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRvVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGtleUZpZWxkID0gX3RoaXMkcHJvcHMua2V5RmllbGQsXG4gICAgICAgICAgY2VsbEVkaXQgPSBfdGhpcyRwcm9wcy5jZWxsRWRpdCxcbiAgICAgICAgICBkYXRhID0gX3RoaXMkcHJvcHMuZGF0YTtcbiAgICAgICAgdmFyIGFmdGVyU2F2ZUNlbGwgPSBjZWxsRWRpdC5vcHRpb25zLmFmdGVyU2F2ZUNlbGw7XG4gICAgICAgIHZhciByb3dJZCA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgICAgICB2YXIgb2xkVmFsdWUgPSBfLmdldChyb3csIGNvbHVtbi5kYXRhRmllbGQpO1xuICAgICAgICBpZiAoaXNSZW1vdGVDZWxsRWRpdCgpKSB7XG4gICAgICAgICAgaGFuZGxlQ2VsbENoYW5nZShyb3dJZCwgY29sdW1uLmRhdGFGaWVsZCwgbmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGFPcGVyYXRvci5lZGl0Q2VsbChkYXRhLCBrZXlGaWVsZCwgcm93SWQsIGNvbHVtbi5kYXRhRmllbGQsIG5ld1ZhbHVlKTtcbiAgICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGFmdGVyU2F2ZUNlbGwpKSB7XG4gICAgICAgICAgICBhZnRlclNhdmVDZWxsKG9sZFZhbHVlLCBuZXdWYWx1ZSwgcm93LCBjb2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNvbXBsZXRlRWRpdGluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNvbXBsZXRlRWRpdGluZ1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBsZXRlRWRpdGluZygpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJpZHg6IG51bGwsXG4gICAgICAgICAgICBjaWR4OiBudWxsLFxuICAgICAgICAgICAgbWVzc2FnZTogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzdGFydEVkaXRpbmdcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydEVkaXRpbmcocmlkeCwgY2lkeCkge1xuICAgICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgICAgdmFyIGVkaXRpbmcgPSBmdW5jdGlvbiBlZGl0aW5nKCkge1xuICAgICAgICAgIF90aGlzMy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByaWR4OiByaWR4LFxuICAgICAgICAgICAgICBjaWR4OiBjaWR4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgc2VsZWN0Um93ID0gdGhpcy5wcm9wcy5zZWxlY3RSb3c7XG4gICAgICAgIGlmICghc2VsZWN0Um93IHx8IHNlbGVjdFJvdy5jbGlja1RvRWRpdCB8fCAhc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QpIHtcbiAgICAgICAgICBlZGl0aW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZXNjYXBlRWRpdGluZ1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGVzY2FwZUVkaXRpbmcoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByaWR4OiBudWxsLFxuICAgICAgICAgICAgY2lkeDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRjZWxsRWRpdCA9IHRoaXMucHJvcHMuY2VsbEVkaXQsXG4gICAgICAgICAgX3RoaXMkcHJvcHMkY2VsbEVkaXQkID0gX3RoaXMkcHJvcHMkY2VsbEVkaXQub3B0aW9ucyxcbiAgICAgICAgICBub25FZGl0YWJsZVJvd3MgPSBfdGhpcyRwcm9wcyRjZWxsRWRpdCQubm9uRWRpdGFibGVSb3dzLFxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IF90aGlzJHByb3BzJGNlbGxFZGl0JC5lcnJvck1lc3NhZ2UsXG4gICAgICAgICAgb3B0aW9uc1Jlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMkY2VsbEVkaXQkLCBfZXhjbHVkZWQpLFxuICAgICAgICAgIHByb3BSaWR4ID0gX3RoaXMkcHJvcHMkY2VsbEVkaXQucmlkeCxcbiAgICAgICAgICBwcm9wQ2lkeCA9IF90aGlzJHByb3BzJGNlbGxFZGl0LmNpZHgsXG4gICAgICAgICAgY2VsbEVkaXRSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzJGNlbGxFZGl0LCBfZXhjbHVkZWQyKTtcbiAgICAgICAgdmFyIG5ld0NlbGxFZGl0ID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbnNSZXN0KSwgY2VsbEVkaXRSZXN0KSwge30sIHtcbiAgICAgICAgICByaWR4OiB0aGlzLnN0YXRlLnJpZHggIT09IG51bGwgPyB0aGlzLnN0YXRlLnJpZHggOiBwcm9wUmlkeCAhPT0gbnVsbCAmJiBwcm9wUmlkeCAhPT0gdm9pZCAwID8gcHJvcFJpZHggOiBudWxsLFxuICAgICAgICAgIGNpZHg6IHRoaXMuc3RhdGUuY2lkeCAhPT0gbnVsbCA/IHRoaXMuc3RhdGUuY2lkeCA6IHByb3BDaWR4ICE9PSBudWxsICYmIHByb3BDaWR4ICE9PSB2b2lkIDAgPyBwcm9wQ2lkeCA6IG51bGwsXG4gICAgICAgICAgbWVzc2FnZTogdGhpcy5zdGF0ZS5tZXNzYWdlLFxuICAgICAgICAgIG5vbkVkaXRhYmxlUm93czogXy5pc0RlZmluZWQobm9uRWRpdGFibGVSb3dzKSA/IG5vbkVkaXRhYmxlUm93cygpIDogW10sXG4gICAgICAgICAgYXRzdGFydDogdGhpcy5zdGFydEVkaXRpbmcsXG4gICAgICAgICAgb25Fc2NhcGU6IHRoaXMuZXNjYXBlRWRpdGluZyxcbiAgICAgICAgICBvblVwZGF0ZTogdGhpcy5oYW5kbGVDZWxsVXBkYXRlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChDZWxsRWRpdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogX29iamVjdFNwcmVhZCh7fSwgbmV3Q2VsbEVkaXQpXG4gICAgICAgIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1dLCBbe1xuICAgICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgICBpZiAobmV4dFByb3BzLmNlbGxFZGl0ICYmIF8uaXNGdW5jdGlvbihpc1JlbW90ZUNlbGxFZGl0KSAmJiBpc1JlbW90ZUNlbGxFZGl0KCkpIHtcbiAgICAgICAgICBpZiAobmV4dFByb3BzLmNlbGxFZGl0Lm9wdGlvbnMuZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBtZXNzYWdlOiBuZXh0UHJvcHMuY2VsbEVkaXQub3B0aW9ucy5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHJpZHg6IHByZXZTdGF0ZS5yaWR4LFxuICAgICAgICAgICAgICBjaWR4OiBwcmV2U3RhdGUuY2lkeCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe30sIHByZXZTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XSk7XG4gIH0ocmVhY3RfMVtcImRlZmF1bHRcIl0uQ29tcG9uZW50KTtcbiAgQ2VsbEVkaXRQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gICAgZGF0YTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5hcnJheS5pc1JlcXVpcmVkLFxuICAgIHNlbGVjdFJvdzogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5vYmplY3QsXG4gICAgb3B0aW9uczogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5zaGFwZSh7XG4gICAgICBtb2RlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm9uZU9mKFtfXzEuQ0xJQ0tfVE9fQ0VMTF9FRElULCBfXzEuREJDTElDS19UT19DRUxMX0VESVRdKS5pc1JlcXVpcmVkLFxuICAgICAgb25FcnJvck1lc3NhZ2VEaXNhcHBlYXI6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uZnVuYyxcbiAgICAgIGJsdXJUb1NhdmU6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICAgIGJlZm9yZVNhdmVDZWxsOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gICAgICBhZnRlclNhdmVDZWxsOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gICAgICBvblN0YXJ0RWRpdDogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5mdW5jLFxuICAgICAgbm9uRWRpdGFibGVSb3dzOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gICAgICB0aW1lVG9DbG9zZU1lc3NhZ2U6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ubnVtYmVyLFxuICAgICAgZXJyb3JNZXNzYWdlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmFueVxuICAgIH0pXG4gIH07XG4gIHJldHVybiB7XG4gICAgUHJvdmlkZXI6IENlbGxFZGl0UHJvdmlkZXJcbiAgfTtcbn07XG5leHBvcnRzLkNvbnN1bWVyID0gQ2VsbEVkaXRDb250ZXh0LkNvbnN1bWVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiZGVmYXVsdFZhbHVlXCIsIFwiZGlkTW91bnRcIiwgXCJnZXRPcHRpb25zXCIsIFwiY2xhc3NOYW1lXCIsIFwib25VcGRhdGVcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIERyb3BEb3duRWRpdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gRHJvcERvd25FZGl0b3IocHJvcHMpIHtcbiAgICB2YXIgX3Byb3BzJG9wdGlvbnM7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEcm9wRG93bkVkaXRvcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIERyb3BEb3duRWRpdG9yLCBbcHJvcHNdKTtcbiAgICB2YXIgb3B0aW9ucyA9IChfcHJvcHMkb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMpICE9PSBudWxsICYmIF9wcm9wcyRvcHRpb25zICE9PSB2b2lkIDAgPyBfcHJvcHMkb3B0aW9ucyA6IFtdO1xuICAgIGlmIChwcm9wcy5nZXRPcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gcHJvcHMuZ2V0T3B0aW9ucyhfdGhpcy5zZXRPcHRpb25zLmJpbmQoX3RoaXMpLCB7XG4gICAgICAgIHJvdzogcHJvcHMucm93LFxuICAgICAgICBjb2x1bW46IHByb3BzLmNvbHVtblxuICAgICAgfSkgfHwgW107XG4gICAgfVxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhEcm9wRG93bkVkaXRvciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhEcm9wRG93bkVkaXRvciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPSBfdGhpcyRwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzJGRlZmF1bHRWYSA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzJGRlZmF1bHRWYSxcbiAgICAgICAgZGlkTW91bnQgPSBfdGhpcyRwcm9wcy5kaWRNb3VudDtcbiAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgdGhpcy5zZWxlY3QuZm9jdXMoKTtcbiAgICAgIGlmIChkaWRNb3VudCkge1xuICAgICAgICBkaWRNb3VudCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdC52YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzMiRkZWZhdWx0ViA9IF90aGlzJHByb3BzMi5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzMiRkZWZhdWx0ViA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMiRkZWZhdWx0VixcbiAgICAgICAgZGlkTW91bnQgPSBfdGhpcyRwcm9wczIuZGlkTW91bnQsXG4gICAgICAgIGdldE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuZ2V0T3B0aW9ucyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGNsYXNzTmFtID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyJGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGNsYXNzTmFtLFxuICAgICAgICBvblVwZGF0ZSA9IF90aGlzJHByb3BzMi5vblVwZGF0ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC1zZWxlY3RcIik7XG4gICAgICB2YXIgYXR0ciA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3NcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhdHRyKSwge30sIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIF90aGlzMi5zZWxlY3QgPSBub2RlO1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZVxuICAgICAgfSksIHRoaXMuc3RhdGUub3B0aW9ucy5tYXAoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICAgICAgICB2YWx1ZSA9IF9yZWYudmFsdWU7XG4gICAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICBrZXk6IHZhbHVlLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9LCBsYWJlbCk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTsgLy8gRHJvcERvd25FZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICByb3c6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgY29sdW1uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICBQcm9wVHlwZXMubnVtYmVyXG4vLyAgIF0pLFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBvcHRpb25zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuLy8gICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueVxuLy8gICAgIH0pKVxuLy8gICBdKSxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jLFxuLy8gICBnZXRPcHRpb25zOiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcbi8vIERyb3BEb3duRWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiAnJyxcbi8vICAgZGVmYXVsdFZhbHVlOiAnJyxcbi8vICAgc3R5bGU6IHt9LFxuLy8gICBvcHRpb25zOiBbXSxcbi8vICAgZGlkTW91bnQ6IHVuZGVmaW5lZCxcbi8vICAgZ2V0T3B0aW9uczogdW5kZWZpbmVkXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBEcm9wRG93bkVkaXRvcjsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDaGFuZ2VFdmVudCwgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBDaGVja0JveEVkaXRvclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICB2YWx1ZT86IHN0cmluZztcbiAgZGVmYXVsdFZhbHVlPzogYW55O1xuICBvbkNoYW5nZT86IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgZGlkTW91bnQ/OiAoKSA9PiB2b2lkO1xuICBvblVwZGF0ZT86IGFueTtcbn1cblxuaW50ZXJmYWNlIENoZWNrQm94RWRpdG9yU3RhdGUge1xuICBjaGVja2VkOiBib29sZWFuO1xufVxuXG5jbGFzcyBDaGVja0JveEVkaXRvciBleHRlbmRzIENvbXBvbmVudDxcbiAgQ2hlY2tCb3hFZGl0b3JQcm9wcyxcbiAgQ2hlY2tCb3hFZGl0b3JTdGF0ZVxuPiB7XG4gIGNoZWNrYm94OiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IENoZWNrQm94RWRpdG9yUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNoZWNrZWQ6XG4gICAgICAgIChwcm9wcy5kZWZhdWx0VmFsdWUgPz8gZmFsc2UpLnRvU3RyaW5nKCkgPT09XG4gICAgICAgIChwcm9wcy52YWx1ZSA/PyBcIm9uOm9mZlwiKS5zcGxpdChcIjpcIilbMF0sXG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IGRpZE1vdW50IH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuY2hlY2tib3guZm9jdXMoKTtcbiAgICBpZiAoZGlkTW91bnQpIGRpZE1vdW50KCk7XG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICBjb25zdCBbcG9zaXRpdmUsIG5lZ2F0aXZlXSA9ICh0aGlzLnByb3BzLnZhbHVlID8/IFwib246b2ZmXCIpLnNwbGl0KFwiOlwiKTtcbiAgICByZXR1cm4gdGhpcy5jaGVja2JveC5jaGVja2VkID8gcG9zaXRpdmUgOiBuZWdhdGl2ZTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZShlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkgdGhpcy5wcm9wcy5vbkNoYW5nZShlKTtcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gZTtcbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGNoZWNrZWQ6IHRhcmdldC5jaGVja2VkIH0pKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBmYWxzZSxcbiAgICAgIGRpZE1vdW50LFxuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGVkaXRvckNsYXNzID0gY3MoXCJlZGl0b3IgZWRpdC1jaHNlY2tib3ggY2hlY2tib3hcIiwgY2xhc3NOYW1lKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIHJlZj17KG5vZGUpID0+IHsgdGhpcy5jaGVja2JveCA9IG5vZGU7IH19XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzTmFtZT17ZWRpdG9yQ2xhc3N9XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgICBjaGVja2VkPXt0aGlzLnN0YXRlLmNoZWNrZWR9XG4gICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBDaGVja0JveEVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdF0pLFxuLy8gICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuLy8gICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG5cbi8vIENoZWNrQm94RWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBcIlwiLFxuLy8gICB2YWx1ZTogXCJvbjpvZmZcIixcbi8vICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbi8vICAgb25DaGFuZ2U6IHVuZGVmaW5lZCxcbi8vICAgZGlkTW91bnQ6IHVuZGVmaW5lZCxcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrQm94RWRpdG9yO1xuIiwiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmIChhcmcpIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIHBhcnNlVmFsdWUoYXJnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZVZhbHVlIChhcmcpIHtcblx0XHRpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBhcmc7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmcgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHR9XG5cblx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRyZXR1cm4gYXJnLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIGtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRDbGFzcyAodmFsdWUsIG5ld0NsYXNzKSB7XG5cdFx0aWYgKCFuZXdDbGFzcykge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyAnICcgKyBuZXdDbGFzcztcblx0XHR9XG5cdFxuXHRcdHJldHVybiB2YWx1ZSArIG5ld0NsYXNzO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NTYpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18iLCJDb21wb25lbnQiLCJzZWxlY3RSb3dFbmFibGVkIiwid2l0aENvbnN1bWVyIiwicHJvcHMiLCJDb25zdW1lciIsImNlbGxFZGl0Iiwia2V5IiwidmFsdWUiLCJlZGl0YWJsZVJvdyIsIm5vbkVkaXRhYmxlUm93cyIsImxlbmd0aCIsImluZGV4T2YiLCJhdHRycyIsIm1vZGUiLCJEQkNMSUNLX1RPX0NFTExfRURJVCIsIkRFTEFZX0ZPUl9EQkNMSUNLIiwiZWRpdGluZ1Jvd0lkeCIsInJpZHgiLCJlZGl0aW5nQ29sSWR4IiwiY2lkeCIsImlzRWRpdGFibGUiLCJhdHN0YXJ0IiwiY2xpY2tUb0VkaXQiLCJDTElDS19UT19DRUxMX0VESVQiLCJkYmNsaWNrVG9FZGl0IiwicmVuZGVyV2l0aENlbGxFZGl0IiwiZGlzcGxheU5hbWUiLCJfX2ltcG9ydERlZmF1bHQiLCJtb2QiLCJfX2VzTW9kdWxlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJwcm9wX3R5cGVzXzEiLCJyZWFjdF8xIiwiRWRpdG9ySW5kaWNhdG9yIiwiX3JlZiIsImludmFsaWRNZXNzYWdlIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsInJvbGUiLCJwcm9wVHlwZXMiLCJzdHJpbmciLCJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfZXhjbHVkZWQiLCJvd25LZXlzIiwiZSIsInIiLCJ0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX2RlZmluZVByb3BlcnRpZXMiLCJpIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3RvUHJpbWl0aXZlIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZiIsIlJlZmVyZW5jZUVycm9yIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJCb29sZWFuIiwidmFsdWVPZiIsInNldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJiaW5kIiwiX19wcm90b19fIiwiX3NldFByb3RvdHlwZU9mIiwiX293bktleXMiLCJfX2NyZWF0ZUJpbmRpbmciLCJjcmVhdGUiLCJtIiwiayIsImsyIiwidW5kZWZpbmVkIiwiZGVzYyIsImdldCIsIl9fc2V0TW9kdWxlRGVmYXVsdCIsInYiLCJfX2ltcG9ydFN0YXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiYXIiLCJoYXNPd25Qcm9wZXJ0eSIsInJlc3VsdCIsImNsYXNzbmFtZXNfMSIsIlRleHRFZGl0b3IiLCJfcmVhY3RfMSRDb21wb25lbnQiLCJhIiwibiIsIl9jbGFzc0NhbGxDaGVjayIsInRoaXMiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHMiLCJfdGhpcyRwcm9wcyIsIl90aGlzJHByb3BzJGRlZmF1bHRWYSIsImRlZmF1bHRWYWx1ZSIsImRpZE1vdW50IiwiX3RoaXMkcHJvcHMkYXV0b1NlbGVjIiwiYXV0b1NlbGVjdFRleHQiLCJ0ZXh0IiwiZm9jdXMiLCJzZWxlY3QiLCJfdGhpcyIsIl90aGlzJHByb3BzMiIsIl90aGlzJHByb3BzMiRjbGFzc05hbSIsInJlc3QiLCJvblVwZGF0ZSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJlZGl0b3JDbGFzcyIsImZvckVhY2giLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9vYmplY3RTcHJlYWQiLCJyZWYiLCJub2RlIiwidHlwZSIsIkRyb3BEb3duRWRpdG9yIiwic3VwZXIiLCJvcHRpb25zIiwiZ2V0T3B0aW9ucyIsInNldE9wdGlvbnMiLCJyb3ciLCJjb2x1bW4iLCJzdGF0ZSIsImNvbXBvbmVudERpZE1vdW50Iiwic2V0U3RhdGUiLCJnZXRWYWx1ZSIsInJlbmRlciIsImF0dHIiLCJtYXAiLCJsYWJlbCIsIlRleHRBcmVhRWRpdG9yIiwiaGFuZGxlS2V5RG93biIsImtleUNvZGUiLCJzaGlmdEtleSIsIm9uS2V5RG93biIsIl90aGlzMiIsIl8iLCJvblN0YXJ0RWRpdCIsImluZGljYXRvclRpbWVyIiwiY2xlYXJUaW1lciIsImhhbmRsZUJsdXIiLCJoYW5kbGVDbGljayIsImJlZm9yZUNvbXBsZXRlIiwiYXN5bmNiZWZvcmVDb21wZXRlIiwiZGlzcGxheUVycm9yTWVzc2FnZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiY29tcG9uZW50RGlkVXBkYXRlIiwibWVzc2FnZSIsImlzRGVmaW5lZCIsImNyZWF0ZVRpbWVyIiwiY2xlYXJUaW1lb3V0IiwidGltZVRvQ2xvc2VNZXNzYWdlIiwib25FcnJvck1lc3NhZ2VEaXNhcHBlYXIiLCJzbGVlcCIsImlzRnVuY3Rpb24iLCJuZXdWYWx1ZSIsInZhbGlkIiwidmFsaWRhdG9yIiwidmFsaWRhdGVGb3JtIiwiaXNPYmplY3QiLCJhc3luYyIsIm9uRXNjYXBlIiwiYmx1clRvU2F2ZSIsImVkaXRvciIsInRhcmdldCIsInRhZ05hbWUiLCJzdG9wUHJvcGFnYXRpb24iLCJzdHlsZSIsInJvd0luZGV4IiwiY29sdW1uSW5kZXgiLCJkYXRhRmllbGQiLCJoYXNFcnJvciIsImN1c3RvbUVkaXRvckNsYXNzIiwiZWRpdG9yQ2xhc3NlcyIsImVkaXRvclN0eWxlIiwiZWRpdG9yUHJvcHMiLCJhbmltYXRlZCIsInNoYWtlIiwib25CbHVyIiwiaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCIsImVkaXRvclJlbmRlcmVyIiwiRURJVFRZUEUiLCJTRUxFQ1QiLCJURVhUQVJFQSIsIkNIRUNLQk9YIiwiREFURSIsIm9uQ2xpY2siLCJvYmplY3QiLCJpc1JlcXVpcmVkIiwibnVtYmVyIiwiZnVuYyIsImJvb2wiLCJkZWZhdWx0UHJvcHMiLCJUSU1FX1RPX0NMT1NFX01FU1NBR0UiLCJfXzEiLCJjaGVja2JveF9lZGl0b3JfMSIsImRhdGVfZWRpdG9yXzEiLCJkcm9wZG93bl9lZGl0b3JfMSIsImVkaXRvcl9pbmRpY2F0b3JfMSIsInRleHRfZWRpdG9yXzEiLCJ0ZXh0YXJlYV9lZGl0b3JfMSIsIl9hIiwiRWRpdGluZ0NlbGwiLCJfdGhpczMiLCJfdGhpczMkcHJvcHMiLCJfdGhpcyRwcm9wczMiLCJfY29sdW1uJGVkaXRvciIsIl9jb2x1bW4kZWRpdG9yMiIsIl9jb2x1bW4kZWRpdG9yMyIsIl9jb2x1bW4kZWRpdG9yNCIsIl90aGlzNCIsIl90aGlzJHByb3BzNCIsImNvbnRleHRfMSIsImVkaXRpbmdfY2VsbF8xIiwiY29udGVudCIsImVkaXRDZWxsc3R5bGUiLCJlZGl0Q2VsbFN0eWxlIiwiZWRpdENlbGxjbGFzc2VzIiwiZWRpdENlbGxDbGFzc2VzIiwicmVuZGVyV2l0aEVkaXRpbmdDZWxsIiwiQ2VsbEVkaXRDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsImRhdGFPcGVyYXRvciIsImlzUmVtb3RlQ2VsbEVkaXQiLCJoYW5kbGVDZWxsQ2hhbmdlIiwiQ2VsbEVkaXRQcm92aWRlciIsImRvVXBkYXRlIiwic3RhcnRFZGl0aW5nIiwiZXNjYXBlRWRpdGluZyIsImNvbXBsZXRlRWRpdGluZyIsImhhbmRsZUNlbGxVcGRhdGUiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJuZXh0UHJvcHMiLCJwcmV2U3RhdGUiLCJlcnJvck1lc3NhZ2UiLCJuZXdWYWx1ZVdpdGhUeXBlIiwidHlwZUNvbnZlcnQiLCJiZWZvcmVTYXZlQ2VsbCIsIm9sZFZhbHVlIiwiYmVmb3JlU2F2ZUNlbGxEb25lIiwia2V5RmllbGQiLCJkYXRhIiwiYWZ0ZXJTYXZlQ2VsbCIsInJvd0lkIiwiZWRpdENlbGwiLCJlZGl0aW5nIiwic2VsZWN0Um93IiwiY2xpY2tUb1NlbGVjdCIsIm9wdGlvbnNSZXN0IiwicHJvcFJpZHgiLCJwcm9wQ2lkeCIsImNlbGxFZGl0UmVzdCIsIm5ld0NlbGxFZGl0IiwiUHJvdmlkZXIiLCJjaGlsZHJlbiIsImFycmF5Iiwic2hhcGUiLCJvbmVPZiIsImFueSIsIl9zbGljZWRUb0FycmF5IiwiQXJyYXkiLCJpc0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwibCIsInUiLCJmIiwibmV4dCIsImRvbmUiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiQ2hlY2tCb3hFZGl0b3IiLCJfcHJvcHMkZGVmYXVsdFZhbHVlIiwiX3Byb3BzJHZhbHVlIiwiY2hlY2tlZCIsInNwbGl0IiwiaGFuZGxlQ2hhbmdlIiwiY2hlY2tib3giLCJfdGhpcyRwcm9wcyR2YWx1ZSIsIl9zcGxpdDIiLCJwb3NpdGl2ZSIsIm5lZ2F0aXZlIiwib25DaGFuZ2UiLCJfdGhpcyRwcm9wcyRjbGFzc05hbWUiLCJUeXBlIiwiZWRpdGluZ19jZWxsX2NvbnN1bWVyXzEiLCJyb3dfY29uc3VtZXJfMSIsIlRFWFQiLCJjcmVhdGVFZGl0aW5nQ2VsbCIsIndpdGhSb3dMZXZlbENlbGxFZGl0IiwiUmVhY3RQcm9wVHlwZXNTZWNyZXQiLCJlbXB0eUZ1bmN0aW9uIiwiZW1wdHlGdW5jdGlvbldpdGhSZXNldCIsInJlc2V0V2FybmluZ0NhY2hlIiwic2hpbSIsInByb3BOYW1lIiwiY29tcG9uZW50TmFtZSIsImxvY2F0aW9uIiwicHJvcEZ1bGxOYW1lIiwic2VjcmV0IiwiZXJyIiwiRXJyb3IiLCJnZXRTaGltIiwiUmVhY3RQcm9wVHlwZXMiLCJiaWdpbnQiLCJzeW1ib2wiLCJhcnJheU9mIiwiZWxlbWVudCIsImVsZW1lbnRUeXBlIiwiaW5zdGFuY2VPZiIsIm9iamVjdE9mIiwib25lT2ZUeXBlIiwiZXhhY3QiLCJjaGVja1Byb3BUeXBlcyIsIlByb3BUeXBlcyIsIkRhdGVFZGl0b3IiLCJkYXRlIiwidmFsdWVBc0RhdGUiLCJEYXRlIiwiX2V4Y2x1ZGVkMiIsIl9yZWFjdF8xJGRlZmF1bHQkQ29tcCIsIl90aGlzJHByb3BzJGNlbGxFZGl0IiwiX3RoaXMkcHJvcHMkY2VsbEVkaXQkIiwiX3Byb3BzJG9wdGlvbnMiLCJfdGhpcyRwcm9wczIkZGVmYXVsdFYiLCJoYXNPd24iLCJjbGFzc05hbWVzIiwiY2xhc3NlcyIsImFyZyIsImFwcGVuZENsYXNzIiwicGFyc2VWYWx1ZSIsImluY2x1ZGVzIiwibmV3Q2xhc3MiLCJkZWZhdWx0IiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9
|