-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path467.2b3d1e80.iframe.bundle.js
2 lines (2 loc) · 261 KB
/
467.2b3d1e80.iframe.bundle.js
1
2
(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[467],{"./src/code-studio/clientState.js":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";var _utils=__webpack_require__("./src/utils.js"),_activityUtils=__webpack_require__("./src/code-studio/activityUtils.js"),sessionStorage=window.sessionStorage,clientState=module.exports={};function levelProgressByScript(){var progressJson=sessionStorage.getItem("progress");try{return progressJson?JSON.parse(progressJson):{}}catch(e){return{}}}function recordVisualElementSeen(visualElementType,visualElementId){var elementSeen,elementSeenJson=sessionStorage.getItem(visualElementType)||"{}";try{(elementSeen=JSON.parse(elementSeenJson))[visualElementId]=!0,(0,_utils.trySetSessionStorage)(visualElementType,JSON.stringify(elementSeen))}catch(e){(elementSeen={})[visualElementId]=!0,(0,_utils.trySetSessionStorage)(visualElementType,JSON.stringify(elementSeen))}}function hasSeenVisualElement(visualElementType,visualElementId){var elementSeenJson=sessionStorage.getItem(visualElementType)||"{}";try{return!0===JSON.parse(elementSeenJson)[visualElementId]}catch(e){return!1}}function createKey(scriptName,levelId,prefix){return(prefix?prefix+"_":"")+scriptName+"_"+levelId}clientState.queryParams=__webpack_require__("./src/code-studio/utils.js").queryParams,clientState.EXPIRY_DAYS=365,clientState.MAXIMUM_CACHABLE_RESULT=999,clientState.reset=function(){try{sessionStorage.clear()}catch(e){}},clientState.clearProgress=function(){sessionStorage.removeItem("progress"),sessionStorage.removeItem("lines"),function removeItemsWithPrefix(sessionStorage,prefix){Object.keys(sessionStorage).filter((function(key){return key.startsWith(prefix)})).forEach((function(key){return sessionStorage.removeItem(key)}))}(sessionStorage,"source_")},clientState.sourceForLevel=function(scriptName,levelId,timestamp){var data=sessionStorage.getItem(createKey(scriptName,levelId,"source"));if(data){var parsed;try{parsed=JSON.parse(data)}catch(e){return}if(!timestamp||parsed.timestamp>timestamp)return parsed.source}},clientState.writeSourceForLevel=function(scriptName,levelId,timestamp,source){void 0!==source&&(0,_utils.trySetSessionStorage)(createKey(scriptName,levelId,"source"),JSON.stringify({source,timestamp}))},clientState.trackProgress=function(scriptName,levelId,testResult){if(testResult&&!(testResult>clientState.MAXIMUM_CACHABLE_RESULT)){var progressData=levelProgressByScript();progressData[scriptName]||(progressData[scriptName]={});var savedResult=progressData[scriptName][levelId]||0,mergedResult=(0,_activityUtils.mergeActivityResult)(savedResult,testResult);mergedResult!==savedResult&&(progressData[scriptName][levelId]=mergedResult,(0,_utils.trySetSessionStorage)("progress",JSON.stringify(progressData)))}},clientState.levelProgress=function(scriptName){return levelProgressByScript()[scriptName]||{}},clientState.hasSeenVideo=function(videoId){return hasSeenVisualElement("video",videoId)},clientState.recordVideoSeen=function(videoId){recordVisualElementSeen("video",videoId)},clientState.hasSeenCallout=function(calloutId){return hasSeenVisualElement("callout",calloutId)},clientState.recordCalloutSeen=function(calloutId){recordVisualElementSeen("callout",calloutId)}},"./src/code-studio/isRtlRedux.js":(__unused_webpack_module,exports)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function locale(){var state=arguments.length>0&&void 0!==arguments[0]&&arguments[0],action=arguments.length>1?arguments[1]:void 0;if(action.type===SET_RTL)return action.isRtl;return state},exports.isRtlFromDOM=isRtlFromDOM,exports.setRtlFromDOM=exports.setRtl=void 0;var SET_RTL="isRtl/SET_RTL",setRtl=exports.setRtl=function setRtl(isRtl){return{type:SET_RTL,isRtl}};exports.setRtlFromDOM=function setRtlFromDOM(){return setRtl(isRtlFromDOM())};function isRtlFromDOM(){var head=document.getElementsByTagName("head")[0];if(head&&head.parentElement){var dir=head.parentElement.getAttribute("dir");return!(!dir||"rtl"!==dir.toLowerCase())}return!1}},"./src/code-studio/url_test.js":module=>{module.exports=function testImageAccess(url){var element,successCallback=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},failureCallback=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},timeoutMs=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3,videoElement=arguments.length>4&&void 0!==arguments[4]&&arguments[4];element=videoElement?document.createElement("video"):new Image;var called=!1;function finish(callback){return function(){called||(called=!0,window.clearTimeout(timeout),callback())}}var timeout=window.setTimeout(finish(failureCallback),timeoutMs);element.onerror=finish(failureCallback),videoElement?element.ondurationchange=finish(successCallback):element.onload=finish(successCallback),element.src=url,window.testImages=window.testImages||[],window.testImages.push(element)}},"./src/commonStyles.js":(module,__unused_webpack_exports,__webpack_require__)=>{var commonStyles=module.exports,styleConstants=__webpack_require__("./src/styleConstants.js"),color=__webpack_require__("./src/util/color.js");commonStyles.hidden={display:"none"},commonStyles.purpleHeader={height:styleConstants["workspace-headers-height"],backgroundColor:color.purple,color:color.white,overflowY:"hidden",WebkitUserSelect:"none",MozUserSelect:"none",msUserSelect:"none",userSelect:"none"},commonStyles.purpleHeaderUnfocused={backgroundColor:color.lighter_purple,color:color.neutral_white},commonStyles.teacherBlueHeader={backgroundColor:color.cyan,color:color.lightest_cyan},commonStyles.teacherHeaderUnfocused={color:color.dark_charcoal},commonStyles.minecraftHeader={backgroundColor:"#3b3b3b",color:color.white},commonStyles.button={paddingTop:5,paddingBottom:5,fontSize:14},commonStyles.bubble={color:color.black,marginBottom:10,position:"relative",cursor:"pointer"}},"./src/dom.js":(__unused_webpack_module,exports)=>{exports.addReadyListener=function(callback){"complete"===document.readyState?setTimeout(callback,1):window.addEventListener("load",callback,!1)},exports.getTouchEventName=function(eventName){var key,isIE11Touch=window.navigator.pointerEnabled,isIE10Touch=window.navigator.msPointerEnabled;if(isIE11Touch?key="ie11":isIE10Touch?key="ie10":!(isIE11Touch||isIE10Touch)&&(key="standard"),key&&TOUCH_MAP[eventName])return TOUCH_MAP[eventName][key]};var addEvent=function addEvent(element,eventName,handler){var suppressTouchDefault=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],boundEvents={},bindEvent=function bindEvent(type,eventName,handler){element.addEventListener(eventName,handler,!1),boundEvents[type]={name:eventName,handler}},unbindEvent=function unbindEvent(type){var eventInfo=boundEvents[type];eventInfo&&(element.removeEventListener(eventInfo.name,eventInfo.handler),delete boundEvents[type])};bindEvent("click",eventName,handler);var touchEvent=exports.getTouchEventName(eventName);return touchEvent&&bindEvent("touch",touchEvent,(function(e){suppressTouchDefault&&e.preventDefault();["pointerdown","MSPointerDown","pointermove","MSPointerMove","pointerup","MSPointerUp"].includes(touchEvent)&&unbindEvent("click"),null==handler||handler.call(this,e)})),function(){unbindEvent("click"),unbindEvent("touch")}};exports.addMouseDownTouchEvent=function(element,handler){return addEvent(element,"mousedown",handler)},exports.addMouseUpTouchEvent=function(element,handler){return addEvent(element,"mouseup",handler,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])},exports.addMouseMoveTouchEvent=function(element,handler){return addEvent(element,"mousemove",handler)},exports.addClickTouchEvent=function(element,handler){return addEvent(element,"click",handler)};var TOUCH_MAP={click:{standard:"touchstart",ie10:"MSPointerDown",ie11:"pointerdown"},mousedown:{standard:"touchstart",ie10:"MSPointerDown",ie11:"pointerdown"},mouseup:{standard:"touchend",ie10:"MSPointerUp",ie11:"pointerup"},mousemove:{standard:"touchmove",ie10:"MSPointerMove",ie11:"pointermove"}};exports.TOUCH_MAP=TOUCH_MAP,exports.isMobile=function(){return/Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile/.test(window.navigator.userAgent)},exports.isWindowsTouch=function(){return/MSIE.*Touch/.test(window.navigator.userAgent)},exports.isAndroid=function(){return/Android/.test(window.navigator.userAgent)},exports.isIOS=function(){return/iP(hone|od|ad)/.test(window.navigator.userAgent)},exports.isIPad=function(){return/iPad/i.test(window.navigator.userAgent)}},"./src/redux/authoredHints.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function reducer(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:authoredHintsInitialState,action=arguments.length>1?arguments[1]:void 0;if(action.type===ENQUEUE_HINTS){var _bisect2=function _slicedToArray(r,e){return function _arrayWithHoles(r){if(Array.isArray(r))return r}(r)||function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t.return&&(u=t.return(),Object(u)!==u))return}finally{if(o)throw n}}return a}}(r,e)||function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}(r,e)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}((0,_utils.bisect)(action.hints,(function(hint){return-1!==action.hintsUsedIds.indexOf(hint.hintId)})),2),seen=_bisect2[0],unseen=_bisect2[1];return Object.assign({},state,{unseenHints:state.unseenHints.concat(unseen),seenHints:state.seenHints.concat(seen)})}if(action.type===SHOW_NEXT_HINT){var nextHint=Object.assign({},state.unseenHints[0],{alreadySeen:!0});return Object.assign({},state,{unseenHints:state.unseenHints.slice(1),seenHints:state.seenHints.concat([nextHint])})}if(action.type===DISPLAY_MISSING_BLOCK_HINTS){var seenHints=state.seenHints.filter((function(seenHint){return"contextual"!==seenHint.hintType||action.hints.some((function(newHint){return seenHint.hintId===newHint.hintId}))})),newHintsToEnqueue=action.hints.filter((function(newHint){return state.seenHints.every((function(seenHint){return newHint.hintId!==seenHint.hintId}))})),unseenNonContextualHints=state.unseenHints.filter((function(hint){return"contextual"!==hint.hintType})),newUnseenHints=newHintsToEnqueue.filter((function(hint){return!hint.alreadySeen})).concat(unseenNonContextualHints),newSeenHints=seenHints.concat(newHintsToEnqueue.filter((function(hint){return hint.alreadySeen})));return Object.assign({},state,{unseenHints:newUnseenHints,seenHints:newSeenHints})}return state},exports.showNextHint=exports.enqueueHints=exports.displayMissingBlockHints=void 0;var _utils=__webpack_require__("./src/utils.js");function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}var ENQUEUE_HINTS="authoredHints/ENQUEUE_HINTS",SHOW_NEXT_HINT="authoredHints/SHOW_NEXT_HINT",DISPLAY_MISSING_BLOCK_HINTS="authoredHints/DISPLAY_MISSING_BLOCK_HINTS",authoredHintsInitialState={seenHints:[],unseenHints:[]};exports.enqueueHints=function enqueueHints(hints,hintsUsedIds){return{type:ENQUEUE_HINTS,hints,hintsUsedIds}},exports.showNextHint=function showNextHint(){return{type:SHOW_NEXT_HINT}},exports.displayMissingBlockHints=function displayMissingBlockHints(hints){return{type:DISPLAY_MISSING_BLOCK_HINTS,hints}}},"./src/redux/feedback.js":(__unused_webpack_module,exports)=>{"use strict";function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach((function(r){_defineProperty(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function reducer(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:initialState,action=arguments.length>1?arguments[1]:void 0;if(action.type===SHOW_FEEDBACK){var displayingShareControls=action.displayingShareControls;return _objectSpread(_objectSpread({},state),{},{displayingFeedback:!0,displayingShareControls})}if(action.type===HIDE_FEEDBACK)return _objectSpread(_objectSpread({},state),{},{displayingFeedback:!1});if(action.type===SET_BLOCK_LIMIT){var blockLimit=action.blockLimit;return _objectSpread(_objectSpread({},state),{},{blockLimit})}if(action.type===SET_FEEDBACK_DATA){var isChallenge=action.isChallenge,isPerfect=action.isPerfect,blocksUsed=action.blocksUsed,displayFunometer=action.displayFunometer,studentCode=action.studentCode,feedbackImage=action.feedbackImage;return _objectSpread(_objectSpread({},state),{},{isChallenge,isPerfect,blocksUsed,displayFunometer,studentCode,feedbackImage})}if(action.type===SET_ACHIEVEMENTS){var achievements=action.achievements;return _objectSpread(_objectSpread({},state),{},{achievements})}return state},exports.showFeedback=exports.setFeedbackData=exports.setBlockLimit=exports.setAchievements=exports.hideFeedback=void 0;var SHOW_FEEDBACK="feedback/show_feedback",HIDE_FEEDBACK="feedback/hide_feedback",SET_ACHIEVEMENTS="feedback/set_achievemnts",SET_BLOCK_LIMIT="feedback/set_block_limit",SET_FEEDBACK_DATA="feedback/set_data",initialState={displayingFeedback:!1,displayingCode:!1,displayingShareControls:!1,isChallenge:!1,isPerfect:!0,blocksUsed:0,blockLimit:void 0,achievements:[],displayFunometer:!0,studentCode:{message:"",code:""},feedbackImage:null};exports.showFeedback=function showFeedback(){return{type:SHOW_FEEDBACK,displayingShareControls:arguments.length>0&&void 0!==arguments[0]&&arguments[0]}},exports.hideFeedback=function hideFeedback(){return{type:HIDE_FEEDBACK}},exports.setBlockLimit=function setBlockLimit(blockLimit){return{type:SET_BLOCK_LIMIT,blockLimit}},exports.setFeedbackData=function setFeedbackData(props){return _objectSpread({type:SET_FEEDBACK_DATA},props)},exports.setAchievements=function setAchievements(achievements){return{type:SET_ACHIEVEMENTS,achievements}}},"./src/redux/instructions.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function reducer(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:_objectSpread({},instructionsInitialState),action=arguments.length>1?arguments[1]:void 0;if(action.type===SET_CONSTANTS){if(state.shortInstructions||state.longInstructions)throw new Error("instructions constants already set");var noInstructionsWhenCollapsed=action.noInstructionsWhenCollapsed,shortInstructions=action.shortInstructions,shortInstructions2=action.shortInstructions2,longInstructions=action.longInstructions,dynamicInstructions=action.dynamicInstructions,hasContainedLevels=action.hasContainedLevels,overlayVisible=action.overlayVisible,teacherMarkdown=action.teacherMarkdown,levelVideos=action.levelVideos,mapReference=action.mapReference,referenceLinks=action.referenceLinks,muteBackgroundMusic=action.muteBackgroundMusic,unmuteBackgroundMusic=action.unmuteBackgroundMusic,programmingEnvironment=action.programmingEnvironment,isCollapsed=state.isCollapsed;return longInstructions||hasContainedLevels||(isCollapsed=!0),Object.assign({},state,{noInstructionsWhenCollapsed,shortInstructions,shortInstructions2,longInstructions,dynamicInstructions,teacherMarkdown,hasContainedLevels,overlayVisible,isCollapsed,levelVideos,mapReference,referenceLinks,muteBackgroundMusic,unmuteBackgroundMusic,programmingEnvironment})}if(action.type===TOGGLE_INSTRUCTIONS_COLLAPSED)return Object.assign({},state,{isCollapsed:!state.isCollapsed});if(action.type===SET_INSTRUCTIONS_RENDERED_HEIGHT&&state.allowResize)return Object.assign({},state,{renderedHeight:action.height,expandedHeight:state.isCollapsed?state.expandedHeight:action.height});if(action.type===SET_INSTRUCTIONS_MAX_HEIGHT_NEEDED&&state.allowResize)return Object.assign({},state,{maxNeededHeight:action.maxNeededHeight});if(action.type===SET_INSTRUCTIONS_MAX_HEIGHT_AVAILABLE&&action.maxAvailableHeight!==state.maxAvailableHeight&&state.allowResize)return Object.assign({},state,{maxAvailableHeight:action.maxAvailableHeight,renderedHeight:Math.min(action.maxAvailableHeight,state.renderedHeight),expandedHeight:Math.min(action.maxAvailableHeight,state.expandedHeight)});if(action.type===SET_ALLOW_INSTRUCTIONS_RESIZE)return _objectSpread(_objectSpread({},state),{},{allowResize:action.allowResize});if(action.type===SET_HAS_AUTHORED_HINTS)return Object.assign({},state,{hasAuthoredHints:action.hasAuthoredHints});if(action.type===SET_TTS_AUTOPLAY_ENABLED_FOR_LEVEL)return Object.assign({},state,{ttsAutoplayEnabledForLevel:action.ttsAutoplayEnabledForLevel});if(action.type===SET_CODE_REVIEW_ENABLED_FOR_LEVEL)return Object.assign({},state,{codeReviewEnabledForLevel:action.codeReviewEnabledForLevel});if(action.type===SET_FEEDBACK)return Object.assign({},state,{feedback:action.feedback});if(action.type===HIDE_OVERLAY)return state.dynamicInstructionsDismissCallback&&state.dynamicInstructionsDismissCallback(),Object.assign({},state,{overlayVisible:!1});if(action.type===SET_DYNAMIC_INSTRUCTIONS_DEFAULTS)return Object.assign({},state,{dynamicInstructionsDefaults:action.dynamicInstructionsDefaults});if(action.type===SET_DYNAMIC_INSTRUCTIONS_KEY)return Object.assign({},state,{dynamicInstructionsKey:action.dynamicInstructionsKey,overlayVisible:action.options&&action.options.showOverlay});if(action.type===SET_DYNAMIC_INSTRUCTIONS_DISMISS_CALLBACK)return Object.assign({},state,{dynamicInstructionsDismissCallback:action.dynamicInstructionsDismissCallback});if(action.type===SET_TA_RUBRIC)return Object.assign({},state,{taRubric:action.taRubric});return state},exports.determineInstructionsConstants=void 0,exports.getDynamicInstructions=function getDynamicInstructions(state){if(!state.dynamicInstructionsDefaults&&!state.dynamicInstructions)return;return _objectSpread(_objectSpread({},state.dynamicInstructionsDefaults),state.dynamicInstructions&&JSON.parse(state.dynamicInstructions))},exports.toggleInstructionsCollapsed=exports.substituteInstructionImages=exports.setTtsAutoplayEnabledForLevel=exports.setTaRubric=exports.setInstructionsRenderedHeight=exports.setInstructionsMaxHeightNeeded=exports.setInstructionsMaxHeightAvailable=exports.setInstructionsConstants=exports.setHasAuthoredHints=exports.setFeedback=exports.setDynamicInstructionsOverlayDismissCallback=exports.setDynamicInstructionsKey=exports.setDynamicInstructionsDefaults=exports.setCodeReviewEnabledForLevel=exports.setAllowInstructionsResize=exports.hideOverlay=void 0;var _utils=__webpack_require__("./src/utils.js");function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach((function(r){_defineProperty(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var SET_CONSTANTS="instructions/SET_CONSTANTS",TOGGLE_INSTRUCTIONS_COLLAPSED="instructions/TOGGLE_INSTRUCTIONS_COLLAPSED",SET_INSTRUCTIONS_RENDERED_HEIGHT="instructions/SET_INSTRUCTIONS_RENDERED_HEIGHT",SET_INSTRUCTIONS_MAX_HEIGHT_NEEDED="instructions/SET_INSTRUCTIONS_MAX_HEIGHT_NEEDED",SET_INSTRUCTIONS_MAX_HEIGHT_AVAILABLE="instructions/SET_INSTRUCTIONS_MAX_HEIGHT_AVAILABLE",SET_ALLOW_INSTRUCTIONS_RESIZE="instructions/SET_ALLOW_INSTRUCTIONS_RESIZE",SET_HAS_AUTHORED_HINTS="instructions/SET_HAS_AUTHORED_HINTS",SET_FEEDBACK="instructions/SET_FEEDBACK",HIDE_OVERLAY="instructions/HIDE_OVERLAY",SET_DYNAMIC_INSTRUCTIONS_DEFAULTS="instructions/SET_DYNAMIC_INSTRUCTIONS_DEFAULTS",SET_DYNAMIC_INSTRUCTIONS_KEY="instructions/SET_DYNAMIC_INSTRUCTIONS_KEY",SET_DYNAMIC_INSTRUCTIONS_DISMISS_CALLBACK="instructions/SET_DYNAMIC_INSTRUCTIONS_DISMISS_CALLBACK",SET_TTS_AUTOPLAY_ENABLED_FOR_LEVEL="instructions/SET_TTS_AUTOPLAY_ENABLED_FOR_LEVEL",SET_CODE_REVIEW_ENABLED_FOR_LEVEL="instructions/SET_CODE_REVIEW_ENABLED_FOR_LEVEL",SET_TA_RUBRIC="instructions/SET_TA_RUBRIC",instructionsInitialState={noInstructionsWhenCollapsed:!1,shortInstructions:void 0,shortInstructions2:void 0,longInstructions:void 0,dynamicInstructions:void 0,dynamicInstructionsDefaults:void 0,dynamicInstructionsKey:void 0,teacherMarkdown:void 0,hasContainedLevels:!1,isCollapsed:!1,renderedHeight:0,expandedHeight:0,maxNeededHeight:1/0,maxAvailableHeight:1/0,allowResize:!0,hasAuthoredHints:!1,ttsAutoplayEnabledForLevel:!1,codeReviewEnabledForLevel:!1,overlayVisible:!1,levelVideos:[],mapReference:void 0,referenceLinks:[],muteBackgroundMusic:function muteBackgroundMusic(){},unmuteBackgroundMusic:function unmuteBackgroundMusic(){},programmingEnvironment:null,taRubric:null};exports.setInstructionsConstants=function setInstructionsConstants(_ref){var noInstructionsWhenCollapsed=_ref.noInstructionsWhenCollapsed,shortInstructions=_ref.shortInstructions,shortInstructions2=_ref.shortInstructions2,longInstructions=_ref.longInstructions,dynamicInstructions=_ref.dynamicInstructions,hasContainedLevels=_ref.hasContainedLevels,overlayVisible=_ref.overlayVisible,teacherMarkdown=_ref.teacherMarkdown,levelVideos=_ref.levelVideos,mapReference=_ref.mapReference,referenceLinks=_ref.referenceLinks,muteBackgroundMusic=_ref.muteBackgroundMusic,unmuteBackgroundMusic=_ref.unmuteBackgroundMusic,programmingEnvironment=_ref.programmingEnvironment;return{type:SET_CONSTANTS,noInstructionsWhenCollapsed,shortInstructions,shortInstructions2,longInstructions,dynamicInstructions,hasContainedLevels,overlayVisible,teacherMarkdown,levelVideos,mapReference,referenceLinks,muteBackgroundMusic,unmuteBackgroundMusic,programmingEnvironment}},exports.setInstructionsRenderedHeight=function setInstructionsRenderedHeight(height){return{type:SET_INSTRUCTIONS_RENDERED_HEIGHT,height}},exports.toggleInstructionsCollapsed=function toggleInstructionsCollapsed(){return{type:TOGGLE_INSTRUCTIONS_COLLAPSED}},exports.setInstructionsMaxHeightNeeded=function setInstructionsMaxHeightNeeded(height){return{type:SET_INSTRUCTIONS_MAX_HEIGHT_NEEDED,maxNeededHeight:height}},exports.setInstructionsMaxHeightAvailable=function setInstructionsMaxHeightAvailable(height){return{type:SET_INSTRUCTIONS_MAX_HEIGHT_AVAILABLE,maxAvailableHeight:height}},exports.setAllowInstructionsResize=function setAllowInstructionsResize(allowResize){return{type:SET_ALLOW_INSTRUCTIONS_RESIZE,allowResize}},exports.setHasAuthoredHints=function setHasAuthoredHints(hasAuthoredHints){return{type:SET_HAS_AUTHORED_HINTS,hasAuthoredHints}},exports.setTtsAutoplayEnabledForLevel=function setTtsAutoplayEnabledForLevel(ttsAutoplayEnabledForLevel){return{type:SET_TTS_AUTOPLAY_ENABLED_FOR_LEVEL,ttsAutoplayEnabledForLevel}},exports.setCodeReviewEnabledForLevel=function setCodeReviewEnabledForLevel(codeReviewEnabledForLevel){return{type:SET_CODE_REVIEW_ENABLED_FOR_LEVEL,codeReviewEnabledForLevel}},exports.setFeedback=function setFeedback(feedback){return{type:SET_FEEDBACK,feedback}},exports.hideOverlay=function hideOverlay(){return{type:HIDE_OVERLAY}},exports.setDynamicInstructionsDefaults=function setDynamicInstructionsDefaults(dynamicInstructionsDefaults){return{type:SET_DYNAMIC_INSTRUCTIONS_DEFAULTS,dynamicInstructionsDefaults}},exports.setDynamicInstructionsKey=function setDynamicInstructionsKey(dynamicInstructionsKey,options){return{type:SET_DYNAMIC_INSTRUCTIONS_KEY,dynamicInstructionsKey,options}},exports.setDynamicInstructionsOverlayDismissCallback=function setDynamicInstructionsOverlayDismissCallback(dynamicInstructionsDismissCallback){return{type:SET_DYNAMIC_INSTRUCTIONS_DISMISS_CALLBACK,dynamicInstructionsDismissCallback}},exports.setTaRubric=function setTaRubric(taRubric){return{type:SET_TA_RUBRIC,taRubric}};var substituteInstructionImages=exports.substituteInstructionImages=function substituteInstructionImages(htmlText,substitutions){if(!htmlText)return htmlText;for(var prop in substitutions){var imageUrl=substitutions[prop],substitutionHtml='<span class="instructionsImageContainer">'+'<img src="'.concat(imageUrl,'" class="instructionsImage"/>')+"</span>",re=new RegExp("\\["+prop+"\\]","g");htmlText=htmlText.replace(re,substitutionHtml)}return htmlText};exports.determineInstructionsConstants=function determineInstructionsConstants(config){var shortInstructions2,level=config.level,noInstructionsWhenCollapsed=config.noInstructionsWhenCollapsed,hasContainedLevels=config.hasContainedLevels,teacherMarkdown=config.teacherMarkdown,muteBackgroundMusic=config.muteBackgroundMusic,unmuteBackgroundMusic=config.unmuteBackgroundMusic,instructions2=level.instructions2,inputOutputTable=level.inputOutputTable,levelVideos=level.levelVideos,mapReference=level.mapReference,referenceLinks=level.referenceLinks,programmingEnvironment=level.programmingEnvironment,longInstructions=level.longInstructions,shortInstructions=level.shortInstructions,dynamicInstructions=level.dynamicInstructions;noInstructionsWhenCollapsed?(shortInstructions&&!longInstructions&&(longInstructions=shortInstructions),shortInstructions=void 0):(shortInstructions2=instructions2,shortInstructions===longInstructions&&(longInstructions=void 0),inputOutputTable&&(longInstructions=longInstructions||shortInstructions),config.skin.instructions2ImageSubstitutions&&(longInstructions=substituteInstructionImages(longInstructions,config.skin.instructions2ImageSubstitutions),shortInstructions=substituteInstructionImages(shortInstructions,config.skin.instructions2ImageSubstitutions),shortInstructions2=substituteInstructionImages(shortInstructions2,config.skin.instructions2ImageSubstitutions)),config.skin.replaceInstructions&&(longInstructions=config.skin.replaceInstructions(longInstructions),shortInstructions=config.skin.replaceInstructions(shortInstructions)));var hasInstructionsToShow=shortInstructions||longInstructions,overlaySeen=(0,_utils.tryGetLocalStorage)("instructionsOverlaySeenOnce",!1),shouldShowOverlay=hasInstructionsToShow&&!hasContainedLevels&&(config.level.instructionsImportant||1===config.levelPosition||!overlaySeen);return shouldShowOverlay&&(0,_utils.trySetLocalStorage)("instructionsOverlaySeenOnce",!0),{noInstructionsWhenCollapsed:!!noInstructionsWhenCollapsed,overlayVisible:!!shouldShowOverlay,shortInstructions,shortInstructions2,longInstructions,dynamicInstructions,teacherMarkdown,hasContainedLevels,levelVideos,mapReference,referenceLinks,muteBackgroundMusic,unmuteBackgroundMusic,programmingEnvironment}}},"./src/redux/instructionsDialog.js":(__unused_webpack_module,exports)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.closeDialog=void 0,exports.default=function reducer(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:initialState,action=arguments.length>1?arguments[1]:void 0;if(action.type===OPEN_DIALOG){if(!0===state.open)throw new Error("dialog is already open");return{open:!0,imgOnly:action.imgOnly,imgUrl:action.imgUrl}}if(action.type===CLOSE_DIALOG){if(!1===state.open)throw new Error("dialog is already closed");return{open:!1}}return state},exports.openDialog=void 0;var OPEN_DIALOG="instructionsDialog/OPEN_DIALOG",CLOSE_DIALOG="instructionsDialog/CLOSE_DIALOG",initialState={open:!1,imgOnly:!1};exports.openDialog=function openDialog(_ref){var imgOnly=_ref.imgOnly,imgUrl=_ref.imgUrl;return{type:OPEN_DIALOG,imgOnly,imgUrl}},exports.closeDialog=function closeDialog(){return{type:CLOSE_DIALOG}}},"./src/redux/pageConstants.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function reducer(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:initialState,action=arguments.length>1?arguments[1]:void 0;if(action.type===SET_PAGE_CONSTANTS)return Object.keys(action.props).forEach((function(key){if(!ALLOWED_KEYS.has(key))throw new Error('Property "'.concat(key,'" may not be set using the ').concat(action.type," action."));if(state[key]!==initialState[key]&&state[key]!==action.props[key])throw new Error("Can't change value of key \"".concat(key,'".'))})),_.assign({},state,action.props);return state},exports.setPageConstants=function setPageConstants(props){return{type:SET_PAGE_CONSTANTS,props}};var _=__webpack_require__("./node_modules/lodash/lodash.js"),SET_PAGE_CONSTANTS="pageConstants/SET_PAGE_CONSTANTS",ALLOWED_KEYS=new Set(["skinId","showNextHint","ttsShortInstructionsUrl","ttsLongInstructionsUrl","assetUrl","canHaveFeedbackReviewState","exampleSolutions","isViewingAsInstructorInTraining","channelId","codeOwnersName","hasDataMode","hasDesignMode","inStartBlocksMode","inToolboxBlocksMode","isChallengeLevel","isEmbedView","isResponsive","isIframeEmbed","isReadOnlyWorkspace","isCodeReviewing","isViewingOwnProject","hasBackgroundMusic","displayNotStartedBanner","displayOldVersionBanner","isShareView","isProjectLevel","isSubmittable","isSubmitted","noInstructionsWhenCollapsed","puzzleNumber","lessonTotal","showDebugButtons","showDebugConsole","showDebugWatch","showDebugSlider","debugConsoleDisabled","showMakerToggle","locale","hasContainedLevels","isDroplet","isBlockly","isBramble","isMinecraft","runButtonText","visualizationHasPadding","visualizationInWorkspace","hideCoordinateOverlay","hideSource","hideRunButton","hideResetButton","playspacePhoneFrame","noVisualization","pinWorkspaceToBottom","smallStaticAvatar","failureAvatar","aniGifURL","inputOutputTable","showAnimationMode","startInAnimationTab","allAnimationsSingleFrame","nonResponsiveVisualizationColumnWidth","is13Plus","isSignedIn","isEditingStartSources","userId","isK1","textToSpeechEnabled","documentationUrl","appType","nextLevelUrl","currentScriptLevelUrl","isProjectTemplateLevel","showProjectTemplateWorkspaceIcon","serverLevelId","serverProjectLevelId","serverScriptId","exportApp","widgetMode","librariesEnabled","validationEnabled","aiEnabled","aiModelId","aiModelName","isCurriculumLevel","recaptchaSiteKey"]),initialState={assetUrl:function assetUrl(){}}},"./src/redux/runState.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function reducer(state,action){if(state=state||initialState,action.type===SET_IS_RUNNING)return _lodash.default.assign({},state,{isRunning:action.isRunning,isDebuggerPaused:!1!==action.isRunning&&state.isDebuggerPaused,isDebuggingSprites:!1!==action.isRunning&&state.isDebuggingSprites});if(action.type===SET_IS_EDIT_WHILE_RUN)return _lodash.default.assign({},state,{isEditWhileRun:action.isEditWhileRun});if(action.type===SET_IS_DEBUGGER_PAUSED)return _lodash.default.assign({},state,{isRunning:!!action.isDebuggerPaused||state.isRunning,isDebuggerPaused:action.isDebuggerPaused,nextStep:action.nextStep});if(action.type===SET_STEP_SPEED&&"number"==typeof action.stepSpeed)return _lodash.default.assign({},state,{stepSpeed:action.stepSpeed});if(action.type===SET_AWAITING_CONTAINED_RESPONSE&&state.awaitingContainedResponse!==action.awaitingContainedResponse)return _objectSpread(_objectSpread({},state),{},{awaitingContainedResponse:action.awaitingContainedResponse});if(action.type===SET_IS_DEBUGGING_SPRITES&&state.isRunning)return _objectSpread(_objectSpread({},state),{},{isDebuggingSprites:action.isDebuggingSprites});return state},exports.setStepSpeed=exports.setIsRunning=exports.setIsEditWhileRun=exports.setIsDebuggingSprites=exports.setIsDebuggerPaused=exports.setAwaitingContainedResponse=void 0;var _lodash=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(__webpack_require__("./node_modules/lodash/lodash.js"));function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach((function(r){_defineProperty(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var SET_IS_RUNNING="runState/SET_IS_RUNNING",SET_IS_EDIT_WHILE_RUN="runState/SET_IS_EDIT_WHILE_RUN",SET_IS_DEBUGGER_PAUSED="runState/SET_IS_DEBUGGER_PAUSED",SET_STEP_SPEED="runState/SET_STEP_SPEED",SET_AWAITING_CONTAINED_RESPONSE="runState/SET_AWAITING_CONTAINED_RESPONSE",SET_IS_DEBUGGING_SPRITES="runState/SET_IS_DEBUGGING_SPRITES",initialState={isRunning:!1,isEditWhileRun:!1,isDebuggerPaused:!1,nextStep:null,stepSpeed:1,isDebuggingSprites:!1,awaitingContainedResponse:!1};exports.setIsRunning=function setIsRunning(isRunning){return{type:SET_IS_RUNNING,isRunning}},exports.setIsEditWhileRun=function setIsEditWhileRun(isEditWhileRun){return{type:SET_IS_EDIT_WHILE_RUN,isEditWhileRun}},exports.setIsDebuggerPaused=function setIsDebuggerPaused(isDebuggerPaused,nextStep){return{type:SET_IS_DEBUGGER_PAUSED,isDebuggerPaused,nextStep}},exports.setStepSpeed=function setStepSpeed(stepSpeed){return{type:SET_STEP_SPEED,stepSpeed}},exports.setAwaitingContainedResponse=function setAwaitingContainedResponse(awaitingContainedResponse){return{type:SET_AWAITING_CONTAINED_RESPONSE,awaitingContainedResponse}},exports.setIsDebuggingSprites=function setIsDebuggingSprites(isDebuggingSprites){return{type:SET_IS_DEBUGGING_SPRITES,isDebuggingSprites}}},"./src/redux/studioAppActivity.js":(__unused_webpack_module,exports)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function reducer(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:studioAppActivityInitialState,action=arguments.length>1?arguments[1]:void 0;if(action.type===SET_START_IDLE)return Object.assign({},state,{isIdle:!0,idleStart:(new Date).getTime()});if(action.type===SET_END_IDLE){if(state.idleStart){var newIdleTime=state.idleTimeSinceLastReport+timeSinceIdleStart(state);return Object.assign({},state,{isIdle:!1,idleTimeSinceLastReport:newIdleTime})}return state}if(action.type===RESET_IDLE_TIME){var idleStart=state.isIdle?(new Date).getTime():null;return Object.assign({},state,{idleTimeSinceLastReport:0,idleStart})}return state},exports.setStartIdle=exports.setEndIdle=exports.resetIdleTime=exports.getIdleTimeSinceLastReport=void 0;var SET_START_IDLE="studioAppActivity/SET_START_IDLE",SET_END_IDLE="studioAppActivity/SET_END_IDLE",RESET_IDLE_TIME="studioAppActivity/RESET_IDLE_TIME",studioAppActivityInitialState={idleTimeSinceLastReport:0,idleStart:null,isIdle:!1};var timeSinceIdleStart=function timeSinceIdleStart(state){return(new Date).getTime()-state.idleStart};exports.setStartIdle=function setStartIdle(){return{type:SET_START_IDLE}},exports.setEndIdle=function setEndIdle(){return{type:SET_END_IDLE}},exports.resetIdleTime=function resetIdleTime(){return{type:RESET_IDLE_TIME}},exports.getIdleTimeSinceLastReport=function getIdleTimeSinceLastReport(state){return state.isIdle?state.idleTimeSinceLastReport+timeSinceIdleStart(state):state.idleTimeSinceLastReport}},"./src/redux/watchedExpressions.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.add=void 0,exports.default=function reducer(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:watchedExpressionsInitialState,action=arguments.length>1?arguments[1]:void 0;if(action.type===ADD_EXPRESSION){var expression=action.expression,uuid=(0,_utils.createUuid)();return state.push(_immutable.default.Map({expression,uuid}))}if(action.type===UPDATE_VALUE){var value=action.value,_expression=action.expression;return state.map((function(e){return e.get("expression")===_expression?_immutable.default.Map({lastValue:value,expression:_expression,uuid:e.get("uuid")}):e}))}if(action.type===REMOVE_EXPRESSION)return state.filter((function(e){return e.get("expression")!==action.expression}));return state},exports.update=exports.remove=void 0;var _immutable=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(__webpack_require__("./node_modules/immutable/dist/immutable.js")),_utils=__webpack_require__("./src/utils.js");var ADD_EXPRESSION="watchedExpressions/ADD_EXPRESSION",REMOVE_EXPRESSION="watchedExpressions/REMOVE_EXPRESSION",UPDATE_VALUE="watchedExpressions/UPDATE_VALUE",watchedExpressionsInitialState=_immutable.default.List();exports.add=function add(expression){return{type:ADD_EXPRESSION,expression}},exports.remove=function remove(expression){return{type:REMOVE_EXPRESSION,expression}},exports.update=function update(expression,value){return{type:UPDATE_VALUE,expression,value}}},"./src/styleConstants.js":module=>{module.exports={"workspace-headers-height":30,"resize-bar-width":13,"delete-opacity":"0.5","content-width":970}},"./src/templates/EnhancedSafeMarkdown.jsx":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.UnconnectedExpandableImagesWrapper=exports.ExpandableImagesWrapper=exports.ClickableTextWrapper=void 0;var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_reactDom=_interopRequireDefault(__webpack_require__("./node_modules/react-dom/index.js")),_reactRedux=__webpack_require__("./node_modules/react-redux/es/index.js"),_instructionsDialog=__webpack_require__("./src/redux/instructionsDialog.js"),_SafeMarkdown=_interopRequireDefault(__webpack_require__("./src/templates/SafeMarkdown.jsx")),_expandableImages=__webpack_require__("./src/templates/utils/expandableImages.js");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _inheritsLoose(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var UnconnectedExpandableImagesWrapper=exports.UnconnectedExpandableImagesWrapper=function(_React$Component){function UnconnectedExpandableImagesWrapper(){return _React$Component.apply(this,arguments)||this}_inheritsLoose(UnconnectedExpandableImagesWrapper,_React$Component);var _proto=UnconnectedExpandableImagesWrapper.prototype;return _proto.componentDidMount=function componentDidMount(){this.postRenderHook()},_proto.componentDidUpdate=function componentDidUpdate(prevProps){this.postRenderHook()},_proto.postRenderHook=function postRenderHook(){var thisNode=_reactDom.default.findDOMNode(this);(0,_expandableImages.renderExpandableImages)(thisNode,this.props.showImageDialog)},_proto.render=function render(){return this.props.children},UnconnectedExpandableImagesWrapper}(_react.default.Component);_defineProperty(UnconnectedExpandableImagesWrapper,"propTypes",{showImageDialog:_propTypes.default.func.isRequired,children:_propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.node),_propTypes.default.node]).isRequired});var ExpandableImagesWrapper=exports.ExpandableImagesWrapper=(0,_reactRedux.connect)(null,(function(dispatch){return{showImageDialog:function showImageDialog(imgUrl){dispatch((0,_instructionsDialog.openDialog)({imgOnly:!0,imgUrl}))}}}))(UnconnectedExpandableImagesWrapper),ClickableTextWrapper=exports.ClickableTextWrapper=function(_React$Component2){function ClickableTextWrapper(){return _React$Component2.apply(this,arguments)||this}_inheritsLoose(ClickableTextWrapper,_React$Component2);var _proto2=ClickableTextWrapper.prototype;return _proto2.componentDidMount=function componentDidMount(){this.postRenderHook()},_proto2.componentDidUpdate=function componentDidUpdate(prevProps){this.postRenderHook()},_proto2.postRenderHook=function postRenderHook(){var thisNode=_reactDom.default.findDOMNode(this);this.renderClickableText(thisNode)},_proto2.renderClickableText=function renderClickableText(node){var _this=this;node.querySelectorAll("b.clickable-text").forEach((function(clickableText,index){var id=clickableText.dataset.id,extraClass=" clickable-text-with-glow clickable-text-".concat(index);clickableText.className.includes(extraClass)||(clickableText.className+=extraClass),clickableText.onclick=function(){return _this.props.handleInstructionsTextClick(id)}}))},_proto2.render=function render(){return this.props.children},ClickableTextWrapper}(_react.default.Component);_defineProperty(ClickableTextWrapper,"propTypes",{handleInstructionsTextClick:_propTypes.default.func.isRequired,children:_propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.node),_propTypes.default.node]).isRequired}),_defineProperty(exports.default=function(_React$Component3){function EnhancedSafeMarkdown(){return _React$Component3.apply(this,arguments)||this}return _inheritsLoose(EnhancedSafeMarkdown,_React$Component3),EnhancedSafeMarkdown.prototype.render=function render(){var result=_react.default.createElement(_SafeMarkdown.default,{markdown:this.props.markdown,openExternalLinksInNewTab:this.props.openExternalLinksInNewTab,className:this.props.className});return this.props.expandableImages&&(result=_react.default.createElement(ExpandableImagesWrapper,null,result)),this.props.handleInstructionsTextClick&&(result=_react.default.createElement(ClickableTextWrapper,{handleInstructionsTextClick:this.props.handleInstructionsTextClick},result)),result},EnhancedSafeMarkdown}(_react.default.Component),"propTypes",{markdown:_propTypes.default.string.isRequired,openExternalLinksInNewTab:_propTypes.default.bool,expandableImages:_propTypes.default.bool,className:_propTypes.default.string,handleInstructionsTextClick:_propTypes.default.func})},"./src/templates/Lightbulb.jsx":(module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_color=_interopRequireDefault(__webpack_require__("./src/util/color.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var Lightbulb=exports.default=function(_React$Component){function Lightbulb(){return _React$Component.apply(this,arguments)||this}return function _inheritsLoose(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o)}(Lightbulb,_React$Component),Lightbulb.prototype.render=function render(){var bulbDisplay,numberCircle,countDisplay;if(this.props.isMinecraft){var href=this.props.lit?"iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAACzSURBVHjalJExDsIwDEW/GzbYG4m5A505BzuH6cQpEGdg6TlYWLp0rpSOiHZrZIaGCsfNwJcsR8mT/fVDkGJokToAYNdVyO1ZkqZcuEyA+RHgFsgOc3EL9s2ykQT4K3Oau68BKkCmxAYp+VpdZfhDCh7GSfS1WITvYZyw2waHwS8A+k4mu7+g7x/RqEJEF4tdV/H7dWf2DcefpNK43gjAM5SUgq21yTQU7JxLwmvGOfX+GQDlKDxFgn7+bgAAAABJRU5ErkJggg==":"iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AsRFQUQP8g1cwAAAKpJREFUKM+VkbENxCAMRR+nK1JHAmWCZIVMkWHZAyktmSCioKbzVRfBGYr7jRF+sj8fQytBy6gDIN579n1vSOfcw71qcF1Xcs5Ya7HWknMmpfRsNDVYa9s2AGKMzPOMc443A8UY1d2LP6TgUkpTe7E0vkspTNME8PgFzHeyOY6D67qaSTXYsyXeeznPU1JK8vtJKo0QAiGE7gMVvCzLMA0F3/c9hHvGZdT/APfyQc3umPvfAAAAAElFTkSuQmCC";bulbDisplay=_react.default.createElement("g",{className:this.props.shouldAnimate?"animate-hint":""},_react.default.createElement("image",{width:"450",height:"450",x:"80",y:"140",className:"pixelated",xlinkHref:"data:image/png;base64,"+href}))}else bulbDisplay=_react.default.createElement("g",{className:this.props.shouldAnimate?"animate-hint":""},_react.default.createElement("g",{transform:this.props.isRtl?"translate(0,200) scale(10.0,10.0)":"translate(245,200) scale(10.0,10.0)"},_react.default.createElement("path",{d:"M22 33H8.25C7.39062 30.3359 5.67188 27.9297 3.95312 25.6094C3.52344 25.0078 3.09375 24.4062 2.66406 23.8047C0.945312 21.3125 0 18.3906 0 15.125C0 6.78906 6.70312 0 15.125 0C23.4609 0 30.25 6.78906 30.25 15.2109C30.25 18.3906 29.2188 21.3125 27.5 23.8047C27.0703 24.4062 26.6406 25.0078 26.2109 25.6094C24.4922 27.9297 22.7734 30.3359 22 33ZM15.125 44C11.2578 44 8.25 40.9922 8.25 37.125V35.75H22V37.125C22 40.9922 18.9062 44 15.125 44ZM8.25 15.125C8.25 11.3438 11.2578 8.25 15.125 8.25C15.8125 8.25 16.5 7.64844 16.5 6.875C16.5 6.1875 15.8125 5.5 15.125 5.5C9.79688 5.5 5.5 9.88281 5.5 15.125C5.5 15.8984 6.10156 16.5 6.875 16.5C7.5625 16.5 8.25 15.8984 8.25 15.125Z",fill:"#1892E3"}),_react.default.createElement("path",{d:"M8.25 15.125C8.25 11.3438 11.2578 8.25 15.125 8.25C15.8125 8.25 16.5 7.64844 16.5 6.875C16.5 6.1875 15.8125 5.5 15.125 5.5C9.79688 5.5 5.5 9.88281 5.5 15.125C5.5 15.8984 6.10156 16.5 6.875 16.5C7.5625 16.5 8.25 15.8984 8.25 15.125Z",fill:"#1892E3"}),_react.default.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M13.75 6.875C14.4375 6.875 15.125 7.5625 15.125 8.33594C15.125 9.02344 14.4375 9.625 13.75 9.625C11.4297 9.625 9.625 11.5156 9.625 13.75C9.625 14.5234 8.9375 15.125 8.25 15.125C7.47656 15.125 6.875 14.5234 6.875 13.75C6.875 9.96875 9.88281 6.875 13.75 6.875Z",fill:"white"})));if(this.props.lit&&this.props.count){var countText=this.props.count>9?"9+":this.props.count;this.props.isMinecraft?countDisplay=_react.default.createElement("g",null,_react.default.createElement("text",{id:"hintCount",x:"400",y:"700",style:styles.countMinecraft},countText)):(countDisplay=_react.default.createElement("g",null,_react.default.createElement("text",{id:"hintCount",x:this.props.isRtl?"380":"495",y:"380",style:styles.count},countText)),numberCircle=_react.default.createElement("g",{className:this.props.shouldAnimate?"animate-hint":""},_react.default.createElement("circle",{cx:this.props.isRtl?"315":"565",cy:"310",r:"125",fill:_color.default.white,stroke:_color.default.blockly_flyout_gray,strokeWidth:"16"})))}return _react.default.createElement("svg",{width:this.props.size,height:this.props.size,style:this.props.style,viewBox:"0 0 612 792"},bulbDisplay,numberCircle,countDisplay)},Lightbulb}(_react.default.Component);_defineProperty(Lightbulb,"propTypes",{shouldAnimate:_propTypes.default.bool,count:_propTypes.default.number,lit:_propTypes.default.bool,size:_propTypes.default.number,style:_propTypes.default.object,isMinecraft:_propTypes.default.bool,isRtl:_propTypes.default.bool}),_defineProperty(Lightbulb,"defaultProps",{shouldAnimate:!1,count:0,lit:!0,size:40,style:{}});var styles={count:{fontWeight:"bold",fontSize:"200px",fill:_color.default.light_info_500,fontFamily:"Verdana, Geneva, sans-serif"},countMinecraft:{fontWeight:"bold",fontSize:"400px",fill:_color.default.white,stroke:_color.default.black,strokeWidth:"30px",fontFamily:"Verdana, Geneva, sans-serif"}};module.exports=exports.default},"./src/templates/instructions/AniGifPreview.jsx":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.ImagePreview=void 0;var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_radium=_interopRequireDefault(__webpack_require__("./node_modules/radium/es/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_reactRedux=__webpack_require__("./node_modules/react-redux/es/index.js"),_instructionsDialog=__webpack_require__("./src/redux/instructionsDialog.js");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}var ImagePreviewUnwrapped=function(_React$Component){function ImagePreviewUnwrapped(){return _React$Component.apply(this,arguments)||this}return function _inheritsLoose(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o)}(ImagePreviewUnwrapped,_React$Component),ImagePreviewUnwrapped.prototype.render=function render(){return _react.default.createElement("div",{id:"ani-gif-preview-wrapper",style:styles.wrapper},_react.default.createElement("div",{id:"ani-gif-preview",style:[styles.aniGifPreview(this.props.url),this.props.noVisualization&&styles.bigPreview],onClick:this.props.showInstructionsDialog}))},ImagePreviewUnwrapped}(_react.default.Component);!function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}(ImagePreviewUnwrapped,"propTypes",{url:_propTypes.default.string.isRequired,showInstructionsDialog:_propTypes.default.func.isRequired,noVisualization:_propTypes.default.bool.isRequired});var styles={wrapper:{display:"inline-block",position:"relative"},aniGifPreview:function aniGifPreview(url){return{cursor:"pointer",backgroundImage:"url('".concat(url,"')")}},bigPreview:{width:240,height:180,backgroundSize:"240px 180px"}},ImagePreview=exports.ImagePreview=(0,_radium.default)(ImagePreviewUnwrapped);exports.default=(0,_reactRedux.connect)((function(state){return{url:state.pageConstants.aniGifURL,noVisualization:state.pageConstants.noVisualization}}),(function(dispatch){return{showInstructionsDialog:function showInstructionsDialog(){dispatch((0,_instructionsDialog.openDialog)({imgOnly:!0}))}}}))(ImagePreview)},"./src/templates/instructions/ExampleImage.jsx":(module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=ExampleImage;var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_color=_interopRequireDefault(__webpack_require__("./src/util/color.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function ExampleImage(_ref){var src=_ref.src;return _react.default.createElement("img",{style:styles.img,src,alt:""})}ExampleImage.propTypes={src:_propTypes.default.string.isRequired};var styles={img:{boxShadow:"0 10px 13px -11px ".concat(_color.default.black),border:"2px solid ".concat(_color.default.light_gray),borderRadius:25,boxSizing:"border-box"}};module.exports=exports.default},"./src/templates/instructions/ImmersiveReaderButton.jsx":(module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _immersiveReaderSdk=__webpack_require__("./node_modules/@microsoft/immersive-reader-sdk/lib/immersive-reader-sdk.js"),_classnames=_interopRequireDefault(__webpack_require__("./node_modules/classnames/index.js")),_jsCookie=_interopRequireDefault(__webpack_require__("./node_modules/js-cookie/src/js.cookie.js")),_propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_react=function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=_typeof(e)&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&{}.hasOwnProperty.call(e,u)){var i=a?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(n,u,i):n[u]=e[u]}return n.default=e,t&&t.set(e,n),n}(__webpack_require__("./node_modules/react/index.js")),_immersive_reader=_interopRequireDefault(__webpack_require__("./src/util/immersive_reader.js"));function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(_getRequireWildcardCache=function _getRequireWildcardCache(e){return e?t:r})(e)}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}var ImmersiveReaderButton=function(_Component){function ImmersiveReaderButton(){return _Component.apply(this,arguments)||this}!function _inheritsLoose(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o)}(ImmersiveReaderButton,_Component);var _proto=ImmersiveReaderButton.prototype;return _proto.componentDidMount=function componentDidMount(){this.shouldRender()&&!this.renderButtonsCalled&&((0,_immersiveReaderSdk.renderButtons)({elements:[this.container]}),this.renderButtonsCalled=!0)},_proto.handleKeyDown=function handleKeyDown(event,locale,title,text){"Enter"!==event.key&&" "!==event.key||((0,_immersive_reader.default)(locale,title,text),event.preventDefault())},_proto.render=function render(){var _this=this,_this$props=this.props,title=_this$props.title,text=_this$props.text,hasRoundBorders=_this$props.hasRoundBorders,isLegacyStyles=_this$props.isLegacyStyles,locale=_jsCookie.default.get("language_")||"en-US";return this.shouldRender()?_react.default.createElement("div",{tabIndex:0,role:"button",ref:function ref(el){return _this.container=el},className:(0,_classnames.default)("immersive-reader-button",isLegacyStyles&&"immersive-reader-button-legacy-styles"),"data-button-style":"icon",style:{borderRadius:hasRoundBorders?4:"4px 0 0 4px"},"data-locale":locale,onClick:function onClick(){(0,_immersive_reader.default)(locale,title,text)},onKeyDown:function onKeyDown(e){return _this.handleKeyDown(e,locale,title,text)}}):null},_proto.shouldRender=function shouldRender(){return!!this.props.text},ImmersiveReaderButton}(_react.Component);!function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}(ImmersiveReaderButton,"propTypes",{title:_propTypes.default.string,text:_propTypes.default.string,hasRoundBorders:_propTypes.default.bool,isLegacyStyles:_propTypes.default.bool});exports.default=ImmersiveReaderButton;module.exports=exports.default},"./src/templates/instructions/InputOutputTable.jsx":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var InputOutputTable=function InputOutputTable(props){return _react.default.createElement("div",null,_react.default.createElement("table",null,_react.default.createElement("tbody",null,_react.default.createElement("tr",null,_react.default.createElement("th",null,"Input"),_react.default.createElement("th",null,"Output")),props.data.map((function(item,index){return _react.default.createElement("tr",{key:index},_react.default.createElement("td",null,item[0]),_react.default.createElement("td",null,item[1]))})))))};InputOutputTable.propTypes={data:_propTypes.default.arrayOf(_propTypes.default.arrayOf(_propTypes.default.number)).isRequired},module.exports=InputOutputTable},"./src/templates/instructions/Instructions.jsx":(module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_locale=_interopRequireDefault(__webpack_require__("./src/util/locale-do-not-import.js")),_AniGifPreview=_interopRequireDefault(__webpack_require__("./src/templates/instructions/AniGifPreview.jsx")),_ExampleImage=_interopRequireDefault(__webpack_require__("./src/templates/instructions/ExampleImage.jsx")),_ImmersiveReaderButton=_interopRequireDefault(__webpack_require__("./src/templates/instructions/ImmersiveReaderButton.jsx")),_InputOutputTable=_interopRequireDefault(__webpack_require__("./src/templates/instructions/InputOutputTable.jsx")),_MarkdownInstructions=_interopRequireDefault(__webpack_require__("./src/templates/instructions/MarkdownInstructions.jsx"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}!function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}(exports.default=function(_React$Component){function Instructions(){return _React$Component.apply(this,arguments)||this}return function _inheritsLoose(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o)}(Instructions,_React$Component),Instructions.prototype.render=function render(){var _this$props=this.props,inTopPane=_this$props.inTopPane,instructions=_this$props.instructions,onResize=_this$props.onResize,isBlockly=_this$props.isBlockly,isImmersiveButtonHasRoundBorders=_this$props.isImmersiveButtonHasRoundBorders,isLegacyImmersiveStyles=_this$props.isLegacyImmersiveStyles,noInstructionsWhenCollapsed=_this$props.noInstructionsWhenCollapsed,inputOutputTable=_this$props.inputOutputTable,imgURL=_this$props.imgURL,authoredHints=_this$props.authoredHints;return _react.default.createElement("div",{style:inTopPane?styles.inTopPane:styles.notInTopPane},instructions&&_react.default.createElement(_react.default.Fragment,null,_react.default.createElement(_ImmersiveReaderButton.default,{title:_locale.default.instructions(),text:instructions,hasRoundBorders:isImmersiveButtonHasRoundBorders,isLegacyStyles:isLegacyImmersiveStyles}),_react.default.createElement(_MarkdownInstructions.default,{markdown:instructions,onResize,inTopPane,isBlockly,noInstructionsWhenCollapsed})),inputOutputTable&&_react.default.createElement(_InputOutputTable.default,{data:inputOutputTable}),imgURL&&!inTopPane&&_react.default.createElement(_ExampleImage.default,{src:imgURL}),imgURL&&inTopPane&&_react.default.createElement(_AniGifPreview.default,null),authoredHints)},Instructions}(_react.default.Component),"propTypes",{instructions:_propTypes.default.string,imgURL:_propTypes.default.string,authoredHints:_propTypes.default.element,inputOutputTable:_propTypes.default.arrayOf(_propTypes.default.arrayOf(_propTypes.default.number)),inTopPane:_propTypes.default.bool,onResize:_propTypes.default.func,isBlockly:_propTypes.default.bool,isImmersiveButtonHasRoundBorders:_propTypes.default.bool,isLegacyImmersiveStyles:_propTypes.default.bool,noInstructionsWhenCollapsed:_propTypes.default.bool});var styles={inTopPane:{overflow:"hidden"},notInTopPane:{overflow:"auto"}};module.exports=exports.default},"./src/templates/instructions/MarkdownInstructions.jsx":(module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _jquery=_interopRequireDefault(__webpack_require__("./node_modules/jquery/dist/jquery.js")),_propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_radium=_interopRequireDefault(__webpack_require__("./node_modules/radium/es/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_reactDom=_interopRequireDefault(__webpack_require__("./node_modules/react-dom/index.js")),_EnhancedSafeMarkdown=_interopRequireDefault(__webpack_require__("./src/templates/EnhancedSafeMarkdown.jsx")),_utils=__webpack_require__("./src/templates/instructions/utils.js");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var MarkdownInstructions=function(_React$Component){function MarkdownInstructions(){return _React$Component.apply(this,arguments)||this}!function _inheritsLoose(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o)}(MarkdownInstructions,_React$Component);var _proto=MarkdownInstructions.prototype;return _proto.componentDidMount=function componentDidMount(){this.configureMarkdown_()},_proto.componentDidUpdate=function componentDidUpdate(prevProps){prevProps.markdown!==this.props.markdown&&this.configureMarkdown_()},_proto.componentWillUnmount=function componentWillUnmount(){var detailsDOM=(0,_jquery.default)(_reactDom.default.findDOMNode(this)).find("details");detailsDOM.details&&detailsDOM.off("toggle.details.TopInstructions")},_proto.configureMarkdown_=function configureMarkdown_(){var _this=this;if(this.props.onResize){var thisNode=_reactDom.default.findDOMNode(this),detailsDOM=(0,_jquery.default)(thisNode).find("details");detailsDOM.details&&(detailsDOM.details(),detailsDOM.on({"toggle.details.TopInstructions":function toggleDetailsTopInstructions(){_this.props.onResize()}})),this.props.isBlockly&&Blockly.BlockSpace.onMainBlockSpaceCreated((function(){(0,_utils.convertXmlToBlockly)(_reactDom.default.findDOMNode(_this)),_this.props.onResize()})),(0,_jquery.default)(thisNode).find("img").load(this.props.onResize)}},_proto.render=function render(){var _this$props=this.props,inTopPane=_this$props.inTopPane,markdown=_this$props.markdown,canCollapse=!this.props.noInstructionsWhenCollapsed;return _react.default.createElement("div",{className:"instructions-markdown",style:[styles.standard,inTopPane&&styles.inTopPane,inTopPane&&canCollapse&&styles.inTopPaneCanCollapse]},_react.default.createElement(_EnhancedSafeMarkdown.default,{markdown,expandableImages:!0}))},MarkdownInstructions}(_react.default.Component);_defineProperty(MarkdownInstructions,"propTypes",{markdown:_propTypes.default.string.isRequired,noInstructionsWhenCollapsed:_propTypes.default.bool,onResize:_propTypes.default.func,inTopPane:_propTypes.default.bool,isBlockly:_propTypes.default.bool,showImageDialog:_propTypes.default.func}),_defineProperty(MarkdownInstructions,"defaultProps",{noInstructionsWhenCollapsed:!1});var styles={standard:{marginBottom:35,paddingTop:19},inTopPane:{marginTop:10,marginBottom:10,paddingTop:0},inTopPaneCanCollapse:{marginTop:0,marginBottom:0}};exports.default=(0,_radium.default)(MarkdownInstructions);module.exports=exports.default},"./src/templates/instructions/utils.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.convertXmlToBlockly=function convertXmlToBlockly(xmlContainer,isRtl){Array.from(xmlContainer.getElementsByClassName("readonly-block-space-container")).forEach((function(container){return container.remove()}));var xmls=xmlContainer.getElementsByTagName("xml");Array.prototype.forEach.call(xmls,(function(xml){if(!xml.getElementsByTagName("svg").length){!function removeCommentNodes(root){var commentWalker=document.createTreeWalker(root,NodeFilter.SHOW_COMMENT,{acceptNode:function acceptNode(node){return NodeFilter.FILTER_ACCEPT}},!1),last=commentWalker.nextNode();if(last){for(;commentWalker.nextNode();)last.remove(),last=commentWalker.currentNode;last.remove()}}(xml);var inline="P"===xml.parentNode.tagName,blockSpaceContainer=document.createElement(inline?"span":"div");blockSpaceContainer.classList.add("readonly-block-space-container"),inline&&(blockSpaceContainer.style.display="inline-block"),xml.parentNode.insertBefore(blockSpaceContainer,xml),xml.style.display="none";var blockSpace=Blockly.createEmbeddedWorkspace(blockSpaceContainer,xml,{noScrolling:!0,inline,rtl:isRtl}),withPadding=!inline,metrics=blockSpace.getMetrics();Blockly.addChangeListener(blockSpace,(function(){var oldHeight=metrics.contentHeight,oldWidth=metrics.contentWidth,newHeight=blockSpace.getMetrics().contentHeight,newWidth=blockSpace.getMetrics().contentWidth;newHeight===oldHeight&&newWidth===oldWidth||(shrinkBlockSpaceContainer(blockSpace,withPadding),metrics=blockSpace.getMetrics())})),shrinkBlockSpaceContainer(blockSpace,withPadding)}}))},exports.getOuterHeight=function getOuterHeight(component){var includeMargin=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return(0,_jquery.default)(_reactDom.default.findDOMNode(component)).outerHeight(includeMargin)},exports.hasInstructions=function hasInstructions(shortInstructions,longInstructions,hasContainedLevels){return!!(shortInstructions||longInstructions||hasContainedLevels)},exports.scrollBy=function scrollBy(element,deltaY){var animate=arguments.length>2&&void 0!==arguments[2]?arguments[2]:400,newScrollTop=element.scrollTop+deltaY;scrollTo(element,newScrollTop,animate)},exports.scrollTo=scrollTo,exports.shouldDisplayChatTips=function shouldDisplayChatTips(skinId){switch(skinId){case"jigsaw":case"infinity":case"anna":case"elsa":case"craft":case"hoc2015":case"hoc2015x":return!1;default:return!0}},exports.shrinkBlockSpaceContainer=shrinkBlockSpaceContainer;var _jquery=_interopRequireDefault(__webpack_require__("./node_modules/jquery/dist/jquery.js")),_reactDom=_interopRequireDefault(__webpack_require__("./node_modules/react-dom/index.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function scrollTo(element,scrollTop){var animate=arguments.length>2&&void 0!==arguments[2]?arguments[2]:400;if(animate){var $elem=(0,_jquery.default)(element);$elem.is(":animated")||$elem.animate({scrollTop},animate)}else element.scrollTop=scrollTop}function shrinkBlockSpaceContainer(blockSpace,withPadding){var container=blockSpace.getContainer(),metrics=blockSpace.getMetrics(),height=metrics.contentHeight,width=metrics.contentWidth;withPadding&&(height+=2*metrics.contentTop,width+=metrics.contentLeft),container.style.height=height+"px",container.style.width=width+"px",Blockly.cdoUtils.workspaceSvgResize(blockSpace)}},"./src/templates/utils/expandableImages.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.renderExpandableImages=function renderExpandableImages(node,showImageDialog){for(var expandableImages=node.querySelectorAll(".expandable-image"),_loop=function _loop(){var expandableImg=expandableImages[i];_reactDom.default.render(_react.default.createElement(_AniGifPreview.ImagePreview,{url:expandableImg.dataset.url,noVisualization:!1,showInstructionsDialog:function showInstructionsDialog(){return showImageDialog(expandableImg.dataset.url)}}),expandableImg)},i=0;i<expandableImages.length;i++)_loop()};var _react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_reactDom=_interopRequireDefault(__webpack_require__("./node_modules/react-dom/index.js")),_AniGifPreview=__webpack_require__("./src/templates/instructions/AniGifPreview.jsx");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}},"./src/util/immersive_reader.js":(module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function handleLaunchImmersiveReader(locale,title,text){(function getTokenAndSubdomainAsync(){return new Promise((function(resolve,reject){$.ajax({url:"/api/immersive_reader_token",type:"GET",success:function success(data){data.error?reject(data.error):resolve(data)}})}))})().then((function(response){var token=response.token,subdomain=response.subdomain,data={title,chunks:[{content:sanitizeText(text),lang:locale}]};(0,_immersiveReaderSdk.launchAsync)(token,subdomain,data,{uiZIndex:2113})})).catch((function(error){console.error(error)}))};var _immersiveReaderSdk=__webpack_require__("./node_modules/@microsoft/immersive-reader-sdk/lib/immersive-reader-sdk.js");function sanitizeText(text){return text?text=(text=text.replace(/<[^>]*>/g,"")).replace(/[`*]/g,""):text}module.exports=exports.default},"./src/redux/blockly.ts":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";var _a;Object.defineProperty(exports,"__esModule",{value:!0}),exports.setFailedToGenerateCode=exports.setHasIncompatibleSources=void 0;var blocklySlice=(0,__webpack_require__("./node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js").createSlice)({name:"blockly",initialState:{hasIncompatibleSources:!1,failedToGenerateCode:!1},reducers:{setHasIncompatibleSources:function(state,action){state.hasIncompatibleSources=action.payload},setFailedToGenerateCode:function(state,action){state.failedToGenerateCode=action.payload}}});exports.setHasIncompatibleSources=(_a=blocklySlice.actions).setHasIncompatibleSources,exports.setFailedToGenerateCode=_a.setFailedToGenerateCode,exports.default=blocklySlice.reducer},"./src/redux/layout.ts":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getVisualizationScale=exports.setVisualizationScale=void 0;var toolkit_1=__webpack_require__("./node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js"),layoutSlice=(0,toolkit_1.createSlice)({name:"layout",initialState:{visualizationScale:null},reducers:{setVisualizationScale:function(state,action){state.visualizationScale=action.payload}}});exports.setVisualizationScale=layoutSlice.actions.setVisualizationScale;exports.getVisualizationScale=(0,toolkit_1.createSelector)((function(state){return state.layout}),(function(state){return null==state?void 0:state.visualizationScale})),exports.default=layoutSlice.reducer}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBR2pDd2Qsd0JBQXdCLEVBRXhCQyxzQkFBc0IsR0FNdEJDLFNBQVUsQ0FDUkMsMEJBQXlCLFNBQUN4b0IsTUFBT0csUUFDL0JILE1BQU1xb0IsdUJBQXlCbG9CLE9BQU9zb0IsT0FDeEMsRUFDQUMsd0JBQXVCLFNBQUMxb0IsTUFBT0csUUFDN0JILE1BQU1zb0IscUJBQXVCbm9CLE9BQU9zb0IsT0FDdEMsS0FJVSxRQUFBRCwyQkFBRCxHQUNYTCxhQUFhUSxTQUFPLDBCQURtQixRQUFBRCx3QkFBdUIsMkJBR2hFLGdCQUFlUCxhQUFhamhCLE8seU5DOUI1QiwrRkFVTTBoQixhQUFjLFlBQUFSLGFBQVksQ0FDOUI3aUIsS0FBTSxTQUNOc0YsYUFOZ0MsQ0FDaENnZSxtQkFBb0IsTUFNcEJOLFNBQVUsQ0FDUk8sc0JBQXFCLFNBQUM5b0IsTUFBT0csUUFDM0JILE1BQU02b0IsbUJBQXFCMW9CLE9BQU9zb0IsT0FDcEMsS0FJVSxRQUFBSyxzQkFBeUJGLFlBQVlELFFBQU8sc0JBSTdDLFFBQUFJLHVCQUF3QixZQUFBQyxpQkFGbEIsU0FBQ2hwQixPQUFpQyxPQUFBQSxNQUFNaXBCLE1BQU4sSUFJbkQsU0FBQWpwQixPQUFTLE9BQUFBLGlCQUFLLEVBQUxBLE1BQU82b0Isa0JBQVAsSUFHWCxnQkFBZUQsWUFBWTFoQixPIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL2NvZGUtc3R1ZGlvL2NsaWVudFN0YXRlLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9jb2RlLXN0dWRpby9pc1J0bFJlZHV4LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9jb2RlLXN0dWRpby91cmxfdGVzdC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29tbW9uU3R5bGVzLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9kb20uanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3JlZHV4L2F1dGhvcmVkSGludHMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3JlZHV4L2ZlZWRiYWNrLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9yZWR1eC9pbnN0cnVjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3JlZHV4L2luc3RydWN0aW9uc0RpYWxvZy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvcmVkdXgvcGFnZUNvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvcmVkdXgvcnVuU3RhdGUuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3JlZHV4L3N0dWRpb0FwcEFjdGl2aXR5LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9yZWR1eC93YXRjaGVkRXhwcmVzc2lvbnMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3N0eWxlQ29uc3RhbnRzLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy90ZW1wbGF0ZXMvRW5oYW5jZWRTYWZlTWFya2Rvd24uanN4Iiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy90ZW1wbGF0ZXMvTGlnaHRidWxiLmpzeCIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvdGVtcGxhdGVzL2luc3RydWN0aW9ucy9BbmlHaWZQcmV2aWV3LmpzeCIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvdGVtcGxhdGVzL2luc3RydWN0aW9ucy9FeGFtcGxlSW1hZ2UuanN4Iiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy90ZW1wbGF0ZXMvaW5zdHJ1Y3Rpb25zL0ltbWVyc2l2ZVJlYWRlckJ1dHRvbi5qc3giLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3RlbXBsYXRlcy9pbnN0cnVjdGlvbnMvSW5wdXRPdXRwdXRUYWJsZS5qc3giLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3RlbXBsYXRlcy9pbnN0cnVjdGlvbnMvSW5zdHJ1Y3Rpb25zLmpzeCIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvdGVtcGxhdGVzL2luc3RydWN0aW9ucy9NYXJrZG93bkluc3RydWN0aW9ucy5qc3giLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3RlbXBsYXRlcy9pbnN0cnVjdGlvbnMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3RlbXBsYXRlcy91dGlscy9leHBhbmRhYmxlSW1hZ2VzLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy91dGlsL2ltbWVyc2l2ZV9yZWFkZXIuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3JlZHV4L2Jsb2NrbHkudHMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3JlZHV4L2xheW91dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyBjbGllbnQgc3RhdGUuIFRoaXMgc3RhdGUgaXMgc3RvcmVkIGluIGFcbiAqICAgICAgIGNvbWJpbmF0aW9uIG9mIGNvb2tpZXMgYW5kIEhUTUw1IHdlYiBzdG9yYWdlLlxuICovXG5pbXBvcnQge3RyeVNldFNlc3Npb25TdG9yYWdlfSBmcm9tICcuLi91dGlscyc7XG5cbmltcG9ydCB7bWVyZ2VBY3Rpdml0eVJlc3VsdH0gZnJvbSAnLi9hY3Rpdml0eVV0aWxzJztcblxuLy8gTm90ZTogc2Vzc2lvblN0b3JhZ2UgaXMgbm90IHNoYXJlZCBiZXR3ZWVuIHRhYnMuXG52YXIgc2Vzc2lvblN0b3JhZ2UgPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2U7XG5cbnZhciBjbGllbnRTdGF0ZSA9IChtb2R1bGUuZXhwb3J0cyA9IHt9KTtcblxuY2xpZW50U3RhdGUucXVlcnlQYXJhbXMgPSByZXF1aXJlKCcuL3V0aWxzJykucXVlcnlQYXJhbXM7XG5cbi8qKlxuICogTnVtYmVyIG9mIGRheXMgYmVmb3JlIGNsaWVudCBzdGF0ZSBjb29raWUgZXhwaXJlcy5cbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5jbGllbnRTdGF0ZS5FWFBJUllfREFZUyA9IDM2NTtcblxuLyoqXG4gKiBWYWx1ZXMgbGFyZ2VyIHRoYW4gdGhpcyByZXN1bHQgYXJlIHNlcnZlci1kZXBlbmRlbnQgYW5kIHNob3VsZG4ndCBiZSBjYWNoZWRcbiAqIGluIGNsaWVudCBzdG9yYWdlLlxuICovXG5jbGllbnRTdGF0ZS5NQVhJTVVNX0NBQ0hBQkxFX1JFU1VMVCA9IDk5OTtcblxuY2xpZW50U3RhdGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTtcbiAgfSBjYXRjaCAoZSkge31cbn07XG5cbi8qKlxuICogQ2xlYXIgcHJvZ3Jlc3MtcmVsYXRlZCB2YWx1ZXMgZnJvbSBzZXNzaW9uIHN0b3JhZ2UuXG4gKi9cbmNsaWVudFN0YXRlLmNsZWFyUHJvZ3Jlc3MgPSBmdW5jdGlvbiAoKSB7XG4gIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3Byb2dyZXNzJyk7XG4gIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2xpbmVzJyk7XG4gIHJlbW92ZUl0ZW1zV2l0aFByZWZpeChzZXNzaW9uU3RvcmFnZSwgJ3NvdXJjZV8nKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2xpZW50LWNhY2hlZCBjb3B5IG9mIHRoZSBsZXZlbCBzb3VyY2UgZm9yIHRoZSBnaXZlbiBzY3JpcHRcbiAqIGxldmVsLCBpZiBpdCdzIG5ld2VyIHRoYW4gdGhlIGdpdmVuIHRpbWVzdGFtcC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzY3JpcHROYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gbGV2ZWxJZFxuICogQHBhcmFtIHtudW1iZXI9fSB0aW1lc3RhbXBcbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBDYWNoZWQgY29weSBvZiB0aGUgbGV2ZWwgc291cmNlLCBvciB1bmRlZmluZWQgaWZcbiAqICAgdGhlIGNhY2hlZCBjb3B5IGlzIG1pc3Npbmcvc3RhbGUuXG4gKi9cbmNsaWVudFN0YXRlLnNvdXJjZUZvckxldmVsID0gZnVuY3Rpb24gKHNjcmlwdE5hbWUsIGxldmVsSWQsIHRpbWVzdGFtcCkge1xuICB2YXIgZGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oY3JlYXRlS2V5KHNjcmlwdE5hbWUsIGxldmVsSWQsICdzb3VyY2UnKSk7XG4gIGlmIChkYXRhKSB7XG4gICAgdmFyIHBhcnNlZDtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGltZXN0YW1wIHx8IHBhcnNlZC50aW1lc3RhbXAgPiB0aW1lc3RhbXApIHtcbiAgICAgIHJldHVybiBwYXJzZWQuc291cmNlO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBDYWNoZSBhIGNvcHkgb2YgdGhlIGxldmVsIHNvdXJjZSBhbG9uZyB3aXRoIGEgdGltZXN0YW1wLlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmlwdE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbElkXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZXN0YW1wXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlXG4gKi9cbmNsaWVudFN0YXRlLndyaXRlU291cmNlRm9yTGV2ZWwgPSBmdW5jdGlvbiAoXG4gIHNjcmlwdE5hbWUsXG4gIGxldmVsSWQsXG4gIHRpbWVzdGFtcCxcbiAgc291cmNlXG4pIHtcbiAgaWYgKHNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeVNldFNlc3Npb25TdG9yYWdlKFxuICAgIGNyZWF0ZUtleShzY3JpcHROYW1lLCBsZXZlbElkLCAnc291cmNlJyksXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcCxcbiAgICB9KVxuICApO1xufTtcblxuLyoqXG4gKiBNZXJnZXMgdGhlIGdpdmVuIHRlc3RSZXN1bHQgZm9yIHRoZSBnaXZlbiBsZXZlbCBpbnRvIHRoZSBwcm9ncmVzc1xuICogZGF0YSBzdG9yZWQgaW4gc2Vzc2lvbiBzdG9yYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmlwdE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbElkXG4gKiBAcGFyYW0ge1Rlc3RSZXN1bHRzfSB0ZXN0UmVzdWx0XG4gKi9cbmNsaWVudFN0YXRlLnRyYWNrUHJvZ3Jlc3MgPSBmdW5jdGlvbiAoc2NyaXB0TmFtZSwgbGV2ZWxJZCwgdGVzdFJlc3VsdCkge1xuICAvLyB0ZXN0UmVzdWx0IHZhbHVlcyA+IDEwMDAgYXJlIGZvciBzZXJ2ZXIgdXNlIG9ubHkgYW5kIHNob3VsZCBub3QgYmUgc3RvcmVkXG4gIC8vIGxvY2FsbHlcbiAgaWYgKCF0ZXN0UmVzdWx0IHx8IHRlc3RSZXN1bHQgPiBjbGllbnRTdGF0ZS5NQVhJTVVNX0NBQ0hBQkxFX1JFU1VMVCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHByb2dyZXNzRGF0YSA9IGxldmVsUHJvZ3Jlc3NCeVNjcmlwdCgpO1xuICBpZiAoIXByb2dyZXNzRGF0YVtzY3JpcHROYW1lXSkge1xuICAgIHByb2dyZXNzRGF0YVtzY3JpcHROYW1lXSA9IHt9O1xuICB9XG4gIGNvbnN0IHNhdmVkUmVzdWx0ID0gcHJvZ3Jlc3NEYXRhW3NjcmlwdE5hbWVdW2xldmVsSWRdIHx8IDA7XG4gIGNvbnN0IG1lcmdlZFJlc3VsdCA9IG1lcmdlQWN0aXZpdHlSZXN1bHQoc2F2ZWRSZXN1bHQsIHRlc3RSZXN1bHQpO1xuXG4gIGlmIChtZXJnZWRSZXN1bHQgIT09IHNhdmVkUmVzdWx0KSB7XG4gICAgcHJvZ3Jlc3NEYXRhW3NjcmlwdE5hbWVdW2xldmVsSWRdID0gbWVyZ2VkUmVzdWx0O1xuICAgIHRyeVNldFNlc3Npb25TdG9yYWdlKCdwcm9ncmVzcycsIEpTT04uc3RyaW5naWZ5KHByb2dyZXNzRGF0YSkpO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGxldmVsIHByb2dyZXNzIG1hcCBmb3IgdGhlIGdpdmVuIHNjcmlwdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzY3JpcHROYW1lIFRoZSBzY3JpcHQgbmFtZVxuICogQHJldHVybnMge09iamVjdDxudW1iZXIsIG51bWJlcj59IG1hcCBmcm9tIGxldmVsSWQgLT4gdGVzdFJlc3VsdFxuICovXG5jbGllbnRTdGF0ZS5sZXZlbFByb2dyZXNzID0gZnVuY3Rpb24gKHNjcmlwdE5hbWUpIHtcbiAgdmFyIHByb2dyZXNzTWFwID0gbGV2ZWxQcm9ncmVzc0J5U2NyaXB0KCk7XG4gIHJldHVybiBwcm9ncmVzc01hcFtzY3JpcHROYW1lXSB8fCB7fTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIG1hcCBmcm9tIHNjcmlwdCBuYW1lIHRvIGxldmVsIHByb2dyZXNzIG1hcFxuICogQHJldHVybiB7T2JqZWN0PFN0cmluZywgT2JqZWN0Pn1cbiAqL1xuZnVuY3Rpb24gbGV2ZWxQcm9ncmVzc0J5U2NyaXB0KCkge1xuICB2YXIgcHJvZ3Jlc3NKc29uID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgncHJvZ3Jlc3MnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJvZ3Jlc3NKc29uID8gSlNPTi5wYXJzZShwcm9ncmVzc0pzb24pIDoge307XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBSZWNvdmVyIGZyb20gbWFsZm9ybWVkIGRhdGEuXG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdXNlciBoYXMgc2VlbiBhIGdpdmVuIHZpZGVvIGJhc2VkIG9uIGNvbnRlbnRzIG9mIHRoZSBsb2NhbCBzdG9yYWdlXG4gKiBAcGFyYW0gdmlkZW9JZFxuICogQHJldHVybnMgeyp9XG4gKi9cbmNsaWVudFN0YXRlLmhhc1NlZW5WaWRlbyA9IGZ1bmN0aW9uICh2aWRlb0lkKSB7XG4gIHJldHVybiBoYXNTZWVuVmlzdWFsRWxlbWVudCgndmlkZW8nLCB2aWRlb0lkKTtcbn07XG5cbi8qKlxuICogUmVjb3JkcyB0aGF0IGEgdXNlciBoYXMgc2VlbiBhIGdpdmVuIHZpZGVvIGluIGxvY2FsIHN0b3JhZ2VcbiAqIEBwYXJhbSB2aWRlb0lkXG4gKi9cbmNsaWVudFN0YXRlLnJlY29yZFZpZGVvU2VlbiA9IGZ1bmN0aW9uICh2aWRlb0lkKSB7XG4gIHJlY29yZFZpc3VhbEVsZW1lbnRTZWVuKCd2aWRlbycsIHZpZGVvSWQpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGhhcyBzZWVuIHRoZSBnaXZlbiBjYWxsb3V0IGJhc2VkIG9uIGNvbnRlbnRzIG9mIHRoZSBsb2NhbCBzdG9yYWdlXG4gKiBAcGFyYW0gY2FsbG91dElkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY2xpZW50U3RhdGUuaGFzU2VlbkNhbGxvdXQgPSBmdW5jdGlvbiAoY2FsbG91dElkKSB7XG4gIHJldHVybiBoYXNTZWVuVmlzdWFsRWxlbWVudCgnY2FsbG91dCcsIGNhbGxvdXRJZCk7XG59O1xuXG4vKipcbiAqIFJlY29yZHMgdGhhdCBhIHVzZXIgaGFzIHNlZW4gYSBnaXZlbiBjYWxsb3V0IGluIGxvY2FsIHN0b3JhZ2VcbiAqIEBwYXJhbSBjYWxsb3V0SWRcbiAqL1xuY2xpZW50U3RhdGUucmVjb3JkQ2FsbG91dFNlZW4gPSBmdW5jdGlvbiAoY2FsbG91dElkKSB7XG4gIHJlY29yZFZpc3VhbEVsZW1lbnRTZWVuKCdjYWxsb3V0JywgY2FsbG91dElkKTtcbn07XG5cbi8qKlxuICogUHJpdmF0ZSBoZWxwZXIgZm9yIHZpZGVvcyBhbmQgY2FsbG91dHMgLSBwZXJzaXN0cyBpbmZvIGluIHRoZSBsb2NhbCBzdG9yYWdlIHRoYXQgYSBnaXZlbiBlbGVtZW50IGhhcyBiZWVuIHNlZW5cbiAqIEBwYXJhbSB2aXN1YWxFbGVtZW50VHlwZVxuICogQHBhcmFtIHZpc3VhbEVsZW1lbnRJZFxuICovXG5mdW5jdGlvbiByZWNvcmRWaXN1YWxFbGVtZW50U2Vlbih2aXN1YWxFbGVtZW50VHlwZSwgdmlzdWFsRWxlbWVudElkKSB7XG4gIHZhciBlbGVtZW50U2Vlbkpzb24gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHZpc3VhbEVsZW1lbnRUeXBlKSB8fCAne30nO1xuICB2YXIgZWxlbWVudFNlZW47XG4gIHRyeSB7XG4gICAgZWxlbWVudFNlZW4gPSBKU09OLnBhcnNlKGVsZW1lbnRTZWVuSnNvbik7XG4gICAgZWxlbWVudFNlZW5bdmlzdWFsRWxlbWVudElkXSA9IHRydWU7XG4gICAgdHJ5U2V0U2Vzc2lvblN0b3JhZ2UodmlzdWFsRWxlbWVudFR5cGUsIEpTT04uc3RyaW5naWZ5KGVsZW1lbnRTZWVuKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvL1NvbWV0aGluZyB3ZW50IHdyb25nIHBhcnNpbmcgdGhlIGpzb24uIEJsb3cgaXQgdXAgYW5kIGp1c3QgcHV0IGluIHRoZSBuZXcgY2FsbG91dFxuICAgIGVsZW1lbnRTZWVuID0ge307XG4gICAgZWxlbWVudFNlZW5bdmlzdWFsRWxlbWVudElkXSA9IHRydWU7XG4gICAgdHJ5U2V0U2Vzc2lvblN0b3JhZ2UodmlzdWFsRWxlbWVudFR5cGUsIEpTT04uc3RyaW5naWZ5KGVsZW1lbnRTZWVuKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQcml2YXRlIGhlbHBlciBmb3IgdmlkZW9zIGFuZCBjYWxsb3V0cyAtIGxvb2tzIGluIGxvY2FsIHN0b3JhZ2UgdG8gc2VlIGlmIHRoZSBlbGVtZW50IGhhcyBiZWVuIHNlZW5cbiAqIEBwYXJhbSB2aXN1YWxFbGVtZW50VHlwZVxuICogQHBhcmFtIHZpc3VhbEVsZW1lbnRJZFxuICovXG5mdW5jdGlvbiBoYXNTZWVuVmlzdWFsRWxlbWVudCh2aXN1YWxFbGVtZW50VHlwZSwgdmlzdWFsRWxlbWVudElkKSB7XG4gIHZhciBlbGVtZW50U2Vlbkpzb24gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHZpc3VhbEVsZW1lbnRUeXBlKSB8fCAne30nO1xuICB0cnkge1xuICAgIHZhciBlbGVtZW50U2VlbiA9IEpTT04ucGFyc2UoZWxlbWVudFNlZW5Kc29uKTtcbiAgICByZXR1cm4gZWxlbWVudFNlZW5bdmlzdWFsRWxlbWVudElkXSA9PT0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgc3RhbmRhcmRpemVkIGtleXMgZm9yIHN0b3JpbmcgdmFsdWVzIGluIHNlc3Npb25TdG9yYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmlwdE5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbElkXG4gKiBAcGFyYW0ge3N0cmluZz19IHByZWZpeFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjcmVhdGVLZXkoc2NyaXB0TmFtZSwgbGV2ZWxJZCwgcHJlZml4KSB7XG4gIHJldHVybiAocHJlZml4ID8gcHJlZml4ICsgJ18nIDogJycpICsgc2NyaXB0TmFtZSArICdfJyArIGxldmVsSWQ7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgaXRlbXMgZnJvbSB0aGUgZ2l2ZW4gc2Vzc2lvblN0b3JhZ2Ugb2JqZWN0IHRoYXQgc3RhcnQgd2l0aCB0aGVcbiAqIGdpdmVuIHByZWZpeC5cbiAqXG4gKiBAcGFyYW0ge1N0b3JhZ2V9IHNlc3Npb25TdG9yYWdlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUl0ZW1zV2l0aFByZWZpeChzZXNzaW9uU3RvcmFnZSwgcHJlZml4KSB7XG4gIE9iamVjdC5rZXlzKHNlc3Npb25TdG9yYWdlKVxuICAgIC5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKHByZWZpeCkpXG4gICAgLmZvckVhY2goa2V5ID0+IHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KSk7XG59XG4iLCJjb25zdCBTRVRfUlRMID0gJ2lzUnRsL1NFVF9SVEwnO1xuZXhwb3J0IGNvbnN0IHNldFJ0bCA9IGlzUnRsID0+ICh7dHlwZTogU0VUX1JUTCwgaXNSdGx9KTtcbmV4cG9ydCBjb25zdCBzZXRSdGxGcm9tRE9NID0gKCkgPT4gc2V0UnRsKGlzUnRsRnJvbURPTSgpKTtcblxuLy8gRGFzaGJvYXJkIHNpZ25hbHMgd2hldGhlciBvciBub3Qgd2UncmUgaW4gcnRsIGJ5IHNldHRpbmcgXCJkaXJcIiBvbiB0aGUgcm9vdFxuLy8gZWxlbWVudC4gSW4gYW4gaWRlYWwgd29ybGQsIHJlZHV4IHdvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgdHJ1dGgsIGJ1dCB3ZSBoYXZlXG4vLyBDU1Mgc2VsZWN0b3JzIHRoYXQgZGVwZW5kIG9uIHRoaXMgRE9NIHN0YXRlLCBzb21lIG9mIHdoaWNoIGFyZSB1c2VkIGluIGNhc2VzXG4vLyB3aGVyZSB3ZSBkb24ndCBoYXZlIHJlZHV4LlxuLy8gSW5zdGVhZCB3ZSBoYXZlIHRoZSBET00gY29udGludWUgdG8gYmUgdGhlIHNvdXJjZSBvZiB0cnV0aCwgYW5kIHNldCBvdXIgc3RvcmVcbi8vIHN0YXRlIGFjY29yZGluZ2x5IHNvIHRoYXQgY29tcG9uZW50cyBjYW4gYWNjZXNzIHRoaXMgaW5mby5cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBsb29rcyBhdCB0aGUgRE9NIGFuZCBkZWNpZGVzIHdoZXRoZXIgb3Igbm90IHdlJ3JlIGluIFJUTCBtb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSdGxGcm9tRE9NKCkge1xuICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgaWYgKGhlYWQgJiYgaGVhZC5wYXJlbnRFbGVtZW50KSB7XG4gICAgY29uc3QgZGlyID0gaGVhZC5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlyJyk7XG4gICAgcmV0dXJuICEhKGRpciAmJiBkaXIudG9Mb3dlckNhc2UoKSA9PT0gJ3J0bCcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2NhbGUoc3RhdGUgPSBmYWxzZSwgYWN0aW9uKSB7XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX1JUTCkge1xuICAgIHJldHVybiBhY3Rpb24uaXNSdGw7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuIiwiLy8gVGVzdHMgd2hldGhlciB0aGUgYnJvd3NlciBjYW4gYWNjZXNzIGFuIGltYWdlIFVSTC5cbi8vIFVzZWZ1bCBhcyBhIHdvcmthcm91bmQgZm9yIENPUlMgc2VjdXJpdHkgdG8gdGVzdCBhY2Nlc3MgdG8gYW4gb3JpZ2luLlxuZnVuY3Rpb24gdGVzdEltYWdlQWNjZXNzKFxuICB1cmwsXG4gIHN1Y2Nlc3NDYWxsYmFjayA9ICgpID0+IHt9LFxuICBmYWlsdXJlQ2FsbGJhY2sgPSAoKSA9PiB7fSxcbiAgdGltZW91dE1zID0gNTAwMCxcbiAgdmlkZW9FbGVtZW50ID0gZmFsc2Vcbikge1xuICB2YXIgZWxlbWVudDtcbiAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQgPSBuZXcgSW1hZ2UoKTtcbiAgfVxuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGZpbmlzaChjYWxsYmFjaykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoY2FsbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICB9XG4gIHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZmluaXNoKGZhaWx1cmVDYWxsYmFjayksIHRpbWVvdXRNcyk7XG4gIGVsZW1lbnQub25lcnJvciA9IGZpbmlzaChmYWlsdXJlQ2FsbGJhY2spO1xuICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgZWxlbWVudC5vbmR1cmF0aW9uY2hhbmdlID0gZmluaXNoKHN1Y2Nlc3NDYWxsYmFjayk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5vbmxvYWQgPSBmaW5pc2goc3VjY2Vzc0NhbGxiYWNrKTtcbiAgfVxuICBlbGVtZW50LnNyYyA9IHVybDtcbiAgLy8gc3RvcmUgYSByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgc28gaXQgZG9lc24ndCBnZXQgY29sbGVjdGVkXG4gIHdpbmRvdy50ZXN0SW1hZ2VzID0gd2luZG93LnRlc3RJbWFnZXMgfHwgW107XG4gIHdpbmRvdy50ZXN0SW1hZ2VzLnB1c2goZWxlbWVudCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRlc3RJbWFnZUFjY2VzcztcbiIsIi8vIEFzIHdlIG1vdmUgZnJvbSBpbmxpbmUgY3NzIHRvIGNzcyBtb2R1bGVzIHdlIGFyZSB0ZW1wb3JhcmlseSBkdXBsaWNhdGluZyB0aGlzXG4vLyBpbnRvIHRoZSBjc3MgbW9kdWxlIGNvbW1vbi1zdHlsZXMubW9kdWxlLnNjc3MuXG4vLyBBbnkgY2hhbmdlcyBpbiBvbmUgc2hvdWxkIGJlIG1hZGUgaW4gdGhlIG90aGVyIHRvIGFwcGx5IHRvIGFsbCBjb21wb25lbnRzLlxudmFyIGNvbW1vblN0eWxlcyA9IG1vZHVsZS5leHBvcnRzO1xudmFyIHN0eWxlQ29uc3RhbnRzID0gcmVxdWlyZSgnLi9zdHlsZUNvbnN0YW50cycpO1xudmFyIGNvbG9yID0gcmVxdWlyZSgnLi91dGlsL2NvbG9yJyk7XG5cbmNvbW1vblN0eWxlcy5oaWRkZW4gPSB7XG4gIGRpc3BsYXk6ICdub25lJyxcbn07XG5cbmNvbW1vblN0eWxlcy5wdXJwbGVIZWFkZXIgPSB7XG4gIGhlaWdodDogc3R5bGVDb25zdGFudHNbJ3dvcmtzcGFjZS1oZWFkZXJzLWhlaWdodCddLFxuICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLnB1cnBsZSxcbiAgY29sb3I6IGNvbG9yLndoaXRlLFxuICBvdmVyZmxvd1k6ICdoaWRkZW4nLFxuICBXZWJraXRVc2VyU2VsZWN0OiAnbm9uZScsXG4gIE1velVzZXJTZWxlY3Q6ICdub25lJyxcbiAgbXNVc2VyU2VsZWN0OiAnbm9uZScsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbn07XG5cbmNvbW1vblN0eWxlcy5wdXJwbGVIZWFkZXJVbmZvY3VzZWQgPSB7XG4gIGJhY2tncm91bmRDb2xvcjogY29sb3IubGlnaHRlcl9wdXJwbGUsXG4gIGNvbG9yOiBjb2xvci5uZXV0cmFsX3doaXRlLFxufTtcblxuY29tbW9uU3R5bGVzLnRlYWNoZXJCbHVlSGVhZGVyID0ge1xuICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmN5YW4sXG4gIGNvbG9yOiBjb2xvci5saWdodGVzdF9jeWFuLFxufTtcblxuY29tbW9uU3R5bGVzLnRlYWNoZXJIZWFkZXJVbmZvY3VzZWQgPSB7XG4gIGNvbG9yOiBjb2xvci5kYXJrX2NoYXJjb2FsLFxufTtcblxuY29tbW9uU3R5bGVzLm1pbmVjcmFmdEhlYWRlciA9IHtcbiAgYmFja2dyb3VuZENvbG9yOiAnIzNiM2IzYicsXG4gIGNvbG9yOiBjb2xvci53aGl0ZSxcbn07XG5cbmNvbW1vblN0eWxlcy5idXR0b24gPSB7XG4gIHBhZGRpbmdUb3A6IDUsXG4gIHBhZGRpbmdCb3R0b206IDUsXG4gIGZvbnRTaXplOiAxNCxcbn07XG5cbi8vIERpdiBjb250YWluIGluc3RydWN0aW9ucywgZWl0aGVyIGJlbG93IHZpc3VhbGl6YXRpb24gb3IgaW4gdG9wIGluc3RydWN0aW9uc1xuLy8gTWF5IG5vdCBuZWVkIGEgY29tbW9uIGxvY2F0aW9uIG9uY2UgZXZlcnl0aGluZyBpcyBpbiB0b3AgaW5zdHJ1Y3Rpb25zXG5jb21tb25TdHlsZXMuYnViYmxlID0ge1xuICBjb2xvcjogY29sb3IuYmxhY2ssXG4gIG1hcmdpbkJvdHRvbTogMTAsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbn07XG4iLCJleHBvcnRzLmFkZFJlYWR5TGlzdGVuZXIgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICBzZXRUaW1lb3V0KGNhbGxiYWNrLCAxKTtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGNhbGxiYWNrLCBmYWxzZSk7XG4gIH1cbn07XG5cbmV4cG9ydHMuZ2V0VG91Y2hFdmVudE5hbWUgPSBmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gIHZhciBpc0lFMTFUb3VjaCA9IHdpbmRvdy5uYXZpZ2F0b3IucG9pbnRlckVuYWJsZWQ7XG4gIHZhciBpc0lFMTBUb3VjaCA9IHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZDtcbiAgdmFyIGlzU3RhbmRhcmRUb3VjaCA9ICEoaXNJRTExVG91Y2ggfHwgaXNJRTEwVG91Y2gpO1xuXG4gIHZhciBrZXk7XG4gIGlmIChpc0lFMTFUb3VjaCkge1xuICAgIGtleSA9ICdpZTExJztcbiAgfSBlbHNlIGlmIChpc0lFMTBUb3VjaCkge1xuICAgIGtleSA9ICdpZTEwJztcbiAgfSBlbHNlIGlmIChpc1N0YW5kYXJkVG91Y2gpIHtcbiAgICBrZXkgPSAnc3RhbmRhcmQnO1xuICB9XG4gIGlmIChrZXkgJiYgVE9VQ0hfTUFQW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gVE9VQ0hfTUFQW2V2ZW50TmFtZV1ba2V5XTtcbiAgfVxufTtcblxuLyoqXG4gKiBBZGQgYW4gZXZlbnQgbGlzdGVuZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb24pIGhhbmRsZXJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VwcHJlc3NUb3VjaERlZmF1bHQgLSBTaG91bGQgd2UgcHJldmVudERlZmF1bHQgb24gdG91Y2ggZXZlbnRzXG4gKi9cbnZhciBhZGRFdmVudCA9IGZ1bmN0aW9uIChcbiAgZWxlbWVudCxcbiAgZXZlbnROYW1lLFxuICBoYW5kbGVyLFxuICBzdXBwcmVzc1RvdWNoRGVmYXVsdCA9IHRydWVcbikge1xuICAvLyBTY29wZSBib3VuZCBldmVudCBtYXAgdG8gdGhpcyBhZGRFdmVudCBjYWxsIC0gd2Ugb25seSBwcm92aWRlIGZvciB1bmJpbmRpbmdcbiAgLy8gd2hhdCB3ZSBiaW5kIHJpZ2h0IGhlcmUuXG4gIHZhciBib3VuZEV2ZW50cyA9IHt9O1xuXG4gIHZhciBiaW5kRXZlbnQgPSBmdW5jdGlvbiAodHlwZSwgZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlciwgZmFsc2UpO1xuICAgIGJvdW5kRXZlbnRzW3R5cGVdID0ge25hbWU6IGV2ZW50TmFtZSwgaGFuZGxlcjogaGFuZGxlcn07XG4gIH07XG5cbiAgdmFyIHVuYmluZEV2ZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICB2YXIgZXZlbnRJbmZvID0gYm91bmRFdmVudHNbdHlwZV07XG4gICAgaWYgKGV2ZW50SW5mbykge1xuICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50SW5mby5uYW1lLCBldmVudEluZm8uaGFuZGxlcik7XG4gICAgICBkZWxldGUgYm91bmRFdmVudHNbdHlwZV07XG4gICAgfVxuICB9O1xuXG4gIC8vIEFkZCBjbGljayBoYW5kbGVyXG4gIGJpbmRFdmVudCgnY2xpY2snLCBldmVudE5hbWUsIGhhbmRsZXIpO1xuXG4gIC8vIE9wdGlvbmFsbHkgYWRkIHRvdWNoIGhhbmRsZXJcbiAgdmFyIHRvdWNoRXZlbnQgPSBleHBvcnRzLmdldFRvdWNoRXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gIGlmICh0b3VjaEV2ZW50KSB7XG4gICAgYmluZEV2ZW50KCd0b3VjaCcsIHRvdWNoRXZlbnQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAvLyBTdG9wIG1vdXNlIGV2ZW50cyBhbmQgc3VwcHJlc3MgZGVmYXVsdCBldmVudCBoYW5kbGVyIHRvIHByZXZlbnRcbiAgICAgIC8vIHVuaW50ZW50aW9uYWwgZG91YmxlLWNsaWNraW5nXG4gICAgICBpZiAoc3VwcHJlc3NUb3VjaERlZmF1bHQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICAvLyAtLS0tIFdvcmthcm91bmQgZm9yIElFIDExICgyMDE5KSAtLS0tXG4gICAgICAvLyBCYWNrZ3JvdW5kOiBQcmV2ZW50RGVmYXVsdCBpcyBub3QgcmVjb2duaXplZCBpbiBJRS4gSW4gSUUgMTEsIGEgY2xpY2tcbiAgICAgIC8vIGV2ZW50IHdpbGwgZmlyZSB0aGUgZm9sbG93aW5nIGV2ZW50czpcbiAgICAgIC8vIE1TUG9pbnRlckRvd24gLT4gcG9pbnRlcmRvd24gLT4gTVNQb2ludGVyVXAgLT4gcG9pbnRlcnVwIC0+IGNsaWNrXG4gICAgICAvLyBUaGlzIGV4YWN0IHNhbWUgc2VxdWVuY2Ugb2YgZXZlbnRzIGhhcHBlbnMgd2hldGhlciB0aGUgZXZlbnQgb3JpZ2luYXRlZFxuICAgICAgLy8gZnJvbSBhIHRvdWNoLCBhIHRyYWNrcGFkLCBvciBhIG1vdXNlLiBtb3VzZWRvd24sIG1vdXNldXAsIGFuZCBtb3VzZW1vdmVcbiAgICAgIC8vIGV2ZW50cyBiZWhhdmUgc2ltaWxhcmx5LiBCZWNhdXNlIG9mIHRoaXMgYmVoYXZpb3IsIHdlIGNhbiAoYW5kIHNob3VsZClcbiAgICAgIC8vIHJlbW92ZSB0aGUgZXZlbnQgaGFuZGxlcnMgdGhhdCBhcmUgbm90IHNwZWNpZmljIHRvIElFIDExIGFzIHNvb24gYXMgYW5cbiAgICAgIC8vIElFIDExIGV2ZW50IGlzIGZpcmVkLiBUaGlzIHdpbGwgcHJldmVudCBkdXBsaWNhdGUgZXZlbnRzIGZyb20gaGFwcGVuaW5nXG4gICAgICAvLyBzdWNoIGFzIGRvdWJsZSBjbGljay5cbiAgICAgIGxldCBJRUV2ZW50cyA9IFtcbiAgICAgICAgJ3BvaW50ZXJkb3duJyxcbiAgICAgICAgJ01TUG9pbnRlckRvd24nLFxuICAgICAgICAncG9pbnRlcm1vdmUnLFxuICAgICAgICAnTVNQb2ludGVyTW92ZScsXG4gICAgICAgICdwb2ludGVydXAnLFxuICAgICAgICAnTVNQb2ludGVyVXAnLFxuICAgICAgXTtcbiAgICAgIGlmIChJRUV2ZW50cy5pbmNsdWRlcyh0b3VjaEV2ZW50KSkge1xuICAgICAgICB1bmJpbmRFdmVudCgnY2xpY2snKTtcbiAgICAgIH1cblxuICAgICAgaGFuZGxlcj8uY2FsbCh0aGlzLCBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJldHVybiBmdW5jdGlvbiB0aGF0IHVuYmluZHMgYWxsIGhhbmRsZXJzXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdW5iaW5kRXZlbnQoJ2NsaWNrJyk7XG4gICAgdW5iaW5kRXZlbnQoJ3RvdWNoJyk7XG4gIH07XG59O1xuXG5leHBvcnRzLmFkZE1vdXNlRG93blRvdWNoRXZlbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgaGFuZGxlcikge1xuICByZXR1cm4gYWRkRXZlbnQoZWxlbWVudCwgJ21vdXNlZG93bicsIGhhbmRsZXIpO1xufTtcblxuZXhwb3J0cy5hZGRNb3VzZVVwVG91Y2hFdmVudCA9IGZ1bmN0aW9uIChcbiAgZWxlbWVudCxcbiAgaGFuZGxlcixcbiAgc3VwcHJlc3NUb3VjaERlZmF1bHQgPSB0cnVlXG4pIHtcbiAgcmV0dXJuIGFkZEV2ZW50KGVsZW1lbnQsICdtb3VzZXVwJywgaGFuZGxlciwgc3VwcHJlc3NUb3VjaERlZmF1bHQpO1xufTtcblxuZXhwb3J0cy5hZGRNb3VzZU1vdmVUb3VjaEV2ZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGhhbmRsZXIpIHtcbiAgcmV0dXJuIGFkZEV2ZW50KGVsZW1lbnQsICdtb3VzZW1vdmUnLCBoYW5kbGVyKTtcbn07XG5cbmV4cG9ydHMuYWRkQ2xpY2tUb3VjaEV2ZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGhhbmRsZXIpIHtcbiAgcmV0dXJuIGFkZEV2ZW50KGVsZW1lbnQsICdjbGljaycsIGhhbmRsZXIpO1xufTtcblxuLy8gQSBtYXAgZnJvbSBzdGFuZGFyZCB0b3VjaCBldmVudHMgdG8gdmFyaW91cyBhbGlhc2VzLlxudmFyIFRPVUNIX01BUCA9IHtcbiAgLy8gIEluY29tcGxldGUgbGlzdCwgYWRkIGFzIG5lZWRlZC5cbiAgY2xpY2s6IHtcbiAgICBzdGFuZGFyZDogJ3RvdWNoc3RhcnQnLFxuICAgIGllMTA6ICdNU1BvaW50ZXJEb3duJyxcbiAgICBpZTExOiAncG9pbnRlcmRvd24nLFxuICB9LFxuICBtb3VzZWRvd246IHtcbiAgICBzdGFuZGFyZDogJ3RvdWNoc3RhcnQnLFxuICAgIGllMTA6ICdNU1BvaW50ZXJEb3duJyxcbiAgICBpZTExOiAncG9pbnRlcmRvd24nLFxuICB9LFxuICBtb3VzZXVwOiB7XG4gICAgc3RhbmRhcmQ6ICd0b3VjaGVuZCcsXG4gICAgaWUxMDogJ01TUG9pbnRlclVwJyxcbiAgICBpZTExOiAncG9pbnRlcnVwJyxcbiAgfSxcbiAgbW91c2Vtb3ZlOiB7XG4gICAgc3RhbmRhcmQ6ICd0b3VjaG1vdmUnLFxuICAgIGllMTA6ICdNU1BvaW50ZXJNb3ZlJyxcbiAgICBpZTExOiAncG9pbnRlcm1vdmUnLFxuICB9LFxufTtcbmV4cG9ydHMuVE9VQ0hfTUFQID0gVE9VQ0hfTUFQO1xuXG5leHBvcnRzLmlzTW9iaWxlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcmVnID0gL01vYmlsZXxpUChob25lfG9kfGFkKXxBbmRyb2lkfEJsYWNrQmVycnl8SUVNb2JpbGUvO1xuICByZXR1cm4gcmVnLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1xufTtcblxuZXhwb3J0cy5pc1dpbmRvd3NUb3VjaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlZyA9IC9NU0lFLipUb3VjaC87XG4gIHJldHVybiByZWcudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG59O1xuXG5leHBvcnRzLmlzQW5kcm9pZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlZyA9IC9BbmRyb2lkLztcbiAgcmV0dXJuIHJlZy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcbn07XG5cbmV4cG9ydHMuaXNJT1MgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZWcgPSAvaVAoaG9uZXxvZHxhZCkvO1xuICByZXR1cm4gcmVnLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1xufTtcblxuZXhwb3J0cy5pc0lQYWQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZWcgPSAvaVBhZC9pO1xuICByZXR1cm4gcmVnLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1xufTtcbiIsImNvbnN0IEVOUVVFVUVfSElOVFMgPSAnYXV0aG9yZWRIaW50cy9FTlFVRVVFX0hJTlRTJztcbmNvbnN0IFNIT1dfTkVYVF9ISU5UID0gJ2F1dGhvcmVkSGludHMvU0hPV19ORVhUX0hJTlQnO1xuY29uc3QgRElTUExBWV9NSVNTSU5HX0JMT0NLX0hJTlRTID0gJ2F1dGhvcmVkSGludHMvRElTUExBWV9NSVNTSU5HX0JMT0NLX0hJTlRTJztcblxuaW1wb3J0IHtiaXNlY3R9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBdXRob3JlZEhpbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtYXJrZG93blxuICogQHByb3BlcnR5IHtzdHJpbmd9IGhpbnRJZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGhpbnRDbGFzc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGhpbnRUeXBlXG4gKiBAcHJvcGVydHkgez9BcnJheTxBcnJheT4+fSBoaW50UGF0aFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGhpbnRWaWRlb1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbHJlYWR5U2VlblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR0c01lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gYmxvY2tcbiAqL1xuXG5jb25zdCBhdXRob3JlZEhpbnRzSW5pdGlhbFN0YXRlID0ge1xuICAvKipcbiAgICogQHR5cGUgeyFBdXRob3JlZEhpbnRbXX1cbiAgICovXG4gIHNlZW5IaW50czogW10sXG5cbiAgLyoqXG4gICAqIEB0eXBlIHshQXV0aG9yZWRIaW50W119XG4gICAqL1xuICB1bnNlZW5IaW50czogW10sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlID0gYXV0aG9yZWRIaW50c0luaXRpYWxTdGF0ZSwgYWN0aW9uKSB7XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gRU5RVUVVRV9ISU5UUykge1xuICAgIGNvbnN0IFtzZWVuLCB1bnNlZW5dID0gYmlzZWN0KFxuICAgICAgYWN0aW9uLmhpbnRzLFxuICAgICAgaGludCA9PiBhY3Rpb24uaGludHNVc2VkSWRzLmluZGV4T2YoaGludC5oaW50SWQpICE9PSAtMVxuICAgICk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICB1bnNlZW5IaW50czogc3RhdGUudW5zZWVuSGludHMuY29uY2F0KHVuc2VlbiksXG4gICAgICBzZWVuSGludHM6IHN0YXRlLnNlZW5IaW50cy5jb25jYXQoc2VlbiksXG4gICAgfSk7XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNIT1dfTkVYVF9ISU5UKSB7XG4gICAgY29uc3QgbmV4dEhpbnQgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS51bnNlZW5IaW50c1swXSwge1xuICAgICAgYWxyZWFkeVNlZW46IHRydWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIHVuc2VlbkhpbnRzOiBzdGF0ZS51bnNlZW5IaW50cy5zbGljZSgxKSxcbiAgICAgIHNlZW5IaW50czogc3RhdGUuc2VlbkhpbnRzLmNvbmNhdChbbmV4dEhpbnRdKSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gRElTUExBWV9NSVNTSU5HX0JMT0NLX0hJTlRTKSB7XG4gICAgLy8gYW55IGNvbnRleHR1YWwgaGludHMgYWxyZWFkeSBkaXNwbGF5ZWQgYnV0IG5vdCBpbiB0aGlzIG5ldyBzZXRcbiAgICAvLyBzaG91bGQgYmUgcmVtb3ZlZFxuICAgIGNvbnN0IHNlZW5IaW50cyA9IHN0YXRlLnNlZW5IaW50cy5maWx0ZXIoc2VlbkhpbnQgPT4ge1xuICAgICAgaWYgKHNlZW5IaW50LmhpbnRUeXBlID09PSAnY29udGV4dHVhbCcpIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5oaW50cy5zb21lKG5ld0hpbnQgPT4gc2VlbkhpbnQuaGludElkID09PSBuZXdIaW50LmhpbnRJZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgLy8gYW55IGhpbnRzIHdlIGludGVuZCB0byBlbnF1ZXVlIHRoYXQgYXJlIGFscmVhZHkgZGlzcGxheWVkIHNob3VsZFxuICAgIC8vIG5vdCBiZSBlbnF1ZXVlZCB0byBiZSBkaXNwbGF5ZWQgYWdhaW4uXG4gICAgY29uc3QgbmV3SGludHNUb0VucXVldWUgPSBhY3Rpb24uaGludHMuZmlsdGVyKG5ld0hpbnQgPT5cbiAgICAgIHN0YXRlLnNlZW5IaW50cy5ldmVyeShzZWVuSGludCA9PiBuZXdIaW50LmhpbnRJZCAhPT0gc2VlbkhpbnQuaGludElkKVxuICAgICk7XG5cbiAgICAvLyBhbnkgY3VycmVudGx5LWVucXVldWVkIGNvbnRleHR1YWwgaGludHMgc2hvdWxkIGJlIHJlbW92ZWRcbiAgICBjb25zdCB1bnNlZW5Ob25Db250ZXh0dWFsSGludHMgPSBzdGF0ZS51bnNlZW5IaW50cy5maWx0ZXIoXG4gICAgICBoaW50ID0+IGhpbnQuaGludFR5cGUgIT09ICdjb250ZXh0dWFsJ1xuICAgICk7XG5cbiAgICAvLyB1bnNlZW4gY29udGV4dHVhbCBoaW50cyBnbyB0byBmcm9udCBvZiBxdWV1ZVxuICAgIGNvbnN0IG5ld1Vuc2VlbkhpbnRzID0gbmV3SGludHNUb0VucXVldWVcbiAgICAgIC5maWx0ZXIoaGludCA9PiAhaGludC5hbHJlYWR5U2VlbilcbiAgICAgIC5jb25jYXQodW5zZWVuTm9uQ29udGV4dHVhbEhpbnRzKTtcblxuICAgIC8vIHNlZW4gY29udGV4dHVhbCBoaW50cyBnbyB0byBiYWNrIG9mIHF1ZXVlXG4gICAgY29uc3QgbmV3U2VlbkhpbnRzID0gc2VlbkhpbnRzLmNvbmNhdChcbiAgICAgIG5ld0hpbnRzVG9FbnF1ZXVlLmZpbHRlcihoaW50ID0+IGhpbnQuYWxyZWFkeVNlZW4pXG4gICAgKTtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgdW5zZWVuSGludHM6IG5ld1Vuc2VlbkhpbnRzLFxuICAgICAgc2VlbkhpbnRzOiBuZXdTZWVuSGludHMsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmV4cG9ydCBjb25zdCBlbnF1ZXVlSGludHMgPSAoaGludHMsIGhpbnRzVXNlZElkcykgPT4gKHtcbiAgdHlwZTogRU5RVUVVRV9ISU5UUyxcbiAgaGludHMsXG4gIGhpbnRzVXNlZElkcyxcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2hvd05leHRIaW50ID0gKCkgPT4gKHtcbiAgdHlwZTogU0hPV19ORVhUX0hJTlQsXG59KTtcblxuZXhwb3J0IGNvbnN0IGRpc3BsYXlNaXNzaW5nQmxvY2tIaW50cyA9IGhpbnRzID0+ICh7XG4gIHR5cGU6IERJU1BMQVlfTUlTU0lOR19CTE9DS19ISU5UUyxcbiAgaGludHMsXG59KTtcbiIsIi8qKiBAZmlsZSBTdG9yZSBmZWVkYmFjayBhYm91dCB0aGUgc3R1ZGVudCdzIHNvbHV0aW9uICovXG5cbmNvbnN0IFNIT1dfRkVFREJBQ0sgPSAnZmVlZGJhY2svc2hvd19mZWVkYmFjayc7XG5jb25zdCBISURFX0ZFRURCQUNLID0gJ2ZlZWRiYWNrL2hpZGVfZmVlZGJhY2snO1xuY29uc3QgU0VUX0FDSElFVkVNRU5UUyA9ICdmZWVkYmFjay9zZXRfYWNoaWV2ZW1udHMnO1xuY29uc3QgU0VUX0JMT0NLX0xJTUlUID0gJ2ZlZWRiYWNrL3NldF9ibG9ja19saW1pdCc7XG5jb25zdCBTRVRfRkVFREJBQ0tfREFUQSA9ICdmZWVkYmFjay9zZXRfZGF0YSc7XG5cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgZGlzcGxheWluZ0ZlZWRiYWNrOiBmYWxzZSxcbiAgZGlzcGxheWluZ0NvZGU6IGZhbHNlLFxuICBkaXNwbGF5aW5nU2hhcmVDb250cm9sczogZmFsc2UsXG5cbiAgaXNDaGFsbGVuZ2U6IGZhbHNlLFxuICBpc1BlcmZlY3Q6IHRydWUsXG4gIGJsb2Nrc1VzZWQ6IDAsXG4gIGJsb2NrTGltaXQ6IHVuZGVmaW5lZCxcbiAgYWNoaWV2ZW1lbnRzOiBbXSxcbiAgZGlzcGxheUZ1bm9tZXRlcjogdHJ1ZSxcbiAgc3R1ZGVudENvZGU6IHtcbiAgICBtZXNzYWdlOiAnJyxcbiAgICBjb2RlOiAnJyxcbiAgfSxcbiAgZmVlZGJhY2tJbWFnZTogbnVsbCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbikge1xuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNIT1dfRkVFREJBQ0spIHtcbiAgICBjb25zdCB7ZGlzcGxheWluZ1NoYXJlQ29udHJvbHN9ID0gYWN0aW9uO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRpc3BsYXlpbmdGZWVkYmFjazogdHJ1ZSxcbiAgICAgIGRpc3BsYXlpbmdTaGFyZUNvbnRyb2xzLFxuICAgIH07XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSBISURFX0ZFRURCQUNLKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGlzcGxheWluZ0ZlZWRiYWNrOiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0JMT0NLX0xJTUlUKSB7XG4gICAgY29uc3Qge2Jsb2NrTGltaXR9ID0gYWN0aW9uO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGJsb2NrTGltaXQsXG4gICAgfTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9GRUVEQkFDS19EQVRBKSB7XG4gICAgY29uc3Qge1xuICAgICAgaXNDaGFsbGVuZ2UsXG4gICAgICBpc1BlcmZlY3QsXG4gICAgICBibG9ja3NVc2VkLFxuICAgICAgZGlzcGxheUZ1bm9tZXRlcixcbiAgICAgIHN0dWRlbnRDb2RlLFxuICAgICAgZmVlZGJhY2tJbWFnZSxcbiAgICB9ID0gYWN0aW9uO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGlzQ2hhbGxlbmdlLFxuICAgICAgaXNQZXJmZWN0LFxuICAgICAgYmxvY2tzVXNlZCxcbiAgICAgIGRpc3BsYXlGdW5vbWV0ZXIsXG4gICAgICBzdHVkZW50Q29kZSxcbiAgICAgIGZlZWRiYWNrSW1hZ2UsXG4gICAgfTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9BQ0hJRVZFTUVOVFMpIHtcbiAgICBjb25zdCB7YWNoaWV2ZW1lbnRzfSA9IGFjdGlvbjtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhY2hpZXZlbWVudHMsXG4gICAgfTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59XG5cbmV4cG9ydCBjb25zdCBzaG93RmVlZGJhY2sgPSAoZGlzcGxheWluZ1NoYXJlQ29udHJvbHMgPSBmYWxzZSkgPT4gKHtcbiAgdHlwZTogU0hPV19GRUVEQkFDSyxcbiAgZGlzcGxheWluZ1NoYXJlQ29udHJvbHMsXG59KTtcblxuZXhwb3J0IGNvbnN0IGhpZGVGZWVkYmFjayA9ICgpID0+ICh7XG4gIHR5cGU6IEhJREVfRkVFREJBQ0ssXG59KTtcblxuZXhwb3J0IGNvbnN0IHNldEJsb2NrTGltaXQgPSBibG9ja0xpbWl0ID0+ICh7XG4gIHR5cGU6IFNFVF9CTE9DS19MSU1JVCxcbiAgYmxvY2tMaW1pdCxcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2V0RmVlZGJhY2tEYXRhID0gcHJvcHMgPT4gKHtcbiAgdHlwZTogU0VUX0ZFRURCQUNLX0RBVEEsXG4gIC4uLnByb3BzLFxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRBY2hpZXZlbWVudHMgPSBhY2hpZXZlbWVudHMgPT4gKHtcbiAgdHlwZTogU0VUX0FDSElFVkVNRU5UUyxcbiAgYWNoaWV2ZW1lbnRzLFxufSk7XG4iLCIvKipcbiAqIEEgZHVjayBtb2R1bGUgZm9yIGluc3RydWN0aW9ucywgcGFydGljdWxhcmx5IGluc3RydWN0aW9ucyB0aGF0IHdlIHNob3cgaW5cbiAqIHRoZSB0b3AgcGFuZSBhYm92ZSB0aGUgY29kZSB3b3Jrc3BhY2UuIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGJvdGggdGhlIGFjdGlvbnNcbiAqIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aGlzIGZlYXR1cmUsIGFuZCB0aGUgcmVkdWNlciB0aGF0IHNldHMgc3RhdGUgYmFzZWRcbiAqIG9mZiBvZiB0aG9zZSBhY3Rpb25zLlxuICovXG5cbmltcG9ydCB7dHJ5U2V0TG9jYWxTdG9yYWdlLCB0cnlHZXRMb2NhbFN0b3JhZ2V9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgU0VUX0NPTlNUQU5UUyA9ICdpbnN0cnVjdGlvbnMvU0VUX0NPTlNUQU5UUyc7XG5jb25zdCBUT0dHTEVfSU5TVFJVQ1RJT05TX0NPTExBUFNFRCA9XG4gICdpbnN0cnVjdGlvbnMvVE9HR0xFX0lOU1RSVUNUSU9OU19DT0xMQVBTRUQnO1xuY29uc3QgU0VUX0lOU1RSVUNUSU9OU19SRU5ERVJFRF9IRUlHSFQgPVxuICAnaW5zdHJ1Y3Rpb25zL1NFVF9JTlNUUlVDVElPTlNfUkVOREVSRURfSEVJR0hUJztcbmNvbnN0IFNFVF9JTlNUUlVDVElPTlNfTUFYX0hFSUdIVF9ORUVERUQgPVxuICAnaW5zdHJ1Y3Rpb25zL1NFVF9JTlNUUlVDVElPTlNfTUFYX0hFSUdIVF9ORUVERUQnO1xuY29uc3QgU0VUX0lOU1RSVUNUSU9OU19NQVhfSEVJR0hUX0FWQUlMQUJMRSA9XG4gICdpbnN0cnVjdGlvbnMvU0VUX0lOU1RSVUNUSU9OU19NQVhfSEVJR0hUX0FWQUlMQUJMRSc7XG5jb25zdCBTRVRfQUxMT1dfSU5TVFJVQ1RJT05TX1JFU0laRSA9XG4gICdpbnN0cnVjdGlvbnMvU0VUX0FMTE9XX0lOU1RSVUNUSU9OU19SRVNJWkUnO1xuY29uc3QgU0VUX0hBU19BVVRIT1JFRF9ISU5UUyA9ICdpbnN0cnVjdGlvbnMvU0VUX0hBU19BVVRIT1JFRF9ISU5UUyc7XG5jb25zdCBTRVRfRkVFREJBQ0sgPSAnaW5zdHJ1Y3Rpb25zL1NFVF9GRUVEQkFDSyc7XG5jb25zdCBISURFX09WRVJMQVkgPSAnaW5zdHJ1Y3Rpb25zL0hJREVfT1ZFUkxBWSc7XG5jb25zdCBTRVRfRFlOQU1JQ19JTlNUUlVDVElPTlNfREVGQVVMVFMgPVxuICAnaW5zdHJ1Y3Rpb25zL1NFVF9EWU5BTUlDX0lOU1RSVUNUSU9OU19ERUZBVUxUUyc7XG5jb25zdCBTRVRfRFlOQU1JQ19JTlNUUlVDVElPTlNfS0VZID1cbiAgJ2luc3RydWN0aW9ucy9TRVRfRFlOQU1JQ19JTlNUUlVDVElPTlNfS0VZJztcbmNvbnN0IExPQ0FMU1RPUkFHRV9PVkVSTEFZX1NFRU5fRkxBRyA9ICdpbnN0cnVjdGlvbnNPdmVybGF5U2Vlbk9uY2UnO1xuY29uc3QgU0VUX0RZTkFNSUNfSU5TVFJVQ1RJT05TX0RJU01JU1NfQ0FMTEJBQ0sgPVxuICAnaW5zdHJ1Y3Rpb25zL1NFVF9EWU5BTUlDX0lOU1RSVUNUSU9OU19ESVNNSVNTX0NBTExCQUNLJztcbmNvbnN0IFNFVF9UVFNfQVVUT1BMQVlfRU5BQkxFRF9GT1JfTEVWRUwgPVxuICAnaW5zdHJ1Y3Rpb25zL1NFVF9UVFNfQVVUT1BMQVlfRU5BQkxFRF9GT1JfTEVWRUwnO1xuY29uc3QgU0VUX0NPREVfUkVWSUVXX0VOQUJMRURfRk9SX0xFVkVMID1cbiAgJ2luc3RydWN0aW9ucy9TRVRfQ09ERV9SRVZJRVdfRU5BQkxFRF9GT1JfTEVWRUwnO1xuY29uc3QgU0VUX1RBX1JVQlJJQyA9ICdpbnN0cnVjdGlvbnMvU0VUX1RBX1JVQlJJQyc7XG5cbi8qKlxuICogU29tZSBzY2VuYXJpb3M6XG4gKiAoMSkgUHJvamVjdHMgbGV2ZWwgdy9vIGluc3RydWN0aW9uczogc2hvcnRJbnN0cnVjdGlvbnMgYW5kIGxvbmdJbnN0cnVjdGlvbnNcbiAqICAgICB3aWxsIGJvdGggYmUgdW5kZWZpbmVkXG4gKiAoMikgQ1NQIGxldmVsOiBKdXN0IGxvbmdJbnN0cnVjdGlvbnNcbiAqICgzKSBDU0YgbGV2ZWwgd2l0aCBvbmx5IG9uZSBzZXQgb2YgaW5zdHJ1Y3Rpb25zOiBKdXN0IHNob3J0SW5zdHJ1Y3Rpb25zXG4gKiAoNCkgQ1NGIGxldmVsIHdpdGggdHdvIHNldHMgb2YgaW5zdHJ1Y3Rpb25zOiBzaG9ydEluc3RydWN0aW9ucyBhbmRcbiAqICAgICBsb25nSW5zdHJ1Y3Rpb25zIHdpbGwgYm90aCBiZSBzZXQuXG4gKiAoNSkgQ1NGIGxldmVsIHdpdGgganVzdCBsb25nIGluc3RydWN0aW9uc1xuICovXG5jb25zdCBpbnN0cnVjdGlvbnNJbml0aWFsU3RhdGUgPSB7XG4gIG5vSW5zdHJ1Y3Rpb25zV2hlbkNvbGxhcHNlZDogZmFsc2UsXG4gIHNob3J0SW5zdHJ1Y3Rpb25zOiB1bmRlZmluZWQsXG4gIHNob3J0SW5zdHJ1Y3Rpb25zMjogdW5kZWZpbmVkLFxuICBsb25nSW5zdHJ1Y3Rpb25zOiB1bmRlZmluZWQsXG4gIGR5bmFtaWNJbnN0cnVjdGlvbnM6IHVuZGVmaW5lZCxcbiAgZHluYW1pY0luc3RydWN0aW9uc0RlZmF1bHRzOiB1bmRlZmluZWQsXG4gIGR5bmFtaWNJbnN0cnVjdGlvbnNLZXk6IHVuZGVmaW5lZCxcbiAgdGVhY2hlck1hcmtkb3duOiB1bmRlZmluZWQsXG4gIGhhc0NvbnRhaW5lZExldmVsczogZmFsc2UsXG4gIGlzQ29sbGFwc2VkOiBmYWxzZSxcbiAgLy8gVGhlIGFtb3VudCBvZiB2ZXJ0aWNhbCBzcGFjZSBjb25zdW1lZCBieSB0aGUgVG9wSW5zdHJ1Y3Rpb25zIGNvbXBvbmVudFxuICByZW5kZXJlZEhlaWdodDogMCxcbiAgLy8gVGhlIGFtb3VudCBvZiB2ZXJ0aWNhbCBzcGFjZSBjb25zdW1lZCBieSB0aGUgVG9wSW5zdHJ1Y3Rpb25zIGNvbXBvbmVudFxuICAvLyB3aGVuIGl0IGlzIG5vdCBjb2xsYXBzZWRcbiAgZXhwYW5kZWRIZWlnaHQ6IDAsXG4gIC8vIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB2ZXJ0aWNhbCBzcGFjZSBuZWVkZWQgYnkgdGhlIFRvcEluc3RydWN0aW9ucyBjb21wb25lbnQuXG4gIG1heE5lZWRlZEhlaWdodDogSW5maW5pdHksXG4gIC8vIFRoZSBtYXhpbXVtIGhlaWdodCB3ZSdsbCBhbGxvdyB0aGUgcmVzaXplciB0byBkcmFnIHRvLiBUaGlzIGlzIGJhc2VkIGluXG4gIC8vIHBhcnQgb2ZmIG9mIHRoZSBzaXplIG9mIHRoZSBjb2RlIHdvcmtzcGFjZS5cbiAgbWF4QXZhaWxhYmxlSGVpZ2h0OiBJbmZpbml0eSxcbiAgYWxsb3dSZXNpemU6IHRydWUsXG4gIGhhc0F1dGhvcmVkSGludHM6IGZhbHNlLFxuICAvLyByZXByZXNlbnRzIGlmIHRoZSB1c2VyIGlzIGluIGFueSB1bmFyY2hpdmVkIHNlY3Rpb24gd2hlcmUgdHRzIGF1dG9wbGF5IGlzIGVuYWJsZWRcbiAgLy8gbG9naWMgZGVmaW5lZCBpbiBzY3JpcHRfbGV2ZWxzX2NvbnRyb2xsZXIjc2hvd1xuICB0dHNBdXRvcGxheUVuYWJsZWRGb3JMZXZlbDogZmFsc2UsXG4gIGNvZGVSZXZpZXdFbmFibGVkRm9yTGV2ZWw6IGZhbHNlLFxuICBvdmVybGF5VmlzaWJsZTogZmFsc2UsXG4gIGxldmVsVmlkZW9zOiBbXSxcbiAgbWFwUmVmZXJlbmNlOiB1bmRlZmluZWQsXG4gIHJlZmVyZW5jZUxpbmtzOiBbXSxcbiAgbXV0ZUJhY2tncm91bmRNdXNpYzogKCkgPT4ge30sXG4gIHVubXV0ZUJhY2tncm91bmRNdXNpYzogKCkgPT4ge30sXG4gIHByb2dyYW1taW5nRW52aXJvbm1lbnQ6IG51bGwsXG4gIHRhUnVicmljOiBudWxsLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSA9IHsuLi5pbnN0cnVjdGlvbnNJbml0aWFsU3RhdGV9LCBhY3Rpb24pIHtcbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfQ09OU1RBTlRTKSB7XG4gICAgaWYgKHN0YXRlLnNob3J0SW5zdHJ1Y3Rpb25zIHx8IHN0YXRlLmxvbmdJbnN0cnVjdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5zdHJ1Y3Rpb25zIGNvbnN0YW50cyBhbHJlYWR5IHNldCcpO1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICBub0luc3RydWN0aW9uc1doZW5Db2xsYXBzZWQsXG4gICAgICBzaG9ydEluc3RydWN0aW9ucyxcbiAgICAgIHNob3J0SW5zdHJ1Y3Rpb25zMixcbiAgICAgIGxvbmdJbnN0cnVjdGlvbnMsXG4gICAgICBkeW5hbWljSW5zdHJ1Y3Rpb25zLFxuICAgICAgaGFzQ29udGFpbmVkTGV2ZWxzLFxuICAgICAgb3ZlcmxheVZpc2libGUsXG4gICAgICB0ZWFjaGVyTWFya2Rvd24sXG4gICAgICBsZXZlbFZpZGVvcyxcbiAgICAgIG1hcFJlZmVyZW5jZSxcbiAgICAgIHJlZmVyZW5jZUxpbmtzLFxuICAgICAgbXV0ZUJhY2tncm91bmRNdXNpYyxcbiAgICAgIHVubXV0ZUJhY2tncm91bmRNdXNpYyxcbiAgICAgIHByb2dyYW1taW5nRW52aXJvbm1lbnQsXG4gICAgfSA9IGFjdGlvbjtcbiAgICBsZXQgaXNDb2xsYXBzZWQgPSBzdGF0ZS5pc0NvbGxhcHNlZDtcbiAgICBpZiAoIWxvbmdJbnN0cnVjdGlvbnMgJiYgIWhhc0NvbnRhaW5lZExldmVscykge1xuICAgICAgLy8gSWYgd2Ugb25seSBoYXZlIHNob3J0IGluc3RydWN0aW9ucywgd2Ugd2FudCB0byBiZSBpbiBjb2xsYXBzZWQgbW9kZVxuICAgICAgaXNDb2xsYXBzZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIG5vSW5zdHJ1Y3Rpb25zV2hlbkNvbGxhcHNlZCxcbiAgICAgIHNob3J0SW5zdHJ1Y3Rpb25zLFxuICAgICAgc2hvcnRJbnN0cnVjdGlvbnMyLFxuICAgICAgbG9uZ0luc3RydWN0aW9ucyxcbiAgICAgIGR5bmFtaWNJbnN0cnVjdGlvbnMsXG4gICAgICB0ZWFjaGVyTWFya2Rvd24sXG4gICAgICBoYXNDb250YWluZWRMZXZlbHMsXG4gICAgICBvdmVybGF5VmlzaWJsZSxcbiAgICAgIGlzQ29sbGFwc2VkLFxuICAgICAgbGV2ZWxWaWRlb3MsXG4gICAgICBtYXBSZWZlcmVuY2UsXG4gICAgICByZWZlcmVuY2VMaW5rcyxcbiAgICAgIG11dGVCYWNrZ3JvdW5kTXVzaWMsXG4gICAgICB1bm11dGVCYWNrZ3JvdW5kTXVzaWMsXG4gICAgICBwcm9ncmFtbWluZ0Vudmlyb25tZW50LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBUT0dHTEVfSU5TVFJVQ1RJT05TX0NPTExBUFNFRCkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgaXNDb2xsYXBzZWQ6ICFzdGF0ZS5pc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0lOU1RSVUNUSU9OU19SRU5ERVJFRF9IRUlHSFQgJiYgc3RhdGUuYWxsb3dSZXNpemUpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIHJlbmRlcmVkSGVpZ2h0OiBhY3Rpb24uaGVpZ2h0LFxuICAgICAgZXhwYW5kZWRIZWlnaHQ6ICFzdGF0ZS5pc0NvbGxhcHNlZCA/IGFjdGlvbi5oZWlnaHQgOiBzdGF0ZS5leHBhbmRlZEhlaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0lOU1RSVUNUSU9OU19NQVhfSEVJR0hUX05FRURFRCAmJiBzdGF0ZS5hbGxvd1Jlc2l6ZSkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgbWF4TmVlZGVkSGVpZ2h0OiBhY3Rpb24ubWF4TmVlZGVkSGVpZ2h0LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi50eXBlID09PSBTRVRfSU5TVFJVQ1RJT05TX01BWF9IRUlHSFRfQVZBSUxBQkxFICYmXG4gICAgYWN0aW9uLm1heEF2YWlsYWJsZUhlaWdodCAhPT0gc3RhdGUubWF4QXZhaWxhYmxlSGVpZ2h0ICYmXG4gICAgc3RhdGUuYWxsb3dSZXNpemVcbiAgKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICBtYXhBdmFpbGFibGVIZWlnaHQ6IGFjdGlvbi5tYXhBdmFpbGFibGVIZWlnaHQsXG4gICAgICByZW5kZXJlZEhlaWdodDogTWF0aC5taW4oYWN0aW9uLm1heEF2YWlsYWJsZUhlaWdodCwgc3RhdGUucmVuZGVyZWRIZWlnaHQpLFxuICAgICAgZXhwYW5kZWRIZWlnaHQ6IE1hdGgubWluKGFjdGlvbi5tYXhBdmFpbGFibGVIZWlnaHQsIHN0YXRlLmV4cGFuZGVkSGVpZ2h0KSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0FMTE9XX0lOU1RSVUNUSU9OU19SRVNJWkUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbGxvd1Jlc2l6ZTogYWN0aW9uLmFsbG93UmVzaXplLFxuICAgIH07XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9IQVNfQVVUSE9SRURfSElOVFMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIGhhc0F1dGhvcmVkSGludHM6IGFjdGlvbi5oYXNBdXRob3JlZEhpbnRzLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfVFRTX0FVVE9QTEFZX0VOQUJMRURfRk9SX0xFVkVMKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICB0dHNBdXRvcGxheUVuYWJsZWRGb3JMZXZlbDogYWN0aW9uLnR0c0F1dG9wbGF5RW5hYmxlZEZvckxldmVsLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfQ09ERV9SRVZJRVdfRU5BQkxFRF9GT1JfTEVWRUwpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIGNvZGVSZXZpZXdFbmFibGVkRm9yTGV2ZWw6IGFjdGlvbi5jb2RlUmV2aWV3RW5hYmxlZEZvckxldmVsLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfRkVFREJBQ0spIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIGZlZWRiYWNrOiBhY3Rpb24uZmVlZGJhY2ssXG4gICAgfSk7XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IEhJREVfT1ZFUkxBWSkge1xuICAgIGlmIChzdGF0ZS5keW5hbWljSW5zdHJ1Y3Rpb25zRGlzbWlzc0NhbGxiYWNrKSB7XG4gICAgICBzdGF0ZS5keW5hbWljSW5zdHJ1Y3Rpb25zRGlzbWlzc0NhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICBvdmVybGF5VmlzaWJsZTogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9EWU5BTUlDX0lOU1RSVUNUSU9OU19ERUZBVUxUUykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgZHluYW1pY0luc3RydWN0aW9uc0RlZmF1bHRzOiBhY3Rpb24uZHluYW1pY0luc3RydWN0aW9uc0RlZmF1bHRzLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfRFlOQU1JQ19JTlNUUlVDVElPTlNfS0VZKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICBkeW5hbWljSW5zdHJ1Y3Rpb25zS2V5OiBhY3Rpb24uZHluYW1pY0luc3RydWN0aW9uc0tleSxcbiAgICAgIG92ZXJsYXlWaXNpYmxlOiBhY3Rpb24ub3B0aW9ucyAmJiBhY3Rpb24ub3B0aW9ucy5zaG93T3ZlcmxheSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0RZTkFNSUNfSU5TVFJVQ1RJT05TX0RJU01JU1NfQ0FMTEJBQ0spIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIGR5bmFtaWNJbnN0cnVjdGlvbnNEaXNtaXNzQ2FsbGJhY2s6XG4gICAgICAgIGFjdGlvbi5keW5hbWljSW5zdHJ1Y3Rpb25zRGlzbWlzc0NhbGxiYWNrLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfVEFfUlVCUklDKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICB0YVJ1YnJpYzogYWN0aW9uLnRhUnVicmljLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5leHBvcnQgY29uc3Qgc2V0SW5zdHJ1Y3Rpb25zQ29uc3RhbnRzID0gKHtcbiAgbm9JbnN0cnVjdGlvbnNXaGVuQ29sbGFwc2VkLFxuICBzaG9ydEluc3RydWN0aW9ucyxcbiAgc2hvcnRJbnN0cnVjdGlvbnMyLFxuICBsb25nSW5zdHJ1Y3Rpb25zLFxuICBkeW5hbWljSW5zdHJ1Y3Rpb25zLFxuICBoYXNDb250YWluZWRMZXZlbHMsXG4gIG92ZXJsYXlWaXNpYmxlLFxuICB0ZWFjaGVyTWFya2Rvd24sXG4gIGxldmVsVmlkZW9zLFxuICBtYXBSZWZlcmVuY2UsXG4gIHJlZmVyZW5jZUxpbmtzLFxuICBtdXRlQmFja2dyb3VuZE11c2ljLFxuICB1bm11dGVCYWNrZ3JvdW5kTXVzaWMsXG4gIHByb2dyYW1taW5nRW52aXJvbm1lbnQsXG59KSA9PiAoe1xuICB0eXBlOiBTRVRfQ09OU1RBTlRTLFxuICBub0luc3RydWN0aW9uc1doZW5Db2xsYXBzZWQsXG4gIHNob3J0SW5zdHJ1Y3Rpb25zLFxuICBzaG9ydEluc3RydWN0aW9uczIsXG4gIGxvbmdJbnN0cnVjdGlvbnMsXG4gIGR5bmFtaWNJbnN0cnVjdGlvbnMsXG4gIGhhc0NvbnRhaW5lZExldmVscyxcbiAgb3ZlcmxheVZpc2libGUsXG4gIHRlYWNoZXJNYXJrZG93bixcbiAgbGV2ZWxWaWRlb3MsXG4gIG1hcFJlZmVyZW5jZSxcbiAgcmVmZXJlbmNlTGlua3MsXG4gIG11dGVCYWNrZ3JvdW5kTXVzaWMsXG4gIHVubXV0ZUJhY2tncm91bmRNdXNpYyxcbiAgcHJvZ3JhbW1pbmdFbnZpcm9ubWVudCxcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2V0SW5zdHJ1Y3Rpb25zUmVuZGVyZWRIZWlnaHQgPSBoZWlnaHQgPT4gKHtcbiAgdHlwZTogU0VUX0lOU1RSVUNUSU9OU19SRU5ERVJFRF9IRUlHSFQsXG4gIGhlaWdodCxcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZXMgd2hldGhlciBpbnN0cnVjdGlvbnMgYXJlIGN1cnJlbnRseSBjb2xsYXBzZWQuXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVJbnN0cnVjdGlvbnNDb2xsYXBzZWQgPSAoKSA9PiAoe1xuICB0eXBlOiBUT0dHTEVfSU5TVFJVQ1RJT05TX0NPTExBUFNFRCxcbn0pO1xuXG4vKipcbiAqIFNldHMgdGhlIG1heGltdW0gYW1vdW50IG9mIGhlaWdodCBuZWVkIGJ5IG91ciBpbnN0cnVjdGlvbnMgY29tcG9uZW50IGlmIGl0XG4gKiB3ZXJlIHRvIHJlbmRlciBpdHNlbGYgd2l0aCBubyBzY3JvbGxiYXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRJbnN0cnVjdGlvbnNNYXhIZWlnaHROZWVkZWQgPSBoZWlnaHQgPT4gKHtcbiAgdHlwZTogU0VUX0lOU1RSVUNUSU9OU19NQVhfSEVJR0hUX05FRURFRCxcbiAgbWF4TmVlZGVkSGVpZ2h0OiBoZWlnaHQsXG59KTtcblxuLyoqXG4gKiBTZXQgdGhlIG1heCBoZWlnaHQgb2YgdGhlIGluc3RydWN0aW9ucyBwYW5lbFxuICogQHBhcmFtIHtudW1iZXJ9IG1heEF2YWlsYWJsZUhlaWdodCAtIERvbid0IGxldCB1c2VyIGRyYWcgaW5zdHJ1Y3Rpb25zIHBhbmUgdG8gYmVcbiAqICAgbGFyZ2VyIHRoYW4gdGhpcyBudW1iZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRJbnN0cnVjdGlvbnNNYXhIZWlnaHRBdmFpbGFibGUgPSBoZWlnaHQgPT4gKHtcbiAgdHlwZTogU0VUX0lOU1RSVUNUSU9OU19NQVhfSEVJR0hUX0FWQUlMQUJMRSxcbiAgbWF4QXZhaWxhYmxlSGVpZ2h0OiBoZWlnaHQsXG59KTtcblxuZXhwb3J0IGNvbnN0IHNldEFsbG93SW5zdHJ1Y3Rpb25zUmVzaXplID0gYWxsb3dSZXNpemUgPT4gKHtcbiAgdHlwZTogU0VUX0FMTE9XX0lOU1RSVUNUSU9OU19SRVNJWkUsXG4gIGFsbG93UmVzaXplLFxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRIYXNBdXRob3JlZEhpbnRzID0gaGFzQXV0aG9yZWRIaW50cyA9PiAoe1xuICB0eXBlOiBTRVRfSEFTX0FVVEhPUkVEX0hJTlRTLFxuICBoYXNBdXRob3JlZEhpbnRzLFxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRUdHNBdXRvcGxheUVuYWJsZWRGb3JMZXZlbCA9IHR0c0F1dG9wbGF5RW5hYmxlZEZvckxldmVsID0+ICh7XG4gIHR5cGU6IFNFVF9UVFNfQVVUT1BMQVlfRU5BQkxFRF9GT1JfTEVWRUwsXG4gIHR0c0F1dG9wbGF5RW5hYmxlZEZvckxldmVsLFxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRDb2RlUmV2aWV3RW5hYmxlZEZvckxldmVsID0gY29kZVJldmlld0VuYWJsZWRGb3JMZXZlbCA9PiAoe1xuICB0eXBlOiBTRVRfQ09ERV9SRVZJRVdfRU5BQkxFRF9GT1JfTEVWRUwsXG4gIGNvZGVSZXZpZXdFbmFibGVkRm9yTGV2ZWwsXG59KTtcblxuZXhwb3J0IGNvbnN0IHNldEZlZWRiYWNrID0gZmVlZGJhY2sgPT4gKHtcbiAgdHlwZTogU0VUX0ZFRURCQUNLLFxuICBmZWVkYmFjayxcbn0pO1xuXG5leHBvcnQgY29uc3QgaGlkZU92ZXJsYXkgPSAoKSA9PiAoe1xuICB0eXBlOiBISURFX09WRVJMQVksXG59KTtcblxuZXhwb3J0IGNvbnN0IHNldER5bmFtaWNJbnN0cnVjdGlvbnNEZWZhdWx0cyA9IGR5bmFtaWNJbnN0cnVjdGlvbnNEZWZhdWx0cyA9PiAoe1xuICB0eXBlOiBTRVRfRFlOQU1JQ19JTlNUUlVDVElPTlNfREVGQVVMVFMsXG4gIGR5bmFtaWNJbnN0cnVjdGlvbnNEZWZhdWx0cyxcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2V0RHluYW1pY0luc3RydWN0aW9uc0tleSA9IChkeW5hbWljSW5zdHJ1Y3Rpb25zS2V5LCBvcHRpb25zKSA9PiAoe1xuICB0eXBlOiBTRVRfRFlOQU1JQ19JTlNUUlVDVElPTlNfS0VZLFxuICBkeW5hbWljSW5zdHJ1Y3Rpb25zS2V5LFxuICBvcHRpb25zLFxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXREeW5hbWljSW5zdHJ1Y3Rpb25zT3ZlcmxheURpc21pc3NDYWxsYmFjayA9XG4gIGR5bmFtaWNJbnN0cnVjdGlvbnNEaXNtaXNzQ2FsbGJhY2sgPT4gKHtcbiAgICB0eXBlOiBTRVRfRFlOQU1JQ19JTlNUUlVDVElPTlNfRElTTUlTU19DQUxMQkFDSyxcbiAgICBkeW5hbWljSW5zdHJ1Y3Rpb25zRGlzbWlzc0NhbGxiYWNrLFxuICB9KTtcblxuZXhwb3J0IGNvbnN0IHNldFRhUnVicmljID0gdGFSdWJyaWMgPT4gKHtcbiAgdHlwZTogU0VUX1RBX1JVQlJJQyxcbiAgdGFSdWJyaWMsXG59KTtcblxuLy8gSEVMUEVSU1xuXG4vKipcbiAqIEdpdmVuIGluc3RydWN0aW9ucyB0aGF0IGxvb2sgc29tZXRoaW5nIGxpa2VcbiAqICAgJ1twdWZmZXJwaWddIDxiPlB1ZmZlciBQaWdzPC9iPiByb2FtIGFyb3VuZCBzbG93bHk8YnIvPidcbiAqIFJlcGxhY2VzIFtwdWZmZXJwaWddIHdpdGggdGhlIGFwcHJvcHJpYXRlIGltYWdlIGh0bWwuXG4gKiBJbiBtb3N0IGNhc2VzLCBubyBzdWJzdGl0dXRpb25zIHdpbGwgYmUgbmVjZXNzYXJ5IGFuZCB0aGlzIG1ldGhvZCB3aWxsIGp1c3RcbiAqIHJldHVybiB0aGUgcGFzc2VkIGluIGh0bWxUZXh0LiBTdWJzdGl0dXRpb25zIGN1cnJlbnRseSBvbmx5IGV4aXN0IGZvciBzdGFyIHdhcnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFRleHRcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsIHN0cmluZz59IFtzdWJzdGl0dXRpb25zXSBEaWN0aW9uYXJ5IHN0cmluZ3MgKGtleXMpIHRvXG4gKiAgIHJlcGxhY2VtZW50IHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHN1YnN0aXR1dGVJbnN0cnVjdGlvbkltYWdlcyA9IChodG1sVGV4dCwgc3Vic3RpdHV0aW9ucykgPT4ge1xuICBpZiAoIWh0bWxUZXh0KSB7XG4gICAgcmV0dXJuIGh0bWxUZXh0O1xuICB9XG5cbiAgZm9yIChsZXQgcHJvcCBpbiBzdWJzdGl0dXRpb25zKSB7XG4gICAgY29uc3QgaW1hZ2VVcmwgPSBzdWJzdGl0dXRpb25zW3Byb3BdO1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkh0bWwgPVxuICAgICAgJzxzcGFuIGNsYXNzPVwiaW5zdHJ1Y3Rpb25zSW1hZ2VDb250YWluZXJcIj4nICtcbiAgICAgIGA8aW1nIHNyYz1cIiR7aW1hZ2VVcmx9XCIgY2xhc3M9XCJpbnN0cnVjdGlvbnNJbWFnZVwiLz5gICtcbiAgICAgICc8L3NwYW4+JztcbiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoJ1xcXFxbJyArIHByb3AgKyAnXFxcXF0nLCAnZycpO1xuICAgIGh0bWxUZXh0ID0gaHRtbFRleHQucmVwbGFjZShyZSwgc3Vic3RpdHV0aW9uSHRtbCk7XG4gIH1cblxuICByZXR1cm4gaHRtbFRleHQ7XG59O1xuXG4vKipcbiAqIEdpdmVuIGEgcGFydGljdWxhciBzZXQgb2YgY29uZmlnIG9wdGlvbnMsIGRldGVybWluZXMgd2hhdCBvdXIgaW5zdHJ1Y3Rpb25zXG4gKiBjb25zdGFudHMgc2hvdWxkIGJlXG4gKiBAcGFyYW0ge0FwcE9wdGlvbnNDb25maWd9IGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5sZXZlbC5zaG9ydEluc3RydWN0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5sZXZlbC5pbnN0cnVjdGlvbnMyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLmxldmVsLmxvbmdJbnN0cnVjdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcubGV2ZWwuZHluYW1pY0luc3RydWN0aW9uc1xuICogQHBhcmFtIHthcnJheX0gY29uZmlnLmxldmVsLmlucHV0T3V0cHV0VGFibGVcbiAqIEBwYXJhbSB7YXJyYXl9IGNvbmZpZy5sZXZlbC5sZXZlbFZpZGVvc1xuICogQHBhcmFtIHtzdGlybmd9IGNvbmZpZy5sZXZlbC5tYXBSZWZlcmVuY2UsXG4gKiBAcGFyYW0ge2FycmF5fSBjb25maWcubGV2ZWwucmVmZXJlbmNlTGlua3MsXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLmxvY2FsZVxuICogQHBhcmFtIHtib29sZWFufSBjb25maWcubm9JbnN0cnVjdGlvbnNXaGVuQ29sbGFwc2VkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbmZpZy5oYXNDb250YWluZWRMZXZlbHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcuc2tpbi5pbnN0cnVjdGlvbnMySW1hZ2VTdWJzdGl0dXRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLmxldmVsLnByb2dyYW1taW5nRW52aXJvbm1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBkZXRlcm1pbmVJbnN0cnVjdGlvbnNDb25zdGFudHMgPSBjb25maWcgPT4ge1xuICBjb25zdCB7XG4gICAgbGV2ZWwsXG4gICAgbm9JbnN0cnVjdGlvbnNXaGVuQ29sbGFwc2VkLFxuICAgIGhhc0NvbnRhaW5lZExldmVscyxcbiAgICB0ZWFjaGVyTWFya2Rvd24sXG4gICAgbXV0ZUJhY2tncm91bmRNdXNpYyxcbiAgICB1bm11dGVCYWNrZ3JvdW5kTXVzaWMsXG4gIH0gPSBjb25maWc7XG5cbiAgY29uc3Qge1xuICAgIGluc3RydWN0aW9uczIsXG4gICAgaW5wdXRPdXRwdXRUYWJsZSxcbiAgICBsZXZlbFZpZGVvcyxcbiAgICBtYXBSZWZlcmVuY2UsXG4gICAgcmVmZXJlbmNlTGlua3MsXG4gICAgcHJvZ3JhbW1pbmdFbnZpcm9ubWVudCxcbiAgfSA9IGxldmVsO1xuXG4gIGxldCB7bG9uZ0luc3RydWN0aW9ucywgc2hvcnRJbnN0cnVjdGlvbnMsIGR5bmFtaWNJbnN0cnVjdGlvbnN9ID0gbGV2ZWw7XG5cbiAgbGV0IHNob3J0SW5zdHJ1Y3Rpb25zMjtcblxuICBpZiAobm9JbnN0cnVjdGlvbnNXaGVuQ29sbGFwc2VkKSB7XG4gICAgLy8gQ1NQIG1vZGUgLSBXZSBkb250IGNhcmUgYWJvdXQgbG9jYWxlLCBhbmQgYWx3YXlzIHdhbnQgdG8gc2hvdyBFbmdsaXNoXG5cbiAgICAvLyBOZXZlciB1c2Ugc2hvcnQgaW5zdHJ1Y3Rpb25zIGluIENTUC4gSWYgdGhhdCdzIGFsbCB3ZSBoYXZlLCBtYWtlIHRoZW1cbiAgICAvLyBvdXIgbG9uZ0luc3RydWN0aW9ucyBpbnN0ZWFkXG4gICAgaWYgKHNob3J0SW5zdHJ1Y3Rpb25zICYmICFsb25nSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBsb25nSW5zdHJ1Y3Rpb25zID0gc2hvcnRJbnN0cnVjdGlvbnM7XG4gICAgfVxuICAgIHNob3J0SW5zdHJ1Y3Rpb25zID0gdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIHNob3J0SW5zdHJ1Y3Rpb25zMiA9IGluc3RydWN0aW9uczI7XG5cbiAgICAvLyBpZiB0aGUgdHdvIHNldHMgb2YgaW5zdHJ1Y3Rpb25zIGFyZSBpZGVudGljYWwsIG9ubHkgdXNlIHRoZSBzaG9ydFxuICAgIC8vIHZlcnNpb24gKHN1Y2ggdGhhdCB3ZSBkb250IGVuZCB1cCBtaW5pbWl6aW5nL2V4cGFuZGluZyBiZXR3ZWVuXG4gICAgLy8gdHdvIGlkZW50aWNhbCBzZXRzKS5cbiAgICBpZiAoc2hvcnRJbnN0cnVjdGlvbnMgPT09IGxvbmdJbnN0cnVjdGlvbnMpIHtcbiAgICAgIGxvbmdJbnN0cnVjdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBhbiBpbnB1dCBvdXRwdXQgdGFibGUsIHdlIHdhbnQgdG8gZW5zdXJlIHdlXG4gICAgLy8gaGF2ZSBsb25nIGluc3RydWN0aW9ucyAoZXZlbiBpZiBpZGVudGljYWwgdG8gc2hvcnQgaW5zdHJ1Y3Rpb25zKSBzaW5jZVxuICAgIC8vIHdlIG9ubHkgc2hvdyB0aGUgaW5wdXRPdXRwdXRUYWJsZSBpbiBub24tY29sbGFwc2VkIG1vZGUuXG4gICAgaWYgKGlucHV0T3V0cHV0VGFibGUpIHtcbiAgICAgIGxvbmdJbnN0cnVjdGlvbnMgPSBsb25nSW5zdHJ1Y3Rpb25zIHx8IHNob3J0SW5zdHJ1Y3Rpb25zO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuc2tpbi5pbnN0cnVjdGlvbnMySW1hZ2VTdWJzdGl0dXRpb25zKSB7XG4gICAgICBsb25nSW5zdHJ1Y3Rpb25zID0gc3Vic3RpdHV0ZUluc3RydWN0aW9uSW1hZ2VzKFxuICAgICAgICBsb25nSW5zdHJ1Y3Rpb25zLFxuICAgICAgICBjb25maWcuc2tpbi5pbnN0cnVjdGlvbnMySW1hZ2VTdWJzdGl0dXRpb25zXG4gICAgICApO1xuICAgICAgc2hvcnRJbnN0cnVjdGlvbnMgPSBzdWJzdGl0dXRlSW5zdHJ1Y3Rpb25JbWFnZXMoXG4gICAgICAgIHNob3J0SW5zdHJ1Y3Rpb25zLFxuICAgICAgICBjb25maWcuc2tpbi5pbnN0cnVjdGlvbnMySW1hZ2VTdWJzdGl0dXRpb25zXG4gICAgICApO1xuICAgICAgc2hvcnRJbnN0cnVjdGlvbnMyID0gc3Vic3RpdHV0ZUluc3RydWN0aW9uSW1hZ2VzKFxuICAgICAgICBzaG9ydEluc3RydWN0aW9uczIsXG4gICAgICAgIGNvbmZpZy5za2luLmluc3RydWN0aW9uczJJbWFnZVN1YnN0aXR1dGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5za2luLnJlcGxhY2VJbnN0cnVjdGlvbnMpIHtcbiAgICAgIGxvbmdJbnN0cnVjdGlvbnMgPSBjb25maWcuc2tpbi5yZXBsYWNlSW5zdHJ1Y3Rpb25zKGxvbmdJbnN0cnVjdGlvbnMpO1xuICAgICAgc2hvcnRJbnN0cnVjdGlvbnMgPSBjb25maWcuc2tpbi5yZXBsYWNlSW5zdHJ1Y3Rpb25zKHNob3J0SW5zdHJ1Y3Rpb25zKTtcbiAgICB9XG4gIH1cblxuICAvLyBJZiB0aGUgbGV2ZWwgaGFzIGluc3RydWN0aW9ucyB0byBzaG93LCB3ZSB3aWxsIGluIHNvbWUgc2l0dWF0aW9uc1xuICAvLyB3YW50IHRvIHNob3cgYW4gb3ZlcmxheS5cbiAgbGV0IGhhc0luc3RydWN0aW9uc1RvU2hvdyA9IHNob3J0SW5zdHJ1Y3Rpb25zIHx8IGxvbmdJbnN0cnVjdGlvbnM7XG4gIC8vIElmIHRoZSBsZXZlbCBpcyBzcGVjaWZpY2FsbHkgZmxhZ2dlZCBhcyBoYXZpbmcgaW1wb3J0YW50XG4gIC8vIGluc3RydWN0aW9ucyBvciBpZiBpdCBpcyB0aGUgZmlyc3QgbGV2ZWwgaW4gdGhlIGxlc3NvbiwgYWx3YXlzIHNob3dcbiAgLy8gdGhlIG92ZXJsYXkuIE90aGVyd2lzZSwgc2hvdyBpdCBleGFjdGx5IG9uY2Ugb24gdGhlIHZlcnkgZmlyc3RcbiAgLy8gbGV2ZWwgYSB1c2VyIGxvb2tzIGF0LlxuICBsZXQgb3ZlcmxheVNlZW4gPSB0cnlHZXRMb2NhbFN0b3JhZ2UoTE9DQUxTVE9SQUdFX09WRVJMQVlfU0VFTl9GTEFHLCBmYWxzZSk7XG4gIGxldCBzaG91bGRTaG93T3ZlcmxheSA9XG4gICAgaGFzSW5zdHJ1Y3Rpb25zVG9TaG93ICYmXG4gICAgIWhhc0NvbnRhaW5lZExldmVscyAmJlxuICAgIChjb25maWcubGV2ZWwuaW5zdHJ1Y3Rpb25zSW1wb3J0YW50IHx8XG4gICAgICBjb25maWcubGV2ZWxQb3NpdGlvbiA9PT0gMSB8fFxuICAgICAgIW92ZXJsYXlTZWVuKTtcbiAgaWYgKHNob3VsZFNob3dPdmVybGF5KSB7XG4gICAgdHJ5U2V0TG9jYWxTdG9yYWdlKExPQ0FMU1RPUkFHRV9PVkVSTEFZX1NFRU5fRkxBRywgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5vSW5zdHJ1Y3Rpb25zV2hlbkNvbGxhcHNlZDogISFub0luc3RydWN0aW9uc1doZW5Db2xsYXBzZWQsXG4gICAgb3ZlcmxheVZpc2libGU6ICEhc2hvdWxkU2hvd092ZXJsYXksXG4gICAgc2hvcnRJbnN0cnVjdGlvbnMsXG4gICAgc2hvcnRJbnN0cnVjdGlvbnMyLFxuICAgIGxvbmdJbnN0cnVjdGlvbnMsXG4gICAgZHluYW1pY0luc3RydWN0aW9ucyxcbiAgICB0ZWFjaGVyTWFya2Rvd24sXG4gICAgaGFzQ29udGFpbmVkTGV2ZWxzLFxuICAgIGxldmVsVmlkZW9zLFxuICAgIG1hcFJlZmVyZW5jZSxcbiAgICByZWZlcmVuY2VMaW5rcyxcbiAgICBtdXRlQmFja2dyb3VuZE11c2ljLFxuICAgIHVubXV0ZUJhY2tncm91bmRNdXNpYyxcbiAgICBwcm9ncmFtbWluZ0Vudmlyb25tZW50LFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldER5bmFtaWNJbnN0cnVjdGlvbnMoc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5keW5hbWljSW5zdHJ1Y3Rpb25zRGVmYXVsdHMgJiYgIXN0YXRlLmR5bmFtaWNJbnN0cnVjdGlvbnMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZS5keW5hbWljSW5zdHJ1Y3Rpb25zRGVmYXVsdHMsXG4gICAgLi4uKHN0YXRlLmR5bmFtaWNJbnN0cnVjdGlvbnMgJiYgSlNPTi5wYXJzZShzdGF0ZS5keW5hbWljSW5zdHJ1Y3Rpb25zKSksXG4gIH07XG59XG4iLCJjb25zdCBPUEVOX0RJQUxPRyA9ICdpbnN0cnVjdGlvbnNEaWFsb2cvT1BFTl9ESUFMT0cnO1xuY29uc3QgQ0xPU0VfRElBTE9HID0gJ2luc3RydWN0aW9uc0RpYWxvZy9DTE9TRV9ESUFMT0cnO1xuXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIG9wZW46IGZhbHNlLFxuICBpbWdPbmx5OiBmYWxzZSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbikge1xuICBpZiAoYWN0aW9uLnR5cGUgPT09IE9QRU5fRElBTE9HKSB7XG4gICAgaWYgKHN0YXRlLm9wZW4gPT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGlhbG9nIGlzIGFscmVhZHkgb3BlbicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgIGltZ09ubHk6IGFjdGlvbi5pbWdPbmx5LFxuICAgICAgaW1nVXJsOiBhY3Rpb24uaW1nVXJsLFxuICAgIH07XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IENMT1NFX0RJQUxPRykge1xuICAgIGlmIChzdGF0ZS5vcGVuID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkaWFsb2cgaXMgYWxyZWFkeSBjbG9zZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW46IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5leHBvcnQgY29uc3Qgb3BlbkRpYWxvZyA9ICh7aW1nT25seSwgaW1nVXJsfSkgPT4gKHtcbiAgdHlwZTogT1BFTl9ESUFMT0csXG4gIGltZ09ubHksXG4gIGltZ1VybCxcbn0pO1xuXG5leHBvcnQgY29uc3QgY2xvc2VEaWFsb2cgPSAoKSA9PiAoe3R5cGU6IENMT1NFX0RJQUxPR30pO1xuIiwidmFyIF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcblxudmFyIFNFVF9QQUdFX0NPTlNUQU5UUyA9ICdwYWdlQ29uc3RhbnRzL1NFVF9QQUdFX0NPTlNUQU5UUyc7XG5cbnZhciBBTExPV0VEX0tFWVMgPSBuZXcgU2V0KFtcbiAgJ3NraW5JZCcsXG4gICdzaG93TmV4dEhpbnQnLFxuICAndHRzU2hvcnRJbnN0cnVjdGlvbnNVcmwnLFxuICAndHRzTG9uZ0luc3RydWN0aW9uc1VybCcsXG4gICdhc3NldFVybCcsXG4gICdjYW5IYXZlRmVlZGJhY2tSZXZpZXdTdGF0ZScsXG4gICdleGFtcGxlU29sdXRpb25zJyxcbiAgJ2lzVmlld2luZ0FzSW5zdHJ1Y3RvckluVHJhaW5pbmcnLFxuICAnY2hhbm5lbElkJyxcbiAgJ2NvZGVPd25lcnNOYW1lJyxcbiAgJ2hhc0RhdGFNb2RlJyxcbiAgJ2hhc0Rlc2lnbk1vZGUnLFxuICAnaW5TdGFydEJsb2Nrc01vZGUnLFxuICAnaW5Ub29sYm94QmxvY2tzTW9kZScsXG4gICdpc0NoYWxsZW5nZUxldmVsJyxcbiAgJ2lzRW1iZWRWaWV3JyxcbiAgJ2lzUmVzcG9uc2l2ZScsXG4gICdpc0lmcmFtZUVtYmVkJyxcbiAgJ2lzUmVhZE9ubHlXb3Jrc3BhY2UnLFxuICAnaXNDb2RlUmV2aWV3aW5nJyxcbiAgJ2lzVmlld2luZ093blByb2plY3QnLFxuICAnaGFzQmFja2dyb3VuZE11c2ljJyxcbiAgJ2Rpc3BsYXlOb3RTdGFydGVkQmFubmVyJyxcbiAgJ2Rpc3BsYXlPbGRWZXJzaW9uQmFubmVyJyxcbiAgJ2lzU2hhcmVWaWV3JyxcbiAgJ2lzUHJvamVjdExldmVsJyxcbiAgJ2lzU3VibWl0dGFibGUnLFxuICAnaXNTdWJtaXR0ZWQnLFxuICAnbm9JbnN0cnVjdGlvbnNXaGVuQ29sbGFwc2VkJyxcbiAgJ3B1enpsZU51bWJlcicsXG4gICdsZXNzb25Ub3RhbCcsXG4gICdzaG93RGVidWdCdXR0b25zJyxcbiAgJ3Nob3dEZWJ1Z0NvbnNvbGUnLFxuICAnc2hvd0RlYnVnV2F0Y2gnLFxuICAnc2hvd0RlYnVnU2xpZGVyJyxcbiAgJ2RlYnVnQ29uc29sZURpc2FibGVkJyxcbiAgJ3Nob3dNYWtlclRvZ2dsZScsXG4gICdsb2NhbGUnLFxuICAnaGFzQ29udGFpbmVkTGV2ZWxzJyxcbiAgJ2lzRHJvcGxldCcsXG4gICdpc0Jsb2NrbHknLFxuICAnaXNCcmFtYmxlJyxcbiAgJ2lzTWluZWNyYWZ0JyxcbiAgJ3J1bkJ1dHRvblRleHQnLFxuICAndmlzdWFsaXphdGlvbkhhc1BhZGRpbmcnLFxuICAndmlzdWFsaXphdGlvbkluV29ya3NwYWNlJyxcbiAgJ2hpZGVDb29yZGluYXRlT3ZlcmxheScsXG4gICdoaWRlU291cmNlJyxcbiAgJ2hpZGVSdW5CdXR0b24nLFxuICAnaGlkZVJlc2V0QnV0dG9uJyxcbiAgJ3BsYXlzcGFjZVBob25lRnJhbWUnLFxuICAnbm9WaXN1YWxpemF0aW9uJyxcbiAgJ3BpbldvcmtzcGFjZVRvQm90dG9tJyxcbiAgJ3NtYWxsU3RhdGljQXZhdGFyJyxcbiAgJ2ZhaWx1cmVBdmF0YXInLFxuICAnYW5pR2lmVVJMJyxcbiAgJ2lucHV0T3V0cHV0VGFibGUnLFxuICAnc2hvd0FuaW1hdGlvbk1vZGUnLFxuICAnc3RhcnRJbkFuaW1hdGlvblRhYicsXG4gICdhbGxBbmltYXRpb25zU2luZ2xlRnJhbWUnLFxuICAnbm9uUmVzcG9uc2l2ZVZpc3VhbGl6YXRpb25Db2x1bW5XaWR0aCcsXG4gICdpczEzUGx1cycsXG4gICdpc1NpZ25lZEluJyxcbiAgJ2lzRWRpdGluZ1N0YXJ0U291cmNlcycsXG4gICd1c2VySWQnLFxuICAnaXNLMScsXG4gICd0ZXh0VG9TcGVlY2hFbmFibGVkJyxcbiAgJ2RvY3VtZW50YXRpb25VcmwnLFxuICAnYXBwVHlwZScsXG4gICduZXh0TGV2ZWxVcmwnLFxuICAnY3VycmVudFNjcmlwdExldmVsVXJsJyxcbiAgJ2lzUHJvamVjdFRlbXBsYXRlTGV2ZWwnLFxuICAnc2hvd1Byb2plY3RUZW1wbGF0ZVdvcmtzcGFjZUljb24nLFxuICAnc2VydmVyTGV2ZWxJZCcsXG4gICdzZXJ2ZXJQcm9qZWN0TGV2ZWxJZCcsXG4gICdzZXJ2ZXJTY3JpcHRJZCcsXG4gICdleHBvcnRBcHAnLFxuICAnd2lkZ2V0TW9kZScsXG4gICdsaWJyYXJpZXNFbmFibGVkJyxcbiAgJ3ZhbGlkYXRpb25FbmFibGVkJyxcbiAgJ2FpRW5hYmxlZCcsXG4gICdhaU1vZGVsSWQnLFxuICAnYWlNb2RlbE5hbWUnLFxuICAnaXNDdXJyaWN1bHVtTGV2ZWwnLFxuICAncmVjYXB0Y2hhU2l0ZUtleScsXG5dKTtcblxuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBhc3NldFVybCgpIHt9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSA9IGluaXRpYWxTdGF0ZSwgYWN0aW9uKSB7XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX1BBR0VfQ09OU1RBTlRTKSB7XG4gICAgT2JqZWN0LmtleXMoYWN0aW9uLnByb3BzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICghQUxMT1dFRF9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgUHJvcGVydHkgXCIke2tleX1cIiBtYXkgbm90IGJlIHNldCB1c2luZyB0aGUgJHthY3Rpb24udHlwZX0gYWN0aW9uLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgc3RhdGVba2V5XSAhPT0gaW5pdGlhbFN0YXRlW2tleV0gJiZcbiAgICAgICAgc3RhdGVba2V5XSAhPT0gYWN0aW9uLnByb3BzW2tleV1cbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNoYW5nZSB2YWx1ZSBvZiBrZXkgXCIke2tleX1cIi5gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gXy5hc3NpZ24oe30sIHN0YXRlLCBhY3Rpb24ucHJvcHMpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFB1c2ggbG90cyBvZiBwYWdlIGNvbnN0YW50cyBpbnRvIHRoZSBzdG9yZS5cbiAqIFNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIGxldmVsIGluaXQuIEV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlc2UgcHJvcGVydGllc1xuICogbmV2ZXIgY2hhbmdlIG9uY2Ugc2V0LlxuICogQW55IHByb3BlcnRpZXMgb21pdHRlZCBmcm9tIHRoZSBwcm9wcyBhcmd1bWVudCBhcmUgbm90IHNldCBpbiB0aGUgc3RhdGUuXG4gKlxuICogQHBhcmFtIHshT2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW3Byb3BzLmFzc2V0VXJsXSAtIEhlbHBlciBmdW5jdGlvbiBmb3IgcmV0cmlldmluZ1xuICogICAgICAgIGFzc2V0cyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGxldmVsIHR5cGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5pc0Rlc2lnbk1vZGVIaWRkZW5dIC0gV2hldGhlciB0aGUgbGV2ZWwgcmVzdHJpY3RzXG4gKiAgICAgICAgdXNlIG9mIGRlc2lnbiBtb2RlLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMuaXNFbWJlZFZpZXddIC0gV2hldGhlciB0aGUgbGV2ZWwgaXMgYmVpbmcgZW1iZWRkZWRcbiAqICAgICAgICBpbiBhbiBpRnJhbWUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5pc1JlYWRPbmx5V29ya3NwYWNlXSAtIFdoZXRoZXIgdGhlIGxvYWRlZCBsZXZlbFxuICogICAgICAgIHNob3VsZCByZXN0cmljdCBlZGl0aW5nIHRoZSBzdHVkZW50IGNvZGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5pc1NoYXJlVmlld10gLSBXaGV0aGVyIHdlIGFyZSBkaXNwbGF5aW5nIHRoZSBsZXZlbFxuICogICAgICAgIG9uIGEgc2hhcmUgcGFnZS5cbiAqIC4uLlxuICogQHJldHVybnMge3t0eXBlOiBzdHJpbmcsIHByb3BzOiBPYmplY3R9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UGFnZUNvbnN0YW50cyhwcm9wcykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFNFVF9QQUdFX0NPTlNUQU5UUyxcbiAgICBwcm9wczogcHJvcHMsXG4gIH07XG59XG4iLCIvKipcbiAqIFRoaXMgZHVjayBtb2R1bGUgdHJhY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgYXBwJ3MgcnVuIHN0YXRlLlxuICovXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5jb25zdCBTRVRfSVNfUlVOTklORyA9ICdydW5TdGF0ZS9TRVRfSVNfUlVOTklORyc7XG5jb25zdCBTRVRfSVNfRURJVF9XSElMRV9SVU4gPSAncnVuU3RhdGUvU0VUX0lTX0VESVRfV0hJTEVfUlVOJztcbmNvbnN0IFNFVF9JU19ERUJVR0dFUl9QQVVTRUQgPSAncnVuU3RhdGUvU0VUX0lTX0RFQlVHR0VSX1BBVVNFRCc7XG5jb25zdCBTRVRfU1RFUF9TUEVFRCA9ICdydW5TdGF0ZS9TRVRfU1RFUF9TUEVFRCc7XG5jb25zdCBTRVRfQVdBSVRJTkdfQ09OVEFJTkVEX1JFU1BPTlNFID1cbiAgJ3J1blN0YXRlL1NFVF9BV0FJVElOR19DT05UQUlORURfUkVTUE9OU0UnO1xuY29uc3QgU0VUX0lTX0RFQlVHR0lOR19TUFJJVEVTID0gJ3J1blN0YXRlL1NFVF9JU19ERUJVR0dJTkdfU1BSSVRFUyc7XG5cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgaXNSdW5uaW5nOiBmYWxzZSxcbiAgaXNFZGl0V2hpbGVSdW46IGZhbHNlLFxuICBpc0RlYnVnZ2VyUGF1c2VkOiBmYWxzZSxcbiAgbmV4dFN0ZXA6IG51bGwsXG4gIHN0ZXBTcGVlZDogMSxcbiAgaXNEZWJ1Z2dpbmdTcHJpdGVzOiBmYWxzZSxcbiAgLy8gdHJ1ZSB3aGVuIHdhaXRpbmcgZm9yIHVzZXIgdG8gcHJvdmlkZSBhbiBhbnN3ZXIgdG8gYSBjb250YWluZWQgbGV2ZWxcbiAgYXdhaXRpbmdDb250YWluZWRSZXNwb25zZTogZmFsc2UsXG59O1xuXG4vKipcbiAqIFJlZHVjZXIgZm9yIHJ1blN0YXRlLiBJdCBzaG91bGQgYmUgaW1wb3NzaWJsZSB0byBiZSBkZWJ1Z2dpbmcgaWYgbm90IHJ1bm5pbmcuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICBzdGF0ZSA9IHN0YXRlIHx8IGluaXRpYWxTdGF0ZTtcblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9JU19SVU5OSU5HKSB7XG4gICAgcmV0dXJuIF8uYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgaXNSdW5uaW5nOiBhY3Rpb24uaXNSdW5uaW5nLFxuICAgICAgaXNEZWJ1Z2dlclBhdXNlZDpcbiAgICAgICAgYWN0aW9uLmlzUnVubmluZyA9PT0gZmFsc2UgPyBmYWxzZSA6IHN0YXRlLmlzRGVidWdnZXJQYXVzZWQsXG4gICAgICBpc0RlYnVnZ2luZ1Nwcml0ZXM6XG4gICAgICAgIGFjdGlvbi5pc1J1bm5pbmcgPT09IGZhbHNlID8gZmFsc2UgOiBzdGF0ZS5pc0RlYnVnZ2luZ1Nwcml0ZXMsXG4gICAgfSk7XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9JU19FRElUX1dISUxFX1JVTikge1xuICAgIHJldHVybiBfLmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIGlzRWRpdFdoaWxlUnVuOiBhY3Rpb24uaXNFZGl0V2hpbGVSdW4sXG4gICAgfSk7XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9JU19ERUJVR0dFUl9QQVVTRUQpIHtcbiAgICByZXR1cm4gXy5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICBpc1J1bm5pbmc6IGFjdGlvbi5pc0RlYnVnZ2VyUGF1c2VkID8gdHJ1ZSA6IHN0YXRlLmlzUnVubmluZyxcbiAgICAgIGlzRGVidWdnZXJQYXVzZWQ6IGFjdGlvbi5pc0RlYnVnZ2VyUGF1c2VkLFxuICAgICAgbmV4dFN0ZXA6IGFjdGlvbi5uZXh0U3RlcCxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX1NURVBfU1BFRUQpIHtcbiAgICBpZiAodHlwZW9mIGFjdGlvbi5zdGVwU3BlZWQgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gXy5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIHN0ZXBTcGVlZDogYWN0aW9uLnN0ZXBTcGVlZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0FXQUlUSU5HX0NPTlRBSU5FRF9SRVNQT05TRSkge1xuICAgIGlmIChzdGF0ZS5hd2FpdGluZ0NvbnRhaW5lZFJlc3BvbnNlICE9PSBhY3Rpb24uYXdhaXRpbmdDb250YWluZWRSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGF3YWl0aW5nQ29udGFpbmVkUmVzcG9uc2U6IGFjdGlvbi5hd2FpdGluZ0NvbnRhaW5lZFJlc3BvbnNlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9JU19ERUJVR0dJTkdfU1BSSVRFUyAmJiBzdGF0ZS5pc1J1bm5pbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBpc0RlYnVnZ2luZ1Nwcml0ZXM6IGFjdGlvbi5pc0RlYnVnZ2luZ1Nwcml0ZXMsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzUnVubmluZyAtIFdoZXRoZXIgdGhlIGFwcCBpcyBjdXJyZW50bHkgcnVubmluZyBvciBub3QuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRJc1J1bm5pbmcgPSBpc1J1bm5pbmcgPT4gKHtcbiAgdHlwZTogU0VUX0lTX1JVTk5JTkcsXG4gIGlzUnVubmluZzogaXNSdW5uaW5nLFxufSk7XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBpc1J1bm5pbmcgLSBXaGV0aGVyIHRoZSBhcHAgaXMgY3VycmVudGx5IHJ1bm5pbmcgb3Igbm90LlxuICovXG5leHBvcnQgY29uc3Qgc2V0SXNFZGl0V2hpbGVSdW4gPSBpc0VkaXRXaGlsZVJ1biA9PiAoe1xuICB0eXBlOiBTRVRfSVNfRURJVF9XSElMRV9SVU4sXG4gIGlzRWRpdFdoaWxlUnVuOiBpc0VkaXRXaGlsZVJ1bixcbn0pO1xuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNEZWJ1Z2dlclBhdXNlZCAtIFdoZXRoZXIgdGhlIGFwcCBpcyBjdXJyZW50bHkgcGF1c2VkIGluIHRoZVxuICogICBkZWJ1Z2dlclxuICogQHBhcmFtIHtKU0ludGVycHJldGVyLlN0ZXBUeXBlfSBuZXh0U3RlcCAtIHRoZSBuZXh0IHN0ZXAgb2YgdGhlIGludGVycHJldGVyXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRJc0RlYnVnZ2VyUGF1c2VkID0gKGlzRGVidWdnZXJQYXVzZWQsIG5leHRTdGVwKSA9PiAoe1xuICB0eXBlOiBTRVRfSVNfREVCVUdHRVJfUEFVU0VELFxuICBpc0RlYnVnZ2VyUGF1c2VkOiBpc0RlYnVnZ2VyUGF1c2VkLFxuICBuZXh0U3RlcCxcbn0pO1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwU3BlZWQgLSBOZXcgc3RlcCBzcGVlZCBmb3Igc3R1ZGVudCBjb2RlIGV4ZWN1dGlvbixcbiAqICAgICAgICBpbiByYW5nZSAwLi4xLlxuICovXG5leHBvcnQgY29uc3Qgc2V0U3RlcFNwZWVkID0gc3RlcFNwZWVkID0+ICh7XG4gIHR5cGU6IFNFVF9TVEVQX1NQRUVELFxuICBzdGVwU3BlZWQsXG59KTtcblxuZXhwb3J0IGNvbnN0IHNldEF3YWl0aW5nQ29udGFpbmVkUmVzcG9uc2UgPSBhd2FpdGluZ0NvbnRhaW5lZFJlc3BvbnNlID0+ICh7XG4gIHR5cGU6IFNFVF9BV0FJVElOR19DT05UQUlORURfUkVTUE9OU0UsXG4gIGF3YWl0aW5nQ29udGFpbmVkUmVzcG9uc2UsXG59KTtcblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRGVidWdnaW5nU3ByaXRlcyAtIFdoZXRoZXIgdGhlIGFwcCBpcyBjdXJyZW50bHkgZGVidWdnaW5nXG4gKiAgICAgICAgc3ByaXRlcyBvciBub3QuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRJc0RlYnVnZ2luZ1Nwcml0ZXMgPSBpc0RlYnVnZ2luZ1Nwcml0ZXMgPT4gKHtcbiAgdHlwZTogU0VUX0lTX0RFQlVHR0lOR19TUFJJVEVTLFxuICBpc0RlYnVnZ2luZ1Nwcml0ZXM6IGlzRGVidWdnaW5nU3ByaXRlcyxcbn0pO1xuIiwiY29uc3QgU0VUX1NUQVJUX0lETEUgPSAnc3R1ZGlvQXBwQWN0aXZpdHkvU0VUX1NUQVJUX0lETEUnO1xuY29uc3QgU0VUX0VORF9JRExFID0gJ3N0dWRpb0FwcEFjdGl2aXR5L1NFVF9FTkRfSURMRSc7XG5jb25zdCBSRVNFVF9JRExFX1RJTUUgPSAnc3R1ZGlvQXBwQWN0aXZpdHkvUkVTRVRfSURMRV9USU1FJztcblxuY29uc3Qgc3R1ZGlvQXBwQWN0aXZpdHlJbml0aWFsU3RhdGUgPSB7XG4gIGlkbGVUaW1lU2luY2VMYXN0UmVwb3J0OiAwLFxuICBpZGxlU3RhcnQ6IG51bGwsXG4gIGlzSWRsZTogZmFsc2UsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlID0gc3R1ZGlvQXBwQWN0aXZpdHlJbml0aWFsU3RhdGUsIGFjdGlvbikge1xuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9TVEFSVF9JRExFKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICBpc0lkbGU6IHRydWUsXG4gICAgICBpZGxlU3RhcnQ6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfRU5EX0lETEUpIHtcbiAgICBpZiAoc3RhdGUuaWRsZVN0YXJ0KSB7XG4gICAgICBjb25zdCBuZXdJZGxlVGltZSA9XG4gICAgICAgIHN0YXRlLmlkbGVUaW1lU2luY2VMYXN0UmVwb3J0ICsgdGltZVNpbmNlSWRsZVN0YXJ0KHN0YXRlKTtcblxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIGlzSWRsZTogZmFsc2UsXG4gICAgICAgIGlkbGVUaW1lU2luY2VMYXN0UmVwb3J0OiBuZXdJZGxlVGltZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBSRVNFVF9JRExFX1RJTUUpIHtcbiAgICBjb25zdCBpZGxlU3RhcnQgPSBzdGF0ZS5pc0lkbGUgPyBuZXcgRGF0ZSgpLmdldFRpbWUoKSA6IG51bGw7XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgIGlkbGVUaW1lU2luY2VMYXN0UmVwb3J0OiAwLFxuICAgICAgaWRsZVN0YXJ0LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5jb25zdCB0aW1lU2luY2VJZGxlU3RhcnQgPSBzdGF0ZSA9PiB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICByZXR1cm4gbm93IC0gc3RhdGUuaWRsZVN0YXJ0O1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFN0YXJ0SWRsZSA9ICgpID0+ICh7XG4gIHR5cGU6IFNFVF9TVEFSVF9JRExFLFxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRFbmRJZGxlID0gKCkgPT4gKHtcbiAgdHlwZTogU0VUX0VORF9JRExFLFxufSk7XG5cbmV4cG9ydCBjb25zdCByZXNldElkbGVUaW1lID0gKCkgPT4gKHtcbiAgdHlwZTogUkVTRVRfSURMRV9USU1FLFxufSk7XG5cbmV4cG9ydCBjb25zdCBnZXRJZGxlVGltZVNpbmNlTGFzdFJlcG9ydCA9IHN0YXRlID0+IHtcbiAgaWYgKHN0YXRlLmlzSWRsZSkge1xuICAgIHJldHVybiBzdGF0ZS5pZGxlVGltZVNpbmNlTGFzdFJlcG9ydCArIHRpbWVTaW5jZUlkbGVTdGFydChzdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YXRlLmlkbGVUaW1lU2luY2VMYXN0UmVwb3J0O1xuICB9XG59O1xuIiwiaW1wb3J0IEltbXV0YWJsZSBmcm9tICdpbW11dGFibGUnO1xuXG5pbXBvcnQge2NyZWF0ZVV1aWR9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBEdWNrIG1vZHVsZSBmb3IgV2F0Y2hlcnMgZXhwcmVzc2lvbiB1cGRhdGluZy9kaXNwYXRjaGluZy5cbiAqL1xuXG4vKipcbiAqIEFDVElPTiBDT05TVEFOVFNcbiAqL1xuY29uc3QgQUREX0VYUFJFU1NJT04gPSAnd2F0Y2hlZEV4cHJlc3Npb25zL0FERF9FWFBSRVNTSU9OJztcbmNvbnN0IFJFTU9WRV9FWFBSRVNTSU9OID0gJ3dhdGNoZWRFeHByZXNzaW9ucy9SRU1PVkVfRVhQUkVTU0lPTic7XG5jb25zdCBVUERBVEVfVkFMVUUgPSAnd2F0Y2hlZEV4cHJlc3Npb25zL1VQREFURV9WQUxVRSc7XG5cbi8qKlxuICogUkVEVUNFUlNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFdhdGNoZWRFeHByZXNzaW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXhwcmVzc2lvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxhc3RWYWx1ZVxuICovXG5cbi8qKlxuICogQHR5cGUge0FycmF5LjxXYXRjaGVkRXhwcmVzc2lvbj59XG4gKi9cbmNvbnN0IHdhdGNoZWRFeHByZXNzaW9uc0luaXRpYWxTdGF0ZSA9IEltbXV0YWJsZS5MaXN0KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZHVjZXIoXG4gIHN0YXRlID0gd2F0Y2hlZEV4cHJlc3Npb25zSW5pdGlhbFN0YXRlLFxuICBhY3Rpb25cbikge1xuICBpZiAoYWN0aW9uLnR5cGUgPT09IEFERF9FWFBSRVNTSU9OKSB7XG4gICAgY29uc3Qge2V4cHJlc3Npb259ID0gYWN0aW9uO1xuICAgIGNvbnN0IHV1aWQgPSBjcmVhdGVVdWlkKCk7XG4gICAgcmV0dXJuIHN0YXRlLnB1c2goSW1tdXRhYmxlLk1hcCh7ZXhwcmVzc2lvbiwgdXVpZH0pKTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gVVBEQVRFX1ZBTFVFKSB7XG4gICAgY29uc3Qge3ZhbHVlLCBleHByZXNzaW9ufSA9IGFjdGlvbjtcbiAgICByZXR1cm4gc3RhdGUubWFwKGUgPT5cbiAgICAgIGUuZ2V0KCdleHByZXNzaW9uJykgPT09IGV4cHJlc3Npb25cbiAgICAgICAgPyBJbW11dGFibGUuTWFwKHtcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBleHByZXNzaW9uLFxuICAgICAgICAgICAgdXVpZDogZS5nZXQoJ3V1aWQnKSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IGVcbiAgICApO1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBSRU1PVkVfRVhQUkVTU0lPTikge1xuICAgIHJldHVybiBzdGF0ZS5maWx0ZXIoZSA9PiBlLmdldCgnZXhwcmVzc2lvbicpICE9PSBhY3Rpb24uZXhwcmVzc2lvbik7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogQUNUSU9OIENSRUFUT1JTXG4gKiAgKGUuZy4gZnVuY3Rpb24gZG9BVGhpbmcobikgeyByZXR1cm4ge3R5cGU6IERPX0FfVEhJTkcsIGFyZzogbn07IH0pXG4gKi9cblxuZXhwb3J0IGNvbnN0IGFkZCA9IGV4cHJlc3Npb24gPT4gKHtcbiAgdHlwZTogQUREX0VYUFJFU1NJT04sXG4gIGV4cHJlc3Npb24sXG59KTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZSA9IGV4cHJlc3Npb24gPT4gKHtcbiAgdHlwZTogUkVNT1ZFX0VYUFJFU1NJT04sXG4gIGV4cHJlc3Npb24sXG59KTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZSA9IChleHByZXNzaW9uLCB2YWx1ZSkgPT4gKHtcbiAgdHlwZTogVVBEQVRFX1ZBTFVFLFxuICBleHByZXNzaW9uLFxuICB2YWx1ZSxcbn0pO1xuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cblxuLy8gYXBwcy9zcmMvc3R5bGVDb25zdGFudHMuanNcbi8vIEdFTkVSQVRFRCBGSUxFOiBETyBOT1QgTU9ESUZZIERJUkVDVExZXG4vLyBUaGlzIGdlbmVyYXRlZCBmaWxlIGV4cG9ydHMgYWxsIHZhcmlhYmxlcyBkZWZpbmVkIGluIHNoYXJlZC9jc3Mvc3R5bGUtY29uc3RhbnRzLnNjc3Ncbi8vIGZvciB1c2UgaW4gSmF2YVNjcmlwdC4gVGhlIGdlbmVyYXRvciBzY3JpcHQgaXMgY29udmVydC1zY3NzLXZhcmlhYmxlcy5qc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFwid29ya3NwYWNlLWhlYWRlcnMtaGVpZ2h0XCI6IDMwLFxuICBcInJlc2l6ZS1iYXItd2lkdGhcIjogMTMsXG4gIFwiZGVsZXRlLW9wYWNpdHlcIjogXCIwLjVcIixcbiAgXCJjb250ZW50LXdpZHRoXCI6IDk3MCxcbn07XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCB7b3BlbkRpYWxvZ30gZnJvbSAnQGNkby9hcHBzL3JlZHV4L2luc3RydWN0aW9uc0RpYWxvZyc7XG5cbmltcG9ydCBTYWZlTWFya2Rvd24gZnJvbSAnLi9TYWZlTWFya2Rvd24nO1xuaW1wb3J0IHtyZW5kZXJFeHBhbmRhYmxlSW1hZ2VzfSBmcm9tICcuL3V0aWxzL2V4cGFuZGFibGVJbWFnZXMnO1xuXG5leHBvcnQgY2xhc3MgVW5jb25uZWN0ZWRFeHBhbmRhYmxlSW1hZ2VzV3JhcHBlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgc2hvd0ltYWdlRGlhbG9nOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlKSxcbiAgICAgIFByb3BUeXBlcy5ub2RlLFxuICAgIF0pLmlzUmVxdWlyZWQsXG4gIH07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5wb3N0UmVuZGVySG9vaygpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIC8vIFRPRE86IGRvIHdlIG5lZWQgdG8gZG8gYW55IGtpbmQgb2YgY2xlYW51cCBoZXJlPyBPciBvdGhlcndpc2UgZG9cbiAgICAvLyBzb21ldGhpbmcgbW9yZSBwcmVjaXNlIHRoYW4gY2FsbGluZyB0aGUgbWV0aG9kIGFnYWluIHdoZW4gd2UncmVcbiAgICAvLyByZXNwb25kaW5nIHRvIGFuIHVwZGF0ZSByYXRoZXIgdGhhbiBhbiBpbml0aWFsIHJlbmRlcj9cbiAgICB0aGlzLnBvc3RSZW5kZXJIb29rKCk7XG4gIH1cblxuICBwb3N0UmVuZGVySG9vaygpIHtcbiAgICBjb25zdCB0aGlzTm9kZSA9IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIHJlbmRlckV4cGFuZGFibGVJbWFnZXModGhpc05vZGUsIHRoaXMucHJvcHMuc2hvd0ltYWdlRGlhbG9nKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgRXhwYW5kYWJsZUltYWdlc1dyYXBwZXIgPSBjb25uZWN0KG51bGwsIGRpc3BhdGNoID0+ICh7XG4gIHNob3dJbWFnZURpYWxvZyhpbWdVcmwpIHtcbiAgICBkaXNwYXRjaChcbiAgICAgIG9wZW5EaWFsb2coe1xuICAgICAgICBpbWdPbmx5OiB0cnVlLFxuICAgICAgICBpbWdVcmwsXG4gICAgICB9KVxuICAgICk7XG4gIH0sXG59KSkoVW5jb25uZWN0ZWRFeHBhbmRhYmxlSW1hZ2VzV3JhcHBlcik7XG5cbi8vIENsaWNrYWJsZSB0ZXh0IGNhbiBiZSBhZGRlZCB2aWEgbWFya2Rvd24gaW5zdHJ1Y3Rpb25zIGxpa2UgdGhpczpcbi8vICAgW3BsYXldKCNjbGlja2FibGU9cGxheS1zb3VuZC1ibG9jaylcbi8vXG4vLyBUaGlzIGNvZGUgd2lsbCByZXBsYWNlIGFueSBsaW5rIHRoYXQgaGFkICNjbGlja2FibGU9W2lkXVxuLy8gd2l0aCBib2xkIGNsaWNrYWJsZSB0ZXh0IHRoYXQsIHdoZW4gY2xpY2tlZCwgd2lsbCBjYWxsIHRoZVxuLy8gcHJvdmlkZWQgaGFuZGxlSW5zdHJ1Y3Rpb25zVGV4dENsaWNrIGZ1bmN0aW9uIHdpdGggdGhlIElELlxuLy9cbi8vIFRoZSBjbGlja2FibGUgdGV4dCBzdXBwb3J0IGluIG91ciByZW1hcmstcGx1Z2lucyByZXBvIGhhc1xuLy8gZG9uZSBzb21lIGludGVybWVkaWF0ZSB3b3JrIGJ5IGNvbnZlcnRpbmcgdGhvc2UgbGlua3MgaW50b1xuLy8gdGhlIGZvbGxvd2luZyBIVE1MIGZvcm1hdDpcbi8vICAgPGIgZGF0YS1pZD1cImlkXCIgY2xhc3M9XCJjbGlja2FibGUtdGV4dFwiPnRleHQ8L2I+XG5leHBvcnQgY2xhc3MgQ2xpY2thYmxlVGV4dFdyYXBwZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGhhbmRsZUluc3RydWN0aW9uc1RleHRDbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZSksXG4gICAgICBQcm9wVHlwZXMubm9kZSxcbiAgICBdKS5pc1JlcXVpcmVkLFxuICB9O1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMucG9zdFJlbmRlckhvb2soKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAvLyBUT0RPOiBkbyB3ZSBuZWVkIHRvIGRvIGFueSBraW5kIG9mIGNsZWFudXAgaGVyZT8gT3Igb3RoZXJ3aXNlIGRvXG4gICAgLy8gc29tZXRoaW5nIG1vcmUgcHJlY2lzZSB0aGFuIGNhbGxpbmcgdGhlIG1ldGhvZCBhZ2FpbiB3aGVuIHdlJ3JlXG4gICAgLy8gcmVzcG9uZGluZyB0byBhbiB1cGRhdGUgcmF0aGVyIHRoYW4gYW4gaW5pdGlhbCByZW5kZXI/XG4gICAgdGhpcy5wb3N0UmVuZGVySG9vaygpO1xuICB9XG5cbiAgcG9zdFJlbmRlckhvb2soKSB7XG4gICAgY29uc3QgdGhpc05vZGUgPSBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICB0aGlzLnJlbmRlckNsaWNrYWJsZVRleHQodGhpc05vZGUpO1xuICB9XG5cbiAgcmVuZGVyQ2xpY2thYmxlVGV4dChub2RlKSB7XG4gICAgY29uc3QgY2xpY2thYmxlVGV4dEFsbCA9IG5vZGUucXVlcnlTZWxlY3RvckFsbCgnYi5jbGlja2FibGUtdGV4dCcpO1xuICAgIGNsaWNrYWJsZVRleHRBbGwuZm9yRWFjaCgoY2xpY2thYmxlVGV4dCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gY2xpY2thYmxlVGV4dC5kYXRhc2V0LmlkO1xuICAgICAgY29uc3QgZXh0cmFDbGFzcyA9IGAgY2xpY2thYmxlLXRleHQtd2l0aC1nbG93IGNsaWNrYWJsZS10ZXh0LSR7aW5kZXh9YDtcbiAgICAgIGlmICghY2xpY2thYmxlVGV4dC5jbGFzc05hbWUuaW5jbHVkZXMoZXh0cmFDbGFzcykpIHtcbiAgICAgICAgY2xpY2thYmxlVGV4dC5jbGFzc05hbWUgKz0gZXh0cmFDbGFzcztcbiAgICAgIH1cbiAgICAgIGNsaWNrYWJsZVRleHQub25jbGljayA9ICgpID0+IHRoaXMucHJvcHMuaGFuZGxlSW5zdHJ1Y3Rpb25zVGV4dENsaWNrKGlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgfVxufVxuXG4vKipcbiAqIEEgd3JhcHBlciBmb3Igb3VyIFNhZmVNYXJrZG93biBjb21wb25lbnQgd2hpY2ggYWRkcyBzb21lIGV4dHJhXG4gKiBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIFJpZ2h0IG5vdywgdGhhdCBleHRyYSBmdW5jdGlvbmFsaXR5IGlzIGxpbWl0ZWQgdG86XG4gKiAgIC0gU3VwcG9ydCBmb3IgdGhlIFwiZXhwYW5kYWJsZSBpbWFnZXNcIiBmdW5jdGlvbmFsaXR5LlxuICogICAtIFN1cHBvcnQgZm9yIGNsaWNrYWJsZSB0ZXh0IHRoYXQgc2hvd3MgYSBjYWxsb3V0LlxuICpcbiAqIEJ1dCB0aGUgaW50ZW50IGlzIGZvciB0aGlzIHRvIHNlcnZlIGFzIGEgY29tbW9uIHBsYWNlIHRvIGltcGxlbWVudCBhbGwgb2ZcbiAqIHRoZSBvdGhlciB0aGluZ3Mgd2UgZG8gb24gX3RvcF8gb2YgbWFya2Rvd247IGVtYmVkZGVkIEJsb2NrbHksIGxpbmtzXG4gKiBhdXRvbWF0aWNhbGx5IG9wZW5pbmcgaW4gYSBuZXcgdGFiLCBldGMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuaGFuY2VkU2FmZU1hcmtkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBtYXJrZG93bjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG9wZW5FeHRlcm5hbExpbmtzSW5OZXdUYWI6IFByb3BUeXBlcy5ib29sLFxuICAgIGV4cGFuZGFibGVJbWFnZXM6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBoYW5kbGVJbnN0cnVjdGlvbnNUZXh0Q2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICAvLyBUaGUgYmFzaWMgaWRlYSBoZXJlIGlzIHRoYXQgd2Ugc3RhcnQgd2l0aCBqdXN0IGEgYmFzaWMgU2FmZSBNYXJrZG93blxuICAgIC8vIGNvbXBvbmVudC4gV2UgdGhlbiBjaG9vc2Ugd2hpY2ggc3Vic2V0IG9mIGVuaGFuY2VtZW50cyB3ZSB3YW50IHRvIGFkZCBieVxuICAgIC8vIHdyYXBwaW5nIHRoZSBjb21wb25lbnQgaW4gb3RoZXIgY29tcG9uZW50cyB3aGljaCBlYWNoIGFkZCB0aGVpciBvd25cbiAgICAvLyBzZWxmLWNvbnRhaW5lZCBmdW5jdGlvbmFsaXR5LlxuICAgIC8vXG4gICAgLy8gUmlnaHQgbm93LCB0aGF0J3MganVzdCBleHBhbmRhYmxlIGltYWdlcyBhbmQgY2xpY2thYmxlIHRleHQuIEJ1dCB3ZVxuICAgIC8vIGNvdWxkIChzaG91bGQ/KSB0YWtlIHRoZSBcIm9wZW4gZXh0ZXJuYWwgbGlua3NcIiBmdW5jdGlvbmFsaXR5IG91dCBvZlxuICAgIC8vIFNhZmVNYXJrZG93biBhbmQgYWRkIGl0IGhlcmU7IEkgZXhwZWN0IHdlIGFsbW9zdCBjZXJ0YWlubHkgd2lsbCBwdXQgdGhlXG4gICAgLy8gXCJyZW5kZXIgYmxvY2tseSBibG9ja3NcIiBmdW5jdGlvbmFsaXR5IGluIGhlcmUsIHRvby5cbiAgICBsZXQgcmVzdWx0ID0gKFxuICAgICAgPFNhZmVNYXJrZG93blxuICAgICAgICBtYXJrZG93bj17dGhpcy5wcm9wcy5tYXJrZG93bn1cbiAgICAgICAgb3BlbkV4dGVybmFsTGlua3NJbk5ld1RhYj17dGhpcy5wcm9wcy5vcGVuRXh0ZXJuYWxMaW5rc0luTmV3VGFifVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lfVxuICAgICAgLz5cbiAgICApO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuZXhwYW5kYWJsZUltYWdlcykge1xuICAgICAgcmVzdWx0ID0gPEV4cGFuZGFibGVJbWFnZXNXcmFwcGVyPntyZXN1bHR9PC9FeHBhbmRhYmxlSW1hZ2VzV3JhcHBlcj47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuaGFuZGxlSW5zdHJ1Y3Rpb25zVGV4dENsaWNrKSB7XG4gICAgICByZXN1bHQgPSAoXG4gICAgICAgIDxDbGlja2FibGVUZXh0V3JhcHBlclxuICAgICAgICAgIGhhbmRsZUluc3RydWN0aW9uc1RleHRDbGljaz17dGhpcy5wcm9wcy5oYW5kbGVJbnN0cnVjdGlvbnNUZXh0Q2xpY2t9XG4gICAgICAgID5cbiAgICAgICAgICB7cmVzdWx0fVxuICAgICAgICA8L0NsaWNrYWJsZVRleHRXcmFwcGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IGNvbG9yIGZyb20gJ0BjZG8vYXBwcy91dGlsL2NvbG9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlnaHRidWxiIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBzaG91bGRBbmltYXRlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb3VudDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBsaXQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHNpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgaXNNaW5lY3JhZnQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGlzUnRsOiBQcm9wVHlwZXMuYm9vbCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHNob3VsZEFuaW1hdGU6IGZhbHNlLFxuICAgIGNvdW50OiAwLFxuICAgIGxpdDogdHJ1ZSxcbiAgICBzaXplOiA0MCxcbiAgICBzdHlsZToge30sXG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGxldCBidWxiRGlzcGxheTtcbiAgICBsZXQgbnVtYmVyQ2lyY2xlO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuaXNNaW5lY3JhZnQpIHtcbiAgICAgIGNvbnN0IGhyZWYgPSB0aGlzLnByb3BzLmxpdFxuICAgICAgICA/ICdpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXNBQUFBT0NBWUFBQUQ1WWVhVkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBJyArXG4gICAgICAgICAgJ0lHTklVazBBQUhvbEFBQ0Fnd0FBK2Y4QUFJRHBBQUIxTUFBQTZtQUFBRHFZQUFBWGI1SmZ4VVlBQUFDelNVUkJWSGphbEpFeERzSXcnICtcbiAgICAgICAgICAnREVXL0d6YllHNG01QTUwNUJ6dUg2Y1FwRUdkZzZUbFlXTHAwcnBTT2lIWnJaSWFHQ3NmTndKY3NSOG1UL2ZWRGtHSm9rVG9BWU5kVicgK1xuICAgICAgICAgICd5TzFaa3FaY3VFeUErUkhnRnNnT2MzRUw5czJ5a1FUNEszT2F1NjhCS2tDbXhBWXArVnBkWmZoRENoN0dTZlMxV0lUdllaeXcyd2FIJyArXG4gICAgICAgICAgJ3dTOEErazRtdTcrZzd4L1JxRUpFRjR0ZFYvSDdkV2YyRGNlZnBOSzQzZ2pBTTVTVWdxMjF5VFFVN0p4THdtdkdPZlgrR1FEbEtEeEYnICtcbiAgICAgICAgICAnZ243K2JnQUFBQUJKUlU1RXJrSmdnZz09J1xuICAgICAgICA6ICdpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXNBQUFBT0NBWUFBQUQ1WWVhVkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJJyArXG4gICAgICAgICAgJ1dYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFzUkZRVVFQOGcxY3dBQUFLcEpSRUZVS00rVmtiRU54Q0FNUlIrbksxSkgnICtcbiAgICAgICAgICAnQW1XQ1pJVk1rV0haQXlrdG1TQ2lvS2J6VlJmQkdZcjdqUkYrc2o4ZlF5dEJ5NmdESU41NzluMXZTT2ZjdzcxcWNGMVhjczVZYTdIVycgK1xuICAgICAgICAgICdrbk1tcGZSc05EVllhOXMyQUdLTXpQT01jNDQzQThVWTFkMkxQNlRnVWtwVGU3RTB2a3NwVE5NRThQZ0Z6SGV5T1k2RDY3cWFTVFhZJyArXG4gICAgICAgICAgJ3N5WGVlem5QVTFKSzh2dEpLbzBRQWlHRTdnTVZ2Q3pMTUEwRjMvYzloSHZHWmRUL0FQZnlRYzN1bVB2ZkFBQUFBRWxGVGtTdVFtQ0MnO1xuXG4gICAgICBidWxiRGlzcGxheSA9IChcbiAgICAgICAgPGcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLnNob3VsZEFuaW1hdGUgPyAnYW5pbWF0ZS1oaW50JyA6ICcnfT5cbiAgICAgICAgICA8aW1hZ2VcbiAgICAgICAgICAgIHdpZHRoPVwiNDUwXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjQ1MFwiXG4gICAgICAgICAgICB4PVwiODBcIlxuICAgICAgICAgICAgeT1cIjE0MFwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJwaXhlbGF0ZWRcIlxuICAgICAgICAgICAgeGxpbmtIcmVmPXsnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcgKyBocmVmfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZz5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1bGJEaXNwbGF5ID0gKFxuICAgICAgICA8ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuc2hvdWxkQW5pbWF0ZSA/ICdhbmltYXRlLWhpbnQnIDogJyd9PlxuICAgICAgICAgIDxnXG4gICAgICAgICAgICB0cmFuc2Zvcm09e1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLmlzUnRsXG4gICAgICAgICAgICAgICAgPyAndHJhbnNsYXRlKDAsMjAwKSBzY2FsZSgxMC4wLDEwLjApJ1xuICAgICAgICAgICAgICAgIDogJ3RyYW5zbGF0ZSgyNDUsMjAwKSBzY2FsZSgxMC4wLDEwLjApJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMjIgMzNIOC4yNUM3LjM5MDYyIDMwLjMzNTkgNS42NzE4OCAyNy45Mjk3IDMuOTUzMTIgMjUuNjA5NEMzLjUyMzQ0IDI1LjAwNzggMy4wOTM3NSAyNC40MDYyIDIuNjY0MDYgMjMuODA0N0MwLjk0NTMxMiAyMS4zMTI1IDAgMTguMzkwNiAwIDE1LjEyNUMwIDYuNzg5MDYgNi43MDMxMiAwIDE1LjEyNSAwQzIzLjQ2MDkgMCAzMC4yNSA2Ljc4OTA2IDMwLjI1IDE1LjIxMDlDMzAuMjUgMTguMzkwNiAyOS4yMTg4IDIxLjMxMjUgMjcuNSAyMy44MDQ3QzI3LjA3MDMgMjQuNDA2MiAyNi42NDA2IDI1LjAwNzggMjYuMjEwOSAyNS42MDk0QzI0LjQ5MjIgMjcuOTI5NyAyMi43NzM0IDMwLjMzNTkgMjIgMzNaTTE1LjEyNSA0NEMxMS4yNTc4IDQ0IDguMjUgNDAuOTkyMiA4LjI1IDM3LjEyNVYzNS43NUgyMlYzNy4xMjVDMjIgNDAuOTkyMiAxOC45MDYyIDQ0IDE1LjEyNSA0NFpNOC4yNSAxNS4xMjVDOC4yNSAxMS4zNDM4IDExLjI1NzggOC4yNSAxNS4xMjUgOC4yNUMxNS44MTI1IDguMjUgMTYuNSA3LjY0ODQ0IDE2LjUgNi44NzVDMTYuNSA2LjE4NzUgMTUuODEyNSA1LjUgMTUuMTI1IDUuNUM5Ljc5Njg4IDUuNSA1LjUgOS44ODI4MSA1LjUgMTUuMTI1QzUuNSAxNS44OTg0IDYuMTAxNTYgMTYuNSA2Ljg3NSAxNi41QzcuNTYyNSAxNi41IDguMjUgMTUuODk4NCA4LjI1IDE1LjEyNVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzE4OTJFM1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk04LjI1IDE1LjEyNUM4LjI1IDExLjM0MzggMTEuMjU3OCA4LjI1IDE1LjEyNSA4LjI1QzE1LjgxMjUgOC4yNSAxNi41IDcuNjQ4NDQgMTYuNSA2Ljg3NUMxNi41IDYuMTg3NSAxNS44MTI1IDUuNSAxNS4xMjUgNS41QzkuNzk2ODggNS41IDUuNSA5Ljg4MjgxIDUuNSAxNS4xMjVDNS41IDE1Ljg5ODQgNi4xMDE1NiAxNi41IDYuODc1IDE2LjVDNy41NjI1IDE2LjUgOC4yNSAxNS44OTg0IDguMjUgMTUuMTI1WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjMTg5MkUzXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICBkPVwiTTEzLjc1IDYuODc1QzE0LjQzNzUgNi44NzUgMTUuMTI1IDcuNTYyNSAxNS4xMjUgOC4zMzU5NEMxNS4xMjUgOS4wMjM0NCAxNC40Mzc1IDkuNjI1IDEzLjc1IDkuNjI1QzExLjQyOTcgOS42MjUgOS42MjUgMTEuNTE1NiA5LjYyNSAxMy43NUM5LjYyNSAxNC41MjM0IDguOTM3NSAxNS4xMjUgOC4yNSAxNS4xMjVDNy40NzY1NiAxNS4xMjUgNi44NzUgMTQuNTIzNCA2Ljg3NSAxMy43NUM2Ljg3NSA5Ljk2ODc1IDkuODgyODEgNi44NzUgMTMuNzUgNi44NzVaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9nPlxuICAgICAgICA8L2c+XG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBjb3VudERpc3BsYXk7XG4gICAgaWYgKHRoaXMucHJvcHMubGl0ICYmIHRoaXMucHJvcHMuY291bnQpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gbmluZSBoaW50cywgc2ltcGx5IGRpc3BsYXkgXCI5K1wiXG4gICAgICBjb25zdCBjb3VudFRleHQgPSB0aGlzLnByb3BzLmNvdW50ID4gOSA/ICc5KycgOiB0aGlzLnByb3BzLmNvdW50O1xuICAgICAgaWYgKHRoaXMucHJvcHMuaXNNaW5lY3JhZnQpIHtcbiAgICAgICAgY291bnREaXNwbGF5ID0gKFxuICAgICAgICAgIDxnPlxuICAgICAgICAgICAgPHRleHQgaWQ9XCJoaW50Q291bnRcIiB4PVwiNDAwXCIgeT1cIjcwMFwiIHN0eWxlPXtzdHlsZXMuY291bnRNaW5lY3JhZnR9PlxuICAgICAgICAgICAgICB7Y291bnRUZXh0fVxuICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgIDwvZz5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvdW50RGlzcGxheSA9IChcbiAgICAgICAgICA8Zz5cbiAgICAgICAgICAgIDx0ZXh0XG4gICAgICAgICAgICAgIGlkPVwiaGludENvdW50XCJcbiAgICAgICAgICAgICAgeD17dGhpcy5wcm9wcy5pc1J0bCA/ICczODAnIDogJzQ5NSd9XG4gICAgICAgICAgICAgIHk9XCIzODBcIlxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLmNvdW50fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y291bnRUZXh0fVxuICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgIDwvZz5cbiAgICAgICAgKTtcbiAgICAgICAgbnVtYmVyQ2lyY2xlID0gKFxuICAgICAgICAgIDxnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5zaG91bGRBbmltYXRlID8gJ2FuaW1hdGUtaGludCcgOiAnJ30+XG4gICAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICAgIGN4PXt0aGlzLnByb3BzLmlzUnRsID8gJzMxNScgOiAnNTY1J31cbiAgICAgICAgICAgICAgY3k9XCIzMTBcIlxuICAgICAgICAgICAgICByPVwiMTI1XCJcbiAgICAgICAgICAgICAgZmlsbD17Y29sb3Iud2hpdGV9XG4gICAgICAgICAgICAgIHN0cm9rZT17Y29sb3IuYmxvY2tseV9mbHlvdXRfZ3JheX1cbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9XCIxNlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHN2Z1xuICAgICAgICB3aWR0aD17dGhpcy5wcm9wcy5zaXplfVxuICAgICAgICBoZWlnaHQ9e3RoaXMucHJvcHMuc2l6ZX1cbiAgICAgICAgc3R5bGU9e3RoaXMucHJvcHMuc3R5bGV9XG4gICAgICAgIHZpZXdCb3g9XCIwIDAgNjEyIDc5MlwiXG4gICAgICA+XG4gICAgICAgIHtidWxiRGlzcGxheX1cbiAgICAgICAge251bWJlckNpcmNsZX1cbiAgICAgICAge2NvdW50RGlzcGxheX1cbiAgICAgIDwvc3ZnPlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0ge1xuICBjb3VudDoge1xuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBmb250U2l6ZTogJzIwMHB4JyxcbiAgICBmaWxsOiBjb2xvci5saWdodF9pbmZvXzUwMCxcbiAgICBmb250RmFtaWx5OiAnVmVyZGFuYSwgR2VuZXZhLCBzYW5zLXNlcmlmJyxcbiAgfSxcbiAgY291bnRNaW5lY3JhZnQ6IHtcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgZm9udFNpemU6ICc0MDBweCcsXG4gICAgZmlsbDogY29sb3Iud2hpdGUsXG4gICAgc3Ryb2tlOiBjb2xvci5ibGFjayxcbiAgICBzdHJva2VXaWR0aDogJzMwcHgnLFxuICAgIGZvbnRGYW1pbHk6ICdWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWYnLFxuICB9LFxufTtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmFkaXVtIGZyb20gJ3JhZGl1bSc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1pbXBvcnRzXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCB7b3BlbkRpYWxvZ30gZnJvbSAnLi4vLi4vcmVkdXgvaW5zdHJ1Y3Rpb25zRGlhbG9nJztcblxuY2xhc3MgSW1hZ2VQcmV2aWV3VW53cmFwcGVkIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICB1cmw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBzaG93SW5zdHJ1Y3Rpb25zRGlhbG9nOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG5vVmlzdWFsaXphdGlvbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgaWQ9XCJhbmktZ2lmLXByZXZpZXctd3JhcHBlclwiIHN0eWxlPXtzdHlsZXMud3JhcHBlcn0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBpZD1cImFuaS1naWYtcHJldmlld1wiXG4gICAgICAgICAgc3R5bGU9e1tcbiAgICAgICAgICAgIHN0eWxlcy5hbmlHaWZQcmV2aWV3KHRoaXMucHJvcHMudXJsKSxcbiAgICAgICAgICAgIHRoaXMucHJvcHMubm9WaXN1YWxpemF0aW9uICYmIHN0eWxlcy5iaWdQcmV2aWV3LFxuICAgICAgICAgIF19XG4gICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy5zaG93SW5zdHJ1Y3Rpb25zRGlhbG9nfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBzdHlsZXMgPSB7XG4gIHdyYXBwZXI6IHtcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgfSxcbiAgYW5pR2lmUHJldmlldzogdXJsID0+ICh7XG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCcke3VybH0nKWAsXG4gIH0pLFxuICAvLyBJbiBKaWdzYXcgbGV2ZWxzLCB3ZSB3YW50IGFuaWdpZiBwcmV2aWV3IHRvIGJlIGxhcmdlciAobm9ybWFsbHkgaXQncyA4MHg2MClcbiAgYmlnUHJldmlldzoge1xuICAgIHdpZHRoOiAyNDAsXG4gICAgaGVpZ2h0OiAxODAsXG4gICAgYmFja2dyb3VuZFNpemU6ICcyNDBweCAxODBweCcsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VQcmV2aWV3ID0gUmFkaXVtKEltYWdlUHJldmlld1Vud3JhcHBlZCk7XG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KFxuICBzdGF0ZSA9PiAoe1xuICAgIHVybDogc3RhdGUucGFnZUNvbnN0YW50cy5hbmlHaWZVUkwsXG4gICAgbm9WaXN1YWxpemF0aW9uOiBzdGF0ZS5wYWdlQ29uc3RhbnRzLm5vVmlzdWFsaXphdGlvbixcbiAgfSksXG4gIGRpc3BhdGNoID0+ICh7XG4gICAgc2hvd0luc3RydWN0aW9uc0RpYWxvZygpIHtcbiAgICAgIGRpc3BhdGNoKG9wZW5EaWFsb2coe2ltZ09ubHk6IHRydWV9KSk7XG4gICAgfSxcbiAgfSlcbikoSW1hZ2VQcmV2aWV3KTtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgY29sb3IgZnJvbSAnQGNkby9hcHBzL3V0aWwvY29sb3InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFeGFtcGxlSW1hZ2Uoe3NyY30pIHtcbiAgLy8gVE9ETzogQTExeTI3OSAoaHR0cHM6Ly9jb2RlZG90b3JnLmF0bGFzc2lhbi5uZXQvYnJvd3NlL0ExMVktMjc5KVxuICAvLyBWZXJpZnkgb3IgdXBkYXRlIHRoaXMgYWx0LXRleHQgYXMgbmVjZXNzYXJ5XG4gIHJldHVybiA8aW1nIHN0eWxlPXtzdHlsZXMuaW1nfSBzcmM9e3NyY30gYWx0PVwiXCIgLz47XG59XG5cbkV4YW1wbGVJbWFnZS5wcm9wVHlwZXMgPSB7XG4gIHNyYzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxufTtcblxuY29uc3Qgc3R5bGVzID0ge1xuICBpbWc6IHtcbiAgICAvLyBTdHlsZXMgYmVsb3cgYXJlIHRha2VuIGZyb20gLmV4YW1wbGUtaW1hZ2UgaW4gYXBwbGljYXRpb24uc2Nzcy5cbiAgICAvLyBUaGV5IGFyZSByZWltcGxlbWVudGVkIGhlcmUgdG8gZGVjb3VwbGUgdGhpcyBjb21wb25lbnQgZnJvbVxuICAgIC8vIGJhY2tlbmQgc3R5bGluZy5cbiAgICBib3hTaGFkb3c6IGAwIDEwcHggMTNweCAtMTFweCAke2NvbG9yLmJsYWNrfWAsXG4gICAgYm9yZGVyOiBgMnB4IHNvbGlkICR7Y29sb3IubGlnaHRfZ3JheX1gLFxuICAgIGJvcmRlclJhZGl1czogMjUsXG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIH0sXG59O1xuIiwiaW1wb3J0IHtyZW5kZXJCdXR0b25zfSBmcm9tICdAbWljcm9zb2Z0L2ltbWVyc2l2ZS1yZWFkZXItc2RrJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IGNvb2tpZXMgZnJvbSAnanMtY29va2llJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IGhhbmRsZUxhdW5jaEltbWVyc2l2ZVJlYWRlciBmcm9tICdAY2RvL2FwcHMvdXRpbC9pbW1lcnNpdmVfcmVhZGVyJztcblxuY2xhc3MgSW1tZXJzaXZlUmVhZGVyQnV0dG9uIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhhc1JvdW5kQm9yZGVyczogUHJvcFR5cGVzLmJvb2wsXG4gICAgLy8gVE9ETzogW1BoYXNlIDJdIFRoaXMgaXMgYSBzd2l0Y2ggZm9yIGxlZ2FjeSBzdHlsZXMgbmVlZGVkIHRvIHJldmVydCBKYXZhbGFiIHJlYnJhbmRpbmcgY2hhbmdlcy5cbiAgICAvLyAgb25jZSB3ZSB1cGRhdGUgSmF2YWxhYiB0byBuZXcgc3R5bGVzIHdlJ2xsIG5lZWQgdG8gcmVtb3ZlIHRoaXMgcHJvcCBhbmQgYWxsIG9mIGl0J3MgdXNhZ2VcbiAgICAvLyAgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RlLWRvdC1vcmcvY29kZS1kb3Qtb3JnL3B1bGwvNTA5MjRcbiAgICBpc0xlZ2FjeVN0eWxlczogUHJvcFR5cGVzLmJvb2wsXG4gIH07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKHRoaXMuc2hvdWxkUmVuZGVyKCkgJiYgIXRoaXMucmVuZGVyQnV0dG9uc0NhbGxlZCkge1xuICAgICAgLy8gQXBwbGllcyBpbmxpbmUgc3R5bGluZyB0byB0aGUgLmltbWVyc2l2ZS1yZWFkZXItYnV0dG9uIGVsZW1lbnRzXG4gICAgICByZW5kZXJCdXR0b25zKHtcbiAgICAgICAgZWxlbWVudHM6IFt0aGlzLmNvbnRhaW5lcl0sXG4gICAgICB9KTtcbiAgICAgIC8vIE1ha2Ugc3VyZSByZW5kZXJCdXR0b25zKCkgaXMgb25seSBjYWxsZWQgb25jZS5cbiAgICAgIHRoaXMucmVuZGVyQnV0dG9uc0NhbGxlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlS2V5RG93bihldmVudCwgbG9jYWxlLCB0aXRsZSwgdGV4dCkge1xuICAgIC8vIHNob3VsZCB0cmlnZ2VyIGJ1dHRvbiBwcmVzcyBvbiBlbnRlciBvciBzcGFjZSBwcmVzc2VkXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgaGFuZGxlTGF1bmNoSW1tZXJzaXZlUmVhZGVyKGxvY2FsZSwgdGl0bGUsIHRleHQpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge3RpdGxlLCB0ZXh0LCBoYXNSb3VuZEJvcmRlcnMsIGlzTGVnYWN5U3R5bGVzfSA9IHRoaXMucHJvcHM7XG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlIGZyb20gdGhlIGxhbmd1YWdlIGNvb2tpZS5cbiAgICBjb25zdCBsb2NhbGUgPSBjb29raWVzLmdldCgnbGFuZ3VhZ2VfJykgfHwgJ2VuLVVTJztcblxuICAgIGlmICghdGhpcy5zaG91bGRSZW5kZXIoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICByZWY9e2VsID0+ICh0aGlzLmNvbnRhaW5lciA9IGVsKX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFxuICAgICAgICAgICdpbW1lcnNpdmUtcmVhZGVyLWJ1dHRvbicsXG4gICAgICAgICAgaXNMZWdhY3lTdHlsZXMgJiYgJ2ltbWVyc2l2ZS1yZWFkZXItYnV0dG9uLWxlZ2FjeS1zdHlsZXMnXG4gICAgICAgICl9XG4gICAgICAgIGRhdGEtYnV0dG9uLXN0eWxlPXsnaWNvbid9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiBoYXNSb3VuZEJvcmRlcnMgPyA0IDogJzRweCAwIDAgNHB4JyxcbiAgICAgICAgfX1cbiAgICAgICAgZGF0YS1sb2NhbGU9e2xvY2FsZX1cbiAgICAgICAgb25DbGljaz17ZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGhhbmRsZUxhdW5jaEltbWVyc2l2ZVJlYWRlcihsb2NhbGUsIHRpdGxlLCB0ZXh0KTtcbiAgICAgICAgfX1cbiAgICAgICAgb25LZXlEb3duPXtlID0+IHRoaXMuaGFuZGxlS2V5RG93bihlLCBsb2NhbGUsIHRpdGxlLCB0ZXh0KX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIC8vIERldGVybWluZXMgaWYgdGhpcyBidXR0b24gc2hvdWxkIGJlIHJlbmRlcmVkLlxuICBzaG91bGRSZW5kZXIoKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gdGV4dCwgdGhlbiBza2lwIHJlbmRlcmluZyBpdC5cbiAgICByZXR1cm4gISF0aGlzLnByb3BzLnRleHQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1tZXJzaXZlUmVhZGVyQnV0dG9uO1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQSB0YWJsZSBvZiBpbnB1dHMgYW5kIGV4cGVjdGVkIG91dHB1dHMgdGhhdCBpcyBvbmx5IHVzZWQgYnkgQ2FsYyBhbmQgU3R1ZGlvLlxuICovXG52YXIgSW5wdXRPdXRwdXRUYWJsZSA9IGZ1bmN0aW9uIChwcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8dGFibGU+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGg+SW5wdXQ8L3RoPlxuICAgICAgICAgICAgPHRoPk91dHB1dDwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICB7cHJvcHMuZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8dHIga2V5PXtpbmRleH0+XG4gICAgICAgICAgICAgICAgPHRkPntpdGVtWzBdfTwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkPntpdGVtWzFdfTwvdGQ+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pfVxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5JbnB1dE91dHB1dFRhYmxlLnByb3BUeXBlcyA9IHtcbiAgZGF0YTogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlcikpLmlzUmVxdWlyZWQsXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IElucHV0T3V0cHV0VGFibGU7XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IGkxOG4gZnJvbSAnQGNkby9sb2NhbGUnO1xuXG5pbXBvcnQgQW5pR2lmUHJldmlldyBmcm9tICcuL0FuaUdpZlByZXZpZXcnO1xuaW1wb3J0IEV4YW1wbGVJbWFnZSBmcm9tICcuL0V4YW1wbGVJbWFnZSc7XG5pbXBvcnQgSW1tZXJzaXZlUmVhZGVyQnV0dG9uIGZyb20gJy4vSW1tZXJzaXZlUmVhZGVyQnV0dG9uJztcbmltcG9ydCBJbnB1dE91dHB1dFRhYmxlIGZyb20gJy4vSW5wdXRPdXRwdXRUYWJsZSc7XG5pbXBvcnQgTWFya2Rvd25JbnN0cnVjdGlvbnMgZnJvbSAnLi9NYXJrZG93bkluc3RydWN0aW9ucyc7XG5cbi8qKlxuICogQSBjb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgb3VyIGxldmVsIGluc3RydWN0aW9ucyB0ZXh0LCBhbmQgcG9zc2libHkgYWxzb1xuICogYXV0aG9yZWQgaGludHMgVUkgYW5kL29yIGFuIGFuaWdpZi4gVGhlc2UgaW5zdHJ1Y3Rpb25zIGNhbiBhcHBlYXIgaW4gdGhlIHRvcFxuICogcGFuZSBvciBpbiBhIG1vZGFsIGRpYWxvZy4gSW4gdGhlIGxhdHRlciBjYXNlLCB3ZSB3aWxsIHNvbWV0aW1lcyBzaG93IGp1c3RcbiAqIHRoZSBhbmlnaWYgKGluIHRoaXMgY2FzZSB0aGUgaW5zdHJ1Y3Rpb25zIHByb3AgbWF5IGJlIHVuZGVmaW5lZCkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluc3RydWN0aW9ucyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgaW5zdHJ1Y3Rpb25zOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGltZ1VSTDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBhdXRob3JlZEhpbnRzOiBQcm9wVHlwZXMuZWxlbWVudCxcbiAgICBpbnB1dE91dHB1dFRhYmxlOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubnVtYmVyKSksXG4gICAgaW5Ub3BQYW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvblJlc2l6ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNCbG9ja2x5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc0ltbWVyc2l2ZUJ1dHRvbkhhc1JvdW5kQm9yZGVyczogUHJvcFR5cGVzLmJvb2wsXG4gICAgLy8gVE9ETzogW1BoYXNlIDJdIFRoaXMgaXMgYSBzd2l0Y2ggZm9yIGxlZ2FjeSBzdHlsZXMgbmVlZGVkIHRvIHJldmVydCBKYXZhbGFiIHJlYnJhbmRpbmcgY2hhbmdlcy5cbiAgICAvLyAgb25jZSB3ZSB1cGRhdGUgSmF2YWxhYiB0byBuZXcgc3R5bGVzIHdlJ2xsIG5lZWQgdG8gcmVtb3ZlIHRoaXMgcHJvcCBhbmQgYWxsIG9mIGl0J3MgdXNhZ2VcbiAgICAvLyAgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RlLWRvdC1vcmcvY29kZS1kb3Qtb3JnL3B1bGwvNTA5MjRcbiAgICBpc0xlZ2FjeUltbWVyc2l2ZVN0eWxlczogUHJvcFR5cGVzLmJvb2wsXG4gICAgbm9JbnN0cnVjdGlvbnNXaGVuQ29sbGFwc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgaW5Ub3BQYW5lLFxuICAgICAgaW5zdHJ1Y3Rpb25zLFxuICAgICAgb25SZXNpemUsXG4gICAgICBpc0Jsb2NrbHksXG4gICAgICBpc0ltbWVyc2l2ZUJ1dHRvbkhhc1JvdW5kQm9yZGVycyxcbiAgICAgIGlzTGVnYWN5SW1tZXJzaXZlU3R5bGVzLFxuICAgICAgbm9JbnN0cnVjdGlvbnNXaGVuQ29sbGFwc2VkLFxuICAgICAgaW5wdXRPdXRwdXRUYWJsZSxcbiAgICAgIGltZ1VSTCxcbiAgICAgIGF1dGhvcmVkSGludHMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17aW5Ub3BQYW5lID8gc3R5bGVzLmluVG9wUGFuZSA6IHN0eWxlcy5ub3RJblRvcFBhbmV9PlxuICAgICAgICB7aW5zdHJ1Y3Rpb25zICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPEltbWVyc2l2ZVJlYWRlckJ1dHRvblxuICAgICAgICAgICAgICB0aXRsZT17aTE4bi5pbnN0cnVjdGlvbnMoKX1cbiAgICAgICAgICAgICAgdGV4dD17aW5zdHJ1Y3Rpb25zfVxuICAgICAgICAgICAgICBoYXNSb3VuZEJvcmRlcnM9e2lzSW1tZXJzaXZlQnV0dG9uSGFzUm91bmRCb3JkZXJzfVxuICAgICAgICAgICAgICBpc0xlZ2FjeVN0eWxlcz17aXNMZWdhY3lJbW1lcnNpdmVTdHlsZXN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPE1hcmtkb3duSW5zdHJ1Y3Rpb25zXG4gICAgICAgICAgICAgIG1hcmtkb3duPXtpbnN0cnVjdGlvbnN9XG4gICAgICAgICAgICAgIG9uUmVzaXplPXtvblJlc2l6ZX1cbiAgICAgICAgICAgICAgaW5Ub3BQYW5lPXtpblRvcFBhbmV9XG4gICAgICAgICAgICAgIGlzQmxvY2tseT17aXNCbG9ja2x5fVxuICAgICAgICAgICAgICBub0luc3RydWN0aW9uc1doZW5Db2xsYXBzZWQ9e25vSW5zdHJ1Y3Rpb25zV2hlbkNvbGxhcHNlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICAgIHtpbnB1dE91dHB1dFRhYmxlICYmIDxJbnB1dE91dHB1dFRhYmxlIGRhdGE9e2lucHV0T3V0cHV0VGFibGV9IC8+fVxuICAgICAgICB7aW1nVVJMICYmICFpblRvcFBhbmUgJiYgPEV4YW1wbGVJbWFnZSBzcmM9e2ltZ1VSTH0gLz59XG4gICAgICAgIHtpbWdVUkwgJiYgaW5Ub3BQYW5lICYmIDxBbmlHaWZQcmV2aWV3IC8+fVxuICAgICAgICB7YXV0aG9yZWRIaW50c31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0ge1xuICBpblRvcFBhbmU6IHtcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIH0sXG4gIG5vdEluVG9wUGFuZToge1xuICAgIG92ZXJmbG93OiAnYXV0bycsXG4gIH0sXG59O1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmFkaXVtIGZyb20gJ3JhZGl1bSc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1pbXBvcnRzXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5cbmltcG9ydCBFbmhhbmNlZFNhZmVNYXJrZG93biBmcm9tICcuLi9FbmhhbmNlZFNhZmVNYXJrZG93bic7XG5cbmltcG9ydCB7Y29udmVydFhtbFRvQmxvY2tseX0gZnJvbSAnLi91dGlscyc7XG5cbmNsYXNzIE1hcmtkb3duSW5zdHJ1Y3Rpb25zIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBtYXJrZG93bjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG5vSW5zdHJ1Y3Rpb25zV2hlbkNvbGxhcHNlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgb25SZXNpemU6IFByb3BUeXBlcy5mdW5jLFxuICAgIGluVG9wUGFuZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNCbG9ja2x5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzaG93SW1hZ2VEaWFsb2c6IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgbm9JbnN0cnVjdGlvbnNXaGVuQ29sbGFwc2VkOiBmYWxzZSxcbiAgfTtcblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmNvbmZpZ3VyZU1hcmtkb3duXygpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIGlmIChwcmV2UHJvcHMubWFya2Rvd24gIT09IHRoaXMucHJvcHMubWFya2Rvd24pIHtcbiAgICAgIHRoaXMuY29uZmlndXJlTWFya2Rvd25fKCk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgY29uc3QgZGV0YWlsc0RPTSA9ICQoUmVhY3RET00uZmluZERPTU5vZGUodGhpcykpLmZpbmQoJ2RldGFpbHMnKTtcbiAgICBpZiAoZGV0YWlsc0RPTS5kZXRhaWxzKSB7XG4gICAgICBkZXRhaWxzRE9NLm9mZigndG9nZ2xlLmRldGFpbHMuVG9wSW5zdHJ1Y3Rpb25zJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCBhbnkgbmVjZXNzYXJ5IGpRdWVyeSB0byBvdXIgbWFya2Rvd25cbiAgICovXG4gIGNvbmZpZ3VyZU1hcmtkb3duXygpIHtcbiAgICBpZiAoIXRoaXMucHJvcHMub25SZXNpemUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aGlzTm9kZSA9IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIC8vIElmIHdlIGhhdmUgdGhlIGpRdWVyeSBkZXRhaWxzIHBsdWdpbiwgZW5hYmxlIGl0cyB1c2FnZSBvbiBhbnkgZGV0YWlsc1xuICAgIC8vIGVsZW1lbnRzXG4gICAgY29uc3QgZGV0YWlsc0RPTSA9ICQodGhpc05vZGUpLmZpbmQoJ2RldGFpbHMnKTtcbiAgICBpZiAoZGV0YWlsc0RPTS5kZXRhaWxzKSB7XG4gICAgICBkZXRhaWxzRE9NLmRldGFpbHMoKTtcbiAgICAgIGRldGFpbHNET00ub24oe1xuICAgICAgICAndG9nZ2xlLmRldGFpbHMuVG9wSW5zdHJ1Y3Rpb25zJzogKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvcHMub25SZXNpemUoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmlzQmxvY2tseSkge1xuICAgICAgLy8gQ29udmVydCBhbnkgaW5saW5lIFhNTCBpbnRvIGJsb2NrbHkgYmxvY2tzLiBOb3RlIHRoYXQgd2Ugd2FudCB0b1xuICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IGluaXRpYWxpemUgYW55IGJsb2Nrc3BhY2UgYmVmb3JlIHRoZSBtYWluXG4gICAgICAvLyBibG9jayBzcGFjZSBoYXMgYmVlbiBjcmVhdGVkLCBsZXN0IHdlIHZpb2xhdGUgc29tZSBhc3N1bXB0aW9uc1xuICAgICAgLy8gYmxvY2tseSBoYXMuXG4gICAgICBCbG9ja2x5LkJsb2NrU3BhY2Uub25NYWluQmxvY2tTcGFjZUNyZWF0ZWQoKCkgPT4ge1xuICAgICAgICBjb252ZXJ0WG1sVG9CbG9ja2x5KFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpKTtcbiAgICAgICAgdGhpcy5wcm9wcy5vblJlc2l6ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUGFyZW50IG5lZWRzIHRvIHJlYWRqdXN0IHNvbWUgc2l6aW5nIGFmdGVyIGltYWdlcyBoYXZlIGxvYWRlZFxuICAgICQodGhpc05vZGUpLmZpbmQoJ2ltZycpLmxvYWQodGhpcy5wcm9wcy5vblJlc2l6ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge2luVG9wUGFuZSwgbWFya2Rvd259ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGNhbkNvbGxhcHNlID0gIXRoaXMucHJvcHMubm9JbnN0cnVjdGlvbnNXaGVuQ29sbGFwc2VkO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cImluc3RydWN0aW9ucy1tYXJrZG93blwiXG4gICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgc3R5bGVzLnN0YW5kYXJkLFxuICAgICAgICAgIGluVG9wUGFuZSAmJiBzdHlsZXMuaW5Ub3BQYW5lLFxuICAgICAgICAgIGluVG9wUGFuZSAmJiBjYW5Db2xsYXBzZSAmJiBzdHlsZXMuaW5Ub3BQYW5lQ2FuQ29sbGFwc2UsXG4gICAgICAgIF19XG4gICAgICA+XG4gICAgICAgIDxFbmhhbmNlZFNhZmVNYXJrZG93biBtYXJrZG93bj17bWFya2Rvd259IGV4cGFuZGFibGVJbWFnZXMgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0ge1xuICBzdGFuZGFyZDoge1xuICAgIG1hcmdpbkJvdHRvbTogMzUsXG4gICAgcGFkZGluZ1RvcDogMTksXG4gIH0sXG4gIGluVG9wUGFuZToge1xuICAgIG1hcmdpblRvcDogMTAsXG4gICAgbWFyZ2luQm90dG9tOiAxMCxcbiAgICBwYWRkaW5nVG9wOiAwLFxuICB9LFxuICBpblRvcFBhbmVDYW5Db2xsYXBzZToge1xuICAgIG1hcmdpblRvcDogMCxcbiAgICBtYXJnaW5Cb3R0b206IDAsXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSYWRpdW0oTWFya2Rvd25JbnN0cnVjdGlvbnMpO1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuXG4vKipcbiAqIENoZWNrcyB0aGUgZ2l2ZW4gaW5wdXRzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBpbnN0cnVjdGlvbiBwYW5lbCBzaG91bGQgYmUgZGlzcGxheWVkXG4gKiBAcGFyYW0ge3N0cmluZ30gc2hvcnRJbnN0cnVjdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb25nSW5zdHJ1Y3Rpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGhhc0NvbnRhaW5lZExldmVsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzSW5zdHJ1Y3Rpb25zKFxuICBzaG9ydEluc3RydWN0aW9ucyxcbiAgbG9uZ0luc3RydWN0aW9ucyxcbiAgaGFzQ29udGFpbmVkTGV2ZWxzXG4pIHtcbiAgcmV0dXJuICEhKHNob3J0SW5zdHJ1Y3Rpb25zIHx8IGxvbmdJbnN0cnVjdGlvbnMgfHwgaGFzQ29udGFpbmVkTGV2ZWxzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjb21wb25lbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZU1hcmdpblxuICogQHJldHVybnMge251bWJlcn0gVGhlIGN1cnJlbnQgY29tcHV0ZWQgaGVpZ2h0IGluIHBpeGVscyBvZiB0aGUgc3BlY2lmaWVkIGNvbXBvbmVudCxcbiAqIGluY2x1ZGluZyBwYWRkaW5nLCBib3JkZXIsIGFuZCAob3B0aW9uYWxseSkgbWFyZ2lucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE91dGVySGVpZ2h0KGNvbXBvbmVudCwgaW5jbHVkZU1hcmdpbiA9IGZhbHNlKSB7XG4gIHJldHVybiAkKFJlYWN0RE9NLmZpbmRET01Ob2RlKGNvbXBvbmVudCkpLm91dGVySGVpZ2h0KGluY2x1ZGVNYXJnaW4pO1xufVxuXG4vKipcbiAqIE1hbnVhbGx5IHNjcm9sbHMgdGhlIHNwZWNpZmllZCBlbGVtZW50IGJ5IHRoZSBzcGVjaWZpZWQgZGVsdGFcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBzY3JvbGxcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVkgVGhlIGRpc3RhbmNlIChwb3NpdGl2ZSBvciBuZWdhdGl2ZSkgaW4gcGl4ZWxzXG4gKiAgICAgICAgdG8gc2Nyb2xsIGJ5XG4gKiBAcGFyYW0ge251bWJlcn0gYW5pbWF0ZSBJZiBzcGVjaWZpZWQsIHRoZSBhbmltYXRpb24gdGltZSBpbiBtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsQnkoZWxlbWVudCwgZGVsdGFZLCBhbmltYXRlID0gNDAwKSB7XG4gIGNvbnN0IG5ld1Njcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsVG9wICsgZGVsdGFZO1xuICBzY3JvbGxUbyhlbGVtZW50LCBuZXdTY3JvbGxUb3AsIGFuaW1hdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG8oZWxlbWVudCwgc2Nyb2xsVG9wLCBhbmltYXRlID0gNDAwKSB7XG4gIGlmIChhbmltYXRlKSB7XG4gICAgbGV0ICRlbGVtID0gJChlbGVtZW50KTtcbiAgICBpZiAoISRlbGVtLmlzKCc6YW5pbWF0ZWQnKSkge1xuICAgICAgJGVsZW0uYW5pbWF0ZShcbiAgICAgICAge1xuICAgICAgICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wLFxuICAgICAgICB9LFxuICAgICAgICBhbmltYXRlXG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgfVxufVxuXG4vKipcbiAqIFNocmluayB0aGUgRE9NIGVsZW1lbnQgY29udGFpbmluZyB0aGUgZ2l2ZW4gYmxvY2tTcGFjZSB0byB0aGUgbWluaW11bSBzaXplXG4gKiByZXF1aXJlZCB0byBjb250YWluIHRoZSBibG9jayBzcGFjZVxuICogQHBhcmFtIHtCbG9ja1NwYWNlfSBibG9ja1NwYWNlIC0gdGhlIEJsb2NrbHkgQmxvY2tTcGFjZSB0byByZXNpemVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gd2l0aFBhZGRpbmcgLSB3aGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHBhZGRpbmdcbiAqIEBzZWUgY29udmVydFhtbFRvQmxvY2tseVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hyaW5rQmxvY2tTcGFjZUNvbnRhaW5lcihibG9ja1NwYWNlLCB3aXRoUGFkZGluZykge1xuICBjb25zdCBjb250YWluZXIgPSBibG9ja1NwYWNlLmdldENvbnRhaW5lcigpO1xuXG4gIC8vIGNhbGN1bGF0ZSB0aGUgbWluaW11bSByZXF1aXJlZCBzaXplIGZvciB0aGUgY29udGFpbmVyXG4gIGNvbnN0IG1ldHJpY3MgPSBibG9ja1NwYWNlLmdldE1ldHJpY3MoKTtcbiAgbGV0IGhlaWdodCA9IG1ldHJpY3MuY29udGVudEhlaWdodDtcbiAgbGV0IHdpZHRoID0gbWV0cmljcy5jb250ZW50V2lkdGg7XG5cbiAgaWYgKHdpdGhQYWRkaW5nKSB7XG4gICAgaGVpZ2h0ICs9IG1ldHJpY3MuY29udGVudFRvcCAqIDI7XG4gICAgd2lkdGggKz0gbWV0cmljcy5jb250ZW50TGVmdDtcbiAgfVxuXG4gIC8vIGFuZCBzaHJpbmsgaXQsIHRyaWdnZXJpbmcgYSBibG9ja3NwYWNlIHJlc2l6ZSB3aGVuIHdlIGRvIHNvXG4gIGNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICBjb250YWluZXIuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gIEJsb2NrbHkuY2RvVXRpbHMud29ya3NwYWNlU3ZnUmVzaXplKGJsb2NrU3BhY2UpO1xufVxuXG4vKipcbiAqIFJlbW92ZSBhbGwgQ29tbWVudCBub2RlcyBmcm9tIGEgTm9kZSB0cmVlXG4gKiBAcGFyYW0ge05vZGV9IHJvb3RcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ29tbWVudE5vZGVzKHJvb3QpIHtcbiAgY29uc3QgY29tbWVudFdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgcm9vdCxcbiAgICBOb2RlRmlsdGVyLlNIT1dfQ09NTUVOVCxcbiAgICB7YWNjZXB0Tm9kZTogbm9kZSA9PiBOb2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFR9LFxuICAgIGZhbHNlXG4gICk7XG4gIC8vIGNvbW1lbnRXYWxrZXIuY3VycmVudE5vZGUgd2lsbCBhbHdheXMgZXF1YWwgdGhlIHJvb3QgdG8gc3RhcnQgd2l0aCwgc29cbiAgLy8gY2FsbCBuZXh0Tm9kZSB0byBtb3ZlIGl0IG9uIHRvIHRoZSBmaXJzdCBDb21tZW50IG5vZGVcbiAgbGV0IGxhc3QgPSBjb21tZW50V2Fsa2VyLm5leHROb2RlKCk7XG4gIC8vIGlmIHRoZXJlIGFyZSBhbnkgQ29tbWVudCBub2RlcyBpbiB0aGUgdHJlZSwgdGhlIGZpcnN0IG9uZSB3aWxsIG5vdyBiZVxuICAvLyBmb3VuZCBhdCBjb21tZW50V2Fsa2VyLmN1cnJlbnROb2RlLiBJZiB3ZSByZW1vdmUgaXQgcmlnaHQgYXdheSwgdGhlblxuICAvLyBjb21tZW50V2Fsa2VyIHdvbid0IGJlIGFibGUgdG8gZmluZCB0aGUgbmV4dCBub2RlLCBzaW5jZSBpdCB0cmllcyB0byBkbyBzb1xuICAvLyBieSB3YWxraW5nIHRoZSBhY3R1YWwgRE9NIHRyZWUgZnJvbSBpdHMgY3VycmVudC4gVGhlcmVmb3JlIHdlIG9ubHkgcmVtb3ZlXG4gIC8vIG5vZGVzIGFzIGNvbW1lbnRXYWxrZXIgX3Bhc3Nlc18gdGhlbSwgbm90IG9uY2UgaXQgYXJyaXZlcy5cbiAgaWYgKGxhc3QpIHtcbiAgICB3aGlsZSAoY29tbWVudFdhbGtlci5uZXh0Tm9kZSgpKSB7XG4gICAgICBsYXN0LnJlbW92ZSgpO1xuICAgICAgbGFzdCA9IGNvbW1lbnRXYWxrZXIuY3VycmVudE5vZGU7XG4gICAgfVxuICAgIGxhc3QucmVtb3ZlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbnkgaW5saW5lIFhNTCBpbiB0aGUgY29udGFpbmVyIGVsZW1lbnQgaW50byBlbWJlZGRlZFxuICogcmVhZC1vbmx5IHdvcmtzcGFjZXMgaW4gbG9uZyBpbnN0cnVjdGlvbnMgb3IgYXV0aG9yZWQgaGludHMgaW4gdGhlIEluc3RydWN0aW9ucyBwYW5lbC5cbiAqIEBwYXJhbSB7RWxlbWVudH0geG1sQ29udGFpbmVyIFRoZSBlbGVtZW50IGluIHdoaWNoIHRvIHNlYXJjaCBmb3IgWE1MXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGlzUnRsIFRydWUgaWYgd2UgYXJlIGRpc3BsYXlpbmcgaW4gUlRMXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0WG1sVG9CbG9ja2x5KHhtbENvbnRhaW5lciwgaXNSdGwpIHtcbiAgLy8gYmxvY2tTcGFjZUNvbnRhaW5lcnMgYXJlIGVsZW1lbnRzIChkaXYgb3Igc3BhbikgdGhhdCBjb250YWluIGVtYmVkZGVkIHdvcmtzcGFjZXNcbiAgLy8gV2UgYWRkIHRoZSBjbGFzcyBuYW1lICdyZWFkb25seS1ibG9jay1zcGFjZS1jb250YWluZXInIHRvIHRoZXNlIGVsZW1lbnRzIHdoZW4gdGhleSBhcmUgY3JlYXRlZFxuICAvLyBzbyB0aGF0IHRoZXkgY2FuIGJlIGVhc2lseSByZW1vdmVkICB0byBwcmV2ZW50IHRoZSBkdXBsaWNhdGlvbiBvZiBibG9ja3Mgd2hlbiB0b2dnbGluZ1xuICAvLyBiZXR3ZWVuIGxvbmcvc2hvcnQgaW5zdHJ1Y3Rpb25zIG9yIHdoZW4gdGhlIGJsb2NrcyBhcmUgcmVuZGVyZWQgaW4gdGhlIGxldmVsYnVpbGRlclxuICAvLyBlZGl0IG1vZGUuXG4gIEFycmF5LmZyb20oXG4gICAgeG1sQ29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3JlYWRvbmx5LWJsb2NrLXNwYWNlLWNvbnRhaW5lcicpXG4gICkuZm9yRWFjaChjb250YWluZXIgPT4gY29udGFpbmVyLnJlbW92ZSgpKTtcblxuICBjb25zdCB4bWxzID0geG1sQ29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd4bWwnKTtcbiAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh4bWxzLCBmdW5jdGlvbiAoeG1sKSB7XG4gICAgLy8gU2tpcCBjb252ZXJzaW9uIGlmIFhNTCBhbHJlYWR5IGhhcyBhIGJsb2Nrc3BhY2VcbiAgICBpZiAoeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBPdXIgWE1MIGlzIG9jY2FzaW9uYWxseSBnZW5lcmF0ZWQgYnkgUmVhY3QsIHNvIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRvXG4gICAgLy8gcmVtb3ZlIHRob3NlIGByZWFjdC10ZXh0YCBjb21tZW50cyBSZWFjdCBsaWtlcyB0byBhZGQuIFRoaXMgZG9lcyBtYWtlXG4gICAgLy8gdGhpbmdzIGhhcmRlciBmb3IgUmVhY3Qgd2hlbiBpdCB0cmllcyB0byB1cGRhdGUsIHNvIGlkZWFsbHkgd2UnZCBmaW5kIGFcbiAgICAvLyB3YXkgdG8gZG8gdGhpcyB3aXRob3V0IGZpZ2h0aW5nIFJlYWN0IGxpa2UgdGhpcy4gUGVyaGFwcyBkbyBhbGwgb2YgdGhpc1xuICAgIC8vIGRpcmVjdGx5IGluIFJlYWN0P1xuICAgIHJlbW92ZUNvbW1lbnROb2Rlcyh4bWwpO1xuXG4gICAgLy8gZW1iZWRkZWQgYmxvY2tzIGNhbiBiZSBkaXNwbGF5ZWQgZWl0aGVyIFwiaW5saW5lXCIgYXMgcGFydCBvZiBhIHBhcmFncmFwaFxuICAgIC8vIG9yIFwiYmxvY2tcIiBhbGwgb24gdGhlaXIgb3duLiBcImJsb2NrXCIgaXMgdGhlIGRlZmF1bHQuXG4gICAgY29uc3QgaW5saW5lID0geG1sLnBhcmVudE5vZGUudGFnTmFtZSA9PT0gJ1AnO1xuXG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmVyIGFuZCBpbnNlcnQgdGhlIGJsb2Nrc3BhY2UgaW50byBpdFxuICAgIGNvbnN0IGJsb2NrU3BhY2VDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGlubGluZSA/ICdzcGFuJyA6ICdkaXYnKTtcbiAgICBibG9ja1NwYWNlQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3JlYWRvbmx5LWJsb2NrLXNwYWNlLWNvbnRhaW5lcicpO1xuICAgIGlmIChpbmxpbmUpIHtcbiAgICAgIC8vIFNWR3MgZG9uJ3QgcGxheSBuaWNlbHkgaWYgdGhleSdyZSByZW5kZXJlZCBpbnRvIHB1cmVseSBpbmxpbmUgZWxlbWVudHMsXG4gICAgICAvLyBzbyBpZiBvdXIgY29udGFpbmVyIGlzIGEgc3BhbiBpdCBzaG91bGQgYmUgaW5saW5lLWJsb2NrXG4gICAgICBibG9ja1NwYWNlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcbiAgICB9XG5cbiAgICB4bWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYmxvY2tTcGFjZUNvbnRhaW5lciwgeG1sKTtcblxuICAgIC8vIERvbid0IHJlbmRlciB0aGUgcmF3IFhNTFxuICAgIHhtbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGNvbnN0IGJsb2NrU3BhY2UgPSBCbG9ja2x5LmNyZWF0ZUVtYmVkZGVkV29ya3NwYWNlKFxuICAgICAgYmxvY2tTcGFjZUNvbnRhaW5lcixcbiAgICAgIHhtbCxcbiAgICAgIHtcbiAgICAgICAgbm9TY3JvbGxpbmc6IHRydWUsXG4gICAgICAgIGlubGluZTogaW5saW5lLFxuICAgICAgICBydGw6IGlzUnRsLFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBnaXZlIGJsb2NrIGVtYmVkcyBtb3JlIHBhZGRpbmcgdGhhbiBpbmxpbmVcbiAgICBjb25zdCB3aXRoUGFkZGluZyA9ICFpbmxpbmU7XG5cbiAgICAvLyBmaW5hbGx5LCBzaHJpbmsgdGhlIGNvbnRhaW5lciB0byBleGFjdGx5IGNvbnRhaW4gdGhlIGJsb2Nrc3BhY2UuIE5vdGVcbiAgICAvLyB0aGF0IHNvbWUgYmxvY2tzIChsaWtlIEsxIGhhcnZlc3RlciBibG9ja3MsIHdoaWNoIHVzZSBGaWVsZEltYWdlcykgY2FuXG4gICAgLy8gcmVzaXplIGFmdGVyIGluaXRpYWwgcmVuZGVyLCBzbyB3ZSBhbHNvIHdhbnQgdG8gcmVzaXplIHRoZSBjb250YWluZXJcbiAgICAvLyB3aGVuZXZlciBhIGJsb2NrU3BhY2VDaGFuZ2UgcmVzdWx0cyBpbiB0aGUgY29udGVudCBzaXplIGNoYW5naW5nLlxuICAgIGxldCBtZXRyaWNzID0gYmxvY2tTcGFjZS5nZXRNZXRyaWNzKCk7XG4gICAgQmxvY2tseS5hZGRDaGFuZ2VMaXN0ZW5lcihibG9ja1NwYWNlLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBvbGRIZWlnaHQgPSBtZXRyaWNzLmNvbnRlbnRIZWlnaHQ7XG4gICAgICBjb25zdCBvbGRXaWR0aCA9IG1ldHJpY3MuY29udGVudFdpZHRoO1xuICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gYmxvY2tTcGFjZS5nZXRNZXRyaWNzKCkuY29udGVudEhlaWdodDtcbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gYmxvY2tTcGFjZS5nZXRNZXRyaWNzKCkuY29udGVudFdpZHRoO1xuXG4gICAgICAvLyBpZiB0aGUgYmxvY2tzcGFjZSdzIGNvbnRlbnQgc2l6ZSBoYXMgY2hhbmdlZCwga2ljayBvZmYgYW5vdGhlciBzeW5jIGFuZFxuICAgICAgLy8gc2F2ZSB0aGUgbmV3IG1ldHJpY3MgYXMgdGhlIG9sZCBvbmVzXG4gICAgICBpZiAobmV3SGVpZ2h0ICE9PSBvbGRIZWlnaHQgfHwgbmV3V2lkdGggIT09IG9sZFdpZHRoKSB7XG4gICAgICAgIHNocmlua0Jsb2NrU3BhY2VDb250YWluZXIoYmxvY2tTcGFjZSwgd2l0aFBhZGRpbmcpO1xuICAgICAgICBtZXRyaWNzID0gYmxvY2tTcGFjZS5nZXRNZXRyaWNzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzaHJpbmtCbG9ja1NwYWNlQ29udGFpbmVyKGJsb2NrU3BhY2UsIHdpdGhQYWRkaW5nKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGREaXNwbGF5Q2hhdFRpcHMoc2tpbklkKSB7XG4gIC8qZXNsaW50LWRpc2FibGUgbm8tZmFsbHRocm91Z2gqL1xuICBzd2l0Y2ggKHNraW5JZCkge1xuICAgIC8vIHNraW5zIHdpdGhvdXQgYXZhdGFyc1xuICAgIGNhc2UgJ2ppZ3Nhdyc6XG4gICAgLy8gc2tpbnMgd2l0aCBsaWNlbnNlZCBhdmF0YXJzXG4gICAgY2FzZSAnaW5maW5pdHknOlxuICAgIGNhc2UgJ2FubmEnOlxuICAgIGNhc2UgJ2Vsc2EnOlxuICAgIGNhc2UgJ2NyYWZ0JzpcbiAgICAvLyBzdGFyIHdhcnNcbiAgICBjYXNlICdob2MyMDE1JzpcbiAgICBjYXNlICdob2MyMDE1eCc6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qZXNsaW50LWVuYWJsZSBuby1mYWxsdGhyb3VnaCovXG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5cbmltcG9ydCB7SW1hZ2VQcmV2aWV3fSBmcm9tICcuLi9pbnN0cnVjdGlvbnMvQW5pR2lmUHJldmlldyc7XG5cbi8qKlxuICogQSBiYXNpYyBoZWxwZXIgZnVuY3Rpb24gdG8gZW5hYmxlIHRoZSBcImV4cGFuZGFibGUgaW1hZ2VzXCIgd2UgdXNlIGluIG91clxuICogICAgIGN1cnJpY3VsdW0gY29udGVudC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgLSBUaGUgRE9NIG5vZGUgY29udGFpbmluZyB0aGUgaW1hZ2VzLiBTdXBwb3J0cyBub2Rlc1xuICogICAgIHdpdGggbXVsdGlwbGUgY29udGFpbmVkIGltYWdlcy5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHNob3dJbWFnZURpYWxvZyAtIFRoZSBtZXRob2QgdG8gY2FsbCB3aGVuIHRoZSB1c2VyIGNsaWNrc1xuICogICAgIG9uIHRoZSBpbWFnZSwgd2hpY2ggd2lsbCBzaG93IHRoZSBtb2RhbCBkaWFsb2cgY29udGFpbmluZyB0aGUgZXhwYW5kZWRcbiAqICAgICBpbWFnZS5cbiAqXG4gKiBAc2VlIEBjZG8vYXBwcy9zcmMvdGVtcGxhdGVzL3BsdWdpbnMvZXhwYW5kYWJsZUltYWdlcy5qc1xuICogQHNlZSBAY2RvL2FwcHMvc3JjL3JlZHV4L2luc3RydWN0aW9uc0RpYWxvZy5qc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXhwYW5kYWJsZUltYWdlcyhub2RlLCBzaG93SW1hZ2VEaWFsb2cpIHtcbiAgY29uc3QgZXhwYW5kYWJsZUltYWdlcyA9IG5vZGUucXVlcnlTZWxlY3RvckFsbCgnLmV4cGFuZGFibGUtaW1hZ2UnKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHBhbmRhYmxlSW1hZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZXhwYW5kYWJsZUltZyA9IGV4cGFuZGFibGVJbWFnZXNbaV07XG5cbiAgICAvKlxuICAgICAqIFRPRE86IFdoZW4gdGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgY29udGV4dCBvZiBhbiBleGlzdGluZyBSZWFjdFxuICAgICAqIGNvbXBvbmVudCwgaXQgcmFpc2VzIHRoZSBmb2xsb3dpbmcgd2FybmluZzpcbiAgICAgKlxuICAgICAqID4gUmVwbGFjaW5nIFJlYWN0LXJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSBuZXcgcm9vdCBjb21wb25lbnQuIElmIHlvdVxuICAgICAqID4gaW50ZW5kZWQgdG8gdXBkYXRlIHRoZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUsIHlvdSBzaG91bGQgaW5zdGVhZCBoYXZlXG4gICAgICogPiB0aGUgZXhpc3RpbmcgY2hpbGRyZW4gdXBkYXRlIHRoZWlyIHN0YXRlIGFuZCByZW5kZXIgdGhlIG5ldyBjb21wb25lbnRzXG4gICAgICogPiBpbnN0ZWFkIG9mIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyLlxuICAgICAqXG4gICAgICogV2Ugc2hvdWxkIHByb2JhYmx5IHJlYnVpbGQgdGhpcyBpbiBzdWNoIGEgd2F5IGFzIHRvIG5vdCB2aW9sYXRlIFJlYWN0J3NcbiAgICAgKiBleHBlY3RhdGlvbnMgbGlrZSB0aGlzLlxuICAgICAqL1xuICAgIFJlYWN0RE9NLnJlbmRlcihcbiAgICAgIDxJbWFnZVByZXZpZXdcbiAgICAgICAgdXJsPXtleHBhbmRhYmxlSW1nLmRhdGFzZXQudXJsfVxuICAgICAgICBub1Zpc3VhbGl6YXRpb249e2ZhbHNlfVxuICAgICAgICBzaG93SW5zdHJ1Y3Rpb25zRGlhbG9nPXsoKSA9PlxuICAgICAgICAgIHNob3dJbWFnZURpYWxvZyhleHBhbmRhYmxlSW1nLmRhdGFzZXQudXJsKVxuICAgICAgICB9XG4gICAgICAvPixcbiAgICAgIGV4cGFuZGFibGVJbWdcbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQge2xhdW5jaEFzeW5jfSBmcm9tICdAbWljcm9zb2Z0L2ltbWVyc2l2ZS1yZWFkZXItc2RrJztcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSB0ZW1wb3JhcnkgYXV0aGVudGljYXRpb24gdG9rZW4gd2hpY2ggY2FuIGJlIHVzZWQgdG8gY2FsbCB0aGUgSW1tZXJzaXZlIFJlYWRlciBBUEkuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0geyB0b2tlbjogPGF1dGhfdG9rZW4+LCBzdWJkb21haW46IDxhenVyZV9zdWJkb21haW4+IH1cbiAqL1xuZnVuY3Rpb24gZ2V0VG9rZW5BbmRTdWJkb21haW5Bc3luYygpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAkLmFqYXgoe1xuICAgICAgdXJsOiAnL2FwaS9pbW1lcnNpdmVfcmVhZGVyX3Rva2VuJyxcbiAgICAgIHR5cGU6ICdHRVQnLFxuICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEuZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZGF0YS5lcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ2xpY2sgaGFuZGxlciBmb3IgdGhlIEltbWVyc2l2ZSBSZWFkZXIgQnV0dG9uIHdoaWNoIHdpbGwgdGFrZSB0aGUgZ2l2ZW4gdGV4dCBhbmQgbGF1bmNoIHRoZSBNaWNyb3NvZnQgSW1tZXJzaXZlXG4gKiBSZWFkZXIgaW50ZXJmYWNlLiBUaGlzIGludGVyZmFjZSBnaXZlcyBzdHVkZW50J3MgbWFueSB0b29scyB0byBjb250cm9sIGhvdyB0aGUgdGV4dCBpcyBwcmVzZW50ZWQgdGhlbS5cbiAqIEBwYXJhbSBsb2NhbGUgVGhlIGxvY2FsZSBvZiB0aGUgdGV4dCBlLmcuICdlbi1VUycsICdhci1TQScsIGV0Yy5cbiAqIEBwYXJhbSB0aXRsZSBUaGUgb3B0aW9uYWwgdGl0bGUgdG8gc2hvdyBhYm92ZSB0aGUgZ2l2ZW4gdGV4dCBpbiB0aGUgSW1tZXJzaXZlIFJlYWRlci5cbiAqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRoZSB1c2VyIHRoZSB3YW50cyB0byByZWFkIG1vcmUgZWFzaWx5LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYW5kbGVMYXVuY2hJbW1lcnNpdmVSZWFkZXIobG9jYWxlLCB0aXRsZSwgdGV4dCkge1xuICBnZXRUb2tlbkFuZFN1YmRvbWFpbkFzeW5jKClcbiAgICAudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gcmVzcG9uc2UudG9rZW47XG4gICAgICBjb25zdCBzdWJkb21haW4gPSByZXNwb25zZS5zdWJkb21haW47XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgIGNodW5rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHNhbml0aXplVGV4dCh0ZXh0KSxcbiAgICAgICAgICAgIGxhbmc6IGxvY2FsZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGxhdW5jaEFzeW5jKHRva2VuLCBzdWJkb21haW4sIGRhdGEsIHt1aVpJbmRleDogMjExM30pO1xuICAgIH0pXG4gICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHNhbml0aXplVGV4dCh0ZXh0KSB7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG4gIC8vIFN0cmlwIFhNTFxuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC88W14+XSo+L2csICcnKTtcblxuICAvLyBTdHJpcCBtYXJrZG93biBjaGFyYWN0ZXJzXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1tgKl0vZywgJycpO1xuICByZXR1cm4gdGV4dDtcbn1cbiIsImltcG9ydCB7UGF5bG9hZEFjdGlvbiwgY3JlYXRlU2xpY2V9IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2NrbHlTdGF0ZSB7XG4gIGhhc0luY29tcGF0aWJsZVNvdXJjZXM6IGJvb2xlYW47XG4gIGZhaWxlZFRvR2VuZXJhdGVDb2RlOiBib29sZWFuO1xufVxuXG5jb25zdCBpbml0aWFsU3RhdGU6IEJsb2NrbHlTdGF0ZSA9IHtcbiAgLy8gaGFzSW5jb21wYXRpYmxlU291cmNlcyBpcyBzZXQgdG8gdHJ1ZSBpZiB3ZSB0cnkgdG8gbG9hZCBqc29uIHNvdXJjZXMgaW5cbiAgLy8gQ0RPIEJsb2NrbHksIHdoaWNoIG9ubHkgc3VwcG9ydHMgeG1sLlxuICBoYXNJbmNvbXBhdGlibGVTb3VyY2VzOiBmYWxzZSxcbiAgLy8gSWYgd2UgZmFpbGVkIHRvIGdlbmVyYXRlIGNvZGUgZnJvbSBibG9ja3MgZm9yIGFueSByZWFzb24uXG4gIGZhaWxlZFRvR2VuZXJhdGVDb2RlOiBmYWxzZSxcbn07XG5cbmNvbnN0IGJsb2NrbHlTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogJ2Jsb2NrbHknLFxuICBpbml0aWFsU3RhdGUsXG4gIHJlZHVjZXJzOiB7XG4gICAgc2V0SGFzSW5jb21wYXRpYmxlU291cmNlcyhzdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPGJvb2xlYW4+KSB7XG4gICAgICBzdGF0ZS5oYXNJbmNvbXBhdGlibGVTb3VyY2VzID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgfSxcbiAgICBzZXRGYWlsZWRUb0dlbmVyYXRlQ29kZShzdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPGJvb2xlYW4+KSB7XG4gICAgICBzdGF0ZS5mYWlsZWRUb0dlbmVyYXRlQ29kZSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgIH0sXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IHtzZXRIYXNJbmNvbXBhdGlibGVTb3VyY2VzLCBzZXRGYWlsZWRUb0dlbmVyYXRlQ29kZX0gPVxuICBibG9ja2x5U2xpY2UuYWN0aW9ucztcblxuZXhwb3J0IGRlZmF1bHQgYmxvY2tseVNsaWNlLnJlZHVjZXI7XG4iLCIvKiogQGZpbGUgVHJhY2sgdGhlIGFwcCdzIGxheW91dCAqL1xuaW1wb3J0IHtQYXlsb2FkQWN0aW9uLCBjcmVhdGVTZWxlY3RvciwgY3JlYXRlU2xpY2V9IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExheW91dFN0YXRlIHtcbiAgdmlzdWFsaXphdGlvblNjYWxlOiBudW1iZXIgfCBudWxsO1xufVxuXG5jb25zdCBpbml0aWFsU3RhdGU6IExheW91dFN0YXRlID0ge1xuICB2aXN1YWxpemF0aW9uU2NhbGU6IG51bGwsXG59O1xuXG5jb25zdCBsYXlvdXRTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogJ2xheW91dCcsXG4gIGluaXRpYWxTdGF0ZSxcbiAgcmVkdWNlcnM6IHtcbiAgICBzZXRWaXN1YWxpemF0aW9uU2NhbGUoc3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxudW1iZXI+KSB7XG4gICAgICBzdGF0ZS52aXN1YWxpemF0aW9uU2NhbGUgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICB9LFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCB7c2V0VmlzdWFsaXphdGlvblNjYWxlfSA9IGxheW91dFNsaWNlLmFjdGlvbnM7XG5cbmNvbnN0IHNlbGVjdFNlbGYgPSAoc3RhdGU6IHtsYXlvdXQ6IExheW91dFN0YXRlfSkgPT4gc3RhdGUubGF5b3V0O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlzdWFsaXphdGlvblNjYWxlID0gY3JlYXRlU2VsZWN0b3IoXG4gIHNlbGVjdFNlbGYsXG4gIHN0YXRlID0+IHN0YXRlPy52aXN1YWxpemF0aW9uU2NhbGVcbik7XG5cbmV4cG9ydCBkZWZhdWx0IGxheW91dFNsaWNlLnJlZHVjZXI7XG4iXSwibmFtZXMiOlsiX3V0aWxzIiwicmVxdWlyZSIsIl9hY3Rpdml0eVV0aWxzIiwic2Vzc2lvblN0b3JhZ2UiLCJ3aW5kb3ciLCJjbGllbnRTdGF0ZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJsZXZlbFByb2dyZXNzQnlTY3JpcHQiLCJwcm9ncmVzc0pzb24iLCJnZXRJdGVtIiwiSlNPTiIsInBhcnNlIiwiZSIsInJlY29yZFZpc3VhbEVsZW1lbnRTZWVuIiwidmlzdWFsRWxlbWVudFR5cGUiLCJ2aXN1YWxFbGVtZW50SWQiLCJlbGVtZW50U2VlbiIsImVsZW1lbnRTZWVuSnNvbiIsInRyeVNldFNlc3Npb25TdG9yYWdlIiwic3RyaW5naWZ5IiwiaGFzU2VlblZpc3VhbEVsZW1lbnQiLCJjcmVhdGVLZXkiLCJzY3JpcHROYW1lIiwibGV2ZWxJZCIsInByZWZpeCIsInF1ZXJ5UGFyYW1zIiwiRVhQSVJZX0RBWVMiLCJNQVhJTVVNX0NBQ0hBQkxFX1JFU1VMVCIsInJlc2V0IiwiY2xlYXIiLCJjbGVhclByb2dyZXNzIiwicmVtb3ZlSXRlbSIsInJlbW92ZUl0ZW1zV2l0aFByZWZpeCIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJrZXkiLCJzdGFydHNXaXRoIiwiZm9yRWFjaCIsInNvdXJjZUZvckxldmVsIiwidGltZXN0YW1wIiwiZGF0YSIsInBhcnNlZCIsInNvdXJjZSIsIndyaXRlU291cmNlRm9yTGV2ZWwiLCJ1bmRlZmluZWQiLCJ0cmFja1Byb2dyZXNzIiwidGVzdFJlc3VsdCIsInByb2dyZXNzRGF0YSIsInNhdmVkUmVzdWx0IiwibWVyZ2VkUmVzdWx0IiwibWVyZ2VBY3Rpdml0eVJlc3VsdCIsImxldmVsUHJvZ3Jlc3MiLCJoYXNTZWVuVmlkZW8iLCJ2aWRlb0lkIiwicmVjb3JkVmlkZW9TZWVuIiwiaGFzU2VlbkNhbGxvdXQiLCJjYWxsb3V0SWQiLCJyZWNvcmRDYWxsb3V0U2VlbiIsImxvY2FsZSIsInN0YXRlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYWN0aW9uIiwidHlwZSIsIlNFVF9SVEwiLCJpc1J0bCIsInNldFJ0bCIsInNldFJ0bEZyb21ET00iLCJpc1J0bEZyb21ET00iLCJoZWFkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInBhcmVudEVsZW1lbnQiLCJkaXIiLCJnZXRBdHRyaWJ1dGUiLCJ0b0xvd2VyQ2FzZSIsInRlc3RJbWFnZUFjY2VzcyIsInVybCIsImVsZW1lbnQiLCJzdWNjZXNzQ2FsbGJhY2siLCJmYWlsdXJlQ2FsbGJhY2siLCJ0aW1lb3V0TXMiLCJ2aWRlb0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiSW1hZ2UiLCJjYWxsZWQiLCJmaW5pc2giLCJjYWxsYmFjayIsImNsZWFyVGltZW91dCIsInRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwib25lcnJvciIsIm9uZHVyYXRpb25jaGFuZ2UiLCJvbmxvYWQiLCJzcmMiLCJ0ZXN0SW1hZ2VzIiwicHVzaCIsImNvbW1vblN0eWxlcyIsInN0eWxlQ29uc3RhbnRzIiwiY29sb3IiLCJoaWRkZW4iLCJkaXNwbGF5IiwicHVycGxlSGVhZGVyIiwiaGVpZ2h0IiwiYmFja2dyb3VuZENvbG9yIiwicHVycGxlIiwid2hpdGUiLCJvdmVyZmxvd1kiLCJXZWJraXRVc2VyU2VsZWN0IiwiTW96VXNlclNlbGVjdCIsIm1zVXNlclNlbGVjdCIsInVzZXJTZWxlY3QiLCJwdXJwbGVIZWFkZXJVbmZvY3VzZWQiLCJsaWdodGVyX3B1cnBsZSIsIm5ldXRyYWxfd2hpdGUiLCJ0ZWFjaGVyQmx1ZUhlYWRlciIsImN5YW4iLCJsaWdodGVzdF9jeWFuIiwidGVhY2hlckhlYWRlclVuZm9jdXNlZCIsImRhcmtfY2hhcmNvYWwiLCJtaW5lY3JhZnRIZWFkZXIiLCJidXR0b24iLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSIsImZvbnRTaXplIiwiYnViYmxlIiwiYmxhY2siLCJtYXJnaW5Cb3R0b20iLCJwb3NpdGlvbiIsImN1cnNvciIsImFkZFJlYWR5TGlzdGVuZXIiLCJyZWFkeVN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImdldFRvdWNoRXZlbnROYW1lIiwiZXZlbnROYW1lIiwiaXNJRTExVG91Y2giLCJuYXZpZ2F0b3IiLCJwb2ludGVyRW5hYmxlZCIsImlzSUUxMFRvdWNoIiwibXNQb2ludGVyRW5hYmxlZCIsIlRPVUNIX01BUCIsImFkZEV2ZW50IiwiaGFuZGxlciIsInN1cHByZXNzVG91Y2hEZWZhdWx0IiwiYm91bmRFdmVudHMiLCJiaW5kRXZlbnQiLCJuYW1lIiwidW5iaW5kRXZlbnQiLCJldmVudEluZm8iLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidG91Y2hFdmVudCIsInByZXZlbnREZWZhdWx0IiwiaW5jbHVkZXMiLCJjYWxsIiwidGhpcyIsImFkZE1vdXNlRG93blRvdWNoRXZlbnQiLCJhZGRNb3VzZVVwVG91Y2hFdmVudCIsImFkZE1vdXNlTW92ZVRvdWNoRXZlbnQiLCJhZGRDbGlja1RvdWNoRXZlbnQiLCJjbGljayIsInN0YW5kYXJkIiwiaWUxMCIsImllMTEiLCJtb3VzZWRvd24iLCJtb3VzZXVwIiwibW91c2Vtb3ZlIiwiaXNNb2JpbGUiLCJ0ZXN0IiwidXNlckFnZW50IiwiaXNXaW5kb3dzVG91Y2giLCJpc0FuZHJvaWQiLCJpc0lPUyIsImlzSVBhZCIsInJlZHVjZXIiLCJhdXRob3JlZEhpbnRzSW5pdGlhbFN0YXRlIiwiRU5RVUVVRV9ISU5UUyIsIl9iaXNlY3QyIiwiX3NsaWNlZFRvQXJyYXkiLCJyIiwiX2FycmF5V2l0aEhvbGVzIiwiQXJyYXkiLCJpc0FycmF5IiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwibCIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIm4iLCJpIiwidSIsImEiLCJmIiwibyIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsImZyb20iLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwiYmlzZWN0IiwiaGludHMiLCJoaW50IiwiaGludHNVc2VkSWRzIiwiaW5kZXhPZiIsImhpbnRJZCIsInNlZW4iLCJ1bnNlZW4iLCJhc3NpZ24iLCJ1bnNlZW5IaW50cyIsImNvbmNhdCIsInNlZW5IaW50cyIsIlNIT1dfTkVYVF9ISU5UIiwibmV4dEhpbnQiLCJhbHJlYWR5U2VlbiIsIkRJU1BMQVlfTUlTU0lOR19CTE9DS19ISU5UUyIsInNlZW5IaW50IiwiaGludFR5cGUiLCJzb21lIiwibmV3SGludCIsIm5ld0hpbnRzVG9FbnF1ZXVlIiwiZXZlcnkiLCJ1bnNlZW5Ob25Db250ZXh0dWFsSGludHMiLCJuZXdVbnNlZW5IaW50cyIsIm5ld1NlZW5IaW50cyIsImVucXVldWVIaW50cyIsInNob3dOZXh0SGludCIsImRpc3BsYXlNaXNzaW5nQmxvY2tIaW50cyIsImluaXRpYWxTdGF0ZSIsIlNIT1dfRkVFREJBQ0siLCJkaXNwbGF5aW5nU2hhcmVDb250cm9scyIsIl9vYmplY3RTcHJlYWQiLCJkaXNwbGF5aW5nRmVlZGJhY2siLCJISURFX0ZFRURCQUNLIiwiU0VUX0JMT0NLX0xJTUlUIiwiYmxvY2tMaW1pdCIsIlNFVF9GRUVEQkFDS19EQVRBIiwiaXNDaGFsbGVuZ2UiLCJpc1BlcmZlY3QiLCJibG9ja3NVc2VkIiwiZGlzcGxheUZ1bm9tZXRlciIsInN0dWRlbnRDb2RlIiwiZmVlZGJhY2tJbWFnZSIsIlNFVF9BQ0hJRVZFTUVOVFMiLCJhY2hpZXZlbWVudHMiLCJkaXNwbGF5aW5nQ29kZSIsIm1lc3NhZ2UiLCJjb2RlIiwic2hvd0ZlZWRiYWNrIiwiaGlkZUZlZWRiYWNrIiwic2V0QmxvY2tMaW1pdCIsInNldEZlZWRiYWNrRGF0YSIsInByb3BzIiwic2V0QWNoaWV2ZW1lbnRzIiwiaW5zdHJ1Y3Rpb25zSW5pdGlhbFN0YXRlIiwiU0VUX0NPTlNUQU5UUyIsInNob3J0SW5zdHJ1Y3Rpb25zIiwibG9uZ0luc3RydWN0aW9ucyIsIkVycm9yIiwibm9JbnN0cnVjdGlvbnNXaGVuQ29sbGFwc2VkIiwic2hvcnRJbnN0cnVjdGlvbnMyIiwiZHluYW1pY0luc3RydWN0aW9ucyIsImhhc0NvbnRhaW5lZExldmVscyIsIm92ZXJsYXlWaXNpYmxlIiwidGVhY2hlck1hcmtkb3duIiwibGV2ZWxWaWRlb3MiLCJtYXBSZWZlcmVuY2UiLCJyZWZlcmVuY2VMaW5rcyIsIm11dGVCYWNrZ3JvdW5kTXVzaWMiLCJ1bm11dGVCYWNrZ3JvdW5kTXVzaWMiLCJwcm9ncmFtbWluZ0Vudmlyb25tZW50IiwiaXNDb2xsYXBzZWQiLCJUT0dHTEVfSU5TVFJVQ1RJT05TX0NPTExBUFNFRCIsIlNFVF9JTlNUUlVDVElPTlNfUkVOREVSRURfSEVJR0hUIiwiYWxsb3dSZXNpemUiLCJyZW5kZXJlZEhlaWdodCIsImV4cGFuZGVkSGVpZ2h0IiwiU0VUX0lOU1RSVUNUSU9OU19NQVhfSEVJR0hUX05FRURFRCIsIm1heE5lZWRlZEhlaWdodCIsIlNFVF9JTlNUUlVDVElPTlNfTUFYX0hFSUdIVF9BVkFJTEFCTEUiLCJtYXhBdmFpbGFibGVIZWlnaHQiLCJNYXRoIiwibWluIiwiU0VUX0FMTE9XX0lOU1RSVUNUSU9OU19SRVNJWkUiLCJTRVRfSEFTX0FVVEhPUkVEX0hJTlRTIiwiaGFzQXV0aG9yZWRIaW50cyIsIlNFVF9UVFNfQVVUT1BMQVlfRU5BQkxFRF9GT1JfTEVWRUwiLCJ0dHNBdXRvcGxheUVuYWJsZWRGb3JMZXZlbCIsIlNFVF9DT0RFX1JFVklFV19FTkFCTEVEX0ZPUl9MRVZFTCIsImNvZGVSZXZpZXdFbmFibGVkRm9yTGV2ZWwiLCJTRVRfRkVFREJBQ0siLCJmZWVkYmFjayIsIkhJREVfT1ZFUkxBWSIsImR5bmFtaWNJbnN0cnVjdGlvbnNEaXNtaXNzQ2FsbGJhY2siLCJTRVRfRFlOQU1JQ19JTlNUUlVDVElPTlNfREVGQVVMVFMiLCJkeW5hbWljSW5zdHJ1Y3Rpb25zRGVmYXVsdHMiLCJTRVRfRFlOQU1JQ19JTlNUUlVDVElPTlNfS0VZIiwiZHluYW1pY0luc3RydWN0aW9uc0tleSIsIm9wdGlvbnMiLCJzaG93T3ZlcmxheSIsIlNFVF9EWU5BTUlDX0lOU1RSVUNUSU9OU19ESVNNSVNTX0NBTExCQUNLIiwiU0VUX1RBX1JVQlJJQyIsInRhUnVicmljIiwiZ2V0RHluYW1pY0luc3RydWN0aW9ucyIsIl90eXBlb2YiLCJwcm90b3R5cGUiLCJvd25LZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImFwcGx5IiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIkluZmluaXR5Iiwic2V0SW5zdHJ1Y3Rpb25zQ29uc3RhbnRzIiwiX3JlZiIsInNldEluc3RydWN0aW9uc1JlbmRlcmVkSGVpZ2h0IiwidG9nZ2xlSW5zdHJ1Y3Rpb25zQ29sbGFwc2VkIiwic2V0SW5zdHJ1Y3Rpb25zTWF4SGVpZ2h0TmVlZGVkIiwic2V0SW5zdHJ1Y3Rpb25zTWF4SGVpZ2h0QXZhaWxhYmxlIiwic2V0QWxsb3dJbnN0cnVjdGlvbnNSZXNpemUiLCJzZXRIYXNBdXRob3JlZEhpbnRzIiwic2V0VHRzQXV0b3BsYXlFbmFibGVkRm9yTGV2ZWwiLCJzZXRDb2RlUmV2aWV3RW5hYmxlZEZvckxldmVsIiwic2V0RmVlZGJhY2siLCJoaWRlT3ZlcmxheSIsInNldER5bmFtaWNJbnN0cnVjdGlvbnNEZWZhdWx0cyIsInNldER5bmFtaWNJbnN0cnVjdGlvbnNLZXkiLCJzZXREeW5hbWljSW5zdHJ1Y3Rpb25zT3ZlcmxheURpc21pc3NDYWxsYmFjayIsInNldFRhUnVicmljIiwic3Vic3RpdHV0ZUluc3RydWN0aW9uSW1hZ2VzIiwiaHRtbFRleHQiLCJzdWJzdGl0dXRpb25zIiwicHJvcCIsImltYWdlVXJsIiwic3Vic3RpdHV0aW9uSHRtbCIsInJlIiwiUmVnRXhwIiwicmVwbGFjZSIsImRldGVybWluZUluc3RydWN0aW9uc0NvbnN0YW50cyIsImNvbmZpZyIsImxldmVsIiwiaW5zdHJ1Y3Rpb25zMiIsImlucHV0T3V0cHV0VGFibGUiLCJza2luIiwiaW5zdHJ1Y3Rpb25zMkltYWdlU3Vic3RpdHV0aW9ucyIsInJlcGxhY2VJbnN0cnVjdGlvbnMiLCJoYXNJbnN0cnVjdGlvbnNUb1Nob3ciLCJvdmVybGF5U2VlbiIsInRyeUdldExvY2FsU3RvcmFnZSIsInNob3VsZFNob3dPdmVybGF5IiwiaW5zdHJ1Y3Rpb25zSW1wb3J0YW50IiwibGV2ZWxQb3NpdGlvbiIsInRyeVNldExvY2FsU3RvcmFnZSIsIk9QRU5fRElBTE9HIiwib3BlbiIsImltZ09ubHkiLCJpbWdVcmwiLCJDTE9TRV9ESUFMT0ciLCJvcGVuRGlhbG9nIiwiY2xvc2VEaWFsb2ciLCJTRVRfUEFHRV9DT05TVEFOVFMiLCJBTExPV0VEX0tFWVMiLCJoYXMiLCJfIiwic2V0UGFnZUNvbnN0YW50cyIsIlNldCIsImFzc2V0VXJsIiwiU0VUX0lTX1JVTk5JTkciLCJpc1J1bm5pbmciLCJpc0RlYnVnZ2VyUGF1c2VkIiwiaXNEZWJ1Z2dpbmdTcHJpdGVzIiwiU0VUX0lTX0VESVRfV0hJTEVfUlVOIiwiaXNFZGl0V2hpbGVSdW4iLCJTRVRfSVNfREVCVUdHRVJfUEFVU0VEIiwibmV4dFN0ZXAiLCJTRVRfU1RFUF9TUEVFRCIsInN0ZXBTcGVlZCIsIlNFVF9BV0FJVElOR19DT05UQUlORURfUkVTUE9OU0UiLCJhd2FpdGluZ0NvbnRhaW5lZFJlc3BvbnNlIiwiU0VUX0lTX0RFQlVHR0lOR19TUFJJVEVTIiwiX2xvZGFzaCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfX2VzTW9kdWxlIiwic2V0SXNSdW5uaW5nIiwic2V0SXNFZGl0V2hpbGVSdW4iLCJzZXRJc0RlYnVnZ2VyUGF1c2VkIiwic2V0U3RlcFNwZWVkIiwic2V0QXdhaXRpbmdDb250YWluZWRSZXNwb25zZSIsInNldElzRGVidWdnaW5nU3ByaXRlcyIsInN0dWRpb0FwcEFjdGl2aXR5SW5pdGlhbFN0YXRlIiwiU0VUX1NUQVJUX0lETEUiLCJpc0lkbGUiLCJpZGxlU3RhcnQiLCJEYXRlIiwiZ2V0VGltZSIsIlNFVF9FTkRfSURMRSIsIm5ld0lkbGVUaW1lIiwiaWRsZVRpbWVTaW5jZUxhc3RSZXBvcnQiLCJ0aW1lU2luY2VJZGxlU3RhcnQiLCJSRVNFVF9JRExFX1RJTUUiLCJzZXRTdGFydElkbGUiLCJzZXRFbmRJZGxlIiwicmVzZXRJZGxlVGltZSIsImdldElkbGVUaW1lU2luY2VMYXN0UmVwb3J0Iiwid2F0Y2hlZEV4cHJlc3Npb25zSW5pdGlhbFN0YXRlIiwiQUREX0VYUFJFU1NJT04iLCJleHByZXNzaW9uIiwidXVpZCIsImNyZWF0ZVV1aWQiLCJJbW11dGFibGUiLCJNYXAiLCJVUERBVEVfVkFMVUUiLCJtYXAiLCJnZXQiLCJsYXN0VmFsdWUiLCJSRU1PVkVfRVhQUkVTU0lPTiIsIl9pbW11dGFibGUiLCJMaXN0IiwiYWRkIiwicmVtb3ZlIiwidXBkYXRlIiwiX3Byb3BUeXBlcyIsIl9yZWFjdCIsIl9yZWFjdERvbSIsIl9yZWFjdFJlZHV4IiwiX2luc3RydWN0aW9uc0RpYWxvZyIsIl9TYWZlTWFya2Rvd24iLCJfZXhwYW5kYWJsZUltYWdlcyIsIl9pbmhlcml0c0xvb3NlIiwiY3JlYXRlIiwiX3NldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJiaW5kIiwiX19wcm90b19fIiwiVW5jb25uZWN0ZWRFeHBhbmRhYmxlSW1hZ2VzV3JhcHBlciIsIl9SZWFjdCRDb21wb25lbnQiLCJfcHJvdG8iLCJjb21wb25lbnREaWRNb3VudCIsInBvc3RSZW5kZXJIb29rIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwidGhpc05vZGUiLCJSZWFjdERPTSIsImZpbmRET01Ob2RlIiwicmVuZGVyRXhwYW5kYWJsZUltYWdlcyIsInNob3dJbWFnZURpYWxvZyIsInJlbmRlciIsImNoaWxkcmVuIiwiUmVhY3QiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJmdW5jIiwiaXNSZXF1aXJlZCIsIm9uZU9mVHlwZSIsImFycmF5T2YiLCJub2RlIiwiRXhwYW5kYWJsZUltYWdlc1dyYXBwZXIiLCJjb25uZWN0IiwiZGlzcGF0Y2giLCJDbGlja2FibGVUZXh0V3JhcHBlciIsIl9SZWFjdCRDb21wb25lbnQyIiwiX3Byb3RvMiIsInJlbmRlckNsaWNrYWJsZVRleHQiLCJfdGhpcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjbGlja2FibGVUZXh0IiwiaW5kZXgiLCJpZCIsImRhdGFzZXQiLCJleHRyYUNsYXNzIiwiY2xhc3NOYW1lIiwib25jbGljayIsImhhbmRsZUluc3RydWN0aW9uc1RleHRDbGljayIsIl9SZWFjdCRDb21wb25lbnQzIiwiRW5oYW5jZWRTYWZlTWFya2Rvd24iLCJyZXN1bHQiLCJtYXJrZG93biIsIm9wZW5FeHRlcm5hbExpbmtzSW5OZXdUYWIiLCJleHBhbmRhYmxlSW1hZ2VzIiwic3RyaW5nIiwiYm9vbCIsIl9jb2xvciIsIkxpZ2h0YnVsYiIsImJ1bGJEaXNwbGF5IiwibnVtYmVyQ2lyY2xlIiwiY291bnREaXNwbGF5IiwiaXNNaW5lY3JhZnQiLCJocmVmIiwibGl0Iiwic2hvdWxkQW5pbWF0ZSIsIndpZHRoIiwieCIsInkiLCJ4bGlua0hyZWYiLCJ0cmFuc2Zvcm0iLCJkIiwiZmlsbCIsImZpbGxSdWxlIiwiY2xpcFJ1bGUiLCJjb3VudCIsImNvdW50VGV4dCIsInN0eWxlIiwic3R5bGVzIiwiY291bnRNaW5lY3JhZnQiLCJjeCIsImN5Iiwic3Ryb2tlIiwiYmxvY2tseV9mbHlvdXRfZ3JheSIsInN0cm9rZVdpZHRoIiwic2l6ZSIsInZpZXdCb3giLCJudW1iZXIiLCJvYmplY3QiLCJmb250V2VpZ2h0IiwibGlnaHRfaW5mb181MDAiLCJmb250RmFtaWx5IiwiZGVmYXVsdCIsIl9yYWRpdW0iLCJJbWFnZVByZXZpZXdVbndyYXBwZWQiLCJ3cmFwcGVyIiwiYW5pR2lmUHJldmlldyIsIm5vVmlzdWFsaXphdGlvbiIsImJpZ1ByZXZpZXciLCJvbkNsaWNrIiwic2hvd0luc3RydWN0aW9uc0RpYWxvZyIsImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRTaXplIiwiSW1hZ2VQcmV2aWV3IiwiUmFkaXVtIiwicGFnZUNvbnN0YW50cyIsImFuaUdpZlVSTCIsIkV4YW1wbGVJbWFnZSIsImltZyIsImFsdCIsInByb3BUeXBlcyIsImJveFNoYWRvdyIsImJvcmRlciIsImxpZ2h0X2dyYXkiLCJib3JkZXJSYWRpdXMiLCJib3hTaXppbmciLCJfaW1tZXJzaXZlUmVhZGVyU2RrIiwiX2NsYXNzbmFtZXMiLCJfanNDb29raWUiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImhhc093blByb3BlcnR5Iiwic2V0IiwiX2ltbWVyc2l2ZV9yZWFkZXIiLCJXZWFrTWFwIiwiSW1tZXJzaXZlUmVhZGVyQnV0dG9uIiwiX0NvbXBvbmVudCIsInNob3VsZFJlbmRlciIsInJlbmRlckJ1dHRvbnNDYWxsZWQiLCJyZW5kZXJCdXR0b25zIiwiZWxlbWVudHMiLCJjb250YWluZXIiLCJoYW5kbGVLZXlEb3duIiwiZXZlbnQiLCJ0aXRsZSIsInRleHQiLCJoYW5kbGVMYXVuY2hJbW1lcnNpdmVSZWFkZXIiLCJfdGhpcyRwcm9wcyIsImhhc1JvdW5kQm9yZGVycyIsImlzTGVnYWN5U3R5bGVzIiwiY29va2llcyIsInRhYkluZGV4Iiwicm9sZSIsInJlZiIsImVsIiwiY2xhc3NOYW1lcyIsIm9uS2V5RG93biIsIklucHV0T3V0cHV0VGFibGUiLCJpdGVtIiwiX2xvY2FsZSIsIl9BbmlHaWZQcmV2aWV3IiwiX0V4YW1wbGVJbWFnZSIsIl9JbW1lcnNpdmVSZWFkZXJCdXR0b24iLCJfSW5wdXRPdXRwdXRUYWJsZSIsIl9NYXJrZG93bkluc3RydWN0aW9ucyIsIkluc3RydWN0aW9ucyIsImluVG9wUGFuZSIsImluc3RydWN0aW9ucyIsIm9uUmVzaXplIiwiaXNCbG9ja2x5IiwiaXNJbW1lcnNpdmVCdXR0b25IYXNSb3VuZEJvcmRlcnMiLCJpc0xlZ2FjeUltbWVyc2l2ZVN0eWxlcyIsImltZ1VSTCIsImF1dGhvcmVkSGludHMiLCJub3RJblRvcFBhbmUiLCJGcmFnbWVudCIsImkxOG4iLCJvdmVyZmxvdyIsIl9qcXVlcnkiLCJfRW5oYW5jZWRTYWZlTWFya2Rvd24iLCJNYXJrZG93bkluc3RydWN0aW9ucyIsImNvbmZpZ3VyZU1hcmtkb3duXyIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiZGV0YWlsc0RPTSIsIiQiLCJmaW5kIiwiZGV0YWlscyIsIm9mZiIsIm9uIiwidG9nZ2xlRGV0YWlsc1RvcEluc3RydWN0aW9ucyIsIkJsb2NrbHkiLCJCbG9ja1NwYWNlIiwib25NYWluQmxvY2tTcGFjZUNyZWF0ZWQiLCJjb252ZXJ0WG1sVG9CbG9ja2x5IiwibG9hZCIsImNhbkNvbGxhcHNlIiwiaW5Ub3BQYW5lQ2FuQ29sbGFwc2UiLCJtYXJnaW5Ub3AiLCJ4bWxDb250YWluZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwieG1scyIsInhtbCIsInJlbW92ZUNvbW1lbnROb2RlcyIsInJvb3QiLCJjb21tZW50V2Fsa2VyIiwiY3JlYXRlVHJlZVdhbGtlciIsIk5vZGVGaWx0ZXIiLCJTSE9XX0NPTU1FTlQiLCJhY2NlcHROb2RlIiwiRklMVEVSX0FDQ0VQVCIsImxhc3QiLCJuZXh0Tm9kZSIsImN1cnJlbnROb2RlIiwiaW5saW5lIiwicGFyZW50Tm9kZSIsInRhZ05hbWUiLCJibG9ja1NwYWNlQ29udGFpbmVyIiwiY2xhc3NMaXN0IiwiaW5zZXJ0QmVmb3JlIiwiYmxvY2tTcGFjZSIsImNyZWF0ZUVtYmVkZGVkV29ya3NwYWNlIiwibm9TY3JvbGxpbmciLCJydGwiLCJ3aXRoUGFkZGluZyIsIm1ldHJpY3MiLCJnZXRNZXRyaWNzIiwiYWRkQ2hhbmdlTGlzdGVuZXIiLCJvbGRIZWlnaHQiLCJjb250ZW50SGVpZ2h0Iiwib2xkV2lkdGgiLCJjb250ZW50V2lkdGgiLCJuZXdIZWlnaHQiLCJuZXdXaWR0aCIsInNocmlua0Jsb2NrU3BhY2VDb250YWluZXIiLCJnZXRPdXRlckhlaWdodCIsImNvbXBvbmVudCIsImluY2x1ZGVNYXJnaW4iLCJvdXRlckhlaWdodCIsImhhc0luc3RydWN0aW9ucyIsInNjcm9sbEJ5IiwiZGVsdGFZIiwiYW5pbWF0ZSIsIm5ld1Njcm9sbFRvcCIsInNjcm9sbFRvcCIsInNjcm9sbFRvIiwic2hvdWxkRGlzcGxheUNoYXRUaXBzIiwic2tpbklkIiwiJGVsZW0iLCJpcyIsImdldENvbnRhaW5lciIsImNvbnRlbnRUb3AiLCJjb250ZW50TGVmdCIsImNkb1V0aWxzIiwid29ya3NwYWNlU3ZnUmVzaXplIiwiX2xvb3AiLCJleHBhbmRhYmxlSW1nIiwiZ2V0VG9rZW5BbmRTdWJkb21haW5Bc3luYyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiYWpheCIsInN1Y2Nlc3MiLCJlcnJvciIsInRoZW4iLCJyZXNwb25zZSIsInRva2VuIiwic3ViZG9tYWluIiwiY2h1bmtzIiwiY29udGVudCIsInNhbml0aXplVGV4dCIsImxhbmciLCJsYXVuY2hBc3luYyIsInVpWkluZGV4IiwiY29uc29sZSIsImJsb2NrbHlTbGljZSIsImNyZWF0ZVNsaWNlIiwiaGFzSW5jb21wYXRpYmxlU291cmNlcyIsImZhaWxlZFRvR2VuZXJhdGVDb2RlIiwicmVkdWNlcnMiLCJzZXRIYXNJbmNvbXBhdGlibGVTb3VyY2VzIiwicGF5bG9hZCIsInNldEZhaWxlZFRvR2VuZXJhdGVDb2RlIiwiYWN0aW9ucyIsImxheW91dFNsaWNlIiwidmlzdWFsaXphdGlvblNjYWxlIiwic2V0VmlzdWFsaXphdGlvblNjYWxlIiwiZ2V0VmlzdWFsaXphdGlvblNjYWxlIiwiY3JlYXRlU2VsZWN0b3IiLCJsYXlvdXQiXSwic291cmNlUm9vdCI6IiJ9