-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path2939.5705c863.iframe.bundle.js
2 lines (2 loc) · 63.5 KB
/
2939.5705c863.iframe.bundle.js
1
2
(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[2939],{"./node_modules/lodash/_baseTrim.js":(module,__unused_webpack_exports,__webpack_require__)=>{var trimmedEndIndex=__webpack_require__("./node_modules/lodash/_trimmedEndIndex.js"),reTrimStart=/^\s+/;module.exports=function baseTrim(string){return string?string.slice(0,trimmedEndIndex(string)+1).replace(reTrimStart,""):string}},"./node_modules/lodash/_trimmedEndIndex.js":module=>{var reWhitespace=/\s/;module.exports=function trimmedEndIndex(string){for(var index=string.length;index--&&reWhitespace.test(string.charAt(index)););return index}},"./node_modules/lodash/debounce.js":(module,__unused_webpack_exports,__webpack_require__)=>{var isObject=__webpack_require__("./node_modules/lodash/isObject.js"),now=__webpack_require__("./node_modules/lodash/now.js"),toNumber=__webpack_require__("./node_modules/lodash/toNumber.js"),nativeMax=Math.max,nativeMin=Math.min;module.exports=function debounce(func,wait,options){var lastArgs,lastThis,maxWait,result,timerId,lastCallTime,lastInvokeTime=0,leading=!1,maxing=!1,trailing=!0;if("function"!=typeof func)throw new TypeError("Expected a function");function invokeFunc(time){var args=lastArgs,thisArg=lastThis;return lastArgs=lastThis=void 0,lastInvokeTime=time,result=func.apply(thisArg,args)}function shouldInvoke(time){var timeSinceLastCall=time-lastCallTime;return void 0===lastCallTime||timeSinceLastCall>=wait||timeSinceLastCall<0||maxing&&time-lastInvokeTime>=maxWait}function timerExpired(){var time=now();if(shouldInvoke(time))return trailingEdge(time);timerId=setTimeout(timerExpired,function remainingWait(time){var timeWaiting=wait-(time-lastCallTime);return maxing?nativeMin(timeWaiting,maxWait-(time-lastInvokeTime)):timeWaiting}(time))}function trailingEdge(time){return timerId=void 0,trailing&&lastArgs?invokeFunc(time):(lastArgs=lastThis=void 0,result)}function debounced(){var time=now(),isInvoking=shouldInvoke(time);if(lastArgs=arguments,lastThis=this,lastCallTime=time,isInvoking){if(void 0===timerId)return function leadingEdge(time){return lastInvokeTime=time,timerId=setTimeout(timerExpired,wait),leading?invokeFunc(time):result}(lastCallTime);if(maxing)return clearTimeout(timerId),timerId=setTimeout(timerExpired,wait),invokeFunc(lastCallTime)}return void 0===timerId&&(timerId=setTimeout(timerExpired,wait)),result}return wait=toNumber(wait)||0,isObject(options)&&(leading=!!options.leading,maxWait=(maxing="maxWait"in options)?nativeMax(toNumber(options.maxWait)||0,wait):maxWait,trailing="trailing"in options?!!options.trailing:trailing),debounced.cancel=function cancel(){void 0!==timerId&&clearTimeout(timerId),lastInvokeTime=0,lastArgs=lastCallTime=lastThis=timerId=void 0},debounced.flush=function flush(){return void 0===timerId?result:trailingEdge(now())},debounced}},"./node_modules/lodash/now.js":(module,__unused_webpack_exports,__webpack_require__)=>{var root=__webpack_require__("./node_modules/lodash/_root.js");module.exports=function(){return root.Date.now()}},"./node_modules/lodash/toNumber.js":(module,__unused_webpack_exports,__webpack_require__)=>{var baseTrim=__webpack_require__("./node_modules/lodash/_baseTrim.js"),isObject=__webpack_require__("./node_modules/lodash/isObject.js"),isSymbol=__webpack_require__("./node_modules/lodash/isSymbol.js"),reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;module.exports=function toNumber(value){if("number"==typeof value)return value;if(isSymbol(value))return NaN;if(isObject(value)){var other="function"==typeof value.valueOf?value.valueOf():value;value=isObject(other)?other+"":other}if("string"!=typeof value)return 0===value?value:+value;value=baseTrim(value);var isBinary=reIsBinary.test(value);return isBinary||reIsOctal.test(value)?freeParseInt(value.slice(2),isBinary?2:8):reIsBadHex.test(value)?NaN:+value}},"./node_modules/prop-types/factoryWithThrowingShims.js":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";var ReactPropTypesSecret=__webpack_require__("./node_modules/prop-types/lib/ReactPropTypesSecret.js");function emptyFunction(){}module.exports=function(){function shim(props,propName,componentName,location,propFullName,secret){if(secret!==ReactPropTypesSecret){var err=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 err.name="Invariant Violation",err}}function getShim(){return shim}shim.isRequired=shim;var ReactPropTypes={array:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim,exact:getShim};return ReactPropTypes.checkPropTypes=emptyFunction,ReactPropTypes.PropTypes=ReactPropTypes,ReactPropTypes}},"./node_modules/prop-types/index.js":(module,__unused_webpack_exports,__webpack_require__)=>{module.exports=__webpack_require__("./node_modules/prop-types/factoryWithThrowingShims.js")()},"./node_modules/prop-types/lib/ReactPropTypesSecret.js":module=>{"use strict";module.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},"./node_modules/react-portal/es/index.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{Portal:()=>PortalCompat,PortalWithState:()=>es_PortalWithState});var react_dom=__webpack_require__("./node_modules/react-dom/index.js"),react=__webpack_require__("./node_modules/react/index.js"),prop_types=__webpack_require__("./node_modules/prop-types/index.js"),prop_types_default=__webpack_require__.n(prop_types),canUseDOM=!("undefined"==typeof window||!window.document||!window.document.createElement),_createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();var Portal=function(_React$Component){function Portal(){return function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Portal),function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}(this,(Portal.__proto__||Object.getPrototypeOf(Portal)).apply(this,arguments))}return function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}(Portal,_React$Component),_createClass(Portal,[{key:"componentWillUnmount",value:function componentWillUnmount(){this.defaultNode&&document.body.removeChild(this.defaultNode),this.defaultNode=null}},{key:"render",value:function render(){return canUseDOM?(this.props.node||this.defaultNode||(this.defaultNode=document.createElement("div"),document.body.appendChild(this.defaultNode)),react_dom.createPortal(this.props.children,this.props.node||this.defaultNode)):null}}]),Portal}(react.Component);Portal.propTypes={children:prop_types_default().node.isRequired,node:prop_types_default().any};const es_Portal=Portal;var LegacyPortal_createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();var LegacyPortal_Portal=function(_React$Component){function Portal(){return function LegacyPortal_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Portal),function LegacyPortal_possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}(this,(Portal.__proto__||Object.getPrototypeOf(Portal)).apply(this,arguments))}return function LegacyPortal_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}(Portal,_React$Component),LegacyPortal_createClass(Portal,[{key:"componentDidMount",value:function componentDidMount(){this.renderPortal()}},{key:"componentDidUpdate",value:function componentDidUpdate(props){this.renderPortal()}},{key:"componentWillUnmount",value:function componentWillUnmount(){react_dom.unmountComponentAtNode(this.defaultNode||this.props.node),this.defaultNode&&document.body.removeChild(this.defaultNode),this.defaultNode=null,this.portal=null}},{key:"renderPortal",value:function renderPortal(props){this.props.node||this.defaultNode||(this.defaultNode=document.createElement("div"),document.body.appendChild(this.defaultNode));var children=this.props.children;"function"==typeof this.props.children.type&&(children=react.cloneElement(this.props.children)),this.portal=react_dom.unstable_renderSubtreeIntoContainer(this,children,this.props.node||this.defaultNode)}},{key:"render",value:function render(){return null}}]),Portal}(react.Component);const LegacyPortal=LegacyPortal_Portal;LegacyPortal_Portal.propTypes={children:prop_types_default().node.isRequired,node:prop_types_default().any};const PortalCompat=react_dom.createPortal?es_Portal:LegacyPortal;var PortalWithState_createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();var KEYCODES_ESCAPE=27,PortalWithState=function(_React$Component){function PortalWithState(props){!function PortalWithState_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,PortalWithState);var _this=function PortalWithState_possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}(this,(PortalWithState.__proto__||Object.getPrototypeOf(PortalWithState)).call(this,props));return _this.portalNode=null,_this.state={active:!!props.defaultOpen},_this.openPortal=_this.openPortal.bind(_this),_this.closePortal=_this.closePortal.bind(_this),_this.wrapWithPortal=_this.wrapWithPortal.bind(_this),_this.handleOutsideMouseClick=_this.handleOutsideMouseClick.bind(_this),_this.handleKeydown=_this.handleKeydown.bind(_this),_this}return function PortalWithState_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}(PortalWithState,_React$Component),PortalWithState_createClass(PortalWithState,[{key:"componentDidMount",value:function componentDidMount(){this.props.closeOnEsc&&document.addEventListener("keydown",this.handleKeydown),this.props.closeOnOutsideClick&&document.addEventListener("click",this.handleOutsideMouseClick)}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.props.closeOnEsc&&document.removeEventListener("keydown",this.handleKeydown),this.props.closeOnOutsideClick&&document.removeEventListener("click",this.handleOutsideMouseClick)}},{key:"openPortal",value:function openPortal(e){this.state.active||(e&&e.nativeEvent&&e.nativeEvent.stopImmediatePropagation(),this.setState({active:!0},this.props.onOpen))}},{key:"closePortal",value:function closePortal(){this.state.active&&this.setState({active:!1},this.props.onClose)}},{key:"wrapWithPortal",value:function wrapWithPortal(children){var _this2=this;return this.state.active?react.createElement(PortalCompat,{node:this.props.node,key:"react-portal",ref:function ref(portalNode){return _this2.portalNode=portalNode}},children):null}},{key:"handleOutsideMouseClick",value:function handleOutsideMouseClick(e){if(this.state.active){var root=this.portalNode&&(this.portalNode.props.node||this.portalNode.defaultNode);!root||root.contains(e.target)||e.button&&0!==e.button||this.closePortal()}}},{key:"handleKeydown",value:function handleKeydown(e){e.keyCode===KEYCODES_ESCAPE&&this.state.active&&this.closePortal()}},{key:"render",value:function render(){return this.props.children({openPortal:this.openPortal,closePortal:this.closePortal,portal:this.wrapWithPortal,isOpen:this.state.active})}}]),PortalWithState}(react.Component);PortalWithState.propTypes={children:prop_types_default().func.isRequired,defaultOpen:prop_types_default().bool,node:prop_types_default().any,closeOnEsc:prop_types_default().bool,closeOnOutsideClick:prop_types_default().bool,onOpen:prop_types_default().func,onClose:prop_types_default().func},PortalWithState.defaultProps={onOpen:function onOpen(){},onClose:function onClose(){}};const es_PortalWithState=PortalWithState},"./node_modules/redux-thunk/lib/index.js":(__unused_webpack_module,exports)=>{"use strict";function createThunkMiddleware(extraArgument){return function(_ref){var dispatch=_ref.dispatch,getState=_ref.getState;return function(next){return function(action){return"function"==typeof action?action(dispatch,getState,extraArgument):next(action)}}}}exports.__esModule=!0;var thunk=createThunkMiddleware();thunk.withExtraArgument=createThunkMiddleware,exports.default=thunk}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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R3BCLGlCQUVGQSxnQkFBZ0JSLFVBQVksQ0FDMUJELFNBQVUsMEJBQWU1RCxXQUN6QjBFLFlBQWEsMEJBQ2IvRCxLQUFNLHlCQUNOc0UsV0FBWSwwQkFDWkUsb0JBQXFCLDBCQUNyQk0sT0FBUSwwQkFDUkMsUUFBUywyQkFHWHJCLGdCQUFnQjRCLGFBQWUsQ0FDN0JSLE9BQVEsU0FBU0EsU0FBVSxFQUMzQkMsUUFBUyxTQUFTQSxVQUFXLEdBRy9CLHdDLDZGQzNJQSxTQUFTUSxzQkFBc0JDLGVBQzdCLE9BQU8sU0FBVUMsTUFDZixJQUFJQyxTQUFXRCxLQUFLQyxTQUNoQkMsU0FBV0YsS0FBS0UsU0FDcEIsT0FBTyxTQUFVQyxNQUNmLE9BQU8sU0FBVUMsUUFDZixNQUFzQixtQkFBWEEsT0FDRkEsT0FBT0gsU0FBVUMsU0FBVUgsZUFHN0JJLEtBQUtDLE9BQ2QsQ0FDRixDQUNGLENBQ0YsQ0FmQXZMLFFBQVF3TCxZQUFhLEVBaUJyQixJQUFJQyxNQUFRUix3QkFDWlEsTUFBTUMsa0JBQW9CVCxzQkFFMUJqTCxRQUFBLFFBQXFCeUwsSyIsInNvdXJjZXMiOlsid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUcmltLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RyaW1tZWRFbmRJbmRleC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2RlYm91bmNlLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbm93LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9OdW1iZXIuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcmVhY3QtcG9ydGFsL2VzL3V0aWxzLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9yZWFjdC1wb3J0YWwvZXMvUG9ydGFsLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9yZWFjdC1wb3J0YWwvZXMvTGVnYWN5UG9ydGFsLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9yZWFjdC1wb3J0YWwvZXMvUG9ydGFsQ29tcGF0LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9yZWFjdC1wb3J0YWwvZXMvUG9ydGFsV2l0aFN0YXRlLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9yZWR1eC10aHVuay9saWIvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHRyaW1tZWRFbmRJbmRleCA9IHJlcXVpcmUoJy4vX3RyaW1tZWRFbmRJbmRleCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIHdoaXRlc3BhY2UuICovXG52YXIgcmVUcmltU3RhcnQgPSAvXlxccysvO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRyaW1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRyaW1tZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVHJpbShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZ1xuICAgID8gc3RyaW5nLnNsaWNlKDAsIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpICsgMSkucmVwbGFjZShyZVRyaW1TdGFydCwgJycpXG4gICAgOiBzdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRyaW07XG4iLCIvKiogVXNlZCB0byBtYXRjaCBhIHNpbmdsZSB3aGl0ZXNwYWNlIGNoYXJhY3Rlci4gKi9cbnZhciByZVdoaXRlc3BhY2UgPSAvXFxzLztcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltRW5kYCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG5vbi13aGl0ZXNwYWNlXG4gKiBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLlxuICovXG5mdW5jdGlvbiB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSB7XG4gIHZhciBpbmRleCA9IHN0cmluZy5sZW5ndGg7XG5cbiAgd2hpbGUgKGluZGV4LS0gJiYgcmVXaGl0ZXNwYWNlLnRlc3Qoc3RyaW5nLmNoYXJBdChpbmRleCkpKSB7fVxuICByZXR1cm4gaW5kZXg7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdHJpbW1lZEVuZEluZGV4O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIG5vdyA9IHJlcXVpcmUoJy4vbm93JyksXG4gICAgdG9OdW1iZXIgPSByZXF1aXJlKCcuL3RvTnVtYmVyJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gKiBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICogICAndHJhaWxpbmcnOiBmYWxzZVxuICogfSkpO1xuICpcbiAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxhc3RBcmdzLFxuICAgICAgbGFzdFRoaXMsXG4gICAgICBtYXhXYWl0LFxuICAgICAgcmVzdWx0LFxuICAgICAgdGltZXJJZCxcbiAgICAgIGxhc3RDYWxsVGltZSxcbiAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgIG1heGluZyA9IGZhbHNlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICB0aW1lV2FpdGluZyA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgIHJldHVybiBtYXhpbmdcbiAgICAgID8gbmF0aXZlTWluKHRpbWVXYWl0aW5nLCBtYXhXYWl0IC0gdGltZVNpbmNlTGFzdEludm9rZSlcbiAgICAgIDogdGltZVdhaXRpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cbiAgICAvLyBFaXRoZXIgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCwgYWN0aXZpdHkgaGFzIHN0b3BwZWQgYW5kIHdlJ3JlIGF0IHRoZVxuICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuICAgIHJldHVybiAobGFzdENhbGxUaW1lID09PSB1bmRlZmluZWQgfHwgKHRpbWVTaW5jZUxhc3RDYWxsID49IHdhaXQpIHx8XG4gICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGltZXJFeHBpcmVkKCkge1xuICAgIHZhciB0aW1lID0gbm93KCk7XG4gICAgaWYgKHNob3VsZEludm9rZSh0aW1lKSkge1xuICAgICAgcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTtcbiAgICB9XG4gICAgLy8gUmVzdGFydCB0aGUgdGltZXIuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCByZW1haW5pbmdXYWl0KHRpbWUpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKSB7XG4gICAgdGltZXJJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbiAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS5cbiAgICBpZiAodHJhaWxpbmcgJiYgbGFzdEFyZ3MpIHtcbiAgICAgIHJldHVybiBpbnZva2VGdW5jKHRpbWUpO1xuICAgIH1cbiAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgIH1cbiAgICBsYXN0SW52b2tlVGltZSA9IDA7XG4gICAgbGFzdEFyZ3MgPSBsYXN0Q2FsbFRpbWUgPSBsYXN0VGhpcyA9IHRpbWVySWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICByZXR1cm4gdGltZXJJZCA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogdHJhaWxpbmdFZGdlKG5vdygpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpLFxuICAgICAgICBpc0ludm9raW5nID0gc2hvdWxkSW52b2tlKHRpbWUpO1xuXG4gICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgIGxhc3RDYWxsVGltZSA9IHRpbWU7XG5cbiAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbGVhZGluZ0VkZ2UobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgLy8gSGFuZGxlIGludm9jYXRpb25zIGluIGEgdGlnaHQgbG9vcC5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICByZXR1cm4gaW52b2tlRnVuYyhsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gIGRlYm91bmNlZC5mbHVzaCA9IGZsdXNoO1xuICByZXR1cm4gZGVib3VuY2VkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYm91bmNlO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdGltZXN0YW1wIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlXG4gKiB0aGUgVW5peCBlcG9jaCAoMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgRGF0ZVxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXN0YW1wLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmVyKGZ1bmN0aW9uKHN0YW1wKSB7XG4gKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gKiB9LCBfLm5vdygpKTtcbiAqIC8vID0+IExvZ3MgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgdG9vayBmb3IgdGhlIGRlZmVycmVkIGludm9jYXRpb24uXG4gKi9cbnZhciBub3cgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHJvb3QuRGF0ZS5ub3coKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbm93O1xuIiwidmFyIGJhc2VUcmltID0gcmVxdWlyZSgnLi9fYmFzZVRyaW0nKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbnZhciBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IGJhc2VUcmltKHZhbHVlKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9OdW1iZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBib29sOiBzaGltLFxuICAgIGZ1bmM6IHNoaW0sXG4gICAgbnVtYmVyOiBzaGltLFxuICAgIG9iamVjdDogc2hpbSxcbiAgICBzdHJpbmc6IHNoaW0sXG4gICAgc3ltYm9sOiBzaGltLFxuXG4gICAgYW55OiBzaGltLFxuICAgIGFycmF5T2Y6IGdldFNoaW0sXG4gICAgZWxlbWVudDogc2hpbSxcbiAgICBpbnN0YW5jZU9mOiBnZXRTaGltLFxuICAgIG5vZGU6IHNoaW0sXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXG4gICAgb25lT2Y6IGdldFNoaW0sXG4gICAgb25lT2ZUeXBlOiBnZXRTaGltLFxuICAgIHNoYXBlOiBnZXRTaGltLFxuICAgIGV4YWN0OiBnZXRTaGltXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBlbXB0eUZ1bmN0aW9uO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiZcbiAgICBTeW1ib2wuZm9yICYmXG4gICAgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpKSB8fFxuICAgIDB4ZWFjNztcblxuICB2YXIgaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICAgIG9iamVjdCAhPT0gbnVsbCAmJlxuICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG4gIH07XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCJleHBvcnQgdmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7IiwidmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgY2FuVXNlRE9NIH0gZnJvbSAnLi91dGlscyc7XG5cbnZhciBQb3J0YWwgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoUG9ydGFsLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBQb3J0YWwoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvcnRhbCk7XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFBvcnRhbC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFBvcnRhbCkpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBvcnRhbCwgW3tcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuZGVmYXVsdE5vZGUpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLmRlZmF1bHROb2RlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGVmYXVsdE5vZGUgPSBudWxsO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIGlmICghY2FuVXNlRE9NKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnByb3BzLm5vZGUgJiYgIXRoaXMuZGVmYXVsdE5vZGUpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZGVmYXVsdE5vZGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbCh0aGlzLnByb3BzLmNoaWxkcmVuLCB0aGlzLnByb3BzLm5vZGUgfHwgdGhpcy5kZWZhdWx0Tm9kZSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBvcnRhbDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuUG9ydGFsLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIG5vZGU6IFByb3BUeXBlcy5hbnlcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBvcnRhbDsiLCJ2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbi8vIFRoaXMgZmlsZSBpcyBhIGZhbGxiYWNrIGZvciBhIGNvbnN1bWVyIHdobyBpcyBub3QgeWV0IG9uIFJlYWN0IDE2XG4vLyBhcyBjcmVhdGVQb3J0YWwgd2FzIGludHJvZHVjZWQgaW4gUmVhY3QgMTZcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxudmFyIFBvcnRhbCA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhQb3J0YWwsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFBvcnRhbCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUG9ydGFsKTtcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUG9ydGFsLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUG9ydGFsKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUG9ydGFsLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLnJlbmRlclBvcnRhbCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZFVwZGF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcm9wcykge1xuICAgICAgdGhpcy5yZW5kZXJQb3J0YWwoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLmRlZmF1bHROb2RlIHx8IHRoaXMucHJvcHMubm9kZSk7XG4gICAgICBpZiAodGhpcy5kZWZhdWx0Tm9kZSkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuZGVmYXVsdE5vZGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5kZWZhdWx0Tm9kZSA9IG51bGw7XG4gICAgICB0aGlzLnBvcnRhbCA9IG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyUG9ydGFsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyUG9ydGFsKHByb3BzKSB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMubm9kZSAmJiAhdGhpcy5kZWZhdWx0Tm9kZSkge1xuICAgICAgICB0aGlzLmRlZmF1bHROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5kZWZhdWx0Tm9kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qaW1mYi9kOTllMDY3OGU5ZGE3MTVjY2Y2NDU0OTYxZWYwNGQxYlxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLmNoaWxkcmVuLnR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2hpbGRyZW4gPSBSZWFjdC5jbG9uZUVsZW1lbnQodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9ydGFsID0gUmVhY3RET00udW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIodGhpcywgY2hpbGRyZW4sIHRoaXMucHJvcHMubm9kZSB8fCB0aGlzLmRlZmF1bHROb2RlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUG9ydGFsO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5leHBvcnQgZGVmYXVsdCBQb3J0YWw7XG5cblxuUG9ydGFsLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIG5vZGU6IFByb3BUeXBlcy5hbnlcbn07IiwiaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5cbmltcG9ydCBQb3J0YWx2NCBmcm9tICcuL1BvcnRhbCc7XG5pbXBvcnQgTGVnYWN5UG9ydGFsIGZyb20gJy4vTGVnYWN5UG9ydGFsJztcblxudmFyIFBvcnRhbCA9IHZvaWQgMDtcblxuaWYgKFJlYWN0RE9NLmNyZWF0ZVBvcnRhbCkge1xuICBQb3J0YWwgPSBQb3J0YWx2NDtcbn0gZWxzZSB7XG4gIFBvcnRhbCA9IExlZ2FjeVBvcnRhbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUG9ydGFsOyIsInZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUG9ydGFsIGZyb20gJy4vUG9ydGFsQ29tcGF0JztcblxudmFyIEtFWUNPREVTID0ge1xuICBFU0NBUEU6IDI3XG59O1xuXG52YXIgUG9ydGFsV2l0aFN0YXRlID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFBvcnRhbFdpdGhTdGF0ZSwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUG9ydGFsV2l0aFN0YXRlKHByb3BzKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvcnRhbFdpdGhTdGF0ZSk7XG5cbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUG9ydGFsV2l0aFN0YXRlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUG9ydGFsV2l0aFN0YXRlKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xuXG4gICAgX3RoaXMucG9ydGFsTm9kZSA9IG51bGw7XG4gICAgX3RoaXMuc3RhdGUgPSB7IGFjdGl2ZTogISFwcm9wcy5kZWZhdWx0T3BlbiB9O1xuICAgIF90aGlzLm9wZW5Qb3J0YWwgPSBfdGhpcy5vcGVuUG9ydGFsLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLmNsb3NlUG9ydGFsID0gX3RoaXMuY2xvc2VQb3J0YWwuYmluZChfdGhpcyk7XG4gICAgX3RoaXMud3JhcFdpdGhQb3J0YWwgPSBfdGhpcy53cmFwV2l0aFBvcnRhbC5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5oYW5kbGVPdXRzaWRlTW91c2VDbGljayA9IF90aGlzLmhhbmRsZU91dHNpZGVNb3VzZUNsaWNrLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLmhhbmRsZUtleWRvd24gPSBfdGhpcy5oYW5kbGVLZXlkb3duLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQb3J0YWxXaXRoU3RhdGUsIFt7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNsb3NlT25Fc2MpIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wcm9wcy5jbG9zZU9uT3V0c2lkZUNsaWNrKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVPdXRzaWRlTW91c2VDbGljayk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNsb3NlT25Fc2MpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wcm9wcy5jbG9zZU9uT3V0c2lkZUNsaWNrKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVPdXRzaWRlTW91c2VDbGljayk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb3BlblBvcnRhbCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9wZW5Qb3J0YWwoZSkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuYWN0aXZlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChlICYmIGUubmF0aXZlRXZlbnQpIHtcbiAgICAgICAgZS5uYXRpdmVFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBhY3RpdmU6IHRydWUgfSwgdGhpcy5wcm9wcy5vbk9wZW4pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Nsb3NlUG9ydGFsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2VQb3J0YWwoKSB7XG4gICAgICBpZiAoIXRoaXMuc3RhdGUuYWN0aXZlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBhY3RpdmU6IGZhbHNlIH0sIHRoaXMucHJvcHMub25DbG9zZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnd3JhcFdpdGhQb3J0YWwnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cmFwV2l0aFBvcnRhbChjaGlsZHJlbikge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5zdGF0ZS5hY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgUG9ydGFsLFxuICAgICAgICB7XG4gICAgICAgICAgbm9kZTogdGhpcy5wcm9wcy5ub2RlLFxuICAgICAgICAgIGtleTogJ3JlYWN0LXBvcnRhbCcsXG4gICAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYocG9ydGFsTm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5wb3J0YWxOb2RlID0gcG9ydGFsTm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZU91dHNpZGVNb3VzZUNsaWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlT3V0c2lkZU1vdXNlQ2xpY2soZSkge1xuICAgICAgaWYgKCF0aGlzLnN0YXRlLmFjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgcm9vdCA9IHRoaXMucG9ydGFsTm9kZSAmJiAodGhpcy5wb3J0YWxOb2RlLnByb3BzLm5vZGUgfHwgdGhpcy5wb3J0YWxOb2RlLmRlZmF1bHROb2RlKTtcbiAgICAgIGlmICghcm9vdCB8fCByb290LmNvbnRhaW5zKGUudGFyZ2V0KSB8fCBlLmJ1dHRvbiAmJiBlLmJ1dHRvbiAhPT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmNsb3NlUG9ydGFsKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaGFuZGxlS2V5ZG93bicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZSkge1xuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gS0VZQ09ERVMuRVNDQVBFICYmIHRoaXMuc3RhdGUuYWN0aXZlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VQb3J0YWwoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbih7XG4gICAgICAgIG9wZW5Qb3J0YWw6IHRoaXMub3BlblBvcnRhbCxcbiAgICAgICAgY2xvc2VQb3J0YWw6IHRoaXMuY2xvc2VQb3J0YWwsXG4gICAgICAgIHBvcnRhbDogdGhpcy53cmFwV2l0aFBvcnRhbCxcbiAgICAgICAgaXNPcGVuOiB0aGlzLnN0YXRlLmFjdGl2ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBvcnRhbFdpdGhTdGF0ZTtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuUG9ydGFsV2l0aFN0YXRlLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGRlZmF1bHRPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgbm9kZTogUHJvcFR5cGVzLmFueSxcbiAgY2xvc2VPbkVzYzogUHJvcFR5cGVzLmJvb2wsXG4gIGNsb3NlT25PdXRzaWRlQ2xpY2s6IFByb3BUeXBlcy5ib29sLFxuICBvbk9wZW46IFByb3BUeXBlcy5mdW5jLFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuUG9ydGFsV2l0aFN0YXRlLmRlZmF1bHRQcm9wcyA9IHtcbiAgb25PcGVuOiBmdW5jdGlvbiBvbk9wZW4oKSB7fSxcbiAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZSgpIHt9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQb3J0YWxXaXRoU3RhdGU7IiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZnVuY3Rpb24gY3JlYXRlVGh1bmtNaWRkbGV3YXJlKGV4dHJhQXJndW1lbnQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIGRpc3BhdGNoID0gX3JlZi5kaXNwYXRjaDtcbiAgICB2YXIgZ2V0U3RhdGUgPSBfcmVmLmdldFN0YXRlO1xuICAgIHJldHVybiBmdW5jdGlvbiAobmV4dCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gYWN0aW9uKGRpc3BhdGNoLCBnZXRTdGF0ZSwgZXh0cmFBcmd1bWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufVxuXG52YXIgdGh1bmsgPSBjcmVhdGVUaHVua01pZGRsZXdhcmUoKTtcbnRodW5rLndpdGhFeHRyYUFyZ3VtZW50ID0gY3JlYXRlVGh1bmtNaWRkbGV3YXJlO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSB0aHVuazsiXSwibmFtZXMiOlsidHJpbW1lZEVuZEluZGV4IiwicmVUcmltU3RhcnQiLCJtb2R1bGUiLCJleHBvcnRzIiwiYmFzZVRyaW0iLCJzdHJpbmciLCJzbGljZSIsInJlcGxhY2UiLCJyZVdoaXRlc3BhY2UiLCJpbmRleCIsImxlbmd0aCIsInRlc3QiLCJjaGFyQXQiLCJpc09iamVjdCIsIm5vdyIsInRvTnVtYmVyIiwibmF0aXZlTWF4IiwiTWF0aCIsIm1heCIsIm5hdGl2ZU1pbiIsIm1pbiIsImRlYm91bmNlIiwiZnVuYyIsIndhaXQiLCJvcHRpb25zIiwibGFzdEFyZ3MiLCJsYXN0VGhpcyIsIm1heFdhaXQiLCJyZXN1bHQiLCJ0aW1lcklkIiwibGFzdENhbGxUaW1lIiwibGFzdEludm9rZVRpbWUiLCJsZWFkaW5nIiwibWF4aW5nIiwidHJhaWxpbmciLCJUeXBlRXJyb3IiLCJpbnZva2VGdW5jIiwidGltZSIsImFyZ3MiLCJ0aGlzQXJnIiwidW5kZWZpbmVkIiwiYXBwbHkiLCJzaG91bGRJbnZva2UiLCJ0aW1lU2luY2VMYXN0Q2FsbCIsInRpbWVyRXhwaXJlZCIsInRyYWlsaW5nRWRnZSIsInNldFRpbWVvdXQiLCJyZW1haW5pbmdXYWl0IiwidGltZVdhaXRpbmciLCJkZWJvdW5jZWQiLCJpc0ludm9raW5nIiwiYXJndW1lbnRzIiwidGhpcyIsImxlYWRpbmdFZGdlIiwiY2xlYXJUaW1lb3V0IiwiY2FuY2VsIiwiZmx1c2giLCJyb290IiwiRGF0ZSIsImlzU3ltYm9sIiwicmVJc0JhZEhleCIsInJlSXNCaW5hcnkiLCJyZUlzT2N0YWwiLCJmcmVlUGFyc2VJbnQiLCJwYXJzZUludCIsInZhbHVlIiwib3RoZXIiLCJ2YWx1ZU9mIiwiaXNCaW5hcnkiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsImVtcHR5RnVuY3Rpb24iLCJzaGltIiwicHJvcHMiLCJwcm9wTmFtZSIsImNvbXBvbmVudE5hbWUiLCJsb2NhdGlvbiIsInByb3BGdWxsTmFtZSIsInNlY3JldCIsImVyciIsIkVycm9yIiwibmFtZSIsImdldFNoaW0iLCJpc1JlcXVpcmVkIiwiUmVhY3RQcm9wVHlwZXMiLCJhcnJheSIsImJvb2wiLCJudW1iZXIiLCJvYmplY3QiLCJzeW1ib2wiLCJhbnkiLCJhcnJheU9mIiwiZWxlbWVudCIsImluc3RhbmNlT2YiLCJub2RlIiwib2JqZWN0T2YiLCJvbmVPZiIsIm9uZU9mVHlwZSIsInNoYXBlIiwiZXhhY3QiLCJjaGVja1Byb3BUeXBlcyIsIlByb3BUeXBlcyIsImNhblVzZURPTSIsIndpbmRvdyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVDbGFzcyIsImRlZmluZVByb3BlcnRpZXMiLCJ0YXJnZXQiLCJpIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5Iiwia2V5IiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJwcm90b3R5cGUiLCJQb3J0YWwiLCJfUmVhY3QkQ29tcG9uZW50IiwiX2NsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJjYWxsIiwiUmVmZXJlbmNlRXJyb3IiLCJfX3Byb3RvX18iLCJnZXRQcm90b3R5cGVPZiIsIl9pbmhlcml0cyIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwic2V0UHJvdG90eXBlT2YiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsImRlZmF1bHROb2RlIiwiYm9keSIsInJlbW92ZUNoaWxkIiwicmVuZGVyIiwiYXBwZW5kQ2hpbGQiLCJjaGlsZHJlbiIsInByb3BUeXBlcyIsImNvbXBvbmVudERpZE1vdW50IiwicmVuZGVyUG9ydGFsIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicG9ydGFsIiwidHlwZSIsIkxlZ2FjeVBvcnRhbCIsIktFWUNPREVTIiwiUG9ydGFsV2l0aFN0YXRlIiwiX3RoaXMiLCJwb3J0YWxOb2RlIiwic3RhdGUiLCJhY3RpdmUiLCJkZWZhdWx0T3BlbiIsIm9wZW5Qb3J0YWwiLCJiaW5kIiwiY2xvc2VQb3J0YWwiLCJ3cmFwV2l0aFBvcnRhbCIsImhhbmRsZU91dHNpZGVNb3VzZUNsaWNrIiwiaGFuZGxlS2V5ZG93biIsImNsb3NlT25Fc2MiLCJhZGRFdmVudExpc3RlbmVyIiwiY2xvc2VPbk91dHNpZGVDbGljayIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJlIiwibmF0aXZlRXZlbnQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJzZXRTdGF0ZSIsIm9uT3BlbiIsIm9uQ2xvc2UiLCJfdGhpczIiLCJyZWYiLCJjb250YWlucyIsImJ1dHRvbiIsImtleUNvZGUiLCJpc09wZW4iLCJkZWZhdWx0UHJvcHMiLCJjcmVhdGVUaHVua01pZGRsZXdhcmUiLCJleHRyYUFyZ3VtZW50IiwiX3JlZiIsImRpc3BhdGNoIiwiZ2V0U3RhdGUiLCJuZXh0IiwiYWN0aW9uIiwiX19lc01vZHVsZSIsInRodW5rIiwid2l0aEV4dHJhQXJndW1lbnQiXSwic291cmNlUm9vdCI6IiJ9