@utoo/web 1.4.4 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/index.d.ts +1 -0
- package/esm/index.js +1 -0
- package/esm/loaderWorkerInline.js +1 -0
- package/esm/project/Project.js +4 -1
- package/esm/threadWorkerInline.js +1 -0
- package/esm/utoo/index.js +24 -24
- package/esm/utoo/index_bg.wasm +0 -0
- package/esm/webpackLoaders/cjs.js +7 -0
- package/esm/webpackLoaders/loaderWorkerPool.js +4 -1
- package/esm/webpackLoaders/polyfills/nodePolyFills.d.ts +6 -2
- package/esm/webpackLoaders/polyfills/nodePolyFills.js +6 -2
- package/esm/workerInline.js +1 -0
- package/esm/workers/inline.d.ts +5 -0
- package/esm/workers/inline.js +16 -0
- package/esm/{threadWorker.js → workers/threadWorker.js} +1 -1
- package/esm/{worker.js → workers/worker.js} +2 -2
- package/package.json +8 -4
- package/esm/loaderWorker.js +0 -2
- package/esm/loaderWorker.js.LICENSE.txt +0 -23
- /package/esm/{threadWorker.d.ts → workers/threadWorker.d.ts} +0 -0
- /package/esm/{worker.d.ts → workers/worker.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default "data:application/javascript;base64,LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgbG9hZGVyV29ya2VySW5saW5lLmpzLkxJQ0VOU0UudHh0ICovCiFmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LGZhY3Rvcnkpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9ZmFjdG9yeSgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sZmFjdG9yeSk7ZWxzZXt2YXIgYT1mYWN0b3J5KCk7Zm9yKHZhciBpIGluIGEpKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzOnJvb3QpW2ldPWFbaV19fShzZWxmLCgpPT4oKCk9Pnt2YXIgX193ZWJwYWNrX21vZHVsZXNfXz17Ii4uLy4uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xLmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBhc24xPWV4cG9ydHM7YXNuMS5iaWdudW09X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbm9kZV9tb2R1bGVzL2JuLmpzL2xpYi9ibi5qcyIpLGFzbjEuZGVmaW5lPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2FwaS5qcyIpLmRlZmluZSxhc24xLmJhc2U9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9pbmRleC5qcyIpLGFzbjEuY29uc3RhbnRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2NvbnN0YW50cy9pbmRleC5qcyIpLGFzbjEuZGVjb2RlcnM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZGVjb2RlcnMvaW5kZXguanMiKSxhc24xLmVuY29kZXJzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2VuY29kZXJzL2luZGV4LmpzIil9LCIuLi8uLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9hcGkuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIGFzbjE9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEuanMiKSxpbmhlcml0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpO2Z1bmN0aW9uIEVudGl0eShuYW1lLGJvZHkpe3RoaXMubmFtZT1uYW1lLHRoaXMuYm9keT1ib2R5LHRoaXMuZGVjb2RlcnM9e30sdGhpcy5lbmNvZGVycz17fX1leHBvcnRzLmRlZmluZT1mdW5jdGlvbiBkZWZpbmUobmFtZSxib2R5KXtyZXR1cm4gbmV3IEVudGl0eShuYW1lLGJvZHkpfSxFbnRpdHkucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbiBjcmVhdGVOYW1lZChiYXNlKXt2YXIgbmFtZWQ7dHJ5e25hbWVkPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy92bS1icm93c2VyaWZ5L2luZGV4LmpzIikucnVuSW5UaGlzQ29udGV4dCgiKGZ1bmN0aW9uICIrdGhpcy5uYW1lKyIoZW50aXR5KSB7XG4gIHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xufSkiKX1jYXRjaChlKXtuYW1lZD1mdW5jdGlvbihlbnRpdHkpe3RoaXMuX2luaXROYW1lZChlbnRpdHkpfX1yZXR1cm4gaW5oZXJpdHMobmFtZWQsYmFzZSksbmFtZWQucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24gaW5pdG5hbWVkKGVudGl0eSl7YmFzZS5jYWxsKHRoaXMsZW50aXR5KX0sbmV3IG5hbWVkKHRoaXMpfSxFbnRpdHkucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uIF9nZXREZWNvZGVyKGVuYyl7cmV0dXJuIGVuYz1lbmN8fCJkZXIiLHRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkoZW5jKXx8KHRoaXMuZGVjb2RlcnNbZW5jXT10aGlzLl9jcmVhdGVOYW1lZChhc24xLmRlY29kZXJzW2VuY10pKSx0aGlzLmRlY29kZXJzW2VuY119LEVudGl0eS5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uIGRlY29kZShkYXRhLGVuYyxvcHRpb25zKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihlbmMpLmRlY29kZShkYXRhLG9wdGlvbnMpfSxFbnRpdHkucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uIF9nZXRFbmNvZGVyKGVuYyl7cmV0dXJuIGVuYz1lbmN8fCJkZXIiLHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoZW5jKXx8KHRoaXMuZW5jb2RlcnNbZW5jXT10aGlzLl9jcmVhdGVOYW1lZChhc24xLmVuY29kZXJzW2VuY10pKSx0aGlzLmVuY29kZXJzW2VuY119LEVudGl0eS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uIGVuY29kZShkYXRhLGVuYyxyZXBvcnRlcil7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIoZW5jKS5lbmNvZGUoZGF0YSxyZXBvcnRlcil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9idWZmZXIuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIGluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiksUmVwb3J0ZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9pbmRleC5qcyIpLlJlcG9ydGVyLEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyO2Z1bmN0aW9uIERlY29kZXJCdWZmZXIoYmFzZSxvcHRpb25zKXtSZXBvcnRlci5jYWxsKHRoaXMsb3B0aW9ucyksQnVmZmVyLmlzQnVmZmVyKGJhc2UpPyh0aGlzLmJhc2U9YmFzZSx0aGlzLm9mZnNldD0wLHRoaXMubGVuZ3RoPWJhc2UubGVuZ3RoKTp0aGlzLmVycm9yKCJJbnB1dCBub3QgQnVmZmVyIil9ZnVuY3Rpb24gRW5jb2RlckJ1ZmZlcih2YWx1ZSxyZXBvcnRlcil7aWYoQXJyYXkuaXNBcnJheSh2YWx1ZSkpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPXZhbHVlLm1hcChmdW5jdGlvbihpdGVtKXtyZXR1cm4gaXRlbSBpbnN0YW5jZW9mIEVuY29kZXJCdWZmZXJ8fChpdGVtPW5ldyBFbmNvZGVyQnVmZmVyKGl0ZW0scmVwb3J0ZXIpKSx0aGlzLmxlbmd0aCs9aXRlbS5sZW5ndGgsaXRlbX0sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIHZhbHVlKXtpZighKDA8PXZhbHVlJiZ2YWx1ZTw9MjU1KSlyZXR1cm4gcmVwb3J0ZXIuZXJyb3IoIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUiKTt0aGlzLnZhbHVlPXZhbHVlLHRoaXMubGVuZ3RoPTF9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHZhbHVlKXRoaXMudmFsdWU9dmFsdWUsdGhpcy5sZW5ndGg9QnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUpO2Vsc2V7aWYoIUJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpcmV0dXJuIHJlcG9ydGVyLmVycm9yKCJVbnN1cHBvcnRlZCB0eXBlOiAiK3R5cGVvZiB2YWx1ZSk7dGhpcy52YWx1ZT12YWx1ZSx0aGlzLmxlbmd0aD12YWx1ZS5sZW5ndGh9fWluaGVyaXRzKERlY29kZXJCdWZmZXIsUmVwb3J0ZXIpLGV4cG9ydHMudD1EZWNvZGVyQnVmZmVyLERlY29kZXJCdWZmZXIucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24gc2F2ZSgpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6UmVwb3J0ZXIucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LERlY29kZXJCdWZmZXIucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24gcmVzdG9yZShzYXZlKXt2YXIgcmVzPW5ldyBEZWNvZGVyQnVmZmVyKHRoaXMuYmFzZSk7cmV0dXJuIHJlcy5vZmZzZXQ9c2F2ZS5vZmZzZXQscmVzLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD1zYXZlLm9mZnNldCxSZXBvcnRlci5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsc2F2ZS5yZXBvcnRlcikscmVzfSxEZWNvZGVyQnVmZmVyLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uIGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0sRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uIHJlYWRVSW50OChmYWlsKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKGZhaWx8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbiBza2lwKGJ5dGVzLGZhaWwpe2lmKCEodGhpcy5vZmZzZXQrYnl0ZXM8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcihmYWlsfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIik7dmFyIHJlcz1uZXcgRGVjb2RlckJ1ZmZlcih0aGlzLmJhc2UpO3JldHVybiByZXMuX3JlcG9ydGVyU3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxyZXMub2Zmc2V0PXRoaXMub2Zmc2V0LHJlcy5sZW5ndGg9dGhpcy5vZmZzZXQrYnl0ZXMsdGhpcy5vZmZzZXQrPWJ5dGVzLHJlc30sRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUucmF3PWZ1bmN0aW9uIHJhdyhzYXZlKXtyZXR1cm4gdGhpcy5iYXNlLnNsaWNlKHNhdmU/c2F2ZS5vZmZzZXQ6dGhpcy5vZmZzZXQsdGhpcy5sZW5ndGgpfSxleHBvcnRzLmQ9RW5jb2RlckJ1ZmZlcixFbmNvZGVyQnVmZmVyLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uIGpvaW4ob3V0LG9mZnNldCl7cmV0dXJuIG91dHx8KG91dD1uZXcgQnVmZmVyKHRoaXMubGVuZ3RoKSksb2Zmc2V0fHwob2Zmc2V0PTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe2l0ZW0uam9pbihvdXQsb2Zmc2V0KSxvZmZzZXQrPWl0ZW0ubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9vdXRbb2Zmc2V0XT10aGlzLnZhbHVlOiJzdHJpbmciPT10eXBlb2YgdGhpcy52YWx1ZT9vdXQud3JpdGUodGhpcy52YWx1ZSxvZmZzZXQpOkJ1ZmZlci5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KG91dCxvZmZzZXQpLG9mZnNldCs9dGhpcy5sZW5ndGgpKSxvdXR9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9pbmRleC5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgYmFzZT1leHBvcnRzO2Jhc2UuUmVwb3J0ZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9yZXBvcnRlci5qcyIpLmEsYmFzZS5EZWNvZGVyQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2Jhc2UvYnVmZmVyLmpzIikudCxiYXNlLkVuY29kZXJCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9idWZmZXIuanMiKS5kLGJhc2UuTm9kZT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9iYXNlL25vZGUuanMiKX0sIi4uLy4uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2Jhc2Uvbm9kZS5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgUmVwb3J0ZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9pbmRleC5qcyIpLlJlcG9ydGVyLEVuY29kZXJCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9pbmRleC5qcyIpLkVuY29kZXJCdWZmZXIsRGVjb2RlckJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9iYXNlL2luZGV4LmpzIikuRGVjb2RlckJ1ZmZlcixhc3NlcnQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYWxpc3RpYy1hc3NlcnQvaW5kZXguanMiKSx0YWdzPVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sbWV0aG9kcz1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KHRhZ3MpO2Z1bmN0aW9uIE5vZGUoZW5jLHBhcmVudCl7dmFyIHN0YXRlPXt9O3RoaXMuX2Jhc2VTdGF0ZT1zdGF0ZSxzdGF0ZS5lbmM9ZW5jLHN0YXRlLnBhcmVudD1wYXJlbnR8fG51bGwsc3RhdGUuY2hpbGRyZW49bnVsbCxzdGF0ZS50YWc9bnVsbCxzdGF0ZS5hcmdzPW51bGwsc3RhdGUucmV2ZXJzZUFyZ3M9bnVsbCxzdGF0ZS5jaG9pY2U9bnVsbCxzdGF0ZS5vcHRpb25hbD0hMSxzdGF0ZS5hbnk9ITEsc3RhdGUub2JqPSExLHN0YXRlLnVzZT1udWxsLHN0YXRlLnVzZURlY29kZXI9bnVsbCxzdGF0ZS5rZXk9bnVsbCxzdGF0ZS5kZWZhdWx0PW51bGwsc3RhdGUuZXhwbGljaXQ9bnVsbCxzdGF0ZS5pbXBsaWNpdD1udWxsLHN0YXRlLmNvbnRhaW5zPW51bGwsc3RhdGUucGFyZW50fHwoc3RhdGUuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX1tb2R1bGUuZXhwb3J0cz1Ob2RlO3ZhciBzdGF0ZVByb3BzPVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07Tm9kZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24gY2xvbmUoKXt2YXIgc3RhdGU9dGhpcy5fYmFzZVN0YXRlLGNzdGF0ZT17fTtzdGF0ZVByb3BzLmZvckVhY2goZnVuY3Rpb24ocHJvcCl7Y3N0YXRlW3Byb3BdPXN0YXRlW3Byb3BdfSk7dmFyIHJlcz1uZXcgdGhpcy5jb25zdHJ1Y3Rvcihjc3RhdGUucGFyZW50KTtyZXR1cm4gcmVzLl9iYXNlU3RhdGU9Y3N0YXRlLHJlc30sTm9kZS5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24gd3JhcCgpe3ZhciBzdGF0ZT10aGlzLl9iYXNlU3RhdGU7bWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCl7dGhpc1ttZXRob2RdPWZ1bmN0aW9uIF93cmFwcGVkTWV0aG9kKCl7dmFyIGNsb25lPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiBzdGF0ZS5jaGlsZHJlbi5wdXNoKGNsb25lKSxjbG9uZVttZXRob2RdLmFwcGx5KGNsb25lLGFyZ3VtZW50cyl9fSx0aGlzKX0sTm9kZS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24gaW5pdChib2R5KXt2YXIgc3RhdGU9dGhpcy5fYmFzZVN0YXRlO2Fzc2VydChudWxsPT09c3RhdGUucGFyZW50KSxib2R5LmNhbGwodGhpcyksc3RhdGUuY2hpbGRyZW49c3RhdGUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKXtyZXR1cm4gY2hpbGQuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxhc3NlcnQuZXF1YWwoc3RhdGUuY2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSxOb2RlLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbiB1c2VBcmdzKGFyZ3Mpe3ZhciBzdGF0ZT10aGlzLl9iYXNlU3RhdGUsY2hpbGRyZW49YXJncy5maWx0ZXIoZnVuY3Rpb24oYXJnKXtyZXR1cm4gYXJnIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7YXJncz1hcmdzLmZpbHRlcihmdW5jdGlvbihhcmcpe3JldHVybiEoYXJnIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1jaGlsZHJlbi5sZW5ndGgmJihhc3NlcnQobnVsbD09PXN0YXRlLmNoaWxkcmVuKSxzdGF0ZS5jaGlsZHJlbj1jaGlsZHJlbixjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKXtjaGlsZC5fYmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PWFyZ3MubGVuZ3RoJiYoYXNzZXJ0KG51bGw9PT1zdGF0ZS5hcmdzKSxzdGF0ZS5hcmdzPWFyZ3Msc3RhdGUucmV2ZXJzZUFyZ3M9YXJncy5tYXAoZnVuY3Rpb24oYXJnKXtpZigib2JqZWN0IiE9dHlwZW9mIGFyZ3x8YXJnLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBhcmc7dmFyIHJlcz17fTtyZXR1cm4gT2JqZWN0LmtleXMoYXJnKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7a2V5PT0oMHxrZXkpJiYoa2V5fD0wKTt2YXIgdmFsdWU9YXJnW2tleV07cmVzW3ZhbHVlXT1rZXl9KSxyZXN9KSl9LFsiX3BlZWtUYWciLCJfZGVjb2RlVGFnIiwiX3VzZSIsIl9kZWNvZGVTdHIiLCJfZGVjb2RlT2JqaWQiLCJfZGVjb2RlVGltZSIsIl9kZWNvZGVOdWxsIiwiX2RlY29kZUludCIsIl9kZWNvZGVCb29sIiwiX2RlY29kZUxpc3QiLCJfZW5jb2RlQ29tcG9zaXRlIiwiX2VuY29kZVN0ciIsIl9lbmNvZGVPYmppZCIsIl9lbmNvZGVUaW1lIiwiX2VuY29kZU51bGwiLCJfZW5jb2RlSW50IiwiX2VuY29kZUJvb2wiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCl7Tm9kZS5wcm90b3R5cGVbbWV0aG9kXT1mdW5jdGlvbiBfb3ZlcnJpZGVkKCl7dmFyIHN0YXRlPXRoaXMuX2Jhc2VTdGF0ZTt0aHJvdyBuZXcgRXJyb3IobWV0aG9kKyIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogIitzdGF0ZS5lbmMpfX0pLHRhZ3MuZm9yRWFjaChmdW5jdGlvbih0YWcpe05vZGUucHJvdG90eXBlW3RhZ109ZnVuY3Rpb24gX3RhZ01ldGhvZCgpe3ZhciBzdGF0ZT10aGlzLl9iYXNlU3RhdGUsYXJncz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBhc3NlcnQobnVsbD09PXN0YXRlLnRhZyksc3RhdGUudGFnPXRhZyx0aGlzLl91c2VBcmdzKGFyZ3MpLHRoaXN9fSksTm9kZS5wcm90b3R5cGUudXNlPWZ1bmN0aW9uIHVzZShpdGVtKXthc3NlcnQoaXRlbSk7dmFyIHN0YXRlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gYXNzZXJ0KG51bGw9PT1zdGF0ZS51c2UpLHN0YXRlLnVzZT1pdGVtLHRoaXN9LE5vZGUucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uIG9wdGlvbmFsKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSxOb2RlLnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24gZGVmKHZhbCl7dmFyIHN0YXRlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gYXNzZXJ0KG51bGw9PT1zdGF0ZS5kZWZhdWx0KSxzdGF0ZS5kZWZhdWx0PXZhbCxzdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSxOb2RlLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbiBleHBsaWNpdChudW0pe3ZhciBzdGF0ZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGFzc2VydChudWxsPT09c3RhdGUuZXhwbGljaXQmJm51bGw9PT1zdGF0ZS5pbXBsaWNpdCksc3RhdGUuZXhwbGljaXQ9bnVtLHRoaXN9LE5vZGUucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uIGltcGxpY2l0KG51bSl7dmFyIHN0YXRlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gYXNzZXJ0KG51bGw9PT1zdGF0ZS5leHBsaWNpdCYmbnVsbD09PXN0YXRlLmltcGxpY2l0KSxzdGF0ZS5pbXBsaWNpdD1udW0sdGhpc30sTm9kZS5wcm90b3R5cGUub2JqPWZ1bmN0aW9uIG9iaigpe3ZhciBzdGF0ZT10aGlzLl9iYXNlU3RhdGUsYXJncz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBzdGF0ZS5vYmo9ITAsMCE9PWFyZ3MubGVuZ3RoJiZ0aGlzLl91c2VBcmdzKGFyZ3MpLHRoaXN9LE5vZGUucHJvdG90eXBlLmtleT1mdW5jdGlvbiBrZXkobmV3S2V5KXt2YXIgc3RhdGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBhc3NlcnQobnVsbD09PXN0YXRlLmtleSksc3RhdGUua2V5PW5ld0tleSx0aGlzfSxOb2RlLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24gYW55KCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5hbnk9ITAsdGhpc30sTm9kZS5wcm90b3R5cGUuY2hvaWNlPWZ1bmN0aW9uIGNob2ljZShvYmope3ZhciBzdGF0ZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGFzc2VydChudWxsPT09c3RhdGUuY2hvaWNlKSxzdGF0ZS5jaG9pY2U9b2JqLHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24oa2V5KXtyZXR1cm4gb2JqW2tleV19KSksdGhpc30sTm9kZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24gY29udGFpbnMoaXRlbSl7dmFyIHN0YXRlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gYXNzZXJ0KG51bGw9PT1zdGF0ZS51c2UpLHN0YXRlLmNvbnRhaW5zPWl0ZW0sdGhpc30sTm9kZS5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbiBkZWNvZGUoaW5wdXQsb3B0aW9ucyl7dmFyIHN0YXRlPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09c3RhdGUucGFyZW50KXJldHVybiBpbnB1dC53cmFwUmVzdWx0KHN0YXRlLmNoaWxkcmVuWzBdLl9kZWNvZGUoaW5wdXQsb3B0aW9ucykpO3ZhciBwcmV2T2JqLHJlc3VsdD1zdGF0ZS5kZWZhdWx0LHByZXNlbnQ9ITAscHJldktleT1udWxsO2lmKG51bGwhPT1zdGF0ZS5rZXkmJihwcmV2S2V5PWlucHV0LmVudGVyS2V5KHN0YXRlLmtleSkpLHN0YXRlLm9wdGlvbmFsKXt2YXIgdGFnPW51bGw7aWYobnVsbCE9PXN0YXRlLmV4cGxpY2l0P3RhZz1zdGF0ZS5leHBsaWNpdDpudWxsIT09c3RhdGUuaW1wbGljaXQ/dGFnPXN0YXRlLmltcGxpY2l0Om51bGwhPT1zdGF0ZS50YWcmJih0YWc9c3RhdGUudGFnKSxudWxsIT09dGFnfHxzdGF0ZS5hbnkpe2lmKHByZXNlbnQ9dGhpcy5fcGVla1RhZyhpbnB1dCx0YWcsc3RhdGUuYW55KSxpbnB1dC5pc0Vycm9yKHByZXNlbnQpKXJldHVybiBwcmVzZW50fWVsc2V7dmFyIHNhdmU9aW5wdXQuc2F2ZSgpO3RyeXtudWxsPT09c3RhdGUuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoc3RhdGUudGFnLGlucHV0LG9wdGlvbnMpOnRoaXMuX2RlY29kZUNob2ljZShpbnB1dCxvcHRpb25zKSxwcmVzZW50PSEwfWNhdGNoKGUpe3ByZXNlbnQ9ITF9aW5wdXQucmVzdG9yZShzYXZlKX19aWYoc3RhdGUub2JqJiZwcmVzZW50JiYocHJldk9iaj1pbnB1dC5lbnRlck9iamVjdCgpKSxwcmVzZW50KXtpZihudWxsIT09c3RhdGUuZXhwbGljaXQpe3ZhciBleHBsaWNpdD10aGlzLl9kZWNvZGVUYWcoaW5wdXQsc3RhdGUuZXhwbGljaXQpO2lmKGlucHV0LmlzRXJyb3IoZXhwbGljaXQpKXJldHVybiBleHBsaWNpdDtpbnB1dD1leHBsaWNpdH12YXIgc3RhcnQ9aW5wdXQub2Zmc2V0O2lmKG51bGw9PT1zdGF0ZS51c2UmJm51bGw9PT1zdGF0ZS5jaG9pY2Upe2lmKHN0YXRlLmFueSlzYXZlPWlucHV0LnNhdmUoKTt2YXIgYm9keT10aGlzLl9kZWNvZGVUYWcoaW5wdXQsbnVsbCE9PXN0YXRlLmltcGxpY2l0P3N0YXRlLmltcGxpY2l0OnN0YXRlLnRhZyxzdGF0ZS5hbnkpO2lmKGlucHV0LmlzRXJyb3IoYm9keSkpcmV0dXJuIGJvZHk7c3RhdGUuYW55P3Jlc3VsdD1pbnB1dC5yYXcoc2F2ZSk6aW5wdXQ9Ym9keX1pZihvcHRpb25zJiZvcHRpb25zLnRyYWNrJiZudWxsIT09c3RhdGUudGFnJiZvcHRpb25zLnRyYWNrKGlucHV0LnBhdGgoKSxzdGFydCxpbnB1dC5sZW5ndGgsInRhZ2dlZCIpLG9wdGlvbnMmJm9wdGlvbnMudHJhY2smJm51bGwhPT1zdGF0ZS50YWcmJm9wdGlvbnMudHJhY2soaW5wdXQucGF0aCgpLGlucHV0Lm9mZnNldCxpbnB1dC5sZW5ndGgsImNvbnRlbnQiKSxzdGF0ZS5hbnl8fChyZXN1bHQ9bnVsbD09PXN0YXRlLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKHN0YXRlLnRhZyxpbnB1dCxvcHRpb25zKTp0aGlzLl9kZWNvZGVDaG9pY2UoaW5wdXQsb3B0aW9ucykpLGlucHV0LmlzRXJyb3IocmVzdWx0KSlyZXR1cm4gcmVzdWx0O2lmKHN0YXRlLmFueXx8bnVsbCE9PXN0YXRlLmNob2ljZXx8bnVsbD09PXN0YXRlLmNoaWxkcmVufHxzdGF0ZS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIGRlY29kZUNoaWxkcmVuKGNoaWxkKXtjaGlsZC5fZGVjb2RlKGlucHV0LG9wdGlvbnMpfSksc3RhdGUuY29udGFpbnMmJigib2N0c3RyIj09PXN0YXRlLnRhZ3x8ImJpdHN0ciI9PT1zdGF0ZS50YWcpKXt2YXIgZGF0YT1uZXcgRGVjb2RlckJ1ZmZlcihyZXN1bHQpO3Jlc3VsdD10aGlzLl9nZXRVc2Uoc3RhdGUuY29udGFpbnMsaW5wdXQuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKGRhdGEsb3B0aW9ucyl9fXJldHVybiBzdGF0ZS5vYmomJnByZXNlbnQmJihyZXN1bHQ9aW5wdXQubGVhdmVPYmplY3QocHJldk9iaikpLG51bGw9PT1zdGF0ZS5rZXl8fG51bGw9PT1yZXN1bHQmJiEwIT09cHJlc2VudD9udWxsIT09cHJldktleSYmaW5wdXQuZXhpdEtleShwcmV2S2V5KTppbnB1dC5sZWF2ZUtleShwcmV2S2V5LHN0YXRlLmtleSxyZXN1bHQpLHJlc3VsdH0sTm9kZS5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24gZGVjb2RlR2VuZXJpYyh0YWcsaW5wdXQsb3B0aW9ucyl7dmFyIHN0YXRlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PXRhZ3x8InNldCI9PT10YWc/bnVsbDoic2Vxb2YiPT09dGFnfHwic2V0b2YiPT09dGFnP3RoaXMuX2RlY29kZUxpc3QoaW5wdXQsdGFnLHN0YXRlLmFyZ3NbMF0sb3B0aW9ucyk6L3N0ciQvLnRlc3QodGFnKT90aGlzLl9kZWNvZGVTdHIoaW5wdXQsdGFnLG9wdGlvbnMpOiJvYmppZCI9PT10YWcmJnN0YXRlLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoaW5wdXQsc3RhdGUuYXJnc1swXSxzdGF0ZS5hcmdzWzFdLG9wdGlvbnMpOiJvYmppZCI9PT10YWc/dGhpcy5fZGVjb2RlT2JqaWQoaW5wdXQsbnVsbCxudWxsLG9wdGlvbnMpOiJnZW50aW1lIj09PXRhZ3x8InV0Y3RpbWUiPT09dGFnP3RoaXMuX2RlY29kZVRpbWUoaW5wdXQsdGFnLG9wdGlvbnMpOiJudWxsXyI9PT10YWc/dGhpcy5fZGVjb2RlTnVsbChpbnB1dCxvcHRpb25zKToiYm9vbCI9PT10YWc/dGhpcy5fZGVjb2RlQm9vbChpbnB1dCxvcHRpb25zKToib2JqRGVzYyI9PT10YWc/dGhpcy5fZGVjb2RlU3RyKGlucHV0LHRhZyxvcHRpb25zKToiaW50Ij09PXRhZ3x8ImVudW0iPT09dGFnP3RoaXMuX2RlY29kZUludChpbnB1dCxzdGF0ZS5hcmdzJiZzdGF0ZS5hcmdzWzBdLG9wdGlvbnMpOm51bGwhPT1zdGF0ZS51c2U/dGhpcy5fZ2V0VXNlKHN0YXRlLnVzZSxpbnB1dC5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoaW5wdXQsb3B0aW9ucyk6aW5wdXQuZXJyb3IoInVua25vd24gdGFnOiAiK3RhZyl9LE5vZGUucHJvdG90eXBlLl9nZXRVc2U9ZnVuY3Rpb24gX2dldFVzZShlbnRpdHksb2JqKXt2YXIgc3RhdGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBzdGF0ZS51c2VEZWNvZGVyPXRoaXMuX3VzZShlbnRpdHksb2JqKSxhc3NlcnQobnVsbD09PXN0YXRlLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5wYXJlbnQpLHN0YXRlLnVzZURlY29kZXI9c3RhdGUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLHN0YXRlLmltcGxpY2l0IT09c3RhdGUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoc3RhdGUudXNlRGVjb2Rlcj1zdGF0ZS51c2VEZWNvZGVyLmNsb25lKCksc3RhdGUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PXN0YXRlLmltcGxpY2l0KSxzdGF0ZS51c2VEZWNvZGVyfSxOb2RlLnByb3RvdHlwZS5fZGVjb2RlQ2hvaWNlPWZ1bmN0aW9uIGRlY29kZUNob2ljZShpbnB1dCxvcHRpb25zKXt2YXIgc3RhdGU9dGhpcy5fYmFzZVN0YXRlLHJlc3VsdD1udWxsLG1hdGNoPSExO3JldHVybiBPYmplY3Qua2V5cyhzdGF0ZS5jaG9pY2UpLnNvbWUoZnVuY3Rpb24oa2V5KXt2YXIgc2F2ZT1pbnB1dC5zYXZlKCksbm9kZT1zdGF0ZS5jaG9pY2Vba2V5XTt0cnl7dmFyIHZhbHVlPW5vZGUuX2RlY29kZShpbnB1dCxvcHRpb25zKTtpZihpbnB1dC5pc0Vycm9yKHZhbHVlKSlyZXR1cm4hMTtyZXN1bHQ9e3R5cGU6a2V5LHZhbHVlfSxtYXRjaD0hMH1jYXRjaChlKXtyZXR1cm4gaW5wdXQucmVzdG9yZShzYXZlKSwhMX1yZXR1cm4hMH0sdGhpcyksbWF0Y2g/cmVzdWx0OmlucHV0LmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sTm9kZS5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24gY3JlYXRlRW5jb2RlckJ1ZmZlcihkYXRhKXtyZXR1cm4gbmV3IEVuY29kZXJCdWZmZXIoZGF0YSx0aGlzLnJlcG9ydGVyKX0sTm9kZS5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbiBlbmNvZGUoZGF0YSxyZXBvcnRlcixwYXJlbnQpe3ZhciBzdGF0ZT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PXN0YXRlLmRlZmF1bHR8fHN0YXRlLmRlZmF1bHQhPT1kYXRhKXt2YXIgcmVzdWx0PXRoaXMuX2VuY29kZVZhbHVlKGRhdGEscmVwb3J0ZXIscGFyZW50KTtpZih2b2lkIDAhPT1yZXN1bHQmJiF0aGlzLl9za2lwRGVmYXVsdChyZXN1bHQscmVwb3J0ZXIscGFyZW50KSlyZXR1cm4gcmVzdWx0fX0sTm9kZS5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uIGVuY29kZShkYXRhLHJlcG9ydGVyLHBhcmVudCl7dmFyIHN0YXRlPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09c3RhdGUucGFyZW50KXJldHVybiBzdGF0ZS5jaGlsZHJlblswXS5fZW5jb2RlKGRhdGEscmVwb3J0ZXJ8fG5ldyBSZXBvcnRlcik7dmFyIHJlc3VsdD1udWxsO2lmKHRoaXMucmVwb3J0ZXI9cmVwb3J0ZXIsc3RhdGUub3B0aW9uYWwmJnZvaWQgMD09PWRhdGEpe2lmKG51bGw9PT1zdGF0ZS5kZWZhdWx0KXJldHVybjtkYXRhPXN0YXRlLmRlZmF1bHR9dmFyIGNvbnRlbnQ9bnVsbCxwcmltaXRpdmU9ITE7aWYoc3RhdGUuYW55KXJlc3VsdD10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGRhdGEpO2Vsc2UgaWYoc3RhdGUuY2hvaWNlKXJlc3VsdD10aGlzLl9lbmNvZGVDaG9pY2UoZGF0YSxyZXBvcnRlcik7ZWxzZSBpZihzdGF0ZS5jb250YWlucyljb250ZW50PXRoaXMuX2dldFVzZShzdGF0ZS5jb250YWlucyxwYXJlbnQpLl9lbmNvZGUoZGF0YSxyZXBvcnRlcikscHJpbWl0aXZlPSEwO2Vsc2UgaWYoc3RhdGUuY2hpbGRyZW4pY29udGVudD1zdGF0ZS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY2hpbGQpe2lmKCJudWxsXyI9PT1jaGlsZC5fYmFzZVN0YXRlLnRhZylyZXR1cm4gY2hpbGQuX2VuY29kZShudWxsLHJlcG9ydGVyLGRhdGEpO2lmKG51bGw9PT1jaGlsZC5fYmFzZVN0YXRlLmtleSlyZXR1cm4gcmVwb3J0ZXIuZXJyb3IoIkNoaWxkIHNob3VsZCBoYXZlIGEga2V5Iik7dmFyIHByZXZLZXk9cmVwb3J0ZXIuZW50ZXJLZXkoY2hpbGQuX2Jhc2VTdGF0ZS5rZXkpO2lmKCJvYmplY3QiIT10eXBlb2YgZGF0YSlyZXR1cm4gcmVwb3J0ZXIuZXJyb3IoIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdCIpO3ZhciByZXM9Y2hpbGQuX2VuY29kZShkYXRhW2NoaWxkLl9iYXNlU3RhdGUua2V5XSxyZXBvcnRlcixkYXRhKTtyZXR1cm4gcmVwb3J0ZXIubGVhdmVLZXkocHJldktleSkscmVzfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpe3JldHVybiBjaGlsZH0pLGNvbnRlbnQ9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihjb250ZW50KTtlbHNlIGlmKCJzZXFvZiI9PT1zdGF0ZS50YWd8fCJzZXRvZiI9PT1zdGF0ZS50YWcpe2lmKCFzdGF0ZS5hcmdzfHwxIT09c3RhdGUuYXJncy5sZW5ndGgpcmV0dXJuIHJlcG9ydGVyLmVycm9yKCJUb28gbWFueSBhcmdzIGZvciA6ICIrc3RhdGUudGFnKTtpZighQXJyYXkuaXNBcnJheShkYXRhKSlyZXR1cm4gcmVwb3J0ZXIuZXJyb3IoInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTt2YXIgY2hpbGQ9dGhpcy5jbG9uZSgpO2NoaWxkLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxjb250ZW50PXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZGF0YS5tYXAoZnVuY3Rpb24oaXRlbSl7dmFyIHN0YXRlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gdGhpcy5fZ2V0VXNlKHN0YXRlLmFyZ3NbMF0sZGF0YSkuX2VuY29kZShpdGVtLHJlcG9ydGVyKX0sY2hpbGQpKX1lbHNlIG51bGwhPT1zdGF0ZS51c2U/cmVzdWx0PXRoaXMuX2dldFVzZShzdGF0ZS51c2UscGFyZW50KS5fZW5jb2RlKGRhdGEscmVwb3J0ZXIpOihjb250ZW50PXRoaXMuX2VuY29kZVByaW1pdGl2ZShzdGF0ZS50YWcsZGF0YSkscHJpbWl0aXZlPSEwKTtpZighc3RhdGUuYW55JiZudWxsPT09c3RhdGUuY2hvaWNlKXt2YXIgdGFnPW51bGwhPT1zdGF0ZS5pbXBsaWNpdD9zdGF0ZS5pbXBsaWNpdDpzdGF0ZS50YWcsY2xzPW51bGw9PT1zdGF0ZS5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PXRhZz9udWxsPT09c3RhdGUudXNlJiZyZXBvcnRlci5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PXN0YXRlLnVzZSYmKHJlc3VsdD10aGlzLl9lbmNvZGVDb21wb3NpdGUodGFnLHByaW1pdGl2ZSxjbHMsY29udGVudCkpfXJldHVybiBudWxsIT09c3RhdGUuZXhwbGljaXQmJihyZXN1bHQ9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKHN0YXRlLmV4cGxpY2l0LCExLCJjb250ZXh0IixyZXN1bHQpKSxyZXN1bHR9LE5vZGUucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24gZW5jb2RlQ2hvaWNlKGRhdGEscmVwb3J0ZXIpe3ZhciBzdGF0ZT10aGlzLl9iYXNlU3RhdGUsbm9kZT1zdGF0ZS5jaG9pY2VbZGF0YS50eXBlXTtyZXR1cm4gbm9kZXx8YXNzZXJ0KCExLGRhdGEudHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHN0YXRlLmNob2ljZSkpKSxub2RlLl9lbmNvZGUoZGF0YS52YWx1ZSxyZXBvcnRlcil9LE5vZGUucHJvdG90eXBlLl9lbmNvZGVQcmltaXRpdmU9ZnVuY3Rpb24gZW5jb2RlUHJpbWl0aXZlKHRhZyxkYXRhKXt2YXIgc3RhdGU9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KHRhZykpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihkYXRhLHRhZyk7aWYoIm9iamlkIj09PXRhZyYmc3RhdGUuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoZGF0YSxzdGF0ZS5yZXZlcnNlQXJnc1swXSxzdGF0ZS5hcmdzWzFdKTtpZigib2JqaWQiPT09dGFnKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChkYXRhLG51bGwsbnVsbCk7aWYoImdlbnRpbWUiPT09dGFnfHwidXRjdGltZSI9PT10YWcpcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoZGF0YSx0YWcpO2lmKCJudWxsXyI9PT10YWcpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PXRhZ3x8ImVudW0iPT09dGFnKXJldHVybiB0aGlzLl9lbmNvZGVJbnQoZGF0YSxzdGF0ZS5hcmdzJiZzdGF0ZS5yZXZlcnNlQXJnc1swXSk7aWYoImJvb2wiPT09dGFnKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKGRhdGEpO2lmKCJvYmpEZXNjIj09PXRhZylyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKGRhdGEsdGFnKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRhZzogIit0YWcpfSxOb2RlLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24gaXNOdW1zdHIoc3RyKXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KHN0cil9LE5vZGUucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uIGlzUHJpbnRzdHIoc3RyKXtyZXR1cm4vXltBLVphLXowLTkgJ1woXClcKyxcLVwuXC86PVw/XSokLy50ZXN0KHN0cil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9yZXBvcnRlci5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgaW5oZXJpdHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKTtmdW5jdGlvbiBSZXBvcnRlcihvcHRpb25zKXt0aGlzLl9yZXBvcnRlclN0YXRlPXtvYmo6bnVsbCxwYXRoOltdLG9wdGlvbnM6b3B0aW9uc3x8e30sZXJyb3JzOltdfX1mdW5jdGlvbiBSZXBvcnRlckVycm9yKHBhdGgsbXNnKXt0aGlzLnBhdGg9cGF0aCx0aGlzLnJldGhyb3cobXNnKX1leHBvcnRzLmE9UmVwb3J0ZXIsUmVwb3J0ZXIucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24gaXNFcnJvcihvYmope3JldHVybiBvYmogaW5zdGFuY2VvZiBSZXBvcnRlckVycm9yfSxSZXBvcnRlci5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbiBzYXZlKCl7dmFyIHN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJue29iajpzdGF0ZS5vYmoscGF0aExlbjpzdGF0ZS5wYXRoLmxlbmd0aH19LFJlcG9ydGVyLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uIHJlc3RvcmUoZGF0YSl7dmFyIHN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGU7c3RhdGUub2JqPWRhdGEub2JqLHN0YXRlLnBhdGg9c3RhdGUucGF0aC5zbGljZSgwLGRhdGEucGF0aExlbil9LFJlcG9ydGVyLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbiBlbnRlcktleShrZXkpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaChrZXkpfSxSZXBvcnRlci5wcm90b3R5cGUuZXhpdEtleT1mdW5jdGlvbiBleGl0S2V5KGluZGV4KXt2YXIgc3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtzdGF0ZS5wYXRoPXN0YXRlLnBhdGguc2xpY2UoMCxpbmRleC0xKX0sUmVwb3J0ZXIucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uIGxlYXZlS2V5KGluZGV4LGtleSx2YWx1ZSl7dmFyIHN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KGluZGV4KSxudWxsIT09c3RhdGUub2JqJiYoc3RhdGUub2JqW2tleV09dmFsdWUpfSxSZXBvcnRlci5wcm90b3R5cGUucGF0aD1mdW5jdGlvbiBwYXRoKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LFJlcG9ydGVyLnByb3RvdHlwZS5lbnRlck9iamVjdD1mdW5jdGlvbiBlbnRlck9iamVjdCgpe3ZhciBzdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLHByZXY9c3RhdGUub2JqO3JldHVybiBzdGF0ZS5vYmo9e30scHJldn0sUmVwb3J0ZXIucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uIGxlYXZlT2JqZWN0KHByZXYpe3ZhciBzdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLG5vdz1zdGF0ZS5vYmo7cmV0dXJuIHN0YXRlLm9iaj1wcmV2LG5vd30sUmVwb3J0ZXIucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uIGVycm9yKG1zZyl7dmFyIGVycixzdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLGluaGVyaXRlZD1tc2cgaW5zdGFuY2VvZiBSZXBvcnRlckVycm9yO2lmKGVycj1pbmhlcml0ZWQ/bXNnOm5ldyBSZXBvcnRlckVycm9yKHN0YXRlLnBhdGgubWFwKGZ1bmN0aW9uKGVsZW0pe3JldHVybiJbIitKU09OLnN0cmluZ2lmeShlbGVtKSsiXSJ9KS5qb2luKCIiKSxtc2cubWVzc2FnZXx8bXNnLG1zZy5zdGFjayksIXN0YXRlLm9wdGlvbnMucGFydGlhbCl0aHJvdyBlcnI7cmV0dXJuIGluaGVyaXRlZHx8c3RhdGUuZXJyb3JzLnB1c2goZXJyKSxlcnJ9LFJlcG9ydGVyLnByb3RvdHlwZS53cmFwUmVzdWx0PWZ1bmN0aW9uIHdyYXBSZXN1bHQocmVzdWx0KXt2YXIgc3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gc3RhdGUub3B0aW9ucy5wYXJ0aWFsP3tyZXN1bHQ6dGhpcy5pc0Vycm9yKHJlc3VsdCk/bnVsbDpyZXN1bHQsZXJyb3JzOnN0YXRlLmVycm9yc306cmVzdWx0fSxpbmhlcml0cyhSZXBvcnRlckVycm9yLEVycm9yKSxSZXBvcnRlckVycm9yLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uIHJldGhyb3cobXNnKXtpZih0aGlzLm1lc3NhZ2U9bXNnKyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLFJlcG9ydGVyRXJyb3IpLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChlKXt0aGlzLnN0YWNrPWUuc3RhY2t9cmV0dXJuIHRoaXN9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvY29uc3RhbnRzL2Rlci5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgY29uc3RhbnRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2NvbnN0YW50cy9pbmRleC5qcyIpO2V4cG9ydHMudGFnQ2xhc3M9ezA6InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRleHQiLDM6InByaXZhdGUifSxleHBvcnRzLnRhZ0NsYXNzQnlOYW1lPWNvbnN0YW50cy5fcmV2ZXJzZShleHBvcnRzLnRhZ0NsYXNzKSxleHBvcnRzLnRhZz17MDoiZW5kIiwxOiJib29sIiwyOiJpbnQiLDM6ImJpdHN0ciIsNDoib2N0c3RyIiw1OiJudWxsXyIsNjoib2JqaWQiLDc6Im9iakRlc2MiLDg6ImV4dGVybmFsIiw5OiJyZWFsIiwxMDoiZW51bSIsMTE6ImVtYmVkIiwxMjoidXRmOHN0ciIsMTM6InJlbGF0aXZlT2lkIiwxNjoic2VxIiwxNzoic2V0IiwxODoibnVtc3RyIiwxOToicHJpbnRzdHIiLDIwOiJ0NjFzdHIiLDIxOiJ2aWRlb3N0ciIsMjI6ImlhNXN0ciIsMjM6InV0Y3RpbWUiLDI0OiJnZW50aW1lIiwyNToiZ3JhcGhzdHIiLDI2OiJpc282NDZzdHIiLDI3OiJnZW5zdHIiLDI4OiJ1bmlzdHIiLDI5OiJjaGFyc3RyIiwzMDoiYm1wc3RyIn0sZXhwb3J0cy50YWdCeU5hbWU9Y29uc3RhbnRzLl9yZXZlcnNlKGV4cG9ydHMudGFnKX0sIi4uLy4uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2NvbnN0YW50cy9pbmRleC5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgY29uc3RhbnRzPWV4cG9ydHM7Y29uc3RhbnRzLl9yZXZlcnNlPWZ1bmN0aW9uIHJldmVyc2UobWFwKXt2YXIgcmVzPXt9O3JldHVybiBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goZnVuY3Rpb24oa2V5KXsoMHxrZXkpPT1rZXkmJihrZXl8PTApO3ZhciB2YWx1ZT1tYXBba2V5XTtyZXNbdmFsdWVdPWtleX0pLHJlc30sY29uc3RhbnRzLmRlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9jb25zdGFudHMvZGVyLmpzIil9LCIuLi8uLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9kZWNvZGVycy9kZXIuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIGluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiksYXNuMT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS5qcyIpLGJhc2U9YXNuMS5iYXNlLGJpZ251bT1hc24xLmJpZ251bSxkZXI9YXNuMS5jb25zdGFudHMuZGVyO2Z1bmN0aW9uIERFUkRlY29kZXIoZW50aXR5KXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9ZW50aXR5Lm5hbWUsdGhpcy5lbnRpdHk9ZW50aXR5LHRoaXMudHJlZT1uZXcgREVSTm9kZSx0aGlzLnRyZWUuX2luaXQoZW50aXR5LmJvZHkpfWZ1bmN0aW9uIERFUk5vZGUocGFyZW50KXtiYXNlLk5vZGUuY2FsbCh0aGlzLCJkZXIiLHBhcmVudCl9ZnVuY3Rpb24gZGVyRGVjb2RlVGFnKGJ1ZixmYWlsKXt2YXIgdGFnPWJ1Zi5yZWFkVUludDgoZmFpbCk7aWYoYnVmLmlzRXJyb3IodGFnKSlyZXR1cm4gdGFnO3ZhciBjbHM9ZGVyLnRhZ0NsYXNzW3RhZz4+Nl0scHJpbWl0aXZlPSEoMzImdGFnKTtpZigzMSZ+dGFnKXRhZyY9MzE7ZWxzZXt2YXIgb2N0PXRhZztmb3IodGFnPTA7ISgxMjgmfm9jdCk7KXtpZihvY3Q9YnVmLnJlYWRVSW50OChmYWlsKSxidWYuaXNFcnJvcihvY3QpKXJldHVybiBvY3Q7dGFnPDw9Nyx0YWd8PTEyNyZvY3R9fXJldHVybntjbHMscHJpbWl0aXZlLHRhZyx0YWdTdHI6ZGVyLnRhZ1t0YWddfX1mdW5jdGlvbiBkZXJEZWNvZGVMZW4oYnVmLHByaW1pdGl2ZSxmYWlsKXt2YXIgbGVuPWJ1Zi5yZWFkVUludDgoZmFpbCk7aWYoYnVmLmlzRXJyb3IobGVuKSlyZXR1cm4gbGVuO2lmKCFwcmltaXRpdmUmJjEyOD09PWxlbilyZXR1cm4gbnVsbDtpZighKDEyOCZsZW4pKXJldHVybiBsZW47dmFyIG51bT0xMjcmbGVuO2lmKG51bT40KXJldHVybiBidWYuZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtsZW49MDtmb3IodmFyIGk9MDtpPG51bTtpKyspe2xlbjw8PTg7dmFyIGo9YnVmLnJlYWRVSW50OChmYWlsKTtpZihidWYuaXNFcnJvcihqKSlyZXR1cm4gajtsZW58PWp9cmV0dXJuIGxlbn1tb2R1bGUuZXhwb3J0cz1ERVJEZWNvZGVyLERFUkRlY29kZXIucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbiBkZWNvZGUoZGF0YSxvcHRpb25zKXtyZXR1cm4gZGF0YSBpbnN0YW5jZW9mIGJhc2UuRGVjb2RlckJ1ZmZlcnx8KGRhdGE9bmV3IGJhc2UuRGVjb2RlckJ1ZmZlcihkYXRhLG9wdGlvbnMpKSx0aGlzLnRyZWUuX2RlY29kZShkYXRhLG9wdGlvbnMpfSxpbmhlcml0cyhERVJOb2RlLGJhc2UuTm9kZSksREVSTm9kZS5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24gcGVla1RhZyhidWZmZXIsdGFnLGFueSl7aWYoYnVmZmVyLmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgc3RhdGU9YnVmZmVyLnNhdmUoKSxkZWNvZGVkVGFnPWRlckRlY29kZVRhZyhidWZmZXIsJ0ZhaWxlZCB0byBwZWVrIHRhZzogIicrdGFnKyciJyk7cmV0dXJuIGJ1ZmZlci5pc0Vycm9yKGRlY29kZWRUYWcpP2RlY29kZWRUYWc6KGJ1ZmZlci5yZXN0b3JlKHN0YXRlKSxkZWNvZGVkVGFnLnRhZz09PXRhZ3x8ZGVjb2RlZFRhZy50YWdTdHI9PT10YWd8fGRlY29kZWRUYWcudGFnU3RyKyJvZiI9PT10YWd8fGFueSl9LERFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVUYWc9ZnVuY3Rpb24gZGVjb2RlVGFnKGJ1ZmZlcix0YWcsYW55KXt2YXIgZGVjb2RlZFRhZz1kZXJEZWNvZGVUYWcoYnVmZmVyLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJyt0YWcrJyInKTtpZihidWZmZXIuaXNFcnJvcihkZWNvZGVkVGFnKSlyZXR1cm4gZGVjb2RlZFRhZzt2YXIgbGVuPWRlckRlY29kZUxlbihidWZmZXIsZGVjb2RlZFRhZy5wcmltaXRpdmUsJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mICInK3RhZysnIicpO2lmKGJ1ZmZlci5pc0Vycm9yKGxlbikpcmV0dXJuIGxlbjtpZighYW55JiZkZWNvZGVkVGFnLnRhZyE9PXRhZyYmZGVjb2RlZFRhZy50YWdTdHIhPT10YWcmJmRlY29kZWRUYWcudGFnU3RyKyJvZiIhPT10YWcpcmV0dXJuIGJ1ZmZlci5lcnJvcignRmFpbGVkIHRvIG1hdGNoIHRhZzogIicrdGFnKyciJyk7aWYoZGVjb2RlZFRhZy5wcmltaXRpdmV8fG51bGwhPT1sZW4pcmV0dXJuIGJ1ZmZlci5za2lwKGxlbiwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK3RhZysnIicpO3ZhciBzdGF0ZT1idWZmZXIuc2F2ZSgpLHJlcz10aGlzLl9za2lwVW50aWxFbmQoYnVmZmVyLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3JldHVybiBidWZmZXIuaXNFcnJvcihyZXMpP3JlczoobGVuPWJ1ZmZlci5vZmZzZXQtc3RhdGUub2Zmc2V0LGJ1ZmZlci5yZXN0b3JlKHN0YXRlKSxidWZmZXIuc2tpcChsZW4sJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJyt0YWcrJyInKSl9LERFUk5vZGUucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24gc2tpcFVudGlsRW5kKGJ1ZmZlcixmYWlsKXtmb3IoOzspe3ZhciB0YWc9ZGVyRGVjb2RlVGFnKGJ1ZmZlcixmYWlsKTtpZihidWZmZXIuaXNFcnJvcih0YWcpKXJldHVybiB0YWc7dmFyIHJlcyxsZW49ZGVyRGVjb2RlTGVuKGJ1ZmZlcix0YWcucHJpbWl0aXZlLGZhaWwpO2lmKGJ1ZmZlci5pc0Vycm9yKGxlbikpcmV0dXJuIGxlbjtpZihyZXM9dGFnLnByaW1pdGl2ZXx8bnVsbCE9PWxlbj9idWZmZXIuc2tpcChsZW4pOnRoaXMuX3NraXBVbnRpbEVuZChidWZmZXIsZmFpbCksYnVmZmVyLmlzRXJyb3IocmVzKSlyZXR1cm4gcmVzO2lmKCJlbmQiPT09dGFnLnRhZ1N0cilicmVha319LERFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uIGRlY29kZUxpc3QoYnVmZmVyLHRhZyxkZWNvZGVyLG9wdGlvbnMpe2Zvcih2YXIgcmVzdWx0PVtdOyFidWZmZXIuaXNFbXB0eSgpOyl7dmFyIHBvc3NpYmxlRW5kPXRoaXMuX3BlZWtUYWcoYnVmZmVyLCJlbmQiKTtpZihidWZmZXIuaXNFcnJvcihwb3NzaWJsZUVuZCkpcmV0dXJuIHBvc3NpYmxlRW5kO3ZhciByZXM9ZGVjb2Rlci5kZWNvZGUoYnVmZmVyLCJkZXIiLG9wdGlvbnMpO2lmKGJ1ZmZlci5pc0Vycm9yKHJlcykmJnBvc3NpYmxlRW5kKWJyZWFrO3Jlc3VsdC5wdXNoKHJlcyl9cmV0dXJuIHJlc3VsdH0sREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZVN0cj1mdW5jdGlvbiBkZWNvZGVTdHIoYnVmZmVyLHRhZyl7aWYoImJpdHN0ciI9PT10YWcpe3ZhciB1bnVzZWQ9YnVmZmVyLnJlYWRVSW50OCgpO3JldHVybiBidWZmZXIuaXNFcnJvcih1bnVzZWQpP3VudXNlZDp7dW51c2VkLGRhdGE6YnVmZmVyLnJhdygpfX1pZigiYm1wc3RyIj09PXRhZyl7dmFyIHJhdz1idWZmZXIucmF3KCk7aWYocmF3Lmxlbmd0aCUyPT0xKXJldHVybiBidWZmZXIuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBibXBzdHIgbGVuZ3RoIG1pc21hdGNoIik7Zm9yKHZhciBzdHI9IiIsaT0wO2k8cmF3Lmxlbmd0aC8yO2krKylzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUocmF3LnJlYWRVSW50MTZCRSgyKmkpKTtyZXR1cm4gc3RyfWlmKCJudW1zdHIiPT09dGFnKXt2YXIgbnVtc3RyPWJ1ZmZlci5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNOdW1zdHIobnVtc3RyKT9udW1zdHI6YnVmZmVyLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1pZigib2N0c3RyIj09PXRhZylyZXR1cm4gYnVmZmVyLnJhdygpO2lmKCJvYmpEZXNjIj09PXRhZylyZXR1cm4gYnVmZmVyLnJhdygpO2lmKCJwcmludHN0ciI9PT10YWcpe3ZhciBwcmludHN0cj1idWZmZXIucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIocHJpbnRzdHIpP3ByaW50c3RyOmJ1ZmZlci5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1yZXR1cm4vc3RyJC8udGVzdCh0YWcpP2J1ZmZlci5yYXcoKS50b1N0cmluZygpOmJ1ZmZlci5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrdGFnKyIgdW5zdXBwb3J0ZWQiKX0sREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uIGRlY29kZU9iamlkKGJ1ZmZlcix2YWx1ZXMscmVsYXRpdmUpe2Zvcih2YXIgcmVzdWx0LGlkZW50aWZpZXJzPVtdLGlkZW50PTA7IWJ1ZmZlci5pc0VtcHR5KCk7KXt2YXIgc3ViaWRlbnQ9YnVmZmVyLnJlYWRVSW50OCgpO2lkZW50PDw9NyxpZGVudHw9MTI3JnN1YmlkZW50LDEyOCZzdWJpZGVudHx8KGlkZW50aWZpZXJzLnB1c2goaWRlbnQpLGlkZW50PTApfTEyOCZzdWJpZGVudCYmaWRlbnRpZmllcnMucHVzaChpZGVudCk7dmFyIGZpcnN0PWlkZW50aWZpZXJzWzBdLzQwfDAsc2Vjb25kPWlkZW50aWZpZXJzWzBdJTQwO2lmKHJlc3VsdD1yZWxhdGl2ZT9pZGVudGlmaWVyczpbZmlyc3Qsc2Vjb25kXS5jb25jYXQoaWRlbnRpZmllcnMuc2xpY2UoMSkpLHZhbHVlcyl7dmFyIHRtcD12YWx1ZXNbcmVzdWx0LmpvaW4oIiAiKV07dm9pZCAwPT09dG1wJiYodG1wPXZhbHVlc1tyZXN1bHQuam9pbigiLiIpXSksdm9pZCAwIT09dG1wJiYocmVzdWx0PXRtcCl9cmV0dXJuIHJlc3VsdH0sREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZVRpbWU9ZnVuY3Rpb24gZGVjb2RlVGltZShidWZmZXIsdGFnKXt2YXIgc3RyPWJ1ZmZlci5yYXcoKS50b1N0cmluZygpO2lmKCJnZW50aW1lIj09PXRhZyl2YXIgeWVhcj0wfHN0ci5zbGljZSgwLDQpLG1vbj0wfHN0ci5zbGljZSg0LDYpLGRheT0wfHN0ci5zbGljZSg2LDgpLGhvdXI9MHxzdHIuc2xpY2UoOCwxMCksbWluPTB8c3RyLnNsaWNlKDEwLDEyKSxzZWM9MHxzdHIuc2xpY2UoMTIsMTQpO2Vsc2V7aWYoInV0Y3RpbWUiIT09dGFnKXJldHVybiBidWZmZXIuZXJyb3IoIkRlY29kaW5nICIrdGFnKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpO3llYXI9MHxzdHIuc2xpY2UoMCwyKSxtb249MHxzdHIuc2xpY2UoMiw0KSxkYXk9MHxzdHIuc2xpY2UoNCw2KSxob3VyPTB8c3RyLnNsaWNlKDYsOCksbWluPTB8c3RyLnNsaWNlKDgsMTApLHNlYz0wfHN0ci5zbGljZSgxMCwxMik7eWVhcj15ZWFyPDcwPzJlMyt5ZWFyOjE5MDAreWVhcn1yZXR1cm4gRGF0ZS5VVEMoeWVhcixtb24tMSxkYXksaG91cixtaW4sc2VjLDApfSxERVJOb2RlLnByb3RvdHlwZS5fZGVjb2RlTnVsbD1mdW5jdGlvbiBkZWNvZGVOdWxsKGJ1ZmZlcil7cmV0dXJuIG51bGx9LERFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uIGRlY29kZUJvb2woYnVmZmVyKXt2YXIgcmVzPWJ1ZmZlci5yZWFkVUludDgoKTtyZXR1cm4gYnVmZmVyLmlzRXJyb3IocmVzKT9yZXM6MCE9PXJlc30sREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbiBkZWNvZGVJbnQoYnVmZmVyLHZhbHVlcyl7dmFyIHJhdz1idWZmZXIucmF3KCkscmVzPW5ldyBiaWdudW0ocmF3KTtyZXR1cm4gdmFsdWVzJiYocmVzPXZhbHVlc1tyZXMudG9TdHJpbmcoMTApXXx8cmVzKSxyZXN9LERFUk5vZGUucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24gdXNlKGVudGl0eSxvYmope3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlbnRpdHkmJihlbnRpdHk9ZW50aXR5KG9iaikpLGVudGl0eS5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LCIuLi8uLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9kZWNvZGVycy9pbmRleC5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgZGVjb2RlcnM9ZXhwb3J0cztkZWNvZGVycy5kZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZGVjb2RlcnMvZGVyLmpzIiksZGVjb2RlcnMucGVtPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2RlY29kZXJzL3BlbS5qcyIpfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZGVjb2RlcnMvcGVtLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBpbmhlcml0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpLEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLERFUkRlY29kZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZGVjb2RlcnMvZGVyLmpzIik7ZnVuY3Rpb24gUEVNRGVjb2RlcihlbnRpdHkpe0RFUkRlY29kZXIuY2FsbCh0aGlzLGVudGl0eSksdGhpcy5lbmM9InBlbSJ9aW5oZXJpdHMoUEVNRGVjb2RlcixERVJEZWNvZGVyKSxtb2R1bGUuZXhwb3J0cz1QRU1EZWNvZGVyLFBFTURlY29kZXIucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbiBkZWNvZGUoZGF0YSxvcHRpb25zKXtmb3IodmFyIGxpbmVzPWRhdGEudG9TdHJpbmcoKS5zcGxpdCgvW1xyXG5dKy9nKSxsYWJlbD1vcHRpb25zLmxhYmVsLnRvVXBwZXJDYXNlKCkscmU9L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvLHN0YXJ0PS0xLGVuZD0tMSxpPTA7aTxsaW5lcy5sZW5ndGg7aSsrKXt2YXIgbWF0Y2g9bGluZXNbaV0ubWF0Y2gocmUpO2lmKG51bGwhPT1tYXRjaCYmbWF0Y2hbMl09PT1sYWJlbCl7aWYoLTEhPT1zdGFydCl7aWYoIkVORCIhPT1tYXRjaFsxXSlicmVhaztlbmQ9aTticmVha31pZigiQkVHSU4iIT09bWF0Y2hbMV0pYnJlYWs7c3RhcnQ9aX19aWYoLTE9PT1zdGFydHx8LTE9PT1lbmQpdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK2xhYmVsKTt2YXIgYmFzZTY0PWxpbmVzLnNsaWNlKHN0YXJ0KzEsZW5kKS5qb2luKCIiKTtiYXNlNjQucmVwbGFjZSgvW15hLXowLTlcK1wvPV0rL2dpLCIiKTt2YXIgaW5wdXQ9bmV3IEJ1ZmZlcihiYXNlNjQsImJhc2U2NCIpO3JldHVybiBERVJEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLGlucHV0LG9wdGlvbnMpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2VuY29kZXJzL2Rlci5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgaW5oZXJpdHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKSxCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcixhc24xPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xLmpzIiksYmFzZT1hc24xLmJhc2UsZGVyPWFzbjEuY29uc3RhbnRzLmRlcjtmdW5jdGlvbiBERVJFbmNvZGVyKGVudGl0eSl7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPWVudGl0eS5uYW1lLHRoaXMuZW50aXR5PWVudGl0eSx0aGlzLnRyZWU9bmV3IERFUk5vZGUsdGhpcy50cmVlLl9pbml0KGVudGl0eS5ib2R5KX1mdW5jdGlvbiBERVJOb2RlKHBhcmVudCl7YmFzZS5Ob2RlLmNhbGwodGhpcywiZGVyIixwYXJlbnQpfWZ1bmN0aW9uIHR3byhudW0pe3JldHVybiBudW08MTA/IjAiK251bTpudW19bW9kdWxlLmV4cG9ydHM9REVSRW5jb2RlcixERVJFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24gZW5jb2RlKGRhdGEscmVwb3J0ZXIpe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShkYXRhLHJlcG9ydGVyKS5qb2luKCl9LGluaGVyaXRzKERFUk5vZGUsYmFzZS5Ob2RlKSxERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uIGVuY29kZUNvbXBvc2l0ZSh0YWcscHJpbWl0aXZlLGNscyxjb250ZW50KXt2YXIgaGVhZGVyLGVuY29kZWRUYWc9ZnVuY3Rpb24gZW5jb2RlVGFnKHRhZyxwcmltaXRpdmUsY2xzLHJlcG9ydGVyKXt2YXIgcmVzOyJzZXFvZiI9PT10YWc/dGFnPSJzZXEiOiJzZXRvZiI9PT10YWcmJih0YWc9InNldCIpO2lmKGRlci50YWdCeU5hbWUuaGFzT3duUHJvcGVydHkodGFnKSlyZXM9ZGVyLnRhZ0J5TmFtZVt0YWddO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiB0YWd8fCgwfHRhZykhPT10YWcpcmV0dXJuIHJlcG9ydGVyLmVycm9yKCJVbmtub3duIHRhZzogIit0YWcpO3Jlcz10YWd9aWYocmVzPj0zMSlyZXR1cm4gcmVwb3J0ZXIuZXJyb3IoIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZCIpO3ByaW1pdGl2ZXx8KHJlc3w9MzIpO3JldHVybiByZXN8PWRlci50YWdDbGFzc0J5TmFtZVtjbHN8fCJ1bml2ZXJzYWwiXTw8NixyZXN9KHRhZyxwcmltaXRpdmUsY2xzLHRoaXMucmVwb3J0ZXIpO2lmKGNvbnRlbnQubGVuZ3RoPDEyOClyZXR1cm4oaGVhZGVyPW5ldyBCdWZmZXIoMikpWzBdPWVuY29kZWRUYWcsaGVhZGVyWzFdPWNvbnRlbnQubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW2hlYWRlcixjb250ZW50XSk7Zm9yKHZhciBsZW5PY3RldHM9MSxpPWNvbnRlbnQubGVuZ3RoO2k+PTI1NjtpPj49OClsZW5PY3RldHMrKzsoaGVhZGVyPW5ldyBCdWZmZXIoMitsZW5PY3RldHMpKVswXT1lbmNvZGVkVGFnLGhlYWRlclsxXT0xMjh8bGVuT2N0ZXRzO2k9MStsZW5PY3RldHM7Zm9yKHZhciBqPWNvbnRlbnQubGVuZ3RoO2o+MDtpLS0saj4+PTgpaGVhZGVyW2ldPTI1NSZqO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtoZWFkZXIsY29udGVudF0pfSxERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uIGVuY29kZVN0cihzdHIsdGFnKXtpZigiYml0c3RyIj09PXRhZylyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHxzdHIudW51c2VkLHN0ci5kYXRhXSk7aWYoImJtcHN0ciI9PT10YWcpe2Zvcih2YXIgYnVmPW5ldyBCdWZmZXIoMipzdHIubGVuZ3RoKSxpPTA7aTxzdHIubGVuZ3RoO2krKylidWYud3JpdGVVSW50MTZCRShzdHIuY2hhckNvZGVBdChpKSwyKmkpO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGJ1Zil9cmV0dXJuIm51bXN0ciI9PT10YWc/dGhpcy5faXNOdW1zdHIoc3RyKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHN0cik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09dGFnP3RoaXMuX2lzUHJpbnRzdHIoc3RyKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHN0cik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdCh0YWcpfHwib2JqRGVzYyI9PT10YWc/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihzdHIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK3RhZysiIHVuc3VwcG9ydGVkIil9LERFUk5vZGUucHJvdG90eXBlLl9lbmNvZGVPYmppZD1mdW5jdGlvbiBlbmNvZGVPYmppZChpZCx2YWx1ZXMscmVsYXRpdmUpe2lmKCJzdHJpbmciPT10eXBlb2YgaWQpe2lmKCF2YWx1ZXMpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighdmFsdWVzLmhhc093blByb3BlcnR5KGlkKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtpZD12YWx1ZXNbaWRdLnNwbGl0KC9bXHNcLl0rL2cpO2Zvcih2YXIgaT0wO2k8aWQubGVuZ3RoO2krKylpZFtpXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoaWQpKXtpZD1pZC5zbGljZSgpO2ZvcihpPTA7aTxpZC5sZW5ndGg7aSsrKWlkW2ldfD0wfWlmKCFBcnJheS5pc0FycmF5KGlkKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgZ290OiAiK0pTT04uc3RyaW5naWZ5KGlkKSk7aWYoIXJlbGF0aXZlKXtpZihpZFsxXT49NDApcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlNlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQiIpO2lkLnNwbGljZSgwLDIsNDAqaWRbMF0raWRbMV0pfXZhciBzaXplPTA7Zm9yKGk9MDtpPGlkLmxlbmd0aDtpKyspe3ZhciBpZGVudD1pZFtpXTtmb3Ioc2l6ZSsrO2lkZW50Pj0xMjg7aWRlbnQ+Pj03KXNpemUrK312YXIgb2JqaWQ9bmV3IEJ1ZmZlcihzaXplKSxvZmZzZXQ9b2JqaWQubGVuZ3RoLTE7Zm9yKGk9aWQubGVuZ3RoLTE7aT49MDtpLS0pe2lkZW50PWlkW2ldO2ZvcihvYmppZFtvZmZzZXQtLV09MTI3JmlkZW50OyhpZGVudD4+PTcpPjA7KW9iamlkW29mZnNldC0tXT0xMjh8MTI3JmlkZW50fXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG9iamlkKX0sREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24gZW5jb2RlVGltZSh0aW1lLHRhZyl7dmFyIHN0cixkYXRlPW5ldyBEYXRlKHRpbWUpO3JldHVybiJnZW50aW1lIj09PXRhZz9zdHI9W3R3byhkYXRlLmdldEZ1bGxZZWFyKCkpLHR3byhkYXRlLmdldFVUQ01vbnRoKCkrMSksdHdvKGRhdGUuZ2V0VVRDRGF0ZSgpKSx0d28oZGF0ZS5nZXRVVENIb3VycygpKSx0d28oZGF0ZS5nZXRVVENNaW51dGVzKCkpLHR3byhkYXRlLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT10YWc/c3RyPVt0d28oZGF0ZS5nZXRGdWxsWWVhcigpJTEwMCksdHdvKGRhdGUuZ2V0VVRDTW9udGgoKSsxKSx0d28oZGF0ZS5nZXRVVENEYXRlKCkpLHR3byhkYXRlLmdldFVUQ0hvdXJzKCkpLHR3byhkYXRlLmdldFVUQ01pbnV0ZXMoKSksdHdvKGRhdGUuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nICIrdGFnKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihzdHIsIm9jdHN0ciIpfSxERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbiBlbmNvZGVOdWxsKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoIiIpfSxERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlSW50PWZ1bmN0aW9uIGVuY29kZUludChudW0sdmFsdWVzKXtpZigic3RyaW5nIj09dHlwZW9mIG51bSl7aWYoIXZhbHVlcylyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU3RyaW5nIGludCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCIpO2lmKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkobnVtKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkobnVtKSk7bnVtPXZhbHVlc1tudW1dfWlmKCJudW1iZXIiIT10eXBlb2YgbnVtJiYhQnVmZmVyLmlzQnVmZmVyKG51bSkpe3ZhciBudW1BcnJheT1udW0udG9BcnJheSgpOyFudW0uc2lnbiYmMTI4Jm51bUFycmF5WzBdJiZudW1BcnJheS51bnNoaWZ0KDApLG51bT1uZXcgQnVmZmVyKG51bUFycmF5KX1pZihCdWZmZXIuaXNCdWZmZXIobnVtKSl7dmFyIHNpemU9bnVtLmxlbmd0aDswPT09bnVtLmxlbmd0aCYmc2l6ZSsrO3ZhciBvdXQ9bmV3IEJ1ZmZlcihzaXplKTtyZXR1cm4gbnVtLmNvcHkob3V0KSwwPT09bnVtLmxlbmd0aCYmKG91dFswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG91dCl9aWYobnVtPDEyOClyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihudW0pO2lmKG51bTwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsbnVtXSk7c2l6ZT0xO2Zvcih2YXIgaT1udW07aT49MjU2O2k+Pj04KXNpemUrKztmb3IoaT0ob3V0PW5ldyBBcnJheShzaXplKSkubGVuZ3RoLTE7aT49MDtpLS0pb3V0W2ldPTI1NSZudW0sbnVtPj49ODtyZXR1cm4gMTI4Jm91dFswXSYmb3V0LnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuZXcgQnVmZmVyKG91dCkpfSxERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlQm9vbD1mdW5jdGlvbiBlbmNvZGVCb29sKHZhbHVlKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih2YWx1ZT8yNTU6MCl9LERFUk5vZGUucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24gdXNlKGVudGl0eSxvYmope3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlbnRpdHkmJihlbnRpdHk9ZW50aXR5KG9iaikpLGVudGl0eS5fZ2V0RW5jb2RlcigiZGVyIikudHJlZX0sREVSTm9kZS5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uIHNraXBEZWZhdWx0KGRhdGFCdWZmZXIscmVwb3J0ZXIscGFyZW50KXt2YXIgaSxzdGF0ZT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PXN0YXRlLmRlZmF1bHQpcmV0dXJuITE7dmFyIGRhdGE9ZGF0YUJ1ZmZlci5qb2luKCk7aWYodm9pZCAwPT09c3RhdGUuZGVmYXVsdEJ1ZmZlciYmKHN0YXRlLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoc3RhdGUuZGVmYXVsdCxyZXBvcnRlcixwYXJlbnQpLmpvaW4oKSksZGF0YS5sZW5ndGghPT1zdGF0ZS5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IoaT0wO2k8ZGF0YS5sZW5ndGg7aSsrKWlmKGRhdGFbaV0hPT1zdGF0ZS5kZWZhdWx0QnVmZmVyW2ldKXJldHVybiExO3JldHVybiEwfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2VuY29kZXJzL2luZGV4LmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBlbmNvZGVycz1leHBvcnRzO2VuY29kZXJzLmRlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9lbmNvZGVycy9kZXIuanMiKSxlbmNvZGVycy5wZW09X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZW5jb2RlcnMvcGVtLmpzIil9LCIuLi8uLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9lbmNvZGVycy9wZW0uanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIGluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiksREVSRW5jb2Rlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9lbmNvZGVycy9kZXIuanMiKTtmdW5jdGlvbiBQRU1FbmNvZGVyKGVudGl0eSl7REVSRW5jb2Rlci5jYWxsKHRoaXMsZW50aXR5KSx0aGlzLmVuYz0icGVtIn1pbmhlcml0cyhQRU1FbmNvZGVyLERFUkVuY29kZXIpLG1vZHVsZS5leHBvcnRzPVBFTUVuY29kZXIsUEVNRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uIGVuY29kZShkYXRhLG9wdGlvbnMpe2Zvcih2YXIgcD1ERVJFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLGRhdGEpLnRvU3RyaW5nKCJiYXNlNjQiKSxvdXQ9WyItLS0tLUJFR0lOICIrb3B0aW9ucy5sYWJlbCsiLS0tLS0iXSxpPTA7aTxwLmxlbmd0aDtpKz02NClvdXQucHVzaChwLnNsaWNlKGksaSs2NCkpO3JldHVybiBvdXQucHVzaCgiLS0tLS1FTkQgIitvcHRpb25zLmxhYmVsKyItLS0tLSIpLG91dC5qb2luKCJcbiIpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9hc24xLmpzL25vZGVfbW9kdWxlcy9ibi5qcy9saWIvYm4uanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYXNzZXJ0KHZhbCxtc2cpe2lmKCF2YWwpdGhyb3cgbmV3IEVycm9yKG1zZ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBpbmhlcml0cyhjdG9yLHN1cGVyQ3Rvcil7Y3Rvci5zdXBlcl89c3VwZXJDdG9yO3ZhciBUZW1wQ3Rvcj1mdW5jdGlvbigpe307VGVtcEN0b3IucHJvdG90eXBlPXN1cGVyQ3Rvci5wcm90b3R5cGUsY3Rvci5wcm90b3R5cGU9bmV3IFRlbXBDdG9yLGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yPWN0b3J9ZnVuY3Rpb24gQk4obnVtYmVyLGJhc2UsZW5kaWFuKXtpZihCTi5pc0JOKG51bWJlcikpcmV0dXJuIG51bWJlcjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09bnVtYmVyJiYoImxlIiE9PWJhc2UmJiJiZSIhPT1iYXNlfHwoZW5kaWFuPWJhc2UsYmFzZT0xMCksdGhpcy5faW5pdChudW1iZXJ8fDAsYmFzZXx8MTAsZW5kaWFufHwiYmUiKSl9dmFyIEJ1ZmZlcjsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1CTjpleHBvcnRzLkJOPUJOLEJOLkJOPUJOLEJOLndvcmRTaXplPTI2O3RyeXtCdWZmZXI9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyfWNhdGNoKGUpe31mdW5jdGlvbiBwYXJzZUhleDRCaXRzKHN0cmluZyxpbmRleCl7dmFyIGM9c3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpO3JldHVybiBjPj02NSYmYzw9NzA/Yy01NTpjPj05NyYmYzw9MTAyP2MtODc6Yy00OCYxNX1mdW5jdGlvbiBwYXJzZUhleEJ5dGUoc3RyaW5nLGxvd2VyQm91bmQsaW5kZXgpe3ZhciByPXBhcnNlSGV4NEJpdHMoc3RyaW5nLGluZGV4KTtyZXR1cm4gaW5kZXgtMT49bG93ZXJCb3VuZCYmKHJ8PXBhcnNlSGV4NEJpdHMoc3RyaW5nLGluZGV4LTEpPDw0KSxyfWZ1bmN0aW9uIHBhcnNlQmFzZShzdHIsc3RhcnQsZW5kLG11bCl7Zm9yKHZhciByPTAsbGVuPU1hdGgubWluKHN0ci5sZW5ndGgsZW5kKSxpPXN0YXJ0O2k8bGVuO2krKyl7dmFyIGM9c3RyLmNoYXJDb2RlQXQoaSktNDg7cio9bXVsLHIrPWM+PTQ5P2MtNDkrMTA6Yz49MTc/Yy0xNysxMDpjfXJldHVybiByfUJOLmlzQk49ZnVuY3Rpb24gaXNCTihudW0pe3JldHVybiBudW0gaW5zdGFuY2VvZiBCTnx8bnVsbCE9PW51bSYmIm9iamVjdCI9PXR5cGVvZiBudW0mJm51bS5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUJOLndvcmRTaXplJiZBcnJheS5pc0FycmF5KG51bS53b3Jkcyl9LEJOLm1heD1mdW5jdGlvbiBtYXgobGVmdCxyaWdodCl7cmV0dXJuIGxlZnQuY21wKHJpZ2h0KT4wP2xlZnQ6cmlnaHR9LEJOLm1pbj1mdW5jdGlvbiBtaW4obGVmdCxyaWdodCl7cmV0dXJuIGxlZnQuY21wKHJpZ2h0KTwwP2xlZnQ6cmlnaHR9LEJOLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbiBpbml0KG51bWJlcixiYXNlLGVuZGlhbil7aWYoIm51bWJlciI9PXR5cGVvZiBudW1iZXIpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIobnVtYmVyLGJhc2UsZW5kaWFuKTtpZigib2JqZWN0Ij09dHlwZW9mIG51bWJlcilyZXR1cm4gdGhpcy5faW5pdEFycmF5KG51bWJlcixiYXNlLGVuZGlhbik7ImhleCI9PT1iYXNlJiYoYmFzZT0xNiksYXNzZXJ0KGJhc2U9PT0oMHxiYXNlKSYmYmFzZT49MiYmYmFzZTw9MzYpO3ZhciBzdGFydD0wOyItIj09PShudW1iZXI9bnVtYmVyLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHN0YXJ0KyssdGhpcy5uZWdhdGl2ZT0xKSxzdGFydDxudW1iZXIubGVuZ3RoJiYoMTY9PT1iYXNlP3RoaXMuX3BhcnNlSGV4KG51bWJlcixzdGFydCxlbmRpYW4pOih0aGlzLl9wYXJzZUJhc2UobnVtYmVyLGJhc2Usc3RhcnQpLCJsZSI9PT1lbmRpYW4mJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiYXNlLGVuZGlhbikpKX0sQk4ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uIF9pbml0TnVtYmVyKG51bWJlcixiYXNlLGVuZGlhbil7bnVtYmVyPDAmJih0aGlzLm5lZ2F0aXZlPTEsbnVtYmVyPS1udW1iZXIpLG51bWJlcjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmbnVtYmVyXSx0aGlzLmxlbmd0aD0xKTpudW1iZXI8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmbnVtYmVyLG51bWJlci82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGFzc2VydChudW1iZXI8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmbnVtYmVyLG51bWJlci82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09ZW5kaWFuJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYmFzZSxlbmRpYW4pfSxCTi5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbiBfaW5pdEFycmF5KG51bWJlcixiYXNlLGVuZGlhbil7aWYoYXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgbnVtYmVyLmxlbmd0aCksbnVtYmVyLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChudW1iZXIubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIGosdyxvZmY9MDtpZigiYmUiPT09ZW5kaWFuKWZvcihpPW51bWJlci5sZW5ndGgtMSxqPTA7aT49MDtpLT0zKXc9bnVtYmVyW2ldfG51bWJlcltpLTFdPDw4fG51bWJlcltpLTJdPDwxNix0aGlzLndvcmRzW2pdfD13PDxvZmYmNjcxMDg4NjMsdGhpcy53b3Jkc1tqKzFdPXc+Pj4yNi1vZmYmNjcxMDg4NjMsKG9mZis9MjQpPj0yNiYmKG9mZi09MjYsaisrKTtlbHNlIGlmKCJsZSI9PT1lbmRpYW4pZm9yKGk9MCxqPTA7aTxudW1iZXIubGVuZ3RoO2krPTMpdz1udW1iZXJbaV18bnVtYmVyW2krMV08PDh8bnVtYmVyW2krMl08PDE2LHRoaXMud29yZHNbal18PXc8PG9mZiY2NzEwODg2Myx0aGlzLndvcmRzW2orMV09dz4+PjI2LW9mZiY2NzEwODg2Mywob2ZmKz0yNCk+PTI2JiYob2ZmLT0yNixqKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24gX3BhcnNlSGV4KG51bWJlcixzdGFydCxlbmRpYW4pe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgobnVtYmVyLmxlbmd0aC1zdGFydCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDt2YXIgdyxvZmY9MCxqPTA7aWYoImJlIj09PWVuZGlhbilmb3IoaT1udW1iZXIubGVuZ3RoLTE7aT49c3RhcnQ7aS09Mil3PXBhcnNlSGV4Qnl0ZShudW1iZXIsc3RhcnQsaSk8PG9mZix0aGlzLndvcmRzW2pdfD02NzEwODg2MyZ3LG9mZj49MTg/KG9mZi09MTgsais9MSx0aGlzLndvcmRzW2pdfD13Pj4+MjYpOm9mZis9ODtlbHNlIGZvcihpPShudW1iZXIubGVuZ3RoLXN0YXJ0KSUyPT0wP3N0YXJ0KzE6c3RhcnQ7aTxudW1iZXIubGVuZ3RoO2krPTIpdz1wYXJzZUhleEJ5dGUobnVtYmVyLHN0YXJ0LGkpPDxvZmYsdGhpcy53b3Jkc1tqXXw9NjcxMDg4NjMmdyxvZmY+PTE4PyhvZmYtPTE4LGorPTEsdGhpcy53b3Jkc1tqXXw9dz4+PjI2KTpvZmYrPTg7dGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbiBfcGFyc2VCYXNlKG51bWJlcixiYXNlLHN0YXJ0KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgbGltYkxlbj0wLGxpbWJQb3c9MTtsaW1iUG93PD02NzEwODg2MztsaW1iUG93Kj1iYXNlKWxpbWJMZW4rKztsaW1iTGVuLS0sbGltYlBvdz1saW1iUG93L2Jhc2V8MDtmb3IodmFyIHRvdGFsPW51bWJlci5sZW5ndGgtc3RhcnQsbW9kPXRvdGFsJWxpbWJMZW4sZW5kPU1hdGgubWluKHRvdGFsLHRvdGFsLW1vZCkrc3RhcnQsd29yZD0wLGk9c3RhcnQ7aTxlbmQ7aSs9bGltYkxlbil3b3JkPXBhcnNlQmFzZShudW1iZXIsaSxpK2xpbWJMZW4sYmFzZSksdGhpcy5pbXVsbihsaW1iUG93KSx0aGlzLndvcmRzWzBdK3dvcmQ8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9d29yZDp0aGlzLl9pYWRkbih3b3JkKTtpZigwIT09bW9kKXt2YXIgcG93PTE7Zm9yKHdvcmQ9cGFyc2VCYXNlKG51bWJlcixpLG51bWJlci5sZW5ndGgsYmFzZSksaT0wO2k8bW9kO2krKylwb3cqPWJhc2U7dGhpcy5pbXVsbihwb3cpLHRoaXMud29yZHNbMF0rd29yZDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz13b3JkOnRoaXMuX2lhZGRuKHdvcmQpfXRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24gY29weShkZXN0KXtkZXN0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspZGVzdC53b3Jkc1tpXT10aGlzLndvcmRzW2ldO2Rlc3QubGVuZ3RoPXRoaXMubGVuZ3RoLGRlc3QubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxkZXN0LnJlZD10aGlzLnJlZH0sQk4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uIGNsb25lKCl7dmFyIHI9bmV3IEJOKG51bGwpO3JldHVybiB0aGlzLmNvcHkocikscn0sQk4ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24gX2V4cGFuZChzaXplKXtmb3IoO3RoaXMubGVuZ3RoPHNpemU7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sQk4ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uIHN0cmlwKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sQk4ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbiBfbm9ybVNpZ24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sQk4ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24gaW5zcGVjdCgpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgemVyb3M9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sZ3JvdXBTaXplcz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxncm91cEJhc2VzPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIHNtYWxsTXVsVG8oc2VsZixudW0sb3V0KXtvdXQubmVnYXRpdmU9bnVtLm5lZ2F0aXZlXnNlbGYubmVnYXRpdmU7dmFyIGxlbj1zZWxmLmxlbmd0aCtudW0ubGVuZ3RofDA7b3V0Lmxlbmd0aD1sZW4sbGVuPWxlbi0xfDA7dmFyIGE9MHxzZWxmLndvcmRzWzBdLGI9MHxudW0ud29yZHNbMF0scj1hKmIsbG89NjcxMDg4NjMmcixjYXJyeT1yLzY3MTA4ODY0fDA7b3V0LndvcmRzWzBdPWxvO2Zvcih2YXIgaz0xO2s8bGVuO2srKyl7Zm9yKHZhciBuY2Fycnk9Y2Fycnk+Pj4yNixyd29yZD02NzEwODg2MyZjYXJyeSxtYXhKPU1hdGgubWluKGssbnVtLmxlbmd0aC0xKSxqPU1hdGgubWF4KDAsay1zZWxmLmxlbmd0aCsxKTtqPD1tYXhKO2orKyl7dmFyIGk9ay1qfDA7bmNhcnJ5Kz0ocj0oYT0wfHNlbGYud29yZHNbaV0pKihiPTB8bnVtLndvcmRzW2pdKStyd29yZCkvNjcxMDg4NjR8MCxyd29yZD02NzEwODg2MyZyfW91dC53b3Jkc1trXT0wfHJ3b3JkLGNhcnJ5PTB8bmNhcnJ5fXJldHVybiAwIT09Y2Fycnk/b3V0LndvcmRzW2tdPTB8Y2Fycnk6b3V0Lmxlbmd0aC0tLG91dC5zdHJpcCgpfUJOLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbiB0b1N0cmluZyhiYXNlLHBhZGRpbmcpe3ZhciBvdXQ7aWYocGFkZGluZz0wfHBhZGRpbmd8fDEsMTY9PT0oYmFzZT1iYXNlfHwxMCl8fCJoZXgiPT09YmFzZSl7b3V0PSIiO2Zvcih2YXIgb2ZmPTAsY2Fycnk9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciB3PXRoaXMud29yZHNbaV0sd29yZD0oMTY3NzcyMTUmKHc8PG9mZnxjYXJyeSkpLnRvU3RyaW5nKDE2KTtjYXJyeT13Pj4+MjQtb2ZmJjE2Nzc3MjE1LChvZmYrPTIpPj0yNiYmKG9mZi09MjYsaS0tKSxvdXQ9MCE9PWNhcnJ5fHxpIT09dGhpcy5sZW5ndGgtMT96ZXJvc1s2LXdvcmQubGVuZ3RoXSt3b3JkK291dDp3b3JkK291dH1mb3IoMCE9PWNhcnJ5JiYob3V0PWNhcnJ5LnRvU3RyaW5nKDE2KStvdXQpO291dC5sZW5ndGglcGFkZGluZyE9PTA7KW91dD0iMCIrb3V0O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKG91dD0iLSIrb3V0KSxvdXR9aWYoYmFzZT09PSgwfGJhc2UpJiZiYXNlPj0yJiZiYXNlPD0zNil7dmFyIGdyb3VwU2l6ZT1ncm91cFNpemVzW2Jhc2VdLGdyb3VwQmFzZT1ncm91cEJhc2VzW2Jhc2VdO291dD0iIjt2YXIgYz10aGlzLmNsb25lKCk7Zm9yKGMubmVnYXRpdmU9MDshYy5pc1plcm8oKTspe3ZhciByPWMubW9kbihncm91cEJhc2UpLnRvU3RyaW5nKGJhc2UpO291dD0oYz1jLmlkaXZuKGdyb3VwQmFzZSkpLmlzWmVybygpP3Irb3V0Onplcm9zW2dyb3VwU2l6ZS1yLmxlbmd0aF0rcitvdXR9Zm9yKHRoaXMuaXNaZXJvKCkmJihvdXQ9IjAiK291dCk7b3V0Lmxlbmd0aCVwYWRkaW5nIT09MDspb3V0PSIwIitvdXQ7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYob3V0PSItIitvdXQpLG91dH1hc3NlcnQoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sQk4ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uIHRvTnVtYmVyKCl7dmFyIHJldD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cmV0Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cmV0Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmYXNzZXJ0KCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcmV0OnJldH0sQk4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbiB0b0pTT04oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEJOLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbiB0b0J1ZmZlcihlbmRpYW4sbGVuZ3RoKXtyZXR1cm4gYXNzZXJ0KHZvaWQgMCE9PUJ1ZmZlciksdGhpcy50b0FycmF5TGlrZShCdWZmZXIsZW5kaWFuLGxlbmd0aCl9LEJOLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uIHRvQXJyYXkoZW5kaWFuLGxlbmd0aCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZW5kaWFuLGxlbmd0aCl9LEJOLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbiB0b0FycmF5TGlrZShBcnJheVR5cGUsZW5kaWFuLGxlbmd0aCl7dmFyIGJ5dGVMZW5ndGg9dGhpcy5ieXRlTGVuZ3RoKCkscmVxTGVuZ3RoPWxlbmd0aHx8TWF0aC5tYXgoMSxieXRlTGVuZ3RoKTthc3NlcnQoYnl0ZUxlbmd0aDw9cmVxTGVuZ3RoLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksYXNzZXJ0KHJlcUxlbmd0aD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIGIsaSxsaXR0bGVFbmRpYW49ImxlIj09PWVuZGlhbixyZXM9bmV3IEFycmF5VHlwZShyZXFMZW5ndGgpLHE9dGhpcy5jbG9uZSgpO2lmKGxpdHRsZUVuZGlhbil7Zm9yKGk9MDshcS5pc1plcm8oKTtpKyspYj1xLmFuZGxuKDI1NSkscS5pdXNocm4oOCkscmVzW2ldPWI7Zm9yKDtpPHJlcUxlbmd0aDtpKyspcmVzW2ldPTB9ZWxzZXtmb3IoaT0wO2k8cmVxTGVuZ3RoLWJ5dGVMZW5ndGg7aSsrKXJlc1tpXT0wO2ZvcihpPTA7IXEuaXNaZXJvKCk7aSsrKWI9cS5hbmRsbigyNTUpLHEuaXVzaHJuKDgpLHJlc1tyZXFMZW5ndGgtaS0xXT1ifXJldHVybiByZXN9LE1hdGguY2x6MzI/Qk4ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24gX2NvdW50Qml0cyh3KXtyZXR1cm4gMzItTWF0aC5jbHozMih3KX06Qk4ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24gX2NvdW50Qml0cyh3KXt2YXIgdD13LHI9MDtyZXR1cm4gdD49NDA5NiYmKHIrPTEzLHQ+Pj49MTMpLHQ+PTY0JiYocis9Nyx0Pj4+PTcpLHQ+PTgmJihyKz00LHQ+Pj49NCksdD49MiYmKHIrPTIsdD4+Pj0yKSxyK3R9LEJOLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24gX3plcm9CaXRzKHcpe2lmKDA9PT13KXJldHVybiAyNjt2YXIgdD13LHI9MDtyZXR1cm4gODE5MSZ0fHwocis9MTMsdD4+Pj0xMyksMTI3JnR8fChyKz03LHQ+Pj49NyksMTUmdHx8KHIrPTQsdD4+Pj00KSwzJnR8fChyKz0yLHQ+Pj49MiksMSZ0fHxyKysscn0sQk4ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbiBiaXRMZW5ndGgoKXt2YXIgdz10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGhpPXRoaXMuX2NvdW50Qml0cyh3KTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2hpfSxCTi5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24gemVyb0JpdHMoKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcj0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKyl7dmFyIGI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tpXSk7aWYocis9YiwyNiE9PWIpYnJlYWt9cmV0dXJuIHJ9LEJOLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uIGJ5dGVMZW5ndGgoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEJOLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24gdG9Ud29zKHdpZHRoKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih3aWR0aCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxCTi5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24gZnJvbVR3b3Mod2lkdGgpe3JldHVybiB0aGlzLnRlc3RuKHdpZHRoLTEpP3RoaXMubm90bih3aWR0aCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sQk4ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uIGlzTmVnKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxCTi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uIG5lZygpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxCTi5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbiBpbmVnKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxCTi5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbiBpdW9yKG51bSl7Zm9yKDt0aGlzLmxlbmd0aDxudW0ubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBpPTA7aTxudW0ubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPXRoaXMud29yZHNbaV18bnVtLndvcmRzW2ldO3JldHVybiB0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24gaW9yKG51bSl7cmV0dXJuIGFzc2VydCgwPT09KHRoaXMubmVnYXRpdmV8bnVtLm5lZ2F0aXZlKSksdGhpcy5pdW9yKG51bSl9LEJOLnByb3RvdHlwZS5vcj1mdW5jdGlvbiBvcihudW0pe3JldHVybiB0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IobnVtKTpudW0uY2xvbmUoKS5pb3IodGhpcyl9LEJOLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24gdW9yKG51bSl7cmV0dXJuIHRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IobnVtKTpudW0uY2xvbmUoKS5pdW9yKHRoaXMpfSxCTi5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24gaXVhbmQobnVtKXt2YXIgYjtiPXRoaXMubGVuZ3RoPm51bS5sZW5ndGg/bnVtOnRoaXM7Zm9yKHZhciBpPTA7aTxiLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT10aGlzLndvcmRzW2ldJm51bS53b3Jkc1tpXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbiBpYW5kKG51bSl7cmV0dXJuIGFzc2VydCgwPT09KHRoaXMubmVnYXRpdmV8bnVtLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChudW0pfSxCTi5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uIGFuZChudW0pe3JldHVybiB0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKG51bSk6bnVtLmNsb25lKCkuaWFuZCh0aGlzKX0sQk4ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24gdWFuZChudW0pe3JldHVybiB0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChudW0pOm51bS5jbG9uZSgpLml1YW5kKHRoaXMpfSxCTi5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24gaXV4b3IobnVtKXt2YXIgYSxiO3RoaXMubGVuZ3RoPm51bS5sZW5ndGg/KGE9dGhpcyxiPW51bSk6KGE9bnVtLGI9dGhpcyk7Zm9yKHZhciBpPTA7aTxiLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT1hLndvcmRzW2ldXmIud29yZHNbaV07aWYodGhpcyE9PWEpZm9yKDtpPGEubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPWEud29yZHNbaV07cmV0dXJuIHRoaXMubGVuZ3RoPWEubGVuZ3RoLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24gaXhvcihudW0pe3JldHVybiBhc3NlcnQoMD09PSh0aGlzLm5lZ2F0aXZlfG51bS5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IobnVtKX0sQk4ucHJvdG90eXBlLnhvcj1mdW5jdGlvbiB4b3IobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihudW0pOm51bS5jbG9uZSgpLml4b3IodGhpcyl9LEJOLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uIHV4b3IobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IobnVtKTpudW0uY2xvbmUoKS5pdXhvcih0aGlzKX0sQk4ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uIGlub3RuKHdpZHRoKXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiB3aWR0aCYmd2lkdGg+PTApO3ZhciBieXRlc05lZWRlZD0wfE1hdGguY2VpbCh3aWR0aC8yNiksYml0c0xlZnQ9d2lkdGglMjY7dGhpcy5fZXhwYW5kKGJ5dGVzTmVlZGVkKSxiaXRzTGVmdD4wJiZieXRlc05lZWRlZC0tO2Zvcih2YXIgaT0wO2k8Ynl0ZXNOZWVkZWQ7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIGJpdHNMZWZ0PjAmJih0aGlzLndvcmRzW2ldPX50aGlzLndvcmRzW2ldJjY3MTA4ODYzPj4yNi1iaXRzTGVmdCksdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUubm90bj1mdW5jdGlvbiBub3RuKHdpZHRoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHdpZHRoKX0sQk4ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24gc2V0bihiaXQsdmFsKXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXQmJmJpdD49MCk7dmFyIG9mZj1iaXQvMjZ8MCx3Yml0PWJpdCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKG9mZisxKSx0aGlzLndvcmRzW29mZl09dmFsP3RoaXMud29yZHNbb2ZmXXwxPDx3Yml0OnRoaXMud29yZHNbb2ZmXSZ+KDE8PHdiaXQpLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24gaWFkZChudW0pe3ZhciByLGEsYjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PW51bS5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHI9dGhpcy5pc3ViKG51bSksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09bnVtLm5lZ2F0aXZlKXJldHVybiBudW0ubmVnYXRpdmU9MCxyPXRoaXMuaXN1YihudW0pLG51bS5uZWdhdGl2ZT0xLHIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+bnVtLmxlbmd0aD8oYT10aGlzLGI9bnVtKTooYT1udW0sYj10aGlzKTtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8Yi5sZW5ndGg7aSsrKXI9KDB8YS53b3Jkc1tpXSkrKDB8Yi53b3Jkc1tpXSkrY2FycnksdGhpcy53b3Jkc1tpXT02NzEwODg2MyZyLGNhcnJ5PXI+Pj4yNjtmb3IoOzAhPT1jYXJyeSYmaTxhLmxlbmd0aDtpKyspcj0oMHxhLndvcmRzW2ldKStjYXJyeSx0aGlzLndvcmRzW2ldPTY3MTA4ODYzJnIsY2Fycnk9cj4+PjI2O2lmKHRoaXMubGVuZ3RoPWEubGVuZ3RoLDAhPT1jYXJyeSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1jYXJyeSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoYSE9PXRoaXMpZm9yKDtpPGEubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPWEud29yZHNbaV07cmV0dXJuIHRoaXN9LEJOLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24gYWRkKG51bSl7dmFyIHJlcztyZXR1cm4gMCE9PW51bS5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KG51bS5uZWdhdGl2ZT0wLHJlcz10aGlzLnN1YihudW0pLG51bS5uZWdhdGl2ZV49MSxyZXMpOjA9PT1udW0ubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAscmVzPW51bS5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHJlcyk6dGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChudW0pOm51bS5jbG9uZSgpLmlhZGQodGhpcyl9LEJOLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uIGlzdWIobnVtKXtpZigwIT09bnVtLm5lZ2F0aXZlKXtudW0ubmVnYXRpdmU9MDt2YXIgcj10aGlzLmlhZGQobnVtKTtyZXR1cm4gbnVtLm5lZ2F0aXZlPTEsci5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChudW0pLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBhLGIsY21wPXRoaXMuY21wKG51bSk7aWYoMD09PWNtcClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7Y21wPjA/KGE9dGhpcyxiPW51bSk6KGE9bnVtLGI9dGhpcyk7Zm9yKHZhciBjYXJyeT0wLGk9MDtpPGIubGVuZ3RoO2krKyljYXJyeT0ocj0oMHxhLndvcmRzW2ldKS0oMHxiLndvcmRzW2ldKStjYXJyeSk+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmcjtmb3IoOzAhPT1jYXJyeSYmaTxhLmxlbmd0aDtpKyspY2Fycnk9KHI9KDB8YS53b3Jkc1tpXSkrY2FycnkpPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJnI7aWYoMD09PWNhcnJ5JiZpPGEubGVuZ3RoJiZhIT09dGhpcylmb3IoO2k8YS5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09YS53b3Jkc1tpXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaSksYSE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbiBzdWIobnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIobnVtKX07dmFyIGNvbWIxME11bFRvPWZ1bmN0aW9uIGNvbWIxME11bFRvKHNlbGYsbnVtLG91dCl7dmFyIGxvLG1pZCxoaSxhPXNlbGYud29yZHMsYj1udW0ud29yZHMsbz1vdXQud29yZHMsYz0wLGEwPTB8YVswXSxhbDA9ODE5MSZhMCxhaDA9YTA+Pj4xMyxhMT0wfGFbMV0sYWwxPTgxOTEmYTEsYWgxPWExPj4+MTMsYTI9MHxhWzJdLGFsMj04MTkxJmEyLGFoMj1hMj4+PjEzLGEzPTB8YVszXSxhbDM9ODE5MSZhMyxhaDM9YTM+Pj4xMyxhND0wfGFbNF0sYWw0PTgxOTEmYTQsYWg0PWE0Pj4+MTMsYTU9MHxhWzVdLGFsNT04MTkxJmE1LGFoNT1hNT4+PjEzLGE2PTB8YVs2XSxhbDY9ODE5MSZhNixhaDY9YTY+Pj4xMyxhNz0wfGFbN10sYWw3PTgxOTEmYTcsYWg3PWE3Pj4+MTMsYTg9MHxhWzhdLGFsOD04MTkxJmE4LGFoOD1hOD4+PjEzLGE5PTB8YVs5XSxhbDk9ODE5MSZhOSxhaDk9YTk+Pj4xMyxiMD0wfGJbMF0sYmwwPTgxOTEmYjAsYmgwPWIwPj4+MTMsYjE9MHxiWzFdLGJsMT04MTkxJmIxLGJoMT1iMT4+PjEzLGIyPTB8YlsyXSxibDI9ODE5MSZiMixiaDI9YjI+Pj4xMyxiMz0wfGJbM10sYmwzPTgxOTEmYjMsYmgzPWIzPj4+MTMsYjQ9MHxiWzRdLGJsND04MTkxJmI0LGJoND1iND4+PjEzLGI1PTB8Yls1XSxibDU9ODE5MSZiNSxiaDU9YjU+Pj4xMyxiNj0wfGJbNl0sYmw2PTgxOTEmYjYsYmg2PWI2Pj4+MTMsYjc9MHxiWzddLGJsNz04MTkxJmI3LGJoNz1iNz4+PjEzLGI4PTB8Yls4XSxibDg9ODE5MSZiOCxiaDg9Yjg+Pj4xMyxiOT0wfGJbOV0sYmw5PTgxOTEmYjksYmg5PWI5Pj4+MTM7b3V0Lm5lZ2F0aXZlPXNlbGYubmVnYXRpdmVebnVtLm5lZ2F0aXZlLG91dC5sZW5ndGg9MTk7dmFyIHcwPShjKyhsbz1NYXRoLmltdWwoYWwwLGJsMCkpfDApKygoODE5MSYobWlkPShtaWQ9TWF0aC5pbXVsKGFsMCxiaDApKStNYXRoLmltdWwoYWgwLGJsMCl8MCkpPDwxMyl8MDtjPSgoaGk9TWF0aC5pbXVsKGFoMCxiaDApKSsobWlkPj4+MTMpfDApKyh3MD4+PjI2KXwwLHcwJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWwxLGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsMSxiaDApKStNYXRoLmltdWwoYWgxLGJsMCl8MCxoaT1NYXRoLmltdWwoYWgxLGJoMCk7dmFyIHcxPShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsMSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDEpfDApK01hdGguaW11bChhaDAsYmwxKXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoMSl8MCkrKG1pZD4+PjEzKXwwKSsodzE+Pj4yNil8MCx3MSY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsMixibDApLG1pZD0obWlkPU1hdGguaW11bChhbDIsYmgwKSkrTWF0aC5pbXVsKGFoMixibDApfDAsaGk9TWF0aC5pbXVsKGFoMixiaDApLGxvPWxvK01hdGguaW11bChhbDEsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoMSl8MCkrTWF0aC5pbXVsKGFoMSxibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDEpfDA7dmFyIHcyPShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsMil8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDIpfDApK01hdGguaW11bChhaDAsYmwyKXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoMil8MCkrKG1pZD4+PjEzKXwwKSsodzI+Pj4yNil8MCx3MiY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsMyxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDMsYmgwKSkrTWF0aC5pbXVsKGFoMyxibDApfDAsaGk9TWF0aC5pbXVsKGFoMyxiaDApLGxvPWxvK01hdGguaW11bChhbDIsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoMSl8MCkrTWF0aC5pbXVsKGFoMixibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsMSxibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmgyKXwwKStNYXRoLmltdWwoYWgxLGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoMil8MDt2YXIgdzM9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmwzKXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoMyl8MCkrTWF0aC5pbXVsKGFoMCxibDMpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmgzKXwwKSsobWlkPj4+MTMpfDApKyh3Mz4+PjI2KXwwLHczJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw0LGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsNCxiaDApKStNYXRoLmltdWwoYWg0LGJsMCl8MCxoaT1NYXRoLmltdWwoYWg0LGJoMCksbG89bG8rTWF0aC5pbXVsKGFsMyxibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmgxKXwwKStNYXRoLmltdWwoYWgzLGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoMSl8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDIpfDApK01hdGguaW11bChhaDIsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDIsYmgyKXwwLGxvPWxvK01hdGguaW11bChhbDEsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoMyl8MCkrTWF0aC5pbXVsKGFoMSxibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDMpfDA7dmFyIHc0PShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsNCl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDQpfDApK01hdGguaW11bChhaDAsYmw0KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoNCl8MCkrKG1pZD4+PjEzKXwwKSsodzQ+Pj4yNil8MCx3NCY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsNSxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDUsYmgwKSkrTWF0aC5pbXVsKGFoNSxibDApfDAsaGk9TWF0aC5pbXVsKGFoNSxiaDApLGxvPWxvK01hdGguaW11bChhbDQsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoMSl8MCkrTWF0aC5pbXVsKGFoNCxibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmgyKXwwKStNYXRoLmltdWwoYWgzLGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDMpfDApK01hdGguaW11bChhaDIsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDIsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDEsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoNCl8MCkrTWF0aC5pbXVsKGFoMSxibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDQpfDA7dmFyIHc1PShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsNSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDUpfDApK01hdGguaW11bChhaDAsYmw1KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoNSl8MCkrKG1pZD4+PjEzKXwwKSsodzU+Pj4yNil8MCx3NSY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsNixibDApLG1pZD0obWlkPU1hdGguaW11bChhbDYsYmgwKSkrTWF0aC5pbXVsKGFoNixibDApfDAsaGk9TWF0aC5pbXVsKGFoNixiaDApLGxvPWxvK01hdGguaW11bChhbDUsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoMSl8MCkrTWF0aC5pbXVsKGFoNSxibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmgyKXwwKStNYXRoLmltdWwoYWg0LGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDMpfDApK01hdGguaW11bChhaDMsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDMsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDIsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoNCl8MCkrTWF0aC5pbXVsKGFoMixibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsMSxibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmg1KXwwKStNYXRoLmltdWwoYWgxLGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoNSl8MDt2YXIgdzY9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmw2KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoNil8MCkrTWF0aC5pbXVsKGFoMCxibDYpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmg2KXwwKSsobWlkPj4+MTMpfDApKyh3Nj4+PjI2KXwwLHc2Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw3LGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsNyxiaDApKStNYXRoLmltdWwoYWg3LGJsMCl8MCxoaT1NYXRoLmltdWwoYWg3LGJoMCksbG89bG8rTWF0aC5pbXVsKGFsNixibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmgxKXwwKStNYXRoLmltdWwoYWg2LGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoMSl8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDIpfDApK01hdGguaW11bChhaDUsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDUsYmgyKXwwLGxvPWxvK01hdGguaW11bChhbDQsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoMyl8MCkrTWF0aC5pbXVsKGFoNCxibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmg0KXwwKStNYXRoLmltdWwoYWgzLGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDUpfDApK01hdGguaW11bChhaDIsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDIsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDEsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoNil8MCkrTWF0aC5pbXVsKGFoMSxibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDYpfDA7dmFyIHc3PShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsNyl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDcpfDApK01hdGguaW11bChhaDAsYmw3KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoNyl8MCkrKG1pZD4+PjEzKXwwKSsodzc+Pj4yNil8MCx3NyY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOCxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDgsYmgwKSkrTWF0aC5pbXVsKGFoOCxibDApfDAsaGk9TWF0aC5pbXVsKGFoOCxiaDApLGxvPWxvK01hdGguaW11bChhbDcsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoMSl8MCkrTWF0aC5pbXVsKGFoNyxibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmgyKXwwKStNYXRoLmltdWwoYWg2LGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDMpfDApK01hdGguaW11bChhaDUsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDUsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDQsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoNCl8MCkrTWF0aC5pbXVsKGFoNCxibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmg1KXwwKStNYXRoLmltdWwoYWgzLGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDYpfDApK01hdGguaW11bChhaDIsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDIsYmg2KXwwLGxvPWxvK01hdGguaW11bChhbDEsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoNyl8MCkrTWF0aC5pbXVsKGFoMSxibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDcpfDA7dmFyIHc4PShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsOCl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDgpfDApK01hdGguaW11bChhaDAsYmw4KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoOCl8MCkrKG1pZD4+PjEzKXwwKSsodzg+Pj4yNil8MCx3OCY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDksYmgwKSkrTWF0aC5pbXVsKGFoOSxibDApfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDApLGxvPWxvK01hdGguaW11bChhbDgsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoMSl8MCkrTWF0aC5pbXVsKGFoOCxibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmgyKXwwKStNYXRoLmltdWwoYWg3LGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDMpfDApK01hdGguaW11bChhaDYsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDYsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDUsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoNCl8MCkrTWF0aC5pbXVsKGFoNSxibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg1KXwwKStNYXRoLmltdWwoYWg0LGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDYpfDApK01hdGguaW11bChhaDMsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDMsYmg2KXwwLGxvPWxvK01hdGguaW11bChhbDIsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoNyl8MCkrTWF0aC5pbXVsKGFoMixibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDcpfDAsbG89bG8rTWF0aC5pbXVsKGFsMSxibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmg4KXwwKStNYXRoLmltdWwoYWgxLGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoOCl8MDt2YXIgdzk9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoOSl8MCkrTWF0aC5pbXVsKGFoMCxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3OT4+PjI2KXwwLHc5Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsMSksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDEpKStNYXRoLmltdWwoYWg5LGJsMSl8MCxoaT1NYXRoLmltdWwoYWg5LGJoMSksbG89bG8rTWF0aC5pbXVsKGFsOCxibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmgyKXwwKStNYXRoLmltdWwoYWg4LGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWw3LGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDMpfDApK01hdGguaW11bChhaDcsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDcsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDYsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoNCl8MCkrTWF0aC5pbXVsKGFoNixibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmg1KXwwKStNYXRoLmltdWwoYWg1LGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDYpfDApK01hdGguaW11bChhaDQsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDQsYmg2KXwwLGxvPWxvK01hdGguaW11bChhbDMsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoNyl8MCkrTWF0aC5pbXVsKGFoMyxibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDcpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmg4KXwwKStNYXRoLmltdWwoYWgyLGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoOCl8MDt2YXIgdzEwPShjKyhsbz1sbytNYXRoLmltdWwoYWwxLGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDkpfDApK01hdGguaW11bChhaDEsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgxLGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzEwPj4+MjYpfDAsdzEwJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsMiksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDIpKStNYXRoLmltdWwoYWg5LGJsMil8MCxoaT1NYXRoLmltdWwoYWg5LGJoMiksbG89bG8rTWF0aC5pbXVsKGFsOCxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmgzKXwwKStNYXRoLmltdWwoYWg4LGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWw3LGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDQpfDApK01hdGguaW11bChhaDcsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDcsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDYsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoNSl8MCkrTWF0aC5pbXVsKGFoNixibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmg2KXwwKStNYXRoLmltdWwoYWg1LGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDcpfDApK01hdGguaW11bChhaDQsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDQsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDMsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoOCl8MCkrTWF0aC5pbXVsKGFoMyxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDgpfDA7dmFyIHcxMT0oYysobG89bG8rTWF0aC5pbXVsKGFsMixibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmg5KXwwKStNYXRoLmltdWwoYWgyLGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMixiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxMT4+PjI2KXwwLHcxMSY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDMpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmgzKSkrTWF0aC5pbXVsKGFoOSxibDMpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDMpLGxvPWxvK01hdGguaW11bChhbDgsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoNCl8MCkrTWF0aC5pbXVsKGFoOCxibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg1KXwwKStNYXRoLmltdWwoYWg3LGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDYpfDApK01hdGguaW11bChhaDYsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDYsYmg2KXwwLGxvPWxvK01hdGguaW11bChhbDUsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoNyl8MCkrTWF0aC5pbXVsKGFoNSxibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDcpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg4KXwwKStNYXRoLmltdWwoYWg0LGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoOCl8MDt2YXIgdzEyPShjKyhsbz1sbytNYXRoLmltdWwoYWwzLGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDkpfDApK01hdGguaW11bChhaDMsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgzLGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzEyPj4+MjYpfDAsdzEyJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsNCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDQpKStNYXRoLmltdWwoYWg5LGJsNCl8MCxoaT1NYXRoLmltdWwoYWg5LGJoNCksbG89bG8rTWF0aC5pbXVsKGFsOCxibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmg1KXwwKStNYXRoLmltdWwoYWg4LGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWw3LGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDYpfDApK01hdGguaW11bChhaDcsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDcsYmg2KXwwLGxvPWxvK01hdGguaW11bChhbDYsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoNyl8MCkrTWF0aC5pbXVsKGFoNixibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDcpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmg4KXwwKStNYXRoLmltdWwoYWg1LGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoOCl8MDt2YXIgdzEzPShjKyhsbz1sbytNYXRoLmltdWwoYWw0LGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDkpfDApK01hdGguaW11bChhaDQsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWg0LGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzEzPj4+MjYpfDAsdzEzJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsNSksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDUpKStNYXRoLmltdWwoYWg5LGJsNSl8MCxoaT1NYXRoLmltdWwoYWg5LGJoNSksbG89bG8rTWF0aC5pbXVsKGFsOCxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmg2KXwwKStNYXRoLmltdWwoYWg4LGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWw3LGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDcpfDApK01hdGguaW11bChhaDcsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDcsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDYsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoOCl8MCkrTWF0aC5pbXVsKGFoNixibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDgpfDA7dmFyIHcxND0oYysobG89bG8rTWF0aC5pbXVsKGFsNSxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmg5KXwwKStNYXRoLmltdWwoYWg1LGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxND4+PjI2KXwwLHcxNCY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDYpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmg2KSkrTWF0aC5pbXVsKGFoOSxibDYpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDYpLGxvPWxvK01hdGguaW11bChhbDgsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoNyl8MCkrTWF0aC5pbXVsKGFoOCxibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDcpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg4KXwwKStNYXRoLmltdWwoYWg3LGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoOCl8MDt2YXIgdzE1PShjKyhsbz1sbytNYXRoLmltdWwoYWw2LGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDkpfDApK01hdGguaW11bChhaDYsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWg2LGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzE1Pj4+MjYpfDAsdzE1Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsNyksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDcpKStNYXRoLmltdWwoYWg5LGJsNyl8MCxoaT1NYXRoLmltdWwoYWg5LGJoNyksbG89bG8rTWF0aC5pbXVsKGFsOCxibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmg4KXwwKStNYXRoLmltdWwoYWg4LGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoOCl8MDt2YXIgdzE2PShjKyhsbz1sbytNYXRoLmltdWwoYWw3LGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDkpfDApK01hdGguaW11bChhaDcsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWg3LGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzE2Pj4+MjYpfDAsdzE2Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsOCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDgpKStNYXRoLmltdWwoYWg5LGJsOCl8MCxoaT1NYXRoLmltdWwoYWg5LGJoOCk7dmFyIHcxNz0oYysobG89bG8rTWF0aC5pbXVsKGFsOCxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmg5KXwwKStNYXRoLmltdWwoYWg4LGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxNz4+PjI2KXwwLHcxNyY9NjcxMDg4NjM7dmFyIHcxOD0oYysobG89TWF0aC5pbXVsKGFsOSxibDkpKXwwKSsoKDgxOTEmKG1pZD0obWlkPU1hdGguaW11bChhbDksYmg5KSkrTWF0aC5pbXVsKGFoOSxibDkpfDApKTw8MTMpfDA7cmV0dXJuIGM9KChoaT1NYXRoLmltdWwoYWg5LGJoOSkpKyhtaWQ+Pj4xMyl8MCkrKHcxOD4+PjI2KXwwLHcxOCY9NjcxMDg4NjMsb1swXT13MCxvWzFdPXcxLG9bMl09dzIsb1szXT13MyxvWzRdPXc0LG9bNV09dzUsb1s2XT13NixvWzddPXc3LG9bOF09dzgsb1s5XT13OSxvWzEwXT13MTAsb1sxMV09dzExLG9bMTJdPXcxMixvWzEzXT13MTMsb1sxNF09dzE0LG9bMTVdPXcxNSxvWzE2XT13MTYsb1sxN109dzE3LG9bMThdPXcxOCwwIT09YyYmKG9bMTldPWMsb3V0Lmxlbmd0aCsrKSxvdXR9O2Z1bmN0aW9uIGp1bWJvTXVsVG8oc2VsZixudW0sb3V0KXtyZXR1cm4obmV3IEZGVE0pLm11bHAoc2VsZixudW0sb3V0KX1mdW5jdGlvbiBGRlRNKHgseSl7dGhpcy54PXgsdGhpcy55PXl9TWF0aC5pbXVsfHwoY29tYjEwTXVsVG89c21hbGxNdWxUbyksQk4ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uIG11bFRvKG51bSxvdXQpe3ZhciByZXMsbGVuPXRoaXMubGVuZ3RoK251bS5sZW5ndGg7cmV0dXJuIHJlcz0xMD09PXRoaXMubGVuZ3RoJiYxMD09PW51bS5sZW5ndGg/Y29tYjEwTXVsVG8odGhpcyxudW0sb3V0KTpsZW48NjM/c21hbGxNdWxUbyh0aGlzLG51bSxvdXQpOmxlbjwxMDI0P2Z1bmN0aW9uIGJpZ011bFRvKHNlbGYsbnVtLG91dCl7b3V0Lm5lZ2F0aXZlPW51bS5uZWdhdGl2ZV5zZWxmLm5lZ2F0aXZlLG91dC5sZW5ndGg9c2VsZi5sZW5ndGgrbnVtLmxlbmd0aDtmb3IodmFyIGNhcnJ5PTAsaG5jYXJyeT0wLGs9MDtrPG91dC5sZW5ndGgtMTtrKyspe3ZhciBuY2Fycnk9aG5jYXJyeTtobmNhcnJ5PTA7Zm9yKHZhciByd29yZD02NzEwODg2MyZjYXJyeSxtYXhKPU1hdGgubWluKGssbnVtLmxlbmd0aC0xKSxqPU1hdGgubWF4KDAsay1zZWxmLmxlbmd0aCsxKTtqPD1tYXhKO2orKyl7dmFyIGk9ay1qLHI9KDB8c2VsZi53b3Jkc1tpXSkqKDB8bnVtLndvcmRzW2pdKSxsbz02NzEwODg2MyZyO3J3b3JkPTY3MTA4ODYzJihsbz1sbytyd29yZHwwKSxobmNhcnJ5Kz0obmNhcnJ5PShuY2Fycnk9bmNhcnJ5KyhyLzY3MTA4ODY0fDApfDApKyhsbz4+PjI2KXwwKT4+PjI2LG5jYXJyeSY9NjcxMDg4NjN9b3V0LndvcmRzW2tdPXJ3b3JkLGNhcnJ5PW5jYXJyeSxuY2Fycnk9aG5jYXJyeX1yZXR1cm4gMCE9PWNhcnJ5P291dC53b3Jkc1trXT1jYXJyeTpvdXQubGVuZ3RoLS0sb3V0LnN0cmlwKCl9KHRoaXMsbnVtLG91dCk6anVtYm9NdWxUbyh0aGlzLG51bSxvdXQpLHJlc30sRkZUTS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbiBtYWtlUkJUKE4pe2Zvcih2YXIgdD1uZXcgQXJyYXkoTiksbD1CTi5wcm90b3R5cGUuX2NvdW50Qml0cyhOKS0xLGk9MDtpPE47aSsrKXRbaV09dGhpcy5yZXZCaW4oaSxsLE4pO3JldHVybiB0fSxGRlRNLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24gcmV2QmluKHgsbCxOKXtpZigwPT09eHx8eD09PU4tMSlyZXR1cm4geDtmb3IodmFyIHJiPTAsaT0wO2k8bDtpKyspcmJ8PSgxJngpPDxsLWktMSx4Pj49MTtyZXR1cm4gcmJ9LEZGVE0ucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24gcGVybXV0ZShyYnQscndzLGl3cyxydHdzLGl0d3MsTil7Zm9yKHZhciBpPTA7aTxOO2krKylydHdzW2ldPXJ3c1tyYnRbaV1dLGl0d3NbaV09aXdzW3JidFtpXV19LEZGVE0ucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbiB0cmFuc2Zvcm0ocndzLGl3cyxydHdzLGl0d3MsTixyYnQpe3RoaXMucGVybXV0ZShyYnQscndzLGl3cyxydHdzLGl0d3MsTik7Zm9yKHZhciBzPTE7czxOO3M8PD0xKWZvcih2YXIgbD1zPDwxLHJ0d2RmPU1hdGguY29zKDIqTWF0aC5QSS9sKSxpdHdkZj1NYXRoLnNpbigyKk1hdGguUEkvbCkscD0wO3A8TjtwKz1sKWZvcih2YXIgcnR3ZGZfPXJ0d2RmLGl0d2RmXz1pdHdkZixqPTA7ajxzO2orKyl7dmFyIHJlPXJ0d3NbcCtqXSxpZT1pdHdzW3Aral0scm89cnR3c1twK2orc10saW89aXR3c1twK2orc10scng9cnR3ZGZfKnJvLWl0d2RmXyppbztpbz1ydHdkZl8qaW8raXR3ZGZfKnJvLHJvPXJ4LHJ0d3NbcCtqXT1yZStybyxpdHdzW3Aral09aWUraW8scnR3c1twK2orc109cmUtcm8saXR3c1twK2orc109aWUtaW8saiE9PWwmJihyeD1ydHdkZipydHdkZl8taXR3ZGYqaXR3ZGZfLGl0d2RmXz1ydHdkZippdHdkZl8raXR3ZGYqcnR3ZGZfLHJ0d2RmXz1yeCl9fSxGRlRNLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbiBndWVzc0xlbjEzYihuLG0pe3ZhciBOPTF8TWF0aC5tYXgobSxuKSxvZGQ9MSZOLGk9MDtmb3IoTj1OLzJ8MDtOO04+Pj49MSlpKys7cmV0dXJuIDE8PGkrMStvZGR9LEZGVE0ucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbiBjb25qdWdhdGUocndzLGl3cyxOKXtpZighKE48PTEpKWZvcih2YXIgaT0wO2k8Ti8yO2krKyl7dmFyIHQ9cndzW2ldO3J3c1tpXT1yd3NbTi1pLTFdLHJ3c1tOLWktMV09dCx0PWl3c1tpXSxpd3NbaV09LWl3c1tOLWktMV0saXdzW04taS0xXT0tdH19LEZGVE0ucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbiBub3JtYWxpemUxM2Iod3MsTil7Zm9yKHZhciBjYXJyeT0wLGk9MDtpPE4vMjtpKyspe3ZhciB3PTgxOTIqTWF0aC5yb3VuZCh3c1syKmkrMV0vTikrTWF0aC5yb3VuZCh3c1syKmldL04pK2NhcnJ5O3dzW2ldPTY3MTA4ODYzJncsY2Fycnk9dzw2NzEwODg2ND8wOncvNjcxMDg4NjR8MH1yZXR1cm4gd3N9LEZGVE0ucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24gY29udmVydDEzYih3cyxsZW4scndzLE4pe2Zvcih2YXIgY2Fycnk9MCxpPTA7aTxsZW47aSsrKWNhcnJ5Kz0wfHdzW2ldLHJ3c1syKmldPTgxOTEmY2FycnksY2Fycnk+Pj49MTMscndzWzIqaSsxXT04MTkxJmNhcnJ5LGNhcnJ5Pj4+PTEzO2ZvcihpPTIqbGVuO2k8TjsrK2kpcndzW2ldPTA7YXNzZXJ0KDA9PT1jYXJyeSksYXNzZXJ0KCEoLTgxOTImY2FycnkpKX0sRkZUTS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbiBzdHViKE4pe2Zvcih2YXIgcGg9bmV3IEFycmF5KE4pLGk9MDtpPE47aSsrKXBoW2ldPTA7cmV0dXJuIHBofSxGRlRNLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uIG11bHAoeCx5LG91dCl7dmFyIE49Mip0aGlzLmd1ZXNzTGVuMTNiKHgubGVuZ3RoLHkubGVuZ3RoKSxyYnQ9dGhpcy5tYWtlUkJUKE4pLF89dGhpcy5zdHViKE4pLHJ3cz1uZXcgQXJyYXkoTikscndzdD1uZXcgQXJyYXkoTiksaXdzdD1uZXcgQXJyYXkoTiksbnJ3cz1uZXcgQXJyYXkoTiksbnJ3c3Q9bmV3IEFycmF5KE4pLG5pd3N0PW5ldyBBcnJheShOKSxybXdzPW91dC53b3JkcztybXdzLmxlbmd0aD1OLHRoaXMuY29udmVydDEzYih4LndvcmRzLHgubGVuZ3RoLHJ3cyxOKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxucndzLE4pLHRoaXMudHJhbnNmb3JtKHJ3cyxfLHJ3c3QsaXdzdCxOLHJidCksdGhpcy50cmFuc2Zvcm0obnJ3cyxfLG5yd3N0LG5pd3N0LE4scmJ0KTtmb3IodmFyIGk9MDtpPE47aSsrKXt2YXIgcng9cndzdFtpXSpucndzdFtpXS1pd3N0W2ldKm5pd3N0W2ldO2l3c3RbaV09cndzdFtpXSpuaXdzdFtpXStpd3N0W2ldKm5yd3N0W2ldLHJ3c3RbaV09cnh9cmV0dXJuIHRoaXMuY29uanVnYXRlKHJ3c3QsaXdzdCxOKSx0aGlzLnRyYW5zZm9ybShyd3N0LGl3c3Qscm13cyxfLE4scmJ0KSx0aGlzLmNvbmp1Z2F0ZShybXdzLF8sTiksdGhpcy5ub3JtYWxpemUxM2Iocm13cyxOKSxvdXQubmVnYXRpdmU9eC5uZWdhdGl2ZV55Lm5lZ2F0aXZlLG91dC5sZW5ndGg9eC5sZW5ndGgreS5sZW5ndGgsb3V0LnN0cmlwKCl9LEJOLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24gbXVsKG51bSl7dmFyIG91dD1uZXcgQk4obnVsbCk7cmV0dXJuIG91dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrbnVtLmxlbmd0aCksdGhpcy5tdWxUbyhudW0sb3V0KX0sQk4ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24gbXVsZihudW0pe3ZhciBvdXQ9bmV3IEJOKG51bGwpO3JldHVybiBvdXQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK251bS5sZW5ndGgpLGp1bWJvTXVsVG8odGhpcyxudW0sb3V0KX0sQk4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24gaW11bChudW0pe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8obnVtLHRoaXMpfSxCTi5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24gaW11bG4obnVtKXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBudW0pLGFzc2VydChudW08NjcxMDg4NjQpO2Zvcih2YXIgY2Fycnk9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciB3PSgwfHRoaXMud29yZHNbaV0pKm51bSxsbz0oNjcxMDg4NjMmdykrKDY3MTA4ODYzJmNhcnJ5KTtjYXJyeT4+PTI2LGNhcnJ5Kz13LzY3MTA4ODY0fDAsY2FycnkrPWxvPj4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZsb31yZXR1cm4gMCE9PWNhcnJ5JiYodGhpcy53b3Jkc1tpXT1jYXJyeSx0aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09bnVtPzE6dGhpcy5sZW5ndGgsdGhpc30sQk4ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24gbXVsbihudW0pe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4obnVtKX0sQk4ucHJvdG90eXBlLnNxcj1mdW5jdGlvbiBzcXIoKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LEJOLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uIGlzcXIoKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEJOLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24gcG93KG51bSl7dmFyIHc9ZnVuY3Rpb24gdG9CaXRBcnJheShudW0pe2Zvcih2YXIgdz1uZXcgQXJyYXkobnVtLmJpdExlbmd0aCgpKSxiaXQ9MDtiaXQ8dy5sZW5ndGg7Yml0Kyspe3ZhciBvZmY9Yml0LzI2fDAsd2JpdD1iaXQlMjY7d1tiaXRdPShudW0ud29yZHNbb2ZmXSYxPDx3Yml0KT4+PndiaXR9cmV0dXJuIHd9KG51bSk7aWYoMD09PXcubGVuZ3RoKXJldHVybiBuZXcgQk4oMSk7Zm9yKHZhciByZXM9dGhpcyxpPTA7aTx3Lmxlbmd0aCYmMD09PXdbaV07aSsrLHJlcz1yZXMuc3FyKCkpO2lmKCsraTx3Lmxlbmd0aClmb3IodmFyIHE9cmVzLnNxcigpO2k8dy5sZW5ndGg7aSsrLHE9cS5zcXIoKSkwIT09d1tpXSYmKHJlcz1yZXMubXVsKHEpKTtyZXR1cm4gcmVzfSxCTi5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uIGl1c2hsbihiaXRzKXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXRzJiZiaXRzPj0wKTt2YXIgaSxyPWJpdHMlMjYscz0oYml0cy1yKS8yNixjYXJyeU1hc2s9NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgY2Fycnk9MDtmb3IoaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgbmV3Q2Fycnk9dGhpcy53b3Jkc1tpXSZjYXJyeU1hc2ssYz0oMHx0aGlzLndvcmRzW2ldKS1uZXdDYXJyeTw8cjt0aGlzLndvcmRzW2ldPWN8Y2FycnksY2Fycnk9bmV3Q2Fycnk+Pj4yNi1yfWNhcnJ5JiYodGhpcy53b3Jkc1tpXT1jYXJyeSx0aGlzLmxlbmd0aCsrKX1pZigwIT09cyl7Zm9yKGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSl0aGlzLndvcmRzW2krc109dGhpcy53b3Jkc1tpXTtmb3IoaT0wO2k8cztpKyspdGhpcy53b3Jkc1tpXT0wO3RoaXMubGVuZ3RoKz1zfXJldHVybiB0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbiBpc2hsbihiaXRzKXtyZXR1cm4gYXNzZXJ0KDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihiaXRzKX0sQk4ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbiBpdXNocm4oYml0cyxoaW50LGV4dGVuZGVkKXt2YXIgaDthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXRzJiZiaXRzPj0wKSxoPWhpbnQ/KGhpbnQtaGludCUyNikvMjY6MDt2YXIgcj1iaXRzJTI2LHM9TWF0aC5taW4oKGJpdHMtcikvMjYsdGhpcy5sZW5ndGgpLG1hc2s9NjcxMDg4NjNeNjcxMDg4NjM+Pj5yPDxyLG1hc2tlZFdvcmRzPWV4dGVuZGVkO2lmKGgtPXMsaD1NYXRoLm1heCgwLGgpLG1hc2tlZFdvcmRzKXtmb3IodmFyIGk9MDtpPHM7aSsrKW1hc2tlZFdvcmRzLndvcmRzW2ldPXRoaXMud29yZHNbaV07bWFza2VkV29yZHMubGVuZ3RoPXN9aWYoMD09PXMpO2Vsc2UgaWYodGhpcy5sZW5ndGg+cylmb3IodGhpcy5sZW5ndGgtPXMsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09dGhpcy53b3Jkc1tpK3NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGNhcnJ5PTA7Zm9yKGk9dGhpcy5sZW5ndGgtMTtpPj0wJiYoMCE9PWNhcnJ5fHxpPj1oKTtpLS0pe3ZhciB3b3JkPTB8dGhpcy53b3Jkc1tpXTt0aGlzLndvcmRzW2ldPWNhcnJ5PDwyNi1yfHdvcmQ+Pj5yLGNhcnJ5PXdvcmQmbWFza31yZXR1cm4gbWFza2VkV29yZHMmJjAhPT1jYXJyeSYmKG1hc2tlZFdvcmRzLndvcmRzW21hc2tlZFdvcmRzLmxlbmd0aCsrXT1jYXJyeSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uIGlzaHJuKGJpdHMsaGludCxleHRlbmRlZCl7cmV0dXJuIGFzc2VydCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oYml0cyxoaW50LGV4dGVuZGVkKX0sQk4ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24gc2hsbihiaXRzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGJpdHMpfSxCTi5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24gdXNobG4oYml0cyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYml0cyl9LEJOLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uIHNocm4oYml0cyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiaXRzKX0sQk4ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uIHVzaHJuKGJpdHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGJpdHMpfSxCTi5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24gdGVzdG4oYml0KXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXQmJmJpdD49MCk7dmFyIHI9Yml0JTI2LHM9KGJpdC1yKS8yNixxPTE8PHI7cmV0dXJuISh0aGlzLmxlbmd0aDw9cykmJiEhKHRoaXMud29yZHNbc10mcSl9LEJOLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24gaW1hc2tuKGJpdHMpe2Fzc2VydCgibnVtYmVyIj09dHlwZW9mIGJpdHMmJmJpdHM+PTApO3ZhciByPWJpdHMlMjYscz0oYml0cy1yKS8yNjtpZihhc3NlcnQoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1zKXJldHVybiB0aGlzO2lmKDAhPT1yJiZzKyssdGhpcy5sZW5ndGg9TWF0aC5taW4ocyx0aGlzLmxlbmd0aCksMCE9PXIpe3ZhciBtYXNrPTY3MTA4ODYzXjY3MTA4ODYzPj4+cjw8cjt0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj1tYXNrfXJldHVybiAwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUubWFza249ZnVuY3Rpb24gbWFza24oYml0cyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYml0cyl9LEJOLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbiBpYWRkbihudW0pe3JldHVybiBhc3NlcnQoIm51bWJlciI9PXR5cGVvZiBudW0pLGFzc2VydChudW08NjcxMDg4NjQpLG51bTwwP3RoaXMuaXN1Ym4oLW51bSk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxudW0/KHRoaXMud29yZHNbMF09bnVtLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4obnVtKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4obnVtKX0sQk4ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbiBfaWFkZG4obnVtKXt0aGlzLndvcmRzWzBdKz1udW07Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tpXT49NjcxMDg4NjQ7aSsrKXRoaXMud29yZHNbaV0tPTY3MTA4ODY0LGk9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbaSsxXT0xOnRoaXMud29yZHNbaSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxpKzEpLHRoaXN9LEJOLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbiBpc3VibihudW0pe2lmKGFzc2VydCgibnVtYmVyIj09dHlwZW9mIG51bSksYXNzZXJ0KG51bTw2NzEwODg2NCksbnVtPDApcmV0dXJuIHRoaXMuaWFkZG4oLW51bSk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKG51bSksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09bnVtLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tpXTwwO2krKyl0aGlzLndvcmRzW2ldKz02NzEwODg2NCx0aGlzLndvcmRzW2krMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24gYWRkbihudW0pe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4obnVtKX0sQk4ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24gc3VibihudW0pe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4obnVtKX0sQk4ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24gaWFicygpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sQk4ucHJvdG90eXBlLmFicz1mdW5jdGlvbiBhYnMoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sQk4ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbiBfaXNobG5zdWJtdWwobnVtLG11bCxzaGlmdCl7dmFyIGksdyxsZW49bnVtLmxlbmd0aCtzaGlmdDt0aGlzLl9leHBhbmQobGVuKTt2YXIgY2Fycnk9MDtmb3IoaT0wO2k8bnVtLmxlbmd0aDtpKyspe3c9KDB8dGhpcy53b3Jkc1tpK3NoaWZ0XSkrY2Fycnk7dmFyIHJpZ2h0PSgwfG51bS53b3Jkc1tpXSkqbXVsO2NhcnJ5PSgody09NjcxMDg4NjMmcmlnaHQpPj4yNiktKHJpZ2h0LzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStzaGlmdF09NjcxMDg4NjMmd31mb3IoO2k8dGhpcy5sZW5ndGgtc2hpZnQ7aSsrKWNhcnJ5PSh3PSgwfHRoaXMud29yZHNbaStzaGlmdF0pK2NhcnJ5KT4+MjYsdGhpcy53b3Jkc1tpK3NoaWZ0XT02NzEwODg2MyZ3O2lmKDA9PT1jYXJyeSlyZXR1cm4gdGhpcy5zdHJpcCgpO2Zvcihhc3NlcnQoLTE9PT1jYXJyeSksY2Fycnk9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspY2Fycnk9KHc9LSgwfHRoaXMud29yZHNbaV0pK2NhcnJ5KT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ3O3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24gX3dvcmREaXYobnVtLG1vZGUpe3ZhciBzaGlmdD0odGhpcy5sZW5ndGgsbnVtLmxlbmd0aCksYT10aGlzLmNsb25lKCksYj1udW0sYmhpPTB8Yi53b3Jkc1tiLmxlbmd0aC0xXTswIT09KHNoaWZ0PTI2LXRoaXMuX2NvdW50Qml0cyhiaGkpKSYmKGI9Yi51c2hsbihzaGlmdCksYS5pdXNobG4oc2hpZnQpLGJoaT0wfGIud29yZHNbYi5sZW5ndGgtMV0pO3ZhciBxLG09YS5sZW5ndGgtYi5sZW5ndGg7aWYoIm1vZCIhPT1tb2RlKXsocT1uZXcgQk4obnVsbCkpLmxlbmd0aD1tKzEscS53b3Jkcz1uZXcgQXJyYXkocS5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8cS5sZW5ndGg7aSsrKXEud29yZHNbaV09MH12YXIgZGlmZj1hLmNsb25lKCkuX2lzaGxuc3VibXVsKGIsMSxtKTswPT09ZGlmZi5uZWdhdGl2ZSYmKGE9ZGlmZixxJiYocS53b3Jkc1ttXT0xKSk7Zm9yKHZhciBqPW0tMTtqPj0wO2otLSl7dmFyIHFqPTY3MTA4ODY0KigwfGEud29yZHNbYi5sZW5ndGgral0pKygwfGEud29yZHNbYi5sZW5ndGgrai0xXSk7Zm9yKHFqPU1hdGgubWluKHFqL2JoaXwwLDY3MTA4ODYzKSxhLl9pc2hsbnN1Ym11bChiLHFqLGopOzAhPT1hLm5lZ2F0aXZlOylxai0tLGEubmVnYXRpdmU9MCxhLl9pc2hsbnN1Ym11bChiLDEsaiksYS5pc1plcm8oKXx8KGEubmVnYXRpdmVePTEpO3EmJihxLndvcmRzW2pdPXFqKX1yZXR1cm4gcSYmcS5zdHJpcCgpLGEuc3RyaXAoKSwiZGl2IiE9PW1vZGUmJjAhPT1zaGlmdCYmYS5pdXNocm4oc2hpZnQpLHtkaXY6cXx8bnVsbCxtb2Q6YX19LEJOLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24gZGl2bW9kKG51bSxtb2RlLHBvc2l0aXZlKXtyZXR1cm4gYXNzZXJ0KCFudW0uaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgQk4oMCksbW9kOm5ldyBCTigwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1udW0ubmVnYXRpdmU/KHJlcz10aGlzLm5lZygpLmRpdm1vZChudW0sbW9kZSksIm1vZCIhPT1tb2RlJiYoZGl2PXJlcy5kaXYubmVnKCkpLCJkaXYiIT09bW9kZSYmKG1vZD1yZXMubW9kLm5lZygpLHBvc2l0aXZlJiYwIT09bW9kLm5lZ2F0aXZlJiZtb2QuaWFkZChudW0pKSx7ZGl2LG1vZH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09bnVtLm5lZ2F0aXZlPyhyZXM9dGhpcy5kaXZtb2QobnVtLm5lZygpLG1vZGUpLCJtb2QiIT09bW9kZSYmKGRpdj1yZXMuZGl2Lm5lZygpKSx7ZGl2LG1vZDpyZXMubW9kfSk6MCE9PSh0aGlzLm5lZ2F0aXZlJm51bS5uZWdhdGl2ZSk/KHJlcz10aGlzLm5lZygpLmRpdm1vZChudW0ubmVnKCksbW9kZSksImRpdiIhPT1tb2RlJiYobW9kPXJlcy5tb2QubmVnKCkscG9zaXRpdmUmJjAhPT1tb2QubmVnYXRpdmUmJm1vZC5pc3ViKG51bSkpLHtkaXY6cmVzLmRpdixtb2R9KTpudW0ubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChudW0pPDA/e2RpdjpuZXcgQk4oMCksbW9kOnRoaXN9OjE9PT1udW0ubGVuZ3RoPyJkaXYiPT09bW9kZT97ZGl2OnRoaXMuZGl2bihudW0ud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PW1vZGU/e2RpdjpudWxsLG1vZDpuZXcgQk4odGhpcy5tb2RuKG51bS53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihudW0ud29yZHNbMF0pLG1vZDpuZXcgQk4odGhpcy5tb2RuKG51bS53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KG51bSxtb2RlKTt2YXIgZGl2LG1vZCxyZXN9LEJOLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24gZGl2KG51bSl7cmV0dXJuIHRoaXMuZGl2bW9kKG51bSwiZGl2IiwhMSkuZGl2fSxCTi5wcm90b3R5cGUubW9kPWZ1bmN0aW9uIG1vZChudW0pe3JldHVybiB0aGlzLmRpdm1vZChudW0sIm1vZCIsITEpLm1vZH0sQk4ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24gdW1vZChudW0pe3JldHVybiB0aGlzLmRpdm1vZChudW0sIm1vZCIsITApLm1vZH0sQk4ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uIGRpdlJvdW5kKG51bSl7dmFyIGRtPXRoaXMuZGl2bW9kKG51bSk7aWYoZG0ubW9kLmlzWmVybygpKXJldHVybiBkbS5kaXY7dmFyIG1vZD0wIT09ZG0uZGl2Lm5lZ2F0aXZlP2RtLm1vZC5pc3ViKG51bSk6ZG0ubW9kLGhhbGY9bnVtLnVzaHJuKDEpLHIyPW51bS5hbmRsbigxKSxjbXA9bW9kLmNtcChoYWxmKTtyZXR1cm4gY21wPDB8fDE9PT1yMiYmMD09PWNtcD9kbS5kaXY6MCE9PWRtLmRpdi5uZWdhdGl2ZT9kbS5kaXYuaXN1Ym4oMSk6ZG0uZGl2LmlhZGRuKDEpfSxCTi5wcm90b3R5cGUubW9kbj1mdW5jdGlvbiBtb2RuKG51bSl7YXNzZXJ0KG51bTw9NjcxMDg4NjMpO2Zvcih2YXIgcD0oMTw8MjYpJW51bSxhY2M9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pYWNjPShwKmFjYysoMHx0aGlzLndvcmRzW2ldKSklbnVtO3JldHVybiBhY2N9LEJOLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbiBpZGl2bihudW0pe2Fzc2VydChudW08PTY3MTA4ODYzKTtmb3IodmFyIGNhcnJ5PTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgdz0oMHx0aGlzLndvcmRzW2ldKSs2NzEwODg2NCpjYXJyeTt0aGlzLndvcmRzW2ldPXcvbnVtfDAsY2Fycnk9dyVudW19cmV0dXJuIHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24gZGl2bihudW0pe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4obnVtKX0sQk4ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24gZWdjZChwKXthc3NlcnQoMD09PXAubmVnYXRpdmUpLGFzc2VydCghcC5pc1plcm8oKSk7dmFyIHg9dGhpcyx5PXAuY2xvbmUoKTt4PTAhPT14Lm5lZ2F0aXZlP3gudW1vZChwKTp4LmNsb25lKCk7Zm9yKHZhciBBPW5ldyBCTigxKSxCPW5ldyBCTigwKSxDPW5ldyBCTigwKSxEPW5ldyBCTigxKSxnPTA7eC5pc0V2ZW4oKSYmeS5pc0V2ZW4oKTspeC5pdXNocm4oMSkseS5pdXNocm4oMSksKytnO2Zvcih2YXIgeXA9eS5jbG9uZSgpLHhwPXguY2xvbmUoKTsheC5pc1plcm8oKTspe2Zvcih2YXIgaT0wLGltPTE7MD09PSh4LndvcmRzWzBdJmltKSYmaTwyNjsrK2ksaW08PD0xKTtpZihpPjApZm9yKHguaXVzaHJuKGkpO2ktLSA+MDspKEEuaXNPZGQoKXx8Qi5pc09kZCgpKSYmKEEuaWFkZCh5cCksQi5pc3ViKHhwKSksQS5pdXNocm4oMSksQi5pdXNocm4oMSk7Zm9yKHZhciBqPTAsam09MTswPT09KHkud29yZHNbMF0mam0pJiZqPDI2OysraixqbTw8PTEpO2lmKGo+MClmb3IoeS5pdXNocm4oaik7ai0tID4wOykoQy5pc09kZCgpfHxELmlzT2RkKCkpJiYoQy5pYWRkKHlwKSxELmlzdWIoeHApKSxDLml1c2hybigxKSxELml1c2hybigxKTt4LmNtcCh5KT49MD8oeC5pc3ViKHkpLEEuaXN1YihDKSxCLmlzdWIoRCkpOih5LmlzdWIoeCksQy5pc3ViKEEpLEQuaXN1YihCKSl9cmV0dXJue2E6QyxiOkQsZ2NkOnkuaXVzaGxuKGcpfX0sQk4ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbiBfaW52bXAocCl7YXNzZXJ0KDA9PT1wLm5lZ2F0aXZlKSxhc3NlcnQoIXAuaXNaZXJvKCkpO3ZhciBhPXRoaXMsYj1wLmNsb25lKCk7YT0wIT09YS5uZWdhdGl2ZT9hLnVtb2QocCk6YS5jbG9uZSgpO2Zvcih2YXIgcmVzLHgxPW5ldyBCTigxKSx4Mj1uZXcgQk4oMCksZGVsdGE9Yi5jbG9uZSgpO2EuY21wbigxKT4wJiZiLmNtcG4oMSk+MDspe2Zvcih2YXIgaT0wLGltPTE7MD09PShhLndvcmRzWzBdJmltKSYmaTwyNjsrK2ksaW08PD0xKTtpZihpPjApZm9yKGEuaXVzaHJuKGkpO2ktLSA+MDspeDEuaXNPZGQoKSYmeDEuaWFkZChkZWx0YSkseDEuaXVzaHJuKDEpO2Zvcih2YXIgaj0wLGptPTE7MD09PShiLndvcmRzWzBdJmptKSYmajwyNjsrK2osam08PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspeDIuaXNPZGQoKSYmeDIuaWFkZChkZWx0YSkseDIuaXVzaHJuKDEpO2EuY21wKGIpPj0wPyhhLmlzdWIoYikseDEuaXN1Yih4MikpOihiLmlzdWIoYSkseDIuaXN1Yih4MSkpfXJldHVybihyZXM9MD09PWEuY21wbigxKT94MTp4MikuY21wbigwKTwwJiZyZXMuaWFkZChwKSxyZXN9LEJOLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24gZ2NkKG51bSl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gbnVtLmFicygpO2lmKG51bS5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYT10aGlzLmNsb25lKCksYj1udW0uY2xvbmUoKTthLm5lZ2F0aXZlPTAsYi5uZWdhdGl2ZT0wO2Zvcih2YXIgc2hpZnQ9MDthLmlzRXZlbigpJiZiLmlzRXZlbigpO3NoaWZ0KyspYS5pdXNocm4oMSksYi5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2EuaXNFdmVuKCk7KWEuaXVzaHJuKDEpO2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7dmFyIHI9YS5jbXAoYik7aWYocjwwKXt2YXIgdD1hO2E9YixiPXR9ZWxzZSBpZigwPT09cnx8MD09PWIuY21wbigxKSlicmVhazthLmlzdWIoYil9cmV0dXJuIGIuaXVzaGxuKHNoaWZ0KX0sQk4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24gaW52bShudW0pe3JldHVybiB0aGlzLmVnY2QobnVtKS5hLnVtb2QobnVtKX0sQk4ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbiBpc0V2ZW4oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LEJOLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbiBpc09kZCgpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LEJOLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbiBhbmRsbihudW0pe3JldHVybiB0aGlzLndvcmRzWzBdJm51bX0sQk4ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uIGJpbmNuKGJpdCl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0KTt2YXIgcj1iaXQlMjYscz0oYml0LXIpLzI2LHE9MTw8cjtpZih0aGlzLmxlbmd0aDw9cylyZXR1cm4gdGhpcy5fZXhwYW5kKHMrMSksdGhpcy53b3Jkc1tzXXw9cSx0aGlzO2Zvcih2YXIgY2Fycnk9cSxpPXM7MCE9PWNhcnJ5JiZpPHRoaXMubGVuZ3RoO2krKyl7dmFyIHc9MHx0aGlzLndvcmRzW2ldO2NhcnJ5PSh3Kz1jYXJyeSk+Pj4yNix3Jj02NzEwODg2Myx0aGlzLndvcmRzW2ldPXd9cmV0dXJuIDAhPT1jYXJyeSYmKHRoaXMud29yZHNbaV09Y2FycnksdGhpcy5sZW5ndGgrKyksdGhpc30sQk4ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbiBpc1plcm8oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sQk4ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24gY21wbihudW0pe3ZhciByZXMsbmVnYXRpdmU9bnVtPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFuZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmbmVnYXRpdmUpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpcmVzPTE7ZWxzZXtuZWdhdGl2ZSYmKG51bT0tbnVtKSxhc3NlcnQobnVtPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgdz0wfHRoaXMud29yZHNbMF07cmVzPXc9PT1udW0/MDp3PG51bT8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1yZXM6cmVzfSxCTi5wcm90b3R5cGUuY21wPWZ1bmN0aW9uIGNtcChudW0pe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09bnVtLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09bnVtLm5lZ2F0aXZlKXJldHVybiAxO3ZhciByZXM9dGhpcy51Y21wKG51bSk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXJlczpyZXN9LEJOLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uIHVjbXAobnVtKXtpZih0aGlzLmxlbmd0aD5udW0ubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPG51bS5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciByZXM9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBhPTB8dGhpcy53b3Jkc1tpXSxiPTB8bnVtLndvcmRzW2ldO2lmKGEhPT1iKXthPGI/cmVzPS0xOmE+YiYmKHJlcz0xKTticmVha319cmV0dXJuIHJlc30sQk4ucHJvdG90eXBlLmd0bj1mdW5jdGlvbiBndG4obnVtKXtyZXR1cm4gMT09PXRoaXMuY21wbihudW0pfSxCTi5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24gZ3QobnVtKXtyZXR1cm4gMT09PXRoaXMuY21wKG51bSl9LEJOLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uIGd0ZW4obnVtKXtyZXR1cm4gdGhpcy5jbXBuKG51bSk+PTB9LEJOLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24gZ3RlKG51bSl7cmV0dXJuIHRoaXMuY21wKG51bSk+PTB9LEJOLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24gbHRuKG51bSl7cmV0dXJuLTE9PT10aGlzLmNtcG4obnVtKX0sQk4ucHJvdG90eXBlLmx0PWZ1bmN0aW9uIGx0KG51bSl7cmV0dXJuLTE9PT10aGlzLmNtcChudW0pfSxCTi5wcm90b3R5cGUubHRlbj1mdW5jdGlvbiBsdGVuKG51bSl7cmV0dXJuIHRoaXMuY21wbihudW0pPD0wfSxCTi5wcm90b3R5cGUubHRlPWZ1bmN0aW9uIGx0ZShudW0pe3JldHVybiB0aGlzLmNtcChudW0pPD0wfSxCTi5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uIGVxbihudW0pe3JldHVybiAwPT09dGhpcy5jbXBuKG51bSl9LEJOLnByb3RvdHlwZS5lcT1mdW5jdGlvbiBlcShudW0pe3JldHVybiAwPT09dGhpcy5jbXAobnVtKX0sQk4ucmVkPWZ1bmN0aW9uIHJlZChudW0pe3JldHVybiBuZXcgUmVkKG51bSl9LEJOLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbiB0b1JlZChjdHgpe3JldHVybiBhc3NlcnQoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksYXNzZXJ0KDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGN0eC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGN0eCl9LEJOLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uIGZyb21SZWQoKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEJOLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24gX2ZvcmNlUmVkKGN0eCl7cmV0dXJuIHRoaXMucmVkPWN0eCx0aGlzfSxCTi5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24gZm9yY2VSZWQoY3R4KXtyZXR1cm4gYXNzZXJ0KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGN0eCl9LEJOLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24gcmVkQWRkKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uIHJlZElBZGQobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uIHJlZFN1YihudW0pe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbiByZWRJU3ViKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbiByZWRTaGwobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbiByZWRNdWwobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxudW0pLHRoaXMucmVkLm11bCh0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uIHJlZElNdWwobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxudW0pLHRoaXMucmVkLmltdWwodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uIHJlZFNxcigpe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEJOLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uIHJlZElTcXIoKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEJOLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uIHJlZFNxcnQoKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LEJOLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uIHJlZEludm0oKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEJOLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24gcmVkTmVnKCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sQk4ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbiByZWRQb3cobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkJiYhbnVtLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxudW0pfTt2YXIgcHJpbWVzPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gTVByaW1lKG5hbWUscCl7dGhpcy5uYW1lPW5hbWUsdGhpcy5wPW5ldyBCTihwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgQk4oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIEsyNTYoKXtNUHJpbWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBQMjI0KCl7TVByaW1lLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gUDE5Migpe01QcmltZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFAyNTUxOSgpe01QcmltZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFJlZChtKXtpZigic3RyaW5nIj09dHlwZW9mIG0pe3ZhciBwcmltZT1CTi5fcHJpbWUobSk7dGhpcy5tPXByaW1lLnAsdGhpcy5wcmltZT1wcmltZX1lbHNlIGFzc2VydChtLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPW0sdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIE1vbnQobSl7UmVkLmNhbGwodGhpcyxtKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBCTigxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1NUHJpbWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24gX3RtcCgpe3ZhciB0bXA9bmV3IEJOKG51bGwpO3JldHVybiB0bXAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0bXB9LE1QcmltZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbiBpcmVkdWNlKG51bSl7dmFyIHJsZW4scj1udW07ZG97dGhpcy5zcGxpdChyLHRoaXMudG1wKSxybGVuPShyPShyPXRoaXMuaW11bEsocikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShybGVuPnRoaXMubik7dmFyIGNtcD1ybGVuPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PWNtcD8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOmNtcD4wP3IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXIuc3RyaXA/ci5zdHJpcCgpOnIuX3N0cmlwKCkscn0sTVByaW1lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbiBzcGxpdChpbnB1dCxvdXQpe2lucHV0Lml1c2hybih0aGlzLm4sMCxvdXQpfSxNUHJpbWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uIGltdWxLKG51bSl7cmV0dXJuIG51bS5pbXVsKHRoaXMuayl9LGluaGVyaXRzKEsyNTYsTVByaW1lKSxLMjU2LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbiBzcGxpdChpbnB1dCxvdXRwdXQpe2Zvcih2YXIgb3V0TGVuPU1hdGgubWluKGlucHV0Lmxlbmd0aCw5KSxpPTA7aTxvdXRMZW47aSsrKW91dHB1dC53b3Jkc1tpXT1pbnB1dC53b3Jkc1tpXTtpZihvdXRwdXQubGVuZ3RoPW91dExlbixpbnB1dC5sZW5ndGg8PTkpcmV0dXJuIGlucHV0LndvcmRzWzBdPTAsdm9pZChpbnB1dC5sZW5ndGg9MSk7dmFyIHByZXY9aW5wdXQud29yZHNbOV07Zm9yKG91dHB1dC53b3Jkc1tvdXRwdXQubGVuZ3RoKytdPTQxOTQzMDMmcHJldixpPTEwO2k8aW5wdXQubGVuZ3RoO2krKyl7dmFyIG5leHQ9MHxpbnB1dC53b3Jkc1tpXTtpbnB1dC53b3Jkc1tpLTEwXT0oNDE5NDMwMyZuZXh0KTw8NHxwcmV2Pj4+MjIscHJldj1uZXh0fXByZXY+Pj49MjIsaW5wdXQud29yZHNbaS0xMF09cHJldiwwPT09cHJldiYmaW5wdXQubGVuZ3RoPjEwP2lucHV0Lmxlbmd0aC09MTA6aW5wdXQubGVuZ3RoLT05fSxLMjU2LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbiBpbXVsSyhudW0pe251bS53b3Jkc1tudW0ubGVuZ3RoXT0wLG51bS53b3Jkc1tudW0ubGVuZ3RoKzFdPTAsbnVtLmxlbmd0aCs9Mjtmb3IodmFyIGxvPTAsaT0wO2k8bnVtLmxlbmd0aDtpKyspe3ZhciB3PTB8bnVtLndvcmRzW2ldO2xvKz05NzcqdyxudW0ud29yZHNbaV09NjcxMDg4NjMmbG8sbG89NjQqdysobG8vNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1udW0ud29yZHNbbnVtLmxlbmd0aC0xXSYmKG51bS5sZW5ndGgtLSwwPT09bnVtLndvcmRzW251bS5sZW5ndGgtMV0mJm51bS5sZW5ndGgtLSksbnVtfSxpbmhlcml0cyhQMjI0LE1QcmltZSksaW5oZXJpdHMoUDE5MixNUHJpbWUpLGluaGVyaXRzKFAyNTUxOSxNUHJpbWUpLFAyNTUxOS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24gaW11bEsobnVtKXtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8bnVtLmxlbmd0aDtpKyspe3ZhciBoaT0xOSooMHxudW0ud29yZHNbaV0pK2NhcnJ5LGxvPTY3MTA4ODYzJmhpO2hpPj4+PTI2LG51bS53b3Jkc1tpXT1sbyxjYXJyeT1oaX1yZXR1cm4gMCE9PWNhcnJ5JiYobnVtLndvcmRzW251bS5sZW5ndGgrK109Y2FycnkpLG51bX0sQk4uX3ByaW1lPWZ1bmN0aW9uIHByaW1lKG5hbWUpe2lmKHByaW1lc1tuYW1lXSlyZXR1cm4gcHJpbWVzW25hbWVdO3ZhciBwcmltZTtpZigiazI1NiI9PT1uYW1lKXByaW1lPW5ldyBLMjU2O2Vsc2UgaWYoInAyMjQiPT09bmFtZSlwcmltZT1uZXcgUDIyNDtlbHNlIGlmKCJwMTkyIj09PW5hbWUpcHJpbWU9bmV3IFAxOTI7ZWxzZXtpZigicDI1NTE5IiE9PW5hbWUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrbmFtZSk7cHJpbWU9bmV3IFAyNTUxOX1yZXR1cm4gcHJpbWVzW25hbWVdPXByaW1lLHByaW1lfSxSZWQucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uIF92ZXJpZnkxKGEpe2Fzc2VydCgwPT09YS5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxhc3NlcnQoYS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sUmVkLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbiBfdmVyaWZ5MihhLGIpe2Fzc2VydCgwPT09KGEubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYXNzZXJ0KGEucmVkJiZhLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFJlZC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbiBpbW9kKGEpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShhKS5fZm9yY2VSZWQodGhpcyk6YS51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxSZWQucHJvdG90eXBlLm5lZz1mdW5jdGlvbiBuZWcoYSl7cmV0dXJuIGEuaXNaZXJvKCk/YS5jbG9uZSgpOnRoaXMubS5zdWIoYSkuX2ZvcmNlUmVkKHRoaXMpfSxSZWQucHJvdG90eXBlLmFkZD1mdW5jdGlvbiBhZGQoYSxiKXt0aGlzLl92ZXJpZnkyKGEsYik7dmFyIHJlcz1hLmFkZChiKTtyZXR1cm4gcmVzLmNtcCh0aGlzLm0pPj0wJiZyZXMuaXN1Yih0aGlzLm0pLHJlcy5fZm9yY2VSZWQodGhpcyl9LFJlZC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbiBpYWRkKGEsYil7dGhpcy5fdmVyaWZ5MihhLGIpO3ZhciByZXM9YS5pYWRkKGIpO3JldHVybiByZXMuY21wKHRoaXMubSk+PTAmJnJlcy5pc3ViKHRoaXMubSkscmVzfSxSZWQucHJvdG90eXBlLnN1Yj1mdW5jdGlvbiBzdWIoYSxiKXt0aGlzLl92ZXJpZnkyKGEsYik7dmFyIHJlcz1hLnN1YihiKTtyZXR1cm4gcmVzLmNtcG4oMCk8MCYmcmVzLmlhZGQodGhpcy5tKSxyZXMuX2ZvcmNlUmVkKHRoaXMpfSxSZWQucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24gaXN1YihhLGIpe3RoaXMuX3ZlcmlmeTIoYSxiKTt2YXIgcmVzPWEuaXN1YihiKTtyZXR1cm4gcmVzLmNtcG4oMCk8MCYmcmVzLmlhZGQodGhpcy5tKSxyZXN9LFJlZC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uIHNobChhLG51bSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoYSksdGhpcy5pbW9kKGEudXNobG4obnVtKSl9LFJlZC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbiBpbXVsKGEsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYSxiKSx0aGlzLmltb2QoYS5pbXVsKGIpKX0sUmVkLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24gbXVsKGEsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYSxiKSx0aGlzLmltb2QoYS5tdWwoYikpfSxSZWQucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24gaXNxcihhKXtyZXR1cm4gdGhpcy5pbXVsKGEsYS5jbG9uZSgpKX0sUmVkLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24gc3FyKGEpe3JldHVybiB0aGlzLm11bChhLGEpfSxSZWQucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24gc3FydChhKXtpZihhLmlzWmVybygpKXJldHVybiBhLmNsb25lKCk7dmFyIG1vZDM9dGhpcy5tLmFuZGxuKDMpO2lmKGFzc2VydChtb2QzJTI9PTEpLDM9PT1tb2QzKXt2YXIgcG93PXRoaXMubS5hZGQobmV3IEJOKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGEscG93KX1mb3IodmFyIHE9dGhpcy5tLnN1Ym4oMSkscz0wOyFxLmlzWmVybygpJiYwPT09cS5hbmRsbigxKTspcysrLHEuaXVzaHJuKDEpO2Fzc2VydCghcS5pc1plcm8oKSk7dmFyIG9uZT1uZXcgQk4oMSkudG9SZWQodGhpcyksbk9uZT1vbmUucmVkTmVnKCksbHBvdz10aGlzLm0uc3VibigxKS5pdXNocm4oMSksej10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHo9bmV3IEJOKDIqeip6KS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coeixscG93KS5jbXAobk9uZSk7KXoucmVkSUFkZChuT25lKTtmb3IodmFyIGM9dGhpcy5wb3coeixxKSxyPXRoaXMucG93KGEscS5hZGRuKDEpLml1c2hybigxKSksdD10aGlzLnBvdyhhLHEpLG09czswIT09dC5jbXAob25lKTspe2Zvcih2YXIgdG1wPXQsaT0wOzAhPT10bXAuY21wKG9uZSk7aSsrKXRtcD10bXAucmVkU3FyKCk7YXNzZXJ0KGk8bSk7dmFyIGI9dGhpcy5wb3coYyxuZXcgQk4oMSkuaXVzaGxuKG0taS0xKSk7cj1yLnJlZE11bChiKSxjPWIucmVkU3FyKCksdD10LnJlZE11bChjKSxtPWl9cmV0dXJuIHJ9LFJlZC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbiBpbnZtKGEpe3ZhciBpbnY9YS5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWludi5uZWdhdGl2ZT8oaW52Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGludikucmVkTmVnKCkpOnRoaXMuaW1vZChpbnYpfSxSZWQucHJvdG90eXBlLnBvdz1mdW5jdGlvbiBwb3coYSxudW0pe2lmKG51bS5pc1plcm8oKSlyZXR1cm4gbmV3IEJOKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1udW0uY21wbigxKSlyZXR1cm4gYS5jbG9uZSgpO3ZhciB3bmQ9bmV3IEFycmF5KDE2KTt3bmRbMF09bmV3IEJOKDEpLnRvUmVkKHRoaXMpLHduZFsxXT1hO2Zvcih2YXIgaT0yO2k8d25kLmxlbmd0aDtpKyspd25kW2ldPXRoaXMubXVsKHduZFtpLTFdLGEpO3ZhciByZXM9d25kWzBdLGN1cnJlbnQ9MCxjdXJyZW50TGVuPTAsc3RhcnQ9bnVtLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09c3RhcnQmJihzdGFydD0yNiksaT1udW0ubGVuZ3RoLTE7aT49MDtpLS0pe2Zvcih2YXIgd29yZD1udW0ud29yZHNbaV0saj1zdGFydC0xO2o+PTA7ai0tKXt2YXIgYml0PXdvcmQ+PmomMTtyZXMhPT13bmRbMF0mJihyZXM9dGhpcy5zcXIocmVzKSksMCE9PWJpdHx8MCE9PWN1cnJlbnQ/KGN1cnJlbnQ8PD0xLGN1cnJlbnR8PWJpdCwoND09PSsrY3VycmVudExlbnx8MD09PWkmJjA9PT1qKSYmKHJlcz10aGlzLm11bChyZXMsd25kW2N1cnJlbnRdKSxjdXJyZW50TGVuPTAsY3VycmVudD0wKSk6Y3VycmVudExlbj0wfXN0YXJ0PTI2fXJldHVybiByZXN9LFJlZC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uIGNvbnZlcnRUbyhudW0pe3ZhciByPW51bS51bW9kKHRoaXMubSk7cmV0dXJuIHI9PT1udW0/ci5jbG9uZSgpOnJ9LFJlZC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24gY29udmVydEZyb20obnVtKXt2YXIgcmVzPW51bS5jbG9uZSgpO3JldHVybiByZXMucmVkPW51bGwscmVzfSxCTi5tb250PWZ1bmN0aW9uIG1vbnQobnVtKXtyZXR1cm4gbmV3IE1vbnQobnVtKX0saW5oZXJpdHMoTW9udCxSZWQpLE1vbnQucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbiBjb252ZXJ0VG8obnVtKXtyZXR1cm4gdGhpcy5pbW9kKG51bS51c2hsbih0aGlzLnNoaWZ0KSl9LE1vbnQucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uIGNvbnZlcnRGcm9tKG51bSl7dmFyIHI9dGhpcy5pbW9kKG51bS5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHIucmVkPW51bGwscn0sTW9udC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbiBpbXVsKGEsYil7aWYoYS5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gYS53b3Jkc1swXT0wLGEubGVuZ3RoPTEsYTt2YXIgdD1hLmltdWwoYiksYz10Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSx1PXQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCkscmVzPXU7cmV0dXJuIHUuY21wKHRoaXMubSk+PTA/cmVzPXUuaXN1Yih0aGlzLm0pOnUuY21wbigwKTwwJiYocmVzPXUuaWFkZCh0aGlzLm0pKSxyZXMuX2ZvcmNlUmVkKHRoaXMpfSxNb250LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24gbXVsKGEsYil7aWYoYS5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IEJOKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgdD1hLm11bChiKSxjPXQubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHU9dC5pc3ViKGMpLml1c2hybih0aGlzLnNoaWZ0KSxyZXM9dTtyZXR1cm4gdS5jbXAodGhpcy5tKT49MD9yZXM9dS5pc3ViKHRoaXMubSk6dS5jbXBuKDApPDAmJihyZXM9dS5pYWRkKHRoaXMubSkpLHJlcy5fZm9yY2VSZWQodGhpcyl9LE1vbnQucHJvdG90eXBlLmludm09ZnVuY3Rpb24gaW52bShhKXtyZXR1cm4gdGhpcy5pbW9kKGEuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShtb2R1bGU9X193ZWJwYWNrX3JlcXVpcmVfXy5ubWQobW9kdWxlKSx0aGlzKX0sIi4uLy4uL25vZGVfbW9kdWxlcy9hc3NlcnQvYnVpbGQvYXNzZXJ0LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgcHJvY2Vzcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvcHJveHkvcHJvY2Vzcy5qcyIpO2Z1bmN0aW9uIF90eXBlb2Yobyl7cmV0dXJuIF90eXBlb2Y9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24obyl7cmV0dXJuIHR5cGVvZiBvfTpmdW5jdGlvbihvKXtyZXR1cm4gbyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmby5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmbyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIG99LF90eXBlb2Yobyl9ZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8fCExLGRlc2NyaXB0b3IuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkZXNjcmlwdG9yJiYoZGVzY3JpcHRvci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCxfdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksZGVzY3JpcHRvcil9fWZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3Rvcixwcm90b1Byb3BzLHN0YXRpY1Byb3BzKXtyZXR1cm4gcHJvdG9Qcm9wcyYmX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLHByb3RvUHJvcHMpLHN0YXRpY1Byb3BzJiZfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3RvcixzdGF0aWNQcm9wcyksT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLENvbnN0cnVjdG9yfWZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZyl7dmFyIGtleT1mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsaGludCl7aWYoIm9iamVjdCIhPT1fdHlwZW9mKGlucHV0KXx8bnVsbD09PWlucHV0KXJldHVybiBpbnB1dDt2YXIgcHJpbT1pbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXByaW0pe3ZhciByZXM9cHJpbS5jYWxsKGlucHV0LGhpbnR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1fdHlwZW9mKHJlcykpcmV0dXJuIHJlczt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWhpbnQ/U3RyaW5nOk51bWJlcikoaW5wdXQpfShhcmcsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09X3R5cGVvZihrZXkpP2tleTpTdHJpbmcoa2V5KX12YXIgaXNEZWVwRXF1YWwsaXNEZWVwU3RyaWN0RXF1YWwsX3JlcXVpcmUkY29kZXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Fzc2VydC9idWlsZC9pbnRlcm5hbC9lcnJvcnMuanMiKS5jb2RlcyxFUlJfQU1CSUdVT1VTX0FSR1VNRU5UPV9yZXF1aXJlJGNvZGVzLkVSUl9BTUJJR1VPVVNfQVJHVU1FTlQsRVJSX0lOVkFMSURfQVJHX1RZUEU9X3JlcXVpcmUkY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUsRVJSX0lOVkFMSURfQVJHX1ZBTFVFPV9yZXF1aXJlJGNvZGVzLkVSUl9JTlZBTElEX0FSR19WQUxVRSxFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUU9X3JlcXVpcmUkY29kZXMuRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFLEVSUl9NSVNTSU5HX0FSR1M9X3JlcXVpcmUkY29kZXMuRVJSX01JU1NJTkdfQVJHUyxBc3NlcnRpb25FcnJvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYXNzZXJ0L2J1aWxkL2ludGVybmFsL2Fzc2VydC9hc3NlcnRpb25fZXJyb3IuanMiKSxpbnNwZWN0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiKS5pbnNwZWN0LF9yZXF1aXJlJHR5cGVzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiKS50eXBlcyxpc1Byb21pc2U9X3JlcXVpcmUkdHlwZXMuaXNQcm9taXNlLGlzUmVnRXhwPV9yZXF1aXJlJHR5cGVzLmlzUmVnRXhwLG9iamVjdEFzc2lnbj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9wb2x5ZmlsbC5qcyIpKCksb2JqZWN0SXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1pcy9wb2x5ZmlsbC5qcyIpKCksUmVnRXhwUHJvdG90eXBlVGVzdD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2NhbGxCb3VuZC5qcyIpKCJSZWdFeHAucHJvdG90eXBlLnRlc3QiKTtuZXcgTWFwO2Z1bmN0aW9uIGxhenlMb2FkQ29tcGFyaXNvbigpe3ZhciBjb21wYXJpc29uPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9hc3NlcnQvYnVpbGQvaW50ZXJuYWwvdXRpbC9jb21wYXJpc29ucy5qcyIpO2lzRGVlcEVxdWFsPWNvbXBhcmlzb24uaXNEZWVwRXF1YWwsaXNEZWVwU3RyaWN0RXF1YWw9Y29tcGFyaXNvbi5pc0RlZXBTdHJpY3RFcXVhbH12YXIgd2FybmVkPSExLGFzc2VydD1tb2R1bGUuZXhwb3J0cz1vayxOT19FWENFUFRJT05fU0VOVElORUw9e307ZnVuY3Rpb24gaW5uZXJGYWlsKG9iail7aWYob2JqLm1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBvYmoubWVzc2FnZTt0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Iob2JqKX1mdW5jdGlvbiBpbm5lck9rKGZuLGFyZ0xlbix2YWx1ZSxtZXNzYWdlKXtpZighdmFsdWUpe3ZhciBnZW5lcmF0ZWRNZXNzYWdlPSExO2lmKDA9PT1hcmdMZW4pZ2VuZXJhdGVkTWVzc2FnZT0hMCxtZXNzYWdlPSJObyB2YWx1ZSBhcmd1bWVudCBwYXNzZWQgdG8gYGFzc2VydC5vaygpYCI7ZWxzZSBpZihtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgbWVzc2FnZTt2YXIgZXJyPW5ldyBBc3NlcnRpb25FcnJvcih7YWN0dWFsOnZhbHVlLGV4cGVjdGVkOiEwLG1lc3NhZ2Usb3BlcmF0b3I6Ij09IixzdGFja1N0YXJ0Rm46Zm59KTt0aHJvdyBlcnIuZ2VuZXJhdGVkTWVzc2FnZT1nZW5lcmF0ZWRNZXNzYWdlLGVycn19ZnVuY3Rpb24gb2soKXtmb3IodmFyIF9sZW49YXJndW1lbnRzLmxlbmd0aCxhcmdzPW5ldyBBcnJheShfbGVuKSxfa2V5PTA7X2tleTxfbGVuO19rZXkrKylhcmdzW19rZXldPWFyZ3VtZW50c1tfa2V5XTtpbm5lck9rLmFwcGx5KHZvaWQgMCxbb2ssYXJncy5sZW5ndGhdLmNvbmNhdChhcmdzKSl9YXNzZXJ0LmZhaWw9ZnVuY3Rpb24gZmFpbChhY3R1YWwsZXhwZWN0ZWQsbWVzc2FnZSxvcGVyYXRvcixzdGFja1N0YXJ0Rm4pe3ZhciBpbnRlcm5hbE1lc3NhZ2UsYXJnc0xlbj1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT1hcmdzTGVuKWludGVybmFsTWVzc2FnZT0iRmFpbGVkIjtlbHNlIGlmKDE9PT1hcmdzTGVuKW1lc3NhZ2U9YWN0dWFsLGFjdHVhbD12b2lkIDA7ZWxzZXtpZighMT09PXdhcm5lZCl3YXJuZWQ9ITAsKHByb2Nlc3MuZW1pdFdhcm5pbmc/cHJvY2Vzcy5lbWl0V2FybmluZzpjb25zb2xlLndhcm4uYmluZChjb25zb2xlKSkoImFzc2VydC5mYWlsKCkgd2l0aCBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXNzZXJ0LnN0cmljdEVxdWFsKCkgaW5zdGVhZCBvciBvbmx5IHBhc3MgYSBtZXNzYWdlLiIsIkRlcHJlY2F0aW9uV2FybmluZyIsIkRFUDAwOTQiKTsyPT09YXJnc0xlbiYmKG9wZXJhdG9yPSIhPSIpfWlmKG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBtZXNzYWdlO3ZhciBlcnJBcmdzPXthY3R1YWwsZXhwZWN0ZWQsb3BlcmF0b3I6dm9pZCAwPT09b3BlcmF0b3I/ImZhaWwiOm9wZXJhdG9yLHN0YWNrU3RhcnRGbjpzdGFja1N0YXJ0Rm58fGZhaWx9O3ZvaWQgMCE9PW1lc3NhZ2UmJihlcnJBcmdzLm1lc3NhZ2U9bWVzc2FnZSk7dmFyIGVycj1uZXcgQXNzZXJ0aW9uRXJyb3IoZXJyQXJncyk7dGhyb3cgaW50ZXJuYWxNZXNzYWdlJiYoZXJyLm1lc3NhZ2U9aW50ZXJuYWxNZXNzYWdlLGVyci5nZW5lcmF0ZWRNZXNzYWdlPSEwKSxlcnJ9LGFzc2VydC5Bc3NlcnRpb25FcnJvcj1Bc3NlcnRpb25FcnJvcixhc3NlcnQub2s9b2ssYXNzZXJ0LmVxdWFsPWZ1bmN0aW9uIGVxdWFsKGFjdHVhbCxleHBlY3RlZCxtZXNzYWdlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IEVSUl9NSVNTSU5HX0FSR1MoImFjdHVhbCIsImV4cGVjdGVkIik7YWN0dWFsIT1leHBlY3RlZCYmaW5uZXJGYWlsKHthY3R1YWwsZXhwZWN0ZWQsbWVzc2FnZSxvcGVyYXRvcjoiPT0iLHN0YWNrU3RhcnRGbjplcXVhbH0pfSxhc3NlcnQubm90RXF1YWw9ZnVuY3Rpb24gbm90RXF1YWwoYWN0dWFsLGV4cGVjdGVkLG1lc3NhZ2Upe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUygiYWN0dWFsIiwiZXhwZWN0ZWQiKTthY3R1YWw9PWV4cGVjdGVkJiZpbm5lckZhaWwoe2FjdHVhbCxleHBlY3RlZCxtZXNzYWdlLG9wZXJhdG9yOiIhPSIsc3RhY2tTdGFydEZuOm5vdEVxdWFsfSl9LGFzc2VydC5kZWVwRXF1YWw9ZnVuY3Rpb24gZGVlcEVxdWFsKGFjdHVhbCxleHBlY3RlZCxtZXNzYWdlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IEVSUl9NSVNTSU5HX0FSR1MoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09aXNEZWVwRXF1YWwmJmxhenlMb2FkQ29tcGFyaXNvbigpLGlzRGVlcEVxdWFsKGFjdHVhbCxleHBlY3RlZCl8fGlubmVyRmFpbCh7YWN0dWFsLGV4cGVjdGVkLG1lc3NhZ2Usb3BlcmF0b3I6ImRlZXBFcXVhbCIsc3RhY2tTdGFydEZuOmRlZXBFcXVhbH0pfSxhc3NlcnQubm90RGVlcEVxdWFsPWZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsZXhwZWN0ZWQsbWVzc2FnZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWlzRGVlcEVxdWFsJiZsYXp5TG9hZENvbXBhcmlzb24oKSxpc0RlZXBFcXVhbChhY3R1YWwsZXhwZWN0ZWQpJiZpbm5lckZhaWwoe2FjdHVhbCxleHBlY3RlZCxtZXNzYWdlLG9wZXJhdG9yOiJub3REZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpub3REZWVwRXF1YWx9KX0sYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiBkZWVwU3RyaWN0RXF1YWwoYWN0dWFsLGV4cGVjdGVkLG1lc3NhZ2Upe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUygiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1pc0RlZXBFcXVhbCYmbGF6eUxvYWRDb21wYXJpc29uKCksaXNEZWVwU3RyaWN0RXF1YWwoYWN0dWFsLGV4cGVjdGVkKXx8aW5uZXJGYWlsKHthY3R1YWwsZXhwZWN0ZWQsbWVzc2FnZSxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46ZGVlcFN0cmljdEVxdWFsfSl9LGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gbm90RGVlcFN0cmljdEVxdWFsKGFjdHVhbCxleHBlY3RlZCxtZXNzYWdlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IEVSUl9NSVNTSU5HX0FSR1MoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09aXNEZWVwRXF1YWwmJmxhenlMb2FkQ29tcGFyaXNvbigpO2lzRGVlcFN0cmljdEVxdWFsKGFjdHVhbCxleHBlY3RlZCkmJmlubmVyRmFpbCh7YWN0dWFsLGV4cGVjdGVkLG1lc3NhZ2Usb3BlcmF0b3I6Im5vdERlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOm5vdERlZXBTdHJpY3RFcXVhbH0pfSxhc3NlcnQuc3RyaWN0RXF1YWw9ZnVuY3Rpb24gc3RyaWN0RXF1YWwoYWN0dWFsLGV4cGVjdGVkLG1lc3NhZ2Upe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUygiYWN0dWFsIiwiZXhwZWN0ZWQiKTtvYmplY3RJcyhhY3R1YWwsZXhwZWN0ZWQpfHxpbm5lckZhaWwoe2FjdHVhbCxleHBlY3RlZCxtZXNzYWdlLG9wZXJhdG9yOiJzdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOnN0cmljdEVxdWFsfSl9LGFzc2VydC5ub3RTdHJpY3RFcXVhbD1mdW5jdGlvbiBub3RTdHJpY3RFcXVhbChhY3R1YWwsZXhwZWN0ZWQsbWVzc2FnZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCJhY3R1YWwiLCJleHBlY3RlZCIpO29iamVjdElzKGFjdHVhbCxleHBlY3RlZCkmJmlubmVyRmFpbCh7YWN0dWFsLGV4cGVjdGVkLG1lc3NhZ2Usb3BlcmF0b3I6Im5vdFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46bm90U3RyaWN0RXF1YWx9KX07dmFyIENvbXBhcmlzb249X2NyZWF0ZUNsYXNzKGZ1bmN0aW9uIENvbXBhcmlzb24ob2JqLGtleXMsYWN0dWFsKXt2YXIgX3RoaXM9dGhpczshZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLENvbXBhcmlzb24pLGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpe2tleSBpbiBvYmomJih2b2lkIDAhPT1hY3R1YWwmJiJzdHJpbmciPT10eXBlb2YgYWN0dWFsW2tleV0mJmlzUmVnRXhwKG9ialtrZXldKSYmUmVnRXhwUHJvdG90eXBlVGVzdChvYmpba2V5XSxhY3R1YWxba2V5XSk/X3RoaXNba2V5XT1hY3R1YWxba2V5XTpfdGhpc1trZXldPW9ialtrZXldKX0pfSk7ZnVuY3Rpb24gZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLGV4cGVjdGVkLG1zZyxmbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGV4cGVjdGVkKXtpZihpc1JlZ0V4cChleHBlY3RlZCkpcmV0dXJuIFJlZ0V4cFByb3RvdHlwZVRlc3QoZXhwZWN0ZWQsYWN0dWFsKTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoImV4cGVjdGVkIixbIkZ1bmN0aW9uIiwiUmVnRXhwIl0sZXhwZWN0ZWQpO2lmKCJvYmplY3QiIT09X3R5cGVvZihhY3R1YWwpfHxudWxsPT09YWN0dWFsKXt2YXIgZXJyPW5ldyBBc3NlcnRpb25FcnJvcih7YWN0dWFsLGV4cGVjdGVkLG1lc3NhZ2U6bXNnLG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpmbn0pO3Rocm93IGVyci5vcGVyYXRvcj1mbi5uYW1lLGVycn12YXIga2V5cz1PYmplY3Qua2V5cyhleHBlY3RlZCk7aWYoZXhwZWN0ZWQgaW5zdGFuY2VvZiBFcnJvcilrZXlzLnB1c2goIm5hbWUiLCJtZXNzYWdlIik7ZWxzZSBpZigwPT09a2V5cy5sZW5ndGgpdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRSgiZXJyb3IiLGV4cGVjdGVkLCJtYXkgbm90IGJlIGFuIGVtcHR5IG9iamVjdCIpO3JldHVybiB2b2lkIDA9PT1pc0RlZXBFcXVhbCYmbGF6eUxvYWRDb21wYXJpc29uKCksa2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7InN0cmluZyI9PXR5cGVvZiBhY3R1YWxba2V5XSYmaXNSZWdFeHAoZXhwZWN0ZWRba2V5XSkmJlJlZ0V4cFByb3RvdHlwZVRlc3QoZXhwZWN0ZWRba2V5XSxhY3R1YWxba2V5XSl8fGZ1bmN0aW9uIGNvbXBhcmVFeGNlcHRpb25LZXkoYWN0dWFsLGV4cGVjdGVkLGtleSxtZXNzYWdlLGtleXMsZm4pe2lmKCEoa2V5IGluIGFjdHVhbCl8fCFpc0RlZXBTdHJpY3RFcXVhbChhY3R1YWxba2V5XSxleHBlY3RlZFtrZXldKSl7aWYoIW1lc3NhZ2Upe3ZhciBhPW5ldyBDb21wYXJpc29uKGFjdHVhbCxrZXlzKSxiPW5ldyBDb21wYXJpc29uKGV4cGVjdGVkLGtleXMsYWN0dWFsKSxlcnI9bmV3IEFzc2VydGlvbkVycm9yKHthY3R1YWw6YSxleHBlY3RlZDpiLG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpmbn0pO3Rocm93IGVyci5hY3R1YWw9YWN0dWFsLGVyci5leHBlY3RlZD1leHBlY3RlZCxlcnIub3BlcmF0b3I9Zm4ubmFtZSxlcnJ9aW5uZXJGYWlsKHthY3R1YWwsZXhwZWN0ZWQsbWVzc2FnZSxvcGVyYXRvcjpmbi5uYW1lLHN0YWNrU3RhcnRGbjpmbn0pfX0oYWN0dWFsLGV4cGVjdGVkLGtleSxtc2csa2V5cyxmbil9KSwhMH1yZXR1cm4gdm9pZCAwIT09ZXhwZWN0ZWQucHJvdG90eXBlJiZhY3R1YWwgaW5zdGFuY2VvZiBleHBlY3RlZHx8IUVycm9yLmlzUHJvdG90eXBlT2YoZXhwZWN0ZWQpJiYhMD09PWV4cGVjdGVkLmNhbGwoe30sYWN0dWFsKX1mdW5jdGlvbiBnZXRBY3R1YWwoZm4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBmbil0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoImZuIiwiRnVuY3Rpb24iLGZuKTt0cnl7Zm4oKX1jYXRjaChlKXtyZXR1cm4gZX1yZXR1cm4gTk9fRVhDRVBUSU9OX1NFTlRJTkVMfWZ1bmN0aW9uIGNoZWNrSXNQcm9taXNlKG9iail7cmV0dXJuIGlzUHJvbWlzZShvYmopfHxudWxsIT09b2JqJiYib2JqZWN0Ij09PV90eXBlb2Yob2JqKSYmImZ1bmN0aW9uIj09dHlwZW9mIG9iai50aGVuJiYiZnVuY3Rpb24iPT10eXBlb2Ygb2JqLmNhdGNofWZ1bmN0aW9uIHdhaXRGb3JBY3R1YWwocHJvbWlzZUZuKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3ZhciByZXN1bHRQcm9taXNlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBwcm9taXNlRm4pe2lmKCFjaGVja0lzUHJvbWlzZShyZXN1bHRQcm9taXNlPXByb21pc2VGbigpKSl0aHJvdyBuZXcgRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFKCJpbnN0YW5jZSBvZiBQcm9taXNlIiwicHJvbWlzZUZuIixyZXN1bHRQcm9taXNlKX1lbHNle2lmKCFjaGVja0lzUHJvbWlzZShwcm9taXNlRm4pKXRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgicHJvbWlzZUZuIixbIkZ1bmN0aW9uIiwiUHJvbWlzZSJdLHByb21pc2VGbik7cmVzdWx0UHJvbWlzZT1wcm9taXNlRm59cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gcmVzdWx0UHJvbWlzZX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gTk9fRVhDRVBUSU9OX1NFTlRJTkVMfSkuY2F0Y2goZnVuY3Rpb24oZSl7cmV0dXJuIGV9KX0pfWZ1bmN0aW9uIGV4cGVjdHNFcnJvcihzdGFja1N0YXJ0Rm4sYWN0dWFsLGVycm9yLG1lc3NhZ2Upe2lmKCJzdHJpbmciPT10eXBlb2YgZXJyb3Ipe2lmKDQ9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgiZXJyb3IiLFsiT2JqZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4cCJdLGVycm9yKTtpZigib2JqZWN0Ij09PV90eXBlb2YoYWN0dWFsKSYmbnVsbCE9PWFjdHVhbCl7aWYoYWN0dWFsLm1lc3NhZ2U9PT1lcnJvcil0aHJvdyBuZXcgRVJSX0FNQklHVU9VU19BUkdVTUVOVCgiZXJyb3IvbWVzc2FnZSIsJ1RoZSBlcnJvciBtZXNzYWdlICInLmNvbmNhdChhY3R1YWwubWVzc2FnZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpfWVsc2UgaWYoYWN0dWFsPT09ZXJyb3IpdGhyb3cgbmV3IEVSUl9BTUJJR1VPVVNfQVJHVU1FTlQoImVycm9yL21lc3NhZ2UiLCdUaGUgZXJyb3IgIicuY29uY2F0KGFjdHVhbCwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpO21lc3NhZ2U9ZXJyb3IsZXJyb3I9dm9pZCAwfWVsc2UgaWYobnVsbCE9ZXJyb3ImJiJvYmplY3QiIT09X3R5cGVvZihlcnJvcikmJiJmdW5jdGlvbiIhPXR5cGVvZiBlcnJvcil0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoImVycm9yIixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdFeHAiXSxlcnJvcik7aWYoYWN0dWFsPT09Tk9fRVhDRVBUSU9OX1NFTlRJTkVMKXt2YXIgZGV0YWlscz0iIjtlcnJvciYmZXJyb3IubmFtZSYmKGRldGFpbHMrPSIgKCIuY29uY2F0KGVycm9yLm5hbWUsIikiKSksZGV0YWlscys9bWVzc2FnZT8iOiAiLmNvbmNhdChtZXNzYWdlKToiLiI7dmFyIGZuVHlwZT0icmVqZWN0cyI9PT1zdGFja1N0YXJ0Rm4ubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIjtpbm5lckZhaWwoe2FjdHVhbDp2b2lkIDAsZXhwZWN0ZWQ6ZXJyb3Isb3BlcmF0b3I6c3RhY2tTdGFydEZuLm5hbWUsbWVzc2FnZToiTWlzc2luZyBleHBlY3RlZCAiLmNvbmNhdChmblR5cGUpLmNvbmNhdChkZXRhaWxzKSxzdGFja1N0YXJ0Rm59KX1pZihlcnJvciYmIWV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCxlcnJvcixtZXNzYWdlLHN0YWNrU3RhcnRGbikpdGhyb3cgYWN0dWFsfWZ1bmN0aW9uIGV4cGVjdHNOb0Vycm9yKHN0YWNrU3RhcnRGbixhY3R1YWwsZXJyb3IsbWVzc2FnZSl7aWYoYWN0dWFsIT09Tk9fRVhDRVBUSU9OX1NFTlRJTkVMKXtpZigic3RyaW5nIj09dHlwZW9mIGVycm9yJiYobWVzc2FnZT1lcnJvcixlcnJvcj12b2lkIDApLCFlcnJvcnx8ZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLGVycm9yKSl7dmFyIGRldGFpbHM9bWVzc2FnZT8iOiAiLmNvbmNhdChtZXNzYWdlKToiLiIsZm5UeXBlPSJkb2VzTm90UmVqZWN0Ij09PXN0YWNrU3RhcnRGbi5uYW1lPyJyZWplY3Rpb24iOiJleGNlcHRpb24iO2lubmVyRmFpbCh7YWN0dWFsLGV4cGVjdGVkOmVycm9yLG9wZXJhdG9yOnN0YWNrU3RhcnRGbi5uYW1lLG1lc3NhZ2U6IkdvdCB1bndhbnRlZCAiLmNvbmNhdChmblR5cGUpLmNvbmNhdChkZXRhaWxzLCJcbiIpKydBY3R1YWwgbWVzc2FnZTogIicuY29uY2F0KGFjdHVhbCYmYWN0dWFsLm1lc3NhZ2UsJyInKSxzdGFja1N0YXJ0Rm59KX10aHJvdyBhY3R1YWx9fWZ1bmN0aW9uIGludGVybmFsTWF0Y2goc3RyaW5nLHJlZ2V4cCxtZXNzYWdlLGZuLGZuTmFtZSl7aWYoIWlzUmVnRXhwKHJlZ2V4cCkpdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCJyZWdleHAiLCJSZWdFeHAiLHJlZ2V4cCk7dmFyIG1hdGNoPSJtYXRjaCI9PT1mbk5hbWU7aWYoInN0cmluZyIhPXR5cGVvZiBzdHJpbmd8fFJlZ0V4cFByb3RvdHlwZVRlc3QocmVnZXhwLHN0cmluZykhPT1tYXRjaCl7aWYobWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IG1lc3NhZ2U7dmFyIGdlbmVyYXRlZE1lc3NhZ2U9IW1lc3NhZ2U7bWVzc2FnZT1tZXNzYWdlfHwoInN0cmluZyIhPXR5cGVvZiBzdHJpbmc/J1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlICcrIiIuY29uY2F0KF90eXBlb2Yoc3RyaW5nKSwiICgiKS5jb25jYXQoaW5zcGVjdChzdHJpbmcpLCIpIik6KG1hdGNoPyJUaGUgaW5wdXQgZGlkIG5vdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uICI6IlRoZSBpbnB1dCB3YXMgZXhwZWN0ZWQgdG8gbm90IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gIikrIiIuY29uY2F0KGluc3BlY3QocmVnZXhwKSwiLiBJbnB1dDpcblxuIikuY29uY2F0KGluc3BlY3Qoc3RyaW5nKSwiXG4iKSk7dmFyIGVycj1uZXcgQXNzZXJ0aW9uRXJyb3Ioe2FjdHVhbDpzdHJpbmcsZXhwZWN0ZWQ6cmVnZXhwLG1lc3NhZ2Usb3BlcmF0b3I6Zm5OYW1lLHN0YWNrU3RhcnRGbjpmbn0pO3Rocm93IGVyci5nZW5lcmF0ZWRNZXNzYWdlPWdlbmVyYXRlZE1lc3NhZ2UsZXJyfX1mdW5jdGlvbiBzdHJpY3QoKXtmb3IodmFyIF9sZW42PWFyZ3VtZW50cy5sZW5ndGgsYXJncz1uZXcgQXJyYXkoX2xlbjYpLF9rZXk2PTA7X2tleTY8X2xlbjY7X2tleTYrKylhcmdzW19rZXk2XT1hcmd1bWVudHNbX2tleTZdO2lubmVyT2suYXBwbHkodm9pZCAwLFtzdHJpY3QsYXJncy5sZW5ndGhdLmNvbmNhdChhcmdzKSl9YXNzZXJ0LnRocm93cz1mdW5jdGlvbiB0aHJvd3MocHJvbWlzZUZuKXtmb3IodmFyIF9sZW4yPWFyZ3VtZW50cy5sZW5ndGgsYXJncz1uZXcgQXJyYXkoX2xlbjI+MT9fbGVuMi0xOjApLF9rZXkyPTE7X2tleTI8X2xlbjI7X2tleTIrKylhcmdzW19rZXkyLTFdPWFyZ3VtZW50c1tfa2V5Ml07ZXhwZWN0c0Vycm9yLmFwcGx5KHZvaWQgMCxbdGhyb3dzLGdldEFjdHVhbChwcm9taXNlRm4pXS5jb25jYXQoYXJncykpfSxhc3NlcnQucmVqZWN0cz1mdW5jdGlvbiByZWplY3RzKHByb21pc2VGbil7Zm9yKHZhciBfbGVuMz1hcmd1bWVudHMubGVuZ3RoLGFyZ3M9bmV3IEFycmF5KF9sZW4zPjE/X2xlbjMtMTowKSxfa2V5Mz0xO19rZXkzPF9sZW4zO19rZXkzKyspYXJnc1tfa2V5My0xXT1hcmd1bWVudHNbX2tleTNdO3JldHVybiB3YWl0Rm9yQWN0dWFsKHByb21pc2VGbikudGhlbihmdW5jdGlvbihyZXN1bHQpe3JldHVybiBleHBlY3RzRXJyb3IuYXBwbHkodm9pZCAwLFtyZWplY3RzLHJlc3VsdF0uY29uY2F0KGFyZ3MpKX0pfSxhc3NlcnQuZG9lc05vdFRocm93PWZ1bmN0aW9uIGRvZXNOb3RUaHJvdyhmbil7Zm9yKHZhciBfbGVuND1hcmd1bWVudHMubGVuZ3RoLGFyZ3M9bmV3IEFycmF5KF9sZW40PjE/X2xlbjQtMTowKSxfa2V5ND0xO19rZXk0PF9sZW40O19rZXk0KyspYXJnc1tfa2V5NC0xXT1hcmd1bWVudHNbX2tleTRdO2V4cGVjdHNOb0Vycm9yLmFwcGx5KHZvaWQgMCxbZG9lc05vdFRocm93LGdldEFjdHVhbChmbildLmNvbmNhdChhcmdzKSl9LGFzc2VydC5kb2VzTm90UmVqZWN0PWZ1bmN0aW9uIGRvZXNOb3RSZWplY3QoZm4pe2Zvcih2YXIgX2xlbjU9YXJndW1lbnRzLmxlbmd0aCxhcmdzPW5ldyBBcnJheShfbGVuNT4xP19sZW41LTE6MCksX2tleTU9MTtfa2V5NTxfbGVuNTtfa2V5NSsrKWFyZ3NbX2tleTUtMV09YXJndW1lbnRzW19rZXk1XTtyZXR1cm4gd2FpdEZvckFjdHVhbChmbikudGhlbihmdW5jdGlvbihyZXN1bHQpe3JldHVybiBleHBlY3RzTm9FcnJvci5hcHBseSh2b2lkIDAsW2RvZXNOb3RSZWplY3QscmVzdWx0XS5jb25jYXQoYXJncykpfSl9LGFzc2VydC5pZkVycm9yPWZ1bmN0aW9uIGlmRXJyb3IoZXJyKXtpZihudWxsIT1lcnIpe3ZhciBtZXNzYWdlPSJpZkVycm9yIGdvdCB1bndhbnRlZCBleGNlcHRpb246ICI7Im9iamVjdCI9PT1fdHlwZW9mKGVycikmJiJzdHJpbmciPT10eXBlb2YgZXJyLm1lc3NhZ2U/MD09PWVyci5tZXNzYWdlLmxlbmd0aCYmZXJyLmNvbnN0cnVjdG9yP21lc3NhZ2UrPWVyci5jb25zdHJ1Y3Rvci5uYW1lOm1lc3NhZ2UrPWVyci5tZXNzYWdlOm1lc3NhZ2UrPWluc3BlY3QoZXJyKTt2YXIgbmV3RXJyPW5ldyBBc3NlcnRpb25FcnJvcih7YWN0dWFsOmVycixleHBlY3RlZDpudWxsLG9wZXJhdG9yOiJpZkVycm9yIixtZXNzYWdlLHN0YWNrU3RhcnRGbjppZkVycm9yfSksb3JpZ1N0YWNrPWVyci5zdGFjaztpZigic3RyaW5nIj09dHlwZW9mIG9yaWdTdGFjayl7dmFyIHRtcDI9b3JpZ1N0YWNrLnNwbGl0KCJcbiIpO3RtcDIuc2hpZnQoKTtmb3IodmFyIHRtcDE9bmV3RXJyLnN0YWNrLnNwbGl0KCJcbiIpLGk9MDtpPHRtcDIubGVuZ3RoO2krKyl7dmFyIHBvcz10bXAxLmluZGV4T2YodG1wMltpXSk7aWYoLTEhPT1wb3Mpe3RtcDE9dG1wMS5zbGljZSgwLHBvcyk7YnJlYWt9fW5ld0Vyci5zdGFjaz0iIi5jb25jYXQodG1wMS5qb2luKCJcbiIpLCJcbiIpLmNvbmNhdCh0bXAyLmpvaW4oIlxuIikpfXRocm93IG5ld0Vycn19LGFzc2VydC5tYXRjaD1mdW5jdGlvbiBtYXRjaChzdHJpbmcscmVnZXhwLG1lc3NhZ2Upe2ludGVybmFsTWF0Y2goc3RyaW5nLHJlZ2V4cCxtZXNzYWdlLG1hdGNoLCJtYXRjaCIpfSxhc3NlcnQuZG9lc05vdE1hdGNoPWZ1bmN0aW9uIGRvZXNOb3RNYXRjaChzdHJpbmcscmVnZXhwLG1lc3NhZ2Upe2ludGVybmFsTWF0Y2goc3RyaW5nLHJlZ2V4cCxtZXNzYWdlLGRvZXNOb3RNYXRjaCwiZG9lc05vdE1hdGNoIil9LGFzc2VydC5zdHJpY3Q9b2JqZWN0QXNzaWduKHN0cmljdCxhc3NlcnQse2VxdWFsOmFzc2VydC5zdHJpY3RFcXVhbCxkZWVwRXF1YWw6YXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCxub3RFcXVhbDphc3NlcnQubm90U3RyaWN0RXF1YWwsbm90RGVlcEVxdWFsOmFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWx9KSxhc3NlcnQuc3RyaWN0LnN0cmljdD1hc3NlcnQuc3RyaWN0fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2Fzc2VydC9idWlsZC9pbnRlcm5hbC9hc3NlcnQvYXNzZXJ0aW9uX2Vycm9yLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgcHJvY2Vzcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvcHJveHkvcHJvY2Vzcy5qcyIpO2Z1bmN0aW9uIG93bktleXMoZSxyKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3ImJihvPW8uZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscikuZW51bWVyYWJsZX0pKSx0LnB1c2guYXBwbHkodCxvKX1yZXR1cm4gdH1mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpe2Zvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tyXT9hcmd1bWVudHNbcl06e307ciUyP293bktleXMoT2JqZWN0KHQpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe19kZWZpbmVQcm9wZXJ0eShlLHIsdFtyXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTpvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLGtleSx2YWx1ZSl7cmV0dXJuKGtleT1fdG9Qcm9wZXJ0eUtleShrZXkpKWluIG9iaj9PYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLGtleSx7dmFsdWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpvYmpba2V5XT12YWx1ZSxvYmp9ZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8fCExLGRlc2NyaXB0b3IuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkZXNjcmlwdG9yJiYoZGVzY3JpcHRvci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCxfdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksZGVzY3JpcHRvcil9fWZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZyl7dmFyIGtleT1mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsaGludCl7aWYoIm9iamVjdCIhPT1fdHlwZW9mKGlucHV0KXx8bnVsbD09PWlucHV0KXJldHVybiBpbnB1dDt2YXIgcHJpbT1pbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXByaW0pe3ZhciByZXM9cHJpbS5jYWxsKGlucHV0LGhpbnR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1fdHlwZW9mKHJlcykpcmV0dXJuIHJlczt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWhpbnQ/U3RyaW5nOk51bWJlcikoaW5wdXQpfShhcmcsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09X3R5cGVvZihrZXkpP2tleTpTdHJpbmcoa2V5KX1mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLGNhbGwpe2lmKGNhbGwmJigib2JqZWN0Ij09PV90eXBlb2YoY2FsbCl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjYWxsKSlyZXR1cm4gY2FsbDtpZih2b2lkIDAhPT1jYWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZil9ZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKXtpZih2b2lkIDA9PT1zZWxmKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHNlbGZ9ZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcyl7dmFyIF9jYWNoZT0iZnVuY3Rpb24iPT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAwO3JldHVybiBfd3JhcE5hdGl2ZVN1cGVyPWZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3Mpe2lmKG51bGw9PT1DbGFzc3x8IWZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKGZuKXtyZXR1cm4tMSE9PUZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKX0oQ2xhc3MpKXJldHVybiBDbGFzcztpZigiZnVuY3Rpb24iIT10eXBlb2YgQ2xhc3MpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtpZih2b2lkIDAhPT1fY2FjaGUpe2lmKF9jYWNoZS5oYXMoQ2xhc3MpKXJldHVybiBfY2FjaGUuZ2V0KENsYXNzKTtfY2FjaGUuc2V0KENsYXNzLFdyYXBwZXIpfWZ1bmN0aW9uIFdyYXBwZXIoKXtyZXR1cm4gX2NvbnN0cnVjdChDbGFzcyxhcmd1bWVudHMsX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yKX1yZXR1cm4gV3JhcHBlci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpXcmFwcGVyLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLF9zZXRQcm90b3R5cGVPZihXcmFwcGVyLENsYXNzKX0sX3dyYXBOYXRpdmVTdXBlcihDbGFzcyl9ZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsYXJncyxDbGFzcyl7cmV0dXJuIF9jb25zdHJ1Y3Q9X2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpP1JlZmxlY3QuY29uc3RydWN0LmJpbmQoKTpmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCxhcmdzLENsYXNzKXt2YXIgYT1bbnVsbF07YS5wdXNoLmFwcGx5KGEsYXJncyk7dmFyIGluc3RhbmNlPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCxhKSk7cmV0dXJuIENsYXNzJiZfc2V0UHJvdG90eXBlT2YoaW5zdGFuY2UsQ2xhc3MucHJvdG90eXBlKSxpbnN0YW5jZX0sX2NvbnN0cnVjdC5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLHApe3JldHVybiBfc2V0UHJvdG90eXBlT2Y9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8scCl7cmV0dXJuIG8uX19wcm90b19fPXAsb30sX3NldFByb3RvdHlwZU9mKG8scCl9ZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pe3JldHVybiBfZ2V0UHJvdG90eXBlT2Y9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pe3JldHVybiBvLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKG8pfSxfZ2V0UHJvdG90eXBlT2Yobyl9ZnVuY3Rpb24gX3R5cGVvZihvKXtyZXR1cm4gX3R5cGVvZj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihvKXtyZXR1cm4gdHlwZW9mIG99OmZ1bmN0aW9uKG8pe3JldHVybiBvJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZvLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZvIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2Ygb30sX3R5cGVvZihvKX12YXIgaW5zcGVjdD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvdXRpbC91dGlsLmpzIikuaW5zcGVjdCxFUlJfSU5WQUxJRF9BUkdfVFlQRT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYXNzZXJ0L2J1aWxkL2ludGVybmFsL2Vycm9ycy5qcyIpLmNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFO2Z1bmN0aW9uIGVuZHNXaXRoKHN0cixzZWFyY2gsdGhpc19sZW4pe3JldHVybih2b2lkIDA9PT10aGlzX2xlbnx8dGhpc19sZW4+c3RyLmxlbmd0aCkmJih0aGlzX2xlbj1zdHIubGVuZ3RoKSxzdHIuc3Vic3RyaW5nKHRoaXNfbGVuLXNlYXJjaC5sZW5ndGgsdGhpc19sZW4pPT09c2VhcmNofXZhciBibHVlPSIiLGdyZWVuPSIiLHJlZD0iIix3aGl0ZT0iIixrUmVhZGFibGVPcGVyYXRvcj17ZGVlcFN0cmljdEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3RyaWN0bHkgZGVlcC1lcXVhbDoiLHN0cmljdEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3RyaWN0bHkgZXF1YWw6IixzdHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgcmVmZXJlbmNlLWVxdWFsIHRvICJleHBlY3RlZCI6JyxkZWVwRXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGRlZXAtZXF1YWw6IixlcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIGxvb3NlbHkgZXF1YWw6Iixub3REZWVwU3RyaWN0RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSBzdHJpY3RseSBkZWVwLWVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHN0cmljdGx5IHVuZXF1YWwgdG86Jyxub3RTdHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsbm90RGVlcEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsIHRvOicsbm90RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIGxvb3NlbHkgdW5lcXVhbCB0bzonLG5vdElkZW50aWNhbDoiVmFsdWVzIGlkZW50aWNhbCBidXQgbm90IHJlZmVyZW5jZS1lcXVhbDoifTtmdW5jdGlvbiBjb3B5RXJyb3Ioc291cmNlKXt2YXIga2V5cz1PYmplY3Qua2V5cyhzb3VyY2UpLHRhcmdldD1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2UpKTtyZXR1cm4ga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7dGFyZ2V0W2tleV09c291cmNlW2tleV19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCJtZXNzYWdlIix7dmFsdWU6c291cmNlLm1lc3NhZ2V9KSx0YXJnZXR9ZnVuY3Rpb24gaW5zcGVjdFZhbHVlKHZhbCl7cmV0dXJuIGluc3BlY3QodmFsLHtjb21wYWN0OiExLGN1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MWUzLG1heEFycmF5TGVuZ3RoOjEvMCxzaG93SGlkZGVuOiExLGJyZWFrTGVuZ3RoOjEvMCxzaG93UHJveHk6ITEsc29ydGVkOiEwLGdldHRlcnM6ITB9KX1mdW5jdGlvbiBjcmVhdGVFcnJEaWZmKGFjdHVhbCxleHBlY3RlZCxvcGVyYXRvcil7dmFyIG90aGVyPSIiLHJlcz0iIixsYXN0UG9zPTAsZW5kPSIiLHNraXBwZWQ9ITEsYWN0dWFsSW5zcGVjdGVkPWluc3BlY3RWYWx1ZShhY3R1YWwpLGFjdHVhbExpbmVzPWFjdHVhbEluc3BlY3RlZC5zcGxpdCgiXG4iKSxleHBlY3RlZExpbmVzPWluc3BlY3RWYWx1ZShleHBlY3RlZCkuc3BsaXQoIlxuIiksaT0wLGluZGljYXRvcj0iIjtpZigic3RyaWN0RXF1YWwiPT09b3BlcmF0b3ImJiJvYmplY3QiPT09X3R5cGVvZihhY3R1YWwpJiYib2JqZWN0Ij09PV90eXBlb2YoZXhwZWN0ZWQpJiZudWxsIT09YWN0dWFsJiZudWxsIT09ZXhwZWN0ZWQmJihvcGVyYXRvcj0ic3RyaWN0RXF1YWxPYmplY3QiKSwxPT09YWN0dWFsTGluZXMubGVuZ3RoJiYxPT09ZXhwZWN0ZWRMaW5lcy5sZW5ndGgmJmFjdHVhbExpbmVzWzBdIT09ZXhwZWN0ZWRMaW5lc1swXSl7dmFyIGlucHV0TGVuZ3RoPWFjdHVhbExpbmVzWzBdLmxlbmd0aCtleHBlY3RlZExpbmVzWzBdLmxlbmd0aDtpZihpbnB1dExlbmd0aDw9MTApe2lmKCEoIm9iamVjdCI9PT1fdHlwZW9mKGFjdHVhbCkmJm51bGwhPT1hY3R1YWx8fCJvYmplY3QiPT09X3R5cGVvZihleHBlY3RlZCkmJm51bGwhPT1leHBlY3RlZHx8MD09PWFjdHVhbCYmMD09PWV4cGVjdGVkKSlyZXR1cm4iIi5jb25jYXQoa1JlYWRhYmxlT3BlcmF0b3Jbb3BlcmF0b3JdLCJcblxuIikrIiIuY29uY2F0KGFjdHVhbExpbmVzWzBdLCIgIT09ICIpLmNvbmNhdChleHBlY3RlZExpbmVzWzBdLCJcbiIpfWVsc2UgaWYoInN0cmljdEVxdWFsT2JqZWN0IiE9PW9wZXJhdG9yKXtpZihpbnB1dExlbmd0aDwocHJvY2Vzcy5zdGRlcnImJnByb2Nlc3Muc3RkZXJyLmlzVFRZP3Byb2Nlc3Muc3RkZXJyLmNvbHVtbnM6ODApKXtmb3IoO2FjdHVhbExpbmVzWzBdW2ldPT09ZXhwZWN0ZWRMaW5lc1swXVtpXTspaSsrO2k+MiYmKGluZGljYXRvcj0iXG4gICIuY29uY2F0KGZ1bmN0aW9uIHJlcGVhdChzdHIsY291bnQpe2lmKGNvdW50PU1hdGguZmxvb3IoY291bnQpLDA9PXN0ci5sZW5ndGh8fDA9PWNvdW50KXJldHVybiIiO3ZhciBtYXhDb3VudD1zdHIubGVuZ3RoKmNvdW50O2Zvcihjb3VudD1NYXRoLmZsb29yKE1hdGgubG9nKGNvdW50KS9NYXRoLmxvZygyKSk7Y291bnQ7KXN0cis9c3RyLGNvdW50LS07cmV0dXJuIHN0citzdHIuc3Vic3RyaW5nKDAsbWF4Q291bnQtc3RyLmxlbmd0aCl9KCIgIixpKSwiXiIpLGk9MCl9fX1mb3IodmFyIGE9YWN0dWFsTGluZXNbYWN0dWFsTGluZXMubGVuZ3RoLTFdLGI9ZXhwZWN0ZWRMaW5lc1tleHBlY3RlZExpbmVzLmxlbmd0aC0xXTthPT09YiYmKGkrKzwyP2VuZD0iXG4gICIuY29uY2F0KGEpLmNvbmNhdChlbmQpOm90aGVyPWEsYWN0dWFsTGluZXMucG9wKCksZXhwZWN0ZWRMaW5lcy5wb3AoKSwwIT09YWN0dWFsTGluZXMubGVuZ3RoJiYwIT09ZXhwZWN0ZWRMaW5lcy5sZW5ndGgpOylhPWFjdHVhbExpbmVzW2FjdHVhbExpbmVzLmxlbmd0aC0xXSxiPWV4cGVjdGVkTGluZXNbZXhwZWN0ZWRMaW5lcy5sZW5ndGgtMV07dmFyIG1heExpbmVzPU1hdGgubWF4KGFjdHVhbExpbmVzLmxlbmd0aCxleHBlY3RlZExpbmVzLmxlbmd0aCk7aWYoMD09PW1heExpbmVzKXt2YXIgX2FjdHVhbExpbmVzPWFjdHVhbEluc3BlY3RlZC5zcGxpdCgiXG4iKTtpZihfYWN0dWFsTGluZXMubGVuZ3RoPjMwKWZvcihfYWN0dWFsTGluZXNbMjZdPSIiLmNvbmNhdChibHVlLCIuLi4iKS5jb25jYXQod2hpdGUpO19hY3R1YWxMaW5lcy5sZW5ndGg+Mjc7KV9hY3R1YWxMaW5lcy5wb3AoKTtyZXR1cm4iIi5jb25jYXQoa1JlYWRhYmxlT3BlcmF0b3Iubm90SWRlbnRpY2FsLCJcblxuIikuY29uY2F0KF9hY3R1YWxMaW5lcy5qb2luKCJcbiIpLCJcbiIpfWk+MyYmKGVuZD0iXG4iLmNvbmNhdChibHVlLCIuLi4iKS5jb25jYXQod2hpdGUpLmNvbmNhdChlbmQpLHNraXBwZWQ9ITApLCIiIT09b3RoZXImJihlbmQ9IlxuICAiLmNvbmNhdChvdGhlcikuY29uY2F0KGVuZCksb3RoZXI9IiIpO3ZhciBwcmludGVkTGluZXM9MCxtc2c9a1JlYWRhYmxlT3BlcmF0b3Jbb3BlcmF0b3JdKyJcbiIuY29uY2F0KGdyZWVuLCIrIGFjdHVhbCIpLmNvbmNhdCh3aGl0ZSwiICIpLmNvbmNhdChyZWQsIi0gZXhwZWN0ZWQiKS5jb25jYXQod2hpdGUpLHNraXBwZWRNc2c9IiAiLmNvbmNhdChibHVlLCIuLi4iKS5jb25jYXQod2hpdGUsIiBMaW5lcyBza2lwcGVkIik7Zm9yKGk9MDtpPG1heExpbmVzO2krKyl7dmFyIGN1cj1pLWxhc3RQb3M7aWYoYWN0dWFsTGluZXMubGVuZ3RoPGkrMSljdXI+MSYmaT4yJiYoY3VyPjQ/KHJlcys9IlxuIi5jb25jYXQoYmx1ZSwiLi4uIikuY29uY2F0KHdoaXRlKSxza2lwcGVkPSEwKTpjdXI+MyYmKHJlcys9IlxuICAiLmNvbmNhdChleHBlY3RlZExpbmVzW2ktMl0pLHByaW50ZWRMaW5lcysrKSxyZXMrPSJcbiAgIi5jb25jYXQoZXhwZWN0ZWRMaW5lc1tpLTFdKSxwcmludGVkTGluZXMrKyksbGFzdFBvcz1pLG90aGVyKz0iXG4iLmNvbmNhdChyZWQsIi0iKS5jb25jYXQod2hpdGUsIiAiKS5jb25jYXQoZXhwZWN0ZWRMaW5lc1tpXSkscHJpbnRlZExpbmVzKys7ZWxzZSBpZihleHBlY3RlZExpbmVzLmxlbmd0aDxpKzEpY3VyPjEmJmk+MiYmKGN1cj40PyhyZXMrPSJcbiIuY29uY2F0KGJsdWUsIi4uLiIpLmNvbmNhdCh3aGl0ZSksc2tpcHBlZD0hMCk6Y3VyPjMmJihyZXMrPSJcbiAgIi5jb25jYXQoYWN0dWFsTGluZXNbaS0yXSkscHJpbnRlZExpbmVzKyspLHJlcys9IlxuICAiLmNvbmNhdChhY3R1YWxMaW5lc1tpLTFdKSxwcmludGVkTGluZXMrKyksbGFzdFBvcz1pLHJlcys9IlxuIi5jb25jYXQoZ3JlZW4sIisiKS5jb25jYXQod2hpdGUsIiAiKS5jb25jYXQoYWN0dWFsTGluZXNbaV0pLHByaW50ZWRMaW5lcysrO2Vsc2V7dmFyIGV4cGVjdGVkTGluZT1leHBlY3RlZExpbmVzW2ldLGFjdHVhbExpbmU9YWN0dWFsTGluZXNbaV0sZGl2ZXJnaW5nTGluZXM9YWN0dWFsTGluZSE9PWV4cGVjdGVkTGluZSYmKCFlbmRzV2l0aChhY3R1YWxMaW5lLCIsIil8fGFjdHVhbExpbmUuc2xpY2UoMCwtMSkhPT1leHBlY3RlZExpbmUpO2RpdmVyZ2luZ0xpbmVzJiZlbmRzV2l0aChleHBlY3RlZExpbmUsIiwiKSYmZXhwZWN0ZWRMaW5lLnNsaWNlKDAsLTEpPT09YWN0dWFsTGluZSYmKGRpdmVyZ2luZ0xpbmVzPSExLGFjdHVhbExpbmUrPSIsIiksZGl2ZXJnaW5nTGluZXM/KGN1cj4xJiZpPjImJihjdXI+ND8ocmVzKz0iXG4iLmNvbmNhdChibHVlLCIuLi4iKS5jb25jYXQod2hpdGUpLHNraXBwZWQ9ITApOmN1cj4zJiYocmVzKz0iXG4gICIuY29uY2F0KGFjdHVhbExpbmVzW2ktMl0pLHByaW50ZWRMaW5lcysrKSxyZXMrPSJcbiAgIi5jb25jYXQoYWN0dWFsTGluZXNbaS0xXSkscHJpbnRlZExpbmVzKyspLGxhc3RQb3M9aSxyZXMrPSJcbiIuY29uY2F0KGdyZWVuLCIrIikuY29uY2F0KHdoaXRlLCIgIikuY29uY2F0KGFjdHVhbExpbmUpLG90aGVyKz0iXG4iLmNvbmNhdChyZWQsIi0iKS5jb25jYXQod2hpdGUsIiAiKS5jb25jYXQoZXhwZWN0ZWRMaW5lKSxwcmludGVkTGluZXMrPTIpOihyZXMrPW90aGVyLG90aGVyPSIiLDEhPT1jdXImJjAhPT1pfHwocmVzKz0iXG4gICIuY29uY2F0KGFjdHVhbExpbmUpLHByaW50ZWRMaW5lcysrKSl9aWYocHJpbnRlZExpbmVzPjIwJiZpPG1heExpbmVzLTIpcmV0dXJuIiIuY29uY2F0KG1zZykuY29uY2F0KHNraXBwZWRNc2csIlxuIikuY29uY2F0KHJlcywiXG4iKS5jb25jYXQoYmx1ZSwiLi4uIikuY29uY2F0KHdoaXRlKS5jb25jYXQob3RoZXIsIlxuIikrIiIuY29uY2F0KGJsdWUsIi4uLiIpLmNvbmNhdCh3aGl0ZSl9cmV0dXJuIiIuY29uY2F0KG1zZykuY29uY2F0KHNraXBwZWQ/c2tpcHBlZE1zZzoiIiwiXG4iKS5jb25jYXQocmVzKS5jb25jYXQob3RoZXIpLmNvbmNhdChlbmQpLmNvbmNhdChpbmRpY2F0b3IpfXZhciBBc3NlcnRpb25FcnJvcj1mdW5jdGlvbihfRXJyb3IsX2luc3BlY3QkY3VzdG9tKXshZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLHN1cGVyQ2xhc3Mpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBzdXBlckNsYXNzJiZudWxsIT09c3VwZXJDbGFzcyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3N1YkNsYXNzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MmJnN1cGVyQ2xhc3MucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6c3ViQ2xhc3Msd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxzdXBlckNsYXNzJiZfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3Msc3VwZXJDbGFzcyl9KEFzc2VydGlvbkVycm9yLF9FcnJvcik7dmFyIF9zdXBlcj1mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCl7dmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3Q9X2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO3JldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpe3ZhciByZXN1bHQsU3VwZXI9X2dldFByb3RvdHlwZU9mKERlcml2ZWQpO2lmKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3Qpe3ZhciBOZXdUYXJnZXQ9X2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO3Jlc3VsdD1SZWZsZWN0LmNvbnN0cnVjdChTdXBlcixhcmd1bWVudHMsTmV3VGFyZ2V0KX1lbHNlIHJlc3VsdD1TdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMscmVzdWx0KX19KEFzc2VydGlvbkVycm9yKTtmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihvcHRpb25zKXt2YXIgX3RoaXM7aWYoZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLEFzc2VydGlvbkVycm9yKSwib2JqZWN0IiE9PV90eXBlb2Yob3B0aW9ucyl8fG51bGw9PT1vcHRpb25zKXRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgib3B0aW9ucyIsIk9iamVjdCIsb3B0aW9ucyk7dmFyIG1lc3NhZ2U9b3B0aW9ucy5tZXNzYWdlLG9wZXJhdG9yPW9wdGlvbnMub3BlcmF0b3Isc3RhY2tTdGFydEZuPW9wdGlvbnMuc3RhY2tTdGFydEZuLGFjdHVhbD1vcHRpb25zLmFjdHVhbCxleHBlY3RlZD1vcHRpb25zLmV4cGVjdGVkLGxpbWl0PUVycm9yLnN0YWNrVHJhY2VMaW1pdDtpZihFcnJvci5zdGFja1RyYWNlTGltaXQ9MCxudWxsIT1tZXNzYWdlKV90aGlzPV9zdXBlci5jYWxsKHRoaXMsU3RyaW5nKG1lc3NhZ2UpKTtlbHNlIGlmKHByb2Nlc3Muc3RkZXJyJiZwcm9jZXNzLnN0ZGVyci5pc1RUWSYmKHByb2Nlc3Muc3RkZXJyJiZwcm9jZXNzLnN0ZGVyci5nZXRDb2xvckRlcHRoJiYxIT09cHJvY2Vzcy5zdGRlcnIuZ2V0Q29sb3JEZXB0aCgpPyhibHVlPSIbWzM0bSIsZ3JlZW49IhtbMzJtIix3aGl0ZT0iG1szOW0iLHJlZD0iG1szMW0iKTooYmx1ZT0iIixncmVlbj0iIix3aGl0ZT0iIixyZWQ9IiIpKSwib2JqZWN0Ij09PV90eXBlb2YoYWN0dWFsKSYmbnVsbCE9PWFjdHVhbCYmIm9iamVjdCI9PT1fdHlwZW9mKGV4cGVjdGVkKSYmbnVsbCE9PWV4cGVjdGVkJiYic3RhY2siaW4gYWN0dWFsJiZhY3R1YWwgaW5zdGFuY2VvZiBFcnJvciYmInN0YWNrImluIGV4cGVjdGVkJiZleHBlY3RlZCBpbnN0YW5jZW9mIEVycm9yJiYoYWN0dWFsPWNvcHlFcnJvcihhY3R1YWwpLGV4cGVjdGVkPWNvcHlFcnJvcihleHBlY3RlZCkpLCJkZWVwU3RyaWN0RXF1YWwiPT09b3BlcmF0b3J8fCJzdHJpY3RFcXVhbCI9PT1vcGVyYXRvcilfdGhpcz1fc3VwZXIuY2FsbCh0aGlzLGNyZWF0ZUVyckRpZmYoYWN0dWFsLGV4cGVjdGVkLG9wZXJhdG9yKSk7ZWxzZSBpZigibm90RGVlcFN0cmljdEVxdWFsIj09PW9wZXJhdG9yfHwibm90U3RyaWN0RXF1YWwiPT09b3BlcmF0b3Ipe3ZhciBiYXNlPWtSZWFkYWJsZU9wZXJhdG9yW29wZXJhdG9yXSxyZXM9aW5zcGVjdFZhbHVlKGFjdHVhbCkuc3BsaXQoIlxuIik7aWYoIm5vdFN0cmljdEVxdWFsIj09PW9wZXJhdG9yJiYib2JqZWN0Ij09PV90eXBlb2YoYWN0dWFsKSYmbnVsbCE9PWFjdHVhbCYmKGJhc2U9a1JlYWRhYmxlT3BlcmF0b3Iubm90U3RyaWN0RXF1YWxPYmplY3QpLHJlcy5sZW5ndGg+MzApZm9yKHJlc1syNl09IiIuY29uY2F0KGJsdWUsIi4uLiIpLmNvbmNhdCh3aGl0ZSk7cmVzLmxlbmd0aD4yNzspcmVzLnBvcCgpO190aGlzPTE9PT1yZXMubGVuZ3RoP19zdXBlci5jYWxsKHRoaXMsIiIuY29uY2F0KGJhc2UsIiAiKS5jb25jYXQocmVzWzBdKSk6X3N1cGVyLmNhbGwodGhpcywiIi5jb25jYXQoYmFzZSwiXG5cbiIpLmNvbmNhdChyZXMuam9pbigiXG4iKSwiXG4iKSl9ZWxzZXt2YXIgX3Jlcz1pbnNwZWN0VmFsdWUoYWN0dWFsKSxvdGhlcj0iIixrbm93bk9wZXJhdG9ycz1rUmVhZGFibGVPcGVyYXRvcltvcGVyYXRvcl07Im5vdERlZXBFcXVhbCI9PT1vcGVyYXRvcnx8Im5vdEVxdWFsIj09PW9wZXJhdG9yPyhfcmVzPSIiLmNvbmNhdChrUmVhZGFibGVPcGVyYXRvcltvcGVyYXRvcl0sIlxuXG4iKS5jb25jYXQoX3JlcykpLmxlbmd0aD4xMDI0JiYoX3Jlcz0iIi5jb25jYXQoX3Jlcy5zbGljZSgwLDEwMjEpLCIuLi4iKSk6KG90aGVyPSIiLmNvbmNhdChpbnNwZWN0VmFsdWUoZXhwZWN0ZWQpKSxfcmVzLmxlbmd0aD41MTImJihfcmVzPSIiLmNvbmNhdChfcmVzLnNsaWNlKDAsNTA5KSwiLi4uIikpLG90aGVyLmxlbmd0aD41MTImJihvdGhlcj0iIi5jb25jYXQob3RoZXIuc2xpY2UoMCw1MDkpLCIuLi4iKSksImRlZXBFcXVhbCI9PT1vcGVyYXRvcnx8ImVxdWFsIj09PW9wZXJhdG9yP19yZXM9IiIuY29uY2F0KGtub3duT3BlcmF0b3JzLCJcblxuIikuY29uY2F0KF9yZXMsIlxuXG5zaG91bGQgZXF1YWxcblxuIik6b3RoZXI9IiAiLmNvbmNhdChvcGVyYXRvciwiICIpLmNvbmNhdChvdGhlcikpLF90aGlzPV9zdXBlci5jYWxsKHRoaXMsIiIuY29uY2F0KF9yZXMpLmNvbmNhdChvdGhlcikpfXJldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ9bGltaXQsX3RoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hbWVzc2FnZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIm5hbWUiLHt2YWx1ZToiQXNzZXJ0aW9uRXJyb3IgW0VSUl9BU1NFUlRJT05dIixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLF90aGlzLmNvZGU9IkVSUl9BU1NFUlRJT04iLF90aGlzLmFjdHVhbD1hY3R1YWwsX3RoaXMuZXhwZWN0ZWQ9ZXhwZWN0ZWQsX3RoaXMub3BlcmF0b3I9b3BlcmF0b3IsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLHN0YWNrU3RhcnRGbiksX3RoaXMuc3RhY2ssX3RoaXMubmFtZT0iQXNzZXJ0aW9uRXJyb3IiLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzKX1yZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLHByb3RvUHJvcHMsc3RhdGljUHJvcHMpe3JldHVybiBwcm90b1Byb3BzJiZfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUscHJvdG9Qcm9wcyksc3RhdGljUHJvcHMmJl9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLHN0YXRpY1Byb3BzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksQ29uc3RydWN0b3J9KEFzc2VydGlvbkVycm9yLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24gdG9TdHJpbmcoKXtyZXR1cm4iIi5jb25jYXQodGhpcy5uYW1lLCIgWyIpLmNvbmNhdCh0aGlzLmNvZGUsIl06ICIpLmNvbmNhdCh0aGlzLm1lc3NhZ2UpfX0se2tleTpfaW5zcGVjdCRjdXN0b20sdmFsdWU6ZnVuY3Rpb24gdmFsdWUocmVjdXJzZVRpbWVzLGN0eCl7cmV0dXJuIGluc3BlY3QodGhpcyxfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sY3R4KSx7fSx7Y3VzdG9tSW5zcGVjdDohMSxkZXB0aDowfSkpfX1dKSxBc3NlcnRpb25FcnJvcn0oX3dyYXBOYXRpdmVTdXBlcihFcnJvciksaW5zcGVjdC5jdXN0b20pO21vZHVsZS5leHBvcnRzPUFzc2VydGlvbkVycm9yfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2Fzc2VydC9idWlsZC9pbnRlcm5hbC9lcnJvcnMuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF90eXBlb2Yobyl7cmV0dXJuIF90eXBlb2Y9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24obyl7cmV0dXJuIHR5cGVvZiBvfTpmdW5jdGlvbihvKXtyZXR1cm4gbyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmby5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmbyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIG99LF90eXBlb2Yobyl9ZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8fCExLGRlc2NyaXB0b3IuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkZXNjcmlwdG9yJiYoZGVzY3JpcHRvci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCxfdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksZGVzY3JpcHRvcil9fWZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZyl7dmFyIGtleT1mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsaGludCl7aWYoIm9iamVjdCIhPT1fdHlwZW9mKGlucHV0KXx8bnVsbD09PWlucHV0KXJldHVybiBpbnB1dDt2YXIgcHJpbT1pbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXByaW0pe3ZhciByZXM9cHJpbS5jYWxsKGlucHV0LGhpbnR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1fdHlwZW9mKHJlcykpcmV0dXJuIHJlczt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWhpbnQ/U3RyaW5nOk51bWJlcikoaW5wdXQpfShhcmcsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09X3R5cGVvZihrZXkpP2tleTpTdHJpbmcoa2V5KX1mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobyxwKXtyZXR1cm4gX3NldFByb3RvdHlwZU9mPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLHApe3JldHVybiBvLl9fcHJvdG9fXz1wLG99LF9zZXRQcm90b3R5cGVPZihvLHApfWZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKXt2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdD1mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCl7dmFyIHJlc3VsdCxTdXBlcj1fZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCk7aWYoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCl7dmFyIE5ld1RhcmdldD1fZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7cmVzdWx0PVJlZmxlY3QuY29uc3RydWN0KFN1cGVyLGFyZ3VtZW50cyxOZXdUYXJnZXQpfWVsc2UgcmVzdWx0PVN1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZixjYWxsKXtpZihjYWxsJiYoIm9iamVjdCI9PT1fdHlwZW9mKGNhbGwpfHwiZnVuY3Rpb24iPT10eXBlb2YgY2FsbCkpcmV0dXJuIGNhbGw7aWYodm9pZCAwIT09Y2FsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpe2lmKHZvaWQgMD09PXNlbGYpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gc2VsZn0oc2VsZil9KHRoaXMscmVzdWx0KX19ZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pe3JldHVybiBfZ2V0UHJvdG90eXBlT2Y9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pe3JldHVybiBvLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKG8pfSxfZ2V0UHJvdG90eXBlT2Yobyl9dmFyIGFzc2VydCx1dGlsLGNvZGVzPXt9O2Z1bmN0aW9uIGNyZWF0ZUVycm9yVHlwZShjb2RlLG1lc3NhZ2UsQmFzZSl7QmFzZXx8KEJhc2U9RXJyb3IpO3ZhciBOb2RlRXJyb3I9ZnVuY3Rpb24oX0Jhc2UpeyFmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3Msc3VwZXJDbGFzcyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHN1cGVyQ2xhc3MmJm51bGwhPT1zdXBlckNsYXNzKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7c3ViQ2xhc3MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyYmc3VwZXJDbGFzcy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpzdWJDbGFzcyx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHN1cGVyQ2xhc3MmJl9zZXRQcm90b3R5cGVPZihzdWJDbGFzcyxzdXBlckNsYXNzKX0oTm9kZUVycm9yLF9CYXNlKTt2YXIgX3N1cGVyPV9jcmVhdGVTdXBlcihOb2RlRXJyb3IpO2Z1bmN0aW9uIE5vZGVFcnJvcihhcmcxLGFyZzIsYXJnMyl7dmFyIF90aGlzO3JldHVybiBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsQ29uc3RydWN0b3Ipe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsTm9kZUVycm9yKSxfdGhpcz1fc3VwZXIuY2FsbCh0aGlzLGZ1bmN0aW9uIGdldE1lc3NhZ2UoYXJnMSxhcmcyLGFyZzMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgbWVzc2FnZT9tZXNzYWdlOm1lc3NhZ2UoYXJnMSxhcmcyLGFyZzMpfShhcmcxLGFyZzIsYXJnMykpLF90aGlzLmNvZGU9Y29kZSxfdGhpc31yZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLHByb3RvUHJvcHMsc3RhdGljUHJvcHMpe3JldHVybiBwcm90b1Byb3BzJiZfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUscHJvdG9Qcm9wcyksc3RhdGljUHJvcHMmJl9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLHN0YXRpY1Byb3BzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksQ29uc3RydWN0b3J9KE5vZGVFcnJvcil9KEJhc2UpO2NvZGVzW2NvZGVdPU5vZGVFcnJvcn1mdW5jdGlvbiBvbmVPZihleHBlY3RlZCx0aGluZyl7aWYoQXJyYXkuaXNBcnJheShleHBlY3RlZCkpe3ZhciBsZW49ZXhwZWN0ZWQubGVuZ3RoO3JldHVybiBleHBlY3RlZD1leHBlY3RlZC5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIFN0cmluZyhpKX0pLGxlbj4yPyJvbmUgb2YgIi5jb25jYXQodGhpbmcsIiAiKS5jb25jYXQoZXhwZWN0ZWQuc2xpY2UoMCxsZW4tMSkuam9pbigiLCAiKSwiLCBvciAiKStleHBlY3RlZFtsZW4tMV06Mj09PWxlbj8ib25lIG9mICIuY29uY2F0KHRoaW5nLCIgIikuY29uY2F0KGV4cGVjdGVkWzBdLCIgb3IgIikuY29uY2F0KGV4cGVjdGVkWzFdKToib2YgIi5jb25jYXQodGhpbmcsIiAiKS5jb25jYXQoZXhwZWN0ZWRbMF0pfXJldHVybiJvZiAiLmNvbmNhdCh0aGluZywiICIpLmNvbmNhdChTdHJpbmcoZXhwZWN0ZWQpKX1jcmVhdGVFcnJvclR5cGUoIkVSUl9BTUJJR1VPVVNfQVJHVU1FTlQiLCdUaGUgIiVzIiBhcmd1bWVudCBpcyBhbWJpZ3VvdXMuICVzJyxUeXBlRXJyb3IpLGNyZWF0ZUVycm9yVHlwZSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKG5hbWUsZXhwZWN0ZWQsYWN0dWFsKXt2YXIgZGV0ZXJtaW5lcixtc2c7aWYodm9pZCAwPT09YXNzZXJ0JiYoYXNzZXJ0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9hc3NlcnQvYnVpbGQvYXNzZXJ0LmpzIikpLGFzc2VydCgic3RyaW5nIj09dHlwZW9mIG5hbWUsIiduYW1lJyBtdXN0IGJlIGEgc3RyaW5nIiksInN0cmluZyI9PXR5cGVvZiBleHBlY3RlZCYmZnVuY3Rpb24gc3RhcnRzV2l0aChzdHIsc2VhcmNoLHBvcyl7cmV0dXJuIHN0ci5zdWJzdHIoIXBvc3x8cG9zPDA/MDorcG9zLHNlYXJjaC5sZW5ndGgpPT09c2VhcmNofShleHBlY3RlZCwibm90ICIpPyhkZXRlcm1pbmVyPSJtdXN0IG5vdCBiZSIsZXhwZWN0ZWQ9ZXhwZWN0ZWQucmVwbGFjZSgvXm5vdCAvLCIiKSk6ZGV0ZXJtaW5lcj0ibXVzdCBiZSIsZnVuY3Rpb24gZW5kc1dpdGgoc3RyLHNlYXJjaCx0aGlzX2xlbil7cmV0dXJuKHZvaWQgMD09PXRoaXNfbGVufHx0aGlzX2xlbj5zdHIubGVuZ3RoKSYmKHRoaXNfbGVuPXN0ci5sZW5ndGgpLHN0ci5zdWJzdHJpbmcodGhpc19sZW4tc2VhcmNoLmxlbmd0aCx0aGlzX2xlbik9PT1zZWFyY2h9KG5hbWUsIiBhcmd1bWVudCIpKW1zZz0iVGhlICIuY29uY2F0KG5hbWUsIiAiKS5jb25jYXQoZGV0ZXJtaW5lciwiICIpLmNvbmNhdChvbmVPZihleHBlY3RlZCwidHlwZSIpKTtlbHNle3ZhciB0eXBlPWZ1bmN0aW9uIGluY2x1ZGVzKHN0cixzZWFyY2gsc3RhcnQpe3JldHVybiJudW1iZXIiIT10eXBlb2Ygc3RhcnQmJihzdGFydD0wKSwhKHN0YXJ0K3NlYXJjaC5sZW5ndGg+c3RyLmxlbmd0aCkmJi0xIT09c3RyLmluZGV4T2Yoc2VhcmNoLHN0YXJ0KX0obmFtZSwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50Ijttc2c9J1RoZSAiJy5jb25jYXQobmFtZSwnIiAnKS5jb25jYXQodHlwZSwiICIpLmNvbmNhdChkZXRlcm1pbmVyLCIgIikuY29uY2F0KG9uZU9mKGV4cGVjdGVkLCJ0eXBlIikpfXJldHVybiBtc2crPSIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQoX3R5cGVvZihhY3R1YWwpKX0sVHlwZUVycm9yKSxjcmVhdGVFcnJvclR5cGUoIkVSUl9JTlZBTElEX0FSR19WQUxVRSIsZnVuY3Rpb24obmFtZSx2YWx1ZSl7dmFyIHJlYXNvbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06ImlzIGludmFsaWQiO3ZvaWQgMD09PXV0aWwmJih1dGlsPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiKSk7dmFyIGluc3BlY3RlZD11dGlsLmluc3BlY3QodmFsdWUpO3JldHVybiBpbnNwZWN0ZWQubGVuZ3RoPjEyOCYmKGluc3BlY3RlZD0iIi5jb25jYXQoaW5zcGVjdGVkLnNsaWNlKDAsMTI4KSwiLi4uIikpLCJUaGUgYXJndW1lbnQgJyIuY29uY2F0KG5hbWUsIicgIikuY29uY2F0KHJlYXNvbiwiLiBSZWNlaXZlZCAiKS5jb25jYXQoaW5zcGVjdGVkKX0sVHlwZUVycm9yLFJhbmdlRXJyb3IpLGNyZWF0ZUVycm9yVHlwZSgiRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFIixmdW5jdGlvbihpbnB1dCxuYW1lLHZhbHVlKXt2YXIgdHlwZTtyZXR1cm4gdHlwZT12YWx1ZSYmdmFsdWUuY29uc3RydWN0b3ImJnZhbHVlLmNvbnN0cnVjdG9yLm5hbWU/Imluc3RhbmNlIG9mICIuY29uY2F0KHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpOiJ0eXBlICIuY29uY2F0KF90eXBlb2YodmFsdWUpKSwiRXhwZWN0ZWQgIi5jb25jYXQoaW5wdXQsJyB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSAiJykuY29uY2F0KG5hbWUsJyInKSsiIGZ1bmN0aW9uIGJ1dCBnb3QgIi5jb25jYXQodHlwZSwiLiIpfSxUeXBlRXJyb3IpLGNyZWF0ZUVycm9yVHlwZSgiRVJSX01JU1NJTkdfQVJHUyIsZnVuY3Rpb24oKXtmb3IodmFyIF9sZW49YXJndW1lbnRzLmxlbmd0aCxhcmdzPW5ldyBBcnJheShfbGVuKSxfa2V5PTA7X2tleTxfbGVuO19rZXkrKylhcmdzW19rZXldPWFyZ3VtZW50c1tfa2V5XTt2b2lkIDA9PT1hc3NlcnQmJihhc3NlcnQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Fzc2VydC9idWlsZC9hc3NlcnQuanMiKSksYXNzZXJ0KGFyZ3MubGVuZ3RoPjAsIkF0IGxlYXN0IG9uZSBhcmcgbmVlZHMgdG8gYmUgc3BlY2lmaWVkIik7dmFyIG1zZz0iVGhlICIsbGVuPWFyZ3MubGVuZ3RoO3N3aXRjaChhcmdzPWFyZ3MubWFwKGZ1bmN0aW9uKGEpe3JldHVybiciJy5jb25jYXQoYSwnIicpfSksbGVuKXtjYXNlIDE6bXNnKz0iIi5jb25jYXQoYXJnc1swXSwiIGFyZ3VtZW50Iik7YnJlYWs7Y2FzZSAyOm1zZys9IiIuY29uY2F0KGFyZ3NbMF0sIiBhbmQgIikuY29uY2F0KGFyZ3NbMV0sIiBhcmd1bWVudHMiKTticmVhaztkZWZhdWx0Om1zZys9YXJncy5zbGljZSgwLGxlbi0xKS5qb2luKCIsICIpLG1zZys9IiwgYW5kICIuY29uY2F0KGFyZ3NbbGVuLTFdLCIgYXJndW1lbnRzIil9cmV0dXJuIiIuY29uY2F0KG1zZywiIG11c3QgYmUgc3BlY2lmaWVkIil9LFR5cGVFcnJvciksbW9kdWxlLmV4cG9ydHMuY29kZXM9Y29kZXN9LCIuLi8uLi9ub2RlX21vZHVsZXMvYXNzZXJ0L2J1aWxkL2ludGVybmFsL3V0aWwvY29tcGFyaXNvbnMuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFycixpKXtyZXR1cm4gZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycil7aWYoQXJyYXkuaXNBcnJheShhcnIpKXJldHVybiBhcnJ9KGFycil8fGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLGwpe3ZhciB0PW51bGw9PXI/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmcltTeW1ib2wuaXRlcmF0b3JdfHxyWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9dCl7dmFyIGUsbixpLHUsYT1bXSxmPSEwLG89ITE7dHJ5e2lmKGk9KHQ9dC5jYWxsKHIpKS5uZXh0LDA9PT1sKXtpZihPYmplY3QodCkhPT10KXJldHVybjtmPSExfWVsc2UgZm9yKDshKGY9KGU9aS5jYWxsKHQpKS5kb25lKSYmKGEucHVzaChlLnZhbHVlKSxhLmxlbmd0aCE9PWwpO2Y9ITApO31jYXRjaChyKXtvPSEwLG49cn1maW5hbGx5e3RyeXtpZighZiYmbnVsbCE9dC5yZXR1cm4mJih1PXQucmV0dXJuKCksT2JqZWN0KHUpIT09dSkpcmV0dXJufWZpbmFsbHl7aWYobyl0aHJvdyBufX1yZXR1cm4gYX19KGFycixpKXx8ZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sbWluTGVuKXtpZighbylyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiBvKXJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLG1pbkxlbik7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsLTEpOyJPYmplY3QiPT09biYmby5jb25zdHJ1Y3RvciYmKG49by5jb25zdHJ1Y3Rvci5uYW1lKTtpZigiTWFwIj09PW58fCJTZXQiPT09bilyZXR1cm4gQXJyYXkuZnJvbShvKTtpZigiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLG1pbkxlbil9KGFycixpKXx8ZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLGxlbil7KG51bGw9PWxlbnx8bGVuPmFyci5sZW5ndGgpJiYobGVuPWFyci5sZW5ndGgpO2Zvcih2YXIgaT0wLGFycjI9bmV3IEFycmF5KGxlbik7aTxsZW47aSsrKWFycjJbaV09YXJyW2ldO3JldHVybiBhcnIyfWZ1bmN0aW9uIF90eXBlb2Yobyl7cmV0dXJuIF90eXBlb2Y9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24obyl7cmV0dXJuIHR5cGVvZiBvfTpmdW5jdGlvbihvKXtyZXR1cm4gbyYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmby5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmbyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIG99LF90eXBlb2Yobyl9dmFyIHJlZ2V4RmxhZ3NTdXBwb3J0ZWQ9dm9pZCAwIT09L2EvZy5mbGFncyxhcnJheUZyb21TZXQ9ZnVuY3Rpb24gYXJyYXlGcm9tU2V0KHNldCl7dmFyIGFycmF5PVtdO3JldHVybiBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGFycmF5LnB1c2godmFsdWUpfSksYXJyYXl9LGFycmF5RnJvbU1hcD1mdW5jdGlvbiBhcnJheUZyb21NYXAobWFwKXt2YXIgYXJyYXk9W107cmV0dXJuIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLGtleSl7cmV0dXJuIGFycmF5LnB1c2goW2tleSx2YWx1ZV0pfSksYXJyYXl9LG9iamVjdElzPU9iamVjdC5pcz9PYmplY3QuaXM6X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1pcy9pbmRleC5qcyIpLG9iamVjdEdldE93blByb3BlcnR5U3ltYm9scz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sbnVtYmVySXNOYU49TnVtYmVyLmlzTmFOP051bWJlci5pc05hTjpfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaXMtbmFuL2luZGV4LmpzIik7ZnVuY3Rpb24gdW5jdXJyeVRoaXMoZil7cmV0dXJuIGYuY2FsbC5iaW5kKGYpfXZhciBoYXNPd25Qcm9wZXJ0eT11bmN1cnJ5VGhpcyhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxwcm9wZXJ0eUlzRW51bWVyYWJsZT11bmN1cnJ5VGhpcyhPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKSxvYmplY3RUb1N0cmluZz11bmN1cnJ5VGhpcyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSxfcmVxdWlyZSR0eXBlcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvdXRpbC91dGlsLmpzIikudHlwZXMsaXNBbnlBcnJheUJ1ZmZlcj1fcmVxdWlyZSR0eXBlcy5pc0FueUFycmF5QnVmZmVyLGlzQXJyYXlCdWZmZXJWaWV3PV9yZXF1aXJlJHR5cGVzLmlzQXJyYXlCdWZmZXJWaWV3LGlzRGF0ZT1fcmVxdWlyZSR0eXBlcy5pc0RhdGUsaXNNYXA9X3JlcXVpcmUkdHlwZXMuaXNNYXAsaXNSZWdFeHA9X3JlcXVpcmUkdHlwZXMuaXNSZWdFeHAsaXNTZXQ9X3JlcXVpcmUkdHlwZXMuaXNTZXQsaXNOYXRpdmVFcnJvcj1fcmVxdWlyZSR0eXBlcy5pc05hdGl2ZUVycm9yLGlzQm94ZWRQcmltaXRpdmU9X3JlcXVpcmUkdHlwZXMuaXNCb3hlZFByaW1pdGl2ZSxpc051bWJlck9iamVjdD1fcmVxdWlyZSR0eXBlcy5pc051bWJlck9iamVjdCxpc1N0cmluZ09iamVjdD1fcmVxdWlyZSR0eXBlcy5pc1N0cmluZ09iamVjdCxpc0Jvb2xlYW5PYmplY3Q9X3JlcXVpcmUkdHlwZXMuaXNCb29sZWFuT2JqZWN0LGlzQmlnSW50T2JqZWN0PV9yZXF1aXJlJHR5cGVzLmlzQmlnSW50T2JqZWN0LGlzU3ltYm9sT2JqZWN0PV9yZXF1aXJlJHR5cGVzLmlzU3ltYm9sT2JqZWN0LGlzRmxvYXQzMkFycmF5PV9yZXF1aXJlJHR5cGVzLmlzRmxvYXQzMkFycmF5LGlzRmxvYXQ2NEFycmF5PV9yZXF1aXJlJHR5cGVzLmlzRmxvYXQ2NEFycmF5O2Z1bmN0aW9uIGlzTm9uSW5kZXgoa2V5KXtpZigwPT09a2V5Lmxlbmd0aHx8a2V5Lmxlbmd0aD4xMClyZXR1cm4hMDtmb3IodmFyIGk9MDtpPGtleS5sZW5ndGg7aSsrKXt2YXIgY29kZT1rZXkuY2hhckNvZGVBdChpKTtpZihjb2RlPDQ4fHxjb2RlPjU3KXJldHVybiEwfXJldHVybiAxMD09PWtleS5sZW5ndGgmJmtleT49TWF0aC5wb3coMiwzMil9ZnVuY3Rpb24gZ2V0T3duTm9uSW5kZXhQcm9wZXJ0aWVzKHZhbHVlKXtyZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmZpbHRlcihpc05vbkluZGV4KS5jb25jYXQob2JqZWN0R2V0T3duUHJvcGVydHlTeW1ib2xzKHZhbHVlKS5maWx0ZXIoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5iaW5kKHZhbHVlKSkpfWZ1bmN0aW9uIGNvbXBhcmUoYSxiKXtpZihhPT09YilyZXR1cm4gMDtmb3IodmFyIHg9YS5sZW5ndGgseT1iLmxlbmd0aCxpPTAsbGVuPU1hdGgubWluKHgseSk7aTxsZW47KytpKWlmKGFbaV0hPT1iW2ldKXt4PWFbaV0seT1iW2ldO2JyZWFrfXJldHVybiB4PHk/LTE6eTx4PzE6MH1mdW5jdGlvbiBpbm5lckRlZXBFcXVhbCh2YWwxLHZhbDIsc3RyaWN0LG1lbW9zKXtpZih2YWwxPT09dmFsMilyZXR1cm4gMCE9PXZhbDF8fCghc3RyaWN0fHxvYmplY3RJcyh2YWwxLHZhbDIpKTtpZihzdHJpY3Qpe2lmKCJvYmplY3QiIT09X3R5cGVvZih2YWwxKSlyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHZhbDEmJm51bWJlcklzTmFOKHZhbDEpJiZudW1iZXJJc05hTih2YWwyKTtpZigib2JqZWN0IiE9PV90eXBlb2YodmFsMil8fG51bGw9PT12YWwxfHxudWxsPT09dmFsMilyZXR1cm4hMTtpZihPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsMSkhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsMikpcmV0dXJuITF9ZWxzZXtpZihudWxsPT09dmFsMXx8Im9iamVjdCIhPT1fdHlwZW9mKHZhbDEpKXJldHVybihudWxsPT09dmFsMnx8Im9iamVjdCIhPT1fdHlwZW9mKHZhbDIpKSYmdmFsMT09dmFsMjtpZihudWxsPT09dmFsMnx8Im9iamVjdCIhPT1fdHlwZW9mKHZhbDIpKXJldHVybiExfXZhciB2YWwxVGFnPW9iamVjdFRvU3RyaW5nKHZhbDEpO2lmKHZhbDFUYWchPT1vYmplY3RUb1N0cmluZyh2YWwyKSlyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KHZhbDEpKXtpZih2YWwxLmxlbmd0aCE9PXZhbDIubGVuZ3RoKXJldHVybiExO3ZhciBrZXlzMT1nZXRPd25Ob25JbmRleFByb3BlcnRpZXModmFsMSksa2V5czI9Z2V0T3duTm9uSW5kZXhQcm9wZXJ0aWVzKHZhbDIpO3JldHVybiBrZXlzMS5sZW5ndGg9PT1rZXlzMi5sZW5ndGgmJmtleUNoZWNrKHZhbDEsdmFsMixzdHJpY3QsbWVtb3MsMSxrZXlzMSl9aWYoIltvYmplY3QgT2JqZWN0XSI9PT12YWwxVGFnJiYoIWlzTWFwKHZhbDEpJiZpc01hcCh2YWwyKXx8IWlzU2V0KHZhbDEpJiZpc1NldCh2YWwyKSkpcmV0dXJuITE7aWYoaXNEYXRlKHZhbDEpKXtpZighaXNEYXRlKHZhbDIpfHxEYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwodmFsMSkhPT1EYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwodmFsMikpcmV0dXJuITF9ZWxzZSBpZihpc1JlZ0V4cCh2YWwxKSl7aWYoIWlzUmVnRXhwKHZhbDIpfHwhZnVuY3Rpb24gYXJlU2ltaWxhclJlZ0V4cHMoYSxiKXtyZXR1cm4gcmVnZXhGbGFnc1N1cHBvcnRlZD9hLnNvdXJjZT09PWIuc291cmNlJiZhLmZsYWdzPT09Yi5mbGFnczpSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk9PT1SZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYil9KHZhbDEsdmFsMikpcmV0dXJuITF9ZWxzZSBpZihpc05hdGl2ZUVycm9yKHZhbDEpfHx2YWwxIGluc3RhbmNlb2YgRXJyb3Ipe2lmKHZhbDEubWVzc2FnZSE9PXZhbDIubWVzc2FnZXx8dmFsMS5uYW1lIT09dmFsMi5uYW1lKXJldHVybiExfWVsc2V7aWYoaXNBcnJheUJ1ZmZlclZpZXcodmFsMSkpe2lmKHN0cmljdHx8IWlzRmxvYXQzMkFycmF5KHZhbDEpJiYhaXNGbG9hdDY0QXJyYXkodmFsMSkpe2lmKCFmdW5jdGlvbiBhcmVTaW1pbGFyVHlwZWRBcnJheXMoYSxiKXtyZXR1cm4gYS5ieXRlTGVuZ3RoPT09Yi5ieXRlTGVuZ3RoJiYwPT09Y29tcGFyZShuZXcgVWludDhBcnJheShhLmJ1ZmZlcixhLmJ5dGVPZmZzZXQsYS5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheShiLmJ1ZmZlcixiLmJ5dGVPZmZzZXQsYi5ieXRlTGVuZ3RoKSl9KHZhbDEsdmFsMikpcmV0dXJuITF9ZWxzZSBpZighZnVuY3Rpb24gYXJlU2ltaWxhckZsb2F0QXJyYXlzKGEsYil7aWYoYS5ieXRlTGVuZ3RoIT09Yi5ieXRlTGVuZ3RoKXJldHVybiExO2Zvcih2YXIgb2Zmc2V0PTA7b2Zmc2V0PGEuYnl0ZUxlbmd0aDtvZmZzZXQrKylpZihhW29mZnNldF0hPT1iW29mZnNldF0pcmV0dXJuITE7cmV0dXJuITB9KHZhbDEsdmFsMikpcmV0dXJuITE7dmFyIF9rZXlzPWdldE93bk5vbkluZGV4UHJvcGVydGllcyh2YWwxKSxfa2V5czI9Z2V0T3duTm9uSW5kZXhQcm9wZXJ0aWVzKHZhbDIpO3JldHVybiBfa2V5cy5sZW5ndGg9PT1fa2V5czIubGVuZ3RoJiZrZXlDaGVjayh2YWwxLHZhbDIsc3RyaWN0LG1lbW9zLDAsX2tleXMpfWlmKGlzU2V0KHZhbDEpKXJldHVybiEoIWlzU2V0KHZhbDIpfHx2YWwxLnNpemUhPT12YWwyLnNpemUpJiZrZXlDaGVjayh2YWwxLHZhbDIsc3RyaWN0LG1lbW9zLDIpO2lmKGlzTWFwKHZhbDEpKXJldHVybiEoIWlzTWFwKHZhbDIpfHx2YWwxLnNpemUhPT12YWwyLnNpemUpJiZrZXlDaGVjayh2YWwxLHZhbDIsc3RyaWN0LG1lbW9zLDMpO2lmKGlzQW55QXJyYXlCdWZmZXIodmFsMSkpe2lmKCFmdW5jdGlvbiBhcmVFcXVhbEFycmF5QnVmZmVycyhidWYxLGJ1ZjIpe3JldHVybiBidWYxLmJ5dGVMZW5ndGg9PT1idWYyLmJ5dGVMZW5ndGgmJjA9PT1jb21wYXJlKG5ldyBVaW50OEFycmF5KGJ1ZjEpLG5ldyBVaW50OEFycmF5KGJ1ZjIpKX0odmFsMSx2YWwyKSlyZXR1cm4hMX1lbHNlIGlmKGlzQm94ZWRQcmltaXRpdmUodmFsMSkmJiFmdW5jdGlvbiBpc0VxdWFsQm94ZWRQcmltaXRpdmUodmFsMSx2YWwyKXtyZXR1cm4gaXNOdW1iZXJPYmplY3QodmFsMSk/aXNOdW1iZXJPYmplY3QodmFsMikmJm9iamVjdElzKE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHZhbDEpLE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHZhbDIpKTppc1N0cmluZ09iamVjdCh2YWwxKT9pc1N0cmluZ09iamVjdCh2YWwyKSYmU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodmFsMSk9PT1TdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh2YWwyKTppc0Jvb2xlYW5PYmplY3QodmFsMSk/aXNCb29sZWFuT2JqZWN0KHZhbDIpJiZCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodmFsMSk9PT1Cb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodmFsMik6aXNCaWdJbnRPYmplY3QodmFsMSk/aXNCaWdJbnRPYmplY3QodmFsMikmJkJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHZhbDEpPT09QmlnSW50LnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodmFsMik6aXNTeW1ib2xPYmplY3QodmFsMikmJlN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHZhbDEpPT09U3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodmFsMil9KHZhbDEsdmFsMikpcmV0dXJuITF9cmV0dXJuIGtleUNoZWNrKHZhbDEsdmFsMixzdHJpY3QsbWVtb3MsMCl9ZnVuY3Rpb24gZ2V0RW51bWVyYWJsZXModmFsLGtleXMpe3JldHVybiBrZXlzLmZpbHRlcihmdW5jdGlvbihrKXtyZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUodmFsLGspfSl9ZnVuY3Rpb24ga2V5Q2hlY2sodmFsMSx2YWwyLHN0cmljdCxtZW1vcyxpdGVyYXRpb25UeXBlLGFLZXlzKXtpZig1PT09YXJndW1lbnRzLmxlbmd0aCl7YUtleXM9T2JqZWN0LmtleXModmFsMSk7dmFyIGJLZXlzPU9iamVjdC5rZXlzKHZhbDIpO2lmKGFLZXlzLmxlbmd0aCE9PWJLZXlzLmxlbmd0aClyZXR1cm4hMX1mb3IodmFyIGk9MDtpPGFLZXlzLmxlbmd0aDtpKyspaWYoIWhhc093blByb3BlcnR5KHZhbDIsYUtleXNbaV0pKXJldHVybiExO2lmKHN0cmljdCYmNT09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBzeW1ib2xLZXlzQT1vYmplY3RHZXRPd25Qcm9wZXJ0eVN5bWJvbHModmFsMSk7aWYoMCE9PXN5bWJvbEtleXNBLmxlbmd0aCl7dmFyIGNvdW50PTA7Zm9yKGk9MDtpPHN5bWJvbEtleXNBLmxlbmd0aDtpKyspe3ZhciBrZXk9c3ltYm9sS2V5c0FbaV07aWYocHJvcGVydHlJc0VudW1lcmFibGUodmFsMSxrZXkpKXtpZighcHJvcGVydHlJc0VudW1lcmFibGUodmFsMixrZXkpKXJldHVybiExO2FLZXlzLnB1c2goa2V5KSxjb3VudCsrfWVsc2UgaWYocHJvcGVydHlJc0VudW1lcmFibGUodmFsMixrZXkpKXJldHVybiExfXZhciBzeW1ib2xLZXlzQj1vYmplY3RHZXRPd25Qcm9wZXJ0eVN5bWJvbHModmFsMik7aWYoc3ltYm9sS2V5c0EubGVuZ3RoIT09c3ltYm9sS2V5c0IubGVuZ3RoJiZnZXRFbnVtZXJhYmxlcyh2YWwyLHN5bWJvbEtleXNCKS5sZW5ndGghPT1jb3VudClyZXR1cm4hMX1lbHNle3ZhciBfc3ltYm9sS2V5c0I9b2JqZWN0R2V0T3duUHJvcGVydHlTeW1ib2xzKHZhbDIpO2lmKDAhPT1fc3ltYm9sS2V5c0IubGVuZ3RoJiYwIT09Z2V0RW51bWVyYWJsZXModmFsMixfc3ltYm9sS2V5c0IpLmxlbmd0aClyZXR1cm4hMX19aWYoMD09PWFLZXlzLmxlbmd0aCYmKDA9PT1pdGVyYXRpb25UeXBlfHwxPT09aXRlcmF0aW9uVHlwZSYmMD09PXZhbDEubGVuZ3RofHwwPT09dmFsMS5zaXplKSlyZXR1cm4hMDtpZih2b2lkIDA9PT1tZW1vcyltZW1vcz17dmFsMTpuZXcgTWFwLHZhbDI6bmV3IE1hcCxwb3NpdGlvbjowfTtlbHNle3ZhciB2YWwyTWVtb0E9bWVtb3MudmFsMS5nZXQodmFsMSk7aWYodm9pZCAwIT09dmFsMk1lbW9BKXt2YXIgdmFsMk1lbW9CPW1lbW9zLnZhbDIuZ2V0KHZhbDIpO2lmKHZvaWQgMCE9PXZhbDJNZW1vQilyZXR1cm4gdmFsMk1lbW9BPT09dmFsMk1lbW9CfW1lbW9zLnBvc2l0aW9uKyt9bWVtb3MudmFsMS5zZXQodmFsMSxtZW1vcy5wb3NpdGlvbiksbWVtb3MudmFsMi5zZXQodmFsMixtZW1vcy5wb3NpdGlvbik7dmFyIGFyZUVxPWZ1bmN0aW9uIG9iakVxdWl2KGEsYixzdHJpY3Qsa2V5cyxtZW1vcyxpdGVyYXRpb25UeXBlKXt2YXIgaT0wO2lmKDI9PT1pdGVyYXRpb25UeXBlKXtpZighZnVuY3Rpb24gc2V0RXF1aXYoYSxiLHN0cmljdCxtZW1vKXtmb3IodmFyIHNldD1udWxsLGFWYWx1ZXM9YXJyYXlGcm9tU2V0KGEpLGk9MDtpPGFWYWx1ZXMubGVuZ3RoO2krKyl7dmFyIHZhbD1hVmFsdWVzW2ldO2lmKCJvYmplY3QiPT09X3R5cGVvZih2YWwpJiZudWxsIT09dmFsKW51bGw9PT1zZXQmJihzZXQ9bmV3IFNldCksc2V0LmFkZCh2YWwpO2Vsc2UgaWYoIWIuaGFzKHZhbCkpe2lmKHN0cmljdClyZXR1cm4hMTtpZighc2V0TWlnaHRIYXZlTG9vc2VQcmltKGEsYix2YWwpKXJldHVybiExO251bGw9PT1zZXQmJihzZXQ9bmV3IFNldCksc2V0LmFkZCh2YWwpfX1pZihudWxsIT09c2V0KXtmb3IodmFyIGJWYWx1ZXM9YXJyYXlGcm9tU2V0KGIpLF9pPTA7X2k8YlZhbHVlcy5sZW5ndGg7X2krKyl7dmFyIF92YWw9YlZhbHVlc1tfaV07aWYoIm9iamVjdCI9PT1fdHlwZW9mKF92YWwpJiZudWxsIT09X3ZhbCl7aWYoIXNldEhhc0VxdWFsRWxlbWVudChzZXQsX3ZhbCxzdHJpY3QsbWVtbykpcmV0dXJuITF9ZWxzZSBpZighc3RyaWN0JiYhYS5oYXMoX3ZhbCkmJiFzZXRIYXNFcXVhbEVsZW1lbnQoc2V0LF92YWwsc3RyaWN0LG1lbW8pKXJldHVybiExfXJldHVybiAwPT09c2V0LnNpemV9cmV0dXJuITB9KGEsYixzdHJpY3QsbWVtb3MpKXJldHVybiExfWVsc2UgaWYoMz09PWl0ZXJhdGlvblR5cGUpe2lmKCFmdW5jdGlvbiBtYXBFcXVpdihhLGIsc3RyaWN0LG1lbW8pe2Zvcih2YXIgc2V0PW51bGwsYUVudHJpZXM9YXJyYXlGcm9tTWFwKGEpLGk9MDtpPGFFbnRyaWVzLmxlbmd0aDtpKyspe3ZhciBfYUVudHJpZXMkaT1fc2xpY2VkVG9BcnJheShhRW50cmllc1tpXSwyKSxrZXk9X2FFbnRyaWVzJGlbMF0saXRlbTE9X2FFbnRyaWVzJGlbMV07aWYoIm9iamVjdCI9PT1fdHlwZW9mKGtleSkmJm51bGwhPT1rZXkpbnVsbD09PXNldCYmKHNldD1uZXcgU2V0KSxzZXQuYWRkKGtleSk7ZWxzZXt2YXIgaXRlbTI9Yi5nZXQoa2V5KTtpZih2b2lkIDA9PT1pdGVtMiYmIWIuaGFzKGtleSl8fCFpbm5lckRlZXBFcXVhbChpdGVtMSxpdGVtMixzdHJpY3QsbWVtbykpe2lmKHN0cmljdClyZXR1cm4hMTtpZighbWFwTWlnaHRIYXZlTG9vc2VQcmltKGEsYixrZXksaXRlbTEsbWVtbykpcmV0dXJuITE7bnVsbD09PXNldCYmKHNldD1uZXcgU2V0KSxzZXQuYWRkKGtleSl9fX1pZihudWxsIT09c2V0KXtmb3IodmFyIGJFbnRyaWVzPWFycmF5RnJvbU1hcChiKSxfaTI9MDtfaTI8YkVudHJpZXMubGVuZ3RoO19pMisrKXt2YXIgX2JFbnRyaWVzJF9pPV9zbGljZWRUb0FycmF5KGJFbnRyaWVzW19pMl0sMiksX2tleT1fYkVudHJpZXMkX2lbMF0saXRlbT1fYkVudHJpZXMkX2lbMV07aWYoIm9iamVjdCI9PT1fdHlwZW9mKF9rZXkpJiZudWxsIT09X2tleSl7aWYoIW1hcEhhc0VxdWFsRW50cnkoc2V0LGEsX2tleSxpdGVtLHN0cmljdCxtZW1vKSlyZXR1cm4hMX1lbHNlIGlmKCEoc3RyaWN0fHxhLmhhcyhfa2V5KSYmaW5uZXJEZWVwRXF1YWwoYS5nZXQoX2tleSksaXRlbSwhMSxtZW1vKXx8bWFwSGFzRXF1YWxFbnRyeShzZXQsYSxfa2V5LGl0ZW0sITEsbWVtbykpKXJldHVybiExfXJldHVybiAwPT09c2V0LnNpemV9cmV0dXJuITB9KGEsYixzdHJpY3QsbWVtb3MpKXJldHVybiExfWVsc2UgaWYoMT09PWl0ZXJhdGlvblR5cGUpZm9yKDtpPGEubGVuZ3RoO2krKyl7aWYoIWhhc093blByb3BlcnR5KGEsaSkpe2lmKGhhc093blByb3BlcnR5KGIsaSkpcmV0dXJuITE7Zm9yKHZhciBrZXlzQT1PYmplY3Qua2V5cyhhKTtpPGtleXNBLmxlbmd0aDtpKyspe3ZhciBrZXk9a2V5c0FbaV07aWYoIWhhc093blByb3BlcnR5KGIsa2V5KXx8IWlubmVyRGVlcEVxdWFsKGFba2V5XSxiW2tleV0sc3RyaWN0LG1lbW9zKSlyZXR1cm4hMX1yZXR1cm4ga2V5c0EubGVuZ3RoPT09T2JqZWN0LmtleXMoYikubGVuZ3RofWlmKCFoYXNPd25Qcm9wZXJ0eShiLGkpfHwhaW5uZXJEZWVwRXF1YWwoYVtpXSxiW2ldLHN0cmljdCxtZW1vcykpcmV0dXJuITF9Zm9yKGk9MDtpPGtleXMubGVuZ3RoO2krKyl7dmFyIF9rZXkyPWtleXNbaV07aWYoIWlubmVyRGVlcEVxdWFsKGFbX2tleTJdLGJbX2tleTJdLHN0cmljdCxtZW1vcykpcmV0dXJuITF9cmV0dXJuITB9KHZhbDEsdmFsMixzdHJpY3QsYUtleXMsbWVtb3MsaXRlcmF0aW9uVHlwZSk7cmV0dXJuIG1lbW9zLnZhbDEuZGVsZXRlKHZhbDEpLG1lbW9zLnZhbDIuZGVsZXRlKHZhbDIpLGFyZUVxfWZ1bmN0aW9uIHNldEhhc0VxdWFsRWxlbWVudChzZXQsdmFsMSxzdHJpY3QsbWVtbyl7Zm9yKHZhciBzZXRWYWx1ZXM9YXJyYXlGcm9tU2V0KHNldCksaT0wO2k8c2V0VmFsdWVzLmxlbmd0aDtpKyspe3ZhciB2YWwyPXNldFZhbHVlc1tpXTtpZihpbm5lckRlZXBFcXVhbCh2YWwxLHZhbDIsc3RyaWN0LG1lbW8pKXJldHVybiBzZXQuZGVsZXRlKHZhbDIpLCEwfXJldHVybiExfWZ1bmN0aW9uIGZpbmRMb29zZU1hdGNoaW5nUHJpbWl0aXZlcyhwcmltKXtzd2l0Y2goX3R5cGVvZihwcmltKSl7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBudWxsO2Nhc2Uib2JqZWN0IjpyZXR1cm47Y2FzZSJzeW1ib2wiOnJldHVybiExO2Nhc2Uic3RyaW5nIjpwcmltPStwcmltO2Nhc2UibnVtYmVyIjppZihudW1iZXJJc05hTihwcmltKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBzZXRNaWdodEhhdmVMb29zZVByaW0oYSxiLHByaW0pe3ZhciBhbHRWYWx1ZT1maW5kTG9vc2VNYXRjaGluZ1ByaW1pdGl2ZXMocHJpbSk7cmV0dXJuIG51bGwhPWFsdFZhbHVlP2FsdFZhbHVlOmIuaGFzKGFsdFZhbHVlKSYmIWEuaGFzKGFsdFZhbHVlKX1mdW5jdGlvbiBtYXBNaWdodEhhdmVMb29zZVByaW0oYSxiLHByaW0saXRlbSxtZW1vKXt2YXIgYWx0VmFsdWU9ZmluZExvb3NlTWF0Y2hpbmdQcmltaXRpdmVzKHByaW0pO2lmKG51bGwhPWFsdFZhbHVlKXJldHVybiBhbHRWYWx1ZTt2YXIgY3VyQj1iLmdldChhbHRWYWx1ZSk7cmV0dXJuISh2b2lkIDA9PT1jdXJCJiYhYi5oYXMoYWx0VmFsdWUpfHwhaW5uZXJEZWVwRXF1YWwoaXRlbSxjdXJCLCExLG1lbW8pKSYmKCFhLmhhcyhhbHRWYWx1ZSkmJmlubmVyRGVlcEVxdWFsKGl0ZW0sY3VyQiwhMSxtZW1vKSl9ZnVuY3Rpb24gbWFwSGFzRXF1YWxFbnRyeShzZXQsbWFwLGtleTEsaXRlbTEsc3RyaWN0LG1lbW8pe2Zvcih2YXIgc2V0VmFsdWVzPWFycmF5RnJvbVNldChzZXQpLGk9MDtpPHNldFZhbHVlcy5sZW5ndGg7aSsrKXt2YXIga2V5Mj1zZXRWYWx1ZXNbaV07aWYoaW5uZXJEZWVwRXF1YWwoa2V5MSxrZXkyLHN0cmljdCxtZW1vKSYmaW5uZXJEZWVwRXF1YWwoaXRlbTEsbWFwLmdldChrZXkyKSxzdHJpY3QsbWVtbykpcmV0dXJuIHNldC5kZWxldGUoa2V5MiksITB9cmV0dXJuITF9bW9kdWxlLmV4cG9ydHM9e2lzRGVlcEVxdWFsOmZ1bmN0aW9uIGlzRGVlcEVxdWFsKHZhbDEsdmFsMil7cmV0dXJuIGlubmVyRGVlcEVxdWFsKHZhbDEsdmFsMixmYWxzZSl9LGlzRGVlcFN0cmljdEVxdWFsOmZ1bmN0aW9uIGlzRGVlcFN0cmljdEVxdWFsKHZhbDEsdmFsMil7cmV0dXJuIGlubmVyRGVlcEVxdWFsKHZhbDEsdmFsMix0cnVlKX19fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO2V4cG9ydHMuYnl0ZUxlbmd0aD1mdW5jdGlvbiBieXRlTGVuZ3RoKGI2NCl7dmFyIGxlbnM9Z2V0TGVucyhiNjQpLHZhbGlkTGVuPWxlbnNbMF0scGxhY2VIb2xkZXJzTGVuPWxlbnNbMV07cmV0dXJuIDMqKHZhbGlkTGVuK3BsYWNlSG9sZGVyc0xlbikvNC1wbGFjZUhvbGRlcnNMZW59LGV4cG9ydHMudG9CeXRlQXJyYXk9ZnVuY3Rpb24gdG9CeXRlQXJyYXkoYjY0KXt2YXIgdG1wLGksbGVucz1nZXRMZW5zKGI2NCksdmFsaWRMZW49bGVuc1swXSxwbGFjZUhvbGRlcnNMZW49bGVuc1sxXSxhcnI9bmV3IEFycihmdW5jdGlvbiBfYnl0ZUxlbmd0aChiNjQsdmFsaWRMZW4scGxhY2VIb2xkZXJzTGVuKXtyZXR1cm4gMyoodmFsaWRMZW4rcGxhY2VIb2xkZXJzTGVuKS80LXBsYWNlSG9sZGVyc0xlbn0oMCx2YWxpZExlbixwbGFjZUhvbGRlcnNMZW4pKSxjdXJCeXRlPTAsbGVuPXBsYWNlSG9sZGVyc0xlbj4wP3ZhbGlkTGVuLTQ6dmFsaWRMZW47Zm9yKGk9MDtpPGxlbjtpKz00KXRtcD1yZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldPDwxOHxyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSsxKV08PDEyfHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKzIpXTw8NnxyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSszKV0sYXJyW2N1ckJ5dGUrK109dG1wPj4xNiYyNTUsYXJyW2N1ckJ5dGUrK109dG1wPj44JjI1NSxhcnJbY3VyQnl0ZSsrXT0yNTUmdG1wOzI9PT1wbGFjZUhvbGRlcnNMZW4mJih0bXA9cmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXTw8MnxyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSsxKV0+PjQsYXJyW2N1ckJ5dGUrK109MjU1JnRtcCk7MT09PXBsYWNlSG9sZGVyc0xlbiYmKHRtcD1yZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldPDwxMHxyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSsxKV08PDR8cmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkrMildPj4yLGFycltjdXJCeXRlKytdPXRtcD4+OCYyNTUsYXJyW2N1ckJ5dGUrK109MjU1JnRtcCk7cmV0dXJuIGFycn0sZXhwb3J0cy5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIGZyb21CeXRlQXJyYXkodWludDgpe2Zvcih2YXIgdG1wLGxlbj11aW50OC5sZW5ndGgsZXh0cmFCeXRlcz1sZW4lMyxwYXJ0cz1bXSxpPTAsbGVuMj1sZW4tZXh0cmFCeXRlcztpPGxlbjI7aSs9MTYzODMpcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCxpLGkrMTYzODM+bGVuMj9sZW4yOmkrMTYzODMpKTsxPT09ZXh0cmFCeXRlcz8odG1wPXVpbnQ4W2xlbi0xXSxwYXJ0cy5wdXNoKGxvb2t1cFt0bXA+PjJdK2xvb2t1cFt0bXA8PDQmNjNdKyI9PSIpKToyPT09ZXh0cmFCeXRlcyYmKHRtcD0odWludDhbbGVuLTJdPDw4KSt1aW50OFtsZW4tMV0scGFydHMucHVzaChsb29rdXBbdG1wPj4xMF0rbG9va3VwW3RtcD4+NCY2M10rbG9va3VwW3RtcDw8MiY2M10rIj0iKSk7cmV0dXJuIHBhcnRzLmpvaW4oIiIpfTtmb3IodmFyIGxvb2t1cD1bXSxyZXZMb29rdXA9W10sQXJyPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LGNvZGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGk9MDtpPDY0OysraSlsb29rdXBbaV09Y29kZVtpXSxyZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXT1pO2Z1bmN0aW9uIGdldExlbnMoYjY0KXt2YXIgbGVuPWI2NC5sZW5ndGg7aWYobGVuJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgdmFsaWRMZW49YjY0LmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PXZhbGlkTGVuJiYodmFsaWRMZW49bGVuKSxbdmFsaWRMZW4sdmFsaWRMZW49PT1sZW4/MDo0LXZhbGlkTGVuJTRdfWZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NChudW0pe3JldHVybiBsb29rdXBbbnVtPj4xOCY2M10rbG9va3VwW251bT4+MTImNjNdK2xvb2t1cFtudW0+PjYmNjNdK2xvb2t1cFs2MyZudW1dfWZ1bmN0aW9uIGVuY29kZUNodW5rKHVpbnQ4LHN0YXJ0LGVuZCl7Zm9yKHZhciB0bXAsb3V0cHV0PVtdLGk9c3RhcnQ7aTxlbmQ7aSs9Myl0bXA9KHVpbnQ4W2ldPDwxNiYxNjcxMTY4MCkrKHVpbnQ4W2krMV08PDgmNjUyODApKygyNTUmdWludDhbaSsyXSksb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpO3JldHVybiBvdXRwdXQuam9pbigiIil9cmV2TG9va3VwWyItIi5jaGFyQ29kZUF0KDApXT02MixyZXZMb29rdXBbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2JuLmpzL2xpYi9ibi5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhc3NlcnQodmFsLG1zZyl7aWYoIXZhbCl0aHJvdyBuZXcgRXJyb3IobXNnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGluaGVyaXRzKGN0b3Isc3VwZXJDdG9yKXtjdG9yLnN1cGVyXz1zdXBlckN0b3I7dmFyIFRlbXBDdG9yPWZ1bmN0aW9uKCl7fTtUZW1wQ3Rvci5wcm90b3R5cGU9c3VwZXJDdG9yLnByb3RvdHlwZSxjdG9yLnByb3RvdHlwZT1uZXcgVGVtcEN0b3IsY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3I9Y3Rvcn1mdW5jdGlvbiBCTihudW1iZXIsYmFzZSxlbmRpYW4pe2lmKEJOLmlzQk4obnVtYmVyKSlyZXR1cm4gbnVtYmVyO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1udW1iZXImJigibGUiIT09YmFzZSYmImJlIiE9PWJhc2V8fChlbmRpYW49YmFzZSxiYXNlPTEwKSx0aGlzLl9pbml0KG51bWJlcnx8MCxiYXNlfHwxMCxlbmRpYW58fCJiZSIpKX12YXIgQnVmZmVyOyJvYmplY3QiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPUJOOmV4cG9ydHMuQk49Qk4sQk4uQk49Qk4sQk4ud29yZFNpemU9MjY7dHJ5e0J1ZmZlcj0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOl9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKS5CdWZmZXJ9Y2F0Y2goZSl7fWZ1bmN0aW9uIHBhcnNlSGV4NEJpdHMoc3RyaW5nLGluZGV4KXt2YXIgYz1zdHJpbmcuY2hhckNvZGVBdChpbmRleCk7cmV0dXJuIGM+PTQ4JiZjPD01Nz9jLTQ4OmM+PTY1JiZjPD03MD9jLTU1OmM+PTk3JiZjPD0xMDI/Yy04Nzp2b2lkIGFzc2VydCghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIitzdHJpbmcpfWZ1bmN0aW9uIHBhcnNlSGV4Qnl0ZShzdHJpbmcsbG93ZXJCb3VuZCxpbmRleCl7dmFyIHI9cGFyc2VIZXg0Qml0cyhzdHJpbmcsaW5kZXgpO3JldHVybiBpbmRleC0xPj1sb3dlckJvdW5kJiYocnw9cGFyc2VIZXg0Qml0cyhzdHJpbmcsaW5kZXgtMSk8PDQpLHJ9ZnVuY3Rpb24gcGFyc2VCYXNlKHN0cixzdGFydCxlbmQsbXVsKXtmb3IodmFyIHI9MCxiPTAsbGVuPU1hdGgubWluKHN0ci5sZW5ndGgsZW5kKSxpPXN0YXJ0O2k8bGVuO2krKyl7dmFyIGM9c3RyLmNoYXJDb2RlQXQoaSktNDg7cio9bXVsLGI9Yz49NDk/Yy00OSsxMDpjPj0xNz9jLTE3KzEwOmMsYXNzZXJ0KGM+PTAmJmI8bXVsLCJJbnZhbGlkIGNoYXJhY3RlciIpLHIrPWJ9cmV0dXJuIHJ9ZnVuY3Rpb24gbW92ZShkZXN0LHNyYyl7ZGVzdC53b3Jkcz1zcmMud29yZHMsZGVzdC5sZW5ndGg9c3JjLmxlbmd0aCxkZXN0Lm5lZ2F0aXZlPXNyYy5uZWdhdGl2ZSxkZXN0LnJlZD1zcmMucmVkfWlmKEJOLmlzQk49ZnVuY3Rpb24gaXNCTihudW0pe3JldHVybiBudW0gaW5zdGFuY2VvZiBCTnx8bnVsbCE9PW51bSYmIm9iamVjdCI9PXR5cGVvZiBudW0mJm51bS5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUJOLndvcmRTaXplJiZBcnJheS5pc0FycmF5KG51bS53b3Jkcyl9LEJOLm1heD1mdW5jdGlvbiBtYXgobGVmdCxyaWdodCl7cmV0dXJuIGxlZnQuY21wKHJpZ2h0KT4wP2xlZnQ6cmlnaHR9LEJOLm1pbj1mdW5jdGlvbiBtaW4obGVmdCxyaWdodCl7cmV0dXJuIGxlZnQuY21wKHJpZ2h0KTwwP2xlZnQ6cmlnaHR9LEJOLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbiBpbml0KG51bWJlcixiYXNlLGVuZGlhbil7aWYoIm51bWJlciI9PXR5cGVvZiBudW1iZXIpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIobnVtYmVyLGJhc2UsZW5kaWFuKTtpZigib2JqZWN0Ij09dHlwZW9mIG51bWJlcilyZXR1cm4gdGhpcy5faW5pdEFycmF5KG51bWJlcixiYXNlLGVuZGlhbik7ImhleCI9PT1iYXNlJiYoYmFzZT0xNiksYXNzZXJ0KGJhc2U9PT0oMHxiYXNlKSYmYmFzZT49MiYmYmFzZTw9MzYpO3ZhciBzdGFydD0wOyItIj09PShudW1iZXI9bnVtYmVyLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHN0YXJ0KyssdGhpcy5uZWdhdGl2ZT0xKSxzdGFydDxudW1iZXIubGVuZ3RoJiYoMTY9PT1iYXNlP3RoaXMuX3BhcnNlSGV4KG51bWJlcixzdGFydCxlbmRpYW4pOih0aGlzLl9wYXJzZUJhc2UobnVtYmVyLGJhc2Usc3RhcnQpLCJsZSI9PT1lbmRpYW4mJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiYXNlLGVuZGlhbikpKX0sQk4ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uIF9pbml0TnVtYmVyKG51bWJlcixiYXNlLGVuZGlhbil7bnVtYmVyPDAmJih0aGlzLm5lZ2F0aXZlPTEsbnVtYmVyPS1udW1iZXIpLG51bWJlcjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmbnVtYmVyXSx0aGlzLmxlbmd0aD0xKTpudW1iZXI8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmbnVtYmVyLG51bWJlci82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGFzc2VydChudW1iZXI8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmbnVtYmVyLG51bWJlci82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09ZW5kaWFuJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYmFzZSxlbmRpYW4pfSxCTi5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbiBfaW5pdEFycmF5KG51bWJlcixiYXNlLGVuZGlhbil7aWYoYXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgbnVtYmVyLmxlbmd0aCksbnVtYmVyLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChudW1iZXIubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIGosdyxvZmY9MDtpZigiYmUiPT09ZW5kaWFuKWZvcihpPW51bWJlci5sZW5ndGgtMSxqPTA7aT49MDtpLT0zKXc9bnVtYmVyW2ldfG51bWJlcltpLTFdPDw4fG51bWJlcltpLTJdPDwxNix0aGlzLndvcmRzW2pdfD13PDxvZmYmNjcxMDg4NjMsdGhpcy53b3Jkc1tqKzFdPXc+Pj4yNi1vZmYmNjcxMDg4NjMsKG9mZis9MjQpPj0yNiYmKG9mZi09MjYsaisrKTtlbHNlIGlmKCJsZSI9PT1lbmRpYW4pZm9yKGk9MCxqPTA7aTxudW1iZXIubGVuZ3RoO2krPTMpdz1udW1iZXJbaV18bnVtYmVyW2krMV08PDh8bnVtYmVyW2krMl08PDE2LHRoaXMud29yZHNbal18PXc8PG9mZiY2NzEwODg2Myx0aGlzLndvcmRzW2orMV09dz4+PjI2LW9mZiY2NzEwODg2Mywob2ZmKz0yNCk+PTI2JiYob2ZmLT0yNixqKyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSxCTi5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uIF9wYXJzZUhleChudW1iZXIsc3RhcnQsZW5kaWFuKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKG51bWJlci5sZW5ndGgtc3RhcnQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIHcsb2ZmPTAsaj0wO2lmKCJiZSI9PT1lbmRpYW4pZm9yKGk9bnVtYmVyLmxlbmd0aC0xO2k+PXN0YXJ0O2ktPTIpdz1wYXJzZUhleEJ5dGUobnVtYmVyLHN0YXJ0LGkpPDxvZmYsdGhpcy53b3Jkc1tqXXw9NjcxMDg4NjMmdyxvZmY+PTE4PyhvZmYtPTE4LGorPTEsdGhpcy53b3Jkc1tqXXw9dz4+PjI2KTpvZmYrPTg7ZWxzZSBmb3IoaT0obnVtYmVyLmxlbmd0aC1zdGFydCklMj09MD9zdGFydCsxOnN0YXJ0O2k8bnVtYmVyLmxlbmd0aDtpKz0yKXc9cGFyc2VIZXhCeXRlKG51bWJlcixzdGFydCxpKTw8b2ZmLHRoaXMud29yZHNbal18PTY3MTA4ODYzJncsb2ZmPj0xOD8ob2ZmLT0xOCxqKz0xLHRoaXMud29yZHNbal18PXc+Pj4yNik6b2ZmKz04O3RoaXMuX3N0cmlwKCl9LEJOLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uIF9wYXJzZUJhc2UobnVtYmVyLGJhc2Usc3RhcnQpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBsaW1iTGVuPTAsbGltYlBvdz0xO2xpbWJQb3c8PTY3MTA4ODYzO2xpbWJQb3cqPWJhc2UpbGltYkxlbisrO2xpbWJMZW4tLSxsaW1iUG93PWxpbWJQb3cvYmFzZXwwO2Zvcih2YXIgdG90YWw9bnVtYmVyLmxlbmd0aC1zdGFydCxtb2Q9dG90YWwlbGltYkxlbixlbmQ9TWF0aC5taW4odG90YWwsdG90YWwtbW9kKStzdGFydCx3b3JkPTAsaT1zdGFydDtpPGVuZDtpKz1saW1iTGVuKXdvcmQ9cGFyc2VCYXNlKG51bWJlcixpLGkrbGltYkxlbixiYXNlKSx0aGlzLmltdWxuKGxpbWJQb3cpLHRoaXMud29yZHNbMF0rd29yZDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz13b3JkOnRoaXMuX2lhZGRuKHdvcmQpO2lmKDAhPT1tb2Qpe3ZhciBwb3c9MTtmb3Iod29yZD1wYXJzZUJhc2UobnVtYmVyLGksbnVtYmVyLmxlbmd0aCxiYXNlKSxpPTA7aTxtb2Q7aSsrKXBvdyo9YmFzZTt0aGlzLmltdWxuKHBvdyksdGhpcy53b3Jkc1swXSt3b3JkPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXdvcmQ6dGhpcy5faWFkZG4od29yZCl9dGhpcy5fc3RyaXAoKX0sQk4ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24gY29weShkZXN0KXtkZXN0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspZGVzdC53b3Jkc1tpXT10aGlzLndvcmRzW2ldO2Rlc3QubGVuZ3RoPXRoaXMubGVuZ3RoLGRlc3QubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxkZXN0LnJlZD10aGlzLnJlZH0sQk4ucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uIF9tb3ZlKGRlc3Qpe21vdmUoZGVzdCx0aGlzKX0sQk4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uIGNsb25lKCl7dmFyIHI9bmV3IEJOKG51bGwpO3JldHVybiB0aGlzLmNvcHkocikscn0sQk4ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24gX2V4cGFuZChzaXplKXtmb3IoO3RoaXMubGVuZ3RoPHNpemU7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sQk4ucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbiBzdHJpcCgpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEJOLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24gX25vcm1TaWduKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcil0cnl7Qk4ucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPWluc3BlY3R9Y2F0Y2goZSl7Qk4ucHJvdG90eXBlLmluc3BlY3Q9aW5zcGVjdH1lbHNlIEJOLnByb3RvdHlwZS5pbnNwZWN0PWluc3BlY3Q7ZnVuY3Rpb24gaW5zcGVjdCgpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifXZhciB6ZXJvcz1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxncm91cFNpemVzPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLGdyb3VwQmFzZXM9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07Qk4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uIHRvU3RyaW5nKGJhc2UscGFkZGluZyl7dmFyIG91dDtpZihwYWRkaW5nPTB8cGFkZGluZ3x8MSwxNj09PShiYXNlPWJhc2V8fDEwKXx8ImhleCI9PT1iYXNlKXtvdXQ9IiI7Zm9yKHZhciBvZmY9MCxjYXJyeT0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKyl7dmFyIHc9dGhpcy53b3Jkc1tpXSx3b3JkPSgxNjc3NzIxNSYodzw8b2ZmfGNhcnJ5KSkudG9TdHJpbmcoMTYpO2NhcnJ5PXc+Pj4yNC1vZmYmMTY3NzcyMTUsKG9mZis9Mik+PTI2JiYob2ZmLT0yNixpLS0pLG91dD0wIT09Y2Fycnl8fGkhPT10aGlzLmxlbmd0aC0xP3plcm9zWzYtd29yZC5sZW5ndGhdK3dvcmQrb3V0OndvcmQrb3V0fWZvcigwIT09Y2FycnkmJihvdXQ9Y2FycnkudG9TdHJpbmcoMTYpK291dCk7b3V0Lmxlbmd0aCVwYWRkaW5nIT09MDspb3V0PSIwIitvdXQ7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYob3V0PSItIitvdXQpLG91dH1pZihiYXNlPT09KDB8YmFzZSkmJmJhc2U+PTImJmJhc2U8PTM2KXt2YXIgZ3JvdXBTaXplPWdyb3VwU2l6ZXNbYmFzZV0sZ3JvdXBCYXNlPWdyb3VwQmFzZXNbYmFzZV07b3V0PSIiO3ZhciBjPXRoaXMuY2xvbmUoKTtmb3IoYy5uZWdhdGl2ZT0wOyFjLmlzWmVybygpOyl7dmFyIHI9Yy5tb2Rybihncm91cEJhc2UpLnRvU3RyaW5nKGJhc2UpO291dD0oYz1jLmlkaXZuKGdyb3VwQmFzZSkpLmlzWmVybygpP3Irb3V0Onplcm9zW2dyb3VwU2l6ZS1yLmxlbmd0aF0rcitvdXR9Zm9yKHRoaXMuaXNaZXJvKCkmJihvdXQ9IjAiK291dCk7b3V0Lmxlbmd0aCVwYWRkaW5nIT09MDspb3V0PSIwIitvdXQ7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYob3V0PSItIitvdXQpLG91dH1hc3NlcnQoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sQk4ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uIHRvTnVtYmVyKCl7dmFyIHJldD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cmV0Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cmV0Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmYXNzZXJ0KCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcmV0OnJldH0sQk4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbiB0b0pTT04oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNiwyKX0sQnVmZmVyJiYoQk4ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uIHRvQnVmZmVyKGVuZGlhbixsZW5ndGgpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEJ1ZmZlcixlbmRpYW4sbGVuZ3RoKX0pLEJOLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uIHRvQXJyYXkoZW5kaWFuLGxlbmd0aCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZW5kaWFuLGxlbmd0aCl9O2Z1bmN0aW9uIHNtYWxsTXVsVG8oc2VsZixudW0sb3V0KXtvdXQubmVnYXRpdmU9bnVtLm5lZ2F0aXZlXnNlbGYubmVnYXRpdmU7dmFyIGxlbj1zZWxmLmxlbmd0aCtudW0ubGVuZ3RofDA7b3V0Lmxlbmd0aD1sZW4sbGVuPWxlbi0xfDA7dmFyIGE9MHxzZWxmLndvcmRzWzBdLGI9MHxudW0ud29yZHNbMF0scj1hKmIsbG89NjcxMDg4NjMmcixjYXJyeT1yLzY3MTA4ODY0fDA7b3V0LndvcmRzWzBdPWxvO2Zvcih2YXIgaz0xO2s8bGVuO2srKyl7Zm9yKHZhciBuY2Fycnk9Y2Fycnk+Pj4yNixyd29yZD02NzEwODg2MyZjYXJyeSxtYXhKPU1hdGgubWluKGssbnVtLmxlbmd0aC0xKSxqPU1hdGgubWF4KDAsay1zZWxmLmxlbmd0aCsxKTtqPD1tYXhKO2orKyl7dmFyIGk9ay1qfDA7bmNhcnJ5Kz0ocj0oYT0wfHNlbGYud29yZHNbaV0pKihiPTB8bnVtLndvcmRzW2pdKStyd29yZCkvNjcxMDg4NjR8MCxyd29yZD02NzEwODg2MyZyfW91dC53b3Jkc1trXT0wfHJ3b3JkLGNhcnJ5PTB8bmNhcnJ5fXJldHVybiAwIT09Y2Fycnk/b3V0LndvcmRzW2tdPTB8Y2Fycnk6b3V0Lmxlbmd0aC0tLG91dC5fc3RyaXAoKX1CTi5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24gdG9BcnJheUxpa2UoQXJyYXlUeXBlLGVuZGlhbixsZW5ndGgpe3RoaXMuX3N0cmlwKCk7dmFyIGJ5dGVMZW5ndGg9dGhpcy5ieXRlTGVuZ3RoKCkscmVxTGVuZ3RoPWxlbmd0aHx8TWF0aC5tYXgoMSxieXRlTGVuZ3RoKTthc3NlcnQoYnl0ZUxlbmd0aDw9cmVxTGVuZ3RoLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksYXNzZXJ0KHJlcUxlbmd0aD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgcmVzPWZ1bmN0aW9uIGFsbG9jYXRlKEFycmF5VHlwZSxzaXplKXtyZXR1cm4gQXJyYXlUeXBlLmFsbG9jVW5zYWZlP0FycmF5VHlwZS5hbGxvY1Vuc2FmZShzaXplKTpuZXcgQXJyYXlUeXBlKHNpemUpfShBcnJheVR5cGUscmVxTGVuZ3RoKTtyZXR1cm4gdGhpc1siX3RvQXJyYXlMaWtlIisoImxlIj09PWVuZGlhbj8iTEUiOiJCRSIpXShyZXMsYnl0ZUxlbmd0aCkscmVzfSxCTi5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24gX3RvQXJyYXlMaWtlTEUocmVzLGJ5dGVMZW5ndGgpe2Zvcih2YXIgcG9zaXRpb249MCxjYXJyeT0wLGk9MCxzaGlmdD0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgd29yZD10aGlzLndvcmRzW2ldPDxzaGlmdHxjYXJyeTtyZXNbcG9zaXRpb24rK109MjU1JndvcmQscG9zaXRpb248cmVzLmxlbmd0aCYmKHJlc1twb3NpdGlvbisrXT13b3JkPj44JjI1NSkscG9zaXRpb248cmVzLmxlbmd0aCYmKHJlc1twb3NpdGlvbisrXT13b3JkPj4xNiYyNTUpLDY9PT1zaGlmdD8ocG9zaXRpb248cmVzLmxlbmd0aCYmKHJlc1twb3NpdGlvbisrXT13b3JkPj4yNCYyNTUpLGNhcnJ5PTAsc2hpZnQ9MCk6KGNhcnJ5PXdvcmQ+Pj4yNCxzaGlmdCs9Mil9aWYocG9zaXRpb248cmVzLmxlbmd0aClmb3IocmVzW3Bvc2l0aW9uKytdPWNhcnJ5O3Bvc2l0aW9uPHJlcy5sZW5ndGg7KXJlc1twb3NpdGlvbisrXT0wfSxCTi5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24gX3RvQXJyYXlMaWtlQkUocmVzLGJ5dGVMZW5ndGgpe2Zvcih2YXIgcG9zaXRpb249cmVzLmxlbmd0aC0xLGNhcnJ5PTAsaT0wLHNoaWZ0PTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciB3b3JkPXRoaXMud29yZHNbaV08PHNoaWZ0fGNhcnJ5O3Jlc1twb3NpdGlvbi0tXT0yNTUmd29yZCxwb3NpdGlvbj49MCYmKHJlc1twb3NpdGlvbi0tXT13b3JkPj44JjI1NSkscG9zaXRpb24+PTAmJihyZXNbcG9zaXRpb24tLV09d29yZD4+MTYmMjU1KSw2PT09c2hpZnQ/KHBvc2l0aW9uPj0wJiYocmVzW3Bvc2l0aW9uLS1dPXdvcmQ+PjI0JjI1NSksY2Fycnk9MCxzaGlmdD0wKTooY2Fycnk9d29yZD4+PjI0LHNoaWZ0Kz0yKX1pZihwb3NpdGlvbj49MClmb3IocmVzW3Bvc2l0aW9uLS1dPWNhcnJ5O3Bvc2l0aW9uPj0wOylyZXNbcG9zaXRpb24tLV09MH0sTWF0aC5jbHozMj9CTi5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbiBfY291bnRCaXRzKHcpe3JldHVybiAzMi1NYXRoLmNsejMyKHcpfTpCTi5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbiBfY291bnRCaXRzKHcpe3ZhciB0PXcscj0wO3JldHVybiB0Pj00MDk2JiYocis9MTMsdD4+Pj0xMyksdD49NjQmJihyKz03LHQ+Pj49NyksdD49OCYmKHIrPTQsdD4+Pj00KSx0Pj0yJiYocis9Mix0Pj4+PTIpLHIrdH0sQk4ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbiBfemVyb0JpdHModyl7aWYoMD09PXcpcmV0dXJuIDI2O3ZhciB0PXcscj0wO3JldHVybiA4MTkxJnR8fChyKz0xMyx0Pj4+PTEzKSwxMjcmdHx8KHIrPTcsdD4+Pj03KSwxNSZ0fHwocis9NCx0Pj4+PTQpLDMmdHx8KHIrPTIsdD4+Pj0yKSwxJnR8fHIrKyxyfSxCTi5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uIGJpdExlbmd0aCgpe3ZhciB3PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0saGk9dGhpcy5fY291bnRCaXRzKHcpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkraGl9LEJOLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbiB6ZXJvQml0cygpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciByPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgYj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2ldKTtpZihyKz1iLDI2IT09YilicmVha31yZXR1cm4gcn0sQk4ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24gYnl0ZUxlbmd0aCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sQk4ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbiB0b1R3b3Mod2lkdGgpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHdpZHRoKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEJOLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbiBmcm9tVHdvcyh3aWR0aCl7cmV0dXJuIHRoaXMudGVzdG4od2lkdGgtMSk/dGhpcy5ub3RuKHdpZHRoKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxCTi5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24gaXNOZWcoKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEJOLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24gbmVnKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEJOLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uIGluZWcoKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEJOLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uIGl1b3IobnVtKXtmb3IoO3RoaXMubGVuZ3RoPG51bS5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGk9MDtpPG51bS5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09dGhpcy53b3Jkc1tpXXxudW0ud29yZHNbaV07cmV0dXJuIHRoaXMuX3N0cmlwKCl9LEJOLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24gaW9yKG51bSl7cmV0dXJuIGFzc2VydCgwPT09KHRoaXMubmVnYXRpdmV8bnVtLm5lZ2F0aXZlKSksdGhpcy5pdW9yKG51bSl9LEJOLnByb3RvdHlwZS5vcj1mdW5jdGlvbiBvcihudW0pe3JldHVybiB0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IobnVtKTpudW0uY2xvbmUoKS5pb3IodGhpcyl9LEJOLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24gdW9yKG51bSl7cmV0dXJuIHRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IobnVtKTpudW0uY2xvbmUoKS5pdW9yKHRoaXMpfSxCTi5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24gaXVhbmQobnVtKXt2YXIgYjtiPXRoaXMubGVuZ3RoPm51bS5sZW5ndGg/bnVtOnRoaXM7Zm9yKHZhciBpPTA7aTxiLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT10aGlzLndvcmRzW2ldJm51bS53b3Jkc1tpXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sQk4ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24gaWFuZChudW0pe3JldHVybiBhc3NlcnQoMD09PSh0aGlzLm5lZ2F0aXZlfG51bS5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQobnVtKX0sQk4ucHJvdG90eXBlLmFuZD1mdW5jdGlvbiBhbmQobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChudW0pOm51bS5jbG9uZSgpLmlhbmQodGhpcyl9LEJOLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uIHVhbmQobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQobnVtKTpudW0uY2xvbmUoKS5pdWFuZCh0aGlzKX0sQk4ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uIGl1eG9yKG51bSl7dmFyIGEsYjt0aGlzLmxlbmd0aD5udW0ubGVuZ3RoPyhhPXRoaXMsYj1udW0pOihhPW51bSxiPXRoaXMpO2Zvcih2YXIgaT0wO2k8Yi5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09YS53b3Jkc1tpXV5iLndvcmRzW2ldO2lmKHRoaXMhPT1hKWZvcig7aTxhLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT1hLndvcmRzW2ldO3JldHVybiB0aGlzLmxlbmd0aD1hLmxlbmd0aCx0aGlzLl9zdHJpcCgpfSxCTi5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbiBpeG9yKG51bSl7cmV0dXJuIGFzc2VydCgwPT09KHRoaXMubmVnYXRpdmV8bnVtLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihudW0pfSxCTi5wcm90b3R5cGUueG9yPWZ1bmN0aW9uIHhvcihudW0pe3JldHVybiB0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKG51bSk6bnVtLmNsb25lKCkuaXhvcih0aGlzKX0sQk4ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24gdXhvcihudW0pe3JldHVybiB0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihudW0pOm51bS5jbG9uZSgpLml1eG9yKHRoaXMpfSxCTi5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24gaW5vdG4od2lkdGgpe2Fzc2VydCgibnVtYmVyIj09dHlwZW9mIHdpZHRoJiZ3aWR0aD49MCk7dmFyIGJ5dGVzTmVlZGVkPTB8TWF0aC5jZWlsKHdpZHRoLzI2KSxiaXRzTGVmdD13aWR0aCUyNjt0aGlzLl9leHBhbmQoYnl0ZXNOZWVkZWQpLGJpdHNMZWZ0PjAmJmJ5dGVzTmVlZGVkLS07Zm9yKHZhciBpPTA7aTxieXRlc05lZWRlZDtpKyspdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tpXTtyZXR1cm4gYml0c0xlZnQ+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LWJpdHNMZWZ0KSx0aGlzLl9zdHJpcCgpfSxCTi5wcm90b3R5cGUubm90bj1mdW5jdGlvbiBub3RuKHdpZHRoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHdpZHRoKX0sQk4ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24gc2V0bihiaXQsdmFsKXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXQmJmJpdD49MCk7dmFyIG9mZj1iaXQvMjZ8MCx3Yml0PWJpdCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKG9mZisxKSx0aGlzLndvcmRzW29mZl09dmFsP3RoaXMud29yZHNbb2ZmXXwxPDx3Yml0OnRoaXMud29yZHNbb2ZmXSZ+KDE8PHdiaXQpLHRoaXMuX3N0cmlwKCl9LEJOLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uIGlhZGQobnVtKXt2YXIgcixhLGI7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1udW0ubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxyPXRoaXMuaXN1YihudW0pLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PW51bS5uZWdhdGl2ZSlyZXR1cm4gbnVtLm5lZ2F0aXZlPTAscj10aGlzLmlzdWIobnVtKSxudW0ubmVnYXRpdmU9MSxyLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPm51bS5sZW5ndGg/KGE9dGhpcyxiPW51bSk6KGE9bnVtLGI9dGhpcyk7Zm9yKHZhciBjYXJyeT0wLGk9MDtpPGIubGVuZ3RoO2krKylyPSgwfGEud29yZHNbaV0pKygwfGIud29yZHNbaV0pK2NhcnJ5LHRoaXMud29yZHNbaV09NjcxMDg4NjMmcixjYXJyeT1yPj4+MjY7Zm9yKDswIT09Y2FycnkmJmk8YS5sZW5ndGg7aSsrKXI9KDB8YS53b3Jkc1tpXSkrY2FycnksdGhpcy53b3Jkc1tpXT02NzEwODg2MyZyLGNhcnJ5PXI+Pj4yNjtpZih0aGlzLmxlbmd0aD1hLmxlbmd0aCwwIT09Y2FycnkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Y2FycnksdGhpcy5sZW5ndGgrKztlbHNlIGlmKGEhPT10aGlzKWZvcig7aTxhLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT1hLndvcmRzW2ldO3JldHVybiB0aGlzfSxCTi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uIGFkZChudW0pe3ZhciByZXM7cmV0dXJuIDAhPT1udW0ubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhudW0ubmVnYXRpdmU9MCxyZXM9dGhpcy5zdWIobnVtKSxudW0ubmVnYXRpdmVePTEscmVzKTowPT09bnVtLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHJlcz1udW0uc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxyZXMpOnRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQobnVtKTpudW0uY2xvbmUoKS5pYWRkKHRoaXMpfSxCTi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbiBpc3ViKG51bSl7aWYoMCE9PW51bS5uZWdhdGl2ZSl7bnVtLm5lZ2F0aXZlPTA7dmFyIHI9dGhpcy5pYWRkKG51bSk7cmV0dXJuIG51bS5uZWdhdGl2ZT0xLHIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQobnVtKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgYSxiLGNtcD10aGlzLmNtcChudW0pO2lmKDA9PT1jbXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO2NtcD4wPyhhPXRoaXMsYj1udW0pOihhPW51bSxiPXRoaXMpO2Zvcih2YXIgY2Fycnk9MCxpPTA7aTxiLmxlbmd0aDtpKyspY2Fycnk9KHI9KDB8YS53b3Jkc1tpXSktKDB8Yi53b3Jkc1tpXSkrY2FycnkpPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJnI7Zm9yKDswIT09Y2FycnkmJmk8YS5sZW5ndGg7aSsrKWNhcnJ5PShyPSgwfGEud29yZHNbaV0pK2NhcnJ5KT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZyO2lmKDA9PT1jYXJyeSYmaTxhLmxlbmd0aCYmYSE9PXRoaXMpZm9yKDtpPGEubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPWEud29yZHNbaV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGkpLGEhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLl9zdHJpcCgpfSxCTi5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uIHN1YihudW0pe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihudW0pfTt2YXIgY29tYjEwTXVsVG89ZnVuY3Rpb24gY29tYjEwTXVsVG8oc2VsZixudW0sb3V0KXt2YXIgbG8sbWlkLGhpLGE9c2VsZi53b3JkcyxiPW51bS53b3JkcyxvPW91dC53b3JkcyxjPTAsYTA9MHxhWzBdLGFsMD04MTkxJmEwLGFoMD1hMD4+PjEzLGExPTB8YVsxXSxhbDE9ODE5MSZhMSxhaDE9YTE+Pj4xMyxhMj0wfGFbMl0sYWwyPTgxOTEmYTIsYWgyPWEyPj4+MTMsYTM9MHxhWzNdLGFsMz04MTkxJmEzLGFoMz1hMz4+PjEzLGE0PTB8YVs0XSxhbDQ9ODE5MSZhNCxhaDQ9YTQ+Pj4xMyxhNT0wfGFbNV0sYWw1PTgxOTEmYTUsYWg1PWE1Pj4+MTMsYTY9MHxhWzZdLGFsNj04MTkxJmE2LGFoNj1hNj4+PjEzLGE3PTB8YVs3XSxhbDc9ODE5MSZhNyxhaDc9YTc+Pj4xMyxhOD0wfGFbOF0sYWw4PTgxOTEmYTgsYWg4PWE4Pj4+MTMsYTk9MHxhWzldLGFsOT04MTkxJmE5LGFoOT1hOT4+PjEzLGIwPTB8YlswXSxibDA9ODE5MSZiMCxiaDA9YjA+Pj4xMyxiMT0wfGJbMV0sYmwxPTgxOTEmYjEsYmgxPWIxPj4+MTMsYjI9MHxiWzJdLGJsMj04MTkxJmIyLGJoMj1iMj4+PjEzLGIzPTB8YlszXSxibDM9ODE5MSZiMyxiaDM9YjM+Pj4xMyxiND0wfGJbNF0sYmw0PTgxOTEmYjQsYmg0PWI0Pj4+MTMsYjU9MHxiWzVdLGJsNT04MTkxJmI1LGJoNT1iNT4+PjEzLGI2PTB8Yls2XSxibDY9ODE5MSZiNixiaDY9YjY+Pj4xMyxiNz0wfGJbN10sYmw3PTgxOTEmYjcsYmg3PWI3Pj4+MTMsYjg9MHxiWzhdLGJsOD04MTkxJmI4LGJoOD1iOD4+PjEzLGI5PTB8Yls5XSxibDk9ODE5MSZiOSxiaDk9Yjk+Pj4xMztvdXQubmVnYXRpdmU9c2VsZi5uZWdhdGl2ZV5udW0ubmVnYXRpdmUsb3V0Lmxlbmd0aD0xOTt2YXIgdzA9KGMrKGxvPU1hdGguaW11bChhbDAsYmwwKSl8MCkrKCg4MTkxJihtaWQ9KG1pZD1NYXRoLmltdWwoYWwwLGJoMCkpK01hdGguaW11bChhaDAsYmwwKXwwKSk8PDEzKXwwO2M9KChoaT1NYXRoLmltdWwoYWgwLGJoMCkpKyhtaWQ+Pj4xMyl8MCkrKHcwPj4+MjYpfDAsdzAmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDEsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWwxLGJoMCkpK01hdGguaW11bChhaDEsYmwwKXwwLGhpPU1hdGguaW11bChhaDEsYmgwKTt2YXIgdzE9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmwxKXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoMSl8MCkrTWF0aC5pbXVsKGFoMCxibDEpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmgxKXwwKSsobWlkPj4+MTMpfDApKyh3MT4+PjI2KXwwLHcxJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWwyLGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsMixiaDApKStNYXRoLmltdWwoYWgyLGJsMCl8MCxoaT1NYXRoLmltdWwoYWgyLGJoMCksbG89bG8rTWF0aC5pbXVsKGFsMSxibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmgxKXwwKStNYXRoLmltdWwoYWgxLGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoMSl8MDt2YXIgdzI9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmwyKXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoMil8MCkrTWF0aC5pbXVsKGFoMCxibDIpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmgyKXwwKSsobWlkPj4+MTMpfDApKyh3Mj4+PjI2KXwwLHcyJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWwzLGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsMyxiaDApKStNYXRoLmltdWwoYWgzLGJsMCl8MCxoaT1NYXRoLmltdWwoYWgzLGJoMCksbG89bG8rTWF0aC5pbXVsKGFsMixibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmgxKXwwKStNYXRoLmltdWwoYWgyLGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoMSl8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDIpfDApK01hdGguaW11bChhaDEsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDEsYmgyKXwwO3ZhciB3Mz0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDMpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmgzKXwwKStNYXRoLmltdWwoYWgwLGJsMyl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDMpfDApKyhtaWQ+Pj4xMyl8MCkrKHczPj4+MjYpfDAsdzMmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDQsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw0LGJoMCkpK01hdGguaW11bChhaDQsYmwwKXwwLGhpPU1hdGguaW11bChhaDQsYmgwKSxsbz1sbytNYXRoLmltdWwoYWwzLGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDEpfDApK01hdGguaW11bChhaDMsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDMsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDIsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoMil8MCkrTWF0aC5pbXVsKGFoMixibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsMSxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmgzKXwwKStNYXRoLmltdWwoYWgxLGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoMyl8MDt2YXIgdzQ9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmw0KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoNCl8MCkrTWF0aC5pbXVsKGFoMCxibDQpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmg0KXwwKSsobWlkPj4+MTMpfDApKyh3ND4+PjI2KXwwLHc0Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw1LGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsNSxiaDApKStNYXRoLmltdWwoYWg1LGJsMCl8MCxoaT1NYXRoLmltdWwoYWg1LGJoMCksbG89bG8rTWF0aC5pbXVsKGFsNCxibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmgxKXwwKStNYXRoLmltdWwoYWg0LGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoMSl8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDIpfDApK01hdGguaW11bChhaDMsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDMsYmgyKXwwLGxvPWxvK01hdGguaW11bChhbDIsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoMyl8MCkrTWF0aC5pbXVsKGFoMixibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsMSxibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmg0KXwwKStNYXRoLmltdWwoYWgxLGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoNCl8MDt2YXIgdzU9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmw1KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoNSl8MCkrTWF0aC5pbXVsKGFoMCxibDUpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmg1KXwwKSsobWlkPj4+MTMpfDApKyh3NT4+PjI2KXwwLHc1Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw2LGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsNixiaDApKStNYXRoLmltdWwoYWg2LGJsMCl8MCxoaT1NYXRoLmltdWwoYWg2LGJoMCksbG89bG8rTWF0aC5pbXVsKGFsNSxibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmgxKXwwKStNYXRoLmltdWwoYWg1LGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoMSl8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDIpfDApK01hdGguaW11bChhaDQsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDQsYmgyKXwwLGxvPWxvK01hdGguaW11bChhbDMsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoMyl8MCkrTWF0aC5pbXVsKGFoMyxibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmg0KXwwKStNYXRoLmltdWwoYWgyLGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDUpfDApK01hdGguaW11bChhaDEsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDEsYmg1KXwwO3ZhciB3Nj0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDYpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg2KXwwKStNYXRoLmltdWwoYWgwLGJsNil8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDYpfDApKyhtaWQ+Pj4xMyl8MCkrKHc2Pj4+MjYpfDAsdzYmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDcsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw3LGJoMCkpK01hdGguaW11bChhaDcsYmwwKXwwLGhpPU1hdGguaW11bChhaDcsYmgwKSxsbz1sbytNYXRoLmltdWwoYWw2LGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDEpfDApK01hdGguaW11bChhaDYsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDYsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDUsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoMil8MCkrTWF0aC5pbXVsKGFoNSxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmgzKXwwKStNYXRoLmltdWwoYWg0LGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDQpfDApK01hdGguaW11bChhaDMsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDMsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDIsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoNSl8MCkrTWF0aC5pbXVsKGFoMixibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsMSxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmg2KXwwKStNYXRoLmltdWwoYWgxLGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoNil8MDt2YXIgdzc9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmw3KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoNyl8MCkrTWF0aC5pbXVsKGFoMCxibDcpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmg3KXwwKSsobWlkPj4+MTMpfDApKyh3Nz4+PjI2KXwwLHc3Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw4LGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOCxiaDApKStNYXRoLmltdWwoYWg4LGJsMCl8MCxoaT1NYXRoLmltdWwoYWg4LGJoMCksbG89bG8rTWF0aC5pbXVsKGFsNyxibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmgxKXwwKStNYXRoLmltdWwoYWg3LGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoMSl8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDIpfDApK01hdGguaW11bChhaDYsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDYsYmgyKXwwLGxvPWxvK01hdGguaW11bChhbDUsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoMyl8MCkrTWF0aC5pbXVsKGFoNSxibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg0KXwwKStNYXRoLmltdWwoYWg0LGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDUpfDApK01hdGguaW11bChhaDMsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDMsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDIsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoNil8MCkrTWF0aC5pbXVsKGFoMixibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsMSxibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmg3KXwwKStNYXRoLmltdWwoYWgxLGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoNyl8MDt2YXIgdzg9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmw4KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoOCl8MCkrTWF0aC5pbXVsKGFoMCxibDgpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmg4KXwwKSsobWlkPj4+MTMpfDApKyh3OD4+PjI2KXwwLHc4Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDApKStNYXRoLmltdWwoYWg5LGJsMCl8MCxoaT1NYXRoLmltdWwoYWg5LGJoMCksbG89bG8rTWF0aC5pbXVsKGFsOCxibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmgxKXwwKStNYXRoLmltdWwoYWg4LGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoMSl8MCxsbz1sbytNYXRoLmltdWwoYWw3LGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDIpfDApK01hdGguaW11bChhaDcsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDcsYmgyKXwwLGxvPWxvK01hdGguaW11bChhbDYsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoMyl8MCkrTWF0aC5pbXVsKGFoNixibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmg0KXwwKStNYXRoLmltdWwoYWg1LGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDUpfDApK01hdGguaW11bChhaDQsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDQsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDMsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoNil8MCkrTWF0aC5pbXVsKGFoMyxibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmg3KXwwKStNYXRoLmltdWwoYWgyLGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDgpfDApK01hdGguaW11bChhaDEsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDEsYmg4KXwwO3ZhciB3OT0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg5KXwwKStNYXRoLmltdWwoYWgwLGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHc5Pj4+MjYpfDAsdzkmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmwxKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoMSkpK01hdGguaW11bChhaDksYmwxKXwwLGhpPU1hdGguaW11bChhaDksYmgxKSxsbz1sbytNYXRoLmltdWwoYWw4LGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDIpfDApK01hdGguaW11bChhaDgsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDgsYmgyKXwwLGxvPWxvK01hdGguaW11bChhbDcsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoMyl8MCkrTWF0aC5pbXVsKGFoNyxibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmg0KXwwKStNYXRoLmltdWwoYWg2LGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDUpfDApK01hdGguaW11bChhaDUsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDUsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDQsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoNil8MCkrTWF0aC5pbXVsKGFoNCxibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmg3KXwwKStNYXRoLmltdWwoYWgzLGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDgpfDApK01hdGguaW11bChhaDIsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDIsYmg4KXwwO3ZhciB3MTA9KGMrKGxvPWxvK01hdGguaW11bChhbDEsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoOSl8MCkrTWF0aC5pbXVsKGFoMSxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDEsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTA+Pj4yNil8MCx3MTAmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmwyKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoMikpK01hdGguaW11bChhaDksYmwyKXwwLGhpPU1hdGguaW11bChhaDksYmgyKSxsbz1sbytNYXRoLmltdWwoYWw4LGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDMpfDApK01hdGguaW11bChhaDgsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDgsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDcsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoNCl8MCkrTWF0aC5pbXVsKGFoNyxibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmg1KXwwKStNYXRoLmltdWwoYWg2LGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDYpfDApK01hdGguaW11bChhaDUsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDUsYmg2KXwwLGxvPWxvK01hdGguaW11bChhbDQsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoNyl8MCkrTWF0aC5pbXVsKGFoNCxibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDcpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmg4KXwwKStNYXRoLmltdWwoYWgzLGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoOCl8MDt2YXIgdzExPShjKyhsbz1sbytNYXRoLmltdWwoYWwyLGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDkpfDApK01hdGguaW11bChhaDIsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgyLGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzExPj4+MjYpfDAsdzExJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsMyksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDMpKStNYXRoLmltdWwoYWg5LGJsMyl8MCxoaT1NYXRoLmltdWwoYWg5LGJoMyksbG89bG8rTWF0aC5pbXVsKGFsOCxibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmg0KXwwKStNYXRoLmltdWwoYWg4LGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWw3LGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDUpfDApK01hdGguaW11bChhaDcsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDcsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDYsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoNil8MCkrTWF0aC5pbXVsKGFoNixibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmg3KXwwKStNYXRoLmltdWwoYWg1LGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDgpfDApK01hdGguaW11bChhaDQsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDQsYmg4KXwwO3ZhciB3MTI9KGMrKGxvPWxvK01hdGguaW11bChhbDMsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoOSl8MCkrTWF0aC5pbXVsKGFoMyxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDMsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTI+Pj4yNil8MCx3MTImPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmw0KSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoNCkpK01hdGguaW11bChhaDksYmw0KXwwLGhpPU1hdGguaW11bChhaDksYmg0KSxsbz1sbytNYXRoLmltdWwoYWw4LGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDUpfDApK01hdGguaW11bChhaDgsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDgsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDcsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoNil8MCkrTWF0aC5pbXVsKGFoNyxibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmg3KXwwKStNYXRoLmltdWwoYWg2LGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDgpfDApK01hdGguaW11bChhaDUsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDUsYmg4KXwwO3ZhciB3MTM9KGMrKGxvPWxvK01hdGguaW11bChhbDQsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoOSl8MCkrTWF0aC5pbXVsKGFoNCxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDQsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTM+Pj4yNil8MCx3MTMmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmw1KSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoNSkpK01hdGguaW11bChhaDksYmw1KXwwLGhpPU1hdGguaW11bChhaDksYmg1KSxsbz1sbytNYXRoLmltdWwoYWw4LGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDYpfDApK01hdGguaW11bChhaDgsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDgsYmg2KXwwLGxvPWxvK01hdGguaW11bChhbDcsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoNyl8MCkrTWF0aC5pbXVsKGFoNyxibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDcpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmg4KXwwKStNYXRoLmltdWwoYWg2LGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoOCl8MDt2YXIgdzE0PShjKyhsbz1sbytNYXRoLmltdWwoYWw1LGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDkpfDApK01hdGguaW11bChhaDUsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWg1LGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzE0Pj4+MjYpfDAsdzE0Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsNiksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDYpKStNYXRoLmltdWwoYWg5LGJsNil8MCxoaT1NYXRoLmltdWwoYWg5LGJoNiksbG89bG8rTWF0aC5pbXVsKGFsOCxibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmg3KXwwKStNYXRoLmltdWwoYWg4LGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWw3LGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDgpfDApK01hdGguaW11bChhaDcsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDcsYmg4KXwwO3ZhciB3MTU9KGMrKGxvPWxvK01hdGguaW11bChhbDYsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoOSl8MCkrTWF0aC5pbXVsKGFoNixibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDYsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTU+Pj4yNil8MCx3MTUmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmw3KSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoNykpK01hdGguaW11bChhaDksYmw3KXwwLGhpPU1hdGguaW11bChhaDksYmg3KSxsbz1sbytNYXRoLmltdWwoYWw4LGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDgpfDApK01hdGguaW11bChhaDgsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDgsYmg4KXwwO3ZhciB3MTY9KGMrKGxvPWxvK01hdGguaW11bChhbDcsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoOSl8MCkrTWF0aC5pbXVsKGFoNyxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDcsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTY+Pj4yNil8MCx3MTYmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmw4KSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoOCkpK01hdGguaW11bChhaDksYmw4KXwwLGhpPU1hdGguaW11bChhaDksYmg4KTt2YXIgdzE3PShjKyhsbz1sbytNYXRoLmltdWwoYWw4LGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDkpfDApK01hdGguaW11bChhaDgsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWg4LGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzE3Pj4+MjYpfDAsdzE3Jj02NzEwODg2Mzt2YXIgdzE4PShjKyhsbz1NYXRoLmltdWwoYWw5LGJsOSkpfDApKygoODE5MSYobWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDkpKStNYXRoLmltdWwoYWg5LGJsOSl8MCkpPDwxMyl8MDtyZXR1cm4gYz0oKGhpPU1hdGguaW11bChhaDksYmg5KSkrKG1pZD4+PjEzKXwwKSsodzE4Pj4+MjYpfDAsdzE4Jj02NzEwODg2MyxvWzBdPXcwLG9bMV09dzEsb1syXT13MixvWzNdPXczLG9bNF09dzQsb1s1XT13NSxvWzZdPXc2LG9bN109dzcsb1s4XT13OCxvWzldPXc5LG9bMTBdPXcxMCxvWzExXT13MTEsb1sxMl09dzEyLG9bMTNdPXcxMyxvWzE0XT13MTQsb1sxNV09dzE1LG9bMTZdPXcxNixvWzE3XT13MTcsb1sxOF09dzE4LDAhPT1jJiYob1sxOV09YyxvdXQubGVuZ3RoKyspLG91dH07ZnVuY3Rpb24gYmlnTXVsVG8oc2VsZixudW0sb3V0KXtvdXQubmVnYXRpdmU9bnVtLm5lZ2F0aXZlXnNlbGYubmVnYXRpdmUsb3V0Lmxlbmd0aD1zZWxmLmxlbmd0aCtudW0ubGVuZ3RoO2Zvcih2YXIgY2Fycnk9MCxobmNhcnJ5PTAsaz0wO2s8b3V0Lmxlbmd0aC0xO2srKyl7dmFyIG5jYXJyeT1obmNhcnJ5O2huY2Fycnk9MDtmb3IodmFyIHJ3b3JkPTY3MTA4ODYzJmNhcnJ5LG1heEo9TWF0aC5taW4oayxudW0ubGVuZ3RoLTEpLGo9TWF0aC5tYXgoMCxrLXNlbGYubGVuZ3RoKzEpO2o8PW1heEo7aisrKXt2YXIgaT1rLWoscj0oMHxzZWxmLndvcmRzW2ldKSooMHxudW0ud29yZHNbal0pLGxvPTY3MTA4ODYzJnI7cndvcmQ9NjcxMDg4NjMmKGxvPWxvK3J3b3JkfDApLGhuY2FycnkrPShuY2Fycnk9KG5jYXJyeT1uY2FycnkrKHIvNjcxMDg4NjR8MCl8MCkrKGxvPj4+MjYpfDApPj4+MjYsbmNhcnJ5Jj02NzEwODg2M31vdXQud29yZHNba109cndvcmQsY2Fycnk9bmNhcnJ5LG5jYXJyeT1obmNhcnJ5fXJldHVybiAwIT09Y2Fycnk/b3V0LndvcmRzW2tdPWNhcnJ5Om91dC5sZW5ndGgtLSxvdXQuX3N0cmlwKCl9ZnVuY3Rpb24ganVtYm9NdWxUbyhzZWxmLG51bSxvdXQpe3JldHVybiBiaWdNdWxUbyhzZWxmLG51bSxvdXQpfWZ1bmN0aW9uIEZGVE0oeCx5KXt0aGlzLng9eCx0aGlzLnk9eX1NYXRoLmltdWx8fChjb21iMTBNdWxUbz1zbWFsbE11bFRvKSxCTi5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24gbXVsVG8obnVtLG91dCl7dmFyIGxlbj10aGlzLmxlbmd0aCtudW0ubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PW51bS5sZW5ndGg/Y29tYjEwTXVsVG8odGhpcyxudW0sb3V0KTpsZW48NjM/c21hbGxNdWxUbyh0aGlzLG51bSxvdXQpOmxlbjwxMDI0P2JpZ011bFRvKHRoaXMsbnVtLG91dCk6anVtYm9NdWxUbyh0aGlzLG51bSxvdXQpfSxGRlRNLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uIG1ha2VSQlQoTil7Zm9yKHZhciB0PW5ldyBBcnJheShOKSxsPUJOLnByb3RvdHlwZS5fY291bnRCaXRzKE4pLTEsaT0wO2k8TjtpKyspdFtpXT10aGlzLnJldkJpbihpLGwsTik7cmV0dXJuIHR9LEZGVE0ucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbiByZXZCaW4oeCxsLE4pe2lmKDA9PT14fHx4PT09Ti0xKXJldHVybiB4O2Zvcih2YXIgcmI9MCxpPTA7aTxsO2krKylyYnw9KDEmeCk8PGwtaS0xLHg+Pj0xO3JldHVybiByYn0sRkZUTS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbiBwZXJtdXRlKHJidCxyd3MsaXdzLHJ0d3MsaXR3cyxOKXtmb3IodmFyIGk9MDtpPE47aSsrKXJ0d3NbaV09cndzW3JidFtpXV0saXR3c1tpXT1pd3NbcmJ0W2ldXX0sRkZUTS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uIHRyYW5zZm9ybShyd3MsaXdzLHJ0d3MsaXR3cyxOLHJidCl7dGhpcy5wZXJtdXRlKHJidCxyd3MsaXdzLHJ0d3MsaXR3cyxOKTtmb3IodmFyIHM9MTtzPE47czw8PTEpZm9yKHZhciBsPXM8PDEscnR3ZGY9TWF0aC5jb3MoMipNYXRoLlBJL2wpLGl0d2RmPU1hdGguc2luKDIqTWF0aC5QSS9sKSxwPTA7cDxOO3ArPWwpZm9yKHZhciBydHdkZl89cnR3ZGYsaXR3ZGZfPWl0d2RmLGo9MDtqPHM7aisrKXt2YXIgcmU9cnR3c1twK2pdLGllPWl0d3NbcCtqXSxybz1ydHdzW3AraitzXSxpbz1pdHdzW3AraitzXSxyeD1ydHdkZl8qcm8taXR3ZGZfKmlvO2lvPXJ0d2RmXyppbytpdHdkZl8qcm8scm89cngscnR3c1twK2pdPXJlK3JvLGl0d3NbcCtqXT1pZStpbyxydHdzW3AraitzXT1yZS1ybyxpdHdzW3AraitzXT1pZS1pbyxqIT09bCYmKHJ4PXJ0d2RmKnJ0d2RmXy1pdHdkZippdHdkZl8saXR3ZGZfPXJ0d2RmKml0d2RmXytpdHdkZipydHdkZl8scnR3ZGZfPXJ4KX19LEZGVE0ucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uIGd1ZXNzTGVuMTNiKG4sbSl7dmFyIE49MXxNYXRoLm1heChtLG4pLG9kZD0xJk4saT0wO2ZvcihOPU4vMnwwO047Tj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK29kZH0sRkZUTS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uIGNvbmp1Z2F0ZShyd3MsaXdzLE4pe2lmKCEoTjw9MSkpZm9yKHZhciBpPTA7aTxOLzI7aSsrKXt2YXIgdD1yd3NbaV07cndzW2ldPXJ3c1tOLWktMV0scndzW04taS0xXT10LHQ9aXdzW2ldLGl3c1tpXT0taXdzW04taS0xXSxpd3NbTi1pLTFdPS10fX0sRkZUTS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uIG5vcm1hbGl6ZTEzYih3cyxOKXtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8Ti8yO2krKyl7dmFyIHc9ODE5MipNYXRoLnJvdW5kKHdzWzIqaSsxXS9OKStNYXRoLnJvdW5kKHdzWzIqaV0vTikrY2Fycnk7d3NbaV09NjcxMDg4NjMmdyxjYXJyeT13PDY3MTA4ODY0PzA6dy82NzEwODg2NHwwfXJldHVybiB3c30sRkZUTS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbiBjb252ZXJ0MTNiKHdzLGxlbixyd3MsTil7Zm9yKHZhciBjYXJyeT0wLGk9MDtpPGxlbjtpKyspY2FycnkrPTB8d3NbaV0scndzWzIqaV09ODE5MSZjYXJyeSxjYXJyeT4+Pj0xMyxyd3NbMippKzFdPTgxOTEmY2FycnksY2Fycnk+Pj49MTM7Zm9yKGk9MipsZW47aTxOOysraSlyd3NbaV09MDthc3NlcnQoMD09PWNhcnJ5KSxhc3NlcnQoISgtODE5MiZjYXJyeSkpfSxGRlRNLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uIHN0dWIoTil7Zm9yKHZhciBwaD1uZXcgQXJyYXkoTiksaT0wO2k8TjtpKyspcGhbaV09MDtyZXR1cm4gcGh9LEZGVE0ucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24gbXVscCh4LHksb3V0KXt2YXIgTj0yKnRoaXMuZ3Vlc3NMZW4xM2IoeC5sZW5ndGgseS5sZW5ndGgpLHJidD10aGlzLm1ha2VSQlQoTiksXz10aGlzLnN0dWIoTikscndzPW5ldyBBcnJheShOKSxyd3N0PW5ldyBBcnJheShOKSxpd3N0PW5ldyBBcnJheShOKSxucndzPW5ldyBBcnJheShOKSxucndzdD1uZXcgQXJyYXkoTiksbml3c3Q9bmV3IEFycmF5KE4pLHJtd3M9b3V0LndvcmRzO3Jtd3MubGVuZ3RoPU4sdGhpcy5jb252ZXJ0MTNiKHgud29yZHMseC5sZW5ndGgscndzLE4pLHRoaXMuY29udmVydDEzYih5LndvcmRzLHkubGVuZ3RoLG5yd3MsTiksdGhpcy50cmFuc2Zvcm0ocndzLF8scndzdCxpd3N0LE4scmJ0KSx0aGlzLnRyYW5zZm9ybShucndzLF8sbnJ3c3Qsbml3c3QsTixyYnQpO2Zvcih2YXIgaT0wO2k8TjtpKyspe3ZhciByeD1yd3N0W2ldKm5yd3N0W2ldLWl3c3RbaV0qbml3c3RbaV07aXdzdFtpXT1yd3N0W2ldKm5pd3N0W2ldK2l3c3RbaV0qbnJ3c3RbaV0scndzdFtpXT1yeH1yZXR1cm4gdGhpcy5jb25qdWdhdGUocndzdCxpd3N0LE4pLHRoaXMudHJhbnNmb3JtKHJ3c3QsaXdzdCxybXdzLF8sTixyYnQpLHRoaXMuY29uanVnYXRlKHJtd3MsXyxOKSx0aGlzLm5vcm1hbGl6ZTEzYihybXdzLE4pLG91dC5uZWdhdGl2ZT14Lm5lZ2F0aXZlXnkubmVnYXRpdmUsb3V0Lmxlbmd0aD14Lmxlbmd0aCt5Lmxlbmd0aCxvdXQuX3N0cmlwKCl9LEJOLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24gbXVsKG51bSl7dmFyIG91dD1uZXcgQk4obnVsbCk7cmV0dXJuIG91dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrbnVtLmxlbmd0aCksdGhpcy5tdWxUbyhudW0sb3V0KX0sQk4ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24gbXVsZihudW0pe3ZhciBvdXQ9bmV3IEJOKG51bGwpO3JldHVybiBvdXQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK251bS5sZW5ndGgpLGp1bWJvTXVsVG8odGhpcyxudW0sb3V0KX0sQk4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24gaW11bChudW0pe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8obnVtLHRoaXMpfSxCTi5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24gaW11bG4obnVtKXt2YXIgaXNOZWdOdW09bnVtPDA7aXNOZWdOdW0mJihudW09LW51bSksYXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgbnVtKSxhc3NlcnQobnVtPDY3MTA4ODY0KTtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgdz0oMHx0aGlzLndvcmRzW2ldKSpudW0sbG89KDY3MTA4ODYzJncpKyg2NzEwODg2MyZjYXJyeSk7Y2Fycnk+Pj0yNixjYXJyeSs9dy82NzEwODg2NHwwLGNhcnJ5Kz1sbz4+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmbG99cmV0dXJuIDAhPT1jYXJyeSYmKHRoaXMud29yZHNbaV09Y2FycnksdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PW51bT8xOnRoaXMubGVuZ3RoLGlzTmVnTnVtP3RoaXMuaW5lZygpOnRoaXN9LEJOLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uIG11bG4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKG51bSl9LEJOLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24gc3FyKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxCTi5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbiBpc3FyKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxCTi5wcm90b3R5cGUucG93PWZ1bmN0aW9uIHBvdyhudW0pe3ZhciB3PWZ1bmN0aW9uIHRvQml0QXJyYXkobnVtKXtmb3IodmFyIHc9bmV3IEFycmF5KG51bS5iaXRMZW5ndGgoKSksYml0PTA7Yml0PHcubGVuZ3RoO2JpdCsrKXt2YXIgb2ZmPWJpdC8yNnwwLHdiaXQ9Yml0JTI2O3dbYml0XT1udW0ud29yZHNbb2ZmXT4+PndiaXQmMX1yZXR1cm4gd30obnVtKTtpZigwPT09dy5sZW5ndGgpcmV0dXJuIG5ldyBCTigxKTtmb3IodmFyIHJlcz10aGlzLGk9MDtpPHcubGVuZ3RoJiYwPT09d1tpXTtpKysscmVzPXJlcy5zcXIoKSk7aWYoKytpPHcubGVuZ3RoKWZvcih2YXIgcT1yZXMuc3FyKCk7aTx3Lmxlbmd0aDtpKysscT1xLnNxcigpKTAhPT13W2ldJiYocmVzPXJlcy5tdWwocSkpO3JldHVybiByZXN9LEJOLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24gaXVzaGxuKGJpdHMpe2Fzc2VydCgibnVtYmVyIj09dHlwZW9mIGJpdHMmJmJpdHM+PTApO3ZhciBpLHI9Yml0cyUyNixzPShiaXRzLXIpLzI2LGNhcnJ5TWFzaz02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBjYXJyeT0wO2ZvcihpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciBuZXdDYXJyeT10aGlzLndvcmRzW2ldJmNhcnJ5TWFzayxjPSgwfHRoaXMud29yZHNbaV0pLW5ld0NhcnJ5PDxyO3RoaXMud29yZHNbaV09Y3xjYXJyeSxjYXJyeT1uZXdDYXJyeT4+PjI2LXJ9Y2FycnkmJih0aGlzLndvcmRzW2ldPWNhcnJ5LHRoaXMubGVuZ3RoKyspfWlmKDAhPT1zKXtmb3IoaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXRoaXMud29yZHNbaStzXT10aGlzLndvcmRzW2ldO2ZvcihpPTA7aTxzO2krKyl0aGlzLndvcmRzW2ldPTA7dGhpcy5sZW5ndGgrPXN9cmV0dXJuIHRoaXMuX3N0cmlwKCl9LEJOLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbiBpc2hsbihiaXRzKXtyZXR1cm4gYXNzZXJ0KDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihiaXRzKX0sQk4ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbiBpdXNocm4oYml0cyxoaW50LGV4dGVuZGVkKXt2YXIgaDthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXRzJiZiaXRzPj0wKSxoPWhpbnQ/KGhpbnQtaGludCUyNikvMjY6MDt2YXIgcj1iaXRzJTI2LHM9TWF0aC5taW4oKGJpdHMtcikvMjYsdGhpcy5sZW5ndGgpLG1hc2s9NjcxMDg4NjNeNjcxMDg4NjM+Pj5yPDxyLG1hc2tlZFdvcmRzPWV4dGVuZGVkO2lmKGgtPXMsaD1NYXRoLm1heCgwLGgpLG1hc2tlZFdvcmRzKXtmb3IodmFyIGk9MDtpPHM7aSsrKW1hc2tlZFdvcmRzLndvcmRzW2ldPXRoaXMud29yZHNbaV07bWFza2VkV29yZHMubGVuZ3RoPXN9aWYoMD09PXMpO2Vsc2UgaWYodGhpcy5sZW5ndGg+cylmb3IodGhpcy5sZW5ndGgtPXMsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09dGhpcy53b3Jkc1tpK3NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGNhcnJ5PTA7Zm9yKGk9dGhpcy5sZW5ndGgtMTtpPj0wJiYoMCE9PWNhcnJ5fHxpPj1oKTtpLS0pe3ZhciB3b3JkPTB8dGhpcy53b3Jkc1tpXTt0aGlzLndvcmRzW2ldPWNhcnJ5PDwyNi1yfHdvcmQ+Pj5yLGNhcnJ5PXdvcmQmbWFza31yZXR1cm4gbWFza2VkV29yZHMmJjAhPT1jYXJyeSYmKG1hc2tlZFdvcmRzLndvcmRzW21hc2tlZFdvcmRzLmxlbmd0aCsrXT1jYXJyeSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuX3N0cmlwKCl9LEJOLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbiBpc2hybihiaXRzLGhpbnQsZXh0ZW5kZWQpe3JldHVybiBhc3NlcnQoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGJpdHMsaGludCxleHRlbmRlZCl9LEJOLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uIHNobG4oYml0cyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiaXRzKX0sQk4ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uIHVzaGxuKGJpdHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGJpdHMpfSxCTi5wcm90b3R5cGUuc2hybj1mdW5jdGlvbiBzaHJuKGJpdHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYml0cyl9LEJOLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbiB1c2hybihiaXRzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiaXRzKX0sQk4ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uIHRlc3RuKGJpdCl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0JiZiaXQ+PTApO3ZhciByPWJpdCUyNixzPShiaXQtcikvMjYscT0xPDxyO3JldHVybiEodGhpcy5sZW5ndGg8PXMpJiYhISh0aGlzLndvcmRzW3NdJnEpfSxCTi5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uIGltYXNrbihiaXRzKXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXRzJiZiaXRzPj0wKTt2YXIgcj1iaXRzJTI2LHM9KGJpdHMtcikvMjY7aWYoYXNzZXJ0KDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9cylyZXR1cm4gdGhpcztpZigwIT09ciYmcysrLHRoaXMubGVuZ3RoPU1hdGgubWluKHMsdGhpcy5sZW5ndGgpLDAhPT1yKXt2YXIgbWFzaz02NzEwODg2M142NzEwODg2Mz4+PnI8PHI7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9bWFza31yZXR1cm4gMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuX3N0cmlwKCl9LEJOLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbiBtYXNrbihiaXRzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihiaXRzKX0sQk4ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uIGlhZGRuKG51bSl7cmV0dXJuIGFzc2VydCgibnVtYmVyIj09dHlwZW9mIG51bSksYXNzZXJ0KG51bTw2NzEwODg2NCksbnVtPDA/dGhpcy5pc3VibigtbnVtKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPD1udW0/KHRoaXMud29yZHNbMF09bnVtLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4obnVtKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4obnVtKX0sQk4ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbiBfaWFkZG4obnVtKXt0aGlzLndvcmRzWzBdKz1udW07Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tpXT49NjcxMDg4NjQ7aSsrKXRoaXMud29yZHNbaV0tPTY3MTA4ODY0LGk9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbaSsxXT0xOnRoaXMud29yZHNbaSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxpKzEpLHRoaXN9LEJOLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbiBpc3VibihudW0pe2lmKGFzc2VydCgibnVtYmVyIj09dHlwZW9mIG51bSksYXNzZXJ0KG51bTw2NzEwODg2NCksbnVtPDApcmV0dXJuIHRoaXMuaWFkZG4oLW51bSk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKG51bSksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09bnVtLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tpXTwwO2krKyl0aGlzLndvcmRzW2ldKz02NzEwODg2NCx0aGlzLndvcmRzW2krMV0tPTE7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LEJOLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uIGFkZG4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKG51bSl9LEJOLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uIHN1Ym4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKG51bSl9LEJOLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uIGlhYnMoKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEJOLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24gYWJzKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEJOLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24gX2lzaGxuc3VibXVsKG51bSxtdWwsc2hpZnQpe3ZhciBpLHcsbGVuPW51bS5sZW5ndGgrc2hpZnQ7dGhpcy5fZXhwYW5kKGxlbik7dmFyIGNhcnJ5PTA7Zm9yKGk9MDtpPG51bS5sZW5ndGg7aSsrKXt3PSgwfHRoaXMud29yZHNbaStzaGlmdF0pK2NhcnJ5O3ZhciByaWdodD0oMHxudW0ud29yZHNbaV0pKm11bDtjYXJyeT0oKHctPTY3MTA4ODYzJnJpZ2h0KT4+MjYpLShyaWdodC82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krc2hpZnRdPTY3MTA4ODYzJnd9Zm9yKDtpPHRoaXMubGVuZ3RoLXNoaWZ0O2krKyljYXJyeT0odz0oMHx0aGlzLndvcmRzW2krc2hpZnRdKStjYXJyeSk+PjI2LHRoaXMud29yZHNbaStzaGlmdF09NjcxMDg4NjMmdztpZigwPT09Y2FycnkpcmV0dXJuIHRoaXMuX3N0cmlwKCk7Zm9yKGFzc2VydCgtMT09PWNhcnJ5KSxjYXJyeT0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKyljYXJyeT0odz0tKDB8dGhpcy53b3Jkc1tpXSkrY2FycnkpPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJnc7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLl9zdHJpcCgpfSxCTi5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24gX3dvcmREaXYobnVtLG1vZGUpe3ZhciBzaGlmdD0odGhpcy5sZW5ndGgsbnVtLmxlbmd0aCksYT10aGlzLmNsb25lKCksYj1udW0sYmhpPTB8Yi53b3Jkc1tiLmxlbmd0aC0xXTswIT09KHNoaWZ0PTI2LXRoaXMuX2NvdW50Qml0cyhiaGkpKSYmKGI9Yi51c2hsbihzaGlmdCksYS5pdXNobG4oc2hpZnQpLGJoaT0wfGIud29yZHNbYi5sZW5ndGgtMV0pO3ZhciBxLG09YS5sZW5ndGgtYi5sZW5ndGg7aWYoIm1vZCIhPT1tb2RlKXsocT1uZXcgQk4obnVsbCkpLmxlbmd0aD1tKzEscS53b3Jkcz1uZXcgQXJyYXkocS5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8cS5sZW5ndGg7aSsrKXEud29yZHNbaV09MH12YXIgZGlmZj1hLmNsb25lKCkuX2lzaGxuc3VibXVsKGIsMSxtKTswPT09ZGlmZi5uZWdhdGl2ZSYmKGE9ZGlmZixxJiYocS53b3Jkc1ttXT0xKSk7Zm9yKHZhciBqPW0tMTtqPj0wO2otLSl7dmFyIHFqPTY3MTA4ODY0KigwfGEud29yZHNbYi5sZW5ndGgral0pKygwfGEud29yZHNbYi5sZW5ndGgrai0xXSk7Zm9yKHFqPU1hdGgubWluKHFqL2JoaXwwLDY3MTA4ODYzKSxhLl9pc2hsbnN1Ym11bChiLHFqLGopOzAhPT1hLm5lZ2F0aXZlOylxai0tLGEubmVnYXRpdmU9MCxhLl9pc2hsbnN1Ym11bChiLDEsaiksYS5pc1plcm8oKXx8KGEubmVnYXRpdmVePTEpO3EmJihxLndvcmRzW2pdPXFqKX1yZXR1cm4gcSYmcS5fc3RyaXAoKSxhLl9zdHJpcCgpLCJkaXYiIT09bW9kZSYmMCE9PXNoaWZ0JiZhLml1c2hybihzaGlmdCkse2RpdjpxfHxudWxsLG1vZDphfX0sQk4ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbiBkaXZtb2QobnVtLG1vZGUscG9zaXRpdmUpe3JldHVybiBhc3NlcnQoIW51bS5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBCTigwKSxtb2Q6bmV3IEJOKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PW51bS5uZWdhdGl2ZT8ocmVzPXRoaXMubmVnKCkuZGl2bW9kKG51bSxtb2RlKSwibW9kIiE9PW1vZGUmJihkaXY9cmVzLmRpdi5uZWcoKSksImRpdiIhPT1tb2RlJiYobW9kPXJlcy5tb2QubmVnKCkscG9zaXRpdmUmJjAhPT1tb2QubmVnYXRpdmUmJm1vZC5pYWRkKG51bSkpLHtkaXYsbW9kfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1udW0ubmVnYXRpdmU/KHJlcz10aGlzLmRpdm1vZChudW0ubmVnKCksbW9kZSksIm1vZCIhPT1tb2RlJiYoZGl2PXJlcy5kaXYubmVnKCkpLHtkaXYsbW9kOnJlcy5tb2R9KTowIT09KHRoaXMubmVnYXRpdmUmbnVtLm5lZ2F0aXZlKT8ocmVzPXRoaXMubmVnKCkuZGl2bW9kKG51bS5uZWcoKSxtb2RlKSwiZGl2IiE9PW1vZGUmJihtb2Q9cmVzLm1vZC5uZWcoKSxwb3NpdGl2ZSYmMCE9PW1vZC5uZWdhdGl2ZSYmbW9kLmlzdWIobnVtKSkse2RpdjpyZXMuZGl2LG1vZH0pOm51bS5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKG51bSk8MD97ZGl2Om5ldyBCTigwKSxtb2Q6dGhpc306MT09PW51bS5sZW5ndGg/ImRpdiI9PT1tb2RlP3tkaXY6dGhpcy5kaXZuKG51bS53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09bW9kZT97ZGl2Om51bGwsbW9kOm5ldyBCTih0aGlzLm1vZHJuKG51bS53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihudW0ud29yZHNbMF0pLG1vZDpuZXcgQk4odGhpcy5tb2RybihudW0ud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihudW0sbW9kZSk7dmFyIGRpdixtb2QscmVzfSxCTi5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uIGRpdihudW0pe3JldHVybiB0aGlzLmRpdm1vZChudW0sImRpdiIsITEpLmRpdn0sQk4ucHJvdG90eXBlLm1vZD1mdW5jdGlvbiBtb2QobnVtKXtyZXR1cm4gdGhpcy5kaXZtb2QobnVtLCJtb2QiLCExKS5tb2R9LEJOLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uIHVtb2QobnVtKXtyZXR1cm4gdGhpcy5kaXZtb2QobnVtLCJtb2QiLCEwKS5tb2R9LEJOLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbiBkaXZSb3VuZChudW0pe3ZhciBkbT10aGlzLmRpdm1vZChudW0pO2lmKGRtLm1vZC5pc1plcm8oKSlyZXR1cm4gZG0uZGl2O3ZhciBtb2Q9MCE9PWRtLmRpdi5uZWdhdGl2ZT9kbS5tb2QuaXN1YihudW0pOmRtLm1vZCxoYWxmPW51bS51c2hybigxKSxyMj1udW0uYW5kbG4oMSksY21wPW1vZC5jbXAoaGFsZik7cmV0dXJuIGNtcDwwfHwxPT09cjImJjA9PT1jbXA/ZG0uZGl2OjAhPT1kbS5kaXYubmVnYXRpdmU/ZG0uZGl2LmlzdWJuKDEpOmRtLmRpdi5pYWRkbigxKX0sQk4ucHJvdG90eXBlLm1vZHJuPWZ1bmN0aW9uIG1vZHJuKG51bSl7dmFyIGlzTmVnTnVtPW51bTwwO2lzTmVnTnVtJiYobnVtPS1udW0pLGFzc2VydChudW08PTY3MTA4ODYzKTtmb3IodmFyIHA9KDE8PDI2KSVudW0sYWNjPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKWFjYz0ocCphY2MrKDB8dGhpcy53b3Jkc1tpXSkpJW51bTtyZXR1cm4gaXNOZWdOdW0/LWFjYzphY2N9LEJOLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uIG1vZG4obnVtKXtyZXR1cm4gdGhpcy5tb2RybihudW0pfSxCTi5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24gaWRpdm4obnVtKXt2YXIgaXNOZWdOdW09bnVtPDA7aXNOZWdOdW0mJihudW09LW51bSksYXNzZXJ0KG51bTw9NjcxMDg4NjMpO2Zvcih2YXIgY2Fycnk9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciB3PSgwfHRoaXMud29yZHNbaV0pKzY3MTA4ODY0KmNhcnJ5O3RoaXMud29yZHNbaV09dy9udW18MCxjYXJyeT13JW51bX1yZXR1cm4gdGhpcy5fc3RyaXAoKSxpc05lZ051bT90aGlzLmluZWcoKTp0aGlzfSxCTi5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbiBkaXZuKG51bSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihudW0pfSxCTi5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbiBlZ2NkKHApe2Fzc2VydCgwPT09cC5uZWdhdGl2ZSksYXNzZXJ0KCFwLmlzWmVybygpKTt2YXIgeD10aGlzLHk9cC5jbG9uZSgpO3g9MCE9PXgubmVnYXRpdmU/eC51bW9kKHApOnguY2xvbmUoKTtmb3IodmFyIEE9bmV3IEJOKDEpLEI9bmV3IEJOKDApLEM9bmV3IEJOKDApLEQ9bmV3IEJOKDEpLGc9MDt4LmlzRXZlbigpJiZ5LmlzRXZlbigpOyl4Lml1c2hybigxKSx5Lml1c2hybigxKSwrK2c7Zm9yKHZhciB5cD15LmNsb25lKCkseHA9eC5jbG9uZSgpOyF4LmlzWmVybygpOyl7Zm9yKHZhciBpPTAsaW09MTswPT09KHgud29yZHNbMF0maW0pJiZpPDI2OysraSxpbTw8PTEpO2lmKGk+MClmb3IoeC5pdXNocm4oaSk7aS0tID4wOykoQS5pc09kZCgpfHxCLmlzT2RkKCkpJiYoQS5pYWRkKHlwKSxCLmlzdWIoeHApKSxBLml1c2hybigxKSxCLml1c2hybigxKTtmb3IodmFyIGo9MCxqbT0xOzA9PT0oeS53b3Jkc1swXSZqbSkmJmo8MjY7KytqLGptPDw9MSk7aWYoaj4wKWZvcih5Lml1c2hybihqKTtqLS0gPjA7KShDLmlzT2RkKCl8fEQuaXNPZGQoKSkmJihDLmlhZGQoeXApLEQuaXN1Yih4cCkpLEMuaXVzaHJuKDEpLEQuaXVzaHJuKDEpO3guY21wKHkpPj0wPyh4LmlzdWIoeSksQS5pc3ViKEMpLEIuaXN1YihEKSk6KHkuaXN1Yih4KSxDLmlzdWIoQSksRC5pc3ViKEIpKX1yZXR1cm57YTpDLGI6RCxnY2Q6eS5pdXNobG4oZyl9fSxCTi5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uIF9pbnZtcChwKXthc3NlcnQoMD09PXAubmVnYXRpdmUpLGFzc2VydCghcC5pc1plcm8oKSk7dmFyIGE9dGhpcyxiPXAuY2xvbmUoKTthPTAhPT1hLm5lZ2F0aXZlP2EudW1vZChwKTphLmNsb25lKCk7Zm9yKHZhciByZXMseDE9bmV3IEJOKDEpLHgyPW5ldyBCTigwKSxkZWx0YT1iLmNsb25lKCk7YS5jbXBuKDEpPjAmJmIuY21wbigxKT4wOyl7Zm9yKHZhciBpPTAsaW09MTswPT09KGEud29yZHNbMF0maW0pJiZpPDI2OysraSxpbTw8PTEpO2lmKGk+MClmb3IoYS5pdXNocm4oaSk7aS0tID4wOyl4MS5pc09kZCgpJiZ4MS5pYWRkKGRlbHRhKSx4MS5pdXNocm4oMSk7Zm9yKHZhciBqPTAsam09MTswPT09KGIud29yZHNbMF0mam0pJiZqPDI2OysraixqbTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0tID4wOyl4Mi5pc09kZCgpJiZ4Mi5pYWRkKGRlbHRhKSx4Mi5pdXNocm4oMSk7YS5jbXAoYik+PTA/KGEuaXN1YihiKSx4MS5pc3ViKHgyKSk6KGIuaXN1YihhKSx4Mi5pc3ViKHgxKSl9cmV0dXJuKHJlcz0wPT09YS5jbXBuKDEpP3gxOngyKS5jbXBuKDApPDAmJnJlcy5pYWRkKHApLHJlc30sQk4ucHJvdG90eXBlLmdjZD1mdW5jdGlvbiBnY2QobnVtKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBudW0uYWJzKCk7aWYobnVtLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBhPXRoaXMuY2xvbmUoKSxiPW51bS5jbG9uZSgpO2EubmVnYXRpdmU9MCxiLm5lZ2F0aXZlPTA7Zm9yKHZhciBzaGlmdD0wO2EuaXNFdmVuKCkmJmIuaXNFdmVuKCk7c2hpZnQrKylhLml1c2hybigxKSxiLml1c2hybigxKTtmb3IoOzspe2Zvcig7YS5pc0V2ZW4oKTspYS5pdXNocm4oMSk7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTt2YXIgcj1hLmNtcChiKTtpZihyPDApe3ZhciB0PWE7YT1iLGI9dH1lbHNlIGlmKDA9PT1yfHwwPT09Yi5jbXBuKDEpKWJyZWFrO2EuaXN1YihiKX1yZXR1cm4gYi5pdXNobG4oc2hpZnQpfSxCTi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbiBpbnZtKG51bSl7cmV0dXJuIHRoaXMuZWdjZChudW0pLmEudW1vZChudW0pfSxCTi5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uIGlzRXZlbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sQk4ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uIGlzT2RkKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sQk4ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uIGFuZGxuKG51bSl7cmV0dXJuIHRoaXMud29yZHNbMF0mbnVtfSxCTi5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24gYmluY24oYml0KXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXQpO3ZhciByPWJpdCUyNixzPShiaXQtcikvMjYscT0xPDxyO2lmKHRoaXMubGVuZ3RoPD1zKXJldHVybiB0aGlzLl9leHBhbmQocysxKSx0aGlzLndvcmRzW3NdfD1xLHRoaXM7Zm9yKHZhciBjYXJyeT1xLGk9czswIT09Y2FycnkmJmk8dGhpcy5sZW5ndGg7aSsrKXt2YXIgdz0wfHRoaXMud29yZHNbaV07Y2Fycnk9KHcrPWNhcnJ5KT4+PjI2LHcmPTY3MTA4ODYzLHRoaXMud29yZHNbaV09d31yZXR1cm4gMCE9PWNhcnJ5JiYodGhpcy53b3Jkc1tpXT1jYXJyeSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxCTi5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uIGlzWmVybygpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxCTi5wcm90b3R5cGUuY21wbj1mdW5jdGlvbiBjbXBuKG51bSl7dmFyIHJlcyxuZWdhdGl2ZT1udW08MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIW5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZuZWdhdGl2ZSlyZXR1cm4gMTtpZih0aGlzLl9zdHJpcCgpLHRoaXMubGVuZ3RoPjEpcmVzPTE7ZWxzZXtuZWdhdGl2ZSYmKG51bT0tbnVtKSxhc3NlcnQobnVtPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgdz0wfHRoaXMud29yZHNbMF07cmVzPXc9PT1udW0/MDp3PG51bT8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1yZXM6cmVzfSxCTi5wcm90b3R5cGUuY21wPWZ1bmN0aW9uIGNtcChudW0pe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09bnVtLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09bnVtLm5lZ2F0aXZlKXJldHVybiAxO3ZhciByZXM9dGhpcy51Y21wKG51bSk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXJlczpyZXN9LEJOLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uIHVjbXAobnVtKXtpZih0aGlzLmxlbmd0aD5udW0ubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPG51bS5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciByZXM9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBhPTB8dGhpcy53b3Jkc1tpXSxiPTB8bnVtLndvcmRzW2ldO2lmKGEhPT1iKXthPGI/cmVzPS0xOmE+YiYmKHJlcz0xKTticmVha319cmV0dXJuIHJlc30sQk4ucHJvdG90eXBlLmd0bj1mdW5jdGlvbiBndG4obnVtKXtyZXR1cm4gMT09PXRoaXMuY21wbihudW0pfSxCTi5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24gZ3QobnVtKXtyZXR1cm4gMT09PXRoaXMuY21wKG51bSl9LEJOLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uIGd0ZW4obnVtKXtyZXR1cm4gdGhpcy5jbXBuKG51bSk+PTB9LEJOLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24gZ3RlKG51bSl7cmV0dXJuIHRoaXMuY21wKG51bSk+PTB9LEJOLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24gbHRuKG51bSl7cmV0dXJuLTE9PT10aGlzLmNtcG4obnVtKX0sQk4ucHJvdG90eXBlLmx0PWZ1bmN0aW9uIGx0KG51bSl7cmV0dXJuLTE9PT10aGlzLmNtcChudW0pfSxCTi5wcm90b3R5cGUubHRlbj1mdW5jdGlvbiBsdGVuKG51bSl7cmV0dXJuIHRoaXMuY21wbihudW0pPD0wfSxCTi5wcm90b3R5cGUubHRlPWZ1bmN0aW9uIGx0ZShudW0pe3JldHVybiB0aGlzLmNtcChudW0pPD0wfSxCTi5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uIGVxbihudW0pe3JldHVybiAwPT09dGhpcy5jbXBuKG51bSl9LEJOLnByb3RvdHlwZS5lcT1mdW5jdGlvbiBlcShudW0pe3JldHVybiAwPT09dGhpcy5jbXAobnVtKX0sQk4ucmVkPWZ1bmN0aW9uIHJlZChudW0pe3JldHVybiBuZXcgUmVkKG51bSl9LEJOLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbiB0b1JlZChjdHgpe3JldHVybiBhc3NlcnQoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksYXNzZXJ0KDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGN0eC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGN0eCl9LEJOLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uIGZyb21SZWQoKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEJOLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24gX2ZvcmNlUmVkKGN0eCl7cmV0dXJuIHRoaXMucmVkPWN0eCx0aGlzfSxCTi5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24gZm9yY2VSZWQoY3R4KXtyZXR1cm4gYXNzZXJ0KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGN0eCl9LEJOLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24gcmVkQWRkKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uIHJlZElBZGQobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uIHJlZFN1YihudW0pe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbiByZWRJU3ViKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbiByZWRTaGwobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbiByZWRNdWwobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxudW0pLHRoaXMucmVkLm11bCh0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uIHJlZElNdWwobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxudW0pLHRoaXMucmVkLmltdWwodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uIHJlZFNxcigpe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEJOLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uIHJlZElTcXIoKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEJOLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uIHJlZFNxcnQoKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LEJOLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uIHJlZEludm0oKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEJOLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24gcmVkTmVnKCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sQk4ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbiByZWRQb3cobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkJiYhbnVtLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxudW0pfTt2YXIgcHJpbWVzPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gTVByaW1lKG5hbWUscCl7dGhpcy5uYW1lPW5hbWUsdGhpcy5wPW5ldyBCTihwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgQk4oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIEsyNTYoKXtNUHJpbWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBQMjI0KCl7TVByaW1lLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gUDE5Migpe01QcmltZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFAyNTUxOSgpe01QcmltZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFJlZChtKXtpZigic3RyaW5nIj09dHlwZW9mIG0pe3ZhciBwcmltZT1CTi5fcHJpbWUobSk7dGhpcy5tPXByaW1lLnAsdGhpcy5wcmltZT1wcmltZX1lbHNlIGFzc2VydChtLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPW0sdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIE1vbnQobSl7UmVkLmNhbGwodGhpcyxtKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBCTigxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1NUHJpbWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24gX3RtcCgpe3ZhciB0bXA9bmV3IEJOKG51bGwpO3JldHVybiB0bXAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0bXB9LE1QcmltZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbiBpcmVkdWNlKG51bSl7dmFyIHJsZW4scj1udW07ZG97dGhpcy5zcGxpdChyLHRoaXMudG1wKSxybGVuPShyPShyPXRoaXMuaW11bEsocikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShybGVuPnRoaXMubik7dmFyIGNtcD1ybGVuPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PWNtcD8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOmNtcD4wP3IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXIuc3RyaXA/ci5zdHJpcCgpOnIuX3N0cmlwKCkscn0sTVByaW1lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbiBzcGxpdChpbnB1dCxvdXQpe2lucHV0Lml1c2hybih0aGlzLm4sMCxvdXQpfSxNUHJpbWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uIGltdWxLKG51bSl7cmV0dXJuIG51bS5pbXVsKHRoaXMuayl9LGluaGVyaXRzKEsyNTYsTVByaW1lKSxLMjU2LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbiBzcGxpdChpbnB1dCxvdXRwdXQpe2Zvcih2YXIgb3V0TGVuPU1hdGgubWluKGlucHV0Lmxlbmd0aCw5KSxpPTA7aTxvdXRMZW47aSsrKW91dHB1dC53b3Jkc1tpXT1pbnB1dC53b3Jkc1tpXTtpZihvdXRwdXQubGVuZ3RoPW91dExlbixpbnB1dC5sZW5ndGg8PTkpcmV0dXJuIGlucHV0LndvcmRzWzBdPTAsdm9pZChpbnB1dC5sZW5ndGg9MSk7dmFyIHByZXY9aW5wdXQud29yZHNbOV07Zm9yKG91dHB1dC53b3Jkc1tvdXRwdXQubGVuZ3RoKytdPTQxOTQzMDMmcHJldixpPTEwO2k8aW5wdXQubGVuZ3RoO2krKyl7dmFyIG5leHQ9MHxpbnB1dC53b3Jkc1tpXTtpbnB1dC53b3Jkc1tpLTEwXT0oNDE5NDMwMyZuZXh0KTw8NHxwcmV2Pj4+MjIscHJldj1uZXh0fXByZXY+Pj49MjIsaW5wdXQud29yZHNbaS0xMF09cHJldiwwPT09cHJldiYmaW5wdXQubGVuZ3RoPjEwP2lucHV0Lmxlbmd0aC09MTA6aW5wdXQubGVuZ3RoLT05fSxLMjU2LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbiBpbXVsSyhudW0pe251bS53b3Jkc1tudW0ubGVuZ3RoXT0wLG51bS53b3Jkc1tudW0ubGVuZ3RoKzFdPTAsbnVtLmxlbmd0aCs9Mjtmb3IodmFyIGxvPTAsaT0wO2k8bnVtLmxlbmd0aDtpKyspe3ZhciB3PTB8bnVtLndvcmRzW2ldO2xvKz05NzcqdyxudW0ud29yZHNbaV09NjcxMDg4NjMmbG8sbG89NjQqdysobG8vNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1udW0ud29yZHNbbnVtLmxlbmd0aC0xXSYmKG51bS5sZW5ndGgtLSwwPT09bnVtLndvcmRzW251bS5sZW5ndGgtMV0mJm51bS5sZW5ndGgtLSksbnVtfSxpbmhlcml0cyhQMjI0LE1QcmltZSksaW5oZXJpdHMoUDE5MixNUHJpbWUpLGluaGVyaXRzKFAyNTUxOSxNUHJpbWUpLFAyNTUxOS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24gaW11bEsobnVtKXtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8bnVtLmxlbmd0aDtpKyspe3ZhciBoaT0xOSooMHxudW0ud29yZHNbaV0pK2NhcnJ5LGxvPTY3MTA4ODYzJmhpO2hpPj4+PTI2LG51bS53b3Jkc1tpXT1sbyxjYXJyeT1oaX1yZXR1cm4gMCE9PWNhcnJ5JiYobnVtLndvcmRzW251bS5sZW5ndGgrK109Y2FycnkpLG51bX0sQk4uX3ByaW1lPWZ1bmN0aW9uIHByaW1lKG5hbWUpe2lmKHByaW1lc1tuYW1lXSlyZXR1cm4gcHJpbWVzW25hbWVdO3ZhciBwcmltZTtpZigiazI1NiI9PT1uYW1lKXByaW1lPW5ldyBLMjU2O2Vsc2UgaWYoInAyMjQiPT09bmFtZSlwcmltZT1uZXcgUDIyNDtlbHNlIGlmKCJwMTkyIj09PW5hbWUpcHJpbWU9bmV3IFAxOTI7ZWxzZXtpZigicDI1NTE5IiE9PW5hbWUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrbmFtZSk7cHJpbWU9bmV3IFAyNTUxOX1yZXR1cm4gcHJpbWVzW25hbWVdPXByaW1lLHByaW1lfSxSZWQucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uIF92ZXJpZnkxKGEpe2Fzc2VydCgwPT09YS5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxhc3NlcnQoYS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sUmVkLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbiBfdmVyaWZ5MihhLGIpe2Fzc2VydCgwPT09KGEubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYXNzZXJ0KGEucmVkJiZhLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFJlZC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbiBpbW9kKGEpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShhKS5fZm9yY2VSZWQodGhpcyk6KG1vdmUoYSxhLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcykpLGEpfSxSZWQucHJvdG90eXBlLm5lZz1mdW5jdGlvbiBuZWcoYSl7cmV0dXJuIGEuaXNaZXJvKCk/YS5jbG9uZSgpOnRoaXMubS5zdWIoYSkuX2ZvcmNlUmVkKHRoaXMpfSxSZWQucHJvdG90eXBlLmFkZD1mdW5jdGlvbiBhZGQoYSxiKXt0aGlzLl92ZXJpZnkyKGEsYik7dmFyIHJlcz1hLmFkZChiKTtyZXR1cm4gcmVzLmNtcCh0aGlzLm0pPj0wJiZyZXMuaXN1Yih0aGlzLm0pLHJlcy5fZm9yY2VSZWQodGhpcyl9LFJlZC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbiBpYWRkKGEsYil7dGhpcy5fdmVyaWZ5MihhLGIpO3ZhciByZXM9YS5pYWRkKGIpO3JldHVybiByZXMuY21wKHRoaXMubSk+PTAmJnJlcy5pc3ViKHRoaXMubSkscmVzfSxSZWQucHJvdG90eXBlLnN1Yj1mdW5jdGlvbiBzdWIoYSxiKXt0aGlzLl92ZXJpZnkyKGEsYik7dmFyIHJlcz1hLnN1YihiKTtyZXR1cm4gcmVzLmNtcG4oMCk8MCYmcmVzLmlhZGQodGhpcy5tKSxyZXMuX2ZvcmNlUmVkKHRoaXMpfSxSZWQucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24gaXN1YihhLGIpe3RoaXMuX3ZlcmlmeTIoYSxiKTt2YXIgcmVzPWEuaXN1YihiKTtyZXR1cm4gcmVzLmNtcG4oMCk8MCYmcmVzLmlhZGQodGhpcy5tKSxyZXN9LFJlZC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uIHNobChhLG51bSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoYSksdGhpcy5pbW9kKGEudXNobG4obnVtKSl9LFJlZC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbiBpbXVsKGEsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYSxiKSx0aGlzLmltb2QoYS5pbXVsKGIpKX0sUmVkLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24gbXVsKGEsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYSxiKSx0aGlzLmltb2QoYS5tdWwoYikpfSxSZWQucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24gaXNxcihhKXtyZXR1cm4gdGhpcy5pbXVsKGEsYS5jbG9uZSgpKX0sUmVkLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24gc3FyKGEpe3JldHVybiB0aGlzLm11bChhLGEpfSxSZWQucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24gc3FydChhKXtpZihhLmlzWmVybygpKXJldHVybiBhLmNsb25lKCk7dmFyIG1vZDM9dGhpcy5tLmFuZGxuKDMpO2lmKGFzc2VydChtb2QzJTI9PTEpLDM9PT1tb2QzKXt2YXIgcG93PXRoaXMubS5hZGQobmV3IEJOKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGEscG93KX1mb3IodmFyIHE9dGhpcy5tLnN1Ym4oMSkscz0wOyFxLmlzWmVybygpJiYwPT09cS5hbmRsbigxKTspcysrLHEuaXVzaHJuKDEpO2Fzc2VydCghcS5pc1plcm8oKSk7dmFyIG9uZT1uZXcgQk4oMSkudG9SZWQodGhpcyksbk9uZT1vbmUucmVkTmVnKCksbHBvdz10aGlzLm0uc3VibigxKS5pdXNocm4oMSksej10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHo9bmV3IEJOKDIqeip6KS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coeixscG93KS5jbXAobk9uZSk7KXoucmVkSUFkZChuT25lKTtmb3IodmFyIGM9dGhpcy5wb3coeixxKSxyPXRoaXMucG93KGEscS5hZGRuKDEpLml1c2hybigxKSksdD10aGlzLnBvdyhhLHEpLG09czswIT09dC5jbXAob25lKTspe2Zvcih2YXIgdG1wPXQsaT0wOzAhPT10bXAuY21wKG9uZSk7aSsrKXRtcD10bXAucmVkU3FyKCk7YXNzZXJ0KGk8bSk7dmFyIGI9dGhpcy5wb3coYyxuZXcgQk4oMSkuaXVzaGxuKG0taS0xKSk7cj1yLnJlZE11bChiKSxjPWIucmVkU3FyKCksdD10LnJlZE11bChjKSxtPWl9cmV0dXJuIHJ9LFJlZC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbiBpbnZtKGEpe3ZhciBpbnY9YS5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWludi5uZWdhdGl2ZT8oaW52Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGludikucmVkTmVnKCkpOnRoaXMuaW1vZChpbnYpfSxSZWQucHJvdG90eXBlLnBvdz1mdW5jdGlvbiBwb3coYSxudW0pe2lmKG51bS5pc1plcm8oKSlyZXR1cm4gbmV3IEJOKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1udW0uY21wbigxKSlyZXR1cm4gYS5jbG9uZSgpO3ZhciB3bmQ9bmV3IEFycmF5KDE2KTt3bmRbMF09bmV3IEJOKDEpLnRvUmVkKHRoaXMpLHduZFsxXT1hO2Zvcih2YXIgaT0yO2k8d25kLmxlbmd0aDtpKyspd25kW2ldPXRoaXMubXVsKHduZFtpLTFdLGEpO3ZhciByZXM9d25kWzBdLGN1cnJlbnQ9MCxjdXJyZW50TGVuPTAsc3RhcnQ9bnVtLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09c3RhcnQmJihzdGFydD0yNiksaT1udW0ubGVuZ3RoLTE7aT49MDtpLS0pe2Zvcih2YXIgd29yZD1udW0ud29yZHNbaV0saj1zdGFydC0xO2o+PTA7ai0tKXt2YXIgYml0PXdvcmQ+PmomMTtyZXMhPT13bmRbMF0mJihyZXM9dGhpcy5zcXIocmVzKSksMCE9PWJpdHx8MCE9PWN1cnJlbnQ/KGN1cnJlbnQ8PD0xLGN1cnJlbnR8PWJpdCwoND09PSsrY3VycmVudExlbnx8MD09PWkmJjA9PT1qKSYmKHJlcz10aGlzLm11bChyZXMsd25kW2N1cnJlbnRdKSxjdXJyZW50TGVuPTAsY3VycmVudD0wKSk6Y3VycmVudExlbj0wfXN0YXJ0PTI2fXJldHVybiByZXN9LFJlZC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uIGNvbnZlcnRUbyhudW0pe3ZhciByPW51bS51bW9kKHRoaXMubSk7cmV0dXJuIHI9PT1udW0/ci5jbG9uZSgpOnJ9LFJlZC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24gY29udmVydEZyb20obnVtKXt2YXIgcmVzPW51bS5jbG9uZSgpO3JldHVybiByZXMucmVkPW51bGwscmVzfSxCTi5tb250PWZ1bmN0aW9uIG1vbnQobnVtKXtyZXR1cm4gbmV3IE1vbnQobnVtKX0saW5oZXJpdHMoTW9udCxSZWQpLE1vbnQucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbiBjb252ZXJ0VG8obnVtKXtyZXR1cm4gdGhpcy5pbW9kKG51bS51c2hsbih0aGlzLnNoaWZ0KSl9LE1vbnQucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uIGNvbnZlcnRGcm9tKG51bSl7dmFyIHI9dGhpcy5pbW9kKG51bS5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHIucmVkPW51bGwscn0sTW9udC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbiBpbXVsKGEsYil7aWYoYS5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gYS53b3Jkc1swXT0wLGEubGVuZ3RoPTEsYTt2YXIgdD1hLmltdWwoYiksYz10Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSx1PXQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCkscmVzPXU7cmV0dXJuIHUuY21wKHRoaXMubSk+PTA/cmVzPXUuaXN1Yih0aGlzLm0pOnUuY21wbigwKTwwJiYocmVzPXUuaWFkZCh0aGlzLm0pKSxyZXMuX2ZvcmNlUmVkKHRoaXMpfSxNb250LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24gbXVsKGEsYil7aWYoYS5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IEJOKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgdD1hLm11bChiKSxjPXQubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHU9dC5pc3ViKGMpLml1c2hybih0aGlzLnNoaWZ0KSxyZXM9dTtyZXR1cm4gdS5jbXAodGhpcy5tKT49MD9yZXM9dS5pc3ViKHRoaXMubSk6dS5jbXBuKDApPDAmJihyZXM9dS5pYWRkKHRoaXMubSkpLHJlcy5fZm9yY2VSZWQodGhpcyl9LE1vbnQucHJvdG90eXBlLmludm09ZnVuY3Rpb24gaW52bShhKXtyZXR1cm4gdGhpcy5pbW9kKGEuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShtb2R1bGU9X193ZWJwYWNrX3JlcXVpcmVfXy5ubWQobW9kdWxlKSx0aGlzKX0sIi4uLy4uL25vZGVfbW9kdWxlcy9icm9yYW5kL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciByO2Z1bmN0aW9uIFJhbmQocmFuZCl7dGhpcy5yYW5kPXJhbmR9aWYobW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gcmFuZChsZW4pe3JldHVybiByfHwocj1uZXcgUmFuZChudWxsKSksci5nZW5lcmF0ZShsZW4pfSxtb2R1bGUuZXhwb3J0cy5SYW5kPVJhbmQsUmFuZC5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24gZ2VuZXJhdGUobGVuKXtyZXR1cm4gdGhpcy5fcmFuZChsZW4pfSxSYW5kLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbiBfcmFuZChuKXtpZih0aGlzLnJhbmQuZ2V0Qnl0ZXMpcmV0dXJuIHRoaXMucmFuZC5nZXRCeXRlcyhuKTtmb3IodmFyIHJlcz1uZXcgVWludDhBcnJheShuKSxpPTA7aTxyZXMubGVuZ3RoO2krKylyZXNbaV09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gcmVzfSwib2JqZWN0Ij09dHlwZW9mIHNlbGYpc2VsZi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9SYW5kLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbiBfcmFuZChuKXt2YXIgYXJyPW5ldyBVaW50OEFycmF5KG4pO3JldHVybiBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyKSxhcnJ9OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP1JhbmQucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uIF9yYW5kKG4pe3ZhciBhcnI9bmV3IFVpbnQ4QXJyYXkobik7cmV0dXJuIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFyciksYXJyfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKFJhbmQucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIgY3J5cHRvPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jcnlwdG8tYnJvd3NlcmlmeS9pbmRleC5qcyIpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjcnlwdG8ucmFuZG9tQnl0ZXMpdGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIik7UmFuZC5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24gX3JhbmQobil7cmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyhuKX19Y2F0Y2goZSl7fX0sIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9hZXMuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXI7ZnVuY3Rpb24gYXNVSW50MzJBcnJheShidWYpe0J1ZmZlci5pc0J1ZmZlcihidWYpfHwoYnVmPUJ1ZmZlci5mcm9tKGJ1ZikpO2Zvcih2YXIgbGVuPWJ1Zi5sZW5ndGgvNHwwLG91dD1uZXcgQXJyYXkobGVuKSxpPTA7aTxsZW47aSsrKW91dFtpXT1idWYucmVhZFVJbnQzMkJFKDQqaSk7cmV0dXJuIG91dH1mdW5jdGlvbiBzY3J1YlZlYyh2KXtmb3IoOzA8di5sZW5ndGg7disrKXZbMF09MH1mdW5jdGlvbiBjcnlwdEJsb2NrKE0sa2V5U2NoZWR1bGUsU1VCX01JWCxTQk9YLG5Sb3VuZHMpe2Zvcih2YXIgdDAsdDEsdDIsdDMsU1VCX01JWDA9U1VCX01JWFswXSxTVUJfTUlYMT1TVUJfTUlYWzFdLFNVQl9NSVgyPVNVQl9NSVhbMl0sU1VCX01JWDM9U1VCX01JWFszXSxzMD1NWzBdXmtleVNjaGVkdWxlWzBdLHMxPU1bMV1ea2V5U2NoZWR1bGVbMV0sczI9TVsyXV5rZXlTY2hlZHVsZVsyXSxzMz1NWzNdXmtleVNjaGVkdWxlWzNdLGtzUm93PTQscm91bmQ9MTtyb3VuZDxuUm91bmRzO3JvdW5kKyspdDA9U1VCX01JWDBbczA+Pj4yNF1eU1VCX01JWDFbczE+Pj4xNiYyNTVdXlNVQl9NSVgyW3MyPj4+OCYyNTVdXlNVQl9NSVgzWzI1NSZzM11ea2V5U2NoZWR1bGVba3NSb3crK10sdDE9U1VCX01JWDBbczE+Pj4yNF1eU1VCX01JWDFbczI+Pj4xNiYyNTVdXlNVQl9NSVgyW3MzPj4+OCYyNTVdXlNVQl9NSVgzWzI1NSZzMF1ea2V5U2NoZWR1bGVba3NSb3crK10sdDI9U1VCX01JWDBbczI+Pj4yNF1eU1VCX01JWDFbczM+Pj4xNiYyNTVdXlNVQl9NSVgyW3MwPj4+OCYyNTVdXlNVQl9NSVgzWzI1NSZzMV1ea2V5U2NoZWR1bGVba3NSb3crK10sdDM9U1VCX01JWDBbczM+Pj4yNF1eU1VCX01JWDFbczA+Pj4xNiYyNTVdXlNVQl9NSVgyW3MxPj4+OCYyNTVdXlNVQl9NSVgzWzI1NSZzMl1ea2V5U2NoZWR1bGVba3NSb3crK10sczA9dDAsczE9dDEsczI9dDIsczM9dDM7cmV0dXJuIHQwPShTQk9YW3MwPj4+MjRdPDwyNHxTQk9YW3MxPj4+MTYmMjU1XTw8MTZ8U0JPWFtzMj4+PjgmMjU1XTw8OHxTQk9YWzI1NSZzM10pXmtleVNjaGVkdWxlW2tzUm93KytdLHQxPShTQk9YW3MxPj4+MjRdPDwyNHxTQk9YW3MyPj4+MTYmMjU1XTw8MTZ8U0JPWFtzMz4+PjgmMjU1XTw8OHxTQk9YWzI1NSZzMF0pXmtleVNjaGVkdWxlW2tzUm93KytdLHQyPShTQk9YW3MyPj4+MjRdPDwyNHxTQk9YW3MzPj4+MTYmMjU1XTw8MTZ8U0JPWFtzMD4+PjgmMjU1XTw8OHxTQk9YWzI1NSZzMV0pXmtleVNjaGVkdWxlW2tzUm93KytdLHQzPShTQk9YW3MzPj4+MjRdPDwyNHxTQk9YW3MwPj4+MTYmMjU1XTw8MTZ8U0JPWFtzMT4+PjgmMjU1XTw8OHxTQk9YWzI1NSZzMl0pXmtleVNjaGVkdWxlW2tzUm93KytdLFt0MD4+Pj0wLHQxPj4+PTAsdDI+Pj49MCx0Mz4+Pj0wXX12YXIgUkNPTj1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0sRz1mdW5jdGlvbigpe2Zvcih2YXIgZD1uZXcgQXJyYXkoMjU2KSxqPTA7ajwyNTY7aisrKWRbal09ajwxMjg/ajw8MTpqPDwxXjI4Mztmb3IodmFyIFNCT1g9W10sSU5WX1NCT1g9W10sU1VCX01JWD1bW10sW10sW10sW11dLElOVl9TVUJfTUlYPVtbXSxbXSxbXSxbXV0seD0wLHhpPTAsaT0wO2k8MjU2OysraSl7dmFyIHN4PXhpXnhpPDwxXnhpPDwyXnhpPDwzXnhpPDw0O3N4PXN4Pj4+OF4yNTUmc3heOTksU0JPWFt4XT1zeCxJTlZfU0JPWFtzeF09eDt2YXIgeDI9ZFt4XSx4ND1kW3gyXSx4OD1kW3g0XSx0PTI1NypkW3N4XV4xNjg0MzAwOCpzeDtTVUJfTUlYWzBdW3hdPXQ8PDI0fHQ+Pj44LFNVQl9NSVhbMV1beF09dDw8MTZ8dD4+PjE2LFNVQl9NSVhbMl1beF09dDw8OHx0Pj4+MjQsU1VCX01JWFszXVt4XT10LHQ9MTY4NDMwMDkqeDheNjU1MzcqeDReMjU3KngyXjE2ODQzMDA4KngsSU5WX1NVQl9NSVhbMF1bc3hdPXQ8PDI0fHQ+Pj44LElOVl9TVUJfTUlYWzFdW3N4XT10PDwxNnx0Pj4+MTYsSU5WX1NVQl9NSVhbMl1bc3hdPXQ8PDh8dD4+PjI0LElOVl9TVUJfTUlYWzNdW3N4XT10LDA9PT14P3g9eGk9MTooeD14Ml5kW2RbZFt4OF54Ml1dXSx4aV49ZFtkW3hpXV0pfXJldHVybntTQk9YLElOVl9TQk9YLFNVQl9NSVgsSU5WX1NVQl9NSVh9fSgpO2Z1bmN0aW9uIEFFUyhrZXkpe3RoaXMuX2tleT1hc1VJbnQzMkFycmF5KGtleSksdGhpcy5fcmVzZXQoKX1BRVMuYmxvY2tTaXplPTE2LEFFUy5rZXlTaXplPTMyLEFFUy5wcm90b3R5cGUuYmxvY2tTaXplPUFFUy5ibG9ja1NpemUsQUVTLnByb3RvdHlwZS5rZXlTaXplPUFFUy5rZXlTaXplLEFFUy5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciBrZXlXb3Jkcz10aGlzLl9rZXksa2V5U2l6ZT1rZXlXb3Jkcy5sZW5ndGgsblJvdW5kcz1rZXlTaXplKzYsa3NSb3dzPTQqKG5Sb3VuZHMrMSksa2V5U2NoZWR1bGU9W10saz0wO2s8a2V5U2l6ZTtrKyspa2V5U2NoZWR1bGVba109a2V5V29yZHNba107Zm9yKGs9a2V5U2l6ZTtrPGtzUm93cztrKyspe3ZhciB0PWtleVNjaGVkdWxlW2stMV07ayVrZXlTaXplPT09MD8odD10PDw4fHQ+Pj4yNCx0PUcuU0JPWFt0Pj4+MjRdPDwyNHxHLlNCT1hbdD4+PjE2JjI1NV08PDE2fEcuU0JPWFt0Pj4+OCYyNTVdPDw4fEcuU0JPWFsyNTUmdF0sdF49UkNPTltrL2tleVNpemV8MF08PDI0KTprZXlTaXplPjYmJmsla2V5U2l6ZT09PTQmJih0PUcuU0JPWFt0Pj4+MjRdPDwyNHxHLlNCT1hbdD4+PjE2JjI1NV08PDE2fEcuU0JPWFt0Pj4+OCYyNTVdPDw4fEcuU0JPWFsyNTUmdF0pLGtleVNjaGVkdWxlW2tdPWtleVNjaGVkdWxlW2sta2V5U2l6ZV1edH1mb3IodmFyIGludktleVNjaGVkdWxlPVtdLGlrPTA7aWs8a3NSb3dzO2lrKyspe3ZhciBrc1I9a3NSb3dzLWlrLHR0PWtleVNjaGVkdWxlW2tzUi0oaWslND8wOjQpXTtpbnZLZXlTY2hlZHVsZVtpa109aWs8NHx8a3NSPD00P3R0OkcuSU5WX1NVQl9NSVhbMF1bRy5TQk9YW3R0Pj4+MjRdXV5HLklOVl9TVUJfTUlYWzFdW0cuU0JPWFt0dD4+PjE2JjI1NV1dXkcuSU5WX1NVQl9NSVhbMl1bRy5TQk9YW3R0Pj4+OCYyNTVdXV5HLklOVl9TVUJfTUlYWzNdW0cuU0JPWFsyNTUmdHRdXX10aGlzLl9uUm91bmRzPW5Sb3VuZHMsdGhpcy5fa2V5U2NoZWR1bGU9a2V5U2NoZWR1bGUsdGhpcy5faW52S2V5U2NoZWR1bGU9aW52S2V5U2NoZWR1bGV9LEFFUy5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKE0pe3JldHVybiBjcnlwdEJsb2NrKE09YXNVSW50MzJBcnJheShNKSx0aGlzLl9rZXlTY2hlZHVsZSxHLlNVQl9NSVgsRy5TQk9YLHRoaXMuX25Sb3VuZHMpfSxBRVMucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihNKXt2YXIgb3V0PXRoaXMuZW5jcnlwdEJsb2NrUmF3KE0pLGJ1Zj1CdWZmZXIuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBidWYud3JpdGVVSW50MzJCRShvdXRbMF0sMCksYnVmLndyaXRlVUludDMyQkUob3V0WzFdLDQpLGJ1Zi53cml0ZVVJbnQzMkJFKG91dFsyXSw4KSxidWYud3JpdGVVSW50MzJCRShvdXRbM10sMTIpLGJ1Zn0sQUVTLnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oTSl7dmFyIG0xPShNPWFzVUludDMyQXJyYXkoTSkpWzFdO01bMV09TVszXSxNWzNdPW0xO3ZhciBvdXQ9Y3J5cHRCbG9jayhNLHRoaXMuX2ludktleVNjaGVkdWxlLEcuSU5WX1NVQl9NSVgsRy5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSxidWY9QnVmZmVyLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gYnVmLndyaXRlVUludDMyQkUob3V0WzBdLDApLGJ1Zi53cml0ZVVJbnQzMkJFKG91dFszXSw0KSxidWYud3JpdGVVSW50MzJCRShvdXRbMl0sOCksYnVmLndyaXRlVUludDMyQkUob3V0WzFdLDEyKSxidWZ9LEFFUy5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtzY3J1YlZlYyh0aGlzLl9rZXlTY2hlZHVsZSksc2NydWJWZWModGhpcy5faW52S2V5U2NoZWR1bGUpLHNjcnViVmVjKHRoaXMuX2tleSl9LG1vZHVsZS5leHBvcnRzLkFFUz1BRVN9LCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvYXV0aENpcGhlci5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgYWVzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9hZXMuanMiKSxCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLFRyYW5zZm9ybT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY2lwaGVyLWJhc2UvaW5kZXguanMiKSxpbmhlcml0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpLEdIQVNIPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9naGFzaC5qcyIpLHhvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnVmZmVyLXhvci9pbmRleC5qcyIpLGluY3IzMj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvaW5jcjMyLmpzIik7ZnVuY3Rpb24gU3RyZWFtQ2lwaGVyKG1vZGUsa2V5LGl2LGRlY3J5cHQpe1RyYW5zZm9ybS5jYWxsKHRoaXMpO3ZhciBoPUJ1ZmZlci5hbGxvYyg0LDApO3RoaXMuX2NpcGhlcj1uZXcgYWVzLkFFUyhrZXkpO3ZhciBjaz10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGgpO3RoaXMuX2doYXNoPW5ldyBHSEFTSChjayksaXY9ZnVuY3Rpb24gY2FsY0l2KHNlbGYsaXYsY2spe2lmKDEyPT09aXYubGVuZ3RoKXJldHVybiBzZWxmLl9maW5JRD1CdWZmZXIuY29uY2F0KFtpdixCdWZmZXIuZnJvbShbMCwwLDAsMV0pXSksQnVmZmVyLmNvbmNhdChbaXYsQnVmZmVyLmZyb20oWzAsMCwwLDJdKV0pO3ZhciBnaGFzaD1uZXcgR0hBU0goY2spLGxlbj1pdi5sZW5ndGgsdG9QYWQ9bGVuJTE2O2doYXNoLnVwZGF0ZShpdiksdG9QYWQmJih0b1BhZD0xNi10b1BhZCxnaGFzaC51cGRhdGUoQnVmZmVyLmFsbG9jKHRvUGFkLDApKSksZ2hhc2gudXBkYXRlKEJ1ZmZlci5hbGxvYyg4LDApKTt2YXIgaXZCaXRzPTgqbGVuLHRhaWw9QnVmZmVyLmFsbG9jKDgpO3RhaWwud3JpdGVVSW50QkUoaXZCaXRzLDAsOCksZ2hhc2gudXBkYXRlKHRhaWwpLHNlbGYuX2ZpbklEPWdoYXNoLnN0YXRlO3ZhciBvdXQ9QnVmZmVyLmZyb20oc2VsZi5fZmluSUQpO3JldHVybiBpbmNyMzIob3V0KSxvdXR9KHRoaXMsaXYsY2spLHRoaXMuX3ByZXY9QnVmZmVyLmZyb20oaXYpLHRoaXMuX2NhY2hlPUJ1ZmZlci5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1CdWZmZXIuYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1kZWNyeXB0LHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCx0aGlzLl9tb2RlPW1vZGUsdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1pbmhlcml0cyhTdHJlYW1DaXBoZXIsVHJhbnNmb3JtKSxTdHJlYW1DaXBoZXIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oY2h1bmspe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBydW1wPTE2LXRoaXMuX2FsZW4lMTY7cnVtcDwxNiYmKHJ1bXA9QnVmZmVyLmFsbG9jKHJ1bXAsMCksdGhpcy5fZ2hhc2gudXBkYXRlKHJ1bXApKX10aGlzLl9jYWxsZWQ9ITA7dmFyIG91dD10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxjaHVuayk7cmV0dXJuIHRoaXMuX2RlY3J5cHQ/dGhpcy5fZ2hhc2gudXBkYXRlKGNodW5rKTp0aGlzLl9naGFzaC51cGRhdGUob3V0KSx0aGlzLl9sZW4rPWNodW5rLmxlbmd0aCxvdXR9LFN0cmVhbUNpcGhlci5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgdGFnPXhvcih0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbiB4b3JUZXN0KGEsYil7dmFyIG91dD0wO2EubGVuZ3RoIT09Yi5sZW5ndGgmJm91dCsrO2Zvcih2YXIgbGVuPU1hdGgubWluKGEubGVuZ3RoLGIubGVuZ3RoKSxpPTA7aTxsZW47KytpKW91dCs9YVtpXV5iW2ldO3JldHVybiBvdXR9KHRhZyx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9dGFnLHRoaXMuX2NpcGhlci5zY3J1YigpfSxTdHJlYW1DaXBoZXIucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24gZ2V0QXV0aFRhZygpe2lmKHRoaXMuX2RlY3J5cHR8fCFCdWZmZXIuaXNCdWZmZXIodGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3JldHVybiB0aGlzLl9hdXRoVGFnfSxTdHJlYW1DaXBoZXIucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24gc2V0QXV0aFRhZyh0YWcpe2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9hdXRoVGFnPXRhZ30sU3RyZWFtQ2lwaGVyLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24gc2V0QUFEKGJ1Zil7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKGJ1ZiksdGhpcy5fYWxlbis9YnVmLmxlbmd0aH0sbW9kdWxlLmV4cG9ydHM9U3RyZWFtQ2lwaGVyfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2Jyb3dzZXIuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIGNpcGhlcnM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2VuY3J5cHRlci5qcyIpLGRlY2lwaGVycz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvZGVjcnlwdGVyLmpzIiksbW9kZXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2xpc3QuanNvbiIpO2V4cG9ydHMuY3JlYXRlQ2lwaGVyPWV4cG9ydHMuQ2lwaGVyPWNpcGhlcnMuY3JlYXRlQ2lwaGVyLGV4cG9ydHMuY3JlYXRlQ2lwaGVyaXY9ZXhwb3J0cy5DaXBoZXJpdj1jaXBoZXJzLmNyZWF0ZUNpcGhlcml2LGV4cG9ydHMuY3JlYXRlRGVjaXBoZXI9ZXhwb3J0cy5EZWNpcGhlcj1kZWNpcGhlcnMuY3JlYXRlRGVjaXBoZXIsZXhwb3J0cy5jcmVhdGVEZWNpcGhlcml2PWV4cG9ydHMuRGVjaXBoZXJpdj1kZWNpcGhlcnMuY3JlYXRlRGVjaXBoZXJpdixleHBvcnRzLmxpc3RDaXBoZXJzPWV4cG9ydHMuZ2V0Q2lwaGVycz1mdW5jdGlvbiBnZXRDaXBoZXJzKCl7cmV0dXJuIE9iamVjdC5rZXlzKG1vZGVzKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvZGVjcnlwdGVyLmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBBdXRoQ2lwaGVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9hdXRoQ2lwaGVyLmpzIiksQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcixNT0RFUz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvaW5kZXguanMiKSxTdHJlYW1DaXBoZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL3N0cmVhbUNpcGhlci5qcyIpLFRyYW5zZm9ybT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY2lwaGVyLWJhc2UvaW5kZXguanMiKSxhZXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2Flcy5qcyIpLGVidGs9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2V2cF9ieXRlc3Rva2V5L2luZGV4LmpzIik7ZnVuY3Rpb24gRGVjaXBoZXIobW9kZSxrZXksaXYpe1RyYW5zZm9ybS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBTcGxpdHRlcix0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IGFlcy5BRVMoa2V5KSx0aGlzLl9wcmV2PUJ1ZmZlci5mcm9tKGl2KSx0aGlzLl9tb2RlPW1vZGUsdGhpcy5fYXV0b3BhZGRpbmc9ITB9ZnVuY3Rpb24gU3BsaXR0ZXIoKXt0aGlzLmNhY2hlPUJ1ZmZlci5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBjcmVhdGVEZWNpcGhlcml2KHN1aXRlLHBhc3N3b3JkLGl2KXt2YXIgY29uZmlnPU1PREVTW3N1aXRlLnRvTG93ZXJDYXNlKCldO2lmKCFjb25maWcpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBpdiYmKGl2PUJ1ZmZlci5mcm9tKGl2KSksIkdDTSIhPT1jb25maWcubW9kZSYmaXYubGVuZ3RoIT09Y29uZmlnLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIraXYubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIHBhc3N3b3JkJiYocGFzc3dvcmQ9QnVmZmVyLmZyb20ocGFzc3dvcmQpKSxwYXNzd29yZC5sZW5ndGghPT1jb25maWcua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrcGFzc3dvcmQubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PWNvbmZpZy50eXBlP25ldyBTdHJlYW1DaXBoZXIoY29uZmlnLm1vZHVsZSxwYXNzd29yZCxpdiwhMCk6ImF1dGgiPT09Y29uZmlnLnR5cGU/bmV3IEF1dGhDaXBoZXIoY29uZmlnLm1vZHVsZSxwYXNzd29yZCxpdiwhMCk6bmV3IERlY2lwaGVyKGNvbmZpZy5tb2R1bGUscGFzc3dvcmQsaXYpfV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIikoRGVjaXBoZXIsVHJhbnNmb3JtKSxEZWNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihkYXRhKXt2YXIgY2h1bmssdGhpbmc7dGhpcy5fY2FjaGUuYWRkKGRhdGEpO2Zvcih2YXIgb3V0PVtdO2NodW5rPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KXRoaW5nPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLGNodW5rKSxvdXQucHVzaCh0aGluZyk7cmV0dXJuIEJ1ZmZlci5jb25jYXQob3V0KX0sRGVjaXBoZXIucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBjaHVuaz10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBmdW5jdGlvbiB1bnBhZChsYXN0KXt2YXIgcGFkZGVkPWxhc3RbMTVdO2lmKHBhZGRlZDwxfHxwYWRkZWQ+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7dmFyIGk9LTE7Zm9yKDsrK2k8cGFkZGVkOylpZihsYXN0W2krKDE2LXBhZGRlZCldIT09cGFkZGVkKXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2lmKDE2PT09cGFkZGVkKXJldHVybjtyZXR1cm4gbGFzdC5zbGljZSgwLDE2LXBhZGRlZCl9KHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLGNodW5rKSk7aWYoY2h1bmspdGhyb3cgbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sRGVjaXBoZXIucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHNldFRvKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFzZXRUbyx0aGlzfSxTcGxpdHRlci5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGRhdGEpe3RoaXMuY2FjaGU9QnVmZmVyLmNvbmNhdChbdGhpcy5jYWNoZSxkYXRhXSl9LFNwbGl0dGVyLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYXV0b1BhZGRpbmcpe3ZhciBvdXQ7aWYoYXV0b1BhZGRpbmcpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBvdXQ9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLG91dH1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gb3V0PXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxvdXQ7cmV0dXJuIG51bGx9LFNwbGl0dGVyLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfSxleHBvcnRzLmNyZWF0ZURlY2lwaGVyPWZ1bmN0aW9uIGNyZWF0ZURlY2lwaGVyKHN1aXRlLHBhc3N3b3JkKXt2YXIgY29uZmlnPU1PREVTW3N1aXRlLnRvTG93ZXJDYXNlKCldO2lmKCFjb25maWcpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIGtleXM9ZWJ0ayhwYXNzd29yZCwhMSxjb25maWcua2V5LGNvbmZpZy5pdik7cmV0dXJuIGNyZWF0ZURlY2lwaGVyaXYoc3VpdGUsa2V5cy5rZXksa2V5cy5pdil9LGV4cG9ydHMuY3JlYXRlRGVjaXBoZXJpdj1jcmVhdGVEZWNpcGhlcml2fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2VuY3J5cHRlci5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgTU9ERVM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2luZGV4LmpzIiksQXV0aENpcGhlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvYXV0aENpcGhlci5qcyIpLEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXIsU3RyZWFtQ2lwaGVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9zdHJlYW1DaXBoZXIuanMiKSxUcmFuc2Zvcm09X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NpcGhlci1iYXNlL2luZGV4LmpzIiksYWVzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9hZXMuanMiKSxlYnRrPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ldnBfYnl0ZXN0b2tleS9pbmRleC5qcyIpO2Z1bmN0aW9uIENpcGhlcihtb2RlLGtleSxpdil7VHJhbnNmb3JtLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IFNwbGl0dGVyLHRoaXMuX2NpcGhlcj1uZXcgYWVzLkFFUyhrZXkpLHRoaXMuX3ByZXY9QnVmZmVyLmZyb20oaXYpLHRoaXMuX21vZGU9bW9kZSx0aGlzLl9hdXRvcGFkZGluZz0hMH1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpKENpcGhlcixUcmFuc2Zvcm0pLENpcGhlci5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihkYXRhKXt2YXIgY2h1bmssdGhpbmc7dGhpcy5fY2FjaGUuYWRkKGRhdGEpO2Zvcih2YXIgb3V0PVtdO2NodW5rPXRoaXMuX2NhY2hlLmdldCgpOyl0aGluZz10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxjaHVuayksb3V0LnB1c2godGhpbmcpO3JldHVybiBCdWZmZXIuY29uY2F0KG91dCl9O3ZhciBQQURESU5HPUJ1ZmZlci5hbGxvYygxNiwxNik7ZnVuY3Rpb24gU3BsaXR0ZXIoKXt0aGlzLmNhY2hlPUJ1ZmZlci5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBjcmVhdGVDaXBoZXJpdihzdWl0ZSxwYXNzd29yZCxpdil7dmFyIGNvbmZpZz1NT0RFU1tzdWl0ZS50b0xvd2VyQ2FzZSgpXTtpZighY29uZmlnKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgcGFzc3dvcmQmJihwYXNzd29yZD1CdWZmZXIuZnJvbShwYXNzd29yZCkpLHBhc3N3b3JkLmxlbmd0aCE9PWNvbmZpZy5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitwYXNzd29yZC5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgaXYmJihpdj1CdWZmZXIuZnJvbShpdikpLCJHQ00iIT09Y29uZmlnLm1vZGUmJml2Lmxlbmd0aCE9PWNvbmZpZy5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK2l2Lmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1jb25maWcudHlwZT9uZXcgU3RyZWFtQ2lwaGVyKGNvbmZpZy5tb2R1bGUscGFzc3dvcmQsaXYpOiJhdXRoIj09PWNvbmZpZy50eXBlP25ldyBBdXRoQ2lwaGVyKGNvbmZpZy5tb2R1bGUscGFzc3dvcmQsaXYpOm5ldyBDaXBoZXIoY29uZmlnLm1vZHVsZSxwYXNzd29yZCxpdil9Q2lwaGVyLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgY2h1bms9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gY2h1bms9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsY2h1bmspLHRoaXMuX2NpcGhlci5zY3J1YigpLGNodW5rO2lmKCFjaHVuay5lcXVhbHMoUEFERElORykpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sQ2lwaGVyLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihzZXRUbyl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhc2V0VG8sdGhpc30sU3BsaXR0ZXIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihkYXRhKXt0aGlzLmNhY2hlPUJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsZGF0YV0pfSxTcGxpdHRlci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciBvdXQ9dGhpcy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxvdXR9cmV0dXJuIG51bGx9LFNwbGl0dGVyLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgbGVuPTE2LXRoaXMuY2FjaGUubGVuZ3RoLHBhZEJ1ZmY9QnVmZmVyLmFsbG9jVW5zYWZlKGxlbiksaT0tMTsrK2k8bGVuOylwYWRCdWZmLndyaXRlVUludDgobGVuLGkpO3JldHVybiBCdWZmZXIuY29uY2F0KFt0aGlzLmNhY2hlLHBhZEJ1ZmZdKX0sZXhwb3J0cy5jcmVhdGVDaXBoZXJpdj1jcmVhdGVDaXBoZXJpdixleHBvcnRzLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbiBjcmVhdGVDaXBoZXIoc3VpdGUscGFzc3dvcmQpe3ZhciBjb25maWc9TU9ERVNbc3VpdGUudG9Mb3dlckNhc2UoKV07aWYoIWNvbmZpZyl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIga2V5cz1lYnRrKHBhc3N3b3JkLCExLGNvbmZpZy5rZXksY29uZmlnLml2KTtyZXR1cm4gY3JlYXRlQ2lwaGVyaXYoc3VpdGUsa2V5cy5rZXksa2V5cy5pdil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2doYXNoLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLFpFUk9FUz1CdWZmZXIuYWxsb2MoMTYsMCk7ZnVuY3Rpb24gZnJvbUFycmF5KG91dCl7dmFyIGJ1Zj1CdWZmZXIuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBidWYud3JpdGVVSW50MzJCRShvdXRbMF0+Pj4wLDApLGJ1Zi53cml0ZVVJbnQzMkJFKG91dFsxXT4+PjAsNCksYnVmLndyaXRlVUludDMyQkUob3V0WzJdPj4+MCw4KSxidWYud3JpdGVVSW50MzJCRShvdXRbM10+Pj4wLDEyKSxidWZ9ZnVuY3Rpb24gR0hBU0goa2V5KXt0aGlzLmg9a2V5LHRoaXMuc3RhdGU9QnVmZmVyLmFsbG9jKDE2LDApLHRoaXMuY2FjaGU9QnVmZmVyLmFsbG9jVW5zYWZlKDApfUdIQVNILnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihibG9jayl7Zm9yKHZhciBpPS0xOysraTxibG9jay5sZW5ndGg7KXRoaXMuc3RhdGVbaV1ePWJsb2NrW2ldO3RoaXMuX211bHRpcGx5KCl9LEdIQVNILnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIGosbHNiVmksVmk9ZnVuY3Rpb24gdG9BcnJheShidWYpe3JldHVybltidWYucmVhZFVJbnQzMkJFKDApLGJ1Zi5yZWFkVUludDMyQkUoNCksYnVmLnJlYWRVSW50MzJCRSg4KSxidWYucmVhZFVJbnQzMkJFKDEyKV19KHRoaXMuaCksWmk9WzAsMCwwLDBdLGk9LTE7KytpPDEyODspe2ZvcighISh0aGlzLnN0YXRlW35+KGkvOCldJjE8PDctaSU4KSYmKFppWzBdXj1WaVswXSxaaVsxXV49VmlbMV0sWmlbMl1ePVZpWzJdLFppWzNdXj1WaVszXSksbHNiVmk9ISEoMSZWaVszXSksaj0zO2o+MDtqLS0pVmlbal09Vmlbal0+Pj4xfCgxJlZpW2otMV0pPDwzMTtWaVswXT1WaVswXT4+PjEsbHNiVmkmJihWaVswXT1WaVswXV4yMjU8PDI0KX10aGlzLnN0YXRlPWZyb21BcnJheShaaSl9LEdIQVNILnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oYnVmKXt2YXIgY2h1bms7Zm9yKHRoaXMuY2FjaGU9QnVmZmVyLmNvbmNhdChbdGhpcy5jYWNoZSxidWZdKTt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KWNodW5rPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKGNodW5rKX0sR0hBU0gucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKGFibCxibCl7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKEJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsWkVST0VTXSwxNikpLHRoaXMuZ2hhc2goZnJvbUFycmF5KFswLGFibCwwLGJsXSkpLHRoaXMuc3RhdGV9LG1vZHVsZS5leHBvcnRzPUdIQVNIfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2luY3IzMi5qcyIobW9kdWxlKXttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBpbmNyMzIoaXYpe2Zvcih2YXIgaXRlbSxsZW49aXYubGVuZ3RoO2xlbi0tOyl7aWYoMjU1IT09KGl0ZW09aXYucmVhZFVJbnQ4KGxlbikpKXtpdGVtKyssaXYud3JpdGVVSW50OChpdGVtLGxlbik7YnJlYWt9aXYud3JpdGVVSW50OCgwLGxlbil9fX0sIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9jYmMuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIHhvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnVmZmVyLXhvci9pbmRleC5qcyIpO2V4cG9ydHMuZW5jcnlwdD1mdW5jdGlvbihzZWxmLGJsb2NrKXt2YXIgZGF0YT14b3IoYmxvY2ssc2VsZi5fcHJldik7cmV0dXJuIHNlbGYuX3ByZXY9c2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhkYXRhKSxzZWxmLl9wcmV2fSxleHBvcnRzLmRlY3J5cHQ9ZnVuY3Rpb24oc2VsZixibG9jayl7dmFyIHBhZD1zZWxmLl9wcmV2O3NlbGYuX3ByZXY9YmxvY2s7dmFyIG91dD1zZWxmLl9jaXBoZXIuZGVjcnlwdEJsb2NrKGJsb2NrKTtyZXR1cm4geG9yKG91dCxwYWQpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9jZmIuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXIseG9yPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9idWZmZXIteG9yL2luZGV4LmpzIik7ZnVuY3Rpb24gZW5jcnlwdFN0YXJ0KHNlbGYsZGF0YSxkZWNyeXB0KXt2YXIgbGVuPWRhdGEubGVuZ3RoLG91dD14b3IoZGF0YSxzZWxmLl9jYWNoZSk7cmV0dXJuIHNlbGYuX2NhY2hlPXNlbGYuX2NhY2hlLnNsaWNlKGxlbiksc2VsZi5fcHJldj1CdWZmZXIuY29uY2F0KFtzZWxmLl9wcmV2LGRlY3J5cHQ/ZGF0YTpvdXRdKSxvdXR9ZXhwb3J0cy5lbmNyeXB0PWZ1bmN0aW9uKHNlbGYsZGF0YSxkZWNyeXB0KXtmb3IodmFyIGxlbixvdXQ9QnVmZmVyLmFsbG9jVW5zYWZlKDApO2RhdGEubGVuZ3RoOyl7aWYoMD09PXNlbGYuX2NhY2hlLmxlbmd0aCYmKHNlbGYuX2NhY2hlPXNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soc2VsZi5fcHJldiksc2VsZi5fcHJldj1CdWZmZXIuYWxsb2NVbnNhZmUoMCkpLCEoc2VsZi5fY2FjaGUubGVuZ3RoPD1kYXRhLmxlbmd0aCkpe291dD1CdWZmZXIuY29uY2F0KFtvdXQsZW5jcnlwdFN0YXJ0KHNlbGYsZGF0YSxkZWNyeXB0KV0pO2JyZWFrfWxlbj1zZWxmLl9jYWNoZS5sZW5ndGgsb3V0PUJ1ZmZlci5jb25jYXQoW291dCxlbmNyeXB0U3RhcnQoc2VsZixkYXRhLnNsaWNlKDAsbGVuKSxkZWNyeXB0KV0pLGRhdGE9ZGF0YS5zbGljZShsZW4pfXJldHVybiBvdXR9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2NmYjEuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXI7ZnVuY3Rpb24gZW5jcnlwdEJ5dGUoc2VsZixieXRlUGFyYW0sZGVjcnlwdCl7Zm9yKHZhciBiaXQsdmFsdWUsaT0tMSxvdXQ9MDsrK2k8ODspYml0PWJ5dGVQYXJhbSYxPDw3LWk/MTI4OjAsb3V0Kz0oMTI4Jih2YWx1ZT1zZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHNlbGYuX3ByZXYpWzBdXmJpdCkpPj5pJTgsc2VsZi5fcHJldj1zaGlmdEluKHNlbGYuX3ByZXYsZGVjcnlwdD9iaXQ6dmFsdWUpO3JldHVybiBvdXR9ZnVuY3Rpb24gc2hpZnRJbihidWZmZXIsdmFsdWUpe3ZhciBsZW49YnVmZmVyLmxlbmd0aCxpPS0xLG91dD1CdWZmZXIuYWxsb2NVbnNhZmUoYnVmZmVyLmxlbmd0aCk7Zm9yKGJ1ZmZlcj1CdWZmZXIuY29uY2F0KFtidWZmZXIsQnVmZmVyLmZyb20oW3ZhbHVlXSldKTsrK2k8bGVuOylvdXRbaV09YnVmZmVyW2ldPDwxfGJ1ZmZlcltpKzFdPj43O3JldHVybiBvdXR9ZXhwb3J0cy5lbmNyeXB0PWZ1bmN0aW9uKHNlbGYsY2h1bmssZGVjcnlwdCl7Zm9yKHZhciBsZW49Y2h1bmsubGVuZ3RoLG91dD1CdWZmZXIuYWxsb2NVbnNhZmUobGVuKSxpPS0xOysraTxsZW47KW91dFtpXT1lbmNyeXB0Qnl0ZShzZWxmLGNodW5rW2ldLGRlY3J5cHQpO3JldHVybiBvdXR9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2NmYjguanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXI7ZnVuY3Rpb24gZW5jcnlwdEJ5dGUoc2VsZixieXRlUGFyYW0sZGVjcnlwdCl7dmFyIG91dD1zZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHNlbGYuX3ByZXYpWzBdXmJ5dGVQYXJhbTtyZXR1cm4gc2VsZi5fcHJldj1CdWZmZXIuY29uY2F0KFtzZWxmLl9wcmV2LnNsaWNlKDEpLEJ1ZmZlci5mcm9tKFtkZWNyeXB0P2J5dGVQYXJhbTpvdXRdKV0pLG91dH1leHBvcnRzLmVuY3J5cHQ9ZnVuY3Rpb24oc2VsZixjaHVuayxkZWNyeXB0KXtmb3IodmFyIGxlbj1jaHVuay5sZW5ndGgsb3V0PUJ1ZmZlci5hbGxvY1Vuc2FmZShsZW4pLGk9LTE7KytpPGxlbjspb3V0W2ldPWVuY3J5cHRCeXRlKHNlbGYsY2h1bmtbaV0sZGVjcnlwdCk7cmV0dXJuIG91dH19LCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY3RyLmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciB4b3I9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci14b3IvaW5kZXguanMiKSxCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLGluY3IzMj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvaW5jcjMyLmpzIik7ZnVuY3Rpb24gZ2V0QmxvY2soc2VsZil7dmFyIG91dD1zZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KHNlbGYuX3ByZXYpO3JldHVybiBpbmNyMzIoc2VsZi5fcHJldiksb3V0fWV4cG9ydHMuZW5jcnlwdD1mdW5jdGlvbihzZWxmLGNodW5rKXt2YXIgY2h1bmtOdW09TWF0aC5jZWlsKGNodW5rLmxlbmd0aC8xNiksc3RhcnQ9c2VsZi5fY2FjaGUubGVuZ3RoO3NlbGYuX2NhY2hlPUJ1ZmZlci5jb25jYXQoW3NlbGYuX2NhY2hlLEJ1ZmZlci5hbGxvY1Vuc2FmZSgxNipjaHVua051bSldKTtmb3IodmFyIGk9MDtpPGNodW5rTnVtO2krKyl7dmFyIG91dD1nZXRCbG9jayhzZWxmKSxvZmZzZXQ9c3RhcnQrMTYqaTtzZWxmLl9jYWNoZS53cml0ZVVJbnQzMkJFKG91dFswXSxvZmZzZXQrMCksc2VsZi5fY2FjaGUud3JpdGVVSW50MzJCRShvdXRbMV0sb2Zmc2V0KzQpLHNlbGYuX2NhY2hlLndyaXRlVUludDMyQkUob3V0WzJdLG9mZnNldCs4KSxzZWxmLl9jYWNoZS53cml0ZVVJbnQzMkJFKG91dFszXSxvZmZzZXQrMTIpfXZhciBwYWQ9c2VsZi5fY2FjaGUuc2xpY2UoMCxjaHVuay5sZW5ndGgpO3JldHVybiBzZWxmLl9jYWNoZT1zZWxmLl9jYWNoZS5zbGljZShjaHVuay5sZW5ndGgpLHhvcihjaHVuayxwYWQpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9lY2IuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMpe2V4cG9ydHMuZW5jcnlwdD1mdW5jdGlvbihzZWxmLGJsb2NrKXtyZXR1cm4gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhibG9jayl9LGV4cG9ydHMuZGVjcnlwdD1mdW5jdGlvbihzZWxmLGJsb2NrKXtyZXR1cm4gc2VsZi5fY2lwaGVyLmRlY3J5cHRCbG9jayhibG9jayl9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBtb2RlTW9kdWxlcz17RUNCOl9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9lY2IuanMiKSxDQkM6X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2NiYy5qcyIpLENGQjpfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2ZiLmpzIiksQ0ZCODpfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2ZiOC5qcyIpLENGQjE6X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2NmYjEuanMiKSxPRkI6X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL29mYi5qcyIpLENUUjpfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY3RyLmpzIiksR0NNOl9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9jdHIuanMiKX0sbW9kZXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2xpc3QuanNvbiIpO2Zvcih2YXIga2V5IGluIG1vZGVzKW1vZGVzW2tleV0ubW9kdWxlPW1vZGVNb2R1bGVzW21vZGVzW2tleV0ubW9kZV07bW9kdWxlLmV4cG9ydHM9bW9kZXN9LCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvb2ZiLmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpLHhvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnVmZmVyLXhvci9pbmRleC5qcyIpO2Z1bmN0aW9uIGdldEJsb2NrKHNlbGYpe3JldHVybiBzZWxmLl9wcmV2PXNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soc2VsZi5fcHJldiksc2VsZi5fcHJldn1leHBvcnRzLmVuY3J5cHQ9ZnVuY3Rpb24oc2VsZixjaHVuayl7Zm9yKDtzZWxmLl9jYWNoZS5sZW5ndGg8Y2h1bmsubGVuZ3RoOylzZWxmLl9jYWNoZT1CdWZmZXIuY29uY2F0KFtzZWxmLl9jYWNoZSxnZXRCbG9jayhzZWxmKV0pO3ZhciBwYWQ9c2VsZi5fY2FjaGUuc2xpY2UoMCxjaHVuay5sZW5ndGgpO3JldHVybiBzZWxmLl9jYWNoZT1zZWxmLl9jYWNoZS5zbGljZShjaHVuay5sZW5ndGgpLHhvcihjaHVuayxwYWQpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9zdHJlYW1DaXBoZXIuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIGFlcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvYWVzLmpzIiksQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcixUcmFuc2Zvcm09X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NpcGhlci1iYXNlL2luZGV4LmpzIik7ZnVuY3Rpb24gU3RyZWFtQ2lwaGVyKG1vZGUsa2V5LGl2LGRlY3J5cHQpe1RyYW5zZm9ybS5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgYWVzLkFFUyhrZXkpLHRoaXMuX3ByZXY9QnVmZmVyLmZyb20oaXYpLHRoaXMuX2NhY2hlPUJ1ZmZlci5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1CdWZmZXIuYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1kZWNyeXB0LHRoaXMuX21vZGU9bW9kZX1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpKFN0cmVhbUNpcGhlcixUcmFuc2Zvcm0pLFN0cmVhbUNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihjaHVuayl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLGNodW5rLHRoaXMuX2RlY3J5cHQpfSxTdHJlYW1DaXBoZXIucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfSxtb2R1bGUuZXhwb3J0cz1TdHJlYW1DaXBoZXJ9LCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1jaXBoZXIvYnJvd3Nlci5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgREVTPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWRlcy9pbmRleC5qcyIpLGFlcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvYnJvd3Nlci5qcyIpLGFlc01vZGVzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9pbmRleC5qcyIpLGRlc01vZGVzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWRlcy9tb2Rlcy5qcyIpLGVidGs9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2V2cF9ieXRlc3Rva2V5L2luZGV4LmpzIik7ZnVuY3Rpb24gY3JlYXRlQ2lwaGVyaXYoc3VpdGUsa2V5LGl2KXtpZihzdWl0ZT1zdWl0ZS50b0xvd2VyQ2FzZSgpLGFlc01vZGVzW3N1aXRlXSlyZXR1cm4gYWVzLmNyZWF0ZUNpcGhlcml2KHN1aXRlLGtleSxpdik7aWYoZGVzTW9kZXNbc3VpdGVdKXJldHVybiBuZXcgREVTKHtrZXksaXYsbW9kZTpzdWl0ZX0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIGNyZWF0ZURlY2lwaGVyaXYoc3VpdGUsa2V5LGl2KXtpZihzdWl0ZT1zdWl0ZS50b0xvd2VyQ2FzZSgpLGFlc01vZGVzW3N1aXRlXSlyZXR1cm4gYWVzLmNyZWF0ZURlY2lwaGVyaXYoc3VpdGUsa2V5LGl2KTtpZihkZXNNb2Rlc1tzdWl0ZV0pcmV0dXJuIG5ldyBERVMoe2tleSxpdixtb2RlOnN1aXRlLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1leHBvcnRzLmNyZWF0ZUNpcGhlcj1leHBvcnRzLkNpcGhlcj1mdW5jdGlvbiBjcmVhdGVDaXBoZXIoc3VpdGUscGFzc3dvcmQpe3ZhciBrZXlMZW4saXZMZW47aWYoc3VpdGU9c3VpdGUudG9Mb3dlckNhc2UoKSxhZXNNb2Rlc1tzdWl0ZV0pa2V5TGVuPWFlc01vZGVzW3N1aXRlXS5rZXksaXZMZW49YWVzTW9kZXNbc3VpdGVdLml2O2Vsc2V7aWYoIWRlc01vZGVzW3N1aXRlXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtrZXlMZW49OCpkZXNNb2Rlc1tzdWl0ZV0ua2V5LGl2TGVuPWRlc01vZGVzW3N1aXRlXS5pdn12YXIga2V5cz1lYnRrKHBhc3N3b3JkLCExLGtleUxlbixpdkxlbik7cmV0dXJuIGNyZWF0ZUNpcGhlcml2KHN1aXRlLGtleXMua2V5LGtleXMuaXYpfSxleHBvcnRzLmNyZWF0ZUNpcGhlcml2PWV4cG9ydHMuQ2lwaGVyaXY9Y3JlYXRlQ2lwaGVyaXYsZXhwb3J0cy5jcmVhdGVEZWNpcGhlcj1leHBvcnRzLkRlY2lwaGVyPWZ1bmN0aW9uIGNyZWF0ZURlY2lwaGVyKHN1aXRlLHBhc3N3b3JkKXt2YXIga2V5TGVuLGl2TGVuO2lmKHN1aXRlPXN1aXRlLnRvTG93ZXJDYXNlKCksYWVzTW9kZXNbc3VpdGVdKWtleUxlbj1hZXNNb2Rlc1tzdWl0ZV0ua2V5LGl2TGVuPWFlc01vZGVzW3N1aXRlXS5pdjtlbHNle2lmKCFkZXNNb2Rlc1tzdWl0ZV0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7a2V5TGVuPTgqZGVzTW9kZXNbc3VpdGVdLmtleSxpdkxlbj1kZXNNb2Rlc1tzdWl0ZV0uaXZ9dmFyIGtleXM9ZWJ0ayhwYXNzd29yZCwhMSxrZXlMZW4saXZMZW4pO3JldHVybiBjcmVhdGVEZWNpcGhlcml2KHN1aXRlLGtleXMua2V5LGtleXMuaXYpfSxleHBvcnRzLmNyZWF0ZURlY2lwaGVyaXY9ZXhwb3J0cy5EZWNpcGhlcml2PWNyZWF0ZURlY2lwaGVyaXYsZXhwb3J0cy5saXN0Q2lwaGVycz1leHBvcnRzLmdldENpcGhlcnM9ZnVuY3Rpb24gZ2V0Q2lwaGVycygpe3JldHVybiBPYmplY3Qua2V5cyhkZXNNb2RlcykuY29uY2F0KGFlcy5nZXRDaXBoZXJzKCkpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWRlcy9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgQ2lwaGVyQmFzZT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY2lwaGVyLWJhc2UvaW5kZXguanMiKSxkZXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Rlcy5qcy9saWIvZGVzLmpzIiksaW5oZXJpdHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKSxCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLG1vZGVzPXsiZGVzLWVkZTMtY2JjIjpkZXMuQ0JDLmluc3RhbnRpYXRlKGRlcy5FREUpLCJkZXMtZWRlMyI6ZGVzLkVERSwiZGVzLWVkZS1jYmMiOmRlcy5DQkMuaW5zdGFudGlhdGUoZGVzLkVERSksImRlcy1lZGUiOmRlcy5FREUsImRlcy1jYmMiOmRlcy5DQkMuaW5zdGFudGlhdGUoZGVzLkRFUyksImRlcy1lY2IiOmRlcy5ERVN9O2Z1bmN0aW9uIERFUyhvcHRzKXtDaXBoZXJCYXNlLmNhbGwodGhpcyk7dmFyIHR5cGUsbW9kZU5hbWU9b3B0cy5tb2RlLnRvTG93ZXJDYXNlKCksbW9kZT1tb2Rlc1ttb2RlTmFtZV07dHlwZT1vcHRzLmRlY3J5cHQ/ImRlY3J5cHQiOiJlbmNyeXB0Ijt2YXIga2V5PW9wdHMua2V5O0J1ZmZlci5pc0J1ZmZlcihrZXkpfHwoa2V5PUJ1ZmZlci5mcm9tKGtleSkpLCJkZXMtZWRlIiE9PW1vZGVOYW1lJiYiZGVzLWVkZS1jYmMiIT09bW9kZU5hbWV8fChrZXk9QnVmZmVyLmNvbmNhdChba2V5LGtleS5zbGljZSgwLDgpXSkpO3ZhciBpdj1vcHRzLml2O0J1ZmZlci5pc0J1ZmZlcihpdil8fChpdj1CdWZmZXIuZnJvbShpdikpLHRoaXMuX2Rlcz1tb2RlLmNyZWF0ZSh7a2V5LGl2LHR5cGV9KX1tb2Rlcy5kZXM9bW9kZXNbImRlcy1jYmMiXSxtb2Rlcy5kZXMzPW1vZGVzWyJkZXMtZWRlMy1jYmMiXSxtb2R1bGUuZXhwb3J0cz1ERVMsaW5oZXJpdHMoREVTLENpcGhlckJhc2UpLERFUy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihkYXRhKXtyZXR1cm4gQnVmZmVyLmZyb20odGhpcy5fZGVzLnVwZGF0ZShkYXRhKSl9LERFUy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1kZXMvbW9kZXMuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMpe2V4cG9ydHNbImRlcy1lY2IiXT17a2V5OjgsaXY6MH0sZXhwb3J0c1siZGVzLWNiYyJdPWV4cG9ydHMuZGVzPXtrZXk6OCxpdjo4fSxleHBvcnRzWyJkZXMtZWRlMy1jYmMiXT1leHBvcnRzLmRlczM9e2tleToyNCxpdjo4fSxleHBvcnRzWyJkZXMtZWRlMyJdPXtrZXk6MjQsaXY6MH0sZXhwb3J0c1siZGVzLWVkZS1jYmMiXT17a2V5OjE2LGl2Ojh9LGV4cG9ydHNbImRlcy1lZGUiXT17a2V5OjE2LGl2OjB9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktcnNhL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgQk49X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2JuLmpzL2xpYi9ibi5qcyIpLHJhbmRvbUJ5dGVzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9yYW5kb21ieXRlcy9icm93c2VyLmpzIiksQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcjtmdW5jdGlvbiBnZXRyKHByaXYpe3ZhciByLGxlbj1wcml2Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2Rve3I9bmV3IEJOKHJhbmRvbUJ5dGVzKGxlbikpfXdoaWxlKHIuY21wKHByaXYubW9kdWx1cyk+PTB8fCFyLnVtb2QocHJpdi5wcmltZTEpfHwhci51bW9kKHByaXYucHJpbWUyKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gY3J0KG1zZyxwcml2KXt2YXIgYmxpbmRzPWZ1bmN0aW9uIGJsaW5kKHByaXYpe3ZhciByPWdldHIocHJpdik7cmV0dXJue2JsaW5kZXI6ci50b1JlZChCTi5tb250KHByaXYubW9kdWx1cykpLnJlZFBvdyhuZXcgQk4ocHJpdi5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKSx1bmJsaW5kZXI6ci5pbnZtKHByaXYubW9kdWx1cyl9fShwcml2KSxsZW49cHJpdi5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxibGluZGVkPW5ldyBCTihtc2cpLm11bChibGluZHMuYmxpbmRlcikudW1vZChwcml2Lm1vZHVsdXMpLGMxPWJsaW5kZWQudG9SZWQoQk4ubW9udChwcml2LnByaW1lMSkpLGMyPWJsaW5kZWQudG9SZWQoQk4ubW9udChwcml2LnByaW1lMikpLHFpbnY9cHJpdi5jb2VmZmljaWVudCxwPXByaXYucHJpbWUxLHE9cHJpdi5wcmltZTIsbTE9YzEucmVkUG93KHByaXYuZXhwb25lbnQxKS5mcm9tUmVkKCksbTI9YzIucmVkUG93KHByaXYuZXhwb25lbnQyKS5mcm9tUmVkKCksaD1tMS5pc3ViKG0yKS5pbXVsKHFpbnYpLnVtb2QocCkuaW11bChxKTtyZXR1cm4gbTIuaWFkZChoKS5pbXVsKGJsaW5kcy51bmJsaW5kZXIpLnVtb2QocHJpdi5tb2R1bHVzKS50b0FycmF5TGlrZShCdWZmZXIsImJlIixsZW4pfWNydC5nZXRyPWdldHIsbW9kdWxlLmV4cG9ydHM9Y3J0fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnbi9hbGdvcy5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnbi9icm93c2VyL2FsZ29yaXRobXMuanNvbiIpfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnbi9icm93c2VyL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcixjcmVhdGVIYXNoPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jcmVhdGUtaGFzaC9icm93c2VyLmpzIiksc3RyZWFtPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUtYnJvd3Nlci5qcyIpLGluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiksc2lnbj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2Jyb3dzZXIvc2lnbi5qcyIpLHZlcmlmeT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2Jyb3dzZXIvdmVyaWZ5LmpzIiksYWxnb3JpdGhtcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2Jyb3dzZXIvYWxnb3JpdGhtcy5qc29uIik7ZnVuY3Rpb24gU2lnbihhbGdvcml0aG0pe3N0cmVhbS5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBkYXRhPWFsZ29yaXRobXNbYWxnb3JpdGhtXTtpZighZGF0YSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoVHlwZT1kYXRhLmhhc2gsdGhpcy5faGFzaD1jcmVhdGVIYXNoKGRhdGEuaGFzaCksdGhpcy5fdGFnPWRhdGEuaWQsdGhpcy5fc2lnblR5cGU9ZGF0YS5zaWdufWZ1bmN0aW9uIFZlcmlmeShhbGdvcml0aG0pe3N0cmVhbS5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBkYXRhPWFsZ29yaXRobXNbYWxnb3JpdGhtXTtpZighZGF0YSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoPWNyZWF0ZUhhc2goZGF0YS5oYXNoKSx0aGlzLl90YWc9ZGF0YS5pZCx0aGlzLl9zaWduVHlwZT1kYXRhLnNpZ259ZnVuY3Rpb24gY3JlYXRlU2lnbihhbGdvcml0aG0pe3JldHVybiBuZXcgU2lnbihhbGdvcml0aG0pfWZ1bmN0aW9uIGNyZWF0ZVZlcmlmeShhbGdvcml0aG0pe3JldHVybiBuZXcgVmVyaWZ5KGFsZ29yaXRobSl9T2JqZWN0LmtleXMoYWxnb3JpdGhtcykuZm9yRWFjaChmdW5jdGlvbihrZXkpe2FsZ29yaXRobXNba2V5XS5pZD1CdWZmZXIuZnJvbShhbGdvcml0aG1zW2tleV0uaWQsImhleCIpLGFsZ29yaXRobXNba2V5LnRvTG93ZXJDYXNlKCldPWFsZ29yaXRobXNba2V5XX0pLGluaGVyaXRzKFNpZ24sc3RyZWFtLldyaXRhYmxlKSxTaWduLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24gX3dyaXRlKGRhdGEsXyxkb25lKXt0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKSxkb25lKCl9LFNpZ24ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbiB1cGRhdGUoZGF0YSxlbmMpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIGRhdGE/QnVmZmVyLmZyb20oZGF0YSxlbmMpOmRhdGEpLHRoaXN9LFNpZ24ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24gc2lnbk1ldGhvZChrZXksZW5jKXt0aGlzLmVuZCgpO3ZhciBoYXNoPXRoaXMuX2hhc2guZGlnZXN0KCksc2lnPXNpZ24oaGFzaCxrZXksdGhpcy5faGFzaFR5cGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKTtyZXR1cm4gZW5jP3NpZy50b1N0cmluZyhlbmMpOnNpZ30saW5oZXJpdHMoVmVyaWZ5LHN0cmVhbS5Xcml0YWJsZSksVmVyaWZ5LnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24gX3dyaXRlKGRhdGEsXyxkb25lKXt0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKSxkb25lKCl9LFZlcmlmeS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uIHVwZGF0ZShkYXRhLGVuYyl7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKCJzdHJpbmciPT10eXBlb2YgZGF0YT9CdWZmZXIuZnJvbShkYXRhLGVuYyk6ZGF0YSksdGhpc30sVmVyaWZ5LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24gdmVyaWZ5TWV0aG9kKGtleSxzaWcsZW5jKXt2YXIgc2lnQnVmZmVyPSJzdHJpbmciPT10eXBlb2Ygc2lnP0J1ZmZlci5mcm9tKHNpZyxlbmMpOnNpZzt0aGlzLmVuZCgpO3ZhciBoYXNoPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIHZlcmlmeShzaWdCdWZmZXIsaGFzaCxrZXksdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sbW9kdWxlLmV4cG9ydHM9e1NpZ246Y3JlYXRlU2lnbixWZXJpZnk6Y3JlYXRlVmVyaWZ5LGNyZWF0ZVNpZ24sY3JlYXRlVmVyaWZ5fX0sIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYnJvd3Nlci9zaWduLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcixjcmVhdGVIbWFjPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jcmVhdGUtaG1hYy9icm93c2VyLmpzIiksY3J0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXJzYS9pbmRleC5qcyIpLEVDPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMuanMiKS5lYyxCTj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYm4uanMvbGliL2JuLmpzIikscGFyc2VLZXlzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYXJzZS1hc24xL2luZGV4LmpzIiksY3VydmVzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYnJvd3Nlci9jdXJ2ZXMuanNvbiIpO2Z1bmN0aW9uIGdldEtleSh4LHEsaGFzaCxhbGdvKXtpZigoeD1CdWZmZXIuZnJvbSh4LnRvQXJyYXkoKSkpLmxlbmd0aDxxLmJ5dGVMZW5ndGgoKSl7dmFyIHplcm9zPUJ1ZmZlci5hbGxvYyhxLmJ5dGVMZW5ndGgoKS14Lmxlbmd0aCk7eD1CdWZmZXIuY29uY2F0KFt6ZXJvcyx4XSl9dmFyIGhsZW49aGFzaC5sZW5ndGgsaGJpdHM9ZnVuY3Rpb24gYml0czJvY3RldHMoYml0cyxxKXtiaXRzPWJpdHMyaW50KGJpdHMscSksYml0cz1iaXRzLm1vZChxKTt2YXIgb3V0PUJ1ZmZlci5mcm9tKGJpdHMudG9BcnJheSgpKTtpZihvdXQubGVuZ3RoPHEuYnl0ZUxlbmd0aCgpKXt2YXIgemVyb3M9QnVmZmVyLmFsbG9jKHEuYnl0ZUxlbmd0aCgpLW91dC5sZW5ndGgpO291dD1CdWZmZXIuY29uY2F0KFt6ZXJvcyxvdXRdKX1yZXR1cm4gb3V0fShoYXNoLHEpLHY9QnVmZmVyLmFsbG9jKGhsZW4pO3YuZmlsbCgxKTt2YXIgaz1CdWZmZXIuYWxsb2MoaGxlbik7cmV0dXJuIGs9Y3JlYXRlSG1hYyhhbGdvLGspLnVwZGF0ZSh2KS51cGRhdGUoQnVmZmVyLmZyb20oWzBdKSkudXBkYXRlKHgpLnVwZGF0ZShoYml0cykuZGlnZXN0KCksdj1jcmVhdGVIbWFjKGFsZ28saykudXBkYXRlKHYpLmRpZ2VzdCgpLHtrOms9Y3JlYXRlSG1hYyhhbGdvLGspLnVwZGF0ZSh2KS51cGRhdGUoQnVmZmVyLmZyb20oWzFdKSkudXBkYXRlKHgpLnVwZGF0ZShoYml0cykuZGlnZXN0KCksdjp2PWNyZWF0ZUhtYWMoYWxnbyxrKS51cGRhdGUodikuZGlnZXN0KCl9fWZ1bmN0aW9uIGJpdHMyaW50KG9iaXRzLHEpe3ZhciBiaXRzPW5ldyBCTihvYml0cyksc2hpZnQ9KG9iaXRzLmxlbmd0aDw8MyktcS5iaXRMZW5ndGgoKTtyZXR1cm4gc2hpZnQ+MCYmYml0cy5pc2hybihzaGlmdCksYml0c31mdW5jdGlvbiBtYWtlS2V5KHEsa3YsYWxnbyl7dmFyIHQsaztkb3tmb3IodD1CdWZmZXIuYWxsb2MoMCk7OCp0Lmxlbmd0aDxxLmJpdExlbmd0aCgpOylrdi52PWNyZWF0ZUhtYWMoYWxnbyxrdi5rKS51cGRhdGUoa3YudikuZGlnZXN0KCksdD1CdWZmZXIuY29uY2F0KFt0LGt2LnZdKTtrPWJpdHMyaW50KHQscSksa3Yuaz1jcmVhdGVIbWFjKGFsZ28sa3YuaykudXBkYXRlKGt2LnYpLnVwZGF0ZShCdWZmZXIuZnJvbShbMF0pKS5kaWdlc3QoKSxrdi52PWNyZWF0ZUhtYWMoYWxnbyxrdi5rKS51cGRhdGUoa3YudikuZGlnZXN0KCl9d2hpbGUoLTEhPT1rLmNtcChxKSk7cmV0dXJuIGt9ZnVuY3Rpb24gbWFrZVIoZyxrLHAscSl7cmV0dXJuIGcudG9SZWQoQk4ubW9udChwKSkucmVkUG93KGspLmZyb21SZWQoKS5tb2QocSl9bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gc2lnbihoYXNoLGtleSxoYXNoVHlwZSxzaWduVHlwZSx0YWcpe3ZhciBwcml2PXBhcnNlS2V5cyhrZXkpO2lmKHByaXYuY3VydmUpe2lmKCJlY2RzYSIhPT1zaWduVHlwZSYmImVjZHNhL3JzYSIhPT1zaWduVHlwZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gZWNTaWduKGhhc2gscHJpdil7dmFyIGN1cnZlSWQ9Y3VydmVzW3ByaXYuY3VydmUuam9pbigiLiIpXTtpZighY3VydmVJZCl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitwcml2LmN1cnZlLmpvaW4oIi4iKSk7dmFyIGtleT1uZXcgRUMoY3VydmVJZCkua2V5RnJvbVByaXZhdGUocHJpdi5wcml2YXRlS2V5KSxvdXQ9a2V5LnNpZ24oaGFzaCk7cmV0dXJuIEJ1ZmZlci5mcm9tKG91dC50b0RFUigpKX0oaGFzaCxwcml2KX1pZigiZHNhIj09PXByaXYudHlwZSl7aWYoImRzYSIhPT1zaWduVHlwZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gZHNhU2lnbihoYXNoLHByaXYsYWxnbyl7dmFyIGsseD1wcml2LnBhcmFtcy5wcml2X2tleSxwPXByaXYucGFyYW1zLnAscT1wcml2LnBhcmFtcy5xLGc9cHJpdi5wYXJhbXMuZyxyPW5ldyBCTigwKSxIPWJpdHMyaW50KGhhc2gscSkubW9kKHEpLHM9ITEsa3Y9Z2V0S2V5KHgscSxoYXNoLGFsZ28pO2Zvcig7ITE9PT1zOylyPW1ha2VSKGcsaz1tYWtlS2V5KHEsa3YsYWxnbykscCxxKSwwPT09KHM9ay5pbnZtKHEpLmltdWwoSC5hZGQoeC5tdWwocikpKS5tb2QocSkpLmNtcG4oMCkmJihzPSExLHI9bmV3IEJOKDApKTtyZXR1cm4gZnVuY3Rpb24gdG9ERVIocixzKXtyPXIudG9BcnJheSgpLHM9cy50b0FycmF5KCksMTI4JnJbMF0mJihyPVswXS5jb25jYXQocikpOzEyOCZzWzBdJiYocz1bMF0uY29uY2F0KHMpKTt2YXIgdG90YWw9ci5sZW5ndGgrcy5sZW5ndGgrNCxyZXM9WzQ4LHRvdGFsLDIsci5sZW5ndGhdO3JldHVybiByZXM9cmVzLmNvbmNhdChyLFsyLHMubGVuZ3RoXSxzKSxCdWZmZXIuZnJvbShyZXMpfShyLHMpfShoYXNoLHByaXYsaGFzaFR5cGUpfWlmKCJyc2EiIT09c2lnblR5cGUmJiJlY2RzYS9yc2EiIT09c2lnblR5cGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7aWYodm9pZCAwIT09a2V5LnBhZGRpbmcmJjEhPT1rZXkucGFkZGluZyl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgb3IgdW5zdXBwb3J0ZWQgcGFkZGluZyBtb2RlIik7aGFzaD1CdWZmZXIuY29uY2F0KFt0YWcsaGFzaF0pO2Zvcih2YXIgbGVuPXByaXYubW9kdWx1cy5ieXRlTGVuZ3RoKCkscGFkPVswLDFdO2hhc2gubGVuZ3RoK3BhZC5sZW5ndGgrMTxsZW47KXBhZC5wdXNoKDI1NSk7cGFkLnB1c2goMCk7Zm9yKHZhciBpPS0xOysraTxoYXNoLmxlbmd0aDspcGFkLnB1c2goaGFzaFtpXSk7cmV0dXJuIGNydChwYWQscHJpdil9LG1vZHVsZS5leHBvcnRzLmdldEtleT1nZXRLZXksbW9kdWxlLmV4cG9ydHMubWFrZUtleT1tYWtlS2V5fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnbi9icm93c2VyL3ZlcmlmeS5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXIsQk49X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2JuLmpzL2xpYi9ibi5qcyIpLEVDPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMuanMiKS5lYyxwYXJzZUtleXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3BhcnNlLWFzbjEvaW5kZXguanMiKSxjdXJ2ZXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnbi9icm93c2VyL2N1cnZlcy5qc29uIik7ZnVuY3Rpb24gY2hlY2tWYWx1ZShiLHEpe2lmKGIuY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoYi5jbXAocSk+PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpfW1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIHZlcmlmeShzaWcsaGFzaCxrZXksc2lnblR5cGUsdGFnKXt2YXIgcHViPXBhcnNlS2V5cyhrZXkpO2lmKCJlYyI9PT1wdWIudHlwZSl7aWYoImVjZHNhIiE9PXNpZ25UeXBlJiYiZWNkc2EvcnNhIiE9PXNpZ25UeXBlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIGVjVmVyaWZ5KHNpZyxoYXNoLHB1Yil7dmFyIGN1cnZlSWQ9Y3VydmVzW3B1Yi5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIildO2lmKCFjdXJ2ZUlkKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK3B1Yi5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3ZhciBjdXJ2ZT1uZXcgRUMoY3VydmVJZCkscHVia2V5PXB1Yi5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGE7cmV0dXJuIGN1cnZlLnZlcmlmeShoYXNoLHNpZyxwdWJrZXkpfShzaWcsaGFzaCxwdWIpfWlmKCJkc2EiPT09cHViLnR5cGUpe2lmKCJkc2EiIT09c2lnblR5cGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gZHNhVmVyaWZ5KHNpZyxoYXNoLHB1Yil7dmFyIHA9cHViLmRhdGEucCxxPXB1Yi5kYXRhLnEsZz1wdWIuZGF0YS5nLHk9cHViLmRhdGEucHViX2tleSx1bnBhY2tlZD1wYXJzZUtleXMuc2lnbmF0dXJlLmRlY29kZShzaWcsImRlciIpLHM9dW5wYWNrZWQucyxyPXVucGFja2VkLnI7Y2hlY2tWYWx1ZShzLHEpLGNoZWNrVmFsdWUocixxKTt2YXIgbW9udHA9Qk4ubW9udChwKSx3PXMuaW52bShxKSx2PWcudG9SZWQobW9udHApLnJlZFBvdyhuZXcgQk4oaGFzaCkubXVsKHcpLm1vZChxKSkuZnJvbVJlZCgpLm11bCh5LnRvUmVkKG1vbnRwKS5yZWRQb3coci5tdWwodykubW9kKHEpKS5mcm9tUmVkKCkpLm1vZChwKS5tb2QocSk7cmV0dXJuIDA9PT12LmNtcChyKX0oc2lnLGhhc2gscHViKX1pZigicnNhIiE9PXNpZ25UeXBlJiYiZWNkc2EvcnNhIiE9PXNpZ25UeXBlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7aGFzaD1CdWZmZXIuY29uY2F0KFt0YWcsaGFzaF0pO2Zvcih2YXIgbGVuPXB1Yi5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxwYWQ9WzFdLHBhZE51bT0wO2hhc2gubGVuZ3RoK3BhZC5sZW5ndGgrMjxsZW47KXBhZC5wdXNoKDI1NSkscGFkTnVtKz0xO3BhZC5wdXNoKDApO2Zvcih2YXIgaT0tMTsrK2k8aGFzaC5sZW5ndGg7KXBhZC5wdXNoKGhhc2hbaV0pO3BhZD1CdWZmZXIuZnJvbShwYWQpO3ZhciByZWQ9Qk4ubW9udChwdWIubW9kdWx1cyk7c2lnPShzaWc9bmV3IEJOKHNpZykudG9SZWQocmVkKSkucmVkUG93KG5ldyBCTihwdWIucHVibGljRXhwb25lbnQpKSxzaWc9QnVmZmVyLmZyb20oc2lnLmZyb21SZWQoKS50b0FycmF5KCkpO3ZhciBvdXQ9cGFkTnVtPDg/MTowO2ZvcihsZW49TWF0aC5taW4oc2lnLmxlbmd0aCxwYWQubGVuZ3RoKSxzaWcubGVuZ3RoIT09cGFkLmxlbmd0aCYmKG91dD0xKSxpPS0xOysraTxsZW47KW91dHw9c2lnW2ldXnBhZFtpXTtyZXR1cm4gMD09PW91dH19LCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS16bGliL2xpYi9iaW5kaW5nLmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKSxwcm9jZXNzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9wcm94eS9wcm9jZXNzLmpzIiksYXNzZXJ0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9hc3NlcnQvYnVpbGQvYXNzZXJ0LmpzIiksWnN0cmVhbT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi96c3RyZWFtLmpzIiksemxpYl9kZWZsYXRlPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2RlZmxhdGUuanMiKSx6bGliX2luZmxhdGU9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mbGF0ZS5qcyIpLGNvbnN0YW50cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jb25zdGFudHMuanMiKTtmb3IodmFyIGtleSBpbiBjb25zdGFudHMpZXhwb3J0c1trZXldPWNvbnN0YW50c1trZXldO2V4cG9ydHMuTk9ORT0wLGV4cG9ydHMuREVGTEFURT0xLGV4cG9ydHMuSU5GTEFURT0yLGV4cG9ydHMuR1pJUD0zLGV4cG9ydHMuR1VOWklQPTQsZXhwb3J0cy5ERUZMQVRFUkFXPTUsZXhwb3J0cy5JTkZMQVRFUkFXPTYsZXhwb3J0cy5VTlpJUD03O2Z1bmN0aW9uIFpsaWIobW9kZSl7aWYoIm51bWJlciIhPXR5cGVvZiBtb2RlfHxtb2RlPGV4cG9ydHMuREVGTEFURXx8bW9kZT5leHBvcnRzLlVOWklQKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBhcmd1bWVudCIpO3RoaXMuZGljdGlvbmFyeT1udWxsLHRoaXMuZXJyPTAsdGhpcy5mbHVzaD0wLHRoaXMuaW5pdF9kb25lPSExLHRoaXMubGV2ZWw9MCx0aGlzLm1lbUxldmVsPTAsdGhpcy5tb2RlPW1vZGUsdGhpcy5zdHJhdGVneT0wLHRoaXMud2luZG93Qml0cz0wLHRoaXMud3JpdGVfaW5fcHJvZ3Jlc3M9ITEsdGhpcy5wZW5kaW5nX2Nsb3NlPSExLHRoaXMuZ3ppcF9pZF9ieXRlc19yZWFkPTB9WmxpYi5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLndyaXRlX2luX3Byb2dyZXNzP3RoaXMucGVuZGluZ19jbG9zZT0hMDoodGhpcy5wZW5kaW5nX2Nsb3NlPSExLGFzc2VydCh0aGlzLmluaXRfZG9uZSwiY2xvc2UgYmVmb3JlIGluaXQiKSxhc3NlcnQodGhpcy5tb2RlPD1leHBvcnRzLlVOWklQKSx0aGlzLm1vZGU9PT1leHBvcnRzLkRFRkxBVEV8fHRoaXMubW9kZT09PWV4cG9ydHMuR1pJUHx8dGhpcy5tb2RlPT09ZXhwb3J0cy5ERUZMQVRFUkFXP3psaWJfZGVmbGF0ZS5kZWZsYXRlRW5kKHRoaXMuc3RybSk6dGhpcy5tb2RlIT09ZXhwb3J0cy5JTkZMQVRFJiZ0aGlzLm1vZGUhPT1leHBvcnRzLkdVTlpJUCYmdGhpcy5tb2RlIT09ZXhwb3J0cy5JTkZMQVRFUkFXJiZ0aGlzLm1vZGUhPT1leHBvcnRzLlVOWklQfHx6bGliX2luZmxhdGUuaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMubW9kZT1leHBvcnRzLk5PTkUsdGhpcy5kaWN0aW9uYXJ5PW51bGwpfSxabGliLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihmbHVzaCxpbnB1dCxpbl9vZmYsaW5fbGVuLG91dCxvdXRfb2ZmLG91dF9sZW4pe3JldHVybiB0aGlzLl93cml0ZSghMCxmbHVzaCxpbnB1dCxpbl9vZmYsaW5fbGVuLG91dCxvdXRfb2ZmLG91dF9sZW4pfSxabGliLnByb3RvdHlwZS53cml0ZVN5bmM9ZnVuY3Rpb24oZmx1c2gsaW5wdXQsaW5fb2ZmLGluX2xlbixvdXQsb3V0X29mZixvdXRfbGVuKXtyZXR1cm4gdGhpcy5fd3JpdGUoITEsZmx1c2gsaW5wdXQsaW5fb2ZmLGluX2xlbixvdXQsb3V0X29mZixvdXRfbGVuKX0sWmxpYi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGFzeW5jLGZsdXNoLGlucHV0LGluX29mZixpbl9sZW4sb3V0LG91dF9vZmYsb3V0X2xlbil7aWYoYXNzZXJ0LmVxdWFsKGFyZ3VtZW50cy5sZW5ndGgsOCksYXNzZXJ0KHRoaXMuaW5pdF9kb25lLCJ3cml0ZSBiZWZvcmUgaW5pdCIpLGFzc2VydCh0aGlzLm1vZGUhPT1leHBvcnRzLk5PTkUsImFscmVhZHkgZmluYWxpemVkIiksYXNzZXJ0LmVxdWFsKCExLHRoaXMud3JpdGVfaW5fcHJvZ3Jlc3MsIndyaXRlIGFscmVhZHkgaW4gcHJvZ3Jlc3MiKSxhc3NlcnQuZXF1YWwoITEsdGhpcy5wZW5kaW5nX2Nsb3NlLCJjbG9zZSBpcyBwZW5kaW5nIiksdGhpcy53cml0ZV9pbl9wcm9ncmVzcz0hMCxhc3NlcnQuZXF1YWwoITEsdm9pZCAwPT09Zmx1c2gsIm11c3QgcHJvdmlkZSBmbHVzaCB2YWx1ZSIpLHRoaXMud3JpdGVfaW5fcHJvZ3Jlc3M9ITAsZmx1c2ghPT1leHBvcnRzLlpfTk9fRkxVU0gmJmZsdXNoIT09ZXhwb3J0cy5aX1BBUlRJQUxfRkxVU0gmJmZsdXNoIT09ZXhwb3J0cy5aX1NZTkNfRkxVU0gmJmZsdXNoIT09ZXhwb3J0cy5aX0ZVTExfRkxVU0gmJmZsdXNoIT09ZXhwb3J0cy5aX0ZJTklTSCYmZmx1c2ghPT1leHBvcnRzLlpfQkxPQ0spdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGZsdXNoIHZhbHVlIik7aWYobnVsbD09aW5wdXQmJihpbnB1dD1CdWZmZXIuYWxsb2MoMCksaW5fbGVuPTAsaW5fb2ZmPTApLHRoaXMuc3RybS5hdmFpbF9pbj1pbl9sZW4sdGhpcy5zdHJtLmlucHV0PWlucHV0LHRoaXMuc3RybS5uZXh0X2luPWluX29mZix0aGlzLnN0cm0uYXZhaWxfb3V0PW91dF9sZW4sdGhpcy5zdHJtLm91dHB1dD1vdXQsdGhpcy5zdHJtLm5leHRfb3V0PW91dF9vZmYsdGhpcy5mbHVzaD1mbHVzaCwhYXN5bmMpcmV0dXJuIHRoaXMuX3Byb2Nlc3MoKSx0aGlzLl9jaGVja0Vycm9yKCk/dGhpcy5fYWZ0ZXJTeW5jKCk6dm9pZCAwO3ZhciBzZWxmPXRoaXM7cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtzZWxmLl9wcm9jZXNzKCksc2VsZi5fYWZ0ZXIoKX0pLHRoaXN9LFpsaWIucHJvdG90eXBlLl9hZnRlclN5bmM9ZnVuY3Rpb24oKXt2YXIgYXZhaWxfb3V0PXRoaXMuc3RybS5hdmFpbF9vdXQsYXZhaWxfaW49dGhpcy5zdHJtLmF2YWlsX2luO3JldHVybiB0aGlzLndyaXRlX2luX3Byb2dyZXNzPSExLFthdmFpbF9pbixhdmFpbF9vdXRdfSxabGliLnByb3RvdHlwZS5fcHJvY2Vzcz1mdW5jdGlvbigpe3ZhciBuZXh0X2V4cGVjdGVkX2hlYWRlcl9ieXRlPW51bGw7c3dpdGNoKHRoaXMubW9kZSl7Y2FzZSBleHBvcnRzLkRFRkxBVEU6Y2FzZSBleHBvcnRzLkdaSVA6Y2FzZSBleHBvcnRzLkRFRkxBVEVSQVc6dGhpcy5lcnI9emxpYl9kZWZsYXRlLmRlZmxhdGUodGhpcy5zdHJtLHRoaXMuZmx1c2gpO2JyZWFrO2Nhc2UgZXhwb3J0cy5VTlpJUDpzd2l0Y2godGhpcy5zdHJtLmF2YWlsX2luPjAmJihuZXh0X2V4cGVjdGVkX2hlYWRlcl9ieXRlPXRoaXMuc3RybS5uZXh0X2luKSx0aGlzLmd6aXBfaWRfYnl0ZXNfcmVhZCl7Y2FzZSAwOmlmKG51bGw9PT1uZXh0X2V4cGVjdGVkX2hlYWRlcl9ieXRlKWJyZWFrO2lmKDMxIT09dGhpcy5zdHJtLmlucHV0W25leHRfZXhwZWN0ZWRfaGVhZGVyX2J5dGVdKXt0aGlzLm1vZGU9ZXhwb3J0cy5JTkZMQVRFO2JyZWFrfWlmKHRoaXMuZ3ppcF9pZF9ieXRlc19yZWFkPTEsbmV4dF9leHBlY3RlZF9oZWFkZXJfYnl0ZSsrLDE9PT10aGlzLnN0cm0uYXZhaWxfaW4pYnJlYWs7Y2FzZSAxOmlmKG51bGw9PT1uZXh0X2V4cGVjdGVkX2hlYWRlcl9ieXRlKWJyZWFrOzEzOT09PXRoaXMuc3RybS5pbnB1dFtuZXh0X2V4cGVjdGVkX2hlYWRlcl9ieXRlXT8odGhpcy5nemlwX2lkX2J5dGVzX3JlYWQ9Mix0aGlzLm1vZGU9ZXhwb3J0cy5HVU5aSVApOnRoaXMubW9kZT1leHBvcnRzLklORkxBVEU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgbnVtYmVyIG9mIGd6aXAgbWFnaWMgbnVtYmVyIGJ5dGVzIHJlYWQiKX1jYXNlIGV4cG9ydHMuSU5GTEFURTpjYXNlIGV4cG9ydHMuR1VOWklQOmNhc2UgZXhwb3J0cy5JTkZMQVRFUkFXOmZvcih0aGlzLmVycj16bGliX2luZmxhdGUuaW5mbGF0ZSh0aGlzLnN0cm0sdGhpcy5mbHVzaCksdGhpcy5lcnI9PT1leHBvcnRzLlpfTkVFRF9ESUNUJiZ0aGlzLmRpY3Rpb25hcnkmJih0aGlzLmVycj16bGliX2luZmxhdGUuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLHRoaXMuZGljdGlvbmFyeSksdGhpcy5lcnI9PT1leHBvcnRzLlpfT0s/dGhpcy5lcnI9emxpYl9pbmZsYXRlLmluZmxhdGUodGhpcy5zdHJtLHRoaXMuZmx1c2gpOnRoaXMuZXJyPT09ZXhwb3J0cy5aX0RBVEFfRVJST1ImJih0aGlzLmVycj1leHBvcnRzLlpfTkVFRF9ESUNUKSk7dGhpcy5zdHJtLmF2YWlsX2luPjAmJnRoaXMubW9kZT09PWV4cG9ydHMuR1VOWklQJiZ0aGlzLmVycj09PWV4cG9ydHMuWl9TVFJFQU1fRU5EJiYwIT09dGhpcy5zdHJtLm5leHRfaW5bMF07KXRoaXMucmVzZXQoKSx0aGlzLmVycj16bGliX2luZmxhdGUuaW5mbGF0ZSh0aGlzLnN0cm0sdGhpcy5mbHVzaCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbW9kZSAiK3RoaXMubW9kZSl9fSxabGliLnByb3RvdHlwZS5fY2hlY2tFcnJvcj1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmVycil7Y2FzZSBleHBvcnRzLlpfT0s6Y2FzZSBleHBvcnRzLlpfQlVGX0VSUk9SOmlmKDAhPT10aGlzLnN0cm0uYXZhaWxfb3V0JiZ0aGlzLmZsdXNoPT09ZXhwb3J0cy5aX0ZJTklTSClyZXR1cm4gdGhpcy5fZXJyb3IoInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKSwhMTticmVhaztjYXNlIGV4cG9ydHMuWl9TVFJFQU1fRU5EOmJyZWFrO2Nhc2UgZXhwb3J0cy5aX05FRURfRElDVDpyZXR1cm4gbnVsbD09dGhpcy5kaWN0aW9uYXJ5P3RoaXMuX2Vycm9yKCJNaXNzaW5nIGRpY3Rpb25hcnkiKTp0aGlzLl9lcnJvcigiQmFkIGRpY3Rpb25hcnkiKSwhMTtkZWZhdWx0OnJldHVybiB0aGlzLl9lcnJvcigiWmxpYiBlcnJvciIpLCExfXJldHVybiEwfSxabGliLnByb3RvdHlwZS5fYWZ0ZXI9ZnVuY3Rpb24oKXtpZih0aGlzLl9jaGVja0Vycm9yKCkpe3ZhciBhdmFpbF9vdXQ9dGhpcy5zdHJtLmF2YWlsX291dCxhdmFpbF9pbj10aGlzLnN0cm0uYXZhaWxfaW47dGhpcy53cml0ZV9pbl9wcm9ncmVzcz0hMSx0aGlzLmNhbGxiYWNrKGF2YWlsX2luLGF2YWlsX291dCksdGhpcy5wZW5kaW5nX2Nsb3NlJiZ0aGlzLmNsb3NlKCl9fSxabGliLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24obWVzc2FnZSl7dGhpcy5zdHJtLm1zZyYmKG1lc3NhZ2U9dGhpcy5zdHJtLm1zZyksdGhpcy5vbmVycm9yKG1lc3NhZ2UsdGhpcy5lcnIpLHRoaXMud3JpdGVfaW5fcHJvZ3Jlc3M9ITEsdGhpcy5wZW5kaW5nX2Nsb3NlJiZ0aGlzLmNsb3NlKCl9LFpsaWIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24od2luZG93Qml0cyxsZXZlbCxtZW1MZXZlbCxzdHJhdGVneSxkaWN0aW9uYXJ5KXthc3NlcnQoND09PWFyZ3VtZW50cy5sZW5ndGh8fDU9PT1hcmd1bWVudHMubGVuZ3RoLCJpbml0KHdpbmRvd0JpdHMsIGxldmVsLCBtZW1MZXZlbCwgc3RyYXRlZ3ksIFtkaWN0aW9uYXJ5XSkiKSxhc3NlcnQod2luZG93Qml0cz49OCYmd2luZG93Qml0czw9MTUsImludmFsaWQgd2luZG93Qml0cyIpLGFzc2VydChsZXZlbD49LTEmJmxldmVsPD05LCJpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsIiksYXNzZXJ0KG1lbUxldmVsPj0xJiZtZW1MZXZlbDw9OSwiaW52YWxpZCBtZW1sZXZlbCIpLGFzc2VydChzdHJhdGVneT09PWV4cG9ydHMuWl9GSUxURVJFRHx8c3RyYXRlZ3k9PT1leHBvcnRzLlpfSFVGRk1BTl9PTkxZfHxzdHJhdGVneT09PWV4cG9ydHMuWl9STEV8fHN0cmF0ZWd5PT09ZXhwb3J0cy5aX0ZJWEVEfHxzdHJhdGVneT09PWV4cG9ydHMuWl9ERUZBVUxUX1NUUkFURUdZLCJpbnZhbGlkIHN0cmF0ZWd5IiksdGhpcy5faW5pdChsZXZlbCx3aW5kb3dCaXRzLG1lbUxldmVsLHN0cmF0ZWd5LGRpY3Rpb25hcnkpLHRoaXMuX3NldERpY3Rpb25hcnkoKX0sWmxpYi5wcm90b3R5cGUucGFyYW1zPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJkZWZsYXRlUGFyYW1zIE5vdCBzdXBwb3J0ZWQiKX0sWmxpYi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9yZXNldCgpLHRoaXMuX3NldERpY3Rpb25hcnkoKX0sWmxpYi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24obGV2ZWwsd2luZG93Qml0cyxtZW1MZXZlbCxzdHJhdGVneSxkaWN0aW9uYXJ5KXtzd2l0Y2godGhpcy5sZXZlbD1sZXZlbCx0aGlzLndpbmRvd0JpdHM9d2luZG93Qml0cyx0aGlzLm1lbUxldmVsPW1lbUxldmVsLHRoaXMuc3RyYXRlZ3k9c3RyYXRlZ3ksdGhpcy5mbHVzaD1leHBvcnRzLlpfTk9fRkxVU0gsdGhpcy5lcnI9ZXhwb3J0cy5aX09LLHRoaXMubW9kZSE9PWV4cG9ydHMuR1pJUCYmdGhpcy5tb2RlIT09ZXhwb3J0cy5HVU5aSVB8fCh0aGlzLndpbmRvd0JpdHMrPTE2KSx0aGlzLm1vZGU9PT1leHBvcnRzLlVOWklQJiYodGhpcy53aW5kb3dCaXRzKz0zMiksdGhpcy5tb2RlIT09ZXhwb3J0cy5ERUZMQVRFUkFXJiZ0aGlzLm1vZGUhPT1leHBvcnRzLklORkxBVEVSQVd8fCh0aGlzLndpbmRvd0JpdHM9LTEqdGhpcy53aW5kb3dCaXRzKSx0aGlzLnN0cm09bmV3IFpzdHJlYW0sdGhpcy5tb2RlKXtjYXNlIGV4cG9ydHMuREVGTEFURTpjYXNlIGV4cG9ydHMuR1pJUDpjYXNlIGV4cG9ydHMuREVGTEFURVJBVzp0aGlzLmVycj16bGliX2RlZmxhdGUuZGVmbGF0ZUluaXQyKHRoaXMuc3RybSx0aGlzLmxldmVsLGV4cG9ydHMuWl9ERUZMQVRFRCx0aGlzLndpbmRvd0JpdHMsdGhpcy5tZW1MZXZlbCx0aGlzLnN0cmF0ZWd5KTticmVhaztjYXNlIGV4cG9ydHMuSU5GTEFURTpjYXNlIGV4cG9ydHMuR1VOWklQOmNhc2UgZXhwb3J0cy5JTkZMQVRFUkFXOmNhc2UgZXhwb3J0cy5VTlpJUDp0aGlzLmVycj16bGliX2luZmxhdGUuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSx0aGlzLndpbmRvd0JpdHMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1vZGUgIit0aGlzLm1vZGUpfXRoaXMuZXJyIT09ZXhwb3J0cy5aX09LJiZ0aGlzLl9lcnJvcigiSW5pdCBlcnJvciIpLHRoaXMuZGljdGlvbmFyeT1kaWN0aW9uYXJ5LHRoaXMud3JpdGVfaW5fcHJvZ3Jlc3M9ITEsdGhpcy5pbml0X2RvbmU9ITB9LFpsaWIucHJvdG90eXBlLl9zZXREaWN0aW9uYXJ5PWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5kaWN0aW9uYXJ5KXtzd2l0Y2godGhpcy5lcnI9ZXhwb3J0cy5aX09LLHRoaXMubW9kZSl7Y2FzZSBleHBvcnRzLkRFRkxBVEU6Y2FzZSBleHBvcnRzLkRFRkxBVEVSQVc6dGhpcy5lcnI9emxpYl9kZWZsYXRlLmRlZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSx0aGlzLmRpY3Rpb25hcnkpfXRoaXMuZXJyIT09ZXhwb3J0cy5aX09LJiZ0aGlzLl9lcnJvcigiRmFpbGVkIHRvIHNldCBkaWN0aW9uYXJ5Iil9fSxabGliLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5lcnI9ZXhwb3J0cy5aX09LLHRoaXMubW9kZSl7Y2FzZSBleHBvcnRzLkRFRkxBVEU6Y2FzZSBleHBvcnRzLkRFRkxBVEVSQVc6Y2FzZSBleHBvcnRzLkdaSVA6dGhpcy5lcnI9emxpYl9kZWZsYXRlLmRlZmxhdGVSZXNldCh0aGlzLnN0cm0pO2JyZWFrO2Nhc2UgZXhwb3J0cy5JTkZMQVRFOmNhc2UgZXhwb3J0cy5JTkZMQVRFUkFXOmNhc2UgZXhwb3J0cy5HVU5aSVA6dGhpcy5lcnI9emxpYl9pbmZsYXRlLmluZmxhdGVSZXNldCh0aGlzLnN0cm0pfXRoaXMuZXJyIT09ZXhwb3J0cy5aX09LJiZ0aGlzLl9lcnJvcigiRmFpbGVkIHRvIHJlc2V0IHN0cmVhbSIpfSxleHBvcnRzLlpsaWI9WmxpYn0sIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXpsaWIvbGliL2luZGV4LmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgcHJvY2Vzcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvcHJveHkvcHJvY2Vzcy5qcyIpLEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLFRyYW5zZm9ybT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvaW5kZXguanMiKS5UcmFuc2Zvcm0sYmluZGluZz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS16bGliL2xpYi9iaW5kaW5nLmpzIiksdXRpbD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvdXRpbC91dGlsLmpzIiksYXNzZXJ0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9hc3NlcnQvYnVpbGQvYXNzZXJ0LmpzIikub2ssa01heExlbmd0aD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIikua01heExlbmd0aCxrUmFuZ2VFcnJvck1lc3NhZ2U9IkNhbm5vdCBjcmVhdGUgZmluYWwgQnVmZmVyLiBJdCB3b3VsZCBiZSBsYXJnZXIgdGhhbiAweCIra01heExlbmd0aC50b1N0cmluZygxNikrIiBieXRlcyI7YmluZGluZy5aX01JTl9XSU5ET1dCSVRTPTgsYmluZGluZy5aX01BWF9XSU5ET1dCSVRTPTE1LGJpbmRpbmcuWl9ERUZBVUxUX1dJTkRPV0JJVFM9MTUsYmluZGluZy5aX01JTl9DSFVOSz02NCxiaW5kaW5nLlpfTUFYX0NIVU5LPTEvMCxiaW5kaW5nLlpfREVGQVVMVF9DSFVOSz0xNjM4NCxiaW5kaW5nLlpfTUlOX01FTUxFVkVMPTEsYmluZGluZy5aX01BWF9NRU1MRVZFTD05LGJpbmRpbmcuWl9ERUZBVUxUX01FTUxFVkVMPTgsYmluZGluZy5aX01JTl9MRVZFTD0tMSxiaW5kaW5nLlpfTUFYX0xFVkVMPTksYmluZGluZy5aX0RFRkFVTFRfTEVWRUw9YmluZGluZy5aX0RFRkFVTFRfQ09NUFJFU1NJT047Zm9yKHZhciBia2V5cz1PYmplY3Qua2V5cyhiaW5kaW5nKSxiaz0wO2JrPGJrZXlzLmxlbmd0aDtiaysrKXt2YXIgYmtleT1ia2V5c1tia107YmtleS5tYXRjaCgvXlovKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsYmtleSx7ZW51bWVyYWJsZTohMCx2YWx1ZTpiaW5kaW5nW2JrZXldLHdyaXRhYmxlOiExfSl9Zm9yKHZhciBjb2Rlcz17Wl9PSzpiaW5kaW5nLlpfT0ssWl9TVFJFQU1fRU5EOmJpbmRpbmcuWl9TVFJFQU1fRU5ELFpfTkVFRF9ESUNUOmJpbmRpbmcuWl9ORUVEX0RJQ1QsWl9FUlJOTzpiaW5kaW5nLlpfRVJSTk8sWl9TVFJFQU1fRVJST1I6YmluZGluZy5aX1NUUkVBTV9FUlJPUixaX0RBVEFfRVJST1I6YmluZGluZy5aX0RBVEFfRVJST1IsWl9NRU1fRVJST1I6YmluZGluZy5aX01FTV9FUlJPUixaX0JVRl9FUlJPUjpiaW5kaW5nLlpfQlVGX0VSUk9SLFpfVkVSU0lPTl9FUlJPUjpiaW5kaW5nLlpfVkVSU0lPTl9FUlJPUn0sY2tleXM9T2JqZWN0LmtleXMoY29kZXMpLGNrPTA7Y2s8Y2tleXMubGVuZ3RoO2NrKyspe3ZhciBja2V5PWNrZXlzW2NrXTtjb2Rlc1tjb2Rlc1tja2V5XV09Y2tleX1mdW5jdGlvbiB6bGliQnVmZmVyKGVuZ2luZSxidWZmZXIsY2FsbGJhY2spe3ZhciBidWZmZXJzPVtdLG5yZWFkPTA7ZnVuY3Rpb24gZmxvdygpe2Zvcih2YXIgY2h1bms7bnVsbCE9PShjaHVuaz1lbmdpbmUucmVhZCgpKTspYnVmZmVycy5wdXNoKGNodW5rKSxucmVhZCs9Y2h1bmsubGVuZ3RoO2VuZ2luZS5vbmNlKCJyZWFkYWJsZSIsZmxvdyl9ZnVuY3Rpb24gb25FbmQoKXt2YXIgYnVmLGVycj1udWxsO25yZWFkPj1rTWF4TGVuZ3RoP2Vycj1uZXcgUmFuZ2VFcnJvcihrUmFuZ2VFcnJvck1lc3NhZ2UpOmJ1Zj1CdWZmZXIuY29uY2F0KGJ1ZmZlcnMsbnJlYWQpLGJ1ZmZlcnM9W10sZW5naW5lLmNsb3NlKCksY2FsbGJhY2soZXJyLGJ1Zil9ZW5naW5lLm9uKCJlcnJvciIsZnVuY3Rpb24gb25FcnJvcihlcnIpe2VuZ2luZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixvbkVuZCksZW5naW5lLnJlbW92ZUxpc3RlbmVyKCJyZWFkYWJsZSIsZmxvdyksY2FsbGJhY2soZXJyKX0pLGVuZ2luZS5vbigiZW5kIixvbkVuZCksZW5naW5lLmVuZChidWZmZXIpLGZsb3coKX1mdW5jdGlvbiB6bGliQnVmZmVyU3luYyhlbmdpbmUsYnVmZmVyKXtpZigic3RyaW5nIj09dHlwZW9mIGJ1ZmZlciYmKGJ1ZmZlcj1CdWZmZXIuZnJvbShidWZmZXIpKSwhQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcikpdGhyb3cgbmV3IFR5cGVFcnJvcigiTm90IGEgc3RyaW5nIG9yIGJ1ZmZlciIpO3ZhciBmbHVzaEZsYWc9ZW5naW5lLl9maW5pc2hGbHVzaEZsYWc7cmV0dXJuIGVuZ2luZS5fcHJvY2Vzc0NodW5rKGJ1ZmZlcixmbHVzaEZsYWcpfWZ1bmN0aW9uIERlZmxhdGUob3B0cyl7aWYoISh0aGlzIGluc3RhbmNlb2YgRGVmbGF0ZSkpcmV0dXJuIG5ldyBEZWZsYXRlKG9wdHMpO1psaWIuY2FsbCh0aGlzLG9wdHMsYmluZGluZy5ERUZMQVRFKX1mdW5jdGlvbiBJbmZsYXRlKG9wdHMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEluZmxhdGUpKXJldHVybiBuZXcgSW5mbGF0ZShvcHRzKTtabGliLmNhbGwodGhpcyxvcHRzLGJpbmRpbmcuSU5GTEFURSl9ZnVuY3Rpb24gR3ppcChvcHRzKXtpZighKHRoaXMgaW5zdGFuY2VvZiBHemlwKSlyZXR1cm4gbmV3IEd6aXAob3B0cyk7WmxpYi5jYWxsKHRoaXMsb3B0cyxiaW5kaW5nLkdaSVApfWZ1bmN0aW9uIEd1bnppcChvcHRzKXtpZighKHRoaXMgaW5zdGFuY2VvZiBHdW56aXApKXJldHVybiBuZXcgR3VuemlwKG9wdHMpO1psaWIuY2FsbCh0aGlzLG9wdHMsYmluZGluZy5HVU5aSVApfWZ1bmN0aW9uIERlZmxhdGVSYXcob3B0cyl7aWYoISh0aGlzIGluc3RhbmNlb2YgRGVmbGF0ZVJhdykpcmV0dXJuIG5ldyBEZWZsYXRlUmF3KG9wdHMpO1psaWIuY2FsbCh0aGlzLG9wdHMsYmluZGluZy5ERUZMQVRFUkFXKX1mdW5jdGlvbiBJbmZsYXRlUmF3KG9wdHMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEluZmxhdGVSYXcpKXJldHVybiBuZXcgSW5mbGF0ZVJhdyhvcHRzKTtabGliLmNhbGwodGhpcyxvcHRzLGJpbmRpbmcuSU5GTEFURVJBVyl9ZnVuY3Rpb24gVW56aXAob3B0cyl7aWYoISh0aGlzIGluc3RhbmNlb2YgVW56aXApKXJldHVybiBuZXcgVW56aXAob3B0cyk7WmxpYi5jYWxsKHRoaXMsb3B0cyxiaW5kaW5nLlVOWklQKX1mdW5jdGlvbiBpc1ZhbGlkRmx1c2hGbGFnKGZsYWcpe3JldHVybiBmbGFnPT09YmluZGluZy5aX05PX0ZMVVNIfHxmbGFnPT09YmluZGluZy5aX1BBUlRJQUxfRkxVU0h8fGZsYWc9PT1iaW5kaW5nLlpfU1lOQ19GTFVTSHx8ZmxhZz09PWJpbmRpbmcuWl9GVUxMX0ZMVVNIfHxmbGFnPT09YmluZGluZy5aX0ZJTklTSHx8ZmxhZz09PWJpbmRpbmcuWl9CTE9DS31mdW5jdGlvbiBabGliKG9wdHMsbW9kZSl7dmFyIF90aGlzPXRoaXM7aWYodGhpcy5fb3B0cz1vcHRzPW9wdHN8fHt9LHRoaXMuX2NodW5rU2l6ZT1vcHRzLmNodW5rU2l6ZXx8ZXhwb3J0cy5aX0RFRkFVTFRfQ0hVTkssVHJhbnNmb3JtLmNhbGwodGhpcyxvcHRzKSxvcHRzLmZsdXNoJiYhaXNWYWxpZEZsdXNoRmxhZyhvcHRzLmZsdXNoKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZmx1c2ggZmxhZzogIitvcHRzLmZsdXNoKTtpZihvcHRzLmZpbmlzaEZsdXNoJiYhaXNWYWxpZEZsdXNoRmxhZyhvcHRzLmZpbmlzaEZsdXNoKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZmx1c2ggZmxhZzogIitvcHRzLmZpbmlzaEZsdXNoKTtpZih0aGlzLl9mbHVzaEZsYWc9b3B0cy5mbHVzaHx8YmluZGluZy5aX05PX0ZMVVNILHRoaXMuX2ZpbmlzaEZsdXNoRmxhZz12b2lkIDAhPT1vcHRzLmZpbmlzaEZsdXNoP29wdHMuZmluaXNoRmx1c2g6YmluZGluZy5aX0ZJTklTSCxvcHRzLmNodW5rU2l6ZSYmKG9wdHMuY2h1bmtTaXplPGV4cG9ydHMuWl9NSU5fQ0hVTkt8fG9wdHMuY2h1bmtTaXplPmV4cG9ydHMuWl9NQVhfQ0hVTkspKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjaHVuayBzaXplOiAiK29wdHMuY2h1bmtTaXplKTtpZihvcHRzLndpbmRvd0JpdHMmJihvcHRzLndpbmRvd0JpdHM8ZXhwb3J0cy5aX01JTl9XSU5ET1dCSVRTfHxvcHRzLndpbmRvd0JpdHM+ZXhwb3J0cy5aX01BWF9XSU5ET1dCSVRTKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgd2luZG93Qml0czogIitvcHRzLndpbmRvd0JpdHMpO2lmKG9wdHMubGV2ZWwmJihvcHRzLmxldmVsPGV4cG9ydHMuWl9NSU5fTEVWRUx8fG9wdHMubGV2ZWw+ZXhwb3J0cy5aX01BWF9MRVZFTCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsOiAiK29wdHMubGV2ZWwpO2lmKG9wdHMubWVtTGV2ZWwmJihvcHRzLm1lbUxldmVsPGV4cG9ydHMuWl9NSU5fTUVNTEVWRUx8fG9wdHMubWVtTGV2ZWw+ZXhwb3J0cy5aX01BWF9NRU1MRVZFTCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1lbUxldmVsOiAiK29wdHMubWVtTGV2ZWwpO2lmKG9wdHMuc3RyYXRlZ3kmJm9wdHMuc3RyYXRlZ3khPWV4cG9ydHMuWl9GSUxURVJFRCYmb3B0cy5zdHJhdGVneSE9ZXhwb3J0cy5aX0hVRkZNQU5fT05MWSYmb3B0cy5zdHJhdGVneSE9ZXhwb3J0cy5aX1JMRSYmb3B0cy5zdHJhdGVneSE9ZXhwb3J0cy5aX0ZJWEVEJiZvcHRzLnN0cmF0ZWd5IT1leHBvcnRzLlpfREVGQVVMVF9TVFJBVEVHWSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyYXRlZ3k6ICIrb3B0cy5zdHJhdGVneSk7aWYob3B0cy5kaWN0aW9uYXJ5JiYhQnVmZmVyLmlzQnVmZmVyKG9wdHMuZGljdGlvbmFyeSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRpY3Rpb25hcnk6IGl0IHNob3VsZCBiZSBhIEJ1ZmZlciBpbnN0YW5jZSIpO3RoaXMuX2hhbmRsZT1uZXcgYmluZGluZy5abGliKG1vZGUpO3ZhciBzZWxmPXRoaXM7dGhpcy5faGFkRXJyb3I9ITEsdGhpcy5faGFuZGxlLm9uZXJyb3I9ZnVuY3Rpb24obWVzc2FnZSxlcnJubyl7X2Nsb3NlKHNlbGYpLHNlbGYuX2hhZEVycm9yPSEwO3ZhciBlcnJvcj1uZXcgRXJyb3IobWVzc2FnZSk7ZXJyb3IuZXJybm89ZXJybm8sZXJyb3IuY29kZT1leHBvcnRzLmNvZGVzW2Vycm5vXSxzZWxmLmVtaXQoImVycm9yIixlcnJvcil9O3ZhciBsZXZlbD1leHBvcnRzLlpfREVGQVVMVF9DT01QUkVTU0lPTjsibnVtYmVyIj09dHlwZW9mIG9wdHMubGV2ZWwmJihsZXZlbD1vcHRzLmxldmVsKTt2YXIgc3RyYXRlZ3k9ZXhwb3J0cy5aX0RFRkFVTFRfU1RSQVRFR1k7Im51bWJlciI9PXR5cGVvZiBvcHRzLnN0cmF0ZWd5JiYoc3RyYXRlZ3k9b3B0cy5zdHJhdGVneSksdGhpcy5faGFuZGxlLmluaXQob3B0cy53aW5kb3dCaXRzfHxleHBvcnRzLlpfREVGQVVMVF9XSU5ET1dCSVRTLGxldmVsLG9wdHMubWVtTGV2ZWx8fGV4cG9ydHMuWl9ERUZBVUxUX01FTUxFVkVMLHN0cmF0ZWd5LG9wdHMuZGljdGlvbmFyeSksdGhpcy5fYnVmZmVyPUJ1ZmZlci5hbGxvY1Vuc2FmZSh0aGlzLl9jaHVua1NpemUpLHRoaXMuX29mZnNldD0wLHRoaXMuX2xldmVsPWxldmVsLHRoaXMuX3N0cmF0ZWd5PXN0cmF0ZWd5LHRoaXMub25jZSgiZW5kIix0aGlzLmNsb3NlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiX2Nsb3NlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiFfdGhpcy5faGFuZGxlfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pfWZ1bmN0aW9uIF9jbG9zZShlbmdpbmUsY2FsbGJhY2spe2NhbGxiYWNrJiZwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKSxlbmdpbmUuX2hhbmRsZSYmKGVuZ2luZS5faGFuZGxlLmNsb3NlKCksZW5naW5lLl9oYW5kbGU9bnVsbCl9ZnVuY3Rpb24gZW1pdENsb3NlTlQoc2VsZil7c2VsZi5lbWl0KCJjbG9zZSIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCJjb2RlcyIse2VudW1lcmFibGU6ITAsdmFsdWU6T2JqZWN0LmZyZWV6ZShjb2Rlcyksd3JpdGFibGU6ITF9KSxleHBvcnRzLkRlZmxhdGU9RGVmbGF0ZSxleHBvcnRzLkluZmxhdGU9SW5mbGF0ZSxleHBvcnRzLkd6aXA9R3ppcCxleHBvcnRzLkd1bnppcD1HdW56aXAsZXhwb3J0cy5EZWZsYXRlUmF3PURlZmxhdGVSYXcsZXhwb3J0cy5JbmZsYXRlUmF3PUluZmxhdGVSYXcsZXhwb3J0cy5VbnppcD1VbnppcCxleHBvcnRzLmNyZWF0ZURlZmxhdGU9ZnVuY3Rpb24obyl7cmV0dXJuIG5ldyBEZWZsYXRlKG8pfSxleHBvcnRzLmNyZWF0ZUluZmxhdGU9ZnVuY3Rpb24obyl7cmV0dXJuIG5ldyBJbmZsYXRlKG8pfSxleHBvcnRzLmNyZWF0ZURlZmxhdGVSYXc9ZnVuY3Rpb24obyl7cmV0dXJuIG5ldyBEZWZsYXRlUmF3KG8pfSxleHBvcnRzLmNyZWF0ZUluZmxhdGVSYXc9ZnVuY3Rpb24obyl7cmV0dXJuIG5ldyBJbmZsYXRlUmF3KG8pfSxleHBvcnRzLmNyZWF0ZUd6aXA9ZnVuY3Rpb24obyl7cmV0dXJuIG5ldyBHemlwKG8pfSxleHBvcnRzLmNyZWF0ZUd1bnppcD1mdW5jdGlvbihvKXtyZXR1cm4gbmV3IEd1bnppcChvKX0sZXhwb3J0cy5jcmVhdGVVbnppcD1mdW5jdGlvbihvKXtyZXR1cm4gbmV3IFVuemlwKG8pfSxleHBvcnRzLmRlZmxhdGU9ZnVuY3Rpb24oYnVmZmVyLG9wdHMsY2FsbGJhY2spe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvcHRzJiYoY2FsbGJhY2s9b3B0cyxvcHRzPXt9KSx6bGliQnVmZmVyKG5ldyBEZWZsYXRlKG9wdHMpLGJ1ZmZlcixjYWxsYmFjayl9LGV4cG9ydHMuZGVmbGF0ZVN5bmM9ZnVuY3Rpb24oYnVmZmVyLG9wdHMpe3JldHVybiB6bGliQnVmZmVyU3luYyhuZXcgRGVmbGF0ZShvcHRzKSxidWZmZXIpfSxleHBvcnRzLmd6aXA9ZnVuY3Rpb24oYnVmZmVyLG9wdHMsY2FsbGJhY2spe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvcHRzJiYoY2FsbGJhY2s9b3B0cyxvcHRzPXt9KSx6bGliQnVmZmVyKG5ldyBHemlwKG9wdHMpLGJ1ZmZlcixjYWxsYmFjayl9LGV4cG9ydHMuZ3ppcFN5bmM9ZnVuY3Rpb24oYnVmZmVyLG9wdHMpe3JldHVybiB6bGliQnVmZmVyU3luYyhuZXcgR3ppcChvcHRzKSxidWZmZXIpfSxleHBvcnRzLmRlZmxhdGVSYXc9ZnVuY3Rpb24oYnVmZmVyLG9wdHMsY2FsbGJhY2spe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvcHRzJiYoY2FsbGJhY2s9b3B0cyxvcHRzPXt9KSx6bGliQnVmZmVyKG5ldyBEZWZsYXRlUmF3KG9wdHMpLGJ1ZmZlcixjYWxsYmFjayl9LGV4cG9ydHMuZGVmbGF0ZVJhd1N5bmM9ZnVuY3Rpb24oYnVmZmVyLG9wdHMpe3JldHVybiB6bGliQnVmZmVyU3luYyhuZXcgRGVmbGF0ZVJhdyhvcHRzKSxidWZmZXIpfSxleHBvcnRzLnVuemlwPWZ1bmN0aW9uKGJ1ZmZlcixvcHRzLGNhbGxiYWNrKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygb3B0cyYmKGNhbGxiYWNrPW9wdHMsb3B0cz17fSksemxpYkJ1ZmZlcihuZXcgVW56aXAob3B0cyksYnVmZmVyLGNhbGxiYWNrKX0sZXhwb3J0cy51bnppcFN5bmM9ZnVuY3Rpb24oYnVmZmVyLG9wdHMpe3JldHVybiB6bGliQnVmZmVyU3luYyhuZXcgVW56aXAob3B0cyksYnVmZmVyKX0sZXhwb3J0cy5pbmZsYXRlPWZ1bmN0aW9uKGJ1ZmZlcixvcHRzLGNhbGxiYWNrKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygb3B0cyYmKGNhbGxiYWNrPW9wdHMsb3B0cz17fSksemxpYkJ1ZmZlcihuZXcgSW5mbGF0ZShvcHRzKSxidWZmZXIsY2FsbGJhY2spfSxleHBvcnRzLmluZmxhdGVTeW5jPWZ1bmN0aW9uKGJ1ZmZlcixvcHRzKXtyZXR1cm4gemxpYkJ1ZmZlclN5bmMobmV3IEluZmxhdGUob3B0cyksYnVmZmVyKX0sZXhwb3J0cy5ndW56aXA9ZnVuY3Rpb24oYnVmZmVyLG9wdHMsY2FsbGJhY2spe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvcHRzJiYoY2FsbGJhY2s9b3B0cyxvcHRzPXt9KSx6bGliQnVmZmVyKG5ldyBHdW56aXAob3B0cyksYnVmZmVyLGNhbGxiYWNrKX0sZXhwb3J0cy5ndW56aXBTeW5jPWZ1bmN0aW9uKGJ1ZmZlcixvcHRzKXtyZXR1cm4gemxpYkJ1ZmZlclN5bmMobmV3IEd1bnppcChvcHRzKSxidWZmZXIpfSxleHBvcnRzLmluZmxhdGVSYXc9ZnVuY3Rpb24oYnVmZmVyLG9wdHMsY2FsbGJhY2spe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvcHRzJiYoY2FsbGJhY2s9b3B0cyxvcHRzPXt9KSx6bGliQnVmZmVyKG5ldyBJbmZsYXRlUmF3KG9wdHMpLGJ1ZmZlcixjYWxsYmFjayl9LGV4cG9ydHMuaW5mbGF0ZVJhd1N5bmM9ZnVuY3Rpb24oYnVmZmVyLG9wdHMpe3JldHVybiB6bGliQnVmZmVyU3luYyhuZXcgSW5mbGF0ZVJhdyhvcHRzKSxidWZmZXIpfSx1dGlsLmluaGVyaXRzKFpsaWIsVHJhbnNmb3JtKSxabGliLnByb3RvdHlwZS5wYXJhbXM9ZnVuY3Rpb24obGV2ZWwsc3RyYXRlZ3ksY2FsbGJhY2spe2lmKGxldmVsPGV4cG9ydHMuWl9NSU5fTEVWRUx8fGxldmVsPmV4cG9ydHMuWl9NQVhfTEVWRUwpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgY29tcHJlc3Npb24gbGV2ZWw6ICIrbGV2ZWwpO2lmKHN0cmF0ZWd5IT1leHBvcnRzLlpfRklMVEVSRUQmJnN0cmF0ZWd5IT1leHBvcnRzLlpfSFVGRk1BTl9PTkxZJiZzdHJhdGVneSE9ZXhwb3J0cy5aX1JMRSYmc3RyYXRlZ3khPWV4cG9ydHMuWl9GSVhFRCYmc3RyYXRlZ3khPWV4cG9ydHMuWl9ERUZBVUxUX1NUUkFURUdZKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgc3RyYXRlZ3k6ICIrc3RyYXRlZ3kpO2lmKHRoaXMuX2xldmVsIT09bGV2ZWx8fHRoaXMuX3N0cmF0ZWd5IT09c3RyYXRlZ3kpe3ZhciBzZWxmPXRoaXM7dGhpcy5mbHVzaChiaW5kaW5nLlpfU1lOQ19GTFVTSCxmdW5jdGlvbigpe2Fzc2VydChzZWxmLl9oYW5kbGUsInpsaWIgYmluZGluZyBjbG9zZWQiKSxzZWxmLl9oYW5kbGUucGFyYW1zKGxldmVsLHN0cmF0ZWd5KSxzZWxmLl9oYWRFcnJvcnx8KHNlbGYuX2xldmVsPWxldmVsLHNlbGYuX3N0cmF0ZWd5PXN0cmF0ZWd5LGNhbGxiYWNrJiZjYWxsYmFjaygpKX0pfWVsc2UgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjayl9LFpsaWIucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGFzc2VydCh0aGlzLl9oYW5kbGUsInpsaWIgYmluZGluZyBjbG9zZWQiKSx0aGlzLl9oYW5kbGUucmVzZXQoKX0sWmxpYi5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKGNhbGxiYWNrKXt0aGlzLl90cmFuc2Zvcm0oQnVmZmVyLmFsbG9jKDApLCIiLGNhbGxiYWNrKX0sWmxpYi5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oa2luZCxjYWxsYmFjayl7dmFyIF90aGlzMj10aGlzLHdzPXRoaXMuX3dyaXRhYmxlU3RhdGU7KCJmdW5jdGlvbiI9PXR5cGVvZiBraW5kfHx2b2lkIDA9PT1raW5kJiYhY2FsbGJhY2spJiYoY2FsbGJhY2s9a2luZCxraW5kPWJpbmRpbmcuWl9GVUxMX0ZMVVNIKSx3cy5lbmRlZD9jYWxsYmFjayYmcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjayk6d3MuZW5kaW5nP2NhbGxiYWNrJiZ0aGlzLm9uY2UoImVuZCIsY2FsbGJhY2spOndzLm5lZWREcmFpbj9jYWxsYmFjayYmdGhpcy5vbmNlKCJkcmFpbiIsZnVuY3Rpb24oKXtyZXR1cm4gX3RoaXMyLmZsdXNoKGtpbmQsY2FsbGJhY2spfSk6KHRoaXMuX2ZsdXNoRmxhZz1raW5kLHRoaXMud3JpdGUoQnVmZmVyLmFsbG9jKDApLCIiLGNhbGxiYWNrKSl9LFpsaWIucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKGNhbGxiYWNrKXtfY2xvc2UodGhpcyxjYWxsYmFjaykscHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCx0aGlzKX0sWmxpYi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihjaHVuayxlbmNvZGluZyxjYil7dmFyIGZsdXNoRmxhZyx3cz10aGlzLl93cml0YWJsZVN0YXRlLGxhc3Q9KHdzLmVuZGluZ3x8d3MuZW5kZWQpJiYoIWNodW5rfHx3cy5sZW5ndGg9PT1jaHVuay5sZW5ndGgpO3JldHVybiBudWxsPT09Y2h1bmt8fEJ1ZmZlci5pc0J1ZmZlcihjaHVuayk/dGhpcy5faGFuZGxlPyhsYXN0P2ZsdXNoRmxhZz10aGlzLl9maW5pc2hGbHVzaEZsYWc6KGZsdXNoRmxhZz10aGlzLl9mbHVzaEZsYWcsY2h1bmsubGVuZ3RoPj13cy5sZW5ndGgmJih0aGlzLl9mbHVzaEZsYWc9dGhpcy5fb3B0cy5mbHVzaHx8YmluZGluZy5aX05PX0ZMVVNIKSksdm9pZCB0aGlzLl9wcm9jZXNzQ2h1bmsoY2h1bmssZmx1c2hGbGFnLGNiKSk6Y2IobmV3IEVycm9yKCJ6bGliIGJpbmRpbmcgY2xvc2VkIikpOmNiKG5ldyBFcnJvcigiaW52YWxpZCBpbnB1dCIpKX0sWmxpYi5wcm90b3R5cGUuX3Byb2Nlc3NDaHVuaz1mdW5jdGlvbihjaHVuayxmbHVzaEZsYWcsY2Ipe3ZhciBhdmFpbEluQmVmb3JlPWNodW5rJiZjaHVuay5sZW5ndGgsYXZhaWxPdXRCZWZvcmU9dGhpcy5fY2h1bmtTaXplLXRoaXMuX29mZnNldCxpbk9mZj0wLHNlbGY9dGhpcyxhc3luYz0iZnVuY3Rpb24iPT10eXBlb2YgY2I7aWYoIWFzeW5jKXt2YXIgZXJyb3IsYnVmZmVycz1bXSxucmVhZD0wO3RoaXMub24oImVycm9yIixmdW5jdGlvbihlcil7ZXJyb3I9ZXJ9KSxhc3NlcnQodGhpcy5faGFuZGxlLCJ6bGliIGJpbmRpbmcgY2xvc2VkIik7ZG97dmFyIHJlcz10aGlzLl9oYW5kbGUud3JpdGVTeW5jKGZsdXNoRmxhZyxjaHVuayxpbk9mZixhdmFpbEluQmVmb3JlLHRoaXMuX2J1ZmZlcix0aGlzLl9vZmZzZXQsYXZhaWxPdXRCZWZvcmUpfXdoaWxlKCF0aGlzLl9oYWRFcnJvciYmY2FsbGJhY2socmVzWzBdLHJlc1sxXSkpO2lmKHRoaXMuX2hhZEVycm9yKXRocm93IGVycm9yO2lmKG5yZWFkPj1rTWF4TGVuZ3RoKXRocm93IF9jbG9zZSh0aGlzKSxuZXcgUmFuZ2VFcnJvcihrUmFuZ2VFcnJvck1lc3NhZ2UpO3ZhciBidWY9QnVmZmVyLmNvbmNhdChidWZmZXJzLG5yZWFkKTtyZXR1cm4gX2Nsb3NlKHRoaXMpLGJ1Zn1hc3NlcnQodGhpcy5faGFuZGxlLCJ6bGliIGJpbmRpbmcgY2xvc2VkIik7dmFyIHJlcT10aGlzLl9oYW5kbGUud3JpdGUoZmx1c2hGbGFnLGNodW5rLGluT2ZmLGF2YWlsSW5CZWZvcmUsdGhpcy5fYnVmZmVyLHRoaXMuX29mZnNldCxhdmFpbE91dEJlZm9yZSk7ZnVuY3Rpb24gY2FsbGJhY2soYXZhaWxJbkFmdGVyLGF2YWlsT3V0QWZ0ZXIpe2lmKHRoaXMmJih0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuY2FsbGJhY2s9bnVsbCksIXNlbGYuX2hhZEVycm9yKXt2YXIgaGF2ZT1hdmFpbE91dEJlZm9yZS1hdmFpbE91dEFmdGVyO2lmKGFzc2VydChoYXZlPj0wLCJoYXZlIHNob3VsZCBub3QgZ28gZG93biIpLGhhdmU+MCl7dmFyIG91dD1zZWxmLl9idWZmZXIuc2xpY2Uoc2VsZi5fb2Zmc2V0LHNlbGYuX29mZnNldCtoYXZlKTtzZWxmLl9vZmZzZXQrPWhhdmUsYXN5bmM/c2VsZi5wdXNoKG91dCk6KGJ1ZmZlcnMucHVzaChvdXQpLG5yZWFkKz1vdXQubGVuZ3RoKX1pZigoMD09PWF2YWlsT3V0QWZ0ZXJ8fHNlbGYuX29mZnNldD49c2VsZi5fY2h1bmtTaXplKSYmKGF2YWlsT3V0QmVmb3JlPXNlbGYuX2NodW5rU2l6ZSxzZWxmLl9vZmZzZXQ9MCxzZWxmLl9idWZmZXI9QnVmZmVyLmFsbG9jVW5zYWZlKHNlbGYuX2NodW5rU2l6ZSkpLDA9PT1hdmFpbE91dEFmdGVyKXtpZihpbk9mZis9YXZhaWxJbkJlZm9yZS1hdmFpbEluQWZ0ZXIsYXZhaWxJbkJlZm9yZT1hdmFpbEluQWZ0ZXIsIWFzeW5jKXJldHVybiEwO3ZhciBuZXdSZXE9c2VsZi5faGFuZGxlLndyaXRlKGZsdXNoRmxhZyxjaHVuayxpbk9mZixhdmFpbEluQmVmb3JlLHNlbGYuX2J1ZmZlcixzZWxmLl9vZmZzZXQsc2VsZi5fY2h1bmtTaXplKTtyZXR1cm4gbmV3UmVxLmNhbGxiYWNrPWNhbGxiYWNrLHZvaWQobmV3UmVxLmJ1ZmZlcj1jaHVuayl9aWYoIWFzeW5jKXJldHVybiExO2NiKCl9fXJlcS5idWZmZXI9Y2h1bmsscmVxLmNhbGxiYWNrPWNhbGxiYWNrfSx1dGlsLmluaGVyaXRzKERlZmxhdGUsWmxpYiksdXRpbC5pbmhlcml0cyhJbmZsYXRlLFpsaWIpLHV0aWwuaW5oZXJpdHMoR3ppcCxabGliKSx1dGlsLmluaGVyaXRzKEd1bnppcCxabGliKSx1dGlsLmluaGVyaXRzKERlZmxhdGVSYXcsWmxpYiksdXRpbC5pbmhlcml0cyhJbmZsYXRlUmF3LFpsaWIpLHV0aWwuaW5oZXJpdHMoVW56aXAsWmxpYil9LCIuLi8uLi9ub2RlX21vZHVsZXMvYnVmZmVyLXhvci9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiB4b3IoYSxiKXtmb3IodmFyIGxlbmd0aD1NYXRoLm1pbihhLmxlbmd0aCxiLmxlbmd0aCksYnVmZmVyPW5ldyBCdWZmZXIobGVuZ3RoKSxpPTA7aTxsZW5ndGg7KytpKWJ1ZmZlcltpXT1hW2ldXmJbaV07cmV0dXJuIGJ1ZmZlcn19LCIuLi8uLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgYmFzZTY0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiKSxpZWVlNzU0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiksY3VzdG9tSW5zcGVjdFN5bWJvbD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7ZXhwb3J0cy5CdWZmZXI9QnVmZmVyLGV4cG9ydHMuU2xvd0J1ZmZlcj1mdW5jdGlvbiBTbG93QnVmZmVyKGxlbmd0aCl7K2xlbmd0aCE9bGVuZ3RoJiYobGVuZ3RoPTApO3JldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aCl9LGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVM9NTA7ZnVuY3Rpb24gY3JlYXRlQnVmZmVyKGxlbmd0aCl7aWYobGVuZ3RoPjIxNDc0ODM2NDcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytsZW5ndGgrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciBidWY9bmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZixCdWZmZXIucHJvdG90eXBlKSxidWZ9ZnVuY3Rpb24gQnVmZmVyKGFyZyxlbmNvZGluZ09yT2Zmc2V0LGxlbmd0aCl7aWYoIm51bWJlciI9PXR5cGVvZiBhcmcpe2lmKCJzdHJpbmciPT10eXBlb2YgZW5jb2RpbmdPck9mZnNldCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gYWxsb2NVbnNhZmUoYXJnKX1yZXR1cm4gZnJvbShhcmcsZW5jb2RpbmdPck9mZnNldCxsZW5ndGgpfWZ1bmN0aW9uIGZyb20odmFsdWUsZW5jb2RpbmdPck9mZnNldCxsZW5ndGgpe2lmKCJzdHJpbmciPT10eXBlb2YgdmFsdWUpcmV0dXJuIGZ1bmN0aW9uIGZyb21TdHJpbmcoc3RyaW5nLGVuY29kaW5nKXsic3RyaW5nIj09dHlwZW9mIGVuY29kaW5nJiYiIiE9PWVuY29kaW5nfHwoZW5jb2Rpbmc9InV0ZjgiKTtpZighQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZW5jb2RpbmcpO3ZhciBsZW5ndGg9MHxieXRlTGVuZ3RoKHN0cmluZyxlbmNvZGluZyksYnVmPWNyZWF0ZUJ1ZmZlcihsZW5ndGgpLGFjdHVhbD1idWYud3JpdGUoc3RyaW5nLGVuY29kaW5nKTthY3R1YWwhPT1sZW5ndGgmJihidWY9YnVmLnNsaWNlKDAsYWN0dWFsKSk7cmV0dXJuIGJ1Zn0odmFsdWUsZW5jb2RpbmdPck9mZnNldCk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSlyZXR1cm4gZnVuY3Rpb24gZnJvbUFycmF5VmlldyhhcnJheVZpZXcpe2lmKGlzSW5zdGFuY2UoYXJyYXlWaWV3LFVpbnQ4QXJyYXkpKXt2YXIgY29weT1uZXcgVWludDhBcnJheShhcnJheVZpZXcpO3JldHVybiBmcm9tQXJyYXlCdWZmZXIoY29weS5idWZmZXIsY29weS5ieXRlT2Zmc2V0LGNvcHkuYnl0ZUxlbmd0aCl9cmV0dXJuIGZyb21BcnJheUxpa2UoYXJyYXlWaWV3KX0odmFsdWUpO2lmKG51bGw9PXZhbHVlKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIHZhbHVlKTtpZihpc0luc3RhbmNlKHZhbHVlLEFycmF5QnVmZmVyKXx8dmFsdWUmJmlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLEFycmF5QnVmZmVyKSlyZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLGVuY29kaW5nT3JPZmZzZXQsbGVuZ3RoKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyJiYoaXNJbnN0YW5jZSh2YWx1ZSxTaGFyZWRBcnJheUJ1ZmZlcil8fHZhbHVlJiZpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsZW5jb2RpbmdPck9mZnNldCxsZW5ndGgpO2lmKCJudW1iZXIiPT10eXBlb2YgdmFsdWUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIHZhbHVlT2Y9dmFsdWUudmFsdWVPZiYmdmFsdWUudmFsdWVPZigpO2lmKG51bGwhPXZhbHVlT2YmJnZhbHVlT2YhPT12YWx1ZSlyZXR1cm4gQnVmZmVyLmZyb20odmFsdWVPZixlbmNvZGluZ09yT2Zmc2V0LGxlbmd0aCk7dmFyIGI9ZnVuY3Rpb24gZnJvbU9iamVjdChvYmope2lmKEJ1ZmZlci5pc0J1ZmZlcihvYmopKXt2YXIgbGVuPTB8Y2hlY2tlZChvYmoubGVuZ3RoKSxidWY9Y3JlYXRlQnVmZmVyKGxlbik7cmV0dXJuIDA9PT1idWYubGVuZ3RofHxvYmouY29weShidWYsMCwwLGxlbiksYnVmfWlmKHZvaWQgMCE9PW9iai5sZW5ndGgpcmV0dXJuIm51bWJlciIhPXR5cGVvZiBvYmoubGVuZ3RofHxudW1iZXJJc05hTihvYmoubGVuZ3RoKT9jcmVhdGVCdWZmZXIoMCk6ZnJvbUFycmF5TGlrZShvYmopO2lmKCJCdWZmZXIiPT09b2JqLnR5cGUmJkFycmF5LmlzQXJyYXkob2JqLmRhdGEpKXJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKX0odmFsdWUpO2lmKGIpcmV0dXJuIGI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLGVuY29kaW5nT3JPZmZzZXQsbGVuZ3RoKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiB2YWx1ZSl9ZnVuY3Rpb24gYXNzZXJ0U2l6ZShzaXplKXtpZigibnVtYmVyIiE9dHlwZW9mIHNpemUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihzaXplPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytzaXplKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBhbGxvY1Vuc2FmZShzaXplKXtyZXR1cm4gYXNzZXJ0U2l6ZShzaXplKSxjcmVhdGVCdWZmZXIoc2l6ZTwwPzA6MHxjaGVja2VkKHNpemUpKX1mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KXtmb3IodmFyIGxlbmd0aD1hcnJheS5sZW5ndGg8MD8wOjB8Y2hlY2tlZChhcnJheS5sZW5ndGgpLGJ1Zj1jcmVhdGVCdWZmZXIobGVuZ3RoKSxpPTA7aTxsZW5ndGg7aSs9MSlidWZbaV09MjU1JmFycmF5W2ldO3JldHVybiBidWZ9ZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyKGFycmF5LGJ5dGVPZmZzZXQsbGVuZ3RoKXtpZihieXRlT2Zmc2V0PDB8fGFycmF5LmJ5dGVMZW5ndGg8Ynl0ZU9mZnNldCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoYXJyYXkuYnl0ZUxlbmd0aDxieXRlT2Zmc2V0KyhsZW5ndGh8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgYnVmO3JldHVybiBidWY9dm9pZCAwPT09Ynl0ZU9mZnNldCYmdm9pZCAwPT09bGVuZ3RoP25ldyBVaW50OEFycmF5KGFycmF5KTp2b2lkIDA9PT1sZW5ndGg/bmV3IFVpbnQ4QXJyYXkoYXJyYXksYnl0ZU9mZnNldCk6bmV3IFVpbnQ4QXJyYXkoYXJyYXksYnl0ZU9mZnNldCxsZW5ndGgpLE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsQnVmZmVyLnByb3RvdHlwZSksYnVmfWZ1bmN0aW9uIGNoZWNrZWQobGVuZ3RoKXtpZihsZW5ndGg+PTIxNDc0ODM2NDcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiKzIxNDc0ODM2NDcuLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8bGVuZ3RofWZ1bmN0aW9uIGJ5dGVMZW5ndGgoc3RyaW5nLGVuY29kaW5nKXtpZihCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSlyZXR1cm4gc3RyaW5nLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKXx8aXNJbnN0YW5jZShzdHJpbmcsQXJyYXlCdWZmZXIpKXJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIHN0cmluZyl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2Ygc3RyaW5nKTt2YXIgbGVuPXN0cmluZy5sZW5ndGgsbXVzdE1hdGNoPWFyZ3VtZW50cy5sZW5ndGg+MiYmITA9PT1hcmd1bWVudHNbMl07aWYoIW11c3RNYXRjaCYmMD09PWxlbilyZXR1cm4gMDtmb3IodmFyIGxvd2VyZWRDYXNlPSExOzspc3dpdGNoKGVuY29kaW5nKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBsZW47Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKmxlbjtjYXNlImhleCI6cmV0dXJuIGxlbj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoO2RlZmF1bHQ6aWYobG93ZXJlZENhc2UpcmV0dXJuIG11c3RNYXRjaD8tMTp1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aDtlbmNvZGluZz0oIiIrZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCksbG93ZXJlZENhc2U9ITB9fWZ1bmN0aW9uIHNsb3dUb1N0cmluZyhlbmNvZGluZyxzdGFydCxlbmQpe3ZhciBsb3dlcmVkQ2FzZT0hMTtpZigodm9pZCAwPT09c3RhcnR8fHN0YXJ0PDApJiYoc3RhcnQ9MCksc3RhcnQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PWVuZHx8ZW5kPnRoaXMubGVuZ3RoKSYmKGVuZD10aGlzLmxlbmd0aCksZW5kPD0wKXJldHVybiIiO2lmKChlbmQ+Pj49MCk8PShzdGFydD4+Pj0wKSlyZXR1cm4iIjtmb3IoZW5jb2Rpbmd8fChlbmNvZGluZz0idXRmOCIpOzspc3dpdGNoKGVuY29kaW5nKXtjYXNlImhleCI6cmV0dXJuIGhleFNsaWNlKHRoaXMsc3RhcnQsZW5kKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiB1dGY4U2xpY2UodGhpcyxzdGFydCxlbmQpO2Nhc2UiYXNjaWkiOnJldHVybiBhc2NpaVNsaWNlKHRoaXMsc3RhcnQsZW5kKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBsYXRpbjFTbGljZSh0aGlzLHN0YXJ0LGVuZCk7Y2FzZSJiYXNlNjQiOnJldHVybiBiYXNlNjRTbGljZSh0aGlzLHN0YXJ0LGVuZCk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiB1dGYxNmxlU2xpY2UodGhpcyxzdGFydCxlbmQpO2RlZmF1bHQ6aWYobG93ZXJlZENhc2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlbmNvZGluZyk7ZW5jb2Rpbmc9KGVuY29kaW5nKyIiKS50b0xvd2VyQ2FzZSgpLGxvd2VyZWRDYXNlPSEwfX1mdW5jdGlvbiBzd2FwKGIsbixtKXt2YXIgaT1iW25dO2Jbbl09YlttXSxiW21dPWl9ZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YoYnVmZmVyLHZhbCxieXRlT2Zmc2V0LGVuY29kaW5nLGRpcil7aWYoMD09PWJ1ZmZlci5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBieXRlT2Zmc2V0PyhlbmNvZGluZz1ieXRlT2Zmc2V0LGJ5dGVPZmZzZXQ9MCk6Ynl0ZU9mZnNldD4yMTQ3NDgzNjQ3P2J5dGVPZmZzZXQ9MjE0NzQ4MzY0NzpieXRlT2Zmc2V0PC0yMTQ3NDgzNjQ4JiYoYnl0ZU9mZnNldD0tMjE0NzQ4MzY0OCksbnVtYmVySXNOYU4oYnl0ZU9mZnNldD0rYnl0ZU9mZnNldCkmJihieXRlT2Zmc2V0PWRpcj8wOmJ1ZmZlci5sZW5ndGgtMSksYnl0ZU9mZnNldDwwJiYoYnl0ZU9mZnNldD1idWZmZXIubGVuZ3RoK2J5dGVPZmZzZXQpLGJ5dGVPZmZzZXQ+PWJ1ZmZlci5sZW5ndGgpe2lmKGRpcilyZXR1cm4tMTtieXRlT2Zmc2V0PWJ1ZmZlci5sZW5ndGgtMX1lbHNlIGlmKGJ5dGVPZmZzZXQ8MCl7aWYoIWRpcilyZXR1cm4tMTtieXRlT2Zmc2V0PTB9aWYoInN0cmluZyI9PXR5cGVvZiB2YWwmJih2YWw9QnVmZmVyLmZyb20odmFsLGVuY29kaW5nKSksQnVmZmVyLmlzQnVmZmVyKHZhbCkpcmV0dXJuIDA9PT12YWwubGVuZ3RoPy0xOmFycmF5SW5kZXhPZihidWZmZXIsdmFsLGJ5dGVPZmZzZXQsZW5jb2RpbmcsZGlyKTtpZigibnVtYmVyIj09dHlwZW9mIHZhbClyZXR1cm4gdmFsJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/ZGlyP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsdmFsLGJ5dGVPZmZzZXQpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLHZhbCxieXRlT2Zmc2V0KTphcnJheUluZGV4T2YoYnVmZmVyLFt2YWxdLGJ5dGVPZmZzZXQsZW5jb2RpbmcsZGlyKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBhcnJheUluZGV4T2YoYXJyLHZhbCxieXRlT2Zmc2V0LGVuY29kaW5nLGRpcil7dmFyIGksaW5kZXhTaXplPTEsYXJyTGVuZ3RoPWFyci5sZW5ndGgsdmFsTGVuZ3RoPXZhbC5sZW5ndGg7aWYodm9pZCAwIT09ZW5jb2RpbmcmJigidWNzMiI9PT0oZW5jb2Rpbmc9U3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PWVuY29kaW5nfHwidXRmMTZsZSI9PT1lbmNvZGluZ3x8InV0Zi0xNmxlIj09PWVuY29kaW5nKSl7aWYoYXJyLmxlbmd0aDwyfHx2YWwubGVuZ3RoPDIpcmV0dXJuLTE7aW5kZXhTaXplPTIsYXJyTGVuZ3RoLz0yLHZhbExlbmd0aC89MixieXRlT2Zmc2V0Lz0yfWZ1bmN0aW9uIHJlYWQoYnVmLGkpe3JldHVybiAxPT09aW5kZXhTaXplP2J1ZltpXTpidWYucmVhZFVJbnQxNkJFKGkqaW5kZXhTaXplKX1pZihkaXIpe3ZhciBmb3VuZEluZGV4PS0xO2ZvcihpPWJ5dGVPZmZzZXQ7aTxhcnJMZW5ndGg7aSsrKWlmKHJlYWQoYXJyLGkpPT09cmVhZCh2YWwsLTE9PT1mb3VuZEluZGV4PzA6aS1mb3VuZEluZGV4KSl7aWYoLTE9PT1mb3VuZEluZGV4JiYoZm91bmRJbmRleD1pKSxpLWZvdW5kSW5kZXgrMT09PXZhbExlbmd0aClyZXR1cm4gZm91bmRJbmRleCppbmRleFNpemV9ZWxzZS0xIT09Zm91bmRJbmRleCYmKGktPWktZm91bmRJbmRleCksZm91bmRJbmRleD0tMX1lbHNlIGZvcihieXRlT2Zmc2V0K3ZhbExlbmd0aD5hcnJMZW5ndGgmJihieXRlT2Zmc2V0PWFyckxlbmd0aC12YWxMZW5ndGgpLGk9Ynl0ZU9mZnNldDtpPj0wO2ktLSl7Zm9yKHZhciBmb3VuZD0hMCxqPTA7ajx2YWxMZW5ndGg7aisrKWlmKHJlYWQoYXJyLGkraikhPT1yZWFkKHZhbCxqKSl7Zm91bmQ9ITE7YnJlYWt9aWYoZm91bmQpcmV0dXJuIGl9cmV0dXJuLTF9ZnVuY3Rpb24gaGV4V3JpdGUoYnVmLHN0cmluZyxvZmZzZXQsbGVuZ3RoKXtvZmZzZXQ9TnVtYmVyKG9mZnNldCl8fDA7dmFyIHJlbWFpbmluZz1idWYubGVuZ3RoLW9mZnNldDtsZW5ndGg/KGxlbmd0aD1OdW1iZXIobGVuZ3RoKSk+cmVtYWluaW5nJiYobGVuZ3RoPXJlbWFpbmluZyk6bGVuZ3RoPXJlbWFpbmluZzt2YXIgc3RyTGVuPXN0cmluZy5sZW5ndGg7bGVuZ3RoPnN0ckxlbi8yJiYobGVuZ3RoPXN0ckxlbi8yKTtmb3IodmFyIGk9MDtpPGxlbmd0aDsrK2kpe3ZhciBwYXJzZWQ9cGFyc2VJbnQoc3RyaW5nLnN1YnN0cigyKmksMiksMTYpO2lmKG51bWJlcklzTmFOKHBhcnNlZCkpcmV0dXJuIGk7YnVmW29mZnNldCtpXT1wYXJzZWR9cmV0dXJuIGl9ZnVuY3Rpb24gdXRmOFdyaXRlKGJ1ZixzdHJpbmcsb2Zmc2V0LGxlbmd0aCl7cmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLGJ1Zi5sZW5ndGgtb2Zmc2V0KSxidWYsb2Zmc2V0LGxlbmd0aCl9ZnVuY3Rpb24gYXNjaWlXcml0ZShidWYsc3RyaW5nLG9mZnNldCxsZW5ndGgpe3JldHVybiBibGl0QnVmZmVyKGZ1bmN0aW9uIGFzY2lpVG9CeXRlcyhzdHIpe2Zvcih2YXIgYnl0ZUFycmF5PVtdLGk9MDtpPHN0ci5sZW5ndGg7KytpKWJ5dGVBcnJheS5wdXNoKDI1NSZzdHIuY2hhckNvZGVBdChpKSk7cmV0dXJuIGJ5dGVBcnJheX0oc3RyaW5nKSxidWYsb2Zmc2V0LGxlbmd0aCl9ZnVuY3Rpb24gYmFzZTY0V3JpdGUoYnVmLHN0cmluZyxvZmZzZXQsbGVuZ3RoKXtyZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksYnVmLG9mZnNldCxsZW5ndGgpfWZ1bmN0aW9uIHVjczJXcml0ZShidWYsc3RyaW5nLG9mZnNldCxsZW5ndGgpe3JldHVybiBibGl0QnVmZmVyKGZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzKHN0cix1bml0cyl7Zm9yKHZhciBjLGhpLGxvLGJ5dGVBcnJheT1bXSxpPTA7aTxzdHIubGVuZ3RoJiYhKCh1bml0cy09Mik8MCk7KytpKWhpPShjPXN0ci5jaGFyQ29kZUF0KGkpKT4+OCxsbz1jJTI1NixieXRlQXJyYXkucHVzaChsbyksYnl0ZUFycmF5LnB1c2goaGkpO3JldHVybiBieXRlQXJyYXl9KHN0cmluZyxidWYubGVuZ3RoLW9mZnNldCksYnVmLG9mZnNldCxsZW5ndGgpfWZ1bmN0aW9uIGJhc2U2NFNsaWNlKGJ1ZixzdGFydCxlbmQpe3JldHVybiAwPT09c3RhcnQmJmVuZD09PWJ1Zi5sZW5ndGg/YmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKTpiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsZW5kKSl9ZnVuY3Rpb24gdXRmOFNsaWNlKGJ1ZixzdGFydCxlbmQpe2VuZD1NYXRoLm1pbihidWYubGVuZ3RoLGVuZCk7Zm9yKHZhciByZXM9W10saT1zdGFydDtpPGVuZDspe3ZhciBzZWNvbmRCeXRlLHRoaXJkQnl0ZSxmb3VydGhCeXRlLHRlbXBDb2RlUG9pbnQsZmlyc3RCeXRlPWJ1ZltpXSxjb2RlUG9pbnQ9bnVsbCxieXRlc1BlclNlcXVlbmNlPWZpcnN0Qnl0ZT4yMzk/NDpmaXJzdEJ5dGU+MjIzPzM6Zmlyc3RCeXRlPjE5MT8yOjE7aWYoaStieXRlc1BlclNlcXVlbmNlPD1lbmQpc3dpdGNoKGJ5dGVzUGVyU2VxdWVuY2Upe2Nhc2UgMTpmaXJzdEJ5dGU8MTI4JiYoY29kZVBvaW50PWZpcnN0Qnl0ZSk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYoc2Vjb25kQnl0ZT1idWZbaSsxXSkpJiYodGVtcENvZGVQb2ludD0oMzEmZmlyc3RCeXRlKTw8Nnw2MyZzZWNvbmRCeXRlKT4xMjcmJihjb2RlUG9pbnQ9dGVtcENvZGVQb2ludCk7YnJlYWs7Y2FzZSAzOnNlY29uZEJ5dGU9YnVmW2krMV0sdGhpcmRCeXRlPWJ1ZltpKzJdLDEyOD09KDE5MiZzZWNvbmRCeXRlKSYmMTI4PT0oMTkyJnRoaXJkQnl0ZSkmJih0ZW1wQ29kZVBvaW50PSgxNSZmaXJzdEJ5dGUpPDwxMnwoNjMmc2Vjb25kQnl0ZSk8PDZ8NjMmdGhpcmRCeXRlKT4yMDQ3JiYodGVtcENvZGVQb2ludDw1NTI5Nnx8dGVtcENvZGVQb2ludD41NzM0MykmJihjb2RlUG9pbnQ9dGVtcENvZGVQb2ludCk7YnJlYWs7Y2FzZSA0OnNlY29uZEJ5dGU9YnVmW2krMV0sdGhpcmRCeXRlPWJ1ZltpKzJdLGZvdXJ0aEJ5dGU9YnVmW2krM10sMTI4PT0oMTkyJnNlY29uZEJ5dGUpJiYxMjg9PSgxOTImdGhpcmRCeXRlKSYmMTI4PT0oMTkyJmZvdXJ0aEJ5dGUpJiYodGVtcENvZGVQb2ludD0oMTUmZmlyc3RCeXRlKTw8MTh8KDYzJnNlY29uZEJ5dGUpPDwxMnwoNjMmdGhpcmRCeXRlKTw8Nnw2MyZmb3VydGhCeXRlKT42NTUzNSYmdGVtcENvZGVQb2ludDwxMTE0MTEyJiYoY29kZVBvaW50PXRlbXBDb2RlUG9pbnQpfW51bGw9PT1jb2RlUG9pbnQ/KGNvZGVQb2ludD02NTUzMyxieXRlc1BlclNlcXVlbmNlPTEpOmNvZGVQb2ludD42NTUzNSYmKGNvZGVQb2ludC09NjU1MzYscmVzLnB1c2goY29kZVBvaW50Pj4+MTAmMTAyM3w1NTI5NiksY29kZVBvaW50PTU2MzIwfDEwMjMmY29kZVBvaW50KSxyZXMucHVzaChjb2RlUG9pbnQpLGkrPWJ5dGVzUGVyU2VxdWVuY2V9cmV0dXJuIGZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheShjb2RlUG9pbnRzKXt2YXIgbGVuPWNvZGVQb2ludHMubGVuZ3RoO2lmKGxlbjw9NDA5NilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsY29kZVBvaW50cyk7dmFyIHJlcz0iIixpPTA7Zm9yKDtpPGxlbjspcmVzKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxjb2RlUG9pbnRzLnNsaWNlKGksaSs9NDA5NikpO3JldHVybiByZXN9KHJlcyl9ZXhwb3J0cy5rTWF4TGVuZ3RoPTIxNDc0ODM2NDcsQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQoKXt0cnl7dmFyIGFycj1uZXcgVWludDhBcnJheSgxKSxwcm90bz17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90byxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGFycixwcm90byksNDI9PT1hcnIuZm9vKCl9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUfHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBjb25zb2xlLmVycm9yfHxjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihCdWZmZXIuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKEJ1ZmZlci5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLEJ1ZmZlci5wb29sU2l6ZT04MTkyLEJ1ZmZlci5mcm9tPWZ1bmN0aW9uKHZhbHVlLGVuY29kaW5nT3JPZmZzZXQsbGVuZ3RoKXtyZXR1cm4gZnJvbSh2YWx1ZSxlbmNvZGluZ09yT2Zmc2V0LGxlbmd0aCl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLFVpbnQ4QXJyYXkpLEJ1ZmZlci5hbGxvYz1mdW5jdGlvbihzaXplLGZpbGwsZW5jb2Rpbmcpe3JldHVybiBmdW5jdGlvbiBhbGxvYyhzaXplLGZpbGwsZW5jb2Rpbmcpe3JldHVybiBhc3NlcnRTaXplKHNpemUpLHNpemU8PTA/Y3JlYXRlQnVmZmVyKHNpemUpOnZvaWQgMCE9PWZpbGw/InN0cmluZyI9PXR5cGVvZiBlbmNvZGluZz9jcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsLGVuY29kaW5nKTpjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKTpjcmVhdGVCdWZmZXIoc2l6ZSl9KHNpemUsZmlsbCxlbmNvZGluZyl9LEJ1ZmZlci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihzaXplKXtyZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSl9LEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oc2l6ZSl7cmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpfSxCdWZmZXIuaXNCdWZmZXI9ZnVuY3Rpb24gaXNCdWZmZXIoYil7cmV0dXJuIG51bGwhPWImJiEwPT09Yi5faXNCdWZmZXImJmIhPT1CdWZmZXIucHJvdG90eXBlfSxCdWZmZXIuY29tcGFyZT1mdW5jdGlvbiBjb21wYXJlKGEsYil7aWYoaXNJbnN0YW5jZShhLFVpbnQ4QXJyYXkpJiYoYT1CdWZmZXIuZnJvbShhLGEub2Zmc2V0LGEuYnl0ZUxlbmd0aCkpLGlzSW5zdGFuY2UoYixVaW50OEFycmF5KSYmKGI9QnVmZmVyLmZyb20oYixiLm9mZnNldCxiLmJ5dGVMZW5ndGgpKSwhQnVmZmVyLmlzQnVmZmVyKGEpfHwhQnVmZmVyLmlzQnVmZmVyKGIpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKGE9PT1iKXJldHVybiAwO2Zvcih2YXIgeD1hLmxlbmd0aCx5PWIubGVuZ3RoLGk9MCxsZW49TWF0aC5taW4oeCx5KTtpPGxlbjsrK2kpaWYoYVtpXSE9PWJbaV0pe3g9YVtpXSx5PWJbaV07YnJlYWt9cmV0dXJuIHg8eT8tMTp5PHg/MTowfSxCdWZmZXIuaXNFbmNvZGluZz1mdW5jdGlvbiBpc0VuY29kaW5nKGVuY29kaW5nKXtzd2l0Y2goU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LEJ1ZmZlci5jb25jYXQ9ZnVuY3Rpb24gY29uY2F0KGxpc3QsbGVuZ3RoKXtpZighQXJyYXkuaXNBcnJheShsaXN0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWxpc3QubGVuZ3RoKXJldHVybiBCdWZmZXIuYWxsb2MoMCk7dmFyIGk7aWYodm9pZCAwPT09bGVuZ3RoKWZvcihsZW5ndGg9MCxpPTA7aTxsaXN0Lmxlbmd0aDsrK2kpbGVuZ3RoKz1saXN0W2ldLmxlbmd0aDt2YXIgYnVmZmVyPUJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpLHBvcz0wO2ZvcihpPTA7aTxsaXN0Lmxlbmd0aDsrK2kpe3ZhciBidWY9bGlzdFtpXTtpZihpc0luc3RhbmNlKGJ1ZixVaW50OEFycmF5KSlwb3MrYnVmLmxlbmd0aD5idWZmZXIubGVuZ3RoP0J1ZmZlci5mcm9tKGJ1ZikuY29weShidWZmZXIscG9zKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChidWZmZXIsYnVmLHBvcyk7ZWxzZXtpZighQnVmZmVyLmlzQnVmZmVyKGJ1ZikpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2J1Zi5jb3B5KGJ1ZmZlcixwb3MpfXBvcys9YnVmLmxlbmd0aH1yZXR1cm4gYnVmZmVyfSxCdWZmZXIuYnl0ZUxlbmd0aD1ieXRlTGVuZ3RoLEJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLEJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uIHN3YXAxNigpe3ZhciBsZW49dGhpcy5sZW5ndGg7aWYobGVuJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBpPTA7aTxsZW47aSs9Milzd2FwKHRoaXMsaSxpKzEpO3JldHVybiB0aGlzfSxCdWZmZXIucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbiBzd2FwMzIoKXt2YXIgbGVuPXRoaXMubGVuZ3RoO2lmKGxlbiU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgaT0wO2k8bGVuO2krPTQpc3dhcCh0aGlzLGksaSszKSxzd2FwKHRoaXMsaSsxLGkrMik7cmV0dXJuIHRoaXN9LEJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uIHN3YXA2NCgpe3ZhciBsZW49dGhpcy5sZW5ndGg7aWYobGVuJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBpPTA7aTxsZW47aSs9OClzd2FwKHRoaXMsaSxpKzcpLHN3YXAodGhpcyxpKzEsaSs2KSxzd2FwKHRoaXMsaSsyLGkrNSksc3dhcCh0aGlzLGkrMyxpKzQpO3JldHVybiB0aGlzfSxCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uIHRvU3RyaW5nKCl7dmFyIGxlbmd0aD10aGlzLmxlbmd0aDtyZXR1cm4gMD09PWxlbmd0aD8iIjowPT09YXJndW1lbnRzLmxlbmd0aD91dGY4U2xpY2UodGhpcywwLGxlbmd0aCk6c2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sQnVmZmVyLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nLEJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uIGVxdWFscyhiKXtpZighQnVmZmVyLmlzQnVmZmVyKGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWJ8fDA9PT1CdWZmZXIuY29tcGFyZSh0aGlzLGIpfSxCdWZmZXIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24gaW5zcGVjdCgpe3ZhciBzdHI9IiIsbWF4PWV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHN0cj10aGlzLnRvU3RyaW5nKCJoZXgiLDAsbWF4KS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPm1heCYmKHN0cis9IiAuLi4gIiksIjxCdWZmZXIgIitzdHIrIj4ifSxjdXN0b21JbnNwZWN0U3ltYm9sJiYoQnVmZmVyLnByb3RvdHlwZVtjdXN0b21JbnNwZWN0U3ltYm9sXT1CdWZmZXIucHJvdG90eXBlLmluc3BlY3QpLEJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbiBjb21wYXJlKHRhcmdldCxzdGFydCxlbmQsdGhpc1N0YXJ0LHRoaXNFbmQpe2lmKGlzSW5zdGFuY2UodGFyZ2V0LFVpbnQ4QXJyYXkpJiYodGFyZ2V0PUJ1ZmZlci5mcm9tKHRhcmdldCx0YXJnZXQub2Zmc2V0LHRhcmdldC5ieXRlTGVuZ3RoKSksIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHRhcmdldCk7aWYodm9pZCAwPT09c3RhcnQmJihzdGFydD0wKSx2b2lkIDA9PT1lbmQmJihlbmQ9dGFyZ2V0P3RhcmdldC5sZW5ndGg6MCksdm9pZCAwPT09dGhpc1N0YXJ0JiYodGhpc1N0YXJ0PTApLHZvaWQgMD09PXRoaXNFbmQmJih0aGlzRW5kPXRoaXMubGVuZ3RoKSxzdGFydDwwfHxlbmQ+dGFyZ2V0Lmxlbmd0aHx8dGhpc1N0YXJ0PDB8fHRoaXNFbmQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKHRoaXNTdGFydD49dGhpc0VuZCYmc3RhcnQ+PWVuZClyZXR1cm4gMDtpZih0aGlzU3RhcnQ+PXRoaXNFbmQpcmV0dXJuLTE7aWYoc3RhcnQ+PWVuZClyZXR1cm4gMTtpZih0aGlzPT09dGFyZ2V0KXJldHVybiAwO2Zvcih2YXIgeD0odGhpc0VuZD4+Pj0wKS0odGhpc1N0YXJ0Pj4+PTApLHk9KGVuZD4+Pj0wKS0oc3RhcnQ+Pj49MCksbGVuPU1hdGgubWluKHgseSksdGhpc0NvcHk9dGhpcy5zbGljZSh0aGlzU3RhcnQsdGhpc0VuZCksdGFyZ2V0Q29weT10YXJnZXQuc2xpY2Uoc3RhcnQsZW5kKSxpPTA7aTxsZW47KytpKWlmKHRoaXNDb3B5W2ldIT09dGFyZ2V0Q29weVtpXSl7eD10aGlzQ29weVtpXSx5PXRhcmdldENvcHlbaV07YnJlYWt9cmV0dXJuIHg8eT8tMTp5PHg/MTowfSxCdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uIGluY2x1ZGVzKHZhbCxieXRlT2Zmc2V0LGVuY29kaW5nKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih2YWwsYnl0ZU9mZnNldCxlbmNvZGluZyl9LEJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbiBpbmRleE9mKHZhbCxieXRlT2Zmc2V0LGVuY29kaW5nKXtyZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcyx2YWwsYnl0ZU9mZnNldCxlbmNvZGluZywhMCl9LEJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24gbGFzdEluZGV4T2YodmFsLGJ5dGVPZmZzZXQsZW5jb2Rpbmcpe3JldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLHZhbCxieXRlT2Zmc2V0LGVuY29kaW5nLCExKX0sQnVmZmVyLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbiB3cml0ZShzdHJpbmcsb2Zmc2V0LGxlbmd0aCxlbmNvZGluZyl7aWYodm9pZCAwPT09b2Zmc2V0KWVuY29kaW5nPSJ1dGY4IixsZW5ndGg9dGhpcy5sZW5ndGgsb2Zmc2V0PTA7ZWxzZSBpZih2b2lkIDA9PT1sZW5ndGgmJiJzdHJpbmciPT10eXBlb2Ygb2Zmc2V0KWVuY29kaW5nPW9mZnNldCxsZW5ndGg9dGhpcy5sZW5ndGgsb2Zmc2V0PTA7ZWxzZXtpZighaXNGaW5pdGUob2Zmc2V0KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7b2Zmc2V0Pj4+PTAsaXNGaW5pdGUobGVuZ3RoKT8obGVuZ3RoPj4+PTAsdm9pZCAwPT09ZW5jb2RpbmcmJihlbmNvZGluZz0idXRmOCIpKTooZW5jb2Rpbmc9bGVuZ3RoLGxlbmd0aD12b2lkIDApfXZhciByZW1haW5pbmc9dGhpcy5sZW5ndGgtb2Zmc2V0O2lmKCh2b2lkIDA9PT1sZW5ndGh8fGxlbmd0aD5yZW1haW5pbmcpJiYobGVuZ3RoPXJlbWFpbmluZyksc3RyaW5nLmxlbmd0aD4wJiYobGVuZ3RoPDB8fG9mZnNldDwwKXx8b2Zmc2V0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO2VuY29kaW5nfHwoZW5jb2Rpbmc9InV0ZjgiKTtmb3IodmFyIGxvd2VyZWRDYXNlPSExOzspc3dpdGNoKGVuY29kaW5nKXtjYXNlImhleCI6cmV0dXJuIGhleFdyaXRlKHRoaXMsc3RyaW5nLG9mZnNldCxsZW5ndGgpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHV0ZjhXcml0ZSh0aGlzLHN0cmluZyxvZmZzZXQsbGVuZ3RoKTtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBhc2NpaVdyaXRlKHRoaXMsc3RyaW5nLG9mZnNldCxsZW5ndGgpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gYmFzZTY0V3JpdGUodGhpcyxzdHJpbmcsb2Zmc2V0LGxlbmd0aCk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiB1Y3MyV3JpdGUodGhpcyxzdHJpbmcsb2Zmc2V0LGxlbmd0aCk7ZGVmYXVsdDppZihsb3dlcmVkQ2FzZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2VuY29kaW5nKTtlbmNvZGluZz0oIiIrZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCksbG93ZXJlZENhc2U9ITB9fSxCdWZmZXIucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbiB0b0pTT04oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2Z1bmN0aW9uIGFzY2lpU2xpY2UoYnVmLHN0YXJ0LGVuZCl7dmFyIHJldD0iIjtlbmQ9TWF0aC5taW4oYnVmLmxlbmd0aCxlbmQpO2Zvcih2YXIgaT1zdGFydDtpPGVuZDsrK2kpcmV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZidWZbaV0pO3JldHVybiByZXR9ZnVuY3Rpb24gbGF0aW4xU2xpY2UoYnVmLHN0YXJ0LGVuZCl7dmFyIHJldD0iIjtlbmQ9TWF0aC5taW4oYnVmLmxlbmd0aCxlbmQpO2Zvcih2YXIgaT1zdGFydDtpPGVuZDsrK2kpcmV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7cmV0dXJuIHJldH1mdW5jdGlvbiBoZXhTbGljZShidWYsc3RhcnQsZW5kKXt2YXIgbGVuPWJ1Zi5sZW5ndGg7KCFzdGFydHx8c3RhcnQ8MCkmJihzdGFydD0wKSwoIWVuZHx8ZW5kPDB8fGVuZD5sZW4pJiYoZW5kPWxlbik7Zm9yKHZhciBvdXQ9IiIsaT1zdGFydDtpPGVuZDsrK2kpb3V0Kz1oZXhTbGljZUxvb2t1cFRhYmxlW2J1ZltpXV07cmV0dXJuIG91dH1mdW5jdGlvbiB1dGYxNmxlU2xpY2UoYnVmLHN0YXJ0LGVuZCl7Zm9yKHZhciBieXRlcz1idWYuc2xpY2Uoc3RhcnQsZW5kKSxyZXM9IiIsaT0wO2k8Ynl0ZXMubGVuZ3RoLTE7aSs9MilyZXMrPVN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0rMjU2KmJ5dGVzW2krMV0pO3JldHVybiByZXN9ZnVuY3Rpb24gY2hlY2tPZmZzZXQob2Zmc2V0LGV4dCxsZW5ndGgpe2lmKG9mZnNldCUxIT0wfHxvZmZzZXQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYob2Zmc2V0K2V4dD5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBjaGVja0ludChidWYsdmFsdWUsb2Zmc2V0LGV4dCxtYXgsbWluKXtpZighQnVmZmVyLmlzQnVmZmVyKGJ1ZikpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHZhbHVlPm1heHx8dmFsdWU8bWluKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihvZmZzZXQrZXh0PmJ1Zi5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIGNoZWNrSUVFRTc1NChidWYsdmFsdWUsb2Zmc2V0LGV4dCxtYXgsbWluKXtpZihvZmZzZXQrZXh0PmJ1Zi5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG9mZnNldDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiB3cml0ZUZsb2F0KGJ1Zix2YWx1ZSxvZmZzZXQsbGl0dGxlRW5kaWFuLG5vQXNzZXJ0KXtyZXR1cm4gdmFsdWU9K3ZhbHVlLG9mZnNldD4+Pj0wLG5vQXNzZXJ0fHxjaGVja0lFRUU3NTQoYnVmLDAsb2Zmc2V0LDQpLGllZWU3NTQud3JpdGUoYnVmLHZhbHVlLG9mZnNldCxsaXR0bGVFbmRpYW4sMjMsNCksb2Zmc2V0KzR9ZnVuY3Rpb24gd3JpdGVEb3VibGUoYnVmLHZhbHVlLG9mZnNldCxsaXR0bGVFbmRpYW4sbm9Bc3NlcnQpe3JldHVybiB2YWx1ZT0rdmFsdWUsb2Zmc2V0Pj4+PTAsbm9Bc3NlcnR8fGNoZWNrSUVFRTc1NChidWYsMCxvZmZzZXQsOCksaWVlZTc1NC53cml0ZShidWYsdmFsdWUsb2Zmc2V0LGxpdHRsZUVuZGlhbiw1Miw4KSxvZmZzZXQrOH1CdWZmZXIucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uIHNsaWNlKHN0YXJ0LGVuZCl7dmFyIGxlbj10aGlzLmxlbmd0aDsoc3RhcnQ9fn5zdGFydCk8MD8oc3RhcnQrPWxlbik8MCYmKHN0YXJ0PTApOnN0YXJ0PmxlbiYmKHN0YXJ0PWxlbiksKGVuZD12b2lkIDA9PT1lbmQ/bGVuOn5+ZW5kKTwwPyhlbmQrPWxlbik8MCYmKGVuZD0wKTplbmQ+bGVuJiYoZW5kPWxlbiksZW5kPHN0YXJ0JiYoZW5kPXN0YXJ0KTt2YXIgbmV3QnVmPXRoaXMuc3ViYXJyYXkoc3RhcnQsZW5kKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKG5ld0J1ZixCdWZmZXIucHJvdG90eXBlKSxuZXdCdWZ9LEJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnRMRT1CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24gcmVhZFVJbnRMRShvZmZzZXQsYnl0ZUxlbmd0aCxub0Fzc2VydCl7b2Zmc2V0Pj4+PTAsYnl0ZUxlbmd0aD4+Pj0wLG5vQXNzZXJ0fHxjaGVja09mZnNldChvZmZzZXQsYnl0ZUxlbmd0aCx0aGlzLmxlbmd0aCk7Zm9yKHZhciB2YWw9dGhpc1tvZmZzZXRdLG11bD0xLGk9MDsrK2k8Ynl0ZUxlbmd0aCYmKG11bCo9MjU2KTspdmFsKz10aGlzW29mZnNldCtpXSptdWw7cmV0dXJuIHZhbH0sQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludEJFPUJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbiByZWFkVUludEJFKG9mZnNldCxieXRlTGVuZ3RoLG5vQXNzZXJ0KXtvZmZzZXQ+Pj49MCxieXRlTGVuZ3RoPj4+PTAsbm9Bc3NlcnR8fGNoZWNrT2Zmc2V0KG9mZnNldCxieXRlTGVuZ3RoLHRoaXMubGVuZ3RoKTtmb3IodmFyIHZhbD10aGlzW29mZnNldCstLWJ5dGVMZW5ndGhdLG11bD0xO2J5dGVMZW5ndGg+MCYmKG11bCo9MjU2KTspdmFsKz10aGlzW29mZnNldCstLWJ5dGVMZW5ndGhdKm11bDtyZXR1cm4gdmFsfSxCdWZmZXIucHJvdG90eXBlLnJlYWRVaW50OD1CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbiByZWFkVUludDgob2Zmc2V0LG5vQXNzZXJ0KXtyZXR1cm4gb2Zmc2V0Pj4+PTAsbm9Bc3NlcnR8fGNoZWNrT2Zmc2V0KG9mZnNldCwxLHRoaXMubGVuZ3RoKSx0aGlzW29mZnNldF19LEJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQxNkxFPUJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uIHJlYWRVSW50MTZMRShvZmZzZXQsbm9Bc3NlcnQpe3JldHVybiBvZmZzZXQ+Pj49MCxub0Fzc2VydHx8Y2hlY2tPZmZzZXQob2Zmc2V0LDIsdGhpcy5sZW5ndGgpLHRoaXNbb2Zmc2V0XXx0aGlzW29mZnNldCsxXTw8OH0sQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2QkU9QnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24gcmVhZFVJbnQxNkJFKG9mZnNldCxub0Fzc2VydCl7cmV0dXJuIG9mZnNldD4+Pj0wLG5vQXNzZXJ0fHxjaGVja09mZnNldChvZmZzZXQsMix0aGlzLmxlbmd0aCksdGhpc1tvZmZzZXRdPDw4fHRoaXNbb2Zmc2V0KzFdfSxCdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MzJMRT1CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbiByZWFkVUludDMyTEUob2Zmc2V0LG5vQXNzZXJ0KXtyZXR1cm4gb2Zmc2V0Pj4+PTAsbm9Bc3NlcnR8fGNoZWNrT2Zmc2V0KG9mZnNldCw0LHRoaXMubGVuZ3RoKSwodGhpc1tvZmZzZXRdfHRoaXNbb2Zmc2V0KzFdPDw4fHRoaXNbb2Zmc2V0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1tvZmZzZXQrM119LEJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkJFPUJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uIHJlYWRVSW50MzJCRShvZmZzZXQsbm9Bc3NlcnQpe3JldHVybiBvZmZzZXQ+Pj49MCxub0Fzc2VydHx8Y2hlY2tPZmZzZXQob2Zmc2V0LDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbb2Zmc2V0XSsodGhpc1tvZmZzZXQrMV08PDE2fHRoaXNbb2Zmc2V0KzJdPDw4fHRoaXNbb2Zmc2V0KzNdKX0sQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24gcmVhZEludExFKG9mZnNldCxieXRlTGVuZ3RoLG5vQXNzZXJ0KXtvZmZzZXQ+Pj49MCxieXRlTGVuZ3RoPj4+PTAsbm9Bc3NlcnR8fGNoZWNrT2Zmc2V0KG9mZnNldCxieXRlTGVuZ3RoLHRoaXMubGVuZ3RoKTtmb3IodmFyIHZhbD10aGlzW29mZnNldF0sbXVsPTEsaT0wOysraTxieXRlTGVuZ3RoJiYobXVsKj0yNTYpOyl2YWwrPXRoaXNbb2Zmc2V0K2ldKm11bDtyZXR1cm4gdmFsPj0obXVsKj0xMjgpJiYodmFsLT1NYXRoLnBvdygyLDgqYnl0ZUxlbmd0aCkpLHZhbH0sQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24gcmVhZEludEJFKG9mZnNldCxieXRlTGVuZ3RoLG5vQXNzZXJ0KXtvZmZzZXQ+Pj49MCxieXRlTGVuZ3RoPj4+PTAsbm9Bc3NlcnR8fGNoZWNrT2Zmc2V0KG9mZnNldCxieXRlTGVuZ3RoLHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9Ynl0ZUxlbmd0aCxtdWw9MSx2YWw9dGhpc1tvZmZzZXQrLS1pXTtpPjAmJihtdWwqPTI1Nik7KXZhbCs9dGhpc1tvZmZzZXQrLS1pXSptdWw7cmV0dXJuIHZhbD49KG11bCo9MTI4KSYmKHZhbC09TWF0aC5wb3coMiw4KmJ5dGVMZW5ndGgpKSx2YWx9LEJ1ZmZlci5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24gcmVhZEludDgob2Zmc2V0LG5vQXNzZXJ0KXtyZXR1cm4gb2Zmc2V0Pj4+PTAsbm9Bc3NlcnR8fGNoZWNrT2Zmc2V0KG9mZnNldCwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tvZmZzZXRdPy0xKigyNTUtdGhpc1tvZmZzZXRdKzEpOnRoaXNbb2Zmc2V0XX0sQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbiByZWFkSW50MTZMRShvZmZzZXQsbm9Bc3NlcnQpe29mZnNldD4+Pj0wLG5vQXNzZXJ0fHxjaGVja09mZnNldChvZmZzZXQsMix0aGlzLmxlbmd0aCk7dmFyIHZhbD10aGlzW29mZnNldF18dGhpc1tvZmZzZXQrMV08PDg7cmV0dXJuIDMyNzY4JnZhbD80Mjk0OTAxNzYwfHZhbDp2YWx9LEJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24gcmVhZEludDE2QkUob2Zmc2V0LG5vQXNzZXJ0KXtvZmZzZXQ+Pj49MCxub0Fzc2VydHx8Y2hlY2tPZmZzZXQob2Zmc2V0LDIsdGhpcy5sZW5ndGgpO3ZhciB2YWw9dGhpc1tvZmZzZXQrMV18dGhpc1tvZmZzZXRdPDw4O3JldHVybiAzMjc2OCZ2YWw/NDI5NDkwMTc2MHx2YWw6dmFsfSxCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uIHJlYWRJbnQzMkxFKG9mZnNldCxub0Fzc2VydCl7cmV0dXJuIG9mZnNldD4+Pj0wLG5vQXNzZXJ0fHxjaGVja09mZnNldChvZmZzZXQsNCx0aGlzLmxlbmd0aCksdGhpc1tvZmZzZXRdfHRoaXNbb2Zmc2V0KzFdPDw4fHRoaXNbb2Zmc2V0KzJdPDwxNnx0aGlzW29mZnNldCszXTw8MjR9LEJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24gcmVhZEludDMyQkUob2Zmc2V0LG5vQXNzZXJ0KXtyZXR1cm4gb2Zmc2V0Pj4+PTAsbm9Bc3NlcnR8fGNoZWNrT2Zmc2V0KG9mZnNldCw0LHRoaXMubGVuZ3RoKSx0aGlzW29mZnNldF08PDI0fHRoaXNbb2Zmc2V0KzFdPDwxNnx0aGlzW29mZnNldCsyXTw8OHx0aGlzW29mZnNldCszXX0sQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbiByZWFkRmxvYXRMRShvZmZzZXQsbm9Bc3NlcnQpe3JldHVybiBvZmZzZXQ+Pj49MCxub0Fzc2VydHx8Y2hlY2tPZmZzZXQob2Zmc2V0LDQsdGhpcy5sZW5ndGgpLGllZWU3NTQucmVhZCh0aGlzLG9mZnNldCwhMCwyMyw0KX0sQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbiByZWFkRmxvYXRCRShvZmZzZXQsbm9Bc3NlcnQpe3JldHVybiBvZmZzZXQ+Pj49MCxub0Fzc2VydHx8Y2hlY2tPZmZzZXQob2Zmc2V0LDQsdGhpcy5sZW5ndGgpLGllZWU3NTQucmVhZCh0aGlzLG9mZnNldCwhMSwyMyw0KX0sQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24gcmVhZERvdWJsZUxFKG9mZnNldCxub0Fzc2VydCl7cmV0dXJuIG9mZnNldD4+Pj0wLG5vQXNzZXJ0fHxjaGVja09mZnNldChvZmZzZXQsOCx0aGlzLmxlbmd0aCksaWVlZTc1NC5yZWFkKHRoaXMsb2Zmc2V0LCEwLDUyLDgpfSxCdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbiByZWFkRG91YmxlQkUob2Zmc2V0LG5vQXNzZXJ0KXtyZXR1cm4gb2Zmc2V0Pj4+PTAsbm9Bc3NlcnR8fGNoZWNrT2Zmc2V0KG9mZnNldCw4LHRoaXMubGVuZ3RoKSxpZWVlNzU0LnJlYWQodGhpcyxvZmZzZXQsITEsNTIsOCl9LEJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50TEU9QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbiB3cml0ZVVJbnRMRSh2YWx1ZSxvZmZzZXQsYnl0ZUxlbmd0aCxub0Fzc2VydCl7KHZhbHVlPSt2YWx1ZSxvZmZzZXQ+Pj49MCxieXRlTGVuZ3RoPj4+PTAsbm9Bc3NlcnQpfHxjaGVja0ludCh0aGlzLHZhbHVlLG9mZnNldCxieXRlTGVuZ3RoLE1hdGgucG93KDIsOCpieXRlTGVuZ3RoKS0xLDApO3ZhciBtdWw9MSxpPTA7Zm9yKHRoaXNbb2Zmc2V0XT0yNTUmdmFsdWU7KytpPGJ5dGVMZW5ndGgmJihtdWwqPTI1Nik7KXRoaXNbb2Zmc2V0K2ldPXZhbHVlL211bCYyNTU7cmV0dXJuIG9mZnNldCtieXRlTGVuZ3RofSxCdWZmZXIucHJvdG90eXBlLndyaXRlVWludEJFPUJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24gd3JpdGVVSW50QkUodmFsdWUsb2Zmc2V0LGJ5dGVMZW5ndGgsbm9Bc3NlcnQpeyh2YWx1ZT0rdmFsdWUsb2Zmc2V0Pj4+PTAsYnl0ZUxlbmd0aD4+Pj0wLG5vQXNzZXJ0KXx8Y2hlY2tJbnQodGhpcyx2YWx1ZSxvZmZzZXQsYnl0ZUxlbmd0aCxNYXRoLnBvdygyLDgqYnl0ZUxlbmd0aCktMSwwKTt2YXIgaT1ieXRlTGVuZ3RoLTEsbXVsPTE7Zm9yKHRoaXNbb2Zmc2V0K2ldPTI1NSZ2YWx1ZTstLWk+PTAmJihtdWwqPTI1Nik7KXRoaXNbb2Zmc2V0K2ldPXZhbHVlL211bCYyNTU7cmV0dXJuIG9mZnNldCtieXRlTGVuZ3RofSxCdWZmZXIucHJvdG90eXBlLndyaXRlVWludDg9QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uIHdyaXRlVUludDgodmFsdWUsb2Zmc2V0LG5vQXNzZXJ0KXtyZXR1cm4gdmFsdWU9K3ZhbHVlLG9mZnNldD4+Pj0wLG5vQXNzZXJ0fHxjaGVja0ludCh0aGlzLHZhbHVlLG9mZnNldCwxLDI1NSwwKSx0aGlzW29mZnNldF09MjU1JnZhbHVlLG9mZnNldCsxfSxCdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2TEU9QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uIHdyaXRlVUludDE2TEUodmFsdWUsb2Zmc2V0LG5vQXNzZXJ0KXtyZXR1cm4gdmFsdWU9K3ZhbHVlLG9mZnNldD4+Pj0wLG5vQXNzZXJ0fHxjaGVja0ludCh0aGlzLHZhbHVlLG9mZnNldCwyLDY1NTM1LDApLHRoaXNbb2Zmc2V0XT0yNTUmdmFsdWUsdGhpc1tvZmZzZXQrMV09dmFsdWU+Pj44LG9mZnNldCsyfSxCdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2QkU9QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uIHdyaXRlVUludDE2QkUodmFsdWUsb2Zmc2V0LG5vQXNzZXJ0KXtyZXR1cm4gdmFsdWU9K3ZhbHVlLG9mZnNldD4+Pj0wLG5vQXNzZXJ0fHxjaGVja0ludCh0aGlzLHZhbHVlLG9mZnNldCwyLDY1NTM1LDApLHRoaXNbb2Zmc2V0XT12YWx1ZT4+PjgsdGhpc1tvZmZzZXQrMV09MjU1JnZhbHVlLG9mZnNldCsyfSxCdWZmZXIucHJvdG90eXBlLndyaXRlVWludDMyTEU9QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uIHdyaXRlVUludDMyTEUodmFsdWUsb2Zmc2V0LG5vQXNzZXJ0KXtyZXR1cm4gdmFsdWU9K3ZhbHVlLG9mZnNldD4+Pj0wLG5vQXNzZXJ0fHxjaGVja0ludCh0aGlzLHZhbHVlLG9mZnNldCw0LDQyOTQ5NjcyOTUsMCksdGhpc1tvZmZzZXQrM109dmFsdWU+Pj4yNCx0aGlzW29mZnNldCsyXT12YWx1ZT4+PjE2LHRoaXNbb2Zmc2V0KzFdPXZhbHVlPj4+OCx0aGlzW29mZnNldF09MjU1JnZhbHVlLG9mZnNldCs0fSxCdWZmZXIucHJvdG90eXBlLndyaXRlVWludDMyQkU9QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uIHdyaXRlVUludDMyQkUodmFsdWUsb2Zmc2V0LG5vQXNzZXJ0KXtyZXR1cm4gdmFsdWU9K3ZhbHVlLG9mZnNldD4+Pj0wLG5vQXNzZXJ0fHxjaGVja0ludCh0aGlzLHZhbHVlLG9mZnNldCw0LDQyOTQ5NjcyOTUsMCksdGhpc1tvZmZzZXRdPXZhbHVlPj4+MjQsdGhpc1tvZmZzZXQrMV09dmFsdWU+Pj4xNix0aGlzW29mZnNldCsyXT12YWx1ZT4+PjgsdGhpc1tvZmZzZXQrM109MjU1JnZhbHVlLG9mZnNldCs0fSxCdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24gd3JpdGVJbnRMRSh2YWx1ZSxvZmZzZXQsYnl0ZUxlbmd0aCxub0Fzc2VydCl7aWYodmFsdWU9K3ZhbHVlLG9mZnNldD4+Pj0wLCFub0Fzc2VydCl7dmFyIGxpbWl0PU1hdGgucG93KDIsOCpieXRlTGVuZ3RoLTEpO2NoZWNrSW50KHRoaXMsdmFsdWUsb2Zmc2V0LGJ5dGVMZW5ndGgsbGltaXQtMSwtbGltaXQpfXZhciBpPTAsbXVsPTEsc3ViPTA7Zm9yKHRoaXNbb2Zmc2V0XT0yNTUmdmFsdWU7KytpPGJ5dGVMZW5ndGgmJihtdWwqPTI1Nik7KXZhbHVlPDAmJjA9PT1zdWImJjAhPT10aGlzW29mZnNldCtpLTFdJiYoc3ViPTEpLHRoaXNbb2Zmc2V0K2ldPSh2YWx1ZS9tdWx8MCktc3ViJjI1NTtyZXR1cm4gb2Zmc2V0K2J5dGVMZW5ndGh9LEJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbiB3cml0ZUludEJFKHZhbHVlLG9mZnNldCxieXRlTGVuZ3RoLG5vQXNzZXJ0KXtpZih2YWx1ZT0rdmFsdWUsb2Zmc2V0Pj4+PTAsIW5vQXNzZXJ0KXt2YXIgbGltaXQ9TWF0aC5wb3coMiw4KmJ5dGVMZW5ndGgtMSk7Y2hlY2tJbnQodGhpcyx2YWx1ZSxvZmZzZXQsYnl0ZUxlbmd0aCxsaW1pdC0xLC1saW1pdCl9dmFyIGk9Ynl0ZUxlbmd0aC0xLG11bD0xLHN1Yj0wO2Zvcih0aGlzW29mZnNldCtpXT0yNTUmdmFsdWU7LS1pPj0wJiYobXVsKj0yNTYpOyl2YWx1ZTwwJiYwPT09c3ViJiYwIT09dGhpc1tvZmZzZXQraSsxXSYmKHN1Yj0xKSx0aGlzW29mZnNldCtpXT0odmFsdWUvbXVsfDApLXN1YiYyNTU7cmV0dXJuIG9mZnNldCtieXRlTGVuZ3RofSxCdWZmZXIucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbiB3cml0ZUludDgodmFsdWUsb2Zmc2V0LG5vQXNzZXJ0KXtyZXR1cm4gdmFsdWU9K3ZhbHVlLG9mZnNldD4+Pj0wLG5vQXNzZXJ0fHxjaGVja0ludCh0aGlzLHZhbHVlLG9mZnNldCwxLDEyNywtMTI4KSx2YWx1ZTwwJiYodmFsdWU9MjU1K3ZhbHVlKzEpLHRoaXNbb2Zmc2V0XT0yNTUmdmFsdWUsb2Zmc2V0KzF9LEJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uIHdyaXRlSW50MTZMRSh2YWx1ZSxvZmZzZXQsbm9Bc3NlcnQpe3JldHVybiB2YWx1ZT0rdmFsdWUsb2Zmc2V0Pj4+PTAsbm9Bc3NlcnR8fGNoZWNrSW50KHRoaXMsdmFsdWUsb2Zmc2V0LDIsMzI3NjcsLTMyNzY4KSx0aGlzW29mZnNldF09MjU1JnZhbHVlLHRoaXNbb2Zmc2V0KzFdPXZhbHVlPj4+OCxvZmZzZXQrMn0sQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24gd3JpdGVJbnQxNkJFKHZhbHVlLG9mZnNldCxub0Fzc2VydCl7cmV0dXJuIHZhbHVlPSt2YWx1ZSxvZmZzZXQ+Pj49MCxub0Fzc2VydHx8Y2hlY2tJbnQodGhpcyx2YWx1ZSxvZmZzZXQsMiwzMjc2NywtMzI3NjgpLHRoaXNbb2Zmc2V0XT12YWx1ZT4+PjgsdGhpc1tvZmZzZXQrMV09MjU1JnZhbHVlLG9mZnNldCsyfSxCdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbiB3cml0ZUludDMyTEUodmFsdWUsb2Zmc2V0LG5vQXNzZXJ0KXtyZXR1cm4gdmFsdWU9K3ZhbHVlLG9mZnNldD4+Pj0wLG5vQXNzZXJ0fHxjaGVja0ludCh0aGlzLHZhbHVlLG9mZnNldCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbb2Zmc2V0XT0yNTUmdmFsdWUsdGhpc1tvZmZzZXQrMV09dmFsdWU+Pj44LHRoaXNbb2Zmc2V0KzJdPXZhbHVlPj4+MTYsdGhpc1tvZmZzZXQrM109dmFsdWU+Pj4yNCxvZmZzZXQrNH0sQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24gd3JpdGVJbnQzMkJFKHZhbHVlLG9mZnNldCxub0Fzc2VydCl7cmV0dXJuIHZhbHVlPSt2YWx1ZSxvZmZzZXQ+Pj49MCxub0Fzc2VydHx8Y2hlY2tJbnQodGhpcyx2YWx1ZSxvZmZzZXQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx2YWx1ZTwwJiYodmFsdWU9NDI5NDk2NzI5NSt2YWx1ZSsxKSx0aGlzW29mZnNldF09dmFsdWU+Pj4yNCx0aGlzW29mZnNldCsxXT12YWx1ZT4+PjE2LHRoaXNbb2Zmc2V0KzJdPXZhbHVlPj4+OCx0aGlzW29mZnNldCszXT0yNTUmdmFsdWUsb2Zmc2V0KzR9LEJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uIHdyaXRlRmxvYXRMRSh2YWx1ZSxvZmZzZXQsbm9Bc3NlcnQpe3JldHVybiB3cml0ZUZsb2F0KHRoaXMsdmFsdWUsb2Zmc2V0LCEwLG5vQXNzZXJ0KX0sQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24gd3JpdGVGbG9hdEJFKHZhbHVlLG9mZnNldCxub0Fzc2VydCl7cmV0dXJuIHdyaXRlRmxvYXQodGhpcyx2YWx1ZSxvZmZzZXQsITEsbm9Bc3NlcnQpfSxCdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24gd3JpdGVEb3VibGVMRSh2YWx1ZSxvZmZzZXQsbm9Bc3NlcnQpe3JldHVybiB3cml0ZURvdWJsZSh0aGlzLHZhbHVlLG9mZnNldCwhMCxub0Fzc2VydCl9LEJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbiB3cml0ZURvdWJsZUJFKHZhbHVlLG9mZnNldCxub0Fzc2VydCl7cmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsdmFsdWUsb2Zmc2V0LCExLG5vQXNzZXJ0KX0sQnVmZmVyLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uIGNvcHkodGFyZ2V0LHRhcmdldFN0YXJ0LHN0YXJ0LGVuZCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKHN0YXJ0fHwoc3RhcnQ9MCksZW5kfHwwPT09ZW5kfHwoZW5kPXRoaXMubGVuZ3RoKSx0YXJnZXRTdGFydD49dGFyZ2V0Lmxlbmd0aCYmKHRhcmdldFN0YXJ0PXRhcmdldC5sZW5ndGgpLHRhcmdldFN0YXJ0fHwodGFyZ2V0U3RhcnQ9MCksZW5kPjAmJmVuZDxzdGFydCYmKGVuZD1zdGFydCksZW5kPT09c3RhcnQpcmV0dXJuIDA7aWYoMD09PXRhcmdldC5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0YXJnZXRTdGFydDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYoc3RhcnQ8MHx8c3RhcnQ+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihlbmQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtlbmQ+dGhpcy5sZW5ndGgmJihlbmQ9dGhpcy5sZW5ndGgpLHRhcmdldC5sZW5ndGgtdGFyZ2V0U3RhcnQ8ZW5kLXN0YXJ0JiYoZW5kPXRhcmdldC5sZW5ndGgtdGFyZ2V0U3RhcnQrc3RhcnQpO3ZhciBsZW49ZW5kLXN0YXJ0O3JldHVybiB0aGlzPT09dGFyZ2V0JiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj90aGlzLmNvcHlXaXRoaW4odGFyZ2V0U3RhcnQsc3RhcnQsZW5kKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0YXJnZXQsdGhpcy5zdWJhcnJheShzdGFydCxlbmQpLHRhcmdldFN0YXJ0KSxsZW59LEJ1ZmZlci5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbiBmaWxsKHZhbCxzdGFydCxlbmQsZW5jb2Rpbmcpe2lmKCJzdHJpbmciPT10eXBlb2YgdmFsKXtpZigic3RyaW5nIj09dHlwZW9mIHN0YXJ0PyhlbmNvZGluZz1zdGFydCxzdGFydD0wLGVuZD10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiBlbmQmJihlbmNvZGluZz1lbmQsZW5kPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1lbmNvZGluZyYmInN0cmluZyIhPXR5cGVvZiBlbmNvZGluZyl0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBlbmNvZGluZyYmIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2VuY29kaW5nKTtpZigxPT09dmFsLmxlbmd0aCl7dmFyIGNvZGU9dmFsLmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PWVuY29kaW5nJiZjb2RlPDEyOHx8ImxhdGluMSI9PT1lbmNvZGluZykmJih2YWw9Y29kZSl9fWVsc2UibnVtYmVyIj09dHlwZW9mIHZhbD92YWwmPTI1NToiYm9vbGVhbiI9PXR5cGVvZiB2YWwmJih2YWw9TnVtYmVyKHZhbCkpO2lmKHN0YXJ0PDB8fHRoaXMubGVuZ3RoPHN0YXJ0fHx0aGlzLmxlbmd0aDxlbmQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKGVuZDw9c3RhcnQpcmV0dXJuIHRoaXM7dmFyIGk7aWYoc3RhcnQ+Pj49MCxlbmQ9dm9pZCAwPT09ZW5kP3RoaXMubGVuZ3RoOmVuZD4+PjAsdmFsfHwodmFsPTApLCJudW1iZXIiPT10eXBlb2YgdmFsKWZvcihpPXN0YXJ0O2k8ZW5kOysraSl0aGlzW2ldPXZhbDtlbHNle3ZhciBieXRlcz1CdWZmZXIuaXNCdWZmZXIodmFsKT92YWw6QnVmZmVyLmZyb20odmFsLGVuY29kaW5nKSxsZW49Ynl0ZXMubGVuZ3RoO2lmKDA9PT1sZW4pdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK3ZhbCsnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9yKGk9MDtpPGVuZC1zdGFydDsrK2kpdGhpc1tpK3N0YXJ0XT1ieXRlc1tpJWxlbl19cmV0dXJuIHRoaXN9O3ZhciBJTlZBTElEX0JBU0U2NF9SRT0vW14rLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIHV0ZjhUb0J5dGVzKHN0cmluZyx1bml0cyl7dmFyIGNvZGVQb2ludDt1bml0cz11bml0c3x8MS8wO2Zvcih2YXIgbGVuZ3RoPXN0cmluZy5sZW5ndGgsbGVhZFN1cnJvZ2F0ZT1udWxsLGJ5dGVzPVtdLGk9MDtpPGxlbmd0aDsrK2kpe2lmKChjb2RlUG9pbnQ9c3RyaW5nLmNoYXJDb2RlQXQoaSkpPjU1Mjk1JiZjb2RlUG9pbnQ8NTczNDQpe2lmKCFsZWFkU3Vycm9nYXRlKXtpZihjb2RlUG9pbnQ+NTYzMTkpeyh1bml0cy09Myk+LTEmJmJ5dGVzLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKGkrMT09PWxlbmd0aCl7KHVuaXRzLT0zKT4tMSYmYnl0ZXMucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9bGVhZFN1cnJvZ2F0ZT1jb2RlUG9pbnQ7Y29udGludWV9aWYoY29kZVBvaW50PDU2MzIwKXsodW5pdHMtPTMpPi0xJiZieXRlcy5wdXNoKDIzOSwxOTEsMTg5KSxsZWFkU3Vycm9nYXRlPWNvZGVQb2ludDtjb250aW51ZX1jb2RlUG9pbnQ9NjU1MzYrKGxlYWRTdXJyb2dhdGUtNTUyOTY8PDEwfGNvZGVQb2ludC01NjMyMCl9ZWxzZSBsZWFkU3Vycm9nYXRlJiYodW5pdHMtPTMpPi0xJiZieXRlcy5wdXNoKDIzOSwxOTEsMTg5KTtpZihsZWFkU3Vycm9nYXRlPW51bGwsY29kZVBvaW50PDEyOCl7aWYoKHVuaXRzLT0xKTwwKWJyZWFrO2J5dGVzLnB1c2goY29kZVBvaW50KX1lbHNlIGlmKGNvZGVQb2ludDwyMDQ4KXtpZigodW5pdHMtPTIpPDApYnJlYWs7Ynl0ZXMucHVzaChjb2RlUG9pbnQ+PjZ8MTkyLDYzJmNvZGVQb2ludHwxMjgpfWVsc2UgaWYoY29kZVBvaW50PDY1NTM2KXtpZigodW5pdHMtPTMpPDApYnJlYWs7Ynl0ZXMucHVzaChjb2RlUG9pbnQ+PjEyfDIyNCxjb2RlUG9pbnQ+PjYmNjN8MTI4LDYzJmNvZGVQb2ludHwxMjgpfWVsc2V7aWYoIShjb2RlUG9pbnQ8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodW5pdHMtPTQpPDApYnJlYWs7Ynl0ZXMucHVzaChjb2RlUG9pbnQ+PjE4fDI0MCxjb2RlUG9pbnQ+PjEyJjYzfDEyOCxjb2RlUG9pbnQ+PjYmNjN8MTI4LDYzJmNvZGVQb2ludHwxMjgpfX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyhzdHIpe3JldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoZnVuY3Rpb24gYmFzZTY0Y2xlYW4oc3RyKXtpZigoc3RyPShzdHI9c3RyLnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtzdHIubGVuZ3RoJTQhPTA7KXN0cis9Ij0iO3JldHVybiBzdHJ9KHN0cikpfWZ1bmN0aW9uIGJsaXRCdWZmZXIoc3JjLGRzdCxvZmZzZXQsbGVuZ3RoKXtmb3IodmFyIGk9MDtpPGxlbmd0aCYmIShpK29mZnNldD49ZHN0Lmxlbmd0aHx8aT49c3JjLmxlbmd0aCk7KytpKWRzdFtpK29mZnNldF09c3JjW2ldO3JldHVybiBpfWZ1bmN0aW9uIGlzSW5zdGFuY2Uob2JqLHR5cGUpe3JldHVybiBvYmogaW5zdGFuY2VvZiB0eXBlfHxudWxsIT1vYmomJm51bGwhPW9iai5jb25zdHJ1Y3RvciYmbnVsbCE9b2JqLmNvbnN0cnVjdG9yLm5hbWUmJm9iai5jb25zdHJ1Y3Rvci5uYW1lPT09dHlwZS5uYW1lfWZ1bmN0aW9uIG51bWJlcklzTmFOKG9iail7cmV0dXJuIG9iaiE9b2JqfXZhciBoZXhTbGljZUxvb2t1cFRhYmxlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0YWJsZT1uZXcgQXJyYXkoMjU2KSxpPTA7aTwxNjsrK2kpZm9yKHZhciBpMTY9MTYqaSxqPTA7ajwxNjsrK2opdGFibGVbaTE2K2pdPSIwMTIzNDU2Nzg5YWJjZGVmIltpXSsiMDEyMzQ1Njc4OWFiY2RlZiJbal07cmV0dXJuIHRhYmxlfSgpfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2J1aWx0aW4tc3RhdHVzLWNvZGVzL2Jyb3dzZXIuanMiKG1vZHVsZSl7bW9kdWxlLmV4cG9ydHM9ezEwMDoiQ29udGludWUiLDEwMToiU3dpdGNoaW5nIFByb3RvY29scyIsMTAyOiJQcm9jZXNzaW5nIiwyMDA6Ik9LIiwyMDE6IkNyZWF0ZWQiLDIwMjoiQWNjZXB0ZWQiLDIwMzoiTm9uLUF1dGhvcml0YXRpdmUgSW5mb3JtYXRpb24iLDIwNDoiTm8gQ29udGVudCIsMjA1OiJSZXNldCBDb250ZW50IiwyMDY6IlBhcnRpYWwgQ29udGVudCIsMjA3OiJNdWx0aS1TdGF0dXMiLDIwODoiQWxyZWFkeSBSZXBvcnRlZCIsMjI2OiJJTSBVc2VkIiwzMDA6Ik11bHRpcGxlIENob2ljZXMiLDMwMToiTW92ZWQgUGVybWFuZW50bHkiLDMwMjoiRm91bmQiLDMwMzoiU2VlIE90aGVyIiwzMDQ6Ik5vdCBNb2RpZmllZCIsMzA1OiJVc2UgUHJveHkiLDMwNzoiVGVtcG9yYXJ5IFJlZGlyZWN0IiwzMDg6IlBlcm1hbmVudCBSZWRpcmVjdCIsNDAwOiJCYWQgUmVxdWVzdCIsNDAxOiJVbmF1dGhvcml6ZWQiLDQwMjoiUGF5bWVudCBSZXF1aXJlZCIsNDAzOiJGb3JiaWRkZW4iLDQwNDoiTm90IEZvdW5kIiw0MDU6Ik1ldGhvZCBOb3QgQWxsb3dlZCIsNDA2OiJOb3QgQWNjZXB0YWJsZSIsNDA3OiJQcm94eSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCIsNDA4OiJSZXF1ZXN0IFRpbWVvdXQiLDQwOToiQ29uZmxpY3QiLDQxMDoiR29uZSIsNDExOiJMZW5ndGggUmVxdWlyZWQiLDQxMjoiUHJlY29uZGl0aW9uIEZhaWxlZCIsNDEzOiJQYXlsb2FkIFRvbyBMYXJnZSIsNDE0OiJVUkkgVG9vIExvbmciLDQxNToiVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZSIsNDE2OiJSYW5nZSBOb3QgU2F0aXNmaWFibGUiLDQxNzoiRXhwZWN0YXRpb24gRmFpbGVkIiw0MTg6IkknbSBhIHRlYXBvdCIsNDIxOiJNaXNkaXJlY3RlZCBSZXF1ZXN0Iiw0MjI6IlVucHJvY2Vzc2FibGUgRW50aXR5Iiw0MjM6IkxvY2tlZCIsNDI0OiJGYWlsZWQgRGVwZW5kZW5jeSIsNDI1OiJVbm9yZGVyZWQgQ29sbGVjdGlvbiIsNDI2OiJVcGdyYWRlIFJlcXVpcmVkIiw0Mjg6IlByZWNvbmRpdGlvbiBSZXF1aXJlZCIsNDI5OiJUb28gTWFueSBSZXF1ZXN0cyIsNDMxOiJSZXF1ZXN0IEhlYWRlciBGaWVsZHMgVG9vIExhcmdlIiw0NTE6IlVuYXZhaWxhYmxlIEZvciBMZWdhbCBSZWFzb25zIiw1MDA6IkludGVybmFsIFNlcnZlciBFcnJvciIsNTAxOiJOb3QgSW1wbGVtZW50ZWQiLDUwMjoiQmFkIEdhdGV3YXkiLDUwMzoiU2VydmljZSBVbmF2YWlsYWJsZSIsNTA0OiJHYXRld2F5IFRpbWVvdXQiLDUwNToiSFRUUCBWZXJzaW9uIE5vdCBTdXBwb3J0ZWQiLDUwNjoiVmFyaWFudCBBbHNvIE5lZ290aWF0ZXMiLDUwNzoiSW5zdWZmaWNpZW50IFN0b3JhZ2UiLDUwODoiTG9vcCBEZXRlY3RlZCIsNTA5OiJCYW5kd2lkdGggTGltaXQgRXhjZWVkZWQiLDUxMDoiTm90IEV4dGVuZGVkIiw1MTE6Ik5ldHdvcmsgQXV0aGVudGljYXRpb24gUmVxdWlyZWQifX0sIi4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQtYXBwbHktaGVscGVycy9hY3R1YWxBcHBseS5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGJpbmQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanMiKSwkYXBwbHk9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC1hcHBseS1oZWxwZXJzL2Z1bmN0aW9uQXBwbHkuanMiKSwkY2FsbD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvZnVuY3Rpb25DYWxsLmpzIiksJHJlZmxlY3RBcHBseT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvcmVmbGVjdEFwcGx5LmpzIik7bW9kdWxlLmV4cG9ydHM9JHJlZmxlY3RBcHBseXx8YmluZC5jYWxsKCRjYWxsLCRhcHBseSl9LCIuLi8uLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvYXBwbHlCaW5kLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgYmluZD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbmRleC5qcyIpLCRhcHBseT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvZnVuY3Rpb25BcHBseS5qcyIpLGFjdHVhbEFwcGx5PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQtYXBwbHktaGVscGVycy9hY3R1YWxBcHBseS5qcyIpO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGFwcGx5QmluZCgpe3JldHVybiBhY3R1YWxBcHBseShiaW5kLCRhcHBseSxhcmd1bWVudHMpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQtYXBwbHktaGVscGVycy9mdW5jdGlvbkFwcGx5LmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHl9LCIuLi8uLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvZnVuY3Rpb25DYWxsLmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbH0sIi4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQtYXBwbHktaGVscGVycy9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGJpbmQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanMiKSwkVHlwZUVycm9yPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvdHlwZS5qcyIpLCRjYWxsPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQtYXBwbHktaGVscGVycy9mdW5jdGlvbkNhbGwuanMiKSwkYWN0dWFsQXBwbHk9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC1hcHBseS1oZWxwZXJzL2FjdHVhbEFwcGx5LmpzIik7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gY2FsbEJpbmRCYXNpYyhhcmdzKXtpZihhcmdzLmxlbmd0aDwxfHwiZnVuY3Rpb24iIT10eXBlb2YgYXJnc1swXSl0aHJvdyBuZXcgJFR5cGVFcnJvcigiYSBmdW5jdGlvbiBpcyByZXF1aXJlZCIpO3JldHVybiAkYWN0dWFsQXBwbHkoYmluZCwkY2FsbCxhcmdzKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvcmVmbGVjdEFwcGx5LmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QmJlJlZmxlY3QuYXBwbHl9LCIuLi8uLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2NhbGxCb3VuZC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIEdldEludHJpbnNpYz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcyIpLGNhbGxCaW5kPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvaW5kZXguanMiKSwkaW5kZXhPZj1jYWxsQmluZChHZXRJbnRyaW5zaWMoIlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiIpKTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBjYWxsQm91bmRJbnRyaW5zaWMobmFtZSxhbGxvd01pc3Npbmcpe3ZhciBpbnRyaW5zaWM9R2V0SW50cmluc2ljKG5hbWUsISFhbGxvd01pc3NpbmcpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpbnRyaW5zaWMmJiRpbmRleE9mKG5hbWUsIi5wcm90b3R5cGUuIik+LTE/Y2FsbEJpbmQoaW50cmluc2ljKTppbnRyaW5zaWN9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHNldEZ1bmN0aW9uTGVuZ3RoPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zZXQtZnVuY3Rpb24tbGVuZ3RoL2luZGV4LmpzIiksJGRlZmluZVByb3BlcnR5PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lcy1kZWZpbmUtcHJvcGVydHkvaW5kZXguanMiKSxjYWxsQmluZEJhc2ljPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQtYXBwbHktaGVscGVycy9pbmRleC5qcyIpLGFwcGx5QmluZD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvYXBwbHlCaW5kLmpzIik7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbil7dmFyIGZ1bmM9Y2FsbEJpbmRCYXNpYyhhcmd1bWVudHMpLGFkanVzdGVkTGVuZ3RoPTErb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGgtKGFyZ3VtZW50cy5sZW5ndGgtMSk7cmV0dXJuIHNldEZ1bmN0aW9uTGVuZ3RoKGZ1bmMsYWRqdXN0ZWRMZW5ndGg+MD9hZGp1c3RlZExlbmd0aDowLCEwKX0sJGRlZmluZVByb3BlcnR5PyRkZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywiYXBwbHkiLHt2YWx1ZTphcHBseUJpbmR9KTptb2R1bGUuZXhwb3J0cy5hcHBseT1hcHBseUJpbmR9LCIuLi8uLi9ub2RlX21vZHVsZXMvY2FsbC1ib3VuZC9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIEdldEludHJpbnNpYz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcyIpLGNhbGxCaW5kQmFzaWM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC1hcHBseS1oZWxwZXJzL2luZGV4LmpzIiksJGluZGV4T2Y9Y2FsbEJpbmRCYXNpYyhbR2V0SW50cmluc2ljKCIlU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJSIpXSk7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gY2FsbEJvdW5kSW50cmluc2ljKG5hbWUsYWxsb3dNaXNzaW5nKXt2YXIgaW50cmluc2ljPUdldEludHJpbnNpYyhuYW1lLCEhYWxsb3dNaXNzaW5nKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaW50cmluc2ljJiYkaW5kZXhPZihuYW1lLCIucHJvdG90eXBlLiIpPi0xP2NhbGxCaW5kQmFzaWMoW2ludHJpbnNpY10pOmludHJpbnNpY319LCIuLi8uLi9ub2RlX21vZHVsZXMvY2lwaGVyLWJhc2UvaW5kZXguanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLFRyYW5zZm9ybT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvaW5kZXguanMiKS5UcmFuc2Zvcm0sU3RyaW5nRGVjb2Rlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyaW5nX2RlY29kZXIvbGliL3N0cmluZ19kZWNvZGVyLmpzIikuU3RyaW5nRGVjb2Rlcixpbmhlcml0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpLHRvQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy90by1idWZmZXIvaW5kZXguanMiKTtmdW5jdGlvbiBDaXBoZXJCYXNlKGhhc2hNb2RlKXtUcmFuc2Zvcm0uY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2YgaGFzaE1vZGUsdGhpcy5oYXNoTW9kZT90aGlzW2hhc2hNb2RlXT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9maW5hbCYmKHRoaXMuX19maW5hbD10aGlzLl9maW5hbCx0aGlzLl9maW5hbD1udWxsKSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH1pbmhlcml0cyhDaXBoZXJCYXNlLFRyYW5zZm9ybSksQ2lwaGVyQmFzZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGRhdGEsaW5wdXRFbmMsb3V0cHV0RW5jKXt2YXIgYnVmZmVyRGF0YT10b0J1ZmZlcihkYXRhLGlucHV0RW5jKSxvdXREYXRhPXRoaXMuX3VwZGF0ZShidWZmZXJEYXRhKTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihvdXRwdXRFbmMmJihvdXREYXRhPXRoaXMuX3RvU3RyaW5nKG91dERhdGEsb3V0cHV0RW5jKSksb3V0RGF0YSl9LENpcGhlckJhc2UucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxDaXBoZXJCYXNlLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LENpcGhlckJhc2UucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sQ2lwaGVyQmFzZS5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxDaXBoZXJCYXNlLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGRhdGEsXyxuZXh0KXt2YXIgZXJyO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZShkYXRhKTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKGRhdGEpKX1jYXRjaChlKXtlcnI9ZX1maW5hbGx5e25leHQoZXJyKX19LENpcGhlckJhc2UucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihkb25lKXt2YXIgZXJyO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKGUpe2Vycj1lfWRvbmUoZXJyKX0sQ2lwaGVyQmFzZS5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24ob3V0cHV0RW5jKXt2YXIgb3V0RGF0YT10aGlzLl9fZmluYWwoKXx8QnVmZmVyLmFsbG9jKDApO3JldHVybiBvdXRwdXRFbmMmJihvdXREYXRhPXRoaXMuX3RvU3RyaW5nKG91dERhdGEsb3V0cHV0RW5jLCEwKSksb3V0RGF0YX0sQ2lwaGVyQmFzZS5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHZhbHVlLGVuYyxmaW4pe2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBTdHJpbmdEZWNvZGVyKGVuYyksdGhpcy5fZW5jb2Rpbmc9ZW5jKSx0aGlzLl9lbmNvZGluZyE9PWVuYyl0aHJvdyBuZXcgRXJyb3IoImNhbuKAmXQgc3dpdGNoIGVuY29kaW5ncyIpO3ZhciBvdXQ9dGhpcy5fZGVjb2Rlci53cml0ZSh2YWx1ZSk7cmV0dXJuIGZpbiYmKG91dCs9dGhpcy5fZGVjb2Rlci5lbmQoKSksb3V0fSxtb2R1bGUuZXhwb3J0cz1DaXBoZXJCYXNlfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbnNvbGUtYnJvd3NlcmlmeS9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgdXRpbD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvdXRpbC91dGlsLmpzIiksYXNzZXJ0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9hc3NlcnQvYnVpbGQvYXNzZXJ0LmpzIik7ZnVuY3Rpb24gbm93KCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9dmFyIGNvbnNvbGUsc2xpY2U9QXJyYXkucHJvdG90eXBlLnNsaWNlLHRpbWVzPXt9O2NvbnNvbGU9dm9pZCAwIT09X193ZWJwYWNrX3JlcXVpcmVfXy5nJiZfX3dlYnBhY2tfcmVxdWlyZV9fLmcuY29uc29sZT9fX3dlYnBhY2tfcmVxdWlyZV9fLmcuY29uc29sZToidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmNvbnNvbGU/d2luZG93LmNvbnNvbGU6e307Zm9yKHZhciBmdW5jdGlvbnM9W1tmdW5jdGlvbiBsb2coKXt9LCJsb2ciXSxbZnVuY3Rpb24gaW5mbygpe2NvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsYXJndW1lbnRzKX0sImluZm8iXSxbZnVuY3Rpb24gd2Fybigpe2NvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsYXJndW1lbnRzKX0sIndhcm4iXSxbZnVuY3Rpb24gZXJyb3IoKXtjb25zb2xlLndhcm4uYXBwbHkoY29uc29sZSxhcmd1bWVudHMpfSwiZXJyb3IiXSxbZnVuY3Rpb24gdGltZShsYWJlbCl7dGltZXNbbGFiZWxdPW5vdygpfSwidGltZSJdLFtmdW5jdGlvbiB0aW1lRW5kKGxhYmVsKXt2YXIgdGltZT10aW1lc1tsYWJlbF07aWYoIXRpbWUpdGhyb3cgbmV3IEVycm9yKCJObyBzdWNoIGxhYmVsOiAiK2xhYmVsKTtkZWxldGUgdGltZXNbbGFiZWxdO3ZhciBkdXJhdGlvbj1ub3coKS10aW1lO2NvbnNvbGUubG9nKGxhYmVsKyI6ICIrZHVyYXRpb24rIm1zIil9LCJ0aW1lRW5kIl0sW2Z1bmN0aW9uIHRyYWNlKCl7dmFyIGVycj1uZXcgRXJyb3I7ZXJyLm5hbWU9IlRyYWNlIixlcnIubWVzc2FnZT11dGlsLmZvcm1hdC5hcHBseShudWxsLGFyZ3VtZW50cyksY29uc29sZS5lcnJvcihlcnIuc3RhY2spfSwidHJhY2UiXSxbZnVuY3Rpb24gZGlyKG9iamVjdCl7Y29uc29sZS5sb2codXRpbC5pbnNwZWN0KG9iamVjdCkrIlxuIil9LCJkaXIiXSxbZnVuY3Rpb24gY29uc29sZUFzc2VydChleHByZXNzaW9uKXtpZighZXhwcmVzc2lvbil7dmFyIGFycj1zbGljZS5jYWxsKGFyZ3VtZW50cywxKTthc3NlcnQub2soITEsdXRpbC5mb3JtYXQuYXBwbHkobnVsbCxhcnIpKX19LCJhc3NlcnQiXV0saT0wO2k8ZnVuY3Rpb25zLmxlbmd0aDtpKyspe3ZhciB0dXBsZT1mdW5jdGlvbnNbaV0sZj10dXBsZVswXSxuYW1lPXR1cGxlWzFdO2NvbnNvbGVbbmFtZV18fChjb25zb2xlW25hbWVdPWYpfW1vZHVsZS5leHBvcnRzPWNvbnNvbGV9LCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS11dGlsLWlzL2xpYi91dGlsLmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe2Z1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyl9ZXhwb3J0cy5pc0FycmF5PWZ1bmN0aW9uIGlzQXJyYXkoYXJnKXtyZXR1cm4gQXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5KGFyZyk6IltvYmplY3QgQXJyYXldIj09PW9iamVjdFRvU3RyaW5nKGFyZyl9LGV4cG9ydHMuaXNCb29sZWFuPWZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGFyZ30sZXhwb3J0cy5pc051bGw9ZnVuY3Rpb24gaXNOdWxsKGFyZyl7cmV0dXJuIG51bGw9PT1hcmd9LGV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKXtyZXR1cm4gbnVsbD09YXJnfSxleHBvcnRzLmlzTnVtYmVyPWZ1bmN0aW9uIGlzTnVtYmVyKGFyZyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBhcmd9LGV4cG9ydHMuaXNTdHJpbmc9ZnVuY3Rpb24gaXNTdHJpbmcoYXJnKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGFyZ30sZXhwb3J0cy5pc1N5bWJvbD1mdW5jdGlvbiBpc1N5bWJvbChhcmcpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgYXJnfSxleHBvcnRzLmlzVW5kZWZpbmVkPWZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZyl7cmV0dXJuIHZvaWQgMD09PWFyZ30sZXhwb3J0cy5pc1JlZ0V4cD1mdW5jdGlvbiBpc1JlZ0V4cChyZSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1vYmplY3RUb1N0cmluZyhyZSl9LGV4cG9ydHMuaXNPYmplY3Q9ZnVuY3Rpb24gaXNPYmplY3QoYXJnKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGFyZyYmbnVsbCE9PWFyZ30sZXhwb3J0cy5pc0RhdGU9ZnVuY3Rpb24gaXNEYXRlKGQpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PW9iamVjdFRvU3RyaW5nKGQpfSxleHBvcnRzLmlzRXJyb3I9ZnVuY3Rpb24gaXNFcnJvcihlKXtyZXR1cm4iW29iamVjdCBFcnJvcl0iPT09b2JqZWN0VG9TdHJpbmcoZSl8fGUgaW5zdGFuY2VvZiBFcnJvcn0sZXhwb3J0cy5pc0Z1bmN0aW9uPWZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYXJnfSxleHBvcnRzLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZyl7cmV0dXJuIG51bGw9PT1hcmd8fCJib29sZWFuIj09dHlwZW9mIGFyZ3x8Im51bWJlciI9PXR5cGVvZiBhcmd8fCJzdHJpbmciPT10eXBlb2YgYXJnfHwic3ltYm9sIj09dHlwZW9mIGFyZ3x8dm9pZCAwPT09YXJnfSxleHBvcnRzLmlzQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKS5CdWZmZXIuaXNCdWZmZXJ9LCIuLi8uLi9ub2RlX21vZHVsZXMvY3JlYXRlLWVjZGgvYnJvd3Nlci5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKSxlbGxpcHRpYz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljLmpzIiksQk49X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NyZWF0ZS1lY2RoL25vZGVfbW9kdWxlcy9ibi5qcy9saWIvYm4uanMiKTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBjcmVhdGVFQ0RIKGN1cnZlKXtyZXR1cm4gbmV3IEVDREgoY3VydmUpfTt2YXIgYWxpYXNlcz17c2VjcDI1NmsxOntuYW1lOiJzZWNwMjU2azEiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AyMjRyMTp7bmFtZToicDIyNCIsYnl0ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZToicDI1NiIsYnl0ZUxlbmd0aDozMn0scHJpbWUxOTJ2MTp7bmFtZToicDE5MiIsYnl0ZUxlbmd0aDoyNH0sZWQyNTUxOTp7bmFtZToiZWQyNTUxOSIsYnl0ZUxlbmd0aDozMn0sc2VjcDM4NHIxOntuYW1lOiJwMzg0IixieXRlTGVuZ3RoOjQ4fSxzZWNwNTIxcjE6e25hbWU6InA1MjEiLGJ5dGVMZW5ndGg6NjZ9fTtmdW5jdGlvbiBFQ0RIKGN1cnZlKXt0aGlzLmN1cnZlVHlwZT1hbGlhc2VzW2N1cnZlXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOmN1cnZlfSksdGhpcy5jdXJ2ZT1uZXcgZWxsaXB0aWMuZWModGhpcy5jdXJ2ZVR5cGUubmFtZSksdGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiBmb3JtYXRSZXR1cm5WYWx1ZShibixlbmMsbGVuKXtBcnJheS5pc0FycmF5KGJuKXx8KGJuPWJuLnRvQXJyYXkoKSk7dmFyIGJ1Zj1uZXcgQnVmZmVyKGJuKTtpZihsZW4mJmJ1Zi5sZW5ndGg8bGVuKXt2YXIgemVyb3M9bmV3IEJ1ZmZlcihsZW4tYnVmLmxlbmd0aCk7emVyb3MuZmlsbCgwKSxidWY9QnVmZmVyLmNvbmNhdChbemVyb3MsYnVmXSl9cmV0dXJuIGVuYz9idWYudG9TdHJpbmcoZW5jKTpidWZ9YWxpYXNlcy5wMjI0PWFsaWFzZXMuc2VjcDIyNHIxLGFsaWFzZXMucDI1Nj1hbGlhc2VzLnNlY3AyNTZyMT1hbGlhc2VzLnByaW1lMjU2djEsYWxpYXNlcy5wMTkyPWFsaWFzZXMuc2VjcDE5MnIxPWFsaWFzZXMucHJpbWUxOTJ2MSxhbGlhc2VzLnAzODQ9YWxpYXNlcy5zZWNwMzg0cjEsYWxpYXNlcy5wNTIxPWFsaWFzZXMuc2VjcDUyMXIxLEVDREgucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihlbmMsZm9ybWF0KXtyZXR1cm4gdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMuZ2V0UHVibGljS2V5KGVuYyxmb3JtYXQpfSxFQ0RILnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKG90aGVyLGluZW5jLGVuYyl7cmV0dXJuIGluZW5jPWluZW5jfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKG90aGVyKXx8KG90aGVyPW5ldyBCdWZmZXIob3RoZXIsaW5lbmMpKSxmb3JtYXRSZXR1cm5WYWx1ZSh0aGlzLmN1cnZlLmtleUZyb21QdWJsaWMob3RoZXIpLmdldFB1YmxpYygpLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCksZW5jLHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpfSxFQ0RILnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oZW5jLGZvcm1hdCl7dmFyIGtleT10aGlzLmtleXMuZ2V0UHVibGljKCJjb21wcmVzc2VkIj09PWZvcm1hdCwhMCk7cmV0dXJuImh5YnJpZCI9PT1mb3JtYXQmJihrZXlba2V5Lmxlbmd0aC0xXSUyP2tleVswXT03OmtleVswXT02KSxmb3JtYXRSZXR1cm5WYWx1ZShrZXksZW5jKX0sRUNESC5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihlbmMpe3JldHVybiBmb3JtYXRSZXR1cm5WYWx1ZSh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLGVuYyl9LEVDREgucHJvdG90eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbihwdWIsZW5jKXtyZXR1cm4gZW5jPWVuY3x8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihwdWIpfHwocHViPW5ldyBCdWZmZXIocHViLGVuYykpLHRoaXMua2V5cy5faW1wb3J0UHVibGljKHB1YiksdGhpc30sRUNESC5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbihwcml2LGVuYyl7ZW5jPWVuY3x8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihwcml2KXx8KHByaXY9bmV3IEJ1ZmZlcihwcml2LGVuYykpO3ZhciBfcHJpdj1uZXcgQk4ocHJpdik7cmV0dXJuIF9wcml2PV9wcml2LnRvU3RyaW5nKDE2KSx0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKF9wcml2KSx0aGlzfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9jcmVhdGUtZWNkaC9ub2RlX21vZHVsZXMvYm4uanMvbGliL2JuLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGFzc2VydCh2YWwsbXNnKXtpZighdmFsKXRocm93IG5ldyBFcnJvcihtc2d8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gaW5oZXJpdHMoY3RvcixzdXBlckN0b3Ipe2N0b3Iuc3VwZXJfPXN1cGVyQ3Rvcjt2YXIgVGVtcEN0b3I9ZnVuY3Rpb24oKXt9O1RlbXBDdG9yLnByb3RvdHlwZT1zdXBlckN0b3IucHJvdG90eXBlLGN0b3IucHJvdG90eXBlPW5ldyBUZW1wQ3RvcixjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jdG9yfWZ1bmN0aW9uIEJOKG51bWJlcixiYXNlLGVuZGlhbil7aWYoQk4uaXNCTihudW1iZXIpKXJldHVybiBudW1iZXI7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PW51bWJlciYmKCJsZSIhPT1iYXNlJiYiYmUiIT09YmFzZXx8KGVuZGlhbj1iYXNlLGJhc2U9MTApLHRoaXMuX2luaXQobnVtYmVyfHwwLGJhc2V8fDEwLGVuZGlhbnx8ImJlIikpfXZhciBCdWZmZXI7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9Qk46ZXhwb3J0cy5CTj1CTixCTi5CTj1CTixCTi53b3JkU2l6ZT0yNjt0cnl7QnVmZmVyPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcn1jYXRjaChlKXt9ZnVuY3Rpb24gcGFyc2VIZXg0Qml0cyhzdHJpbmcsaW5kZXgpe3ZhciBjPXN0cmluZy5jaGFyQ29kZUF0KGluZGV4KTtyZXR1cm4gYz49NjUmJmM8PTcwP2MtNTU6Yz49OTcmJmM8PTEwMj9jLTg3OmMtNDgmMTV9ZnVuY3Rpb24gcGFyc2VIZXhCeXRlKHN0cmluZyxsb3dlckJvdW5kLGluZGV4KXt2YXIgcj1wYXJzZUhleDRCaXRzKHN0cmluZyxpbmRleCk7cmV0dXJuIGluZGV4LTE+PWxvd2VyQm91bmQmJihyfD1wYXJzZUhleDRCaXRzKHN0cmluZyxpbmRleC0xKTw8NCkscn1mdW5jdGlvbiBwYXJzZUJhc2Uoc3RyLHN0YXJ0LGVuZCxtdWwpe2Zvcih2YXIgcj0wLGxlbj1NYXRoLm1pbihzdHIubGVuZ3RoLGVuZCksaT1zdGFydDtpPGxlbjtpKyspe3ZhciBjPXN0ci5jaGFyQ29kZUF0KGkpLTQ4O3IqPW11bCxyKz1jPj00OT9jLTQ5KzEwOmM+PTE3P2MtMTcrMTA6Y31yZXR1cm4gcn1CTi5pc0JOPWZ1bmN0aW9uIGlzQk4obnVtKXtyZXR1cm4gbnVtIGluc3RhbmNlb2YgQk58fG51bGwhPT1udW0mJiJvYmplY3QiPT10eXBlb2YgbnVtJiZudW0uY29uc3RydWN0b3Iud29yZFNpemU9PT1CTi53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShudW0ud29yZHMpfSxCTi5tYXg9ZnVuY3Rpb24gbWF4KGxlZnQscmlnaHQpe3JldHVybiBsZWZ0LmNtcChyaWdodCk+MD9sZWZ0OnJpZ2h0fSxCTi5taW49ZnVuY3Rpb24gbWluKGxlZnQscmlnaHQpe3JldHVybiBsZWZ0LmNtcChyaWdodCk8MD9sZWZ0OnJpZ2h0fSxCTi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24gaW5pdChudW1iZXIsYmFzZSxlbmRpYW4pe2lmKCJudW1iZXIiPT10eXBlb2YgbnVtYmVyKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKG51bWJlcixiYXNlLGVuZGlhbik7aWYoIm9iamVjdCI9PXR5cGVvZiBudW1iZXIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShudW1iZXIsYmFzZSxlbmRpYW4pOyJoZXgiPT09YmFzZSYmKGJhc2U9MTYpLGFzc2VydChiYXNlPT09KDB8YmFzZSkmJmJhc2U+PTImJmJhc2U8PTM2KTt2YXIgc3RhcnQ9MDsiLSI9PT0obnVtYmVyPW51bWJlci50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihzdGFydCsrLHRoaXMubmVnYXRpdmU9MSksc3RhcnQ8bnVtYmVyLmxlbmd0aCYmKDE2PT09YmFzZT90aGlzLl9wYXJzZUhleChudW1iZXIsc3RhcnQsZW5kaWFuKToodGhpcy5fcGFyc2VCYXNlKG51bWJlcixiYXNlLHN0YXJ0KSwibGUiPT09ZW5kaWFuJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYmFzZSxlbmRpYW4pKSl9LEJOLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbiBfaW5pdE51bWJlcihudW1iZXIsYmFzZSxlbmRpYW4pe251bWJlcjwwJiYodGhpcy5uZWdhdGl2ZT0xLG51bWJlcj0tbnVtYmVyKSxudW1iZXI8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJm51bWJlcl0sdGhpcy5sZW5ndGg9MSk6bnVtYmVyPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJm51bWJlcixudW1iZXIvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihhc3NlcnQobnVtYmVyPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJm51bWJlcixudW1iZXIvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PWVuZGlhbiYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGJhc2UsZW5kaWFuKX0sQk4ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24gX2luaXRBcnJheShudW1iZXIsYmFzZSxlbmRpYW4pe2lmKGFzc2VydCgibnVtYmVyIj09dHlwZW9mIG51bWJlci5sZW5ndGgpLG51bWJlci5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwobnVtYmVyLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBqLHcsb2ZmPTA7aWYoImJlIj09PWVuZGlhbilmb3IoaT1udW1iZXIubGVuZ3RoLTEsaj0wO2k+PTA7aS09Myl3PW51bWJlcltpXXxudW1iZXJbaS0xXTw8OHxudW1iZXJbaS0yXTw8MTYsdGhpcy53b3Jkc1tqXXw9dzw8b2ZmJjY3MTA4ODYzLHRoaXMud29yZHNbaisxXT13Pj4+MjYtb2ZmJjY3MTA4ODYzLChvZmYrPTI0KT49MjYmJihvZmYtPTI2LGorKyk7ZWxzZSBpZigibGUiPT09ZW5kaWFuKWZvcihpPTAsaj0wO2k8bnVtYmVyLmxlbmd0aDtpKz0zKXc9bnVtYmVyW2ldfG51bWJlcltpKzFdPDw4fG51bWJlcltpKzJdPDwxNix0aGlzLndvcmRzW2pdfD13PDxvZmYmNjcxMDg4NjMsdGhpcy53b3Jkc1tqKzFdPXc+Pj4yNi1vZmYmNjcxMDg4NjMsKG9mZis9MjQpPj0yNiYmKG9mZi09MjYsaisrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uIF9wYXJzZUhleChudW1iZXIsc3RhcnQsZW5kaWFuKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKG51bWJlci5sZW5ndGgtc3RhcnQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIHcsb2ZmPTAsaj0wO2lmKCJiZSI9PT1lbmRpYW4pZm9yKGk9bnVtYmVyLmxlbmd0aC0xO2k+PXN0YXJ0O2ktPTIpdz1wYXJzZUhleEJ5dGUobnVtYmVyLHN0YXJ0LGkpPDxvZmYsdGhpcy53b3Jkc1tqXXw9NjcxMDg4NjMmdyxvZmY+PTE4PyhvZmYtPTE4LGorPTEsdGhpcy53b3Jkc1tqXXw9dz4+PjI2KTpvZmYrPTg7ZWxzZSBmb3IoaT0obnVtYmVyLmxlbmd0aC1zdGFydCklMj09MD9zdGFydCsxOnN0YXJ0O2k8bnVtYmVyLmxlbmd0aDtpKz0yKXc9cGFyc2VIZXhCeXRlKG51bWJlcixzdGFydCxpKTw8b2ZmLHRoaXMud29yZHNbal18PTY3MTA4ODYzJncsb2ZmPj0xOD8ob2ZmLT0xOCxqKz0xLHRoaXMud29yZHNbal18PXc+Pj4yNik6b2ZmKz04O3RoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24gX3BhcnNlQmFzZShudW1iZXIsYmFzZSxzdGFydCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIGxpbWJMZW49MCxsaW1iUG93PTE7bGltYlBvdzw9NjcxMDg4NjM7bGltYlBvdyo9YmFzZSlsaW1iTGVuKys7bGltYkxlbi0tLGxpbWJQb3c9bGltYlBvdy9iYXNlfDA7Zm9yKHZhciB0b3RhbD1udW1iZXIubGVuZ3RoLXN0YXJ0LG1vZD10b3RhbCVsaW1iTGVuLGVuZD1NYXRoLm1pbih0b3RhbCx0b3RhbC1tb2QpK3N0YXJ0LHdvcmQ9MCxpPXN0YXJ0O2k8ZW5kO2krPWxpbWJMZW4pd29yZD1wYXJzZUJhc2UobnVtYmVyLGksaStsaW1iTGVuLGJhc2UpLHRoaXMuaW11bG4obGltYlBvdyksdGhpcy53b3Jkc1swXSt3b3JkPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXdvcmQ6dGhpcy5faWFkZG4od29yZCk7aWYoMCE9PW1vZCl7dmFyIHBvdz0xO2Zvcih3b3JkPXBhcnNlQmFzZShudW1iZXIsaSxudW1iZXIubGVuZ3RoLGJhc2UpLGk9MDtpPG1vZDtpKyspcG93Kj1iYXNlO3RoaXMuaW11bG4ocG93KSx0aGlzLndvcmRzWzBdK3dvcmQ8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9d29yZDp0aGlzLl9pYWRkbih3b3JkKX10aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uIGNvcHkoZGVzdCl7ZGVzdC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWRlc3Qud29yZHNbaV09dGhpcy53b3Jkc1tpXTtkZXN0Lmxlbmd0aD10aGlzLmxlbmd0aCxkZXN0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZGVzdC5yZWQ9dGhpcy5yZWR9LEJOLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbiBjbG9uZSgpe3ZhciByPW5ldyBCTihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHIpLHJ9LEJOLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uIF9leHBhbmQoc2l6ZSl7Zm9yKDt0aGlzLmxlbmd0aDxzaXplOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEJOLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbiBzdHJpcCgpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEJOLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24gX25vcm1TaWduKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEJOLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uIGluc3BlY3QoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIHplcm9zPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLGdyb3VwU2l6ZXM9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sZ3JvdXBCYXNlcz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBzbWFsbE11bFRvKHNlbGYsbnVtLG91dCl7b3V0Lm5lZ2F0aXZlPW51bS5uZWdhdGl2ZV5zZWxmLm5lZ2F0aXZlO3ZhciBsZW49c2VsZi5sZW5ndGgrbnVtLmxlbmd0aHwwO291dC5sZW5ndGg9bGVuLGxlbj1sZW4tMXwwO3ZhciBhPTB8c2VsZi53b3Jkc1swXSxiPTB8bnVtLndvcmRzWzBdLHI9YSpiLGxvPTY3MTA4ODYzJnIsY2Fycnk9ci82NzEwODg2NHwwO291dC53b3Jkc1swXT1sbztmb3IodmFyIGs9MTtrPGxlbjtrKyspe2Zvcih2YXIgbmNhcnJ5PWNhcnJ5Pj4+MjYscndvcmQ9NjcxMDg4NjMmY2FycnksbWF4Sj1NYXRoLm1pbihrLG51bS5sZW5ndGgtMSksaj1NYXRoLm1heCgwLGstc2VsZi5sZW5ndGgrMSk7ajw9bWF4SjtqKyspe3ZhciBpPWstanwwO25jYXJyeSs9KHI9KGE9MHxzZWxmLndvcmRzW2ldKSooYj0wfG51bS53b3Jkc1tqXSkrcndvcmQpLzY3MTA4ODY0fDAscndvcmQ9NjcxMDg4NjMmcn1vdXQud29yZHNba109MHxyd29yZCxjYXJyeT0wfG5jYXJyeX1yZXR1cm4gMCE9PWNhcnJ5P291dC53b3Jkc1trXT0wfGNhcnJ5Om91dC5sZW5ndGgtLSxvdXQuc3RyaXAoKX1CTi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24gdG9TdHJpbmcoYmFzZSxwYWRkaW5nKXt2YXIgb3V0O2lmKHBhZGRpbmc9MHxwYWRkaW5nfHwxLDE2PT09KGJhc2U9YmFzZXx8MTApfHwiaGV4Ij09PWJhc2Upe291dD0iIjtmb3IodmFyIG9mZj0wLGNhcnJ5PTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgdz10aGlzLndvcmRzW2ldLHdvcmQ9KDE2Nzc3MjE1Jih3PDxvZmZ8Y2FycnkpKS50b1N0cmluZygxNik7Y2Fycnk9dz4+PjI0LW9mZiYxNjc3NzIxNSwob2ZmKz0yKT49MjYmJihvZmYtPTI2LGktLSksb3V0PTAhPT1jYXJyeXx8aSE9PXRoaXMubGVuZ3RoLTE/emVyb3NbNi13b3JkLmxlbmd0aF0rd29yZCtvdXQ6d29yZCtvdXR9Zm9yKDAhPT1jYXJyeSYmKG91dD1jYXJyeS50b1N0cmluZygxNikrb3V0KTtvdXQubGVuZ3RoJXBhZGRpbmchPT0wOylvdXQ9IjAiK291dDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihvdXQ9Ii0iK291dCksb3V0fWlmKGJhc2U9PT0oMHxiYXNlKSYmYmFzZT49MiYmYmFzZTw9MzYpe3ZhciBncm91cFNpemU9Z3JvdXBTaXplc1tiYXNlXSxncm91cEJhc2U9Z3JvdXBCYXNlc1tiYXNlXTtvdXQ9IiI7dmFyIGM9dGhpcy5jbG9uZSgpO2ZvcihjLm5lZ2F0aXZlPTA7IWMuaXNaZXJvKCk7KXt2YXIgcj1jLm1vZG4oZ3JvdXBCYXNlKS50b1N0cmluZyhiYXNlKTtvdXQ9KGM9Yy5pZGl2bihncm91cEJhc2UpKS5pc1plcm8oKT9yK291dDp6ZXJvc1tncm91cFNpemUtci5sZW5ndGhdK3Irb3V0fWZvcih0aGlzLmlzWmVybygpJiYob3V0PSIwIitvdXQpO291dC5sZW5ndGglcGFkZGluZyE9PTA7KW91dD0iMCIrb3V0O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKG91dD0iLSIrb3V0KSxvdXR9YXNzZXJ0KCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEJOLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbiB0b051bWJlcigpe3ZhciByZXQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3JldCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3JldCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmFzc2VydCghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXJldDpyZXR9LEJOLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24gdG9KU09OKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxCTi5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24gdG9CdWZmZXIoZW5kaWFuLGxlbmd0aCl7cmV0dXJuIGFzc2VydCh2b2lkIDAhPT1CdWZmZXIpLHRoaXMudG9BcnJheUxpa2UoQnVmZmVyLGVuZGlhbixsZW5ndGgpfSxCTi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbiB0b0FycmF5KGVuZGlhbixsZW5ndGgpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGVuZGlhbixsZW5ndGgpfSxCTi5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24gdG9BcnJheUxpa2UoQXJyYXlUeXBlLGVuZGlhbixsZW5ndGgpe3ZhciBieXRlTGVuZ3RoPXRoaXMuYnl0ZUxlbmd0aCgpLHJlcUxlbmd0aD1sZW5ndGh8fE1hdGgubWF4KDEsYnl0ZUxlbmd0aCk7YXNzZXJ0KGJ5dGVMZW5ndGg8PXJlcUxlbmd0aCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGFzc2VydChyZXFMZW5ndGg+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBiLGksbGl0dGxlRW5kaWFuPSJsZSI9PT1lbmRpYW4scmVzPW5ldyBBcnJheVR5cGUocmVxTGVuZ3RoKSxxPXRoaXMuY2xvbmUoKTtpZihsaXR0bGVFbmRpYW4pe2ZvcihpPTA7IXEuaXNaZXJvKCk7aSsrKWI9cS5hbmRsbigyNTUpLHEuaXVzaHJuKDgpLHJlc1tpXT1iO2Zvcig7aTxyZXFMZW5ndGg7aSsrKXJlc1tpXT0wfWVsc2V7Zm9yKGk9MDtpPHJlcUxlbmd0aC1ieXRlTGVuZ3RoO2krKylyZXNbaV09MDtmb3IoaT0wOyFxLmlzWmVybygpO2krKyliPXEuYW5kbG4oMjU1KSxxLml1c2hybig4KSxyZXNbcmVxTGVuZ3RoLWktMV09Yn1yZXR1cm4gcmVzfSxNYXRoLmNsejMyP0JOLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uIF9jb3VudEJpdHModyl7cmV0dXJuIDMyLU1hdGguY2x6MzIodyl9OkJOLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uIF9jb3VudEJpdHModyl7dmFyIHQ9dyxyPTA7cmV0dXJuIHQ+PTQwOTYmJihyKz0xMyx0Pj4+PTEzKSx0Pj02NCYmKHIrPTcsdD4+Pj03KSx0Pj04JiYocis9NCx0Pj4+PTQpLHQ+PTImJihyKz0yLHQ+Pj49Mikscit0fSxCTi5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uIF96ZXJvQml0cyh3KXtpZigwPT09dylyZXR1cm4gMjY7dmFyIHQ9dyxyPTA7cmV0dXJuIDgxOTEmdHx8KHIrPTEzLHQ+Pj49MTMpLDEyNyZ0fHwocis9Nyx0Pj4+PTcpLDE1JnR8fChyKz00LHQ+Pj49NCksMyZ0fHwocis9Mix0Pj4+PTIpLDEmdHx8cisrLHJ9LEJOLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24gYml0TGVuZ3RoKCl7dmFyIHc9dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSxoaT10aGlzLl9jb3VudEJpdHModyk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStoaX0sQk4ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uIHplcm9CaXRzKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHI9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciBiPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbaV0pO2lmKHIrPWIsMjYhPT1iKWJyZWFrfXJldHVybiByfSxCTi5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbiBieXRlTGVuZ3RoKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxCTi5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uIHRvVHdvcyh3aWR0aCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4od2lkdGgpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sQk4ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uIGZyb21Ud29zKHdpZHRoKXtyZXR1cm4gdGhpcy50ZXN0bih3aWR0aC0xKT90aGlzLm5vdG4od2lkdGgpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEJOLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbiBpc05lZygpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sQk4ucHJvdG90eXBlLm5lZz1mdW5jdGlvbiBuZWcoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sQk4ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24gaW5lZygpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sQk4ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24gaXVvcihudW0pe2Zvcig7dGhpcy5sZW5ndGg8bnVtLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgaT0wO2k8bnVtLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT10aGlzLndvcmRzW2ldfG51bS53b3Jkc1tpXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uIGlvcihudW0pe3JldHVybiBhc3NlcnQoMD09PSh0aGlzLm5lZ2F0aXZlfG51bS5uZWdhdGl2ZSkpLHRoaXMuaXVvcihudW0pfSxCTi5wcm90b3R5cGUub3I9ZnVuY3Rpb24gb3IobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKG51bSk6bnVtLmNsb25lKCkuaW9yKHRoaXMpfSxCTi5wcm90b3R5cGUudW9yPWZ1bmN0aW9uIHVvcihudW0pe3JldHVybiB0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKG51bSk6bnVtLmNsb25lKCkuaXVvcih0aGlzKX0sQk4ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uIGl1YW5kKG51bSl7dmFyIGI7Yj10aGlzLmxlbmd0aD5udW0ubGVuZ3RoP251bTp0aGlzO2Zvcih2YXIgaT0wO2k8Yi5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09dGhpcy53b3Jkc1tpXSZudW0ud29yZHNbaV07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24gaWFuZChudW0pe3JldHVybiBhc3NlcnQoMD09PSh0aGlzLm5lZ2F0aXZlfG51bS5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQobnVtKX0sQk4ucHJvdG90eXBlLmFuZD1mdW5jdGlvbiBhbmQobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChudW0pOm51bS5jbG9uZSgpLmlhbmQodGhpcyl9LEJOLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uIHVhbmQobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQobnVtKTpudW0uY2xvbmUoKS5pdWFuZCh0aGlzKX0sQk4ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uIGl1eG9yKG51bSl7dmFyIGEsYjt0aGlzLmxlbmd0aD5udW0ubGVuZ3RoPyhhPXRoaXMsYj1udW0pOihhPW51bSxiPXRoaXMpO2Zvcih2YXIgaT0wO2k8Yi5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09YS53b3Jkc1tpXV5iLndvcmRzW2ldO2lmKHRoaXMhPT1hKWZvcig7aTxhLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT1hLndvcmRzW2ldO3JldHVybiB0aGlzLmxlbmd0aD1hLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uIGl4b3IobnVtKXtyZXR1cm4gYXNzZXJ0KDA9PT0odGhpcy5uZWdhdGl2ZXxudW0ubmVnYXRpdmUpKSx0aGlzLml1eG9yKG51bSl9LEJOLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24geG9yKG51bSl7cmV0dXJuIHRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IobnVtKTpudW0uY2xvbmUoKS5peG9yKHRoaXMpfSxCTi5wcm90b3R5cGUudXhvcj1mdW5jdGlvbiB1eG9yKG51bSl7cmV0dXJuIHRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKG51bSk6bnVtLmNsb25lKCkuaXV4b3IodGhpcyl9LEJOLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbiBpbm90bih3aWR0aCl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2Ygd2lkdGgmJndpZHRoPj0wKTt2YXIgYnl0ZXNOZWVkZWQ9MHxNYXRoLmNlaWwod2lkdGgvMjYpLGJpdHNMZWZ0PXdpZHRoJTI2O3RoaXMuX2V4cGFuZChieXRlc05lZWRlZCksYml0c0xlZnQ+MCYmYnl0ZXNOZWVkZWQtLTtmb3IodmFyIGk9MDtpPGJ5dGVzTmVlZGVkO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiBiaXRzTGVmdD4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtYml0c0xlZnQpLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24gbm90bih3aWR0aCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih3aWR0aCl9LEJOLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uIHNldG4oYml0LHZhbCl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0JiZiaXQ+PTApO3ZhciBvZmY9Yml0LzI2fDAsd2JpdD1iaXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChvZmYrMSksdGhpcy53b3Jkc1tvZmZdPXZhbD90aGlzLndvcmRzW29mZl18MTw8d2JpdDp0aGlzLndvcmRzW29mZl0mfigxPDx3Yml0KSx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uIGlhZGQobnVtKXt2YXIgcixhLGI7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1udW0ubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxyPXRoaXMuaXN1YihudW0pLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PW51bS5uZWdhdGl2ZSlyZXR1cm4gbnVtLm5lZ2F0aXZlPTAscj10aGlzLmlzdWIobnVtKSxudW0ubmVnYXRpdmU9MSxyLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPm51bS5sZW5ndGg/KGE9dGhpcyxiPW51bSk6KGE9bnVtLGI9dGhpcyk7Zm9yKHZhciBjYXJyeT0wLGk9MDtpPGIubGVuZ3RoO2krKylyPSgwfGEud29yZHNbaV0pKygwfGIud29yZHNbaV0pK2NhcnJ5LHRoaXMud29yZHNbaV09NjcxMDg4NjMmcixjYXJyeT1yPj4+MjY7Zm9yKDswIT09Y2FycnkmJmk8YS5sZW5ndGg7aSsrKXI9KDB8YS53b3Jkc1tpXSkrY2FycnksdGhpcy53b3Jkc1tpXT02NzEwODg2MyZyLGNhcnJ5PXI+Pj4yNjtpZih0aGlzLmxlbmd0aD1hLmxlbmd0aCwwIT09Y2FycnkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Y2FycnksdGhpcy5sZW5ndGgrKztlbHNlIGlmKGEhPT10aGlzKWZvcig7aTxhLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT1hLndvcmRzW2ldO3JldHVybiB0aGlzfSxCTi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uIGFkZChudW0pe3ZhciByZXM7cmV0dXJuIDAhPT1udW0ubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhudW0ubmVnYXRpdmU9MCxyZXM9dGhpcy5zdWIobnVtKSxudW0ubmVnYXRpdmVePTEscmVzKTowPT09bnVtLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHJlcz1udW0uc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxyZXMpOnRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQobnVtKTpudW0uY2xvbmUoKS5pYWRkKHRoaXMpfSxCTi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbiBpc3ViKG51bSl7aWYoMCE9PW51bS5uZWdhdGl2ZSl7bnVtLm5lZ2F0aXZlPTA7dmFyIHI9dGhpcy5pYWRkKG51bSk7cmV0dXJuIG51bS5uZWdhdGl2ZT0xLHIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQobnVtKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgYSxiLGNtcD10aGlzLmNtcChudW0pO2lmKDA9PT1jbXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO2NtcD4wPyhhPXRoaXMsYj1udW0pOihhPW51bSxiPXRoaXMpO2Zvcih2YXIgY2Fycnk9MCxpPTA7aTxiLmxlbmd0aDtpKyspY2Fycnk9KHI9KDB8YS53b3Jkc1tpXSktKDB8Yi53b3Jkc1tpXSkrY2FycnkpPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJnI7Zm9yKDswIT09Y2FycnkmJmk8YS5sZW5ndGg7aSsrKWNhcnJ5PShyPSgwfGEud29yZHNbaV0pK2NhcnJ5KT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZyO2lmKDA9PT1jYXJyeSYmaTxhLmxlbmd0aCYmYSE9PXRoaXMpZm9yKDtpPGEubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPWEud29yZHNbaV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGkpLGEhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24gc3ViKG51bSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKG51bSl9O3ZhciBjb21iMTBNdWxUbz1mdW5jdGlvbiBjb21iMTBNdWxUbyhzZWxmLG51bSxvdXQpe3ZhciBsbyxtaWQsaGksYT1zZWxmLndvcmRzLGI9bnVtLndvcmRzLG89b3V0LndvcmRzLGM9MCxhMD0wfGFbMF0sYWwwPTgxOTEmYTAsYWgwPWEwPj4+MTMsYTE9MHxhWzFdLGFsMT04MTkxJmExLGFoMT1hMT4+PjEzLGEyPTB8YVsyXSxhbDI9ODE5MSZhMixhaDI9YTI+Pj4xMyxhMz0wfGFbM10sYWwzPTgxOTEmYTMsYWgzPWEzPj4+MTMsYTQ9MHxhWzRdLGFsND04MTkxJmE0LGFoND1hND4+PjEzLGE1PTB8YVs1XSxhbDU9ODE5MSZhNSxhaDU9YTU+Pj4xMyxhNj0wfGFbNl0sYWw2PTgxOTEmYTYsYWg2PWE2Pj4+MTMsYTc9MHxhWzddLGFsNz04MTkxJmE3LGFoNz1hNz4+PjEzLGE4PTB8YVs4XSxhbDg9ODE5MSZhOCxhaDg9YTg+Pj4xMyxhOT0wfGFbOV0sYWw5PTgxOTEmYTksYWg5PWE5Pj4+MTMsYjA9MHxiWzBdLGJsMD04MTkxJmIwLGJoMD1iMD4+PjEzLGIxPTB8YlsxXSxibDE9ODE5MSZiMSxiaDE9YjE+Pj4xMyxiMj0wfGJbMl0sYmwyPTgxOTEmYjIsYmgyPWIyPj4+MTMsYjM9MHxiWzNdLGJsMz04MTkxJmIzLGJoMz1iMz4+PjEzLGI0PTB8Yls0XSxibDQ9ODE5MSZiNCxiaDQ9YjQ+Pj4xMyxiNT0wfGJbNV0sYmw1PTgxOTEmYjUsYmg1PWI1Pj4+MTMsYjY9MHxiWzZdLGJsNj04MTkxJmI2LGJoNj1iNj4+PjEzLGI3PTB8Yls3XSxibDc9ODE5MSZiNyxiaDc9Yjc+Pj4xMyxiOD0wfGJbOF0sYmw4PTgxOTEmYjgsYmg4PWI4Pj4+MTMsYjk9MHxiWzldLGJsOT04MTkxJmI5LGJoOT1iOT4+PjEzO291dC5uZWdhdGl2ZT1zZWxmLm5lZ2F0aXZlXm51bS5uZWdhdGl2ZSxvdXQubGVuZ3RoPTE5O3ZhciB3MD0oYysobG89TWF0aC5pbXVsKGFsMCxibDApKXwwKSsoKDgxOTEmKG1pZD0obWlkPU1hdGguaW11bChhbDAsYmgwKSkrTWF0aC5pbXVsKGFoMCxibDApfDApKTw8MTMpfDA7Yz0oKGhpPU1hdGguaW11bChhaDAsYmgwKSkrKG1pZD4+PjEzKXwwKSsodzA+Pj4yNil8MCx3MCY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsMSxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDEsYmgwKSkrTWF0aC5pbXVsKGFoMSxibDApfDAsaGk9TWF0aC5pbXVsKGFoMSxiaDApO3ZhciB3MT0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDEpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmgxKXwwKStNYXRoLmltdWwoYWgwLGJsMSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDEpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxPj4+MjYpfDAsdzEmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDIsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWwyLGJoMCkpK01hdGguaW11bChhaDIsYmwwKXwwLGhpPU1hdGguaW11bChhaDIsYmgwKSxsbz1sbytNYXRoLmltdWwoYWwxLGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDEpfDApK01hdGguaW11bChhaDEsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDEsYmgxKXwwO3ZhciB3Mj0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDIpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmgyKXwwKStNYXRoLmltdWwoYWgwLGJsMil8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDIpfDApKyhtaWQ+Pj4xMyl8MCkrKHcyPj4+MjYpfDAsdzImPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDMsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWwzLGJoMCkpK01hdGguaW11bChhaDMsYmwwKXwwLGhpPU1hdGguaW11bChhaDMsYmgwKSxsbz1sbytNYXRoLmltdWwoYWwyLGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDEpfDApK01hdGguaW11bChhaDIsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDIsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDEsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoMil8MCkrTWF0aC5pbXVsKGFoMSxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDIpfDA7dmFyIHczPShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsMyl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDMpfDApK01hdGguaW11bChhaDAsYmwzKXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoMyl8MCkrKG1pZD4+PjEzKXwwKSsodzM+Pj4yNil8MCx3MyY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsNCxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDQsYmgwKSkrTWF0aC5pbXVsKGFoNCxibDApfDAsaGk9TWF0aC5pbXVsKGFoNCxiaDApLGxvPWxvK01hdGguaW11bChhbDMsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoMSl8MCkrTWF0aC5pbXVsKGFoMyxibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmgyKXwwKStNYXRoLmltdWwoYWgyLGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDMpfDApK01hdGguaW11bChhaDEsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDEsYmgzKXwwO3ZhciB3ND0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDQpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg0KXwwKStNYXRoLmltdWwoYWgwLGJsNCl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDQpfDApKyhtaWQ+Pj4xMyl8MCkrKHc0Pj4+MjYpfDAsdzQmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDUsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw1LGJoMCkpK01hdGguaW11bChhaDUsYmwwKXwwLGhpPU1hdGguaW11bChhaDUsYmgwKSxsbz1sbytNYXRoLmltdWwoYWw0LGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDEpfDApK01hdGguaW11bChhaDQsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDQsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDMsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoMil8MCkrTWF0aC5pbXVsKGFoMyxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmgzKXwwKStNYXRoLmltdWwoYWgyLGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDQpfDApK01hdGguaW11bChhaDEsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDEsYmg0KXwwO3ZhciB3NT0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDUpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg1KXwwKStNYXRoLmltdWwoYWgwLGJsNSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDUpfDApKyhtaWQ+Pj4xMyl8MCkrKHc1Pj4+MjYpfDAsdzUmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDYsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw2LGJoMCkpK01hdGguaW11bChhaDYsYmwwKXwwLGhpPU1hdGguaW11bChhaDYsYmgwKSxsbz1sbytNYXRoLmltdWwoYWw1LGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDEpfDApK01hdGguaW11bChhaDUsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDUsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDQsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoMil8MCkrTWF0aC5pbXVsKGFoNCxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmgzKXwwKStNYXRoLmltdWwoYWgzLGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDQpfDApK01hdGguaW11bChhaDIsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDIsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDEsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoNSl8MCkrTWF0aC5pbXVsKGFoMSxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDUpfDA7dmFyIHc2PShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsNil8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDYpfDApK01hdGguaW11bChhaDAsYmw2KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoNil8MCkrKG1pZD4+PjEzKXwwKSsodzY+Pj4yNil8MCx3NiY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsNyxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDcsYmgwKSkrTWF0aC5pbXVsKGFoNyxibDApfDAsaGk9TWF0aC5pbXVsKGFoNyxiaDApLGxvPWxvK01hdGguaW11bChhbDYsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoMSl8MCkrTWF0aC5pbXVsKGFoNixibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmgyKXwwKStNYXRoLmltdWwoYWg1LGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDMpfDApK01hdGguaW11bChhaDQsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDQsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDMsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoNCl8MCkrTWF0aC5pbXVsKGFoMyxibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmg1KXwwKStNYXRoLmltdWwoYWgyLGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDYpfDApK01hdGguaW11bChhaDEsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDEsYmg2KXwwO3ZhciB3Nz0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDcpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg3KXwwKStNYXRoLmltdWwoYWgwLGJsNyl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDcpfDApKyhtaWQ+Pj4xMyl8MCkrKHc3Pj4+MjYpfDAsdzcmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDgsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw4LGJoMCkpK01hdGguaW11bChhaDgsYmwwKXwwLGhpPU1hdGguaW11bChhaDgsYmgwKSxsbz1sbytNYXRoLmltdWwoYWw3LGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDEpfDApK01hdGguaW11bChhaDcsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDcsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDYsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoMil8MCkrTWF0aC5pbXVsKGFoNixibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmgzKXwwKStNYXRoLmltdWwoYWg1LGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDQpfDApK01hdGguaW11bChhaDQsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDQsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDMsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoNSl8MCkrTWF0aC5pbXVsKGFoMyxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmg2KXwwKStNYXRoLmltdWwoYWgyLGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDcpfDApK01hdGguaW11bChhaDEsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDEsYmg3KXwwO3ZhciB3OD0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDgpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg4KXwwKStNYXRoLmltdWwoYWgwLGJsOCl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDgpfDApKyhtaWQ+Pj4xMyl8MCkrKHc4Pj4+MjYpfDAsdzgmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoMCkpK01hdGguaW11bChhaDksYmwwKXwwLGhpPU1hdGguaW11bChhaDksYmgwKSxsbz1sbytNYXRoLmltdWwoYWw4LGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDEpfDApK01hdGguaW11bChhaDgsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDgsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDcsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoMil8MCkrTWF0aC5pbXVsKGFoNyxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmgzKXwwKStNYXRoLmltdWwoYWg2LGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDQpfDApK01hdGguaW11bChhaDUsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDUsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDQsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoNSl8MCkrTWF0aC5pbXVsKGFoNCxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmg2KXwwKStNYXRoLmltdWwoYWgzLGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDcpfDApK01hdGguaW11bChhaDIsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDIsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDEsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoOCl8MCkrTWF0aC5pbXVsKGFoMSxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDgpfDA7dmFyIHc5PShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDkpfDApK01hdGguaW11bChhaDAsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzk+Pj4yNil8MCx3OSY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDEpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmgxKSkrTWF0aC5pbXVsKGFoOSxibDEpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDEpLGxvPWxvK01hdGguaW11bChhbDgsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoMil8MCkrTWF0aC5pbXVsKGFoOCxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmgzKXwwKStNYXRoLmltdWwoYWg3LGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDQpfDApK01hdGguaW11bChhaDYsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDYsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDUsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoNSl8MCkrTWF0aC5pbXVsKGFoNSxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg2KXwwKStNYXRoLmltdWwoYWg0LGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDcpfDApK01hdGguaW11bChhaDMsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDMsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDIsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoOCl8MCkrTWF0aC5pbXVsKGFoMixibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDgpfDA7dmFyIHcxMD0oYysobG89bG8rTWF0aC5pbXVsKGFsMSxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmg5KXwwKStNYXRoLmltdWwoYWgxLGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxMD4+PjI2KXwwLHcxMCY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDIpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmgyKSkrTWF0aC5pbXVsKGFoOSxibDIpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDIpLGxvPWxvK01hdGguaW11bChhbDgsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoMyl8MCkrTWF0aC5pbXVsKGFoOCxibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg0KXwwKStNYXRoLmltdWwoYWg3LGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDUpfDApK01hdGguaW11bChhaDYsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDYsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDUsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoNil8MCkrTWF0aC5pbXVsKGFoNSxibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg3KXwwKStNYXRoLmltdWwoYWg0LGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDgpfDApK01hdGguaW11bChhaDMsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDMsYmg4KXwwO3ZhciB3MTE9KGMrKGxvPWxvK01hdGguaW11bChhbDIsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoOSl8MCkrTWF0aC5pbXVsKGFoMixibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDIsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTE+Pj4yNil8MCx3MTEmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmwzKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoMykpK01hdGguaW11bChhaDksYmwzKXwwLGhpPU1hdGguaW11bChhaDksYmgzKSxsbz1sbytNYXRoLmltdWwoYWw4LGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDQpfDApK01hdGguaW11bChhaDgsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDgsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDcsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoNSl8MCkrTWF0aC5pbXVsKGFoNyxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmg2KXwwKStNYXRoLmltdWwoYWg2LGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDcpfDApK01hdGguaW11bChhaDUsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDUsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDQsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoOCl8MCkrTWF0aC5pbXVsKGFoNCxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDgpfDA7dmFyIHcxMj0oYysobG89bG8rTWF0aC5pbXVsKGFsMyxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmg5KXwwKStNYXRoLmltdWwoYWgzLGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxMj4+PjI2KXwwLHcxMiY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDQpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmg0KSkrTWF0aC5pbXVsKGFoOSxibDQpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDQpLGxvPWxvK01hdGguaW11bChhbDgsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoNSl8MCkrTWF0aC5pbXVsKGFoOCxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg2KXwwKStNYXRoLmltdWwoYWg3LGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDcpfDApK01hdGguaW11bChhaDYsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDYsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDUsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoOCl8MCkrTWF0aC5pbXVsKGFoNSxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDgpfDA7dmFyIHcxMz0oYysobG89bG8rTWF0aC5pbXVsKGFsNCxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg5KXwwKStNYXRoLmltdWwoYWg0LGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxMz4+PjI2KXwwLHcxMyY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDUpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmg1KSkrTWF0aC5pbXVsKGFoOSxibDUpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDUpLGxvPWxvK01hdGguaW11bChhbDgsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoNil8MCkrTWF0aC5pbXVsKGFoOCxibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg3KXwwKStNYXRoLmltdWwoYWg3LGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDgpfDApK01hdGguaW11bChhaDYsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDYsYmg4KXwwO3ZhciB3MTQ9KGMrKGxvPWxvK01hdGguaW11bChhbDUsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoOSl8MCkrTWF0aC5pbXVsKGFoNSxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDUsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTQ+Pj4yNil8MCx3MTQmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmw2KSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoNikpK01hdGguaW11bChhaDksYmw2KXwwLGhpPU1hdGguaW11bChhaDksYmg2KSxsbz1sbytNYXRoLmltdWwoYWw4LGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDcpfDApK01hdGguaW11bChhaDgsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDgsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDcsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoOCl8MCkrTWF0aC5pbXVsKGFoNyxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDgpfDA7dmFyIHcxNT0oYysobG89bG8rTWF0aC5pbXVsKGFsNixibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmg5KXwwKStNYXRoLmltdWwoYWg2LGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoNixiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxNT4+PjI2KXwwLHcxNSY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDcpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmg3KSkrTWF0aC5pbXVsKGFoOSxibDcpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDcpLGxvPWxvK01hdGguaW11bChhbDgsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoOCl8MCkrTWF0aC5pbXVsKGFoOCxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDgpfDA7dmFyIHcxNj0oYysobG89bG8rTWF0aC5pbXVsKGFsNyxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg5KXwwKStNYXRoLmltdWwoYWg3LGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxNj4+PjI2KXwwLHcxNiY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDgpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmg4KSkrTWF0aC5pbXVsKGFoOSxibDgpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDgpO3ZhciB3MTc9KGMrKGxvPWxvK01hdGguaW11bChhbDgsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoOSl8MCkrTWF0aC5pbXVsKGFoOCxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDgsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTc+Pj4yNil8MCx3MTcmPTY3MTA4ODYzO3ZhciB3MTg9KGMrKGxvPU1hdGguaW11bChhbDksYmw5KSl8MCkrKCg4MTkxJihtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoOSkpK01hdGguaW11bChhaDksYmw5KXwwKSk8PDEzKXwwO3JldHVybiBjPSgoaGk9TWF0aC5pbXVsKGFoOSxiaDkpKSsobWlkPj4+MTMpfDApKyh3MTg+Pj4yNil8MCx3MTgmPTY3MTA4ODYzLG9bMF09dzAsb1sxXT13MSxvWzJdPXcyLG9bM109dzMsb1s0XT13NCxvWzVdPXc1LG9bNl09dzYsb1s3XT13NyxvWzhdPXc4LG9bOV09dzksb1sxMF09dzEwLG9bMTFdPXcxMSxvWzEyXT13MTIsb1sxM109dzEzLG9bMTRdPXcxNCxvWzE1XT13MTUsb1sxNl09dzE2LG9bMTddPXcxNyxvWzE4XT13MTgsMCE9PWMmJihvWzE5XT1jLG91dC5sZW5ndGgrKyksb3V0fTtmdW5jdGlvbiBqdW1ib011bFRvKHNlbGYsbnVtLG91dCl7cmV0dXJuKG5ldyBGRlRNKS5tdWxwKHNlbGYsbnVtLG91dCl9ZnVuY3Rpb24gRkZUTSh4LHkpe3RoaXMueD14LHRoaXMueT15fU1hdGguaW11bHx8KGNvbWIxME11bFRvPXNtYWxsTXVsVG8pLEJOLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbiBtdWxUbyhudW0sb3V0KXt2YXIgcmVzLGxlbj10aGlzLmxlbmd0aCtudW0ubGVuZ3RoO3JldHVybiByZXM9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1udW0ubGVuZ3RoP2NvbWIxME11bFRvKHRoaXMsbnVtLG91dCk6bGVuPDYzP3NtYWxsTXVsVG8odGhpcyxudW0sb3V0KTpsZW48MTAyND9mdW5jdGlvbiBiaWdNdWxUbyhzZWxmLG51bSxvdXQpe291dC5uZWdhdGl2ZT1udW0ubmVnYXRpdmVec2VsZi5uZWdhdGl2ZSxvdXQubGVuZ3RoPXNlbGYubGVuZ3RoK251bS5sZW5ndGg7Zm9yKHZhciBjYXJyeT0wLGhuY2Fycnk9MCxrPTA7azxvdXQubGVuZ3RoLTE7aysrKXt2YXIgbmNhcnJ5PWhuY2Fycnk7aG5jYXJyeT0wO2Zvcih2YXIgcndvcmQ9NjcxMDg4NjMmY2FycnksbWF4Sj1NYXRoLm1pbihrLG51bS5sZW5ndGgtMSksaj1NYXRoLm1heCgwLGstc2VsZi5sZW5ndGgrMSk7ajw9bWF4SjtqKyspe3ZhciBpPWstaixyPSgwfHNlbGYud29yZHNbaV0pKigwfG51bS53b3Jkc1tqXSksbG89NjcxMDg4NjMmcjtyd29yZD02NzEwODg2MyYobG89bG8rcndvcmR8MCksaG5jYXJyeSs9KG5jYXJyeT0obmNhcnJ5PW5jYXJyeSsoci82NzEwODg2NHwwKXwwKSsobG8+Pj4yNil8MCk+Pj4yNixuY2FycnkmPTY3MTA4ODYzfW91dC53b3Jkc1trXT1yd29yZCxjYXJyeT1uY2FycnksbmNhcnJ5PWhuY2Fycnl9cmV0dXJuIDAhPT1jYXJyeT9vdXQud29yZHNba109Y2Fycnk6b3V0Lmxlbmd0aC0tLG91dC5zdHJpcCgpfSh0aGlzLG51bSxvdXQpOmp1bWJvTXVsVG8odGhpcyxudW0sb3V0KSxyZXN9LEZGVE0ucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24gbWFrZVJCVChOKXtmb3IodmFyIHQ9bmV3IEFycmF5KE4pLGw9Qk4ucHJvdG90eXBlLl9jb3VudEJpdHMoTiktMSxpPTA7aTxOO2krKyl0W2ldPXRoaXMucmV2QmluKGksbCxOKTtyZXR1cm4gdH0sRkZUTS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uIHJldkJpbih4LGwsTil7aWYoMD09PXh8fHg9PT1OLTEpcmV0dXJuIHg7Zm9yKHZhciByYj0wLGk9MDtpPGw7aSsrKXJifD0oMSZ4KTw8bC1pLTEseD4+PTE7cmV0dXJuIHJifSxGRlRNLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uIHBlcm11dGUocmJ0LHJ3cyxpd3MscnR3cyxpdHdzLE4pe2Zvcih2YXIgaT0wO2k8TjtpKyspcnR3c1tpXT1yd3NbcmJ0W2ldXSxpdHdzW2ldPWl3c1tyYnRbaV1dfSxGRlRNLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24gdHJhbnNmb3JtKHJ3cyxpd3MscnR3cyxpdHdzLE4scmJ0KXt0aGlzLnBlcm11dGUocmJ0LHJ3cyxpd3MscnR3cyxpdHdzLE4pO2Zvcih2YXIgcz0xO3M8TjtzPDw9MSlmb3IodmFyIGw9czw8MSxydHdkZj1NYXRoLmNvcygyKk1hdGguUEkvbCksaXR3ZGY9TWF0aC5zaW4oMipNYXRoLlBJL2wpLHA9MDtwPE47cCs9bClmb3IodmFyIHJ0d2RmXz1ydHdkZixpdHdkZl89aXR3ZGYsaj0wO2o8cztqKyspe3ZhciByZT1ydHdzW3Aral0saWU9aXR3c1twK2pdLHJvPXJ0d3NbcCtqK3NdLGlvPWl0d3NbcCtqK3NdLHJ4PXJ0d2RmXypyby1pdHdkZl8qaW87aW89cnR3ZGZfKmlvK2l0d2RmXypybyxybz1yeCxydHdzW3Aral09cmUrcm8saXR3c1twK2pdPWllK2lvLHJ0d3NbcCtqK3NdPXJlLXJvLGl0d3NbcCtqK3NdPWllLWlvLGohPT1sJiYocng9cnR3ZGYqcnR3ZGZfLWl0d2RmKml0d2RmXyxpdHdkZl89cnR3ZGYqaXR3ZGZfK2l0d2RmKnJ0d2RmXyxydHdkZl89cngpfX0sRkZUTS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24gZ3Vlc3NMZW4xM2IobixtKXt2YXIgTj0xfE1hdGgubWF4KG0sbiksb2RkPTEmTixpPTA7Zm9yKE49Ti8yfDA7TjtOPj4+PTEpaSsrO3JldHVybiAxPDxpKzErb2RkfSxGRlRNLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24gY29uanVnYXRlKHJ3cyxpd3MsTil7aWYoIShOPD0xKSlmb3IodmFyIGk9MDtpPE4vMjtpKyspe3ZhciB0PXJ3c1tpXTtyd3NbaV09cndzW04taS0xXSxyd3NbTi1pLTFdPXQsdD1pd3NbaV0saXdzW2ldPS1pd3NbTi1pLTFdLGl3c1tOLWktMV09LXR9fSxGRlRNLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24gbm9ybWFsaXplMTNiKHdzLE4pe2Zvcih2YXIgY2Fycnk9MCxpPTA7aTxOLzI7aSsrKXt2YXIgdz04MTkyKk1hdGgucm91bmQod3NbMippKzFdL04pK01hdGgucm91bmQod3NbMippXS9OKStjYXJyeTt3c1tpXT02NzEwODg2MyZ3LGNhcnJ5PXc8NjcxMDg4NjQ/MDp3LzY3MTA4ODY0fDB9cmV0dXJuIHdzfSxGRlRNLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uIGNvbnZlcnQxM2Iod3MsbGVuLHJ3cyxOKXtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8bGVuO2krKyljYXJyeSs9MHx3c1tpXSxyd3NbMippXT04MTkxJmNhcnJ5LGNhcnJ5Pj4+PTEzLHJ3c1syKmkrMV09ODE5MSZjYXJyeSxjYXJyeT4+Pj0xMztmb3IoaT0yKmxlbjtpPE47KytpKXJ3c1tpXT0wO2Fzc2VydCgwPT09Y2FycnkpLGFzc2VydCghKC04MTkyJmNhcnJ5KSl9LEZGVE0ucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24gc3R1YihOKXtmb3IodmFyIHBoPW5ldyBBcnJheShOKSxpPTA7aTxOO2krKylwaFtpXT0wO3JldHVybiBwaH0sRkZUTS5wcm90b3R5cGUubXVscD1mdW5jdGlvbiBtdWxwKHgseSxvdXQpe3ZhciBOPTIqdGhpcy5ndWVzc0xlbjEzYih4Lmxlbmd0aCx5Lmxlbmd0aCkscmJ0PXRoaXMubWFrZVJCVChOKSxfPXRoaXMuc3R1YihOKSxyd3M9bmV3IEFycmF5KE4pLHJ3c3Q9bmV3IEFycmF5KE4pLGl3c3Q9bmV3IEFycmF5KE4pLG5yd3M9bmV3IEFycmF5KE4pLG5yd3N0PW5ldyBBcnJheShOKSxuaXdzdD1uZXcgQXJyYXkoTikscm13cz1vdXQud29yZHM7cm13cy5sZW5ndGg9Tix0aGlzLmNvbnZlcnQxM2IoeC53b3Jkcyx4Lmxlbmd0aCxyd3MsTiksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMseS5sZW5ndGgsbnJ3cyxOKSx0aGlzLnRyYW5zZm9ybShyd3MsXyxyd3N0LGl3c3QsTixyYnQpLHRoaXMudHJhbnNmb3JtKG5yd3MsXyxucndzdCxuaXdzdCxOLHJidCk7Zm9yKHZhciBpPTA7aTxOO2krKyl7dmFyIHJ4PXJ3c3RbaV0qbnJ3c3RbaV0taXdzdFtpXSpuaXdzdFtpXTtpd3N0W2ldPXJ3c3RbaV0qbml3c3RbaV0raXdzdFtpXSpucndzdFtpXSxyd3N0W2ldPXJ4fXJldHVybiB0aGlzLmNvbmp1Z2F0ZShyd3N0LGl3c3QsTiksdGhpcy50cmFuc2Zvcm0ocndzdCxpd3N0LHJtd3MsXyxOLHJidCksdGhpcy5jb25qdWdhdGUocm13cyxfLE4pLHRoaXMubm9ybWFsaXplMTNiKHJtd3MsTiksb3V0Lm5lZ2F0aXZlPXgubmVnYXRpdmVeeS5uZWdhdGl2ZSxvdXQubGVuZ3RoPXgubGVuZ3RoK3kubGVuZ3RoLG91dC5zdHJpcCgpfSxCTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uIG11bChudW0pe3ZhciBvdXQ9bmV3IEJOKG51bGwpO3JldHVybiBvdXQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK251bS5sZW5ndGgpLHRoaXMubXVsVG8obnVtLG91dCl9LEJOLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uIG11bGYobnVtKXt2YXIgb3V0PW5ldyBCTihudWxsKTtyZXR1cm4gb3V0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtudW0ubGVuZ3RoKSxqdW1ib011bFRvKHRoaXMsbnVtLG91dCl9LEJOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uIGltdWwobnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKG51bSx0aGlzKX0sQk4ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uIGltdWxuKG51bSl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgbnVtKSxhc3NlcnQobnVtPDY3MTA4ODY0KTtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgdz0oMHx0aGlzLndvcmRzW2ldKSpudW0sbG89KDY3MTA4ODYzJncpKyg2NzEwODg2MyZjYXJyeSk7Y2Fycnk+Pj0yNixjYXJyeSs9dy82NzEwODg2NHwwLGNhcnJ5Kz1sbz4+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmbG99cmV0dXJuIDAhPT1jYXJyeSYmKHRoaXMud29yZHNbaV09Y2FycnksdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PW51bT8xOnRoaXMubGVuZ3RoLHRoaXN9LEJOLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uIG11bG4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKG51bSl9LEJOLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24gc3FyKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxCTi5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbiBpc3FyKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxCTi5wcm90b3R5cGUucG93PWZ1bmN0aW9uIHBvdyhudW0pe3ZhciB3PWZ1bmN0aW9uIHRvQml0QXJyYXkobnVtKXtmb3IodmFyIHc9bmV3IEFycmF5KG51bS5iaXRMZW5ndGgoKSksYml0PTA7Yml0PHcubGVuZ3RoO2JpdCsrKXt2YXIgb2ZmPWJpdC8yNnwwLHdiaXQ9Yml0JTI2O3dbYml0XT0obnVtLndvcmRzW29mZl0mMTw8d2JpdCk+Pj53Yml0fXJldHVybiB3fShudW0pO2lmKDA9PT13Lmxlbmd0aClyZXR1cm4gbmV3IEJOKDEpO2Zvcih2YXIgcmVzPXRoaXMsaT0wO2k8dy5sZW5ndGgmJjA9PT13W2ldO2krKyxyZXM9cmVzLnNxcigpKTtpZigrK2k8dy5sZW5ndGgpZm9yKHZhciBxPXJlcy5zcXIoKTtpPHcubGVuZ3RoO2krKyxxPXEuc3FyKCkpMCE9PXdbaV0mJihyZXM9cmVzLm11bChxKSk7cmV0dXJuIHJlc30sQk4ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbiBpdXNobG4oYml0cyl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0cyYmYml0cz49MCk7dmFyIGkscj1iaXRzJTI2LHM9KGJpdHMtcikvMjYsY2FycnlNYXNrPTY3MTA4ODYzPj4+MjYtcjw8MjYtcjtpZigwIT09cil7dmFyIGNhcnJ5PTA7Zm9yKGk9MDtpPHRoaXMubGVuZ3RoO2krKyl7dmFyIG5ld0NhcnJ5PXRoaXMud29yZHNbaV0mY2FycnlNYXNrLGM9KDB8dGhpcy53b3Jkc1tpXSktbmV3Q2Fycnk8PHI7dGhpcy53b3Jkc1tpXT1jfGNhcnJ5LGNhcnJ5PW5ld0NhcnJ5Pj4+MjYtcn1jYXJyeSYmKHRoaXMud29yZHNbaV09Y2FycnksdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXMpe2ZvcihpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pdGhpcy53b3Jkc1tpK3NdPXRoaXMud29yZHNbaV07Zm9yKGk9MDtpPHM7aSsrKXRoaXMud29yZHNbaV09MDt0aGlzLmxlbmd0aCs9c31yZXR1cm4gdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24gaXNobG4oYml0cyl7cmV0dXJuIGFzc2VydCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYml0cyl9LEJOLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24gaXVzaHJuKGJpdHMsaGludCxleHRlbmRlZCl7dmFyIGg7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0cyYmYml0cz49MCksaD1oaW50PyhoaW50LWhpbnQlMjYpLzI2OjA7dmFyIHI9Yml0cyUyNixzPU1hdGgubWluKChiaXRzLXIpLzI2LHRoaXMubGVuZ3RoKSxtYXNrPTY3MTA4ODYzXjY3MTA4ODYzPj4+cjw8cixtYXNrZWRXb3Jkcz1leHRlbmRlZDtpZihoLT1zLGg9TWF0aC5tYXgoMCxoKSxtYXNrZWRXb3Jkcyl7Zm9yKHZhciBpPTA7aTxzO2krKyltYXNrZWRXb3Jkcy53b3Jkc1tpXT10aGlzLndvcmRzW2ldO21hc2tlZFdvcmRzLmxlbmd0aD1zfWlmKDA9PT1zKTtlbHNlIGlmKHRoaXMubGVuZ3RoPnMpZm9yKHRoaXMubGVuZ3RoLT1zLGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPXRoaXMud29yZHNbaStzXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBjYXJyeT0wO2ZvcihpPXRoaXMubGVuZ3RoLTE7aT49MCYmKDAhPT1jYXJyeXx8aT49aCk7aS0tKXt2YXIgd29yZD0wfHRoaXMud29yZHNbaV07dGhpcy53b3Jkc1tpXT1jYXJyeTw8MjYtcnx3b3JkPj4+cixjYXJyeT13b3JkJm1hc2t9cmV0dXJuIG1hc2tlZFdvcmRzJiYwIT09Y2FycnkmJihtYXNrZWRXb3Jkcy53b3Jkc1ttYXNrZWRXb3Jkcy5sZW5ndGgrK109Y2FycnkpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbiBpc2hybihiaXRzLGhpbnQsZXh0ZW5kZWQpe3JldHVybiBhc3NlcnQoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGJpdHMsaGludCxleHRlbmRlZCl9LEJOLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uIHNobG4oYml0cyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiaXRzKX0sQk4ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uIHVzaGxuKGJpdHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGJpdHMpfSxCTi5wcm90b3R5cGUuc2hybj1mdW5jdGlvbiBzaHJuKGJpdHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYml0cyl9LEJOLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbiB1c2hybihiaXRzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiaXRzKX0sQk4ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uIHRlc3RuKGJpdCl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0JiZiaXQ+PTApO3ZhciByPWJpdCUyNixzPShiaXQtcikvMjYscT0xPDxyO3JldHVybiEodGhpcy5sZW5ndGg8PXMpJiYhISh0aGlzLndvcmRzW3NdJnEpfSxCTi5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uIGltYXNrbihiaXRzKXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXRzJiZiaXRzPj0wKTt2YXIgcj1iaXRzJTI2LHM9KGJpdHMtcikvMjY7aWYoYXNzZXJ0KDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9cylyZXR1cm4gdGhpcztpZigwIT09ciYmcysrLHRoaXMubGVuZ3RoPU1hdGgubWluKHMsdGhpcy5sZW5ndGgpLDAhPT1yKXt2YXIgbWFzaz02NzEwODg2M142NzEwODg2Mz4+PnI8PHI7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9bWFza31yZXR1cm4gMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uIG1hc2tuKGJpdHMpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGJpdHMpfSxCTi5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24gaWFkZG4obnVtKXtyZXR1cm4gYXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgbnVtKSxhc3NlcnQobnVtPDY3MTA4ODY0KSxudW08MD90aGlzLmlzdWJuKC1udW0pOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8bnVtPyh0aGlzLndvcmRzWzBdPW51bS0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKG51bSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKG51bSl9LEJOLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24gX2lhZGRuKG51bSl7dGhpcy53b3Jkc1swXSs9bnVtO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbaV0+PTY3MTA4ODY0O2krKyl0aGlzLndvcmRzW2ldLT02NzEwODg2NCxpPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2krMV09MTp0aGlzLndvcmRzW2krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaSsxKSx0aGlzfSxCTi5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24gaXN1Ym4obnVtKXtpZihhc3NlcnQoIm51bWJlciI9PXR5cGVvZiBudW0pLGFzc2VydChudW08NjcxMDg4NjQpLG51bTwwKXJldHVybiB0aGlzLmlhZGRuKC1udW0pO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihudW0pLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPW51bSwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbaV08MDtpKyspdGhpcy53b3Jkc1tpXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tpKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uIGFkZG4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKG51bSl9LEJOLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uIHN1Ym4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKG51bSl9LEJOLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uIGlhYnMoKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEJOLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24gYWJzKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEJOLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24gX2lzaGxuc3VibXVsKG51bSxtdWwsc2hpZnQpe3ZhciBpLHcsbGVuPW51bS5sZW5ndGgrc2hpZnQ7dGhpcy5fZXhwYW5kKGxlbik7dmFyIGNhcnJ5PTA7Zm9yKGk9MDtpPG51bS5sZW5ndGg7aSsrKXt3PSgwfHRoaXMud29yZHNbaStzaGlmdF0pK2NhcnJ5O3ZhciByaWdodD0oMHxudW0ud29yZHNbaV0pKm11bDtjYXJyeT0oKHctPTY3MTA4ODYzJnJpZ2h0KT4+MjYpLShyaWdodC82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krc2hpZnRdPTY3MTA4ODYzJnd9Zm9yKDtpPHRoaXMubGVuZ3RoLXNoaWZ0O2krKyljYXJyeT0odz0oMHx0aGlzLndvcmRzW2krc2hpZnRdKStjYXJyeSk+PjI2LHRoaXMud29yZHNbaStzaGlmdF09NjcxMDg4NjMmdztpZigwPT09Y2FycnkpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoYXNzZXJ0KC0xPT09Y2FycnkpLGNhcnJ5PTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWNhcnJ5PSh3PS0oMHx0aGlzLndvcmRzW2ldKStjYXJyeSk+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmdztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uIF93b3JkRGl2KG51bSxtb2RlKXt2YXIgc2hpZnQ9KHRoaXMubGVuZ3RoLG51bS5sZW5ndGgpLGE9dGhpcy5jbG9uZSgpLGI9bnVtLGJoaT0wfGIud29yZHNbYi5sZW5ndGgtMV07MCE9PShzaGlmdD0yNi10aGlzLl9jb3VudEJpdHMoYmhpKSkmJihiPWIudXNobG4oc2hpZnQpLGEuaXVzaGxuKHNoaWZ0KSxiaGk9MHxiLndvcmRzW2IubGVuZ3RoLTFdKTt2YXIgcSxtPWEubGVuZ3RoLWIubGVuZ3RoO2lmKCJtb2QiIT09bW9kZSl7KHE9bmV3IEJOKG51bGwpKS5sZW5ndGg9bSsxLHEud29yZHM9bmV3IEFycmF5KHEubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHEubGVuZ3RoO2krKylxLndvcmRzW2ldPTB9dmFyIGRpZmY9YS5jbG9uZSgpLl9pc2hsbnN1Ym11bChiLDEsbSk7MD09PWRpZmYubmVnYXRpdmUmJihhPWRpZmYscSYmKHEud29yZHNbbV09MSkpO2Zvcih2YXIgaj1tLTE7aj49MDtqLS0pe3ZhciBxaj02NzEwODg2NCooMHxhLndvcmRzW2IubGVuZ3RoK2pdKSsoMHxhLndvcmRzW2IubGVuZ3RoK2otMV0pO2Zvcihxaj1NYXRoLm1pbihxai9iaGl8MCw2NzEwODg2MyksYS5faXNobG5zdWJtdWwoYixxaixqKTswIT09YS5uZWdhdGl2ZTspcWotLSxhLm5lZ2F0aXZlPTAsYS5faXNobG5zdWJtdWwoYiwxLGopLGEuaXNaZXJvKCl8fChhLm5lZ2F0aXZlXj0xKTtxJiYocS53b3Jkc1tqXT1xail9cmV0dXJuIHEmJnEuc3RyaXAoKSxhLnN0cmlwKCksImRpdiIhPT1tb2RlJiYwIT09c2hpZnQmJmEuaXVzaHJuKHNoaWZ0KSx7ZGl2OnF8fG51bGwsbW9kOmF9fSxCTi5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uIGRpdm1vZChudW0sbW9kZSxwb3NpdGl2ZSl7cmV0dXJuIGFzc2VydCghbnVtLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEJOKDApLG1vZDpuZXcgQk4oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09bnVtLm5lZ2F0aXZlPyhyZXM9dGhpcy5uZWcoKS5kaXZtb2QobnVtLG1vZGUpLCJtb2QiIT09bW9kZSYmKGRpdj1yZXMuZGl2Lm5lZygpKSwiZGl2IiE9PW1vZGUmJihtb2Q9cmVzLm1vZC5uZWcoKSxwb3NpdGl2ZSYmMCE9PW1vZC5uZWdhdGl2ZSYmbW9kLmlhZGQobnVtKSkse2Rpdixtb2R9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PW51bS5uZWdhdGl2ZT8ocmVzPXRoaXMuZGl2bW9kKG51bS5uZWcoKSxtb2RlKSwibW9kIiE9PW1vZGUmJihkaXY9cmVzLmRpdi5uZWcoKSkse2Rpdixtb2Q6cmVzLm1vZH0pOjAhPT0odGhpcy5uZWdhdGl2ZSZudW0ubmVnYXRpdmUpPyhyZXM9dGhpcy5uZWcoKS5kaXZtb2QobnVtLm5lZygpLG1vZGUpLCJkaXYiIT09bW9kZSYmKG1vZD1yZXMubW9kLm5lZygpLHBvc2l0aXZlJiYwIT09bW9kLm5lZ2F0aXZlJiZtb2QuaXN1YihudW0pKSx7ZGl2OnJlcy5kaXYsbW9kfSk6bnVtLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAobnVtKTwwP3tkaXY6bmV3IEJOKDApLG1vZDp0aGlzfToxPT09bnVtLmxlbmd0aD8iZGl2Ij09PW1vZGU/e2Rpdjp0aGlzLmRpdm4obnVtLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1tb2RlP3tkaXY6bnVsbCxtb2Q6bmV3IEJOKHRoaXMubW9kbihudW0ud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4obnVtLndvcmRzWzBdKSxtb2Q6bmV3IEJOKHRoaXMubW9kbihudW0ud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihudW0sbW9kZSk7dmFyIGRpdixtb2QscmVzfSxCTi5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uIGRpdihudW0pe3JldHVybiB0aGlzLmRpdm1vZChudW0sImRpdiIsITEpLmRpdn0sQk4ucHJvdG90eXBlLm1vZD1mdW5jdGlvbiBtb2QobnVtKXtyZXR1cm4gdGhpcy5kaXZtb2QobnVtLCJtb2QiLCExKS5tb2R9LEJOLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uIHVtb2QobnVtKXtyZXR1cm4gdGhpcy5kaXZtb2QobnVtLCJtb2QiLCEwKS5tb2R9LEJOLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbiBkaXZSb3VuZChudW0pe3ZhciBkbT10aGlzLmRpdm1vZChudW0pO2lmKGRtLm1vZC5pc1plcm8oKSlyZXR1cm4gZG0uZGl2O3ZhciBtb2Q9MCE9PWRtLmRpdi5uZWdhdGl2ZT9kbS5tb2QuaXN1YihudW0pOmRtLm1vZCxoYWxmPW51bS51c2hybigxKSxyMj1udW0uYW5kbG4oMSksY21wPW1vZC5jbXAoaGFsZik7cmV0dXJuIGNtcDwwfHwxPT09cjImJjA9PT1jbXA/ZG0uZGl2OjAhPT1kbS5kaXYubmVnYXRpdmU/ZG0uZGl2LmlzdWJuKDEpOmRtLmRpdi5pYWRkbigxKX0sQk4ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24gbW9kbihudW0pe2Fzc2VydChudW08PTY3MTA4ODYzKTtmb3IodmFyIHA9KDE8PDI2KSVudW0sYWNjPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKWFjYz0ocCphY2MrKDB8dGhpcy53b3Jkc1tpXSkpJW51bTtyZXR1cm4gYWNjfSxCTi5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24gaWRpdm4obnVtKXthc3NlcnQobnVtPD02NzEwODg2Myk7Zm9yKHZhciBjYXJyeT0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIHc9KDB8dGhpcy53b3Jkc1tpXSkrNjcxMDg4NjQqY2Fycnk7dGhpcy53b3Jkc1tpXT13L251bXwwLGNhcnJ5PXclbnVtfXJldHVybiB0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uIGRpdm4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKG51bSl9LEJOLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uIGVnY2QocCl7YXNzZXJ0KDA9PT1wLm5lZ2F0aXZlKSxhc3NlcnQoIXAuaXNaZXJvKCkpO3ZhciB4PXRoaXMseT1wLmNsb25lKCk7eD0wIT09eC5uZWdhdGl2ZT94LnVtb2QocCk6eC5jbG9uZSgpO2Zvcih2YXIgQT1uZXcgQk4oMSksQj1uZXcgQk4oMCksQz1uZXcgQk4oMCksRD1uZXcgQk4oMSksZz0wO3guaXNFdmVuKCkmJnkuaXNFdmVuKCk7KXguaXVzaHJuKDEpLHkuaXVzaHJuKDEpLCsrZztmb3IodmFyIHlwPXkuY2xvbmUoKSx4cD14LmNsb25lKCk7IXguaXNaZXJvKCk7KXtmb3IodmFyIGk9MCxpbT0xOzA9PT0oeC53b3Jkc1swXSZpbSkmJmk8MjY7KytpLGltPDw9MSk7aWYoaT4wKWZvcih4Lml1c2hybihpKTtpLS0gPjA7KShBLmlzT2RkKCl8fEIuaXNPZGQoKSkmJihBLmlhZGQoeXApLEIuaXN1Yih4cCkpLEEuaXVzaHJuKDEpLEIuaXVzaHJuKDEpO2Zvcih2YXIgaj0wLGptPTE7MD09PSh5LndvcmRzWzBdJmptKSYmajwyNjsrK2osam08PD0xKTtpZihqPjApZm9yKHkuaXVzaHJuKGopO2otLSA+MDspKEMuaXNPZGQoKXx8RC5pc09kZCgpKSYmKEMuaWFkZCh5cCksRC5pc3ViKHhwKSksQy5pdXNocm4oMSksRC5pdXNocm4oMSk7eC5jbXAoeSk+PTA/KHguaXN1Yih5KSxBLmlzdWIoQyksQi5pc3ViKEQpKTooeS5pc3ViKHgpLEMuaXN1YihBKSxELmlzdWIoQikpfXJldHVybnthOkMsYjpELGdjZDp5Lml1c2hsbihnKX19LEJOLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24gX2ludm1wKHApe2Fzc2VydCgwPT09cC5uZWdhdGl2ZSksYXNzZXJ0KCFwLmlzWmVybygpKTt2YXIgYT10aGlzLGI9cC5jbG9uZSgpO2E9MCE9PWEubmVnYXRpdmU/YS51bW9kKHApOmEuY2xvbmUoKTtmb3IodmFyIHJlcyx4MT1uZXcgQk4oMSkseDI9bmV3IEJOKDApLGRlbHRhPWIuY2xvbmUoKTthLmNtcG4oMSk+MCYmYi5jbXBuKDEpPjA7KXtmb3IodmFyIGk9MCxpbT0xOzA9PT0oYS53b3Jkc1swXSZpbSkmJmk8MjY7KytpLGltPDw9MSk7aWYoaT4wKWZvcihhLml1c2hybihpKTtpLS0gPjA7KXgxLmlzT2RkKCkmJngxLmlhZGQoZGVsdGEpLHgxLml1c2hybigxKTtmb3IodmFyIGo9MCxqbT0xOzA9PT0oYi53b3Jkc1swXSZqbSkmJmo8MjY7KytqLGptPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KXgyLmlzT2RkKCkmJngyLmlhZGQoZGVsdGEpLHgyLml1c2hybigxKTthLmNtcChiKT49MD8oYS5pc3ViKGIpLHgxLmlzdWIoeDIpKTooYi5pc3ViKGEpLHgyLmlzdWIoeDEpKX1yZXR1cm4ocmVzPTA9PT1hLmNtcG4oMSk/eDE6eDIpLmNtcG4oMCk8MCYmcmVzLmlhZGQocCkscmVzfSxCTi5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uIGdjZChudW0pe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIG51bS5hYnMoKTtpZihudW0uaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGE9dGhpcy5jbG9uZSgpLGI9bnVtLmNsb25lKCk7YS5uZWdhdGl2ZT0wLGIubmVnYXRpdmU9MDtmb3IodmFyIHNoaWZ0PTA7YS5pc0V2ZW4oKSYmYi5pc0V2ZW4oKTtzaGlmdCsrKWEuaXVzaHJuKDEpLGIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDthLmlzRXZlbigpOylhLml1c2hybigxKTtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO3ZhciByPWEuY21wKGIpO2lmKHI8MCl7dmFyIHQ9YTthPWIsYj10fWVsc2UgaWYoMD09PXJ8fDA9PT1iLmNtcG4oMSkpYnJlYWs7YS5pc3ViKGIpfXJldHVybiBiLml1c2hsbihzaGlmdCl9LEJOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uIGludm0obnVtKXtyZXR1cm4gdGhpcy5lZ2NkKG51bSkuYS51bW9kKG51bSl9LEJOLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24gaXNFdmVuKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSxCTi5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24gaXNPZGQoKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSxCTi5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24gYW5kbG4obnVtKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZudW19LEJOLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbiBiaW5jbihiaXQpe2Fzc2VydCgibnVtYmVyIj09dHlwZW9mIGJpdCk7dmFyIHI9Yml0JTI2LHM9KGJpdC1yKS8yNixxPTE8PHI7aWYodGhpcy5sZW5ndGg8PXMpcmV0dXJuIHRoaXMuX2V4cGFuZChzKzEpLHRoaXMud29yZHNbc118PXEsdGhpcztmb3IodmFyIGNhcnJ5PXEsaT1zOzAhPT1jYXJyeSYmaTx0aGlzLmxlbmd0aDtpKyspe3ZhciB3PTB8dGhpcy53b3Jkc1tpXTtjYXJyeT0odys9Y2FycnkpPj4+MjYsdyY9NjcxMDg4NjMsdGhpcy53b3Jkc1tpXT13fXJldHVybiAwIT09Y2FycnkmJih0aGlzLndvcmRzW2ldPWNhcnJ5LHRoaXMubGVuZ3RoKyspLHRoaXN9LEJOLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24gaXNaZXJvKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEJOLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uIGNtcG4obnVtKXt2YXIgcmVzLG5lZ2F0aXZlPW51bTwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhbmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJm5lZ2F0aXZlKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXJlcz0xO2Vsc2V7bmVnYXRpdmUmJihudW09LW51bSksYXNzZXJ0KG51bTw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHc9MHx0aGlzLndvcmRzWzBdO3Jlcz13PT09bnVtPzA6dzxudW0/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcmVzOnJlc30sQk4ucHJvdG90eXBlLmNtcD1mdW5jdGlvbiBjbXAobnVtKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PW51bS5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PW51bS5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgcmVzPXRoaXMudWNtcChudW0pO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1yZXM6cmVzfSxCTi5wcm90b3R5cGUudWNtcD1mdW5jdGlvbiB1Y21wKG51bSl7aWYodGhpcy5sZW5ndGg+bnVtLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxudW0ubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgcmVzPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgYT0wfHRoaXMud29yZHNbaV0sYj0wfG51bS53b3Jkc1tpXTtpZihhIT09Yil7YTxiP3Jlcz0tMTphPmImJihyZXM9MSk7YnJlYWt9fXJldHVybiByZXN9LEJOLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24gZ3RuKG51bSl7cmV0dXJuIDE9PT10aGlzLmNtcG4obnVtKX0sQk4ucHJvdG90eXBlLmd0PWZ1bmN0aW9uIGd0KG51bSl7cmV0dXJuIDE9PT10aGlzLmNtcChudW0pfSxCTi5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbiBndGVuKG51bSl7cmV0dXJuIHRoaXMuY21wbihudW0pPj0wfSxCTi5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uIGd0ZShudW0pe3JldHVybiB0aGlzLmNtcChudW0pPj0wfSxCTi5wcm90b3R5cGUubHRuPWZ1bmN0aW9uIGx0bihudW0pe3JldHVybi0xPT09dGhpcy5jbXBuKG51bSl9LEJOLnByb3RvdHlwZS5sdD1mdW5jdGlvbiBsdChudW0pe3JldHVybi0xPT09dGhpcy5jbXAobnVtKX0sQk4ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24gbHRlbihudW0pe3JldHVybiB0aGlzLmNtcG4obnVtKTw9MH0sQk4ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbiBsdGUobnVtKXtyZXR1cm4gdGhpcy5jbXAobnVtKTw9MH0sQk4ucHJvdG90eXBlLmVxbj1mdW5jdGlvbiBlcW4obnVtKXtyZXR1cm4gMD09PXRoaXMuY21wbihudW0pfSxCTi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24gZXEobnVtKXtyZXR1cm4gMD09PXRoaXMuY21wKG51bSl9LEJOLnJlZD1mdW5jdGlvbiByZWQobnVtKXtyZXR1cm4gbmV3IFJlZChudW0pfSxCTi5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24gdG9SZWQoY3R4KXtyZXR1cm4gYXNzZXJ0KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGFzc2VydCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxjdHguY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChjdHgpfSxCTi5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbiBmcm9tUmVkKCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxCTi5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uIF9mb3JjZVJlZChjdHgpe3JldHVybiB0aGlzLnJlZD1jdHgsdGhpc30sQk4ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uIGZvcmNlUmVkKGN0eCl7cmV0dXJuIGFzc2VydCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChjdHgpfSxCTi5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uIHJlZEFkZChudW0pe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbiByZWRJQWRkKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbiByZWRTdWIobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24gcmVkSVN1YihudW0pe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24gcmVkU2hsKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24gcmVkTXVsKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsbnVtKSx0aGlzLnJlZC5tdWwodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbiByZWRJTXVsKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsbnVtKSx0aGlzLnJlZC5pbXVsKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbiByZWRTcXIoKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxCTi5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbiByZWRJU3FyKCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxCTi5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbiByZWRTcXJ0KCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxCTi5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbiByZWRJbnZtKCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxCTi5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uIHJlZE5lZygpe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEJOLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24gcmVkUG93KG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCYmIW51bS5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsbnVtKX07dmFyIHByaW1lcz17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIE1QcmltZShuYW1lLHApe3RoaXMubmFtZT1uYW1lLHRoaXMucD1uZXcgQk4ocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEJOKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBLMjU2KCl7TVByaW1lLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gUDIyNCgpe01QcmltZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIFAxOTIoKXtNUHJpbWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBQMjU1MTkoKXtNUHJpbWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBSZWQobSl7aWYoInN0cmluZyI9PXR5cGVvZiBtKXt2YXIgcHJpbWU9Qk4uX3ByaW1lKG0pO3RoaXMubT1wcmltZS5wLHRoaXMucHJpbWU9cHJpbWV9ZWxzZSBhc3NlcnQobS5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1tLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBNb250KG0pe1JlZC5jYWxsKHRoaXMsbSksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgQk4oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9TVByaW1lLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uIF90bXAoKXt2YXIgdG1wPW5ldyBCTihudWxsKTtyZXR1cm4gdG1wLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdG1wfSxNUHJpbWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24gaXJlZHVjZShudW0pe3ZhciBybGVuLHI9bnVtO2Rve3RoaXMuc3BsaXQocix0aGlzLnRtcCkscmxlbj0ocj0ocj10aGlzLmltdWxLKHIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUocmxlbj50aGlzLm4pO3ZhciBjbXA9cmxlbjx0aGlzLm4/LTE6ci51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1jbXA/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpjbXA+MD9yLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1yLnN0cmlwP3Iuc3RyaXAoKTpyLl9zdHJpcCgpLHJ9LE1QcmltZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24gc3BsaXQoaW5wdXQsb3V0KXtpbnB1dC5pdXNocm4odGhpcy5uLDAsb3V0KX0sTVByaW1lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbiBpbXVsSyhudW0pe3JldHVybiBudW0uaW11bCh0aGlzLmspfSxpbmhlcml0cyhLMjU2LE1QcmltZSksSzI1Ni5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24gc3BsaXQoaW5wdXQsb3V0cHV0KXtmb3IodmFyIG91dExlbj1NYXRoLm1pbihpbnB1dC5sZW5ndGgsOSksaT0wO2k8b3V0TGVuO2krKylvdXRwdXQud29yZHNbaV09aW5wdXQud29yZHNbaV07aWYob3V0cHV0Lmxlbmd0aD1vdXRMZW4saW5wdXQubGVuZ3RoPD05KXJldHVybiBpbnB1dC53b3Jkc1swXT0wLHZvaWQoaW5wdXQubGVuZ3RoPTEpO3ZhciBwcmV2PWlucHV0LndvcmRzWzldO2ZvcihvdXRwdXQud29yZHNbb3V0cHV0Lmxlbmd0aCsrXT00MTk0MzAzJnByZXYsaT0xMDtpPGlucHV0Lmxlbmd0aDtpKyspe3ZhciBuZXh0PTB8aW5wdXQud29yZHNbaV07aW5wdXQud29yZHNbaS0xMF09KDQxOTQzMDMmbmV4dCk8PDR8cHJldj4+PjIyLHByZXY9bmV4dH1wcmV2Pj4+PTIyLGlucHV0LndvcmRzW2ktMTBdPXByZXYsMD09PXByZXYmJmlucHV0Lmxlbmd0aD4xMD9pbnB1dC5sZW5ndGgtPTEwOmlucHV0Lmxlbmd0aC09OX0sSzI1Ni5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24gaW11bEsobnVtKXtudW0ud29yZHNbbnVtLmxlbmd0aF09MCxudW0ud29yZHNbbnVtLmxlbmd0aCsxXT0wLG51bS5sZW5ndGgrPTI7Zm9yKHZhciBsbz0wLGk9MDtpPG51bS5sZW5ndGg7aSsrKXt2YXIgdz0wfG51bS53b3Jkc1tpXTtsbys9OTc3KncsbnVtLndvcmRzW2ldPTY3MTA4ODYzJmxvLGxvPTY0KncrKGxvLzY3MTA4ODY0fDApfXJldHVybiAwPT09bnVtLndvcmRzW251bS5sZW5ndGgtMV0mJihudW0ubGVuZ3RoLS0sMD09PW51bS53b3Jkc1tudW0ubGVuZ3RoLTFdJiZudW0ubGVuZ3RoLS0pLG51bX0saW5oZXJpdHMoUDIyNCxNUHJpbWUpLGluaGVyaXRzKFAxOTIsTVByaW1lKSxpbmhlcml0cyhQMjU1MTksTVByaW1lKSxQMjU1MTkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uIGltdWxLKG51bSl7Zm9yKHZhciBjYXJyeT0wLGk9MDtpPG51bS5sZW5ndGg7aSsrKXt2YXIgaGk9MTkqKDB8bnVtLndvcmRzW2ldKStjYXJyeSxsbz02NzEwODg2MyZoaTtoaT4+Pj0yNixudW0ud29yZHNbaV09bG8sY2Fycnk9aGl9cmV0dXJuIDAhPT1jYXJyeSYmKG51bS53b3Jkc1tudW0ubGVuZ3RoKytdPWNhcnJ5KSxudW19LEJOLl9wcmltZT1mdW5jdGlvbiBwcmltZShuYW1lKXtpZihwcmltZXNbbmFtZV0pcmV0dXJuIHByaW1lc1tuYW1lXTt2YXIgcHJpbWU7aWYoImsyNTYiPT09bmFtZSlwcmltZT1uZXcgSzI1NjtlbHNlIGlmKCJwMjI0Ij09PW5hbWUpcHJpbWU9bmV3IFAyMjQ7ZWxzZSBpZigicDE5MiI9PT1uYW1lKXByaW1lPW5ldyBQMTkyO2Vsc2V7aWYoInAyNTUxOSIhPT1uYW1lKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK25hbWUpO3ByaW1lPW5ldyBQMjU1MTl9cmV0dXJuIHByaW1lc1tuYW1lXT1wcmltZSxwcmltZX0sUmVkLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbiBfdmVyaWZ5MShhKXthc3NlcnQoMD09PWEubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYXNzZXJ0KGEucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFJlZC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24gX3ZlcmlmeTIoYSxiKXthc3NlcnQoMD09PShhLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGFzc2VydChhLnJlZCYmYS5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxSZWQucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24gaW1vZChhKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYSkuX2ZvcmNlUmVkKHRoaXMpOmEudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sUmVkLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24gbmVnKGEpe3JldHVybiBhLmlzWmVybygpP2EuY2xvbmUoKTp0aGlzLm0uc3ViKGEpLl9mb3JjZVJlZCh0aGlzKX0sUmVkLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24gYWRkKGEsYil7dGhpcy5fdmVyaWZ5MihhLGIpO3ZhciByZXM9YS5hZGQoYik7cmV0dXJuIHJlcy5jbXAodGhpcy5tKT49MCYmcmVzLmlzdWIodGhpcy5tKSxyZXMuX2ZvcmNlUmVkKHRoaXMpfSxSZWQucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24gaWFkZChhLGIpe3RoaXMuX3ZlcmlmeTIoYSxiKTt2YXIgcmVzPWEuaWFkZChiKTtyZXR1cm4gcmVzLmNtcCh0aGlzLm0pPj0wJiZyZXMuaXN1Yih0aGlzLm0pLHJlc30sUmVkLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24gc3ViKGEsYil7dGhpcy5fdmVyaWZ5MihhLGIpO3ZhciByZXM9YS5zdWIoYik7cmV0dXJuIHJlcy5jbXBuKDApPDAmJnJlcy5pYWRkKHRoaXMubSkscmVzLl9mb3JjZVJlZCh0aGlzKX0sUmVkLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uIGlzdWIoYSxiKXt0aGlzLl92ZXJpZnkyKGEsYik7dmFyIHJlcz1hLmlzdWIoYik7cmV0dXJuIHJlcy5jbXBuKDApPDAmJnJlcy5pYWRkKHRoaXMubSkscmVzfSxSZWQucHJvdG90eXBlLnNobD1mdW5jdGlvbiBzaGwoYSxudW0pe3JldHVybiB0aGlzLl92ZXJpZnkxKGEpLHRoaXMuaW1vZChhLnVzaGxuKG51bSkpfSxSZWQucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24gaW11bChhLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKGEsYiksdGhpcy5pbW9kKGEuaW11bChiKSl9LFJlZC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uIG11bChhLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKGEsYiksdGhpcy5pbW9kKGEubXVsKGIpKX0sUmVkLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uIGlzcXIoYSl7cmV0dXJuIHRoaXMuaW11bChhLGEuY2xvbmUoKSl9LFJlZC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uIHNxcihhKXtyZXR1cm4gdGhpcy5tdWwoYSxhKX0sUmVkLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uIHNxcnQoYSl7aWYoYS5pc1plcm8oKSlyZXR1cm4gYS5jbG9uZSgpO3ZhciBtb2QzPXRoaXMubS5hbmRsbigzKTtpZihhc3NlcnQobW9kMyUyPT0xKSwzPT09bW9kMyl7dmFyIHBvdz10aGlzLm0uYWRkKG5ldyBCTigxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhhLHBvdyl9Zm9yKHZhciBxPXRoaXMubS5zdWJuKDEpLHM9MDshcS5pc1plcm8oKSYmMD09PXEuYW5kbG4oMSk7KXMrKyxxLml1c2hybigxKTthc3NlcnQoIXEuaXNaZXJvKCkpO3ZhciBvbmU9bmV3IEJOKDEpLnRvUmVkKHRoaXMpLG5PbmU9b25lLnJlZE5lZygpLGxwb3c9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHo9dGhpcy5tLmJpdExlbmd0aCgpO2Zvcih6PW5ldyBCTigyKnoqeikudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHosbHBvdykuY21wKG5PbmUpOyl6LnJlZElBZGQobk9uZSk7Zm9yKHZhciBjPXRoaXMucG93KHoscSkscj10aGlzLnBvdyhhLHEuYWRkbigxKS5pdXNocm4oMSkpLHQ9dGhpcy5wb3coYSxxKSxtPXM7MCE9PXQuY21wKG9uZSk7KXtmb3IodmFyIHRtcD10LGk9MDswIT09dG1wLmNtcChvbmUpO2krKyl0bXA9dG1wLnJlZFNxcigpO2Fzc2VydChpPG0pO3ZhciBiPXRoaXMucG93KGMsbmV3IEJOKDEpLml1c2hsbihtLWktMSkpO3I9ci5yZWRNdWwoYiksYz1iLnJlZFNxcigpLHQ9dC5yZWRNdWwoYyksbT1pfXJldHVybiByfSxSZWQucHJvdG90eXBlLmludm09ZnVuY3Rpb24gaW52bShhKXt2YXIgaW52PWEuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1pbnYubmVnYXRpdmU/KGludi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChpbnYpLnJlZE5lZygpKTp0aGlzLmltb2QoaW52KX0sUmVkLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24gcG93KGEsbnVtKXtpZihudW0uaXNaZXJvKCkpcmV0dXJuIG5ldyBCTigxKS50b1JlZCh0aGlzKTtpZigwPT09bnVtLmNtcG4oMSkpcmV0dXJuIGEuY2xvbmUoKTt2YXIgd25kPW5ldyBBcnJheSgxNik7d25kWzBdPW5ldyBCTigxKS50b1JlZCh0aGlzKSx3bmRbMV09YTtmb3IodmFyIGk9MjtpPHduZC5sZW5ndGg7aSsrKXduZFtpXT10aGlzLm11bCh3bmRbaS0xXSxhKTt2YXIgcmVzPXduZFswXSxjdXJyZW50PTAsY3VycmVudExlbj0wLHN0YXJ0PW51bS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXN0YXJ0JiYoc3RhcnQ9MjYpLGk9bnVtLmxlbmd0aC0xO2k+PTA7aS0tKXtmb3IodmFyIHdvcmQ9bnVtLndvcmRzW2ldLGo9c3RhcnQtMTtqPj0wO2otLSl7dmFyIGJpdD13b3JkPj5qJjE7cmVzIT09d25kWzBdJiYocmVzPXRoaXMuc3FyKHJlcykpLDAhPT1iaXR8fDAhPT1jdXJyZW50PyhjdXJyZW50PDw9MSxjdXJyZW50fD1iaXQsKDQ9PT0rK2N1cnJlbnRMZW58fDA9PT1pJiYwPT09aikmJihyZXM9dGhpcy5tdWwocmVzLHduZFtjdXJyZW50XSksY3VycmVudExlbj0wLGN1cnJlbnQ9MCkpOmN1cnJlbnRMZW49MH1zdGFydD0yNn1yZXR1cm4gcmVzfSxSZWQucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbiBjb252ZXJ0VG8obnVtKXt2YXIgcj1udW0udW1vZCh0aGlzLm0pO3JldHVybiByPT09bnVtP3IuY2xvbmUoKTpyfSxSZWQucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uIGNvbnZlcnRGcm9tKG51bSl7dmFyIHJlcz1udW0uY2xvbmUoKTtyZXR1cm4gcmVzLnJlZD1udWxsLHJlc30sQk4ubW9udD1mdW5jdGlvbiBtb250KG51bSl7cmV0dXJuIG5ldyBNb250KG51bSl9LGluaGVyaXRzKE1vbnQsUmVkKSxNb250LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24gY29udmVydFRvKG51bSl7cmV0dXJuIHRoaXMuaW1vZChudW0udXNobG4odGhpcy5zaGlmdCkpfSxNb250LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbiBjb252ZXJ0RnJvbShudW0pe3ZhciByPXRoaXMuaW1vZChudW0ubXVsKHRoaXMucmludikpO3JldHVybiByLnJlZD1udWxsLHJ9LE1vbnQucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24gaW11bChhLGIpe2lmKGEuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIGEud29yZHNbMF09MCxhLmxlbmd0aD0xLGE7dmFyIHQ9YS5pbXVsKGIpLGM9dC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksdT10LmlzdWIoYykuaXVzaHJuKHRoaXMuc2hpZnQpLHJlcz11O3JldHVybiB1LmNtcCh0aGlzLm0pPj0wP3Jlcz11LmlzdWIodGhpcy5tKTp1LmNtcG4oMCk8MCYmKHJlcz11LmlhZGQodGhpcy5tKSkscmVzLl9mb3JjZVJlZCh0aGlzKX0sTW9udC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uIG11bChhLGIpe2lmKGEuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyBCTigwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHQ9YS5tdWwoYiksYz10Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSx1PXQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCkscmVzPXU7cmV0dXJuIHUuY21wKHRoaXMubSk+PTA/cmVzPXUuaXN1Yih0aGlzLm0pOnUuY21wbigwKTwwJiYocmVzPXUuaWFkZCh0aGlzLm0pKSxyZXMuX2ZvcmNlUmVkKHRoaXMpfSxNb250LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uIGludm0oYSl7cmV0dXJuIHRoaXMuaW1vZChhLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0obW9kdWxlPV9fd2VicGFja19yZXF1aXJlX18ubm1kKG1vZHVsZSksdGhpcyl9LCIuLi8uLi9ub2RlX21vZHVsZXMvY3JlYXRlLWhhc2gvYnJvd3Nlci5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiksTUQ1PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9tZDUuanMvaW5kZXguanMiKSxSSVBFTUQxNjA9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JpcGVtZDE2MC9pbmRleC5qcyIpLHNoYT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2hhLmpzL2luZGV4LmpzIiksQmFzZT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY2lwaGVyLWJhc2UvaW5kZXguanMiKTtmdW5jdGlvbiBIYXNoKGhhc2gpe0Jhc2UuY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPWhhc2h9aW5oZXJpdHMoSGFzaCxCYXNlKSxIYXNoLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGRhdGEpe3RoaXMuX2hhc2gudXBkYXRlKGRhdGEpfSxIYXNoLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGFzaC5kaWdlc3QoKX0sbW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gY3JlYXRlSGFzaChhbGcpe3JldHVybiJtZDUiPT09KGFsZz1hbGcudG9Mb3dlckNhc2UoKSk/bmV3IE1ENToicm1kMTYwIj09PWFsZ3x8InJpcGVtZDE2MCI9PT1hbGc/bmV3IFJJUEVNRDE2MDpuZXcgSGFzaChzaGEoYWxnKSl9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2NyZWF0ZS1oYXNoL21kNS5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgTUQ1PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9tZDUuanMvaW5kZXguanMiKTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihidWZmZXIpe3JldHVybihuZXcgTUQ1KS51cGRhdGUoYnVmZmVyKS5kaWdlc3QoKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvY3JlYXRlLWhtYWMvYnJvd3Nlci5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiksTGVnYWN5PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jcmVhdGUtaG1hYy9sZWdhY3kuanMiKSxCYXNlPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jaXBoZXItYmFzZS9pbmRleC5qcyIpLEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXIsbWQ1PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jcmVhdGUtaGFzaC9tZDUuanMiKSxSSVBFTUQxNjA9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JpcGVtZDE2MC9pbmRleC5qcyIpLHNoYT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2hhLmpzL2luZGV4LmpzIiksWkVST1M9QnVmZmVyLmFsbG9jKDEyOCk7ZnVuY3Rpb24gSG1hYyhhbGcsa2V5KXtCYXNlLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBrZXkmJihrZXk9QnVmZmVyLmZyb20oa2V5KSk7dmFyIGJsb2Nrc2l6ZT0ic2hhNTEyIj09PWFsZ3x8InNoYTM4NCI9PT1hbGc/MTI4OjY0Oyh0aGlzLl9hbGc9YWxnLHRoaXMuX2tleT1rZXksa2V5Lmxlbmd0aD5ibG9ja3NpemUpP2tleT0oInJtZDE2MCI9PT1hbGc/bmV3IFJJUEVNRDE2MDpzaGEoYWxnKSkudXBkYXRlKGtleSkuZGlnZXN0KCk6a2V5Lmxlbmd0aDxibG9ja3NpemUmJihrZXk9QnVmZmVyLmNvbmNhdChba2V5LFpFUk9TXSxibG9ja3NpemUpKTtmb3IodmFyIGlwYWQ9dGhpcy5faXBhZD1CdWZmZXIuYWxsb2NVbnNhZmUoYmxvY2tzaXplKSxvcGFkPXRoaXMuX29wYWQ9QnVmZmVyLmFsbG9jVW5zYWZlKGJsb2Nrc2l6ZSksaT0wO2k8YmxvY2tzaXplO2krKylpcGFkW2ldPTU0XmtleVtpXSxvcGFkW2ldPTkyXmtleVtpXTt0aGlzLl9oYXNoPSJybWQxNjAiPT09YWxnP25ldyBSSVBFTUQxNjA6c2hhKGFsZyksdGhpcy5faGFzaC51cGRhdGUoaXBhZCl9aW5oZXJpdHMoSG1hYyxCYXNlKSxIbWFjLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGRhdGEpe3RoaXMuX2hhc2gudXBkYXRlKGRhdGEpfSxIbWFjLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgaD10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1kMTYwIj09PXRoaXMuX2FsZz9uZXcgUklQRU1EMTYwOnNoYSh0aGlzLl9hbGcpKS51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKGgpLmRpZ2VzdCgpfSxtb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBjcmVhdGVIbWFjKGFsZyxrZXkpe3JldHVybiJybWQxNjAiPT09KGFsZz1hbGcudG9Mb3dlckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09YWxnP25ldyBIbWFjKCJybWQxNjAiLGtleSk6Im1kNSI9PT1hbGc/bmV3IExlZ2FjeShtZDUsa2V5KTpuZXcgSG1hYyhhbGcsa2V5KX19LCIuLi8uLi9ub2RlX21vZHVsZXMvY3JlYXRlLWhtYWMvbGVnYWN5LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgaW5oZXJpdHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKSxCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLEJhc2U9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NpcGhlci1iYXNlL2luZGV4LmpzIiksWkVST1M9QnVmZmVyLmFsbG9jKDEyOCk7ZnVuY3Rpb24gSG1hYyhhbGcsa2V5KXtCYXNlLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBrZXkmJihrZXk9QnVmZmVyLmZyb20oa2V5KSksdGhpcy5fYWxnPWFsZyx0aGlzLl9rZXk9a2V5LGtleS5sZW5ndGg+NjQ/a2V5PWFsZyhrZXkpOmtleS5sZW5ndGg8NjQmJihrZXk9QnVmZmVyLmNvbmNhdChba2V5LFpFUk9TXSw2NCkpO2Zvcih2YXIgaXBhZD10aGlzLl9pcGFkPUJ1ZmZlci5hbGxvY1Vuc2FmZSg2NCksb3BhZD10aGlzLl9vcGFkPUJ1ZmZlci5hbGxvY1Vuc2FmZSg2NCksaT0wO2k8NjQ7aSsrKWlwYWRbaV09NTRea2V5W2ldLG9wYWRbaV09OTJea2V5W2ldO3RoaXMuX2hhc2g9W2lwYWRdfWluaGVyaXRzKEhtYWMsQmFzZSksSG1hYy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihkYXRhKXt0aGlzLl9oYXNoLnB1c2goZGF0YSl9LEhtYWMucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBoPXRoaXMuX2FsZyhCdWZmZXIuY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1cm4gdGhpcy5fYWxnKEJ1ZmZlci5jb25jYXQoW3RoaXMuX29wYWQsaF0pKX0sbW9kdWxlLmV4cG9ydHM9SG1hY30sIi4uLy4uL25vZGVfbW9kdWxlcy9jcnlwdG8tYnJvd3NlcmlmeS9pbmRleC5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7ZXhwb3J0cy5yYW5kb21CeXRlcz1leHBvcnRzLnJuZz1leHBvcnRzLnBzZXVkb1JhbmRvbUJ5dGVzPWV4cG9ydHMucHJuZz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcmFuZG9tYnl0ZXMvYnJvd3Nlci5qcyIpLGV4cG9ydHMuY3JlYXRlSGFzaD1leHBvcnRzLkhhc2g9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NyZWF0ZS1oYXNoL2Jyb3dzZXIuanMiKSxleHBvcnRzLmNyZWF0ZUhtYWM9ZXhwb3J0cy5IbWFjPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jcmVhdGUtaG1hYy9icm93c2VyLmpzIik7dmFyIGFsZ29zPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYWxnb3MuanMiKSxhbGdvS2V5cz1PYmplY3Qua2V5cyhhbGdvcyksaGFzaGVzPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdChhbGdvS2V5cyk7ZXhwb3J0cy5nZXRIYXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gaGFzaGVzfTt2YXIgcD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcGJrZGYyL2Jyb3dzZXIuanMiKTtleHBvcnRzLnBia2RmMj1wLnBia2RmMixleHBvcnRzLnBia2RmMlN5bmM9cC5wYmtkZjJTeW5jO3ZhciBhZXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktY2lwaGVyL2Jyb3dzZXIuanMiKTtleHBvcnRzLkNpcGhlcj1hZXMuQ2lwaGVyLGV4cG9ydHMuY3JlYXRlQ2lwaGVyPWFlcy5jcmVhdGVDaXBoZXIsZXhwb3J0cy5DaXBoZXJpdj1hZXMuQ2lwaGVyaXYsZXhwb3J0cy5jcmVhdGVDaXBoZXJpdj1hZXMuY3JlYXRlQ2lwaGVyaXYsZXhwb3J0cy5EZWNpcGhlcj1hZXMuRGVjaXBoZXIsZXhwb3J0cy5jcmVhdGVEZWNpcGhlcj1hZXMuY3JlYXRlRGVjaXBoZXIsZXhwb3J0cy5EZWNpcGhlcml2PWFlcy5EZWNpcGhlcml2LGV4cG9ydHMuY3JlYXRlRGVjaXBoZXJpdj1hZXMuY3JlYXRlRGVjaXBoZXJpdixleHBvcnRzLmdldENpcGhlcnM9YWVzLmdldENpcGhlcnMsZXhwb3J0cy5saXN0Q2lwaGVycz1hZXMubGlzdENpcGhlcnM7dmFyIGRoPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9kaWZmaWUtaGVsbG1hbi9icm93c2VyLmpzIik7ZXhwb3J0cy5EaWZmaWVIZWxsbWFuR3JvdXA9ZGguRGlmZmllSGVsbG1hbkdyb3VwLGV4cG9ydHMuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPWRoLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxleHBvcnRzLmdldERpZmZpZUhlbGxtYW49ZGguZ2V0RGlmZmllSGVsbG1hbixleHBvcnRzLmNyZWF0ZURpZmZpZUhlbGxtYW49ZGguY3JlYXRlRGlmZmllSGVsbG1hbixleHBvcnRzLkRpZmZpZUhlbGxtYW49ZGguRGlmZmllSGVsbG1hbjt2YXIgc2lnbj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2Jyb3dzZXIvaW5kZXguanMiKTtleHBvcnRzLmNyZWF0ZVNpZ249c2lnbi5jcmVhdGVTaWduLGV4cG9ydHMuU2lnbj1zaWduLlNpZ24sZXhwb3J0cy5jcmVhdGVWZXJpZnk9c2lnbi5jcmVhdGVWZXJpZnksZXhwb3J0cy5WZXJpZnk9c2lnbi5WZXJpZnksZXhwb3J0cy5jcmVhdGVFQ0RIPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jcmVhdGUtZWNkaC9icm93c2VyLmpzIik7dmFyIHB1YmxpY0VuY3J5cHQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3B1YmxpYy1lbmNyeXB0L2Jyb3dzZXIuanMiKTtleHBvcnRzLnB1YmxpY0VuY3J5cHQ9cHVibGljRW5jcnlwdC5wdWJsaWNFbmNyeXB0LGV4cG9ydHMucHJpdmF0ZUVuY3J5cHQ9cHVibGljRW5jcnlwdC5wcml2YXRlRW5jcnlwdCxleHBvcnRzLnB1YmxpY0RlY3J5cHQ9cHVibGljRW5jcnlwdC5wdWJsaWNEZWNyeXB0LGV4cG9ydHMucHJpdmF0ZURlY3J5cHQ9cHVibGljRW5jcnlwdC5wcml2YXRlRGVjcnlwdDt2YXIgcmY9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JhbmRvbWZpbGwvYnJvd3Nlci5qcyIpO2V4cG9ydHMucmFuZG9tRmlsbD1yZi5yYW5kb21GaWxsLGV4cG9ydHMucmFuZG9tRmlsbFN5bmM9cmYucmFuZG9tRmlsbFN5bmMsZXhwb3J0cy5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigic29ycnksIGNyZWF0ZUNyZWRlbnRpYWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbndlIGFjY2VwdCBwdWxsIHJlcXVlc3RzXG5odHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSIpfSxleHBvcnRzLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LCIuLi8uLi9ub2RlX21vZHVsZXMvZGVmaW5lLWRhdGEtcHJvcGVydHkvaW5kZXguanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciAkZGVmaW5lUHJvcGVydHk9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWRlZmluZS1wcm9wZXJ0eS9pbmRleC5qcyIpLCRTeW50YXhFcnJvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3N5bnRheC5qcyIpLCRUeXBlRXJyb3I9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy90eXBlLmpzIiksZ29wZD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZ29wZC9pbmRleC5qcyIpO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGRlZmluZURhdGFQcm9wZXJ0eShvYmoscHJvcGVydHksdmFsdWUpe2lmKCFvYmp8fCJvYmplY3QiIT10eXBlb2Ygb2JqJiYiZnVuY3Rpb24iIT10eXBlb2Ygb2JqKXRocm93IG5ldyAkVHlwZUVycm9yKCJgb2JqYCBtdXN0IGJlIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uYCIpO2lmKCJzdHJpbmciIT10eXBlb2YgcHJvcGVydHkmJiJzeW1ib2wiIT10eXBlb2YgcHJvcGVydHkpdGhyb3cgbmV3ICRUeXBlRXJyb3IoImBwcm9wZXJ0eWAgbXVzdCBiZSBhIHN0cmluZyBvciBhIHN5bWJvbGAiKTtpZihhcmd1bWVudHMubGVuZ3RoPjMmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1szXSYmbnVsbCE9PWFyZ3VtZW50c1szXSl0aHJvdyBuZXcgJFR5cGVFcnJvcigiYG5vbkVudW1lcmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NCYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzRdJiZudWxsIT09YXJndW1lbnRzWzRdKXRocm93IG5ldyAkVHlwZUVycm9yKCJgbm9uV3JpdGFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NSYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzVdJiZudWxsIT09YXJndW1lbnRzWzVdKXRocm93IG5ldyAkVHlwZUVycm9yKCJgbm9uQ29uZmlndXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjYmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s2XSl0aHJvdyBuZXcgJFR5cGVFcnJvcigiYGxvb3NlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIik7dmFyIG5vbkVudW1lcmFibGU9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTpudWxsLG5vbldyaXRhYmxlPWFyZ3VtZW50cy5sZW5ndGg+ND9hcmd1bWVudHNbNF06bnVsbCxub25Db25maWd1cmFibGU9YXJndW1lbnRzLmxlbmd0aD41P2FyZ3VtZW50c1s1XTpudWxsLGxvb3NlPWFyZ3VtZW50cy5sZW5ndGg+NiYmYXJndW1lbnRzWzZdLGRlc2M9ISFnb3BkJiZnb3BkKG9iaixwcm9wZXJ0eSk7aWYoJGRlZmluZVByb3BlcnR5KSRkZWZpbmVQcm9wZXJ0eShvYmoscHJvcGVydHkse2NvbmZpZ3VyYWJsZTpudWxsPT09bm9uQ29uZmlndXJhYmxlJiZkZXNjP2Rlc2MuY29uZmlndXJhYmxlOiFub25Db25maWd1cmFibGUsZW51bWVyYWJsZTpudWxsPT09bm9uRW51bWVyYWJsZSYmZGVzYz9kZXNjLmVudW1lcmFibGU6IW5vbkVudW1lcmFibGUsdmFsdWUsd3JpdGFibGU6bnVsbD09PW5vbldyaXRhYmxlJiZkZXNjP2Rlc2Mud3JpdGFibGU6IW5vbldyaXRhYmxlfSk7ZWxzZXtpZighbG9vc2UmJihub25FbnVtZXJhYmxlfHxub25Xcml0YWJsZXx8bm9uQ29uZmlndXJhYmxlKSl0aHJvdyBuZXcgJFN5bnRheEVycm9yKCJUaGlzIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgZGVmaW5pbmcgYSBwcm9wZXJ0eSBhcyBub24tY29uZmlndXJhYmxlLCBub24td3JpdGFibGUsIG9yIG5vbi1lbnVtZXJhYmxlLiIpO29ialtwcm9wZXJ0eV09dmFsdWV9fX0sIi4uLy4uL25vZGVfbW9kdWxlcy9kZWZpbmUtcHJvcGVydGllcy9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGtleXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2luZGV4LmpzIiksaGFzU3ltYm9scz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgiZm9vIiksdG9TdHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxjb25jYXQ9QXJyYXkucHJvdG90eXBlLmNvbmNhdCxkZWZpbmVEYXRhUHJvcGVydHk9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2RlZmluZS1kYXRhLXByb3BlcnR5L2luZGV4LmpzIiksc3VwcG9ydHNEZXNjcmlwdG9ycz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzLXByb3BlcnR5LWRlc2NyaXB0b3JzL2luZGV4LmpzIikoKSxkZWZpbmVQcm9wZXJ0eT1mdW5jdGlvbihvYmplY3QsbmFtZSx2YWx1ZSxwcmVkaWNhdGUpe2lmKG5hbWUgaW4gb2JqZWN0KWlmKCEwPT09cHJlZGljYXRlKXtpZihvYmplY3RbbmFtZV09PT12YWx1ZSlyZXR1cm59ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YoZm49cHJlZGljYXRlKXx8IltvYmplY3QgRnVuY3Rpb25dIiE9PXRvU3RyLmNhbGwoZm4pfHwhcHJlZGljYXRlKCkpcmV0dXJuO3ZhciBmbjtzdXBwb3J0c0Rlc2NyaXB0b3JzP2RlZmluZURhdGFQcm9wZXJ0eShvYmplY3QsbmFtZSx2YWx1ZSwhMCk6ZGVmaW5lRGF0YVByb3BlcnR5KG9iamVjdCxuYW1lLHZhbHVlKX0sZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihvYmplY3QsbWFwKXt2YXIgcHJlZGljYXRlcz1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnt9LHByb3BzPWtleXMobWFwKTtoYXNTeW1ib2xzJiYocHJvcHM9Y29uY2F0LmNhbGwocHJvcHMsT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKSk7Zm9yKHZhciBpPTA7aTxwcm9wcy5sZW5ndGg7aSs9MSlkZWZpbmVQcm9wZXJ0eShvYmplY3QscHJvcHNbaV0sbWFwW3Byb3BzW2ldXSxwcmVkaWNhdGVzW3Byb3BzW2ldXSl9O2RlZmluZVByb3BlcnRpZXMuc3VwcG9ydHNEZXNjcmlwdG9ycz0hIXN1cHBvcnRzRGVzY3JpcHRvcnMsbW9kdWxlLmV4cG9ydHM9ZGVmaW5lUHJvcGVydGllc30sIi4uLy4uL25vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7ZXhwb3J0cy51dGlscz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvdXRpbHMuanMiKSxleHBvcnRzLkNpcGhlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvY2lwaGVyLmpzIiksZXhwb3J0cy5ERVM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Rlcy5qcy9saWIvZGVzL2Rlcy5qcyIpLGV4cG9ydHMuQ0JDPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy9jYmMuanMiKSxleHBvcnRzLkVERT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvZWRlLmpzIil9LCIuLi8uLi9ub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvY2JjLmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgYXNzZXJ0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9taW5pbWFsaXN0aWMtYXNzZXJ0L2luZGV4LmpzIiksaW5oZXJpdHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKSxwcm90bz17fTtmdW5jdGlvbiBDQkNTdGF0ZShpdil7YXNzZXJ0LmVxdWFsKGl2Lmxlbmd0aCw4LCJJbnZhbGlkIElWIGxlbmd0aCIpLHRoaXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2YXIgaT0wO2k8dGhpcy5pdi5sZW5ndGg7aSsrKXRoaXMuaXZbaV09aXZbaV19ZXhwb3J0cy5pbnN0YW50aWF0ZT1mdW5jdGlvbiBpbnN0YW50aWF0ZShCYXNlKXtmdW5jdGlvbiBDQkMob3B0aW9ucyl7QmFzZS5jYWxsKHRoaXMsb3B0aW9ucyksdGhpcy5fY2JjSW5pdCgpfWluaGVyaXRzKENCQyxCYXNlKTtmb3IodmFyIGtleXM9T2JqZWN0LmtleXMocHJvdG8pLGk9MDtpPGtleXMubGVuZ3RoO2krKyl7dmFyIGtleT1rZXlzW2ldO0NCQy5wcm90b3R5cGVba2V5XT1wcm90b1trZXldfXJldHVybiBDQkMuY3JlYXRlPWZ1bmN0aW9uIGNyZWF0ZShvcHRpb25zKXtyZXR1cm4gbmV3IENCQyhvcHRpb25zKX0sQ0JDfSxwcm90by5fY2JjSW5pdD1mdW5jdGlvbiBfY2JjSW5pdCgpe3ZhciBzdGF0ZT1uZXcgQ0JDU3RhdGUodGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0ZT1zdGF0ZX0scHJvdG8uX3VwZGF0ZT1mdW5jdGlvbiBfdXBkYXRlKGlucCxpbk9mZixvdXQsb3V0T2ZmKXt2YXIgc3RhdGU9dGhpcy5fY2JjU3RhdGUsc3VwZXJQcm90bz10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsaXY9c3RhdGUuaXY7aWYoImVuY3J5cHQiPT09dGhpcy50eXBlKXtmb3IodmFyIGk9MDtpPHRoaXMuYmxvY2tTaXplO2krKylpdltpXV49aW5wW2luT2ZmK2ldO3N1cGVyUHJvdG8uX3VwZGF0ZS5jYWxsKHRoaXMsaXYsMCxvdXQsb3V0T2ZmKTtmb3IoaT0wO2k8dGhpcy5ibG9ja1NpemU7aSsrKWl2W2ldPW91dFtvdXRPZmYraV19ZWxzZXtzdXBlclByb3RvLl91cGRhdGUuY2FsbCh0aGlzLGlucCxpbk9mZixvdXQsb3V0T2ZmKTtmb3IoaT0wO2k8dGhpcy5ibG9ja1NpemU7aSsrKW91dFtvdXRPZmYraV1ePWl2W2ldO2ZvcihpPTA7aTx0aGlzLmJsb2NrU2l6ZTtpKyspaXZbaV09aW5wW2luT2ZmK2ldfX19LCIuLi8uLi9ub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvY2lwaGVyLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgYXNzZXJ0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9taW5pbWFsaXN0aWMtYXNzZXJ0L2luZGV4LmpzIik7ZnVuY3Rpb24gQ2lwaGVyKG9wdGlvbnMpe3RoaXMub3B0aW9ucz1vcHRpb25zLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPSExIT09b3B0aW9ucy5wYWRkaW5nfW1vZHVsZS5leHBvcnRzPUNpcGhlcixDaXBoZXIucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uIF9pbml0KCl7fSxDaXBoZXIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbiB1cGRhdGUoZGF0YSl7cmV0dXJuIDA9PT1kYXRhLmxlbmd0aD9bXToiZGVjcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdChkYXRhKTp0aGlzLl91cGRhdGVFbmNyeXB0KGRhdGEpfSxDaXBoZXIucHJvdG90eXBlLl9idWZmZXI9ZnVuY3Rpb24gX2J1ZmZlcihkYXRhLG9mZil7Zm9yKHZhciBtaW49TWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoLXRoaXMuYnVmZmVyT2ZmLGRhdGEubGVuZ3RoLW9mZiksaT0wO2k8bWluO2krKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZitpXT1kYXRhW29mZitpXTtyZXR1cm4gdGhpcy5idWZmZXJPZmYrPW1pbixtaW59LENpcGhlci5wcm90b3R5cGUuX2ZsdXNoQnVmZmVyPWZ1bmN0aW9uIF9mbHVzaEJ1ZmZlcihvdXQsb2ZmKXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsb3V0LG9mZiksdGhpcy5idWZmZXJPZmY9MCx0aGlzLmJsb2NrU2l6ZX0sQ2lwaGVyLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbiBfdXBkYXRlRW5jcnlwdChkYXRhKXt2YXIgaW5wdXRPZmY9MCxvdXRwdXRPZmY9MCxjb3VudD0odGhpcy5idWZmZXJPZmYrZGF0YS5sZW5ndGgpL3RoaXMuYmxvY2tTaXplfDAsb3V0PW5ldyBBcnJheShjb3VudCp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRoaXMuYnVmZmVyT2ZmJiYoaW5wdXRPZmYrPXRoaXMuX2J1ZmZlcihkYXRhLGlucHV0T2ZmKSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKG91dHB1dE9mZis9dGhpcy5fZmx1c2hCdWZmZXIob3V0LG91dHB1dE9mZikpKTtmb3IodmFyIG1heD1kYXRhLmxlbmd0aC0oZGF0YS5sZW5ndGgtaW5wdXRPZmYpJXRoaXMuYmxvY2tTaXplO2lucHV0T2ZmPG1heDtpbnB1dE9mZis9dGhpcy5ibG9ja1NpemUpdGhpcy5fdXBkYXRlKGRhdGEsaW5wdXRPZmYsb3V0LG91dHB1dE9mZiksb3V0cHV0T2ZmKz10aGlzLmJsb2NrU2l6ZTtmb3IoO2lucHV0T2ZmPGRhdGEubGVuZ3RoO2lucHV0T2ZmKyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09ZGF0YVtpbnB1dE9mZl07cmV0dXJuIG91dH0sQ2lwaGVyLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbiBfdXBkYXRlRGVjcnlwdChkYXRhKXtmb3IodmFyIGlucHV0T2ZmPTAsb3V0cHV0T2ZmPTAsY291bnQ9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitkYXRhLmxlbmd0aCkvdGhpcy5ibG9ja1NpemUpLTEsb3V0PW5ldyBBcnJheShjb3VudCp0aGlzLmJsb2NrU2l6ZSk7Y291bnQ+MDtjb3VudC0tKWlucHV0T2ZmKz10aGlzLl9idWZmZXIoZGF0YSxpbnB1dE9mZiksb3V0cHV0T2ZmKz10aGlzLl9mbHVzaEJ1ZmZlcihvdXQsb3V0cHV0T2ZmKTtyZXR1cm4gaW5wdXRPZmYrPXRoaXMuX2J1ZmZlcihkYXRhLGlucHV0T2ZmKSxvdXR9LENpcGhlci5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24gZmluYWwoYnVmZmVyKXt2YXIgZmlyc3QsbGFzdDtyZXR1cm4gYnVmZmVyJiYoZmlyc3Q9dGhpcy51cGRhdGUoYnVmZmVyKSksbGFzdD0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksZmlyc3Q/Zmlyc3QuY29uY2F0KGxhc3QpOmxhc3R9LENpcGhlci5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbiBfcGFkKGJ1ZmZlcixvZmYpe2lmKDA9PT1vZmYpcmV0dXJuITE7Zm9yKDtvZmY8YnVmZmVyLmxlbmd0aDspYnVmZmVyW29mZisrXT0wO3JldHVybiEwfSxDaXBoZXIucHJvdG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24gX2ZpbmFsRW5jcnlwdCgpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZmZXJPZmYpKXJldHVybltdO3ZhciBvdXQ9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsb3V0LDApLG91dH0sQ2lwaGVyLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24gX3VucGFkKGJ1ZmZlcil7cmV0dXJuIGJ1ZmZlcn0sQ2lwaGVyLnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9uIF9maW5hbERlY3J5cHQoKXthc3NlcnQuZXF1YWwodGhpcy5idWZmZXJPZmYsdGhpcy5ibG9ja1NpemUsIk5vdCBlbm91Z2ggZGF0YSB0byBkZWNyeXB0Iik7dmFyIG91dD1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihvdXQsMCksdGhpcy5fdW5wYWQob3V0KX19LCIuLi8uLi9ub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvZGVzLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgYXNzZXJ0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9taW5pbWFsaXN0aWMtYXNzZXJ0L2luZGV4LmpzIiksaW5oZXJpdHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKSx1dGlscz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvdXRpbHMuanMiKSxDaXBoZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Rlcy5qcy9saWIvZGVzL2NpcGhlci5qcyIpO2Z1bmN0aW9uIERFU1N0YXRlKCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIERFUyhvcHRpb25zKXtDaXBoZXIuY2FsbCh0aGlzLG9wdGlvbnMpO3ZhciBzdGF0ZT1uZXcgREVTU3RhdGU7dGhpcy5fZGVzU3RhdGU9c3RhdGUsdGhpcy5kZXJpdmVLZXlzKHN0YXRlLG9wdGlvbnMua2V5KX1pbmhlcml0cyhERVMsQ2lwaGVyKSxtb2R1bGUuZXhwb3J0cz1ERVMsREVTLmNyZWF0ZT1mdW5jdGlvbiBjcmVhdGUob3B0aW9ucyl7cmV0dXJuIG5ldyBERVMob3B0aW9ucyl9O3ZhciBzaGlmdFRhYmxlPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtERVMucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24gZGVyaXZlS2V5cyhzdGF0ZSxrZXkpe3N0YXRlLmtleXM9bmV3IEFycmF5KDMyKSxhc3NlcnQuZXF1YWwoa2V5Lmxlbmd0aCx0aGlzLmJsb2NrU2l6ZSwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIGtMPXV0aWxzLnJlYWRVSW50MzJCRShrZXksMCksa1I9dXRpbHMucmVhZFVJbnQzMkJFKGtleSw0KTt1dGlscy5wYzEoa0wsa1Isc3RhdGUudG1wLDApLGtMPXN0YXRlLnRtcFswXSxrUj1zdGF0ZS50bXBbMV07Zm9yKHZhciBpPTA7aTxzdGF0ZS5rZXlzLmxlbmd0aDtpKz0yKXt2YXIgc2hpZnQ9c2hpZnRUYWJsZVtpPj4+MV07a0w9dXRpbHMucjI4c2hsKGtMLHNoaWZ0KSxrUj11dGlscy5yMjhzaGwoa1Isc2hpZnQpLHV0aWxzLnBjMihrTCxrUixzdGF0ZS5rZXlzLGkpfX0sREVTLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uIF91cGRhdGUoaW5wLGluT2ZmLG91dCxvdXRPZmYpe3ZhciBzdGF0ZT10aGlzLl9kZXNTdGF0ZSxsPXV0aWxzLnJlYWRVSW50MzJCRShpbnAsaW5PZmYpLHI9dXRpbHMucmVhZFVJbnQzMkJFKGlucCxpbk9mZis0KTt1dGlscy5pcChsLHIsc3RhdGUudG1wLDApLGw9c3RhdGUudG1wWzBdLHI9c3RhdGUudG1wWzFdLCJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9lbmNyeXB0KHN0YXRlLGwscixzdGF0ZS50bXAsMCk6dGhpcy5fZGVjcnlwdChzdGF0ZSxsLHIsc3RhdGUudG1wLDApLGw9c3RhdGUudG1wWzBdLHI9c3RhdGUudG1wWzFdLHV0aWxzLndyaXRlVUludDMyQkUob3V0LGwsb3V0T2ZmKSx1dGlscy53cml0ZVVJbnQzMkJFKG91dCxyLG91dE9mZis0KX0sREVTLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uIF9wYWQoYnVmZmVyLG9mZil7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuITE7Zm9yKHZhciB2YWx1ZT1idWZmZXIubGVuZ3RoLW9mZixpPW9mZjtpPGJ1ZmZlci5sZW5ndGg7aSsrKWJ1ZmZlcltpXT12YWx1ZTtyZXR1cm4hMH0sREVTLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24gX3VucGFkKGJ1ZmZlcil7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuIGJ1ZmZlcjtmb3IodmFyIHBhZD1idWZmZXJbYnVmZmVyLmxlbmd0aC0xXSxpPWJ1ZmZlci5sZW5ndGgtcGFkO2k8YnVmZmVyLmxlbmd0aDtpKyspYXNzZXJ0LmVxdWFsKGJ1ZmZlcltpXSxwYWQpO3JldHVybiBidWZmZXIuc2xpY2UoMCxidWZmZXIubGVuZ3RoLXBhZCl9LERFUy5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24gX2VuY3J5cHQoc3RhdGUsbFN0YXJ0LHJTdGFydCxvdXQsb2ZmKXtmb3IodmFyIGw9bFN0YXJ0LHI9clN0YXJ0LGk9MDtpPHN0YXRlLmtleXMubGVuZ3RoO2krPTIpe3ZhciBrZXlMPXN0YXRlLmtleXNbaV0sa2V5Uj1zdGF0ZS5rZXlzW2krMV07dXRpbHMuZXhwYW5kKHIsc3RhdGUudG1wLDApLGtleUxePXN0YXRlLnRtcFswXSxrZXlSXj1zdGF0ZS50bXBbMV07dmFyIHM9dXRpbHMuc3Vic3RpdHV0ZShrZXlMLGtleVIpLHQ9cjtyPShsXnV0aWxzLnBlcm11dGUocykpPj4+MCxsPXR9dXRpbHMucmlwKHIsbCxvdXQsb2ZmKX0sREVTLnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbiBfZGVjcnlwdChzdGF0ZSxsU3RhcnQsclN0YXJ0LG91dCxvZmYpe2Zvcih2YXIgbD1yU3RhcnQscj1sU3RhcnQsaT1zdGF0ZS5rZXlzLmxlbmd0aC0yO2k+PTA7aS09Mil7dmFyIGtleUw9c3RhdGUua2V5c1tpXSxrZXlSPXN0YXRlLmtleXNbaSsxXTt1dGlscy5leHBhbmQobCxzdGF0ZS50bXAsMCksa2V5TF49c3RhdGUudG1wWzBdLGtleVJePXN0YXRlLnRtcFsxXTt2YXIgcz11dGlscy5zdWJzdGl0dXRlKGtleUwsa2V5UiksdD1sO2w9KHJedXRpbHMucGVybXV0ZShzKSk+Pj4wLHI9dH11dGlscy5yaXAobCxyLG91dCxvZmYpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy9lZGUuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBhc3NlcnQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYWxpc3RpYy1hc3NlcnQvaW5kZXguanMiKSxpbmhlcml0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpLENpcGhlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvY2lwaGVyLmpzIiksREVTPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy9kZXMuanMiKTtmdW5jdGlvbiBFREVTdGF0ZSh0eXBlLGtleSl7YXNzZXJ0LmVxdWFsKGtleS5sZW5ndGgsMjQsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBrMT1rZXkuc2xpY2UoMCw4KSxrMj1rZXkuc2xpY2UoOCwxNiksazM9a2V5LnNsaWNlKDE2LDI0KTt0aGlzLmNpcGhlcnM9ImVuY3J5cHQiPT09dHlwZT9bREVTLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5OmsxfSksREVTLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5OmsyfSksREVTLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5OmszfSldOltERVMuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6azN9KSxERVMuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6azJ9KSxERVMuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6azF9KV19ZnVuY3Rpb24gRURFKG9wdGlvbnMpe0NpcGhlci5jYWxsKHRoaXMsb3B0aW9ucyk7dmFyIHN0YXRlPW5ldyBFREVTdGF0ZSh0aGlzLnR5cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRlU3RhdGU9c3RhdGV9aW5oZXJpdHMoRURFLENpcGhlciksbW9kdWxlLmV4cG9ydHM9RURFLEVERS5jcmVhdGU9ZnVuY3Rpb24gY3JlYXRlKG9wdGlvbnMpe3JldHVybiBuZXcgRURFKG9wdGlvbnMpfSxFREUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24gX3VwZGF0ZShpbnAsaW5PZmYsb3V0LG91dE9mZil7dmFyIHN0YXRlPXRoaXMuX2VkZVN0YXRlO3N0YXRlLmNpcGhlcnNbMF0uX3VwZGF0ZShpbnAsaW5PZmYsb3V0LG91dE9mZiksc3RhdGUuY2lwaGVyc1sxXS5fdXBkYXRlKG91dCxvdXRPZmYsb3V0LG91dE9mZiksc3RhdGUuY2lwaGVyc1syXS5fdXBkYXRlKG91dCxvdXRPZmYsb3V0LG91dE9mZil9LEVERS5wcm90b3R5cGUuX3BhZD1ERVMucHJvdG90eXBlLl9wYWQsRURFLnByb3RvdHlwZS5fdW5wYWQ9REVTLnByb3RvdHlwZS5fdW5wYWR9LCIuLi8uLi9ub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvdXRpbHMuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0IjtleHBvcnRzLnJlYWRVSW50MzJCRT1mdW5jdGlvbiByZWFkVUludDMyQkUoYnl0ZXMsb2ZmKXtyZXR1cm4oYnl0ZXNbMCtvZmZdPDwyNHxieXRlc1sxK29mZl08PDE2fGJ5dGVzWzIrb2ZmXTw8OHxieXRlc1szK29mZl0pPj4+MH0sZXhwb3J0cy53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uIHdyaXRlVUludDMyQkUoYnl0ZXMsdmFsdWUsb2ZmKXtieXRlc1swK29mZl09dmFsdWU+Pj4yNCxieXRlc1sxK29mZl09dmFsdWU+Pj4xNiYyNTUsYnl0ZXNbMitvZmZdPXZhbHVlPj4+OCYyNTUsYnl0ZXNbMytvZmZdPTI1NSZ2YWx1ZX0sZXhwb3J0cy5pcD1mdW5jdGlvbiBpcChpbkwsaW5SLG91dCxvZmYpe2Zvcih2YXIgb3V0TD0wLG91dFI9MCxpPTY7aT49MDtpLT0yKXtmb3IodmFyIGo9MDtqPD0yNDtqKz04KW91dEw8PD0xLG91dEx8PWluUj4+PmoraSYxO2ZvcihqPTA7ajw9MjQ7ais9OClvdXRMPDw9MSxvdXRMfD1pbkw+Pj5qK2kmMX1mb3IoaT02O2k+PTA7aS09Mil7Zm9yKGo9MTtqPD0yNTtqKz04KW91dFI8PD0xLG91dFJ8PWluUj4+PmoraSYxO2ZvcihqPTE7ajw9MjU7ais9OClvdXRSPDw9MSxvdXRSfD1pbkw+Pj5qK2kmMX1vdXRbb2ZmKzBdPW91dEw+Pj4wLG91dFtvZmYrMV09b3V0Uj4+PjB9LGV4cG9ydHMucmlwPWZ1bmN0aW9uIHJpcChpbkwsaW5SLG91dCxvZmYpe2Zvcih2YXIgb3V0TD0wLG91dFI9MCxpPTA7aTw0O2krKylmb3IodmFyIGo9MjQ7aj49MDtqLT04KW91dEw8PD0xLG91dEx8PWluUj4+PmoraSYxLG91dEw8PD0xLG91dEx8PWluTD4+PmoraSYxO2ZvcihpPTQ7aTw4O2krKylmb3Ioaj0yNDtqPj0wO2otPTgpb3V0Ujw8PTEsb3V0Unw9aW5SPj4+aitpJjEsb3V0Ujw8PTEsb3V0Unw9aW5MPj4+aitpJjE7b3V0W29mZiswXT1vdXRMPj4+MCxvdXRbb2ZmKzFdPW91dFI+Pj4wfSxleHBvcnRzLnBjMT1mdW5jdGlvbiBwYzEoaW5MLGluUixvdXQsb2ZmKXtmb3IodmFyIG91dEw9MCxvdXRSPTAsaT03O2k+PTU7aS0tKXtmb3IodmFyIGo9MDtqPD0yNDtqKz04KW91dEw8PD0xLG91dEx8PWluUj4+aitpJjE7Zm9yKGo9MDtqPD0yNDtqKz04KW91dEw8PD0xLG91dEx8PWluTD4+aitpJjF9Zm9yKGo9MDtqPD0yNDtqKz04KW91dEw8PD0xLG91dEx8PWluUj4+aitpJjE7Zm9yKGk9MTtpPD0zO2krKyl7Zm9yKGo9MDtqPD0yNDtqKz04KW91dFI8PD0xLG91dFJ8PWluUj4+aitpJjE7Zm9yKGo9MDtqPD0yNDtqKz04KW91dFI8PD0xLG91dFJ8PWluTD4+aitpJjF9Zm9yKGo9MDtqPD0yNDtqKz04KW91dFI8PD0xLG91dFJ8PWluTD4+aitpJjE7b3V0W29mZiswXT1vdXRMPj4+MCxvdXRbb2ZmKzFdPW91dFI+Pj4wfSxleHBvcnRzLnIyOHNobD1mdW5jdGlvbiByMjhzaGwobnVtLHNoaWZ0KXtyZXR1cm4gbnVtPDxzaGlmdCYyNjg0MzU0NTV8bnVtPj4+Mjgtc2hpZnR9O3ZhciBwYzJ0YWJsZT1bMTQsMTEsMTcsNCwyNywyMywyNSwwLDEzLDIyLDcsMTgsNSw5LDE2LDI0LDIsMjAsMTIsMjEsMSw4LDE1LDI2LDE1LDQsMjUsMTksOSwxLDI2LDE2LDUsMTEsMjMsOCwxMiw3LDE3LDAsMjIsMywxMCwxNCw2LDIwLDI3LDI0XTtleHBvcnRzLnBjMj1mdW5jdGlvbiBwYzIoaW5MLGluUixvdXQsb2ZmKXtmb3IodmFyIG91dEw9MCxvdXRSPTAsbGVuPXBjMnRhYmxlLmxlbmd0aD4+PjEsaT0wO2k8bGVuO2krKylvdXRMPDw9MSxvdXRMfD1pbkw+Pj5wYzJ0YWJsZVtpXSYxO2ZvcihpPWxlbjtpPHBjMnRhYmxlLmxlbmd0aDtpKyspb3V0Ujw8PTEsb3V0Unw9aW5SPj4+cGMydGFibGVbaV0mMTtvdXRbb2ZmKzBdPW91dEw+Pj4wLG91dFtvZmYrMV09b3V0Uj4+PjB9LGV4cG9ydHMuZXhwYW5kPWZ1bmN0aW9uIGV4cGFuZChyLG91dCxvZmYpe3ZhciBvdXRMPTAsb3V0Uj0wO291dEw9KDEmcik8PDV8cj4+PjI3O2Zvcih2YXIgaT0yMztpPj0xNTtpLT00KW91dEw8PD02LG91dEx8PXI+Pj5pJjYzO2ZvcihpPTExO2k+PTM7aS09NClvdXRSfD1yPj4+aSY2MyxvdXRSPDw9NjtvdXRSfD0oMzEmcik8PDF8cj4+PjMxLG91dFtvZmYrMF09b3V0TD4+PjAsb3V0W29mZisxXT1vdXRSPj4+MH07dmFyIHNUYWJsZT1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtleHBvcnRzLnN1YnN0aXR1dGU9ZnVuY3Rpb24gc3Vic3RpdHV0ZShpbkwsaW5SKXtmb3IodmFyIG91dD0wLGk9MDtpPDQ7aSsrKXtvdXQ8PD00LG91dHw9c1RhYmxlWzY0KmkrKGluTD4+PjE4LTYqaSY2MyldfWZvcihpPTA7aTw0O2krKyl7b3V0PDw9NCxvdXR8PXNUYWJsZVsyNTYrNjQqaSsoaW5SPj4+MTgtNippJjYzKV19cmV0dXJuIG91dD4+PjB9O3ZhciBwZXJtdXRlVGFibGU9WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO2V4cG9ydHMucGVybXV0ZT1mdW5jdGlvbiBwZXJtdXRlKG51bSl7Zm9yKHZhciBvdXQ9MCxpPTA7aTxwZXJtdXRlVGFibGUubGVuZ3RoO2krKylvdXQ8PD0xLG91dHw9bnVtPj4+cGVybXV0ZVRhYmxlW2ldJjE7cmV0dXJuIG91dD4+PjB9LGV4cG9ydHMucGFkU3BsaXQ9ZnVuY3Rpb24gcGFkU3BsaXQobnVtLHNpemUsZ3JvdXApe2Zvcih2YXIgc3RyPW51bS50b1N0cmluZygyKTtzdHIubGVuZ3RoPHNpemU7KXN0cj0iMCIrc3RyO2Zvcih2YXIgb3V0PVtdLGk9MDtpPHNpemU7aSs9Z3JvdXApb3V0LnB1c2goc3RyLnNsaWNlKGksaStncm91cCkpO3JldHVybiBvdXQuam9pbigiICIpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9kaWZmaWUtaGVsbG1hbi9icm93c2VyLmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpLGdlbmVyYXRlUHJpbWU9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2RpZmZpZS1oZWxsbWFuL2xpYi9nZW5lcmF0ZVByaW1lLmpzIikscHJpbWVzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9kaWZmaWUtaGVsbG1hbi9saWIvcHJpbWVzLmpzb24iKSxESD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZGlmZmllLWhlbGxtYW4vbGliL2RoLmpzIik7dmFyIEVOQ09ESU5HUz17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O2V4cG9ydHMuRGlmZmllSGVsbG1hbkdyb3VwPWV4cG9ydHMuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPWV4cG9ydHMuZ2V0RGlmZmllSGVsbG1hbj1mdW5jdGlvbiBnZXREaWZmaWVIZWxsbWFuKG1vZCl7dmFyIHByaW1lPW5ldyBCdWZmZXIocHJpbWVzW21vZF0ucHJpbWUsImhleCIpLGdlbj1uZXcgQnVmZmVyKHByaW1lc1ttb2RdLmdlbiwiaGV4Iik7cmV0dXJuIG5ldyBESChwcmltZSxnZW4pfSxleHBvcnRzLmNyZWF0ZURpZmZpZUhlbGxtYW49ZXhwb3J0cy5EaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIGNyZWF0ZURpZmZpZUhlbGxtYW4ocHJpbWUsZW5jLGdlbmVyYXRvcixnZW5jKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGVuYyl8fHZvaWQgMD09PUVOQ09ESU5HU1tlbmNdP2NyZWF0ZURpZmZpZUhlbGxtYW4ocHJpbWUsImJpbmFyeSIsZW5jLGdlbmVyYXRvcik6KGVuYz1lbmN8fCJiaW5hcnkiLGdlbmM9Z2VuY3x8ImJpbmFyeSIsZ2VuZXJhdG9yPWdlbmVyYXRvcnx8bmV3IEJ1ZmZlcihbMl0pLEJ1ZmZlci5pc0J1ZmZlcihnZW5lcmF0b3IpfHwoZ2VuZXJhdG9yPW5ldyBCdWZmZXIoZ2VuZXJhdG9yLGdlbmMpKSwibnVtYmVyIj09dHlwZW9mIHByaW1lP25ldyBESChnZW5lcmF0ZVByaW1lKHByaW1lLGdlbmVyYXRvciksZ2VuZXJhdG9yLCEwKTooQnVmZmVyLmlzQnVmZmVyKHByaW1lKXx8KHByaW1lPW5ldyBCdWZmZXIocHJpbWUsZW5jKSksbmV3IERIKHByaW1lLGdlbmVyYXRvciwhMCkpKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvZGlmZmllLWhlbGxtYW4vbGliL2RoLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpLEJOPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9kaWZmaWUtaGVsbG1hbi9ub2RlX21vZHVsZXMvYm4uanMvbGliL2JuLmpzIiksbWlsbGVyUmFiaW49bmV3KF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9taWxsZXItcmFiaW4vbGliL21yLmpzIikpLFRXRU5UWUZPVVI9bmV3IEJOKDI0KSxFTEVWRU49bmV3IEJOKDExKSxURU49bmV3IEJOKDEwKSxUSFJFRT1uZXcgQk4oMyksU0VWRU49bmV3IEJOKDcpLHByaW1lcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZGlmZmllLWhlbGxtYW4vbGliL2dlbmVyYXRlUHJpbWUuanMiKSxyYW5kb21CeXRlcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcmFuZG9tYnl0ZXMvYnJvd3Nlci5qcyIpO2Z1bmN0aW9uIHNldFB1YmxpY0tleShwdWIsZW5jKXtyZXR1cm4gZW5jPWVuY3x8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihwdWIpfHwocHViPW5ldyBCdWZmZXIocHViLGVuYykpLHRoaXMuX3B1Yj1uZXcgQk4ocHViKSx0aGlzfWZ1bmN0aW9uIHNldFByaXZhdGVLZXkocHJpdixlbmMpe3JldHVybiBlbmM9ZW5jfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKHByaXYpfHwocHJpdj1uZXcgQnVmZmVyKHByaXYsZW5jKSksdGhpcy5fcHJpdj1uZXcgQk4ocHJpdiksdGhpc31tb2R1bGUuZXhwb3J0cz1ESDt2YXIgcHJpbWVDYWNoZT17fTtmdW5jdGlvbiBESChwcmltZSxnZW5lcmF0b3IsbWFsbGVhYmxlKXt0aGlzLnNldEdlbmVyYXRvcihnZW5lcmF0b3IpLHRoaXMuX19wcmltZT1uZXcgQk4ocHJpbWUpLHRoaXMuX3ByaW1lPUJOLm1vbnQodGhpcy5fX3ByaW1lKSx0aGlzLl9wcmltZUxlbj1wcmltZS5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLG1hbGxlYWJsZT8odGhpcy5zZXRQdWJsaWNLZXk9c2V0UHVibGljS2V5LHRoaXMuc2V0UHJpdmF0ZUtleT1zZXRQcml2YXRlS2V5KTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBmb3JtYXRSZXR1cm5WYWx1ZShibixlbmMpe3ZhciBidWY9bmV3IEJ1ZmZlcihibi50b0FycmF5KCkpO3JldHVybiBlbmM/YnVmLnRvU3RyaW5nKGVuYyk6YnVmfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShESC5wcm90b3R5cGUsInZlcmlmeUVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYmKHRoaXMuX3ByaW1lQ29kZT1mdW5jdGlvbiBjaGVja1ByaW1lKHByaW1lLGdlbmVyYXRvcil7dmFyIGdlbj1nZW5lcmF0b3IudG9TdHJpbmcoImhleCIpLGhleD1bZ2VuLHByaW1lLnRvU3RyaW5nKDE2KV0uam9pbigiXyIpO2lmKGhleCBpbiBwcmltZUNhY2hlKXJldHVybiBwcmltZUNhY2hlW2hleF07dmFyIHJlbSxlcnJvcj0wO2lmKHByaW1lLmlzRXZlbigpfHwhcHJpbWVzLnNpbXBsZVNpZXZlfHwhcHJpbWVzLmZlcm1hdFRlc3QocHJpbWUpfHwhbWlsbGVyUmFiaW4udGVzdChwcmltZSkpcmV0dXJuIGVycm9yKz0xLGVycm9yKz0iMDIiPT09Z2VufHwiMDUiPT09Z2VuPzg6NCxwcmltZUNhY2hlW2hleF09ZXJyb3IsZXJyb3I7c3dpdGNoKG1pbGxlclJhYmluLnRlc3QocHJpbWUuc2hybigxKSl8fChlcnJvcis9MiksZ2VuKXtjYXNlIjAyIjpwcmltZS5tb2QoVFdFTlRZRk9VUikuY21wKEVMRVZFTikmJihlcnJvcis9OCk7YnJlYWs7Y2FzZSIwNSI6KHJlbT1wcmltZS5tb2QoVEVOKSkuY21wKFRIUkVFKSYmcmVtLmNtcChTRVZFTikmJihlcnJvcis9OCk7YnJlYWs7ZGVmYXVsdDplcnJvcis9NH1yZXR1cm4gcHJpbWVDYWNoZVtoZXhdPWVycm9yLGVycm9yfSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSxESC5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyBCTihyYW5kb21CeXRlcyh0aGlzLl9wcmltZUxlbikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LERILnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKG90aGVyKXt2YXIgc2VjcmV0PShvdGhlcj0ob3RoZXI9bmV3IEJOKG90aGVyKSkudG9SZWQodGhpcy5fcHJpbWUpKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLG91dD1uZXcgQnVmZmVyKHNlY3JldC50b0FycmF5KCkpLHByaW1lPXRoaXMuZ2V0UHJpbWUoKTtpZihvdXQubGVuZ3RoPHByaW1lLmxlbmd0aCl7dmFyIGZyb250PW5ldyBCdWZmZXIocHJpbWUubGVuZ3RoLW91dC5sZW5ndGgpO2Zyb250LmZpbGwoMCksb3V0PUJ1ZmZlci5jb25jYXQoW2Zyb250LG91dF0pfXJldHVybiBvdXR9LERILnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24gZ2V0UHVibGljS2V5KGVuYyl7cmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKHRoaXMuX3B1YixlbmMpfSxESC5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbiBnZXRQcml2YXRlS2V5KGVuYyl7cmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKHRoaXMuX3ByaXYsZW5jKX0sREgucHJvdG90eXBlLmdldFByaW1lPWZ1bmN0aW9uKGVuYyl7cmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKHRoaXMuX19wcmltZSxlbmMpfSxESC5wcm90b3R5cGUuZ2V0R2VuZXJhdG9yPWZ1bmN0aW9uKGVuYyl7cmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKHRoaXMuX2dlbixlbmMpfSxESC5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKGdlbixlbmMpe3JldHVybiBlbmM9ZW5jfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKGdlbil8fChnZW49bmV3IEJ1ZmZlcihnZW4sZW5jKSksdGhpcy5fX2dlbj1nZW4sdGhpcy5fZ2VuPW5ldyBCTihnZW4pLHRoaXN9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2RpZmZpZS1oZWxsbWFuL2xpYi9nZW5lcmF0ZVByaW1lLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciByYW5kb21CeXRlcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcmFuZG9tYnl0ZXMvYnJvd3Nlci5qcyIpO21vZHVsZS5leHBvcnRzPWZpbmRQcmltZSxmaW5kUHJpbWUuc2ltcGxlU2lldmU9c2ltcGxlU2lldmUsZmluZFByaW1lLmZlcm1hdFRlc3Q9ZmVybWF0VGVzdDt2YXIgQk49X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2RpZmZpZS1oZWxsbWFuL25vZGVfbW9kdWxlcy9ibi5qcy9saWIvYm4uanMiKSxUV0VOVFlGT1VSPW5ldyBCTigyNCksbWlsbGVyUmFiaW49bmV3KF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9taWxsZXItcmFiaW4vbGliL21yLmpzIikpLE9ORT1uZXcgQk4oMSksVFdPPW5ldyBCTigyKSxGSVZFPW5ldyBCTig1KSxURU49KG5ldyBCTigxNiksbmV3IEJOKDgpLG5ldyBCTigxMCkpLFRIUkVFPW5ldyBCTigzKSxFTEVWRU49KG5ldyBCTig3KSxuZXcgQk4oMTEpKSxGT1VSPW5ldyBCTig0KSxwcmltZXM9KG5ldyBCTigxMiksbnVsbCk7ZnVuY3Rpb24gX2dldFByaW1lcygpe2lmKG51bGwhPT1wcmltZXMpcmV0dXJuIHByaW1lczt2YXIgcmVzPVtdO3Jlc1swXT0yO2Zvcih2YXIgaT0xLGs9MztrPDEwNDg1NzY7ays9Mil7Zm9yKHZhciBzcXJ0PU1hdGguY2VpbChNYXRoLnNxcnQoaykpLGo9MDtqPGkmJnJlc1tqXTw9c3FydCYmayVyZXNbal0hPT0wO2orKyk7aSE9PWomJnJlc1tqXTw9c3FydHx8KHJlc1tpKytdPWspfXJldHVybiBwcmltZXM9cmVzLHJlc31mdW5jdGlvbiBzaW1wbGVTaWV2ZShwKXtmb3IodmFyIHByaW1lcz1fZ2V0UHJpbWVzKCksaT0wO2k8cHJpbWVzLmxlbmd0aDtpKyspaWYoMD09PXAubW9kbihwcmltZXNbaV0pKXJldHVybiAwPT09cC5jbXBuKHByaW1lc1tpXSk7cmV0dXJuITB9ZnVuY3Rpb24gZmVybWF0VGVzdChwKXt2YXIgcmVkPUJOLm1vbnQocCk7cmV0dXJuIDA9PT1UV08udG9SZWQocmVkKS5yZWRQb3cocC5zdWJuKDEpKS5mcm9tUmVkKCkuY21wbigxKX1mdW5jdGlvbiBmaW5kUHJpbWUoYml0cyxnZW4pe2lmKGJpdHM8MTYpcmV0dXJuIG5ldyBCTigyPT09Z2VufHw1PT09Z2VuP1sxNDAsMTIzXTpbMTQwLDM5XSk7dmFyIG51bSxuMjtmb3IoZ2VuPW5ldyBCTihnZW4pOzspe2ZvcihudW09bmV3IEJOKHJhbmRvbUJ5dGVzKE1hdGguY2VpbChiaXRzLzgpKSk7bnVtLmJpdExlbmd0aCgpPmJpdHM7KW51bS5pc2hybigxKTtpZihudW0uaXNFdmVuKCkmJm51bS5pYWRkKE9ORSksbnVtLnRlc3RuKDEpfHxudW0uaWFkZChUV08pLGdlbi5jbXAoVFdPKSl7aWYoIWdlbi5jbXAoRklWRSkpZm9yKDtudW0ubW9kKFRFTikuY21wKFRIUkVFKTspbnVtLmlhZGQoRk9VUil9ZWxzZSBmb3IoO251bS5tb2QoVFdFTlRZRk9VUikuY21wKEVMRVZFTik7KW51bS5pYWRkKEZPVVIpO2lmKHNpbXBsZVNpZXZlKG4yPW51bS5zaHJuKDEpKSYmc2ltcGxlU2lldmUobnVtKSYmZmVybWF0VGVzdChuMikmJmZlcm1hdFRlc3QobnVtKSYmbWlsbGVyUmFiaW4udGVzdChuMikmJm1pbGxlclJhYmluLnRlc3QobnVtKSlyZXR1cm4gbnVtfX19LCIuLi8uLi9ub2RlX21vZHVsZXMvZGlmZmllLWhlbGxtYW4vbm9kZV9tb2R1bGVzL2JuLmpzL2xpYi9ibi5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhc3NlcnQodmFsLG1zZyl7aWYoIXZhbCl0aHJvdyBuZXcgRXJyb3IobXNnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGluaGVyaXRzKGN0b3Isc3VwZXJDdG9yKXtjdG9yLnN1cGVyXz1zdXBlckN0b3I7dmFyIFRlbXBDdG9yPWZ1bmN0aW9uKCl7fTtUZW1wQ3Rvci5wcm90b3R5cGU9c3VwZXJDdG9yLnByb3RvdHlwZSxjdG9yLnByb3RvdHlwZT1uZXcgVGVtcEN0b3IsY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3I9Y3Rvcn1mdW5jdGlvbiBCTihudW1iZXIsYmFzZSxlbmRpYW4pe2lmKEJOLmlzQk4obnVtYmVyKSlyZXR1cm4gbnVtYmVyO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1udW1iZXImJigibGUiIT09YmFzZSYmImJlIiE9PWJhc2V8fChlbmRpYW49YmFzZSxiYXNlPTEwKSx0aGlzLl9pbml0KG51bWJlcnx8MCxiYXNlfHwxMCxlbmRpYW58fCJiZSIpKX12YXIgQnVmZmVyOyJvYmplY3QiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPUJOOmV4cG9ydHMuQk49Qk4sQk4uQk49Qk4sQk4ud29yZFNpemU9MjY7dHJ5e0J1ZmZlcj0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOl9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKS5CdWZmZXJ9Y2F0Y2goZSl7fWZ1bmN0aW9uIHBhcnNlSGV4NEJpdHMoc3RyaW5nLGluZGV4KXt2YXIgYz1zdHJpbmcuY2hhckNvZGVBdChpbmRleCk7cmV0dXJuIGM+PTY1JiZjPD03MD9jLTU1OmM+PTk3JiZjPD0xMDI/Yy04NzpjLTQ4JjE1fWZ1bmN0aW9uIHBhcnNlSGV4Qnl0ZShzdHJpbmcsbG93ZXJCb3VuZCxpbmRleCl7dmFyIHI9cGFyc2VIZXg0Qml0cyhzdHJpbmcsaW5kZXgpO3JldHVybiBpbmRleC0xPj1sb3dlckJvdW5kJiYocnw9cGFyc2VIZXg0Qml0cyhzdHJpbmcsaW5kZXgtMSk8PDQpLHJ9ZnVuY3Rpb24gcGFyc2VCYXNlKHN0cixzdGFydCxlbmQsbXVsKXtmb3IodmFyIHI9MCxsZW49TWF0aC5taW4oc3RyLmxlbmd0aCxlbmQpLGk9c3RhcnQ7aTxsZW47aSsrKXt2YXIgYz1zdHIuY2hhckNvZGVBdChpKS00ODtyKj1tdWwscis9Yz49NDk/Yy00OSsxMDpjPj0xNz9jLTE3KzEwOmN9cmV0dXJuIHJ9Qk4uaXNCTj1mdW5jdGlvbiBpc0JOKG51bSl7cmV0dXJuIG51bSBpbnN0YW5jZW9mIEJOfHxudWxsIT09bnVtJiYib2JqZWN0Ij09dHlwZW9mIG51bSYmbnVtLmNvbnN0cnVjdG9yLndvcmRTaXplPT09Qk4ud29yZFNpemUmJkFycmF5LmlzQXJyYXkobnVtLndvcmRzKX0sQk4ubWF4PWZ1bmN0aW9uIG1heChsZWZ0LHJpZ2h0KXtyZXR1cm4gbGVmdC5jbXAocmlnaHQpPjA/bGVmdDpyaWdodH0sQk4ubWluPWZ1bmN0aW9uIG1pbihsZWZ0LHJpZ2h0KXtyZXR1cm4gbGVmdC5jbXAocmlnaHQpPDA/bGVmdDpyaWdodH0sQk4ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uIGluaXQobnVtYmVyLGJhc2UsZW5kaWFuKXtpZigibnVtYmVyIj09dHlwZW9mIG51bWJlcilyZXR1cm4gdGhpcy5faW5pdE51bWJlcihudW1iZXIsYmFzZSxlbmRpYW4pO2lmKCJvYmplY3QiPT10eXBlb2YgbnVtYmVyKXJldHVybiB0aGlzLl9pbml0QXJyYXkobnVtYmVyLGJhc2UsZW5kaWFuKTsiaGV4Ij09PWJhc2UmJihiYXNlPTE2KSxhc3NlcnQoYmFzZT09PSgwfGJhc2UpJiZiYXNlPj0yJiZiYXNlPD0zNik7dmFyIHN0YXJ0PTA7Ii0iPT09KG51bWJlcj1udW1iZXIudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoc3RhcnQrKyx0aGlzLm5lZ2F0aXZlPTEpLHN0YXJ0PG51bWJlci5sZW5ndGgmJigxNj09PWJhc2U/dGhpcy5fcGFyc2VIZXgobnVtYmVyLHN0YXJ0LGVuZGlhbik6KHRoaXMuX3BhcnNlQmFzZShudW1iZXIsYmFzZSxzdGFydCksImxlIj09PWVuZGlhbiYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGJhc2UsZW5kaWFuKSkpfSxCTi5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24gX2luaXROdW1iZXIobnVtYmVyLGJhc2UsZW5kaWFuKXtudW1iZXI8MCYmKHRoaXMubmVnYXRpdmU9MSxudW1iZXI9LW51bWJlciksbnVtYmVyPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZudW1iZXJdLHRoaXMubGVuZ3RoPTEpOm51bWJlcjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZudW1iZXIsbnVtYmVyLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooYXNzZXJ0KG51bWJlcjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZudW1iZXIsbnVtYmVyLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1lbmRpYW4mJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiYXNlLGVuZGlhbil9LEJOLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uIF9pbml0QXJyYXkobnVtYmVyLGJhc2UsZW5kaWFuKXtpZihhc3NlcnQoIm51bWJlciI9PXR5cGVvZiBudW1iZXIubGVuZ3RoKSxudW1iZXIubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKG51bWJlci5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDt2YXIgaix3LG9mZj0wO2lmKCJiZSI9PT1lbmRpYW4pZm9yKGk9bnVtYmVyLmxlbmd0aC0xLGo9MDtpPj0wO2ktPTMpdz1udW1iZXJbaV18bnVtYmVyW2ktMV08PDh8bnVtYmVyW2ktMl08PDE2LHRoaXMud29yZHNbal18PXc8PG9mZiY2NzEwODg2Myx0aGlzLndvcmRzW2orMV09dz4+PjI2LW9mZiY2NzEwODg2Mywob2ZmKz0yNCk+PTI2JiYob2ZmLT0yNixqKyspO2Vsc2UgaWYoImxlIj09PWVuZGlhbilmb3IoaT0wLGo9MDtpPG51bWJlci5sZW5ndGg7aSs9Myl3PW51bWJlcltpXXxudW1iZXJbaSsxXTw8OHxudW1iZXJbaSsyXTw8MTYsdGhpcy53b3Jkc1tqXXw9dzw8b2ZmJjY3MTA4ODYzLHRoaXMud29yZHNbaisxXT13Pj4+MjYtb2ZmJjY3MTA4ODYzLChvZmYrPTI0KT49MjYmJihvZmYtPTI2LGorKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbiBfcGFyc2VIZXgobnVtYmVyLHN0YXJ0LGVuZGlhbil7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChudW1iZXIubGVuZ3RoLXN0YXJ0KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciB3LG9mZj0wLGo9MDtpZigiYmUiPT09ZW5kaWFuKWZvcihpPW51bWJlci5sZW5ndGgtMTtpPj1zdGFydDtpLT0yKXc9cGFyc2VIZXhCeXRlKG51bWJlcixzdGFydCxpKTw8b2ZmLHRoaXMud29yZHNbal18PTY3MTA4ODYzJncsb2ZmPj0xOD8ob2ZmLT0xOCxqKz0xLHRoaXMud29yZHNbal18PXc+Pj4yNik6b2ZmKz04O2Vsc2UgZm9yKGk9KG51bWJlci5sZW5ndGgtc3RhcnQpJTI9PTA/c3RhcnQrMTpzdGFydDtpPG51bWJlci5sZW5ndGg7aSs9Mil3PXBhcnNlSGV4Qnl0ZShudW1iZXIsc3RhcnQsaSk8PG9mZix0aGlzLndvcmRzW2pdfD02NzEwODg2MyZ3LG9mZj49MTg/KG9mZi09MTgsais9MSx0aGlzLndvcmRzW2pdfD13Pj4+MjYpOm9mZis9ODt0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uIF9wYXJzZUJhc2UobnVtYmVyLGJhc2Usc3RhcnQpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBsaW1iTGVuPTAsbGltYlBvdz0xO2xpbWJQb3c8PTY3MTA4ODYzO2xpbWJQb3cqPWJhc2UpbGltYkxlbisrO2xpbWJMZW4tLSxsaW1iUG93PWxpbWJQb3cvYmFzZXwwO2Zvcih2YXIgdG90YWw9bnVtYmVyLmxlbmd0aC1zdGFydCxtb2Q9dG90YWwlbGltYkxlbixlbmQ9TWF0aC5taW4odG90YWwsdG90YWwtbW9kKStzdGFydCx3b3JkPTAsaT1zdGFydDtpPGVuZDtpKz1saW1iTGVuKXdvcmQ9cGFyc2VCYXNlKG51bWJlcixpLGkrbGltYkxlbixiYXNlKSx0aGlzLmltdWxuKGxpbWJQb3cpLHRoaXMud29yZHNbMF0rd29yZDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz13b3JkOnRoaXMuX2lhZGRuKHdvcmQpO2lmKDAhPT1tb2Qpe3ZhciBwb3c9MTtmb3Iod29yZD1wYXJzZUJhc2UobnVtYmVyLGksbnVtYmVyLmxlbmd0aCxiYXNlKSxpPTA7aTxtb2Q7aSsrKXBvdyo9YmFzZTt0aGlzLmltdWxuKHBvdyksdGhpcy53b3Jkc1swXSt3b3JkPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXdvcmQ6dGhpcy5faWFkZG4od29yZCl9dGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuY29weT1mdW5jdGlvbiBjb3B5KGRlc3Qpe2Rlc3Qud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKylkZXN0LndvcmRzW2ldPXRoaXMud29yZHNbaV07ZGVzdC5sZW5ndGg9dGhpcy5sZW5ndGgsZGVzdC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGRlc3QucmVkPXRoaXMucmVkfSxCTi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24gY2xvbmUoKXt2YXIgcj1uZXcgQk4obnVsbCk7cmV0dXJuIHRoaXMuY29weShyKSxyfSxCTi5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbiBfZXhwYW5kKHNpemUpe2Zvcig7dGhpcy5sZW5ndGg8c2l6ZTspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxCTi5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24gc3RyaXAoKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxCTi5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uIF9ub3JtU2lnbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxCTi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbiBpbnNwZWN0KCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciB6ZXJvcz1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxncm91cFNpemVzPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLGdyb3VwQmFzZXM9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gc21hbGxNdWxUbyhzZWxmLG51bSxvdXQpe291dC5uZWdhdGl2ZT1udW0ubmVnYXRpdmVec2VsZi5uZWdhdGl2ZTt2YXIgbGVuPXNlbGYubGVuZ3RoK251bS5sZW5ndGh8MDtvdXQubGVuZ3RoPWxlbixsZW49bGVuLTF8MDt2YXIgYT0wfHNlbGYud29yZHNbMF0sYj0wfG51bS53b3Jkc1swXSxyPWEqYixsbz02NzEwODg2MyZyLGNhcnJ5PXIvNjcxMDg4NjR8MDtvdXQud29yZHNbMF09bG87Zm9yKHZhciBrPTE7azxsZW47aysrKXtmb3IodmFyIG5jYXJyeT1jYXJyeT4+PjI2LHJ3b3JkPTY3MTA4ODYzJmNhcnJ5LG1heEo9TWF0aC5taW4oayxudW0ubGVuZ3RoLTEpLGo9TWF0aC5tYXgoMCxrLXNlbGYubGVuZ3RoKzEpO2o8PW1heEo7aisrKXt2YXIgaT1rLWp8MDtuY2FycnkrPShyPShhPTB8c2VsZi53b3Jkc1tpXSkqKGI9MHxudW0ud29yZHNbal0pK3J3b3JkKS82NzEwODg2NHwwLHJ3b3JkPTY3MTA4ODYzJnJ9b3V0LndvcmRzW2tdPTB8cndvcmQsY2Fycnk9MHxuY2Fycnl9cmV0dXJuIDAhPT1jYXJyeT9vdXQud29yZHNba109MHxjYXJyeTpvdXQubGVuZ3RoLS0sb3V0LnN0cmlwKCl9Qk4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uIHRvU3RyaW5nKGJhc2UscGFkZGluZyl7dmFyIG91dDtpZihwYWRkaW5nPTB8cGFkZGluZ3x8MSwxNj09PShiYXNlPWJhc2V8fDEwKXx8ImhleCI9PT1iYXNlKXtvdXQ9IiI7Zm9yKHZhciBvZmY9MCxjYXJyeT0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKyl7dmFyIHc9dGhpcy53b3Jkc1tpXSx3b3JkPSgxNjc3NzIxNSYodzw8b2ZmfGNhcnJ5KSkudG9TdHJpbmcoMTYpO2NhcnJ5PXc+Pj4yNC1vZmYmMTY3NzcyMTUsKG9mZis9Mik+PTI2JiYob2ZmLT0yNixpLS0pLG91dD0wIT09Y2Fycnl8fGkhPT10aGlzLmxlbmd0aC0xP3plcm9zWzYtd29yZC5sZW5ndGhdK3dvcmQrb3V0OndvcmQrb3V0fWZvcigwIT09Y2FycnkmJihvdXQ9Y2FycnkudG9TdHJpbmcoMTYpK291dCk7b3V0Lmxlbmd0aCVwYWRkaW5nIT09MDspb3V0PSIwIitvdXQ7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYob3V0PSItIitvdXQpLG91dH1pZihiYXNlPT09KDB8YmFzZSkmJmJhc2U+PTImJmJhc2U8PTM2KXt2YXIgZ3JvdXBTaXplPWdyb3VwU2l6ZXNbYmFzZV0sZ3JvdXBCYXNlPWdyb3VwQmFzZXNbYmFzZV07b3V0PSIiO3ZhciBjPXRoaXMuY2xvbmUoKTtmb3IoYy5uZWdhdGl2ZT0wOyFjLmlzWmVybygpOyl7dmFyIHI9Yy5tb2RuKGdyb3VwQmFzZSkudG9TdHJpbmcoYmFzZSk7b3V0PShjPWMuaWRpdm4oZ3JvdXBCYXNlKSkuaXNaZXJvKCk/citvdXQ6emVyb3NbZ3JvdXBTaXplLXIubGVuZ3RoXStyK291dH1mb3IodGhpcy5pc1plcm8oKSYmKG91dD0iMCIrb3V0KTtvdXQubGVuZ3RoJXBhZGRpbmchPT0wOylvdXQ9IjAiK291dDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihvdXQ9Ii0iK291dCksb3V0fWFzc2VydCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxCTi5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24gdG9OdW1iZXIoKXt2YXIgcmV0PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9yZXQrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9yZXQrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZhc3NlcnQoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1yZXQ6cmV0fSxCTi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uIHRvSlNPTigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sQk4ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uIHRvQnVmZmVyKGVuZGlhbixsZW5ndGgpe3JldHVybiBhc3NlcnQodm9pZCAwIT09QnVmZmVyKSx0aGlzLnRvQXJyYXlMaWtlKEJ1ZmZlcixlbmRpYW4sbGVuZ3RoKX0sQk4ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24gdG9BcnJheShlbmRpYW4sbGVuZ3RoKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxlbmRpYW4sbGVuZ3RoKX0sQk4ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uIHRvQXJyYXlMaWtlKEFycmF5VHlwZSxlbmRpYW4sbGVuZ3RoKXt2YXIgYnl0ZUxlbmd0aD10aGlzLmJ5dGVMZW5ndGgoKSxyZXFMZW5ndGg9bGVuZ3RofHxNYXRoLm1heCgxLGJ5dGVMZW5ndGgpO2Fzc2VydChieXRlTGVuZ3RoPD1yZXFMZW5ndGgsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxhc3NlcnQocmVxTGVuZ3RoPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgYixpLGxpdHRsZUVuZGlhbj0ibGUiPT09ZW5kaWFuLHJlcz1uZXcgQXJyYXlUeXBlKHJlcUxlbmd0aCkscT10aGlzLmNsb25lKCk7aWYobGl0dGxlRW5kaWFuKXtmb3IoaT0wOyFxLmlzWmVybygpO2krKyliPXEuYW5kbG4oMjU1KSxxLml1c2hybig4KSxyZXNbaV09Yjtmb3IoO2k8cmVxTGVuZ3RoO2krKylyZXNbaV09MH1lbHNle2ZvcihpPTA7aTxyZXFMZW5ndGgtYnl0ZUxlbmd0aDtpKyspcmVzW2ldPTA7Zm9yKGk9MDshcS5pc1plcm8oKTtpKyspYj1xLmFuZGxuKDI1NSkscS5pdXNocm4oOCkscmVzW3JlcUxlbmd0aC1pLTFdPWJ9cmV0dXJuIHJlc30sTWF0aC5jbHozMj9CTi5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbiBfY291bnRCaXRzKHcpe3JldHVybiAzMi1NYXRoLmNsejMyKHcpfTpCTi5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbiBfY291bnRCaXRzKHcpe3ZhciB0PXcscj0wO3JldHVybiB0Pj00MDk2JiYocis9MTMsdD4+Pj0xMyksdD49NjQmJihyKz03LHQ+Pj49NyksdD49OCYmKHIrPTQsdD4+Pj00KSx0Pj0yJiYocis9Mix0Pj4+PTIpLHIrdH0sQk4ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbiBfemVyb0JpdHModyl7aWYoMD09PXcpcmV0dXJuIDI2O3ZhciB0PXcscj0wO3JldHVybiA4MTkxJnR8fChyKz0xMyx0Pj4+PTEzKSwxMjcmdHx8KHIrPTcsdD4+Pj03KSwxNSZ0fHwocis9NCx0Pj4+PTQpLDMmdHx8KHIrPTIsdD4+Pj0yKSwxJnR8fHIrKyxyfSxCTi5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uIGJpdExlbmd0aCgpe3ZhciB3PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0saGk9dGhpcy5fY291bnRCaXRzKHcpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkraGl9LEJOLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbiB6ZXJvQml0cygpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciByPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgYj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2ldKTtpZihyKz1iLDI2IT09YilicmVha31yZXR1cm4gcn0sQk4ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24gYnl0ZUxlbmd0aCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sQk4ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbiB0b1R3b3Mod2lkdGgpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHdpZHRoKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEJOLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbiBmcm9tVHdvcyh3aWR0aCl7cmV0dXJuIHRoaXMudGVzdG4od2lkdGgtMSk/dGhpcy5ub3RuKHdpZHRoKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxCTi5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24gaXNOZWcoKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEJOLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24gbmVnKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEJOLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uIGluZWcoKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEJOLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uIGl1b3IobnVtKXtmb3IoO3RoaXMubGVuZ3RoPG51bS5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGk9MDtpPG51bS5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09dGhpcy53b3Jkc1tpXXxudW0ud29yZHNbaV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmlvcj1mdW5jdGlvbiBpb3IobnVtKXtyZXR1cm4gYXNzZXJ0KDA9PT0odGhpcy5uZWdhdGl2ZXxudW0ubmVnYXRpdmUpKSx0aGlzLml1b3IobnVtKX0sQk4ucHJvdG90eXBlLm9yPWZ1bmN0aW9uIG9yKG51bSl7cmV0dXJuIHRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihudW0pOm51bS5jbG9uZSgpLmlvcih0aGlzKX0sQk4ucHJvdG90eXBlLnVvcj1mdW5jdGlvbiB1b3IobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihudW0pOm51bS5jbG9uZSgpLml1b3IodGhpcyl9LEJOLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbiBpdWFuZChudW0pe3ZhciBiO2I9dGhpcy5sZW5ndGg+bnVtLmxlbmd0aD9udW06dGhpcztmb3IodmFyIGk9MDtpPGIubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPXRoaXMud29yZHNbaV0mbnVtLndvcmRzW2ldO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uIGlhbmQobnVtKXtyZXR1cm4gYXNzZXJ0KDA9PT0odGhpcy5uZWdhdGl2ZXxudW0ubmVnYXRpdmUpKSx0aGlzLml1YW5kKG51bSl9LEJOLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24gYW5kKG51bSl7cmV0dXJuIHRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQobnVtKTpudW0uY2xvbmUoKS5pYW5kKHRoaXMpfSxCTi5wcm90b3R5cGUudWFuZD1mdW5jdGlvbiB1YW5kKG51bSl7cmV0dXJuIHRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKG51bSk6bnVtLmNsb25lKCkuaXVhbmQodGhpcyl9LEJOLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbiBpdXhvcihudW0pe3ZhciBhLGI7dGhpcy5sZW5ndGg+bnVtLmxlbmd0aD8oYT10aGlzLGI9bnVtKTooYT1udW0sYj10aGlzKTtmb3IodmFyIGk9MDtpPGIubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPWEud29yZHNbaV1eYi53b3Jkc1tpXTtpZih0aGlzIT09YSlmb3IoO2k8YS5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09YS53b3Jkc1tpXTtyZXR1cm4gdGhpcy5sZW5ndGg9YS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbiBpeG9yKG51bSl7cmV0dXJuIGFzc2VydCgwPT09KHRoaXMubmVnYXRpdmV8bnVtLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihudW0pfSxCTi5wcm90b3R5cGUueG9yPWZ1bmN0aW9uIHhvcihudW0pe3JldHVybiB0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKG51bSk6bnVtLmNsb25lKCkuaXhvcih0aGlzKX0sQk4ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24gdXhvcihudW0pe3JldHVybiB0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihudW0pOm51bS5jbG9uZSgpLml1eG9yKHRoaXMpfSxCTi5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24gaW5vdG4od2lkdGgpe2Fzc2VydCgibnVtYmVyIj09dHlwZW9mIHdpZHRoJiZ3aWR0aD49MCk7dmFyIGJ5dGVzTmVlZGVkPTB8TWF0aC5jZWlsKHdpZHRoLzI2KSxiaXRzTGVmdD13aWR0aCUyNjt0aGlzLl9leHBhbmQoYnl0ZXNOZWVkZWQpLGJpdHNMZWZ0PjAmJmJ5dGVzTmVlZGVkLS07Zm9yKHZhciBpPTA7aTxieXRlc05lZWRlZDtpKyspdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tpXTtyZXR1cm4gYml0c0xlZnQ+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LWJpdHNMZWZ0KSx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uIG5vdG4od2lkdGgpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4od2lkdGgpfSxCTi5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbiBzZXRuKGJpdCx2YWwpe2Fzc2VydCgibnVtYmVyIj09dHlwZW9mIGJpdCYmYml0Pj0wKTt2YXIgb2ZmPWJpdC8yNnwwLHdiaXQ9Yml0JTI2O3JldHVybiB0aGlzLl9leHBhbmQob2ZmKzEpLHRoaXMud29yZHNbb2ZmXT12YWw/dGhpcy53b3Jkc1tvZmZdfDE8PHdiaXQ6dGhpcy53b3Jkc1tvZmZdJn4oMTw8d2JpdCksdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbiBpYWRkKG51bSl7dmFyIHIsYSxiO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09bnVtLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAscj10aGlzLmlzdWIobnVtKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1udW0ubmVnYXRpdmUpcmV0dXJuIG51bS5uZWdhdGl2ZT0wLHI9dGhpcy5pc3ViKG51bSksbnVtLm5lZ2F0aXZlPTEsci5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5udW0ubGVuZ3RoPyhhPXRoaXMsYj1udW0pOihhPW51bSxiPXRoaXMpO2Zvcih2YXIgY2Fycnk9MCxpPTA7aTxiLmxlbmd0aDtpKyspcj0oMHxhLndvcmRzW2ldKSsoMHxiLndvcmRzW2ldKStjYXJyeSx0aGlzLndvcmRzW2ldPTY3MTA4ODYzJnIsY2Fycnk9cj4+PjI2O2Zvcig7MCE9PWNhcnJ5JiZpPGEubGVuZ3RoO2krKylyPSgwfGEud29yZHNbaV0pK2NhcnJ5LHRoaXMud29yZHNbaV09NjcxMDg4NjMmcixjYXJyeT1yPj4+MjY7aWYodGhpcy5sZW5ndGg9YS5sZW5ndGgsMCE9PWNhcnJ5KXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWNhcnJ5LHRoaXMubGVuZ3RoKys7ZWxzZSBpZihhIT09dGhpcylmb3IoO2k8YS5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09YS53b3Jkc1tpXTtyZXR1cm4gdGhpc30sQk4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbiBhZGQobnVtKXt2YXIgcmVzO3JldHVybiAwIT09bnVtLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8obnVtLm5lZ2F0aXZlPTAscmVzPXRoaXMuc3ViKG51bSksbnVtLm5lZ2F0aXZlXj0xLHJlcyk6MD09PW51bS5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxyZXM9bnVtLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEscmVzKTp0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKG51bSk6bnVtLmNsb25lKCkuaWFkZCh0aGlzKX0sQk4ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24gaXN1YihudW0pe2lmKDAhPT1udW0ubmVnYXRpdmUpe251bS5uZWdhdGl2ZT0wO3ZhciByPXRoaXMuaWFkZChudW0pO3JldHVybiBudW0ubmVnYXRpdmU9MSxyLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKG51bSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIGEsYixjbXA9dGhpcy5jbXAobnVtKTtpZigwPT09Y21wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztjbXA+MD8oYT10aGlzLGI9bnVtKTooYT1udW0sYj10aGlzKTtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8Yi5sZW5ndGg7aSsrKWNhcnJ5PShyPSgwfGEud29yZHNbaV0pLSgwfGIud29yZHNbaV0pK2NhcnJ5KT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZyO2Zvcig7MCE9PWNhcnJ5JiZpPGEubGVuZ3RoO2krKyljYXJyeT0ocj0oMHxhLndvcmRzW2ldKStjYXJyeSk+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmcjtpZigwPT09Y2FycnkmJmk8YS5sZW5ndGgmJmEhPT10aGlzKWZvcig7aTxhLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT1hLndvcmRzW2ldO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxpKSxhIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uIHN1YihudW0pe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihudW0pfTt2YXIgY29tYjEwTXVsVG89ZnVuY3Rpb24gY29tYjEwTXVsVG8oc2VsZixudW0sb3V0KXt2YXIgbG8sbWlkLGhpLGE9c2VsZi53b3JkcyxiPW51bS53b3JkcyxvPW91dC53b3JkcyxjPTAsYTA9MHxhWzBdLGFsMD04MTkxJmEwLGFoMD1hMD4+PjEzLGExPTB8YVsxXSxhbDE9ODE5MSZhMSxhaDE9YTE+Pj4xMyxhMj0wfGFbMl0sYWwyPTgxOTEmYTIsYWgyPWEyPj4+MTMsYTM9MHxhWzNdLGFsMz04MTkxJmEzLGFoMz1hMz4+PjEzLGE0PTB8YVs0XSxhbDQ9ODE5MSZhNCxhaDQ9YTQ+Pj4xMyxhNT0wfGFbNV0sYWw1PTgxOTEmYTUsYWg1PWE1Pj4+MTMsYTY9MHxhWzZdLGFsNj04MTkxJmE2LGFoNj1hNj4+PjEzLGE3PTB8YVs3XSxhbDc9ODE5MSZhNyxhaDc9YTc+Pj4xMyxhOD0wfGFbOF0sYWw4PTgxOTEmYTgsYWg4PWE4Pj4+MTMsYTk9MHxhWzldLGFsOT04MTkxJmE5LGFoOT1hOT4+PjEzLGIwPTB8YlswXSxibDA9ODE5MSZiMCxiaDA9YjA+Pj4xMyxiMT0wfGJbMV0sYmwxPTgxOTEmYjEsYmgxPWIxPj4+MTMsYjI9MHxiWzJdLGJsMj04MTkxJmIyLGJoMj1iMj4+PjEzLGIzPTB8YlszXSxibDM9ODE5MSZiMyxiaDM9YjM+Pj4xMyxiND0wfGJbNF0sYmw0PTgxOTEmYjQsYmg0PWI0Pj4+MTMsYjU9MHxiWzVdLGJsNT04MTkxJmI1LGJoNT1iNT4+PjEzLGI2PTB8Yls2XSxibDY9ODE5MSZiNixiaDY9YjY+Pj4xMyxiNz0wfGJbN10sYmw3PTgxOTEmYjcsYmg3PWI3Pj4+MTMsYjg9MHxiWzhdLGJsOD04MTkxJmI4LGJoOD1iOD4+PjEzLGI5PTB8Yls5XSxibDk9ODE5MSZiOSxiaDk9Yjk+Pj4xMztvdXQubmVnYXRpdmU9c2VsZi5uZWdhdGl2ZV5udW0ubmVnYXRpdmUsb3V0Lmxlbmd0aD0xOTt2YXIgdzA9KGMrKGxvPU1hdGguaW11bChhbDAsYmwwKSl8MCkrKCg4MTkxJihtaWQ9KG1pZD1NYXRoLmltdWwoYWwwLGJoMCkpK01hdGguaW11bChhaDAsYmwwKXwwKSk8PDEzKXwwO2M9KChoaT1NYXRoLmltdWwoYWgwLGJoMCkpKyhtaWQ+Pj4xMyl8MCkrKHcwPj4+MjYpfDAsdzAmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDEsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWwxLGJoMCkpK01hdGguaW11bChhaDEsYmwwKXwwLGhpPU1hdGguaW11bChhaDEsYmgwKTt2YXIgdzE9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmwxKXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoMSl8MCkrTWF0aC5pbXVsKGFoMCxibDEpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmgxKXwwKSsobWlkPj4+MTMpfDApKyh3MT4+PjI2KXwwLHcxJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWwyLGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsMixiaDApKStNYXRoLmltdWwoYWgyLGJsMCl8MCxoaT1NYXRoLmltdWwoYWgyLGJoMCksbG89bG8rTWF0aC5pbXVsKGFsMSxibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmgxKXwwKStNYXRoLmltdWwoYWgxLGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoMSl8MDt2YXIgdzI9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmwyKXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoMil8MCkrTWF0aC5pbXVsKGFoMCxibDIpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmgyKXwwKSsobWlkPj4+MTMpfDApKyh3Mj4+PjI2KXwwLHcyJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWwzLGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsMyxiaDApKStNYXRoLmltdWwoYWgzLGJsMCl8MCxoaT1NYXRoLmltdWwoYWgzLGJoMCksbG89bG8rTWF0aC5pbXVsKGFsMixibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmgxKXwwKStNYXRoLmltdWwoYWgyLGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoMSl8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDIpfDApK01hdGguaW11bChhaDEsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDEsYmgyKXwwO3ZhciB3Mz0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDMpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmgzKXwwKStNYXRoLmltdWwoYWgwLGJsMyl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDMpfDApKyhtaWQ+Pj4xMyl8MCkrKHczPj4+MjYpfDAsdzMmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDQsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw0LGJoMCkpK01hdGguaW11bChhaDQsYmwwKXwwLGhpPU1hdGguaW11bChhaDQsYmgwKSxsbz1sbytNYXRoLmltdWwoYWwzLGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDEpfDApK01hdGguaW11bChhaDMsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDMsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDIsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoMil8MCkrTWF0aC5pbXVsKGFoMixibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsMSxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmgzKXwwKStNYXRoLmltdWwoYWgxLGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoMyl8MDt2YXIgdzQ9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmw0KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoNCl8MCkrTWF0aC5pbXVsKGFoMCxibDQpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmg0KXwwKSsobWlkPj4+MTMpfDApKyh3ND4+PjI2KXwwLHc0Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw1LGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsNSxiaDApKStNYXRoLmltdWwoYWg1LGJsMCl8MCxoaT1NYXRoLmltdWwoYWg1LGJoMCksbG89bG8rTWF0aC5pbXVsKGFsNCxibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmgxKXwwKStNYXRoLmltdWwoYWg0LGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoMSl8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDIpfDApK01hdGguaW11bChhaDMsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDMsYmgyKXwwLGxvPWxvK01hdGguaW11bChhbDIsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoMyl8MCkrTWF0aC5pbXVsKGFoMixibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsMSxibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmg0KXwwKStNYXRoLmltdWwoYWgxLGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoNCl8MDt2YXIgdzU9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmw1KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoNSl8MCkrTWF0aC5pbXVsKGFoMCxibDUpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmg1KXwwKSsobWlkPj4+MTMpfDApKyh3NT4+PjI2KXwwLHc1Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw2LGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsNixiaDApKStNYXRoLmltdWwoYWg2LGJsMCl8MCxoaT1NYXRoLmltdWwoYWg2LGJoMCksbG89bG8rTWF0aC5pbXVsKGFsNSxibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmgxKXwwKStNYXRoLmltdWwoYWg1LGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoMSl8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDIpfDApK01hdGguaW11bChhaDQsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDQsYmgyKXwwLGxvPWxvK01hdGguaW11bChhbDMsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoMyl8MCkrTWF0aC5pbXVsKGFoMyxibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmg0KXwwKStNYXRoLmltdWwoYWgyLGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDUpfDApK01hdGguaW11bChhaDEsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDEsYmg1KXwwO3ZhciB3Nj0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDYpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg2KXwwKStNYXRoLmltdWwoYWgwLGJsNil8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDYpfDApKyhtaWQ+Pj4xMyl8MCkrKHc2Pj4+MjYpfDAsdzYmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDcsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw3LGJoMCkpK01hdGguaW11bChhaDcsYmwwKXwwLGhpPU1hdGguaW11bChhaDcsYmgwKSxsbz1sbytNYXRoLmltdWwoYWw2LGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDEpfDApK01hdGguaW11bChhaDYsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDYsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDUsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoMil8MCkrTWF0aC5pbXVsKGFoNSxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmgzKXwwKStNYXRoLmltdWwoYWg0LGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDQpfDApK01hdGguaW11bChhaDMsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDMsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDIsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoNSl8MCkrTWF0aC5pbXVsKGFoMixibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsMSxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmg2KXwwKStNYXRoLmltdWwoYWgxLGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoNil8MDt2YXIgdzc9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmw3KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoNyl8MCkrTWF0aC5pbXVsKGFoMCxibDcpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmg3KXwwKSsobWlkPj4+MTMpfDApKyh3Nz4+PjI2KXwwLHc3Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw4LGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOCxiaDApKStNYXRoLmltdWwoYWg4LGJsMCl8MCxoaT1NYXRoLmltdWwoYWg4LGJoMCksbG89bG8rTWF0aC5pbXVsKGFsNyxibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmgxKXwwKStNYXRoLmltdWwoYWg3LGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoMSl8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDIpfDApK01hdGguaW11bChhaDYsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDYsYmgyKXwwLGxvPWxvK01hdGguaW11bChhbDUsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoMyl8MCkrTWF0aC5pbXVsKGFoNSxibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg0KXwwKStNYXRoLmltdWwoYWg0LGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDUpfDApK01hdGguaW11bChhaDMsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDMsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDIsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoNil8MCkrTWF0aC5pbXVsKGFoMixibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsMSxibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmg3KXwwKStNYXRoLmltdWwoYWgxLGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoNyl8MDt2YXIgdzg9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmw4KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoOCl8MCkrTWF0aC5pbXVsKGFoMCxibDgpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmg4KXwwKSsobWlkPj4+MTMpfDApKyh3OD4+PjI2KXwwLHc4Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDApKStNYXRoLmltdWwoYWg5LGJsMCl8MCxoaT1NYXRoLmltdWwoYWg5LGJoMCksbG89bG8rTWF0aC5pbXVsKGFsOCxibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmgxKXwwKStNYXRoLmltdWwoYWg4LGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoMSl8MCxsbz1sbytNYXRoLmltdWwoYWw3LGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDIpfDApK01hdGguaW11bChhaDcsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDcsYmgyKXwwLGxvPWxvK01hdGguaW11bChhbDYsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoMyl8MCkrTWF0aC5pbXVsKGFoNixibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmg0KXwwKStNYXRoLmltdWwoYWg1LGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDUpfDApK01hdGguaW11bChhaDQsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDQsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDMsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoNil8MCkrTWF0aC5pbXVsKGFoMyxibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmg3KXwwKStNYXRoLmltdWwoYWgyLGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDgpfDApK01hdGguaW11bChhaDEsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDEsYmg4KXwwO3ZhciB3OT0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg5KXwwKStNYXRoLmltdWwoYWgwLGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHc5Pj4+MjYpfDAsdzkmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmwxKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoMSkpK01hdGguaW11bChhaDksYmwxKXwwLGhpPU1hdGguaW11bChhaDksYmgxKSxsbz1sbytNYXRoLmltdWwoYWw4LGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDIpfDApK01hdGguaW11bChhaDgsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDgsYmgyKXwwLGxvPWxvK01hdGguaW11bChhbDcsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoMyl8MCkrTWF0aC5pbXVsKGFoNyxibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmg0KXwwKStNYXRoLmltdWwoYWg2LGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDUpfDApK01hdGguaW11bChhaDUsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDUsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDQsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoNil8MCkrTWF0aC5pbXVsKGFoNCxibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmg3KXwwKStNYXRoLmltdWwoYWgzLGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDgpfDApK01hdGguaW11bChhaDIsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDIsYmg4KXwwO3ZhciB3MTA9KGMrKGxvPWxvK01hdGguaW11bChhbDEsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoOSl8MCkrTWF0aC5pbXVsKGFoMSxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDEsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTA+Pj4yNil8MCx3MTAmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmwyKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoMikpK01hdGguaW11bChhaDksYmwyKXwwLGhpPU1hdGguaW11bChhaDksYmgyKSxsbz1sbytNYXRoLmltdWwoYWw4LGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDMpfDApK01hdGguaW11bChhaDgsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDgsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDcsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoNCl8MCkrTWF0aC5pbXVsKGFoNyxibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmg1KXwwKStNYXRoLmltdWwoYWg2LGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDYpfDApK01hdGguaW11bChhaDUsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDUsYmg2KXwwLGxvPWxvK01hdGguaW11bChhbDQsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoNyl8MCkrTWF0aC5pbXVsKGFoNCxibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDcpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmg4KXwwKStNYXRoLmltdWwoYWgzLGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoOCl8MDt2YXIgdzExPShjKyhsbz1sbytNYXRoLmltdWwoYWwyLGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDkpfDApK01hdGguaW11bChhaDIsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgyLGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzExPj4+MjYpfDAsdzExJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsMyksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDMpKStNYXRoLmltdWwoYWg5LGJsMyl8MCxoaT1NYXRoLmltdWwoYWg5LGJoMyksbG89bG8rTWF0aC5pbXVsKGFsOCxibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmg0KXwwKStNYXRoLmltdWwoYWg4LGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWw3LGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDUpfDApK01hdGguaW11bChhaDcsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDcsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDYsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoNil8MCkrTWF0aC5pbXVsKGFoNixibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmg3KXwwKStNYXRoLmltdWwoYWg1LGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDgpfDApK01hdGguaW11bChhaDQsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDQsYmg4KXwwO3ZhciB3MTI9KGMrKGxvPWxvK01hdGguaW11bChhbDMsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoOSl8MCkrTWF0aC5pbXVsKGFoMyxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDMsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTI+Pj4yNil8MCx3MTImPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmw0KSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoNCkpK01hdGguaW11bChhaDksYmw0KXwwLGhpPU1hdGguaW11bChhaDksYmg0KSxsbz1sbytNYXRoLmltdWwoYWw4LGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDUpfDApK01hdGguaW11bChhaDgsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDgsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDcsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoNil8MCkrTWF0aC5pbXVsKGFoNyxibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmg3KXwwKStNYXRoLmltdWwoYWg2LGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDgpfDApK01hdGguaW11bChhaDUsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDUsYmg4KXwwO3ZhciB3MTM9KGMrKGxvPWxvK01hdGguaW11bChhbDQsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoOSl8MCkrTWF0aC5pbXVsKGFoNCxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDQsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTM+Pj4yNil8MCx3MTMmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmw1KSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoNSkpK01hdGguaW11bChhaDksYmw1KXwwLGhpPU1hdGguaW11bChhaDksYmg1KSxsbz1sbytNYXRoLmltdWwoYWw4LGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDYpfDApK01hdGguaW11bChhaDgsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDgsYmg2KXwwLGxvPWxvK01hdGguaW11bChhbDcsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoNyl8MCkrTWF0aC5pbXVsKGFoNyxibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDcpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmg4KXwwKStNYXRoLmltdWwoYWg2LGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoOCl8MDt2YXIgdzE0PShjKyhsbz1sbytNYXRoLmltdWwoYWw1LGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDkpfDApK01hdGguaW11bChhaDUsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWg1LGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzE0Pj4+MjYpfDAsdzE0Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsNiksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDYpKStNYXRoLmltdWwoYWg5LGJsNil8MCxoaT1NYXRoLmltdWwoYWg5LGJoNiksbG89bG8rTWF0aC5pbXVsKGFsOCxibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmg3KXwwKStNYXRoLmltdWwoYWg4LGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWw3LGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDgpfDApK01hdGguaW11bChhaDcsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDcsYmg4KXwwO3ZhciB3MTU9KGMrKGxvPWxvK01hdGguaW11bChhbDYsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoOSl8MCkrTWF0aC5pbXVsKGFoNixibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDYsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTU+Pj4yNil8MCx3MTUmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmw3KSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoNykpK01hdGguaW11bChhaDksYmw3KXwwLGhpPU1hdGguaW11bChhaDksYmg3KSxsbz1sbytNYXRoLmltdWwoYWw4LGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDgpfDApK01hdGguaW11bChhaDgsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDgsYmg4KXwwO3ZhciB3MTY9KGMrKGxvPWxvK01hdGguaW11bChhbDcsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoOSl8MCkrTWF0aC5pbXVsKGFoNyxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDcsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTY+Pj4yNil8MCx3MTYmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmw4KSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoOCkpK01hdGguaW11bChhaDksYmw4KXwwLGhpPU1hdGguaW11bChhaDksYmg4KTt2YXIgdzE3PShjKyhsbz1sbytNYXRoLmltdWwoYWw4LGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDkpfDApK01hdGguaW11bChhaDgsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWg4LGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzE3Pj4+MjYpfDAsdzE3Jj02NzEwODg2Mzt2YXIgdzE4PShjKyhsbz1NYXRoLmltdWwoYWw5LGJsOSkpfDApKygoODE5MSYobWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDkpKStNYXRoLmltdWwoYWg5LGJsOSl8MCkpPDwxMyl8MDtyZXR1cm4gYz0oKGhpPU1hdGguaW11bChhaDksYmg5KSkrKG1pZD4+PjEzKXwwKSsodzE4Pj4+MjYpfDAsdzE4Jj02NzEwODg2MyxvWzBdPXcwLG9bMV09dzEsb1syXT13MixvWzNdPXczLG9bNF09dzQsb1s1XT13NSxvWzZdPXc2LG9bN109dzcsb1s4XT13OCxvWzldPXc5LG9bMTBdPXcxMCxvWzExXT13MTEsb1sxMl09dzEyLG9bMTNdPXcxMyxvWzE0XT13MTQsb1sxNV09dzE1LG9bMTZdPXcxNixvWzE3XT13MTcsb1sxOF09dzE4LDAhPT1jJiYob1sxOV09YyxvdXQubGVuZ3RoKyspLG91dH07ZnVuY3Rpb24ganVtYm9NdWxUbyhzZWxmLG51bSxvdXQpe3JldHVybihuZXcgRkZUTSkubXVscChzZWxmLG51bSxvdXQpfWZ1bmN0aW9uIEZGVE0oeCx5KXt0aGlzLng9eCx0aGlzLnk9eX1NYXRoLmltdWx8fChjb21iMTBNdWxUbz1zbWFsbE11bFRvKSxCTi5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24gbXVsVG8obnVtLG91dCl7dmFyIHJlcyxsZW49dGhpcy5sZW5ndGgrbnVtLmxlbmd0aDtyZXR1cm4gcmVzPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09bnVtLmxlbmd0aD9jb21iMTBNdWxUbyh0aGlzLG51bSxvdXQpOmxlbjw2Mz9zbWFsbE11bFRvKHRoaXMsbnVtLG91dCk6bGVuPDEwMjQ/ZnVuY3Rpb24gYmlnTXVsVG8oc2VsZixudW0sb3V0KXtvdXQubmVnYXRpdmU9bnVtLm5lZ2F0aXZlXnNlbGYubmVnYXRpdmUsb3V0Lmxlbmd0aD1zZWxmLmxlbmd0aCtudW0ubGVuZ3RoO2Zvcih2YXIgY2Fycnk9MCxobmNhcnJ5PTAsaz0wO2s8b3V0Lmxlbmd0aC0xO2srKyl7dmFyIG5jYXJyeT1obmNhcnJ5O2huY2Fycnk9MDtmb3IodmFyIHJ3b3JkPTY3MTA4ODYzJmNhcnJ5LG1heEo9TWF0aC5taW4oayxudW0ubGVuZ3RoLTEpLGo9TWF0aC5tYXgoMCxrLXNlbGYubGVuZ3RoKzEpO2o8PW1heEo7aisrKXt2YXIgaT1rLWoscj0oMHxzZWxmLndvcmRzW2ldKSooMHxudW0ud29yZHNbal0pLGxvPTY3MTA4ODYzJnI7cndvcmQ9NjcxMDg4NjMmKGxvPWxvK3J3b3JkfDApLGhuY2FycnkrPShuY2Fycnk9KG5jYXJyeT1uY2FycnkrKHIvNjcxMDg4NjR8MCl8MCkrKGxvPj4+MjYpfDApPj4+MjYsbmNhcnJ5Jj02NzEwODg2M31vdXQud29yZHNba109cndvcmQsY2Fycnk9bmNhcnJ5LG5jYXJyeT1obmNhcnJ5fXJldHVybiAwIT09Y2Fycnk/b3V0LndvcmRzW2tdPWNhcnJ5Om91dC5sZW5ndGgtLSxvdXQuc3RyaXAoKX0odGhpcyxudW0sb3V0KTpqdW1ib011bFRvKHRoaXMsbnVtLG91dCkscmVzfSxGRlRNLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uIG1ha2VSQlQoTil7Zm9yKHZhciB0PW5ldyBBcnJheShOKSxsPUJOLnByb3RvdHlwZS5fY291bnRCaXRzKE4pLTEsaT0wO2k8TjtpKyspdFtpXT10aGlzLnJldkJpbihpLGwsTik7cmV0dXJuIHR9LEZGVE0ucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbiByZXZCaW4oeCxsLE4pe2lmKDA9PT14fHx4PT09Ti0xKXJldHVybiB4O2Zvcih2YXIgcmI9MCxpPTA7aTxsO2krKylyYnw9KDEmeCk8PGwtaS0xLHg+Pj0xO3JldHVybiByYn0sRkZUTS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbiBwZXJtdXRlKHJidCxyd3MsaXdzLHJ0d3MsaXR3cyxOKXtmb3IodmFyIGk9MDtpPE47aSsrKXJ0d3NbaV09cndzW3JidFtpXV0saXR3c1tpXT1pd3NbcmJ0W2ldXX0sRkZUTS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uIHRyYW5zZm9ybShyd3MsaXdzLHJ0d3MsaXR3cyxOLHJidCl7dGhpcy5wZXJtdXRlKHJidCxyd3MsaXdzLHJ0d3MsaXR3cyxOKTtmb3IodmFyIHM9MTtzPE47czw8PTEpZm9yKHZhciBsPXM8PDEscnR3ZGY9TWF0aC5jb3MoMipNYXRoLlBJL2wpLGl0d2RmPU1hdGguc2luKDIqTWF0aC5QSS9sKSxwPTA7cDxOO3ArPWwpZm9yKHZhciBydHdkZl89cnR3ZGYsaXR3ZGZfPWl0d2RmLGo9MDtqPHM7aisrKXt2YXIgcmU9cnR3c1twK2pdLGllPWl0d3NbcCtqXSxybz1ydHdzW3AraitzXSxpbz1pdHdzW3AraitzXSxyeD1ydHdkZl8qcm8taXR3ZGZfKmlvO2lvPXJ0d2RmXyppbytpdHdkZl8qcm8scm89cngscnR3c1twK2pdPXJlK3JvLGl0d3NbcCtqXT1pZStpbyxydHdzW3AraitzXT1yZS1ybyxpdHdzW3AraitzXT1pZS1pbyxqIT09bCYmKHJ4PXJ0d2RmKnJ0d2RmXy1pdHdkZippdHdkZl8saXR3ZGZfPXJ0d2RmKml0d2RmXytpdHdkZipydHdkZl8scnR3ZGZfPXJ4KX19LEZGVE0ucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uIGd1ZXNzTGVuMTNiKG4sbSl7dmFyIE49MXxNYXRoLm1heChtLG4pLG9kZD0xJk4saT0wO2ZvcihOPU4vMnwwO047Tj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK29kZH0sRkZUTS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uIGNvbmp1Z2F0ZShyd3MsaXdzLE4pe2lmKCEoTjw9MSkpZm9yKHZhciBpPTA7aTxOLzI7aSsrKXt2YXIgdD1yd3NbaV07cndzW2ldPXJ3c1tOLWktMV0scndzW04taS0xXT10LHQ9aXdzW2ldLGl3c1tpXT0taXdzW04taS0xXSxpd3NbTi1pLTFdPS10fX0sRkZUTS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uIG5vcm1hbGl6ZTEzYih3cyxOKXtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8Ti8yO2krKyl7dmFyIHc9ODE5MipNYXRoLnJvdW5kKHdzWzIqaSsxXS9OKStNYXRoLnJvdW5kKHdzWzIqaV0vTikrY2Fycnk7d3NbaV09NjcxMDg4NjMmdyxjYXJyeT13PDY3MTA4ODY0PzA6dy82NzEwODg2NHwwfXJldHVybiB3c30sRkZUTS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbiBjb252ZXJ0MTNiKHdzLGxlbixyd3MsTil7Zm9yKHZhciBjYXJyeT0wLGk9MDtpPGxlbjtpKyspY2FycnkrPTB8d3NbaV0scndzWzIqaV09ODE5MSZjYXJyeSxjYXJyeT4+Pj0xMyxyd3NbMippKzFdPTgxOTEmY2FycnksY2Fycnk+Pj49MTM7Zm9yKGk9MipsZW47aTxOOysraSlyd3NbaV09MDthc3NlcnQoMD09PWNhcnJ5KSxhc3NlcnQoISgtODE5MiZjYXJyeSkpfSxGRlRNLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uIHN0dWIoTil7Zm9yKHZhciBwaD1uZXcgQXJyYXkoTiksaT0wO2k8TjtpKyspcGhbaV09MDtyZXR1cm4gcGh9LEZGVE0ucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24gbXVscCh4LHksb3V0KXt2YXIgTj0yKnRoaXMuZ3Vlc3NMZW4xM2IoeC5sZW5ndGgseS5sZW5ndGgpLHJidD10aGlzLm1ha2VSQlQoTiksXz10aGlzLnN0dWIoTikscndzPW5ldyBBcnJheShOKSxyd3N0PW5ldyBBcnJheShOKSxpd3N0PW5ldyBBcnJheShOKSxucndzPW5ldyBBcnJheShOKSxucndzdD1uZXcgQXJyYXkoTiksbml3c3Q9bmV3IEFycmF5KE4pLHJtd3M9b3V0LndvcmRzO3Jtd3MubGVuZ3RoPU4sdGhpcy5jb252ZXJ0MTNiKHgud29yZHMseC5sZW5ndGgscndzLE4pLHRoaXMuY29udmVydDEzYih5LndvcmRzLHkubGVuZ3RoLG5yd3MsTiksdGhpcy50cmFuc2Zvcm0ocndzLF8scndzdCxpd3N0LE4scmJ0KSx0aGlzLnRyYW5zZm9ybShucndzLF8sbnJ3c3Qsbml3c3QsTixyYnQpO2Zvcih2YXIgaT0wO2k8TjtpKyspe3ZhciByeD1yd3N0W2ldKm5yd3N0W2ldLWl3c3RbaV0qbml3c3RbaV07aXdzdFtpXT1yd3N0W2ldKm5pd3N0W2ldK2l3c3RbaV0qbnJ3c3RbaV0scndzdFtpXT1yeH1yZXR1cm4gdGhpcy5jb25qdWdhdGUocndzdCxpd3N0LE4pLHRoaXMudHJhbnNmb3JtKHJ3c3QsaXdzdCxybXdzLF8sTixyYnQpLHRoaXMuY29uanVnYXRlKHJtd3MsXyxOKSx0aGlzLm5vcm1hbGl6ZTEzYihybXdzLE4pLG91dC5uZWdhdGl2ZT14Lm5lZ2F0aXZlXnkubmVnYXRpdmUsb3V0Lmxlbmd0aD14Lmxlbmd0aCt5Lmxlbmd0aCxvdXQuc3RyaXAoKX0sQk4ucHJvdG90eXBlLm11bD1mdW5jdGlvbiBtdWwobnVtKXt2YXIgb3V0PW5ldyBCTihudWxsKTtyZXR1cm4gb3V0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtudW0ubGVuZ3RoKSx0aGlzLm11bFRvKG51bSxvdXQpfSxCTi5wcm90b3R5cGUubXVsZj1mdW5jdGlvbiBtdWxmKG51bSl7dmFyIG91dD1uZXcgQk4obnVsbCk7cmV0dXJuIG91dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrbnVtLmxlbmd0aCksanVtYm9NdWxUbyh0aGlzLG51bSxvdXQpfSxCTi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbiBpbXVsKG51bSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhudW0sdGhpcyl9LEJOLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbiBpbXVsbihudW0pe2Fzc2VydCgibnVtYmVyIj09dHlwZW9mIG51bSksYXNzZXJ0KG51bTw2NzEwODg2NCk7Zm9yKHZhciBjYXJyeT0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKyl7dmFyIHc9KDB8dGhpcy53b3Jkc1tpXSkqbnVtLGxvPSg2NzEwODg2MyZ3KSsoNjcxMDg4NjMmY2FycnkpO2NhcnJ5Pj49MjYsY2FycnkrPXcvNjcxMDg4NjR8MCxjYXJyeSs9bG8+Pj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmxvfXJldHVybiAwIT09Y2FycnkmJih0aGlzLndvcmRzW2ldPWNhcnJ5LHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1udW0/MTp0aGlzLmxlbmd0aCx0aGlzfSxCTi5wcm90b3R5cGUubXVsbj1mdW5jdGlvbiBtdWxuKG51bSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihudW0pfSxCTi5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uIHNxcigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sQk4ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24gaXNxcigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sQk4ucHJvdG90eXBlLnBvdz1mdW5jdGlvbiBwb3cobnVtKXt2YXIgdz1mdW5jdGlvbiB0b0JpdEFycmF5KG51bSl7Zm9yKHZhciB3PW5ldyBBcnJheShudW0uYml0TGVuZ3RoKCkpLGJpdD0wO2JpdDx3Lmxlbmd0aDtiaXQrKyl7dmFyIG9mZj1iaXQvMjZ8MCx3Yml0PWJpdCUyNjt3W2JpdF09KG51bS53b3Jkc1tvZmZdJjE8PHdiaXQpPj4+d2JpdH1yZXR1cm4gd30obnVtKTtpZigwPT09dy5sZW5ndGgpcmV0dXJuIG5ldyBCTigxKTtmb3IodmFyIHJlcz10aGlzLGk9MDtpPHcubGVuZ3RoJiYwPT09d1tpXTtpKysscmVzPXJlcy5zcXIoKSk7aWYoKytpPHcubGVuZ3RoKWZvcih2YXIgcT1yZXMuc3FyKCk7aTx3Lmxlbmd0aDtpKysscT1xLnNxcigpKTAhPT13W2ldJiYocmVzPXJlcy5tdWwocSkpO3JldHVybiByZXN9LEJOLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24gaXVzaGxuKGJpdHMpe2Fzc2VydCgibnVtYmVyIj09dHlwZW9mIGJpdHMmJmJpdHM+PTApO3ZhciBpLHI9Yml0cyUyNixzPShiaXRzLXIpLzI2LGNhcnJ5TWFzaz02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBjYXJyeT0wO2ZvcihpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciBuZXdDYXJyeT10aGlzLndvcmRzW2ldJmNhcnJ5TWFzayxjPSgwfHRoaXMud29yZHNbaV0pLW5ld0NhcnJ5PDxyO3RoaXMud29yZHNbaV09Y3xjYXJyeSxjYXJyeT1uZXdDYXJyeT4+PjI2LXJ9Y2FycnkmJih0aGlzLndvcmRzW2ldPWNhcnJ5LHRoaXMubGVuZ3RoKyspfWlmKDAhPT1zKXtmb3IoaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXRoaXMud29yZHNbaStzXT10aGlzLndvcmRzW2ldO2ZvcihpPTA7aTxzO2krKyl0aGlzLndvcmRzW2ldPTA7dGhpcy5sZW5ndGgrPXN9cmV0dXJuIHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uIGlzaGxuKGJpdHMpe3JldHVybiBhc3NlcnQoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGJpdHMpfSxCTi5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uIGl1c2hybihiaXRzLGhpbnQsZXh0ZW5kZWQpe3ZhciBoO2Fzc2VydCgibnVtYmVyIj09dHlwZW9mIGJpdHMmJmJpdHM+PTApLGg9aGludD8oaGludC1oaW50JTI2KS8yNjowO3ZhciByPWJpdHMlMjYscz1NYXRoLm1pbigoYml0cy1yKS8yNix0aGlzLmxlbmd0aCksbWFzaz02NzEwODg2M142NzEwODg2Mz4+PnI8PHIsbWFza2VkV29yZHM9ZXh0ZW5kZWQ7aWYoaC09cyxoPU1hdGgubWF4KDAsaCksbWFza2VkV29yZHMpe2Zvcih2YXIgaT0wO2k8cztpKyspbWFza2VkV29yZHMud29yZHNbaV09dGhpcy53b3Jkc1tpXTttYXNrZWRXb3Jkcy5sZW5ndGg9c31pZigwPT09cyk7ZWxzZSBpZih0aGlzLmxlbmd0aD5zKWZvcih0aGlzLmxlbmd0aC09cyxpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT10aGlzLndvcmRzW2krc107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgY2Fycnk9MDtmb3IoaT10aGlzLmxlbmd0aC0xO2k+PTAmJigwIT09Y2Fycnl8fGk+PWgpO2ktLSl7dmFyIHdvcmQ9MHx0aGlzLndvcmRzW2ldO3RoaXMud29yZHNbaV09Y2Fycnk8PDI2LXJ8d29yZD4+PnIsY2Fycnk9d29yZCZtYXNrfXJldHVybiBtYXNrZWRXb3JkcyYmMCE9PWNhcnJ5JiYobWFza2VkV29yZHMud29yZHNbbWFza2VkV29yZHMubGVuZ3RoKytdPWNhcnJ5KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24gaXNocm4oYml0cyxoaW50LGV4dGVuZGVkKXtyZXR1cm4gYXNzZXJ0KDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihiaXRzLGhpbnQsZXh0ZW5kZWQpfSxCTi5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbiBzaGxuKGJpdHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oYml0cyl9LEJOLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbiB1c2hsbihiaXRzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihiaXRzKX0sQk4ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24gc2hybihiaXRzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGJpdHMpfSxCTi5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24gdXNocm4oYml0cyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oYml0cyl9LEJOLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbiB0ZXN0bihiaXQpe2Fzc2VydCgibnVtYmVyIj09dHlwZW9mIGJpdCYmYml0Pj0wKTt2YXIgcj1iaXQlMjYscz0oYml0LXIpLzI2LHE9MTw8cjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1zKSYmISEodGhpcy53b3Jkc1tzXSZxKX0sQk4ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbiBpbWFza24oYml0cyl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0cyYmYml0cz49MCk7dmFyIHI9Yml0cyUyNixzPShiaXRzLXIpLzI2O2lmKGFzc2VydCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXMpcmV0dXJuIHRoaXM7aWYoMCE9PXImJnMrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihzLHRoaXMubGVuZ3RoKSwwIT09cil7dmFyIG1hc2s9NjcxMDg4NjNeNjcxMDg4NjM+Pj5yPDxyO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPW1hc2t9cmV0dXJuIDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbiBtYXNrbihiaXRzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihiaXRzKX0sQk4ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uIGlhZGRuKG51bSl7cmV0dXJuIGFzc2VydCgibnVtYmVyIj09dHlwZW9mIG51bSksYXNzZXJ0KG51bTw2NzEwODg2NCksbnVtPDA/dGhpcy5pc3VibigtbnVtKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPG51bT8odGhpcy53b3Jkc1swXT1udW0tKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihudW0pLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihudW0pfSxCTi5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uIF9pYWRkbihudW0pe3RoaXMud29yZHNbMF0rPW51bTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2ldPj02NzEwODg2NDtpKyspdGhpcy53b3Jkc1tpXS09NjcxMDg4NjQsaT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tpKzFdPTE6dGhpcy53b3Jkc1tpKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGkrMSksdGhpc30sQk4ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uIGlzdWJuKG51bSl7aWYoYXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgbnVtKSxhc3NlcnQobnVtPDY3MTA4ODY0KSxudW08MClyZXR1cm4gdGhpcy5pYWRkbigtbnVtKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4obnVtKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1udW0sMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2ldPDA7aSsrKXRoaXMud29yZHNbaV0rPTY3MTA4ODY0LHRoaXMud29yZHNbaSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbiBhZGRuKG51bSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihudW0pfSxCTi5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbiBzdWJuKG51bSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihudW0pfSxCTi5wcm90b3R5cGUuaWFicz1mdW5jdGlvbiBpYWJzKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxCTi5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uIGFicygpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxCTi5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uIF9pc2hsbnN1Ym11bChudW0sbXVsLHNoaWZ0KXt2YXIgaSx3LGxlbj1udW0ubGVuZ3RoK3NoaWZ0O3RoaXMuX2V4cGFuZChsZW4pO3ZhciBjYXJyeT0wO2ZvcihpPTA7aTxudW0ubGVuZ3RoO2krKyl7dz0oMHx0aGlzLndvcmRzW2krc2hpZnRdKStjYXJyeTt2YXIgcmlnaHQ9KDB8bnVtLndvcmRzW2ldKSptdWw7Y2Fycnk9KCh3LT02NzEwODg2MyZyaWdodCk+PjI2KS0ocmlnaHQvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK3NoaWZ0XT02NzEwODg2MyZ3fWZvcig7aTx0aGlzLmxlbmd0aC1zaGlmdDtpKyspY2Fycnk9KHc9KDB8dGhpcy53b3Jkc1tpK3NoaWZ0XSkrY2FycnkpPj4yNix0aGlzLndvcmRzW2krc2hpZnRdPTY3MTA4ODYzJnc7aWYoMD09PWNhcnJ5KXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGFzc2VydCgtMT09PWNhcnJ5KSxjYXJyeT0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKyljYXJyeT0odz0tKDB8dGhpcy53b3Jkc1tpXSkrY2FycnkpPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJnc7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbiBfd29yZERpdihudW0sbW9kZSl7dmFyIHNoaWZ0PSh0aGlzLmxlbmd0aCxudW0ubGVuZ3RoKSxhPXRoaXMuY2xvbmUoKSxiPW51bSxiaGk9MHxiLndvcmRzW2IubGVuZ3RoLTFdOzAhPT0oc2hpZnQ9MjYtdGhpcy5fY291bnRCaXRzKGJoaSkpJiYoYj1iLnVzaGxuKHNoaWZ0KSxhLml1c2hsbihzaGlmdCksYmhpPTB8Yi53b3Jkc1tiLmxlbmd0aC0xXSk7dmFyIHEsbT1hLmxlbmd0aC1iLmxlbmd0aDtpZigibW9kIiE9PW1vZGUpeyhxPW5ldyBCTihudWxsKSkubGVuZ3RoPW0rMSxxLndvcmRzPW5ldyBBcnJheShxLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTxxLmxlbmd0aDtpKyspcS53b3Jkc1tpXT0wfXZhciBkaWZmPWEuY2xvbmUoKS5faXNobG5zdWJtdWwoYiwxLG0pOzA9PT1kaWZmLm5lZ2F0aXZlJiYoYT1kaWZmLHEmJihxLndvcmRzW21dPTEpKTtmb3IodmFyIGo9bS0xO2o+PTA7ai0tKXt2YXIgcWo9NjcxMDg4NjQqKDB8YS53b3Jkc1tiLmxlbmd0aCtqXSkrKDB8YS53b3Jkc1tiLmxlbmd0aCtqLTFdKTtmb3IocWo9TWF0aC5taW4ocWovYmhpfDAsNjcxMDg4NjMpLGEuX2lzaGxuc3VibXVsKGIscWosaik7MCE9PWEubmVnYXRpdmU7KXFqLS0sYS5uZWdhdGl2ZT0wLGEuX2lzaGxuc3VibXVsKGIsMSxqKSxhLmlzWmVybygpfHwoYS5uZWdhdGl2ZV49MSk7cSYmKHEud29yZHNbal09cWopfXJldHVybiBxJiZxLnN0cmlwKCksYS5zdHJpcCgpLCJkaXYiIT09bW9kZSYmMCE9PXNoaWZ0JiZhLml1c2hybihzaGlmdCkse2RpdjpxfHxudWxsLG1vZDphfX0sQk4ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbiBkaXZtb2QobnVtLG1vZGUscG9zaXRpdmUpe3JldHVybiBhc3NlcnQoIW51bS5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBCTigwKSxtb2Q6bmV3IEJOKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PW51bS5uZWdhdGl2ZT8ocmVzPXRoaXMubmVnKCkuZGl2bW9kKG51bSxtb2RlKSwibW9kIiE9PW1vZGUmJihkaXY9cmVzLmRpdi5uZWcoKSksImRpdiIhPT1tb2RlJiYobW9kPXJlcy5tb2QubmVnKCkscG9zaXRpdmUmJjAhPT1tb2QubmVnYXRpdmUmJm1vZC5pYWRkKG51bSkpLHtkaXYsbW9kfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1udW0ubmVnYXRpdmU/KHJlcz10aGlzLmRpdm1vZChudW0ubmVnKCksbW9kZSksIm1vZCIhPT1tb2RlJiYoZGl2PXJlcy5kaXYubmVnKCkpLHtkaXYsbW9kOnJlcy5tb2R9KTowIT09KHRoaXMubmVnYXRpdmUmbnVtLm5lZ2F0aXZlKT8ocmVzPXRoaXMubmVnKCkuZGl2bW9kKG51bS5uZWcoKSxtb2RlKSwiZGl2IiE9PW1vZGUmJihtb2Q9cmVzLm1vZC5uZWcoKSxwb3NpdGl2ZSYmMCE9PW1vZC5uZWdhdGl2ZSYmbW9kLmlzdWIobnVtKSkse2RpdjpyZXMuZGl2LG1vZH0pOm51bS5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKG51bSk8MD97ZGl2Om5ldyBCTigwKSxtb2Q6dGhpc306MT09PW51bS5sZW5ndGg/ImRpdiI9PT1tb2RlP3tkaXY6dGhpcy5kaXZuKG51bS53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09bW9kZT97ZGl2Om51bGwsbW9kOm5ldyBCTih0aGlzLm1vZG4obnVtLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKG51bS53b3Jkc1swXSksbW9kOm5ldyBCTih0aGlzLm1vZG4obnVtLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYobnVtLG1vZGUpO3ZhciBkaXYsbW9kLHJlc30sQk4ucHJvdG90eXBlLmRpdj1mdW5jdGlvbiBkaXYobnVtKXtyZXR1cm4gdGhpcy5kaXZtb2QobnVtLCJkaXYiLCExKS5kaXZ9LEJOLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24gbW9kKG51bSl7cmV0dXJuIHRoaXMuZGl2bW9kKG51bSwibW9kIiwhMSkubW9kfSxCTi5wcm90b3R5cGUudW1vZD1mdW5jdGlvbiB1bW9kKG51bSl7cmV0dXJuIHRoaXMuZGl2bW9kKG51bSwibW9kIiwhMCkubW9kfSxCTi5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24gZGl2Um91bmQobnVtKXt2YXIgZG09dGhpcy5kaXZtb2QobnVtKTtpZihkbS5tb2QuaXNaZXJvKCkpcmV0dXJuIGRtLmRpdjt2YXIgbW9kPTAhPT1kbS5kaXYubmVnYXRpdmU/ZG0ubW9kLmlzdWIobnVtKTpkbS5tb2QsaGFsZj1udW0udXNocm4oMSkscjI9bnVtLmFuZGxuKDEpLGNtcD1tb2QuY21wKGhhbGYpO3JldHVybiBjbXA8MHx8MT09PXIyJiYwPT09Y21wP2RtLmRpdjowIT09ZG0uZGl2Lm5lZ2F0aXZlP2RtLmRpdi5pc3VibigxKTpkbS5kaXYuaWFkZG4oMSl9LEJOLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uIG1vZG4obnVtKXthc3NlcnQobnVtPD02NzEwODg2Myk7Zm9yKHZhciBwPSgxPDwyNiklbnVtLGFjYz0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSlhY2M9KHAqYWNjKygwfHRoaXMud29yZHNbaV0pKSVudW07cmV0dXJuIGFjY30sQk4ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uIGlkaXZuKG51bSl7YXNzZXJ0KG51bTw9NjcxMDg4NjMpO2Zvcih2YXIgY2Fycnk9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciB3PSgwfHRoaXMud29yZHNbaV0pKzY3MTA4ODY0KmNhcnJ5O3RoaXMud29yZHNbaV09dy9udW18MCxjYXJyeT13JW51bX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbiBkaXZuKG51bSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihudW0pfSxCTi5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbiBlZ2NkKHApe2Fzc2VydCgwPT09cC5uZWdhdGl2ZSksYXNzZXJ0KCFwLmlzWmVybygpKTt2YXIgeD10aGlzLHk9cC5jbG9uZSgpO3g9MCE9PXgubmVnYXRpdmU/eC51bW9kKHApOnguY2xvbmUoKTtmb3IodmFyIEE9bmV3IEJOKDEpLEI9bmV3IEJOKDApLEM9bmV3IEJOKDApLEQ9bmV3IEJOKDEpLGc9MDt4LmlzRXZlbigpJiZ5LmlzRXZlbigpOyl4Lml1c2hybigxKSx5Lml1c2hybigxKSwrK2c7Zm9yKHZhciB5cD15LmNsb25lKCkseHA9eC5jbG9uZSgpOyF4LmlzWmVybygpOyl7Zm9yKHZhciBpPTAsaW09MTswPT09KHgud29yZHNbMF0maW0pJiZpPDI2OysraSxpbTw8PTEpO2lmKGk+MClmb3IoeC5pdXNocm4oaSk7aS0tID4wOykoQS5pc09kZCgpfHxCLmlzT2RkKCkpJiYoQS5pYWRkKHlwKSxCLmlzdWIoeHApKSxBLml1c2hybigxKSxCLml1c2hybigxKTtmb3IodmFyIGo9MCxqbT0xOzA9PT0oeS53b3Jkc1swXSZqbSkmJmo8MjY7KytqLGptPDw9MSk7aWYoaj4wKWZvcih5Lml1c2hybihqKTtqLS0gPjA7KShDLmlzT2RkKCl8fEQuaXNPZGQoKSkmJihDLmlhZGQoeXApLEQuaXN1Yih4cCkpLEMuaXVzaHJuKDEpLEQuaXVzaHJuKDEpO3guY21wKHkpPj0wPyh4LmlzdWIoeSksQS5pc3ViKEMpLEIuaXN1YihEKSk6KHkuaXN1Yih4KSxDLmlzdWIoQSksRC5pc3ViKEIpKX1yZXR1cm57YTpDLGI6RCxnY2Q6eS5pdXNobG4oZyl9fSxCTi5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uIF9pbnZtcChwKXthc3NlcnQoMD09PXAubmVnYXRpdmUpLGFzc2VydCghcC5pc1plcm8oKSk7dmFyIGE9dGhpcyxiPXAuY2xvbmUoKTthPTAhPT1hLm5lZ2F0aXZlP2EudW1vZChwKTphLmNsb25lKCk7Zm9yKHZhciByZXMseDE9bmV3IEJOKDEpLHgyPW5ldyBCTigwKSxkZWx0YT1iLmNsb25lKCk7YS5jbXBuKDEpPjAmJmIuY21wbigxKT4wOyl7Zm9yKHZhciBpPTAsaW09MTswPT09KGEud29yZHNbMF0maW0pJiZpPDI2OysraSxpbTw8PTEpO2lmKGk+MClmb3IoYS5pdXNocm4oaSk7aS0tID4wOyl4MS5pc09kZCgpJiZ4MS5pYWRkKGRlbHRhKSx4MS5pdXNocm4oMSk7Zm9yKHZhciBqPTAsam09MTswPT09KGIud29yZHNbMF0mam0pJiZqPDI2OysraixqbTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0tID4wOyl4Mi5pc09kZCgpJiZ4Mi5pYWRkKGRlbHRhKSx4Mi5pdXNocm4oMSk7YS5jbXAoYik+PTA/KGEuaXN1YihiKSx4MS5pc3ViKHgyKSk6KGIuaXN1YihhKSx4Mi5pc3ViKHgxKSl9cmV0dXJuKHJlcz0wPT09YS5jbXBuKDEpP3gxOngyKS5jbXBuKDApPDAmJnJlcy5pYWRkKHApLHJlc30sQk4ucHJvdG90eXBlLmdjZD1mdW5jdGlvbiBnY2QobnVtKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBudW0uYWJzKCk7aWYobnVtLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBhPXRoaXMuY2xvbmUoKSxiPW51bS5jbG9uZSgpO2EubmVnYXRpdmU9MCxiLm5lZ2F0aXZlPTA7Zm9yKHZhciBzaGlmdD0wO2EuaXNFdmVuKCkmJmIuaXNFdmVuKCk7c2hpZnQrKylhLml1c2hybigxKSxiLml1c2hybigxKTtmb3IoOzspe2Zvcig7YS5pc0V2ZW4oKTspYS5pdXNocm4oMSk7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTt2YXIgcj1hLmNtcChiKTtpZihyPDApe3ZhciB0PWE7YT1iLGI9dH1lbHNlIGlmKDA9PT1yfHwwPT09Yi5jbXBuKDEpKWJyZWFrO2EuaXN1YihiKX1yZXR1cm4gYi5pdXNobG4oc2hpZnQpfSxCTi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbiBpbnZtKG51bSl7cmV0dXJuIHRoaXMuZWdjZChudW0pLmEudW1vZChudW0pfSxCTi5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uIGlzRXZlbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sQk4ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uIGlzT2RkKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sQk4ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uIGFuZGxuKG51bSl7cmV0dXJuIHRoaXMud29yZHNbMF0mbnVtfSxCTi5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24gYmluY24oYml0KXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXQpO3ZhciByPWJpdCUyNixzPShiaXQtcikvMjYscT0xPDxyO2lmKHRoaXMubGVuZ3RoPD1zKXJldHVybiB0aGlzLl9leHBhbmQocysxKSx0aGlzLndvcmRzW3NdfD1xLHRoaXM7Zm9yKHZhciBjYXJyeT1xLGk9czswIT09Y2FycnkmJmk8dGhpcy5sZW5ndGg7aSsrKXt2YXIgdz0wfHRoaXMud29yZHNbaV07Y2Fycnk9KHcrPWNhcnJ5KT4+PjI2LHcmPTY3MTA4ODYzLHRoaXMud29yZHNbaV09d31yZXR1cm4gMCE9PWNhcnJ5JiYodGhpcy53b3Jkc1tpXT1jYXJyeSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxCTi5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uIGlzWmVybygpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxCTi5wcm90b3R5cGUuY21wbj1mdW5jdGlvbiBjbXBuKG51bSl7dmFyIHJlcyxuZWdhdGl2ZT1udW08MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIW5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZuZWdhdGl2ZSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlyZXM9MTtlbHNle25lZ2F0aXZlJiYobnVtPS1udW0pLGFzc2VydChudW08PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciB3PTB8dGhpcy53b3Jkc1swXTtyZXM9dz09PW51bT8wOnc8bnVtPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXJlczpyZXN9LEJOLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24gY21wKG51bSl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1udW0ubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1udW0ubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHJlcz10aGlzLnVjbXAobnVtKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcmVzOnJlc30sQk4ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24gdWNtcChudW0pe2lmKHRoaXMubGVuZ3RoPm51bS5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8bnVtLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHJlcz0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIGE9MHx0aGlzLndvcmRzW2ldLGI9MHxudW0ud29yZHNbaV07aWYoYSE9PWIpe2E8Yj9yZXM9LTE6YT5iJiYocmVzPTEpO2JyZWFrfX1yZXR1cm4gcmVzfSxCTi5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uIGd0bihudW0pe3JldHVybiAxPT09dGhpcy5jbXBuKG51bSl9LEJOLnByb3RvdHlwZS5ndD1mdW5jdGlvbiBndChudW0pe3JldHVybiAxPT09dGhpcy5jbXAobnVtKX0sQk4ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24gZ3RlbihudW0pe3JldHVybiB0aGlzLmNtcG4obnVtKT49MH0sQk4ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbiBndGUobnVtKXtyZXR1cm4gdGhpcy5jbXAobnVtKT49MH0sQk4ucHJvdG90eXBlLmx0bj1mdW5jdGlvbiBsdG4obnVtKXtyZXR1cm4tMT09PXRoaXMuY21wbihudW0pfSxCTi5wcm90b3R5cGUubHQ9ZnVuY3Rpb24gbHQobnVtKXtyZXR1cm4tMT09PXRoaXMuY21wKG51bSl9LEJOLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uIGx0ZW4obnVtKXtyZXR1cm4gdGhpcy5jbXBuKG51bSk8PTB9LEJOLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24gbHRlKG51bSl7cmV0dXJuIHRoaXMuY21wKG51bSk8PTB9LEJOLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24gZXFuKG51bSl7cmV0dXJuIDA9PT10aGlzLmNtcG4obnVtKX0sQk4ucHJvdG90eXBlLmVxPWZ1bmN0aW9uIGVxKG51bSl7cmV0dXJuIDA9PT10aGlzLmNtcChudW0pfSxCTi5yZWQ9ZnVuY3Rpb24gcmVkKG51bSl7cmV0dXJuIG5ldyBSZWQobnVtKX0sQk4ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uIHRvUmVkKGN0eCl7cmV0dXJuIGFzc2VydCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxhc3NlcnQoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksY3R4LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoY3R4KX0sQk4ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24gZnJvbVJlZCgpe3JldHVybiBhc3NlcnQodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sQk4ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbiBfZm9yY2VSZWQoY3R4KXtyZXR1cm4gdGhpcy5yZWQ9Y3R4LHRoaXN9LEJOLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbiBmb3JjZVJlZChjdHgpe3JldHVybiBhc3NlcnQoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoY3R4KX0sQk4ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbiByZWRBZGQobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24gcmVkSUFkZChudW0pe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24gcmVkU3ViKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uIHJlZElTdWIobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uIHJlZFNobChudW0pe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uIHJlZE11bChudW0pe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLG51bSksdGhpcy5yZWQubXVsKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24gcmVkSU11bChudW0pe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLG51bSksdGhpcy5yZWQuaW11bCh0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24gcmVkU3FyKCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sQk4ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24gcmVkSVNxcigpe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sQk4ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24gcmVkU3FydCgpe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sQk4ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24gcmVkSW52bSgpe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sQk4ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbiByZWROZWcoKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxCTi5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uIHJlZFBvdyhudW0pe3JldHVybiBhc3NlcnQodGhpcy5yZWQmJiFudW0ucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLG51bSl9O3ZhciBwcmltZXM9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBNUHJpbWUobmFtZSxwKXt0aGlzLm5hbWU9bmFtZSx0aGlzLnA9bmV3IEJOKHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBCTigxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gSzI1Nigpe01QcmltZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIFAyMjQoKXtNUHJpbWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBQMTkyKCl7TVByaW1lLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gUDI1NTE5KCl7TVByaW1lLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gUmVkKG0pe2lmKCJzdHJpbmciPT10eXBlb2YgbSl7dmFyIHByaW1lPUJOLl9wcmltZShtKTt0aGlzLm09cHJpbWUucCx0aGlzLnByaW1lPXByaW1lfWVsc2UgYXNzZXJ0KG0uZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09bSx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTW9udChtKXtSZWQuY2FsbCh0aGlzLG0pLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEJOKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfU1QcmltZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbiBfdG1wKCl7dmFyIHRtcD1uZXcgQk4obnVsbCk7cmV0dXJuIHRtcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHRtcH0sTVByaW1lLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uIGlyZWR1Y2UobnVtKXt2YXIgcmxlbixyPW51bTtkb3t0aGlzLnNwbGl0KHIsdGhpcy50bXApLHJsZW49KHI9KHI9dGhpcy5pbXVsSyhyKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHJsZW4+dGhpcy5uKTt2YXIgY21wPXJsZW48dGhpcy5uPy0xOnIudWNtcCh0aGlzLnApO3JldHVybiAwPT09Y21wPyhyLndvcmRzWzBdPTAsci5sZW5ndGg9MSk6Y21wPjA/ci5pc3ViKHRoaXMucCk6dm9pZCAwIT09ci5zdHJpcD9yLnN0cmlwKCk6ci5fc3RyaXAoKSxyfSxNUHJpbWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uIHNwbGl0KGlucHV0LG91dCl7aW5wdXQuaXVzaHJuKHRoaXMubiwwLG91dCl9LE1QcmltZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24gaW11bEsobnVtKXtyZXR1cm4gbnVtLmltdWwodGhpcy5rKX0saW5oZXJpdHMoSzI1NixNUHJpbWUpLEsyNTYucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uIHNwbGl0KGlucHV0LG91dHB1dCl7Zm9yKHZhciBvdXRMZW49TWF0aC5taW4oaW5wdXQubGVuZ3RoLDkpLGk9MDtpPG91dExlbjtpKyspb3V0cHV0LndvcmRzW2ldPWlucHV0LndvcmRzW2ldO2lmKG91dHB1dC5sZW5ndGg9b3V0TGVuLGlucHV0Lmxlbmd0aDw9OSlyZXR1cm4gaW5wdXQud29yZHNbMF09MCx2b2lkKGlucHV0Lmxlbmd0aD0xKTt2YXIgcHJldj1pbnB1dC53b3Jkc1s5XTtmb3Iob3V0cHV0LndvcmRzW291dHB1dC5sZW5ndGgrK109NDE5NDMwMyZwcmV2LGk9MTA7aTxpbnB1dC5sZW5ndGg7aSsrKXt2YXIgbmV4dD0wfGlucHV0LndvcmRzW2ldO2lucHV0LndvcmRzW2ktMTBdPSg0MTk0MzAzJm5leHQpPDw0fHByZXY+Pj4yMixwcmV2PW5leHR9cHJldj4+Pj0yMixpbnB1dC53b3Jkc1tpLTEwXT1wcmV2LDA9PT1wcmV2JiZpbnB1dC5sZW5ndGg+MTA/aW5wdXQubGVuZ3RoLT0xMDppbnB1dC5sZW5ndGgtPTl9LEsyNTYucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uIGltdWxLKG51bSl7bnVtLndvcmRzW251bS5sZW5ndGhdPTAsbnVtLndvcmRzW251bS5sZW5ndGgrMV09MCxudW0ubGVuZ3RoKz0yO2Zvcih2YXIgbG89MCxpPTA7aTxudW0ubGVuZ3RoO2krKyl7dmFyIHc9MHxudW0ud29yZHNbaV07bG8rPTk3Nyp3LG51bS53b3Jkc1tpXT02NzEwODg2MyZsbyxsbz02NCp3Kyhsby82NzEwODg2NHwwKX1yZXR1cm4gMD09PW51bS53b3Jkc1tudW0ubGVuZ3RoLTFdJiYobnVtLmxlbmd0aC0tLDA9PT1udW0ud29yZHNbbnVtLmxlbmd0aC0xXSYmbnVtLmxlbmd0aC0tKSxudW19LGluaGVyaXRzKFAyMjQsTVByaW1lKSxpbmhlcml0cyhQMTkyLE1QcmltZSksaW5oZXJpdHMoUDI1NTE5LE1QcmltZSksUDI1NTE5LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbiBpbXVsSyhudW0pe2Zvcih2YXIgY2Fycnk9MCxpPTA7aTxudW0ubGVuZ3RoO2krKyl7dmFyIGhpPTE5KigwfG51bS53b3Jkc1tpXSkrY2FycnksbG89NjcxMDg4NjMmaGk7aGk+Pj49MjYsbnVtLndvcmRzW2ldPWxvLGNhcnJ5PWhpfXJldHVybiAwIT09Y2FycnkmJihudW0ud29yZHNbbnVtLmxlbmd0aCsrXT1jYXJyeSksbnVtfSxCTi5fcHJpbWU9ZnVuY3Rpb24gcHJpbWUobmFtZSl7aWYocHJpbWVzW25hbWVdKXJldHVybiBwcmltZXNbbmFtZV07dmFyIHByaW1lO2lmKCJrMjU2Ij09PW5hbWUpcHJpbWU9bmV3IEsyNTY7ZWxzZSBpZigicDIyNCI9PT1uYW1lKXByaW1lPW5ldyBQMjI0O2Vsc2UgaWYoInAxOTIiPT09bmFtZSlwcmltZT1uZXcgUDE5MjtlbHNle2lmKCJwMjU1MTkiIT09bmFtZSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIituYW1lKTtwcmltZT1uZXcgUDI1NTE5fXJldHVybiBwcmltZXNbbmFtZV09cHJpbWUscHJpbWV9LFJlZC5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24gX3ZlcmlmeTEoYSl7YXNzZXJ0KDA9PT1hLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGFzc2VydChhLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxSZWQucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uIF92ZXJpZnkyKGEsYil7YXNzZXJ0KDA9PT0oYS5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxhc3NlcnQoYS5yZWQmJmEucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sUmVkLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uIGltb2QoYSl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGEpLl9mb3JjZVJlZCh0aGlzKTphLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFJlZC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uIG5lZyhhKXtyZXR1cm4gYS5pc1plcm8oKT9hLmNsb25lKCk6dGhpcy5tLnN1YihhKS5fZm9yY2VSZWQodGhpcyl9LFJlZC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uIGFkZChhLGIpe3RoaXMuX3ZlcmlmeTIoYSxiKTt2YXIgcmVzPWEuYWRkKGIpO3JldHVybiByZXMuY21wKHRoaXMubSk+PTAmJnJlcy5pc3ViKHRoaXMubSkscmVzLl9mb3JjZVJlZCh0aGlzKX0sUmVkLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uIGlhZGQoYSxiKXt0aGlzLl92ZXJpZnkyKGEsYik7dmFyIHJlcz1hLmlhZGQoYik7cmV0dXJuIHJlcy5jbXAodGhpcy5tKT49MCYmcmVzLmlzdWIodGhpcy5tKSxyZXN9LFJlZC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uIHN1YihhLGIpe3RoaXMuX3ZlcmlmeTIoYSxiKTt2YXIgcmVzPWEuc3ViKGIpO3JldHVybiByZXMuY21wbigwKTwwJiZyZXMuaWFkZCh0aGlzLm0pLHJlcy5fZm9yY2VSZWQodGhpcyl9LFJlZC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbiBpc3ViKGEsYil7dGhpcy5fdmVyaWZ5MihhLGIpO3ZhciByZXM9YS5pc3ViKGIpO3JldHVybiByZXMuY21wbigwKTwwJiZyZXMuaWFkZCh0aGlzLm0pLHJlc30sUmVkLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24gc2hsKGEsbnVtKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShhKSx0aGlzLmltb2QoYS51c2hsbihudW0pKX0sUmVkLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uIGltdWwoYSxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihhLGIpLHRoaXMuaW1vZChhLmltdWwoYikpfSxSZWQucHJvdG90eXBlLm11bD1mdW5jdGlvbiBtdWwoYSxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihhLGIpLHRoaXMuaW1vZChhLm11bChiKSl9LFJlZC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbiBpc3FyKGEpe3JldHVybiB0aGlzLmltdWwoYSxhLmNsb25lKCkpfSxSZWQucHJvdG90eXBlLnNxcj1mdW5jdGlvbiBzcXIoYSl7cmV0dXJuIHRoaXMubXVsKGEsYSl9LFJlZC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbiBzcXJ0KGEpe2lmKGEuaXNaZXJvKCkpcmV0dXJuIGEuY2xvbmUoKTt2YXIgbW9kMz10aGlzLm0uYW5kbG4oMyk7aWYoYXNzZXJ0KG1vZDMlMj09MSksMz09PW1vZDMpe3ZhciBwb3c9dGhpcy5tLmFkZChuZXcgQk4oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coYSxwb3cpfWZvcih2YXIgcT10aGlzLm0uc3VibigxKSxzPTA7IXEuaXNaZXJvKCkmJjA9PT1xLmFuZGxuKDEpOylzKysscS5pdXNocm4oMSk7YXNzZXJ0KCFxLmlzWmVybygpKTt2YXIgb25lPW5ldyBCTigxKS50b1JlZCh0aGlzKSxuT25lPW9uZS5yZWROZWcoKSxscG93PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSx6PXRoaXMubS5iaXRMZW5ndGgoKTtmb3Ioej1uZXcgQk4oMip6KnopLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh6LGxwb3cpLmNtcChuT25lKTspei5yZWRJQWRkKG5PbmUpO2Zvcih2YXIgYz10aGlzLnBvdyh6LHEpLHI9dGhpcy5wb3coYSxxLmFkZG4oMSkuaXVzaHJuKDEpKSx0PXRoaXMucG93KGEscSksbT1zOzAhPT10LmNtcChvbmUpOyl7Zm9yKHZhciB0bXA9dCxpPTA7MCE9PXRtcC5jbXAob25lKTtpKyspdG1wPXRtcC5yZWRTcXIoKTthc3NlcnQoaTxtKTt2YXIgYj10aGlzLnBvdyhjLG5ldyBCTigxKS5pdXNobG4obS1pLTEpKTtyPXIucmVkTXVsKGIpLGM9Yi5yZWRTcXIoKSx0PXQucmVkTXVsKGMpLG09aX1yZXR1cm4gcn0sUmVkLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uIGludm0oYSl7dmFyIGludj1hLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09aW52Lm5lZ2F0aXZlPyhpbnYubmVnYXRpdmU9MCx0aGlzLmltb2QoaW52KS5yZWROZWcoKSk6dGhpcy5pbW9kKGludil9LFJlZC5wcm90b3R5cGUucG93PWZ1bmN0aW9uIHBvdyhhLG51bSl7aWYobnVtLmlzWmVybygpKXJldHVybiBuZXcgQk4oMSkudG9SZWQodGhpcyk7aWYoMD09PW51bS5jbXBuKDEpKXJldHVybiBhLmNsb25lKCk7dmFyIHduZD1uZXcgQXJyYXkoMTYpO3duZFswXT1uZXcgQk4oMSkudG9SZWQodGhpcyksd25kWzFdPWE7Zm9yKHZhciBpPTI7aTx3bmQubGVuZ3RoO2krKyl3bmRbaV09dGhpcy5tdWwod25kW2ktMV0sYSk7dmFyIHJlcz13bmRbMF0sY3VycmVudD0wLGN1cnJlbnRMZW49MCxzdGFydD1udW0uYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1zdGFydCYmKHN0YXJ0PTI2KSxpPW51bS5sZW5ndGgtMTtpPj0wO2ktLSl7Zm9yKHZhciB3b3JkPW51bS53b3Jkc1tpXSxqPXN0YXJ0LTE7aj49MDtqLS0pe3ZhciBiaXQ9d29yZD4+aiYxO3JlcyE9PXduZFswXSYmKHJlcz10aGlzLnNxcihyZXMpKSwwIT09Yml0fHwwIT09Y3VycmVudD8oY3VycmVudDw8PTEsY3VycmVudHw9Yml0LCg0PT09KytjdXJyZW50TGVufHwwPT09aSYmMD09PWopJiYocmVzPXRoaXMubXVsKHJlcyx3bmRbY3VycmVudF0pLGN1cnJlbnRMZW49MCxjdXJyZW50PTApKTpjdXJyZW50TGVuPTB9c3RhcnQ9MjZ9cmV0dXJuIHJlc30sUmVkLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24gY29udmVydFRvKG51bSl7dmFyIHI9bnVtLnVtb2QodGhpcy5tKTtyZXR1cm4gcj09PW51bT9yLmNsb25lKCk6cn0sUmVkLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbiBjb252ZXJ0RnJvbShudW0pe3ZhciByZXM9bnVtLmNsb25lKCk7cmV0dXJuIHJlcy5yZWQ9bnVsbCxyZXN9LEJOLm1vbnQ9ZnVuY3Rpb24gbW9udChudW0pe3JldHVybiBuZXcgTW9udChudW0pfSxpbmhlcml0cyhNb250LFJlZCksTW9udC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uIGNvbnZlcnRUbyhudW0pe3JldHVybiB0aGlzLmltb2QobnVtLnVzaGxuKHRoaXMuc2hpZnQpKX0sTW9udC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24gY29udmVydEZyb20obnVtKXt2YXIgcj10aGlzLmltb2QobnVtLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gci5yZWQ9bnVsbCxyfSxNb250LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uIGltdWwoYSxiKXtpZihhLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBhLndvcmRzWzBdPTAsYS5sZW5ndGg9MSxhO3ZhciB0PWEuaW11bChiKSxjPXQubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHU9dC5pc3ViKGMpLml1c2hybih0aGlzLnNoaWZ0KSxyZXM9dTtyZXR1cm4gdS5jbXAodGhpcy5tKT49MD9yZXM9dS5pc3ViKHRoaXMubSk6dS5jbXBuKDApPDAmJihyZXM9dS5pYWRkKHRoaXMubSkpLHJlcy5fZm9yY2VSZWQodGhpcyl9LE1vbnQucHJvdG90eXBlLm11bD1mdW5jdGlvbiBtdWwoYSxiKXtpZihhLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgQk4oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB0PWEubXVsKGIpLGM9dC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksdT10LmlzdWIoYykuaXVzaHJuKHRoaXMuc2hpZnQpLHJlcz11O3JldHVybiB1LmNtcCh0aGlzLm0pPj0wP3Jlcz11LmlzdWIodGhpcy5tKTp1LmNtcG4oMCk8MCYmKHJlcz11LmlhZGQodGhpcy5tKSkscmVzLl9mb3JjZVJlZCh0aGlzKX0sTW9udC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbiBpbnZtKGEpe3JldHVybiB0aGlzLmltb2QoYS5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KG1vZHVsZT1fX3dlYnBhY2tfcmVxdWlyZV9fLm5tZChtb2R1bGUpLHRoaXMpfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2R1bmRlci1wcm90by9nZXQuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBoYXNQcm90b0FjY2Vzc29yLGNhbGxCaW5kPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQtYXBwbHktaGVscGVycy9pbmRleC5qcyIpLGdPUEQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2dvcGQvaW5kZXguanMiKTt0cnl7aGFzUHJvdG9BY2Nlc3Nvcj1bXS5fX3Byb3RvX189PT1BcnJheS5wcm90b3R5cGV9Y2F0Y2goZSl7aWYoIWV8fCJvYmplY3QiIT10eXBlb2YgZXx8ISgiY29kZSJpbiBlKXx8IkVSUl9QUk9UT19BQ0NFU1MiIT09ZS5jb2RlKXRocm93IGV9dmFyIGRlc2M9ISFoYXNQcm90b0FjY2Vzc29yJiZnT1BEJiZnT1BEKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLCRPYmplY3Q9T2JqZWN0LCRnZXRQcm90b3R5cGVPZj0kT2JqZWN0LmdldFByb3RvdHlwZU9mO21vZHVsZS5leHBvcnRzPWRlc2MmJiJmdW5jdGlvbiI9PXR5cGVvZiBkZXNjLmdldD9jYWxsQmluZChbZGVzYy5nZXRdKToiZnVuY3Rpb24iPT10eXBlb2YgJGdldFByb3RvdHlwZU9mJiZmdW5jdGlvbiBnZXREdW5kZXIodmFsdWUpe3JldHVybiAkZ2V0UHJvdG90eXBlT2YobnVsbD09dmFsdWU/dmFsdWU6JE9iamVjdCh2YWx1ZSkpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBlbGxpcHRpYz1leHBvcnRzO2VsbGlwdGljLnZlcnNpb249X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL3BhY2thZ2UuanNvbiIpLnJFLGVsbGlwdGljLnV0aWxzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvdXRpbHMuanMiKSxlbGxpcHRpYy5yYW5kPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm9yYW5kL2luZGV4LmpzIiksZWxsaXB0aWMuY3VydmU9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZS9pbmRleC5qcyIpLGVsbGlwdGljLmN1cnZlcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlcy5qcyIpLGVsbGlwdGljLmVjPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWMvaW5kZXguanMiKSxlbGxpcHRpYy5lZGRzYT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VkZHNhL2luZGV4LmpzIil9LCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL2Jhc2UuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBCTj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbm9kZV9tb2R1bGVzL2JuLmpzL2xpYi9ibi5qcyIpLHV0aWxzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvdXRpbHMuanMiKSxnZXROQUY9dXRpbHMuZ2V0TkFGLGdldEpTRj11dGlscy5nZXRKU0YsYXNzZXJ0PXV0aWxzLmFzc2VydDtmdW5jdGlvbiBCYXNlQ3VydmUodHlwZSxjb25mKXt0aGlzLnR5cGU9dHlwZSx0aGlzLnA9bmV3IEJOKGNvbmYucCwxNiksdGhpcy5yZWQ9Y29uZi5wcmltZT9CTi5yZWQoY29uZi5wcmltZSk6Qk4ubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgQk4oMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyBCTigxKS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IEJOKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49Y29uZi5uJiZuZXcgQk4oY29uZi5uLDE2KSx0aGlzLmc9Y29uZi5nJiZ0aGlzLnBvaW50RnJvbUpTT04oY29uZi5nLGNvbmYuZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0KSx0aGlzLl9iaXRMZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgoKTowO3ZhciBhZGp1c3RDb3VudD10aGlzLm4mJnRoaXMucC5kaXYodGhpcy5uKTshYWRqdXN0Q291bnR8fGFkanVzdENvdW50LmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIEJhc2VQb2ludChjdXJ2ZSx0eXBlKXt0aGlzLmN1cnZlPWN1cnZlLHRoaXMudHlwZT10eXBlLHRoaXMucHJlY29tcHV0ZWQ9bnVsbH1tb2R1bGUuZXhwb3J0cz1CYXNlQ3VydmUsQmFzZUN1cnZlLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbiBwb2ludCgpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LEJhc2VDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24gdmFsaWRhdGUoKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxCYXNlQ3VydmUucHJvdG90eXBlLl9maXhlZE5hZk11bD1mdW5jdGlvbiBfZml4ZWROYWZNdWwocCxrKXthc3NlcnQocC5wcmVjb21wdXRlZCk7dmFyIGRvdWJsZXM9cC5fZ2V0RG91YmxlcygpLG5hZj1nZXROQUYoaywxLHRoaXMuX2JpdExlbmd0aCksST0oMTw8ZG91Ymxlcy5zdGVwKzEpLShkb3VibGVzLnN0ZXAlMj09MD8yOjEpO0kvPTM7dmFyIGosbmFmVyxyZXByPVtdO2ZvcihqPTA7ajxuYWYubGVuZ3RoO2orPWRvdWJsZXMuc3RlcCl7bmFmVz0wO2Zvcih2YXIgbD1qK2RvdWJsZXMuc3RlcC0xO2w+PWo7bC0tKW5hZlc9KG5hZlc8PDEpK25hZltsXTtyZXByLnB1c2gobmFmVyl9Zm9yKHZhciBhPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxiPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxpPUk7aT4wO2ktLSl7Zm9yKGo9MDtqPHJlcHIubGVuZ3RoO2orKykobmFmVz1yZXByW2pdKT09PWk/Yj1iLm1peGVkQWRkKGRvdWJsZXMucG9pbnRzW2pdKTpuYWZXPT09LWkmJihiPWIubWl4ZWRBZGQoZG91Ymxlcy5wb2ludHNbal0ubmVnKCkpKTthPWEuYWRkKGIpfXJldHVybiBhLnRvUCgpfSxCYXNlQ3VydmUucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uIF93bmFmTXVsKHAsayl7dmFyIHc9NCxuYWZQb2ludHM9cC5fZ2V0TkFGUG9pbnRzKHcpO3c9bmFmUG9pbnRzLnduZDtmb3IodmFyIHduZD1uYWZQb2ludHMucG9pbnRzLG5hZj1nZXROQUYoayx3LHRoaXMuX2JpdExlbmd0aCksYWNjPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxpPW5hZi5sZW5ndGgtMTtpPj0wO2ktLSl7Zm9yKHZhciBsPTA7aT49MCYmMD09PW5hZltpXTtpLS0pbCsrO2lmKGk+PTAmJmwrKyxhY2M9YWNjLmRibHAobCksaTwwKWJyZWFrO3ZhciB6PW5hZltpXTthc3NlcnQoMCE9PXopLGFjYz0iYWZmaW5lIj09PXAudHlwZT96PjA/YWNjLm1peGVkQWRkKHduZFt6LTE+PjFdKTphY2MubWl4ZWRBZGQod25kWy16LTE+PjFdLm5lZygpKTp6PjA/YWNjLmFkZCh3bmRbei0xPj4xXSk6YWNjLmFkZCh3bmRbLXotMT4+MV0ubmVnKCkpfXJldHVybiJhZmZpbmUiPT09cC50eXBlP2FjYy50b1AoKTphY2N9LEJhc2VDdXJ2ZS5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24gX3duYWZNdWxBZGQoZGVmVyxwb2ludHMsY29lZmZzLGxlbixqYWNvYmlhblJlc3VsdCl7dmFyIGksaixwLHduZFdpZHRoPXRoaXMuX3duYWZUMSx3bmQ9dGhpcy5fd25hZlQyLG5hZj10aGlzLl93bmFmVDMsbWF4PTA7Zm9yKGk9MDtpPGxlbjtpKyspe3ZhciBuYWZQb2ludHM9KHA9cG9pbnRzW2ldKS5fZ2V0TkFGUG9pbnRzKGRlZlcpO3duZFdpZHRoW2ldPW5hZlBvaW50cy53bmQsd25kW2ldPW5hZlBvaW50cy5wb2ludHN9Zm9yKGk9bGVuLTE7aT49MTtpLT0yKXt2YXIgYT1pLTEsYj1pO2lmKDE9PT13bmRXaWR0aFthXSYmMT09PXduZFdpZHRoW2JdKXt2YXIgY29tYj1bcG9pbnRzW2FdLG51bGwsbnVsbCxwb2ludHNbYl1dOzA9PT1wb2ludHNbYV0ueS5jbXAocG9pbnRzW2JdLnkpPyhjb21iWzFdPXBvaW50c1thXS5hZGQocG9pbnRzW2JdKSxjb21iWzJdPXBvaW50c1thXS50b0ooKS5taXhlZEFkZChwb2ludHNbYl0ubmVnKCkpKTowPT09cG9pbnRzW2FdLnkuY21wKHBvaW50c1tiXS55LnJlZE5lZygpKT8oY29tYlsxXT1wb2ludHNbYV0udG9KKCkubWl4ZWRBZGQocG9pbnRzW2JdKSxjb21iWzJdPXBvaW50c1thXS5hZGQocG9pbnRzW2JdLm5lZygpKSk6KGNvbWJbMV09cG9pbnRzW2FdLnRvSigpLm1peGVkQWRkKHBvaW50c1tiXSksY29tYlsyXT1wb2ludHNbYV0udG9KKCkubWl4ZWRBZGQocG9pbnRzW2JdLm5lZygpKSk7dmFyIGluZGV4PVstMywtMSwtNSwtNywwLDcsNSwxLDNdLGpzZj1nZXRKU0YoY29lZmZzW2FdLGNvZWZmc1tiXSk7Zm9yKG1heD1NYXRoLm1heChqc2ZbMF0ubGVuZ3RoLG1heCksbmFmW2FdPW5ldyBBcnJheShtYXgpLG5hZltiXT1uZXcgQXJyYXkobWF4KSxqPTA7ajxtYXg7aisrKXt2YXIgamE9MHxqc2ZbMF1bal0samI9MHxqc2ZbMV1bal07bmFmW2FdW2pdPWluZGV4WzMqKGphKzEpKyhqYisxKV0sbmFmW2JdW2pdPTAsd25kW2FdPWNvbWJ9fWVsc2UgbmFmW2FdPWdldE5BRihjb2VmZnNbYV0sd25kV2lkdGhbYV0sdGhpcy5fYml0TGVuZ3RoKSxuYWZbYl09Z2V0TkFGKGNvZWZmc1tiXSx3bmRXaWR0aFtiXSx0aGlzLl9iaXRMZW5ndGgpLG1heD1NYXRoLm1heChuYWZbYV0ubGVuZ3RoLG1heCksbWF4PU1hdGgubWF4KG5hZltiXS5sZW5ndGgsbWF4KX12YXIgYWNjPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSx0bXA9dGhpcy5fd25hZlQ0O2ZvcihpPW1heDtpPj0wO2ktLSl7Zm9yKHZhciBrPTA7aT49MDspe3ZhciB6ZXJvPSEwO2ZvcihqPTA7ajxsZW47aisrKXRtcFtqXT0wfG5hZltqXVtpXSwwIT09dG1wW2pdJiYoemVybz0hMSk7aWYoIXplcm8pYnJlYWs7aysrLGktLX1pZihpPj0wJiZrKyssYWNjPWFjYy5kYmxwKGspLGk8MClicmVhaztmb3Ioaj0wO2o8bGVuO2orKyl7dmFyIHo9dG1wW2pdOzAhPT16JiYoej4wP3A9d25kW2pdW3otMT4+MV06ejwwJiYocD13bmRbal1bLXotMT4+MV0ubmVnKCkpLGFjYz0iYWZmaW5lIj09PXAudHlwZT9hY2MubWl4ZWRBZGQocCk6YWNjLmFkZChwKSl9fWZvcihpPTA7aTxsZW47aSsrKXduZFtpXT1udWxsO3JldHVybiBqYWNvYmlhblJlc3VsdD9hY2M6YWNjLnRvUCgpfSxCYXNlQ3VydmUuQmFzZVBvaW50PUJhc2VQb2ludCxCYXNlUG9pbnQucHJvdG90eXBlLmVxPWZ1bmN0aW9uIGVxKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sQmFzZVBvaW50LnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbiB2YWxpZGF0ZSgpe3JldHVybiB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxCYXNlQ3VydmUucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uIGRlY29kZVBvaW50KGJ5dGVzLGVuYyl7Ynl0ZXM9dXRpbHMudG9BcnJheShieXRlcyxlbmMpO3ZhciBsZW49dGhpcy5wLmJ5dGVMZW5ndGgoKTtpZigoND09PWJ5dGVzWzBdfHw2PT09Ynl0ZXNbMF18fDc9PT1ieXRlc1swXSkmJmJ5dGVzLmxlbmd0aC0xPT0yKmxlbilyZXR1cm4gNj09PWJ5dGVzWzBdP2Fzc2VydChieXRlc1tieXRlcy5sZW5ndGgtMV0lMj09MCk6Nz09PWJ5dGVzWzBdJiZhc3NlcnQoYnl0ZXNbYnl0ZXMubGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQoYnl0ZXMuc2xpY2UoMSwxK2xlbiksYnl0ZXMuc2xpY2UoMStsZW4sMSsyKmxlbikpO2lmKCgyPT09Ynl0ZXNbMF18fDM9PT1ieXRlc1swXSkmJmJ5dGVzLmxlbmd0aC0xPT09bGVuKXJldHVybiB0aGlzLnBvaW50RnJvbVgoYnl0ZXMuc2xpY2UoMSwxK2xlbiksMz09PWJ5dGVzWzBdKTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcG9pbnQgZm9ybWF0Iil9LEJhc2VQb2ludC5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbiBlbmNvZGVDb21wcmVzc2VkKGVuYyl7cmV0dXJuIHRoaXMuZW5jb2RlKGVuYywhMCl9LEJhc2VQb2ludC5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbiBfZW5jb2RlKGNvbXBhY3Qpe3ZhciBsZW49dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSx4PXRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIixsZW4pO3JldHVybiBjb21wYWN0P1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdCh4KTpbNF0uY29uY2F0KHgsdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLGxlbikpfSxCYXNlUG9pbnQucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbiBlbmNvZGUoZW5jLGNvbXBhY3Qpe3JldHVybiB1dGlscy5lbmNvZGUodGhpcy5fZW5jb2RlKGNvbXBhY3QpLGVuYyl9LEJhc2VQb2ludC5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbiBwcmVjb21wdXRlKHBvd2VyKXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBwcmVjb21wdXRlZD17ZG91YmxlczpudWxsLG5hZjpudWxsLGJldGE6bnVsbH07cmV0dXJuIHByZWNvbXB1dGVkLm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCkscHJlY29tcHV0ZWQuZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQscG93ZXIpLHByZWNvbXB1dGVkLmJldGE9dGhpcy5fZ2V0QmV0YSgpLHRoaXMucHJlY29tcHV0ZWQ9cHJlY29tcHV0ZWQsdGhpc30sQmFzZVBvaW50LnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbiBfaGFzRG91YmxlcyhrKXtpZighdGhpcy5wcmVjb21wdXRlZClyZXR1cm4hMTt2YXIgZG91Ymxlcz10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFkb3VibGVzJiZkb3VibGVzLnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgoay5iaXRMZW5ndGgoKSsxKS9kb3VibGVzLnN0ZXApfSxCYXNlUG9pbnQucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uIF9nZXREb3VibGVzKHN0ZXAscG93ZXIpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgZG91Ymxlcz1bdGhpc10sYWNjPXRoaXMsaT0wO2k8cG93ZXI7aSs9c3RlcCl7Zm9yKHZhciBqPTA7ajxzdGVwO2orKylhY2M9YWNjLmRibCgpO2RvdWJsZXMucHVzaChhY2MpfXJldHVybntzdGVwLHBvaW50czpkb3VibGVzfX0sQmFzZVBvaW50LnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uIF9nZXROQUZQb2ludHMod25kKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciByZXM9W3RoaXNdLG1heD0oMTw8d25kKS0xLGRibD0xPT09bWF4P251bGw6dGhpcy5kYmwoKSxpPTE7aTxtYXg7aSsrKXJlc1tpXT1yZXNbaS0xXS5hZGQoZGJsKTtyZXR1cm57d25kLHBvaW50czpyZXN9fSxCYXNlUG9pbnQucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uIF9nZXRCZXRhKCl7cmV0dXJuIG51bGx9LEJhc2VQb2ludC5wcm90b3R5cGUuZGJscD1mdW5jdGlvbiBkYmxwKGspe2Zvcih2YXIgcj10aGlzLGk9MDtpPGs7aSsrKXI9ci5kYmwoKTtyZXR1cm4gcn19LCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL2Vkd2FyZHMuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciB1dGlscz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL3V0aWxzLmpzIiksQk49X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL25vZGVfbW9kdWxlcy9ibi5qcy9saWIvYm4uanMiKSxpbmhlcml0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpLEJhc2U9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZS9iYXNlLmpzIiksYXNzZXJ0PXV0aWxzLmFzc2VydDtmdW5jdGlvbiBFZHdhcmRzQ3VydmUoY29uZil7dGhpcy50d2lzdGVkPTEhPSgwfGNvbmYuYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0oMHxjb25mLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxCYXNlLmNhbGwodGhpcywiZWR3YXJkcyIsY29uZiksdGhpcy5hPW5ldyBCTihjb25mLmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBCTihjb25mLmMsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmMyPXRoaXMuYy5yZWRTcXIoKSx0aGlzLmQ9bmV3IEJOKGNvbmYuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLGFzc2VydCghdGhpcy50d2lzdGVkfHwwPT09dGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpKSx0aGlzLm9uZUM9MT09KDB8Y29uZi5jKX1mdW5jdGlvbiBQb2ludChjdXJ2ZSx4LHkseix0KXtCYXNlLkJhc2VQb2ludC5jYWxsKHRoaXMsY3VydmUsInByb2plY3RpdmUiKSxudWxsPT09eCYmbnVsbD09PXkmJm51bGw9PT16Pyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVybyx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IEJOKHgsMTYpLHRoaXMueT1uZXcgQk4oeSwxNiksdGhpcy56PXo/bmV3IEJOKHosMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD10JiZuZXcgQk4odCwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9aW5oZXJpdHMoRWR3YXJkc0N1cnZlLEJhc2UpLG1vZHVsZS5leHBvcnRzPUVkd2FyZHNDdXJ2ZSxFZHdhcmRzQ3VydmUucHJvdG90eXBlLl9tdWxBPWZ1bmN0aW9uIF9tdWxBKG51bSl7cmV0dXJuIHRoaXMubU9uZUE/bnVtLnJlZE5lZygpOnRoaXMuYS5yZWRNdWwobnVtKX0sRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbiBfbXVsQyhudW0pe3JldHVybiB0aGlzLm9uZUM/bnVtOnRoaXMuYy5yZWRNdWwobnVtKX0sRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24ganBvaW50KHgseSx6LHQpe3JldHVybiB0aGlzLnBvaW50KHgseSx6LHQpfSxFZHdhcmRzQ3VydmUucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24gcG9pbnRGcm9tWCh4LG9kZCl7KHg9bmV3IEJOKHgsMTYpKS5yZWR8fCh4PXgudG9SZWQodGhpcy5yZWQpKTt2YXIgeDI9eC5yZWRTcXIoKSxyaHM9dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bCh4MikpLGxocz10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwoeDIpKSx5Mj1yaHMucmVkTXVsKGxocy5yZWRJbnZtKCkpLHk9eTIucmVkU3FydCgpO2lmKDAhPT15LnJlZFNxcigpLnJlZFN1Yih5MikuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIGlzT2RkPXkuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKG9kZCYmIWlzT2RkfHwhb2RkJiZpc09kZCkmJih5PXkucmVkTmVnKCkpLHRoaXMucG9pbnQoeCx5KX0sRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uIHBvaW50RnJvbVkoeSxvZGQpeyh5PW5ldyBCTih5LDE2KSkucmVkfHwoeT15LnRvUmVkKHRoaXMucmVkKSk7dmFyIHkyPXkucmVkU3FyKCksbGhzPXkyLnJlZFN1Yih0aGlzLmMyKSxyaHM9eTIucmVkTXVsKHRoaXMuZCkucmVkTXVsKHRoaXMuYzIpLnJlZFN1Yih0aGlzLmEpLHgyPWxocy5yZWRNdWwocmhzLnJlZEludm0oKSk7aWYoMD09PXgyLmNtcCh0aGlzLnplcm8pKXtpZihvZGQpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLHkpfXZhciB4PXgyLnJlZFNxcnQoKTtpZigwIT09eC5yZWRTcXIoKS5yZWRTdWIoeDIpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB4LmZyb21SZWQoKS5pc09kZCgpIT09b2RkJiYoeD14LnJlZE5lZygpKSx0aGlzLnBvaW50KHgseSl9LEVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24gdmFsaWRhdGUocG9pbnQpe2lmKHBvaW50LmlzSW5maW5pdHkoKSlyZXR1cm4hMDtwb2ludC5ub3JtYWxpemUoKTt2YXIgeDI9cG9pbnQueC5yZWRTcXIoKSx5Mj1wb2ludC55LnJlZFNxcigpLGxocz14Mi5yZWRNdWwodGhpcy5hKS5yZWRBZGQoeTIpLHJocz10aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bCh4MikucmVkTXVsKHkyKSkpO3JldHVybiAwPT09bGhzLmNtcChyaHMpfSxpbmhlcml0cyhQb2ludCxCYXNlLkJhc2VQb2ludCksRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uIHBvaW50RnJvbUpTT04ob2JqKXtyZXR1cm4gUG9pbnQuZnJvbUpTT04odGhpcyxvYmopfSxFZHdhcmRzQ3VydmUucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uIHBvaW50KHgseSx6LHQpe3JldHVybiBuZXcgUG9pbnQodGhpcyx4LHkseix0KX0sUG9pbnQuZnJvbUpTT049ZnVuY3Rpb24gZnJvbUpTT04oY3VydmUsb2JqKXtyZXR1cm4gbmV3IFBvaW50KGN1cnZlLG9ialswXSxvYmpbMV0sb2JqWzJdKX0sUG9pbnQucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24gaW5zcGVjdCgpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxQb2ludC5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbiBpc0luZmluaXR5KCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10aGlzLnkuY21wKHRoaXMueil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LFBvaW50LnByb3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9uIF9leHREYmwoKXt2YXIgYT10aGlzLngucmVkU3FyKCksYj10aGlzLnkucmVkU3FyKCksYz10aGlzLnoucmVkU3FyKCk7Yz1jLnJlZElBZGQoYyk7dmFyIGQ9dGhpcy5jdXJ2ZS5fbXVsQShhKSxlPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYiksZz1kLnJlZEFkZChiKSxmPWcucmVkU3ViKGMpLGg9ZC5yZWRTdWIoYiksbng9ZS5yZWRNdWwoZiksbnk9Zy5yZWRNdWwoaCksbnQ9ZS5yZWRNdWwoaCksbno9Zi5yZWRNdWwoZyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsbnksbnosbnQpfSxQb2ludC5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24gX3Byb2pEYmwoKXt2YXIgbngsbnksbnosZSxoLGosYj10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksYz10aGlzLngucmVkU3FyKCksZD10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2YXIgZj0oZT10aGlzLmN1cnZlLl9tdWxBKGMpKS5yZWRBZGQoZCk7dGhpcy56T25lPyhueD1iLnJlZFN1YihjKS5yZWRTdWIoZCkucmVkTXVsKGYucmVkU3ViKHRoaXMuY3VydmUudHdvKSksbnk9Zi5yZWRNdWwoZS5yZWRTdWIoZCkpLG56PWYucmVkU3FyKCkucmVkU3ViKGYpLnJlZFN1YihmKSk6KGg9dGhpcy56LnJlZFNxcigpLGo9Zi5yZWRTdWIoaCkucmVkSVN1YihoKSxueD1iLnJlZFN1YihjKS5yZWRJU3ViKGQpLnJlZE11bChqKSxueT1mLnJlZE11bChlLnJlZFN1YihkKSksbno9Zi5yZWRNdWwoaikpfWVsc2UgZT1jLnJlZEFkZChkKSxoPXRoaXMuY3VydmUuX211bEModGhpcy56KS5yZWRTcXIoKSxqPWUucmVkU3ViKGgpLnJlZFN1YihoKSxueD10aGlzLmN1cnZlLl9tdWxDKGIucmVkSVN1YihlKSkucmVkTXVsKGopLG55PXRoaXMuY3VydmUuX211bEMoZSkucmVkTXVsKGMucmVkSVN1YihkKSksbno9ZS5yZWRNdWwoaik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsbnksbnopfSxQb2ludC5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uIGRibCgpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSxQb2ludC5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbiBfZXh0QWRkKHApe3ZhciBhPXRoaXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwocC55LnJlZFN1YihwLngpKSxiPXRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwocC55LnJlZEFkZChwLngpKSxjPXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKHAudCksZD10aGlzLnoucmVkTXVsKHAuei5yZWRBZGQocC56KSksZT1iLnJlZFN1YihhKSxmPWQucmVkU3ViKGMpLGc9ZC5yZWRBZGQoYyksaD1iLnJlZEFkZChhKSxueD1lLnJlZE11bChmKSxueT1nLnJlZE11bChoKSxudD1lLnJlZE11bChoKSxuej1mLnJlZE11bChnKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCxueSxueixudCl9LFBvaW50LnByb3RvdHlwZS5fcHJvakFkZD1mdW5jdGlvbiBfcHJvakFkZChwKXt2YXIgbnksbnosYT10aGlzLnoucmVkTXVsKHAueiksYj1hLnJlZFNxcigpLGM9dGhpcy54LnJlZE11bChwLngpLGQ9dGhpcy55LnJlZE11bChwLnkpLGU9dGhpcy5jdXJ2ZS5kLnJlZE11bChjKS5yZWRNdWwoZCksZj1iLnJlZFN1YihlKSxnPWIucmVkQWRkKGUpLHRtcD10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKHAueC5yZWRBZGQocC55KSkucmVkSVN1YihjKS5yZWRJU3ViKGQpLG54PWEucmVkTXVsKGYpLnJlZE11bCh0bXApO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KG55PWEucmVkTXVsKGcpLnJlZE11bChkLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKGMpKSksbno9Zi5yZWRNdWwoZykpOihueT1hLnJlZE11bChnKS5yZWRNdWwoZC5yZWRTdWIoYykpLG56PXRoaXMuY3VydmUuX211bEMoZikucmVkTXVsKGcpKSx0aGlzLmN1cnZlLnBvaW50KG54LG55LG56KX0sUG9pbnQucHJvdG90eXBlLmFkZD1mdW5jdGlvbiBhZGQocCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3A6cC5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZChwKTp0aGlzLl9wcm9qQWRkKHApfSxQb2ludC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uIG11bChrKXtyZXR1cm4gdGhpcy5faGFzRG91YmxlcyhrKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLGspOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxrKX0sUG9pbnQucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbiBtdWxBZGQoazEscCxrMil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxwXSxbazEsazJdLDIsITEpfSxQb2ludC5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbiBqbXVsQWRkKGsxLHAsazIpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMscF0sW2sxLGsyXSwyLCEwKX0sUG9pbnQucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbiBub3JtYWxpemUoKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIHppPXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHppKSx0aGlzLnk9dGhpcy55LnJlZE11bCh6aSksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwoemkpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LFBvaW50LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24gbmVnKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxQb2ludC5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbiBnZXRYKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sUG9pbnQucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24gZ2V0WSgpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LFBvaW50LnByb3RvdHlwZS5lcT1mdW5jdGlvbiBlcShvdGhlcil7cmV0dXJuIHRoaXM9PT1vdGhlcnx8MD09PXRoaXMuZ2V0WCgpLmNtcChvdGhlci5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKG90aGVyLmdldFkoKSl9LFBvaW50LnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24gZXFYVG9QKHgpe3ZhciByeD14LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhpcy56KTtpZigwPT09dGhpcy54LmNtcChyeCkpcmV0dXJuITA7Zm9yKHZhciB4Yz14LmNsb25lKCksdD10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoeGMuaWFkZCh0aGlzLmN1cnZlLm4pLHhjLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKHJ4LnJlZElBZGQodCksMD09PXRoaXMueC5jbXAocngpKXJldHVybiEwfX0sUG9pbnQucHJvdG90eXBlLnRvUD1Qb2ludC5wcm90b3R5cGUubm9ybWFsaXplLFBvaW50LnByb3RvdHlwZS5taXhlZEFkZD1Qb2ludC5wcm90b3R5cGUuYWRkfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZS9pbmRleC5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGN1cnZlPWV4cG9ydHM7Y3VydmUuYmFzZT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL2Jhc2UuanMiKSxjdXJ2ZS5zaG9ydD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL3Nob3J0LmpzIiksY3VydmUubW9udD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL21vbnQuanMiKSxjdXJ2ZS5lZHdhcmRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvZWR3YXJkcy5qcyIpfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZS9tb250LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgQk49X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL25vZGVfbW9kdWxlcy9ibi5qcy9saWIvYm4uanMiKSxpbmhlcml0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpLEJhc2U9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZS9iYXNlLmpzIiksdXRpbHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy91dGlscy5qcyIpO2Z1bmN0aW9uIE1vbnRDdXJ2ZShjb25mKXtCYXNlLmNhbGwodGhpcywibW9udCIsY29uZiksdGhpcy5hPW5ldyBCTihjb25mLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IEJOKGNvbmYuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IEJOKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IEJOKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gUG9pbnQoY3VydmUseCx6KXtCYXNlLkJhc2VQb2ludC5jYWxsKHRoaXMsY3VydmUsInByb2plY3RpdmUiKSxudWxsPT09eCYmbnVsbD09PXo/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyBCTih4LDE2KSx0aGlzLno9bmV3IEJOKHosMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9aW5oZXJpdHMoTW9udEN1cnZlLEJhc2UpLG1vZHVsZS5leHBvcnRzPU1vbnRDdXJ2ZSxNb250Q3VydmUucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uIHZhbGlkYXRlKHBvaW50KXt2YXIgeD1wb2ludC5ub3JtYWxpemUoKS54LHgyPXgucmVkU3FyKCkscmhzPXgyLnJlZE11bCh4KS5yZWRBZGQoeDIucmVkTXVsKHRoaXMuYSkpLnJlZEFkZCh4KTtyZXR1cm4gMD09PXJocy5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKHJocyl9LGluaGVyaXRzKFBvaW50LEJhc2UuQmFzZVBvaW50KSxNb250Q3VydmUucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uIGRlY29kZVBvaW50KGJ5dGVzLGVuYyl7cmV0dXJuIHRoaXMucG9pbnQodXRpbHMudG9BcnJheShieXRlcyxlbmMpLDEpfSxNb250Q3VydmUucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uIHBvaW50KHgseil7cmV0dXJuIG5ldyBQb2ludCh0aGlzLHgseil9LE1vbnRDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbiBwb2ludEZyb21KU09OKG9iail7cmV0dXJuIFBvaW50LmZyb21KU09OKHRoaXMsb2JqKX0sUG9pbnQucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24gcHJlY29tcHV0ZSgpe30sUG9pbnQucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24gX2VuY29kZSgpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LFBvaW50LmZyb21KU09OPWZ1bmN0aW9uIGZyb21KU09OKGN1cnZlLG9iail7cmV0dXJuIG5ldyBQb2ludChjdXJ2ZSxvYmpbMF0sb2JqWzFdfHxjdXJ2ZS5vbmUpfSxQb2ludC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbiBpbnNwZWN0KCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LFBvaW50LnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uIGlzSW5maW5pdHkoKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxQb2ludC5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uIGRibCgpe3ZhciBhYT10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksYmI9dGhpcy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLGM9YWEucmVkU3ViKGJiKSxueD1hYS5yZWRNdWwoYmIpLG56PWMucmVkTXVsKGJiLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoYykpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCxueil9LFBvaW50LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24gYWRkKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUG9pbnQucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24gZGlmZkFkZChwLGRpZmYpe3ZhciBhPXRoaXMueC5yZWRBZGQodGhpcy56KSxiPXRoaXMueC5yZWRTdWIodGhpcy56KSxjPXAueC5yZWRBZGQocC56KSxkYT1wLngucmVkU3ViKHAueikucmVkTXVsKGEpLGNiPWMucmVkTXVsKGIpLG54PWRpZmYuei5yZWRNdWwoZGEucmVkQWRkKGNiKS5yZWRTcXIoKSksbno9ZGlmZi54LnJlZE11bChkYS5yZWRJU3ViKGNiKS5yZWRTcXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsbnopfSxQb2ludC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uIG11bChrKXtmb3IodmFyIHQ9ay5jbG9uZSgpLGE9dGhpcyxiPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxiaXRzPVtdOzAhPT10LmNtcG4oMCk7dC5pdXNocm4oMSkpYml0cy5wdXNoKHQuYW5kbG4oMSkpO2Zvcih2YXIgaT1iaXRzLmxlbmd0aC0xO2k+PTA7aS0tKTA9PT1iaXRzW2ldPyhhPWEuZGlmZkFkZChiLHRoaXMpLGI9Yi5kYmwoKSk6KGI9YS5kaWZmQWRkKGIsdGhpcyksYT1hLmRibCgpKTtyZXR1cm4gYn0sUG9pbnQucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbiBtdWxBZGQoKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQb2ludC5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbiBqdW1sQWRkKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUG9pbnQucHJvdG90eXBlLmVxPWZ1bmN0aW9uIGVxKG90aGVyKXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcChvdGhlci5nZXRYKCkpfSxQb2ludC5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uIG5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sUG9pbnQucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24gZ2V0WCgpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZS9zaG9ydC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHV0aWxzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvdXRpbHMuanMiKSxCTj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbm9kZV9tb2R1bGVzL2JuLmpzL2xpYi9ibi5qcyIpLGluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiksQmFzZT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL2Jhc2UuanMiKSxhc3NlcnQ9dXRpbHMuYXNzZXJ0O2Z1bmN0aW9uIFNob3J0Q3VydmUoY29uZil7QmFzZS5jYWxsKHRoaXMsInNob3J0Iixjb25mKSx0aGlzLmE9bmV3IEJOKGNvbmYuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgQk4oY29uZi5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbShjb25mKSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBQb2ludChjdXJ2ZSx4LHksaXNSZWQpe0Jhc2UuQmFzZVBvaW50LmNhbGwodGhpcyxjdXJ2ZSwiYWZmaW5lIiksbnVsbD09PXgmJm51bGw9PT15Pyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgQk4oeCwxNiksdGhpcy55PW5ldyBCTih5LDE2KSxpc1JlZCYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBKUG9pbnQoY3VydmUseCx5LHope0Jhc2UuQmFzZVBvaW50LmNhbGwodGhpcyxjdXJ2ZSwiamFjb2JpYW4iKSxudWxsPT09eCYmbnVsbD09PXkmJm51bGw9PT16Pyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej1uZXcgQk4oMCkpOih0aGlzLng9bmV3IEJOKHgsMTYpLHRoaXMueT1uZXcgQk4oeSwxNiksdGhpcy56PW5ldyBCTih6LDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfWluaGVyaXRzKFNob3J0Q3VydmUsQmFzZSksbW9kdWxlLmV4cG9ydHM9U2hvcnRDdXJ2ZSxTaG9ydEN1cnZlLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uIF9nZXRFbmRvbW9ycGhpc20oY29uZil7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIGJldGEsbGFtYmRhO2lmKGNvbmYuYmV0YSliZXRhPW5ldyBCTihjb25mLmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBiZXRhcz10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtiZXRhPShiZXRhPWJldGFzWzBdLmNtcChiZXRhc1sxXSk8MD9iZXRhc1swXTpiZXRhc1sxXSkudG9SZWQodGhpcy5yZWQpfWlmKGNvbmYubGFtYmRhKWxhbWJkYT1uZXcgQk4oY29uZi5sYW1iZGEsMTYpO2Vsc2V7dmFyIGxhbWJkYXM9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7MD09PXRoaXMuZy5tdWwobGFtYmRhc1swXSkueC5jbXAodGhpcy5nLngucmVkTXVsKGJldGEpKT9sYW1iZGE9bGFtYmRhc1swXToobGFtYmRhPWxhbWJkYXNbMV0sYXNzZXJ0KDA9PT10aGlzLmcubXVsKGxhbWJkYSkueC5jbXAodGhpcy5nLngucmVkTXVsKGJldGEpKSkpfXJldHVybntiZXRhLGxhbWJkYSxiYXNpczpjb25mLmJhc2lzP2NvbmYuYmFzaXMubWFwKGZ1bmN0aW9uKHZlYyl7cmV0dXJue2E6bmV3IEJOKHZlYy5hLDE2KSxiOm5ldyBCTih2ZWMuYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKGxhbWJkYSl9fX0sU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbiBfZ2V0RW5kb1Jvb3RzKG51bSl7dmFyIHJlZD1udW09PT10aGlzLnA/dGhpcy5yZWQ6Qk4ubW9udChudW0pLHRpbnY9bmV3IEJOKDIpLnRvUmVkKHJlZCkucmVkSW52bSgpLG50aW52PXRpbnYucmVkTmVnKCkscz1uZXcgQk4oMykudG9SZWQocmVkKS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKHRpbnYpO3JldHVybltudGludi5yZWRBZGQocykuZnJvbVJlZCgpLG50aW52LnJlZFN1YihzKS5mcm9tUmVkKCldfSxTaG9ydEN1cnZlLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uIF9nZXRFbmRvQmFzaXMobGFtYmRhKXtmb3IodmFyIGEwLGIwLGExLGIxLGEyLGIyLHByZXZSLHIseCxhcHJ4U3FydD10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLHU9bGFtYmRhLHY9dGhpcy5uLmNsb25lKCkseDE9bmV3IEJOKDEpLHkxPW5ldyBCTigwKSx4Mj1uZXcgQk4oMCkseTI9bmV3IEJOKDEpLGk9MDswIT09dS5jbXBuKDApOyl7dmFyIHE9di5kaXYodSk7cj12LnN1YihxLm11bCh1KSkseD14Mi5zdWIocS5tdWwoeDEpKTt2YXIgeT15Mi5zdWIocS5tdWwoeTEpKTtpZighYTEmJnIuY21wKGFwcnhTcXJ0KTwwKWEwPXByZXZSLm5lZygpLGIwPXgxLGExPXIubmVnKCksYjE9eDtlbHNlIGlmKGExJiYyPT09KytpKWJyZWFrO3ByZXZSPXIsdj11LHU9cix4Mj14MSx4MT14LHkyPXkxLHkxPXl9YTI9ci5uZWcoKSxiMj14O3ZhciBsZW4xPWExLnNxcigpLmFkZChiMS5zcXIoKSk7cmV0dXJuIGEyLnNxcigpLmFkZChiMi5zcXIoKSkuY21wKGxlbjEpPj0wJiYoYTI9YTAsYjI9YjApLGExLm5lZ2F0aXZlJiYoYTE9YTEubmVnKCksYjE9YjEubmVnKCkpLGEyLm5lZ2F0aXZlJiYoYTI9YTIubmVnKCksYjI9YjIubmVnKCkpLFt7YTphMSxiOmIxfSx7YTphMixiOmIyfV19LFNob3J0Q3VydmUucHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24gX2VuZG9TcGxpdChrKXt2YXIgYmFzaXM9dGhpcy5lbmRvLmJhc2lzLHYxPWJhc2lzWzBdLHYyPWJhc2lzWzFdLGMxPXYyLmIubXVsKGspLmRpdlJvdW5kKHRoaXMubiksYzI9djEuYi5uZWcoKS5tdWwoaykuZGl2Um91bmQodGhpcy5uKSxwMT1jMS5tdWwodjEuYSkscDI9YzIubXVsKHYyLmEpLHExPWMxLm11bCh2MS5iKSxxMj1jMi5tdWwodjIuYik7cmV0dXJue2sxOmsuc3ViKHAxKS5zdWIocDIpLGsyOnExLmFkZChxMikubmVnKCl9fSxTaG9ydEN1cnZlLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uIHBvaW50RnJvbVgoeCxvZGQpeyh4PW5ldyBCTih4LDE2KSkucmVkfHwoeD14LnRvUmVkKHRoaXMucmVkKSk7dmFyIHkyPXgucmVkU3FyKCkucmVkTXVsKHgpLnJlZElBZGQoeC5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLHk9eTIucmVkU3FydCgpO2lmKDAhPT15LnJlZFNxcigpLnJlZFN1Yih5MikuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIGlzT2RkPXkuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKG9kZCYmIWlzT2RkfHwhb2RkJiZpc09kZCkmJih5PXkucmVkTmVnKCkpLHRoaXMucG9pbnQoeCx5KX0sU2hvcnRDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24gdmFsaWRhdGUocG9pbnQpe2lmKHBvaW50LmluZilyZXR1cm4hMDt2YXIgeD1wb2ludC54LHk9cG9pbnQueSxheD10aGlzLmEucmVkTXVsKHgpLHJocz14LnJlZFNxcigpLnJlZE11bCh4KS5yZWRJQWRkKGF4KS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT15LnJlZFNxcigpLnJlZElTdWIocmhzKS5jbXBuKDApfSxTaG9ydEN1cnZlLnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQ9ZnVuY3Rpb24gX2VuZG9XbmFmTXVsQWRkKHBvaW50cyxjb2VmZnMsamFjb2JpYW5SZXN1bHQpe2Zvcih2YXIgbnBvaW50cz10aGlzLl9lbmRvV25hZlQxLG5jb2VmZnM9dGhpcy5fZW5kb1duYWZUMixpPTA7aTxwb2ludHMubGVuZ3RoO2krKyl7dmFyIHNwbGl0PXRoaXMuX2VuZG9TcGxpdChjb2VmZnNbaV0pLHA9cG9pbnRzW2ldLGJldGE9cC5fZ2V0QmV0YSgpO3NwbGl0LmsxLm5lZ2F0aXZlJiYoc3BsaXQuazEuaW5lZygpLHA9cC5uZWcoITApKSxzcGxpdC5rMi5uZWdhdGl2ZSYmKHNwbGl0LmsyLmluZWcoKSxiZXRhPWJldGEubmVnKCEwKSksbnBvaW50c1syKmldPXAsbnBvaW50c1syKmkrMV09YmV0YSxuY29lZmZzWzIqaV09c3BsaXQuazEsbmNvZWZmc1syKmkrMV09c3BsaXQuazJ9Zm9yKHZhciByZXM9dGhpcy5fd25hZk11bEFkZCgxLG5wb2ludHMsbmNvZWZmcywyKmksamFjb2JpYW5SZXN1bHQpLGo9MDtqPDIqaTtqKyspbnBvaW50c1tqXT1udWxsLG5jb2VmZnNbal09bnVsbDtyZXR1cm4gcmVzfSxpbmhlcml0cyhQb2ludCxCYXNlLkJhc2VQb2ludCksU2hvcnRDdXJ2ZS5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24gcG9pbnQoeCx5LGlzUmVkKXtyZXR1cm4gbmV3IFBvaW50KHRoaXMseCx5LGlzUmVkKX0sU2hvcnRDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbiBwb2ludEZyb21KU09OKG9iaixyZWQpe3JldHVybiBQb2ludC5mcm9tSlNPTih0aGlzLG9iaixyZWQpfSxQb2ludC5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24gX2dldEJldGEoKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciBwcmU9dGhpcy5wcmVjb21wdXRlZDtpZihwcmUmJnByZS5iZXRhKXJldHVybiBwcmUuYmV0YTt2YXIgYmV0YT10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYocHJlKXt2YXIgY3VydmU9dGhpcy5jdXJ2ZSxlbmRvTXVsPWZ1bmN0aW9uKHApe3JldHVybiBjdXJ2ZS5wb2ludChwLngucmVkTXVsKGN1cnZlLmVuZG8uYmV0YSkscC55KX07cHJlLmJldGE9YmV0YSxiZXRhLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOnByZS5uYWYmJnt3bmQ6cHJlLm5hZi53bmQscG9pbnRzOnByZS5uYWYucG9pbnRzLm1hcChlbmRvTXVsKX0sZG91YmxlczpwcmUuZG91YmxlcyYme3N0ZXA6cHJlLmRvdWJsZXMuc3RlcCxwb2ludHM6cHJlLmRvdWJsZXMucG9pbnRzLm1hcChlbmRvTXVsKX19fXJldHVybiBiZXRhfX0sUG9pbnQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbiB0b0pTT04oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlzLnldfSxQb2ludC5mcm9tSlNPTj1mdW5jdGlvbiBmcm9tSlNPTihjdXJ2ZSxvYmoscmVkKXsic3RyaW5nIj09dHlwZW9mIG9iaiYmKG9iaj1KU09OLnBhcnNlKG9iaikpO3ZhciByZXM9Y3VydmUucG9pbnQob2JqWzBdLG9ialsxXSxyZWQpO2lmKCFvYmpbMl0pcmV0dXJuIHJlcztmdW5jdGlvbiBvYmoycG9pbnQob2JqKXtyZXR1cm4gY3VydmUucG9pbnQob2JqWzBdLG9ialsxXSxyZWQpfXZhciBwcmU9b2JqWzJdO3JldHVybiByZXMucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOnByZS5kb3VibGVzJiZ7c3RlcDpwcmUuZG91Ymxlcy5zdGVwLHBvaW50czpbcmVzXS5jb25jYXQocHJlLmRvdWJsZXMucG9pbnRzLm1hcChvYmoycG9pbnQpKX0sbmFmOnByZS5uYWYmJnt3bmQ6cHJlLm5hZi53bmQscG9pbnRzOltyZXNdLmNvbmNhdChwcmUubmFmLnBvaW50cy5tYXAob2JqMnBvaW50KSl9fSxyZXN9LFBvaW50LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uIGluc3BlY3QoKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sUG9pbnQucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24gaXNJbmZpbml0eSgpe3JldHVybiB0aGlzLmluZn0sUG9pbnQucHJvdG90eXBlLmFkZD1mdW5jdGlvbiBhZGQocCl7aWYodGhpcy5pbmYpcmV0dXJuIHA7aWYocC5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShwKSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKHApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAocC54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBjPXRoaXMueS5yZWRTdWIocC55KTswIT09Yy5jbXBuKDApJiYoYz1jLnJlZE11bCh0aGlzLngucmVkU3ViKHAueCkucmVkSW52bSgpKSk7dmFyIG54PWMucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIocC54KSxueT1jLnJlZE11bCh0aGlzLngucmVkU3ViKG54KSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LG55KX0sUG9pbnQucHJvdG90eXBlLmRibD1mdW5jdGlvbiBkYmwoKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgeXMxPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09eXMxLmNtcG4oMCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgYT10aGlzLmN1cnZlLmEseDI9dGhpcy54LnJlZFNxcigpLGR5aW52PXlzMS5yZWRJbnZtKCksYz14Mi5yZWRBZGQoeDIpLnJlZElBZGQoeDIpLnJlZElBZGQoYSkucmVkTXVsKGR5aW52KSxueD1jLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKSxueT1jLnJlZE11bCh0aGlzLngucmVkU3ViKG54KSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LG55KX0sUG9pbnQucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24gZ2V0WCgpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxQb2ludC5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbiBnZXRZKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LFBvaW50LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24gbXVsKGspe3JldHVybiBrPW5ldyBCTihrLDE2KSx0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuX2hhc0RvdWJsZXMoayk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxrKTp0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFtrXSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLGspfSxQb2ludC5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uIG11bEFkZChrMSxwMixrMil7dmFyIHBvaW50cz1bdGhpcyxwMl0sY29lZmZzPVtrMSxrMl07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChwb2ludHMsY29lZmZzKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEscG9pbnRzLGNvZWZmcywyKX0sUG9pbnQucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24gam11bEFkZChrMSxwMixrMil7dmFyIHBvaW50cz1bdGhpcyxwMl0sY29lZmZzPVtrMSxrMl07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChwb2ludHMsY29lZmZzLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEscG9pbnRzLGNvZWZmcywyLCEwKX0sUG9pbnQucHJvdG90eXBlLmVxPWZ1bmN0aW9uIGVxKHApe3JldHVybiB0aGlzPT09cHx8dGhpcy5pbmY9PT1wLmluZiYmKHRoaXMuaW5mfHwwPT09dGhpcy54LmNtcChwLngpJiYwPT09dGhpcy55LmNtcChwLnkpKX0sUG9pbnQucHJvdG90eXBlLm5lZz1mdW5jdGlvbiBuZWcoX3ByZWNvbXB1dGUpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciByZXM9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZihfcHJlY29tcHV0ZSYmdGhpcy5wcmVjb21wdXRlZCl7dmFyIHByZT10aGlzLnByZWNvbXB1dGVkLG5lZ2F0ZT1mdW5jdGlvbihwKXtyZXR1cm4gcC5uZWcoKX07cmVzLnByZWNvbXB1dGVkPXtuYWY6cHJlLm5hZiYme3duZDpwcmUubmFmLnduZCxwb2ludHM6cHJlLm5hZi5wb2ludHMubWFwKG5lZ2F0ZSl9LGRvdWJsZXM6cHJlLmRvdWJsZXMmJntzdGVwOnByZS5kb3VibGVzLnN0ZXAscG9pbnRzOnByZS5kb3VibGVzLnBvaW50cy5tYXAobmVnYXRlKX19fXJldHVybiByZXN9LFBvaW50LnByb3RvdHlwZS50b0o9ZnVuY3Rpb24gdG9KKCl7cmV0dXJuIHRoaXMuaW5mP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKX0saW5oZXJpdHMoSlBvaW50LEJhc2UuQmFzZVBvaW50KSxTaG9ydEN1cnZlLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24ganBvaW50KHgseSx6KXtyZXR1cm4gbmV3IEpQb2ludCh0aGlzLHgseSx6KX0sSlBvaW50LnByb3RvdHlwZS50b1A9ZnVuY3Rpb24gdG9QKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgemludj10aGlzLnoucmVkSW52bSgpLHppbnYyPXppbnYucmVkU3FyKCksYXg9dGhpcy54LnJlZE11bCh6aW52MiksYXk9dGhpcy55LnJlZE11bCh6aW52MikucmVkTXVsKHppbnYpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KGF4LGF5KX0sSlBvaW50LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24gbmVnKCl7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCksdGhpcy56KX0sSlBvaW50LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24gYWRkKHApe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBwO2lmKHAuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBwejI9cC56LnJlZFNxcigpLHoyPXRoaXMuei5yZWRTcXIoKSx1MT10aGlzLngucmVkTXVsKHB6MiksdTI9cC54LnJlZE11bCh6MiksczE9dGhpcy55LnJlZE11bChwejIucmVkTXVsKHAueikpLHMyPXAueS5yZWRNdWwoejIucmVkTXVsKHRoaXMueikpLGg9dTEucmVkU3ViKHUyKSxyPXMxLnJlZFN1YihzMik7aWYoMD09PWguY21wbigwKSlyZXR1cm4gMCE9PXIuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgaDI9aC5yZWRTcXIoKSxoMz1oMi5yZWRNdWwoaCksdj11MS5yZWRNdWwoaDIpLG54PXIucmVkU3FyKCkucmVkSUFkZChoMykucmVkSVN1Yih2KS5yZWRJU3ViKHYpLG55PXIucmVkTXVsKHYucmVkSVN1YihueCkpLnJlZElTdWIoczEucmVkTXVsKGgzKSksbno9dGhpcy56LnJlZE11bChwLnopLnJlZE11bChoKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsbnksbnopfSxKUG9pbnQucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uIG1peGVkQWRkKHApe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBwLnRvSigpO2lmKHAuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciB6Mj10aGlzLnoucmVkU3FyKCksdTE9dGhpcy54LHUyPXAueC5yZWRNdWwoejIpLHMxPXRoaXMueSxzMj1wLnkucmVkTXVsKHoyKS5yZWRNdWwodGhpcy56KSxoPXUxLnJlZFN1Yih1Mikscj1zMS5yZWRTdWIoczIpO2lmKDA9PT1oLmNtcG4oMCkpcmV0dXJuIDAhPT1yLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIGgyPWgucmVkU3FyKCksaDM9aDIucmVkTXVsKGgpLHY9dTEucmVkTXVsKGgyKSxueD1yLnJlZFNxcigpLnJlZElBZGQoaDMpLnJlZElTdWIodikucmVkSVN1Yih2KSxueT1yLnJlZE11bCh2LnJlZElTdWIobngpKS5yZWRJU3ViKHMxLnJlZE11bChoMykpLG56PXRoaXMuei5yZWRNdWwoaCk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LG55LG56KX0sSlBvaW50LnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uIGRibHAocG93KXtpZigwPT09cG93KXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCFwb3cpcmV0dXJuIHRoaXMuZGJsKCk7dmFyIGk7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe3ZhciByPXRoaXM7Zm9yKGk9MDtpPHBvdztpKyspcj1yLmRibCgpO3JldHVybiByfXZhciBhPXRoaXMuY3VydmUuYSx0aW52PXRoaXMuY3VydmUudGludixqeD10aGlzLngsank9dGhpcy55LGp6PXRoaXMueixqejQ9anoucmVkU3FyKCkucmVkU3FyKCksanlkPWp5LnJlZEFkZChqeSk7Zm9yKGk9MDtpPHBvdztpKyspe3ZhciBqeDI9angucmVkU3FyKCksanlkMj1qeWQucmVkU3FyKCksanlkND1qeWQyLnJlZFNxcigpLGM9angyLnJlZEFkZChqeDIpLnJlZElBZGQoangyKS5yZWRJQWRkKGEucmVkTXVsKGp6NCkpLHQxPWp4LnJlZE11bChqeWQyKSxueD1jLnJlZFNxcigpLnJlZElTdWIodDEucmVkQWRkKHQxKSksdDI9dDEucmVkSVN1YihueCksZG55PWMucmVkTXVsKHQyKTtkbnk9ZG55LnJlZElBZGQoZG55KS5yZWRJU3ViKGp5ZDQpO3ZhciBuej1qeWQucmVkTXVsKGp6KTtpKzE8cG93JiYoano0PWp6NC5yZWRNdWwoanlkNCkpLGp4PW54LGp6PW56LGp5ZD1kbnl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGp4LGp5ZC5yZWRNdWwodGludiksanopfSxKUG9pbnQucHJvdG90eXBlLmRibD1mdW5jdGlvbiBkYmwoKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxKUG9pbnQucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uIF96ZXJvRGJsKCl7dmFyIG54LG55LG56O2lmKHRoaXMuek9uZSl7dmFyIHh4PXRoaXMueC5yZWRTcXIoKSx5eT10aGlzLnkucmVkU3FyKCkseXl5eT15eS5yZWRTcXIoKSxzPXRoaXMueC5yZWRBZGQoeXkpLnJlZFNxcigpLnJlZElTdWIoeHgpLnJlZElTdWIoeXl5eSk7cz1zLnJlZElBZGQocyk7dmFyIG09eHgucmVkQWRkKHh4KS5yZWRJQWRkKHh4KSx0PW0ucmVkU3FyKCkucmVkSVN1YihzKS5yZWRJU3ViKHMpLHl5eXk4PXl5eXkucmVkSUFkZCh5eXl5KTt5eXl5OD0oeXl5eTg9eXl5eTgucmVkSUFkZCh5eXl5OCkpLnJlZElBZGQoeXl5eTgpLG54PXQsbnk9bS5yZWRNdWwocy5yZWRJU3ViKHQpKS5yZWRJU3ViKHl5eXk4KSxuej10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgYT10aGlzLngucmVkU3FyKCksYj10aGlzLnkucmVkU3FyKCksYz1iLnJlZFNxcigpLGQ9dGhpcy54LnJlZEFkZChiKS5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYyk7ZD1kLnJlZElBZGQoZCk7dmFyIGU9YS5yZWRBZGQoYSkucmVkSUFkZChhKSxmPWUucmVkU3FyKCksYzg9Yy5yZWRJQWRkKGMpO2M4PShjOD1jOC5yZWRJQWRkKGM4KSkucmVkSUFkZChjOCksbng9Zi5yZWRJU3ViKGQpLnJlZElTdWIoZCksbnk9ZS5yZWRNdWwoZC5yZWRJU3ViKG54KSkucmVkSVN1YihjOCksbno9KG56PXRoaXMueS5yZWRNdWwodGhpcy56KSkucmVkSUFkZChueil9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LG55LG56KX0sSlBvaW50LnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24gX3RocmVlRGJsKCl7dmFyIG54LG55LG56O2lmKHRoaXMuek9uZSl7dmFyIHh4PXRoaXMueC5yZWRTcXIoKSx5eT10aGlzLnkucmVkU3FyKCkseXl5eT15eS5yZWRTcXIoKSxzPXRoaXMueC5yZWRBZGQoeXkpLnJlZFNxcigpLnJlZElTdWIoeHgpLnJlZElTdWIoeXl5eSk7cz1zLnJlZElBZGQocyk7dmFyIG09eHgucmVkQWRkKHh4KS5yZWRJQWRkKHh4KS5yZWRJQWRkKHRoaXMuY3VydmUuYSksdD1tLnJlZFNxcigpLnJlZElTdWIocykucmVkSVN1YihzKTtueD10O3ZhciB5eXl5OD15eXl5LnJlZElBZGQoeXl5eSk7eXl5eTg9KHl5eXk4PXl5eXk4LnJlZElBZGQoeXl5eTgpKS5yZWRJQWRkKHl5eXk4KSxueT1tLnJlZE11bChzLnJlZElTdWIodCkpLnJlZElTdWIoeXl5eTgpLG56PXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBkZWx0YT10aGlzLnoucmVkU3FyKCksZ2FtbWE9dGhpcy55LnJlZFNxcigpLGJldGE9dGhpcy54LnJlZE11bChnYW1tYSksYWxwaGE9dGhpcy54LnJlZFN1YihkZWx0YSkucmVkTXVsKHRoaXMueC5yZWRBZGQoZGVsdGEpKTthbHBoYT1hbHBoYS5yZWRBZGQoYWxwaGEpLnJlZElBZGQoYWxwaGEpO3ZhciBiZXRhND1iZXRhLnJlZElBZGQoYmV0YSksYmV0YTg9KGJldGE0PWJldGE0LnJlZElBZGQoYmV0YTQpKS5yZWRBZGQoYmV0YTQpO254PWFscGhhLnJlZFNxcigpLnJlZElTdWIoYmV0YTgpLG56PXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKGdhbW1hKS5yZWRJU3ViKGRlbHRhKTt2YXIgZ2dhbW1hOD1nYW1tYS5yZWRTcXIoKTtnZ2FtbWE4PShnZ2FtbWE4PShnZ2FtbWE4PWdnYW1tYTgucmVkSUFkZChnZ2FtbWE4KSkucmVkSUFkZChnZ2FtbWE4KSkucmVkSUFkZChnZ2FtbWE4KSxueT1hbHBoYS5yZWRNdWwoYmV0YTQucmVkSVN1YihueCkpLnJlZElTdWIoZ2dhbW1hOCl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LG55LG56KX0sSlBvaW50LnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uIF9kYmwoKXt2YXIgYT10aGlzLmN1cnZlLmEsang9dGhpcy54LGp5PXRoaXMueSxqej10aGlzLnosano0PWp6LnJlZFNxcigpLnJlZFNxcigpLGp4Mj1qeC5yZWRTcXIoKSxqeTI9ankucmVkU3FyKCksYz1qeDIucmVkQWRkKGp4MikucmVkSUFkZChqeDIpLnJlZElBZGQoYS5yZWRNdWwoano0KSksanhkND1qeC5yZWRBZGQoangpLHQxPShqeGQ0PWp4ZDQucmVkSUFkZChqeGQ0KSkucmVkTXVsKGp5Miksbng9Yy5yZWRTcXIoKS5yZWRJU3ViKHQxLnJlZEFkZCh0MSkpLHQyPXQxLnJlZElTdWIobngpLGp5ZDg9ankyLnJlZFNxcigpO2p5ZDg9KGp5ZDg9KGp5ZDg9anlkOC5yZWRJQWRkKGp5ZDgpKS5yZWRJQWRkKGp5ZDgpKS5yZWRJQWRkKGp5ZDgpO3ZhciBueT1jLnJlZE11bCh0MikucmVkSVN1YihqeWQ4KSxuej1qeS5yZWRBZGQoankpLnJlZE11bChqeik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LG55LG56KX0sSlBvaW50LnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uIHRycGwoKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIHh4PXRoaXMueC5yZWRTcXIoKSx5eT10aGlzLnkucmVkU3FyKCkseno9dGhpcy56LnJlZFNxcigpLHl5eXk9eXkucmVkU3FyKCksbT14eC5yZWRBZGQoeHgpLnJlZElBZGQoeHgpLG1tPW0ucmVkU3FyKCksZT10aGlzLngucmVkQWRkKHl5KS5yZWRTcXIoKS5yZWRJU3ViKHh4KS5yZWRJU3ViKHl5eXkpLGVlPShlPShlPShlPWUucmVkSUFkZChlKSkucmVkQWRkKGUpLnJlZElBZGQoZSkpLnJlZElTdWIobW0pKS5yZWRTcXIoKSx0PXl5eXkucmVkSUFkZCh5eXl5KTt0PSh0PSh0PXQucmVkSUFkZCh0KSkucmVkSUFkZCh0KSkucmVkSUFkZCh0KTt2YXIgdT1tLnJlZElBZGQoZSkucmVkU3FyKCkucmVkSVN1YihtbSkucmVkSVN1YihlZSkucmVkSVN1Yih0KSx5eXU0PXl5LnJlZE11bCh1KTt5eXU0PSh5eXU0PXl5dTQucmVkSUFkZCh5eXU0KSkucmVkSUFkZCh5eXU0KTt2YXIgbng9dGhpcy54LnJlZE11bChlZSkucmVkSVN1Yih5eXU0KTtueD0obng9bngucmVkSUFkZChueCkpLnJlZElBZGQobngpO3ZhciBueT10aGlzLnkucmVkTXVsKHUucmVkTXVsKHQucmVkSVN1Yih1KSkucmVkSVN1YihlLnJlZE11bChlZSkpKTtueT0obnk9KG55PW55LnJlZElBZGQobnkpKS5yZWRJQWRkKG55KSkucmVkSUFkZChueSk7dmFyIG56PXRoaXMuei5yZWRBZGQoZSkucmVkU3FyKCkucmVkSVN1Yih6eikucmVkSVN1YihlZSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LG55LG56KX0sSlBvaW50LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24gbXVsKGssa2Jhc2Upe3JldHVybiBrPW5ldyBCTihrLGtiYXNlKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsayl9LEpQb2ludC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24gZXEocCl7aWYoImFmZmluZSI9PT1wLnR5cGUpcmV0dXJuIHRoaXMuZXEocC50b0ooKSk7aWYodGhpcz09PXApcmV0dXJuITA7dmFyIHoyPXRoaXMuei5yZWRTcXIoKSxwejI9cC56LnJlZFNxcigpO2lmKDAhPT10aGlzLngucmVkTXVsKHB6MikucmVkSVN1YihwLngucmVkTXVsKHoyKSkuY21wbigwKSlyZXR1cm4hMTt2YXIgejM9ejIucmVkTXVsKHRoaXMueikscHozPXB6Mi5yZWRNdWwocC56KTtyZXR1cm4gMD09PXRoaXMueS5yZWRNdWwocHozKS5yZWRJU3ViKHAueS5yZWRNdWwoejMpKS5jbXBuKDApfSxKUG9pbnQucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbiBlcVhUb1AoeCl7dmFyIHpzPXRoaXMuei5yZWRTcXIoKSxyeD14LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoenMpO2lmKDA9PT10aGlzLnguY21wKHJ4KSlyZXR1cm4hMDtmb3IodmFyIHhjPXguY2xvbmUoKSx0PXRoaXMuY3VydmUucmVkTi5yZWRNdWwoenMpOzspe2lmKHhjLmlhZGQodGhpcy5jdXJ2ZS5uKSx4Yy5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihyeC5yZWRJQWRkKHQpLDA9PT10aGlzLnguY21wKHJ4KSlyZXR1cm4hMH19LEpQb2ludC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbiBpbnNwZWN0KCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sSlBvaW50LnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uIGlzSW5maW5pdHkoKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmVzLmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgcHJlLGN1cnZlcz1leHBvcnRzLGhhc2g9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanMiKSxjdXJ2ZT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL2luZGV4LmpzIiksYXNzZXJ0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvdXRpbHMuanMiKS5hc3NlcnQ7ZnVuY3Rpb24gUHJlc2V0Q3VydmUob3B0aW9ucyl7InNob3J0Ij09PW9wdGlvbnMudHlwZT90aGlzLmN1cnZlPW5ldyBjdXJ2ZS5zaG9ydChvcHRpb25zKToiZWR3YXJkcyI9PT1vcHRpb25zLnR5cGU/dGhpcy5jdXJ2ZT1uZXcgY3VydmUuZWR3YXJkcyhvcHRpb25zKTp0aGlzLmN1cnZlPW5ldyBjdXJ2ZS5tb250KG9wdGlvbnMpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9b3B0aW9ucy5oYXNoLGFzc2VydCh0aGlzLmcudmFsaWRhdGUoKSwiSW52YWxpZCBjdXJ2ZSIpLGFzc2VydCh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLCJJbnZhbGlkIGN1cnZlLCBHKk4gIT0gTyIpfWZ1bmN0aW9uIGRlZmluZUN1cnZlKG5hbWUsb3B0aW9ucyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGN1cnZlcyxuYW1lLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgY3VydmU9bmV3IFByZXNldEN1cnZlKG9wdGlvbnMpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3VydmVzLG5hbWUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmN1cnZlfSksY3VydmV9fSl9Y3VydmVzLlByZXNldEN1cnZlPVByZXNldEN1cnZlLGRlZmluZUN1cnZlKCJwMTkyIix7dHlwZToic2hvcnQiLHByaW1lOiJwMTkyIixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMSIsaGFzaDpoYXNoLnNoYTI1NixnUmVkOiExLGc6WyIxODhkYTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMiIsIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExIl19KSxkZWZpbmVDdXJ2ZSgicDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6aGFzaC5zaGEyNTYsZ1JlZDohMSxnOlsiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEiLCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCJdfSksZGVmaW5lQ3VydmUoInAyNTYiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiIixuOiJmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MSIsaGFzaDpoYXNoLnNoYTI1NixnUmVkOiExLGc6WyI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NiIsIjRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1Il19KSxkZWZpbmVDdXJ2ZSgicDM4NCIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmYyIsYjoiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczIixoYXNoOmhhc2guc2hhMzg0LGdSZWQ6ITEsZzpbImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3IiwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYiXX0pLGRlZmluZUN1cnZlKCJwNTIxIix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCIsbjoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDkiLGhhc2g6aGFzaC5zaGE1MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCJdfSksZGVmaW5lQ3VydmUoImN1cnZlMjU1MTkiLHt0eXBlOiJtb250IixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiI3NmQwNiIsYjoiMSIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpoYXNoLnNoYTI1NixnUmVkOiExLGc6WyI5Il19KSxkZWZpbmVDdXJ2ZSgiZWQyNTUxOSIse3R5cGU6ImVkd2FyZHMiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ii0xIixjOiIxIixkOiI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOmhhc2guc2hhMjU2LGdSZWQ6ITEsZzpbIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEiLCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4Il19KTt0cnl7cHJlPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvcHJlY29tcHV0ZWQvc2VjcDI1NmsxLmpzIil9Y2F0Y2goZSl7cHJlPXZvaWQgMH1kZWZpbmVDdXJ2ZSgic2VjcDI1NmsxIix7dHlwZToic2hvcnQiLHByaW1lOiJrMjU2IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIsYToiMCIsYjoiNyIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEiLGg6IjEiLGhhc2g6aGFzaC5zaGEyNTYsYmV0YToiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZSIsbGFtYmRhOiI1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyIixiYXNpczpbe2E6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1IixiOiItZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMifSx7YToiMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4IixiOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSJ9XSxnUmVkOiExLGc6WyI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4IiwiNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCIscHJlXX0pfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9lYy9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIEJOPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9ub2RlX21vZHVsZXMvYm4uanMvbGliL2JuLmpzIiksSG1hY0RSQkc9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2htYWMtZHJiZy9saWIvaG1hYy1kcmJnLmpzIiksdXRpbHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy91dGlscy5qcyIpLGN1cnZlcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlcy5qcyIpLHJhbmQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3JhbmQvaW5kZXguanMiKSxhc3NlcnQ9dXRpbHMuYXNzZXJ0LEtleVBhaXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9lYy9rZXkuanMiKSxTaWduYXR1cmU9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9lYy9zaWduYXR1cmUuanMiKTtmdW5jdGlvbiBFQyhvcHRpb25zKXtpZighKHRoaXMgaW5zdGFuY2VvZiBFQykpcmV0dXJuIG5ldyBFQyhvcHRpb25zKTsic3RyaW5nIj09dHlwZW9mIG9wdGlvbnMmJihhc3NlcnQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnZlcyxvcHRpb25zKSwiVW5rbm93biBjdXJ2ZSAiK29wdGlvbnMpLG9wdGlvbnM9Y3VydmVzW29wdGlvbnNdKSxvcHRpb25zIGluc3RhbmNlb2YgY3VydmVzLlByZXNldEN1cnZlJiYob3B0aW9ucz17Y3VydmU6b3B0aW9uc30pLHRoaXMuY3VydmU9b3B0aW9ucy5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPW9wdGlvbnMuY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZShvcHRpb25zLmN1cnZlLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5oYXNoPW9wdGlvbnMuaGFzaHx8b3B0aW9ucy5jdXJ2ZS5oYXNofW1vZHVsZS5leHBvcnRzPUVDLEVDLnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9uIGtleVBhaXIob3B0aW9ucyl7cmV0dXJuIG5ldyBLZXlQYWlyKHRoaXMsb3B0aW9ucyl9LEVDLnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbiBrZXlGcm9tUHJpdmF0ZShwcml2LGVuYyl7cmV0dXJuIEtleVBhaXIuZnJvbVByaXZhdGUodGhpcyxwcml2LGVuYyl9LEVDLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uIGtleUZyb21QdWJsaWMocHViLGVuYyl7cmV0dXJuIEtleVBhaXIuZnJvbVB1YmxpYyh0aGlzLHB1YixlbmMpfSxFQy5wcm90b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbiBnZW5LZXlQYWlyKG9wdGlvbnMpe29wdGlvbnN8fChvcHRpb25zPXt9KTtmb3IodmFyIGRyYmc9bmV3IEhtYWNEUkJHKHtoYXNoOnRoaXMuaGFzaCxwZXJzOm9wdGlvbnMucGVycyxwZXJzRW5jOm9wdGlvbnMucGVyc0VuY3x8InV0ZjgiLGVudHJvcHk6b3B0aW9ucy5lbnRyb3B5fHxyYW5kKHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLGVudHJvcHlFbmM6b3B0aW9ucy5lbnRyb3B5JiZvcHRpb25zLmVudHJvcHlFbmN8fCJ1dGY4Iixub25jZTp0aGlzLm4udG9BcnJheSgpfSksYnl0ZXM9dGhpcy5uLmJ5dGVMZW5ndGgoKSxuczI9dGhpcy5uLnN1YihuZXcgQk4oMikpOzspe3ZhciBwcml2PW5ldyBCTihkcmJnLmdlbmVyYXRlKGJ5dGVzKSk7aWYoIShwcml2LmNtcChuczIpPjApKXJldHVybiBwcml2LmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUocHJpdil9fSxFQy5wcm90b3R5cGUuX3RydW5jYXRlVG9OPWZ1bmN0aW9uIF90cnVuY2F0ZVRvTihtc2csdHJ1bmNPbmx5LGJpdExlbmd0aCl7dmFyIGJ5dGVMZW5ndGg7aWYoQk4uaXNCTihtc2cpfHwibnVtYmVyIj09dHlwZW9mIG1zZylieXRlTGVuZ3RoPShtc2c9bmV3IEJOKG1zZywxNikpLmJ5dGVMZW5ndGgoKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgbXNnKWJ5dGVMZW5ndGg9bXNnLmxlbmd0aCxtc2c9bmV3IEJOKG1zZywxNik7ZWxzZXt2YXIgc3RyPW1zZy50b1N0cmluZygpO2J5dGVMZW5ndGg9c3RyLmxlbmd0aCsxPj4+MSxtc2c9bmV3IEJOKHN0ciwxNil9Im51bWJlciIhPXR5cGVvZiBiaXRMZW5ndGgmJihiaXRMZW5ndGg9OCpieXRlTGVuZ3RoKTt2YXIgZGVsdGE9Yml0TGVuZ3RoLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gZGVsdGE+MCYmKG1zZz1tc2cudXNocm4oZGVsdGEpKSwhdHJ1bmNPbmx5JiZtc2cuY21wKHRoaXMubik+PTA/bXNnLnN1Yih0aGlzLm4pOm1zZ30sRUMucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24gc2lnbihtc2csa2V5LGVuYyxvcHRpb25zKXtpZigib2JqZWN0Ij09dHlwZW9mIGVuYyYmKG9wdGlvbnM9ZW5jLGVuYz1udWxsKSxvcHRpb25zfHwob3B0aW9ucz17fSksInN0cmluZyIhPXR5cGVvZiBtc2cmJiJudW1iZXIiIT10eXBlb2YgbXNnJiYhQk4uaXNCTihtc2cpKXthc3NlcnQoIm9iamVjdCI9PXR5cGVvZiBtc2cmJm1zZyYmIm51bWJlciI9PXR5cGVvZiBtc2cubGVuZ3RoLCJFeHBlY3RlZCBtZXNzYWdlIHRvIGJlIGFuIGFycmF5LWxpa2UsIGEgaGV4IHN0cmluZywgb3IgYSBCTiBpbnN0YW5jZSIpLGFzc2VydChtc2cubGVuZ3RoPj4+MD09PW1zZy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8bXNnLmxlbmd0aDtpKyspYXNzZXJ0KCgyNTUmbXNnW2ldKT09PW1zZ1tpXSl9a2V5PXRoaXMua2V5RnJvbVByaXZhdGUoa2V5LGVuYyksbXNnPXRoaXMuX3RydW5jYXRlVG9OKG1zZywhMSxvcHRpb25zLm1zZ0JpdExlbmd0aCksYXNzZXJ0KCFtc2cuaXNOZWcoKSwiQ2FuIG5vdCBzaWduIGEgbmVnYXRpdmUgbWVzc2FnZSIpO3ZhciBieXRlcz10aGlzLm4uYnl0ZUxlbmd0aCgpLGJrZXk9a2V5LmdldFByaXZhdGUoKS50b0FycmF5KCJiZSIsYnl0ZXMpLG5vbmNlPW1zZy50b0FycmF5KCJiZSIsYnl0ZXMpO2Fzc2VydChuZXcgQk4obm9uY2UpLmVxKG1zZyksIkNhbiBub3Qgc2lnbiBtZXNzYWdlIik7Zm9yKHZhciBkcmJnPW5ldyBIbWFjRFJCRyh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTpia2V5LG5vbmNlLHBlcnM6b3B0aW9ucy5wZXJzLHBlcnNFbmM6b3B0aW9ucy5wZXJzRW5jfHwidXRmOCJ9KSxuczE9dGhpcy5uLnN1YihuZXcgQk4oMSkpLGl0ZXI9MDs7aXRlcisrKXt2YXIgaz1vcHRpb25zLms/b3B0aW9ucy5rKGl0ZXIpOm5ldyBCTihkcmJnLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtpZighKChrPXRoaXMuX3RydW5jYXRlVG9OKGssITApKS5jbXBuKDEpPD0wfHxrLmNtcChuczEpPj0wKSl7dmFyIGtwPXRoaXMuZy5tdWwoayk7aWYoIWtwLmlzSW5maW5pdHkoKSl7dmFyIGtwWD1rcC5nZXRYKCkscj1rcFgudW1vZCh0aGlzLm4pO2lmKDAhPT1yLmNtcG4oMCkpe3ZhciBzPWsuaW52bSh0aGlzLm4pLm11bChyLm11bChrZXkuZ2V0UHJpdmF0ZSgpKS5pYWRkKG1zZykpO2lmKDAhPT0ocz1zLnVtb2QodGhpcy5uKSkuY21wbigwKSl7dmFyIHJlY292ZXJ5UGFyYW09KGtwLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1rcFguY21wKHIpPzI6MCk7cmV0dXJuIG9wdGlvbnMuY2Fub25pY2FsJiZzLmNtcCh0aGlzLm5oKT4wJiYocz10aGlzLm4uc3ViKHMpLHJlY292ZXJ5UGFyYW1ePTEpLG5ldyBTaWduYXR1cmUoe3IscyxyZWNvdmVyeVBhcmFtfSl9fX19fX0sRUMucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbiB2ZXJpZnkobXNnLHNpZ25hdHVyZSxrZXksZW5jLG9wdGlvbnMpe29wdGlvbnN8fChvcHRpb25zPXt9KSxtc2c9dGhpcy5fdHJ1bmNhdGVUb04obXNnLCExLG9wdGlvbnMubXNnQml0TGVuZ3RoKSxrZXk9dGhpcy5rZXlGcm9tUHVibGljKGtleSxlbmMpO3ZhciByPShzaWduYXR1cmU9bmV3IFNpZ25hdHVyZShzaWduYXR1cmUsImhleCIpKS5yLHM9c2lnbmF0dXJlLnM7aWYoci5jbXBuKDEpPDB8fHIuY21wKHRoaXMubik+PTApcmV0dXJuITE7aWYocy5jbXBuKDEpPDB8fHMuY21wKHRoaXMubik+PTApcmV0dXJuITE7dmFyIHAsc2ludj1zLmludm0odGhpcy5uKSx1MT1zaW52Lm11bChtc2cpLnVtb2QodGhpcy5uKSx1Mj1zaW52Lm11bChyKS51bW9kKHRoaXMubik7cmV0dXJuIHRoaXMuY3VydmUuX21heHdlbGxUcmljaz8hKHA9dGhpcy5nLmptdWxBZGQodTEsa2V5LmdldFB1YmxpYygpLHUyKSkuaXNJbmZpbml0eSgpJiZwLmVxWFRvUChyKTohKHA9dGhpcy5nLm11bEFkZCh1MSxrZXkuZ2V0UHVibGljKCksdTIpKS5pc0luZmluaXR5KCkmJjA9PT1wLmdldFgoKS51bW9kKHRoaXMubikuY21wKHIpfSxFQy5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihtc2csc2lnbmF0dXJlLGosZW5jKXthc3NlcnQoKDMmaik9PT1qLCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzIiksc2lnbmF0dXJlPW5ldyBTaWduYXR1cmUoc2lnbmF0dXJlLGVuYyk7dmFyIG49dGhpcy5uLGU9bmV3IEJOKG1zZykscj1zaWduYXR1cmUucixzPXNpZ25hdHVyZS5zLGlzWU9kZD0xJmosaXNTZWNvbmRLZXk9aj4+MTtpZihyLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmaXNTZWNvbmRLZXkpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtyPWlzU2Vjb25kS2V5P3RoaXMuY3VydmUucG9pbnRGcm9tWChyLmFkZCh0aGlzLmN1cnZlLm4pLGlzWU9kZCk6dGhpcy5jdXJ2ZS5wb2ludEZyb21YKHIsaXNZT2RkKTt2YXIgckludj1zaWduYXR1cmUuci5pbnZtKG4pLHMxPW4uc3ViKGUpLm11bChySW52KS51bW9kKG4pLHMyPXMubXVsKHJJbnYpLnVtb2Qobik7cmV0dXJuIHRoaXMuZy5tdWxBZGQoczEscixzMil9LEVDLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKGUsc2lnbmF0dXJlLFEsZW5jKXtpZihudWxsIT09KHNpZ25hdHVyZT1uZXcgU2lnbmF0dXJlKHNpZ25hdHVyZSxlbmMpKS5yZWNvdmVyeVBhcmFtKXJldHVybiBzaWduYXR1cmUucmVjb3ZlcnlQYXJhbTtmb3IodmFyIGk9MDtpPDQ7aSsrKXt2YXIgUXByaW1lO3RyeXtRcHJpbWU9dGhpcy5yZWNvdmVyUHViS2V5KGUsc2lnbmF0dXJlLGkpfWNhdGNoKGUpe2NvbnRpbnVlfWlmKFFwcmltZS5lcShRKSlyZXR1cm4gaX10aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvciIpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWMva2V5LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgQk49X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL25vZGVfbW9kdWxlcy9ibi5qcy9saWIvYm4uanMiKSxhc3NlcnQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy91dGlscy5qcyIpLmFzc2VydDtmdW5jdGlvbiBLZXlQYWlyKGVjLG9wdGlvbnMpe3RoaXMuZWM9ZWMsdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCxvcHRpb25zLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUob3B0aW9ucy5wcml2LG9wdGlvbnMucHJpdkVuYyksb3B0aW9ucy5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyhvcHRpb25zLnB1YixvcHRpb25zLnB1YkVuYyl9bW9kdWxlLmV4cG9ydHM9S2V5UGFpcixLZXlQYWlyLmZyb21QdWJsaWM9ZnVuY3Rpb24gZnJvbVB1YmxpYyhlYyxwdWIsZW5jKXtyZXR1cm4gcHViIGluc3RhbmNlb2YgS2V5UGFpcj9wdWI6bmV3IEtleVBhaXIoZWMse3B1YixwdWJFbmM6ZW5jfSl9LEtleVBhaXIuZnJvbVByaXZhdGU9ZnVuY3Rpb24gZnJvbVByaXZhdGUoZWMscHJpdixlbmMpe3JldHVybiBwcml2IGluc3RhbmNlb2YgS2V5UGFpcj9wcml2Om5ldyBLZXlQYWlyKGVjLHtwcml2LHByaXZFbmM6ZW5jfSl9LEtleVBhaXIucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uIHZhbGlkYXRlKCl7dmFyIHB1Yj10aGlzLmdldFB1YmxpYygpO3JldHVybiBwdWIuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOiJJbnZhbGlkIHB1YmxpYyBrZXkifTpwdWIudmFsaWRhdGUoKT9wdWIubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5ICogTiAhPSBPIn06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnQifX0sS2V5UGFpci5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uIGdldFB1YmxpYyhjb21wYWN0LGVuYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjb21wYWN0JiYoZW5jPWNvbXBhY3QsY29tcGFjdD1udWxsKSx0aGlzLnB1Ynx8KHRoaXMucHViPXRoaXMuZWMuZy5tdWwodGhpcy5wcml2KSksZW5jP3RoaXMucHViLmVuY29kZShlbmMsY29tcGFjdCk6dGhpcy5wdWJ9LEtleVBhaXIucHJvdG90eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24gZ2V0UHJpdmF0ZShlbmMpe3JldHVybiJoZXgiPT09ZW5jP3RoaXMucHJpdi50b1N0cmluZygxNiwyKTp0aGlzLnByaXZ9LEtleVBhaXIucHJvdG90eXBlLl9pbXBvcnRQcml2YXRlPWZ1bmN0aW9uIF9pbXBvcnRQcml2YXRlKGtleSxlbmMpe3RoaXMucHJpdj1uZXcgQk4oa2V5LGVuY3x8MTYpLHRoaXMucHJpdj10aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pfSxLZXlQYWlyLnByb3RvdHlwZS5faW1wb3J0UHVibGljPWZ1bmN0aW9uIF9pbXBvcnRQdWJsaWMoa2V5LGVuYyl7aWYoa2V5Lnh8fGtleS55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9hc3NlcnQoa2V5LngsIk5lZWQgeCBjb29yZGluYXRlIik6InNob3J0IiE9PXRoaXMuZWMuY3VydmUudHlwZSYmImVkd2FyZHMiIT09dGhpcy5lYy5jdXJ2ZS50eXBlfHxhc3NlcnQoa2V5LngmJmtleS55LCJOZWVkIGJvdGggeCBhbmQgeSBjb29yZGluYXRlIiksdm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KGtleS54LGtleS55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChrZXksZW5jKX0sS2V5UGFpci5wcm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uIGRlcml2ZShwdWIpe3JldHVybiBwdWIudmFsaWRhdGUoKXx8YXNzZXJ0KHB1Yi52YWxpZGF0ZSgpLCJwdWJsaWMgcG9pbnQgbm90IHZhbGlkYXRlZCIpLHB1Yi5tdWwodGhpcy5wcml2KS5nZXRYKCl9LEtleVBhaXIucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24gc2lnbihtc2csZW5jLG9wdGlvbnMpe3JldHVybiB0aGlzLmVjLnNpZ24obXNnLHRoaXMsZW5jLG9wdGlvbnMpfSxLZXlQYWlyLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24gdmVyaWZ5KG1zZyxzaWduYXR1cmUsb3B0aW9ucyl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KG1zZyxzaWduYXR1cmUsdGhpcyx2b2lkIDAsb3B0aW9ucyl9LEtleVBhaXIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24gaW5zcGVjdCgpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1YjogIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrIiA+In19LCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL3NpZ25hdHVyZS5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIEJOPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9ub2RlX21vZHVsZXMvYm4uanMvbGliL2JuLmpzIiksdXRpbHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy91dGlscy5qcyIpLGFzc2VydD11dGlscy5hc3NlcnQ7ZnVuY3Rpb24gU2lnbmF0dXJlKG9wdGlvbnMsZW5jKXtpZihvcHRpb25zIGluc3RhbmNlb2YgU2lnbmF0dXJlKXJldHVybiBvcHRpb25zO3RoaXMuX2ltcG9ydERFUihvcHRpb25zLGVuYyl8fChhc3NlcnQob3B0aW9ucy5yJiZvcHRpb25zLnMsIlNpZ25hdHVyZSB3aXRob3V0IHIgb3IgcyIpLHRoaXMucj1uZXcgQk4ob3B0aW9ucy5yLDE2KSx0aGlzLnM9bmV3IEJOKG9wdGlvbnMucywxNiksdm9pZCAwPT09b3B0aW9ucy5yZWNvdmVyeVBhcmFtP3RoaXMucmVjb3ZlcnlQYXJhbT1udWxsOnRoaXMucmVjb3ZlcnlQYXJhbT1vcHRpb25zLnJlY292ZXJ5UGFyYW0pfWZ1bmN0aW9uIFBvc2l0aW9uKCl7dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIGdldExlbmd0aChidWYscCl7dmFyIGluaXRpYWw9YnVmW3AucGxhY2UrK107aWYoISgxMjgmaW5pdGlhbCkpcmV0dXJuIGluaXRpYWw7dmFyIG9jdGV0TGVuPTE1JmluaXRpYWw7aWYoMD09PW9jdGV0TGVufHxvY3RldExlbj40KXJldHVybiExO2lmKDA9PT1idWZbcC5wbGFjZV0pcmV0dXJuITE7Zm9yKHZhciB2YWw9MCxpPTAsb2ZmPXAucGxhY2U7aTxvY3RldExlbjtpKyssb2ZmKyspdmFsPDw9OCx2YWx8PWJ1ZltvZmZdLHZhbD4+Pj0wO3JldHVybiEodmFsPD0xMjcpJiYocC5wbGFjZT1vZmYsdmFsKX1mdW5jdGlvbiBybVBhZGRpbmcoYnVmKXtmb3IodmFyIGk9MCxsZW49YnVmLmxlbmd0aC0xOyFidWZbaV0mJiEoMTI4JmJ1ZltpKzFdKSYmaTxsZW47KWkrKztyZXR1cm4gMD09PWk/YnVmOmJ1Zi5zbGljZShpKX1mdW5jdGlvbiBjb25zdHJ1Y3RMZW5ndGgoYXJyLGxlbil7aWYobGVuPDEyOClhcnIucHVzaChsZW4pO2Vsc2V7dmFyIG9jdGV0cz0xKyhNYXRoLmxvZyhsZW4pL01hdGguTE4yPj4+Myk7Zm9yKGFyci5wdXNoKDEyOHxvY3RldHMpOy0tb2N0ZXRzOylhcnIucHVzaChsZW4+Pj4ob2N0ZXRzPDwzKSYyNTUpO2Fyci5wdXNoKGxlbil9fW1vZHVsZS5leHBvcnRzPVNpZ25hdHVyZSxTaWduYXR1cmUucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24gX2ltcG9ydERFUihkYXRhLGVuYyl7ZGF0YT11dGlscy50b0FycmF5KGRhdGEsZW5jKTt2YXIgcD1uZXcgUG9zaXRpb247aWYoNDghPT1kYXRhW3AucGxhY2UrK10pcmV0dXJuITE7dmFyIGxlbj1nZXRMZW5ndGgoZGF0YSxwKTtpZighMT09PWxlbilyZXR1cm4hMTtpZihsZW4rcC5wbGFjZSE9PWRhdGEubGVuZ3RoKXJldHVybiExO2lmKDIhPT1kYXRhW3AucGxhY2UrK10pcmV0dXJuITE7dmFyIHJsZW49Z2V0TGVuZ3RoKGRhdGEscCk7aWYoITE9PT1ybGVuKXJldHVybiExO2lmKDEyOCZkYXRhW3AucGxhY2VdKXJldHVybiExO3ZhciByPWRhdGEuc2xpY2UocC5wbGFjZSxybGVuK3AucGxhY2UpO2lmKHAucGxhY2UrPXJsZW4sMiE9PWRhdGFbcC5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgc2xlbj1nZXRMZW5ndGgoZGF0YSxwKTtpZighMT09PXNsZW4pcmV0dXJuITE7aWYoZGF0YS5sZW5ndGghPT1zbGVuK3AucGxhY2UpcmV0dXJuITE7aWYoMTI4JmRhdGFbcC5wbGFjZV0pcmV0dXJuITE7dmFyIHM9ZGF0YS5zbGljZShwLnBsYWNlLHNsZW4rcC5wbGFjZSk7aWYoMD09PXJbMF0pe2lmKCEoMTI4JnJbMV0pKXJldHVybiExO3I9ci5zbGljZSgxKX1pZigwPT09c1swXSl7aWYoISgxMjgmc1sxXSkpcmV0dXJuITE7cz1zLnNsaWNlKDEpfXJldHVybiB0aGlzLnI9bmV3IEJOKHIpLHRoaXMucz1uZXcgQk4ocyksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LFNpZ25hdHVyZS5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24gdG9ERVIoZW5jKXt2YXIgcj10aGlzLnIudG9BcnJheSgpLHM9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JnJbMF0mJihyPVswXS5jb25jYXQocikpLDEyOCZzWzBdJiYocz1bMF0uY29uY2F0KHMpKSxyPXJtUGFkZGluZyhyKSxzPXJtUGFkZGluZyhzKTshKHNbMF18fDEyOCZzWzFdKTspcz1zLnNsaWNlKDEpO3ZhciBhcnI9WzJdO2NvbnN0cnVjdExlbmd0aChhcnIsci5sZW5ndGgpLChhcnI9YXJyLmNvbmNhdChyKSkucHVzaCgyKSxjb25zdHJ1Y3RMZW5ndGgoYXJyLHMubGVuZ3RoKTt2YXIgYmFja0hhbGY9YXJyLmNvbmNhdChzKSxyZXM9WzQ4XTtyZXR1cm4gY29uc3RydWN0TGVuZ3RoKHJlcyxiYWNrSGFsZi5sZW5ndGgpLHJlcz1yZXMuY29uY2F0KGJhY2tIYWxmKSx1dGlscy5lbmNvZGUocmVzLGVuYyl9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9lZGRzYS9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGhhc2g9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanMiKSxjdXJ2ZXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZXMuanMiKSx1dGlscz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL3V0aWxzLmpzIiksYXNzZXJ0PXV0aWxzLmFzc2VydCxwYXJzZUJ5dGVzPXV0aWxzLnBhcnNlQnl0ZXMsS2V5UGFpcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VkZHNhL2tleS5qcyIpLFNpZ25hdHVyZT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VkZHNhL3NpZ25hdHVyZS5qcyIpO2Z1bmN0aW9uIEVERFNBKGN1cnZlKXtpZihhc3NlcnQoImVkMjU1MTkiPT09Y3VydmUsIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIiKSwhKHRoaXMgaW5zdGFuY2VvZiBFRERTQSkpcmV0dXJuIG5ldyBFRERTQShjdXJ2ZSk7Y3VydmU9Y3VydmVzW2N1cnZlXS5jdXJ2ZSx0aGlzLmN1cnZlPWN1cnZlLHRoaXMuZz1jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKGN1cnZlLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPWN1cnZlLnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwoY3VydmUubi5iaXRMZW5ndGgoKS84KSx0aGlzLmhhc2g9aGFzaC5zaGE1MTJ9bW9kdWxlLmV4cG9ydHM9RUREU0EsRUREU0EucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24gc2lnbihtZXNzYWdlLHNlY3JldCl7bWVzc2FnZT1wYXJzZUJ5dGVzKG1lc3NhZ2UpO3ZhciBrZXk9dGhpcy5rZXlGcm9tU2VjcmV0KHNlY3JldCkscj10aGlzLmhhc2hJbnQoa2V5Lm1lc3NhZ2VQcmVmaXgoKSxtZXNzYWdlKSxSPXRoaXMuZy5tdWwociksUmVuY29kZWQ9dGhpcy5lbmNvZGVQb2ludChSKSxzXz10aGlzLmhhc2hJbnQoUmVuY29kZWQsa2V5LnB1YkJ5dGVzKCksbWVzc2FnZSkubXVsKGtleS5wcml2KCkpLFM9ci5hZGQoc18pLnVtb2QodGhpcy5jdXJ2ZS5uKTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSLFMsUmVuY29kZWR9KX0sRUREU0EucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSxzaWcscHViKXtpZihtZXNzYWdlPXBhcnNlQnl0ZXMobWVzc2FnZSksKHNpZz10aGlzLm1ha2VTaWduYXR1cmUoc2lnKSkuUygpLmd0ZShzaWcuZWRkc2EuY3VydmUubil8fHNpZy5TKCkuaXNOZWcoKSlyZXR1cm4hMTt2YXIga2V5PXRoaXMua2V5RnJvbVB1YmxpYyhwdWIpLGg9dGhpcy5oYXNoSW50KHNpZy5SZW5jb2RlZCgpLGtleS5wdWJCeXRlcygpLG1lc3NhZ2UpLFNHPXRoaXMuZy5tdWwoc2lnLlMoKSk7cmV0dXJuIHNpZy5SKCkuYWRkKGtleS5wdWIoKS5tdWwoaCkpLmVxKFNHKX0sRUREU0EucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rpb24gaGFzaEludCgpe2Zvcih2YXIgaGFzaD10aGlzLmhhc2goKSxpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyloYXNoLnVwZGF0ZShhcmd1bWVudHNbaV0pO3JldHVybiB1dGlscy5pbnRGcm9tTEUoaGFzaC5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pfSxFRERTQS5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbiBrZXlGcm9tUHVibGljKHB1Yil7cmV0dXJuIEtleVBhaXIuZnJvbVB1YmxpYyh0aGlzLHB1Yil9LEVERFNBLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uIGtleUZyb21TZWNyZXQoc2VjcmV0KXtyZXR1cm4gS2V5UGFpci5mcm9tU2VjcmV0KHRoaXMsc2VjcmV0KX0sRUREU0EucHJvdG90eXBlLm1ha2VTaWduYXR1cmU9ZnVuY3Rpb24gbWFrZVNpZ25hdHVyZShzaWcpe3JldHVybiBzaWcgaW5zdGFuY2VvZiBTaWduYXR1cmU/c2lnOm5ldyBTaWduYXR1cmUodGhpcyxzaWcpfSxFRERTQS5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24gZW5jb2RlUG9pbnQocG9pbnQpe3ZhciBlbmM9cG9pbnQuZ2V0WSgpLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gZW5jW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PXBvaW50LmdldFgoKS5pc09kZCgpPzEyODowLGVuY30sRUREU0EucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uIGRlY29kZVBvaW50KGJ5dGVzKXt2YXIgbGFzdEl4PShieXRlcz11dGlscy5wYXJzZUJ5dGVzKGJ5dGVzKSkubGVuZ3RoLTEsbm9ybWVkPWJ5dGVzLnNsaWNlKDAsbGFzdEl4KS5jb25jYXQoLTEyOSZieXRlc1tsYXN0SXhdKSx4SXNPZGQ9ISEoMTI4JmJ5dGVzW2xhc3RJeF0pLHk9dXRpbHMuaW50RnJvbUxFKG5vcm1lZCk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWSh5LHhJc09kZCl9LEVERFNBLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24gZW5jb2RlSW50KG51bSl7cmV0dXJuIG51bS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCl9LEVERFNBLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24gZGVjb2RlSW50KGJ5dGVzKXtyZXR1cm4gdXRpbHMuaW50RnJvbUxFKGJ5dGVzKX0sRUREU0EucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24gaXNQb2ludCh2YWwpe3JldHVybiB2YWwgaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9lZGRzYS9rZXkuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciB1dGlscz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL3V0aWxzLmpzIiksYXNzZXJ0PXV0aWxzLmFzc2VydCxwYXJzZUJ5dGVzPXV0aWxzLnBhcnNlQnl0ZXMsY2FjaGVkUHJvcGVydHk9dXRpbHMuY2FjaGVkUHJvcGVydHk7ZnVuY3Rpb24gS2V5UGFpcihlZGRzYSxwYXJhbXMpe3RoaXMuZWRkc2E9ZWRkc2EsdGhpcy5fc2VjcmV0PXBhcnNlQnl0ZXMocGFyYW1zLnNlY3JldCksZWRkc2EuaXNQb2ludChwYXJhbXMucHViKT90aGlzLl9wdWI9cGFyYW1zLnB1Yjp0aGlzLl9wdWJCeXRlcz1wYXJzZUJ5dGVzKHBhcmFtcy5wdWIpfUtleVBhaXIuZnJvbVB1YmxpYz1mdW5jdGlvbiBmcm9tUHVibGljKGVkZHNhLHB1Yil7cmV0dXJuIHB1YiBpbnN0YW5jZW9mIEtleVBhaXI/cHViOm5ldyBLZXlQYWlyKGVkZHNhLHtwdWJ9KX0sS2V5UGFpci5mcm9tU2VjcmV0PWZ1bmN0aW9uIGZyb21TZWNyZXQoZWRkc2Esc2VjcmV0KXtyZXR1cm4gc2VjcmV0IGluc3RhbmNlb2YgS2V5UGFpcj9zZWNyZXQ6bmV3IEtleVBhaXIoZWRkc2Ese3NlY3JldH0pfSxLZXlQYWlyLnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24gc2VjcmV0KCl7cmV0dXJuIHRoaXMuX3NlY3JldH0sY2FjaGVkUHJvcGVydHkoS2V5UGFpciwicHViQnl0ZXMiLGZ1bmN0aW9uIHB1YkJ5dGVzKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSl9KSxjYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCJwdWIiLGZ1bmN0aW9uIHB1Yigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLGNhY2hlZFByb3BlcnR5KEtleVBhaXIsInByaXZCeXRlcyIsZnVuY3Rpb24gcHJpdkJ5dGVzKCl7dmFyIGVkZHNhPXRoaXMuZWRkc2EsaGFzaD10aGlzLmhhc2goKSxsYXN0SXg9ZWRkc2EuZW5jb2RpbmdMZW5ndGgtMSxhPWhhc2guc2xpY2UoMCxlZGRzYS5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIGFbMF0mPTI0OCxhW2xhc3RJeF0mPTEyNyxhW2xhc3RJeF18PTY0LGF9KSxjYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCJwcml2IixmdW5jdGlvbiBwcml2KCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSksY2FjaGVkUHJvcGVydHkoS2V5UGFpciwiaGFzaCIsZnVuY3Rpb24gaGFzaCgpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxjYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCJtZXNzYWdlUHJlZml4IixmdW5jdGlvbiBtZXNzYWdlUHJlZml4KCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksS2V5UGFpci5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbiBzaWduKG1lc3NhZ2Upe3JldHVybiBhc3NlcnQodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIpLHRoaXMuZWRkc2Euc2lnbihtZXNzYWdlLHRoaXMpfSxLZXlQYWlyLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2Usc2lnKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkobWVzc2FnZSxzaWcsdGhpcyl9LEtleVBhaXIucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbiBnZXRTZWNyZXQoZW5jKXtyZXR1cm4gYXNzZXJ0KHRoaXMuX3NlY3JldCwiS2V5UGFpciBpcyBwdWJsaWMgb25seSIpLHV0aWxzLmVuY29kZSh0aGlzLnNlY3JldCgpLGVuYyl9LEtleVBhaXIucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbiBnZXRQdWJsaWMoZW5jKXtyZXR1cm4gdXRpbHMuZW5jb2RlKHRoaXMucHViQnl0ZXMoKSxlbmMpfSxtb2R1bGUuZXhwb3J0cz1LZXlQYWlyfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9lZGRzYS9zaWduYXR1cmUuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBCTj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbm9kZV9tb2R1bGVzL2JuLmpzL2xpYi9ibi5qcyIpLHV0aWxzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvdXRpbHMuanMiKSxhc3NlcnQ9dXRpbHMuYXNzZXJ0LGNhY2hlZFByb3BlcnR5PXV0aWxzLmNhY2hlZFByb3BlcnR5LHBhcnNlQnl0ZXM9dXRpbHMucGFyc2VCeXRlcztmdW5jdGlvbiBTaWduYXR1cmUoZWRkc2Esc2lnKXt0aGlzLmVkZHNhPWVkZHNhLCJvYmplY3QiIT10eXBlb2Ygc2lnJiYoc2lnPXBhcnNlQnl0ZXMoc2lnKSksQXJyYXkuaXNBcnJheShzaWcpJiYoYXNzZXJ0KHNpZy5sZW5ndGg9PT0yKmVkZHNhLmVuY29kaW5nTGVuZ3RoLCJTaWduYXR1cmUgaGFzIGludmFsaWQgc2l6ZSIpLHNpZz17UjpzaWcuc2xpY2UoMCxlZGRzYS5lbmNvZGluZ0xlbmd0aCksUzpzaWcuc2xpY2UoZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksYXNzZXJ0KHNpZy5SJiZzaWcuUywiU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTIiksZWRkc2EuaXNQb2ludChzaWcuUikmJih0aGlzLl9SPXNpZy5SKSxzaWcuUyBpbnN0YW5jZW9mIEJOJiYodGhpcy5fUz1zaWcuUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheShzaWcuUik/c2lnLlI6c2lnLlJlbmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5LmlzQXJyYXkoc2lnLlMpP3NpZy5TOnNpZy5TZW5jb2RlZH1jYWNoZWRQcm9wZXJ0eShTaWduYXR1cmUsIlMiLGZ1bmN0aW9uIFMoKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pLGNhY2hlZFByb3BlcnR5KFNpZ25hdHVyZSwiUiIsZnVuY3Rpb24gUigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxjYWNoZWRQcm9wZXJ0eShTaWduYXR1cmUsIlJlbmNvZGVkIixmdW5jdGlvbiBSZW5jb2RlZCgpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLGNhY2hlZFByb3BlcnR5KFNpZ25hdHVyZSwiU2VuY29kZWQiLGZ1bmN0aW9uIFNlbmNvZGVkKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLFNpZ25hdHVyZS5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbiB0b0J5dGVzKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sU2lnbmF0dXJlLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbiB0b0hleCgpe3JldHVybiB1dGlscy5lbmNvZGUodGhpcy50b0J5dGVzKCksImhleCIpLnRvVXBwZXJDYXNlKCl9LG1vZHVsZS5leHBvcnRzPVNpZ25hdHVyZX0sIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvcHJlY29tcHV0ZWQvc2VjcDI1NmsxLmpzIihtb2R1bGUpe21vZHVsZS5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxIl0sWyI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxbIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAiLCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTkiXSxbIjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZCIsImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgiXSxbImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCJdLFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxbIjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwIl0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkIiwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODkiXSxbIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNSIsIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYiXSxbIjc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YiIsImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCJdLFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxbIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyIl0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExIiwiMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxIl0sWyJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCIsIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQiXSxbIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIzNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUiLCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4Il0sWyJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYyIsImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNyJdLFsiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MSIsImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJdLFsiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOSIsImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSJdLFsiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjIl0sWyIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjIiwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczIiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSJdLFsiODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2IiwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwIiwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSJdLFsiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNCIsImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWIiXSxbImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0IiwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjIl0sWyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUiXSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGIiLCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYiXSxbIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmIiwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MyIsIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEiXSxbIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YiIsIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UiXSxbImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NiJdLFsiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxbImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgiLCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTciXSxbIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NSIsImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIsImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QiXSxbIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYiIsIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCJdLFsiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJdLFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCIsImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0Il0sWyIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OCIsImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNiIsIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUiXSxbIjE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxIiwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiIl0sWyJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NiIsImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlIl0sWyIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0IiwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MSIsImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNSIsImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2MiXSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0sWyJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5IiwiMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQiLCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0Il0sWyIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhIiwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxbImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTciLCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2Il0sWyJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCJdLFsiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAyIiwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkIl0sWyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3Il0sWyJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhIiwiZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1Il0sWyJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxbImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGEiLCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4Il0sWyI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5MyIsImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjIl0sWyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsiODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkIiwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODciXSxbIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYyJdLFsiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YSIsIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYiIsImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYiXSxbIjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOSIsImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3IiwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczIl0sWyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxIl0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwIiwiNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy91dGlscy5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHV0aWxzPWV4cG9ydHMsQk49X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VsbGlwdGljL25vZGVfbW9kdWxlcy9ibi5qcy9saWIvYm4uanMiKSxtaW5Bc3NlcnQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYWxpc3RpYy1hc3NlcnQvaW5kZXguanMiKSxtaW5VdGlscz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWNyeXB0by11dGlscy9saWIvdXRpbHMuanMiKTt1dGlscy5hc3NlcnQ9bWluQXNzZXJ0LHV0aWxzLnRvQXJyYXk9bWluVXRpbHMudG9BcnJheSx1dGlscy56ZXJvMj1taW5VdGlscy56ZXJvMix1dGlscy50b0hleD1taW5VdGlscy50b0hleCx1dGlscy5lbmNvZGU9bWluVXRpbHMuZW5jb2RlLHV0aWxzLmdldE5BRj1mdW5jdGlvbiBnZXROQUYobnVtLHcsYml0cyl7dmFyIGksbmFmPW5ldyBBcnJheShNYXRoLm1heChudW0uYml0TGVuZ3RoKCksYml0cykrMSk7Zm9yKGk9MDtpPG5hZi5sZW5ndGg7aSs9MSluYWZbaV09MDt2YXIgd3M9MTw8dysxLGs9bnVtLmNsb25lKCk7Zm9yKGk9MDtpPG5hZi5sZW5ndGg7aSsrKXt2YXIgeixtb2Q9ay5hbmRsbih3cy0xKTtrLmlzT2RkKCk/KHo9bW9kPih3cz4+MSktMT8od3M+PjEpLW1vZDptb2Qsay5pc3Vibih6KSk6ej0wLG5hZltpXT16LGsuaXVzaHJuKDEpfXJldHVybiBuYWZ9LHV0aWxzLmdldEpTRj1mdW5jdGlvbiBnZXRKU0YoazEsazIpe3ZhciBqc2Y9W1tdLFtdXTtrMT1rMS5jbG9uZSgpLGsyPWsyLmNsb25lKCk7Zm9yKHZhciBtOCxkMT0wLGQyPTA7azEuY21wbigtZDEpPjB8fGsyLmNtcG4oLWQyKT4wOyl7dmFyIHUxLHUyLG0xND1rMS5hbmRsbigzKStkMSYzLG0yND1rMi5hbmRsbigzKStkMiYzOzM9PT1tMTQmJihtMTQ9LTEpLDM9PT1tMjQmJihtMjQ9LTEpLHUxPTEmbTE0PzMhPT0obTg9azEuYW5kbG4oNykrZDEmNykmJjUhPT1tOHx8MiE9PW0yND9tMTQ6LW0xNDowLGpzZlswXS5wdXNoKHUxKSx1Mj0xJm0yND8zIT09KG04PWsyLmFuZGxuKDcpK2QyJjcpJiY1IT09bTh8fDIhPT1tMTQ/bTI0Oi1tMjQ6MCxqc2ZbMV0ucHVzaCh1MiksMipkMT09PXUxKzEmJihkMT0xLWQxKSwyKmQyPT09dTIrMSYmKGQyPTEtZDIpLGsxLml1c2hybigxKSxrMi5pdXNocm4oMSl9cmV0dXJuIGpzZn0sdXRpbHMuY2FjaGVkUHJvcGVydHk9ZnVuY3Rpb24gY2FjaGVkUHJvcGVydHkob2JqLG5hbWUsY29tcHV0ZXIpe3ZhciBrZXk9Il8iK25hbWU7b2JqLnByb3RvdHlwZVtuYW1lXT1mdW5jdGlvbiBjYWNoZWRQcm9wZXJ0eSgpe3JldHVybiB2b2lkIDAhPT10aGlzW2tleV0/dGhpc1trZXldOnRoaXNba2V5XT1jb21wdXRlci5jYWxsKHRoaXMpfX0sdXRpbHMucGFyc2VCeXRlcz1mdW5jdGlvbiBwYXJzZUJ5dGVzKGJ5dGVzKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGJ5dGVzP3V0aWxzLnRvQXJyYXkoYnl0ZXMsImhleCIpOmJ5dGVzfSx1dGlscy5pbnRGcm9tTEU9ZnVuY3Rpb24gaW50RnJvbUxFKGJ5dGVzKXtyZXR1cm4gbmV3IEJOKGJ5dGVzLCJoZXgiLCJsZSIpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9ub2RlX21vZHVsZXMvYm4uanMvbGliL2JuLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGFzc2VydCh2YWwsbXNnKXtpZighdmFsKXRocm93IG5ldyBFcnJvcihtc2d8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gaW5oZXJpdHMoY3RvcixzdXBlckN0b3Ipe2N0b3Iuc3VwZXJfPXN1cGVyQ3Rvcjt2YXIgVGVtcEN0b3I9ZnVuY3Rpb24oKXt9O1RlbXBDdG9yLnByb3RvdHlwZT1zdXBlckN0b3IucHJvdG90eXBlLGN0b3IucHJvdG90eXBlPW5ldyBUZW1wQ3RvcixjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jdG9yfWZ1bmN0aW9uIEJOKG51bWJlcixiYXNlLGVuZGlhbil7aWYoQk4uaXNCTihudW1iZXIpKXJldHVybiBudW1iZXI7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PW51bWJlciYmKCJsZSIhPT1iYXNlJiYiYmUiIT09YmFzZXx8KGVuZGlhbj1iYXNlLGJhc2U9MTApLHRoaXMuX2luaXQobnVtYmVyfHwwLGJhc2V8fDEwLGVuZGlhbnx8ImJlIikpfXZhciBCdWZmZXI7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9Qk46ZXhwb3J0cy5CTj1CTixCTi5CTj1CTixCTi53b3JkU2l6ZT0yNjt0cnl7QnVmZmVyPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcn1jYXRjaChlKXt9ZnVuY3Rpb24gcGFyc2VIZXg0Qml0cyhzdHJpbmcsaW5kZXgpe3ZhciBjPXN0cmluZy5jaGFyQ29kZUF0KGluZGV4KTtyZXR1cm4gYz49NjUmJmM8PTcwP2MtNTU6Yz49OTcmJmM8PTEwMj9jLTg3OmMtNDgmMTV9ZnVuY3Rpb24gcGFyc2VIZXhCeXRlKHN0cmluZyxsb3dlckJvdW5kLGluZGV4KXt2YXIgcj1wYXJzZUhleDRCaXRzKHN0cmluZyxpbmRleCk7cmV0dXJuIGluZGV4LTE+PWxvd2VyQm91bmQmJihyfD1wYXJzZUhleDRCaXRzKHN0cmluZyxpbmRleC0xKTw8NCkscn1mdW5jdGlvbiBwYXJzZUJhc2Uoc3RyLHN0YXJ0LGVuZCxtdWwpe2Zvcih2YXIgcj0wLGxlbj1NYXRoLm1pbihzdHIubGVuZ3RoLGVuZCksaT1zdGFydDtpPGxlbjtpKyspe3ZhciBjPXN0ci5jaGFyQ29kZUF0KGkpLTQ4O3IqPW11bCxyKz1jPj00OT9jLTQ5KzEwOmM+PTE3P2MtMTcrMTA6Y31yZXR1cm4gcn1CTi5pc0JOPWZ1bmN0aW9uIGlzQk4obnVtKXtyZXR1cm4gbnVtIGluc3RhbmNlb2YgQk58fG51bGwhPT1udW0mJiJvYmplY3QiPT10eXBlb2YgbnVtJiZudW0uY29uc3RydWN0b3Iud29yZFNpemU9PT1CTi53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShudW0ud29yZHMpfSxCTi5tYXg9ZnVuY3Rpb24gbWF4KGxlZnQscmlnaHQpe3JldHVybiBsZWZ0LmNtcChyaWdodCk+MD9sZWZ0OnJpZ2h0fSxCTi5taW49ZnVuY3Rpb24gbWluKGxlZnQscmlnaHQpe3JldHVybiBsZWZ0LmNtcChyaWdodCk8MD9sZWZ0OnJpZ2h0fSxCTi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24gaW5pdChudW1iZXIsYmFzZSxlbmRpYW4pe2lmKCJudW1iZXIiPT10eXBlb2YgbnVtYmVyKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKG51bWJlcixiYXNlLGVuZGlhbik7aWYoIm9iamVjdCI9PXR5cGVvZiBudW1iZXIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShudW1iZXIsYmFzZSxlbmRpYW4pOyJoZXgiPT09YmFzZSYmKGJhc2U9MTYpLGFzc2VydChiYXNlPT09KDB8YmFzZSkmJmJhc2U+PTImJmJhc2U8PTM2KTt2YXIgc3RhcnQ9MDsiLSI9PT0obnVtYmVyPW51bWJlci50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihzdGFydCsrLHRoaXMubmVnYXRpdmU9MSksc3RhcnQ8bnVtYmVyLmxlbmd0aCYmKDE2PT09YmFzZT90aGlzLl9wYXJzZUhleChudW1iZXIsc3RhcnQsZW5kaWFuKToodGhpcy5fcGFyc2VCYXNlKG51bWJlcixiYXNlLHN0YXJ0KSwibGUiPT09ZW5kaWFuJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYmFzZSxlbmRpYW4pKSl9LEJOLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbiBfaW5pdE51bWJlcihudW1iZXIsYmFzZSxlbmRpYW4pe251bWJlcjwwJiYodGhpcy5uZWdhdGl2ZT0xLG51bWJlcj0tbnVtYmVyKSxudW1iZXI8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJm51bWJlcl0sdGhpcy5sZW5ndGg9MSk6bnVtYmVyPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJm51bWJlcixudW1iZXIvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihhc3NlcnQobnVtYmVyPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJm51bWJlcixudW1iZXIvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PWVuZGlhbiYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGJhc2UsZW5kaWFuKX0sQk4ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24gX2luaXRBcnJheShudW1iZXIsYmFzZSxlbmRpYW4pe2lmKGFzc2VydCgibnVtYmVyIj09dHlwZW9mIG51bWJlci5sZW5ndGgpLG51bWJlci5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwobnVtYmVyLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBqLHcsb2ZmPTA7aWYoImJlIj09PWVuZGlhbilmb3IoaT1udW1iZXIubGVuZ3RoLTEsaj0wO2k+PTA7aS09Myl3PW51bWJlcltpXXxudW1iZXJbaS0xXTw8OHxudW1iZXJbaS0yXTw8MTYsdGhpcy53b3Jkc1tqXXw9dzw8b2ZmJjY3MTA4ODYzLHRoaXMud29yZHNbaisxXT13Pj4+MjYtb2ZmJjY3MTA4ODYzLChvZmYrPTI0KT49MjYmJihvZmYtPTI2LGorKyk7ZWxzZSBpZigibGUiPT09ZW5kaWFuKWZvcihpPTAsaj0wO2k8bnVtYmVyLmxlbmd0aDtpKz0zKXc9bnVtYmVyW2ldfG51bWJlcltpKzFdPDw4fG51bWJlcltpKzJdPDwxNix0aGlzLndvcmRzW2pdfD13PDxvZmYmNjcxMDg4NjMsdGhpcy53b3Jkc1tqKzFdPXc+Pj4yNi1vZmYmNjcxMDg4NjMsKG9mZis9MjQpPj0yNiYmKG9mZi09MjYsaisrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uIF9wYXJzZUhleChudW1iZXIsc3RhcnQsZW5kaWFuKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKG51bWJlci5sZW5ndGgtc3RhcnQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIHcsb2ZmPTAsaj0wO2lmKCJiZSI9PT1lbmRpYW4pZm9yKGk9bnVtYmVyLmxlbmd0aC0xO2k+PXN0YXJ0O2ktPTIpdz1wYXJzZUhleEJ5dGUobnVtYmVyLHN0YXJ0LGkpPDxvZmYsdGhpcy53b3Jkc1tqXXw9NjcxMDg4NjMmdyxvZmY+PTE4PyhvZmYtPTE4LGorPTEsdGhpcy53b3Jkc1tqXXw9dz4+PjI2KTpvZmYrPTg7ZWxzZSBmb3IoaT0obnVtYmVyLmxlbmd0aC1zdGFydCklMj09MD9zdGFydCsxOnN0YXJ0O2k8bnVtYmVyLmxlbmd0aDtpKz0yKXc9cGFyc2VIZXhCeXRlKG51bWJlcixzdGFydCxpKTw8b2ZmLHRoaXMud29yZHNbal18PTY3MTA4ODYzJncsb2ZmPj0xOD8ob2ZmLT0xOCxqKz0xLHRoaXMud29yZHNbal18PXc+Pj4yNik6b2ZmKz04O3RoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24gX3BhcnNlQmFzZShudW1iZXIsYmFzZSxzdGFydCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIGxpbWJMZW49MCxsaW1iUG93PTE7bGltYlBvdzw9NjcxMDg4NjM7bGltYlBvdyo9YmFzZSlsaW1iTGVuKys7bGltYkxlbi0tLGxpbWJQb3c9bGltYlBvdy9iYXNlfDA7Zm9yKHZhciB0b3RhbD1udW1iZXIubGVuZ3RoLXN0YXJ0LG1vZD10b3RhbCVsaW1iTGVuLGVuZD1NYXRoLm1pbih0b3RhbCx0b3RhbC1tb2QpK3N0YXJ0LHdvcmQ9MCxpPXN0YXJ0O2k8ZW5kO2krPWxpbWJMZW4pd29yZD1wYXJzZUJhc2UobnVtYmVyLGksaStsaW1iTGVuLGJhc2UpLHRoaXMuaW11bG4obGltYlBvdyksdGhpcy53b3Jkc1swXSt3b3JkPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXdvcmQ6dGhpcy5faWFkZG4od29yZCk7aWYoMCE9PW1vZCl7dmFyIHBvdz0xO2Zvcih3b3JkPXBhcnNlQmFzZShudW1iZXIsaSxudW1iZXIubGVuZ3RoLGJhc2UpLGk9MDtpPG1vZDtpKyspcG93Kj1iYXNlO3RoaXMuaW11bG4ocG93KSx0aGlzLndvcmRzWzBdK3dvcmQ8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9d29yZDp0aGlzLl9pYWRkbih3b3JkKX10aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uIGNvcHkoZGVzdCl7ZGVzdC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWRlc3Qud29yZHNbaV09dGhpcy53b3Jkc1tpXTtkZXN0Lmxlbmd0aD10aGlzLmxlbmd0aCxkZXN0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZGVzdC5yZWQ9dGhpcy5yZWR9LEJOLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbiBjbG9uZSgpe3ZhciByPW5ldyBCTihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHIpLHJ9LEJOLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uIF9leHBhbmQoc2l6ZSl7Zm9yKDt0aGlzLmxlbmd0aDxzaXplOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEJOLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbiBzdHJpcCgpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEJOLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24gX25vcm1TaWduKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEJOLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uIGluc3BlY3QoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIHplcm9zPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLGdyb3VwU2l6ZXM9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sZ3JvdXBCYXNlcz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBzbWFsbE11bFRvKHNlbGYsbnVtLG91dCl7b3V0Lm5lZ2F0aXZlPW51bS5uZWdhdGl2ZV5zZWxmLm5lZ2F0aXZlO3ZhciBsZW49c2VsZi5sZW5ndGgrbnVtLmxlbmd0aHwwO291dC5sZW5ndGg9bGVuLGxlbj1sZW4tMXwwO3ZhciBhPTB8c2VsZi53b3Jkc1swXSxiPTB8bnVtLndvcmRzWzBdLHI9YSpiLGxvPTY3MTA4ODYzJnIsY2Fycnk9ci82NzEwODg2NHwwO291dC53b3Jkc1swXT1sbztmb3IodmFyIGs9MTtrPGxlbjtrKyspe2Zvcih2YXIgbmNhcnJ5PWNhcnJ5Pj4+MjYscndvcmQ9NjcxMDg4NjMmY2FycnksbWF4Sj1NYXRoLm1pbihrLG51bS5sZW5ndGgtMSksaj1NYXRoLm1heCgwLGstc2VsZi5sZW5ndGgrMSk7ajw9bWF4SjtqKyspe3ZhciBpPWstanwwO25jYXJyeSs9KHI9KGE9MHxzZWxmLndvcmRzW2ldKSooYj0wfG51bS53b3Jkc1tqXSkrcndvcmQpLzY3MTA4ODY0fDAscndvcmQ9NjcxMDg4NjMmcn1vdXQud29yZHNba109MHxyd29yZCxjYXJyeT0wfG5jYXJyeX1yZXR1cm4gMCE9PWNhcnJ5P291dC53b3Jkc1trXT0wfGNhcnJ5Om91dC5sZW5ndGgtLSxvdXQuc3RyaXAoKX1CTi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24gdG9TdHJpbmcoYmFzZSxwYWRkaW5nKXt2YXIgb3V0O2lmKHBhZGRpbmc9MHxwYWRkaW5nfHwxLDE2PT09KGJhc2U9YmFzZXx8MTApfHwiaGV4Ij09PWJhc2Upe291dD0iIjtmb3IodmFyIG9mZj0wLGNhcnJ5PTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgdz10aGlzLndvcmRzW2ldLHdvcmQ9KDE2Nzc3MjE1Jih3PDxvZmZ8Y2FycnkpKS50b1N0cmluZygxNik7Y2Fycnk9dz4+PjI0LW9mZiYxNjc3NzIxNSwob2ZmKz0yKT49MjYmJihvZmYtPTI2LGktLSksb3V0PTAhPT1jYXJyeXx8aSE9PXRoaXMubGVuZ3RoLTE/emVyb3NbNi13b3JkLmxlbmd0aF0rd29yZCtvdXQ6d29yZCtvdXR9Zm9yKDAhPT1jYXJyeSYmKG91dD1jYXJyeS50b1N0cmluZygxNikrb3V0KTtvdXQubGVuZ3RoJXBhZGRpbmchPT0wOylvdXQ9IjAiK291dDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihvdXQ9Ii0iK291dCksb3V0fWlmKGJhc2U9PT0oMHxiYXNlKSYmYmFzZT49MiYmYmFzZTw9MzYpe3ZhciBncm91cFNpemU9Z3JvdXBTaXplc1tiYXNlXSxncm91cEJhc2U9Z3JvdXBCYXNlc1tiYXNlXTtvdXQ9IiI7dmFyIGM9dGhpcy5jbG9uZSgpO2ZvcihjLm5lZ2F0aXZlPTA7IWMuaXNaZXJvKCk7KXt2YXIgcj1jLm1vZG4oZ3JvdXBCYXNlKS50b1N0cmluZyhiYXNlKTtvdXQ9KGM9Yy5pZGl2bihncm91cEJhc2UpKS5pc1plcm8oKT9yK291dDp6ZXJvc1tncm91cFNpemUtci5sZW5ndGhdK3Irb3V0fWZvcih0aGlzLmlzWmVybygpJiYob3V0PSIwIitvdXQpO291dC5sZW5ndGglcGFkZGluZyE9PTA7KW91dD0iMCIrb3V0O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKG91dD0iLSIrb3V0KSxvdXR9YXNzZXJ0KCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEJOLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbiB0b051bWJlcigpe3ZhciByZXQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3JldCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3JldCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmFzc2VydCghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXJldDpyZXR9LEJOLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24gdG9KU09OKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxCTi5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24gdG9CdWZmZXIoZW5kaWFuLGxlbmd0aCl7cmV0dXJuIGFzc2VydCh2b2lkIDAhPT1CdWZmZXIpLHRoaXMudG9BcnJheUxpa2UoQnVmZmVyLGVuZGlhbixsZW5ndGgpfSxCTi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbiB0b0FycmF5KGVuZGlhbixsZW5ndGgpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGVuZGlhbixsZW5ndGgpfSxCTi5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24gdG9BcnJheUxpa2UoQXJyYXlUeXBlLGVuZGlhbixsZW5ndGgpe3ZhciBieXRlTGVuZ3RoPXRoaXMuYnl0ZUxlbmd0aCgpLHJlcUxlbmd0aD1sZW5ndGh8fE1hdGgubWF4KDEsYnl0ZUxlbmd0aCk7YXNzZXJ0KGJ5dGVMZW5ndGg8PXJlcUxlbmd0aCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGFzc2VydChyZXFMZW5ndGg+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBiLGksbGl0dGxlRW5kaWFuPSJsZSI9PT1lbmRpYW4scmVzPW5ldyBBcnJheVR5cGUocmVxTGVuZ3RoKSxxPXRoaXMuY2xvbmUoKTtpZihsaXR0bGVFbmRpYW4pe2ZvcihpPTA7IXEuaXNaZXJvKCk7aSsrKWI9cS5hbmRsbigyNTUpLHEuaXVzaHJuKDgpLHJlc1tpXT1iO2Zvcig7aTxyZXFMZW5ndGg7aSsrKXJlc1tpXT0wfWVsc2V7Zm9yKGk9MDtpPHJlcUxlbmd0aC1ieXRlTGVuZ3RoO2krKylyZXNbaV09MDtmb3IoaT0wOyFxLmlzWmVybygpO2krKyliPXEuYW5kbG4oMjU1KSxxLml1c2hybig4KSxyZXNbcmVxTGVuZ3RoLWktMV09Yn1yZXR1cm4gcmVzfSxNYXRoLmNsejMyP0JOLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uIF9jb3VudEJpdHModyl7cmV0dXJuIDMyLU1hdGguY2x6MzIodyl9OkJOLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uIF9jb3VudEJpdHModyl7dmFyIHQ9dyxyPTA7cmV0dXJuIHQ+PTQwOTYmJihyKz0xMyx0Pj4+PTEzKSx0Pj02NCYmKHIrPTcsdD4+Pj03KSx0Pj04JiYocis9NCx0Pj4+PTQpLHQ+PTImJihyKz0yLHQ+Pj49Mikscit0fSxCTi5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uIF96ZXJvQml0cyh3KXtpZigwPT09dylyZXR1cm4gMjY7dmFyIHQ9dyxyPTA7cmV0dXJuIDgxOTEmdHx8KHIrPTEzLHQ+Pj49MTMpLDEyNyZ0fHwocis9Nyx0Pj4+PTcpLDE1JnR8fChyKz00LHQ+Pj49NCksMyZ0fHwocis9Mix0Pj4+PTIpLDEmdHx8cisrLHJ9LEJOLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24gYml0TGVuZ3RoKCl7dmFyIHc9dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSxoaT10aGlzLl9jb3VudEJpdHModyk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStoaX0sQk4ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uIHplcm9CaXRzKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHI9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciBiPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbaV0pO2lmKHIrPWIsMjYhPT1iKWJyZWFrfXJldHVybiByfSxCTi5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbiBieXRlTGVuZ3RoKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxCTi5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uIHRvVHdvcyh3aWR0aCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4od2lkdGgpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sQk4ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uIGZyb21Ud29zKHdpZHRoKXtyZXR1cm4gdGhpcy50ZXN0bih3aWR0aC0xKT90aGlzLm5vdG4od2lkdGgpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEJOLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbiBpc05lZygpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sQk4ucHJvdG90eXBlLm5lZz1mdW5jdGlvbiBuZWcoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sQk4ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24gaW5lZygpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sQk4ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24gaXVvcihudW0pe2Zvcig7dGhpcy5sZW5ndGg8bnVtLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgaT0wO2k8bnVtLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT10aGlzLndvcmRzW2ldfG51bS53b3Jkc1tpXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uIGlvcihudW0pe3JldHVybiBhc3NlcnQoMD09PSh0aGlzLm5lZ2F0aXZlfG51bS5uZWdhdGl2ZSkpLHRoaXMuaXVvcihudW0pfSxCTi5wcm90b3R5cGUub3I9ZnVuY3Rpb24gb3IobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKG51bSk6bnVtLmNsb25lKCkuaW9yKHRoaXMpfSxCTi5wcm90b3R5cGUudW9yPWZ1bmN0aW9uIHVvcihudW0pe3JldHVybiB0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKG51bSk6bnVtLmNsb25lKCkuaXVvcih0aGlzKX0sQk4ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uIGl1YW5kKG51bSl7dmFyIGI7Yj10aGlzLmxlbmd0aD5udW0ubGVuZ3RoP251bTp0aGlzO2Zvcih2YXIgaT0wO2k8Yi5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09dGhpcy53b3Jkc1tpXSZudW0ud29yZHNbaV07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24gaWFuZChudW0pe3JldHVybiBhc3NlcnQoMD09PSh0aGlzLm5lZ2F0aXZlfG51bS5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQobnVtKX0sQk4ucHJvdG90eXBlLmFuZD1mdW5jdGlvbiBhbmQobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChudW0pOm51bS5jbG9uZSgpLmlhbmQodGhpcyl9LEJOLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uIHVhbmQobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQobnVtKTpudW0uY2xvbmUoKS5pdWFuZCh0aGlzKX0sQk4ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uIGl1eG9yKG51bSl7dmFyIGEsYjt0aGlzLmxlbmd0aD5udW0ubGVuZ3RoPyhhPXRoaXMsYj1udW0pOihhPW51bSxiPXRoaXMpO2Zvcih2YXIgaT0wO2k8Yi5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09YS53b3Jkc1tpXV5iLndvcmRzW2ldO2lmKHRoaXMhPT1hKWZvcig7aTxhLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT1hLndvcmRzW2ldO3JldHVybiB0aGlzLmxlbmd0aD1hLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uIGl4b3IobnVtKXtyZXR1cm4gYXNzZXJ0KDA9PT0odGhpcy5uZWdhdGl2ZXxudW0ubmVnYXRpdmUpKSx0aGlzLml1eG9yKG51bSl9LEJOLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24geG9yKG51bSl7cmV0dXJuIHRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IobnVtKTpudW0uY2xvbmUoKS5peG9yKHRoaXMpfSxCTi5wcm90b3R5cGUudXhvcj1mdW5jdGlvbiB1eG9yKG51bSl7cmV0dXJuIHRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKG51bSk6bnVtLmNsb25lKCkuaXV4b3IodGhpcyl9LEJOLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbiBpbm90bih3aWR0aCl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2Ygd2lkdGgmJndpZHRoPj0wKTt2YXIgYnl0ZXNOZWVkZWQ9MHxNYXRoLmNlaWwod2lkdGgvMjYpLGJpdHNMZWZ0PXdpZHRoJTI2O3RoaXMuX2V4cGFuZChieXRlc05lZWRlZCksYml0c0xlZnQ+MCYmYnl0ZXNOZWVkZWQtLTtmb3IodmFyIGk9MDtpPGJ5dGVzTmVlZGVkO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiBiaXRzTGVmdD4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtYml0c0xlZnQpLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24gbm90bih3aWR0aCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih3aWR0aCl9LEJOLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uIHNldG4oYml0LHZhbCl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0JiZiaXQ+PTApO3ZhciBvZmY9Yml0LzI2fDAsd2JpdD1iaXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChvZmYrMSksdGhpcy53b3Jkc1tvZmZdPXZhbD90aGlzLndvcmRzW29mZl18MTw8d2JpdDp0aGlzLndvcmRzW29mZl0mfigxPDx3Yml0KSx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uIGlhZGQobnVtKXt2YXIgcixhLGI7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1udW0ubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxyPXRoaXMuaXN1YihudW0pLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PW51bS5uZWdhdGl2ZSlyZXR1cm4gbnVtLm5lZ2F0aXZlPTAscj10aGlzLmlzdWIobnVtKSxudW0ubmVnYXRpdmU9MSxyLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPm51bS5sZW5ndGg/KGE9dGhpcyxiPW51bSk6KGE9bnVtLGI9dGhpcyk7Zm9yKHZhciBjYXJyeT0wLGk9MDtpPGIubGVuZ3RoO2krKylyPSgwfGEud29yZHNbaV0pKygwfGIud29yZHNbaV0pK2NhcnJ5LHRoaXMud29yZHNbaV09NjcxMDg4NjMmcixjYXJyeT1yPj4+MjY7Zm9yKDswIT09Y2FycnkmJmk8YS5sZW5ndGg7aSsrKXI9KDB8YS53b3Jkc1tpXSkrY2FycnksdGhpcy53b3Jkc1tpXT02NzEwODg2MyZyLGNhcnJ5PXI+Pj4yNjtpZih0aGlzLmxlbmd0aD1hLmxlbmd0aCwwIT09Y2FycnkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Y2FycnksdGhpcy5sZW5ndGgrKztlbHNlIGlmKGEhPT10aGlzKWZvcig7aTxhLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT1hLndvcmRzW2ldO3JldHVybiB0aGlzfSxCTi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uIGFkZChudW0pe3ZhciByZXM7cmV0dXJuIDAhPT1udW0ubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhudW0ubmVnYXRpdmU9MCxyZXM9dGhpcy5zdWIobnVtKSxudW0ubmVnYXRpdmVePTEscmVzKTowPT09bnVtLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHJlcz1udW0uc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxyZXMpOnRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQobnVtKTpudW0uY2xvbmUoKS5pYWRkKHRoaXMpfSxCTi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbiBpc3ViKG51bSl7aWYoMCE9PW51bS5uZWdhdGl2ZSl7bnVtLm5lZ2F0aXZlPTA7dmFyIHI9dGhpcy5pYWRkKG51bSk7cmV0dXJuIG51bS5uZWdhdGl2ZT0xLHIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQobnVtKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgYSxiLGNtcD10aGlzLmNtcChudW0pO2lmKDA9PT1jbXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO2NtcD4wPyhhPXRoaXMsYj1udW0pOihhPW51bSxiPXRoaXMpO2Zvcih2YXIgY2Fycnk9MCxpPTA7aTxiLmxlbmd0aDtpKyspY2Fycnk9KHI9KDB8YS53b3Jkc1tpXSktKDB8Yi53b3Jkc1tpXSkrY2FycnkpPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJnI7Zm9yKDswIT09Y2FycnkmJmk8YS5sZW5ndGg7aSsrKWNhcnJ5PShyPSgwfGEud29yZHNbaV0pK2NhcnJ5KT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZyO2lmKDA9PT1jYXJyeSYmaTxhLmxlbmd0aCYmYSE9PXRoaXMpZm9yKDtpPGEubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPWEud29yZHNbaV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGkpLGEhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24gc3ViKG51bSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKG51bSl9O3ZhciBjb21iMTBNdWxUbz1mdW5jdGlvbiBjb21iMTBNdWxUbyhzZWxmLG51bSxvdXQpe3ZhciBsbyxtaWQsaGksYT1zZWxmLndvcmRzLGI9bnVtLndvcmRzLG89b3V0LndvcmRzLGM9MCxhMD0wfGFbMF0sYWwwPTgxOTEmYTAsYWgwPWEwPj4+MTMsYTE9MHxhWzFdLGFsMT04MTkxJmExLGFoMT1hMT4+PjEzLGEyPTB8YVsyXSxhbDI9ODE5MSZhMixhaDI9YTI+Pj4xMyxhMz0wfGFbM10sYWwzPTgxOTEmYTMsYWgzPWEzPj4+MTMsYTQ9MHxhWzRdLGFsND04MTkxJmE0LGFoND1hND4+PjEzLGE1PTB8YVs1XSxhbDU9ODE5MSZhNSxhaDU9YTU+Pj4xMyxhNj0wfGFbNl0sYWw2PTgxOTEmYTYsYWg2PWE2Pj4+MTMsYTc9MHxhWzddLGFsNz04MTkxJmE3LGFoNz1hNz4+PjEzLGE4PTB8YVs4XSxhbDg9ODE5MSZhOCxhaDg9YTg+Pj4xMyxhOT0wfGFbOV0sYWw5PTgxOTEmYTksYWg5PWE5Pj4+MTMsYjA9MHxiWzBdLGJsMD04MTkxJmIwLGJoMD1iMD4+PjEzLGIxPTB8YlsxXSxibDE9ODE5MSZiMSxiaDE9YjE+Pj4xMyxiMj0wfGJbMl0sYmwyPTgxOTEmYjIsYmgyPWIyPj4+MTMsYjM9MHxiWzNdLGJsMz04MTkxJmIzLGJoMz1iMz4+PjEzLGI0PTB8Yls0XSxibDQ9ODE5MSZiNCxiaDQ9YjQ+Pj4xMyxiNT0wfGJbNV0sYmw1PTgxOTEmYjUsYmg1PWI1Pj4+MTMsYjY9MHxiWzZdLGJsNj04MTkxJmI2LGJoNj1iNj4+PjEzLGI3PTB8Yls3XSxibDc9ODE5MSZiNyxiaDc9Yjc+Pj4xMyxiOD0wfGJbOF0sYmw4PTgxOTEmYjgsYmg4PWI4Pj4+MTMsYjk9MHxiWzldLGJsOT04MTkxJmI5LGJoOT1iOT4+PjEzO291dC5uZWdhdGl2ZT1zZWxmLm5lZ2F0aXZlXm51bS5uZWdhdGl2ZSxvdXQubGVuZ3RoPTE5O3ZhciB3MD0oYysobG89TWF0aC5pbXVsKGFsMCxibDApKXwwKSsoKDgxOTEmKG1pZD0obWlkPU1hdGguaW11bChhbDAsYmgwKSkrTWF0aC5pbXVsKGFoMCxibDApfDApKTw8MTMpfDA7Yz0oKGhpPU1hdGguaW11bChhaDAsYmgwKSkrKG1pZD4+PjEzKXwwKSsodzA+Pj4yNil8MCx3MCY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsMSxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDEsYmgwKSkrTWF0aC5pbXVsKGFoMSxibDApfDAsaGk9TWF0aC5pbXVsKGFoMSxiaDApO3ZhciB3MT0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDEpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmgxKXwwKStNYXRoLmltdWwoYWgwLGJsMSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDEpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxPj4+MjYpfDAsdzEmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDIsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWwyLGJoMCkpK01hdGguaW11bChhaDIsYmwwKXwwLGhpPU1hdGguaW11bChhaDIsYmgwKSxsbz1sbytNYXRoLmltdWwoYWwxLGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDEpfDApK01hdGguaW11bChhaDEsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDEsYmgxKXwwO3ZhciB3Mj0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDIpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmgyKXwwKStNYXRoLmltdWwoYWgwLGJsMil8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDIpfDApKyhtaWQ+Pj4xMyl8MCkrKHcyPj4+MjYpfDAsdzImPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDMsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWwzLGJoMCkpK01hdGguaW11bChhaDMsYmwwKXwwLGhpPU1hdGguaW11bChhaDMsYmgwKSxsbz1sbytNYXRoLmltdWwoYWwyLGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDEpfDApK01hdGguaW11bChhaDIsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDIsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDEsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoMil8MCkrTWF0aC5pbXVsKGFoMSxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDIpfDA7dmFyIHczPShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsMyl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDMpfDApK01hdGguaW11bChhaDAsYmwzKXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoMyl8MCkrKG1pZD4+PjEzKXwwKSsodzM+Pj4yNil8MCx3MyY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsNCxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDQsYmgwKSkrTWF0aC5pbXVsKGFoNCxibDApfDAsaGk9TWF0aC5pbXVsKGFoNCxiaDApLGxvPWxvK01hdGguaW11bChhbDMsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoMSl8MCkrTWF0aC5pbXVsKGFoMyxibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmgyKXwwKStNYXRoLmltdWwoYWgyLGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDMpfDApK01hdGguaW11bChhaDEsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDEsYmgzKXwwO3ZhciB3ND0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDQpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg0KXwwKStNYXRoLmltdWwoYWgwLGJsNCl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDQpfDApKyhtaWQ+Pj4xMyl8MCkrKHc0Pj4+MjYpfDAsdzQmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDUsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw1LGJoMCkpK01hdGguaW11bChhaDUsYmwwKXwwLGhpPU1hdGguaW11bChhaDUsYmgwKSxsbz1sbytNYXRoLmltdWwoYWw0LGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDEpfDApK01hdGguaW11bChhaDQsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDQsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDMsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoMil8MCkrTWF0aC5pbXVsKGFoMyxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmgzKXwwKStNYXRoLmltdWwoYWgyLGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDQpfDApK01hdGguaW11bChhaDEsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDEsYmg0KXwwO3ZhciB3NT0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDUpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg1KXwwKStNYXRoLmltdWwoYWgwLGJsNSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDUpfDApKyhtaWQ+Pj4xMyl8MCkrKHc1Pj4+MjYpfDAsdzUmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDYsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw2LGJoMCkpK01hdGguaW11bChhaDYsYmwwKXwwLGhpPU1hdGguaW11bChhaDYsYmgwKSxsbz1sbytNYXRoLmltdWwoYWw1LGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDEpfDApK01hdGguaW11bChhaDUsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDUsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDQsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoMil8MCkrTWF0aC5pbXVsKGFoNCxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmgzKXwwKStNYXRoLmltdWwoYWgzLGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDQpfDApK01hdGguaW11bChhaDIsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDIsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDEsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoNSl8MCkrTWF0aC5pbXVsKGFoMSxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDUpfDA7dmFyIHc2PShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsNil8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDYpfDApK01hdGguaW11bChhaDAsYmw2KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoNil8MCkrKG1pZD4+PjEzKXwwKSsodzY+Pj4yNil8MCx3NiY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsNyxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDcsYmgwKSkrTWF0aC5pbXVsKGFoNyxibDApfDAsaGk9TWF0aC5pbXVsKGFoNyxiaDApLGxvPWxvK01hdGguaW11bChhbDYsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoMSl8MCkrTWF0aC5pbXVsKGFoNixibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmgyKXwwKStNYXRoLmltdWwoYWg1LGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDMpfDApK01hdGguaW11bChhaDQsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDQsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDMsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoNCl8MCkrTWF0aC5pbXVsKGFoMyxibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmg1KXwwKStNYXRoLmltdWwoYWgyLGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDYpfDApK01hdGguaW11bChhaDEsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDEsYmg2KXwwO3ZhciB3Nz0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDcpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg3KXwwKStNYXRoLmltdWwoYWgwLGJsNyl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDcpfDApKyhtaWQ+Pj4xMyl8MCkrKHc3Pj4+MjYpfDAsdzcmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDgsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw4LGJoMCkpK01hdGguaW11bChhaDgsYmwwKXwwLGhpPU1hdGguaW11bChhaDgsYmgwKSxsbz1sbytNYXRoLmltdWwoYWw3LGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDEpfDApK01hdGguaW11bChhaDcsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDcsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDYsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoMil8MCkrTWF0aC5pbXVsKGFoNixibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmgzKXwwKStNYXRoLmltdWwoYWg1LGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDQpfDApK01hdGguaW11bChhaDQsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDQsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDMsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoNSl8MCkrTWF0aC5pbXVsKGFoMyxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmg2KXwwKStNYXRoLmltdWwoYWgyLGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDcpfDApK01hdGguaW11bChhaDEsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDEsYmg3KXwwO3ZhciB3OD0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDgpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg4KXwwKStNYXRoLmltdWwoYWgwLGJsOCl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDgpfDApKyhtaWQ+Pj4xMyl8MCkrKHc4Pj4+MjYpfDAsdzgmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoMCkpK01hdGguaW11bChhaDksYmwwKXwwLGhpPU1hdGguaW11bChhaDksYmgwKSxsbz1sbytNYXRoLmltdWwoYWw4LGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDEpfDApK01hdGguaW11bChhaDgsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDgsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDcsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoMil8MCkrTWF0aC5pbXVsKGFoNyxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmgzKXwwKStNYXRoLmltdWwoYWg2LGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDQpfDApK01hdGguaW11bChhaDUsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDUsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDQsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoNSl8MCkrTWF0aC5pbXVsKGFoNCxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmg2KXwwKStNYXRoLmltdWwoYWgzLGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDcpfDApK01hdGguaW11bChhaDIsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDIsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDEsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoOCl8MCkrTWF0aC5pbXVsKGFoMSxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDgpfDA7dmFyIHc5PShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDkpfDApK01hdGguaW11bChhaDAsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzk+Pj4yNil8MCx3OSY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDEpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmgxKSkrTWF0aC5pbXVsKGFoOSxibDEpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDEpLGxvPWxvK01hdGguaW11bChhbDgsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoMil8MCkrTWF0aC5pbXVsKGFoOCxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmgzKXwwKStNYXRoLmltdWwoYWg3LGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDQpfDApK01hdGguaW11bChhaDYsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDYsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDUsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoNSl8MCkrTWF0aC5pbXVsKGFoNSxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg2KXwwKStNYXRoLmltdWwoYWg0LGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDcpfDApK01hdGguaW11bChhaDMsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDMsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDIsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoOCl8MCkrTWF0aC5pbXVsKGFoMixibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDgpfDA7dmFyIHcxMD0oYysobG89bG8rTWF0aC5pbXVsKGFsMSxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmg5KXwwKStNYXRoLmltdWwoYWgxLGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxMD4+PjI2KXwwLHcxMCY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDIpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmgyKSkrTWF0aC5pbXVsKGFoOSxibDIpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDIpLGxvPWxvK01hdGguaW11bChhbDgsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoMyl8MCkrTWF0aC5pbXVsKGFoOCxibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg0KXwwKStNYXRoLmltdWwoYWg3LGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDUpfDApK01hdGguaW11bChhaDYsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDYsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDUsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoNil8MCkrTWF0aC5pbXVsKGFoNSxibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg3KXwwKStNYXRoLmltdWwoYWg0LGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDgpfDApK01hdGguaW11bChhaDMsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDMsYmg4KXwwO3ZhciB3MTE9KGMrKGxvPWxvK01hdGguaW11bChhbDIsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoOSl8MCkrTWF0aC5pbXVsKGFoMixibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDIsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTE+Pj4yNil8MCx3MTEmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmwzKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoMykpK01hdGguaW11bChhaDksYmwzKXwwLGhpPU1hdGguaW11bChhaDksYmgzKSxsbz1sbytNYXRoLmltdWwoYWw4LGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDQpfDApK01hdGguaW11bChhaDgsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDgsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDcsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoNSl8MCkrTWF0aC5pbXVsKGFoNyxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmg2KXwwKStNYXRoLmltdWwoYWg2LGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDcpfDApK01hdGguaW11bChhaDUsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDUsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDQsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoOCl8MCkrTWF0aC5pbXVsKGFoNCxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDgpfDA7dmFyIHcxMj0oYysobG89bG8rTWF0aC5pbXVsKGFsMyxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmg5KXwwKStNYXRoLmltdWwoYWgzLGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxMj4+PjI2KXwwLHcxMiY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDQpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmg0KSkrTWF0aC5pbXVsKGFoOSxibDQpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDQpLGxvPWxvK01hdGguaW11bChhbDgsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoNSl8MCkrTWF0aC5pbXVsKGFoOCxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg2KXwwKStNYXRoLmltdWwoYWg3LGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDcpfDApK01hdGguaW11bChhaDYsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDYsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDUsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoOCl8MCkrTWF0aC5pbXVsKGFoNSxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDgpfDA7dmFyIHcxMz0oYysobG89bG8rTWF0aC5pbXVsKGFsNCxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg5KXwwKStNYXRoLmltdWwoYWg0LGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxMz4+PjI2KXwwLHcxMyY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDUpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmg1KSkrTWF0aC5pbXVsKGFoOSxibDUpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDUpLGxvPWxvK01hdGguaW11bChhbDgsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoNil8MCkrTWF0aC5pbXVsKGFoOCxibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg3KXwwKStNYXRoLmltdWwoYWg3LGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDgpfDApK01hdGguaW11bChhaDYsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDYsYmg4KXwwO3ZhciB3MTQ9KGMrKGxvPWxvK01hdGguaW11bChhbDUsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoOSl8MCkrTWF0aC5pbXVsKGFoNSxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDUsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTQ+Pj4yNil8MCx3MTQmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmw2KSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoNikpK01hdGguaW11bChhaDksYmw2KXwwLGhpPU1hdGguaW11bChhaDksYmg2KSxsbz1sbytNYXRoLmltdWwoYWw4LGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDcpfDApK01hdGguaW11bChhaDgsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDgsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDcsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoOCl8MCkrTWF0aC5pbXVsKGFoNyxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDgpfDA7dmFyIHcxNT0oYysobG89bG8rTWF0aC5pbXVsKGFsNixibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmg5KXwwKStNYXRoLmltdWwoYWg2LGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoNixiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxNT4+PjI2KXwwLHcxNSY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDcpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmg3KSkrTWF0aC5pbXVsKGFoOSxibDcpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDcpLGxvPWxvK01hdGguaW11bChhbDgsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoOCl8MCkrTWF0aC5pbXVsKGFoOCxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDgpfDA7dmFyIHcxNj0oYysobG89bG8rTWF0aC5pbXVsKGFsNyxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg5KXwwKStNYXRoLmltdWwoYWg3LGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxNj4+PjI2KXwwLHcxNiY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDgpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmg4KSkrTWF0aC5pbXVsKGFoOSxibDgpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDgpO3ZhciB3MTc9KGMrKGxvPWxvK01hdGguaW11bChhbDgsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoOSl8MCkrTWF0aC5pbXVsKGFoOCxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDgsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTc+Pj4yNil8MCx3MTcmPTY3MTA4ODYzO3ZhciB3MTg9KGMrKGxvPU1hdGguaW11bChhbDksYmw5KSl8MCkrKCg4MTkxJihtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoOSkpK01hdGguaW11bChhaDksYmw5KXwwKSk8PDEzKXwwO3JldHVybiBjPSgoaGk9TWF0aC5pbXVsKGFoOSxiaDkpKSsobWlkPj4+MTMpfDApKyh3MTg+Pj4yNil8MCx3MTgmPTY3MTA4ODYzLG9bMF09dzAsb1sxXT13MSxvWzJdPXcyLG9bM109dzMsb1s0XT13NCxvWzVdPXc1LG9bNl09dzYsb1s3XT13NyxvWzhdPXc4LG9bOV09dzksb1sxMF09dzEwLG9bMTFdPXcxMSxvWzEyXT13MTIsb1sxM109dzEzLG9bMTRdPXcxNCxvWzE1XT13MTUsb1sxNl09dzE2LG9bMTddPXcxNyxvWzE4XT13MTgsMCE9PWMmJihvWzE5XT1jLG91dC5sZW5ndGgrKyksb3V0fTtmdW5jdGlvbiBqdW1ib011bFRvKHNlbGYsbnVtLG91dCl7cmV0dXJuKG5ldyBGRlRNKS5tdWxwKHNlbGYsbnVtLG91dCl9ZnVuY3Rpb24gRkZUTSh4LHkpe3RoaXMueD14LHRoaXMueT15fU1hdGguaW11bHx8KGNvbWIxME11bFRvPXNtYWxsTXVsVG8pLEJOLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbiBtdWxUbyhudW0sb3V0KXt2YXIgcmVzLGxlbj10aGlzLmxlbmd0aCtudW0ubGVuZ3RoO3JldHVybiByZXM9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1udW0ubGVuZ3RoP2NvbWIxME11bFRvKHRoaXMsbnVtLG91dCk6bGVuPDYzP3NtYWxsTXVsVG8odGhpcyxudW0sb3V0KTpsZW48MTAyND9mdW5jdGlvbiBiaWdNdWxUbyhzZWxmLG51bSxvdXQpe291dC5uZWdhdGl2ZT1udW0ubmVnYXRpdmVec2VsZi5uZWdhdGl2ZSxvdXQubGVuZ3RoPXNlbGYubGVuZ3RoK251bS5sZW5ndGg7Zm9yKHZhciBjYXJyeT0wLGhuY2Fycnk9MCxrPTA7azxvdXQubGVuZ3RoLTE7aysrKXt2YXIgbmNhcnJ5PWhuY2Fycnk7aG5jYXJyeT0wO2Zvcih2YXIgcndvcmQ9NjcxMDg4NjMmY2FycnksbWF4Sj1NYXRoLm1pbihrLG51bS5sZW5ndGgtMSksaj1NYXRoLm1heCgwLGstc2VsZi5sZW5ndGgrMSk7ajw9bWF4SjtqKyspe3ZhciBpPWstaixyPSgwfHNlbGYud29yZHNbaV0pKigwfG51bS53b3Jkc1tqXSksbG89NjcxMDg4NjMmcjtyd29yZD02NzEwODg2MyYobG89bG8rcndvcmR8MCksaG5jYXJyeSs9KG5jYXJyeT0obmNhcnJ5PW5jYXJyeSsoci82NzEwODg2NHwwKXwwKSsobG8+Pj4yNil8MCk+Pj4yNixuY2FycnkmPTY3MTA4ODYzfW91dC53b3Jkc1trXT1yd29yZCxjYXJyeT1uY2FycnksbmNhcnJ5PWhuY2Fycnl9cmV0dXJuIDAhPT1jYXJyeT9vdXQud29yZHNba109Y2Fycnk6b3V0Lmxlbmd0aC0tLG91dC5zdHJpcCgpfSh0aGlzLG51bSxvdXQpOmp1bWJvTXVsVG8odGhpcyxudW0sb3V0KSxyZXN9LEZGVE0ucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24gbWFrZVJCVChOKXtmb3IodmFyIHQ9bmV3IEFycmF5KE4pLGw9Qk4ucHJvdG90eXBlLl9jb3VudEJpdHMoTiktMSxpPTA7aTxOO2krKyl0W2ldPXRoaXMucmV2QmluKGksbCxOKTtyZXR1cm4gdH0sRkZUTS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uIHJldkJpbih4LGwsTil7aWYoMD09PXh8fHg9PT1OLTEpcmV0dXJuIHg7Zm9yKHZhciByYj0wLGk9MDtpPGw7aSsrKXJifD0oMSZ4KTw8bC1pLTEseD4+PTE7cmV0dXJuIHJifSxGRlRNLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uIHBlcm11dGUocmJ0LHJ3cyxpd3MscnR3cyxpdHdzLE4pe2Zvcih2YXIgaT0wO2k8TjtpKyspcnR3c1tpXT1yd3NbcmJ0W2ldXSxpdHdzW2ldPWl3c1tyYnRbaV1dfSxGRlRNLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24gdHJhbnNmb3JtKHJ3cyxpd3MscnR3cyxpdHdzLE4scmJ0KXt0aGlzLnBlcm11dGUocmJ0LHJ3cyxpd3MscnR3cyxpdHdzLE4pO2Zvcih2YXIgcz0xO3M8TjtzPDw9MSlmb3IodmFyIGw9czw8MSxydHdkZj1NYXRoLmNvcygyKk1hdGguUEkvbCksaXR3ZGY9TWF0aC5zaW4oMipNYXRoLlBJL2wpLHA9MDtwPE47cCs9bClmb3IodmFyIHJ0d2RmXz1ydHdkZixpdHdkZl89aXR3ZGYsaj0wO2o8cztqKyspe3ZhciByZT1ydHdzW3Aral0saWU9aXR3c1twK2pdLHJvPXJ0d3NbcCtqK3NdLGlvPWl0d3NbcCtqK3NdLHJ4PXJ0d2RmXypyby1pdHdkZl8qaW87aW89cnR3ZGZfKmlvK2l0d2RmXypybyxybz1yeCxydHdzW3Aral09cmUrcm8saXR3c1twK2pdPWllK2lvLHJ0d3NbcCtqK3NdPXJlLXJvLGl0d3NbcCtqK3NdPWllLWlvLGohPT1sJiYocng9cnR3ZGYqcnR3ZGZfLWl0d2RmKml0d2RmXyxpdHdkZl89cnR3ZGYqaXR3ZGZfK2l0d2RmKnJ0d2RmXyxydHdkZl89cngpfX0sRkZUTS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24gZ3Vlc3NMZW4xM2IobixtKXt2YXIgTj0xfE1hdGgubWF4KG0sbiksb2RkPTEmTixpPTA7Zm9yKE49Ti8yfDA7TjtOPj4+PTEpaSsrO3JldHVybiAxPDxpKzErb2RkfSxGRlRNLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24gY29uanVnYXRlKHJ3cyxpd3MsTil7aWYoIShOPD0xKSlmb3IodmFyIGk9MDtpPE4vMjtpKyspe3ZhciB0PXJ3c1tpXTtyd3NbaV09cndzW04taS0xXSxyd3NbTi1pLTFdPXQsdD1pd3NbaV0saXdzW2ldPS1pd3NbTi1pLTFdLGl3c1tOLWktMV09LXR9fSxGRlRNLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24gbm9ybWFsaXplMTNiKHdzLE4pe2Zvcih2YXIgY2Fycnk9MCxpPTA7aTxOLzI7aSsrKXt2YXIgdz04MTkyKk1hdGgucm91bmQod3NbMippKzFdL04pK01hdGgucm91bmQod3NbMippXS9OKStjYXJyeTt3c1tpXT02NzEwODg2MyZ3LGNhcnJ5PXc8NjcxMDg4NjQ/MDp3LzY3MTA4ODY0fDB9cmV0dXJuIHdzfSxGRlRNLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uIGNvbnZlcnQxM2Iod3MsbGVuLHJ3cyxOKXtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8bGVuO2krKyljYXJyeSs9MHx3c1tpXSxyd3NbMippXT04MTkxJmNhcnJ5LGNhcnJ5Pj4+PTEzLHJ3c1syKmkrMV09ODE5MSZjYXJyeSxjYXJyeT4+Pj0xMztmb3IoaT0yKmxlbjtpPE47KytpKXJ3c1tpXT0wO2Fzc2VydCgwPT09Y2FycnkpLGFzc2VydCghKC04MTkyJmNhcnJ5KSl9LEZGVE0ucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24gc3R1YihOKXtmb3IodmFyIHBoPW5ldyBBcnJheShOKSxpPTA7aTxOO2krKylwaFtpXT0wO3JldHVybiBwaH0sRkZUTS5wcm90b3R5cGUubXVscD1mdW5jdGlvbiBtdWxwKHgseSxvdXQpe3ZhciBOPTIqdGhpcy5ndWVzc0xlbjEzYih4Lmxlbmd0aCx5Lmxlbmd0aCkscmJ0PXRoaXMubWFrZVJCVChOKSxfPXRoaXMuc3R1YihOKSxyd3M9bmV3IEFycmF5KE4pLHJ3c3Q9bmV3IEFycmF5KE4pLGl3c3Q9bmV3IEFycmF5KE4pLG5yd3M9bmV3IEFycmF5KE4pLG5yd3N0PW5ldyBBcnJheShOKSxuaXdzdD1uZXcgQXJyYXkoTikscm13cz1vdXQud29yZHM7cm13cy5sZW5ndGg9Tix0aGlzLmNvbnZlcnQxM2IoeC53b3Jkcyx4Lmxlbmd0aCxyd3MsTiksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMseS5sZW5ndGgsbnJ3cyxOKSx0aGlzLnRyYW5zZm9ybShyd3MsXyxyd3N0LGl3c3QsTixyYnQpLHRoaXMudHJhbnNmb3JtKG5yd3MsXyxucndzdCxuaXdzdCxOLHJidCk7Zm9yKHZhciBpPTA7aTxOO2krKyl7dmFyIHJ4PXJ3c3RbaV0qbnJ3c3RbaV0taXdzdFtpXSpuaXdzdFtpXTtpd3N0W2ldPXJ3c3RbaV0qbml3c3RbaV0raXdzdFtpXSpucndzdFtpXSxyd3N0W2ldPXJ4fXJldHVybiB0aGlzLmNvbmp1Z2F0ZShyd3N0LGl3c3QsTiksdGhpcy50cmFuc2Zvcm0ocndzdCxpd3N0LHJtd3MsXyxOLHJidCksdGhpcy5jb25qdWdhdGUocm13cyxfLE4pLHRoaXMubm9ybWFsaXplMTNiKHJtd3MsTiksb3V0Lm5lZ2F0aXZlPXgubmVnYXRpdmVeeS5uZWdhdGl2ZSxvdXQubGVuZ3RoPXgubGVuZ3RoK3kubGVuZ3RoLG91dC5zdHJpcCgpfSxCTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uIG11bChudW0pe3ZhciBvdXQ9bmV3IEJOKG51bGwpO3JldHVybiBvdXQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK251bS5sZW5ndGgpLHRoaXMubXVsVG8obnVtLG91dCl9LEJOLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uIG11bGYobnVtKXt2YXIgb3V0PW5ldyBCTihudWxsKTtyZXR1cm4gb3V0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtudW0ubGVuZ3RoKSxqdW1ib011bFRvKHRoaXMsbnVtLG91dCl9LEJOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uIGltdWwobnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKG51bSx0aGlzKX0sQk4ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uIGltdWxuKG51bSl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgbnVtKSxhc3NlcnQobnVtPDY3MTA4ODY0KTtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgdz0oMHx0aGlzLndvcmRzW2ldKSpudW0sbG89KDY3MTA4ODYzJncpKyg2NzEwODg2MyZjYXJyeSk7Y2Fycnk+Pj0yNixjYXJyeSs9dy82NzEwODg2NHwwLGNhcnJ5Kz1sbz4+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmbG99cmV0dXJuIDAhPT1jYXJyeSYmKHRoaXMud29yZHNbaV09Y2FycnksdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PW51bT8xOnRoaXMubGVuZ3RoLHRoaXN9LEJOLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uIG11bG4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKG51bSl9LEJOLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24gc3FyKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxCTi5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbiBpc3FyKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxCTi5wcm90b3R5cGUucG93PWZ1bmN0aW9uIHBvdyhudW0pe3ZhciB3PWZ1bmN0aW9uIHRvQml0QXJyYXkobnVtKXtmb3IodmFyIHc9bmV3IEFycmF5KG51bS5iaXRMZW5ndGgoKSksYml0PTA7Yml0PHcubGVuZ3RoO2JpdCsrKXt2YXIgb2ZmPWJpdC8yNnwwLHdiaXQ9Yml0JTI2O3dbYml0XT0obnVtLndvcmRzW29mZl0mMTw8d2JpdCk+Pj53Yml0fXJldHVybiB3fShudW0pO2lmKDA9PT13Lmxlbmd0aClyZXR1cm4gbmV3IEJOKDEpO2Zvcih2YXIgcmVzPXRoaXMsaT0wO2k8dy5sZW5ndGgmJjA9PT13W2ldO2krKyxyZXM9cmVzLnNxcigpKTtpZigrK2k8dy5sZW5ndGgpZm9yKHZhciBxPXJlcy5zcXIoKTtpPHcubGVuZ3RoO2krKyxxPXEuc3FyKCkpMCE9PXdbaV0mJihyZXM9cmVzLm11bChxKSk7cmV0dXJuIHJlc30sQk4ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbiBpdXNobG4oYml0cyl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0cyYmYml0cz49MCk7dmFyIGkscj1iaXRzJTI2LHM9KGJpdHMtcikvMjYsY2FycnlNYXNrPTY3MTA4ODYzPj4+MjYtcjw8MjYtcjtpZigwIT09cil7dmFyIGNhcnJ5PTA7Zm9yKGk9MDtpPHRoaXMubGVuZ3RoO2krKyl7dmFyIG5ld0NhcnJ5PXRoaXMud29yZHNbaV0mY2FycnlNYXNrLGM9KDB8dGhpcy53b3Jkc1tpXSktbmV3Q2Fycnk8PHI7dGhpcy53b3Jkc1tpXT1jfGNhcnJ5LGNhcnJ5PW5ld0NhcnJ5Pj4+MjYtcn1jYXJyeSYmKHRoaXMud29yZHNbaV09Y2FycnksdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXMpe2ZvcihpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pdGhpcy53b3Jkc1tpK3NdPXRoaXMud29yZHNbaV07Zm9yKGk9MDtpPHM7aSsrKXRoaXMud29yZHNbaV09MDt0aGlzLmxlbmd0aCs9c31yZXR1cm4gdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24gaXNobG4oYml0cyl7cmV0dXJuIGFzc2VydCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYml0cyl9LEJOLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24gaXVzaHJuKGJpdHMsaGludCxleHRlbmRlZCl7dmFyIGg7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0cyYmYml0cz49MCksaD1oaW50PyhoaW50LWhpbnQlMjYpLzI2OjA7dmFyIHI9Yml0cyUyNixzPU1hdGgubWluKChiaXRzLXIpLzI2LHRoaXMubGVuZ3RoKSxtYXNrPTY3MTA4ODYzXjY3MTA4ODYzPj4+cjw8cixtYXNrZWRXb3Jkcz1leHRlbmRlZDtpZihoLT1zLGg9TWF0aC5tYXgoMCxoKSxtYXNrZWRXb3Jkcyl7Zm9yKHZhciBpPTA7aTxzO2krKyltYXNrZWRXb3Jkcy53b3Jkc1tpXT10aGlzLndvcmRzW2ldO21hc2tlZFdvcmRzLmxlbmd0aD1zfWlmKDA9PT1zKTtlbHNlIGlmKHRoaXMubGVuZ3RoPnMpZm9yKHRoaXMubGVuZ3RoLT1zLGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPXRoaXMud29yZHNbaStzXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBjYXJyeT0wO2ZvcihpPXRoaXMubGVuZ3RoLTE7aT49MCYmKDAhPT1jYXJyeXx8aT49aCk7aS0tKXt2YXIgd29yZD0wfHRoaXMud29yZHNbaV07dGhpcy53b3Jkc1tpXT1jYXJyeTw8MjYtcnx3b3JkPj4+cixjYXJyeT13b3JkJm1hc2t9cmV0dXJuIG1hc2tlZFdvcmRzJiYwIT09Y2FycnkmJihtYXNrZWRXb3Jkcy53b3Jkc1ttYXNrZWRXb3Jkcy5sZW5ndGgrK109Y2FycnkpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbiBpc2hybihiaXRzLGhpbnQsZXh0ZW5kZWQpe3JldHVybiBhc3NlcnQoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGJpdHMsaGludCxleHRlbmRlZCl9LEJOLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uIHNobG4oYml0cyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiaXRzKX0sQk4ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uIHVzaGxuKGJpdHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGJpdHMpfSxCTi5wcm90b3R5cGUuc2hybj1mdW5jdGlvbiBzaHJuKGJpdHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYml0cyl9LEJOLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbiB1c2hybihiaXRzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiaXRzKX0sQk4ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uIHRlc3RuKGJpdCl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0JiZiaXQ+PTApO3ZhciByPWJpdCUyNixzPShiaXQtcikvMjYscT0xPDxyO3JldHVybiEodGhpcy5sZW5ndGg8PXMpJiYhISh0aGlzLndvcmRzW3NdJnEpfSxCTi5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uIGltYXNrbihiaXRzKXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXRzJiZiaXRzPj0wKTt2YXIgcj1iaXRzJTI2LHM9KGJpdHMtcikvMjY7aWYoYXNzZXJ0KDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9cylyZXR1cm4gdGhpcztpZigwIT09ciYmcysrLHRoaXMubGVuZ3RoPU1hdGgubWluKHMsdGhpcy5sZW5ndGgpLDAhPT1yKXt2YXIgbWFzaz02NzEwODg2M142NzEwODg2Mz4+PnI8PHI7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9bWFza31yZXR1cm4gMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uIG1hc2tuKGJpdHMpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGJpdHMpfSxCTi5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24gaWFkZG4obnVtKXtyZXR1cm4gYXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgbnVtKSxhc3NlcnQobnVtPDY3MTA4ODY0KSxudW08MD90aGlzLmlzdWJuKC1udW0pOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8bnVtPyh0aGlzLndvcmRzWzBdPW51bS0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKG51bSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKG51bSl9LEJOLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24gX2lhZGRuKG51bSl7dGhpcy53b3Jkc1swXSs9bnVtO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbaV0+PTY3MTA4ODY0O2krKyl0aGlzLndvcmRzW2ldLT02NzEwODg2NCxpPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2krMV09MTp0aGlzLndvcmRzW2krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaSsxKSx0aGlzfSxCTi5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24gaXN1Ym4obnVtKXtpZihhc3NlcnQoIm51bWJlciI9PXR5cGVvZiBudW0pLGFzc2VydChudW08NjcxMDg4NjQpLG51bTwwKXJldHVybiB0aGlzLmlhZGRuKC1udW0pO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihudW0pLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPW51bSwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbaV08MDtpKyspdGhpcy53b3Jkc1tpXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tpKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uIGFkZG4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKG51bSl9LEJOLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uIHN1Ym4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKG51bSl9LEJOLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uIGlhYnMoKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEJOLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24gYWJzKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEJOLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24gX2lzaGxuc3VibXVsKG51bSxtdWwsc2hpZnQpe3ZhciBpLHcsbGVuPW51bS5sZW5ndGgrc2hpZnQ7dGhpcy5fZXhwYW5kKGxlbik7dmFyIGNhcnJ5PTA7Zm9yKGk9MDtpPG51bS5sZW5ndGg7aSsrKXt3PSgwfHRoaXMud29yZHNbaStzaGlmdF0pK2NhcnJ5O3ZhciByaWdodD0oMHxudW0ud29yZHNbaV0pKm11bDtjYXJyeT0oKHctPTY3MTA4ODYzJnJpZ2h0KT4+MjYpLShyaWdodC82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krc2hpZnRdPTY3MTA4ODYzJnd9Zm9yKDtpPHRoaXMubGVuZ3RoLXNoaWZ0O2krKyljYXJyeT0odz0oMHx0aGlzLndvcmRzW2krc2hpZnRdKStjYXJyeSk+PjI2LHRoaXMud29yZHNbaStzaGlmdF09NjcxMDg4NjMmdztpZigwPT09Y2FycnkpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoYXNzZXJ0KC0xPT09Y2FycnkpLGNhcnJ5PTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWNhcnJ5PSh3PS0oMHx0aGlzLndvcmRzW2ldKStjYXJyeSk+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmdztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uIF93b3JkRGl2KG51bSxtb2RlKXt2YXIgc2hpZnQ9KHRoaXMubGVuZ3RoLG51bS5sZW5ndGgpLGE9dGhpcy5jbG9uZSgpLGI9bnVtLGJoaT0wfGIud29yZHNbYi5sZW5ndGgtMV07MCE9PShzaGlmdD0yNi10aGlzLl9jb3VudEJpdHMoYmhpKSkmJihiPWIudXNobG4oc2hpZnQpLGEuaXVzaGxuKHNoaWZ0KSxiaGk9MHxiLndvcmRzW2IubGVuZ3RoLTFdKTt2YXIgcSxtPWEubGVuZ3RoLWIubGVuZ3RoO2lmKCJtb2QiIT09bW9kZSl7KHE9bmV3IEJOKG51bGwpKS5sZW5ndGg9bSsxLHEud29yZHM9bmV3IEFycmF5KHEubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHEubGVuZ3RoO2krKylxLndvcmRzW2ldPTB9dmFyIGRpZmY9YS5jbG9uZSgpLl9pc2hsbnN1Ym11bChiLDEsbSk7MD09PWRpZmYubmVnYXRpdmUmJihhPWRpZmYscSYmKHEud29yZHNbbV09MSkpO2Zvcih2YXIgaj1tLTE7aj49MDtqLS0pe3ZhciBxaj02NzEwODg2NCooMHxhLndvcmRzW2IubGVuZ3RoK2pdKSsoMHxhLndvcmRzW2IubGVuZ3RoK2otMV0pO2Zvcihxaj1NYXRoLm1pbihxai9iaGl8MCw2NzEwODg2MyksYS5faXNobG5zdWJtdWwoYixxaixqKTswIT09YS5uZWdhdGl2ZTspcWotLSxhLm5lZ2F0aXZlPTAsYS5faXNobG5zdWJtdWwoYiwxLGopLGEuaXNaZXJvKCl8fChhLm5lZ2F0aXZlXj0xKTtxJiYocS53b3Jkc1tqXT1xail9cmV0dXJuIHEmJnEuc3RyaXAoKSxhLnN0cmlwKCksImRpdiIhPT1tb2RlJiYwIT09c2hpZnQmJmEuaXVzaHJuKHNoaWZ0KSx7ZGl2OnF8fG51bGwsbW9kOmF9fSxCTi5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uIGRpdm1vZChudW0sbW9kZSxwb3NpdGl2ZSl7cmV0dXJuIGFzc2VydCghbnVtLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEJOKDApLG1vZDpuZXcgQk4oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09bnVtLm5lZ2F0aXZlPyhyZXM9dGhpcy5uZWcoKS5kaXZtb2QobnVtLG1vZGUpLCJtb2QiIT09bW9kZSYmKGRpdj1yZXMuZGl2Lm5lZygpKSwiZGl2IiE9PW1vZGUmJihtb2Q9cmVzLm1vZC5uZWcoKSxwb3NpdGl2ZSYmMCE9PW1vZC5uZWdhdGl2ZSYmbW9kLmlhZGQobnVtKSkse2Rpdixtb2R9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PW51bS5uZWdhdGl2ZT8ocmVzPXRoaXMuZGl2bW9kKG51bS5uZWcoKSxtb2RlKSwibW9kIiE9PW1vZGUmJihkaXY9cmVzLmRpdi5uZWcoKSkse2Rpdixtb2Q6cmVzLm1vZH0pOjAhPT0odGhpcy5uZWdhdGl2ZSZudW0ubmVnYXRpdmUpPyhyZXM9dGhpcy5uZWcoKS5kaXZtb2QobnVtLm5lZygpLG1vZGUpLCJkaXYiIT09bW9kZSYmKG1vZD1yZXMubW9kLm5lZygpLHBvc2l0aXZlJiYwIT09bW9kLm5lZ2F0aXZlJiZtb2QuaXN1YihudW0pKSx7ZGl2OnJlcy5kaXYsbW9kfSk6bnVtLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAobnVtKTwwP3tkaXY6bmV3IEJOKDApLG1vZDp0aGlzfToxPT09bnVtLmxlbmd0aD8iZGl2Ij09PW1vZGU/e2Rpdjp0aGlzLmRpdm4obnVtLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1tb2RlP3tkaXY6bnVsbCxtb2Q6bmV3IEJOKHRoaXMubW9kbihudW0ud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4obnVtLndvcmRzWzBdKSxtb2Q6bmV3IEJOKHRoaXMubW9kbihudW0ud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihudW0sbW9kZSk7dmFyIGRpdixtb2QscmVzfSxCTi5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uIGRpdihudW0pe3JldHVybiB0aGlzLmRpdm1vZChudW0sImRpdiIsITEpLmRpdn0sQk4ucHJvdG90eXBlLm1vZD1mdW5jdGlvbiBtb2QobnVtKXtyZXR1cm4gdGhpcy5kaXZtb2QobnVtLCJtb2QiLCExKS5tb2R9LEJOLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uIHVtb2QobnVtKXtyZXR1cm4gdGhpcy5kaXZtb2QobnVtLCJtb2QiLCEwKS5tb2R9LEJOLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbiBkaXZSb3VuZChudW0pe3ZhciBkbT10aGlzLmRpdm1vZChudW0pO2lmKGRtLm1vZC5pc1plcm8oKSlyZXR1cm4gZG0uZGl2O3ZhciBtb2Q9MCE9PWRtLmRpdi5uZWdhdGl2ZT9kbS5tb2QuaXN1YihudW0pOmRtLm1vZCxoYWxmPW51bS51c2hybigxKSxyMj1udW0uYW5kbG4oMSksY21wPW1vZC5jbXAoaGFsZik7cmV0dXJuIGNtcDwwfHwxPT09cjImJjA9PT1jbXA/ZG0uZGl2OjAhPT1kbS5kaXYubmVnYXRpdmU/ZG0uZGl2LmlzdWJuKDEpOmRtLmRpdi5pYWRkbigxKX0sQk4ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24gbW9kbihudW0pe2Fzc2VydChudW08PTY3MTA4ODYzKTtmb3IodmFyIHA9KDE8PDI2KSVudW0sYWNjPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKWFjYz0ocCphY2MrKDB8dGhpcy53b3Jkc1tpXSkpJW51bTtyZXR1cm4gYWNjfSxCTi5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24gaWRpdm4obnVtKXthc3NlcnQobnVtPD02NzEwODg2Myk7Zm9yKHZhciBjYXJyeT0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIHc9KDB8dGhpcy53b3Jkc1tpXSkrNjcxMDg4NjQqY2Fycnk7dGhpcy53b3Jkc1tpXT13L251bXwwLGNhcnJ5PXclbnVtfXJldHVybiB0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uIGRpdm4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKG51bSl9LEJOLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uIGVnY2QocCl7YXNzZXJ0KDA9PT1wLm5lZ2F0aXZlKSxhc3NlcnQoIXAuaXNaZXJvKCkpO3ZhciB4PXRoaXMseT1wLmNsb25lKCk7eD0wIT09eC5uZWdhdGl2ZT94LnVtb2QocCk6eC5jbG9uZSgpO2Zvcih2YXIgQT1uZXcgQk4oMSksQj1uZXcgQk4oMCksQz1uZXcgQk4oMCksRD1uZXcgQk4oMSksZz0wO3guaXNFdmVuKCkmJnkuaXNFdmVuKCk7KXguaXVzaHJuKDEpLHkuaXVzaHJuKDEpLCsrZztmb3IodmFyIHlwPXkuY2xvbmUoKSx4cD14LmNsb25lKCk7IXguaXNaZXJvKCk7KXtmb3IodmFyIGk9MCxpbT0xOzA9PT0oeC53b3Jkc1swXSZpbSkmJmk8MjY7KytpLGltPDw9MSk7aWYoaT4wKWZvcih4Lml1c2hybihpKTtpLS0gPjA7KShBLmlzT2RkKCl8fEIuaXNPZGQoKSkmJihBLmlhZGQoeXApLEIuaXN1Yih4cCkpLEEuaXVzaHJuKDEpLEIuaXVzaHJuKDEpO2Zvcih2YXIgaj0wLGptPTE7MD09PSh5LndvcmRzWzBdJmptKSYmajwyNjsrK2osam08PD0xKTtpZihqPjApZm9yKHkuaXVzaHJuKGopO2otLSA+MDspKEMuaXNPZGQoKXx8RC5pc09kZCgpKSYmKEMuaWFkZCh5cCksRC5pc3ViKHhwKSksQy5pdXNocm4oMSksRC5pdXNocm4oMSk7eC5jbXAoeSk+PTA/KHguaXN1Yih5KSxBLmlzdWIoQyksQi5pc3ViKEQpKTooeS5pc3ViKHgpLEMuaXN1YihBKSxELmlzdWIoQikpfXJldHVybnthOkMsYjpELGdjZDp5Lml1c2hsbihnKX19LEJOLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24gX2ludm1wKHApe2Fzc2VydCgwPT09cC5uZWdhdGl2ZSksYXNzZXJ0KCFwLmlzWmVybygpKTt2YXIgYT10aGlzLGI9cC5jbG9uZSgpO2E9MCE9PWEubmVnYXRpdmU/YS51bW9kKHApOmEuY2xvbmUoKTtmb3IodmFyIHJlcyx4MT1uZXcgQk4oMSkseDI9bmV3IEJOKDApLGRlbHRhPWIuY2xvbmUoKTthLmNtcG4oMSk+MCYmYi5jbXBuKDEpPjA7KXtmb3IodmFyIGk9MCxpbT0xOzA9PT0oYS53b3Jkc1swXSZpbSkmJmk8MjY7KytpLGltPDw9MSk7aWYoaT4wKWZvcihhLml1c2hybihpKTtpLS0gPjA7KXgxLmlzT2RkKCkmJngxLmlhZGQoZGVsdGEpLHgxLml1c2hybigxKTtmb3IodmFyIGo9MCxqbT0xOzA9PT0oYi53b3Jkc1swXSZqbSkmJmo8MjY7KytqLGptPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KXgyLmlzT2RkKCkmJngyLmlhZGQoZGVsdGEpLHgyLml1c2hybigxKTthLmNtcChiKT49MD8oYS5pc3ViKGIpLHgxLmlzdWIoeDIpKTooYi5pc3ViKGEpLHgyLmlzdWIoeDEpKX1yZXR1cm4ocmVzPTA9PT1hLmNtcG4oMSk/eDE6eDIpLmNtcG4oMCk8MCYmcmVzLmlhZGQocCkscmVzfSxCTi5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uIGdjZChudW0pe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIG51bS5hYnMoKTtpZihudW0uaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGE9dGhpcy5jbG9uZSgpLGI9bnVtLmNsb25lKCk7YS5uZWdhdGl2ZT0wLGIubmVnYXRpdmU9MDtmb3IodmFyIHNoaWZ0PTA7YS5pc0V2ZW4oKSYmYi5pc0V2ZW4oKTtzaGlmdCsrKWEuaXVzaHJuKDEpLGIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDthLmlzRXZlbigpOylhLml1c2hybigxKTtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO3ZhciByPWEuY21wKGIpO2lmKHI8MCl7dmFyIHQ9YTthPWIsYj10fWVsc2UgaWYoMD09PXJ8fDA9PT1iLmNtcG4oMSkpYnJlYWs7YS5pc3ViKGIpfXJldHVybiBiLml1c2hsbihzaGlmdCl9LEJOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uIGludm0obnVtKXtyZXR1cm4gdGhpcy5lZ2NkKG51bSkuYS51bW9kKG51bSl9LEJOLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24gaXNFdmVuKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSxCTi5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24gaXNPZGQoKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSxCTi5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24gYW5kbG4obnVtKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZudW19LEJOLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbiBiaW5jbihiaXQpe2Fzc2VydCgibnVtYmVyIj09dHlwZW9mIGJpdCk7dmFyIHI9Yml0JTI2LHM9KGJpdC1yKS8yNixxPTE8PHI7aWYodGhpcy5sZW5ndGg8PXMpcmV0dXJuIHRoaXMuX2V4cGFuZChzKzEpLHRoaXMud29yZHNbc118PXEsdGhpcztmb3IodmFyIGNhcnJ5PXEsaT1zOzAhPT1jYXJyeSYmaTx0aGlzLmxlbmd0aDtpKyspe3ZhciB3PTB8dGhpcy53b3Jkc1tpXTtjYXJyeT0odys9Y2FycnkpPj4+MjYsdyY9NjcxMDg4NjMsdGhpcy53b3Jkc1tpXT13fXJldHVybiAwIT09Y2FycnkmJih0aGlzLndvcmRzW2ldPWNhcnJ5LHRoaXMubGVuZ3RoKyspLHRoaXN9LEJOLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24gaXNaZXJvKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEJOLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uIGNtcG4obnVtKXt2YXIgcmVzLG5lZ2F0aXZlPW51bTwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhbmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJm5lZ2F0aXZlKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXJlcz0xO2Vsc2V7bmVnYXRpdmUmJihudW09LW51bSksYXNzZXJ0KG51bTw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHc9MHx0aGlzLndvcmRzWzBdO3Jlcz13PT09bnVtPzA6dzxudW0/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcmVzOnJlc30sQk4ucHJvdG90eXBlLmNtcD1mdW5jdGlvbiBjbXAobnVtKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PW51bS5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PW51bS5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgcmVzPXRoaXMudWNtcChudW0pO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1yZXM6cmVzfSxCTi5wcm90b3R5cGUudWNtcD1mdW5jdGlvbiB1Y21wKG51bSl7aWYodGhpcy5sZW5ndGg+bnVtLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxudW0ubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgcmVzPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgYT0wfHRoaXMud29yZHNbaV0sYj0wfG51bS53b3Jkc1tpXTtpZihhIT09Yil7YTxiP3Jlcz0tMTphPmImJihyZXM9MSk7YnJlYWt9fXJldHVybiByZXN9LEJOLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24gZ3RuKG51bSl7cmV0dXJuIDE9PT10aGlzLmNtcG4obnVtKX0sQk4ucHJvdG90eXBlLmd0PWZ1bmN0aW9uIGd0KG51bSl7cmV0dXJuIDE9PT10aGlzLmNtcChudW0pfSxCTi5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbiBndGVuKG51bSl7cmV0dXJuIHRoaXMuY21wbihudW0pPj0wfSxCTi5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uIGd0ZShudW0pe3JldHVybiB0aGlzLmNtcChudW0pPj0wfSxCTi5wcm90b3R5cGUubHRuPWZ1bmN0aW9uIGx0bihudW0pe3JldHVybi0xPT09dGhpcy5jbXBuKG51bSl9LEJOLnByb3RvdHlwZS5sdD1mdW5jdGlvbiBsdChudW0pe3JldHVybi0xPT09dGhpcy5jbXAobnVtKX0sQk4ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24gbHRlbihudW0pe3JldHVybiB0aGlzLmNtcG4obnVtKTw9MH0sQk4ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbiBsdGUobnVtKXtyZXR1cm4gdGhpcy5jbXAobnVtKTw9MH0sQk4ucHJvdG90eXBlLmVxbj1mdW5jdGlvbiBlcW4obnVtKXtyZXR1cm4gMD09PXRoaXMuY21wbihudW0pfSxCTi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24gZXEobnVtKXtyZXR1cm4gMD09PXRoaXMuY21wKG51bSl9LEJOLnJlZD1mdW5jdGlvbiByZWQobnVtKXtyZXR1cm4gbmV3IFJlZChudW0pfSxCTi5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24gdG9SZWQoY3R4KXtyZXR1cm4gYXNzZXJ0KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGFzc2VydCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxjdHguY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChjdHgpfSxCTi5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbiBmcm9tUmVkKCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxCTi5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uIF9mb3JjZVJlZChjdHgpe3JldHVybiB0aGlzLnJlZD1jdHgsdGhpc30sQk4ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uIGZvcmNlUmVkKGN0eCl7cmV0dXJuIGFzc2VydCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChjdHgpfSxCTi5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uIHJlZEFkZChudW0pe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbiByZWRJQWRkKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbiByZWRTdWIobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24gcmVkSVN1YihudW0pe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24gcmVkU2hsKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24gcmVkTXVsKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsbnVtKSx0aGlzLnJlZC5tdWwodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbiByZWRJTXVsKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsbnVtKSx0aGlzLnJlZC5pbXVsKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbiByZWRTcXIoKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxCTi5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbiByZWRJU3FyKCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxCTi5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbiByZWRTcXJ0KCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxCTi5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbiByZWRJbnZtKCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxCTi5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uIHJlZE5lZygpe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEJOLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24gcmVkUG93KG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCYmIW51bS5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsbnVtKX07dmFyIHByaW1lcz17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIE1QcmltZShuYW1lLHApe3RoaXMubmFtZT1uYW1lLHRoaXMucD1uZXcgQk4ocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEJOKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBLMjU2KCl7TVByaW1lLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gUDIyNCgpe01QcmltZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIFAxOTIoKXtNUHJpbWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBQMjU1MTkoKXtNUHJpbWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBSZWQobSl7aWYoInN0cmluZyI9PXR5cGVvZiBtKXt2YXIgcHJpbWU9Qk4uX3ByaW1lKG0pO3RoaXMubT1wcmltZS5wLHRoaXMucHJpbWU9cHJpbWV9ZWxzZSBhc3NlcnQobS5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1tLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBNb250KG0pe1JlZC5jYWxsKHRoaXMsbSksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgQk4oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9TVByaW1lLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uIF90bXAoKXt2YXIgdG1wPW5ldyBCTihudWxsKTtyZXR1cm4gdG1wLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdG1wfSxNUHJpbWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24gaXJlZHVjZShudW0pe3ZhciBybGVuLHI9bnVtO2Rve3RoaXMuc3BsaXQocix0aGlzLnRtcCkscmxlbj0ocj0ocj10aGlzLmltdWxLKHIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUocmxlbj50aGlzLm4pO3ZhciBjbXA9cmxlbjx0aGlzLm4/LTE6ci51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1jbXA/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpjbXA+MD9yLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1yLnN0cmlwP3Iuc3RyaXAoKTpyLl9zdHJpcCgpLHJ9LE1QcmltZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24gc3BsaXQoaW5wdXQsb3V0KXtpbnB1dC5pdXNocm4odGhpcy5uLDAsb3V0KX0sTVByaW1lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbiBpbXVsSyhudW0pe3JldHVybiBudW0uaW11bCh0aGlzLmspfSxpbmhlcml0cyhLMjU2LE1QcmltZSksSzI1Ni5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24gc3BsaXQoaW5wdXQsb3V0cHV0KXtmb3IodmFyIG91dExlbj1NYXRoLm1pbihpbnB1dC5sZW5ndGgsOSksaT0wO2k8b3V0TGVuO2krKylvdXRwdXQud29yZHNbaV09aW5wdXQud29yZHNbaV07aWYob3V0cHV0Lmxlbmd0aD1vdXRMZW4saW5wdXQubGVuZ3RoPD05KXJldHVybiBpbnB1dC53b3Jkc1swXT0wLHZvaWQoaW5wdXQubGVuZ3RoPTEpO3ZhciBwcmV2PWlucHV0LndvcmRzWzldO2ZvcihvdXRwdXQud29yZHNbb3V0cHV0Lmxlbmd0aCsrXT00MTk0MzAzJnByZXYsaT0xMDtpPGlucHV0Lmxlbmd0aDtpKyspe3ZhciBuZXh0PTB8aW5wdXQud29yZHNbaV07aW5wdXQud29yZHNbaS0xMF09KDQxOTQzMDMmbmV4dCk8PDR8cHJldj4+PjIyLHByZXY9bmV4dH1wcmV2Pj4+PTIyLGlucHV0LndvcmRzW2ktMTBdPXByZXYsMD09PXByZXYmJmlucHV0Lmxlbmd0aD4xMD9pbnB1dC5sZW5ndGgtPTEwOmlucHV0Lmxlbmd0aC09OX0sSzI1Ni5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24gaW11bEsobnVtKXtudW0ud29yZHNbbnVtLmxlbmd0aF09MCxudW0ud29yZHNbbnVtLmxlbmd0aCsxXT0wLG51bS5sZW5ndGgrPTI7Zm9yKHZhciBsbz0wLGk9MDtpPG51bS5sZW5ndGg7aSsrKXt2YXIgdz0wfG51bS53b3Jkc1tpXTtsbys9OTc3KncsbnVtLndvcmRzW2ldPTY3MTA4ODYzJmxvLGxvPTY0KncrKGxvLzY3MTA4ODY0fDApfXJldHVybiAwPT09bnVtLndvcmRzW251bS5sZW5ndGgtMV0mJihudW0ubGVuZ3RoLS0sMD09PW51bS53b3Jkc1tudW0ubGVuZ3RoLTFdJiZudW0ubGVuZ3RoLS0pLG51bX0saW5oZXJpdHMoUDIyNCxNUHJpbWUpLGluaGVyaXRzKFAxOTIsTVByaW1lKSxpbmhlcml0cyhQMjU1MTksTVByaW1lKSxQMjU1MTkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uIGltdWxLKG51bSl7Zm9yKHZhciBjYXJyeT0wLGk9MDtpPG51bS5sZW5ndGg7aSsrKXt2YXIgaGk9MTkqKDB8bnVtLndvcmRzW2ldKStjYXJyeSxsbz02NzEwODg2MyZoaTtoaT4+Pj0yNixudW0ud29yZHNbaV09bG8sY2Fycnk9aGl9cmV0dXJuIDAhPT1jYXJyeSYmKG51bS53b3Jkc1tudW0ubGVuZ3RoKytdPWNhcnJ5KSxudW19LEJOLl9wcmltZT1mdW5jdGlvbiBwcmltZShuYW1lKXtpZihwcmltZXNbbmFtZV0pcmV0dXJuIHByaW1lc1tuYW1lXTt2YXIgcHJpbWU7aWYoImsyNTYiPT09bmFtZSlwcmltZT1uZXcgSzI1NjtlbHNlIGlmKCJwMjI0Ij09PW5hbWUpcHJpbWU9bmV3IFAyMjQ7ZWxzZSBpZigicDE5MiI9PT1uYW1lKXByaW1lPW5ldyBQMTkyO2Vsc2V7aWYoInAyNTUxOSIhPT1uYW1lKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK25hbWUpO3ByaW1lPW5ldyBQMjU1MTl9cmV0dXJuIHByaW1lc1tuYW1lXT1wcmltZSxwcmltZX0sUmVkLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbiBfdmVyaWZ5MShhKXthc3NlcnQoMD09PWEubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYXNzZXJ0KGEucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFJlZC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24gX3ZlcmlmeTIoYSxiKXthc3NlcnQoMD09PShhLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGFzc2VydChhLnJlZCYmYS5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxSZWQucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24gaW1vZChhKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYSkuX2ZvcmNlUmVkKHRoaXMpOmEudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sUmVkLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24gbmVnKGEpe3JldHVybiBhLmlzWmVybygpP2EuY2xvbmUoKTp0aGlzLm0uc3ViKGEpLl9mb3JjZVJlZCh0aGlzKX0sUmVkLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24gYWRkKGEsYil7dGhpcy5fdmVyaWZ5MihhLGIpO3ZhciByZXM9YS5hZGQoYik7cmV0dXJuIHJlcy5jbXAodGhpcy5tKT49MCYmcmVzLmlzdWIodGhpcy5tKSxyZXMuX2ZvcmNlUmVkKHRoaXMpfSxSZWQucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24gaWFkZChhLGIpe3RoaXMuX3ZlcmlmeTIoYSxiKTt2YXIgcmVzPWEuaWFkZChiKTtyZXR1cm4gcmVzLmNtcCh0aGlzLm0pPj0wJiZyZXMuaXN1Yih0aGlzLm0pLHJlc30sUmVkLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24gc3ViKGEsYil7dGhpcy5fdmVyaWZ5MihhLGIpO3ZhciByZXM9YS5zdWIoYik7cmV0dXJuIHJlcy5jbXBuKDApPDAmJnJlcy5pYWRkKHRoaXMubSkscmVzLl9mb3JjZVJlZCh0aGlzKX0sUmVkLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uIGlzdWIoYSxiKXt0aGlzLl92ZXJpZnkyKGEsYik7dmFyIHJlcz1hLmlzdWIoYik7cmV0dXJuIHJlcy5jbXBuKDApPDAmJnJlcy5pYWRkKHRoaXMubSkscmVzfSxSZWQucHJvdG90eXBlLnNobD1mdW5jdGlvbiBzaGwoYSxudW0pe3JldHVybiB0aGlzLl92ZXJpZnkxKGEpLHRoaXMuaW1vZChhLnVzaGxuKG51bSkpfSxSZWQucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24gaW11bChhLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKGEsYiksdGhpcy5pbW9kKGEuaW11bChiKSl9LFJlZC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uIG11bChhLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKGEsYiksdGhpcy5pbW9kKGEubXVsKGIpKX0sUmVkLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uIGlzcXIoYSl7cmV0dXJuIHRoaXMuaW11bChhLGEuY2xvbmUoKSl9LFJlZC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uIHNxcihhKXtyZXR1cm4gdGhpcy5tdWwoYSxhKX0sUmVkLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uIHNxcnQoYSl7aWYoYS5pc1plcm8oKSlyZXR1cm4gYS5jbG9uZSgpO3ZhciBtb2QzPXRoaXMubS5hbmRsbigzKTtpZihhc3NlcnQobW9kMyUyPT0xKSwzPT09bW9kMyl7dmFyIHBvdz10aGlzLm0uYWRkKG5ldyBCTigxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhhLHBvdyl9Zm9yKHZhciBxPXRoaXMubS5zdWJuKDEpLHM9MDshcS5pc1plcm8oKSYmMD09PXEuYW5kbG4oMSk7KXMrKyxxLml1c2hybigxKTthc3NlcnQoIXEuaXNaZXJvKCkpO3ZhciBvbmU9bmV3IEJOKDEpLnRvUmVkKHRoaXMpLG5PbmU9b25lLnJlZE5lZygpLGxwb3c9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHo9dGhpcy5tLmJpdExlbmd0aCgpO2Zvcih6PW5ldyBCTigyKnoqeikudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHosbHBvdykuY21wKG5PbmUpOyl6LnJlZElBZGQobk9uZSk7Zm9yKHZhciBjPXRoaXMucG93KHoscSkscj10aGlzLnBvdyhhLHEuYWRkbigxKS5pdXNocm4oMSkpLHQ9dGhpcy5wb3coYSxxKSxtPXM7MCE9PXQuY21wKG9uZSk7KXtmb3IodmFyIHRtcD10LGk9MDswIT09dG1wLmNtcChvbmUpO2krKyl0bXA9dG1wLnJlZFNxcigpO2Fzc2VydChpPG0pO3ZhciBiPXRoaXMucG93KGMsbmV3IEJOKDEpLml1c2hsbihtLWktMSkpO3I9ci5yZWRNdWwoYiksYz1iLnJlZFNxcigpLHQ9dC5yZWRNdWwoYyksbT1pfXJldHVybiByfSxSZWQucHJvdG90eXBlLmludm09ZnVuY3Rpb24gaW52bShhKXt2YXIgaW52PWEuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1pbnYubmVnYXRpdmU/KGludi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChpbnYpLnJlZE5lZygpKTp0aGlzLmltb2QoaW52KX0sUmVkLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24gcG93KGEsbnVtKXtpZihudW0uaXNaZXJvKCkpcmV0dXJuIG5ldyBCTigxKS50b1JlZCh0aGlzKTtpZigwPT09bnVtLmNtcG4oMSkpcmV0dXJuIGEuY2xvbmUoKTt2YXIgd25kPW5ldyBBcnJheSgxNik7d25kWzBdPW5ldyBCTigxKS50b1JlZCh0aGlzKSx3bmRbMV09YTtmb3IodmFyIGk9MjtpPHduZC5sZW5ndGg7aSsrKXduZFtpXT10aGlzLm11bCh3bmRbaS0xXSxhKTt2YXIgcmVzPXduZFswXSxjdXJyZW50PTAsY3VycmVudExlbj0wLHN0YXJ0PW51bS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXN0YXJ0JiYoc3RhcnQ9MjYpLGk9bnVtLmxlbmd0aC0xO2k+PTA7aS0tKXtmb3IodmFyIHdvcmQ9bnVtLndvcmRzW2ldLGo9c3RhcnQtMTtqPj0wO2otLSl7dmFyIGJpdD13b3JkPj5qJjE7cmVzIT09d25kWzBdJiYocmVzPXRoaXMuc3FyKHJlcykpLDAhPT1iaXR8fDAhPT1jdXJyZW50PyhjdXJyZW50PDw9MSxjdXJyZW50fD1iaXQsKDQ9PT0rK2N1cnJlbnRMZW58fDA9PT1pJiYwPT09aikmJihyZXM9dGhpcy5tdWwocmVzLHduZFtjdXJyZW50XSksY3VycmVudExlbj0wLGN1cnJlbnQ9MCkpOmN1cnJlbnRMZW49MH1zdGFydD0yNn1yZXR1cm4gcmVzfSxSZWQucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbiBjb252ZXJ0VG8obnVtKXt2YXIgcj1udW0udW1vZCh0aGlzLm0pO3JldHVybiByPT09bnVtP3IuY2xvbmUoKTpyfSxSZWQucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uIGNvbnZlcnRGcm9tKG51bSl7dmFyIHJlcz1udW0uY2xvbmUoKTtyZXR1cm4gcmVzLnJlZD1udWxsLHJlc30sQk4ubW9udD1mdW5jdGlvbiBtb250KG51bSl7cmV0dXJuIG5ldyBNb250KG51bSl9LGluaGVyaXRzKE1vbnQsUmVkKSxNb250LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24gY29udmVydFRvKG51bSl7cmV0dXJuIHRoaXMuaW1vZChudW0udXNobG4odGhpcy5zaGlmdCkpfSxNb250LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbiBjb252ZXJ0RnJvbShudW0pe3ZhciByPXRoaXMuaW1vZChudW0ubXVsKHRoaXMucmludikpO3JldHVybiByLnJlZD1udWxsLHJ9LE1vbnQucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24gaW11bChhLGIpe2lmKGEuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIGEud29yZHNbMF09MCxhLmxlbmd0aD0xLGE7dmFyIHQ9YS5pbXVsKGIpLGM9dC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksdT10LmlzdWIoYykuaXVzaHJuKHRoaXMuc2hpZnQpLHJlcz11O3JldHVybiB1LmNtcCh0aGlzLm0pPj0wP3Jlcz11LmlzdWIodGhpcy5tKTp1LmNtcG4oMCk8MCYmKHJlcz11LmlhZGQodGhpcy5tKSkscmVzLl9mb3JjZVJlZCh0aGlzKX0sTW9udC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uIG11bChhLGIpe2lmKGEuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyBCTigwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHQ9YS5tdWwoYiksYz10Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSx1PXQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCkscmVzPXU7cmV0dXJuIHUuY21wKHRoaXMubSk+PTA/cmVzPXUuaXN1Yih0aGlzLm0pOnUuY21wbigwKTwwJiYocmVzPXUuaWFkZCh0aGlzLm0pKSxyZXMuX2ZvcmNlUmVkKHRoaXMpfSxNb250LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uIGludm0oYSl7cmV0dXJuIHRoaXMuaW1vZChhLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0obW9kdWxlPV9fd2VicGFja19yZXF1aXJlX18ubm1kKG1vZHVsZSksdGhpcyl9LCIuLi8uLi9ub2RlX21vZHVsZXMvZXMtZGVmaW5lLXByb3BlcnR5L2luZGV4LmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgJGRlZmluZVByb3BlcnR5PU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ITE7aWYoJGRlZmluZVByb3BlcnR5KXRyeXskZGVmaW5lUHJvcGVydHkoe30sImEiLHt2YWx1ZToxfSl9Y2F0Y2goZSl7JGRlZmluZVByb3BlcnR5PSExfW1vZHVsZS5leHBvcnRzPSRkZWZpbmVQcm9wZXJ0eX0sIi4uLy4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvZXZhbC5qcyIobW9kdWxlKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9RXZhbEVycm9yfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy9pbmRleC5qcyIobW9kdWxlKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9RXJyb3J9LCIuLi8uLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3JhbmdlLmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1SYW5nZUVycm9yfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy9yZWYuanMiKG1vZHVsZSl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPVJlZmVyZW5jZUVycm9yfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy9zeW50YXguanMiKG1vZHVsZSl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPVN5bnRheEVycm9yfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy90eXBlLmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1UeXBlRXJyb3J9LCIuLi8uLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3VyaS5qcyIobW9kdWxlKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9VVJJRXJyb3J9LCIuLi8uLi9ub2RlX21vZHVsZXMvZXMtb2JqZWN0LWF0b21zL2luZGV4LmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1PYmplY3R9LCIuLi8uLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIobW9kdWxlKXsidXNlIHN0cmljdCI7dmFyIFJlZmxlY3RPd25LZXlzLFI9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxSZWZsZWN0QXBwbHk9UiYmImZ1bmN0aW9uIj09dHlwZW9mIFIuYXBwbHk/Ui5hcHBseTpmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LHJlY2VpdmVyLGFyZ3Mpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQscmVjZWl2ZXIsYXJncyl9O1JlZmxlY3RPd25LZXlzPVImJiJmdW5jdGlvbiI9PXR5cGVvZiBSLm93bktleXM/Ui5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKX06ZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KX07dmFyIE51bWJlcklzTmFOPU51bWJlci5pc05hTnx8ZnVuY3Rpb24gTnVtYmVySXNOYU4odmFsdWUpe3JldHVybiB2YWx1ZSE9dmFsdWV9O2Z1bmN0aW9uIEV2ZW50RW1pdHRlcigpe0V2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyl9bW9kdWxlLmV4cG9ydHM9RXZlbnRFbWl0dGVyLG1vZHVsZS5leHBvcnRzLm9uY2U9ZnVuY3Rpb24gb25jZShlbWl0dGVyLG5hbWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLHJlamVjdCl7ZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpe2VtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSxyZXNvbHZlcikscmVqZWN0KGVycil9ZnVuY3Rpb24gcmVzb2x2ZXIoKXsiZnVuY3Rpb24iPT10eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciYmZW1pdHRlci5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGVycm9yTGlzdGVuZXIpLHJlc29sdmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX1ldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlcixuYW1lLHJlc29sdmVyLHtvbmNlOiEwfSksImVycm9yIiE9PW5hbWUmJmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsaGFuZGxlcixmbGFncyl7ImZ1bmN0aW9uIj09dHlwZW9mIGVtaXR0ZXIub24mJmV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCJlcnJvciIsaGFuZGxlcixmbGFncyl9KGVtaXR0ZXIsZXJyb3JMaXN0ZW5lcix7b25jZTohMH0pfSl9LEV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXI9RXZlbnRFbWl0dGVyLEV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxFdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBkZWZhdWx0TWF4TGlzdGVuZXJzPTEwO2Z1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbGlzdGVuZXIpfWZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCl7cmV0dXJuIHZvaWQgMD09PXRoYXQuX21heExpc3RlbmVycz9FdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVyczp0aGF0Ll9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCx0eXBlLGxpc3RlbmVyLHByZXBlbmQpe3ZhciBtLGV2ZW50cyxleGlzdGluZztpZihjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSx2b2lkIDA9PT0oZXZlbnRzPXRhcmdldC5fZXZlbnRzKT8oZXZlbnRzPXRhcmdldC5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGFyZ2V0Ll9ldmVudHNDb3VudD0wKToodm9pZCAwIT09ZXZlbnRzLm5ld0xpc3RlbmVyJiYodGFyZ2V0LmVtaXQoIm5ld0xpc3RlbmVyIix0eXBlLGxpc3RlbmVyLmxpc3RlbmVyP2xpc3RlbmVyLmxpc3RlbmVyOmxpc3RlbmVyKSxldmVudHM9dGFyZ2V0Ll9ldmVudHMpLGV4aXN0aW5nPWV2ZW50c1t0eXBlXSksdm9pZCAwPT09ZXhpc3RpbmcpZXhpc3Rpbmc9ZXZlbnRzW3R5cGVdPWxpc3RlbmVyLCsrdGFyZ2V0Ll9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBleGlzdGluZz9leGlzdGluZz1ldmVudHNbdHlwZV09cHJlcGVuZD9bbGlzdGVuZXIsZXhpc3RpbmddOltleGlzdGluZyxsaXN0ZW5lcl06cHJlcGVuZD9leGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTpleGlzdGluZy5wdXNoKGxpc3RlbmVyKSwobT1fZ2V0TWF4TGlzdGVuZXJzKHRhcmdldCkpPjAmJmV4aXN0aW5nLmxlbmd0aD5tJiYhZXhpc3Rpbmcud2FybmVkKXtleGlzdGluZy53YXJuZWQ9ITA7dmFyIHc9bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrZXhpc3RpbmcubGVuZ3RoKyIgIitTdHJpbmcodHlwZSkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7dy5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLHcuZW1pdHRlcj10YXJnZXQsdy50eXBlPXR5cGUsdy5jb3VudD1leGlzdGluZy5sZW5ndGgsZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpe2NvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKHdhcm5pbmcpfSh3KX1yZXR1cm4gdGFyZ2V0fWZ1bmN0aW9uIG9uY2VXcmFwcGVyKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LHR5cGUsbGlzdGVuZXIpe3ZhciBzdGF0ZT17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQsdHlwZSxsaXN0ZW5lcn0sd3JhcHBlZD1vbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtyZXR1cm4gd3JhcHBlZC5saXN0ZW5lcj1saXN0ZW5lcixzdGF0ZS53cmFwRm49d3JhcHBlZCx3cmFwcGVkfWZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LHR5cGUsdW53cmFwKXt2YXIgZXZlbnRzPXRhcmdldC5fZXZlbnRzO2lmKHZvaWQgMD09PWV2ZW50cylyZXR1cm5bXTt2YXIgZXZsaXN0ZW5lcj1ldmVudHNbdHlwZV07cmV0dXJuIHZvaWQgMD09PWV2bGlzdGVuZXI/W106ImZ1bmN0aW9uIj09dHlwZW9mIGV2bGlzdGVuZXI/dW53cmFwP1tldmxpc3RlbmVyLmxpc3RlbmVyfHxldmxpc3RlbmVyXTpbZXZsaXN0ZW5lcl06dW53cmFwP2Z1bmN0aW9uIHVud3JhcExpc3RlbmVycyhhcnIpe2Zvcih2YXIgcmV0PW5ldyBBcnJheShhcnIubGVuZ3RoKSxpPTA7aTxyZXQubGVuZ3RoOysraSlyZXRbaV09YXJyW2ldLmxpc3RlbmVyfHxhcnJbaV07cmV0dXJuIHJldH0oZXZsaXN0ZW5lcik6YXJyYXlDbG9uZShldmxpc3RlbmVyLGV2bGlzdGVuZXIubGVuZ3RoKX1mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpe3ZhciBldmVudHM9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PWV2ZW50cyl7dmFyIGV2bGlzdGVuZXI9ZXZlbnRzW3R5cGVdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBldmxpc3RlbmVyKXJldHVybiAxO2lmKHZvaWQgMCE9PWV2bGlzdGVuZXIpcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLG4pe2Zvcih2YXIgY29weT1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpY29weVtpXT1hcnJbaV07cmV0dXJuIGNvcHl9ZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsbmFtZSxsaXN0ZW5lcixmbGFncyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGVtaXR0ZXIub24pZmxhZ3Mub25jZT9lbWl0dGVyLm9uY2UobmFtZSxsaXN0ZW5lcik6ZW1pdHRlci5vbihuYW1lLGxpc3RlbmVyKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJlbWl0dGVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGVtaXR0ZXIpO2VtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpe2ZsYWdzLm9uY2UmJmVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLHdyYXBMaXN0ZW5lciksbGlzdGVuZXIoYXJnKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCJkZWZhdWx0TWF4TGlzdGVuZXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZGVmYXVsdE1heExpc3RlbmVyc30sc2V0OmZ1bmN0aW9uKGFyZyl7aWYoIm51bWJlciIhPXR5cGVvZiBhcmd8fGFyZzwwfHxOdW1iZXJJc05hTihhcmcpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0ZW5lcnMiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrYXJnKyIuIik7ZGVmYXVsdE1heExpc3RlbmVycz1hcmd9fSksRXZlbnRFbWl0dGVyLmluaXQ9ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9ldmVudHMmJnRoaXMuX2V2ZW50cyE9PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzfHwodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxFdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobil7aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPDB8fE51bWJlcklzTmFOKG4pKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrbisiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9bix0aGlzfSxFdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKXtyZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKX0sRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uIGVtaXQodHlwZSl7Zm9yKHZhciBhcmdzPVtdLGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKWFyZ3MucHVzaChhcmd1bWVudHNbaV0pO3ZhciBkb0Vycm9yPSJlcnJvciI9PT10eXBlLGV2ZW50cz10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09ZXZlbnRzKWRvRXJyb3I9ZG9FcnJvciYmdm9pZCAwPT09ZXZlbnRzLmVycm9yO2Vsc2UgaWYoIWRvRXJyb3IpcmV0dXJuITE7aWYoZG9FcnJvcil7dmFyIGVyO2lmKGFyZ3MubGVuZ3RoPjAmJihlcj1hcmdzWzBdKSxlciBpbnN0YW5jZW9mIEVycm9yKXRocm93IGVyO3ZhciBlcnI9bmV3IEVycm9yKCJVbmhhbmRsZWQgZXJyb3IuIisoZXI/IiAoIitlci5tZXNzYWdlKyIpIjoiIikpO3Rocm93IGVyci5jb250ZXh0PWVyLGVycn12YXIgaGFuZGxlcj1ldmVudHNbdHlwZV07aWYodm9pZCAwPT09aGFuZGxlcilyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgaGFuZGxlcilSZWZsZWN0QXBwbHkoaGFuZGxlcix0aGlzLGFyZ3MpO2Vsc2V7dmFyIGxlbj1oYW5kbGVyLmxlbmd0aCxsaXN0ZW5lcnM9YXJyYXlDbG9uZShoYW5kbGVyLGxlbik7Zm9yKGk9MDtpPGxlbjsrK2kpUmVmbGVjdEFwcGx5KGxpc3RlbmVyc1tpXSx0aGlzLGFyZ3MpfXJldHVybiEwfSxFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsbGlzdGVuZXIpe3JldHVybiBfYWRkTGlzdGVuZXIodGhpcyx0eXBlLGxpc3RlbmVyLCExKX0sRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbj1FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyLEV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcih0eXBlLGxpc3RlbmVyKXtyZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsdHlwZSxsaXN0ZW5lciwhMCl9LEV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZT1mdW5jdGlvbiBvbmNlKHR5cGUsbGlzdGVuZXIpe3JldHVybiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSx0aGlzLm9uKHR5cGUsX29uY2VXcmFwKHRoaXMsdHlwZSxsaXN0ZW5lcikpLHRoaXN9LEV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbiBwcmVwZW5kT25jZUxpc3RlbmVyKHR5cGUsbGlzdGVuZXIpe3JldHVybiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSx0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLF9vbmNlV3JhcCh0aGlzLHR5cGUsbGlzdGVuZXIpKSx0aGlzfSxFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsbGlzdGVuZXIpe3ZhciBsaXN0LGV2ZW50cyxwb3NpdGlvbixpLG9yaWdpbmFsTGlzdGVuZXI7aWYoY2hlY2tMaXN0ZW5lcihsaXN0ZW5lciksdm9pZCAwPT09KGV2ZW50cz10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PShsaXN0PWV2ZW50c1t0eXBlXSkpcmV0dXJuIHRoaXM7aWYobGlzdD09PWxpc3RlbmVyfHxsaXN0Lmxpc3RlbmVyPT09bGlzdGVuZXIpMD09PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBldmVudHNbdHlwZV0sZXZlbnRzLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIix0eXBlLGxpc3QubGlzdGVuZXJ8fGxpc3RlbmVyKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgbGlzdCl7Zm9yKHBvc2l0aW9uPS0xLGk9bGlzdC5sZW5ndGgtMTtpPj0wO2ktLSlpZihsaXN0W2ldPT09bGlzdGVuZXJ8fGxpc3RbaV0ubGlzdGVuZXI9PT1saXN0ZW5lcil7b3JpZ2luYWxMaXN0ZW5lcj1saXN0W2ldLmxpc3RlbmVyLHBvc2l0aW9uPWk7YnJlYWt9aWYocG9zaXRpb248MClyZXR1cm4gdGhpczswPT09cG9zaXRpb24/bGlzdC5zaGlmdCgpOmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LGluZGV4KXtmb3IoO2luZGV4KzE8bGlzdC5sZW5ndGg7aW5kZXgrKylsaXN0W2luZGV4XT1saXN0W2luZGV4KzFdO2xpc3QucG9wKCl9KGxpc3QscG9zaXRpb24pLDE9PT1saXN0Lmxlbmd0aCYmKGV2ZW50c1t0eXBlXT1saXN0WzBdKSx2b2lkIDAhPT1ldmVudHMucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLHR5cGUsb3JpZ2luYWxMaXN0ZW5lcnx8bGlzdGVuZXIpfXJldHVybiB0aGlzfSxFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZj1FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKXt2YXIgbGlzdGVuZXJzLGV2ZW50cyxpO2lmKHZvaWQgMD09PShldmVudHM9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1ldmVudHMucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1ldmVudHNbdHlwZV0mJigwPT09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgZXZlbnRzW3R5cGVdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIga2V5LGtleXM9T2JqZWN0LmtleXMoZXZlbnRzKTtmb3IoaT0wO2k8a2V5cy5sZW5ndGg7KytpKSJyZW1vdmVMaXN0ZW5lciIhPT0oa2V5PWtleXNbaV0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKGxpc3RlbmVycz1ldmVudHNbdHlwZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSxsaXN0ZW5lcnMpO2Vsc2UgaWYodm9pZCAwIT09bGlzdGVuZXJzKWZvcihpPWxpc3RlbmVycy5sZW5ndGgtMTtpPj0wO2ktLSl0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsbGlzdGVuZXJzW2ldKTtyZXR1cm4gdGhpc30sRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpe3JldHVybiBfbGlzdGVuZXJzKHRoaXMsdHlwZSwhMCl9LEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKXtyZXR1cm4gX2xpc3RlbmVycyh0aGlzLHR5cGUsITEpfSxFdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudD1mdW5jdGlvbihlbWl0dGVyLHR5cGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQ/ZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpOmxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLHR5cGUpfSxFdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9bGlzdGVuZXJDb3VudCxFdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24gZXZlbnROYW1lcygpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP1JlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cyk6W119fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2V2cF9ieXRlc3Rva2V5L2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLE1ENT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbWQ1LmpzL2luZGV4LmpzIik7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gRVZQX0J5dGVzVG9LZXkocGFzc3dvcmQsc2FsdCxrZXlCaXRzLGl2TGVuKXtpZihCdWZmZXIuaXNCdWZmZXIocGFzc3dvcmQpfHwocGFzc3dvcmQ9QnVmZmVyLmZyb20ocGFzc3dvcmQsImJpbmFyeSIpKSxzYWx0JiYoQnVmZmVyLmlzQnVmZmVyKHNhbHQpfHwoc2FsdD1CdWZmZXIuZnJvbShzYWx0LCJiaW5hcnkiKSksOCE9PXNhbHQubGVuZ3RoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic2FsdCBzaG91bGQgYmUgQnVmZmVyIHdpdGggOCBieXRlIGxlbmd0aCIpO2Zvcih2YXIga2V5TGVuPWtleUJpdHMvOCxrZXk9QnVmZmVyLmFsbG9jKGtleUxlbiksaXY9QnVmZmVyLmFsbG9jKGl2TGVufHwwKSx0bXA9QnVmZmVyLmFsbG9jKDApO2tleUxlbj4wfHxpdkxlbj4wOyl7dmFyIGhhc2g9bmV3IE1ENTtoYXNoLnVwZGF0ZSh0bXApLGhhc2gudXBkYXRlKHBhc3N3b3JkKSxzYWx0JiZoYXNoLnVwZGF0ZShzYWx0KSx0bXA9aGFzaC5kaWdlc3QoKTt2YXIgdXNlZD0wO2lmKGtleUxlbj4wKXt2YXIga2V5U3RhcnQ9a2V5Lmxlbmd0aC1rZXlMZW47dXNlZD1NYXRoLm1pbihrZXlMZW4sdG1wLmxlbmd0aCksdG1wLmNvcHkoa2V5LGtleVN0YXJ0LDAsdXNlZCksa2V5TGVuLT11c2VkfWlmKHVzZWQ8dG1wLmxlbmd0aCYmaXZMZW4+MCl7dmFyIGl2U3RhcnQ9aXYubGVuZ3RoLWl2TGVuLGxlbmd0aD1NYXRoLm1pbihpdkxlbix0bXAubGVuZ3RoLXVzZWQpO3RtcC5jb3B5KGl2LGl2U3RhcnQsdXNlZCx1c2VkK2xlbmd0aCksaXZMZW4tPWxlbmd0aH19cmV0dXJuIHRtcC5maWxsKDApLHtrZXksaXZ9fX0sIi4uLy4uL25vZGVfbW9kdWxlcy9mb3ItZWFjaC9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGlzQ2FsbGFibGU9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2lzLWNhbGxhYmxlL2luZGV4LmpzIiksdG9TdHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxoYXNPd25Qcm9wZXJ0eT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGZvckVhY2gobGlzdCxpdGVyYXRvcix0aGlzQXJnKXtpZighaXNDYWxsYWJsZShpdGVyYXRvcikpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dmFyIHJlY2VpdmVyO2FyZ3VtZW50cy5sZW5ndGg+PTMmJihyZWNlaXZlcj10aGlzQXJnKSxmdW5jdGlvbiBpc0FycmF5KHgpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT10b1N0ci5jYWxsKHgpfShsaXN0KT9mdW5jdGlvbiBmb3JFYWNoQXJyYXkoYXJyYXksaXRlcmF0b3IscmVjZWl2ZXIpe2Zvcih2YXIgaT0wLGxlbj1hcnJheS5sZW5ndGg7aTxsZW47aSsrKWhhc093blByb3BlcnR5LmNhbGwoYXJyYXksaSkmJihudWxsPT1yZWNlaXZlcj9pdGVyYXRvcihhcnJheVtpXSxpLGFycmF5KTppdGVyYXRvci5jYWxsKHJlY2VpdmVyLGFycmF5W2ldLGksYXJyYXkpKX0obGlzdCxpdGVyYXRvcixyZWNlaXZlcik6InN0cmluZyI9PXR5cGVvZiBsaXN0P2Z1bmN0aW9uIGZvckVhY2hTdHJpbmcoc3RyaW5nLGl0ZXJhdG9yLHJlY2VpdmVyKXtmb3IodmFyIGk9MCxsZW49c3RyaW5nLmxlbmd0aDtpPGxlbjtpKyspbnVsbD09cmVjZWl2ZXI/aXRlcmF0b3Ioc3RyaW5nLmNoYXJBdChpKSxpLHN0cmluZyk6aXRlcmF0b3IuY2FsbChyZWNlaXZlcixzdHJpbmcuY2hhckF0KGkpLGksc3RyaW5nKX0obGlzdCxpdGVyYXRvcixyZWNlaXZlcik6ZnVuY3Rpb24gZm9yRWFjaE9iamVjdChvYmplY3QsaXRlcmF0b3IscmVjZWl2ZXIpe2Zvcih2YXIgayBpbiBvYmplY3QpaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsaykmJihudWxsPT1yZWNlaXZlcj9pdGVyYXRvcihvYmplY3Rba10sayxvYmplY3QpOml0ZXJhdG9yLmNhbGwocmVjZWl2ZXIsb2JqZWN0W2tdLGssb2JqZWN0KSl9KGxpc3QsaXRlcmF0b3IscmVjZWl2ZXIpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kL2ltcGxlbWVudGF0aW9uLmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdG9TdHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxtYXg9TWF0aC5tYXgsY29uY2F0dHk9ZnVuY3Rpb24gY29uY2F0dHkoYSxiKXtmb3IodmFyIGFycj1bXSxpPTA7aTxhLmxlbmd0aDtpKz0xKWFycltpXT1hW2ldO2Zvcih2YXIgaj0wO2o8Yi5sZW5ndGg7ais9MSlhcnJbaithLmxlbmd0aF09YltqXTtyZXR1cm4gYXJyfTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBiaW5kKHRoYXQpe3ZhciB0YXJnZXQ9dGhpcztpZigiZnVuY3Rpb24iIT10eXBlb2YgdGFyZ2V0fHwiW29iamVjdCBGdW5jdGlvbl0iIT09dG9TdHIuYXBwbHkodGFyZ2V0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIrdGFyZ2V0KTtmb3IodmFyIGJvdW5kLGFyZ3M9ZnVuY3Rpb24gc2xpY3koYXJyTGlrZSxvZmZzZXQpe2Zvcih2YXIgYXJyPVtdLGk9b2Zmc2V0fHwwLGo9MDtpPGFyckxpa2UubGVuZ3RoO2krPTEsais9MSlhcnJbal09YXJyTGlrZVtpXTtyZXR1cm4gYXJyfShhcmd1bWVudHMsMSksYm91bmRMZW5ndGg9bWF4KDAsdGFyZ2V0Lmxlbmd0aC1hcmdzLmxlbmd0aCksYm91bmRBcmdzPVtdLGk9MDtpPGJvdW5kTGVuZ3RoO2krKylib3VuZEFyZ3NbaV09IiQiK2k7aWYoYm91bmQ9RnVuY3Rpb24oImJpbmRlciIsInJldHVybiBmdW5jdGlvbiAoIitmdW5jdGlvbihhcnIsam9pbmVyKXtmb3IodmFyIHN0cj0iIixpPTA7aTxhcnIubGVuZ3RoO2krPTEpc3RyKz1hcnJbaV0saSsxPGFyci5sZW5ndGgmJihzdHIrPWpvaW5lcik7cmV0dXJuIHN0cn0oYm91bmRBcmdzLCIsIikrIil7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9IikoZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgYm91bmQpe3ZhciByZXN1bHQ9dGFyZ2V0LmFwcGx5KHRoaXMsY29uY2F0dHkoYXJncyxhcmd1bWVudHMpKTtyZXR1cm4gT2JqZWN0KHJlc3VsdCk9PT1yZXN1bHQ/cmVzdWx0OnRoaXN9cmV0dXJuIHRhcmdldC5hcHBseSh0aGF0LGNvbmNhdHR5KGFyZ3MsYXJndW1lbnRzKSl9KSx0YXJnZXQucHJvdG90eXBlKXt2YXIgRW1wdHk9ZnVuY3Rpb24gRW1wdHkoKXt9O0VtcHR5LnByb3RvdHlwZT10YXJnZXQucHJvdG90eXBlLGJvdW5kLnByb3RvdHlwZT1uZXcgRW1wdHksRW1wdHkucHJvdG90eXBlPW51bGx9cmV0dXJuIGJvdW5kfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgaW1wbGVtZW50YXRpb249X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanMiKTttb2R1bGUuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8aW1wbGVtZW50YXRpb259LCIuLi8uLi9ub2RlX21vZHVsZXMvZ2VuZXJhdG9yLWZ1bmN0aW9uL2luZGV4LmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBjYWNoZWQ9ZnVuY3Rpb24qKCl7fS5jb25zdHJ1Y3Rvcjttb2R1bGUuZXhwb3J0cz0oKT0+Y2FjaGVkfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2dldC1pbnRyaW5zaWMvaW5kZXguanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciAkT2JqZWN0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lcy1vYmplY3QtYXRvbXMvaW5kZXguanMiKSwkRXJyb3I9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy9pbmRleC5qcyIpLCRFdmFsRXJyb3I9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy9ldmFsLmpzIiksJFJhbmdlRXJyb3I9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy9yYW5nZS5qcyIpLCRSZWZlcmVuY2VFcnJvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3JlZi5qcyIpLCRTeW50YXhFcnJvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3N5bnRheC5qcyIpLCRUeXBlRXJyb3I9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy90eXBlLmpzIiksJFVSSUVycm9yPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvdXJpLmpzIiksYWJzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9tYXRoLWludHJpbnNpY3MvYWJzLmpzIiksZmxvb3I9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL21hdGgtaW50cmluc2ljcy9mbG9vci5qcyIpLG1heD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL21heC5qcyIpLG1pbj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL21pbi5qcyIpLHBvdz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL3Bvdy5qcyIpLHJvdW5kPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9tYXRoLWludHJpbnNpY3Mvcm91bmQuanMiKSxzaWduPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9tYXRoLWludHJpbnNpY3Mvc2lnbi5qcyIpLCRGdW5jdGlvbj1GdW5jdGlvbixnZXRFdmFsbGVkQ29uc3RydWN0b3I9ZnVuY3Rpb24oZXhwcmVzc2lvblN5bnRheCl7dHJ5e3JldHVybiAkRnVuY3Rpb24oJyJ1c2Ugc3RyaWN0IjsgcmV0dXJuICgnK2V4cHJlc3Npb25TeW50YXgrIikuY29uc3RydWN0b3I7IikoKX1jYXRjaChlKXt9fSwkZ09QRD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZ29wZC9pbmRleC5qcyIpLCRkZWZpbmVQcm9wZXJ0eT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZXMtZGVmaW5lLXByb3BlcnR5L2luZGV4LmpzIiksdGhyb3dUeXBlRXJyb3I9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgJFR5cGVFcnJvcn0sVGhyb3dUeXBlRXJyb3I9JGdPUEQ/ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHRocm93VHlwZUVycm9yfWNhdGNoKGNhbGxlZVRocm93cyl7dHJ5e3JldHVybiAkZ09QRChhcmd1bWVudHMsImNhbGxlZSIpLmdldH1jYXRjaChnT1BEdGhyb3dzKXtyZXR1cm4gdGhyb3dUeXBlRXJyb3J9fX0oKTp0aHJvd1R5cGVFcnJvcixoYXNTeW1ib2xzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcyIpKCksZ2V0UHJvdG89X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2dldC1wcm90by9pbmRleC5qcyIpLCRPYmplY3RHUE89X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2dldC1wcm90by9PYmplY3QuZ2V0UHJvdG90eXBlT2YuanMiKSwkUmVmbGVjdEdQTz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZ2V0LXByb3RvL1JlZmxlY3QuZ2V0UHJvdG90eXBlT2YuanMiKSwkYXBwbHk9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC1hcHBseS1oZWxwZXJzL2Z1bmN0aW9uQXBwbHkuanMiKSwkY2FsbD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvZnVuY3Rpb25DYWxsLmpzIiksbmVlZHNFdmFsPXt9LFR5cGVkQXJyYXk9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5JiZnZXRQcm90bz9nZXRQcm90byhVaW50OEFycmF5KTp2b2lkIDAsSU5UUklOU0lDUz17X19wcm90b19fOm51bGwsIiVBZ2dyZWdhdGVFcnJvciUiOiJ1bmRlZmluZWQiPT10eXBlb2YgQWdncmVnYXRlRXJyb3I/dm9pZCAwOkFnZ3JlZ2F0ZUVycm9yLCIlQXJyYXklIjpBcnJheSwiJUFycmF5QnVmZmVyJSI6InVuZGVmaW5lZCI9PXR5cGVvZiBBcnJheUJ1ZmZlcj92b2lkIDA6QXJyYXlCdWZmZXIsIiVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSI6aGFzU3ltYm9scyYmZ2V0UHJvdG8/Z2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKTp2b2lkIDAsIiVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlIjp2b2lkIDAsIiVBc3luY0Z1bmN0aW9uJSI6bmVlZHNFdmFsLCIlQXN5bmNHZW5lcmF0b3IlIjpuZWVkc0V2YWwsIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI6bmVlZHNFdmFsLCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiOm5lZWRzRXZhbCwiJUF0b21pY3MlIjoidW5kZWZpbmVkIj09dHlwZW9mIEF0b21pY3M/dm9pZCAwOkF0b21pY3MsIiVCaWdJbnQlIjoidW5kZWZpbmVkIj09dHlwZW9mIEJpZ0ludD92b2lkIDA6QmlnSW50LCIlQmlnSW50NjRBcnJheSUiOiJ1bmRlZmluZWQiPT10eXBlb2YgQmlnSW50NjRBcnJheT92b2lkIDA6QmlnSW50NjRBcnJheSwiJUJpZ1VpbnQ2NEFycmF5JSI6InVuZGVmaW5lZCI9PXR5cGVvZiBCaWdVaW50NjRBcnJheT92b2lkIDA6QmlnVWludDY0QXJyYXksIiVCb29sZWFuJSI6Qm9vbGVhbiwiJURhdGFWaWV3JSI6InVuZGVmaW5lZCI9PXR5cGVvZiBEYXRhVmlldz92b2lkIDA6RGF0YVZpZXcsIiVEYXRlJSI6RGF0ZSwiJWRlY29kZVVSSSUiOmRlY29kZVVSSSwiJWRlY29kZVVSSUNvbXBvbmVudCUiOmRlY29kZVVSSUNvbXBvbmVudCwiJWVuY29kZVVSSSUiOmVuY29kZVVSSSwiJWVuY29kZVVSSUNvbXBvbmVudCUiOmVuY29kZVVSSUNvbXBvbmVudCwiJUVycm9yJSI6JEVycm9yLCIlZXZhbCUiOmV2YWwsIiVFdmFsRXJyb3IlIjokRXZhbEVycm9yLCIlRmxvYXQxNkFycmF5JSI6InVuZGVmaW5lZCI9PXR5cGVvZiBGbG9hdDE2QXJyYXk/dm9pZCAwOkZsb2F0MTZBcnJheSwiJUZsb2F0MzJBcnJheSUiOiJ1bmRlZmluZWQiPT10eXBlb2YgRmxvYXQzMkFycmF5P3ZvaWQgMDpGbG9hdDMyQXJyYXksIiVGbG9hdDY0QXJyYXklIjoidW5kZWZpbmVkIj09dHlwZW9mIEZsb2F0NjRBcnJheT92b2lkIDA6RmxvYXQ2NEFycmF5LCIlRmluYWxpemF0aW9uUmVnaXN0cnklIjoidW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3ZvaWQgMDpGaW5hbGl6YXRpb25SZWdpc3RyeSwiJUZ1bmN0aW9uJSI6JEZ1bmN0aW9uLCIlR2VuZXJhdG9yRnVuY3Rpb24lIjpuZWVkc0V2YWwsIiVJbnQ4QXJyYXklIjoidW5kZWZpbmVkIj09dHlwZW9mIEludDhBcnJheT92b2lkIDA6SW50OEFycmF5LCIlSW50MTZBcnJheSUiOiJ1bmRlZmluZWQiPT10eXBlb2YgSW50MTZBcnJheT92b2lkIDA6SW50MTZBcnJheSwiJUludDMyQXJyYXklIjoidW5kZWZpbmVkIj09dHlwZW9mIEludDMyQXJyYXk/dm9pZCAwOkludDMyQXJyYXksIiVpc0Zpbml0ZSUiOmlzRmluaXRlLCIlaXNOYU4lIjppc05hTiwiJUl0ZXJhdG9yUHJvdG90eXBlJSI6aGFzU3ltYm9scyYmZ2V0UHJvdG8/Z2V0UHJvdG8oZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSk6dm9pZCAwLCIlSlNPTiUiOiJvYmplY3QiPT10eXBlb2YgSlNPTj9KU09OOnZvaWQgMCwiJU1hcCUiOiJ1bmRlZmluZWQiPT10eXBlb2YgTWFwP3ZvaWQgMDpNYXAsIiVNYXBJdGVyYXRvclByb3RvdHlwZSUiOiJ1bmRlZmluZWQiIT10eXBlb2YgTWFwJiZoYXNTeW1ib2xzJiZnZXRQcm90bz9nZXRQcm90bygobmV3IE1hcClbU3ltYm9sLml0ZXJhdG9yXSgpKTp2b2lkIDAsIiVNYXRoJSI6TWF0aCwiJU51bWJlciUiOk51bWJlciwiJU9iamVjdCUiOiRPYmplY3QsIiVPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJSI6JGdPUEQsIiVwYXJzZUZsb2F0JSI6cGFyc2VGbG9hdCwiJXBhcnNlSW50JSI6cGFyc2VJbnQsIiVQcm9taXNlJSI6InVuZGVmaW5lZCI9PXR5cGVvZiBQcm9taXNlP3ZvaWQgMDpQcm9taXNlLCIlUHJveHklIjoidW5kZWZpbmVkIj09dHlwZW9mIFByb3h5P3ZvaWQgMDpQcm94eSwiJVJhbmdlRXJyb3IlIjokUmFuZ2VFcnJvciwiJVJlZmVyZW5jZUVycm9yJSI6JFJlZmVyZW5jZUVycm9yLCIlUmVmbGVjdCUiOiJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdD92b2lkIDA6UmVmbGVjdCwiJVJlZ0V4cCUiOlJlZ0V4cCwiJVNldCUiOiJ1bmRlZmluZWQiPT10eXBlb2YgU2V0P3ZvaWQgMDpTZXQsIiVTZXRJdGVyYXRvclByb3RvdHlwZSUiOiJ1bmRlZmluZWQiIT10eXBlb2YgU2V0JiZoYXNTeW1ib2xzJiZnZXRQcm90bz9nZXRQcm90bygobmV3IFNldClbU3ltYm9sLml0ZXJhdG9yXSgpKTp2b2lkIDAsIiVTaGFyZWRBcnJheUJ1ZmZlciUiOiJ1bmRlZmluZWQiPT10eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI/dm9pZCAwOlNoYXJlZEFycmF5QnVmZmVyLCIlU3RyaW5nJSI6U3RyaW5nLCIlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlIjpoYXNTeW1ib2xzJiZnZXRQcm90bz9nZXRQcm90bygiIltTeW1ib2wuaXRlcmF0b3JdKCkpOnZvaWQgMCwiJVN5bWJvbCUiOmhhc1N5bWJvbHM/U3ltYm9sOnZvaWQgMCwiJVN5bnRheEVycm9yJSI6JFN5bnRheEVycm9yLCIlVGhyb3dUeXBlRXJyb3IlIjpUaHJvd1R5cGVFcnJvciwiJVR5cGVkQXJyYXklIjpUeXBlZEFycmF5LCIlVHlwZUVycm9yJSI6JFR5cGVFcnJvciwiJVVpbnQ4QXJyYXklIjoidW5kZWZpbmVkIj09dHlwZW9mIFVpbnQ4QXJyYXk/dm9pZCAwOlVpbnQ4QXJyYXksIiVVaW50OENsYW1wZWRBcnJheSUiOiJ1bmRlZmluZWQiPT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXk/dm9pZCAwOlVpbnQ4Q2xhbXBlZEFycmF5LCIlVWludDE2QXJyYXklIjoidW5kZWZpbmVkIj09dHlwZW9mIFVpbnQxNkFycmF5P3ZvaWQgMDpVaW50MTZBcnJheSwiJVVpbnQzMkFycmF5JSI6InVuZGVmaW5lZCI9PXR5cGVvZiBVaW50MzJBcnJheT92b2lkIDA6VWludDMyQXJyYXksIiVVUklFcnJvciUiOiRVUklFcnJvciwiJVdlYWtNYXAlIjoidW5kZWZpbmVkIj09dHlwZW9mIFdlYWtNYXA/dm9pZCAwOldlYWtNYXAsIiVXZWFrUmVmJSI6InVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrUmVmP3ZvaWQgMDpXZWFrUmVmLCIlV2Vha1NldCUiOiJ1bmRlZmluZWQiPT10eXBlb2YgV2Vha1NldD92b2lkIDA6V2Vha1NldCwiJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJSI6JGNhbGwsIiVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklIjokYXBwbHksIiVPYmplY3QuZGVmaW5lUHJvcGVydHklIjokZGVmaW5lUHJvcGVydHksIiVPYmplY3QuZ2V0UHJvdG90eXBlT2YlIjokT2JqZWN0R1BPLCIlTWF0aC5hYnMlIjphYnMsIiVNYXRoLmZsb29yJSI6Zmxvb3IsIiVNYXRoLm1heCUiOm1heCwiJU1hdGgubWluJSI6bWluLCIlTWF0aC5wb3clIjpwb3csIiVNYXRoLnJvdW5kJSI6cm91bmQsIiVNYXRoLnNpZ24lIjpzaWduLCIlUmVmbGVjdC5nZXRQcm90b3R5cGVPZiUiOiRSZWZsZWN0R1BPfTtpZihnZXRQcm90byl0cnl7bnVsbC5lcnJvcn1jYXRjaChlKXt2YXIgZXJyb3JQcm90bz1nZXRQcm90byhnZXRQcm90byhlKSk7SU5UUklOU0lDU1siJUVycm9yLnByb3RvdHlwZSUiXT1lcnJvclByb3RvfXZhciBkb0V2YWw9ZnVuY3Rpb24gZG9FdmFsKG5hbWUpe3ZhciB2YWx1ZTtpZigiJUFzeW5jRnVuY3Rpb24lIj09PW5hbWUpdmFsdWU9Z2V0RXZhbGxlZENvbnN0cnVjdG9yKCJhc3luYyBmdW5jdGlvbiAoKSB7fSIpO2Vsc2UgaWYoIiVHZW5lcmF0b3JGdW5jdGlvbiUiPT09bmFtZSl2YWx1ZT1nZXRFdmFsbGVkQ29uc3RydWN0b3IoImZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI9PT1uYW1lKXZhbHVlPWdldEV2YWxsZWRDb25zdHJ1Y3RvcigiYXN5bmMgZnVuY3Rpb24qICgpIHt9Iik7ZWxzZSBpZigiJUFzeW5jR2VuZXJhdG9yJSI9PT1uYW1lKXt2YXIgZm49ZG9FdmFsKCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiKTtmbiYmKHZhbHVlPWZuLnByb3RvdHlwZSl9ZWxzZSBpZigiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIj09PW5hbWUpe3ZhciBnZW49ZG9FdmFsKCIlQXN5bmNHZW5lcmF0b3IlIik7Z2VuJiZnZXRQcm90byYmKHZhbHVlPWdldFByb3RvKGdlbi5wcm90b3R5cGUpKX1yZXR1cm4gSU5UUklOU0lDU1tuYW1lXT12YWx1ZSx2YWx1ZX0sTEVHQUNZX0FMSUFTRVM9e19fcHJvdG9fXzpudWxsLCIlQXJyYXlCdWZmZXJQcm90b3R5cGUlIjpbIkFycmF5QnVmZmVyIiwicHJvdG90eXBlIl0sIiVBcnJheVByb3RvdHlwZSUiOlsiQXJyYXkiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG9fZW50cmllcyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJlbnRyaWVzIl0sIiVBcnJheVByb3RvX2ZvckVhY2glIjpbIkFycmF5IiwicHJvdG90eXBlIiwiZm9yRWFjaCJdLCIlQXJyYXlQcm90b19rZXlzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImtleXMiXSwiJUFycmF5UHJvdG9fdmFsdWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsInZhbHVlcyJdLCIlQXN5bmNGdW5jdGlvblByb3RvdHlwZSUiOlsiQXN5bmNGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3IlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSI6WyJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIiwicHJvdG90eXBlIl0sIiVCb29sZWFuUHJvdG90eXBlJSI6WyJCb29sZWFuIiwicHJvdG90eXBlIl0sIiVEYXRhVmlld1Byb3RvdHlwZSUiOlsiRGF0YVZpZXciLCJwcm90b3R5cGUiXSwiJURhdGVQcm90b3R5cGUlIjpbIkRhdGUiLCJwcm90b3R5cGUiXSwiJUVycm9yUHJvdG90eXBlJSI6WyJFcnJvciIsInByb3RvdHlwZSJdLCIlRXZhbEVycm9yUHJvdG90eXBlJSI6WyJFdmFsRXJyb3IiLCJwcm90b3R5cGUiXSwiJUZsb2F0MzJBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVGbG9hdDY0QXJyYXlQcm90b3R5cGUlIjpbIkZsb2F0NjRBcnJheSIsInByb3RvdHlwZSJdLCIlRnVuY3Rpb25Qcm90b3R5cGUlIjpbIkZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5lcmF0b3IlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIiwicHJvdG90eXBlIl0sIiVJbnQ4QXJyYXlQcm90b3R5cGUlIjpbIkludDhBcnJheSIsInByb3RvdHlwZSJdLCIlSW50MTZBcnJheVByb3RvdHlwZSUiOlsiSW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlSW50MzJBcnJheVByb3RvdHlwZSUiOlsiSW50MzJBcnJheSIsInByb3RvdHlwZSJdLCIlSlNPTlBhcnNlJSI6WyJKU09OIiwicGFyc2UiXSwiJUpTT05TdHJpbmdpZnklIjpbIkpTT04iLCJzdHJpbmdpZnkiXSwiJU1hcFByb3RvdHlwZSUiOlsiTWFwIiwicHJvdG90eXBlIl0sIiVOdW1iZXJQcm90b3R5cGUlIjpbIk51bWJlciIsInByb3RvdHlwZSJdLCIlT2JqZWN0UHJvdG90eXBlJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiXSwiJU9ialByb3RvX3RvU3RyaW5nJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyJdLCIlT2JqUHJvdG9fdmFsdWVPZiUiOlsiT2JqZWN0IiwicHJvdG90eXBlIiwidmFsdWVPZiJdLCIlUHJvbWlzZVByb3RvdHlwZSUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSJdLCIlUHJvbWlzZVByb3RvX3RoZW4lIjpbIlByb21pc2UiLCJwcm90b3R5cGUiLCJ0aGVuIl0sIiVQcm9taXNlX2FsbCUiOlsiUHJvbWlzZSIsImFsbCJdLCIlUHJvbWlzZV9yZWplY3QlIjpbIlByb21pc2UiLCJyZWplY3QiXSwiJVByb21pc2VfcmVzb2x2ZSUiOlsiUHJvbWlzZSIsInJlc29sdmUiXSwiJVJhbmdlRXJyb3JQcm90b3R5cGUlIjpbIlJhbmdlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSI6WyJSZWZlcmVuY2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVnRXhwUHJvdG90eXBlJSI6WyJSZWdFeHAiLCJwcm90b3R5cGUiXSwiJVNldFByb3RvdHlwZSUiOlsiU2V0IiwicHJvdG90eXBlIl0sIiVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiU2hhcmVkQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJVN0cmluZ1Byb3RvdHlwZSUiOlsiU3RyaW5nIiwicHJvdG90eXBlIl0sIiVTeW1ib2xQcm90b3R5cGUlIjpbIlN5bWJvbCIsInByb3RvdHlwZSJdLCIlU3ludGF4RXJyb3JQcm90b3R5cGUlIjpbIlN5bnRheEVycm9yIiwicHJvdG90eXBlIl0sIiVUeXBlZEFycmF5UHJvdG90eXBlJSI6WyJUeXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVUeXBlRXJyb3JQcm90b3R5cGUlIjpbIlR5cGVFcnJvciIsInByb3RvdHlwZSJdLCIlVWludDhBcnJheVByb3RvdHlwZSUiOlsiVWludDhBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQ4Q2xhbXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50MTZBcnJheVByb3RvdHlwZSUiOlsiVWludDE2QXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQzMkFycmF5UHJvdG90eXBlJSI6WyJVaW50MzJBcnJheSIsInByb3RvdHlwZSJdLCIlVVJJRXJyb3JQcm90b3R5cGUlIjpbIlVSSUVycm9yIiwicHJvdG90eXBlIl0sIiVXZWFrTWFwUHJvdG90eXBlJSI6WyJXZWFrTWFwIiwicHJvdG90eXBlIl0sIiVXZWFrU2V0UHJvdG90eXBlJSI6WyJXZWFrU2V0IiwicHJvdG90eXBlIl19LGJpbmQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanMiKSxoYXNPd249X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2hhc293bi9pbmRleC5qcyIpLCRjb25jYXQ9YmluZC5jYWxsKCRjYWxsLEFycmF5LnByb3RvdHlwZS5jb25jYXQpLCRzcGxpY2VBcHBseT1iaW5kLmNhbGwoJGFwcGx5LEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLCRyZXBsYWNlPWJpbmQuY2FsbCgkY2FsbCxTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLCRzdHJTbGljZT1iaW5kLmNhbGwoJGNhbGwsU3RyaW5nLnByb3RvdHlwZS5zbGljZSksJGV4ZWM9YmluZC5jYWxsKCRjYWxsLFJlZ0V4cC5wcm90b3R5cGUuZXhlYykscmVQcm9wTmFtZT0vW14lLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JSQpKS9nLHJlRXNjYXBlQ2hhcj0vXFwoXFwpPy9nLGdldEJhc2VJbnRyaW5zaWM9ZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLGFsbG93TWlzc2luZyl7dmFyIGFsaWFzLGludHJpbnNpY05hbWU9bmFtZTtpZihoYXNPd24oTEVHQUNZX0FMSUFTRVMsaW50cmluc2ljTmFtZSkmJihpbnRyaW5zaWNOYW1lPSIlIisoYWxpYXM9TEVHQUNZX0FMSUFTRVNbaW50cmluc2ljTmFtZV0pWzBdKyIlIiksaGFzT3duKElOVFJJTlNJQ1MsaW50cmluc2ljTmFtZSkpe3ZhciB2YWx1ZT1JTlRSSU5TSUNTW2ludHJpbnNpY05hbWVdO2lmKHZhbHVlPT09bmVlZHNFdmFsJiYodmFsdWU9ZG9FdmFsKGludHJpbnNpY05hbWUpKSx2b2lkIDA9PT12YWx1ZSYmIWFsbG93TWlzc2luZyl0aHJvdyBuZXcgJFR5cGVFcnJvcigiaW50cmluc2ljICIrbmFtZSsiIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlISIpO3JldHVybnthbGlhcyxuYW1lOmludHJpbnNpY05hbWUsdmFsdWV9fXRocm93IG5ldyAkU3ludGF4RXJyb3IoImludHJpbnNpYyAiK25hbWUrIiBkb2VzIG5vdCBleGlzdCEiKX07bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsYWxsb3dNaXNzaW5nKXtpZigic3RyaW5nIiE9dHlwZW9mIG5hbWV8fDA9PT1uYW1lLmxlbmd0aCl0aHJvdyBuZXcgJFR5cGVFcnJvcigiaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtpZihhcmd1bWVudHMubGVuZ3RoPjEmJiJib29sZWFuIiE9dHlwZW9mIGFsbG93TWlzc2luZyl0aHJvdyBuZXcgJFR5cGVFcnJvcignImFsbG93TWlzc2luZyIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtpZihudWxsPT09JGV4ZWMoL14lP1teJV0qJT8kLyxuYW1lKSl0aHJvdyBuZXcgJFN5bnRheEVycm9yKCJgJWAgbWF5IG5vdCBiZSBwcmVzZW50IGFueXdoZXJlIGJ1dCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludHJpbnNpYyBuYW1lIik7dmFyIHBhcnRzPWZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpe3ZhciBmaXJzdD0kc3RyU2xpY2Uoc3RyaW5nLDAsMSksbGFzdD0kc3RyU2xpY2Uoc3RyaW5nLC0xKTtpZigiJSI9PT1maXJzdCYmIiUiIT09bGFzdCl0aHJvdyBuZXcgJFN5bnRheEVycm9yKCJpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgIik7aWYoIiUiPT09bGFzdCYmIiUiIT09Zmlyc3QpdGhyb3cgbmV3ICRTeW50YXhFcnJvcigiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBvcGVuaW5nIGAlYCIpO3ZhciByZXN1bHQ9W107cmV0dXJuICRyZXBsYWNlKHN0cmluZyxyZVByb3BOYW1lLGZ1bmN0aW9uKG1hdGNoLG51bWJlcixxdW90ZSxzdWJTdHJpbmcpe3Jlc3VsdFtyZXN1bHQubGVuZ3RoXT1xdW90ZT8kcmVwbGFjZShzdWJTdHJpbmcscmVFc2NhcGVDaGFyLCIkMSIpOm51bWJlcnx8bWF0Y2h9KSxyZXN1bHR9KG5hbWUpLGludHJpbnNpY0Jhc2VOYW1lPXBhcnRzLmxlbmd0aD4wP3BhcnRzWzBdOiIiLGludHJpbnNpYz1nZXRCYXNlSW50cmluc2ljKCIlIitpbnRyaW5zaWNCYXNlTmFtZSsiJSIsYWxsb3dNaXNzaW5nKSxpbnRyaW5zaWNSZWFsTmFtZT1pbnRyaW5zaWMubmFtZSx2YWx1ZT1pbnRyaW5zaWMudmFsdWUsc2tpcEZ1cnRoZXJDYWNoaW5nPSExLGFsaWFzPWludHJpbnNpYy5hbGlhczthbGlhcyYmKGludHJpbnNpY0Jhc2VOYW1lPWFsaWFzWzBdLCRzcGxpY2VBcHBseShwYXJ0cywkY29uY2F0KFswLDFdLGFsaWFzKSkpO2Zvcih2YXIgaT0xLGlzT3duPSEwO2k8cGFydHMubGVuZ3RoO2krPTEpe3ZhciBwYXJ0PXBhcnRzW2ldLGZpcnN0PSRzdHJTbGljZShwYXJ0LDAsMSksbGFzdD0kc3RyU2xpY2UocGFydCwtMSk7aWYoKCciJz09PWZpcnN0fHwiJyI9PT1maXJzdHx8ImAiPT09Zmlyc3R8fCciJz09PWxhc3R8fCInIj09PWxhc3R8fCJgIj09PWxhc3QpJiZmaXJzdCE9PWxhc3QpdGhyb3cgbmV3ICRTeW50YXhFcnJvcigicHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcyIpO2lmKCJjb25zdHJ1Y3RvciIhPT1wYXJ0JiZpc093bnx8KHNraXBGdXJ0aGVyQ2FjaGluZz0hMCksaGFzT3duKElOVFJJTlNJQ1MsaW50cmluc2ljUmVhbE5hbWU9IiUiKyhpbnRyaW5zaWNCYXNlTmFtZSs9Ii4iK3BhcnQpKyIlIikpdmFsdWU9SU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07ZWxzZSBpZihudWxsIT12YWx1ZSl7aWYoIShwYXJ0IGluIHZhbHVlKSl7aWYoIWFsbG93TWlzc2luZyl0aHJvdyBuZXcgJFR5cGVFcnJvcigiYmFzZSBpbnRyaW5zaWMgZm9yICIrbmFtZSsiIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLiIpO3JldHVybn1pZigkZ09QRCYmaSsxPj1wYXJ0cy5sZW5ndGgpe3ZhciBkZXNjPSRnT1BEKHZhbHVlLHBhcnQpO3ZhbHVlPShpc093bj0hIWRlc2MpJiYiZ2V0ImluIGRlc2MmJiEoIm9yaWdpbmFsVmFsdWUiaW4gZGVzYy5nZXQpP2Rlc2MuZ2V0OnZhbHVlW3BhcnRdfWVsc2UgaXNPd249aGFzT3duKHZhbHVlLHBhcnQpLHZhbHVlPXZhbHVlW3BhcnRdO2lzT3duJiYhc2tpcEZ1cnRoZXJDYWNoaW5nJiYoSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV09dmFsdWUpfX1yZXR1cm4gdmFsdWV9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2dldC1wcm90by9PYmplY3QuZ2V0UHJvdG90eXBlT2YuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciAkT2JqZWN0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lcy1vYmplY3QtYXRvbXMvaW5kZXguanMiKTttb2R1bGUuZXhwb3J0cz0kT2JqZWN0LmdldFByb3RvdHlwZU9mfHxudWxsfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2dldC1wcm90by9SZWZsZWN0LmdldFByb3RvdHlwZU9mLmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0UHJvdG90eXBlT2Z8fG51bGx9LCIuLi8uLi9ub2RlX21vZHVsZXMvZ2V0LXByb3RvL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgcmVmbGVjdEdldFByb3RvPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9nZXQtcHJvdG8vUmVmbGVjdC5nZXRQcm90b3R5cGVPZi5qcyIpLG9yaWdpbmFsR2V0UHJvdG89X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2dldC1wcm90by9PYmplY3QuZ2V0UHJvdG90eXBlT2YuanMiKSxnZXREdW5kZXJQcm90bz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZHVuZGVyLXByb3RvL2dldC5qcyIpO21vZHVsZS5leHBvcnRzPXJlZmxlY3RHZXRQcm90bz9mdW5jdGlvbiBnZXRQcm90byhPKXtyZXR1cm4gcmVmbGVjdEdldFByb3RvKE8pfTpvcmlnaW5hbEdldFByb3RvP2Z1bmN0aW9uIGdldFByb3RvKE8pe2lmKCFPfHwib2JqZWN0IiE9dHlwZW9mIE8mJiJmdW5jdGlvbiIhPXR5cGVvZiBPKXRocm93IG5ldyBUeXBlRXJyb3IoImdldFByb3RvOiBub3QgYW4gb2JqZWN0Iik7cmV0dXJuIG9yaWdpbmFsR2V0UHJvdG8oTyl9OmdldER1bmRlclByb3RvP2Z1bmN0aW9uIGdldFByb3RvKE8pe3JldHVybiBnZXREdW5kZXJQcm90byhPKX06bnVsbH0sIi4uLy4uL25vZGVfbW9kdWxlcy9nb3BkL2dPUEQuanMiKG1vZHVsZSl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9LCIuLi8uLi9ub2RlX21vZHVsZXMvZ29wZC9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyICRnT1BEPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9nb3BkL2dPUEQuanMiKTtpZigkZ09QRCl0cnl7JGdPUEQoW10sImxlbmd0aCIpfWNhdGNoKGUpeyRnT1BEPW51bGx9bW9kdWxlLmV4cG9ydHM9JGdPUER9LCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzLXByb3BlcnR5LWRlc2NyaXB0b3JzL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgJGRlZmluZVByb3BlcnR5PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lcy1kZWZpbmUtcHJvcGVydHkvaW5kZXguanMiKSxoYXNQcm9wZXJ0eURlc2NyaXB0b3JzPWZ1bmN0aW9uIGhhc1Byb3BlcnR5RGVzY3JpcHRvcnMoKXtyZXR1cm4hISRkZWZpbmVQcm9wZXJ0eX07aGFzUHJvcGVydHlEZXNjcmlwdG9ycy5oYXNBcnJheUxlbmd0aERlZmluZUJ1Zz1mdW5jdGlvbiBoYXNBcnJheUxlbmd0aERlZmluZUJ1Zygpe2lmKCEkZGVmaW5lUHJvcGVydHkpcmV0dXJuIG51bGw7dHJ5e3JldHVybiAxIT09JGRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt2YWx1ZToxfSkubGVuZ3RofWNhdGNoKGUpe3JldHVybiEwfX0sbW9kdWxlLmV4cG9ydHM9aGFzUHJvcGVydHlEZXNjcmlwdG9yc30sIi4uLy4uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIG9yaWdTeW1ib2w9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbCxoYXNTeW1ib2xTaGFtPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9zaGFtcy5qcyIpO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGhhc05hdGl2ZVN5bWJvbHMoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygb3JpZ1N5bWJvbCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJigic3ltYm9sIj09dHlwZW9mIG9yaWdTeW1ib2woImZvbyIpJiYoInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woImJhciIpJiZoYXNTeW1ib2xTaGFtKCkpKSl9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2hhcy1zeW1ib2xzL3NoYW1zLmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBoYXNTeW1ib2xzKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN5bWJvbHx8ImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpcmV0dXJuITE7aWYoInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IpcmV0dXJuITA7dmFyIG9iaj17fSxzeW09U3ltYm9sKCJ0ZXN0Iiksc3ltT2JqPU9iamVjdChzeW0pO2lmKCJzdHJpbmciPT10eXBlb2Ygc3ltKXJldHVybiExO2lmKCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpcmV0dXJuITE7aWYoIltvYmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSlyZXR1cm4hMTtmb3IodmFyIF8gaW4gb2JqW3N5bV09NDIsb2JqKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3Qua2V5cyYmMCE9PU9iamVjdC5rZXlzKG9iaikubGVuZ3RoKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmMCE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoKXJldHVybiExO3ZhciBzeW1zPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtpZigxIT09c3ltcy5sZW5ndGh8fHN5bXNbMF0hPT1zeW0pcmV0dXJuITE7aWYoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosc3ltKSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIGRlc2NyaXB0b3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosc3ltKTtpZig0MiE9PWRlc2NyaXB0b3IudmFsdWV8fCEwIT09ZGVzY3JpcHRvci5lbnVtZXJhYmxlKXJldHVybiExfXJldHVybiEwfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBoYXNTeW1ib2xzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9zaGFtcy5qcyIpO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGhhc1RvU3RyaW5nVGFnU2hhbXMoKXtyZXR1cm4gaGFzU3ltYm9scygpJiYhIVN5bWJvbC50b1N0cmluZ1RhZ319LCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzaC1iYXNlL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcixUcmFuc2Zvcm09X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L2luZGV4LmpzIikuVHJhbnNmb3JtO2Z1bmN0aW9uIEhhc2hCYXNlKGJsb2NrU2l6ZSl7VHJhbnNmb3JtLmNhbGwodGhpcyksdGhpcy5fYmxvY2s9QnVmZmVyLmFsbG9jVW5zYWZlKGJsb2NrU2l6ZSksdGhpcy5fYmxvY2tTaXplPWJsb2NrU2l6ZSx0aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIikoSGFzaEJhc2UsVHJhbnNmb3JtKSxIYXNoQmFzZS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihjaHVuayxlbmNvZGluZyxjYWxsYmFjayl7dmFyIGVycm9yPW51bGw7dHJ5e3RoaXMudXBkYXRlKGNodW5rLGVuY29kaW5nKX1jYXRjaChlcnIpe2Vycm9yPWVycn1jYWxsYmFjayhlcnJvcil9LEhhc2hCYXNlLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oY2FsbGJhY2spe3ZhciBlcnJvcj1udWxsO3RyeXt0aGlzLnB1c2godGhpcy5kaWdlc3QoKSl9Y2F0Y2goZXJyKXtlcnJvcj1lcnJ9Y2FsbGJhY2soZXJyb3IpfTt2YXIgdXNlVWludDhBcnJheT0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXksdXNlQXJyYXlCdWZmZXI9InVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmInVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5JiZBcnJheUJ1ZmZlci5pc1ZpZXcmJihCdWZmZXIucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8QnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpO0hhc2hCYXNlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZGF0YSxlbmNvZGluZyl7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7ZGF0YT1mdW5jdGlvbiB0b0J1ZmZlcihkYXRhLGVuY29kaW5nKXtpZihkYXRhIGluc3RhbmNlb2YgQnVmZmVyKXJldHVybiBkYXRhO2lmKCJzdHJpbmciPT10eXBlb2YgZGF0YSlyZXR1cm4gQnVmZmVyLmZyb20oZGF0YSxlbmNvZGluZyk7aWYodXNlQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSl7aWYoMD09PWRhdGEuYnl0ZUxlbmd0aClyZXR1cm4gQnVmZmVyLmFsbG9jKDApO3ZhciByZXM9QnVmZmVyLmZyb20oZGF0YS5idWZmZXIsZGF0YS5ieXRlT2Zmc2V0LGRhdGEuYnl0ZUxlbmd0aCk7aWYocmVzLmJ5dGVMZW5ndGg9PT1kYXRhLmJ5dGVMZW5ndGgpcmV0dXJuIHJlc31pZih1c2VVaW50OEFycmF5JiZkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gQnVmZmVyLmZyb20oZGF0YSk7aWYoQnVmZmVyLmlzQnVmZmVyKGRhdGEpJiZkYXRhLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZGF0YS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZGF0YS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihkYXRhKSlyZXR1cm4gQnVmZmVyLmZyb20oZGF0YSk7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJkYXRhIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIEJ1ZmZlciwgVHlwZWRBcnJheSwgb3IgRGF0YVZpZXcuJyl9KGRhdGEsZW5jb2RpbmcpO2Zvcih2YXIgYmxvY2s9dGhpcy5fYmxvY2ssb2Zmc2V0PTA7dGhpcy5fYmxvY2tPZmZzZXQrZGF0YS5sZW5ndGgtb2Zmc2V0Pj10aGlzLl9ibG9ja1NpemU7KXtmb3IodmFyIGk9dGhpcy5fYmxvY2tPZmZzZXQ7aTx0aGlzLl9ibG9ja1NpemU7KWJsb2NrW2krK109ZGF0YVtvZmZzZXQrK107dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO29mZnNldDxkYXRhLmxlbmd0aDspYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109ZGF0YVtvZmZzZXQrK107Zm9yKHZhciBqPTAsY2Fycnk9OCpkYXRhLmxlbmd0aDtjYXJyeT4wOysrail0aGlzLl9sZW5ndGhbal0rPWNhcnJ5LChjYXJyeT10aGlzLl9sZW5ndGhbal0vNDI5NDk2NzI5NnwwKT4wJiYodGhpcy5fbGVuZ3RoW2pdLT00Mjk0OTY3Mjk2KmNhcnJ5KTtyZXR1cm4gdGhpc30sSGFzaEJhc2UucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgaXMgbm90IGltcGxlbWVudGVkIil9LEhhc2hCYXNlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oZW5jb2Rpbmcpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgZGlnZXN0PXRoaXMuX2RpZ2VzdCgpO3ZvaWQgMCE9PWVuY29kaW5nJiYoZGlnZXN0PWRpZ2VzdC50b1N0cmluZyhlbmNvZGluZykpLHRoaXMuX2Jsb2NrLmZpbGwoMCksdGhpcy5fYmxvY2tPZmZzZXQ9MDtmb3IodmFyIGk9MDtpPDQ7KytpKXRoaXMuX2xlbmd0aFtpXT0wO3JldHVybiBkaWdlc3R9LEhhc2hCYXNlLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfZGlnZXN0IGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxtb2R1bGUuZXhwb3J0cz1IYXNoQmFzZX0sIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoLmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBoYXNoPWV4cG9ydHM7aGFzaC51dGlscz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcyIpLGhhc2guY29tbW9uPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL2NvbW1vbi5qcyIpLGhhc2guc2hhPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcyIpLGhhc2gucmlwZW1kPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3JpcGVtZC5qcyIpLGhhc2guaG1hYz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9obWFjLmpzIiksaGFzaC5zaGExPWhhc2guc2hhLnNoYTEsaGFzaC5zaGEyNTY9aGFzaC5zaGEuc2hhMjU2LGhhc2guc2hhMjI0PWhhc2guc2hhLnNoYTIyNCxoYXNoLnNoYTM4ND1oYXNoLnNoYS5zaGEzODQsaGFzaC5zaGE1MTI9aGFzaC5zaGEuc2hhNTEyLGhhc2gucmlwZW1kMTYwPWhhc2gucmlwZW1kLnJpcGVtZDE2MH0sIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL2NvbW1vbi5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHV0aWxzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3V0aWxzLmpzIiksYXNzZXJ0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9taW5pbWFsaXN0aWMtYXNzZXJ0L2luZGV4LmpzIik7ZnVuY3Rpb24gQmxvY2tIYXNoKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1leHBvcnRzLkJsb2NrSGFzaD1CbG9ja0hhc2gsQmxvY2tIYXNoLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24gdXBkYXRlKG1zZyxlbmMpe2lmKG1zZz11dGlscy50b0FycmF5KG1zZyxlbmMpLHRoaXMucGVuZGluZz90aGlzLnBlbmRpbmc9dGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpOnRoaXMucGVuZGluZz1tc2csdGhpcy5wZW5kaW5nVG90YWwrPW1zZy5sZW5ndGgsdGhpcy5wZW5kaW5nLmxlbmd0aD49dGhpcy5fZGVsdGE4KXt2YXIgcj0obXNnPXRoaXMucGVuZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9bXNnLnNsaWNlKG1zZy5sZW5ndGgtcixtc2cubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVuZGluZz1udWxsKSxtc2c9dXRpbHMuam9pbjMyKG1zZywwLG1zZy5sZW5ndGgtcix0aGlzLmVuZGlhbik7Zm9yKHZhciBpPTA7aTxtc2cubGVuZ3RoO2krPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKG1zZyxpLGkrdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LEJsb2NrSGFzaC5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uIGRpZ2VzdChlbmMpe3JldHVybiB0aGlzLnVwZGF0ZSh0aGlzLl9wYWQoKSksYXNzZXJ0KG51bGw9PT10aGlzLnBlbmRpbmcpLHRoaXMuX2RpZ2VzdChlbmMpfSxCbG9ja0hhc2gucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24gcGFkKCl7dmFyIGxlbj10aGlzLnBlbmRpbmdUb3RhbCxieXRlcz10aGlzLl9kZWx0YTgsaz1ieXRlcy0obGVuK3RoaXMucGFkTGVuZ3RoKSVieXRlcyxyZXM9bmV3IEFycmF5KGsrdGhpcy5wYWRMZW5ndGgpO3Jlc1swXT0xMjg7Zm9yKHZhciBpPTE7aTxrO2krKylyZXNbaV09MDtpZihsZW48PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgdD04O3Q8dGhpcy5wYWRMZW5ndGg7dCsrKXJlc1tpKytdPTA7cmVzW2krK109MCxyZXNbaSsrXT0wLHJlc1tpKytdPTAscmVzW2krK109MCxyZXNbaSsrXT1sZW4+Pj4yNCYyNTUscmVzW2krK109bGVuPj4+MTYmMjU1LHJlc1tpKytdPWxlbj4+PjgmMjU1LHJlc1tpKytdPTI1NSZsZW59ZWxzZSBmb3IocmVzW2krK109MjU1JmxlbixyZXNbaSsrXT1sZW4+Pj44JjI1NSxyZXNbaSsrXT1sZW4+Pj4xNiYyNTUscmVzW2krK109bGVuPj4+MjQmMjU1LHJlc1tpKytdPTAscmVzW2krK109MCxyZXNbaSsrXT0wLHJlc1tpKytdPTAsdD04O3Q8dGhpcy5wYWRMZW5ndGg7dCsrKXJlc1tpKytdPTA7cmV0dXJuIHJlc319LCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9obWFjLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgdXRpbHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvdXRpbHMuanMiKSxhc3NlcnQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYWxpc3RpYy1hc3NlcnQvaW5kZXguanMiKTtmdW5jdGlvbiBIbWFjKGhhc2gsa2V5LGVuYyl7aWYoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpcmV0dXJuIG5ldyBIbWFjKGhhc2gsa2V5LGVuYyk7dGhpcy5IYXNoPWhhc2gsdGhpcy5ibG9ja1NpemU9aGFzaC5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9aGFzaC5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LGVuYykpfW1vZHVsZS5leHBvcnRzPUhtYWMsSG1hYy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24gaW5pdChrZXkpe2tleS5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJihrZXk9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpKSxhc3NlcnQoa2V5Lmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgaT1rZXkubGVuZ3RoO2k8dGhpcy5ibG9ja1NpemU7aSsrKWtleS5wdXNoKDApO2ZvcihpPTA7aTxrZXkubGVuZ3RoO2krKylrZXlbaV1ePTU0O2Zvcih0aGlzLmlubmVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUoa2V5KSxpPTA7aTxrZXkubGVuZ3RoO2krKylrZXlbaV1ePTEwNjt0aGlzLm91dGVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUoa2V5KX0sSG1hYy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uIHVwZGF0ZShtc2csZW5jKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUobXNnLGVuYyksdGhpc30sSG1hYy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uIGRpZ2VzdChlbmMpe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdChlbmMpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3JpcGVtZC5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHV0aWxzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3V0aWxzLmpzIiksY29tbW9uPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL2NvbW1vbi5qcyIpLHJvdGwzMj11dGlscy5yb3RsMzIsc3VtMzI9dXRpbHMuc3VtMzIsc3VtMzJfMz11dGlscy5zdW0zMl8zLHN1bTMyXzQ9dXRpbHMuc3VtMzJfNCxCbG9ja0hhc2g9Y29tbW9uLkJsb2NrSGFzaDtmdW5jdGlvbiBSSVBFTUQxNjAoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBSSVBFTUQxNjApKXJldHVybiBuZXcgUklQRU1EMTYwO0Jsb2NrSGFzaC5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0aW9uIGYoaix4LHkseil7cmV0dXJuIGo8PTE1P3heeV56Omo8PTMxP3gmeXx+eCZ6Omo8PTQ3Pyh4fH55KV56Omo8PTYzP3gmenx5Jn56OnheKHl8fnopfWZ1bmN0aW9uIEsoail7cmV0dXJuIGo8PTE1PzA6ajw9MzE/MTUxODUwMDI0OTpqPD00Nz8xODU5Nzc1MzkzOmo8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOH1mdW5jdGlvbiBLaChqKXtyZXR1cm4gajw9MTU/MTM1MjgyOTkyNjpqPD0zMT8xNTQ4NjAzNjg0Omo8PTQ3PzE4MzYwNzI2OTE6ajw9NjM/MjA1Mzk5NDIxNzowfXV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCxCbG9ja0hhc2gpLGV4cG9ydHMucmlwZW1kMTYwPVJJUEVNRDE2MCxSSVBFTUQxNjAuYmxvY2tTaXplPTUxMixSSVBFTUQxNjAub3V0U2l6ZT0xNjAsUklQRU1EMTYwLmhtYWNTdHJlbmd0aD0xOTIsUklQRU1EMTYwLnBhZExlbmd0aD02NCxSSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24gdXBkYXRlKG1zZyxzdGFydCl7Zm9yKHZhciBBPXRoaXMuaFswXSxCPXRoaXMuaFsxXSxDPXRoaXMuaFsyXSxEPXRoaXMuaFszXSxFPXRoaXMuaFs0XSxBaD1BLEJoPUIsQ2g9QyxEaD1ELEVoPUUsaj0wO2o8ODA7aisrKXt2YXIgVD1zdW0zMihyb3RsMzIoc3VtMzJfNChBLGYoaixCLEMsRCksbXNnW3Jbal0rc3RhcnRdLEsoaikpLHNbal0pLEUpO0E9RSxFPUQsRD1yb3RsMzIoQywxMCksQz1CLEI9VCxUPXN1bTMyKHJvdGwzMihzdW0zMl80KEFoLGYoNzktaixCaCxDaCxEaCksbXNnW3JoW2pdK3N0YXJ0XSxLaChqKSksc2hbal0pLEVoKSxBaD1FaCxFaD1EaCxEaD1yb3RsMzIoQ2gsMTApLENoPUJoLEJoPVR9VD1zdW0zMl8zKHRoaXMuaFsxXSxDLERoKSx0aGlzLmhbMV09c3VtMzJfMyh0aGlzLmhbMl0sRCxFaCksdGhpcy5oWzJdPXN1bTMyXzModGhpcy5oWzNdLEUsQWgpLHRoaXMuaFszXT1zdW0zMl8zKHRoaXMuaFs0XSxBLEJoKSx0aGlzLmhbNF09c3VtMzJfMyh0aGlzLmhbMF0sQixDaCksdGhpcy5oWzBdPVR9LFJJUEVNRDE2MC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbiBkaWdlc3QoZW5jKXtyZXR1cm4iaGV4Ij09PWVuYz91dGlscy50b0hleDMyKHRoaXMuaCwibGl0dGxlIik6dXRpbHMuc3BsaXQzMih0aGlzLmgsImxpdHRsZSIpfTt2YXIgcj1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxyaD1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxzPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxzaD1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO2V4cG9ydHMuc2hhMT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMS5qcyIpLGV4cG9ydHMuc2hhMjI0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS8yMjQuanMiKSxleHBvcnRzLnNoYTI1Nj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzIiksZXhwb3J0cy5zaGEzODQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzM4NC5qcyIpLGV4cG9ydHMuc2hhNTEyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS81MTIuanMiKX0sIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS8xLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgdXRpbHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvdXRpbHMuanMiKSxjb21tb249X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzIiksc2hhQ29tbW9uPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanMiKSxyb3RsMzI9dXRpbHMucm90bDMyLHN1bTMyPXV0aWxzLnN1bTMyLHN1bTMyXzU9dXRpbHMuc3VtMzJfNSxmdF8xPXNoYUNvbW1vbi5mdF8xLEJsb2NrSGFzaD1jb21tb24uQmxvY2tIYXNoLHNoYTFfSz1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07ZnVuY3Rpb24gU0hBMSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFNIQTEpKXJldHVybiBuZXcgU0hBMTtCbG9ja0hhc2guY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLlc9bmV3IEFycmF5KDgwKX11dGlscy5pbmhlcml0cyhTSEExLEJsb2NrSGFzaCksbW9kdWxlLmV4cG9ydHM9U0hBMSxTSEExLmJsb2NrU2l6ZT01MTIsU0hBMS5vdXRTaXplPTE2MCxTSEExLmhtYWNTdHJlbmd0aD04MCxTSEExLnBhZExlbmd0aD02NCxTSEExLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uIF91cGRhdGUobXNnLHN0YXJ0KXtmb3IodmFyIFc9dGhpcy5XLGk9MDtpPDE2O2krKylXW2ldPW1zZ1tzdGFydCtpXTtmb3IoO2k8Vy5sZW5ndGg7aSsrKVdbaV09cm90bDMyKFdbaS0zXV5XW2ktOF1eV1tpLTE0XV5XW2ktMTZdLDEpO3ZhciBhPXRoaXMuaFswXSxiPXRoaXMuaFsxXSxjPXRoaXMuaFsyXSxkPXRoaXMuaFszXSxlPXRoaXMuaFs0XTtmb3IoaT0wO2k8Vy5sZW5ndGg7aSsrKXt2YXIgcz1+fihpLzIwKSx0PXN1bTMyXzUocm90bDMyKGEsNSksZnRfMShzLGIsYyxkKSxlLFdbaV0sc2hhMV9LW3NdKTtlPWQsZD1jLGM9cm90bDMyKGIsMzApLGI9YSxhPXR9dGhpcy5oWzBdPXN1bTMyKHRoaXMuaFswXSxhKSx0aGlzLmhbMV09c3VtMzIodGhpcy5oWzFdLGIpLHRoaXMuaFsyXT1zdW0zMih0aGlzLmhbMl0sYyksdGhpcy5oWzNdPXN1bTMyKHRoaXMuaFszXSxkKSx0aGlzLmhbNF09c3VtMzIodGhpcy5oWzRdLGUpfSxTSEExLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uIGRpZ2VzdChlbmMpe3JldHVybiJoZXgiPT09ZW5jP3V0aWxzLnRvSGV4MzIodGhpcy5oLCJiaWciKTp1dGlscy5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHV0aWxzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3V0aWxzLmpzIiksU0hBMjU2PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS8yNTYuanMiKTtmdW5jdGlvbiBTSEEyMjQoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKXJldHVybiBuZXcgU0hBMjI0O1NIQTI1Ni5jYWxsKHRoaXMpLHRoaXMuaD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF19dXRpbHMuaW5oZXJpdHMoU0hBMjI0LFNIQTI1NiksbW9kdWxlLmV4cG9ydHM9U0hBMjI0LFNIQTIyNC5ibG9ja1NpemU9NTEyLFNIQTIyNC5vdXRTaXplPTIyNCxTSEEyMjQuaG1hY1N0cmVuZ3RoPTE5MixTSEEyMjQucGFkTGVuZ3RoPTY0LFNIQTIyNC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbiBkaWdlc3QoZW5jKXtyZXR1cm4iaGV4Ij09PWVuYz91dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKTp1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgdXRpbHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvdXRpbHMuanMiKSxjb21tb249X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzIiksc2hhQ29tbW9uPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanMiKSxhc3NlcnQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYWxpc3RpYy1hc3NlcnQvaW5kZXguanMiKSxzdW0zMj11dGlscy5zdW0zMixzdW0zMl80PXV0aWxzLnN1bTMyXzQsc3VtMzJfNT11dGlscy5zdW0zMl81LGNoMzI9c2hhQ29tbW9uLmNoMzIsbWFqMzI9c2hhQ29tbW9uLm1hajMyLHMwXzI1Nj1zaGFDb21tb24uczBfMjU2LHMxXzI1Nj1zaGFDb21tb24uczFfMjU2LGcwXzI1Nj1zaGFDb21tb24uZzBfMjU2LGcxXzI1Nj1zaGFDb21tb24uZzFfMjU2LEJsb2NrSGFzaD1jb21tb24uQmxvY2tIYXNoLHNoYTI1Nl9LPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO2Z1bmN0aW9uIFNIQTI1Nigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFNIQTI1NikpcmV0dXJuIG5ldyBTSEEyNTY7QmxvY2tIYXNoLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPXNoYTI1Nl9LLHRoaXMuVz1uZXcgQXJyYXkoNjQpfXV0aWxzLmluaGVyaXRzKFNIQTI1NixCbG9ja0hhc2gpLG1vZHVsZS5leHBvcnRzPVNIQTI1NixTSEEyNTYuYmxvY2tTaXplPTUxMixTSEEyNTYub3V0U2l6ZT0yNTYsU0hBMjU2LmhtYWNTdHJlbmd0aD0xOTIsU0hBMjU2LnBhZExlbmd0aD02NCxTSEEyNTYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24gX3VwZGF0ZShtc2csc3RhcnQpe2Zvcih2YXIgVz10aGlzLlcsaT0wO2k8MTY7aSsrKVdbaV09bXNnW3N0YXJ0K2ldO2Zvcig7aTxXLmxlbmd0aDtpKyspV1tpXT1zdW0zMl80KGcxXzI1NihXW2ktMl0pLFdbaS03XSxnMF8yNTYoV1tpLTE1XSksV1tpLTE2XSk7dmFyIGE9dGhpcy5oWzBdLGI9dGhpcy5oWzFdLGM9dGhpcy5oWzJdLGQ9dGhpcy5oWzNdLGU9dGhpcy5oWzRdLGY9dGhpcy5oWzVdLGc9dGhpcy5oWzZdLGg9dGhpcy5oWzddO2Zvcihhc3NlcnQodGhpcy5rLmxlbmd0aD09PVcubGVuZ3RoKSxpPTA7aTxXLmxlbmd0aDtpKyspe3ZhciBUMT1zdW0zMl81KGgsczFfMjU2KGUpLGNoMzIoZSxmLGcpLHRoaXMua1tpXSxXW2ldKSxUMj1zdW0zMihzMF8yNTYoYSksbWFqMzIoYSxiLGMpKTtoPWcsZz1mLGY9ZSxlPXN1bTMyKGQsVDEpLGQ9YyxjPWIsYj1hLGE9c3VtMzIoVDEsVDIpfXRoaXMuaFswXT1zdW0zMih0aGlzLmhbMF0sYSksdGhpcy5oWzFdPXN1bTMyKHRoaXMuaFsxXSxiKSx0aGlzLmhbMl09c3VtMzIodGhpcy5oWzJdLGMpLHRoaXMuaFszXT1zdW0zMih0aGlzLmhbM10sZCksdGhpcy5oWzRdPXN1bTMyKHRoaXMuaFs0XSxlKSx0aGlzLmhbNV09c3VtMzIodGhpcy5oWzVdLGYpLHRoaXMuaFs2XT1zdW0zMih0aGlzLmhbNl0sZyksdGhpcy5oWzddPXN1bTMyKHRoaXMuaFs3XSxoKX0sU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uIGRpZ2VzdChlbmMpe3JldHVybiJoZXgiPT09ZW5jP3V0aWxzLnRvSGV4MzIodGhpcy5oLCJiaWciKTp1dGlscy5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzM4NC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHV0aWxzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3V0aWxzLmpzIiksU0hBNTEyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS81MTIuanMiKTtmdW5jdGlvbiBTSEEzODQoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBTSEEzODQpKXJldHVybiBuZXcgU0hBMzg0O1NIQTUxMi5jYWxsKHRoaXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF19dXRpbHMuaW5oZXJpdHMoU0hBMzg0LFNIQTUxMiksbW9kdWxlLmV4cG9ydHM9U0hBMzg0LFNIQTM4NC5ibG9ja1NpemU9MTAyNCxTSEEzODQub3V0U2l6ZT0zODQsU0hBMzg0LmhtYWNTdHJlbmd0aD0xOTIsU0hBMzg0LnBhZExlbmd0aD0xMjgsU0hBMzg0LnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uIGRpZ2VzdChlbmMpe3JldHVybiJoZXgiPT09ZW5jP3V0aWxzLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKTp1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHV0aWxzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3V0aWxzLmpzIiksY29tbW9uPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL2NvbW1vbi5qcyIpLGFzc2VydD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcyIpLHJvdHI2NF9oaT11dGlscy5yb3RyNjRfaGkscm90cjY0X2xvPXV0aWxzLnJvdHI2NF9sbyxzaHI2NF9oaT11dGlscy5zaHI2NF9oaSxzaHI2NF9sbz11dGlscy5zaHI2NF9sbyxzdW02ND11dGlscy5zdW02NCxzdW02NF9oaT11dGlscy5zdW02NF9oaSxzdW02NF9sbz11dGlscy5zdW02NF9sbyxzdW02NF80X2hpPXV0aWxzLnN1bTY0XzRfaGksc3VtNjRfNF9sbz11dGlscy5zdW02NF80X2xvLHN1bTY0XzVfaGk9dXRpbHMuc3VtNjRfNV9oaSxzdW02NF81X2xvPXV0aWxzLnN1bTY0XzVfbG8sQmxvY2tIYXNoPWNvbW1vbi5CbG9ja0hhc2gsc2hhNTEyX0s9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXTtmdW5jdGlvbiBTSEE1MTIoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBTSEE1MTIpKXJldHVybiBuZXcgU0hBNTEyO0Jsb2NrSGFzaC5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPXNoYTUxMl9LLHRoaXMuVz1uZXcgQXJyYXkoMTYwKX1mdW5jdGlvbiBjaDY0X2hpKHhoLHhsLHloLHlsLHpoKXt2YXIgcj14aCZ5aF5+eGgmemg7cmV0dXJuIHI8MCYmKHIrPTQyOTQ5NjcyOTYpLHJ9ZnVuY3Rpb24gY2g2NF9sbyh4aCx4bCx5aCx5bCx6aCx6bCl7dmFyIHI9eGwmeWxefnhsJnpsO3JldHVybiByPDAmJihyKz00Mjk0OTY3Mjk2KSxyfWZ1bmN0aW9uIG1hajY0X2hpKHhoLHhsLHloLHlsLHpoKXt2YXIgcj14aCZ5aF54aCZ6aF55aCZ6aDtyZXR1cm4gcjwwJiYocis9NDI5NDk2NzI5Nikscn1mdW5jdGlvbiBtYWo2NF9sbyh4aCx4bCx5aCx5bCx6aCx6bCl7dmFyIHI9eGwmeWxeeGwmemxeeWwmemw7cmV0dXJuIHI8MCYmKHIrPTQyOTQ5NjcyOTYpLHJ9ZnVuY3Rpb24gczBfNTEyX2hpKHhoLHhsKXt2YXIgcj1yb3RyNjRfaGkoeGgseGwsMjgpXnJvdHI2NF9oaSh4bCx4aCwyKV5yb3RyNjRfaGkoeGwseGgsNyk7cmV0dXJuIHI8MCYmKHIrPTQyOTQ5NjcyOTYpLHJ9ZnVuY3Rpb24gczBfNTEyX2xvKHhoLHhsKXt2YXIgcj1yb3RyNjRfbG8oeGgseGwsMjgpXnJvdHI2NF9sbyh4bCx4aCwyKV5yb3RyNjRfbG8oeGwseGgsNyk7cmV0dXJuIHI8MCYmKHIrPTQyOTQ5NjcyOTYpLHJ9ZnVuY3Rpb24gczFfNTEyX2hpKHhoLHhsKXt2YXIgcj1yb3RyNjRfaGkoeGgseGwsMTQpXnJvdHI2NF9oaSh4aCx4bCwxOClecm90cjY0X2hpKHhsLHhoLDkpO3JldHVybiByPDAmJihyKz00Mjk0OTY3Mjk2KSxyfWZ1bmN0aW9uIHMxXzUxMl9sbyh4aCx4bCl7dmFyIHI9cm90cjY0X2xvKHhoLHhsLDE0KV5yb3RyNjRfbG8oeGgseGwsMTgpXnJvdHI2NF9sbyh4bCx4aCw5KTtyZXR1cm4gcjwwJiYocis9NDI5NDk2NzI5Nikscn1mdW5jdGlvbiBnMF81MTJfaGkoeGgseGwpe3ZhciByPXJvdHI2NF9oaSh4aCx4bCwxKV5yb3RyNjRfaGkoeGgseGwsOClec2hyNjRfaGkoeGgseGwsNyk7cmV0dXJuIHI8MCYmKHIrPTQyOTQ5NjcyOTYpLHJ9ZnVuY3Rpb24gZzBfNTEyX2xvKHhoLHhsKXt2YXIgcj1yb3RyNjRfbG8oeGgseGwsMSlecm90cjY0X2xvKHhoLHhsLDgpXnNocjY0X2xvKHhoLHhsLDcpO3JldHVybiByPDAmJihyKz00Mjk0OTY3Mjk2KSxyfWZ1bmN0aW9uIGcxXzUxMl9oaSh4aCx4bCl7dmFyIHI9cm90cjY0X2hpKHhoLHhsLDE5KV5yb3RyNjRfaGkoeGwseGgsMjkpXnNocjY0X2hpKHhoLHhsLDYpO3JldHVybiByPDAmJihyKz00Mjk0OTY3Mjk2KSxyfWZ1bmN0aW9uIGcxXzUxMl9sbyh4aCx4bCl7dmFyIHI9cm90cjY0X2xvKHhoLHhsLDE5KV5yb3RyNjRfbG8oeGwseGgsMjkpXnNocjY0X2xvKHhoLHhsLDYpO3JldHVybiByPDAmJihyKz00Mjk0OTY3Mjk2KSxyfXV0aWxzLmluaGVyaXRzKFNIQTUxMixCbG9ja0hhc2gpLG1vZHVsZS5leHBvcnRzPVNIQTUxMixTSEE1MTIuYmxvY2tTaXplPTEwMjQsU0hBNTEyLm91dFNpemU9NTEyLFNIQTUxMi5obWFjU3RyZW5ndGg9MTkyLFNIQTUxMi5wYWRMZW5ndGg9MTI4LFNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbiBfcHJlcGFyZUJsb2NrKG1zZyxzdGFydCl7Zm9yKHZhciBXPXRoaXMuVyxpPTA7aTwzMjtpKyspV1tpXT1tc2dbc3RhcnQraV07Zm9yKDtpPFcubGVuZ3RoO2krPTIpe3ZhciBjMF9oaT1nMV81MTJfaGkoV1tpLTRdLFdbaS0zXSksYzBfbG89ZzFfNTEyX2xvKFdbaS00XSxXW2ktM10pLGMxX2hpPVdbaS0xNF0sYzFfbG89V1tpLTEzXSxjMl9oaT1nMF81MTJfaGkoV1tpLTMwXSxXW2ktMjldKSxjMl9sbz1nMF81MTJfbG8oV1tpLTMwXSxXW2ktMjldKSxjM19oaT1XW2ktMzJdLGMzX2xvPVdbaS0zMV07V1tpXT1zdW02NF80X2hpKGMwX2hpLGMwX2xvLGMxX2hpLGMxX2xvLGMyX2hpLGMyX2xvLGMzX2hpLGMzX2xvKSxXW2krMV09c3VtNjRfNF9sbyhjMF9oaSxjMF9sbyxjMV9oaSxjMV9sbyxjMl9oaSxjMl9sbyxjM19oaSxjM19sbyl9fSxTSEE1MTIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24gX3VwZGF0ZShtc2csc3RhcnQpe3RoaXMuX3ByZXBhcmVCbG9jayhtc2csc3RhcnQpO3ZhciBXPXRoaXMuVyxhaD10aGlzLmhbMF0sYWw9dGhpcy5oWzFdLGJoPXRoaXMuaFsyXSxibD10aGlzLmhbM10sY2g9dGhpcy5oWzRdLGNsPXRoaXMuaFs1XSxkaD10aGlzLmhbNl0sZGw9dGhpcy5oWzddLGVoPXRoaXMuaFs4XSxlbD10aGlzLmhbOV0sZmg9dGhpcy5oWzEwXSxmbD10aGlzLmhbMTFdLGdoPXRoaXMuaFsxMl0sZ2w9dGhpcy5oWzEzXSxoaD10aGlzLmhbMTRdLGhsPXRoaXMuaFsxNV07YXNzZXJ0KHRoaXMuay5sZW5ndGg9PT1XLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTxXLmxlbmd0aDtpKz0yKXt2YXIgYzBfaGk9aGgsYzBfbG89aGwsYzFfaGk9czFfNTEyX2hpKGVoLGVsKSxjMV9sbz1zMV81MTJfbG8oZWgsZWwpLGMyX2hpPWNoNjRfaGkoZWgsZWwsZmgsZmwsZ2gpLGMyX2xvPWNoNjRfbG8oZWgsZWwsZmgsZmwsZ2gsZ2wpLGMzX2hpPXRoaXMua1tpXSxjM19sbz10aGlzLmtbaSsxXSxjNF9oaT1XW2ldLGM0X2xvPVdbaSsxXSxUMV9oaT1zdW02NF81X2hpKGMwX2hpLGMwX2xvLGMxX2hpLGMxX2xvLGMyX2hpLGMyX2xvLGMzX2hpLGMzX2xvLGM0X2hpLGM0X2xvKSxUMV9sbz1zdW02NF81X2xvKGMwX2hpLGMwX2xvLGMxX2hpLGMxX2xvLGMyX2hpLGMyX2xvLGMzX2hpLGMzX2xvLGM0X2hpLGM0X2xvKTtjMF9oaT1zMF81MTJfaGkoYWgsYWwpLGMwX2xvPXMwXzUxMl9sbyhhaCxhbCksYzFfaGk9bWFqNjRfaGkoYWgsYWwsYmgsYmwsY2gpLGMxX2xvPW1hajY0X2xvKGFoLGFsLGJoLGJsLGNoLGNsKTt2YXIgVDJfaGk9c3VtNjRfaGkoYzBfaGksYzBfbG8sYzFfaGksYzFfbG8pLFQyX2xvPXN1bTY0X2xvKGMwX2hpLGMwX2xvLGMxX2hpLGMxX2xvKTtoaD1naCxobD1nbCxnaD1maCxnbD1mbCxmaD1laCxmbD1lbCxlaD1zdW02NF9oaShkaCxkbCxUMV9oaSxUMV9sbyksZWw9c3VtNjRfbG8oZGwsZGwsVDFfaGksVDFfbG8pLGRoPWNoLGRsPWNsLGNoPWJoLGNsPWJsLGJoPWFoLGJsPWFsLGFoPXN1bTY0X2hpKFQxX2hpLFQxX2xvLFQyX2hpLFQyX2xvKSxhbD1zdW02NF9sbyhUMV9oaSxUMV9sbyxUMl9oaSxUMl9sbyl9c3VtNjQodGhpcy5oLDAsYWgsYWwpLHN1bTY0KHRoaXMuaCwyLGJoLGJsKSxzdW02NCh0aGlzLmgsNCxjaCxjbCksc3VtNjQodGhpcy5oLDYsZGgsZGwpLHN1bTY0KHRoaXMuaCw4LGVoLGVsKSxzdW02NCh0aGlzLmgsMTAsZmgsZmwpLHN1bTY0KHRoaXMuaCwxMixnaCxnbCksc3VtNjQodGhpcy5oLDE0LGhoLGhsKX0sU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uIGRpZ2VzdChlbmMpe3JldHVybiJoZXgiPT09ZW5jP3V0aWxzLnRvSGV4MzIodGhpcy5oLCJiaWciKTp1dGlscy5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhL2NvbW1vbi5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHJvdHIzMj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcyIpLnJvdHIzMjtmdW5jdGlvbiBjaDMyKHgseSx6KXtyZXR1cm4geCZ5Xn54Jnp9ZnVuY3Rpb24gbWFqMzIoeCx5LHope3JldHVybiB4JnleeCZ6Xnkmen1mdW5jdGlvbiBwMzIoeCx5LHope3JldHVybiB4Xnleen1leHBvcnRzLmZ0XzE9ZnVuY3Rpb24gZnRfMShzLHgseSx6KXtyZXR1cm4gMD09PXM/Y2gzMih4LHkseik6MT09PXN8fDM9PT1zP3AzMih4LHkseik6Mj09PXM/bWFqMzIoeCx5LHopOnZvaWQgMH0sZXhwb3J0cy5jaDMyPWNoMzIsZXhwb3J0cy5tYWozMj1tYWozMixleHBvcnRzLnAzMj1wMzIsZXhwb3J0cy5zMF8yNTY9ZnVuY3Rpb24gczBfMjU2KHgpe3JldHVybiByb3RyMzIoeCwyKV5yb3RyMzIoeCwxMylecm90cjMyKHgsMjIpfSxleHBvcnRzLnMxXzI1Nj1mdW5jdGlvbiBzMV8yNTYoeCl7cmV0dXJuIHJvdHIzMih4LDYpXnJvdHIzMih4LDExKV5yb3RyMzIoeCwyNSl9LGV4cG9ydHMuZzBfMjU2PWZ1bmN0aW9uIGcwXzI1Nih4KXtyZXR1cm4gcm90cjMyKHgsNylecm90cjMyKHgsMTgpXng+Pj4zfSxleHBvcnRzLmcxXzI1Nj1mdW5jdGlvbiBnMV8yNTYoeCl7cmV0dXJuIHJvdHIzMih4LDE3KV5yb3RyMzIoeCwxOSleeD4+PjEwfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3V0aWxzLmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgYXNzZXJ0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9taW5pbWFsaXN0aWMtYXNzZXJ0L2luZGV4LmpzIiksaW5oZXJpdHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKTtmdW5jdGlvbiBpc1N1cnJvZ2F0ZVBhaXIobXNnLGkpe3JldHVybiA1NTI5Nj09KDY0NTEyJm1zZy5jaGFyQ29kZUF0KGkpKSYmKCEoaTwwfHxpKzE+PW1zZy5sZW5ndGgpJiY1NjMyMD09KDY0NTEyJm1zZy5jaGFyQ29kZUF0KGkrMSkpKX1mdW5jdGlvbiBodG9ubCh3KXtyZXR1cm4odz4+PjI0fHc+Pj44JjY1MjgwfHc8PDgmMTY3MTE2ODB8KDI1NSZ3KTw8MjQpPj4+MH1mdW5jdGlvbiB6ZXJvMih3b3JkKXtyZXR1cm4gMT09PXdvcmQubGVuZ3RoPyIwIit3b3JkOndvcmR9ZnVuY3Rpb24gemVybzgod29yZCl7cmV0dXJuIDc9PT13b3JkLmxlbmd0aD8iMCIrd29yZDo2PT09d29yZC5sZW5ndGg/IjAwIit3b3JkOjU9PT13b3JkLmxlbmd0aD8iMDAwIit3b3JkOjQ9PT13b3JkLmxlbmd0aD8iMDAwMCIrd29yZDozPT09d29yZC5sZW5ndGg/IjAwMDAwIit3b3JkOjI9PT13b3JkLmxlbmd0aD8iMDAwMDAwIit3b3JkOjE9PT13b3JkLmxlbmd0aD8iMDAwMDAwMCIrd29yZDp3b3JkfWV4cG9ydHMuaW5oZXJpdHM9aW5oZXJpdHMsZXhwb3J0cy50b0FycmF5PWZ1bmN0aW9uIHRvQXJyYXkobXNnLGVuYyl7aWYoQXJyYXkuaXNBcnJheShtc2cpKXJldHVybiBtc2cuc2xpY2UoKTtpZighbXNnKXJldHVybltdO3ZhciByZXM9W107aWYoInN0cmluZyI9PXR5cGVvZiBtc2cpaWYoZW5jKXtpZigiaGV4Ij09PWVuYylmb3IoKG1zZz1tc2cucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYobXNnPSIwIittc2cpLGk9MDtpPG1zZy5sZW5ndGg7aSs9MilyZXMucHVzaChwYXJzZUludChtc2dbaV0rbXNnW2krMV0sMTYpKX1lbHNlIGZvcih2YXIgcD0wLGk9MDtpPG1zZy5sZW5ndGg7aSsrKXt2YXIgYz1tc2cuY2hhckNvZGVBdChpKTtjPDEyOD9yZXNbcCsrXT1jOmM8MjA0OD8ocmVzW3ArK109Yz4+NnwxOTIscmVzW3ArK109NjMmY3wxMjgpOmlzU3Vycm9nYXRlUGFpcihtc2csaSk/KGM9NjU1MzYrKCgxMDIzJmMpPDwxMCkrKDEwMjMmbXNnLmNoYXJDb2RlQXQoKytpKSkscmVzW3ArK109Yz4+MTh8MjQwLHJlc1twKytdPWM+PjEyJjYzfDEyOCxyZXNbcCsrXT1jPj42JjYzfDEyOCxyZXNbcCsrXT02MyZjfDEyOCk6KHJlc1twKytdPWM+PjEyfDIyNCxyZXNbcCsrXT1jPj42JjYzfDEyOCxyZXNbcCsrXT02MyZjfDEyOCl9ZWxzZSBmb3IoaT0wO2k8bXNnLmxlbmd0aDtpKyspcmVzW2ldPTB8bXNnW2ldO3JldHVybiByZXN9LGV4cG9ydHMudG9IZXg9ZnVuY3Rpb24gdG9IZXgobXNnKXtmb3IodmFyIHJlcz0iIixpPTA7aTxtc2cubGVuZ3RoO2krKylyZXMrPXplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO3JldHVybiByZXN9LGV4cG9ydHMuaHRvbmw9aHRvbmwsZXhwb3J0cy50b0hleDMyPWZ1bmN0aW9uIHRvSGV4MzIobXNnLGVuZGlhbil7Zm9yKHZhciByZXM9IiIsaT0wO2k8bXNnLmxlbmd0aDtpKyspe3ZhciB3PW1zZ1tpXTsibGl0dGxlIj09PWVuZGlhbiYmKHc9aHRvbmwodykpLHJlcys9emVybzgody50b1N0cmluZygxNikpfXJldHVybiByZXN9LGV4cG9ydHMuemVybzI9emVybzIsZXhwb3J0cy56ZXJvOD16ZXJvOCxleHBvcnRzLmpvaW4zMj1mdW5jdGlvbiBqb2luMzIobXNnLHN0YXJ0LGVuZCxlbmRpYW4pe3ZhciBsZW49ZW5kLXN0YXJ0O2Fzc2VydChsZW4lND09MCk7Zm9yKHZhciByZXM9bmV3IEFycmF5KGxlbi80KSxpPTAsaz1zdGFydDtpPHJlcy5sZW5ndGg7aSsrLGsrPTQpe3ZhciB3O3c9ImJpZyI9PT1lbmRpYW4/bXNnW2tdPDwyNHxtc2dbaysxXTw8MTZ8bXNnW2srMl08PDh8bXNnW2srM106bXNnW2srM108PDI0fG1zZ1trKzJdPDwxNnxtc2dbaysxXTw8OHxtc2dba10scmVzW2ldPXc+Pj4wfXJldHVybiByZXN9LGV4cG9ydHMuc3BsaXQzMj1mdW5jdGlvbiBzcGxpdDMyKG1zZyxlbmRpYW4pe2Zvcih2YXIgcmVzPW5ldyBBcnJheSg0Km1zZy5sZW5ndGgpLGk9MCxrPTA7aTxtc2cubGVuZ3RoO2krKyxrKz00KXt2YXIgbT1tc2dbaV07ImJpZyI9PT1lbmRpYW4/KHJlc1trXT1tPj4+MjQscmVzW2srMV09bT4+PjE2JjI1NSxyZXNbaysyXT1tPj4+OCYyNTUscmVzW2srM109MjU1Jm0pOihyZXNbayszXT1tPj4+MjQscmVzW2srMl09bT4+PjE2JjI1NSxyZXNbaysxXT1tPj4+OCYyNTUscmVzW2tdPTI1NSZtKX1yZXR1cm4gcmVzfSxleHBvcnRzLnJvdHIzMj1mdW5jdGlvbiByb3RyMzIodyxiKXtyZXR1cm4gdz4+PmJ8dzw8MzItYn0sZXhwb3J0cy5yb3RsMzI9ZnVuY3Rpb24gcm90bDMyKHcsYil7cmV0dXJuIHc8PGJ8dz4+PjMyLWJ9LGV4cG9ydHMuc3VtMzI9ZnVuY3Rpb24gc3VtMzIoYSxiKXtyZXR1cm4gYStiPj4+MH0sZXhwb3J0cy5zdW0zMl8zPWZ1bmN0aW9uIHN1bTMyXzMoYSxiLGMpe3JldHVybiBhK2IrYz4+PjB9LGV4cG9ydHMuc3VtMzJfND1mdW5jdGlvbiBzdW0zMl80KGEsYixjLGQpe3JldHVybiBhK2IrYytkPj4+MH0sZXhwb3J0cy5zdW0zMl81PWZ1bmN0aW9uIHN1bTMyXzUoYSxiLGMsZCxlKXtyZXR1cm4gYStiK2MrZCtlPj4+MH0sZXhwb3J0cy5zdW02ND1mdW5jdGlvbiBzdW02NChidWYscG9zLGFoLGFsKXt2YXIgYmg9YnVmW3Bvc10sbG89YWwrYnVmW3BvcysxXT4+PjAsaGk9KGxvPGFsPzE6MCkrYWgrYmg7YnVmW3Bvc109aGk+Pj4wLGJ1Zltwb3MrMV09bG99LGV4cG9ydHMuc3VtNjRfaGk9ZnVuY3Rpb24gc3VtNjRfaGkoYWgsYWwsYmgsYmwpe3JldHVybihhbCtibD4+PjA8YWw/MTowKSthaCtiaD4+PjB9LGV4cG9ydHMuc3VtNjRfbG89ZnVuY3Rpb24gc3VtNjRfbG8oYWgsYWwsYmgsYmwpe3JldHVybiBhbCtibD4+PjB9LGV4cG9ydHMuc3VtNjRfNF9oaT1mdW5jdGlvbiBzdW02NF80X2hpKGFoLGFsLGJoLGJsLGNoLGNsLGRoLGRsKXt2YXIgY2Fycnk9MCxsbz1hbDtyZXR1cm4gY2FycnkrPShsbz1sbytibD4+PjApPGFsPzE6MCxjYXJyeSs9KGxvPWxvK2NsPj4+MCk8Y2w/MTowLGFoK2JoK2NoK2RoKyhjYXJyeSs9KGxvPWxvK2RsPj4+MCk8ZGw/MTowKT4+PjB9LGV4cG9ydHMuc3VtNjRfNF9sbz1mdW5jdGlvbiBzdW02NF80X2xvKGFoLGFsLGJoLGJsLGNoLGNsLGRoLGRsKXtyZXR1cm4gYWwrYmwrY2wrZGw+Pj4wfSxleHBvcnRzLnN1bTY0XzVfaGk9ZnVuY3Rpb24gc3VtNjRfNV9oaShhaCxhbCxiaCxibCxjaCxjbCxkaCxkbCxlaCxlbCl7dmFyIGNhcnJ5PTAsbG89YWw7cmV0dXJuIGNhcnJ5Kz0obG89bG8rYmw+Pj4wKTxhbD8xOjAsY2FycnkrPShsbz1sbytjbD4+PjApPGNsPzE6MCxjYXJyeSs9KGxvPWxvK2RsPj4+MCk8ZGw/MTowLGFoK2JoK2NoK2RoK2VoKyhjYXJyeSs9KGxvPWxvK2VsPj4+MCk8ZWw/MTowKT4+PjB9LGV4cG9ydHMuc3VtNjRfNV9sbz1mdW5jdGlvbiBzdW02NF81X2xvKGFoLGFsLGJoLGJsLGNoLGNsLGRoLGRsLGVoLGVsKXtyZXR1cm4gYWwrYmwrY2wrZGwrZWw+Pj4wfSxleHBvcnRzLnJvdHI2NF9oaT1mdW5jdGlvbiByb3RyNjRfaGkoYWgsYWwsbnVtKXtyZXR1cm4oYWw8PDMyLW51bXxhaD4+Pm51bSk+Pj4wfSxleHBvcnRzLnJvdHI2NF9sbz1mdW5jdGlvbiByb3RyNjRfbG8oYWgsYWwsbnVtKXtyZXR1cm4oYWg8PDMyLW51bXxhbD4+Pm51bSk+Pj4wfSxleHBvcnRzLnNocjY0X2hpPWZ1bmN0aW9uIHNocjY0X2hpKGFoLGFsLG51bSl7cmV0dXJuIGFoPj4+bnVtfSxleHBvcnRzLnNocjY0X2xvPWZ1bmN0aW9uIHNocjY0X2xvKGFoLGFsLG51bSl7cmV0dXJuKGFoPDwzMi1udW18YWw+Pj5udW0pPj4+MH19LCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzb3duL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgY2FsbD1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCwkaGFzT3duPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYmluZD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbmRleC5qcyIpO21vZHVsZS5leHBvcnRzPWJpbmQuY2FsbChjYWxsLCRoYXNPd24pfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2htYWMtZHJiZy9saWIvaG1hYy1kcmJnLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgaGFzaD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC5qcyIpLHV0aWxzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9taW5pbWFsaXN0aWMtY3J5cHRvLXV0aWxzL2xpYi91dGlscy5qcyIpLGFzc2VydD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcyIpO2Z1bmN0aW9uIEhtYWNEUkJHKG9wdGlvbnMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEhtYWNEUkJHKSlyZXR1cm4gbmV3IEhtYWNEUkJHKG9wdGlvbnMpO3RoaXMuaGFzaD1vcHRpb25zLmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhb3B0aW9ucy5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT1vcHRpb25zLm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgsdGhpcy5fcmVzZWVkPW51bGwsdGhpcy5yZXNlZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBlbnRyb3B5PXV0aWxzLnRvQXJyYXkob3B0aW9ucy5lbnRyb3B5LG9wdGlvbnMuZW50cm9weUVuY3x8ImhleCIpLG5vbmNlPXV0aWxzLnRvQXJyYXkob3B0aW9ucy5ub25jZSxvcHRpb25zLm5vbmNlRW5jfHwiaGV4IikscGVycz11dGlscy50b0FycmF5KG9wdGlvbnMucGVycyxvcHRpb25zLnBlcnNFbmN8fCJoZXgiKTthc3NlcnQoZW50cm9weS5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX2luaXQoZW50cm9weSxub25jZSxwZXJzKX1tb2R1bGUuZXhwb3J0cz1IbWFjRFJCRyxIbWFjRFJCRy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24gaW5pdChlbnRyb3B5LG5vbmNlLHBlcnMpe3ZhciBzZWVkPWVudHJvcHkuY29uY2F0KG5vbmNlKS5jb25jYXQocGVycyk7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgaT0wO2k8dGhpcy5WLmxlbmd0aDtpKyspdGhpcy5LW2ldPTAsdGhpcy5WW2ldPTE7dGhpcy5fdXBkYXRlKHNlZWQpLHRoaXMuX3Jlc2VlZD0xLHRoaXMucmVzZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxIbWFjRFJCRy5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24gaG1hYygpe3JldHVybiBuZXcgaGFzaC5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxIbWFjRFJCRy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbiB1cGRhdGUoc2VlZCl7dmFyIGttYWM9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO3NlZWQmJihrbWFjPWttYWMudXBkYXRlKHNlZWQpKSx0aGlzLks9a21hYy5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLHNlZWQmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZShzZWVkKS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sSG1hY0RSQkcucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbiByZXNlZWQoZW50cm9weSxlbnRyb3B5RW5jLGFkZCxhZGRFbmMpeyJzdHJpbmciIT10eXBlb2YgZW50cm9weUVuYyYmKGFkZEVuYz1hZGQsYWRkPWVudHJvcHlFbmMsZW50cm9weUVuYz1udWxsKSxlbnRyb3B5PXV0aWxzLnRvQXJyYXkoZW50cm9weSxlbnRyb3B5RW5jKSxhZGQ9dXRpbHMudG9BcnJheShhZGQsYWRkRW5jKSxhc3NlcnQoZW50cm9weS5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0ZShlbnRyb3B5LmNvbmNhdChhZGR8fFtdKSksdGhpcy5fcmVzZWVkPTF9LEhtYWNEUkJHLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbiBnZW5lcmF0ZShsZW4sZW5jLGFkZCxhZGRFbmMpe2lmKHRoaXMuX3Jlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcigiUmVzZWVkIGlzIHJlcXVpcmVkIik7InN0cmluZyIhPXR5cGVvZiBlbmMmJihhZGRFbmM9YWRkLGFkZD1lbmMsZW5jPW51bGwpLGFkZCYmKGFkZD11dGlscy50b0FycmF5KGFkZCxhZGRFbmN8fCJoZXgiKSx0aGlzLl91cGRhdGUoYWRkKSk7Zm9yKHZhciB0ZW1wPVtdO3RlbXAubGVuZ3RoPGxlbjspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSx0ZW1wPXRlbXAuY29uY2F0KHRoaXMuVik7dmFyIHJlcz10ZW1wLnNsaWNlKDAsbGVuKTtyZXR1cm4gdGhpcy5fdXBkYXRlKGFkZCksdGhpcy5fcmVzZWVkKyssdXRpbHMuZW5jb2RlKHJlcyxlbmMpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9odHRwcy1icm93c2VyaWZ5L2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBodHRwPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9pbmRleC5qcyIpLHVybD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvcHJveHkvdXJsLmpzIiksaHR0cHM9bW9kdWxlLmV4cG9ydHM7Zm9yKHZhciBrZXkgaW4gaHR0cClodHRwLmhhc093blByb3BlcnR5KGtleSkmJihodHRwc1trZXldPWh0dHBba2V5XSk7ZnVuY3Rpb24gdmFsaWRhdGVQYXJhbXMocGFyYW1zKXtpZigic3RyaW5nIj09dHlwZW9mIHBhcmFtcyYmKHBhcmFtcz11cmwucGFyc2UocGFyYW1zKSkscGFyYW1zLnByb3RvY29sfHwocGFyYW1zLnByb3RvY29sPSJodHRwczoiKSwiaHR0cHM6IiE9PXBhcmFtcy5wcm90b2NvbCl0aHJvdyBuZXcgRXJyb3IoJ1Byb3RvY29sICInK3BhcmFtcy5wcm90b2NvbCsnIiBub3Qgc3VwcG9ydGVkLiBFeHBlY3RlZCAiaHR0cHM6IicpO3JldHVybiBwYXJhbXN9aHR0cHMucmVxdWVzdD1mdW5jdGlvbihwYXJhbXMsY2Ipe3JldHVybiBwYXJhbXM9dmFsaWRhdGVQYXJhbXMocGFyYW1zKSxodHRwLnJlcXVlc3QuY2FsbCh0aGlzLHBhcmFtcyxjYil9LGh0dHBzLmdldD1mdW5jdGlvbihwYXJhbXMsY2Ipe3JldHVybiBwYXJhbXM9dmFsaWRhdGVQYXJhbXMocGFyYW1zKSxodHRwLmdldC5jYWxsKHRoaXMscGFyYW1zLGNiKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyl7ZXhwb3J0cy5yZWFkPWZ1bmN0aW9uKGJ1ZmZlcixvZmZzZXQsaXNMRSxtTGVuLG5CeXRlcyl7dmFyIGUsbSxlTGVuPTgqbkJ5dGVzLW1MZW4tMSxlTWF4PSgxPDxlTGVuKS0xLGVCaWFzPWVNYXg+PjEsbkJpdHM9LTcsaT1pc0xFP25CeXRlcy0xOjAsZD1pc0xFPy0xOjEscz1idWZmZXJbb2Zmc2V0K2ldO2ZvcihpKz1kLGU9cyYoMTw8LW5CaXRzKS0xLHM+Pj0tbkJpdHMsbkJpdHMrPWVMZW47bkJpdHM+MDtlPTI1NiplK2J1ZmZlcltvZmZzZXQraV0saSs9ZCxuQml0cy09OCk7Zm9yKG09ZSYoMTw8LW5CaXRzKS0xLGU+Pj0tbkJpdHMsbkJpdHMrPW1MZW47bkJpdHM+MDttPTI1NiptK2J1ZmZlcltvZmZzZXQraV0saSs9ZCxuQml0cy09OCk7aWYoMD09PWUpZT0xLWVCaWFzO2Vsc2V7aWYoZT09PWVNYXgpcmV0dXJuIG0/TmFOOjEvMCoocz8tMToxKTttKz1NYXRoLnBvdygyLG1MZW4pLGUtPWVCaWFzfXJldHVybihzPy0xOjEpKm0qTWF0aC5wb3coMixlLW1MZW4pfSxleHBvcnRzLndyaXRlPWZ1bmN0aW9uKGJ1ZmZlcix2YWx1ZSxvZmZzZXQsaXNMRSxtTGVuLG5CeXRlcyl7dmFyIGUsbSxjLGVMZW49OCpuQnl0ZXMtbUxlbi0xLGVNYXg9KDE8PGVMZW4pLTEsZUJpYXM9ZU1heD4+MSxydD0yMz09PW1MZW4/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGk9aXNMRT8wOm5CeXRlcy0xLGQ9aXNMRT8xOi0xLHM9dmFsdWU8MHx8MD09PXZhbHVlJiYxL3ZhbHVlPDA/MTowO2Zvcih2YWx1ZT1NYXRoLmFicyh2YWx1ZSksaXNOYU4odmFsdWUpfHx2YWx1ZT09PTEvMD8obT1pc05hTih2YWx1ZSk/MTowLGU9ZU1heCk6KGU9TWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkvTWF0aC5MTjIpLHZhbHVlKihjPU1hdGgucG93KDIsLWUpKTwxJiYoZS0tLGMqPTIpLCh2YWx1ZSs9ZStlQmlhcz49MT9ydC9jOnJ0Kk1hdGgucG93KDIsMS1lQmlhcykpKmM+PTImJihlKyssYy89MiksZStlQmlhcz49ZU1heD8obT0wLGU9ZU1heCk6ZStlQmlhcz49MT8obT0odmFsdWUqYy0xKSpNYXRoLnBvdygyLG1MZW4pLGUrPWVCaWFzKToobT12YWx1ZSpNYXRoLnBvdygyLGVCaWFzLTEpKk1hdGgucG93KDIsbUxlbiksZT0wKSk7bUxlbj49ODtidWZmZXJbb2Zmc2V0K2ldPTI1NSZtLGkrPWQsbS89MjU2LG1MZW4tPTgpO2ZvcihlPWU8PG1MZW58bSxlTGVuKz1tTGVuO2VMZW4+MDtidWZmZXJbb2Zmc2V0K2ldPTI1NSZlLGkrPWQsZS89MjU2LGVMZW4tPTgpO2J1ZmZlcltvZmZzZXQraS1kXXw9MTI4KnN9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKG1vZHVsZSl7ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gaW5oZXJpdHMoY3RvcixzdXBlckN0b3Ipe3N1cGVyQ3RvciYmKGN0b3Iuc3VwZXJfPXN1cGVyQ3RvcixjdG9yLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpjdG9yLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gaW5oZXJpdHMoY3RvcixzdXBlckN0b3Ipe2lmKHN1cGVyQ3Rvcil7Y3Rvci5zdXBlcl89c3VwZXJDdG9yO3ZhciBUZW1wQ3Rvcj1mdW5jdGlvbigpe307VGVtcEN0b3IucHJvdG90eXBlPXN1cGVyQ3Rvci5wcm90b3R5cGUsY3Rvci5wcm90b3R5cGU9bmV3IFRlbXBDdG9yLGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yPWN0b3J9fX0sIi4uLy4uL25vZGVfbW9kdWxlcy9pcy1hcmd1bWVudHMvaW5kZXguanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBoYXNUb1N0cmluZ1RhZz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzLXRvc3RyaW5ndGFnL3NoYW1zLmpzIikoKSwkdG9TdHJpbmc9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NhbGwtYm91bmQvaW5kZXguanMiKSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLGlzU3RhbmRhcmRBcmd1bWVudHM9ZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpe3JldHVybiEoaGFzVG9TdHJpbmdUYWcmJnZhbHVlJiYib2JqZWN0Ij09dHlwZW9mIHZhbHVlJiZTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUpJiYiW29iamVjdCBBcmd1bWVudHNdIj09PSR0b1N0cmluZyh2YWx1ZSl9LGlzTGVnYWN5QXJndW1lbnRzPWZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKXtyZXR1cm4hIWlzU3RhbmRhcmRBcmd1bWVudHModmFsdWUpfHxudWxsIT09dmFsdWUmJiJvYmplY3QiPT10eXBlb2YgdmFsdWUmJiJsZW5ndGgiaW4gdmFsdWUmJiJudW1iZXIiPT10eXBlb2YgdmFsdWUubGVuZ3RoJiZ2YWx1ZS5sZW5ndGg+PTAmJiJbb2JqZWN0IEFycmF5XSIhPT0kdG9TdHJpbmcodmFsdWUpJiYiY2FsbGVlImluIHZhbHVlJiYiW29iamVjdCBGdW5jdGlvbl0iPT09JHRvU3RyaW5nKHZhbHVlLmNhbGxlZSl9LHN1cHBvcnRzU3RhbmRhcmRBcmd1bWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gaXNTdGFuZGFyZEFyZ3VtZW50cyhhcmd1bWVudHMpfSgpO2lzU3RhbmRhcmRBcmd1bWVudHMuaXNMZWdhY3lBcmd1bWVudHM9aXNMZWdhY3lBcmd1bWVudHMsbW9kdWxlLmV4cG9ydHM9c3VwcG9ydHNTdGFuZGFyZEFyZ3VtZW50cz9pc1N0YW5kYXJkQXJndW1lbnRzOmlzTGVnYWN5QXJndW1lbnRzfSwiLi4vLi4vbm9kZV9tb2R1bGVzL2lzLWNhbGxhYmxlL2luZGV4LmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgYmFkQXJyYXlMaWtlLGlzQ2FsbGFibGVNYXJrZXIsZm5Ub1N0cj1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcscmVmbGVjdEFwcGx5PSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmbnVsbCE9PVJlZmxlY3QmJlJlZmxlY3QuYXBwbHk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHJlZmxlY3RBcHBseSYmImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7YmFkQXJyYXlMaWtlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7dGhyb3cgaXNDYWxsYWJsZU1hcmtlcn19KSxpc0NhbGxhYmxlTWFya2VyPXt9LHJlZmxlY3RBcHBseShmdW5jdGlvbigpe3Rocm93IDQyfSxudWxsLGJhZEFycmF5TGlrZSl9Y2F0Y2goXyl7XyE9PWlzQ2FsbGFibGVNYXJrZXImJihyZWZsZWN0QXBwbHk9bnVsbCl9ZWxzZSByZWZsZWN0QXBwbHk9bnVsbDt2YXIgY29uc3RydWN0b3JSZWdleD0vXlxzKmNsYXNzXGIvLGlzRVM2Q2xhc3NGbj1mdW5jdGlvbiBpc0VTNkNsYXNzRnVuY3Rpb24odmFsdWUpe3RyeXt2YXIgZm5TdHI9Zm5Ub1N0ci5jYWxsKHZhbHVlKTtyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKX1jYXRjaChlKXtyZXR1cm4hMX19LHRyeUZ1bmN0aW9uT2JqZWN0PWZ1bmN0aW9uIHRyeUZ1bmN0aW9uVG9TdHIodmFsdWUpe3RyeXtyZXR1cm4haXNFUzZDbGFzc0ZuKHZhbHVlKSYmKGZuVG9TdHIuY2FsbCh2YWx1ZSksITApfWNhdGNoKGUpe3JldHVybiExfX0sdG9TdHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxoYXNUb1N0cmluZ1RhZz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYhIVN5bWJvbC50b1N0cmluZ1RhZyxpc0lFNjg9ISgwIGluWyxdKSxpc0REQT1mdW5jdGlvbiBpc0RvY3VtZW50RG90QWxsKCl7cmV0dXJuITF9O2lmKCJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQpe3ZhciBhbGw9ZG9jdW1lbnQuYWxsO3RvU3RyLmNhbGwoYWxsKT09PXRvU3RyLmNhbGwoZG9jdW1lbnQuYWxsKSYmKGlzRERBPWZ1bmN0aW9uIGlzRG9jdW1lbnREb3RBbGwodmFsdWUpe2lmKChpc0lFNjh8fCF2YWx1ZSkmJih2b2lkIDA9PT12YWx1ZXx8Im9iamVjdCI9PXR5cGVvZiB2YWx1ZSkpdHJ5e3ZhciBzdHI9dG9TdHIuY2FsbCh2YWx1ZSk7cmV0dXJuKCJbb2JqZWN0IEhUTUxBbGxDb2xsZWN0aW9uXSI9PT1zdHJ8fCJbb2JqZWN0IEhUTUwgZG9jdW1lbnQuYWxsIGNsYXNzXSI9PT1zdHJ8fCJbb2JqZWN0IEhUTUxDb2xsZWN0aW9uXSI9PT1zdHJ8fCJbb2JqZWN0IE9iamVjdF0iPT09c3RyKSYmbnVsbD09dmFsdWUoIiIpfWNhdGNoKGUpe31yZXR1cm4hMX0pfW1vZHVsZS5leHBvcnRzPXJlZmxlY3RBcHBseT9mdW5jdGlvbiBpc0NhbGxhYmxlKHZhbHVlKXtpZihpc0REQSh2YWx1ZSkpcmV0dXJuITA7aWYoIXZhbHVlKXJldHVybiExO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB2YWx1ZSYmIm9iamVjdCIhPXR5cGVvZiB2YWx1ZSlyZXR1cm4hMTt0cnl7cmVmbGVjdEFwcGx5KHZhbHVlLG51bGwsYmFkQXJyYXlMaWtlKX1jYXRjaChlKXtpZihlIT09aXNDYWxsYWJsZU1hcmtlcilyZXR1cm4hMX1yZXR1cm4haXNFUzZDbGFzc0ZuKHZhbHVlKSYmdHJ5RnVuY3Rpb25PYmplY3QodmFsdWUpfTpmdW5jdGlvbiBpc0NhbGxhYmxlKHZhbHVlKXtpZihpc0REQSh2YWx1ZSkpcmV0dXJuITA7aWYoIXZhbHVlKXJldHVybiExO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB2YWx1ZSYmIm9iamVjdCIhPXR5cGVvZiB2YWx1ZSlyZXR1cm4hMTtpZihoYXNUb1N0cmluZ1RhZylyZXR1cm4gdHJ5RnVuY3Rpb25PYmplY3QodmFsdWUpO2lmKGlzRVM2Q2xhc3NGbih2YWx1ZSkpcmV0dXJuITE7dmFyIHN0ckNsYXNzPXRvU3RyLmNhbGwodmFsdWUpO3JldHVybiEoIltvYmplY3QgRnVuY3Rpb25dIiE9PXN0ckNsYXNzJiYiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iIT09c3RyQ2xhc3MmJiEvXlxbb2JqZWN0IEhUTUwvLnRlc3Qoc3RyQ2xhc3MpKSYmdHJ5RnVuY3Rpb25PYmplY3QodmFsdWUpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9pcy1nZW5lcmF0b3ItZnVuY3Rpb24vaW5kZXguanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBjYWxsQm91bmQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NhbGwtYm91bmQvaW5kZXguanMiKSxpc0ZuUmVnZXg9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtcmVnZXgtdGVzdC9pbmRleC5qcyIpKC9eXHMqKD86ZnVuY3Rpb24pP1wqLyksaGFzVG9TdHJpbmdUYWc9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2hhcy10b3N0cmluZ3RhZy9zaGFtcy5qcyIpKCksZ2V0UHJvdG89X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2dldC1wcm90by9pbmRleC5qcyIpLHRvU3RyPWNhbGxCb3VuZCgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLGZuVG9TdHI9Y2FsbEJvdW5kKCJGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmciKSxnZXRHZW5lcmF0b3JGdW5jdGlvbj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZ2VuZXJhdG9yLWZ1bmN0aW9uL2luZGV4LmpzIik7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gaXNHZW5lcmF0b3JGdW5jdGlvbihmbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGZuKXJldHVybiExO2lmKGlzRm5SZWdleChmblRvU3RyKGZuKSkpcmV0dXJuITA7aWYoIWhhc1RvU3RyaW5nVGFnKXJldHVybiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PT10b1N0cihmbik7aWYoIWdldFByb3RvKXJldHVybiExO3ZhciBHZW5lcmF0b3JGdW5jdGlvbj1nZXRHZW5lcmF0b3JGdW5jdGlvbigpO3JldHVybiBHZW5lcmF0b3JGdW5jdGlvbiYmZ2V0UHJvdG8oZm4pPT09R2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9pcy1uYW4vaW1wbGVtZW50YXRpb24uanMiKG1vZHVsZSl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGlzTmFOKHZhbHVlKXtyZXR1cm4gdmFsdWUhPXZhbHVlfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9pcy1uYW4vaW5kZXguanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBjYWxsQmluZD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzIiksZGVmaW5lPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9kZWZpbmUtcHJvcGVydGllcy9pbmRleC5qcyIpLGltcGxlbWVudGF0aW9uPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pcy1uYW4vaW1wbGVtZW50YXRpb24uanMiKSxnZXRQb2x5ZmlsbD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaXMtbmFuL3BvbHlmaWxsLmpzIiksc2hpbT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaXMtbmFuL3NoaW0uanMiKSxwb2x5ZmlsbD1jYWxsQmluZChnZXRQb2x5ZmlsbCgpLE51bWJlcik7ZGVmaW5lKHBvbHlmaWxsLHtnZXRQb2x5ZmlsbCxpbXBsZW1lbnRhdGlvbixzaGltfSksbW9kdWxlLmV4cG9ydHM9cG9seWZpbGx9LCIuLi8uLi9ub2RlX21vZHVsZXMvaXMtbmFuL3BvbHlmaWxsLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgaW1wbGVtZW50YXRpb249X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2lzLW5hbi9pbXBsZW1lbnRhdGlvbi5qcyIpO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGdldFBvbHlmaWxsKCl7cmV0dXJuIE51bWJlci5pc05hTiYmTnVtYmVyLmlzTmFOKE5hTikmJiFOdW1iZXIuaXNOYU4oImEiKT9OdW1iZXIuaXNOYU46aW1wbGVtZW50YXRpb259fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2lzLW5hbi9zaGltLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgZGVmaW5lPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9kZWZpbmUtcHJvcGVydGllcy9pbmRleC5qcyIpLGdldFBvbHlmaWxsPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pcy1uYW4vcG9seWZpbGwuanMiKTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBzaGltTnVtYmVySXNOYU4oKXt2YXIgcG9seWZpbGw9Z2V0UG9seWZpbGwoKTtyZXR1cm4gZGVmaW5lKE51bWJlcix7aXNOYU46cG9seWZpbGx9LHtpc05hTjpmdW5jdGlvbiB0ZXN0SXNOYU4oKXtyZXR1cm4gTnVtYmVyLmlzTmFOIT09cG9seWZpbGx9fSkscG9seWZpbGx9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgZm4sY2FsbEJvdW5kPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJvdW5kL2luZGV4LmpzIiksaGFzVG9TdHJpbmdUYWc9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2hhcy10b3N0cmluZ3RhZy9zaGFtcy5qcyIpKCksaGFzT3duPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9oYXNvd24vaW5kZXguanMiKSxnT1BEPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9nb3BkL2luZGV4LmpzIik7aWYoaGFzVG9TdHJpbmdUYWcpe3ZhciAkZXhlYz1jYWxsQm91bmQoIlJlZ0V4cC5wcm90b3R5cGUuZXhlYyIpLGlzUmVnZXhNYXJrZXI9e30sdGhyb3dSZWdleE1hcmtlcj1mdW5jdGlvbigpe3Rocm93IGlzUmVnZXhNYXJrZXJ9LGJhZFN0cmluZ2lmaWVyPXt0b1N0cmluZzp0aHJvd1JlZ2V4TWFya2VyLHZhbHVlT2Y6dGhyb3dSZWdleE1hcmtlcn07InN5bWJvbCI9PXR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUmJihiYWRTdHJpbmdpZmllcltTeW1ib2wudG9QcmltaXRpdmVdPXRocm93UmVnZXhNYXJrZXIpLGZuPWZ1bmN0aW9uIGlzUmVnZXgodmFsdWUpe2lmKCF2YWx1ZXx8Im9iamVjdCIhPXR5cGVvZiB2YWx1ZSlyZXR1cm4hMTt2YXIgZGVzY3JpcHRvcj1nT1BEKHZhbHVlLCJsYXN0SW5kZXgiKTtpZighKGRlc2NyaXB0b3ImJmhhc093bihkZXNjcmlwdG9yLCJ2YWx1ZSIpKSlyZXR1cm4hMTt0cnl7JGV4ZWModmFsdWUsYmFkU3RyaW5naWZpZXIpfWNhdGNoKGUpe3JldHVybiBlPT09aXNSZWdleE1hcmtlcn19fWVsc2V7dmFyICR0b1N0cmluZz1jYWxsQm91bmQoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKTtmbj1mdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKXtyZXR1cm4hKCF2YWx1ZXx8Im9iamVjdCIhPXR5cGVvZiB2YWx1ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIHZhbHVlKSYmIltvYmplY3QgUmVnRXhwXSI9PT0kdG9TdHJpbmcodmFsdWUpfX1tb2R1bGUuZXhwb3J0cz1mbn0sIi4uLy4uL25vZGVfbW9kdWxlcy9pcy10eXBlZC1hcnJheS9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHdoaWNoVHlwZWRBcnJheT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvd2hpY2gtdHlwZWQtYXJyYXkvaW5kZXguanMiKTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBpc1R5cGVkQXJyYXkodmFsdWUpe3JldHVybiEhd2hpY2hUeXBlZEFycmF5KHZhbHVlKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIobW9kdWxlKXt2YXIgdG9TdHJpbmc9e30udG9TdHJpbmc7bW9kdWxlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYXJyKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT10b1N0cmluZy5jYWxsKGFycil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL21hdGgtaW50cmluc2ljcy9hYnMuanMiKG1vZHVsZSl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPU1hdGguYWJzfSwiLi4vLi4vbm9kZV9tb2R1bGVzL21hdGgtaW50cmluc2ljcy9mbG9vci5qcyIobW9kdWxlKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9TWF0aC5mbG9vcn0sIi4uLy4uL25vZGVfbW9kdWxlcy9tYXRoLWludHJpbnNpY3MvaXNOYU4uanMiKG1vZHVsZSl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPU51bWJlci5pc05hTnx8ZnVuY3Rpb24gaXNOYU4oYSl7cmV0dXJuIGEhPWF9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL21hdGgtaW50cmluc2ljcy9tYXguanMiKG1vZHVsZSl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPU1hdGgubWF4fSwiLi4vLi4vbm9kZV9tb2R1bGVzL21hdGgtaW50cmluc2ljcy9taW4uanMiKG1vZHVsZSl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPU1hdGgubWlufSwiLi4vLi4vbm9kZV9tb2R1bGVzL21hdGgtaW50cmluc2ljcy9wb3cuanMiKG1vZHVsZSl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPU1hdGgucG93fSwiLi4vLi4vbm9kZV9tb2R1bGVzL21hdGgtaW50cmluc2ljcy9yb3VuZC5qcyIobW9kdWxlKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9TWF0aC5yb3VuZH0sIi4uLy4uL25vZGVfbW9kdWxlcy9tYXRoLWludHJpbnNpY3Mvc2lnbi5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyICRpc05hTj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL2lzTmFOLmpzIik7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gc2lnbihudW1iZXIpe3JldHVybiAkaXNOYU4obnVtYmVyKXx8MD09PW51bWJlcj9udW1iZXI6bnVtYmVyPDA/LTE6MX19LCIuLi8uLi9ub2RlX21vZHVsZXMvbWQ1LmpzL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgaW5oZXJpdHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKSxIYXNoQmFzZT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzaC1iYXNlL2luZGV4LmpzIiksQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcixBUlJBWTE2PW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gTUQ1KCl7SGFzaEJhc2UuY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OH1mdW5jdGlvbiByb3RsKHgsbil7cmV0dXJuIHg8PG58eD4+PjMyLW59ZnVuY3Rpb24gZm5GKGEsYixjLGQsbSxrLHMpe3JldHVybiByb3RsKGErKGImY3x+YiZkKSttK2t8MCxzKStifDB9ZnVuY3Rpb24gZm5HKGEsYixjLGQsbSxrLHMpe3JldHVybiByb3RsKGErKGImZHxjJn5kKSttK2t8MCxzKStifDB9ZnVuY3Rpb24gZm5IKGEsYixjLGQsbSxrLHMpe3JldHVybiByb3RsKGErKGJeY15kKSttK2t8MCxzKStifDB9ZnVuY3Rpb24gZm5JKGEsYixjLGQsbSxrLHMpe3JldHVybiByb3RsKGErKGNeKGJ8fmQpKSttK2t8MCxzKStifDB9aW5oZXJpdHMoTUQ1LEhhc2hCYXNlKSxNRDUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIE09QVJSQVkxNixpPTA7aTwxNjsrK2kpTVtpXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KmkpO3ZhciBhPXRoaXMuX2EsYj10aGlzLl9iLGM9dGhpcy5fYyxkPXRoaXMuX2Q7YT1mbkYoYSxiLGMsZCxNWzBdLDM2MTQwOTAzNjAsNyksZD1mbkYoZCxhLGIsYyxNWzFdLDM5MDU0MDI3MTAsMTIpLGM9Zm5GKGMsZCxhLGIsTVsyXSw2MDYxMDU4MTksMTcpLGI9Zm5GKGIsYyxkLGEsTVszXSwzMjUwNDQxOTY2LDIyKSxhPWZuRihhLGIsYyxkLE1bNF0sNDExODU0ODM5OSw3KSxkPWZuRihkLGEsYixjLE1bNV0sMTIwMDA4MDQyNiwxMiksYz1mbkYoYyxkLGEsYixNWzZdLDI4MjE3MzU5NTUsMTcpLGI9Zm5GKGIsYyxkLGEsTVs3XSw0MjQ5MjYxMzEzLDIyKSxhPWZuRihhLGIsYyxkLE1bOF0sMTc3MDAzNTQxNiw3KSxkPWZuRihkLGEsYixjLE1bOV0sMjMzNjU1Mjg3OSwxMiksYz1mbkYoYyxkLGEsYixNWzEwXSw0Mjk0OTI1MjMzLDE3KSxiPWZuRihiLGMsZCxhLE1bMTFdLDIzMDQ1NjMxMzQsMjIpLGE9Zm5GKGEsYixjLGQsTVsxMl0sMTgwNDYwMzY4Miw3KSxkPWZuRihkLGEsYixjLE1bMTNdLDQyNTQ2MjYxOTUsMTIpLGM9Zm5GKGMsZCxhLGIsTVsxNF0sMjc5Mjk2NTAwNiwxNyksYT1mbkcoYSxiPWZuRihiLGMsZCxhLE1bMTVdLDEyMzY1MzUzMjksMjIpLGMsZCxNWzFdLDQxMjkxNzA3ODYsNSksZD1mbkcoZCxhLGIsYyxNWzZdLDMyMjU0NjU2NjQsOSksYz1mbkcoYyxkLGEsYixNWzExXSw2NDM3MTc3MTMsMTQpLGI9Zm5HKGIsYyxkLGEsTVswXSwzOTIxMDY5OTk0LDIwKSxhPWZuRyhhLGIsYyxkLE1bNV0sMzU5MzQwODYwNSw1KSxkPWZuRyhkLGEsYixjLE1bMTBdLDM4MDE2MDgzLDkpLGM9Zm5HKGMsZCxhLGIsTVsxNV0sMzYzNDQ4ODk2MSwxNCksYj1mbkcoYixjLGQsYSxNWzRdLDM4ODk0Mjk0NDgsMjApLGE9Zm5HKGEsYixjLGQsTVs5XSw1Njg0NDY0MzgsNSksZD1mbkcoZCxhLGIsYyxNWzE0XSwzMjc1MTYzNjA2LDkpLGM9Zm5HKGMsZCxhLGIsTVszXSw0MTA3NjAzMzM1LDE0KSxiPWZuRyhiLGMsZCxhLE1bOF0sMTE2MzUzMTUwMSwyMCksYT1mbkcoYSxiLGMsZCxNWzEzXSwyODUwMjg1ODI5LDUpLGQ9Zm5HKGQsYSxiLGMsTVsyXSw0MjQzNTYzNTEyLDkpLGM9Zm5HKGMsZCxhLGIsTVs3XSwxNzM1MzI4NDczLDE0KSxhPWZuSChhLGI9Zm5HKGIsYyxkLGEsTVsxMl0sMjM2ODM1OTU2MiwyMCksYyxkLE1bNV0sNDI5NDU4ODczOCw0KSxkPWZuSChkLGEsYixjLE1bOF0sMjI3MjM5MjgzMywxMSksYz1mbkgoYyxkLGEsYixNWzExXSwxODM5MDMwNTYyLDE2KSxiPWZuSChiLGMsZCxhLE1bMTRdLDQyNTk2NTc3NDAsMjMpLGE9Zm5IKGEsYixjLGQsTVsxXSwyNzYzOTc1MjM2LDQpLGQ9Zm5IKGQsYSxiLGMsTVs0XSwxMjcyODkzMzUzLDExKSxjPWZuSChjLGQsYSxiLE1bN10sNDEzOTQ2OTY2NCwxNiksYj1mbkgoYixjLGQsYSxNWzEwXSwzMjAwMjM2NjU2LDIzKSxhPWZuSChhLGIsYyxkLE1bMTNdLDY4MTI3OTE3NCw0KSxkPWZuSChkLGEsYixjLE1bMF0sMzkzNjQzMDA3NCwxMSksYz1mbkgoYyxkLGEsYixNWzNdLDM1NzI0NDUzMTcsMTYpLGI9Zm5IKGIsYyxkLGEsTVs2XSw3NjAyOTE4OSwyMyksYT1mbkgoYSxiLGMsZCxNWzldLDM2NTQ2MDI4MDksNCksZD1mbkgoZCxhLGIsYyxNWzEyXSwzODczMTUxNDYxLDExKSxjPWZuSChjLGQsYSxiLE1bMTVdLDUzMDc0MjUyMCwxNiksYT1mbkkoYSxiPWZuSChiLGMsZCxhLE1bMl0sMzI5OTYyODY0NSwyMyksYyxkLE1bMF0sNDA5NjMzNjQ1Miw2KSxkPWZuSShkLGEsYixjLE1bN10sMTEyNjg5MTQxNSwxMCksYz1mbkkoYyxkLGEsYixNWzE0XSwyODc4NjEyMzkxLDE1KSxiPWZuSShiLGMsZCxhLE1bNV0sNDIzNzUzMzI0MSwyMSksYT1mbkkoYSxiLGMsZCxNWzEyXSwxNzAwNDg1NTcxLDYpLGQ9Zm5JKGQsYSxiLGMsTVszXSwyMzk5OTgwNjkwLDEwKSxjPWZuSShjLGQsYSxiLE1bMTBdLDQyOTM5MTU3NzMsMTUpLGI9Zm5JKGIsYyxkLGEsTVsxXSwyMjQwMDQ0NDk3LDIxKSxhPWZuSShhLGIsYyxkLE1bOF0sMTg3MzMxMzM1OSw2KSxkPWZuSShkLGEsYixjLE1bMTVdLDQyNjQzNTU1NTIsMTApLGM9Zm5JKGMsZCxhLGIsTVs2XSwyNzM0NzY4OTE2LDE1KSxiPWZuSShiLGMsZCxhLE1bMTNdLDEzMDkxNTE2NDksMjEpLGE9Zm5JKGEsYixjLGQsTVs0XSw0MTQ5NDQ0MjI2LDYpLGQ9Zm5JKGQsYSxiLGMsTVsxMV0sMzE3NDc1NjkxNywxMCksYz1mbkkoYyxkLGEsYixNWzJdLDcxODc4NzI1OSwxNSksYj1mbkkoYixjLGQsYSxNWzldLDM5NTE0ODE3NDUsMjEpLHRoaXMuX2E9dGhpcy5fYSthfDAsdGhpcy5fYj10aGlzLl9iK2J8MCx0aGlzLl9jPXRoaXMuX2MrY3wwLHRoaXMuX2Q9dGhpcy5fZCtkfDB9LE1ENS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBidWZmZXI9QnVmZmVyLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLGJ1ZmZlci53cml0ZUludDMyTEUodGhpcy5fYiw0KSxidWZmZXIud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxidWZmZXJ9LG1vZHVsZS5leHBvcnRzPU1ENX0sIi4uLy4uL25vZGVfbW9kdWxlcy9taWxsZXItcmFiaW4vbGliL21yLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBibj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbWlsbGVyLXJhYmluL25vZGVfbW9kdWxlcy9ibi5qcy9saWIvYm4uanMiKSxicm9yYW5kPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm9yYW5kL2luZGV4LmpzIik7ZnVuY3Rpb24gTWlsbGVyUmFiaW4ocmFuZCl7dGhpcy5yYW5kPXJhbmR8fG5ldyBicm9yYW5kLlJhbmR9bW9kdWxlLmV4cG9ydHM9TWlsbGVyUmFiaW4sTWlsbGVyUmFiaW4uY3JlYXRlPWZ1bmN0aW9uIGNyZWF0ZShyYW5kKXtyZXR1cm4gbmV3IE1pbGxlclJhYmluKHJhbmQpfSxNaWxsZXJSYWJpbi5wcm90b3R5cGUuX3JhbmRiZWxvdz1mdW5jdGlvbiBfcmFuZGJlbG93KG4pe3ZhciBsZW49bi5iaXRMZW5ndGgoKSxtaW5fYnl0ZXM9TWF0aC5jZWlsKGxlbi84KTtkb3t2YXIgYT1uZXcgYm4odGhpcy5yYW5kLmdlbmVyYXRlKG1pbl9ieXRlcykpfXdoaWxlKGEuY21wKG4pPj0wKTtyZXR1cm4gYX0sTWlsbGVyUmFiaW4ucHJvdG90eXBlLl9yYW5kcmFuZ2U9ZnVuY3Rpb24gX3JhbmRyYW5nZShzdGFydCxzdG9wKXt2YXIgc2l6ZT1zdG9wLnN1YihzdGFydCk7cmV0dXJuIHN0YXJ0LmFkZCh0aGlzLl9yYW5kYmVsb3coc2l6ZSkpfSxNaWxsZXJSYWJpbi5wcm90b3R5cGUudGVzdD1mdW5jdGlvbiB0ZXN0KG4sayxjYil7dmFyIGxlbj1uLmJpdExlbmd0aCgpLHJlZD1ibi5tb250KG4pLHJvbmU9bmV3IGJuKDEpLnRvUmVkKHJlZCk7a3x8KGs9TWF0aC5tYXgoMSxsZW4vNDh8MCkpO2Zvcih2YXIgbjE9bi5zdWJuKDEpLHM9MDshbjEudGVzdG4ocyk7cysrKTtmb3IodmFyIGQ9bi5zaHJuKHMpLHJuMT1uMS50b1JlZChyZWQpO2s+MDtrLS0pe3ZhciBhPXRoaXMuX3JhbmRyYW5nZShuZXcgYm4oMiksbjEpO2NiJiZjYihhKTt2YXIgeD1hLnRvUmVkKHJlZCkucmVkUG93KGQpO2lmKDAhPT14LmNtcChyb25lKSYmMCE9PXguY21wKHJuMSkpe2Zvcih2YXIgaT0xO2k8cztpKyspe2lmKDA9PT0oeD14LnJlZFNxcigpKS5jbXAocm9uZSkpcmV0dXJuITE7aWYoMD09PXguY21wKHJuMSkpYnJlYWt9aWYoaT09PXMpcmV0dXJuITF9fXJldHVybiEwfSxNaWxsZXJSYWJpbi5wcm90b3R5cGUuZ2V0RGl2aXNvcj1mdW5jdGlvbiBnZXREaXZpc29yKG4sayl7dmFyIGxlbj1uLmJpdExlbmd0aCgpLHJlZD1ibi5tb250KG4pLHJvbmU9bmV3IGJuKDEpLnRvUmVkKHJlZCk7a3x8KGs9TWF0aC5tYXgoMSxsZW4vNDh8MCkpO2Zvcih2YXIgbjE9bi5zdWJuKDEpLHM9MDshbjEudGVzdG4ocyk7cysrKTtmb3IodmFyIGQ9bi5zaHJuKHMpLHJuMT1uMS50b1JlZChyZWQpO2s+MDtrLS0pe3ZhciBhPXRoaXMuX3JhbmRyYW5nZShuZXcgYm4oMiksbjEpLGc9bi5nY2QoYSk7aWYoMCE9PWcuY21wbigxKSlyZXR1cm4gZzt2YXIgeD1hLnRvUmVkKHJlZCkucmVkUG93KGQpO2lmKDAhPT14LmNtcChyb25lKSYmMCE9PXguY21wKHJuMSkpe2Zvcih2YXIgaT0xO2k8cztpKyspe2lmKDA9PT0oeD14LnJlZFNxcigpKS5jbXAocm9uZSkpcmV0dXJuIHguZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKG4pO2lmKDA9PT14LmNtcChybjEpKWJyZWFrfWlmKGk9PT1zKXJldHVybih4PXgucmVkU3FyKCkpLmZyb21SZWQoKS5zdWJuKDEpLmdjZChuKX19cmV0dXJuITF9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL21pbGxlci1yYWJpbi9ub2RlX21vZHVsZXMvYm4uanMvbGliL2JuLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGFzc2VydCh2YWwsbXNnKXtpZighdmFsKXRocm93IG5ldyBFcnJvcihtc2d8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gaW5oZXJpdHMoY3RvcixzdXBlckN0b3Ipe2N0b3Iuc3VwZXJfPXN1cGVyQ3Rvcjt2YXIgVGVtcEN0b3I9ZnVuY3Rpb24oKXt9O1RlbXBDdG9yLnByb3RvdHlwZT1zdXBlckN0b3IucHJvdG90eXBlLGN0b3IucHJvdG90eXBlPW5ldyBUZW1wQ3RvcixjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jdG9yfWZ1bmN0aW9uIEJOKG51bWJlcixiYXNlLGVuZGlhbil7aWYoQk4uaXNCTihudW1iZXIpKXJldHVybiBudW1iZXI7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PW51bWJlciYmKCJsZSIhPT1iYXNlJiYiYmUiIT09YmFzZXx8KGVuZGlhbj1iYXNlLGJhc2U9MTApLHRoaXMuX2luaXQobnVtYmVyfHwwLGJhc2V8fDEwLGVuZGlhbnx8ImJlIikpfXZhciBCdWZmZXI7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9Qk46ZXhwb3J0cy5CTj1CTixCTi5CTj1CTixCTi53b3JkU2l6ZT0yNjt0cnl7QnVmZmVyPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcn1jYXRjaChlKXt9ZnVuY3Rpb24gcGFyc2VIZXg0Qml0cyhzdHJpbmcsaW5kZXgpe3ZhciBjPXN0cmluZy5jaGFyQ29kZUF0KGluZGV4KTtyZXR1cm4gYz49NjUmJmM8PTcwP2MtNTU6Yz49OTcmJmM8PTEwMj9jLTg3OmMtNDgmMTV9ZnVuY3Rpb24gcGFyc2VIZXhCeXRlKHN0cmluZyxsb3dlckJvdW5kLGluZGV4KXt2YXIgcj1wYXJzZUhleDRCaXRzKHN0cmluZyxpbmRleCk7cmV0dXJuIGluZGV4LTE+PWxvd2VyQm91bmQmJihyfD1wYXJzZUhleDRCaXRzKHN0cmluZyxpbmRleC0xKTw8NCkscn1mdW5jdGlvbiBwYXJzZUJhc2Uoc3RyLHN0YXJ0LGVuZCxtdWwpe2Zvcih2YXIgcj0wLGxlbj1NYXRoLm1pbihzdHIubGVuZ3RoLGVuZCksaT1zdGFydDtpPGxlbjtpKyspe3ZhciBjPXN0ci5jaGFyQ29kZUF0KGkpLTQ4O3IqPW11bCxyKz1jPj00OT9jLTQ5KzEwOmM+PTE3P2MtMTcrMTA6Y31yZXR1cm4gcn1CTi5pc0JOPWZ1bmN0aW9uIGlzQk4obnVtKXtyZXR1cm4gbnVtIGluc3RhbmNlb2YgQk58fG51bGwhPT1udW0mJiJvYmplY3QiPT10eXBlb2YgbnVtJiZudW0uY29uc3RydWN0b3Iud29yZFNpemU9PT1CTi53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShudW0ud29yZHMpfSxCTi5tYXg9ZnVuY3Rpb24gbWF4KGxlZnQscmlnaHQpe3JldHVybiBsZWZ0LmNtcChyaWdodCk+MD9sZWZ0OnJpZ2h0fSxCTi5taW49ZnVuY3Rpb24gbWluKGxlZnQscmlnaHQpe3JldHVybiBsZWZ0LmNtcChyaWdodCk8MD9sZWZ0OnJpZ2h0fSxCTi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24gaW5pdChudW1iZXIsYmFzZSxlbmRpYW4pe2lmKCJudW1iZXIiPT10eXBlb2YgbnVtYmVyKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKG51bWJlcixiYXNlLGVuZGlhbik7aWYoIm9iamVjdCI9PXR5cGVvZiBudW1iZXIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShudW1iZXIsYmFzZSxlbmRpYW4pOyJoZXgiPT09YmFzZSYmKGJhc2U9MTYpLGFzc2VydChiYXNlPT09KDB8YmFzZSkmJmJhc2U+PTImJmJhc2U8PTM2KTt2YXIgc3RhcnQ9MDsiLSI9PT0obnVtYmVyPW51bWJlci50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihzdGFydCsrLHRoaXMubmVnYXRpdmU9MSksc3RhcnQ8bnVtYmVyLmxlbmd0aCYmKDE2PT09YmFzZT90aGlzLl9wYXJzZUhleChudW1iZXIsc3RhcnQsZW5kaWFuKToodGhpcy5fcGFyc2VCYXNlKG51bWJlcixiYXNlLHN0YXJ0KSwibGUiPT09ZW5kaWFuJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYmFzZSxlbmRpYW4pKSl9LEJOLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbiBfaW5pdE51bWJlcihudW1iZXIsYmFzZSxlbmRpYW4pe251bWJlcjwwJiYodGhpcy5uZWdhdGl2ZT0xLG51bWJlcj0tbnVtYmVyKSxudW1iZXI8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJm51bWJlcl0sdGhpcy5sZW5ndGg9MSk6bnVtYmVyPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJm51bWJlcixudW1iZXIvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihhc3NlcnQobnVtYmVyPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJm51bWJlcixudW1iZXIvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PWVuZGlhbiYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGJhc2UsZW5kaWFuKX0sQk4ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24gX2luaXRBcnJheShudW1iZXIsYmFzZSxlbmRpYW4pe2lmKGFzc2VydCgibnVtYmVyIj09dHlwZW9mIG51bWJlci5sZW5ndGgpLG51bWJlci5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwobnVtYmVyLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBqLHcsb2ZmPTA7aWYoImJlIj09PWVuZGlhbilmb3IoaT1udW1iZXIubGVuZ3RoLTEsaj0wO2k+PTA7aS09Myl3PW51bWJlcltpXXxudW1iZXJbaS0xXTw8OHxudW1iZXJbaS0yXTw8MTYsdGhpcy53b3Jkc1tqXXw9dzw8b2ZmJjY3MTA4ODYzLHRoaXMud29yZHNbaisxXT13Pj4+MjYtb2ZmJjY3MTA4ODYzLChvZmYrPTI0KT49MjYmJihvZmYtPTI2LGorKyk7ZWxzZSBpZigibGUiPT09ZW5kaWFuKWZvcihpPTAsaj0wO2k8bnVtYmVyLmxlbmd0aDtpKz0zKXc9bnVtYmVyW2ldfG51bWJlcltpKzFdPDw4fG51bWJlcltpKzJdPDwxNix0aGlzLndvcmRzW2pdfD13PDxvZmYmNjcxMDg4NjMsdGhpcy53b3Jkc1tqKzFdPXc+Pj4yNi1vZmYmNjcxMDg4NjMsKG9mZis9MjQpPj0yNiYmKG9mZi09MjYsaisrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uIF9wYXJzZUhleChudW1iZXIsc3RhcnQsZW5kaWFuKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKG51bWJlci5sZW5ndGgtc3RhcnQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIHcsb2ZmPTAsaj0wO2lmKCJiZSI9PT1lbmRpYW4pZm9yKGk9bnVtYmVyLmxlbmd0aC0xO2k+PXN0YXJ0O2ktPTIpdz1wYXJzZUhleEJ5dGUobnVtYmVyLHN0YXJ0LGkpPDxvZmYsdGhpcy53b3Jkc1tqXXw9NjcxMDg4NjMmdyxvZmY+PTE4PyhvZmYtPTE4LGorPTEsdGhpcy53b3Jkc1tqXXw9dz4+PjI2KTpvZmYrPTg7ZWxzZSBmb3IoaT0obnVtYmVyLmxlbmd0aC1zdGFydCklMj09MD9zdGFydCsxOnN0YXJ0O2k8bnVtYmVyLmxlbmd0aDtpKz0yKXc9cGFyc2VIZXhCeXRlKG51bWJlcixzdGFydCxpKTw8b2ZmLHRoaXMud29yZHNbal18PTY3MTA4ODYzJncsb2ZmPj0xOD8ob2ZmLT0xOCxqKz0xLHRoaXMud29yZHNbal18PXc+Pj4yNik6b2ZmKz04O3RoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24gX3BhcnNlQmFzZShudW1iZXIsYmFzZSxzdGFydCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIGxpbWJMZW49MCxsaW1iUG93PTE7bGltYlBvdzw9NjcxMDg4NjM7bGltYlBvdyo9YmFzZSlsaW1iTGVuKys7bGltYkxlbi0tLGxpbWJQb3c9bGltYlBvdy9iYXNlfDA7Zm9yKHZhciB0b3RhbD1udW1iZXIubGVuZ3RoLXN0YXJ0LG1vZD10b3RhbCVsaW1iTGVuLGVuZD1NYXRoLm1pbih0b3RhbCx0b3RhbC1tb2QpK3N0YXJ0LHdvcmQ9MCxpPXN0YXJ0O2k8ZW5kO2krPWxpbWJMZW4pd29yZD1wYXJzZUJhc2UobnVtYmVyLGksaStsaW1iTGVuLGJhc2UpLHRoaXMuaW11bG4obGltYlBvdyksdGhpcy53b3Jkc1swXSt3b3JkPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXdvcmQ6dGhpcy5faWFkZG4od29yZCk7aWYoMCE9PW1vZCl7dmFyIHBvdz0xO2Zvcih3b3JkPXBhcnNlQmFzZShudW1iZXIsaSxudW1iZXIubGVuZ3RoLGJhc2UpLGk9MDtpPG1vZDtpKyspcG93Kj1iYXNlO3RoaXMuaW11bG4ocG93KSx0aGlzLndvcmRzWzBdK3dvcmQ8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9d29yZDp0aGlzLl9pYWRkbih3b3JkKX10aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uIGNvcHkoZGVzdCl7ZGVzdC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWRlc3Qud29yZHNbaV09dGhpcy53b3Jkc1tpXTtkZXN0Lmxlbmd0aD10aGlzLmxlbmd0aCxkZXN0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZGVzdC5yZWQ9dGhpcy5yZWR9LEJOLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbiBjbG9uZSgpe3ZhciByPW5ldyBCTihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHIpLHJ9LEJOLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uIF9leHBhbmQoc2l6ZSl7Zm9yKDt0aGlzLmxlbmd0aDxzaXplOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEJOLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbiBzdHJpcCgpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEJOLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24gX25vcm1TaWduKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEJOLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uIGluc3BlY3QoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIHplcm9zPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLGdyb3VwU2l6ZXM9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sZ3JvdXBCYXNlcz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBzbWFsbE11bFRvKHNlbGYsbnVtLG91dCl7b3V0Lm5lZ2F0aXZlPW51bS5uZWdhdGl2ZV5zZWxmLm5lZ2F0aXZlO3ZhciBsZW49c2VsZi5sZW5ndGgrbnVtLmxlbmd0aHwwO291dC5sZW5ndGg9bGVuLGxlbj1sZW4tMXwwO3ZhciBhPTB8c2VsZi53b3Jkc1swXSxiPTB8bnVtLndvcmRzWzBdLHI9YSpiLGxvPTY3MTA4ODYzJnIsY2Fycnk9ci82NzEwODg2NHwwO291dC53b3Jkc1swXT1sbztmb3IodmFyIGs9MTtrPGxlbjtrKyspe2Zvcih2YXIgbmNhcnJ5PWNhcnJ5Pj4+MjYscndvcmQ9NjcxMDg4NjMmY2FycnksbWF4Sj1NYXRoLm1pbihrLG51bS5sZW5ndGgtMSksaj1NYXRoLm1heCgwLGstc2VsZi5sZW5ndGgrMSk7ajw9bWF4SjtqKyspe3ZhciBpPWstanwwO25jYXJyeSs9KHI9KGE9MHxzZWxmLndvcmRzW2ldKSooYj0wfG51bS53b3Jkc1tqXSkrcndvcmQpLzY3MTA4ODY0fDAscndvcmQ9NjcxMDg4NjMmcn1vdXQud29yZHNba109MHxyd29yZCxjYXJyeT0wfG5jYXJyeX1yZXR1cm4gMCE9PWNhcnJ5P291dC53b3Jkc1trXT0wfGNhcnJ5Om91dC5sZW5ndGgtLSxvdXQuc3RyaXAoKX1CTi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24gdG9TdHJpbmcoYmFzZSxwYWRkaW5nKXt2YXIgb3V0O2lmKHBhZGRpbmc9MHxwYWRkaW5nfHwxLDE2PT09KGJhc2U9YmFzZXx8MTApfHwiaGV4Ij09PWJhc2Upe291dD0iIjtmb3IodmFyIG9mZj0wLGNhcnJ5PTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgdz10aGlzLndvcmRzW2ldLHdvcmQ9KDE2Nzc3MjE1Jih3PDxvZmZ8Y2FycnkpKS50b1N0cmluZygxNik7Y2Fycnk9dz4+PjI0LW9mZiYxNjc3NzIxNSwob2ZmKz0yKT49MjYmJihvZmYtPTI2LGktLSksb3V0PTAhPT1jYXJyeXx8aSE9PXRoaXMubGVuZ3RoLTE/emVyb3NbNi13b3JkLmxlbmd0aF0rd29yZCtvdXQ6d29yZCtvdXR9Zm9yKDAhPT1jYXJyeSYmKG91dD1jYXJyeS50b1N0cmluZygxNikrb3V0KTtvdXQubGVuZ3RoJXBhZGRpbmchPT0wOylvdXQ9IjAiK291dDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihvdXQ9Ii0iK291dCksb3V0fWlmKGJhc2U9PT0oMHxiYXNlKSYmYmFzZT49MiYmYmFzZTw9MzYpe3ZhciBncm91cFNpemU9Z3JvdXBTaXplc1tiYXNlXSxncm91cEJhc2U9Z3JvdXBCYXNlc1tiYXNlXTtvdXQ9IiI7dmFyIGM9dGhpcy5jbG9uZSgpO2ZvcihjLm5lZ2F0aXZlPTA7IWMuaXNaZXJvKCk7KXt2YXIgcj1jLm1vZG4oZ3JvdXBCYXNlKS50b1N0cmluZyhiYXNlKTtvdXQ9KGM9Yy5pZGl2bihncm91cEJhc2UpKS5pc1plcm8oKT9yK291dDp6ZXJvc1tncm91cFNpemUtci5sZW5ndGhdK3Irb3V0fWZvcih0aGlzLmlzWmVybygpJiYob3V0PSIwIitvdXQpO291dC5sZW5ndGglcGFkZGluZyE9PTA7KW91dD0iMCIrb3V0O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKG91dD0iLSIrb3V0KSxvdXR9YXNzZXJ0KCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEJOLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbiB0b051bWJlcigpe3ZhciByZXQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3JldCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3JldCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmFzc2VydCghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXJldDpyZXR9LEJOLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24gdG9KU09OKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxCTi5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24gdG9CdWZmZXIoZW5kaWFuLGxlbmd0aCl7cmV0dXJuIGFzc2VydCh2b2lkIDAhPT1CdWZmZXIpLHRoaXMudG9BcnJheUxpa2UoQnVmZmVyLGVuZGlhbixsZW5ndGgpfSxCTi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbiB0b0FycmF5KGVuZGlhbixsZW5ndGgpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGVuZGlhbixsZW5ndGgpfSxCTi5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24gdG9BcnJheUxpa2UoQXJyYXlUeXBlLGVuZGlhbixsZW5ndGgpe3ZhciBieXRlTGVuZ3RoPXRoaXMuYnl0ZUxlbmd0aCgpLHJlcUxlbmd0aD1sZW5ndGh8fE1hdGgubWF4KDEsYnl0ZUxlbmd0aCk7YXNzZXJ0KGJ5dGVMZW5ndGg8PXJlcUxlbmd0aCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGFzc2VydChyZXFMZW5ndGg+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBiLGksbGl0dGxlRW5kaWFuPSJsZSI9PT1lbmRpYW4scmVzPW5ldyBBcnJheVR5cGUocmVxTGVuZ3RoKSxxPXRoaXMuY2xvbmUoKTtpZihsaXR0bGVFbmRpYW4pe2ZvcihpPTA7IXEuaXNaZXJvKCk7aSsrKWI9cS5hbmRsbigyNTUpLHEuaXVzaHJuKDgpLHJlc1tpXT1iO2Zvcig7aTxyZXFMZW5ndGg7aSsrKXJlc1tpXT0wfWVsc2V7Zm9yKGk9MDtpPHJlcUxlbmd0aC1ieXRlTGVuZ3RoO2krKylyZXNbaV09MDtmb3IoaT0wOyFxLmlzWmVybygpO2krKyliPXEuYW5kbG4oMjU1KSxxLml1c2hybig4KSxyZXNbcmVxTGVuZ3RoLWktMV09Yn1yZXR1cm4gcmVzfSxNYXRoLmNsejMyP0JOLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uIF9jb3VudEJpdHModyl7cmV0dXJuIDMyLU1hdGguY2x6MzIodyl9OkJOLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uIF9jb3VudEJpdHModyl7dmFyIHQ9dyxyPTA7cmV0dXJuIHQ+PTQwOTYmJihyKz0xMyx0Pj4+PTEzKSx0Pj02NCYmKHIrPTcsdD4+Pj03KSx0Pj04JiYocis9NCx0Pj4+PTQpLHQ+PTImJihyKz0yLHQ+Pj49Mikscit0fSxCTi5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uIF96ZXJvQml0cyh3KXtpZigwPT09dylyZXR1cm4gMjY7dmFyIHQ9dyxyPTA7cmV0dXJuIDgxOTEmdHx8KHIrPTEzLHQ+Pj49MTMpLDEyNyZ0fHwocis9Nyx0Pj4+PTcpLDE1JnR8fChyKz00LHQ+Pj49NCksMyZ0fHwocis9Mix0Pj4+PTIpLDEmdHx8cisrLHJ9LEJOLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24gYml0TGVuZ3RoKCl7dmFyIHc9dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSxoaT10aGlzLl9jb3VudEJpdHModyk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStoaX0sQk4ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uIHplcm9CaXRzKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHI9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciBiPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbaV0pO2lmKHIrPWIsMjYhPT1iKWJyZWFrfXJldHVybiByfSxCTi5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbiBieXRlTGVuZ3RoKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxCTi5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uIHRvVHdvcyh3aWR0aCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4od2lkdGgpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sQk4ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uIGZyb21Ud29zKHdpZHRoKXtyZXR1cm4gdGhpcy50ZXN0bih3aWR0aC0xKT90aGlzLm5vdG4od2lkdGgpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEJOLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbiBpc05lZygpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sQk4ucHJvdG90eXBlLm5lZz1mdW5jdGlvbiBuZWcoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sQk4ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24gaW5lZygpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sQk4ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24gaXVvcihudW0pe2Zvcig7dGhpcy5sZW5ndGg8bnVtLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgaT0wO2k8bnVtLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT10aGlzLndvcmRzW2ldfG51bS53b3Jkc1tpXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uIGlvcihudW0pe3JldHVybiBhc3NlcnQoMD09PSh0aGlzLm5lZ2F0aXZlfG51bS5uZWdhdGl2ZSkpLHRoaXMuaXVvcihudW0pfSxCTi5wcm90b3R5cGUub3I9ZnVuY3Rpb24gb3IobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKG51bSk6bnVtLmNsb25lKCkuaW9yKHRoaXMpfSxCTi5wcm90b3R5cGUudW9yPWZ1bmN0aW9uIHVvcihudW0pe3JldHVybiB0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKG51bSk6bnVtLmNsb25lKCkuaXVvcih0aGlzKX0sQk4ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uIGl1YW5kKG51bSl7dmFyIGI7Yj10aGlzLmxlbmd0aD5udW0ubGVuZ3RoP251bTp0aGlzO2Zvcih2YXIgaT0wO2k8Yi5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09dGhpcy53b3Jkc1tpXSZudW0ud29yZHNbaV07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24gaWFuZChudW0pe3JldHVybiBhc3NlcnQoMD09PSh0aGlzLm5lZ2F0aXZlfG51bS5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQobnVtKX0sQk4ucHJvdG90eXBlLmFuZD1mdW5jdGlvbiBhbmQobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChudW0pOm51bS5jbG9uZSgpLmlhbmQodGhpcyl9LEJOLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uIHVhbmQobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQobnVtKTpudW0uY2xvbmUoKS5pdWFuZCh0aGlzKX0sQk4ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uIGl1eG9yKG51bSl7dmFyIGEsYjt0aGlzLmxlbmd0aD5udW0ubGVuZ3RoPyhhPXRoaXMsYj1udW0pOihhPW51bSxiPXRoaXMpO2Zvcih2YXIgaT0wO2k8Yi5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09YS53b3Jkc1tpXV5iLndvcmRzW2ldO2lmKHRoaXMhPT1hKWZvcig7aTxhLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT1hLndvcmRzW2ldO3JldHVybiB0aGlzLmxlbmd0aD1hLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uIGl4b3IobnVtKXtyZXR1cm4gYXNzZXJ0KDA9PT0odGhpcy5uZWdhdGl2ZXxudW0ubmVnYXRpdmUpKSx0aGlzLml1eG9yKG51bSl9LEJOLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24geG9yKG51bSl7cmV0dXJuIHRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IobnVtKTpudW0uY2xvbmUoKS5peG9yKHRoaXMpfSxCTi5wcm90b3R5cGUudXhvcj1mdW5jdGlvbiB1eG9yKG51bSl7cmV0dXJuIHRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKG51bSk6bnVtLmNsb25lKCkuaXV4b3IodGhpcyl9LEJOLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbiBpbm90bih3aWR0aCl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2Ygd2lkdGgmJndpZHRoPj0wKTt2YXIgYnl0ZXNOZWVkZWQ9MHxNYXRoLmNlaWwod2lkdGgvMjYpLGJpdHNMZWZ0PXdpZHRoJTI2O3RoaXMuX2V4cGFuZChieXRlc05lZWRlZCksYml0c0xlZnQ+MCYmYnl0ZXNOZWVkZWQtLTtmb3IodmFyIGk9MDtpPGJ5dGVzTmVlZGVkO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiBiaXRzTGVmdD4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtYml0c0xlZnQpLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24gbm90bih3aWR0aCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih3aWR0aCl9LEJOLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uIHNldG4oYml0LHZhbCl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0JiZiaXQ+PTApO3ZhciBvZmY9Yml0LzI2fDAsd2JpdD1iaXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChvZmYrMSksdGhpcy53b3Jkc1tvZmZdPXZhbD90aGlzLndvcmRzW29mZl18MTw8d2JpdDp0aGlzLndvcmRzW29mZl0mfigxPDx3Yml0KSx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uIGlhZGQobnVtKXt2YXIgcixhLGI7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1udW0ubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxyPXRoaXMuaXN1YihudW0pLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PW51bS5uZWdhdGl2ZSlyZXR1cm4gbnVtLm5lZ2F0aXZlPTAscj10aGlzLmlzdWIobnVtKSxudW0ubmVnYXRpdmU9MSxyLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPm51bS5sZW5ndGg/KGE9dGhpcyxiPW51bSk6KGE9bnVtLGI9dGhpcyk7Zm9yKHZhciBjYXJyeT0wLGk9MDtpPGIubGVuZ3RoO2krKylyPSgwfGEud29yZHNbaV0pKygwfGIud29yZHNbaV0pK2NhcnJ5LHRoaXMud29yZHNbaV09NjcxMDg4NjMmcixjYXJyeT1yPj4+MjY7Zm9yKDswIT09Y2FycnkmJmk8YS5sZW5ndGg7aSsrKXI9KDB8YS53b3Jkc1tpXSkrY2FycnksdGhpcy53b3Jkc1tpXT02NzEwODg2MyZyLGNhcnJ5PXI+Pj4yNjtpZih0aGlzLmxlbmd0aD1hLmxlbmd0aCwwIT09Y2FycnkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Y2FycnksdGhpcy5sZW5ndGgrKztlbHNlIGlmKGEhPT10aGlzKWZvcig7aTxhLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT1hLndvcmRzW2ldO3JldHVybiB0aGlzfSxCTi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uIGFkZChudW0pe3ZhciByZXM7cmV0dXJuIDAhPT1udW0ubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhudW0ubmVnYXRpdmU9MCxyZXM9dGhpcy5zdWIobnVtKSxudW0ubmVnYXRpdmVePTEscmVzKTowPT09bnVtLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHJlcz1udW0uc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxyZXMpOnRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQobnVtKTpudW0uY2xvbmUoKS5pYWRkKHRoaXMpfSxCTi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbiBpc3ViKG51bSl7aWYoMCE9PW51bS5uZWdhdGl2ZSl7bnVtLm5lZ2F0aXZlPTA7dmFyIHI9dGhpcy5pYWRkKG51bSk7cmV0dXJuIG51bS5uZWdhdGl2ZT0xLHIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQobnVtKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgYSxiLGNtcD10aGlzLmNtcChudW0pO2lmKDA9PT1jbXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO2NtcD4wPyhhPXRoaXMsYj1udW0pOihhPW51bSxiPXRoaXMpO2Zvcih2YXIgY2Fycnk9MCxpPTA7aTxiLmxlbmd0aDtpKyspY2Fycnk9KHI9KDB8YS53b3Jkc1tpXSktKDB8Yi53b3Jkc1tpXSkrY2FycnkpPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJnI7Zm9yKDswIT09Y2FycnkmJmk8YS5sZW5ndGg7aSsrKWNhcnJ5PShyPSgwfGEud29yZHNbaV0pK2NhcnJ5KT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZyO2lmKDA9PT1jYXJyeSYmaTxhLmxlbmd0aCYmYSE9PXRoaXMpZm9yKDtpPGEubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPWEud29yZHNbaV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGkpLGEhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24gc3ViKG51bSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKG51bSl9O3ZhciBjb21iMTBNdWxUbz1mdW5jdGlvbiBjb21iMTBNdWxUbyhzZWxmLG51bSxvdXQpe3ZhciBsbyxtaWQsaGksYT1zZWxmLndvcmRzLGI9bnVtLndvcmRzLG89b3V0LndvcmRzLGM9MCxhMD0wfGFbMF0sYWwwPTgxOTEmYTAsYWgwPWEwPj4+MTMsYTE9MHxhWzFdLGFsMT04MTkxJmExLGFoMT1hMT4+PjEzLGEyPTB8YVsyXSxhbDI9ODE5MSZhMixhaDI9YTI+Pj4xMyxhMz0wfGFbM10sYWwzPTgxOTEmYTMsYWgzPWEzPj4+MTMsYTQ9MHxhWzRdLGFsND04MTkxJmE0LGFoND1hND4+PjEzLGE1PTB8YVs1XSxhbDU9ODE5MSZhNSxhaDU9YTU+Pj4xMyxhNj0wfGFbNl0sYWw2PTgxOTEmYTYsYWg2PWE2Pj4+MTMsYTc9MHxhWzddLGFsNz04MTkxJmE3LGFoNz1hNz4+PjEzLGE4PTB8YVs4XSxhbDg9ODE5MSZhOCxhaDg9YTg+Pj4xMyxhOT0wfGFbOV0sYWw5PTgxOTEmYTksYWg5PWE5Pj4+MTMsYjA9MHxiWzBdLGJsMD04MTkxJmIwLGJoMD1iMD4+PjEzLGIxPTB8YlsxXSxibDE9ODE5MSZiMSxiaDE9YjE+Pj4xMyxiMj0wfGJbMl0sYmwyPTgxOTEmYjIsYmgyPWIyPj4+MTMsYjM9MHxiWzNdLGJsMz04MTkxJmIzLGJoMz1iMz4+PjEzLGI0PTB8Yls0XSxibDQ9ODE5MSZiNCxiaDQ9YjQ+Pj4xMyxiNT0wfGJbNV0sYmw1PTgxOTEmYjUsYmg1PWI1Pj4+MTMsYjY9MHxiWzZdLGJsNj04MTkxJmI2LGJoNj1iNj4+PjEzLGI3PTB8Yls3XSxibDc9ODE5MSZiNyxiaDc9Yjc+Pj4xMyxiOD0wfGJbOF0sYmw4PTgxOTEmYjgsYmg4PWI4Pj4+MTMsYjk9MHxiWzldLGJsOT04MTkxJmI5LGJoOT1iOT4+PjEzO291dC5uZWdhdGl2ZT1zZWxmLm5lZ2F0aXZlXm51bS5uZWdhdGl2ZSxvdXQubGVuZ3RoPTE5O3ZhciB3MD0oYysobG89TWF0aC5pbXVsKGFsMCxibDApKXwwKSsoKDgxOTEmKG1pZD0obWlkPU1hdGguaW11bChhbDAsYmgwKSkrTWF0aC5pbXVsKGFoMCxibDApfDApKTw8MTMpfDA7Yz0oKGhpPU1hdGguaW11bChhaDAsYmgwKSkrKG1pZD4+PjEzKXwwKSsodzA+Pj4yNil8MCx3MCY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsMSxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDEsYmgwKSkrTWF0aC5pbXVsKGFoMSxibDApfDAsaGk9TWF0aC5pbXVsKGFoMSxiaDApO3ZhciB3MT0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDEpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmgxKXwwKStNYXRoLmltdWwoYWgwLGJsMSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDEpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxPj4+MjYpfDAsdzEmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDIsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWwyLGJoMCkpK01hdGguaW11bChhaDIsYmwwKXwwLGhpPU1hdGguaW11bChhaDIsYmgwKSxsbz1sbytNYXRoLmltdWwoYWwxLGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDEpfDApK01hdGguaW11bChhaDEsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDEsYmgxKXwwO3ZhciB3Mj0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDIpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmgyKXwwKStNYXRoLmltdWwoYWgwLGJsMil8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDIpfDApKyhtaWQ+Pj4xMyl8MCkrKHcyPj4+MjYpfDAsdzImPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDMsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWwzLGJoMCkpK01hdGguaW11bChhaDMsYmwwKXwwLGhpPU1hdGguaW11bChhaDMsYmgwKSxsbz1sbytNYXRoLmltdWwoYWwyLGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDEpfDApK01hdGguaW11bChhaDIsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDIsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDEsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoMil8MCkrTWF0aC5pbXVsKGFoMSxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDIpfDA7dmFyIHczPShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsMyl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDMpfDApK01hdGguaW11bChhaDAsYmwzKXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoMyl8MCkrKG1pZD4+PjEzKXwwKSsodzM+Pj4yNil8MCx3MyY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsNCxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDQsYmgwKSkrTWF0aC5pbXVsKGFoNCxibDApfDAsaGk9TWF0aC5pbXVsKGFoNCxiaDApLGxvPWxvK01hdGguaW11bChhbDMsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoMSl8MCkrTWF0aC5pbXVsKGFoMyxibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmgyKXwwKStNYXRoLmltdWwoYWgyLGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDMpfDApK01hdGguaW11bChhaDEsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDEsYmgzKXwwO3ZhciB3ND0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDQpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg0KXwwKStNYXRoLmltdWwoYWgwLGJsNCl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDQpfDApKyhtaWQ+Pj4xMyl8MCkrKHc0Pj4+MjYpfDAsdzQmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDUsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw1LGJoMCkpK01hdGguaW11bChhaDUsYmwwKXwwLGhpPU1hdGguaW11bChhaDUsYmgwKSxsbz1sbytNYXRoLmltdWwoYWw0LGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDEpfDApK01hdGguaW11bChhaDQsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDQsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDMsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoMil8MCkrTWF0aC5pbXVsKGFoMyxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmgzKXwwKStNYXRoLmltdWwoYWgyLGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDQpfDApK01hdGguaW11bChhaDEsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDEsYmg0KXwwO3ZhciB3NT0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDUpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg1KXwwKStNYXRoLmltdWwoYWgwLGJsNSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDUpfDApKyhtaWQ+Pj4xMyl8MCkrKHc1Pj4+MjYpfDAsdzUmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDYsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw2LGJoMCkpK01hdGguaW11bChhaDYsYmwwKXwwLGhpPU1hdGguaW11bChhaDYsYmgwKSxsbz1sbytNYXRoLmltdWwoYWw1LGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDEpfDApK01hdGguaW11bChhaDUsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDUsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDQsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoMil8MCkrTWF0aC5pbXVsKGFoNCxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmgzKXwwKStNYXRoLmltdWwoYWgzLGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDQpfDApK01hdGguaW11bChhaDIsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDIsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDEsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoNSl8MCkrTWF0aC5pbXVsKGFoMSxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDUpfDA7dmFyIHc2PShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsNil8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDYpfDApK01hdGguaW11bChhaDAsYmw2KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoNil8MCkrKG1pZD4+PjEzKXwwKSsodzY+Pj4yNil8MCx3NiY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsNyxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDcsYmgwKSkrTWF0aC5pbXVsKGFoNyxibDApfDAsaGk9TWF0aC5pbXVsKGFoNyxiaDApLGxvPWxvK01hdGguaW11bChhbDYsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoMSl8MCkrTWF0aC5pbXVsKGFoNixibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmgyKXwwKStNYXRoLmltdWwoYWg1LGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDMpfDApK01hdGguaW11bChhaDQsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDQsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDMsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoNCl8MCkrTWF0aC5pbXVsKGFoMyxibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmg1KXwwKStNYXRoLmltdWwoYWgyLGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDYpfDApK01hdGguaW11bChhaDEsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDEsYmg2KXwwO3ZhciB3Nz0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDcpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg3KXwwKStNYXRoLmltdWwoYWgwLGJsNyl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDcpfDApKyhtaWQ+Pj4xMyl8MCkrKHc3Pj4+MjYpfDAsdzcmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDgsYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw4LGJoMCkpK01hdGguaW11bChhaDgsYmwwKXwwLGhpPU1hdGguaW11bChhaDgsYmgwKSxsbz1sbytNYXRoLmltdWwoYWw3LGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDEpfDApK01hdGguaW11bChhaDcsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDcsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDYsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoMil8MCkrTWF0aC5pbXVsKGFoNixibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmgzKXwwKStNYXRoLmltdWwoYWg1LGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDQpfDApK01hdGguaW11bChhaDQsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDQsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDMsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoNSl8MCkrTWF0aC5pbXVsKGFoMyxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmg2KXwwKStNYXRoLmltdWwoYWgyLGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWwxLGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDcpfDApK01hdGguaW11bChhaDEsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDEsYmg3KXwwO3ZhciB3OD0oYysobG89bG8rTWF0aC5pbXVsKGFsMCxibDgpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDAsYmg4KXwwKStNYXRoLmltdWwoYWgwLGJsOCl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMCxiaDgpfDApKyhtaWQ+Pj4xMyl8MCkrKHc4Pj4+MjYpfDAsdzgmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmwwKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoMCkpK01hdGguaW11bChhaDksYmwwKXwwLGhpPU1hdGguaW11bChhaDksYmgwKSxsbz1sbytNYXRoLmltdWwoYWw4LGJsMSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDEpfDApK01hdGguaW11bChhaDgsYmwxKXwwLGhpPWhpK01hdGguaW11bChhaDgsYmgxKXwwLGxvPWxvK01hdGguaW11bChhbDcsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoMil8MCkrTWF0aC5pbXVsKGFoNyxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmgzKXwwKStNYXRoLmltdWwoYWg2LGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDQpfDApK01hdGguaW11bChhaDUsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDUsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDQsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoNSl8MCkrTWF0aC5pbXVsKGFoNCxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmg2KXwwKStNYXRoLmltdWwoYWgzLGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDcpfDApK01hdGguaW11bChhaDIsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDIsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDEsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoOCl8MCkrTWF0aC5pbXVsKGFoMSxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDgpfDA7dmFyIHc5PShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDkpfDApK01hdGguaW11bChhaDAsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzk+Pj4yNil8MCx3OSY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDEpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmgxKSkrTWF0aC5pbXVsKGFoOSxibDEpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDEpLGxvPWxvK01hdGguaW11bChhbDgsYmwyKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoMil8MCkrTWF0aC5pbXVsKGFoOCxibDIpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDIpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmgzKXwwKStNYXRoLmltdWwoYWg3LGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDQpfDApK01hdGguaW11bChhaDYsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDYsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDUsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoNSl8MCkrTWF0aC5pbXVsKGFoNSxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg2KXwwKStNYXRoLmltdWwoYWg0LGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDcpfDApK01hdGguaW11bChhaDMsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDMsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDIsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoOCl8MCkrTWF0aC5pbXVsKGFoMixibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDgpfDA7dmFyIHcxMD0oYysobG89bG8rTWF0aC5pbXVsKGFsMSxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmg5KXwwKStNYXRoLmltdWwoYWgxLGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxMD4+PjI2KXwwLHcxMCY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDIpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmgyKSkrTWF0aC5pbXVsKGFoOSxibDIpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDIpLGxvPWxvK01hdGguaW11bChhbDgsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoMyl8MCkrTWF0aC5pbXVsKGFoOCxibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg0KXwwKStNYXRoLmltdWwoYWg3LGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDUpfDApK01hdGguaW11bChhaDYsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDYsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDUsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoNil8MCkrTWF0aC5pbXVsKGFoNSxibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg3KXwwKStNYXRoLmltdWwoYWg0LGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDgpfDApK01hdGguaW11bChhaDMsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDMsYmg4KXwwO3ZhciB3MTE9KGMrKGxvPWxvK01hdGguaW11bChhbDIsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoOSl8MCkrTWF0aC5pbXVsKGFoMixibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDIsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTE+Pj4yNil8MCx3MTEmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmwzKSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoMykpK01hdGguaW11bChhaDksYmwzKXwwLGhpPU1hdGguaW11bChhaDksYmgzKSxsbz1sbytNYXRoLmltdWwoYWw4LGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDQpfDApK01hdGguaW11bChhaDgsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDgsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDcsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoNSl8MCkrTWF0aC5pbXVsKGFoNyxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmg2KXwwKStNYXRoLmltdWwoYWg2LGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDcpfDApK01hdGguaW11bChhaDUsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDUsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDQsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoOCl8MCkrTWF0aC5pbXVsKGFoNCxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDgpfDA7dmFyIHcxMj0oYysobG89bG8rTWF0aC5pbXVsKGFsMyxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmg5KXwwKStNYXRoLmltdWwoYWgzLGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxMj4+PjI2KXwwLHcxMiY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDQpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmg0KSkrTWF0aC5pbXVsKGFoOSxibDQpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDQpLGxvPWxvK01hdGguaW11bChhbDgsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoNSl8MCkrTWF0aC5pbXVsKGFoOCxibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg2KXwwKStNYXRoLmltdWwoYWg3LGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDcpfDApK01hdGguaW11bChhaDYsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDYsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDUsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoOCl8MCkrTWF0aC5pbXVsKGFoNSxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDgpfDA7dmFyIHcxMz0oYysobG89bG8rTWF0aC5pbXVsKGFsNCxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg5KXwwKStNYXRoLmltdWwoYWg0LGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxMz4+PjI2KXwwLHcxMyY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDUpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmg1KSkrTWF0aC5pbXVsKGFoOSxibDUpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDUpLGxvPWxvK01hdGguaW11bChhbDgsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoNil8MCkrTWF0aC5pbXVsKGFoOCxibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDYpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDcpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg3KXwwKStNYXRoLmltdWwoYWg3LGJsNyl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoNyl8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsOCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDgpfDApK01hdGguaW11bChhaDYsYmw4KXwwLGhpPWhpK01hdGguaW11bChhaDYsYmg4KXwwO3ZhciB3MTQ9KGMrKGxvPWxvK01hdGguaW11bChhbDUsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoOSl8MCkrTWF0aC5pbXVsKGFoNSxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDUsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTQ+Pj4yNil8MCx3MTQmPTY3MTA4ODYzLGxvPU1hdGguaW11bChhbDksYmw2KSxtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoNikpK01hdGguaW11bChhaDksYmw2KXwwLGhpPU1hdGguaW11bChhaDksYmg2KSxsbz1sbytNYXRoLmltdWwoYWw4LGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsOCxiaDcpfDApK01hdGguaW11bChhaDgsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDgsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDcsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoOCl8MCkrTWF0aC5pbXVsKGFoNyxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDgpfDA7dmFyIHcxNT0oYysobG89bG8rTWF0aC5pbXVsKGFsNixibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmg5KXwwKStNYXRoLmltdWwoYWg2LGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoNixiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxNT4+PjI2KXwwLHcxNSY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDcpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmg3KSkrTWF0aC5pbXVsKGFoOSxibDcpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDcpLGxvPWxvK01hdGguaW11bChhbDgsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoOCl8MCkrTWF0aC5pbXVsKGFoOCxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDgpfDA7dmFyIHcxNj0oYysobG89bG8rTWF0aC5pbXVsKGFsNyxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg5KXwwKStNYXRoLmltdWwoYWg3LGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxNj4+PjI2KXwwLHcxNiY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDgpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmg4KSkrTWF0aC5pbXVsKGFoOSxibDgpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDgpO3ZhciB3MTc9KGMrKGxvPWxvK01hdGguaW11bChhbDgsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoOSl8MCkrTWF0aC5pbXVsKGFoOCxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDgsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3MTc+Pj4yNil8MCx3MTcmPTY3MTA4ODYzO3ZhciB3MTg9KGMrKGxvPU1hdGguaW11bChhbDksYmw5KSl8MCkrKCg4MTkxJihtaWQ9KG1pZD1NYXRoLmltdWwoYWw5LGJoOSkpK01hdGguaW11bChhaDksYmw5KXwwKSk8PDEzKXwwO3JldHVybiBjPSgoaGk9TWF0aC5pbXVsKGFoOSxiaDkpKSsobWlkPj4+MTMpfDApKyh3MTg+Pj4yNil8MCx3MTgmPTY3MTA4ODYzLG9bMF09dzAsb1sxXT13MSxvWzJdPXcyLG9bM109dzMsb1s0XT13NCxvWzVdPXc1LG9bNl09dzYsb1s3XT13NyxvWzhdPXc4LG9bOV09dzksb1sxMF09dzEwLG9bMTFdPXcxMSxvWzEyXT13MTIsb1sxM109dzEzLG9bMTRdPXcxNCxvWzE1XT13MTUsb1sxNl09dzE2LG9bMTddPXcxNyxvWzE4XT13MTgsMCE9PWMmJihvWzE5XT1jLG91dC5sZW5ndGgrKyksb3V0fTtmdW5jdGlvbiBqdW1ib011bFRvKHNlbGYsbnVtLG91dCl7cmV0dXJuKG5ldyBGRlRNKS5tdWxwKHNlbGYsbnVtLG91dCl9ZnVuY3Rpb24gRkZUTSh4LHkpe3RoaXMueD14LHRoaXMueT15fU1hdGguaW11bHx8KGNvbWIxME11bFRvPXNtYWxsTXVsVG8pLEJOLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbiBtdWxUbyhudW0sb3V0KXt2YXIgcmVzLGxlbj10aGlzLmxlbmd0aCtudW0ubGVuZ3RoO3JldHVybiByZXM9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1udW0ubGVuZ3RoP2NvbWIxME11bFRvKHRoaXMsbnVtLG91dCk6bGVuPDYzP3NtYWxsTXVsVG8odGhpcyxudW0sb3V0KTpsZW48MTAyND9mdW5jdGlvbiBiaWdNdWxUbyhzZWxmLG51bSxvdXQpe291dC5uZWdhdGl2ZT1udW0ubmVnYXRpdmVec2VsZi5uZWdhdGl2ZSxvdXQubGVuZ3RoPXNlbGYubGVuZ3RoK251bS5sZW5ndGg7Zm9yKHZhciBjYXJyeT0wLGhuY2Fycnk9MCxrPTA7azxvdXQubGVuZ3RoLTE7aysrKXt2YXIgbmNhcnJ5PWhuY2Fycnk7aG5jYXJyeT0wO2Zvcih2YXIgcndvcmQ9NjcxMDg4NjMmY2FycnksbWF4Sj1NYXRoLm1pbihrLG51bS5sZW5ndGgtMSksaj1NYXRoLm1heCgwLGstc2VsZi5sZW5ndGgrMSk7ajw9bWF4SjtqKyspe3ZhciBpPWstaixyPSgwfHNlbGYud29yZHNbaV0pKigwfG51bS53b3Jkc1tqXSksbG89NjcxMDg4NjMmcjtyd29yZD02NzEwODg2MyYobG89bG8rcndvcmR8MCksaG5jYXJyeSs9KG5jYXJyeT0obmNhcnJ5PW5jYXJyeSsoci82NzEwODg2NHwwKXwwKSsobG8+Pj4yNil8MCk+Pj4yNixuY2FycnkmPTY3MTA4ODYzfW91dC53b3Jkc1trXT1yd29yZCxjYXJyeT1uY2FycnksbmNhcnJ5PWhuY2Fycnl9cmV0dXJuIDAhPT1jYXJyeT9vdXQud29yZHNba109Y2Fycnk6b3V0Lmxlbmd0aC0tLG91dC5zdHJpcCgpfSh0aGlzLG51bSxvdXQpOmp1bWJvTXVsVG8odGhpcyxudW0sb3V0KSxyZXN9LEZGVE0ucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24gbWFrZVJCVChOKXtmb3IodmFyIHQ9bmV3IEFycmF5KE4pLGw9Qk4ucHJvdG90eXBlLl9jb3VudEJpdHMoTiktMSxpPTA7aTxOO2krKyl0W2ldPXRoaXMucmV2QmluKGksbCxOKTtyZXR1cm4gdH0sRkZUTS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uIHJldkJpbih4LGwsTil7aWYoMD09PXh8fHg9PT1OLTEpcmV0dXJuIHg7Zm9yKHZhciByYj0wLGk9MDtpPGw7aSsrKXJifD0oMSZ4KTw8bC1pLTEseD4+PTE7cmV0dXJuIHJifSxGRlRNLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uIHBlcm11dGUocmJ0LHJ3cyxpd3MscnR3cyxpdHdzLE4pe2Zvcih2YXIgaT0wO2k8TjtpKyspcnR3c1tpXT1yd3NbcmJ0W2ldXSxpdHdzW2ldPWl3c1tyYnRbaV1dfSxGRlRNLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24gdHJhbnNmb3JtKHJ3cyxpd3MscnR3cyxpdHdzLE4scmJ0KXt0aGlzLnBlcm11dGUocmJ0LHJ3cyxpd3MscnR3cyxpdHdzLE4pO2Zvcih2YXIgcz0xO3M8TjtzPDw9MSlmb3IodmFyIGw9czw8MSxydHdkZj1NYXRoLmNvcygyKk1hdGguUEkvbCksaXR3ZGY9TWF0aC5zaW4oMipNYXRoLlBJL2wpLHA9MDtwPE47cCs9bClmb3IodmFyIHJ0d2RmXz1ydHdkZixpdHdkZl89aXR3ZGYsaj0wO2o8cztqKyspe3ZhciByZT1ydHdzW3Aral0saWU9aXR3c1twK2pdLHJvPXJ0d3NbcCtqK3NdLGlvPWl0d3NbcCtqK3NdLHJ4PXJ0d2RmXypyby1pdHdkZl8qaW87aW89cnR3ZGZfKmlvK2l0d2RmXypybyxybz1yeCxydHdzW3Aral09cmUrcm8saXR3c1twK2pdPWllK2lvLHJ0d3NbcCtqK3NdPXJlLXJvLGl0d3NbcCtqK3NdPWllLWlvLGohPT1sJiYocng9cnR3ZGYqcnR3ZGZfLWl0d2RmKml0d2RmXyxpdHdkZl89cnR3ZGYqaXR3ZGZfK2l0d2RmKnJ0d2RmXyxydHdkZl89cngpfX0sRkZUTS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24gZ3Vlc3NMZW4xM2IobixtKXt2YXIgTj0xfE1hdGgubWF4KG0sbiksb2RkPTEmTixpPTA7Zm9yKE49Ti8yfDA7TjtOPj4+PTEpaSsrO3JldHVybiAxPDxpKzErb2RkfSxGRlRNLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24gY29uanVnYXRlKHJ3cyxpd3MsTil7aWYoIShOPD0xKSlmb3IodmFyIGk9MDtpPE4vMjtpKyspe3ZhciB0PXJ3c1tpXTtyd3NbaV09cndzW04taS0xXSxyd3NbTi1pLTFdPXQsdD1pd3NbaV0saXdzW2ldPS1pd3NbTi1pLTFdLGl3c1tOLWktMV09LXR9fSxGRlRNLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24gbm9ybWFsaXplMTNiKHdzLE4pe2Zvcih2YXIgY2Fycnk9MCxpPTA7aTxOLzI7aSsrKXt2YXIgdz04MTkyKk1hdGgucm91bmQod3NbMippKzFdL04pK01hdGgucm91bmQod3NbMippXS9OKStjYXJyeTt3c1tpXT02NzEwODg2MyZ3LGNhcnJ5PXc8NjcxMDg4NjQ/MDp3LzY3MTA4ODY0fDB9cmV0dXJuIHdzfSxGRlRNLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uIGNvbnZlcnQxM2Iod3MsbGVuLHJ3cyxOKXtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8bGVuO2krKyljYXJyeSs9MHx3c1tpXSxyd3NbMippXT04MTkxJmNhcnJ5LGNhcnJ5Pj4+PTEzLHJ3c1syKmkrMV09ODE5MSZjYXJyeSxjYXJyeT4+Pj0xMztmb3IoaT0yKmxlbjtpPE47KytpKXJ3c1tpXT0wO2Fzc2VydCgwPT09Y2FycnkpLGFzc2VydCghKC04MTkyJmNhcnJ5KSl9LEZGVE0ucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24gc3R1YihOKXtmb3IodmFyIHBoPW5ldyBBcnJheShOKSxpPTA7aTxOO2krKylwaFtpXT0wO3JldHVybiBwaH0sRkZUTS5wcm90b3R5cGUubXVscD1mdW5jdGlvbiBtdWxwKHgseSxvdXQpe3ZhciBOPTIqdGhpcy5ndWVzc0xlbjEzYih4Lmxlbmd0aCx5Lmxlbmd0aCkscmJ0PXRoaXMubWFrZVJCVChOKSxfPXRoaXMuc3R1YihOKSxyd3M9bmV3IEFycmF5KE4pLHJ3c3Q9bmV3IEFycmF5KE4pLGl3c3Q9bmV3IEFycmF5KE4pLG5yd3M9bmV3IEFycmF5KE4pLG5yd3N0PW5ldyBBcnJheShOKSxuaXdzdD1uZXcgQXJyYXkoTikscm13cz1vdXQud29yZHM7cm13cy5sZW5ndGg9Tix0aGlzLmNvbnZlcnQxM2IoeC53b3Jkcyx4Lmxlbmd0aCxyd3MsTiksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMseS5sZW5ndGgsbnJ3cyxOKSx0aGlzLnRyYW5zZm9ybShyd3MsXyxyd3N0LGl3c3QsTixyYnQpLHRoaXMudHJhbnNmb3JtKG5yd3MsXyxucndzdCxuaXdzdCxOLHJidCk7Zm9yKHZhciBpPTA7aTxOO2krKyl7dmFyIHJ4PXJ3c3RbaV0qbnJ3c3RbaV0taXdzdFtpXSpuaXdzdFtpXTtpd3N0W2ldPXJ3c3RbaV0qbml3c3RbaV0raXdzdFtpXSpucndzdFtpXSxyd3N0W2ldPXJ4fXJldHVybiB0aGlzLmNvbmp1Z2F0ZShyd3N0LGl3c3QsTiksdGhpcy50cmFuc2Zvcm0ocndzdCxpd3N0LHJtd3MsXyxOLHJidCksdGhpcy5jb25qdWdhdGUocm13cyxfLE4pLHRoaXMubm9ybWFsaXplMTNiKHJtd3MsTiksb3V0Lm5lZ2F0aXZlPXgubmVnYXRpdmVeeS5uZWdhdGl2ZSxvdXQubGVuZ3RoPXgubGVuZ3RoK3kubGVuZ3RoLG91dC5zdHJpcCgpfSxCTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uIG11bChudW0pe3ZhciBvdXQ9bmV3IEJOKG51bGwpO3JldHVybiBvdXQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK251bS5sZW5ndGgpLHRoaXMubXVsVG8obnVtLG91dCl9LEJOLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uIG11bGYobnVtKXt2YXIgb3V0PW5ldyBCTihudWxsKTtyZXR1cm4gb3V0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtudW0ubGVuZ3RoKSxqdW1ib011bFRvKHRoaXMsbnVtLG91dCl9LEJOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uIGltdWwobnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKG51bSx0aGlzKX0sQk4ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uIGltdWxuKG51bSl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgbnVtKSxhc3NlcnQobnVtPDY3MTA4ODY0KTtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgdz0oMHx0aGlzLndvcmRzW2ldKSpudW0sbG89KDY3MTA4ODYzJncpKyg2NzEwODg2MyZjYXJyeSk7Y2Fycnk+Pj0yNixjYXJyeSs9dy82NzEwODg2NHwwLGNhcnJ5Kz1sbz4+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmbG99cmV0dXJuIDAhPT1jYXJyeSYmKHRoaXMud29yZHNbaV09Y2FycnksdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PW51bT8xOnRoaXMubGVuZ3RoLHRoaXN9LEJOLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uIG11bG4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKG51bSl9LEJOLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24gc3FyKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxCTi5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbiBpc3FyKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxCTi5wcm90b3R5cGUucG93PWZ1bmN0aW9uIHBvdyhudW0pe3ZhciB3PWZ1bmN0aW9uIHRvQml0QXJyYXkobnVtKXtmb3IodmFyIHc9bmV3IEFycmF5KG51bS5iaXRMZW5ndGgoKSksYml0PTA7Yml0PHcubGVuZ3RoO2JpdCsrKXt2YXIgb2ZmPWJpdC8yNnwwLHdiaXQ9Yml0JTI2O3dbYml0XT0obnVtLndvcmRzW29mZl0mMTw8d2JpdCk+Pj53Yml0fXJldHVybiB3fShudW0pO2lmKDA9PT13Lmxlbmd0aClyZXR1cm4gbmV3IEJOKDEpO2Zvcih2YXIgcmVzPXRoaXMsaT0wO2k8dy5sZW5ndGgmJjA9PT13W2ldO2krKyxyZXM9cmVzLnNxcigpKTtpZigrK2k8dy5sZW5ndGgpZm9yKHZhciBxPXJlcy5zcXIoKTtpPHcubGVuZ3RoO2krKyxxPXEuc3FyKCkpMCE9PXdbaV0mJihyZXM9cmVzLm11bChxKSk7cmV0dXJuIHJlc30sQk4ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbiBpdXNobG4oYml0cyl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0cyYmYml0cz49MCk7dmFyIGkscj1iaXRzJTI2LHM9KGJpdHMtcikvMjYsY2FycnlNYXNrPTY3MTA4ODYzPj4+MjYtcjw8MjYtcjtpZigwIT09cil7dmFyIGNhcnJ5PTA7Zm9yKGk9MDtpPHRoaXMubGVuZ3RoO2krKyl7dmFyIG5ld0NhcnJ5PXRoaXMud29yZHNbaV0mY2FycnlNYXNrLGM9KDB8dGhpcy53b3Jkc1tpXSktbmV3Q2Fycnk8PHI7dGhpcy53b3Jkc1tpXT1jfGNhcnJ5LGNhcnJ5PW5ld0NhcnJ5Pj4+MjYtcn1jYXJyeSYmKHRoaXMud29yZHNbaV09Y2FycnksdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXMpe2ZvcihpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pdGhpcy53b3Jkc1tpK3NdPXRoaXMud29yZHNbaV07Zm9yKGk9MDtpPHM7aSsrKXRoaXMud29yZHNbaV09MDt0aGlzLmxlbmd0aCs9c31yZXR1cm4gdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24gaXNobG4oYml0cyl7cmV0dXJuIGFzc2VydCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYml0cyl9LEJOLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24gaXVzaHJuKGJpdHMsaGludCxleHRlbmRlZCl7dmFyIGg7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0cyYmYml0cz49MCksaD1oaW50PyhoaW50LWhpbnQlMjYpLzI2OjA7dmFyIHI9Yml0cyUyNixzPU1hdGgubWluKChiaXRzLXIpLzI2LHRoaXMubGVuZ3RoKSxtYXNrPTY3MTA4ODYzXjY3MTA4ODYzPj4+cjw8cixtYXNrZWRXb3Jkcz1leHRlbmRlZDtpZihoLT1zLGg9TWF0aC5tYXgoMCxoKSxtYXNrZWRXb3Jkcyl7Zm9yKHZhciBpPTA7aTxzO2krKyltYXNrZWRXb3Jkcy53b3Jkc1tpXT10aGlzLndvcmRzW2ldO21hc2tlZFdvcmRzLmxlbmd0aD1zfWlmKDA9PT1zKTtlbHNlIGlmKHRoaXMubGVuZ3RoPnMpZm9yKHRoaXMubGVuZ3RoLT1zLGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPXRoaXMud29yZHNbaStzXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBjYXJyeT0wO2ZvcihpPXRoaXMubGVuZ3RoLTE7aT49MCYmKDAhPT1jYXJyeXx8aT49aCk7aS0tKXt2YXIgd29yZD0wfHRoaXMud29yZHNbaV07dGhpcy53b3Jkc1tpXT1jYXJyeTw8MjYtcnx3b3JkPj4+cixjYXJyeT13b3JkJm1hc2t9cmV0dXJuIG1hc2tlZFdvcmRzJiYwIT09Y2FycnkmJihtYXNrZWRXb3Jkcy53b3Jkc1ttYXNrZWRXb3Jkcy5sZW5ndGgrK109Y2FycnkpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbiBpc2hybihiaXRzLGhpbnQsZXh0ZW5kZWQpe3JldHVybiBhc3NlcnQoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGJpdHMsaGludCxleHRlbmRlZCl9LEJOLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uIHNobG4oYml0cyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiaXRzKX0sQk4ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uIHVzaGxuKGJpdHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGJpdHMpfSxCTi5wcm90b3R5cGUuc2hybj1mdW5jdGlvbiBzaHJuKGJpdHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYml0cyl9LEJOLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbiB1c2hybihiaXRzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiaXRzKX0sQk4ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uIHRlc3RuKGJpdCl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0JiZiaXQ+PTApO3ZhciByPWJpdCUyNixzPShiaXQtcikvMjYscT0xPDxyO3JldHVybiEodGhpcy5sZW5ndGg8PXMpJiYhISh0aGlzLndvcmRzW3NdJnEpfSxCTi5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uIGltYXNrbihiaXRzKXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXRzJiZiaXRzPj0wKTt2YXIgcj1iaXRzJTI2LHM9KGJpdHMtcikvMjY7aWYoYXNzZXJ0KDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9cylyZXR1cm4gdGhpcztpZigwIT09ciYmcysrLHRoaXMubGVuZ3RoPU1hdGgubWluKHMsdGhpcy5sZW5ndGgpLDAhPT1yKXt2YXIgbWFzaz02NzEwODg2M142NzEwODg2Mz4+PnI8PHI7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9bWFza31yZXR1cm4gMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uIG1hc2tuKGJpdHMpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGJpdHMpfSxCTi5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24gaWFkZG4obnVtKXtyZXR1cm4gYXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgbnVtKSxhc3NlcnQobnVtPDY3MTA4ODY0KSxudW08MD90aGlzLmlzdWJuKC1udW0pOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8bnVtPyh0aGlzLndvcmRzWzBdPW51bS0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKG51bSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKG51bSl9LEJOLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24gX2lhZGRuKG51bSl7dGhpcy53b3Jkc1swXSs9bnVtO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbaV0+PTY3MTA4ODY0O2krKyl0aGlzLndvcmRzW2ldLT02NzEwODg2NCxpPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2krMV09MTp0aGlzLndvcmRzW2krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaSsxKSx0aGlzfSxCTi5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24gaXN1Ym4obnVtKXtpZihhc3NlcnQoIm51bWJlciI9PXR5cGVvZiBudW0pLGFzc2VydChudW08NjcxMDg4NjQpLG51bTwwKXJldHVybiB0aGlzLmlhZGRuKC1udW0pO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihudW0pLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPW51bSwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbaV08MDtpKyspdGhpcy53b3Jkc1tpXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tpKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uIGFkZG4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKG51bSl9LEJOLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uIHN1Ym4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKG51bSl9LEJOLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uIGlhYnMoKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEJOLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24gYWJzKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEJOLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24gX2lzaGxuc3VibXVsKG51bSxtdWwsc2hpZnQpe3ZhciBpLHcsbGVuPW51bS5sZW5ndGgrc2hpZnQ7dGhpcy5fZXhwYW5kKGxlbik7dmFyIGNhcnJ5PTA7Zm9yKGk9MDtpPG51bS5sZW5ndGg7aSsrKXt3PSgwfHRoaXMud29yZHNbaStzaGlmdF0pK2NhcnJ5O3ZhciByaWdodD0oMHxudW0ud29yZHNbaV0pKm11bDtjYXJyeT0oKHctPTY3MTA4ODYzJnJpZ2h0KT4+MjYpLShyaWdodC82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krc2hpZnRdPTY3MTA4ODYzJnd9Zm9yKDtpPHRoaXMubGVuZ3RoLXNoaWZ0O2krKyljYXJyeT0odz0oMHx0aGlzLndvcmRzW2krc2hpZnRdKStjYXJyeSk+PjI2LHRoaXMud29yZHNbaStzaGlmdF09NjcxMDg4NjMmdztpZigwPT09Y2FycnkpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoYXNzZXJ0KC0xPT09Y2FycnkpLGNhcnJ5PTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWNhcnJ5PSh3PS0oMHx0aGlzLndvcmRzW2ldKStjYXJyeSk+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmdztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uIF93b3JkRGl2KG51bSxtb2RlKXt2YXIgc2hpZnQ9KHRoaXMubGVuZ3RoLG51bS5sZW5ndGgpLGE9dGhpcy5jbG9uZSgpLGI9bnVtLGJoaT0wfGIud29yZHNbYi5sZW5ndGgtMV07MCE9PShzaGlmdD0yNi10aGlzLl9jb3VudEJpdHMoYmhpKSkmJihiPWIudXNobG4oc2hpZnQpLGEuaXVzaGxuKHNoaWZ0KSxiaGk9MHxiLndvcmRzW2IubGVuZ3RoLTFdKTt2YXIgcSxtPWEubGVuZ3RoLWIubGVuZ3RoO2lmKCJtb2QiIT09bW9kZSl7KHE9bmV3IEJOKG51bGwpKS5sZW5ndGg9bSsxLHEud29yZHM9bmV3IEFycmF5KHEubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHEubGVuZ3RoO2krKylxLndvcmRzW2ldPTB9dmFyIGRpZmY9YS5jbG9uZSgpLl9pc2hsbnN1Ym11bChiLDEsbSk7MD09PWRpZmYubmVnYXRpdmUmJihhPWRpZmYscSYmKHEud29yZHNbbV09MSkpO2Zvcih2YXIgaj1tLTE7aj49MDtqLS0pe3ZhciBxaj02NzEwODg2NCooMHxhLndvcmRzW2IubGVuZ3RoK2pdKSsoMHxhLndvcmRzW2IubGVuZ3RoK2otMV0pO2Zvcihxaj1NYXRoLm1pbihxai9iaGl8MCw2NzEwODg2MyksYS5faXNobG5zdWJtdWwoYixxaixqKTswIT09YS5uZWdhdGl2ZTspcWotLSxhLm5lZ2F0aXZlPTAsYS5faXNobG5zdWJtdWwoYiwxLGopLGEuaXNaZXJvKCl8fChhLm5lZ2F0aXZlXj0xKTtxJiYocS53b3Jkc1tqXT1xail9cmV0dXJuIHEmJnEuc3RyaXAoKSxhLnN0cmlwKCksImRpdiIhPT1tb2RlJiYwIT09c2hpZnQmJmEuaXVzaHJuKHNoaWZ0KSx7ZGl2OnF8fG51bGwsbW9kOmF9fSxCTi5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uIGRpdm1vZChudW0sbW9kZSxwb3NpdGl2ZSl7cmV0dXJuIGFzc2VydCghbnVtLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEJOKDApLG1vZDpuZXcgQk4oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09bnVtLm5lZ2F0aXZlPyhyZXM9dGhpcy5uZWcoKS5kaXZtb2QobnVtLG1vZGUpLCJtb2QiIT09bW9kZSYmKGRpdj1yZXMuZGl2Lm5lZygpKSwiZGl2IiE9PW1vZGUmJihtb2Q9cmVzLm1vZC5uZWcoKSxwb3NpdGl2ZSYmMCE9PW1vZC5uZWdhdGl2ZSYmbW9kLmlhZGQobnVtKSkse2Rpdixtb2R9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PW51bS5uZWdhdGl2ZT8ocmVzPXRoaXMuZGl2bW9kKG51bS5uZWcoKSxtb2RlKSwibW9kIiE9PW1vZGUmJihkaXY9cmVzLmRpdi5uZWcoKSkse2Rpdixtb2Q6cmVzLm1vZH0pOjAhPT0odGhpcy5uZWdhdGl2ZSZudW0ubmVnYXRpdmUpPyhyZXM9dGhpcy5uZWcoKS5kaXZtb2QobnVtLm5lZygpLG1vZGUpLCJkaXYiIT09bW9kZSYmKG1vZD1yZXMubW9kLm5lZygpLHBvc2l0aXZlJiYwIT09bW9kLm5lZ2F0aXZlJiZtb2QuaXN1YihudW0pKSx7ZGl2OnJlcy5kaXYsbW9kfSk6bnVtLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAobnVtKTwwP3tkaXY6bmV3IEJOKDApLG1vZDp0aGlzfToxPT09bnVtLmxlbmd0aD8iZGl2Ij09PW1vZGU/e2Rpdjp0aGlzLmRpdm4obnVtLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1tb2RlP3tkaXY6bnVsbCxtb2Q6bmV3IEJOKHRoaXMubW9kbihudW0ud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4obnVtLndvcmRzWzBdKSxtb2Q6bmV3IEJOKHRoaXMubW9kbihudW0ud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihudW0sbW9kZSk7dmFyIGRpdixtb2QscmVzfSxCTi5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uIGRpdihudW0pe3JldHVybiB0aGlzLmRpdm1vZChudW0sImRpdiIsITEpLmRpdn0sQk4ucHJvdG90eXBlLm1vZD1mdW5jdGlvbiBtb2QobnVtKXtyZXR1cm4gdGhpcy5kaXZtb2QobnVtLCJtb2QiLCExKS5tb2R9LEJOLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uIHVtb2QobnVtKXtyZXR1cm4gdGhpcy5kaXZtb2QobnVtLCJtb2QiLCEwKS5tb2R9LEJOLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbiBkaXZSb3VuZChudW0pe3ZhciBkbT10aGlzLmRpdm1vZChudW0pO2lmKGRtLm1vZC5pc1plcm8oKSlyZXR1cm4gZG0uZGl2O3ZhciBtb2Q9MCE9PWRtLmRpdi5uZWdhdGl2ZT9kbS5tb2QuaXN1YihudW0pOmRtLm1vZCxoYWxmPW51bS51c2hybigxKSxyMj1udW0uYW5kbG4oMSksY21wPW1vZC5jbXAoaGFsZik7cmV0dXJuIGNtcDwwfHwxPT09cjImJjA9PT1jbXA/ZG0uZGl2OjAhPT1kbS5kaXYubmVnYXRpdmU/ZG0uZGl2LmlzdWJuKDEpOmRtLmRpdi5pYWRkbigxKX0sQk4ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24gbW9kbihudW0pe2Fzc2VydChudW08PTY3MTA4ODYzKTtmb3IodmFyIHA9KDE8PDI2KSVudW0sYWNjPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKWFjYz0ocCphY2MrKDB8dGhpcy53b3Jkc1tpXSkpJW51bTtyZXR1cm4gYWNjfSxCTi5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24gaWRpdm4obnVtKXthc3NlcnQobnVtPD02NzEwODg2Myk7Zm9yKHZhciBjYXJyeT0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIHc9KDB8dGhpcy53b3Jkc1tpXSkrNjcxMDg4NjQqY2Fycnk7dGhpcy53b3Jkc1tpXT13L251bXwwLGNhcnJ5PXclbnVtfXJldHVybiB0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uIGRpdm4obnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKG51bSl9LEJOLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uIGVnY2QocCl7YXNzZXJ0KDA9PT1wLm5lZ2F0aXZlKSxhc3NlcnQoIXAuaXNaZXJvKCkpO3ZhciB4PXRoaXMseT1wLmNsb25lKCk7eD0wIT09eC5uZWdhdGl2ZT94LnVtb2QocCk6eC5jbG9uZSgpO2Zvcih2YXIgQT1uZXcgQk4oMSksQj1uZXcgQk4oMCksQz1uZXcgQk4oMCksRD1uZXcgQk4oMSksZz0wO3guaXNFdmVuKCkmJnkuaXNFdmVuKCk7KXguaXVzaHJuKDEpLHkuaXVzaHJuKDEpLCsrZztmb3IodmFyIHlwPXkuY2xvbmUoKSx4cD14LmNsb25lKCk7IXguaXNaZXJvKCk7KXtmb3IodmFyIGk9MCxpbT0xOzA9PT0oeC53b3Jkc1swXSZpbSkmJmk8MjY7KytpLGltPDw9MSk7aWYoaT4wKWZvcih4Lml1c2hybihpKTtpLS0gPjA7KShBLmlzT2RkKCl8fEIuaXNPZGQoKSkmJihBLmlhZGQoeXApLEIuaXN1Yih4cCkpLEEuaXVzaHJuKDEpLEIuaXVzaHJuKDEpO2Zvcih2YXIgaj0wLGptPTE7MD09PSh5LndvcmRzWzBdJmptKSYmajwyNjsrK2osam08PD0xKTtpZihqPjApZm9yKHkuaXVzaHJuKGopO2otLSA+MDspKEMuaXNPZGQoKXx8RC5pc09kZCgpKSYmKEMuaWFkZCh5cCksRC5pc3ViKHhwKSksQy5pdXNocm4oMSksRC5pdXNocm4oMSk7eC5jbXAoeSk+PTA/KHguaXN1Yih5KSxBLmlzdWIoQyksQi5pc3ViKEQpKTooeS5pc3ViKHgpLEMuaXN1YihBKSxELmlzdWIoQikpfXJldHVybnthOkMsYjpELGdjZDp5Lml1c2hsbihnKX19LEJOLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24gX2ludm1wKHApe2Fzc2VydCgwPT09cC5uZWdhdGl2ZSksYXNzZXJ0KCFwLmlzWmVybygpKTt2YXIgYT10aGlzLGI9cC5jbG9uZSgpO2E9MCE9PWEubmVnYXRpdmU/YS51bW9kKHApOmEuY2xvbmUoKTtmb3IodmFyIHJlcyx4MT1uZXcgQk4oMSkseDI9bmV3IEJOKDApLGRlbHRhPWIuY2xvbmUoKTthLmNtcG4oMSk+MCYmYi5jbXBuKDEpPjA7KXtmb3IodmFyIGk9MCxpbT0xOzA9PT0oYS53b3Jkc1swXSZpbSkmJmk8MjY7KytpLGltPDw9MSk7aWYoaT4wKWZvcihhLml1c2hybihpKTtpLS0gPjA7KXgxLmlzT2RkKCkmJngxLmlhZGQoZGVsdGEpLHgxLml1c2hybigxKTtmb3IodmFyIGo9MCxqbT0xOzA9PT0oYi53b3Jkc1swXSZqbSkmJmo8MjY7KytqLGptPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KXgyLmlzT2RkKCkmJngyLmlhZGQoZGVsdGEpLHgyLml1c2hybigxKTthLmNtcChiKT49MD8oYS5pc3ViKGIpLHgxLmlzdWIoeDIpKTooYi5pc3ViKGEpLHgyLmlzdWIoeDEpKX1yZXR1cm4ocmVzPTA9PT1hLmNtcG4oMSk/eDE6eDIpLmNtcG4oMCk8MCYmcmVzLmlhZGQocCkscmVzfSxCTi5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uIGdjZChudW0pe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIG51bS5hYnMoKTtpZihudW0uaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGE9dGhpcy5jbG9uZSgpLGI9bnVtLmNsb25lKCk7YS5uZWdhdGl2ZT0wLGIubmVnYXRpdmU9MDtmb3IodmFyIHNoaWZ0PTA7YS5pc0V2ZW4oKSYmYi5pc0V2ZW4oKTtzaGlmdCsrKWEuaXVzaHJuKDEpLGIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDthLmlzRXZlbigpOylhLml1c2hybigxKTtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO3ZhciByPWEuY21wKGIpO2lmKHI8MCl7dmFyIHQ9YTthPWIsYj10fWVsc2UgaWYoMD09PXJ8fDA9PT1iLmNtcG4oMSkpYnJlYWs7YS5pc3ViKGIpfXJldHVybiBiLml1c2hsbihzaGlmdCl9LEJOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uIGludm0obnVtKXtyZXR1cm4gdGhpcy5lZ2NkKG51bSkuYS51bW9kKG51bSl9LEJOLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24gaXNFdmVuKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSxCTi5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24gaXNPZGQoKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSxCTi5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24gYW5kbG4obnVtKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZudW19LEJOLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbiBiaW5jbihiaXQpe2Fzc2VydCgibnVtYmVyIj09dHlwZW9mIGJpdCk7dmFyIHI9Yml0JTI2LHM9KGJpdC1yKS8yNixxPTE8PHI7aWYodGhpcy5sZW5ndGg8PXMpcmV0dXJuIHRoaXMuX2V4cGFuZChzKzEpLHRoaXMud29yZHNbc118PXEsdGhpcztmb3IodmFyIGNhcnJ5PXEsaT1zOzAhPT1jYXJyeSYmaTx0aGlzLmxlbmd0aDtpKyspe3ZhciB3PTB8dGhpcy53b3Jkc1tpXTtjYXJyeT0odys9Y2FycnkpPj4+MjYsdyY9NjcxMDg4NjMsdGhpcy53b3Jkc1tpXT13fXJldHVybiAwIT09Y2FycnkmJih0aGlzLndvcmRzW2ldPWNhcnJ5LHRoaXMubGVuZ3RoKyspLHRoaXN9LEJOLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24gaXNaZXJvKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEJOLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uIGNtcG4obnVtKXt2YXIgcmVzLG5lZ2F0aXZlPW51bTwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhbmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJm5lZ2F0aXZlKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXJlcz0xO2Vsc2V7bmVnYXRpdmUmJihudW09LW51bSksYXNzZXJ0KG51bTw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHc9MHx0aGlzLndvcmRzWzBdO3Jlcz13PT09bnVtPzA6dzxudW0/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcmVzOnJlc30sQk4ucHJvdG90eXBlLmNtcD1mdW5jdGlvbiBjbXAobnVtKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PW51bS5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PW51bS5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgcmVzPXRoaXMudWNtcChudW0pO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1yZXM6cmVzfSxCTi5wcm90b3R5cGUudWNtcD1mdW5jdGlvbiB1Y21wKG51bSl7aWYodGhpcy5sZW5ndGg+bnVtLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxudW0ubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgcmVzPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgYT0wfHRoaXMud29yZHNbaV0sYj0wfG51bS53b3Jkc1tpXTtpZihhIT09Yil7YTxiP3Jlcz0tMTphPmImJihyZXM9MSk7YnJlYWt9fXJldHVybiByZXN9LEJOLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24gZ3RuKG51bSl7cmV0dXJuIDE9PT10aGlzLmNtcG4obnVtKX0sQk4ucHJvdG90eXBlLmd0PWZ1bmN0aW9uIGd0KG51bSl7cmV0dXJuIDE9PT10aGlzLmNtcChudW0pfSxCTi5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbiBndGVuKG51bSl7cmV0dXJuIHRoaXMuY21wbihudW0pPj0wfSxCTi5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uIGd0ZShudW0pe3JldHVybiB0aGlzLmNtcChudW0pPj0wfSxCTi5wcm90b3R5cGUubHRuPWZ1bmN0aW9uIGx0bihudW0pe3JldHVybi0xPT09dGhpcy5jbXBuKG51bSl9LEJOLnByb3RvdHlwZS5sdD1mdW5jdGlvbiBsdChudW0pe3JldHVybi0xPT09dGhpcy5jbXAobnVtKX0sQk4ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24gbHRlbihudW0pe3JldHVybiB0aGlzLmNtcG4obnVtKTw9MH0sQk4ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbiBsdGUobnVtKXtyZXR1cm4gdGhpcy5jbXAobnVtKTw9MH0sQk4ucHJvdG90eXBlLmVxbj1mdW5jdGlvbiBlcW4obnVtKXtyZXR1cm4gMD09PXRoaXMuY21wbihudW0pfSxCTi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24gZXEobnVtKXtyZXR1cm4gMD09PXRoaXMuY21wKG51bSl9LEJOLnJlZD1mdW5jdGlvbiByZWQobnVtKXtyZXR1cm4gbmV3IFJlZChudW0pfSxCTi5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24gdG9SZWQoY3R4KXtyZXR1cm4gYXNzZXJ0KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGFzc2VydCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxjdHguY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChjdHgpfSxCTi5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbiBmcm9tUmVkKCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxCTi5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uIF9mb3JjZVJlZChjdHgpe3JldHVybiB0aGlzLnJlZD1jdHgsdGhpc30sQk4ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uIGZvcmNlUmVkKGN0eCl7cmV0dXJuIGFzc2VydCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChjdHgpfSxCTi5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uIHJlZEFkZChudW0pe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbiByZWRJQWRkKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbiByZWRTdWIobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24gcmVkSVN1YihudW0pe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24gcmVkU2hsKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24gcmVkTXVsKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsbnVtKSx0aGlzLnJlZC5tdWwodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbiByZWRJTXVsKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsbnVtKSx0aGlzLnJlZC5pbXVsKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbiByZWRTcXIoKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxCTi5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbiByZWRJU3FyKCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxCTi5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbiByZWRTcXJ0KCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxCTi5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbiByZWRJbnZtKCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxCTi5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uIHJlZE5lZygpe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEJOLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24gcmVkUG93KG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCYmIW51bS5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsbnVtKX07dmFyIHByaW1lcz17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIE1QcmltZShuYW1lLHApe3RoaXMubmFtZT1uYW1lLHRoaXMucD1uZXcgQk4ocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEJOKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBLMjU2KCl7TVByaW1lLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gUDIyNCgpe01QcmltZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIFAxOTIoKXtNUHJpbWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBQMjU1MTkoKXtNUHJpbWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBSZWQobSl7aWYoInN0cmluZyI9PXR5cGVvZiBtKXt2YXIgcHJpbWU9Qk4uX3ByaW1lKG0pO3RoaXMubT1wcmltZS5wLHRoaXMucHJpbWU9cHJpbWV9ZWxzZSBhc3NlcnQobS5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1tLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBNb250KG0pe1JlZC5jYWxsKHRoaXMsbSksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgQk4oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9TVByaW1lLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uIF90bXAoKXt2YXIgdG1wPW5ldyBCTihudWxsKTtyZXR1cm4gdG1wLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdG1wfSxNUHJpbWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24gaXJlZHVjZShudW0pe3ZhciBybGVuLHI9bnVtO2Rve3RoaXMuc3BsaXQocix0aGlzLnRtcCkscmxlbj0ocj0ocj10aGlzLmltdWxLKHIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUocmxlbj50aGlzLm4pO3ZhciBjbXA9cmxlbjx0aGlzLm4/LTE6ci51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1jbXA/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpjbXA+MD9yLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1yLnN0cmlwP3Iuc3RyaXAoKTpyLl9zdHJpcCgpLHJ9LE1QcmltZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24gc3BsaXQoaW5wdXQsb3V0KXtpbnB1dC5pdXNocm4odGhpcy5uLDAsb3V0KX0sTVByaW1lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbiBpbXVsSyhudW0pe3JldHVybiBudW0uaW11bCh0aGlzLmspfSxpbmhlcml0cyhLMjU2LE1QcmltZSksSzI1Ni5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24gc3BsaXQoaW5wdXQsb3V0cHV0KXtmb3IodmFyIG91dExlbj1NYXRoLm1pbihpbnB1dC5sZW5ndGgsOSksaT0wO2k8b3V0TGVuO2krKylvdXRwdXQud29yZHNbaV09aW5wdXQud29yZHNbaV07aWYob3V0cHV0Lmxlbmd0aD1vdXRMZW4saW5wdXQubGVuZ3RoPD05KXJldHVybiBpbnB1dC53b3Jkc1swXT0wLHZvaWQoaW5wdXQubGVuZ3RoPTEpO3ZhciBwcmV2PWlucHV0LndvcmRzWzldO2ZvcihvdXRwdXQud29yZHNbb3V0cHV0Lmxlbmd0aCsrXT00MTk0MzAzJnByZXYsaT0xMDtpPGlucHV0Lmxlbmd0aDtpKyspe3ZhciBuZXh0PTB8aW5wdXQud29yZHNbaV07aW5wdXQud29yZHNbaS0xMF09KDQxOTQzMDMmbmV4dCk8PDR8cHJldj4+PjIyLHByZXY9bmV4dH1wcmV2Pj4+PTIyLGlucHV0LndvcmRzW2ktMTBdPXByZXYsMD09PXByZXYmJmlucHV0Lmxlbmd0aD4xMD9pbnB1dC5sZW5ndGgtPTEwOmlucHV0Lmxlbmd0aC09OX0sSzI1Ni5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24gaW11bEsobnVtKXtudW0ud29yZHNbbnVtLmxlbmd0aF09MCxudW0ud29yZHNbbnVtLmxlbmd0aCsxXT0wLG51bS5sZW5ndGgrPTI7Zm9yKHZhciBsbz0wLGk9MDtpPG51bS5sZW5ndGg7aSsrKXt2YXIgdz0wfG51bS53b3Jkc1tpXTtsbys9OTc3KncsbnVtLndvcmRzW2ldPTY3MTA4ODYzJmxvLGxvPTY0KncrKGxvLzY3MTA4ODY0fDApfXJldHVybiAwPT09bnVtLndvcmRzW251bS5sZW5ndGgtMV0mJihudW0ubGVuZ3RoLS0sMD09PW51bS53b3Jkc1tudW0ubGVuZ3RoLTFdJiZudW0ubGVuZ3RoLS0pLG51bX0saW5oZXJpdHMoUDIyNCxNUHJpbWUpLGluaGVyaXRzKFAxOTIsTVByaW1lKSxpbmhlcml0cyhQMjU1MTksTVByaW1lKSxQMjU1MTkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uIGltdWxLKG51bSl7Zm9yKHZhciBjYXJyeT0wLGk9MDtpPG51bS5sZW5ndGg7aSsrKXt2YXIgaGk9MTkqKDB8bnVtLndvcmRzW2ldKStjYXJyeSxsbz02NzEwODg2MyZoaTtoaT4+Pj0yNixudW0ud29yZHNbaV09bG8sY2Fycnk9aGl9cmV0dXJuIDAhPT1jYXJyeSYmKG51bS53b3Jkc1tudW0ubGVuZ3RoKytdPWNhcnJ5KSxudW19LEJOLl9wcmltZT1mdW5jdGlvbiBwcmltZShuYW1lKXtpZihwcmltZXNbbmFtZV0pcmV0dXJuIHByaW1lc1tuYW1lXTt2YXIgcHJpbWU7aWYoImsyNTYiPT09bmFtZSlwcmltZT1uZXcgSzI1NjtlbHNlIGlmKCJwMjI0Ij09PW5hbWUpcHJpbWU9bmV3IFAyMjQ7ZWxzZSBpZigicDE5MiI9PT1uYW1lKXByaW1lPW5ldyBQMTkyO2Vsc2V7aWYoInAyNTUxOSIhPT1uYW1lKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK25hbWUpO3ByaW1lPW5ldyBQMjU1MTl9cmV0dXJuIHByaW1lc1tuYW1lXT1wcmltZSxwcmltZX0sUmVkLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbiBfdmVyaWZ5MShhKXthc3NlcnQoMD09PWEubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYXNzZXJ0KGEucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFJlZC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24gX3ZlcmlmeTIoYSxiKXthc3NlcnQoMD09PShhLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGFzc2VydChhLnJlZCYmYS5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxSZWQucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24gaW1vZChhKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYSkuX2ZvcmNlUmVkKHRoaXMpOmEudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sUmVkLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24gbmVnKGEpe3JldHVybiBhLmlzWmVybygpP2EuY2xvbmUoKTp0aGlzLm0uc3ViKGEpLl9mb3JjZVJlZCh0aGlzKX0sUmVkLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24gYWRkKGEsYil7dGhpcy5fdmVyaWZ5MihhLGIpO3ZhciByZXM9YS5hZGQoYik7cmV0dXJuIHJlcy5jbXAodGhpcy5tKT49MCYmcmVzLmlzdWIodGhpcy5tKSxyZXMuX2ZvcmNlUmVkKHRoaXMpfSxSZWQucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24gaWFkZChhLGIpe3RoaXMuX3ZlcmlmeTIoYSxiKTt2YXIgcmVzPWEuaWFkZChiKTtyZXR1cm4gcmVzLmNtcCh0aGlzLm0pPj0wJiZyZXMuaXN1Yih0aGlzLm0pLHJlc30sUmVkLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24gc3ViKGEsYil7dGhpcy5fdmVyaWZ5MihhLGIpO3ZhciByZXM9YS5zdWIoYik7cmV0dXJuIHJlcy5jbXBuKDApPDAmJnJlcy5pYWRkKHRoaXMubSkscmVzLl9mb3JjZVJlZCh0aGlzKX0sUmVkLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uIGlzdWIoYSxiKXt0aGlzLl92ZXJpZnkyKGEsYik7dmFyIHJlcz1hLmlzdWIoYik7cmV0dXJuIHJlcy5jbXBuKDApPDAmJnJlcy5pYWRkKHRoaXMubSkscmVzfSxSZWQucHJvdG90eXBlLnNobD1mdW5jdGlvbiBzaGwoYSxudW0pe3JldHVybiB0aGlzLl92ZXJpZnkxKGEpLHRoaXMuaW1vZChhLnVzaGxuKG51bSkpfSxSZWQucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24gaW11bChhLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKGEsYiksdGhpcy5pbW9kKGEuaW11bChiKSl9LFJlZC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uIG11bChhLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKGEsYiksdGhpcy5pbW9kKGEubXVsKGIpKX0sUmVkLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uIGlzcXIoYSl7cmV0dXJuIHRoaXMuaW11bChhLGEuY2xvbmUoKSl9LFJlZC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uIHNxcihhKXtyZXR1cm4gdGhpcy5tdWwoYSxhKX0sUmVkLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uIHNxcnQoYSl7aWYoYS5pc1plcm8oKSlyZXR1cm4gYS5jbG9uZSgpO3ZhciBtb2QzPXRoaXMubS5hbmRsbigzKTtpZihhc3NlcnQobW9kMyUyPT0xKSwzPT09bW9kMyl7dmFyIHBvdz10aGlzLm0uYWRkKG5ldyBCTigxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhhLHBvdyl9Zm9yKHZhciBxPXRoaXMubS5zdWJuKDEpLHM9MDshcS5pc1plcm8oKSYmMD09PXEuYW5kbG4oMSk7KXMrKyxxLml1c2hybigxKTthc3NlcnQoIXEuaXNaZXJvKCkpO3ZhciBvbmU9bmV3IEJOKDEpLnRvUmVkKHRoaXMpLG5PbmU9b25lLnJlZE5lZygpLGxwb3c9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHo9dGhpcy5tLmJpdExlbmd0aCgpO2Zvcih6PW5ldyBCTigyKnoqeikudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHosbHBvdykuY21wKG5PbmUpOyl6LnJlZElBZGQobk9uZSk7Zm9yKHZhciBjPXRoaXMucG93KHoscSkscj10aGlzLnBvdyhhLHEuYWRkbigxKS5pdXNocm4oMSkpLHQ9dGhpcy5wb3coYSxxKSxtPXM7MCE9PXQuY21wKG9uZSk7KXtmb3IodmFyIHRtcD10LGk9MDswIT09dG1wLmNtcChvbmUpO2krKyl0bXA9dG1wLnJlZFNxcigpO2Fzc2VydChpPG0pO3ZhciBiPXRoaXMucG93KGMsbmV3IEJOKDEpLml1c2hsbihtLWktMSkpO3I9ci5yZWRNdWwoYiksYz1iLnJlZFNxcigpLHQ9dC5yZWRNdWwoYyksbT1pfXJldHVybiByfSxSZWQucHJvdG90eXBlLmludm09ZnVuY3Rpb24gaW52bShhKXt2YXIgaW52PWEuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1pbnYubmVnYXRpdmU/KGludi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChpbnYpLnJlZE5lZygpKTp0aGlzLmltb2QoaW52KX0sUmVkLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24gcG93KGEsbnVtKXtpZihudW0uaXNaZXJvKCkpcmV0dXJuIG5ldyBCTigxKS50b1JlZCh0aGlzKTtpZigwPT09bnVtLmNtcG4oMSkpcmV0dXJuIGEuY2xvbmUoKTt2YXIgd25kPW5ldyBBcnJheSgxNik7d25kWzBdPW5ldyBCTigxKS50b1JlZCh0aGlzKSx3bmRbMV09YTtmb3IodmFyIGk9MjtpPHduZC5sZW5ndGg7aSsrKXduZFtpXT10aGlzLm11bCh3bmRbaS0xXSxhKTt2YXIgcmVzPXduZFswXSxjdXJyZW50PTAsY3VycmVudExlbj0wLHN0YXJ0PW51bS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXN0YXJ0JiYoc3RhcnQ9MjYpLGk9bnVtLmxlbmd0aC0xO2k+PTA7aS0tKXtmb3IodmFyIHdvcmQ9bnVtLndvcmRzW2ldLGo9c3RhcnQtMTtqPj0wO2otLSl7dmFyIGJpdD13b3JkPj5qJjE7cmVzIT09d25kWzBdJiYocmVzPXRoaXMuc3FyKHJlcykpLDAhPT1iaXR8fDAhPT1jdXJyZW50PyhjdXJyZW50PDw9MSxjdXJyZW50fD1iaXQsKDQ9PT0rK2N1cnJlbnRMZW58fDA9PT1pJiYwPT09aikmJihyZXM9dGhpcy5tdWwocmVzLHduZFtjdXJyZW50XSksY3VycmVudExlbj0wLGN1cnJlbnQ9MCkpOmN1cnJlbnRMZW49MH1zdGFydD0yNn1yZXR1cm4gcmVzfSxSZWQucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbiBjb252ZXJ0VG8obnVtKXt2YXIgcj1udW0udW1vZCh0aGlzLm0pO3JldHVybiByPT09bnVtP3IuY2xvbmUoKTpyfSxSZWQucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uIGNvbnZlcnRGcm9tKG51bSl7dmFyIHJlcz1udW0uY2xvbmUoKTtyZXR1cm4gcmVzLnJlZD1udWxsLHJlc30sQk4ubW9udD1mdW5jdGlvbiBtb250KG51bSl7cmV0dXJuIG5ldyBNb250KG51bSl9LGluaGVyaXRzKE1vbnQsUmVkKSxNb250LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24gY29udmVydFRvKG51bSl7cmV0dXJuIHRoaXMuaW1vZChudW0udXNobG4odGhpcy5zaGlmdCkpfSxNb250LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbiBjb252ZXJ0RnJvbShudW0pe3ZhciByPXRoaXMuaW1vZChudW0ubXVsKHRoaXMucmludikpO3JldHVybiByLnJlZD1udWxsLHJ9LE1vbnQucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24gaW11bChhLGIpe2lmKGEuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIGEud29yZHNbMF09MCxhLmxlbmd0aD0xLGE7dmFyIHQ9YS5pbXVsKGIpLGM9dC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksdT10LmlzdWIoYykuaXVzaHJuKHRoaXMuc2hpZnQpLHJlcz11O3JldHVybiB1LmNtcCh0aGlzLm0pPj0wP3Jlcz11LmlzdWIodGhpcy5tKTp1LmNtcG4oMCk8MCYmKHJlcz11LmlhZGQodGhpcy5tKSkscmVzLl9mb3JjZVJlZCh0aGlzKX0sTW9udC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uIG11bChhLGIpe2lmKGEuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyBCTigwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHQ9YS5tdWwoYiksYz10Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSx1PXQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCkscmVzPXU7cmV0dXJuIHUuY21wKHRoaXMubSk+PTA/cmVzPXUuaXN1Yih0aGlzLm0pOnUuY21wbigwKTwwJiYocmVzPXUuaWFkZCh0aGlzLm0pKSxyZXMuX2ZvcmNlUmVkKHRoaXMpfSxNb250LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uIGludm0oYSl7cmV0dXJuIHRoaXMuaW1vZChhLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0obW9kdWxlPV9fd2VicGFja19yZXF1aXJlX18ubm1kKG1vZHVsZSksdGhpcyl9LCIuLi8uLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcyIobW9kdWxlKXtmdW5jdGlvbiBhc3NlcnQodmFsLG1zZyl7aWYoIXZhbCl0aHJvdyBuZXcgRXJyb3IobXNnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfW1vZHVsZS5leHBvcnRzPWFzc2VydCxhc3NlcnQuZXF1YWw9ZnVuY3Rpb24gYXNzZXJ0RXF1YWwobCxyLG1zZyl7aWYobCE9cil0aHJvdyBuZXcgRXJyb3IobXNnfHwiQXNzZXJ0aW9uIGZhaWxlZDogIitsKyIgIT0gIityKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWNyeXB0by11dGlscy9saWIvdXRpbHMuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgdXRpbHM9ZXhwb3J0cztmdW5jdGlvbiB6ZXJvMih3b3JkKXtyZXR1cm4gMT09PXdvcmQubGVuZ3RoPyIwIit3b3JkOndvcmR9ZnVuY3Rpb24gdG9IZXgobXNnKXtmb3IodmFyIHJlcz0iIixpPTA7aTxtc2cubGVuZ3RoO2krKylyZXMrPXplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO3JldHVybiByZXN9dXRpbHMudG9BcnJheT1mdW5jdGlvbiB0b0FycmF5KG1zZyxlbmMpe2lmKEFycmF5LmlzQXJyYXkobXNnKSlyZXR1cm4gbXNnLnNsaWNlKCk7aWYoIW1zZylyZXR1cm5bXTt2YXIgcmVzPVtdO2lmKCJzdHJpbmciIT10eXBlb2YgbXNnKXtmb3IodmFyIGk9MDtpPG1zZy5sZW5ndGg7aSsrKXJlc1tpXT0wfG1zZ1tpXTtyZXR1cm4gcmVzfWlmKCJoZXgiPT09ZW5jKXsobXNnPW1zZy5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihtc2c9IjAiK21zZyk7Zm9yKGk9MDtpPG1zZy5sZW5ndGg7aSs9MilyZXMucHVzaChwYXJzZUludChtc2dbaV0rbXNnW2krMV0sMTYpKX1lbHNlIGZvcihpPTA7aTxtc2cubGVuZ3RoO2krKyl7dmFyIGM9bXNnLmNoYXJDb2RlQXQoaSksaGk9Yz4+OCxsbz0yNTUmYztoaT9yZXMucHVzaChoaSxsbyk6cmVzLnB1c2gobG8pfXJldHVybiByZXN9LHV0aWxzLnplcm8yPXplcm8yLHV0aWxzLnRvSGV4PXRvSGV4LHV0aWxzLmVuY29kZT1mdW5jdGlvbiBlbmNvZGUoYXJyLGVuYyl7cmV0dXJuImhleCI9PT1lbmM/dG9IZXgoYXJyKTphcnJ9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1pbnNwZWN0L2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBoYXNNYXA9ImZ1bmN0aW9uIj09dHlwZW9mIE1hcCYmTWFwLnByb3RvdHlwZSxtYXBTaXplRGVzY3JpcHRvcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJiZoYXNNYXA/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihNYXAucHJvdG90eXBlLCJzaXplIik6bnVsbCxtYXBTaXplPWhhc01hcCYmbWFwU2l6ZURlc2NyaXB0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBtYXBTaXplRGVzY3JpcHRvci5nZXQ/bWFwU2l6ZURlc2NyaXB0b3IuZ2V0Om51bGwsbWFwRm9yRWFjaD1oYXNNYXAmJk1hcC5wcm90b3R5cGUuZm9yRWFjaCxoYXNTZXQ9ImZ1bmN0aW9uIj09dHlwZW9mIFNldCYmU2V0LnByb3RvdHlwZSxzZXRTaXplRGVzY3JpcHRvcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJiZoYXNTZXQ/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihTZXQucHJvdG90eXBlLCJzaXplIik6bnVsbCxzZXRTaXplPWhhc1NldCYmc2V0U2l6ZURlc2NyaXB0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBzZXRTaXplRGVzY3JpcHRvci5nZXQ/c2V0U2l6ZURlc2NyaXB0b3IuZ2V0Om51bGwsc2V0Rm9yRWFjaD1oYXNTZXQmJlNldC5wcm90b3R5cGUuZm9yRWFjaCx3ZWFrTWFwSGFzPSJmdW5jdGlvbiI9PXR5cGVvZiBXZWFrTWFwJiZXZWFrTWFwLnByb3RvdHlwZT9XZWFrTWFwLnByb3RvdHlwZS5oYXM6bnVsbCx3ZWFrU2V0SGFzPSJmdW5jdGlvbiI9PXR5cGVvZiBXZWFrU2V0JiZXZWFrU2V0LnByb3RvdHlwZT9XZWFrU2V0LnByb3RvdHlwZS5oYXM6bnVsbCx3ZWFrUmVmRGVyZWY9ImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtSZWYmJldlYWtSZWYucHJvdG90eXBlP1dlYWtSZWYucHJvdG90eXBlLmRlcmVmOm51bGwsYm9vbGVhblZhbHVlT2Y9Qm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZixvYmplY3RUb1N0cmluZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGZ1bmN0aW9uVG9TdHJpbmc9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLCRtYXRjaD1TdHJpbmcucHJvdG90eXBlLm1hdGNoLCRzbGljZT1TdHJpbmcucHJvdG90eXBlLnNsaWNlLCRyZXBsYWNlPVN0cmluZy5wcm90b3R5cGUucmVwbGFjZSwkdG9VcHBlckNhc2U9U3RyaW5nLnByb3RvdHlwZS50b1VwcGVyQ2FzZSwkdG9Mb3dlckNhc2U9U3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSwkdGVzdD1SZWdFeHAucHJvdG90eXBlLnRlc3QsJGNvbmNhdD1BcnJheS5wcm90b3R5cGUuY29uY2F0LCRqb2luPUFycmF5LnByb3RvdHlwZS5qb2luLCRhcnJTbGljZT1BcnJheS5wcm90b3R5cGUuc2xpY2UsJGZsb29yPU1hdGguZmxvb3IsYmlnSW50VmFsdWVPZj0iZnVuY3Rpb24iPT10eXBlb2YgQmlnSW50P0JpZ0ludC5wcm90b3R5cGUudmFsdWVPZjpudWxsLGdPUFM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxzeW1Ub1N0cmluZz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9TeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nOm51bGwsaGFzU2hhbW1lZFN5bWJvbHM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmIm9iamVjdCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IsdG9TdHJpbmdUYWc9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiYodHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZz09PWhhc1NoYW1tZWRTeW1ib2xzfHwic3ltYm9sIik/U3ltYm9sLnRvU3RyaW5nVGFnOm51bGwsaXNFbnVtZXJhYmxlPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsZ1BPPSgiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0LmdldFByb3RvdHlwZU9mOk9iamVjdC5nZXRQcm90b3R5cGVPZil8fChbXS5fX3Byb3RvX189PT1BcnJheS5wcm90b3R5cGU/ZnVuY3Rpb24oTyl7cmV0dXJuIE8uX19wcm90b19ffTpudWxsKTtmdW5jdGlvbiBhZGROdW1lcmljU2VwYXJhdG9yKG51bSxzdHIpe2lmKG51bT09PTEvMHx8bnVtPT09LTEvMHx8bnVtIT1udW18fG51bSYmbnVtPi0xZTMmJm51bTwxZTN8fCR0ZXN0LmNhbGwoL2UvLHN0cikpcmV0dXJuIHN0cjt2YXIgc2VwUmVnZXg9L1swLTldKD89KD86WzAtOV17M30pKyg/IVswLTldKSkvZztpZigibnVtYmVyIj09dHlwZW9mIG51bSl7dmFyIGludD1udW08MD8tJGZsb29yKC1udW0pOiRmbG9vcihudW0pO2lmKGludCE9PW51bSl7dmFyIGludFN0cj1TdHJpbmcoaW50KSxkZWM9JHNsaWNlLmNhbGwoc3RyLGludFN0ci5sZW5ndGgrMSk7cmV0dXJuICRyZXBsYWNlLmNhbGwoaW50U3RyLHNlcFJlZ2V4LCIkJl8iKSsiLiIrJHJlcGxhY2UuY2FsbCgkcmVwbGFjZS5jYWxsKGRlYywvKFswLTldezN9KS9nLCIkJl8iKSwvXyQvLCIiKX19cmV0dXJuICRyZXBsYWNlLmNhbGwoc3RyLHNlcFJlZ2V4LCIkJl8iKX12YXIgdXRpbEluc3BlY3Q9X193ZWJwYWNrX3JlcXVpcmVfXygiP2M5NWEiKSxpbnNwZWN0Q3VzdG9tPXV0aWxJbnNwZWN0LmN1c3RvbSxpbnNwZWN0U3ltYm9sPWlzU3ltYm9sKGluc3BlY3RDdXN0b20pP2luc3BlY3RDdXN0b206bnVsbCxxdW90ZXM9e19fcHJvdG9fXzpudWxsLGRvdWJsZTonIicsc2luZ2xlOiInIn0scXVvdGVSRXM9e19fcHJvdG9fXzpudWxsLGRvdWJsZTovKFsiXFxdKS9nLHNpbmdsZTovKFsnXFxdKS9nfTtmdW5jdGlvbiB3cmFwUXVvdGVzKHMsZGVmYXVsdFN0eWxlLG9wdHMpe3ZhciBzdHlsZT1vcHRzLnF1b3RlU3R5bGV8fGRlZmF1bHRTdHlsZSxxdW90ZUNoYXI9cXVvdGVzW3N0eWxlXTtyZXR1cm4gcXVvdGVDaGFyK3MrcXVvdGVDaGFyfWZ1bmN0aW9uIHF1b3RlKHMpe3JldHVybiAkcmVwbGFjZS5jYWxsKFN0cmluZyhzKSwvIi9nLCImcXVvdDsiKX1mdW5jdGlvbiBjYW5UcnVzdFRvU3RyaW5nKG9iail7cmV0dXJuIXRvU3RyaW5nVGFnfHwhKCJvYmplY3QiPT10eXBlb2Ygb2JqJiYodG9TdHJpbmdUYWcgaW4gb2JqfHx2b2lkIDAhPT1vYmpbdG9TdHJpbmdUYWddKSl9ZnVuY3Rpb24gaXNBcnJheShvYmope3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT10b1N0cihvYmopJiZjYW5UcnVzdFRvU3RyaW5nKG9iail9ZnVuY3Rpb24gaXNSZWdFeHAob2JqKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PXRvU3RyKG9iaikmJmNhblRydXN0VG9TdHJpbmcob2JqKX1mdW5jdGlvbiBpc1N5bWJvbChvYmope2lmKGhhc1NoYW1tZWRTeW1ib2xzKXJldHVybiBvYmomJiJvYmplY3QiPT10eXBlb2Ygb2JqJiZvYmogaW5zdGFuY2VvZiBTeW1ib2w7aWYoInN5bWJvbCI9PXR5cGVvZiBvYmopcmV0dXJuITA7aWYoIW9ianx8Im9iamVjdCIhPXR5cGVvZiBvYmp8fCFzeW1Ub1N0cmluZylyZXR1cm4hMTt0cnl7cmV0dXJuIHN5bVRvU3RyaW5nLmNhbGwob2JqKSwhMH1jYXRjaChlKXt9cmV0dXJuITF9bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gaW5zcGVjdF8ob2JqLG9wdGlvbnMsZGVwdGgsc2Vlbil7dmFyIG9wdHM9b3B0aW9uc3x8e307aWYoaGFzKG9wdHMsInF1b3RlU3R5bGUiKSYmIWhhcyhxdW90ZXMsb3B0cy5xdW90ZVN0eWxlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gInF1b3RlU3R5bGUiIG11c3QgYmUgInNpbmdsZSIgb3IgImRvdWJsZSInKTtpZihoYXMob3B0cywibWF4U3RyaW5nTGVuZ3RoIikmJigibnVtYmVyIj09dHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoP29wdHMubWF4U3RyaW5nTGVuZ3RoPDAmJm9wdHMubWF4U3RyaW5nTGVuZ3RoIT09MS8wOm51bGwhPT1vcHRzLm1heFN0cmluZ0xlbmd0aCkpdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uICJtYXhTdHJpbmdMZW5ndGgiLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIEluZmluaXR5LCBvciBgbnVsbGAnKTt2YXIgY3VzdG9tSW5zcGVjdD0haGFzKG9wdHMsImN1c3RvbUluc3BlY3QiKXx8b3B0cy5jdXN0b21JbnNwZWN0O2lmKCJib29sZWFuIiE9dHlwZW9mIGN1c3RvbUluc3BlY3QmJiJzeW1ib2wiIT09Y3VzdG9tSW5zcGVjdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYCdzeW1ib2wnYCIpO2lmKGhhcyhvcHRzLCJpbmRlbnQiKSYmbnVsbCE9PW9wdHMuaW5kZW50JiYiXHQiIT09b3B0cy5pbmRlbnQmJiEocGFyc2VJbnQob3B0cy5pbmRlbnQsMTApPT09b3B0cy5pbmRlbnQmJm9wdHMuaW5kZW50PjApKXRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiAiaW5kZW50IiBtdXN0IGJlICJcXHQiLCBhbiBpbnRlZ2VyID4gMCwgb3IgYG51bGxgJyk7aWYoaGFzKG9wdHMsIm51bWVyaWNTZXBhcmF0b3IiKSYmImJvb2xlYW4iIT10eXBlb2Ygb3B0cy5udW1lcmljU2VwYXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiAibnVtZXJpY1NlcGFyYXRvciIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCBvciBgZmFsc2VgJyk7dmFyIG51bWVyaWNTZXBhcmF0b3I9b3B0cy5udW1lcmljU2VwYXJhdG9yO2lmKHZvaWQgMD09PW9iailyZXR1cm4idW5kZWZpbmVkIjtpZihudWxsPT09b2JqKXJldHVybiJudWxsIjtpZigiYm9vbGVhbiI9PXR5cGVvZiBvYmopcmV0dXJuIG9iaj8idHJ1ZSI6ImZhbHNlIjtpZigic3RyaW5nIj09dHlwZW9mIG9iailyZXR1cm4gaW5zcGVjdFN0cmluZyhvYmosb3B0cyk7aWYoIm51bWJlciI9PXR5cGVvZiBvYmope2lmKDA9PT1vYmopcmV0dXJuIDEvMC9vYmo+MD8iMCI6Ii0wIjt2YXIgc3RyPVN0cmluZyhvYmopO3JldHVybiBudW1lcmljU2VwYXJhdG9yP2FkZE51bWVyaWNTZXBhcmF0b3Iob2JqLHN0cik6c3RyfWlmKCJiaWdpbnQiPT10eXBlb2Ygb2JqKXt2YXIgYmlnSW50U3RyPVN0cmluZyhvYmopKyJuIjtyZXR1cm4gbnVtZXJpY1NlcGFyYXRvcj9hZGROdW1lcmljU2VwYXJhdG9yKG9iaixiaWdJbnRTdHIpOmJpZ0ludFN0cn12YXIgbWF4RGVwdGg9dm9pZCAwPT09b3B0cy5kZXB0aD81Om9wdHMuZGVwdGg7aWYodm9pZCAwPT09ZGVwdGgmJihkZXB0aD0wKSxkZXB0aD49bWF4RGVwdGgmJm1heERlcHRoPjAmJiJvYmplY3QiPT10eXBlb2Ygb2JqKXJldHVybiBpc0FycmF5KG9iaik/IltBcnJheV0iOiJbT2JqZWN0XSI7dmFyIGluZGVudD1mdW5jdGlvbiBnZXRJbmRlbnQob3B0cyxkZXB0aCl7dmFyIGJhc2VJbmRlbnQ7aWYoIlx0Ij09PW9wdHMuaW5kZW50KWJhc2VJbmRlbnQ9Ilx0IjtlbHNle2lmKCEoIm51bWJlciI9PXR5cGVvZiBvcHRzLmluZGVudCYmb3B0cy5pbmRlbnQ+MCkpcmV0dXJuIG51bGw7YmFzZUluZGVudD0kam9pbi5jYWxsKEFycmF5KG9wdHMuaW5kZW50KzEpLCIgIil9cmV0dXJue2Jhc2U6YmFzZUluZGVudCxwcmV2OiRqb2luLmNhbGwoQXJyYXkoZGVwdGgrMSksYmFzZUluZGVudCl9fShvcHRzLGRlcHRoKTtpZih2b2lkIDA9PT1zZWVuKXNlZW49W107ZWxzZSBpZihpbmRleE9mKHNlZW4sb2JqKT49MClyZXR1cm4iW0NpcmN1bGFyXSI7ZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSxmcm9tLG5vSW5kZW50KXtpZihmcm9tJiYoc2Vlbj0kYXJyU2xpY2UuY2FsbChzZWVuKSkucHVzaChmcm9tKSxub0luZGVudCl7dmFyIG5ld09wdHM9e2RlcHRoOm9wdHMuZGVwdGh9O3JldHVybiBoYXMob3B0cywicXVvdGVTdHlsZSIpJiYobmV3T3B0cy5xdW90ZVN0eWxlPW9wdHMucXVvdGVTdHlsZSksaW5zcGVjdF8odmFsdWUsbmV3T3B0cyxkZXB0aCsxLHNlZW4pfXJldHVybiBpbnNwZWN0Xyh2YWx1ZSxvcHRzLGRlcHRoKzEsc2Vlbil9aWYoImZ1bmN0aW9uIj09dHlwZW9mIG9iaiYmIWlzUmVnRXhwKG9iaikpe3ZhciBuYW1lPWZ1bmN0aW9uIG5hbWVPZihmKXtpZihmLm5hbWUpcmV0dXJuIGYubmFtZTt2YXIgbT0kbWF0Y2guY2FsbChmdW5jdGlvblRvU3RyaW5nLmNhbGwoZiksL15mdW5jdGlvblxzKihbXHckXSspLyk7aWYobSlyZXR1cm4gbVsxXTtyZXR1cm4gbnVsbH0ob2JqKSxrZXlzPWFyck9iaktleXMob2JqLGluc3BlY3QpO3JldHVybiJbRnVuY3Rpb24iKyhuYW1lPyI6ICIrbmFtZToiIChhbm9ueW1vdXMpIikrIl0iKyhrZXlzLmxlbmd0aD4wPyIgeyAiKyRqb2luLmNhbGwoa2V5cywiLCAiKSsiIH0iOiIiKX1pZihpc1N5bWJvbChvYmopKXt2YXIgc3ltU3RyaW5nPWhhc1NoYW1tZWRTeW1ib2xzPyRyZXBsYWNlLmNhbGwoU3RyaW5nKG9iaiksL14oU3ltYm9sXCguKlwpKV9bXildKiQvLCIkMSIpOnN5bVRvU3RyaW5nLmNhbGwob2JqKTtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIG9ianx8aGFzU2hhbW1lZFN5bWJvbHM/c3ltU3RyaW5nOm1hcmtCb3hlZChzeW1TdHJpbmcpfWlmKGZ1bmN0aW9uIGlzRWxlbWVudCh4KXtpZigheHx8Im9iamVjdCIhPXR5cGVvZiB4KXJldHVybiExO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTEVsZW1lbnQmJnggaW5zdGFuY2VvZiBIVE1MRWxlbWVudClyZXR1cm4hMDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHgubm9kZU5hbWUmJiJmdW5jdGlvbiI9PXR5cGVvZiB4LmdldEF0dHJpYnV0ZX0ob2JqKSl7Zm9yKHZhciBzPSI8IiskdG9Mb3dlckNhc2UuY2FsbChTdHJpbmcob2JqLm5vZGVOYW1lKSksYXR0cnM9b2JqLmF0dHJpYnV0ZXN8fFtdLGk9MDtpPGF0dHJzLmxlbmd0aDtpKyspcys9IiAiK2F0dHJzW2ldLm5hbWUrIj0iK3dyYXBRdW90ZXMocXVvdGUoYXR0cnNbaV0udmFsdWUpLCJkb3VibGUiLG9wdHMpO3JldHVybiBzKz0iPiIsb2JqLmNoaWxkTm9kZXMmJm9iai5jaGlsZE5vZGVzLmxlbmd0aCYmKHMrPSIuLi4iKSxzKz0iPC8iKyR0b0xvd2VyQ2FzZS5jYWxsKFN0cmluZyhvYmoubm9kZU5hbWUpKSsiPiJ9aWYoaXNBcnJheShvYmopKXtpZigwPT09b2JqLmxlbmd0aClyZXR1cm4iW10iO3ZhciB4cz1hcnJPYmpLZXlzKG9iaixpbnNwZWN0KTtyZXR1cm4gaW5kZW50JiYhZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cyl7Zm9yKHZhciBpPTA7aTx4cy5sZW5ndGg7aSsrKWlmKGluZGV4T2YoeHNbaV0sIlxuIik+PTApcmV0dXJuITE7cmV0dXJuITB9KHhzKT8iWyIraW5kZW50ZWRKb2luKHhzLGluZGVudCkrIl0iOiJbICIrJGpvaW4uY2FsbCh4cywiLCAiKSsiIF0ifWlmKGZ1bmN0aW9uIGlzRXJyb3Iob2JqKXtyZXR1cm4iW29iamVjdCBFcnJvcl0iPT09dG9TdHIob2JqKSYmY2FuVHJ1c3RUb1N0cmluZyhvYmopfShvYmopKXt2YXIgcGFydHM9YXJyT2JqS2V5cyhvYmosaW5zcGVjdCk7cmV0dXJuImNhdXNlImluIEVycm9yLnByb3RvdHlwZXx8ISgiY2F1c2UiaW4gb2JqKXx8aXNFbnVtZXJhYmxlLmNhbGwob2JqLCJjYXVzZSIpPzA9PT1wYXJ0cy5sZW5ndGg/IlsiK1N0cmluZyhvYmopKyJdIjoieyBbIitTdHJpbmcob2JqKSsiXSAiKyRqb2luLmNhbGwocGFydHMsIiwgIikrIiB9IjoieyBbIitTdHJpbmcob2JqKSsiXSAiKyRqb2luLmNhbGwoJGNvbmNhdC5jYWxsKCJbY2F1c2VdOiAiK2luc3BlY3Qob2JqLmNhdXNlKSxwYXJ0cyksIiwgIikrIiB9In1pZigib2JqZWN0Ij09dHlwZW9mIG9iaiYmY3VzdG9tSW5zcGVjdCl7aWYoaW5zcGVjdFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIG9ialtpbnNwZWN0U3ltYm9sXSYmdXRpbEluc3BlY3QpcmV0dXJuIHV0aWxJbnNwZWN0KG9iaix7ZGVwdGg6bWF4RGVwdGgtZGVwdGh9KTtpZigic3ltYm9sIiE9PWN1c3RvbUluc3BlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBvYmouaW5zcGVjdClyZXR1cm4gb2JqLmluc3BlY3QoKX1pZihmdW5jdGlvbiBpc01hcCh4KXtpZighbWFwU2l6ZXx8IXh8fCJvYmplY3QiIT10eXBlb2YgeClyZXR1cm4hMTt0cnl7bWFwU2l6ZS5jYWxsKHgpO3RyeXtzZXRTaXplLmNhbGwoeCl9Y2F0Y2gocyl7cmV0dXJuITB9cmV0dXJuIHggaW5zdGFuY2VvZiBNYXB9Y2F0Y2goZSl7fXJldHVybiExfShvYmopKXt2YXIgbWFwUGFydHM9W107cmV0dXJuIG1hcEZvckVhY2gmJm1hcEZvckVhY2guY2FsbChvYmosZnVuY3Rpb24odmFsdWUsa2V5KXttYXBQYXJ0cy5wdXNoKGluc3BlY3Qoa2V5LG9iaiwhMCkrIiA9PiAiK2luc3BlY3QodmFsdWUsb2JqKSl9KSxjb2xsZWN0aW9uT2YoIk1hcCIsbWFwU2l6ZS5jYWxsKG9iaiksbWFwUGFydHMsaW5kZW50KX1pZihmdW5jdGlvbiBpc1NldCh4KXtpZighc2V0U2l6ZXx8IXh8fCJvYmplY3QiIT10eXBlb2YgeClyZXR1cm4hMTt0cnl7c2V0U2l6ZS5jYWxsKHgpO3RyeXttYXBTaXplLmNhbGwoeCl9Y2F0Y2gobSl7cmV0dXJuITB9cmV0dXJuIHggaW5zdGFuY2VvZiBTZXR9Y2F0Y2goZSl7fXJldHVybiExfShvYmopKXt2YXIgc2V0UGFydHM9W107cmV0dXJuIHNldEZvckVhY2gmJnNldEZvckVhY2guY2FsbChvYmosZnVuY3Rpb24odmFsdWUpe3NldFBhcnRzLnB1c2goaW5zcGVjdCh2YWx1ZSxvYmopKX0pLGNvbGxlY3Rpb25PZigiU2V0IixzZXRTaXplLmNhbGwob2JqKSxzZXRQYXJ0cyxpbmRlbnQpfWlmKGZ1bmN0aW9uIGlzV2Vha01hcCh4KXtpZighd2Vha01hcEhhc3x8IXh8fCJvYmplY3QiIT10eXBlb2YgeClyZXR1cm4hMTt0cnl7d2Vha01hcEhhcy5jYWxsKHgsd2Vha01hcEhhcyk7dHJ5e3dlYWtTZXRIYXMuY2FsbCh4LHdlYWtTZXRIYXMpfWNhdGNoKHMpe3JldHVybiEwfXJldHVybiB4IGluc3RhbmNlb2YgV2Vha01hcH1jYXRjaChlKXt9cmV0dXJuITF9KG9iaikpcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoIldlYWtNYXAiKTtpZihmdW5jdGlvbiBpc1dlYWtTZXQoeCl7aWYoIXdlYWtTZXRIYXN8fCF4fHwib2JqZWN0IiE9dHlwZW9mIHgpcmV0dXJuITE7dHJ5e3dlYWtTZXRIYXMuY2FsbCh4LHdlYWtTZXRIYXMpO3RyeXt3ZWFrTWFwSGFzLmNhbGwoeCx3ZWFrTWFwSGFzKX1jYXRjaChzKXtyZXR1cm4hMH1yZXR1cm4geCBpbnN0YW5jZW9mIFdlYWtTZXR9Y2F0Y2goZSl7fXJldHVybiExfShvYmopKXJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCJXZWFrU2V0Iik7aWYoZnVuY3Rpb24gaXNXZWFrUmVmKHgpe2lmKCF3ZWFrUmVmRGVyZWZ8fCF4fHwib2JqZWN0IiE9dHlwZW9mIHgpcmV0dXJuITE7dHJ5e3JldHVybiB3ZWFrUmVmRGVyZWYuY2FsbCh4KSwhMH1jYXRjaChlKXt9cmV0dXJuITF9KG9iaikpcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoIldlYWtSZWYiKTtpZihmdW5jdGlvbiBpc051bWJlcihvYmope3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09dG9TdHIob2JqKSYmY2FuVHJ1c3RUb1N0cmluZyhvYmopfShvYmopKXJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChOdW1iZXIob2JqKSkpO2lmKGZ1bmN0aW9uIGlzQmlnSW50KG9iail7aWYoIW9ianx8Im9iamVjdCIhPXR5cGVvZiBvYmp8fCFiaWdJbnRWYWx1ZU9mKXJldHVybiExO3RyeXtyZXR1cm4gYmlnSW50VmFsdWVPZi5jYWxsKG9iaiksITB9Y2F0Y2goZSl7fXJldHVybiExfShvYmopKXJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKSkpO2lmKGZ1bmN0aW9uIGlzQm9vbGVhbihvYmope3JldHVybiJbb2JqZWN0IEJvb2xlYW5dIj09PXRvU3RyKG9iaikmJmNhblRydXN0VG9TdHJpbmcob2JqKX0ob2JqKSlyZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7aWYoZnVuY3Rpb24gaXNTdHJpbmcob2JqKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PXRvU3RyKG9iaikmJmNhblRydXN0VG9TdHJpbmcob2JqKX0ob2JqKSlyZXR1cm4gbWFya0JveGVkKGluc3BlY3QoU3RyaW5nKG9iaikpKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmb2JqPT09d2luZG93KXJldHVybiJ7IFtvYmplY3QgV2luZG93XSB9IjtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXMmJm9iaj09PWdsb2JhbFRoaXN8fHZvaWQgMCE9PV9fd2VicGFja19yZXF1aXJlX18uZyYmb2JqPT09X193ZWJwYWNrX3JlcXVpcmVfXy5nKXJldHVybiJ7IFtvYmplY3QgZ2xvYmFsVGhpc10gfSI7aWYoIWZ1bmN0aW9uIGlzRGF0ZShvYmope3JldHVybiJbb2JqZWN0IERhdGVdIj09PXRvU3RyKG9iaikmJmNhblRydXN0VG9TdHJpbmcob2JqKX0ob2JqKSYmIWlzUmVnRXhwKG9iaikpe3ZhciB5cz1hcnJPYmpLZXlzKG9iaixpbnNwZWN0KSxpc1BsYWluT2JqZWN0PWdQTz9nUE8ob2JqKT09PU9iamVjdC5wcm90b3R5cGU6b2JqIGluc3RhbmNlb2YgT2JqZWN0fHxvYmouY29uc3RydWN0b3I9PT1PYmplY3QscHJvdG9UYWc9b2JqIGluc3RhbmNlb2YgT2JqZWN0PyIiOiJudWxsIHByb3RvdHlwZSIsc3RyaW5nVGFnPSFpc1BsYWluT2JqZWN0JiZ0b1N0cmluZ1RhZyYmT2JqZWN0KG9iaik9PT1vYmomJnRvU3RyaW5nVGFnIGluIG9iaj8kc2xpY2UuY2FsbCh0b1N0cihvYmopLDgsLTEpOnByb3RvVGFnPyJPYmplY3QiOiIiLHRhZz0oaXNQbGFpbk9iamVjdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIG9iai5jb25zdHJ1Y3Rvcj8iIjpvYmouY29uc3RydWN0b3IubmFtZT9vYmouY29uc3RydWN0b3IubmFtZSsiICI6IiIpKyhzdHJpbmdUYWd8fHByb3RvVGFnPyJbIiskam9pbi5jYWxsKCRjb25jYXQuY2FsbChbXSxzdHJpbmdUYWd8fFtdLHByb3RvVGFnfHxbXSksIjogIikrIl0gIjoiIik7cmV0dXJuIDA9PT15cy5sZW5ndGg/dGFnKyJ7fSI6aW5kZW50P3RhZysieyIraW5kZW50ZWRKb2luKHlzLGluZGVudCkrIn0iOnRhZysieyAiKyRqb2luLmNhbGwoeXMsIiwgIikrIiB9In1yZXR1cm4gU3RyaW5nKG9iail9O3ZhciBoYXNPd249T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eXx8ZnVuY3Rpb24oa2V5KXtyZXR1cm4ga2V5IGluIHRoaXN9O2Z1bmN0aW9uIGhhcyhvYmosa2V5KXtyZXR1cm4gaGFzT3duLmNhbGwob2JqLGtleSl9ZnVuY3Rpb24gdG9TdHIob2JqKXtyZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbChvYmopfWZ1bmN0aW9uIGluZGV4T2YoeHMseCl7aWYoeHMuaW5kZXhPZilyZXR1cm4geHMuaW5kZXhPZih4KTtmb3IodmFyIGk9MCxsPXhzLmxlbmd0aDtpPGw7aSsrKWlmKHhzW2ldPT09eClyZXR1cm4gaTtyZXR1cm4tMX1mdW5jdGlvbiBpbnNwZWN0U3RyaW5nKHN0cixvcHRzKXtpZihzdHIubGVuZ3RoPm9wdHMubWF4U3RyaW5nTGVuZ3RoKXt2YXIgcmVtYWluaW5nPXN0ci5sZW5ndGgtb3B0cy5tYXhTdHJpbmdMZW5ndGgsdHJhaWxlcj0iLi4uICIrcmVtYWluaW5nKyIgbW9yZSBjaGFyYWN0ZXIiKyhyZW1haW5pbmc+MT8icyI6IiIpO3JldHVybiBpbnNwZWN0U3RyaW5nKCRzbGljZS5jYWxsKHN0ciwwLG9wdHMubWF4U3RyaW5nTGVuZ3RoKSxvcHRzKSt0cmFpbGVyfXZhciBxdW90ZVJFPXF1b3RlUkVzW29wdHMucXVvdGVTdHlsZXx8InNpbmdsZSJdO3JldHVybiBxdW90ZVJFLmxhc3RJbmRleD0wLHdyYXBRdW90ZXMoJHJlcGxhY2UuY2FsbCgkcmVwbGFjZS5jYWxsKHN0cixxdW90ZVJFLCJcXCQxIiksL1tceDAwLVx4MWZdL2csbG93Ynl0ZSksInNpbmdsZSIsb3B0cyl9ZnVuY3Rpb24gbG93Ynl0ZShjKXt2YXIgbj1jLmNoYXJDb2RlQXQoMCkseD17ODoiYiIsOToidCIsMTA6Im4iLDEyOiJmIiwxMzoiciJ9W25dO3JldHVybiB4PyJcXCIreDoiXFx4IisobjwxNj8iMCI6IiIpKyR0b1VwcGVyQ2FzZS5jYWxsKG4udG9TdHJpbmcoMTYpKX1mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKXtyZXR1cm4iT2JqZWN0KCIrc3RyKyIpIn1mdW5jdGlvbiB3ZWFrQ29sbGVjdGlvbk9mKHR5cGUpe3JldHVybiB0eXBlKyIgeyA/IH0ifWZ1bmN0aW9uIGNvbGxlY3Rpb25PZih0eXBlLHNpemUsZW50cmllcyxpbmRlbnQpe3JldHVybiB0eXBlKyIgKCIrc2l6ZSsiKSB7IisoaW5kZW50P2luZGVudGVkSm9pbihlbnRyaWVzLGluZGVudCk6JGpvaW4uY2FsbChlbnRyaWVzLCIsICIpKSsifSJ9ZnVuY3Rpb24gaW5kZW50ZWRKb2luKHhzLGluZGVudCl7aWYoMD09PXhzLmxlbmd0aClyZXR1cm4iIjt2YXIgbGluZUpvaW5lcj0iXG4iK2luZGVudC5wcmV2K2luZGVudC5iYXNlO3JldHVybiBsaW5lSm9pbmVyKyRqb2luLmNhbGwoeHMsIiwiK2xpbmVKb2luZXIpKyJcbiIraW5kZW50LnByZXZ9ZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosaW5zcGVjdCl7dmFyIGlzQXJyPWlzQXJyYXkob2JqKSx4cz1bXTtpZihpc0Fycil7eHMubGVuZ3RoPW9iai5sZW5ndGg7Zm9yKHZhciBpPTA7aTxvYmoubGVuZ3RoO2krKyl4c1tpXT1oYXMob2JqLGkpP2luc3BlY3Qob2JqW2ldLG9iaik6IiJ9dmFyIHN5bU1hcCxzeW1zPSJmdW5jdGlvbiI9PXR5cGVvZiBnT1BTP2dPUFMob2JqKTpbXTtpZihoYXNTaGFtbWVkU3ltYm9scyl7c3ltTWFwPXt9O2Zvcih2YXIgaz0wO2s8c3ltcy5sZW5ndGg7aysrKXN5bU1hcFsiJCIrc3ltc1trXV09c3ltc1trXX1mb3IodmFyIGtleSBpbiBvYmopaGFzKG9iaixrZXkpJiYoaXNBcnImJlN0cmluZyhOdW1iZXIoa2V5KSk9PT1rZXkmJmtleTxvYmoubGVuZ3RofHxoYXNTaGFtbWVkU3ltYm9scyYmc3ltTWFwWyIkIitrZXldaW5zdGFuY2VvZiBTeW1ib2x8fCgkdGVzdC5jYWxsKC9bXlx3JF0vLGtleSk/eHMucHVzaChpbnNwZWN0KGtleSxvYmopKyI6ICIraW5zcGVjdChvYmpba2V5XSxvYmopKTp4cy5wdXNoKGtleSsiOiAiK2luc3BlY3Qob2JqW2tleV0sb2JqKSkpKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZ09QUylmb3IodmFyIGo9MDtqPHN5bXMubGVuZ3RoO2orKylpc0VudW1lcmFibGUuY2FsbChvYmosc3ltc1tqXSkmJnhzLnB1c2goIlsiK2luc3BlY3Qoc3ltc1tqXSkrIl06ICIraW5zcGVjdChvYmpbc3ltc1tqXV0sb2JqKSk7cmV0dXJuIHhzfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9vYmplY3QtaXMvaW1wbGVtZW50YXRpb24uanMiKG1vZHVsZSl7InVzZSBzdHJpY3QiO3ZhciBudW1iZXJJc05hTj1mdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlIT12YWx1ZX07bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gaXMoYSxiKXtyZXR1cm4gMD09PWEmJjA9PT1iPzEvYT09MS9iOmE9PT1ifHwhKCFudW1iZXJJc05hTihhKXx8IW51bWJlcklzTmFOKGIpKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvb2JqZWN0LWlzL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgZGVmaW5lPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9kZWZpbmUtcHJvcGVydGllcy9pbmRleC5qcyIpLGNhbGxCaW5kPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvaW5kZXguanMiKSxpbXBsZW1lbnRhdGlvbj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvb2JqZWN0LWlzL2ltcGxlbWVudGF0aW9uLmpzIiksZ2V0UG9seWZpbGw9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1pcy9wb2x5ZmlsbC5qcyIpLHNoaW09X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1pcy9zaGltLmpzIikscG9seWZpbGw9Y2FsbEJpbmQoZ2V0UG9seWZpbGwoKSxPYmplY3QpO2RlZmluZShwb2x5ZmlsbCx7Z2V0UG9seWZpbGwsaW1wbGVtZW50YXRpb24sc2hpbX0pLG1vZHVsZS5leHBvcnRzPXBvbHlmaWxsfSwiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1pcy9wb2x5ZmlsbC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGltcGxlbWVudGF0aW9uPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9vYmplY3QtaXMvaW1wbGVtZW50YXRpb24uanMiKTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBnZXRQb2x5ZmlsbCgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOmltcGxlbWVudGF0aW9ufX0sIi4uLy4uL25vZGVfbW9kdWxlcy9vYmplY3QtaXMvc2hpbS5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGdldFBvbHlmaWxsPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9vYmplY3QtaXMvcG9seWZpbGwuanMiKSxkZWZpbmU9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2RlZmluZS1wcm9wZXJ0aWVzL2luZGV4LmpzIik7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gc2hpbU9iamVjdElzKCl7dmFyIHBvbHlmaWxsPWdldFBvbHlmaWxsKCk7cmV0dXJuIGRlZmluZShPYmplY3Qse2lzOnBvbHlmaWxsfSx7aXM6ZnVuY3Rpb24gdGVzdE9iamVjdElzKCl7cmV0dXJuIE9iamVjdC5pcyE9PXBvbHlmaWxsfX0pLHBvbHlmaWxsfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbXBsZW1lbnRhdGlvbi5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGtleXNTaGltO2lmKCFPYmplY3Qua2V5cyl7dmFyIGhhcz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHRvU3RyPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaXNBcmdzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pc0FyZ3VtZW50cy5qcyIpLGlzRW51bWVyYWJsZT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGhhc0RvbnRFbnVtQnVnPSFpc0VudW1lcmFibGUuY2FsbCh7dG9TdHJpbmc6bnVsbH0sInRvU3RyaW5nIiksaGFzUHJvdG9FbnVtQnVnPWlzRW51bWVyYWJsZS5jYWxsKGZ1bmN0aW9uKCl7fSwicHJvdG90eXBlIiksZG9udEVudW1zPVsidG9TdHJpbmciLCJ0b0xvY2FsZVN0cmluZyIsInZhbHVlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNvbnN0cnVjdG9yIl0sZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGU9ZnVuY3Rpb24obyl7dmFyIGN0b3I9by5jb25zdHJ1Y3RvcjtyZXR1cm4gY3RvciYmY3Rvci5wcm90b3R5cGU9PT1vfSxleGNsdWRlZEtleXM9eyRhcHBsaWNhdGlvbkNhY2hlOiEwLCRjb25zb2xlOiEwLCRleHRlcm5hbDohMCwkZnJhbWU6ITAsJGZyYW1lRWxlbWVudDohMCwkZnJhbWVzOiEwLCRpbm5lckhlaWdodDohMCwkaW5uZXJXaWR0aDohMCwkb25tb3pmdWxsc2NyZWVuY2hhbmdlOiEwLCRvbm1vemZ1bGxzY3JlZW5lcnJvcjohMCwkb3V0ZXJIZWlnaHQ6ITAsJG91dGVyV2lkdGg6ITAsJHBhZ2VYT2Zmc2V0OiEwLCRwYWdlWU9mZnNldDohMCwkcGFyZW50OiEwLCRzY3JvbGxMZWZ0OiEwLCRzY3JvbGxUb3A6ITAsJHNjcm9sbFg6ITAsJHNjcm9sbFk6ITAsJHNlbGY6ITAsJHdlYmtpdEluZGV4ZWREQjohMCwkd2Via2l0U3RvcmFnZUluZm86ITAsJHdpbmRvdzohMH0saGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuITE7Zm9yKHZhciBrIGluIHdpbmRvdyl0cnl7aWYoIWV4Y2x1ZGVkS2V5c1siJCIra10mJmhhcy5jYWxsKHdpbmRvdyxrKSYmbnVsbCE9PXdpbmRvd1trXSYmIm9iamVjdCI9PXR5cGVvZiB3aW5kb3dba10pdHJ5e2VxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlKHdpbmRvd1trXSl9Y2F0Y2goZSl7cmV0dXJuITB9fWNhdGNoKGUpe3JldHVybiEwfXJldHVybiExfSgpO2tleXNTaGltPWZ1bmN0aW9uIGtleXMob2JqZWN0KXt2YXIgaXNPYmplY3Q9bnVsbCE9PW9iamVjdCYmIm9iamVjdCI9PXR5cGVvZiBvYmplY3QsaXNGdW5jdGlvbj0iW29iamVjdCBGdW5jdGlvbl0iPT09dG9TdHIuY2FsbChvYmplY3QpLGlzQXJndW1lbnRzPWlzQXJncyhvYmplY3QpLGlzU3RyaW5nPWlzT2JqZWN0JiYiW29iamVjdCBTdHJpbmddIj09PXRvU3RyLmNhbGwob2JqZWN0KSx0aGVLZXlzPVtdO2lmKCFpc09iamVjdCYmIWlzRnVuY3Rpb24mJiFpc0FyZ3VtZW50cyl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7dmFyIHNraXBQcm90bz1oYXNQcm90b0VudW1CdWcmJmlzRnVuY3Rpb247aWYoaXNTdHJpbmcmJm9iamVjdC5sZW5ndGg+MCYmIWhhcy5jYWxsKG9iamVjdCwwKSlmb3IodmFyIGk9MDtpPG9iamVjdC5sZW5ndGg7KytpKXRoZUtleXMucHVzaChTdHJpbmcoaSkpO2lmKGlzQXJndW1lbnRzJiZvYmplY3QubGVuZ3RoPjApZm9yKHZhciBqPTA7ajxvYmplY3QubGVuZ3RoOysrail0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtlbHNlIGZvcih2YXIgbmFtZSBpbiBvYmplY3Qpc2tpcFByb3RvJiYicHJvdG90eXBlIj09PW5hbWV8fCFoYXMuY2FsbChvYmplY3QsbmFtZSl8fHRoZUtleXMucHVzaChTdHJpbmcobmFtZSkpO2lmKGhhc0RvbnRFbnVtQnVnKWZvcih2YXIgc2tpcENvbnN0cnVjdG9yPWZ1bmN0aW9uKG8pe2lmKCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHwhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKXJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTt0cnl7cmV0dXJuIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlKG8pfWNhdGNoKGUpe3JldHVybiExfX0ob2JqZWN0KSxrPTA7azxkb250RW51bXMubGVuZ3RoOysraylza2lwQ29uc3RydWN0b3ImJiJjb25zdHJ1Y3RvciI9PT1kb250RW51bXNba118fCFoYXMuY2FsbChvYmplY3QsZG9udEVudW1zW2tdKXx8dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7cmV0dXJuIHRoZUtleXN9fW1vZHVsZS5leHBvcnRzPWtleXNTaGltfSwiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgc2xpY2U9QXJyYXkucHJvdG90eXBlLnNsaWNlLGlzQXJncz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanMiKSxvcmlnS2V5cz1PYmplY3Qua2V5cyxrZXlzU2hpbT1vcmlnS2V5cz9mdW5jdGlvbiBrZXlzKG8pe3JldHVybiBvcmlnS2V5cyhvKX06X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2ltcGxlbWVudGF0aW9uLmpzIiksb3JpZ2luYWxLZXlzPU9iamVjdC5rZXlzO2tleXNTaGltLnNoaW09ZnVuY3Rpb24gc2hpbU9iamVjdEtleXMoKXtpZihPYmplY3Qua2V5cyl7dmFyIGtleXNXb3Jrc1dpdGhBcmd1bWVudHM9ZnVuY3Rpb24oKXt2YXIgYXJncz1PYmplY3Qua2V5cyhhcmd1bWVudHMpO3JldHVybiBhcmdzJiZhcmdzLmxlbmd0aD09PWFyZ3VtZW50cy5sZW5ndGh9KDEsMik7a2V5c1dvcmtzV2l0aEFyZ3VtZW50c3x8KE9iamVjdC5rZXlzPWZ1bmN0aW9uIGtleXMob2JqZWN0KXtyZXR1cm4gaXNBcmdzKG9iamVjdCk/b3JpZ2luYWxLZXlzKHNsaWNlLmNhbGwob2JqZWN0KSk6b3JpZ2luYWxLZXlzKG9iamVjdCl9KX1lbHNlIE9iamVjdC5rZXlzPWtleXNTaGltO3JldHVybiBPYmplY3Qua2V5c3x8a2V5c1NoaW19LG1vZHVsZS5leHBvcnRzPWtleXNTaGltfSwiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2lzQXJndW1lbnRzLmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdG9TdHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSl7dmFyIHN0cj10b1N0ci5jYWxsKHZhbHVlKSxpc0FyZ3M9IltvYmplY3QgQXJndW1lbnRzXSI9PT1zdHI7cmV0dXJuIGlzQXJnc3x8KGlzQXJncz0iW29iamVjdCBBcnJheV0iIT09c3RyJiZudWxsIT09dmFsdWUmJiJvYmplY3QiPT10eXBlb2YgdmFsdWUmJiJudW1iZXIiPT10eXBlb2YgdmFsdWUubGVuZ3RoJiZ2YWx1ZS5sZW5ndGg+PTAmJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT10b1N0ci5jYWxsKHZhbHVlLmNhbGxlZSkpLGlzQXJnc319LCIuLi8uLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9pbXBsZW1lbnRhdGlvbi5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIG9iamVjdEtleXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2luZGV4LmpzIiksaGFzU3ltYm9scz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanMiKSgpLGNhbGxCb3VuZD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY2FsbC1ib3VuZC9pbmRleC5qcyIpLCRPYmplY3Q9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLW9iamVjdC1hdG9tcy9pbmRleC5qcyIpLCRwdXNoPWNhbGxCb3VuZCgiQXJyYXkucHJvdG90eXBlLnB1c2giKSwkcHJvcElzRW51bWVyYWJsZT1jYWxsQm91bmQoIk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUiKSxvcmlnaW5hbEdldFN5bWJvbHM9aGFzU3ltYm9scz8kT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczpudWxsO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsc291cmNlMSl7aWYobnVsbD09dGFyZ2V0KXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3ZhciB0bz0kT2JqZWN0KHRhcmdldCk7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRvO2Zvcih2YXIgcz0xO3M8YXJndW1lbnRzLmxlbmd0aDsrK3Mpe3ZhciBmcm9tPSRPYmplY3QoYXJndW1lbnRzW3NdKSxrZXlzPW9iamVjdEtleXMoZnJvbSksZ2V0U3ltYm9scz1oYXNTeW1ib2xzJiYoJE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN8fG9yaWdpbmFsR2V0U3ltYm9scyk7aWYoZ2V0U3ltYm9scylmb3IodmFyIHN5bXM9Z2V0U3ltYm9scyhmcm9tKSxqPTA7ajxzeW1zLmxlbmd0aDsrK2ope3ZhciBrZXk9c3ltc1tqXTskcHJvcElzRW51bWVyYWJsZShmcm9tLGtleSkmJiRwdXNoKGtleXMsa2V5KX1mb3IodmFyIGk9MDtpPGtleXMubGVuZ3RoOysraSl7dmFyIG5leHRLZXk9a2V5c1tpXTtpZigkcHJvcElzRW51bWVyYWJsZShmcm9tLG5leHRLZXkpKXt2YXIgcHJvcFZhbHVlPWZyb21bbmV4dEtleV07dG9bbmV4dEtleV09cHJvcFZhbHVlfX19cmV0dXJuIHRvfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9vYmplY3QuYXNzaWduL3BvbHlmaWxsLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgaW1wbGVtZW50YXRpb249X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC5hc3NpZ24vaW1wbGVtZW50YXRpb24uanMiKTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBnZXRQb2x5ZmlsbCgpe3JldHVybiBPYmplY3QuYXNzaWduP2Z1bmN0aW9uKCl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7Zm9yKHZhciBzdHI9ImFiY2RlZmdoaWprbG1ub3BxcnN0IixsZXR0ZXJzPXN0ci5zcGxpdCgiIiksbWFwPXt9LGk9MDtpPGxldHRlcnMubGVuZ3RoOysraSltYXBbbGV0dGVyc1tpXV09bGV0dGVyc1tpXTt2YXIgb2JqPU9iamVjdC5hc3NpZ24oe30sbWFwKSxhY3R1YWw9IiI7Zm9yKHZhciBrIGluIG9iailhY3R1YWwrPWs7cmV0dXJuIHN0ciE9PWFjdHVhbH0oKXx8ZnVuY3Rpb24oKXtpZighT2JqZWN0LmFzc2lnbnx8IU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucylyZXR1cm4hMTt2YXIgdGhyb3dlcj1PYmplY3QucHJldmVudEV4dGVuc2lvbnMoezE6Mn0pO3RyeXtPYmplY3QuYXNzaWduKHRocm93ZXIsInh5Iil9Y2F0Y2goZSl7cmV0dXJuInkiPT09dGhyb3dlclsxXX1yZXR1cm4hMX0oKT9pbXBsZW1lbnRhdGlvbjpPYmplY3QuYXNzaWduOmltcGxlbWVudGF0aW9ufX0sIi4uLy4uL25vZGVfbW9kdWxlcy9vcy1icm93c2VyaWZ5L2Jyb3dzZXIuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMpe2V4cG9ydHMuZW5kaWFubmVzcz1mdW5jdGlvbigpe3JldHVybiJMRSJ9LGV4cG9ydHMuaG9zdG5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGxvY2F0aW9uP2xvY2F0aW9uLmhvc3RuYW1lOiIifSxleHBvcnRzLmxvYWRhdmc9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZXhwb3J0cy51cHRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZXhwb3J0cy5mcmVlbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9LGV4cG9ydHMudG90YWxtZW09ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLk1BWF9WQUxVRX0sZXhwb3J0cy5jcHVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LGV4cG9ydHMudHlwZT1mdW5jdGlvbigpe3JldHVybiJCcm93c2VyIn0sZXhwb3J0cy5yZWxlYXNlPWZ1bmN0aW9uKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3I/bmF2aWdhdG9yLmFwcFZlcnNpb246IiJ9LGV4cG9ydHMubmV0d29ya0ludGVyZmFjZXM9ZXhwb3J0cy5nZXROZXR3b3JrSW50ZXJmYWNlcz1mdW5jdGlvbigpe3JldHVybnt9fSxleHBvcnRzLmFyY2g9ZnVuY3Rpb24oKXtyZXR1cm4iamF2YXNjcmlwdCJ9LGV4cG9ydHMucGxhdGZvcm09ZnVuY3Rpb24oKXtyZXR1cm4iYnJvd3NlciJ9LGV4cG9ydHMudG1wZGlyPWV4cG9ydHMudG1wRGlyPWZ1bmN0aW9uKCl7cmV0dXJuIi90bXAifSxleHBvcnRzLkVPTD0iXG4iLGV4cG9ydHMuaG9tZWRpcj1mdW5jdGlvbigpe3JldHVybiIvIn19LCIuLi8uLi9ub2RlX21vZHVsZXMvcGFrby9saWIvdXRpbHMvY29tbW9uLmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIFRZUEVEX09LPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheSYmInVuZGVmaW5lZCIhPXR5cGVvZiBVaW50MTZBcnJheSYmInVuZGVmaW5lZCIhPXR5cGVvZiBJbnQzMkFycmF5O2Z1bmN0aW9uIF9oYXMob2JqLGtleSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosa2V5KX1leHBvcnRzLmFzc2lnbj1mdW5jdGlvbihvYmope2Zvcih2YXIgc291cmNlcz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7c291cmNlcy5sZW5ndGg7KXt2YXIgc291cmNlPXNvdXJjZXMuc2hpZnQoKTtpZihzb3VyY2Upe2lmKCJvYmplY3QiIT10eXBlb2Ygc291cmNlKXRocm93IG5ldyBUeXBlRXJyb3Ioc291cmNlKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIHAgaW4gc291cmNlKV9oYXMoc291cmNlLHApJiYob2JqW3BdPXNvdXJjZVtwXSl9fXJldHVybiBvYmp9LGV4cG9ydHMuc2hyaW5rQnVmPWZ1bmN0aW9uKGJ1ZixzaXplKXtyZXR1cm4gYnVmLmxlbmd0aD09PXNpemU/YnVmOmJ1Zi5zdWJhcnJheT9idWYuc3ViYXJyYXkoMCxzaXplKTooYnVmLmxlbmd0aD1zaXplLGJ1Zil9O3ZhciBmblR5cGVkPXthcnJheVNldDpmdW5jdGlvbihkZXN0LHNyYyxzcmNfb2ZmcyxsZW4sZGVzdF9vZmZzKXtpZihzcmMuc3ViYXJyYXkmJmRlc3Quc3ViYXJyYXkpZGVzdC5zZXQoc3JjLnN1YmFycmF5KHNyY19vZmZzLHNyY19vZmZzK2xlbiksZGVzdF9vZmZzKTtlbHNlIGZvcih2YXIgaT0wO2k8bGVuO2krKylkZXN0W2Rlc3Rfb2ZmcytpXT1zcmNbc3JjX29mZnMraV19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oY2h1bmtzKXt2YXIgaSxsLGxlbixwb3MsY2h1bmsscmVzdWx0O2ZvcihsZW49MCxpPTAsbD1jaHVua3MubGVuZ3RoO2k8bDtpKyspbGVuKz1jaHVua3NbaV0ubGVuZ3RoO2ZvcihyZXN1bHQ9bmV3IFVpbnQ4QXJyYXkobGVuKSxwb3M9MCxpPTAsbD1jaHVua3MubGVuZ3RoO2k8bDtpKyspY2h1bms9Y2h1bmtzW2ldLHJlc3VsdC5zZXQoY2h1bmsscG9zKSxwb3MrPWNodW5rLmxlbmd0aDtyZXR1cm4gcmVzdWx0fX0sZm5VbnR5cGVkPXthcnJheVNldDpmdW5jdGlvbihkZXN0LHNyYyxzcmNfb2ZmcyxsZW4sZGVzdF9vZmZzKXtmb3IodmFyIGk9MDtpPGxlbjtpKyspZGVzdFtkZXN0X29mZnMraV09c3JjW3NyY19vZmZzK2ldfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKGNodW5rcyl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLGNodW5rcyl9fTtleHBvcnRzLnNldFR5cGVkPWZ1bmN0aW9uKG9uKXtvbj8oZXhwb3J0cy5CdWY4PVVpbnQ4QXJyYXksZXhwb3J0cy5CdWYxNj1VaW50MTZBcnJheSxleHBvcnRzLkJ1ZjMyPUludDMyQXJyYXksZXhwb3J0cy5hc3NpZ24oZXhwb3J0cyxmblR5cGVkKSk6KGV4cG9ydHMuQnVmOD1BcnJheSxleHBvcnRzLkJ1ZjE2PUFycmF5LGV4cG9ydHMuQnVmMzI9QXJyYXksZXhwb3J0cy5hc3NpZ24oZXhwb3J0cyxmblVudHlwZWQpKX0sZXhwb3J0cy5zZXRUeXBlZChUWVBFRF9PSyl9LCIuLi8uLi9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9hZGxlcjMyLmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBhZGxlcjMyKGFkbGVyLGJ1ZixsZW4scG9zKXtmb3IodmFyIHMxPTY1NTM1JmFkbGVyLHMyPWFkbGVyPj4+MTYmNjU1MzUsbj0wOzAhPT1sZW47KXtsZW4tPW49bGVuPjJlMz8yZTM6bGVuO2Rve3MyPXMyKyhzMT1zMStidWZbcG9zKytdfDApfDB9d2hpbGUoLS1uKTtzMSU9NjU1MjEsczIlPTY1NTIxfXJldHVybiBzMXxzMjw8MTZ9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvY29uc3RhbnRzLmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fX0sIi4uLy4uL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2NyYzMyLmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgY3JjVGFibGU9ZnVuY3Rpb24gbWFrZVRhYmxlKCl7Zm9yKHZhciBjLHRhYmxlPVtdLG49MDtuPDI1NjtuKyspe2M9bjtmb3IodmFyIGs9MDtrPDg7aysrKWM9MSZjPzM5ODgyOTIzODReYz4+PjE6Yz4+PjE7dGFibGVbbl09Y31yZXR1cm4gdGFibGV9KCk7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gY3JjMzIoY3JjLGJ1ZixsZW4scG9zKXt2YXIgdD1jcmNUYWJsZSxlbmQ9cG9zK2xlbjtjcmNePS0xO2Zvcih2YXIgaT1wb3M7aTxlbmQ7aSsrKWNyYz1jcmM+Pj44XnRbMjU1JihjcmNeYnVmW2ldKV07cmV0dXJuLTFeY3JjfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2RlZmxhdGUuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBjb25maWd1cmF0aW9uX3RhYmxlLHV0aWxzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYWtvL2xpYi91dGlscy9jb21tb24uanMiKSx0cmVlcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi90cmVlcy5qcyIpLGFkbGVyMzI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvYWRsZXIzMi5qcyIpLGNyYzMyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2NyYzMyLmpzIiksbXNnPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL21lc3NhZ2VzLmpzIik7ZnVuY3Rpb24gZXJyKHN0cm0sZXJyb3JDb2RlKXtyZXR1cm4gc3RybS5tc2c9bXNnW2Vycm9yQ29kZV0sZXJyb3JDb2RlfWZ1bmN0aW9uIHJhbmsoZil7cmV0dXJuKGY8PDEpLShmPjQ/OTowKX1mdW5jdGlvbiB6ZXJvKGJ1Zil7Zm9yKHZhciBsZW49YnVmLmxlbmd0aDstLWxlbj49MDspYnVmW2xlbl09MH1mdW5jdGlvbiBmbHVzaF9wZW5kaW5nKHN0cm0pe3ZhciBzPXN0cm0uc3RhdGUsbGVuPXMucGVuZGluZztsZW4+c3RybS5hdmFpbF9vdXQmJihsZW49c3RybS5hdmFpbF9vdXQpLDAhPT1sZW4mJih1dGlscy5hcnJheVNldChzdHJtLm91dHB1dCxzLnBlbmRpbmdfYnVmLHMucGVuZGluZ19vdXQsbGVuLHN0cm0ubmV4dF9vdXQpLHN0cm0ubmV4dF9vdXQrPWxlbixzLnBlbmRpbmdfb3V0Kz1sZW4sc3RybS50b3RhbF9vdXQrPWxlbixzdHJtLmF2YWlsX291dC09bGVuLHMucGVuZGluZy09bGVuLDA9PT1zLnBlbmRpbmcmJihzLnBlbmRpbmdfb3V0PTApKX1mdW5jdGlvbiBmbHVzaF9ibG9ja19vbmx5KHMsbGFzdCl7dHJlZXMuX3RyX2ZsdXNoX2Jsb2NrKHMscy5ibG9ja19zdGFydD49MD9zLmJsb2NrX3N0YXJ0Oi0xLHMuc3Ryc3RhcnQtcy5ibG9ja19zdGFydCxsYXN0KSxzLmJsb2NrX3N0YXJ0PXMuc3Ryc3RhcnQsZmx1c2hfcGVuZGluZyhzLnN0cm0pfWZ1bmN0aW9uIHB1dF9ieXRlKHMsYil7cy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK109Yn1mdW5jdGlvbiBwdXRTaG9ydE1TQihzLGIpe3MucGVuZGluZ19idWZbcy5wZW5kaW5nKytdPWI+Pj44JjI1NSxzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXT0yNTUmYn1mdW5jdGlvbiByZWFkX2J1ZihzdHJtLGJ1ZixzdGFydCxzaXplKXt2YXIgbGVuPXN0cm0uYXZhaWxfaW47cmV0dXJuIGxlbj5zaXplJiYobGVuPXNpemUpLDA9PT1sZW4/MDooc3RybS5hdmFpbF9pbi09bGVuLHV0aWxzLmFycmF5U2V0KGJ1ZixzdHJtLmlucHV0LHN0cm0ubmV4dF9pbixsZW4sc3RhcnQpLDE9PT1zdHJtLnN0YXRlLndyYXA/c3RybS5hZGxlcj1hZGxlcjMyKHN0cm0uYWRsZXIsYnVmLGxlbixzdGFydCk6Mj09PXN0cm0uc3RhdGUud3JhcCYmKHN0cm0uYWRsZXI9Y3JjMzIoc3RybS5hZGxlcixidWYsbGVuLHN0YXJ0KSksc3RybS5uZXh0X2luKz1sZW4sc3RybS50b3RhbF9pbis9bGVuLGxlbil9ZnVuY3Rpb24gbG9uZ2VzdF9tYXRjaChzLGN1cl9tYXRjaCl7dmFyIG1hdGNoLGxlbixjaGFpbl9sZW5ndGg9cy5tYXhfY2hhaW5fbGVuZ3RoLHNjYW49cy5zdHJzdGFydCxiZXN0X2xlbj1zLnByZXZfbGVuZ3RoLG5pY2VfbWF0Y2g9cy5uaWNlX21hdGNoLGxpbWl0PXMuc3Ryc3RhcnQ+cy53X3NpemUtMjYyP3Muc3Ryc3RhcnQtKHMud19zaXplLTI2Mik6MCxfd2luPXMud2luZG93LHdtYXNrPXMud19tYXNrLHByZXY9cy5wcmV2LHN0cmVuZD1zLnN0cnN0YXJ0KzI1OCxzY2FuX2VuZDE9X3dpbltzY2FuK2Jlc3RfbGVuLTFdLHNjYW5fZW5kPV93aW5bc2NhbitiZXN0X2xlbl07cy5wcmV2X2xlbmd0aD49cy5nb29kX21hdGNoJiYoY2hhaW5fbGVuZ3RoPj49MiksbmljZV9tYXRjaD5zLmxvb2thaGVhZCYmKG5pY2VfbWF0Y2g9cy5sb29rYWhlYWQpO2Rve2lmKF93aW5bKG1hdGNoPWN1cl9tYXRjaCkrYmVzdF9sZW5dPT09c2Nhbl9lbmQmJl93aW5bbWF0Y2grYmVzdF9sZW4tMV09PT1zY2FuX2VuZDEmJl93aW5bbWF0Y2hdPT09X3dpbltzY2FuXSYmX3dpblsrK21hdGNoXT09PV93aW5bc2NhbisxXSl7c2Nhbis9MixtYXRjaCsrO2Rve313aGlsZShfd2luWysrc2Nhbl09PT1fd2luWysrbWF0Y2hdJiZfd2luWysrc2Nhbl09PT1fd2luWysrbWF0Y2hdJiZfd2luWysrc2Nhbl09PT1fd2luWysrbWF0Y2hdJiZfd2luWysrc2Nhbl09PT1fd2luWysrbWF0Y2hdJiZfd2luWysrc2Nhbl09PT1fd2luWysrbWF0Y2hdJiZfd2luWysrc2Nhbl09PT1fd2luWysrbWF0Y2hdJiZfd2luWysrc2Nhbl09PT1fd2luWysrbWF0Y2hdJiZfd2luWysrc2Nhbl09PT1fd2luWysrbWF0Y2hdJiZzY2FuPHN0cmVuZCk7aWYobGVuPTI1OC0oc3RyZW5kLXNjYW4pLHNjYW49c3RyZW5kLTI1OCxsZW4+YmVzdF9sZW4pe2lmKHMubWF0Y2hfc3RhcnQ9Y3VyX21hdGNoLGJlc3RfbGVuPWxlbixsZW4+PW5pY2VfbWF0Y2gpYnJlYWs7c2Nhbl9lbmQxPV93aW5bc2NhbitiZXN0X2xlbi0xXSxzY2FuX2VuZD1fd2luW3NjYW4rYmVzdF9sZW5dfX19d2hpbGUoKGN1cl9tYXRjaD1wcmV2W2N1cl9tYXRjaCZ3bWFza10pPmxpbWl0JiYwIT09LS1jaGFpbl9sZW5ndGgpO3JldHVybiBiZXN0X2xlbjw9cy5sb29rYWhlYWQ/YmVzdF9sZW46cy5sb29rYWhlYWR9ZnVuY3Rpb24gZmlsbF93aW5kb3cocyl7dmFyIHAsbixtLG1vcmUsc3RyLF93X3NpemU9cy53X3NpemU7ZG97aWYobW9yZT1zLndpbmRvd19zaXplLXMubG9va2FoZWFkLXMuc3Ryc3RhcnQscy5zdHJzdGFydD49X3dfc2l6ZSsoX3dfc2l6ZS0yNjIpKXt1dGlscy5hcnJheVNldChzLndpbmRvdyxzLndpbmRvdyxfd19zaXplLF93X3NpemUsMCkscy5tYXRjaF9zdGFydC09X3dfc2l6ZSxzLnN0cnN0YXJ0LT1fd19zaXplLHMuYmxvY2tfc3RhcnQtPV93X3NpemUscD1uPXMuaGFzaF9zaXplO2Rve209cy5oZWFkWy0tcF0scy5oZWFkW3BdPW0+PV93X3NpemU/bS1fd19zaXplOjB9d2hpbGUoLS1uKTtwPW49X3dfc2l6ZTtkb3ttPXMucHJldlstLXBdLHMucHJldltwXT1tPj1fd19zaXplP20tX3dfc2l6ZTowfXdoaWxlKC0tbik7bW9yZSs9X3dfc2l6ZX1pZigwPT09cy5zdHJtLmF2YWlsX2luKWJyZWFrO2lmKG49cmVhZF9idWYocy5zdHJtLHMud2luZG93LHMuc3Ryc3RhcnQrcy5sb29rYWhlYWQsbW9yZSkscy5sb29rYWhlYWQrPW4scy5sb29rYWhlYWQrcy5pbnNlcnQ+PTMpZm9yKHN0cj1zLnN0cnN0YXJ0LXMuaW5zZXJ0LHMuaW5zX2g9cy53aW5kb3dbc3RyXSxzLmluc19oPShzLmluc19oPDxzLmhhc2hfc2hpZnRecy53aW5kb3dbc3RyKzFdKSZzLmhhc2hfbWFzaztzLmluc2VydCYmKHMuaW5zX2g9KHMuaW5zX2g8PHMuaGFzaF9zaGlmdF5zLndpbmRvd1tzdHIrMy0xXSkmcy5oYXNoX21hc2sscy5wcmV2W3N0ciZzLndfbWFza109cy5oZWFkW3MuaW5zX2hdLHMuaGVhZFtzLmluc19oXT1zdHIsc3RyKysscy5pbnNlcnQtLSwhKHMubG9va2FoZWFkK3MuaW5zZXJ0PDMpKTspO313aGlsZShzLmxvb2thaGVhZDwyNjImJjAhPT1zLnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIGRlZmxhdGVfZmFzdChzLGZsdXNoKXtmb3IodmFyIGhhc2hfaGVhZCxiZmx1c2g7Oyl7aWYocy5sb29rYWhlYWQ8MjYyKXtpZihmaWxsX3dpbmRvdyhzKSxzLmxvb2thaGVhZDwyNjImJjA9PT1mbHVzaClyZXR1cm4gMTtpZigwPT09cy5sb29rYWhlYWQpYnJlYWt9aWYoaGFzaF9oZWFkPTAscy5sb29rYWhlYWQ+PTMmJihzLmluc19oPShzLmluc19oPDxzLmhhc2hfc2hpZnRecy53aW5kb3dbcy5zdHJzdGFydCszLTFdKSZzLmhhc2hfbWFzayxoYXNoX2hlYWQ9cy5wcmV2W3Muc3Ryc3RhcnQmcy53X21hc2tdPXMuaGVhZFtzLmluc19oXSxzLmhlYWRbcy5pbnNfaF09cy5zdHJzdGFydCksMCE9PWhhc2hfaGVhZCYmcy5zdHJzdGFydC1oYXNoX2hlYWQ8PXMud19zaXplLTI2MiYmKHMubWF0Y2hfbGVuZ3RoPWxvbmdlc3RfbWF0Y2gocyxoYXNoX2hlYWQpKSxzLm1hdGNoX2xlbmd0aD49MylpZihiZmx1c2g9dHJlZXMuX3RyX3RhbGx5KHMscy5zdHJzdGFydC1zLm1hdGNoX3N0YXJ0LHMubWF0Y2hfbGVuZ3RoLTMpLHMubG9va2FoZWFkLT1zLm1hdGNoX2xlbmd0aCxzLm1hdGNoX2xlbmd0aDw9cy5tYXhfbGF6eV9tYXRjaCYmcy5sb29rYWhlYWQ+PTMpe3MubWF0Y2hfbGVuZ3RoLS07ZG97cy5zdHJzdGFydCsrLHMuaW5zX2g9KHMuaW5zX2g8PHMuaGFzaF9zaGlmdF5zLndpbmRvd1tzLnN0cnN0YXJ0KzMtMV0pJnMuaGFzaF9tYXNrLGhhc2hfaGVhZD1zLnByZXZbcy5zdHJzdGFydCZzLndfbWFza109cy5oZWFkW3MuaW5zX2hdLHMuaGVhZFtzLmluc19oXT1zLnN0cnN0YXJ0fXdoaWxlKDAhPT0tLXMubWF0Y2hfbGVuZ3RoKTtzLnN0cnN0YXJ0Kyt9ZWxzZSBzLnN0cnN0YXJ0Kz1zLm1hdGNoX2xlbmd0aCxzLm1hdGNoX2xlbmd0aD0wLHMuaW5zX2g9cy53aW5kb3dbcy5zdHJzdGFydF0scy5pbnNfaD0ocy5pbnNfaDw8cy5oYXNoX3NoaWZ0XnMud2luZG93W3Muc3Ryc3RhcnQrMV0pJnMuaGFzaF9tYXNrO2Vsc2UgYmZsdXNoPXRyZWVzLl90cl90YWxseShzLDAscy53aW5kb3dbcy5zdHJzdGFydF0pLHMubG9va2FoZWFkLS0scy5zdHJzdGFydCsrO2lmKGJmbHVzaCYmKGZsdXNoX2Jsb2NrX29ubHkocywhMSksMD09PXMuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBzLmluc2VydD1zLnN0cnN0YXJ0PDI/cy5zdHJzdGFydDoyLDQ9PT1mbHVzaD8oZmx1c2hfYmxvY2tfb25seShzLCEwKSwwPT09cy5zdHJtLmF2YWlsX291dD8zOjQpOnMubGFzdF9saXQmJihmbHVzaF9ibG9ja19vbmx5KHMsITEpLDA9PT1zLnN0cm0uYXZhaWxfb3V0KT8xOjJ9ZnVuY3Rpb24gZGVmbGF0ZV9zbG93KHMsZmx1c2gpe2Zvcih2YXIgaGFzaF9oZWFkLGJmbHVzaCxtYXhfaW5zZXJ0Ozspe2lmKHMubG9va2FoZWFkPDI2Mil7aWYoZmlsbF93aW5kb3cocykscy5sb29rYWhlYWQ8MjYyJiYwPT09Zmx1c2gpcmV0dXJuIDE7aWYoMD09PXMubG9va2FoZWFkKWJyZWFrfWlmKGhhc2hfaGVhZD0wLHMubG9va2FoZWFkPj0zJiYocy5pbnNfaD0ocy5pbnNfaDw8cy5oYXNoX3NoaWZ0XnMud2luZG93W3Muc3Ryc3RhcnQrMy0xXSkmcy5oYXNoX21hc2ssaGFzaF9oZWFkPXMucHJldltzLnN0cnN0YXJ0JnMud19tYXNrXT1zLmhlYWRbcy5pbnNfaF0scy5oZWFkW3MuaW5zX2hdPXMuc3Ryc3RhcnQpLHMucHJldl9sZW5ndGg9cy5tYXRjaF9sZW5ndGgscy5wcmV2X21hdGNoPXMubWF0Y2hfc3RhcnQscy5tYXRjaF9sZW5ndGg9MiwwIT09aGFzaF9oZWFkJiZzLnByZXZfbGVuZ3RoPHMubWF4X2xhenlfbWF0Y2gmJnMuc3Ryc3RhcnQtaGFzaF9oZWFkPD1zLndfc2l6ZS0yNjImJihzLm1hdGNoX2xlbmd0aD1sb25nZXN0X21hdGNoKHMsaGFzaF9oZWFkKSxzLm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1zLnN0cmF0ZWd5fHwzPT09cy5tYXRjaF9sZW5ndGgmJnMuc3Ryc3RhcnQtcy5tYXRjaF9zdGFydD40MDk2KSYmKHMubWF0Y2hfbGVuZ3RoPTIpKSxzLnByZXZfbGVuZ3RoPj0zJiZzLm1hdGNoX2xlbmd0aDw9cy5wcmV2X2xlbmd0aCl7bWF4X2luc2VydD1zLnN0cnN0YXJ0K3MubG9va2FoZWFkLTMsYmZsdXNoPXRyZWVzLl90cl90YWxseShzLHMuc3Ryc3RhcnQtMS1zLnByZXZfbWF0Y2gscy5wcmV2X2xlbmd0aC0zKSxzLmxvb2thaGVhZC09cy5wcmV2X2xlbmd0aC0xLHMucHJldl9sZW5ndGgtPTI7ZG97KytzLnN0cnN0YXJ0PD1tYXhfaW5zZXJ0JiYocy5pbnNfaD0ocy5pbnNfaDw8cy5oYXNoX3NoaWZ0XnMud2luZG93W3Muc3Ryc3RhcnQrMy0xXSkmcy5oYXNoX21hc2ssaGFzaF9oZWFkPXMucHJldltzLnN0cnN0YXJ0JnMud19tYXNrXT1zLmhlYWRbcy5pbnNfaF0scy5oZWFkW3MuaW5zX2hdPXMuc3Ryc3RhcnQpfXdoaWxlKDAhPT0tLXMucHJldl9sZW5ndGgpO2lmKHMubWF0Y2hfYXZhaWxhYmxlPTAscy5tYXRjaF9sZW5ndGg9MixzLnN0cnN0YXJ0KyssYmZsdXNoJiYoZmx1c2hfYmxvY2tfb25seShzLCExKSwwPT09cy5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9ZWxzZSBpZihzLm1hdGNoX2F2YWlsYWJsZSl7aWYoKGJmbHVzaD10cmVlcy5fdHJfdGFsbHkocywwLHMud2luZG93W3Muc3Ryc3RhcnQtMV0pKSYmZmx1c2hfYmxvY2tfb25seShzLCExKSxzLnN0cnN0YXJ0Kysscy5sb29rYWhlYWQtLSwwPT09cy5zdHJtLmF2YWlsX291dClyZXR1cm4gMX1lbHNlIHMubWF0Y2hfYXZhaWxhYmxlPTEscy5zdHJzdGFydCsrLHMubG9va2FoZWFkLS19cmV0dXJuIHMubWF0Y2hfYXZhaWxhYmxlJiYoYmZsdXNoPXRyZWVzLl90cl90YWxseShzLDAscy53aW5kb3dbcy5zdHJzdGFydC0xXSkscy5tYXRjaF9hdmFpbGFibGU9MCkscy5pbnNlcnQ9cy5zdHJzdGFydDwyP3Muc3Ryc3RhcnQ6Miw0PT09Zmx1c2g/KGZsdXNoX2Jsb2NrX29ubHkocywhMCksMD09PXMuc3RybS5hdmFpbF9vdXQ/Mzo0KTpzLmxhc3RfbGl0JiYoZmx1c2hfYmxvY2tfb25seShzLCExKSwwPT09cy5zdHJtLmF2YWlsX291dCk/MToyfWZ1bmN0aW9uIENvbmZpZyhnb29kX2xlbmd0aCxtYXhfbGF6eSxuaWNlX2xlbmd0aCxtYXhfY2hhaW4sZnVuYyl7dGhpcy5nb29kX2xlbmd0aD1nb29kX2xlbmd0aCx0aGlzLm1heF9sYXp5PW1heF9sYXp5LHRoaXMubmljZV9sZW5ndGg9bmljZV9sZW5ndGgsdGhpcy5tYXhfY2hhaW49bWF4X2NoYWluLHRoaXMuZnVuYz1mdW5jfWZ1bmN0aW9uIERlZmxhdGVTdGF0ZSgpe3RoaXMuc3RybT1udWxsLHRoaXMuc3RhdHVzPTAsdGhpcy5wZW5kaW5nX2J1Zj1udWxsLHRoaXMucGVuZGluZ19idWZfc2l6ZT0wLHRoaXMucGVuZGluZ19vdXQ9MCx0aGlzLnBlbmRpbmc9MCx0aGlzLndyYXA9MCx0aGlzLmd6aGVhZD1udWxsLHRoaXMuZ3ppbmRleD0wLHRoaXMubWV0aG9kPTgsdGhpcy5sYXN0X2ZsdXNoPS0xLHRoaXMud19zaXplPTAsdGhpcy53X2JpdHM9MCx0aGlzLndfbWFzaz0wLHRoaXMud2luZG93PW51bGwsdGhpcy53aW5kb3dfc2l6ZT0wLHRoaXMucHJldj1udWxsLHRoaXMuaGVhZD1udWxsLHRoaXMuaW5zX2g9MCx0aGlzLmhhc2hfc2l6ZT0wLHRoaXMuaGFzaF9iaXRzPTAsdGhpcy5oYXNoX21hc2s9MCx0aGlzLmhhc2hfc2hpZnQ9MCx0aGlzLmJsb2NrX3N0YXJ0PTAsdGhpcy5tYXRjaF9sZW5ndGg9MCx0aGlzLnByZXZfbWF0Y2g9MCx0aGlzLm1hdGNoX2F2YWlsYWJsZT0wLHRoaXMuc3Ryc3RhcnQ9MCx0aGlzLm1hdGNoX3N0YXJ0PTAsdGhpcy5sb29rYWhlYWQ9MCx0aGlzLnByZXZfbGVuZ3RoPTAsdGhpcy5tYXhfY2hhaW5fbGVuZ3RoPTAsdGhpcy5tYXhfbGF6eV9tYXRjaD0wLHRoaXMubGV2ZWw9MCx0aGlzLnN0cmF0ZWd5PTAsdGhpcy5nb29kX21hdGNoPTAsdGhpcy5uaWNlX21hdGNoPTAsdGhpcy5keW5fbHRyZWU9bmV3IHV0aWxzLkJ1ZjE2KDExNDYpLHRoaXMuZHluX2R0cmVlPW5ldyB1dGlscy5CdWYxNigxMjIpLHRoaXMuYmxfdHJlZT1uZXcgdXRpbHMuQnVmMTYoNzgpLHplcm8odGhpcy5keW5fbHRyZWUpLHplcm8odGhpcy5keW5fZHRyZWUpLHplcm8odGhpcy5ibF90cmVlKSx0aGlzLmxfZGVzYz1udWxsLHRoaXMuZF9kZXNjPW51bGwsdGhpcy5ibF9kZXNjPW51bGwsdGhpcy5ibF9jb3VudD1uZXcgdXRpbHMuQnVmMTYoMTYpLHRoaXMuaGVhcD1uZXcgdXRpbHMuQnVmMTYoNTczKSx6ZXJvKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyB1dGlscy5CdWYxNig1NzMpLHplcm8odGhpcy5kZXB0aCksdGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9idWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gZGVmbGF0ZVJlc2V0S2VlcChzdHJtKXt2YXIgcztyZXR1cm4gc3RybSYmc3RybS5zdGF0ZT8oc3RybS50b3RhbF9pbj1zdHJtLnRvdGFsX291dD0wLHN0cm0uZGF0YV90eXBlPTIsKHM9c3RybS5zdGF0ZSkucGVuZGluZz0wLHMucGVuZGluZ19vdXQ9MCxzLndyYXA8MCYmKHMud3JhcD0tcy53cmFwKSxzLnN0YXR1cz1zLndyYXA/NDI6MTEzLHN0cm0uYWRsZXI9Mj09PXMud3JhcD8wOjEscy5sYXN0X2ZsdXNoPTAsdHJlZXMuX3RyX2luaXQocyksMCk6ZXJyKHN0cm0sLTIpfWZ1bmN0aW9uIGRlZmxhdGVSZXNldChzdHJtKXt2YXIgcmV0PWRlZmxhdGVSZXNldEtlZXAoc3RybSk7cmV0dXJuIDA9PT1yZXQmJmZ1bmN0aW9uIGxtX2luaXQocyl7cy53aW5kb3dfc2l6ZT0yKnMud19zaXplLHplcm8ocy5oZWFkKSxzLm1heF9sYXp5X21hdGNoPWNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubWF4X2xhenkscy5nb29kX21hdGNoPWNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0uZ29vZF9sZW5ndGgscy5uaWNlX21hdGNoPWNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubmljZV9sZW5ndGgscy5tYXhfY2hhaW5fbGVuZ3RoPWNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubWF4X2NoYWluLHMuc3Ryc3RhcnQ9MCxzLmJsb2NrX3N0YXJ0PTAscy5sb29rYWhlYWQ9MCxzLmluc2VydD0wLHMubWF0Y2hfbGVuZ3RoPXMucHJldl9sZW5ndGg9MixzLm1hdGNoX2F2YWlsYWJsZT0wLHMuaW5zX2g9MH0oc3RybS5zdGF0ZSkscmV0fWZ1bmN0aW9uIGRlZmxhdGVJbml0MihzdHJtLGxldmVsLG1ldGhvZCx3aW5kb3dCaXRzLG1lbUxldmVsLHN0cmF0ZWd5KXtpZighc3RybSlyZXR1cm4tMjt2YXIgd3JhcD0xO2lmKC0xPT09bGV2ZWwmJihsZXZlbD02KSx3aW5kb3dCaXRzPDA/KHdyYXA9MCx3aW5kb3dCaXRzPS13aW5kb3dCaXRzKTp3aW5kb3dCaXRzPjE1JiYod3JhcD0yLHdpbmRvd0JpdHMtPTE2KSxtZW1MZXZlbDwxfHxtZW1MZXZlbD45fHw4IT09bWV0aG9kfHx3aW5kb3dCaXRzPDh8fHdpbmRvd0JpdHM+MTV8fGxldmVsPDB8fGxldmVsPjl8fHN0cmF0ZWd5PDB8fHN0cmF0ZWd5PjQpcmV0dXJuIGVycihzdHJtLC0yKTs4PT09d2luZG93Qml0cyYmKHdpbmRvd0JpdHM9OSk7dmFyIHM9bmV3IERlZmxhdGVTdGF0ZTtyZXR1cm4gc3RybS5zdGF0ZT1zLHMuc3RybT1zdHJtLHMud3JhcD13cmFwLHMuZ3poZWFkPW51bGwscy53X2JpdHM9d2luZG93Qml0cyxzLndfc2l6ZT0xPDxzLndfYml0cyxzLndfbWFzaz1zLndfc2l6ZS0xLHMuaGFzaF9iaXRzPW1lbUxldmVsKzcscy5oYXNoX3NpemU9MTw8cy5oYXNoX2JpdHMscy5oYXNoX21hc2s9cy5oYXNoX3NpemUtMSxzLmhhc2hfc2hpZnQ9fn4oKHMuaGFzaF9iaXRzKzMtMSkvMykscy53aW5kb3c9bmV3IHV0aWxzLkJ1ZjgoMipzLndfc2l6ZSkscy5oZWFkPW5ldyB1dGlscy5CdWYxNihzLmhhc2hfc2l6ZSkscy5wcmV2PW5ldyB1dGlscy5CdWYxNihzLndfc2l6ZSkscy5saXRfYnVmc2l6ZT0xPDxtZW1MZXZlbCs2LHMucGVuZGluZ19idWZfc2l6ZT00KnMubGl0X2J1ZnNpemUscy5wZW5kaW5nX2J1Zj1uZXcgdXRpbHMuQnVmOChzLnBlbmRpbmdfYnVmX3NpemUpLHMuZF9idWY9MSpzLmxpdF9idWZzaXplLHMubF9idWY9MypzLmxpdF9idWZzaXplLHMubGV2ZWw9bGV2ZWwscy5zdHJhdGVneT1zdHJhdGVneSxzLm1ldGhvZD1tZXRob2QsZGVmbGF0ZVJlc2V0KHN0cm0pfWNvbmZpZ3VyYXRpb25fdGFibGU9W25ldyBDb25maWcoMCwwLDAsMCxmdW5jdGlvbiBkZWZsYXRlX3N0b3JlZChzLGZsdXNoKXt2YXIgbWF4X2Jsb2NrX3NpemU9NjU1MzU7Zm9yKG1heF9ibG9ja19zaXplPnMucGVuZGluZ19idWZfc2l6ZS01JiYobWF4X2Jsb2NrX3NpemU9cy5wZW5kaW5nX2J1Zl9zaXplLTUpOzspe2lmKHMubG9va2FoZWFkPD0xKXtpZihmaWxsX3dpbmRvdyhzKSwwPT09cy5sb29rYWhlYWQmJjA9PT1mbHVzaClyZXR1cm4gMTtpZigwPT09cy5sb29rYWhlYWQpYnJlYWt9cy5zdHJzdGFydCs9cy5sb29rYWhlYWQscy5sb29rYWhlYWQ9MDt2YXIgbWF4X3N0YXJ0PXMuYmxvY2tfc3RhcnQrbWF4X2Jsb2NrX3NpemU7aWYoKDA9PT1zLnN0cnN0YXJ0fHxzLnN0cnN0YXJ0Pj1tYXhfc3RhcnQpJiYocy5sb29rYWhlYWQ9cy5zdHJzdGFydC1tYXhfc3RhcnQscy5zdHJzdGFydD1tYXhfc3RhcnQsZmx1c2hfYmxvY2tfb25seShzLCExKSwwPT09cy5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDE7aWYocy5zdHJzdGFydC1zLmJsb2NrX3N0YXJ0Pj1zLndfc2l6ZS0yNjImJihmbHVzaF9ibG9ja19vbmx5KHMsITEpLDA9PT1zLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gcy5pbnNlcnQ9MCw0PT09Zmx1c2g/KGZsdXNoX2Jsb2NrX29ubHkocywhMCksMD09PXMuc3RybS5hdmFpbF9vdXQ/Mzo0KToocy5zdHJzdGFydD5zLmJsb2NrX3N0YXJ0JiYoZmx1c2hfYmxvY2tfb25seShzLCExKSxzLnN0cm0uYXZhaWxfb3V0KSwxKX0pLG5ldyBDb25maWcoNCw0LDgsNCxkZWZsYXRlX2Zhc3QpLG5ldyBDb25maWcoNCw1LDE2LDgsZGVmbGF0ZV9mYXN0KSxuZXcgQ29uZmlnKDQsNiwzMiwzMixkZWZsYXRlX2Zhc3QpLG5ldyBDb25maWcoNCw0LDE2LDE2LGRlZmxhdGVfc2xvdyksbmV3IENvbmZpZyg4LDE2LDMyLDMyLGRlZmxhdGVfc2xvdyksbmV3IENvbmZpZyg4LDE2LDEyOCwxMjgsZGVmbGF0ZV9zbG93KSxuZXcgQ29uZmlnKDgsMzIsMTI4LDI1NixkZWZsYXRlX3Nsb3cpLG5ldyBDb25maWcoMzIsMTI4LDI1OCwxMDI0LGRlZmxhdGVfc2xvdyksbmV3IENvbmZpZygzMiwyNTgsMjU4LDQwOTYsZGVmbGF0ZV9zbG93KV0sZXhwb3J0cy5kZWZsYXRlSW5pdD1mdW5jdGlvbiBkZWZsYXRlSW5pdChzdHJtLGxldmVsKXtyZXR1cm4gZGVmbGF0ZUluaXQyKHN0cm0sbGV2ZWwsOCwxNSw4LDApfSxleHBvcnRzLmRlZmxhdGVJbml0Mj1kZWZsYXRlSW5pdDIsZXhwb3J0cy5kZWZsYXRlUmVzZXQ9ZGVmbGF0ZVJlc2V0LGV4cG9ydHMuZGVmbGF0ZVJlc2V0S2VlcD1kZWZsYXRlUmVzZXRLZWVwLGV4cG9ydHMuZGVmbGF0ZVNldEhlYWRlcj1mdW5jdGlvbiBkZWZsYXRlU2V0SGVhZGVyKHN0cm0saGVhZCl7cmV0dXJuIHN0cm0mJnN0cm0uc3RhdGU/MiE9PXN0cm0uc3RhdGUud3JhcD8tMjooc3RybS5zdGF0ZS5nemhlYWQ9aGVhZCwwKTotMn0sZXhwb3J0cy5kZWZsYXRlPWZ1bmN0aW9uIGRlZmxhdGUoc3RybSxmbHVzaCl7dmFyIG9sZF9mbHVzaCxzLGJlZyx2YWw7aWYoIXN0cm18fCFzdHJtLnN0YXRlfHxmbHVzaD41fHxmbHVzaDwwKXJldHVybiBzdHJtP2VycihzdHJtLC0yKTotMjtpZihzPXN0cm0uc3RhdGUsIXN0cm0ub3V0cHV0fHwhc3RybS5pbnB1dCYmMCE9PXN0cm0uYXZhaWxfaW58fDY2Nj09PXMuc3RhdHVzJiY0IT09Zmx1c2gpcmV0dXJuIGVycihzdHJtLDA9PT1zdHJtLmF2YWlsX291dD8tNTotMik7aWYocy5zdHJtPXN0cm0sb2xkX2ZsdXNoPXMubGFzdF9mbHVzaCxzLmxhc3RfZmx1c2g9Zmx1c2gsNDI9PT1zLnN0YXR1cylpZigyPT09cy53cmFwKXN0cm0uYWRsZXI9MCxwdXRfYnl0ZShzLDMxKSxwdXRfYnl0ZShzLDEzOSkscHV0X2J5dGUocyw4KSxzLmd6aGVhZD8ocHV0X2J5dGUocywocy5nemhlYWQudGV4dD8xOjApKyhzLmd6aGVhZC5oY3JjPzI6MCkrKHMuZ3poZWFkLmV4dHJhPzQ6MCkrKHMuZ3poZWFkLm5hbWU/ODowKSsocy5nemhlYWQuY29tbWVudD8xNjowKSkscHV0X2J5dGUocywyNTUmcy5nemhlYWQudGltZSkscHV0X2J5dGUocyxzLmd6aGVhZC50aW1lPj44JjI1NSkscHV0X2J5dGUocyxzLmd6aGVhZC50aW1lPj4xNiYyNTUpLHB1dF9ieXRlKHMscy5nemhlYWQudGltZT4+MjQmMjU1KSxwdXRfYnl0ZShzLDk9PT1zLmxldmVsPzI6cy5zdHJhdGVneT49Mnx8cy5sZXZlbDwyPzQ6MCkscHV0X2J5dGUocywyNTUmcy5nemhlYWQub3MpLHMuZ3poZWFkLmV4dHJhJiZzLmd6aGVhZC5leHRyYS5sZW5ndGgmJihwdXRfYnl0ZShzLDI1NSZzLmd6aGVhZC5leHRyYS5sZW5ndGgpLHB1dF9ieXRlKHMscy5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLHMuZ3poZWFkLmhjcmMmJihzdHJtLmFkbGVyPWNyYzMyKHN0cm0uYWRsZXIscy5wZW5kaW5nX2J1ZixzLnBlbmRpbmcsMCkpLHMuZ3ppbmRleD0wLHMuc3RhdHVzPTY5KToocHV0X2J5dGUocywwKSxwdXRfYnl0ZShzLDApLHB1dF9ieXRlKHMsMCkscHV0X2J5dGUocywwKSxwdXRfYnl0ZShzLDApLHB1dF9ieXRlKHMsOT09PXMubGV2ZWw/MjpzLnN0cmF0ZWd5Pj0yfHxzLmxldmVsPDI/NDowKSxwdXRfYnl0ZShzLDMpLHMuc3RhdHVzPTExMyk7ZWxzZXt2YXIgaGVhZGVyPTgrKHMud19iaXRzLTg8PDQpPDw4O2hlYWRlcnw9KHMuc3RyYXRlZ3k+PTJ8fHMubGV2ZWw8Mj8wOnMubGV2ZWw8Nj8xOjY9PT1zLmxldmVsPzI6Myk8PDYsMCE9PXMuc3Ryc3RhcnQmJihoZWFkZXJ8PTMyKSxoZWFkZXIrPTMxLWhlYWRlciUzMSxzLnN0YXR1cz0xMTMscHV0U2hvcnRNU0IocyxoZWFkZXIpLDAhPT1zLnN0cnN0YXJ0JiYocHV0U2hvcnRNU0IocyxzdHJtLmFkbGVyPj4+MTYpLHB1dFNob3J0TVNCKHMsNjU1MzUmc3RybS5hZGxlcikpLHN0cm0uYWRsZXI9MX1pZig2OT09PXMuc3RhdHVzKWlmKHMuZ3poZWFkLmV4dHJhKXtmb3IoYmVnPXMucGVuZGluZztzLmd6aW5kZXg8KDY1NTM1JnMuZ3poZWFkLmV4dHJhLmxlbmd0aCkmJihzLnBlbmRpbmchPT1zLnBlbmRpbmdfYnVmX3NpemV8fChzLmd6aGVhZC5oY3JjJiZzLnBlbmRpbmc+YmVnJiYoc3RybS5hZGxlcj1jcmMzMihzdHJtLmFkbGVyLHMucGVuZGluZ19idWYscy5wZW5kaW5nLWJlZyxiZWcpKSxmbHVzaF9wZW5kaW5nKHN0cm0pLGJlZz1zLnBlbmRpbmcscy5wZW5kaW5nIT09cy5wZW5kaW5nX2J1Zl9zaXplKSk7KXB1dF9ieXRlKHMsMjU1JnMuZ3poZWFkLmV4dHJhW3MuZ3ppbmRleF0pLHMuZ3ppbmRleCsrO3MuZ3poZWFkLmhjcmMmJnMucGVuZGluZz5iZWcmJihzdHJtLmFkbGVyPWNyYzMyKHN0cm0uYWRsZXIscy5wZW5kaW5nX2J1ZixzLnBlbmRpbmctYmVnLGJlZykpLHMuZ3ppbmRleD09PXMuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKHMuZ3ppbmRleD0wLHMuc3RhdHVzPTczKX1lbHNlIHMuc3RhdHVzPTczO2lmKDczPT09cy5zdGF0dXMpaWYocy5nemhlYWQubmFtZSl7YmVnPXMucGVuZGluZztkb3tpZihzLnBlbmRpbmc9PT1zLnBlbmRpbmdfYnVmX3NpemUmJihzLmd6aGVhZC5oY3JjJiZzLnBlbmRpbmc+YmVnJiYoc3RybS5hZGxlcj1jcmMzMihzdHJtLmFkbGVyLHMucGVuZGluZ19idWYscy5wZW5kaW5nLWJlZyxiZWcpKSxmbHVzaF9wZW5kaW5nKHN0cm0pLGJlZz1zLnBlbmRpbmcscy5wZW5kaW5nPT09cy5wZW5kaW5nX2J1Zl9zaXplKSl7dmFsPTE7YnJlYWt9dmFsPXMuZ3ppbmRleDxzLmd6aGVhZC5uYW1lLmxlbmd0aD8yNTUmcy5nemhlYWQubmFtZS5jaGFyQ29kZUF0KHMuZ3ppbmRleCsrKTowLHB1dF9ieXRlKHMsdmFsKX13aGlsZSgwIT09dmFsKTtzLmd6aGVhZC5oY3JjJiZzLnBlbmRpbmc+YmVnJiYoc3RybS5hZGxlcj1jcmMzMihzdHJtLmFkbGVyLHMucGVuZGluZ19idWYscy5wZW5kaW5nLWJlZyxiZWcpKSwwPT09dmFsJiYocy5nemluZGV4PTAscy5zdGF0dXM9OTEpfWVsc2Ugcy5zdGF0dXM9OTE7aWYoOTE9PT1zLnN0YXR1cylpZihzLmd6aGVhZC5jb21tZW50KXtiZWc9cy5wZW5kaW5nO2Rve2lmKHMucGVuZGluZz09PXMucGVuZGluZ19idWZfc2l6ZSYmKHMuZ3poZWFkLmhjcmMmJnMucGVuZGluZz5iZWcmJihzdHJtLmFkbGVyPWNyYzMyKHN0cm0uYWRsZXIscy5wZW5kaW5nX2J1ZixzLnBlbmRpbmctYmVnLGJlZykpLGZsdXNoX3BlbmRpbmcoc3RybSksYmVnPXMucGVuZGluZyxzLnBlbmRpbmc9PT1zLnBlbmRpbmdfYnVmX3NpemUpKXt2YWw9MTticmVha312YWw9cy5nemluZGV4PHMuZ3poZWFkLmNvbW1lbnQubGVuZ3RoPzI1NSZzLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQocy5nemluZGV4KyspOjAscHV0X2J5dGUocyx2YWwpfXdoaWxlKDAhPT12YWwpO3MuZ3poZWFkLmhjcmMmJnMucGVuZGluZz5iZWcmJihzdHJtLmFkbGVyPWNyYzMyKHN0cm0uYWRsZXIscy5wZW5kaW5nX2J1ZixzLnBlbmRpbmctYmVnLGJlZykpLDA9PT12YWwmJihzLnN0YXR1cz0xMDMpfWVsc2Ugcy5zdGF0dXM9MTAzO2lmKDEwMz09PXMuc3RhdHVzJiYocy5nemhlYWQuaGNyYz8ocy5wZW5kaW5nKzI+cy5wZW5kaW5nX2J1Zl9zaXplJiZmbHVzaF9wZW5kaW5nKHN0cm0pLHMucGVuZGluZysyPD1zLnBlbmRpbmdfYnVmX3NpemUmJihwdXRfYnl0ZShzLDI1NSZzdHJtLmFkbGVyKSxwdXRfYnl0ZShzLHN0cm0uYWRsZXI+PjgmMjU1KSxzdHJtLmFkbGVyPTAscy5zdGF0dXM9MTEzKSk6cy5zdGF0dXM9MTEzKSwwIT09cy5wZW5kaW5nKXtpZihmbHVzaF9wZW5kaW5nKHN0cm0pLDA9PT1zdHJtLmF2YWlsX291dClyZXR1cm4gcy5sYXN0X2ZsdXNoPS0xLDB9ZWxzZSBpZigwPT09c3RybS5hdmFpbF9pbiYmcmFuayhmbHVzaCk8PXJhbmsob2xkX2ZsdXNoKSYmNCE9PWZsdXNoKXJldHVybiBlcnIoc3RybSwtNSk7aWYoNjY2PT09cy5zdGF0dXMmJjAhPT1zdHJtLmF2YWlsX2luKXJldHVybiBlcnIoc3RybSwtNSk7aWYoMCE9PXN0cm0uYXZhaWxfaW58fDAhPT1zLmxvb2thaGVhZHx8MCE9PWZsdXNoJiY2NjYhPT1zLnN0YXR1cyl7dmFyIGJzdGF0ZT0yPT09cy5zdHJhdGVneT9mdW5jdGlvbiBkZWZsYXRlX2h1ZmYocyxmbHVzaCl7Zm9yKHZhciBiZmx1c2g7Oyl7aWYoMD09PXMubG9va2FoZWFkJiYoZmlsbF93aW5kb3cocyksMD09PXMubG9va2FoZWFkKSl7aWYoMD09PWZsdXNoKXJldHVybiAxO2JyZWFrfWlmKHMubWF0Y2hfbGVuZ3RoPTAsYmZsdXNoPXRyZWVzLl90cl90YWxseShzLDAscy53aW5kb3dbcy5zdHJzdGFydF0pLHMubG9va2FoZWFkLS0scy5zdHJzdGFydCsrLGJmbHVzaCYmKGZsdXNoX2Jsb2NrX29ubHkocywhMSksMD09PXMuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBzLmluc2VydD0wLDQ9PT1mbHVzaD8oZmx1c2hfYmxvY2tfb25seShzLCEwKSwwPT09cy5zdHJtLmF2YWlsX291dD8zOjQpOnMubGFzdF9saXQmJihmbHVzaF9ibG9ja19vbmx5KHMsITEpLDA9PT1zLnN0cm0uYXZhaWxfb3V0KT8xOjJ9KHMsZmx1c2gpOjM9PT1zLnN0cmF0ZWd5P2Z1bmN0aW9uIGRlZmxhdGVfcmxlKHMsZmx1c2gpe2Zvcih2YXIgYmZsdXNoLHByZXYsc2NhbixzdHJlbmQsX3dpbj1zLndpbmRvdzs7KXtpZihzLmxvb2thaGVhZDw9MjU4KXtpZihmaWxsX3dpbmRvdyhzKSxzLmxvb2thaGVhZDw9MjU4JiYwPT09Zmx1c2gpcmV0dXJuIDE7aWYoMD09PXMubG9va2FoZWFkKWJyZWFrfWlmKHMubWF0Y2hfbGVuZ3RoPTAscy5sb29rYWhlYWQ+PTMmJnMuc3Ryc3RhcnQ+MCYmKHByZXY9X3dpbltzY2FuPXMuc3Ryc3RhcnQtMV0pPT09X3dpblsrK3NjYW5dJiZwcmV2PT09X3dpblsrK3NjYW5dJiZwcmV2PT09X3dpblsrK3NjYW5dKXtzdHJlbmQ9cy5zdHJzdGFydCsyNTg7ZG97fXdoaWxlKHByZXY9PT1fd2luWysrc2Nhbl0mJnByZXY9PT1fd2luWysrc2Nhbl0mJnByZXY9PT1fd2luWysrc2Nhbl0mJnByZXY9PT1fd2luWysrc2Nhbl0mJnByZXY9PT1fd2luWysrc2Nhbl0mJnByZXY9PT1fd2luWysrc2Nhbl0mJnByZXY9PT1fd2luWysrc2Nhbl0mJnByZXY9PT1fd2luWysrc2Nhbl0mJnNjYW48c3RyZW5kKTtzLm1hdGNoX2xlbmd0aD0yNTgtKHN0cmVuZC1zY2FuKSxzLm1hdGNoX2xlbmd0aD5zLmxvb2thaGVhZCYmKHMubWF0Y2hfbGVuZ3RoPXMubG9va2FoZWFkKX1pZihzLm1hdGNoX2xlbmd0aD49Mz8oYmZsdXNoPXRyZWVzLl90cl90YWxseShzLDEscy5tYXRjaF9sZW5ndGgtMykscy5sb29rYWhlYWQtPXMubWF0Y2hfbGVuZ3RoLHMuc3Ryc3RhcnQrPXMubWF0Y2hfbGVuZ3RoLHMubWF0Y2hfbGVuZ3RoPTApOihiZmx1c2g9dHJlZXMuX3RyX3RhbGx5KHMsMCxzLndpbmRvd1tzLnN0cnN0YXJ0XSkscy5sb29rYWhlYWQtLSxzLnN0cnN0YXJ0KyspLGJmbHVzaCYmKGZsdXNoX2Jsb2NrX29ubHkocywhMSksMD09PXMuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBzLmluc2VydD0wLDQ9PT1mbHVzaD8oZmx1c2hfYmxvY2tfb25seShzLCEwKSwwPT09cy5zdHJtLmF2YWlsX291dD8zOjQpOnMubGFzdF9saXQmJihmbHVzaF9ibG9ja19vbmx5KHMsITEpLDA9PT1zLnN0cm0uYXZhaWxfb3V0KT8xOjJ9KHMsZmx1c2gpOmNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0uZnVuYyhzLGZsdXNoKTtpZigzIT09YnN0YXRlJiY0IT09YnN0YXRlfHwocy5zdGF0dXM9NjY2KSwxPT09YnN0YXRlfHwzPT09YnN0YXRlKXJldHVybiAwPT09c3RybS5hdmFpbF9vdXQmJihzLmxhc3RfZmx1c2g9LTEpLDA7aWYoMj09PWJzdGF0ZSYmKDE9PT1mbHVzaD90cmVlcy5fdHJfYWxpZ24ocyk6NSE9PWZsdXNoJiYodHJlZXMuX3RyX3N0b3JlZF9ibG9jayhzLDAsMCwhMSksMz09PWZsdXNoJiYoemVybyhzLmhlYWQpLDA9PT1zLmxvb2thaGVhZCYmKHMuc3Ryc3RhcnQ9MCxzLmJsb2NrX3N0YXJ0PTAscy5pbnNlcnQ9MCkpKSxmbHVzaF9wZW5kaW5nKHN0cm0pLDA9PT1zdHJtLmF2YWlsX291dCkpcmV0dXJuIHMubGFzdF9mbHVzaD0tMSwwfXJldHVybiA0IT09Zmx1c2g/MDpzLndyYXA8PTA/MTooMj09PXMud3JhcD8ocHV0X2J5dGUocywyNTUmc3RybS5hZGxlcikscHV0X2J5dGUocyxzdHJtLmFkbGVyPj44JjI1NSkscHV0X2J5dGUocyxzdHJtLmFkbGVyPj4xNiYyNTUpLHB1dF9ieXRlKHMsc3RybS5hZGxlcj4+MjQmMjU1KSxwdXRfYnl0ZShzLDI1NSZzdHJtLnRvdGFsX2luKSxwdXRfYnl0ZShzLHN0cm0udG90YWxfaW4+PjgmMjU1KSxwdXRfYnl0ZShzLHN0cm0udG90YWxfaW4+PjE2JjI1NSkscHV0X2J5dGUocyxzdHJtLnRvdGFsX2luPj4yNCYyNTUpKToocHV0U2hvcnRNU0IocyxzdHJtLmFkbGVyPj4+MTYpLHB1dFNob3J0TVNCKHMsNjU1MzUmc3RybS5hZGxlcikpLGZsdXNoX3BlbmRpbmcoc3RybSkscy53cmFwPjAmJihzLndyYXA9LXMud3JhcCksMCE9PXMucGVuZGluZz8wOjEpfSxleHBvcnRzLmRlZmxhdGVFbmQ9ZnVuY3Rpb24gZGVmbGF0ZUVuZChzdHJtKXt2YXIgc3RhdHVzO3JldHVybiBzdHJtJiZzdHJtLnN0YXRlPzQyIT09KHN0YXR1cz1zdHJtLnN0YXRlLnN0YXR1cykmJjY5IT09c3RhdHVzJiY3MyE9PXN0YXR1cyYmOTEhPT1zdGF0dXMmJjEwMyE9PXN0YXR1cyYmMTEzIT09c3RhdHVzJiY2NjYhPT1zdGF0dXM/ZXJyKHN0cm0sLTIpOihzdHJtLnN0YXRlPW51bGwsMTEzPT09c3RhdHVzP2VycihzdHJtLC0zKTowKTotMn0sZXhwb3J0cy5kZWZsYXRlU2V0RGljdGlvbmFyeT1mdW5jdGlvbiBkZWZsYXRlU2V0RGljdGlvbmFyeShzdHJtLGRpY3Rpb25hcnkpe3ZhciBzLHN0cixuLHdyYXAsYXZhaWwsbmV4dCxpbnB1dCx0bXBEaWN0LGRpY3RMZW5ndGg9ZGljdGlvbmFyeS5sZW5ndGg7aWYoIXN0cm18fCFzdHJtLnN0YXRlKXJldHVybi0yO2lmKDI9PT0od3JhcD0ocz1zdHJtLnN0YXRlKS53cmFwKXx8MT09PXdyYXAmJjQyIT09cy5zdGF0dXN8fHMubG9va2FoZWFkKXJldHVybi0yO2ZvcigxPT09d3JhcCYmKHN0cm0uYWRsZXI9YWRsZXIzMihzdHJtLmFkbGVyLGRpY3Rpb25hcnksZGljdExlbmd0aCwwKSkscy53cmFwPTAsZGljdExlbmd0aD49cy53X3NpemUmJigwPT09d3JhcCYmKHplcm8ocy5oZWFkKSxzLnN0cnN0YXJ0PTAscy5ibG9ja19zdGFydD0wLHMuaW5zZXJ0PTApLHRtcERpY3Q9bmV3IHV0aWxzLkJ1Zjgocy53X3NpemUpLHV0aWxzLmFycmF5U2V0KHRtcERpY3QsZGljdGlvbmFyeSxkaWN0TGVuZ3RoLXMud19zaXplLHMud19zaXplLDApLGRpY3Rpb25hcnk9dG1wRGljdCxkaWN0TGVuZ3RoPXMud19zaXplKSxhdmFpbD1zdHJtLmF2YWlsX2luLG5leHQ9c3RybS5uZXh0X2luLGlucHV0PXN0cm0uaW5wdXQsc3RybS5hdmFpbF9pbj1kaWN0TGVuZ3RoLHN0cm0ubmV4dF9pbj0wLHN0cm0uaW5wdXQ9ZGljdGlvbmFyeSxmaWxsX3dpbmRvdyhzKTtzLmxvb2thaGVhZD49Mzspe3N0cj1zLnN0cnN0YXJ0LG49cy5sb29rYWhlYWQtMjtkb3tzLmluc19oPShzLmluc19oPDxzLmhhc2hfc2hpZnRecy53aW5kb3dbc3RyKzMtMV0pJnMuaGFzaF9tYXNrLHMucHJldltzdHImcy53X21hc2tdPXMuaGVhZFtzLmluc19oXSxzLmhlYWRbcy5pbnNfaF09c3RyLHN0cisrfXdoaWxlKC0tbik7cy5zdHJzdGFydD1zdHIscy5sb29rYWhlYWQ9MixmaWxsX3dpbmRvdyhzKX1yZXR1cm4gcy5zdHJzdGFydCs9cy5sb29rYWhlYWQscy5ibG9ja19zdGFydD1zLnN0cnN0YXJ0LHMuaW5zZXJ0PXMubG9va2FoZWFkLHMubG9va2FoZWFkPTAscy5tYXRjaF9sZW5ndGg9cy5wcmV2X2xlbmd0aD0yLHMubWF0Y2hfYXZhaWxhYmxlPTAsc3RybS5uZXh0X2luPW5leHQsc3RybS5pbnB1dD1pbnB1dCxzdHJtLmF2YWlsX2luPWF2YWlsLHMud3JhcD13cmFwLDB9LGV4cG9ydHMuZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSwiLi4vLi4vbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mZmFzdC5qcyIobW9kdWxlKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gaW5mbGF0ZV9mYXN0KHN0cm0sc3RhcnQpe3ZhciBzdGF0ZSxfaW4sbGFzdCxfb3V0LGJlZyxlbmQsZG1heCx3c2l6ZSx3aGF2ZSx3bmV4dCxzX3dpbmRvdyxob2xkLGJpdHMsbGNvZGUsZGNvZGUsbG1hc2ssZG1hc2ssaGVyZSxvcCxsZW4sZGlzdCxmcm9tLGZyb21fc291cmNlLGlucHV0LG91dHB1dDtzdGF0ZT1zdHJtLnN0YXRlLF9pbj1zdHJtLm5leHRfaW4saW5wdXQ9c3RybS5pbnB1dCxsYXN0PV9pbisoc3RybS5hdmFpbF9pbi01KSxfb3V0PXN0cm0ubmV4dF9vdXQsb3V0cHV0PXN0cm0ub3V0cHV0LGJlZz1fb3V0LShzdGFydC1zdHJtLmF2YWlsX291dCksZW5kPV9vdXQrKHN0cm0uYXZhaWxfb3V0LTI1NyksZG1heD1zdGF0ZS5kbWF4LHdzaXplPXN0YXRlLndzaXplLHdoYXZlPXN0YXRlLndoYXZlLHduZXh0PXN0YXRlLnduZXh0LHNfd2luZG93PXN0YXRlLndpbmRvdyxob2xkPXN0YXRlLmhvbGQsYml0cz1zdGF0ZS5iaXRzLGxjb2RlPXN0YXRlLmxlbmNvZGUsZGNvZGU9c3RhdGUuZGlzdGNvZGUsbG1hc2s9KDE8PHN0YXRlLmxlbmJpdHMpLTEsZG1hc2s9KDE8PHN0YXRlLmRpc3RiaXRzKS0xO3RvcDpkb3tiaXRzPDE1JiYoaG9sZCs9aW5wdXRbX2luKytdPDxiaXRzLGJpdHMrPTgsaG9sZCs9aW5wdXRbX2luKytdPDxiaXRzLGJpdHMrPTgpLGhlcmU9bGNvZGVbaG9sZCZsbWFza107ZG9sZW46Zm9yKDs7KXtpZihob2xkPj4+PW9wPWhlcmU+Pj4yNCxiaXRzLT1vcCwwPT09KG9wPWhlcmU+Pj4xNiYyNTUpKW91dHB1dFtfb3V0KytdPTY1NTM1JmhlcmU7ZWxzZXtpZighKDE2Jm9wKSl7aWYoNjQmb3Ape2lmKDMyJm9wKXtzdGF0ZS5tb2RlPTEyO2JyZWFrIHRvcH1zdHJtLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixzdGF0ZS5tb2RlPTMwO2JyZWFrIHRvcH1oZXJlPWxjb2RlWyg2NTUzNSZoZXJlKSsoaG9sZCYoMTw8b3ApLTEpXTtjb250aW51ZSBkb2xlbn1mb3IobGVuPTY1NTM1JmhlcmUsKG9wJj0xNSkmJihiaXRzPG9wJiYoaG9sZCs9aW5wdXRbX2luKytdPDxiaXRzLGJpdHMrPTgpLGxlbis9aG9sZCYoMTw8b3ApLTEsaG9sZD4+Pj1vcCxiaXRzLT1vcCksYml0czwxNSYmKGhvbGQrPWlucHV0W19pbisrXTw8Yml0cyxiaXRzKz04LGhvbGQrPWlucHV0W19pbisrXTw8Yml0cyxiaXRzKz04KSxoZXJlPWRjb2RlW2hvbGQmZG1hc2tdOzspe2lmKGhvbGQ+Pj49b3A9aGVyZT4+PjI0LGJpdHMtPW9wLDE2JihvcD1oZXJlPj4+MTYmMjU1KSl7aWYoZGlzdD02NTUzNSZoZXJlLGJpdHM8KG9wJj0xNSkmJihob2xkKz1pbnB1dFtfaW4rK108PGJpdHMsKGJpdHMrPTgpPG9wJiYoaG9sZCs9aW5wdXRbX2luKytdPDxiaXRzLGJpdHMrPTgpKSwoZGlzdCs9aG9sZCYoMTw8b3ApLTEpPmRtYXgpe3N0cm0ubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsc3RhdGUubW9kZT0zMDticmVhayB0b3B9aWYoaG9sZD4+Pj1vcCxiaXRzLT1vcCxkaXN0PihvcD1fb3V0LWJlZykpe2lmKChvcD1kaXN0LW9wKT53aGF2ZSYmc3RhdGUuc2FuZSl7c3RybS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixzdGF0ZS5tb2RlPTMwO2JyZWFrIHRvcH1pZihmcm9tPTAsZnJvbV9zb3VyY2U9c193aW5kb3csMD09PXduZXh0KXtpZihmcm9tKz13c2l6ZS1vcCxvcDxsZW4pe2xlbi09b3A7ZG97b3V0cHV0W19vdXQrK109c193aW5kb3dbZnJvbSsrXX13aGlsZSgtLW9wKTtmcm9tPV9vdXQtZGlzdCxmcm9tX3NvdXJjZT1vdXRwdXR9fWVsc2UgaWYod25leHQ8b3Ape2lmKGZyb20rPXdzaXplK3duZXh0LW9wLChvcC09d25leHQpPGxlbil7bGVuLT1vcDtkb3tvdXRwdXRbX291dCsrXT1zX3dpbmRvd1tmcm9tKytdfXdoaWxlKC0tb3ApO2lmKGZyb209MCx3bmV4dDxsZW4pe2xlbi09b3A9d25leHQ7ZG97b3V0cHV0W19vdXQrK109c193aW5kb3dbZnJvbSsrXX13aGlsZSgtLW9wKTtmcm9tPV9vdXQtZGlzdCxmcm9tX3NvdXJjZT1vdXRwdXR9fX1lbHNlIGlmKGZyb20rPXduZXh0LW9wLG9wPGxlbil7bGVuLT1vcDtkb3tvdXRwdXRbX291dCsrXT1zX3dpbmRvd1tmcm9tKytdfXdoaWxlKC0tb3ApO2Zyb209X291dC1kaXN0LGZyb21fc291cmNlPW91dHB1dH1mb3IoO2xlbj4yOylvdXRwdXRbX291dCsrXT1mcm9tX3NvdXJjZVtmcm9tKytdLG91dHB1dFtfb3V0KytdPWZyb21fc291cmNlW2Zyb20rK10sb3V0cHV0W19vdXQrK109ZnJvbV9zb3VyY2VbZnJvbSsrXSxsZW4tPTM7bGVuJiYob3V0cHV0W19vdXQrK109ZnJvbV9zb3VyY2VbZnJvbSsrXSxsZW4+MSYmKG91dHB1dFtfb3V0KytdPWZyb21fc291cmNlW2Zyb20rK10pKX1lbHNle2Zyb209X291dC1kaXN0O2Rve291dHB1dFtfb3V0KytdPW91dHB1dFtmcm9tKytdLG91dHB1dFtfb3V0KytdPW91dHB1dFtmcm9tKytdLG91dHB1dFtfb3V0KytdPW91dHB1dFtmcm9tKytdLGxlbi09M313aGlsZShsZW4+Mik7bGVuJiYob3V0cHV0W19vdXQrK109b3V0cHV0W2Zyb20rK10sbGVuPjEmJihvdXRwdXRbX291dCsrXT1vdXRwdXRbZnJvbSsrXSkpfWJyZWFrfWlmKDY0Jm9wKXtzdHJtLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixzdGF0ZS5tb2RlPTMwO2JyZWFrIHRvcH1oZXJlPWRjb2RlWyg2NTUzNSZoZXJlKSsoaG9sZCYoMTw8b3ApLTEpXX19YnJlYWt9fXdoaWxlKF9pbjxsYXN0JiZfb3V0PGVuZCk7X2luLT1sZW49Yml0cz4+Myxob2xkJj0oMTw8KGJpdHMtPWxlbjw8MykpLTEsc3RybS5uZXh0X2luPV9pbixzdHJtLm5leHRfb3V0PV9vdXQsc3RybS5hdmFpbF9pbj1faW48bGFzdD9sYXN0LV9pbis1OjUtKF9pbi1sYXN0KSxzdHJtLmF2YWlsX291dD1fb3V0PGVuZD9lbmQtX291dCsyNTc6MjU3LShfb3V0LWVuZCksc3RhdGUuaG9sZD1ob2xkLHN0YXRlLmJpdHM9Yml0c319LCIuLi8uLi9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9pbmZsYXRlLmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgdXRpbHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3Bha28vbGliL3V0aWxzL2NvbW1vbi5qcyIpLGFkbGVyMzI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvYWRsZXIzMi5qcyIpLGNyYzMyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2NyYzMyLmpzIiksaW5mbGF0ZV9mYXN0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZmZhc3QuanMiKSxpbmZsYXRlX3RhYmxlPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZnRyZWVzLmpzIik7ZnVuY3Rpb24genN3YXAzMihxKXtyZXR1cm4ocT4+PjI0JjI1NSkrKHE+Pj44JjY1MjgwKSsoKDY1MjgwJnEpPDw4KSsoKDI1NSZxKTw8MjQpfWZ1bmN0aW9uIEluZmxhdGVTdGF0ZSgpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgdXRpbHMuQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IHV0aWxzLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIGluZmxhdGVSZXNldEtlZXAoc3RybSl7dmFyIHN0YXRlO3JldHVybiBzdHJtJiZzdHJtLnN0YXRlPyhzdGF0ZT1zdHJtLnN0YXRlLHN0cm0udG90YWxfaW49c3RybS50b3RhbF9vdXQ9c3RhdGUudG90YWw9MCxzdHJtLm1zZz0iIixzdGF0ZS53cmFwJiYoc3RybS5hZGxlcj0xJnN0YXRlLndyYXApLHN0YXRlLm1vZGU9MSxzdGF0ZS5sYXN0PTAsc3RhdGUuaGF2ZWRpY3Q9MCxzdGF0ZS5kbWF4PTMyNzY4LHN0YXRlLmhlYWQ9bnVsbCxzdGF0ZS5ob2xkPTAsc3RhdGUuYml0cz0wLHN0YXRlLmxlbmNvZGU9c3RhdGUubGVuZHluPW5ldyB1dGlscy5CdWYzMig4NTIpLHN0YXRlLmRpc3Rjb2RlPXN0YXRlLmRpc3RkeW49bmV3IHV0aWxzLkJ1ZjMyKDU5Miksc3RhdGUuc2FuZT0xLHN0YXRlLmJhY2s9LTEsMCk6LTJ9ZnVuY3Rpb24gaW5mbGF0ZVJlc2V0KHN0cm0pe3ZhciBzdGF0ZTtyZXR1cm4gc3RybSYmc3RybS5zdGF0ZT8oKHN0YXRlPXN0cm0uc3RhdGUpLndzaXplPTAsc3RhdGUud2hhdmU9MCxzdGF0ZS53bmV4dD0wLGluZmxhdGVSZXNldEtlZXAoc3RybSkpOi0yfWZ1bmN0aW9uIGluZmxhdGVSZXNldDIoc3RybSx3aW5kb3dCaXRzKXt2YXIgd3JhcCxzdGF0ZTtyZXR1cm4gc3RybSYmc3RybS5zdGF0ZT8oc3RhdGU9c3RybS5zdGF0ZSx3aW5kb3dCaXRzPDA/KHdyYXA9MCx3aW5kb3dCaXRzPS13aW5kb3dCaXRzKTood3JhcD0xKyh3aW5kb3dCaXRzPj40KSx3aW5kb3dCaXRzPDQ4JiYod2luZG93Qml0cyY9MTUpKSx3aW5kb3dCaXRzJiYod2luZG93Qml0czw4fHx3aW5kb3dCaXRzPjE1KT8tMjoobnVsbCE9PXN0YXRlLndpbmRvdyYmc3RhdGUud2JpdHMhPT13aW5kb3dCaXRzJiYoc3RhdGUud2luZG93PW51bGwpLHN0YXRlLndyYXA9d3JhcCxzdGF0ZS53Yml0cz13aW5kb3dCaXRzLGluZmxhdGVSZXNldChzdHJtKSkpOi0yfWZ1bmN0aW9uIGluZmxhdGVJbml0MihzdHJtLHdpbmRvd0JpdHMpe3ZhciByZXQsc3RhdGU7cmV0dXJuIHN0cm0/KHN0YXRlPW5ldyBJbmZsYXRlU3RhdGUsc3RybS5zdGF0ZT1zdGF0ZSxzdGF0ZS53aW5kb3c9bnVsbCwwIT09KHJldD1pbmZsYXRlUmVzZXQyKHN0cm0sd2luZG93Qml0cykpJiYoc3RybS5zdGF0ZT1udWxsKSxyZXQpOi0yfXZhciBsZW5maXgsZGlzdGZpeCx2aXJnaW49ITA7ZnVuY3Rpb24gZml4ZWR0YWJsZXMoc3RhdGUpe2lmKHZpcmdpbil7dmFyIHN5bTtmb3IobGVuZml4PW5ldyB1dGlscy5CdWYzMig1MTIpLGRpc3RmaXg9bmV3IHV0aWxzLkJ1ZjMyKDMyKSxzeW09MDtzeW08MTQ0OylzdGF0ZS5sZW5zW3N5bSsrXT04O2Zvcig7c3ltPDI1Njspc3RhdGUubGVuc1tzeW0rK109OTtmb3IoO3N5bTwyODA7KXN0YXRlLmxlbnNbc3ltKytdPTc7Zm9yKDtzeW08Mjg4OylzdGF0ZS5sZW5zW3N5bSsrXT04O2ZvcihpbmZsYXRlX3RhYmxlKDEsc3RhdGUubGVucywwLDI4OCxsZW5maXgsMCxzdGF0ZS53b3JrLHtiaXRzOjl9KSxzeW09MDtzeW08MzI7KXN0YXRlLmxlbnNbc3ltKytdPTU7aW5mbGF0ZV90YWJsZSgyLHN0YXRlLmxlbnMsMCwzMixkaXN0Zml4LDAsc3RhdGUud29yayx7Yml0czo1fSksdmlyZ2luPSExfXN0YXRlLmxlbmNvZGU9bGVuZml4LHN0YXRlLmxlbmJpdHM9OSxzdGF0ZS5kaXN0Y29kZT1kaXN0Zml4LHN0YXRlLmRpc3RiaXRzPTV9ZnVuY3Rpb24gdXBkYXRld2luZG93KHN0cm0sc3JjLGVuZCxjb3B5KXt2YXIgZGlzdCxzdGF0ZT1zdHJtLnN0YXRlO3JldHVybiBudWxsPT09c3RhdGUud2luZG93JiYoc3RhdGUud3NpemU9MTw8c3RhdGUud2JpdHMsc3RhdGUud25leHQ9MCxzdGF0ZS53aGF2ZT0wLHN0YXRlLndpbmRvdz1uZXcgdXRpbHMuQnVmOChzdGF0ZS53c2l6ZSkpLGNvcHk+PXN0YXRlLndzaXplPyh1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csc3JjLGVuZC1zdGF0ZS53c2l6ZSxzdGF0ZS53c2l6ZSwwKSxzdGF0ZS53bmV4dD0wLHN0YXRlLndoYXZlPXN0YXRlLndzaXplKTooKGRpc3Q9c3RhdGUud3NpemUtc3RhdGUud25leHQpPmNvcHkmJihkaXN0PWNvcHkpLHV0aWxzLmFycmF5U2V0KHN0YXRlLndpbmRvdyxzcmMsZW5kLWNvcHksZGlzdCxzdGF0ZS53bmV4dCksKGNvcHktPWRpc3QpPyh1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csc3JjLGVuZC1jb3B5LGNvcHksMCksc3RhdGUud25leHQ9Y29weSxzdGF0ZS53aGF2ZT1zdGF0ZS53c2l6ZSk6KHN0YXRlLnduZXh0Kz1kaXN0LHN0YXRlLnduZXh0PT09c3RhdGUud3NpemUmJihzdGF0ZS53bmV4dD0wKSxzdGF0ZS53aGF2ZTxzdGF0ZS53c2l6ZSYmKHN0YXRlLndoYXZlKz1kaXN0KSkpLDB9ZXhwb3J0cy5pbmZsYXRlUmVzZXQ9aW5mbGF0ZVJlc2V0LGV4cG9ydHMuaW5mbGF0ZVJlc2V0Mj1pbmZsYXRlUmVzZXQyLGV4cG9ydHMuaW5mbGF0ZVJlc2V0S2VlcD1pbmZsYXRlUmVzZXRLZWVwLGV4cG9ydHMuaW5mbGF0ZUluaXQ9ZnVuY3Rpb24gaW5mbGF0ZUluaXQoc3RybSl7cmV0dXJuIGluZmxhdGVJbml0MihzdHJtLDE1KX0sZXhwb3J0cy5pbmZsYXRlSW5pdDI9aW5mbGF0ZUluaXQyLGV4cG9ydHMuaW5mbGF0ZT1mdW5jdGlvbiBpbmZsYXRlKHN0cm0sZmx1c2gpe3ZhciBzdGF0ZSxpbnB1dCxvdXRwdXQsbmV4dCxwdXQsaGF2ZSxsZWZ0LGhvbGQsYml0cyxfaW4sX291dCxjb3B5LGZyb20sZnJvbV9zb3VyY2UsaGVyZV9iaXRzLGhlcmVfb3AsaGVyZV92YWwsbGFzdF9iaXRzLGxhc3Rfb3AsbGFzdF92YWwsbGVuLHJldCxvcHRzLG4saGVyZT0wLGhidWY9bmV3IHV0aWxzLkJ1ZjgoNCksb3JkZXI9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCFzdHJtfHwhc3RybS5zdGF0ZXx8IXN0cm0ub3V0cHV0fHwhc3RybS5pbnB1dCYmMCE9PXN0cm0uYXZhaWxfaW4pcmV0dXJuLTI7MTI9PT0oc3RhdGU9c3RybS5zdGF0ZSkubW9kZSYmKHN0YXRlLm1vZGU9MTMpLHB1dD1zdHJtLm5leHRfb3V0LG91dHB1dD1zdHJtLm91dHB1dCxsZWZ0PXN0cm0uYXZhaWxfb3V0LG5leHQ9c3RybS5uZXh0X2luLGlucHV0PXN0cm0uaW5wdXQsaGF2ZT1zdHJtLmF2YWlsX2luLGhvbGQ9c3RhdGUuaG9sZCxiaXRzPXN0YXRlLmJpdHMsX2luPWhhdmUsX291dD1sZWZ0LHJldD0wO2luZl9sZWF2ZTpmb3IoOzspc3dpdGNoKHN0YXRlLm1vZGUpe2Nhc2UgMTppZigwPT09c3RhdGUud3JhcCl7c3RhdGUubW9kZT0xMzticmVha31mb3IoO2JpdHM8MTY7KXtpZigwPT09aGF2ZSlicmVhayBpbmZfbGVhdmU7aGF2ZS0tLGhvbGQrPWlucHV0W25leHQrK108PGJpdHMsYml0cys9OH1pZigyJnN0YXRlLndyYXAmJjM1NjE1PT09aG9sZCl7c3RhdGUuY2hlY2s9MCxoYnVmWzBdPTI1NSZob2xkLGhidWZbMV09aG9sZD4+PjgmMjU1LHN0YXRlLmNoZWNrPWNyYzMyKHN0YXRlLmNoZWNrLGhidWYsMiwwKSxob2xkPTAsYml0cz0wLHN0YXRlLm1vZGU9MjticmVha31pZihzdGF0ZS5mbGFncz0wLHN0YXRlLmhlYWQmJihzdGF0ZS5oZWFkLmRvbmU9ITEpLCEoMSZzdGF0ZS53cmFwKXx8KCgoMjU1JmhvbGQpPDw4KSsoaG9sZD4+OCkpJTMxKXtzdHJtLm1zZz0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsc3RhdGUubW9kZT0zMDticmVha31pZig4IT0oMTUmaG9sZCkpe3N0cm0ubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsc3RhdGUubW9kZT0zMDticmVha31pZihiaXRzLT00LGxlbj04KygxNSYoaG9sZD4+Pj00KSksMD09PXN0YXRlLndiaXRzKXN0YXRlLndiaXRzPWxlbjtlbHNlIGlmKGxlbj5zdGF0ZS53Yml0cyl7c3RybS5tc2c9ImludmFsaWQgd2luZG93IHNpemUiLHN0YXRlLm1vZGU9MzA7YnJlYWt9c3RhdGUuZG1heD0xPDxsZW4sc3RybS5hZGxlcj1zdGF0ZS5jaGVjaz0xLHN0YXRlLm1vZGU9NTEyJmhvbGQ/MTA6MTIsaG9sZD0wLGJpdHM9MDticmVhaztjYXNlIDI6Zm9yKDtiaXRzPDE2Oyl7aWYoMD09PWhhdmUpYnJlYWsgaW5mX2xlYXZlO2hhdmUtLSxob2xkKz1pbnB1dFtuZXh0KytdPDxiaXRzLGJpdHMrPTh9aWYoc3RhdGUuZmxhZ3M9aG9sZCw4IT0oMjU1JnN0YXRlLmZsYWdzKSl7c3RybS5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixzdGF0ZS5tb2RlPTMwO2JyZWFrfWlmKDU3MzQ0JnN0YXRlLmZsYWdzKXtzdHJtLm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IixzdGF0ZS5tb2RlPTMwO2JyZWFrfXN0YXRlLmhlYWQmJihzdGF0ZS5oZWFkLnRleHQ9aG9sZD4+OCYxKSw1MTImc3RhdGUuZmxhZ3MmJihoYnVmWzBdPTI1NSZob2xkLGhidWZbMV09aG9sZD4+PjgmMjU1LHN0YXRlLmNoZWNrPWNyYzMyKHN0YXRlLmNoZWNrLGhidWYsMiwwKSksaG9sZD0wLGJpdHM9MCxzdGF0ZS5tb2RlPTM7Y2FzZSAzOmZvcig7Yml0czwzMjspe2lmKDA9PT1oYXZlKWJyZWFrIGluZl9sZWF2ZTtoYXZlLS0saG9sZCs9aW5wdXRbbmV4dCsrXTw8Yml0cyxiaXRzKz04fXN0YXRlLmhlYWQmJihzdGF0ZS5oZWFkLnRpbWU9aG9sZCksNTEyJnN0YXRlLmZsYWdzJiYoaGJ1ZlswXT0yNTUmaG9sZCxoYnVmWzFdPWhvbGQ+Pj44JjI1NSxoYnVmWzJdPWhvbGQ+Pj4xNiYyNTUsaGJ1ZlszXT1ob2xkPj4+MjQmMjU1LHN0YXRlLmNoZWNrPWNyYzMyKHN0YXRlLmNoZWNrLGhidWYsNCwwKSksaG9sZD0wLGJpdHM9MCxzdGF0ZS5tb2RlPTQ7Y2FzZSA0OmZvcig7Yml0czwxNjspe2lmKDA9PT1oYXZlKWJyZWFrIGluZl9sZWF2ZTtoYXZlLS0saG9sZCs9aW5wdXRbbmV4dCsrXTw8Yml0cyxiaXRzKz04fXN0YXRlLmhlYWQmJihzdGF0ZS5oZWFkLnhmbGFncz0yNTUmaG9sZCxzdGF0ZS5oZWFkLm9zPWhvbGQ+PjgpLDUxMiZzdGF0ZS5mbGFncyYmKGhidWZbMF09MjU1JmhvbGQsaGJ1ZlsxXT1ob2xkPj4+OCYyNTUsc3RhdGUuY2hlY2s9Y3JjMzIoc3RhdGUuY2hlY2ssaGJ1ZiwyLDApKSxob2xkPTAsYml0cz0wLHN0YXRlLm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZzdGF0ZS5mbGFncyl7Zm9yKDtiaXRzPDE2Oyl7aWYoMD09PWhhdmUpYnJlYWsgaW5mX2xlYXZlO2hhdmUtLSxob2xkKz1pbnB1dFtuZXh0KytdPDxiaXRzLGJpdHMrPTh9c3RhdGUubGVuZ3RoPWhvbGQsc3RhdGUuaGVhZCYmKHN0YXRlLmhlYWQuZXh0cmFfbGVuPWhvbGQpLDUxMiZzdGF0ZS5mbGFncyYmKGhidWZbMF09MjU1JmhvbGQsaGJ1ZlsxXT1ob2xkPj4+OCYyNTUsc3RhdGUuY2hlY2s9Y3JjMzIoc3RhdGUuY2hlY2ssaGJ1ZiwyLDApKSxob2xkPTAsYml0cz0wfWVsc2Ugc3RhdGUuaGVhZCYmKHN0YXRlLmhlYWQuZXh0cmE9bnVsbCk7c3RhdGUubW9kZT02O2Nhc2UgNjppZigxMDI0JnN0YXRlLmZsYWdzJiYoKGNvcHk9c3RhdGUubGVuZ3RoKT5oYXZlJiYoY29weT1oYXZlKSxjb3B5JiYoc3RhdGUuaGVhZCYmKGxlbj1zdGF0ZS5oZWFkLmV4dHJhX2xlbi1zdGF0ZS5sZW5ndGgsc3RhdGUuaGVhZC5leHRyYXx8KHN0YXRlLmhlYWQuZXh0cmE9bmV3IEFycmF5KHN0YXRlLmhlYWQuZXh0cmFfbGVuKSksdXRpbHMuYXJyYXlTZXQoc3RhdGUuaGVhZC5leHRyYSxpbnB1dCxuZXh0LGNvcHksbGVuKSksNTEyJnN0YXRlLmZsYWdzJiYoc3RhdGUuY2hlY2s9Y3JjMzIoc3RhdGUuY2hlY2ssaW5wdXQsY29weSxuZXh0KSksaGF2ZS09Y29weSxuZXh0Kz1jb3B5LHN0YXRlLmxlbmd0aC09Y29weSksc3RhdGUubGVuZ3RoKSlicmVhayBpbmZfbGVhdmU7c3RhdGUubGVuZ3RoPTAsc3RhdGUubW9kZT03O2Nhc2UgNzppZigyMDQ4JnN0YXRlLmZsYWdzKXtpZigwPT09aGF2ZSlicmVhayBpbmZfbGVhdmU7Y29weT0wO2Rve2xlbj1pbnB1dFtuZXh0K2NvcHkrK10sc3RhdGUuaGVhZCYmbGVuJiZzdGF0ZS5sZW5ndGg8NjU1MzYmJihzdGF0ZS5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUobGVuKSl9d2hpbGUobGVuJiZjb3B5PGhhdmUpO2lmKDUxMiZzdGF0ZS5mbGFncyYmKHN0YXRlLmNoZWNrPWNyYzMyKHN0YXRlLmNoZWNrLGlucHV0LGNvcHksbmV4dCkpLGhhdmUtPWNvcHksbmV4dCs9Y29weSxsZW4pYnJlYWsgaW5mX2xlYXZlfWVsc2Ugc3RhdGUuaGVhZCYmKHN0YXRlLmhlYWQubmFtZT1udWxsKTtzdGF0ZS5sZW5ndGg9MCxzdGF0ZS5tb2RlPTg7Y2FzZSA4OmlmKDQwOTYmc3RhdGUuZmxhZ3Mpe2lmKDA9PT1oYXZlKWJyZWFrIGluZl9sZWF2ZTtjb3B5PTA7ZG97bGVuPWlucHV0W25leHQrY29weSsrXSxzdGF0ZS5oZWFkJiZsZW4mJnN0YXRlLmxlbmd0aDw2NTUzNiYmKHN0YXRlLmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShsZW4pKX13aGlsZShsZW4mJmNvcHk8aGF2ZSk7aWYoNTEyJnN0YXRlLmZsYWdzJiYoc3RhdGUuY2hlY2s9Y3JjMzIoc3RhdGUuY2hlY2ssaW5wdXQsY29weSxuZXh0KSksaGF2ZS09Y29weSxuZXh0Kz1jb3B5LGxlbilicmVhayBpbmZfbGVhdmV9ZWxzZSBzdGF0ZS5oZWFkJiYoc3RhdGUuaGVhZC5jb21tZW50PW51bGwpO3N0YXRlLm1vZGU9OTtjYXNlIDk6aWYoNTEyJnN0YXRlLmZsYWdzKXtmb3IoO2JpdHM8MTY7KXtpZigwPT09aGF2ZSlicmVhayBpbmZfbGVhdmU7aGF2ZS0tLGhvbGQrPWlucHV0W25leHQrK108PGJpdHMsYml0cys9OH1pZihob2xkIT09KDY1NTM1JnN0YXRlLmNoZWNrKSl7c3RybS5tc2c9ImhlYWRlciBjcmMgbWlzbWF0Y2giLHN0YXRlLm1vZGU9MzA7YnJlYWt9aG9sZD0wLGJpdHM9MH1zdGF0ZS5oZWFkJiYoc3RhdGUuaGVhZC5oY3JjPXN0YXRlLmZsYWdzPj45JjEsc3RhdGUuaGVhZC5kb25lPSEwKSxzdHJtLmFkbGVyPXN0YXRlLmNoZWNrPTAsc3RhdGUubW9kZT0xMjticmVhaztjYXNlIDEwOmZvcig7Yml0czwzMjspe2lmKDA9PT1oYXZlKWJyZWFrIGluZl9sZWF2ZTtoYXZlLS0saG9sZCs9aW5wdXRbbmV4dCsrXTw8Yml0cyxiaXRzKz04fXN0cm0uYWRsZXI9c3RhdGUuY2hlY2s9enN3YXAzMihob2xkKSxob2xkPTAsYml0cz0wLHN0YXRlLm1vZGU9MTE7Y2FzZSAxMTppZigwPT09c3RhdGUuaGF2ZWRpY3QpcmV0dXJuIHN0cm0ubmV4dF9vdXQ9cHV0LHN0cm0uYXZhaWxfb3V0PWxlZnQsc3RybS5uZXh0X2luPW5leHQsc3RybS5hdmFpbF9pbj1oYXZlLHN0YXRlLmhvbGQ9aG9sZCxzdGF0ZS5iaXRzPWJpdHMsMjtzdHJtLmFkbGVyPXN0YXRlLmNoZWNrPTEsc3RhdGUubW9kZT0xMjtjYXNlIDEyOmlmKDU9PT1mbHVzaHx8Nj09PWZsdXNoKWJyZWFrIGluZl9sZWF2ZTtjYXNlIDEzOmlmKHN0YXRlLmxhc3Qpe2hvbGQ+Pj49NyZiaXRzLGJpdHMtPTcmYml0cyxzdGF0ZS5tb2RlPTI3O2JyZWFrfWZvcig7Yml0czwzOyl7aWYoMD09PWhhdmUpYnJlYWsgaW5mX2xlYXZlO2hhdmUtLSxob2xkKz1pbnB1dFtuZXh0KytdPDxiaXRzLGJpdHMrPTh9c3dpdGNoKHN0YXRlLmxhc3Q9MSZob2xkLGJpdHMtPTEsMyYoaG9sZD4+Pj0xKSl7Y2FzZSAwOnN0YXRlLm1vZGU9MTQ7YnJlYWs7Y2FzZSAxOmlmKGZpeGVkdGFibGVzKHN0YXRlKSxzdGF0ZS5tb2RlPTIwLDY9PT1mbHVzaCl7aG9sZD4+Pj0yLGJpdHMtPTI7YnJlYWsgaW5mX2xlYXZlfWJyZWFrO2Nhc2UgMjpzdGF0ZS5tb2RlPTE3O2JyZWFrO2Nhc2UgMzpzdHJtLm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixzdGF0ZS5tb2RlPTMwfWhvbGQ+Pj49MixiaXRzLT0yO2JyZWFrO2Nhc2UgMTQ6Zm9yKGhvbGQ+Pj49NyZiaXRzLGJpdHMtPTcmYml0cztiaXRzPDMyOyl7aWYoMD09PWhhdmUpYnJlYWsgaW5mX2xlYXZlO2hhdmUtLSxob2xkKz1pbnB1dFtuZXh0KytdPDxiaXRzLGJpdHMrPTh9aWYoKDY1NTM1JmhvbGQpIT0oaG9sZD4+PjE2XjY1NTM1KSl7c3RybS5tc2c9ImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiLHN0YXRlLm1vZGU9MzA7YnJlYWt9aWYoc3RhdGUubGVuZ3RoPTY1NTM1JmhvbGQsaG9sZD0wLGJpdHM9MCxzdGF0ZS5tb2RlPTE1LDY9PT1mbHVzaClicmVhayBpbmZfbGVhdmU7Y2FzZSAxNTpzdGF0ZS5tb2RlPTE2O2Nhc2UgMTY6aWYoY29weT1zdGF0ZS5sZW5ndGgpe2lmKGNvcHk+aGF2ZSYmKGNvcHk9aGF2ZSksY29weT5sZWZ0JiYoY29weT1sZWZ0KSwwPT09Y29weSlicmVhayBpbmZfbGVhdmU7dXRpbHMuYXJyYXlTZXQob3V0cHV0LGlucHV0LG5leHQsY29weSxwdXQpLGhhdmUtPWNvcHksbmV4dCs9Y29weSxsZWZ0LT1jb3B5LHB1dCs9Y29weSxzdGF0ZS5sZW5ndGgtPWNvcHk7YnJlYWt9c3RhdGUubW9kZT0xMjticmVhaztjYXNlIDE3OmZvcig7Yml0czwxNDspe2lmKDA9PT1oYXZlKWJyZWFrIGluZl9sZWF2ZTtoYXZlLS0saG9sZCs9aW5wdXRbbmV4dCsrXTw8Yml0cyxiaXRzKz04fWlmKHN0YXRlLm5sZW49MjU3KygzMSZob2xkKSxob2xkPj4+PTUsYml0cy09NSxzdGF0ZS5uZGlzdD0xKygzMSZob2xkKSxob2xkPj4+PTUsYml0cy09NSxzdGF0ZS5uY29kZT00KygxNSZob2xkKSxob2xkPj4+PTQsYml0cy09NCxzdGF0ZS5ubGVuPjI4Nnx8c3RhdGUubmRpc3Q+MzApe3N0cm0ubXNnPSJ0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyIsc3RhdGUubW9kZT0zMDticmVha31zdGF0ZS5oYXZlPTAsc3RhdGUubW9kZT0xODtjYXNlIDE4OmZvcig7c3RhdGUuaGF2ZTxzdGF0ZS5uY29kZTspe2Zvcig7Yml0czwzOyl7aWYoMD09PWhhdmUpYnJlYWsgaW5mX2xlYXZlO2hhdmUtLSxob2xkKz1pbnB1dFtuZXh0KytdPDxiaXRzLGJpdHMrPTh9c3RhdGUubGVuc1tvcmRlcltzdGF0ZS5oYXZlKytdXT03JmhvbGQsaG9sZD4+Pj0zLGJpdHMtPTN9Zm9yKDtzdGF0ZS5oYXZlPDE5OylzdGF0ZS5sZW5zW29yZGVyW3N0YXRlLmhhdmUrK11dPTA7aWYoc3RhdGUubGVuY29kZT1zdGF0ZS5sZW5keW4sc3RhdGUubGVuYml0cz03LG9wdHM9e2JpdHM6c3RhdGUubGVuYml0c30scmV0PWluZmxhdGVfdGFibGUoMCxzdGF0ZS5sZW5zLDAsMTksc3RhdGUubGVuY29kZSwwLHN0YXRlLndvcmssb3B0cyksc3RhdGUubGVuYml0cz1vcHRzLmJpdHMscmV0KXtzdHJtLm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixzdGF0ZS5tb2RlPTMwO2JyZWFrfXN0YXRlLmhhdmU9MCxzdGF0ZS5tb2RlPTE5O2Nhc2UgMTk6Zm9yKDtzdGF0ZS5oYXZlPHN0YXRlLm5sZW4rc3RhdGUubmRpc3Q7KXtmb3IoO2hlcmVfb3A9KGhlcmU9c3RhdGUubGVuY29kZVtob2xkJigxPDxzdGF0ZS5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsaGVyZV92YWw9NjU1MzUmaGVyZSwhKChoZXJlX2JpdHM9aGVyZT4+PjI0KTw9Yml0cyk7KXtpZigwPT09aGF2ZSlicmVhayBpbmZfbGVhdmU7aGF2ZS0tLGhvbGQrPWlucHV0W25leHQrK108PGJpdHMsYml0cys9OH1pZihoZXJlX3ZhbDwxNilob2xkPj4+PWhlcmVfYml0cyxiaXRzLT1oZXJlX2JpdHMsc3RhdGUubGVuc1tzdGF0ZS5oYXZlKytdPWhlcmVfdmFsO2Vsc2V7aWYoMTY9PT1oZXJlX3ZhbCl7Zm9yKG49aGVyZV9iaXRzKzI7Yml0czxuOyl7aWYoMD09PWhhdmUpYnJlYWsgaW5mX2xlYXZlO2hhdmUtLSxob2xkKz1pbnB1dFtuZXh0KytdPDxiaXRzLGJpdHMrPTh9aWYoaG9sZD4+Pj1oZXJlX2JpdHMsYml0cy09aGVyZV9iaXRzLDA9PT1zdGF0ZS5oYXZlKXtzdHJtLm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsc3RhdGUubW9kZT0zMDticmVha31sZW49c3RhdGUubGVuc1tzdGF0ZS5oYXZlLTFdLGNvcHk9MysoMyZob2xkKSxob2xkPj4+PTIsYml0cy09Mn1lbHNlIGlmKDE3PT09aGVyZV92YWwpe2ZvcihuPWhlcmVfYml0cyszO2JpdHM8bjspe2lmKDA9PT1oYXZlKWJyZWFrIGluZl9sZWF2ZTtoYXZlLS0saG9sZCs9aW5wdXRbbmV4dCsrXTw8Yml0cyxiaXRzKz04fWJpdHMtPWhlcmVfYml0cyxsZW49MCxjb3B5PTMrKDcmKGhvbGQ+Pj49aGVyZV9iaXRzKSksaG9sZD4+Pj0zLGJpdHMtPTN9ZWxzZXtmb3Iobj1oZXJlX2JpdHMrNztiaXRzPG47KXtpZigwPT09aGF2ZSlicmVhayBpbmZfbGVhdmU7aGF2ZS0tLGhvbGQrPWlucHV0W25leHQrK108PGJpdHMsYml0cys9OH1iaXRzLT1oZXJlX2JpdHMsbGVuPTAsY29weT0xMSsoMTI3Jihob2xkPj4+PWhlcmVfYml0cykpLGhvbGQ+Pj49NyxiaXRzLT03fWlmKHN0YXRlLmhhdmUrY29weT5zdGF0ZS5ubGVuK3N0YXRlLm5kaXN0KXtzdHJtLm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsc3RhdGUubW9kZT0zMDticmVha31mb3IoO2NvcHktLTspc3RhdGUubGVuc1tzdGF0ZS5oYXZlKytdPWxlbn19aWYoMzA9PT1zdGF0ZS5tb2RlKWJyZWFrO2lmKDA9PT1zdGF0ZS5sZW5zWzI1Nl0pe3N0cm0ubXNnPSJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siLHN0YXRlLm1vZGU9MzA7YnJlYWt9aWYoc3RhdGUubGVuYml0cz05LG9wdHM9e2JpdHM6c3RhdGUubGVuYml0c30scmV0PWluZmxhdGVfdGFibGUoMSxzdGF0ZS5sZW5zLDAsc3RhdGUubmxlbixzdGF0ZS5sZW5jb2RlLDAsc3RhdGUud29yayxvcHRzKSxzdGF0ZS5sZW5iaXRzPW9wdHMuYml0cyxyZXQpe3N0cm0ubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLHN0YXRlLm1vZGU9MzA7YnJlYWt9aWYoc3RhdGUuZGlzdGJpdHM9NixzdGF0ZS5kaXN0Y29kZT1zdGF0ZS5kaXN0ZHluLG9wdHM9e2JpdHM6c3RhdGUuZGlzdGJpdHN9LHJldD1pbmZsYXRlX3RhYmxlKDIsc3RhdGUubGVucyxzdGF0ZS5ubGVuLHN0YXRlLm5kaXN0LHN0YXRlLmRpc3Rjb2RlLDAsc3RhdGUud29yayxvcHRzKSxzdGF0ZS5kaXN0Yml0cz1vcHRzLmJpdHMscmV0KXtzdHJtLm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixzdGF0ZS5tb2RlPTMwO2JyZWFrfWlmKHN0YXRlLm1vZGU9MjAsNj09PWZsdXNoKWJyZWFrIGluZl9sZWF2ZTtjYXNlIDIwOnN0YXRlLm1vZGU9MjE7Y2FzZSAyMTppZihoYXZlPj02JiZsZWZ0Pj0yNTgpe3N0cm0ubmV4dF9vdXQ9cHV0LHN0cm0uYXZhaWxfb3V0PWxlZnQsc3RybS5uZXh0X2luPW5leHQsc3RybS5hdmFpbF9pbj1oYXZlLHN0YXRlLmhvbGQ9aG9sZCxzdGF0ZS5iaXRzPWJpdHMsaW5mbGF0ZV9mYXN0KHN0cm0sX291dCkscHV0PXN0cm0ubmV4dF9vdXQsb3V0cHV0PXN0cm0ub3V0cHV0LGxlZnQ9c3RybS5hdmFpbF9vdXQsbmV4dD1zdHJtLm5leHRfaW4saW5wdXQ9c3RybS5pbnB1dCxoYXZlPXN0cm0uYXZhaWxfaW4saG9sZD1zdGF0ZS5ob2xkLGJpdHM9c3RhdGUuYml0cywxMj09PXN0YXRlLm1vZGUmJihzdGF0ZS5iYWNrPS0xKTticmVha31mb3Ioc3RhdGUuYmFjaz0wO2hlcmVfb3A9KGhlcmU9c3RhdGUubGVuY29kZVtob2xkJigxPDxzdGF0ZS5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsaGVyZV92YWw9NjU1MzUmaGVyZSwhKChoZXJlX2JpdHM9aGVyZT4+PjI0KTw9Yml0cyk7KXtpZigwPT09aGF2ZSlicmVhayBpbmZfbGVhdmU7aGF2ZS0tLGhvbGQrPWlucHV0W25leHQrK108PGJpdHMsYml0cys9OH1pZihoZXJlX29wJiYhKDI0MCZoZXJlX29wKSl7Zm9yKGxhc3RfYml0cz1oZXJlX2JpdHMsbGFzdF9vcD1oZXJlX29wLGxhc3RfdmFsPWhlcmVfdmFsO2hlcmVfb3A9KGhlcmU9c3RhdGUubGVuY29kZVtsYXN0X3ZhbCsoKGhvbGQmKDE8PGxhc3RfYml0cytsYXN0X29wKS0xKT4+bGFzdF9iaXRzKV0pPj4+MTYmMjU1LGhlcmVfdmFsPTY1NTM1JmhlcmUsIShsYXN0X2JpdHMrKGhlcmVfYml0cz1oZXJlPj4+MjQpPD1iaXRzKTspe2lmKDA9PT1oYXZlKWJyZWFrIGluZl9sZWF2ZTtoYXZlLS0saG9sZCs9aW5wdXRbbmV4dCsrXTw8Yml0cyxiaXRzKz04fWhvbGQ+Pj49bGFzdF9iaXRzLGJpdHMtPWxhc3RfYml0cyxzdGF0ZS5iYWNrKz1sYXN0X2JpdHN9aWYoaG9sZD4+Pj1oZXJlX2JpdHMsYml0cy09aGVyZV9iaXRzLHN0YXRlLmJhY2srPWhlcmVfYml0cyxzdGF0ZS5sZW5ndGg9aGVyZV92YWwsMD09PWhlcmVfb3Ape3N0YXRlLm1vZGU9MjY7YnJlYWt9aWYoMzImaGVyZV9vcCl7c3RhdGUuYmFjaz0tMSxzdGF0ZS5tb2RlPTEyO2JyZWFrfWlmKDY0JmhlcmVfb3Ape3N0cm0ubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLHN0YXRlLm1vZGU9MzA7YnJlYWt9c3RhdGUuZXh0cmE9MTUmaGVyZV9vcCxzdGF0ZS5tb2RlPTIyO2Nhc2UgMjI6aWYoc3RhdGUuZXh0cmEpe2ZvcihuPXN0YXRlLmV4dHJhO2JpdHM8bjspe2lmKDA9PT1oYXZlKWJyZWFrIGluZl9sZWF2ZTtoYXZlLS0saG9sZCs9aW5wdXRbbmV4dCsrXTw8Yml0cyxiaXRzKz04fXN0YXRlLmxlbmd0aCs9aG9sZCYoMTw8c3RhdGUuZXh0cmEpLTEsaG9sZD4+Pj1zdGF0ZS5leHRyYSxiaXRzLT1zdGF0ZS5leHRyYSxzdGF0ZS5iYWNrKz1zdGF0ZS5leHRyYX1zdGF0ZS53YXM9c3RhdGUubGVuZ3RoLHN0YXRlLm1vZGU9MjM7Y2FzZSAyMzpmb3IoO2hlcmVfb3A9KGhlcmU9c3RhdGUuZGlzdGNvZGVbaG9sZCYoMTw8c3RhdGUuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxoZXJlX3ZhbD02NTUzNSZoZXJlLCEoKGhlcmVfYml0cz1oZXJlPj4+MjQpPD1iaXRzKTspe2lmKDA9PT1oYXZlKWJyZWFrIGluZl9sZWF2ZTtoYXZlLS0saG9sZCs9aW5wdXRbbmV4dCsrXTw8Yml0cyxiaXRzKz04fWlmKCEoMjQwJmhlcmVfb3ApKXtmb3IobGFzdF9iaXRzPWhlcmVfYml0cyxsYXN0X29wPWhlcmVfb3AsbGFzdF92YWw9aGVyZV92YWw7aGVyZV9vcD0oaGVyZT1zdGF0ZS5kaXN0Y29kZVtsYXN0X3ZhbCsoKGhvbGQmKDE8PGxhc3RfYml0cytsYXN0X29wKS0xKT4+bGFzdF9iaXRzKV0pPj4+MTYmMjU1LGhlcmVfdmFsPTY1NTM1JmhlcmUsIShsYXN0X2JpdHMrKGhlcmVfYml0cz1oZXJlPj4+MjQpPD1iaXRzKTspe2lmKDA9PT1oYXZlKWJyZWFrIGluZl9sZWF2ZTtoYXZlLS0saG9sZCs9aW5wdXRbbmV4dCsrXTw8Yml0cyxiaXRzKz04fWhvbGQ+Pj49bGFzdF9iaXRzLGJpdHMtPWxhc3RfYml0cyxzdGF0ZS5iYWNrKz1sYXN0X2JpdHN9aWYoaG9sZD4+Pj1oZXJlX2JpdHMsYml0cy09aGVyZV9iaXRzLHN0YXRlLmJhY2srPWhlcmVfYml0cyw2NCZoZXJlX29wKXtzdHJtLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixzdGF0ZS5tb2RlPTMwO2JyZWFrfXN0YXRlLm9mZnNldD1oZXJlX3ZhbCxzdGF0ZS5leHRyYT0xNSZoZXJlX29wLHN0YXRlLm1vZGU9MjQ7Y2FzZSAyNDppZihzdGF0ZS5leHRyYSl7Zm9yKG49c3RhdGUuZXh0cmE7Yml0czxuOyl7aWYoMD09PWhhdmUpYnJlYWsgaW5mX2xlYXZlO2hhdmUtLSxob2xkKz1pbnB1dFtuZXh0KytdPDxiaXRzLGJpdHMrPTh9c3RhdGUub2Zmc2V0Kz1ob2xkJigxPDxzdGF0ZS5leHRyYSktMSxob2xkPj4+PXN0YXRlLmV4dHJhLGJpdHMtPXN0YXRlLmV4dHJhLHN0YXRlLmJhY2srPXN0YXRlLmV4dHJhfWlmKHN0YXRlLm9mZnNldD5zdGF0ZS5kbWF4KXtzdHJtLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLHN0YXRlLm1vZGU9MzA7YnJlYWt9c3RhdGUubW9kZT0yNTtjYXNlIDI1OmlmKDA9PT1sZWZ0KWJyZWFrIGluZl9sZWF2ZTtpZihjb3B5PV9vdXQtbGVmdCxzdGF0ZS5vZmZzZXQ+Y29weSl7aWYoKGNvcHk9c3RhdGUub2Zmc2V0LWNvcHkpPnN0YXRlLndoYXZlJiZzdGF0ZS5zYW5lKXtzdHJtLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLHN0YXRlLm1vZGU9MzA7YnJlYWt9Y29weT5zdGF0ZS53bmV4dD8oY29weS09c3RhdGUud25leHQsZnJvbT1zdGF0ZS53c2l6ZS1jb3B5KTpmcm9tPXN0YXRlLnduZXh0LWNvcHksY29weT5zdGF0ZS5sZW5ndGgmJihjb3B5PXN0YXRlLmxlbmd0aCksZnJvbV9zb3VyY2U9c3RhdGUud2luZG93fWVsc2UgZnJvbV9zb3VyY2U9b3V0cHV0LGZyb209cHV0LXN0YXRlLm9mZnNldCxjb3B5PXN0YXRlLmxlbmd0aDtjb3B5PmxlZnQmJihjb3B5PWxlZnQpLGxlZnQtPWNvcHksc3RhdGUubGVuZ3RoLT1jb3B5O2Rve291dHB1dFtwdXQrK109ZnJvbV9zb3VyY2VbZnJvbSsrXX13aGlsZSgtLWNvcHkpOzA9PT1zdGF0ZS5sZW5ndGgmJihzdGF0ZS5tb2RlPTIxKTticmVhaztjYXNlIDI2OmlmKDA9PT1sZWZ0KWJyZWFrIGluZl9sZWF2ZTtvdXRwdXRbcHV0KytdPXN0YXRlLmxlbmd0aCxsZWZ0LS0sc3RhdGUubW9kZT0yMTticmVhaztjYXNlIDI3OmlmKHN0YXRlLndyYXApe2Zvcig7Yml0czwzMjspe2lmKDA9PT1oYXZlKWJyZWFrIGluZl9sZWF2ZTtoYXZlLS0saG9sZHw9aW5wdXRbbmV4dCsrXTw8Yml0cyxiaXRzKz04fWlmKF9vdXQtPWxlZnQsc3RybS50b3RhbF9vdXQrPV9vdXQsc3RhdGUudG90YWwrPV9vdXQsX291dCYmKHN0cm0uYWRsZXI9c3RhdGUuY2hlY2s9c3RhdGUuZmxhZ3M/Y3JjMzIoc3RhdGUuY2hlY2ssb3V0cHV0LF9vdXQscHV0LV9vdXQpOmFkbGVyMzIoc3RhdGUuY2hlY2ssb3V0cHV0LF9vdXQscHV0LV9vdXQpKSxfb3V0PWxlZnQsKHN0YXRlLmZsYWdzP2hvbGQ6enN3YXAzMihob2xkKSkhPT1zdGF0ZS5jaGVjayl7c3RybS5tc2c9ImluY29ycmVjdCBkYXRhIGNoZWNrIixzdGF0ZS5tb2RlPTMwO2JyZWFrfWhvbGQ9MCxiaXRzPTB9c3RhdGUubW9kZT0yODtjYXNlIDI4OmlmKHN0YXRlLndyYXAmJnN0YXRlLmZsYWdzKXtmb3IoO2JpdHM8MzI7KXtpZigwPT09aGF2ZSlicmVhayBpbmZfbGVhdmU7aGF2ZS0tLGhvbGQrPWlucHV0W25leHQrK108PGJpdHMsYml0cys9OH1pZihob2xkIT09KDQyOTQ5NjcyOTUmc3RhdGUudG90YWwpKXtzdHJtLm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsc3RhdGUubW9kZT0zMDticmVha31ob2xkPTAsYml0cz0wfXN0YXRlLm1vZGU9Mjk7Y2FzZSAyOTpyZXQ9MTticmVhayBpbmZfbGVhdmU7Y2FzZSAzMDpyZXQ9LTM7YnJlYWsgaW5mX2xlYXZlO2Nhc2UgMzE6cmV0dXJuLTQ7ZGVmYXVsdDpyZXR1cm4tMn1yZXR1cm4gc3RybS5uZXh0X291dD1wdXQsc3RybS5hdmFpbF9vdXQ9bGVmdCxzdHJtLm5leHRfaW49bmV4dCxzdHJtLmF2YWlsX2luPWhhdmUsc3RhdGUuaG9sZD1ob2xkLHN0YXRlLmJpdHM9Yml0cywoc3RhdGUud3NpemV8fF9vdXQhPT1zdHJtLmF2YWlsX291dCYmc3RhdGUubW9kZTwzMCYmKHN0YXRlLm1vZGU8Mjd8fDQhPT1mbHVzaCkpJiZ1cGRhdGV3aW5kb3coc3RybSxzdHJtLm91dHB1dCxzdHJtLm5leHRfb3V0LF9vdXQtc3RybS5hdmFpbF9vdXQpPyhzdGF0ZS5tb2RlPTMxLC00KTooX2luLT1zdHJtLmF2YWlsX2luLF9vdXQtPXN0cm0uYXZhaWxfb3V0LHN0cm0udG90YWxfaW4rPV9pbixzdHJtLnRvdGFsX291dCs9X291dCxzdGF0ZS50b3RhbCs9X291dCxzdGF0ZS53cmFwJiZfb3V0JiYoc3RybS5hZGxlcj1zdGF0ZS5jaGVjaz1zdGF0ZS5mbGFncz9jcmMzMihzdGF0ZS5jaGVjayxvdXRwdXQsX291dCxzdHJtLm5leHRfb3V0LV9vdXQpOmFkbGVyMzIoc3RhdGUuY2hlY2ssb3V0cHV0LF9vdXQsc3RybS5uZXh0X291dC1fb3V0KSksc3RybS5kYXRhX3R5cGU9c3RhdGUuYml0cysoc3RhdGUubGFzdD82NDowKSsoMTI9PT1zdGF0ZS5tb2RlPzEyODowKSsoMjA9PT1zdGF0ZS5tb2RlfHwxNT09PXN0YXRlLm1vZGU/MjU2OjApLCgwPT09X2luJiYwPT09X291dHx8ND09PWZsdXNoKSYmMD09PXJldCYmKHJldD0tNSkscmV0KX0sZXhwb3J0cy5pbmZsYXRlRW5kPWZ1bmN0aW9uIGluZmxhdGVFbmQoc3RybSl7aWYoIXN0cm18fCFzdHJtLnN0YXRlKXJldHVybi0yO3ZhciBzdGF0ZT1zdHJtLnN0YXRlO3JldHVybiBzdGF0ZS53aW5kb3cmJihzdGF0ZS53aW5kb3c9bnVsbCksc3RybS5zdGF0ZT1udWxsLDB9LGV4cG9ydHMuaW5mbGF0ZUdldEhlYWRlcj1mdW5jdGlvbiBpbmZsYXRlR2V0SGVhZGVyKHN0cm0saGVhZCl7dmFyIHN0YXRlO3JldHVybiBzdHJtJiZzdHJtLnN0YXRlJiYyJihzdGF0ZT1zdHJtLnN0YXRlKS53cmFwPyhzdGF0ZS5oZWFkPWhlYWQsaGVhZC5kb25lPSExLDApOi0yfSxleHBvcnRzLmluZmxhdGVTZXREaWN0aW9uYXJ5PWZ1bmN0aW9uIGluZmxhdGVTZXREaWN0aW9uYXJ5KHN0cm0sZGljdGlvbmFyeSl7dmFyIHN0YXRlLGRpY3RMZW5ndGg9ZGljdGlvbmFyeS5sZW5ndGg7cmV0dXJuIHN0cm0mJnN0cm0uc3RhdGU/MCE9PShzdGF0ZT1zdHJtLnN0YXRlKS53cmFwJiYxMSE9PXN0YXRlLm1vZGU/LTI6MTE9PT1zdGF0ZS5tb2RlJiZhZGxlcjMyKDEsZGljdGlvbmFyeSxkaWN0TGVuZ3RoLDApIT09c3RhdGUuY2hlY2s/LTM6dXBkYXRld2luZG93KHN0cm0sZGljdGlvbmFyeSxkaWN0TGVuZ3RoLGRpY3RMZW5ndGgpPyhzdGF0ZS5tb2RlPTMxLC00KTooc3RhdGUuaGF2ZWRpY3Q9MSwwKTotMn0sZXhwb3J0cy5pbmZsYXRlSW5mbz0icGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LCIuLi8uLi9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9pbmZ0cmVlcy5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHV0aWxzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYWtvL2xpYi91dGlscy9jb21tb24uanMiKSxsYmFzZT1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdLGxleHQ9WzE2LDE2LDE2LDE2LDE2LDE2LDE2LDE2LDE3LDE3LDE3LDE3LDE4LDE4LDE4LDE4LDE5LDE5LDE5LDE5LDIwLDIwLDIwLDIwLDIxLDIxLDIxLDIxLDE2LDcyLDc4XSxkYmFzZT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0sZGV4dD1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGluZmxhdGVfdGFibGUodHlwZSxsZW5zLGxlbnNfaW5kZXgsY29kZXMsdGFibGUsdGFibGVfaW5kZXgsd29yayxvcHRzKXt2YXIgaW5jcixmaWxsLGxvdyxtYXNrLG5leHQsZW5kLGhlcmVfYml0cyxoZXJlX29wLGhlcmVfdmFsLGJpdHM9b3B0cy5iaXRzLGxlbj0wLHN5bT0wLG1pbj0wLG1heD0wLHJvb3Q9MCxjdXJyPTAsZHJvcD0wLGxlZnQ9MCx1c2VkPTAsaHVmZj0wLGJhc2U9bnVsbCxiYXNlX2luZGV4PTAsY291bnQ9bmV3IHV0aWxzLkJ1ZjE2KDE2KSxvZmZzPW5ldyB1dGlscy5CdWYxNigxNiksZXh0cmE9bnVsbCxleHRyYV9pbmRleD0wO2ZvcihsZW49MDtsZW48PTE1O2xlbisrKWNvdW50W2xlbl09MDtmb3Ioc3ltPTA7c3ltPGNvZGVzO3N5bSsrKWNvdW50W2xlbnNbbGVuc19pbmRleCtzeW1dXSsrO2Zvcihyb290PWJpdHMsbWF4PTE1O21heD49MSYmMD09PWNvdW50W21heF07bWF4LS0pO2lmKHJvb3Q+bWF4JiYocm9vdD1tYXgpLDA9PT1tYXgpcmV0dXJuIHRhYmxlW3RhYmxlX2luZGV4KytdPTIwOTcxNTIwLHRhYmxlW3RhYmxlX2luZGV4KytdPTIwOTcxNTIwLG9wdHMuYml0cz0xLDA7Zm9yKG1pbj0xO21pbjxtYXgmJjA9PT1jb3VudFttaW5dO21pbisrKTtmb3Iocm9vdDxtaW4mJihyb290PW1pbiksbGVmdD0xLGxlbj0xO2xlbjw9MTU7bGVuKyspaWYobGVmdDw8PTEsKGxlZnQtPWNvdW50W2xlbl0pPDApcmV0dXJuLTE7aWYobGVmdD4wJiYoMD09PXR5cGV8fDEhPT1tYXgpKXJldHVybi0xO2ZvcihvZmZzWzFdPTAsbGVuPTE7bGVuPDE1O2xlbisrKW9mZnNbbGVuKzFdPW9mZnNbbGVuXStjb3VudFtsZW5dO2ZvcihzeW09MDtzeW08Y29kZXM7c3ltKyspMCE9PWxlbnNbbGVuc19pbmRleCtzeW1dJiYod29ya1tvZmZzW2xlbnNbbGVuc19pbmRleCtzeW1dXSsrXT1zeW0pO2lmKDA9PT10eXBlPyhiYXNlPWV4dHJhPXdvcmssZW5kPTE5KToxPT09dHlwZT8oYmFzZT1sYmFzZSxiYXNlX2luZGV4LT0yNTcsZXh0cmE9bGV4dCxleHRyYV9pbmRleC09MjU3LGVuZD0yNTYpOihiYXNlPWRiYXNlLGV4dHJhPWRleHQsZW5kPS0xKSxodWZmPTAsc3ltPTAsbGVuPW1pbixuZXh0PXRhYmxlX2luZGV4LGN1cnI9cm9vdCxkcm9wPTAsbG93PS0xLG1hc2s9KHVzZWQ9MTw8cm9vdCktMSwxPT09dHlwZSYmdXNlZD44NTJ8fDI9PT10eXBlJiZ1c2VkPjU5MilyZXR1cm4gMTtmb3IoOzspe2hlcmVfYml0cz1sZW4tZHJvcCx3b3JrW3N5bV08ZW5kPyhoZXJlX29wPTAsaGVyZV92YWw9d29ya1tzeW1dKTp3b3JrW3N5bV0+ZW5kPyhoZXJlX29wPWV4dHJhW2V4dHJhX2luZGV4K3dvcmtbc3ltXV0saGVyZV92YWw9YmFzZVtiYXNlX2luZGV4K3dvcmtbc3ltXV0pOihoZXJlX29wPTk2LGhlcmVfdmFsPTApLGluY3I9MTw8bGVuLWRyb3AsbWluPWZpbGw9MTw8Y3Vycjtkb3t0YWJsZVtuZXh0KyhodWZmPj5kcm9wKSsoZmlsbC09aW5jcildPWhlcmVfYml0czw8MjR8aGVyZV9vcDw8MTZ8aGVyZV92YWx9d2hpbGUoMCE9PWZpbGwpO2ZvcihpbmNyPTE8PGxlbi0xO2h1ZmYmaW5jcjspaW5jcj4+PTE7aWYoMCE9PWluY3I/KGh1ZmYmPWluY3ItMSxodWZmKz1pbmNyKTpodWZmPTAsc3ltKyssMD09PS0tY291bnRbbGVuXSl7aWYobGVuPT09bWF4KWJyZWFrO2xlbj1sZW5zW2xlbnNfaW5kZXgrd29ya1tzeW1dXX1pZihsZW4+cm9vdCYmKGh1ZmYmbWFzaykhPT1sb3cpe2ZvcigwPT09ZHJvcCYmKGRyb3A9cm9vdCksbmV4dCs9bWluLGxlZnQ9MTw8KGN1cnI9bGVuLWRyb3ApO2N1cnIrZHJvcDxtYXgmJiEoKGxlZnQtPWNvdW50W2N1cnIrZHJvcF0pPD0wKTspY3VycisrLGxlZnQ8PD0xO2lmKHVzZWQrPTE8PGN1cnIsMT09PXR5cGUmJnVzZWQ+ODUyfHwyPT09dHlwZSYmdXNlZD41OTIpcmV0dXJuIDE7dGFibGVbbG93PWh1ZmYmbWFza109cm9vdDw8MjR8Y3Vycjw8MTZ8bmV4dC10YWJsZV9pbmRleH19cmV0dXJuIDAhPT1odWZmJiYodGFibGVbbmV4dCtodWZmXT1sZW4tZHJvcDw8MjR8NjQ8PDE2KSxvcHRzLmJpdHM9cm9vdCwwfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL21lc3NhZ2VzLmpzIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz17MjoibmVlZCBkaWN0aW9uYXJ5IiwxOiJzdHJlYW0gZW5kIiwwOiIiLCItMSI6ImZpbGUgZXJyb3IiLCItMiI6InN0cmVhbSBlcnJvciIsIi0zIjoiZGF0YSBlcnJvciIsIi00IjoiaW5zdWZmaWNpZW50IG1lbW9yeSIsIi01IjoiYnVmZmVyIGVycm9yIiwiLTYiOiJpbmNvbXBhdGlibGUgdmVyc2lvbiJ9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvdHJlZXMuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciB1dGlscz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcGFrby9saWIvdXRpbHMvY29tbW9uLmpzIik7ZnVuY3Rpb24gemVybyhidWYpe2Zvcih2YXIgbGVuPWJ1Zi5sZW5ndGg7LS1sZW4+PTA7KWJ1ZltsZW5dPTB9dmFyIGV4dHJhX2xiaXRzPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLGV4dHJhX2RiaXRzPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSxleHRyYV9ibGJpdHM9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLGJsX29yZGVyPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxzdGF0aWNfbHRyZWU9bmV3IEFycmF5KDU3Nik7emVybyhzdGF0aWNfbHRyZWUpO3ZhciBzdGF0aWNfZHRyZWU9bmV3IEFycmF5KDYwKTt6ZXJvKHN0YXRpY19kdHJlZSk7dmFyIF9kaXN0X2NvZGU9bmV3IEFycmF5KDUxMik7emVybyhfZGlzdF9jb2RlKTt2YXIgX2xlbmd0aF9jb2RlPW5ldyBBcnJheSgyNTYpO3plcm8oX2xlbmd0aF9jb2RlKTt2YXIgYmFzZV9sZW5ndGg9bmV3IEFycmF5KDI5KTt6ZXJvKGJhc2VfbGVuZ3RoKTt2YXIgc3RhdGljX2xfZGVzYyxzdGF0aWNfZF9kZXNjLHN0YXRpY19ibF9kZXNjLGJhc2VfZGlzdD1uZXcgQXJyYXkoMzApO2Z1bmN0aW9uIFN0YXRpY1RyZWVEZXNjKHN0YXRpY190cmVlLGV4dHJhX2JpdHMsZXh0cmFfYmFzZSxlbGVtcyxtYXhfbGVuZ3RoKXt0aGlzLnN0YXRpY190cmVlPXN0YXRpY190cmVlLHRoaXMuZXh0cmFfYml0cz1leHRyYV9iaXRzLHRoaXMuZXh0cmFfYmFzZT1leHRyYV9iYXNlLHRoaXMuZWxlbXM9ZWxlbXMsdGhpcy5tYXhfbGVuZ3RoPW1heF9sZW5ndGgsdGhpcy5oYXNfc3RyZWU9c3RhdGljX3RyZWUmJnN0YXRpY190cmVlLmxlbmd0aH1mdW5jdGlvbiBUcmVlRGVzYyhkeW5fdHJlZSxzdGF0X2Rlc2Mpe3RoaXMuZHluX3RyZWU9ZHluX3RyZWUsdGhpcy5tYXhfY29kZT0wLHRoaXMuc3RhdF9kZXNjPXN0YXRfZGVzY31mdW5jdGlvbiBkX2NvZGUoZGlzdCl7cmV0dXJuIGRpc3Q8MjU2P19kaXN0X2NvZGVbZGlzdF06X2Rpc3RfY29kZVsyNTYrKGRpc3Q+Pj43KV19ZnVuY3Rpb24gcHV0X3Nob3J0KHMsdyl7cy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK109MjU1Jncscy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK109dz4+PjgmMjU1fWZ1bmN0aW9uIHNlbmRfYml0cyhzLHZhbHVlLGxlbmd0aCl7cy5iaV92YWxpZD4xNi1sZW5ndGg/KHMuYmlfYnVmfD12YWx1ZTw8cy5iaV92YWxpZCY2NTUzNSxwdXRfc2hvcnQocyxzLmJpX2J1Zikscy5iaV9idWY9dmFsdWU+PjE2LXMuYmlfdmFsaWQscy5iaV92YWxpZCs9bGVuZ3RoLTE2KToocy5iaV9idWZ8PXZhbHVlPDxzLmJpX3ZhbGlkJjY1NTM1LHMuYmlfdmFsaWQrPWxlbmd0aCl9ZnVuY3Rpb24gc2VuZF9jb2RlKHMsYyx0cmVlKXtzZW5kX2JpdHMocyx0cmVlWzIqY10sdHJlZVsyKmMrMV0pfWZ1bmN0aW9uIGJpX3JldmVyc2UoY29kZSxsZW4pe3ZhciByZXM9MDtkb3tyZXN8PTEmY29kZSxjb2RlPj4+PTEscmVzPDw9MX13aGlsZSgtLWxlbj4wKTtyZXR1cm4gcmVzPj4+MX1mdW5jdGlvbiBnZW5fY29kZXModHJlZSxtYXhfY29kZSxibF9jb3VudCl7dmFyIGJpdHMsbixuZXh0X2NvZGU9bmV3IEFycmF5KDE2KSxjb2RlPTA7Zm9yKGJpdHM9MTtiaXRzPD0xNTtiaXRzKyspbmV4dF9jb2RlW2JpdHNdPWNvZGU9Y29kZStibF9jb3VudFtiaXRzLTFdPDwxO2ZvcihuPTA7bjw9bWF4X2NvZGU7bisrKXt2YXIgbGVuPXRyZWVbMipuKzFdOzAhPT1sZW4mJih0cmVlWzIqbl09YmlfcmV2ZXJzZShuZXh0X2NvZGVbbGVuXSsrLGxlbikpfX1mdW5jdGlvbiBpbml0X2Jsb2NrKHMpe3ZhciBuO2ZvcihuPTA7bjwyODY7bisrKXMuZHluX2x0cmVlWzIqbl09MDtmb3Iobj0wO248MzA7bisrKXMuZHluX2R0cmVlWzIqbl09MDtmb3Iobj0wO248MTk7bisrKXMuYmxfdHJlZVsyKm5dPTA7cy5keW5fbHRyZWVbNTEyXT0xLHMub3B0X2xlbj1zLnN0YXRpY19sZW49MCxzLmxhc3RfbGl0PXMubWF0Y2hlcz0wfWZ1bmN0aW9uIGJpX3dpbmR1cChzKXtzLmJpX3ZhbGlkPjg/cHV0X3Nob3J0KHMscy5iaV9idWYpOnMuYmlfdmFsaWQ+MCYmKHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdPXMuYmlfYnVmKSxzLmJpX2J1Zj0wLHMuYmlfdmFsaWQ9MH1mdW5jdGlvbiBzbWFsbGVyKHRyZWUsbixtLGRlcHRoKXt2YXIgX24yPTIqbixfbTI9MiptO3JldHVybiB0cmVlW19uMl08dHJlZVtfbTJdfHx0cmVlW19uMl09PT10cmVlW19tMl0mJmRlcHRoW25dPD1kZXB0aFttXX1mdW5jdGlvbiBwcWRvd25oZWFwKHMsdHJlZSxrKXtmb3IodmFyIHY9cy5oZWFwW2tdLGo9azw8MTtqPD1zLmhlYXBfbGVuJiYoajxzLmhlYXBfbGVuJiZzbWFsbGVyKHRyZWUscy5oZWFwW2orMV0scy5oZWFwW2pdLHMuZGVwdGgpJiZqKyssIXNtYWxsZXIodHJlZSx2LHMuaGVhcFtqXSxzLmRlcHRoKSk7KXMuaGVhcFtrXT1zLmhlYXBbal0saz1qLGo8PD0xO3MuaGVhcFtrXT12fWZ1bmN0aW9uIGNvbXByZXNzX2Jsb2NrKHMsbHRyZWUsZHRyZWUpe3ZhciBkaXN0LGxjLGNvZGUsZXh0cmEsbHg9MDtpZigwIT09cy5sYXN0X2xpdClkb3tkaXN0PXMucGVuZGluZ19idWZbcy5kX2J1ZisyKmx4XTw8OHxzLnBlbmRpbmdfYnVmW3MuZF9idWYrMipseCsxXSxsYz1zLnBlbmRpbmdfYnVmW3MubF9idWYrbHhdLGx4KyssMD09PWRpc3Q/c2VuZF9jb2RlKHMsbGMsbHRyZWUpOihzZW5kX2NvZGUocywoY29kZT1fbGVuZ3RoX2NvZGVbbGNdKSsyNTYrMSxsdHJlZSksMCE9PShleHRyYT1leHRyYV9sYml0c1tjb2RlXSkmJnNlbmRfYml0cyhzLGxjLT1iYXNlX2xlbmd0aFtjb2RlXSxleHRyYSksc2VuZF9jb2RlKHMsY29kZT1kX2NvZGUoLS1kaXN0KSxkdHJlZSksMCE9PShleHRyYT1leHRyYV9kYml0c1tjb2RlXSkmJnNlbmRfYml0cyhzLGRpc3QtPWJhc2VfZGlzdFtjb2RlXSxleHRyYSkpfXdoaWxlKGx4PHMubGFzdF9saXQpO3NlbmRfY29kZShzLDI1NixsdHJlZSl9ZnVuY3Rpb24gYnVpbGRfdHJlZShzLGRlc2Mpe3ZhciBuLG0sbm9kZSx0cmVlPWRlc2MuZHluX3RyZWUsc3RyZWU9ZGVzYy5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsaGFzX3N0cmVlPWRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZSxlbGVtcz1kZXNjLnN0YXRfZGVzYy5lbGVtcyxtYXhfY29kZT0tMTtmb3Iocy5oZWFwX2xlbj0wLHMuaGVhcF9tYXg9NTczLG49MDtuPGVsZW1zO24rKykwIT09dHJlZVsyKm5dPyhzLmhlYXBbKytzLmhlYXBfbGVuXT1tYXhfY29kZT1uLHMuZGVwdGhbbl09MCk6dHJlZVsyKm4rMV09MDtmb3IoO3MuaGVhcF9sZW48MjspdHJlZVsyKihub2RlPXMuaGVhcFsrK3MuaGVhcF9sZW5dPW1heF9jb2RlPDI/KyttYXhfY29kZTowKV09MSxzLmRlcHRoW25vZGVdPTAscy5vcHRfbGVuLS0saGFzX3N0cmVlJiYocy5zdGF0aWNfbGVuLT1zdHJlZVsyKm5vZGUrMV0pO2ZvcihkZXNjLm1heF9jb2RlPW1heF9jb2RlLG49cy5oZWFwX2xlbj4+MTtuPj0xO24tLSlwcWRvd25oZWFwKHMsdHJlZSxuKTtub2RlPWVsZW1zO2Rve249cy5oZWFwWzFdLHMuaGVhcFsxXT1zLmhlYXBbcy5oZWFwX2xlbi0tXSxwcWRvd25oZWFwKHMsdHJlZSwxKSxtPXMuaGVhcFsxXSxzLmhlYXBbLS1zLmhlYXBfbWF4XT1uLHMuaGVhcFstLXMuaGVhcF9tYXhdPW0sdHJlZVsyKm5vZGVdPXRyZWVbMipuXSt0cmVlWzIqbV0scy5kZXB0aFtub2RlXT0ocy5kZXB0aFtuXT49cy5kZXB0aFttXT9zLmRlcHRoW25dOnMuZGVwdGhbbV0pKzEsdHJlZVsyKm4rMV09dHJlZVsyKm0rMV09bm9kZSxzLmhlYXBbMV09bm9kZSsrLHBxZG93bmhlYXAocyx0cmVlLDEpfXdoaWxlKHMuaGVhcF9sZW4+PTIpO3MuaGVhcFstLXMuaGVhcF9tYXhdPXMuaGVhcFsxXSxmdW5jdGlvbiBnZW5fYml0bGVuKHMsZGVzYyl7dmFyIGgsbixtLGJpdHMseGJpdHMsZix0cmVlPWRlc2MuZHluX3RyZWUsbWF4X2NvZGU9ZGVzYy5tYXhfY29kZSxzdHJlZT1kZXNjLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxoYXNfc3RyZWU9ZGVzYy5zdGF0X2Rlc2MuaGFzX3N0cmVlLGV4dHJhPWRlc2Muc3RhdF9kZXNjLmV4dHJhX2JpdHMsYmFzZT1kZXNjLnN0YXRfZGVzYy5leHRyYV9iYXNlLG1heF9sZW5ndGg9ZGVzYy5zdGF0X2Rlc2MubWF4X2xlbmd0aCxvdmVyZmxvdz0wO2ZvcihiaXRzPTA7Yml0czw9MTU7Yml0cysrKXMuYmxfY291bnRbYml0c109MDtmb3IodHJlZVsyKnMuaGVhcFtzLmhlYXBfbWF4XSsxXT0wLGg9cy5oZWFwX21heCsxO2g8NTczO2grKykoYml0cz10cmVlWzIqdHJlZVsyKihuPXMuaGVhcFtoXSkrMV0rMV0rMSk+bWF4X2xlbmd0aCYmKGJpdHM9bWF4X2xlbmd0aCxvdmVyZmxvdysrKSx0cmVlWzIqbisxXT1iaXRzLG4+bWF4X2NvZGV8fChzLmJsX2NvdW50W2JpdHNdKysseGJpdHM9MCxuPj1iYXNlJiYoeGJpdHM9ZXh0cmFbbi1iYXNlXSksZj10cmVlWzIqbl0scy5vcHRfbGVuKz1mKihiaXRzK3hiaXRzKSxoYXNfc3RyZWUmJihzLnN0YXRpY19sZW4rPWYqKHN0cmVlWzIqbisxXSt4Yml0cykpKTtpZigwIT09b3ZlcmZsb3cpe2Rve2ZvcihiaXRzPW1heF9sZW5ndGgtMTswPT09cy5ibF9jb3VudFtiaXRzXTspYml0cy0tO3MuYmxfY291bnRbYml0c10tLSxzLmJsX2NvdW50W2JpdHMrMV0rPTIscy5ibF9jb3VudFttYXhfbGVuZ3RoXS0tLG92ZXJmbG93LT0yfXdoaWxlKG92ZXJmbG93PjApO2ZvcihiaXRzPW1heF9sZW5ndGg7MCE9PWJpdHM7Yml0cy0tKWZvcihuPXMuYmxfY291bnRbYml0c107MCE9PW47KShtPXMuaGVhcFstLWhdKT5tYXhfY29kZXx8KHRyZWVbMiptKzFdIT09Yml0cyYmKHMub3B0X2xlbis9KGJpdHMtdHJlZVsyKm0rMV0pKnRyZWVbMiptXSx0cmVlWzIqbSsxXT1iaXRzKSxuLS0pfX0ocyxkZXNjKSxnZW5fY29kZXModHJlZSxtYXhfY29kZSxzLmJsX2NvdW50KX1mdW5jdGlvbiBzY2FuX3RyZWUocyx0cmVlLG1heF9jb2RlKXt2YXIgbixjdXJsZW4scHJldmxlbj0tMSxuZXh0bGVuPXRyZWVbMV0sY291bnQ9MCxtYXhfY291bnQ9NyxtaW5fY291bnQ9NDtmb3IoMD09PW5leHRsZW4mJihtYXhfY291bnQ9MTM4LG1pbl9jb3VudD0zKSx0cmVlWzIqKG1heF9jb2RlKzEpKzFdPTY1NTM1LG49MDtuPD1tYXhfY29kZTtuKyspY3VybGVuPW5leHRsZW4sbmV4dGxlbj10cmVlWzIqKG4rMSkrMV0sKytjb3VudDxtYXhfY291bnQmJmN1cmxlbj09PW5leHRsZW58fChjb3VudDxtaW5fY291bnQ/cy5ibF90cmVlWzIqY3VybGVuXSs9Y291bnQ6MCE9PWN1cmxlbj8oY3VybGVuIT09cHJldmxlbiYmcy5ibF90cmVlWzIqY3VybGVuXSsrLHMuYmxfdHJlZVszMl0rKyk6Y291bnQ8PTEwP3MuYmxfdHJlZVszNF0rKzpzLmJsX3RyZWVbMzZdKyssY291bnQ9MCxwcmV2bGVuPWN1cmxlbiwwPT09bmV4dGxlbj8obWF4X2NvdW50PTEzOCxtaW5fY291bnQ9Myk6Y3VybGVuPT09bmV4dGxlbj8obWF4X2NvdW50PTYsbWluX2NvdW50PTMpOihtYXhfY291bnQ9NyxtaW5fY291bnQ9NCkpfWZ1bmN0aW9uIHNlbmRfdHJlZShzLHRyZWUsbWF4X2NvZGUpe3ZhciBuLGN1cmxlbixwcmV2bGVuPS0xLG5leHRsZW49dHJlZVsxXSxjb3VudD0wLG1heF9jb3VudD03LG1pbl9jb3VudD00O2ZvcigwPT09bmV4dGxlbiYmKG1heF9jb3VudD0xMzgsbWluX2NvdW50PTMpLG49MDtuPD1tYXhfY29kZTtuKyspaWYoY3VybGVuPW5leHRsZW4sbmV4dGxlbj10cmVlWzIqKG4rMSkrMV0sISgrK2NvdW50PG1heF9jb3VudCYmY3VybGVuPT09bmV4dGxlbikpe2lmKGNvdW50PG1pbl9jb3VudClkb3tzZW5kX2NvZGUocyxjdXJsZW4scy5ibF90cmVlKX13aGlsZSgwIT09LS1jb3VudCk7ZWxzZSAwIT09Y3VybGVuPyhjdXJsZW4hPT1wcmV2bGVuJiYoc2VuZF9jb2RlKHMsY3VybGVuLHMuYmxfdHJlZSksY291bnQtLSksc2VuZF9jb2RlKHMsMTYscy5ibF90cmVlKSxzZW5kX2JpdHMocyxjb3VudC0zLDIpKTpjb3VudDw9MTA/KHNlbmRfY29kZShzLDE3LHMuYmxfdHJlZSksc2VuZF9iaXRzKHMsY291bnQtMywzKSk6KHNlbmRfY29kZShzLDE4LHMuYmxfdHJlZSksc2VuZF9iaXRzKHMsY291bnQtMTEsNykpO2NvdW50PTAscHJldmxlbj1jdXJsZW4sMD09PW5leHRsZW4/KG1heF9jb3VudD0xMzgsbWluX2NvdW50PTMpOmN1cmxlbj09PW5leHRsZW4/KG1heF9jb3VudD02LG1pbl9jb3VudD0zKToobWF4X2NvdW50PTcsbWluX2NvdW50PTQpfX16ZXJvKGJhc2VfZGlzdCk7dmFyIHN0YXRpY19pbml0X2RvbmU9ITE7ZnVuY3Rpb24gX3RyX3N0b3JlZF9ibG9jayhzLGJ1ZixzdG9yZWRfbGVuLGxhc3Qpe3NlbmRfYml0cyhzLDArKGxhc3Q/MTowKSwzKSxmdW5jdGlvbiBjb3B5X2Jsb2NrKHMsYnVmLGxlbixoZWFkZXIpe2JpX3dpbmR1cChzKSxoZWFkZXImJihwdXRfc2hvcnQocyxsZW4pLHB1dF9zaG9ydChzLH5sZW4pKSx1dGlscy5hcnJheVNldChzLnBlbmRpbmdfYnVmLHMud2luZG93LGJ1ZixsZW4scy5wZW5kaW5nKSxzLnBlbmRpbmcrPWxlbn0ocyxidWYsc3RvcmVkX2xlbiwhMCl9ZXhwb3J0cy5fdHJfaW5pdD1mdW5jdGlvbiBfdHJfaW5pdChzKXtzdGF0aWNfaW5pdF9kb25lfHwoIWZ1bmN0aW9uIHRyX3N0YXRpY19pbml0KCl7dmFyIG4sYml0cyxsZW5ndGgsY29kZSxkaXN0LGJsX2NvdW50PW5ldyBBcnJheSgxNik7Zm9yKGxlbmd0aD0wLGNvZGU9MDtjb2RlPDI4O2NvZGUrKylmb3IoYmFzZV9sZW5ndGhbY29kZV09bGVuZ3RoLG49MDtuPDE8PGV4dHJhX2xiaXRzW2NvZGVdO24rKylfbGVuZ3RoX2NvZGVbbGVuZ3RoKytdPWNvZGU7Zm9yKF9sZW5ndGhfY29kZVtsZW5ndGgtMV09Y29kZSxkaXN0PTAsY29kZT0wO2NvZGU8MTY7Y29kZSsrKWZvcihiYXNlX2Rpc3RbY29kZV09ZGlzdCxuPTA7bjwxPDxleHRyYV9kYml0c1tjb2RlXTtuKyspX2Rpc3RfY29kZVtkaXN0KytdPWNvZGU7Zm9yKGRpc3Q+Pj03O2NvZGU8MzA7Y29kZSsrKWZvcihiYXNlX2Rpc3RbY29kZV09ZGlzdDw8NyxuPTA7bjwxPDxleHRyYV9kYml0c1tjb2RlXS03O24rKylfZGlzdF9jb2RlWzI1NitkaXN0KytdPWNvZGU7Zm9yKGJpdHM9MDtiaXRzPD0xNTtiaXRzKyspYmxfY291bnRbYml0c109MDtmb3Iobj0wO248PTE0Mzspc3RhdGljX2x0cmVlWzIqbisxXT04LG4rKyxibF9jb3VudFs4XSsrO2Zvcig7bjw9MjU1OylzdGF0aWNfbHRyZWVbMipuKzFdPTksbisrLGJsX2NvdW50WzldKys7Zm9yKDtuPD0yNzk7KXN0YXRpY19sdHJlZVsyKm4rMV09NyxuKyssYmxfY291bnRbN10rKztmb3IoO248PTI4Nzspc3RhdGljX2x0cmVlWzIqbisxXT04LG4rKyxibF9jb3VudFs4XSsrO2ZvcihnZW5fY29kZXMoc3RhdGljX2x0cmVlLDI4NyxibF9jb3VudCksbj0wO248MzA7bisrKXN0YXRpY19kdHJlZVsyKm4rMV09NSxzdGF0aWNfZHRyZWVbMipuXT1iaV9yZXZlcnNlKG4sNSk7c3RhdGljX2xfZGVzYz1uZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2x0cmVlLGV4dHJhX2xiaXRzLDI1NywyODYsMTUpLHN0YXRpY19kX2Rlc2M9bmV3IFN0YXRpY1RyZWVEZXNjKHN0YXRpY19kdHJlZSxleHRyYV9kYml0cywwLDMwLDE1KSxzdGF0aWNfYmxfZGVzYz1uZXcgU3RhdGljVHJlZURlc2MobmV3IEFycmF5KDApLGV4dHJhX2JsYml0cywwLDE5LDcpfSgpLHN0YXRpY19pbml0X2RvbmU9ITApLHMubF9kZXNjPW5ldyBUcmVlRGVzYyhzLmR5bl9sdHJlZSxzdGF0aWNfbF9kZXNjKSxzLmRfZGVzYz1uZXcgVHJlZURlc2Mocy5keW5fZHRyZWUsc3RhdGljX2RfZGVzYykscy5ibF9kZXNjPW5ldyBUcmVlRGVzYyhzLmJsX3RyZWUsc3RhdGljX2JsX2Rlc2MpLHMuYmlfYnVmPTAscy5iaV92YWxpZD0wLGluaXRfYmxvY2socyl9LGV4cG9ydHMuX3RyX3N0b3JlZF9ibG9jaz1fdHJfc3RvcmVkX2Jsb2NrLGV4cG9ydHMuX3RyX2ZsdXNoX2Jsb2NrPWZ1bmN0aW9uIF90cl9mbHVzaF9ibG9jayhzLGJ1ZixzdG9yZWRfbGVuLGxhc3Qpe3ZhciBvcHRfbGVuYixzdGF0aWNfbGVuYixtYXhfYmxpbmRleD0wO3MubGV2ZWw+MD8oMj09PXMuc3RybS5kYXRhX3R5cGUmJihzLnN0cm0uZGF0YV90eXBlPWZ1bmN0aW9uIGRldGVjdF9kYXRhX3R5cGUocyl7dmFyIG4sYmxhY2tfbWFzaz00MDkzNjI0NDQ3O2ZvcihuPTA7bjw9MzE7bisrLGJsYWNrX21hc2s+Pj49MSlpZigxJmJsYWNrX21hc2smJjAhPT1zLmR5bl9sdHJlZVsyKm5dKXJldHVybiAwO2lmKDAhPT1zLmR5bl9sdHJlZVsxOF18fDAhPT1zLmR5bl9sdHJlZVsyMF18fDAhPT1zLmR5bl9sdHJlZVsyNl0pcmV0dXJuIDE7Zm9yKG49MzI7bjwyNTY7bisrKWlmKDAhPT1zLmR5bl9sdHJlZVsyKm5dKXJldHVybiAxO3JldHVybiAwfShzKSksYnVpbGRfdHJlZShzLHMubF9kZXNjKSxidWlsZF90cmVlKHMscy5kX2Rlc2MpLG1heF9ibGluZGV4PWZ1bmN0aW9uIGJ1aWxkX2JsX3RyZWUocyl7dmFyIG1heF9ibGluZGV4O2ZvcihzY2FuX3RyZWUocyxzLmR5bl9sdHJlZSxzLmxfZGVzYy5tYXhfY29kZSksc2Nhbl90cmVlKHMscy5keW5fZHRyZWUscy5kX2Rlc2MubWF4X2NvZGUpLGJ1aWxkX3RyZWUocyxzLmJsX2Rlc2MpLG1heF9ibGluZGV4PTE4O21heF9ibGluZGV4Pj0zJiYwPT09cy5ibF90cmVlWzIqYmxfb3JkZXJbbWF4X2JsaW5kZXhdKzFdO21heF9ibGluZGV4LS0pO3JldHVybiBzLm9wdF9sZW4rPTMqKG1heF9ibGluZGV4KzEpKzUrNSs0LG1heF9ibGluZGV4fShzKSxvcHRfbGVuYj1zLm9wdF9sZW4rMys3Pj4+Mywoc3RhdGljX2xlbmI9cy5zdGF0aWNfbGVuKzMrNz4+PjMpPD1vcHRfbGVuYiYmKG9wdF9sZW5iPXN0YXRpY19sZW5iKSk6b3B0X2xlbmI9c3RhdGljX2xlbmI9c3RvcmVkX2xlbis1LHN0b3JlZF9sZW4rNDw9b3B0X2xlbmImJi0xIT09YnVmP190cl9zdG9yZWRfYmxvY2socyxidWYsc3RvcmVkX2xlbixsYXN0KTo0PT09cy5zdHJhdGVneXx8c3RhdGljX2xlbmI9PT1vcHRfbGVuYj8oc2VuZF9iaXRzKHMsMisobGFzdD8xOjApLDMpLGNvbXByZXNzX2Jsb2NrKHMsc3RhdGljX2x0cmVlLHN0YXRpY19kdHJlZSkpOihzZW5kX2JpdHMocyw0KyhsYXN0PzE6MCksMyksZnVuY3Rpb24gc2VuZF9hbGxfdHJlZXMocyxsY29kZXMsZGNvZGVzLGJsY29kZXMpe3ZhciByYW5rO2ZvcihzZW5kX2JpdHMocyxsY29kZXMtMjU3LDUpLHNlbmRfYml0cyhzLGRjb2Rlcy0xLDUpLHNlbmRfYml0cyhzLGJsY29kZXMtNCw0KSxyYW5rPTA7cmFuazxibGNvZGVzO3JhbmsrKylzZW5kX2JpdHMocyxzLmJsX3RyZWVbMipibF9vcmRlcltyYW5rXSsxXSwzKTtzZW5kX3RyZWUocyxzLmR5bl9sdHJlZSxsY29kZXMtMSksc2VuZF90cmVlKHMscy5keW5fZHRyZWUsZGNvZGVzLTEpfShzLHMubF9kZXNjLm1heF9jb2RlKzEscy5kX2Rlc2MubWF4X2NvZGUrMSxtYXhfYmxpbmRleCsxKSxjb21wcmVzc19ibG9jayhzLHMuZHluX2x0cmVlLHMuZHluX2R0cmVlKSksaW5pdF9ibG9jayhzKSxsYXN0JiZiaV93aW5kdXAocyl9LGV4cG9ydHMuX3RyX3RhbGx5PWZ1bmN0aW9uIF90cl90YWxseShzLGRpc3QsbGMpe3JldHVybiBzLnBlbmRpbmdfYnVmW3MuZF9idWYrMipzLmxhc3RfbGl0XT1kaXN0Pj4+OCYyNTUscy5wZW5kaW5nX2J1ZltzLmRfYnVmKzIqcy5sYXN0X2xpdCsxXT0yNTUmZGlzdCxzLnBlbmRpbmdfYnVmW3MubF9idWYrcy5sYXN0X2xpdF09MjU1JmxjLHMubGFzdF9saXQrKywwPT09ZGlzdD9zLmR5bl9sdHJlZVsyKmxjXSsrOihzLm1hdGNoZXMrKyxkaXN0LS0scy5keW5fbHRyZWVbMiooX2xlbmd0aF9jb2RlW2xjXSsyNTYrMSldKysscy5keW5fZHRyZWVbMipkX2NvZGUoZGlzdCldKyspLHMubGFzdF9saXQ9PT1zLmxpdF9idWZzaXplLTF9LGV4cG9ydHMuX3RyX2FsaWduPWZ1bmN0aW9uIF90cl9hbGlnbihzKXtzZW5kX2JpdHMocywyLDMpLHNlbmRfY29kZShzLDI1NixzdGF0aWNfbHRyZWUpLGZ1bmN0aW9uIGJpX2ZsdXNoKHMpezE2PT09cy5iaV92YWxpZD8ocHV0X3Nob3J0KHMscy5iaV9idWYpLHMuYmlfYnVmPTAscy5iaV92YWxpZD0wKTpzLmJpX3ZhbGlkPj04JiYocy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK109MjU1JnMuYmlfYnVmLHMuYmlfYnVmPj49OCxzLmJpX3ZhbGlkLT04KX0ocyl9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvenN0cmVhbS5qcyIobW9kdWxlKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gWlN0cmVhbSgpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3BhcnNlLWFzbjEvYXNuMS5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGFzbjE9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEuanMiKTtleHBvcnRzLmNlcnRpZmljYXRlPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYXJzZS1hc24xL2NlcnRpZmljYXRlLmpzIik7dmFyIFJTQVByaXZhdGVLZXk9YXNuMS5kZWZpbmUoIlJTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUxIikuaW50KCksdGhpcy5rZXkoInByaW1lMiIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDEiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQyIikuaW50KCksdGhpcy5rZXkoImNvZWZmaWNpZW50IikuaW50KCkpfSk7ZXhwb3J0cy5SU0FQcml2YXRlS2V5PVJTQVByaXZhdGVLZXk7dmFyIFJTQVB1YmxpY0tleT1hc24xLmRlZmluZSgiUlNBUHVibGljS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCkpfSk7ZXhwb3J0cy5SU0FQdWJsaWNLZXk9UlNBUHVibGljS2V5O3ZhciBBbGdvcml0aG1JZGVudGlmaWVyPWFzbjEuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJub25lIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleSgicGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpKS5vcHRpb25hbCgpKX0pLFB1YmxpY0tleT1hc24xLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShBbGdvcml0aG1JZGVudGlmaWVyKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pO2V4cG9ydHMuUHVibGljS2V5PVB1YmxpY0tleTt2YXIgUHJpdmF0ZUtleUluZm89YXNuMS5kZWZpbmUoIlByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShBbGdvcml0aG1JZGVudGlmaWVyKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtleHBvcnRzLlByaXZhdGVLZXk9UHJpdmF0ZUtleUluZm87dmFyIEVuY3J5cHRlZFByaXZhdGVLZXlJbmZvPWFzbjEuZGVmaW5lKCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImRlY3J5cHQiKS5zZXEoKS5vYmoodGhpcy5rZXkoImtkZSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJrZGVwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInNhbHQiKS5vY3RzdHIoKSx0aGlzLmtleSgiaXRlcnMiKS5pbnQoKSkpLHRoaXMua2V5KCJjaXBoZXIiKS5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ28iKS5vYmppZCgpLHRoaXMua2V5KCJpdiIpLm9jdHN0cigpKSkpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO2V4cG9ydHMuRW5jcnlwdGVkUHJpdmF0ZUtleT1FbmNyeXB0ZWRQcml2YXRlS2V5SW5mbzt2YXIgRFNBUHJpdmF0ZUtleT1hc24xLmRlZmluZSgiRFNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpLHRoaXMua2V5KCJwdWJfa2V5IikuaW50KCksdGhpcy5rZXkoInByaXZfa2V5IikuaW50KCkpfSk7ZXhwb3J0cy5EU0FQcml2YXRlS2V5PURTQVByaXZhdGVLZXksZXhwb3J0cy5EU0FwYXJhbT1hc24xLmRlZmluZSgiRFNBcGFyYW0iLGZ1bmN0aW9uKCl7dGhpcy5pbnQoKX0pO3ZhciBFQ1BhcmFtZXRlcnM9YXNuMS5kZWZpbmUoIkVDUGFyYW1ldGVycyIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pLEVDUHJpdmF0ZUtleT1hc24xLmRlZmluZSgiRUNQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInByaXZhdGVLZXkiKS5vY3RzdHIoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKEVDUGFyYW1ldGVycyksdGhpcy5rZXkoInB1YmxpY0tleSIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKCkpfSk7ZXhwb3J0cy5FQ1ByaXZhdGVLZXk9RUNQcml2YXRlS2V5LGV4cG9ydHMuc2lnbmF0dXJlPWFzbjEuZGVmaW5lKCJzaWduYXR1cmUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInIiKS5pbnQoKSx0aGlzLmtleSgicyIpLmludCgpKX0pfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3BhcnNlLWFzbjEvY2VydGlmaWNhdGUuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBhc249X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEuanMiKSxUaW1lPWFzbi5kZWZpbmUoIlRpbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3V0Y1RpbWU6dGhpcy51dGN0aW1lKCksZ2VuZXJhbFRpbWU6dGhpcy5nZW50aW1lKCl9KX0pLEF0dHJpYnV0ZVR5cGVWYWx1ZT1hc24uZGVmaW5lKCJBdHRyaWJ1dGVUeXBlVmFsdWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInR5cGUiKS5vYmppZCgpLHRoaXMua2V5KCJ2YWx1ZSIpLmFueSgpKX0pLEFsZ29yaXRobUlkZW50aWZpZXI9YXNuLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpKX0pLFN1YmplY3RQdWJsaWNLZXlJbmZvPWFzbi5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoQWxnb3JpdGhtSWRlbnRpZmllciksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KSxSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lPWFzbi5kZWZpbmUoIlJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihBdHRyaWJ1dGVUeXBlVmFsdWUpfSksUkROU2VxdWVuY2U9YXNuLmRlZmluZSgiUkROU2VxdWVuY2UiLGZ1bmN0aW9uKCl7dGhpcy5zZXFvZihSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lKX0pLE5hbWU9YXNuLmRlZmluZSgiTmFtZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7cmRuU2VxdWVuY2U6dGhpcy51c2UoUkROU2VxdWVuY2UpfSl9KSxWYWxpZGl0eT1hc24uZGVmaW5lKCJWYWxpZGl0eSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibm90QmVmb3JlIikudXNlKFRpbWUpLHRoaXMua2V5KCJub3RBZnRlciIpLnVzZShUaW1lKSl9KSxFeHRlbnNpb249YXNuLmRlZmluZSgiRXh0ZW5zaW9uIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJleHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3RzdHIoKSl9KSxUQlNDZXJ0aWZpY2F0ZT1hc24uZGVmaW5lKCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmV4cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UoQWxnb3JpdGhtSWRlbnRpZmllciksdGhpcy5rZXkoImlzc3VlciIpLnVzZShOYW1lKSx0aGlzLmtleSgidmFsaWRpdHkiKS51c2UoVmFsaWRpdHkpLHRoaXMua2V5KCJzdWJqZWN0IikudXNlKE5hbWUpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5SW5mbyIpLnVzZShTdWJqZWN0UHVibGljS2V5SW5mbyksdGhpcy5rZXkoImlzc3VlclVuaXF1ZUlEIikuaW1wbGljaXQoMSkuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgic3ViamVjdFVuaXF1ZUlEIikuaW1wbGljaXQoMikuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiZXh0ZW5zaW9ucyIpLmV4cGxpY2l0KDMpLnNlcW9mKEV4dGVuc2lvbikub3B0aW9uYWwoKSl9KSxYNTA5Q2VydGlmaWNhdGU9YXNuLmRlZmluZSgiWDUwOUNlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0YnNDZXJ0aWZpY2F0ZSIpLnVzZShUQlNDZXJ0aWZpY2F0ZSksdGhpcy5rZXkoInNpZ25hdHVyZUFsZ29yaXRobSIpLnVzZShBbGdvcml0aG1JZGVudGlmaWVyKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTttb2R1bGUuZXhwb3J0cz1YNTA5Q2VydGlmaWNhdGV9LCIuLi8uLi9ub2RlX21vZHVsZXMvcGFyc2UtYXNuMS9maXhQcm9jLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgZmluZFByb2M9L1Byb2MtVHlwZTogNCxFTkNSWVBURURbXG5ccl0rREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVtcblxyXSsoWzAtOUEtelxuXHIrLz1dKylbXG5ccl0rL20sc3RhcnRSZWdleD0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tL20sZnVsbFJlZ2V4PS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0tLS0tJC9tLGV2cD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZXZwX2J5dGVzdG9rZXkvaW5kZXguanMiKSxjaXBoZXJzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9icm93c2VyLmpzIiksQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcjttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihva2V5LHBhc3N3b3JkKXt2YXIgZGVjcnlwdGVkLGtleT1va2V5LnRvU3RyaW5nKCksbWF0Y2g9a2V5Lm1hdGNoKGZpbmRQcm9jKTtpZihtYXRjaCl7dmFyIHN1aXRlPSJhZXMiK21hdGNoWzFdLGl2PUJ1ZmZlci5mcm9tKG1hdGNoWzJdLCJoZXgiKSxjaXBoZXJUZXh0PUJ1ZmZlci5mcm9tKG1hdGNoWzNdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0IiksY2lwaGVyS2V5PWV2cChwYXNzd29yZCxpdi5zbGljZSgwLDgpLHBhcnNlSW50KG1hdGNoWzFdLDEwKSkua2V5LG91dD1bXSxjaXBoZXI9Y2lwaGVycy5jcmVhdGVEZWNpcGhlcml2KHN1aXRlLGNpcGhlcktleSxpdik7b3V0LnB1c2goY2lwaGVyLnVwZGF0ZShjaXBoZXJUZXh0KSksb3V0LnB1c2goY2lwaGVyLmZpbmFsKCkpLGRlY3J5cHRlZD1CdWZmZXIuY29uY2F0KG91dCl9ZWxzZXt2YXIgbWF0Y2gyPWtleS5tYXRjaChmdWxsUmVnZXgpO2RlY3J5cHRlZD1CdWZmZXIuZnJvbShtYXRjaDJbMl0ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKX1yZXR1cm57dGFnOmtleS5tYXRjaChzdGFydFJlZ2V4KVsxXSxkYXRhOmRlY3J5cHRlZH19fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3BhcnNlLWFzbjEvaW5kZXguanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBhc24xPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYXJzZS1hc24xL2FzbjEuanMiKSxhZXNpZD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcGFyc2UtYXNuMS9hZXNpZC5qc29uIiksZml4UHJvYz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcGFyc2UtYXNuMS9maXhQcm9jLmpzIiksY2lwaGVycz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvYnJvd3Nlci5qcyIpLHBia2RmMlN5bmM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3Bia2RmMi9icm93c2VyLmpzIikucGJrZGYyU3luYyxCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyO2Z1bmN0aW9uIHBhcnNlS2V5cyhidWZmZXIpe3ZhciBwYXNzd29yZDsib2JqZWN0IiE9dHlwZW9mIGJ1ZmZlcnx8QnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcil8fChwYXNzd29yZD1idWZmZXIucGFzc3BocmFzZSxidWZmZXI9YnVmZmVyLmtleSksInN0cmluZyI9PXR5cGVvZiBidWZmZXImJihidWZmZXI9QnVmZmVyLmZyb20oYnVmZmVyKSk7dmFyIHN1YnR5cGUsbmRhdGEsc3RyaXBwZWQ9Zml4UHJvYyhidWZmZXIscGFzc3dvcmQpLHR5cGU9c3RyaXBwZWQudGFnLGRhdGE9c3RyaXBwZWQuZGF0YTtzd2l0Y2godHlwZSl7Y2FzZSJDRVJUSUZJQ0FURSI6bmRhdGE9YXNuMS5jZXJ0aWZpY2F0ZS5kZWNvZGUoZGF0YSwiZGVyIikudGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm87Y2FzZSJQVUJMSUMgS0VZIjpzd2l0Y2gobmRhdGF8fChuZGF0YT1hc24xLlB1YmxpY0tleS5kZWNvZGUoZGF0YSwiZGVyIikpLHN1YnR5cGU9bmRhdGEuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBhc24xLlJTQVB1YmxpY0tleS5kZWNvZGUobmRhdGEuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm4gbmRhdGEuc3ViamVjdFByaXZhdGVLZXk9bmRhdGEuc3ViamVjdFB1YmxpY0tleSx7dHlwZToiZWMiLGRhdGE6bmRhdGF9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBuZGF0YS5hbGdvcml0aG0ucGFyYW1zLnB1Yl9rZXk9YXNuMS5EU0FwYXJhbS5kZWNvZGUobmRhdGEuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKSx7dHlwZToiZHNhIixkYXRhOm5kYXRhLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK3N1YnR5cGUpfWNhc2UiRU5DUllQVEVEIFBSSVZBVEUgS0VZIjpkYXRhPWZ1bmN0aW9uIGRlY3J5cHQoZGF0YSxwYXNzd29yZCl7dmFyIHNhbHQ9ZGF0YS5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHQsaXRlcnM9cGFyc2VJbnQoZGF0YS5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLGFsZ289YWVzaWRbZGF0YS5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKCIuIildLGl2PWRhdGEuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2LGNpcGhlclRleHQ9ZGF0YS5zdWJqZWN0UHJpdmF0ZUtleSxrZXlsZW49cGFyc2VJbnQoYWxnby5zcGxpdCgiLSIpWzFdLDEwKS84LGtleT1wYmtkZjJTeW5jKHBhc3N3b3JkLHNhbHQsaXRlcnMsa2V5bGVuLCJzaGExIiksY2lwaGVyPWNpcGhlcnMuY3JlYXRlRGVjaXBoZXJpdihhbGdvLGtleSxpdiksb3V0PVtdO3JldHVybiBvdXQucHVzaChjaXBoZXIudXBkYXRlKGNpcGhlclRleHQpKSxvdXQucHVzaChjaXBoZXIuZmluYWwoKSksQnVmZmVyLmNvbmNhdChvdXQpfShkYXRhPWFzbjEuRW5jcnlwdGVkUHJpdmF0ZUtleS5kZWNvZGUoZGF0YSwiZGVyIikscGFzc3dvcmQpO2Nhc2UiUFJJVkFURSBLRVkiOnN3aXRjaChzdWJ0eXBlPShuZGF0YT1hc24xLlByaXZhdGVLZXkuZGVjb2RlKGRhdGEsImRlciIpKS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIGFzbjEuUlNBUHJpdmF0ZUtleS5kZWNvZGUobmRhdGEuc3ViamVjdFByaXZhdGVLZXksImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybntjdXJ2ZTpuZGF0YS5hbGdvcml0aG0uY3VydmUscHJpdmF0ZUtleTphc24xLkVDUHJpdmF0ZUtleS5kZWNvZGUobmRhdGEuc3ViamVjdFByaXZhdGVLZXksImRlciIpLnByaXZhdGVLZXl9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBuZGF0YS5hbGdvcml0aG0ucGFyYW1zLnByaXZfa2V5PWFzbjEuRFNBcGFyYW0uZGVjb2RlKG5kYXRhLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKSx7dHlwZToiZHNhIixwYXJhbXM6bmRhdGEuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrc3VidHlwZSl9Y2FzZSJSU0EgUFVCTElDIEtFWSI6cmV0dXJuIGFzbjEuUlNBUHVibGljS2V5LmRlY29kZShkYXRhLCJkZXIiKTtjYXNlIlJTQSBQUklWQVRFIEtFWSI6cmV0dXJuIGFzbjEuUlNBUHJpdmF0ZUtleS5kZWNvZGUoZGF0YSwiZGVyIik7Y2FzZSJEU0EgUFJJVkFURSBLRVkiOnJldHVybnt0eXBlOiJkc2EiLHBhcmFtczphc24xLkRTQVByaXZhdGVLZXkuZGVjb2RlKGRhdGEsImRlciIpfTtjYXNlIkVDIFBSSVZBVEUgS0VZIjpyZXR1cm57Y3VydmU6KGRhdGE9YXNuMS5FQ1ByaXZhdGVLZXkuZGVjb2RlKGRhdGEsImRlciIpKS5wYXJhbWV0ZXJzLnZhbHVlLHByaXZhdGVLZXk6ZGF0YS5wcml2YXRlS2V5fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgdHlwZSAiK3R5cGUpfX1wYXJzZUtleXMuc2lnbmF0dXJlPWFzbjEuc2lnbmF0dXJlLG1vZHVsZS5leHBvcnRzPXBhcnNlS2V5c30sIi4uLy4uL25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBwcm9jZXNzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9wcm94eS9wcm9jZXNzLmpzIik7ZnVuY3Rpb24gYXNzZXJ0UGF0aChwYXRoKXtpZigic3RyaW5nIiE9dHlwZW9mIHBhdGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KHBhdGgpKX1mdW5jdGlvbiBub3JtYWxpemVTdHJpbmdQb3NpeChwYXRoLGFsbG93QWJvdmVSb290KXtmb3IodmFyIGNvZGUscmVzPSIiLGxhc3RTZWdtZW50TGVuZ3RoPTAsbGFzdFNsYXNoPS0xLGRvdHM9MCxpPTA7aTw9cGF0aC5sZW5ndGg7KytpKXtpZihpPHBhdGgubGVuZ3RoKWNvZGU9cGF0aC5jaGFyQ29kZUF0KGkpO2Vsc2V7aWYoNDc9PT1jb2RlKWJyZWFrO2NvZGU9NDd9aWYoNDc9PT1jb2RlKXtpZihsYXN0U2xhc2g9PT1pLTF8fDE9PT1kb3RzKTtlbHNlIGlmKGxhc3RTbGFzaCE9PWktMSYmMj09PWRvdHMpe2lmKHJlcy5sZW5ndGg8Mnx8MiE9PWxhc3RTZWdtZW50TGVuZ3RofHw0NiE9PXJlcy5jaGFyQ29kZUF0KHJlcy5sZW5ndGgtMSl8fDQ2IT09cmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aC0yKSlpZihyZXMubGVuZ3RoPjIpe3ZhciBsYXN0U2xhc2hJbmRleD1yZXMubGFzdEluZGV4T2YoIi8iKTtpZihsYXN0U2xhc2hJbmRleCE9PXJlcy5sZW5ndGgtMSl7LTE9PT1sYXN0U2xhc2hJbmRleD8ocmVzPSIiLGxhc3RTZWdtZW50TGVuZ3RoPTApOmxhc3RTZWdtZW50TGVuZ3RoPShyZXM9cmVzLnNsaWNlKDAsbGFzdFNsYXNoSW5kZXgpKS5sZW5ndGgtMS1yZXMubGFzdEluZGV4T2YoIi8iKSxsYXN0U2xhc2g9aSxkb3RzPTA7Y29udGludWV9fWVsc2UgaWYoMj09PXJlcy5sZW5ndGh8fDE9PT1yZXMubGVuZ3RoKXtyZXM9IiIsbGFzdFNlZ21lbnRMZW5ndGg9MCxsYXN0U2xhc2g9aSxkb3RzPTA7Y29udGludWV9YWxsb3dBYm92ZVJvb3QmJihyZXMubGVuZ3RoPjA/cmVzKz0iLy4uIjpyZXM9Ii4uIixsYXN0U2VnbWVudExlbmd0aD0yKX1lbHNlIHJlcy5sZW5ndGg+MD9yZXMrPSIvIitwYXRoLnNsaWNlKGxhc3RTbGFzaCsxLGkpOnJlcz1wYXRoLnNsaWNlKGxhc3RTbGFzaCsxLGkpLGxhc3RTZWdtZW50TGVuZ3RoPWktbGFzdFNsYXNoLTE7bGFzdFNsYXNoPWksZG90cz0wfWVsc2UgNDY9PT1jb2RlJiYtMSE9PWRvdHM/Kytkb3RzOmRvdHM9LTF9cmV0dXJuIHJlc312YXIgcG9zaXg9e3Jlc29sdmU6ZnVuY3Rpb24gcmVzb2x2ZSgpe2Zvcih2YXIgY3dkLHJlc29sdmVkUGF0aD0iIixyZXNvbHZlZEFic29sdXRlPSExLGk9YXJndW1lbnRzLmxlbmd0aC0xO2k+PS0xJiYhcmVzb2x2ZWRBYnNvbHV0ZTtpLS0pe3ZhciBwYXRoO2k+PTA/cGF0aD1hcmd1bWVudHNbaV06KHZvaWQgMD09PWN3ZCYmKGN3ZD1wcm9jZXNzLmN3ZCgpKSxwYXRoPWN3ZCksYXNzZXJ0UGF0aChwYXRoKSwwIT09cGF0aC5sZW5ndGgmJihyZXNvbHZlZFBhdGg9cGF0aCsiLyIrcmVzb2x2ZWRQYXRoLHJlc29sdmVkQWJzb2x1dGU9NDc9PT1wYXRoLmNoYXJDb2RlQXQoMCkpfXJldHVybiByZXNvbHZlZFBhdGg9bm9ybWFsaXplU3RyaW5nUG9zaXgocmVzb2x2ZWRQYXRoLCFyZXNvbHZlZEFic29sdXRlKSxyZXNvbHZlZEFic29sdXRlP3Jlc29sdmVkUGF0aC5sZW5ndGg+MD8iLyIrcmVzb2x2ZWRQYXRoOiIvIjpyZXNvbHZlZFBhdGgubGVuZ3RoPjA/cmVzb2x2ZWRQYXRoOiIuIn0sbm9ybWFsaXplOmZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoKXtpZihhc3NlcnRQYXRoKHBhdGgpLDA9PT1wYXRoLmxlbmd0aClyZXR1cm4iLiI7dmFyIGlzQWJzb2x1dGU9NDc9PT1wYXRoLmNoYXJDb2RlQXQoMCksdHJhaWxpbmdTZXBhcmF0b3I9NDc9PT1wYXRoLmNoYXJDb2RlQXQocGF0aC5sZW5ndGgtMSk7cmV0dXJuIDAhPT0ocGF0aD1ub3JtYWxpemVTdHJpbmdQb3NpeChwYXRoLCFpc0Fic29sdXRlKSkubGVuZ3RofHxpc0Fic29sdXRlfHwocGF0aD0iLiIpLHBhdGgubGVuZ3RoPjAmJnRyYWlsaW5nU2VwYXJhdG9yJiYocGF0aCs9Ii8iKSxpc0Fic29sdXRlPyIvIitwYXRoOnBhdGh9LGlzQWJzb2x1dGU6ZnVuY3Rpb24gaXNBYnNvbHV0ZShwYXRoKXtyZXR1cm4gYXNzZXJ0UGF0aChwYXRoKSxwYXRoLmxlbmd0aD4wJiY0Nz09PXBhdGguY2hhckNvZGVBdCgwKX0sam9pbjpmdW5jdGlvbiBqb2luKCl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIi4iO2Zvcih2YXIgam9pbmVkLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7KytpKXt2YXIgYXJnPWFyZ3VtZW50c1tpXTthc3NlcnRQYXRoKGFyZyksYXJnLmxlbmd0aD4wJiYodm9pZCAwPT09am9pbmVkP2pvaW5lZD1hcmc6am9pbmVkKz0iLyIrYXJnKX1yZXR1cm4gdm9pZCAwPT09am9pbmVkPyIuIjpwb3NpeC5ub3JtYWxpemUoam9pbmVkKX0scmVsYXRpdmU6ZnVuY3Rpb24gcmVsYXRpdmUoZnJvbSx0byl7aWYoYXNzZXJ0UGF0aChmcm9tKSxhc3NlcnRQYXRoKHRvKSxmcm9tPT09dG8pcmV0dXJuIiI7aWYoKGZyb209cG9zaXgucmVzb2x2ZShmcm9tKSk9PT0odG89cG9zaXgucmVzb2x2ZSh0bykpKXJldHVybiIiO2Zvcih2YXIgZnJvbVN0YXJ0PTE7ZnJvbVN0YXJ0PGZyb20ubGVuZ3RoJiY0Nz09PWZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQpOysrZnJvbVN0YXJ0KTtmb3IodmFyIGZyb21FbmQ9ZnJvbS5sZW5ndGgsZnJvbUxlbj1mcm9tRW5kLWZyb21TdGFydCx0b1N0YXJ0PTE7dG9TdGFydDx0by5sZW5ndGgmJjQ3PT09dG8uY2hhckNvZGVBdCh0b1N0YXJ0KTsrK3RvU3RhcnQpO2Zvcih2YXIgdG9MZW49dG8ubGVuZ3RoLXRvU3RhcnQsbGVuZ3RoPWZyb21MZW48dG9MZW4/ZnJvbUxlbjp0b0xlbixsYXN0Q29tbW9uU2VwPS0xLGk9MDtpPD1sZW5ndGg7KytpKXtpZihpPT09bGVuZ3RoKXtpZih0b0xlbj5sZW5ndGgpe2lmKDQ3PT09dG8uY2hhckNvZGVBdCh0b1N0YXJ0K2kpKXJldHVybiB0by5zbGljZSh0b1N0YXJ0K2krMSk7aWYoMD09PWkpcmV0dXJuIHRvLnNsaWNlKHRvU3RhcnQraSl9ZWxzZSBmcm9tTGVuPmxlbmd0aCYmKDQ3PT09ZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCtpKT9sYXN0Q29tbW9uU2VwPWk6MD09PWkmJihsYXN0Q29tbW9uU2VwPTApKTticmVha312YXIgZnJvbUNvZGU9ZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCtpKTtpZihmcm9tQ29kZSE9PXRvLmNoYXJDb2RlQXQodG9TdGFydCtpKSlicmVhazs0Nz09PWZyb21Db2RlJiYobGFzdENvbW1vblNlcD1pKX12YXIgb3V0PSIiO2ZvcihpPWZyb21TdGFydCtsYXN0Q29tbW9uU2VwKzE7aTw9ZnJvbUVuZDsrK2kpaSE9PWZyb21FbmQmJjQ3IT09ZnJvbS5jaGFyQ29kZUF0KGkpfHwoMD09PW91dC5sZW5ndGg/b3V0Kz0iLi4iOm91dCs9Ii8uLiIpO3JldHVybiBvdXQubGVuZ3RoPjA/b3V0K3RvLnNsaWNlKHRvU3RhcnQrbGFzdENvbW1vblNlcCk6KHRvU3RhcnQrPWxhc3RDb21tb25TZXAsNDc9PT10by5jaGFyQ29kZUF0KHRvU3RhcnQpJiYrK3RvU3RhcnQsdG8uc2xpY2UodG9TdGFydCkpfSxfbWFrZUxvbmc6ZnVuY3Rpb24gX21ha2VMb25nKHBhdGgpe3JldHVybiBwYXRofSxkaXJuYW1lOmZ1bmN0aW9uIGRpcm5hbWUocGF0aCl7aWYoYXNzZXJ0UGF0aChwYXRoKSwwPT09cGF0aC5sZW5ndGgpcmV0dXJuIi4iO2Zvcih2YXIgY29kZT1wYXRoLmNoYXJDb2RlQXQoMCksaGFzUm9vdD00Nz09PWNvZGUsZW5kPS0xLG1hdGNoZWRTbGFzaD0hMCxpPXBhdGgubGVuZ3RoLTE7aT49MTstLWkpaWYoNDc9PT0oY29kZT1wYXRoLmNoYXJDb2RlQXQoaSkpKXtpZighbWF0Y2hlZFNsYXNoKXtlbmQ9aTticmVha319ZWxzZSBtYXRjaGVkU2xhc2g9ITE7cmV0dXJuLTE9PT1lbmQ/aGFzUm9vdD8iLyI6Ii4iOmhhc1Jvb3QmJjE9PT1lbmQ/Ii8vIjpwYXRoLnNsaWNlKDAsZW5kKX0sYmFzZW5hbWU6ZnVuY3Rpb24gYmFzZW5hbWUocGF0aCxleHQpe2lmKHZvaWQgMCE9PWV4dCYmInN0cmluZyIhPXR5cGVvZiBleHQpdGhyb3cgbmV3IFR5cGVFcnJvcignImV4dCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO2Fzc2VydFBhdGgocGF0aCk7dmFyIGksc3RhcnQ9MCxlbmQ9LTEsbWF0Y2hlZFNsYXNoPSEwO2lmKHZvaWQgMCE9PWV4dCYmZXh0Lmxlbmd0aD4wJiZleHQubGVuZ3RoPD1wYXRoLmxlbmd0aCl7aWYoZXh0Lmxlbmd0aD09PXBhdGgubGVuZ3RoJiZleHQ9PT1wYXRoKXJldHVybiIiO3ZhciBleHRJZHg9ZXh0Lmxlbmd0aC0xLGZpcnN0Tm9uU2xhc2hFbmQ9LTE7Zm9yKGk9cGF0aC5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGNvZGU9cGF0aC5jaGFyQ29kZUF0KGkpO2lmKDQ3PT09Y29kZSl7aWYoIW1hdGNoZWRTbGFzaCl7c3RhcnQ9aSsxO2JyZWFrfX1lbHNlLTE9PT1maXJzdE5vblNsYXNoRW5kJiYobWF0Y2hlZFNsYXNoPSExLGZpcnN0Tm9uU2xhc2hFbmQ9aSsxKSxleHRJZHg+PTAmJihjb2RlPT09ZXh0LmNoYXJDb2RlQXQoZXh0SWR4KT8tMT09PS0tZXh0SWR4JiYoZW5kPWkpOihleHRJZHg9LTEsZW5kPWZpcnN0Tm9uU2xhc2hFbmQpKX1yZXR1cm4gc3RhcnQ9PT1lbmQ/ZW5kPWZpcnN0Tm9uU2xhc2hFbmQ6LTE9PT1lbmQmJihlbmQ9cGF0aC5sZW5ndGgpLHBhdGguc2xpY2Uoc3RhcnQsZW5kKX1mb3IoaT1wYXRoLmxlbmd0aC0xO2k+PTA7LS1pKWlmKDQ3PT09cGF0aC5jaGFyQ29kZUF0KGkpKXtpZighbWF0Y2hlZFNsYXNoKXtzdGFydD1pKzE7YnJlYWt9fWVsc2UtMT09PWVuZCYmKG1hdGNoZWRTbGFzaD0hMSxlbmQ9aSsxKTtyZXR1cm4tMT09PWVuZD8iIjpwYXRoLnNsaWNlKHN0YXJ0LGVuZCl9LGV4dG5hbWU6ZnVuY3Rpb24gZXh0bmFtZShwYXRoKXthc3NlcnRQYXRoKHBhdGgpO2Zvcih2YXIgc3RhcnREb3Q9LTEsc3RhcnRQYXJ0PTAsZW5kPS0xLG1hdGNoZWRTbGFzaD0hMCxwcmVEb3RTdGF0ZT0wLGk9cGF0aC5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGNvZGU9cGF0aC5jaGFyQ29kZUF0KGkpO2lmKDQ3IT09Y29kZSktMT09PWVuZCYmKG1hdGNoZWRTbGFzaD0hMSxlbmQ9aSsxKSw0Nj09PWNvZGU/LTE9PT1zdGFydERvdD9zdGFydERvdD1pOjEhPT1wcmVEb3RTdGF0ZSYmKHByZURvdFN0YXRlPTEpOi0xIT09c3RhcnREb3QmJihwcmVEb3RTdGF0ZT0tMSk7ZWxzZSBpZighbWF0Y2hlZFNsYXNoKXtzdGFydFBhcnQ9aSsxO2JyZWFrfX1yZXR1cm4tMT09PXN0YXJ0RG90fHwtMT09PWVuZHx8MD09PXByZURvdFN0YXRlfHwxPT09cHJlRG90U3RhdGUmJnN0YXJ0RG90PT09ZW5kLTEmJnN0YXJ0RG90PT09c3RhcnRQYXJ0KzE/IiI6cGF0aC5zbGljZShzdGFydERvdCxlbmQpfSxmb3JtYXQ6ZnVuY3Rpb24gZm9ybWF0KHBhdGhPYmplY3Qpe2lmKG51bGw9PT1wYXRoT2JqZWN0fHwib2JqZWN0IiE9dHlwZW9mIHBhdGhPYmplY3QpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJwYXRoT2JqZWN0IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHBhdGhPYmplY3QpO3JldHVybiBmdW5jdGlvbiBfZm9ybWF0KHNlcCxwYXRoT2JqZWN0KXt2YXIgZGlyPXBhdGhPYmplY3QuZGlyfHxwYXRoT2JqZWN0LnJvb3QsYmFzZT1wYXRoT2JqZWN0LmJhc2V8fChwYXRoT2JqZWN0Lm5hbWV8fCIiKSsocGF0aE9iamVjdC5leHR8fCIiKTtyZXR1cm4gZGlyP2Rpcj09PXBhdGhPYmplY3Qucm9vdD9kaXIrYmFzZTpkaXIrc2VwK2Jhc2U6YmFzZX0oIi8iLHBhdGhPYmplY3QpfSxwYXJzZTpmdW5jdGlvbiBwYXJzZShwYXRoKXthc3NlcnRQYXRoKHBhdGgpO3ZhciByZXQ9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKDA9PT1wYXRoLmxlbmd0aClyZXR1cm4gcmV0O3ZhciBzdGFydCxjb2RlPXBhdGguY2hhckNvZGVBdCgwKSxpc0Fic29sdXRlPTQ3PT09Y29kZTtpc0Fic29sdXRlPyhyZXQucm9vdD0iLyIsc3RhcnQ9MSk6c3RhcnQ9MDtmb3IodmFyIHN0YXJ0RG90PS0xLHN0YXJ0UGFydD0wLGVuZD0tMSxtYXRjaGVkU2xhc2g9ITAsaT1wYXRoLmxlbmd0aC0xLHByZURvdFN0YXRlPTA7aT49c3RhcnQ7LS1pKWlmKDQ3IT09KGNvZGU9cGF0aC5jaGFyQ29kZUF0KGkpKSktMT09PWVuZCYmKG1hdGNoZWRTbGFzaD0hMSxlbmQ9aSsxKSw0Nj09PWNvZGU/LTE9PT1zdGFydERvdD9zdGFydERvdD1pOjEhPT1wcmVEb3RTdGF0ZSYmKHByZURvdFN0YXRlPTEpOi0xIT09c3RhcnREb3QmJihwcmVEb3RTdGF0ZT0tMSk7ZWxzZSBpZighbWF0Y2hlZFNsYXNoKXtzdGFydFBhcnQ9aSsxO2JyZWFrfXJldHVybi0xPT09c3RhcnREb3R8fC0xPT09ZW5kfHwwPT09cHJlRG90U3RhdGV8fDE9PT1wcmVEb3RTdGF0ZSYmc3RhcnREb3Q9PT1lbmQtMSYmc3RhcnREb3Q9PT1zdGFydFBhcnQrMT8tMSE9PWVuZCYmKHJldC5iYXNlPXJldC5uYW1lPTA9PT1zdGFydFBhcnQmJmlzQWJzb2x1dGU/cGF0aC5zbGljZSgxLGVuZCk6cGF0aC5zbGljZShzdGFydFBhcnQsZW5kKSk6KDA9PT1zdGFydFBhcnQmJmlzQWJzb2x1dGU/KHJldC5uYW1lPXBhdGguc2xpY2UoMSxzdGFydERvdCkscmV0LmJhc2U9cGF0aC5zbGljZSgxLGVuZCkpOihyZXQubmFtZT1wYXRoLnNsaWNlKHN0YXJ0UGFydCxzdGFydERvdCkscmV0LmJhc2U9cGF0aC5zbGljZShzdGFydFBhcnQsZW5kKSkscmV0LmV4dD1wYXRoLnNsaWNlKHN0YXJ0RG90LGVuZCkpLHN0YXJ0UGFydD4wP3JldC5kaXI9cGF0aC5zbGljZSgwLHN0YXJ0UGFydC0xKTppc0Fic29sdXRlJiYocmV0LmRpcj0iLyIpLHJldH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07cG9zaXgucG9zaXg9cG9zaXgsbW9kdWxlLmV4cG9ydHM9cG9zaXh9LCIuLi8uLi9ub2RlX21vZHVsZXMvcGJrZGYyL2Jyb3dzZXIuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO2V4cG9ydHMucGJrZGYyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYmtkZjIvbGliL2FzeW5jLmpzIiksZXhwb3J0cy5wYmtkZjJTeW5jPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYmtkZjIvbGliL3N5bmMtYnJvd3Nlci5qcyIpfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3Bia2RmMi9saWIvYXN5bmMuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBaRVJPX0JVRixuZXh0VGljayxCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLGNoZWNrUGFyYW1ldGVycz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcGJrZGYyL2xpYi9wcmVjb25kaXRpb24uanMiKSxkZWZhdWx0RW5jb2Rpbmc9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3Bia2RmMi9saWIvZGVmYXVsdC1lbmNvZGluZy5qcyIpLHN5bmM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3Bia2RmMi9saWIvc3luYy1icm93c2VyLmpzIiksdG9CdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3Bia2RmMi9saWIvdG8tYnVmZmVyLmpzIiksc3VidGxlPV9fd2VicGFja19yZXF1aXJlX18uZy5jcnlwdG8mJl9fd2VicGFja19yZXF1aXJlX18uZy5jcnlwdG8uc3VidGxlLHRvQnJvd3Nlcj17c2hhOiJTSEEtMSIsInNoYS0xIjoiU0hBLTEiLHNoYTE6IlNIQS0xIixzaGEyNTY6IlNIQS0yNTYiLCJzaGEtMjU2IjoiU0hBLTI1NiIsc2hhMzg0OiJTSEEtMzg0Iiwic2hhLTM4NCI6IlNIQS0zODQiLCJzaGEtNTEyIjoiU0hBLTUxMiIsc2hhNTEyOiJTSEEtNTEyIn0sY2hlY2tzPVtdO2Z1bmN0aW9uIGdldE5leHRUaWNrKCl7cmV0dXJuIG5leHRUaWNrfHwobmV4dFRpY2s9X193ZWJwYWNrX3JlcXVpcmVfXy5nLnByb2Nlc3MmJl9fd2VicGFja19yZXF1aXJlX18uZy5wcm9jZXNzLm5leHRUaWNrP19fd2VicGFja19yZXF1aXJlX18uZy5wcm9jZXNzLm5leHRUaWNrOl9fd2VicGFja19yZXF1aXJlX18uZy5xdWV1ZU1pY3JvdGFzaz9fX3dlYnBhY2tfcmVxdWlyZV9fLmcucXVldWVNaWNyb3Rhc2s6X193ZWJwYWNrX3JlcXVpcmVfXy5nLnNldEltbWVkaWF0ZT9fX3dlYnBhY2tfcmVxdWlyZV9fLmcuc2V0SW1tZWRpYXRlOl9fd2VicGFja19yZXF1aXJlX18uZy5zZXRUaW1lb3V0KX1mdW5jdGlvbiBicm93c2VyUGJrZGYyKHBhc3N3b3JkLHNhbHQsaXRlcmF0aW9ucyxsZW5ndGgsYWxnbyl7cmV0dXJuIHN1YnRsZS5pbXBvcnRLZXkoInJhdyIscGFzc3dvcmQse25hbWU6IlBCS0RGMiJ9LCExLFsiZGVyaXZlQml0cyJdKS50aGVuKGZ1bmN0aW9uKGtleSl7cmV0dXJuIHN1YnRsZS5kZXJpdmVCaXRzKHtuYW1lOiJQQktERjIiLHNhbHQsaXRlcmF0aW9ucyxoYXNoOntuYW1lOmFsZ299fSxrZXksbGVuZ3RoPDwzKX0pLnRoZW4oZnVuY3Rpb24ocmVzKXtyZXR1cm4gQnVmZmVyLmZyb20ocmVzKX0pfW1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHBhc3N3b3JkLHNhbHQsaXRlcmF0aW9ucyxrZXlsZW4sZGlnZXN0LGNhbGxiYWNrKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZGlnZXN0JiYoY2FsbGJhY2s9ZGlnZXN0LGRpZ2VzdD12b2lkIDApLGNoZWNrUGFyYW1ldGVycyhpdGVyYXRpb25zLGtleWxlbikscGFzc3dvcmQ9dG9CdWZmZXIocGFzc3dvcmQsZGVmYXVsdEVuY29kaW5nLCJQYXNzd29yZCIpLHNhbHQ9dG9CdWZmZXIoc2FsdCxkZWZhdWx0RW5jb2RpbmcsIlNhbHQiKSwiZnVuY3Rpb24iIT10eXBlb2YgY2FsbGJhY2spdGhyb3cgbmV3IEVycm9yKCJObyBjYWxsYmFjayBwcm92aWRlZCB0byBwYmtkZjIiKTt2YXIgYWxnbz10b0Jyb3dzZXJbKGRpZ2VzdD1kaWdlc3R8fCJzaGExIikudG9Mb3dlckNhc2UoKV07YWxnbyYmImZ1bmN0aW9uIj09dHlwZW9mIF9fd2VicGFja19yZXF1aXJlX18uZy5Qcm9taXNlP2Z1bmN0aW9uIHJlc29sdmVQcm9taXNlKHByb21pc2UsY2FsbGJhY2spe3Byb21pc2UudGhlbihmdW5jdGlvbihvdXQpe2dldE5leHRUaWNrKCkoZnVuY3Rpb24oKXtjYWxsYmFjayhudWxsLG91dCl9KX0sZnVuY3Rpb24oZSl7Z2V0TmV4dFRpY2soKShmdW5jdGlvbigpe2NhbGxiYWNrKGUpfSl9KX0oZnVuY3Rpb24gY2hlY2tOYXRpdmUoYWxnbyl7aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5nLnByb2Nlc3MmJiFfX3dlYnBhY2tfcmVxdWlyZV9fLmcucHJvY2Vzcy5icm93c2VyKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2lmKCFzdWJ0bGV8fCFzdWJ0bGUuaW1wb3J0S2V5fHwhc3VidGxlLmRlcml2ZUJpdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7aWYodm9pZCAwIT09Y2hlY2tzW2FsZ29dKXJldHVybiBjaGVja3NbYWxnb107dmFyIHByb209YnJvd3NlclBia2RmMihaRVJPX0JVRj1aRVJPX0JVRnx8QnVmZmVyLmFsbG9jKDgpLFpFUk9fQlVGLDEwLDEyOCxhbGdvKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9LGZ1bmN0aW9uKCl7cmV0dXJuITF9KTtyZXR1cm4gY2hlY2tzW2FsZ29dPXByb20scHJvbX0oYWxnbykudGhlbihmdW5jdGlvbihyZXNwKXtyZXR1cm4gcmVzcD9icm93c2VyUGJrZGYyKHBhc3N3b3JkLHNhbHQsaXRlcmF0aW9ucyxrZXlsZW4sYWxnbyk6c3luYyhwYXNzd29yZCxzYWx0LGl0ZXJhdGlvbnMsa2V5bGVuLGRpZ2VzdCl9KSxjYWxsYmFjayk6Z2V0TmV4dFRpY2soKShmdW5jdGlvbigpe3ZhciBvdXQ7dHJ5e291dD1zeW5jKHBhc3N3b3JkLHNhbHQsaXRlcmF0aW9ucyxrZXlsZW4sZGlnZXN0KX1jYXRjaChlKXtyZXR1cm4gdm9pZCBjYWxsYmFjayhlKX1jYWxsYmFjayhudWxsLG91dCl9KX19LCIuLi8uLi9ub2RlX21vZHVsZXMvcGJrZGYyL2xpYi9kZWZhdWx0LWVuY29kaW5nLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgZGVmYXVsdEVuY29kaW5nLHByb2Nlc3M9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL3Byb3h5L3Byb2Nlc3MuanMiKTtpZihfX3dlYnBhY2tfcmVxdWlyZV9fLmcucHJvY2VzcyYmX193ZWJwYWNrX3JlcXVpcmVfXy5nLnByb2Nlc3MuYnJvd3NlcilkZWZhdWx0RW5jb2Rpbmc9InV0Zi04IjtlbHNlIGlmKF9fd2VicGFja19yZXF1aXJlX18uZy5wcm9jZXNzJiZfX3dlYnBhY2tfcmVxdWlyZV9fLmcucHJvY2Vzcy52ZXJzaW9uKXtkZWZhdWx0RW5jb2Rpbmc9cGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9uLnNwbGl0KCIuIilbMF0uc2xpY2UoMSksMTApPj02PyJ1dGYtOCI6ImJpbmFyeSJ9ZWxzZSBkZWZhdWx0RW5jb2Rpbmc9InV0Zi04Ijttb2R1bGUuZXhwb3J0cz1kZWZhdWx0RW5jb2Rpbmd9LCIuLi8uLi9ub2RlX21vZHVsZXMvcGJrZGYyL2xpYi9wcmVjb25kaXRpb24uanMiKG1vZHVsZSl7InVzZSBzdHJpY3QiO3ZhciAkaXNGaW5pdGU9aXNGaW5pdGUsTUFYX0FMTE9DPU1hdGgucG93KDIsMzApLTE7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oaXRlcmF0aW9ucyxrZXlsZW4pe2lmKCJudW1iZXIiIT10eXBlb2YgaXRlcmF0aW9ucyl0aHJvdyBuZXcgVHlwZUVycm9yKCJJdGVyYXRpb25zIG5vdCBhIG51bWJlciIpO2lmKGl0ZXJhdGlvbnM8MHx8ISRpc0Zpbml0ZShpdGVyYXRpb25zKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQgaXRlcmF0aW9ucyIpO2lmKCJudW1iZXIiIT10eXBlb2Yga2V5bGVuKXRocm93IG5ldyBUeXBlRXJyb3IoIktleSBsZW5ndGggbm90IGEgbnVtYmVyIik7aWYoa2V5bGVuPDB8fGtleWxlbj5NQVhfQUxMT0N8fGtleWxlbiE9a2V5bGVuKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBrZXkgbGVuZ3RoIil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3Bia2RmMi9saWIvc3luYy1icm93c2VyLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgbWQ1PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jcmVhdGUtaGFzaC9tZDUuanMiKSxSSVBFTUQxNjA9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JpcGVtZDE2MC9pbmRleC5qcyIpLHNoYT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2hhLmpzL2luZGV4LmpzIiksQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcixjaGVja1BhcmFtZXRlcnM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3Bia2RmMi9saWIvcHJlY29uZGl0aW9uLmpzIiksZGVmYXVsdEVuY29kaW5nPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYmtkZjIvbGliL2RlZmF1bHQtZW5jb2RpbmcuanMiKSx0b0J1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcGJrZGYyL2xpYi90by1idWZmZXIuanMiKSxaRVJPUz1CdWZmZXIuYWxsb2MoMTI4KSxzaXplcz17X19wcm90b19fOm51bGwsbWQ1OjE2LHNoYTE6MjAsc2hhMjI0OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LCJzaGE1MTItMjU2IjozMixyaXBlbWQxNjA6MjAscm1kMTYwOjIwfSxtYXBwaW5nPXtfX3Byb3RvX186bnVsbCwic2hhLTEiOiJzaGExIiwic2hhLTIyNCI6InNoYTIyNCIsInNoYS0yNTYiOiJzaGEyNTYiLCJzaGEtMzg0Ijoic2hhMzg0Iiwic2hhLTUxMiI6InNoYTUxMiIsInJpcGVtZC0xNjAiOiJyaXBlbWQxNjAifTtmdW5jdGlvbiBybWQxNjBGdW5jKGRhdGEpe3JldHVybihuZXcgUklQRU1EMTYwKS51cGRhdGUoZGF0YSkuZGlnZXN0KCl9ZnVuY3Rpb24gSG1hYyhhbGcsa2V5LHNhbHRMZW4pe3ZhciBoYXNoPWZ1bmN0aW9uIGdldERpZ2VzdChhbGcpe3JldHVybiJybWQxNjAiPT09YWxnfHwicmlwZW1kMTYwIj09PWFsZz9ybWQxNjBGdW5jOiJtZDUiPT09YWxnP21kNTpmdW5jdGlvbiBzaGFGdW5jKGRhdGEpe3JldHVybiBzaGEoYWxnKS51cGRhdGUoZGF0YSkuZGlnZXN0KCl9fShhbGcpLGJsb2Nrc2l6ZT0ic2hhNTEyIj09PWFsZ3x8InNoYTM4NCI9PT1hbGc/MTI4OjY0O2tleS5sZW5ndGg+YmxvY2tzaXplP2tleT1oYXNoKGtleSk6a2V5Lmxlbmd0aDxibG9ja3NpemUmJihrZXk9QnVmZmVyLmNvbmNhdChba2V5LFpFUk9TXSxibG9ja3NpemUpKTtmb3IodmFyIGlwYWQ9QnVmZmVyLmFsbG9jVW5zYWZlKGJsb2Nrc2l6ZStzaXplc1thbGddKSxvcGFkPUJ1ZmZlci5hbGxvY1Vuc2FmZShibG9ja3NpemUrc2l6ZXNbYWxnXSksaT0wO2k8YmxvY2tzaXplO2krKylpcGFkW2ldPTU0XmtleVtpXSxvcGFkW2ldPTkyXmtleVtpXTt2YXIgaXBhZDE9QnVmZmVyLmFsbG9jVW5zYWZlKGJsb2Nrc2l6ZStzYWx0TGVuKzQpO2lwYWQuY29weShpcGFkMSwwLDAsYmxvY2tzaXplKSx0aGlzLmlwYWQxPWlwYWQxLHRoaXMuaXBhZDI9aXBhZCx0aGlzLm9wYWQ9b3BhZCx0aGlzLmFsZz1hbGcsdGhpcy5ibG9ja3NpemU9YmxvY2tzaXplLHRoaXMuaGFzaD1oYXNoLHRoaXMuc2l6ZT1zaXplc1thbGddfUhtYWMucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihkYXRhLGlwYWQpe3JldHVybiBkYXRhLmNvcHkoaXBhZCx0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKGlwYWQpLmNvcHkodGhpcy5vcGFkLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2godGhpcy5vcGFkKX0sbW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gcGJrZGYyKHBhc3N3b3JkLHNhbHQsaXRlcmF0aW9ucyxrZXlsZW4sZGlnZXN0KXtjaGVja1BhcmFtZXRlcnMoaXRlcmF0aW9ucyxrZXlsZW4pLHBhc3N3b3JkPXRvQnVmZmVyKHBhc3N3b3JkLGRlZmF1bHRFbmNvZGluZywiUGFzc3dvcmQiKSxzYWx0PXRvQnVmZmVyKHNhbHQsZGVmYXVsdEVuY29kaW5nLCJTYWx0Iik7dmFyIGxvd2VyRGlnZXN0PShkaWdlc3R8fCJzaGExIikudG9Mb3dlckNhc2UoKSxtYXBwZWREaWdlc3Q9bWFwcGluZ1tsb3dlckRpZ2VzdF18fGxvd2VyRGlnZXN0LHNpemU9c2l6ZXNbbWFwcGVkRGlnZXN0XTtpZigibnVtYmVyIiE9dHlwZW9mIHNpemV8fCFzaXplKXRocm93IG5ldyBUeXBlRXJyb3IoIkRpZ2VzdCBhbGdvcml0aG0gbm90IHN1cHBvcnRlZDogIitkaWdlc3QpO3ZhciBobWFjPW5ldyBIbWFjKG1hcHBlZERpZ2VzdCxwYXNzd29yZCxzYWx0Lmxlbmd0aCksREs9QnVmZmVyLmFsbG9jVW5zYWZlKGtleWxlbiksYmxvY2sxPUJ1ZmZlci5hbGxvY1Vuc2FmZShzYWx0Lmxlbmd0aCs0KTtzYWx0LmNvcHkoYmxvY2sxLDAsMCxzYWx0Lmxlbmd0aCk7Zm9yKHZhciBkZXN0UG9zPTAsaExlbj1zaXplLGw9TWF0aC5jZWlsKGtleWxlbi9oTGVuKSxpPTE7aTw9bDtpKyspe2Jsb2NrMS53cml0ZVVJbnQzMkJFKGksc2FsdC5sZW5ndGgpO2Zvcih2YXIgVD1obWFjLnJ1bihibG9jazEsaG1hYy5pcGFkMSksVT1ULGo9MTtqPGl0ZXJhdGlvbnM7aisrKXtVPWhtYWMucnVuKFUsaG1hYy5pcGFkMik7Zm9yKHZhciBrPTA7azxoTGVuO2srKylUW2tdXj1VW2tdfVQuY29weShESyxkZXN0UG9zKSxkZXN0UG9zKz1oTGVufXJldHVybiBES319LCIuLi8uLi9ub2RlX21vZHVsZXMvcGJrZGYyL2xpYi90by1idWZmZXIuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLHRvQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy90by1idWZmZXIvaW5kZXguanMiKSx1c2VVaW50OEFycmF5PSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheSxpc1ZpZXc9dXNlVWludDhBcnJheSYmInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3O21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHRoaW5nLGVuY29kaW5nLG5hbWUpe2lmKCJzdHJpbmciPT10eXBlb2YgdGhpbmd8fEJ1ZmZlci5pc0J1ZmZlcih0aGluZyl8fHVzZVVpbnQ4QXJyYXkmJnRoaW5nIGluc3RhbmNlb2YgVWludDhBcnJheXx8aXNWaWV3JiZpc1ZpZXcodGhpbmcpKXJldHVybiB0b0J1ZmZlcih0aGluZyxlbmNvZGluZyk7dGhyb3cgbmV3IFR5cGVFcnJvcihuYW1lKyIgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgVWludDhBcnJheSwgb3IgYSBEYXRhVmlldyIpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9wb3NzaWJsZS10eXBlZC1hcnJheS1uYW1lcy9pbmRleC5qcyIobW9kdWxlKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9WyJGbG9hdDE2QXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiXX0sIi4uLy4uL25vZGVfbW9kdWxlcy9wcm9jZXNzLW5leHRpY2stYXJncy9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHByb2Nlc3M9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL3Byb3h5L3Byb2Nlc3MuanMiKTt2b2lkIDA9PT1wcm9jZXNzfHwhcHJvY2Vzcy52ZXJzaW9ufHwwPT09cHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoInYwLiIpfHwwPT09cHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoInYxLiIpJiYwIT09cHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoInYxLjguIik/bW9kdWxlLmV4cG9ydHM9e25leHRUaWNrOmZ1bmN0aW9uIG5leHRUaWNrKGZuLGFyZzEsYXJnMixhcmczKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZm4pdGhyb3cgbmV3IFR5cGVFcnJvcignImNhbGxiYWNrIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTt2YXIgYXJncyxpLGxlbj1hcmd1bWVudHMubGVuZ3RoO3N3aXRjaChsZW4pe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZm4pO2Nhc2UgMjpyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tPbmUoKXtmbi5jYWxsKG51bGwsYXJnMSl9KTtjYXNlIDM6cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrVHdvKCl7Zm4uY2FsbChudWxsLGFyZzEsYXJnMil9KTtjYXNlIDQ6cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrVGhyZWUoKXtmbi5jYWxsKG51bGwsYXJnMSxhcmcyLGFyZzMpfSk7ZGVmYXVsdDpmb3IoYXJncz1uZXcgQXJyYXkobGVuLTEpLGk9MDtpPGFyZ3MubGVuZ3RoOylhcmdzW2krK109YXJndW1lbnRzW2ldO3JldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGljaygpe2ZuLmFwcGx5KG51bGwsYXJncyl9KX19fTptb2R1bGUuZXhwb3J0cz1wcm9jZXNzfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3B1YmxpYy1lbmNyeXB0L2Jyb3dzZXIuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7ZXhwb3J0cy5wdWJsaWNFbmNyeXB0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC9wdWJsaWNFbmNyeXB0LmpzIiksZXhwb3J0cy5wcml2YXRlRGVjcnlwdD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvcHJpdmF0ZURlY3J5cHQuanMiKSxleHBvcnRzLnByaXZhdGVFbmNyeXB0PWZ1bmN0aW9uIHByaXZhdGVFbmNyeXB0KGtleSxidWYpe3JldHVybiBleHBvcnRzLnB1YmxpY0VuY3J5cHQoa2V5LGJ1ZiwhMCl9LGV4cG9ydHMucHVibGljRGVjcnlwdD1mdW5jdGlvbiBwdWJsaWNEZWNyeXB0KGtleSxidWYpe3JldHVybiBleHBvcnRzLnByaXZhdGVEZWNyeXB0KGtleSxidWYsITApfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC9tZ2YuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIGNyZWF0ZUhhc2g9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NyZWF0ZS1oYXNoL2Jyb3dzZXIuanMiKSxCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyO2Z1bmN0aW9uIGkyb3BzKGMpe3ZhciBvdXQ9QnVmZmVyLmFsbG9jVW5zYWZlKDQpO3JldHVybiBvdXQud3JpdGVVSW50MzJCRShjLDApLG91dH1tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihzZWVkLGxlbil7Zm9yKHZhciBjLHQ9QnVmZmVyLmFsbG9jKDApLGk9MDt0Lmxlbmd0aDxsZW47KWM9aTJvcHMoaSsrKSx0PUJ1ZmZlci5jb25jYXQoW3QsY3JlYXRlSGFzaCgic2hhMSIpLnVwZGF0ZShzZWVkKS51cGRhdGUoYykuZGlnZXN0KCldKTtyZXR1cm4gdC5zbGljZSgwLGxlbil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3B1YmxpYy1lbmNyeXB0L25vZGVfbW9kdWxlcy9ibi5qcy9saWIvYm4uanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYXNzZXJ0KHZhbCxtc2cpe2lmKCF2YWwpdGhyb3cgbmV3IEVycm9yKG1zZ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBpbmhlcml0cyhjdG9yLHN1cGVyQ3Rvcil7Y3Rvci5zdXBlcl89c3VwZXJDdG9yO3ZhciBUZW1wQ3Rvcj1mdW5jdGlvbigpe307VGVtcEN0b3IucHJvdG90eXBlPXN1cGVyQ3Rvci5wcm90b3R5cGUsY3Rvci5wcm90b3R5cGU9bmV3IFRlbXBDdG9yLGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yPWN0b3J9ZnVuY3Rpb24gQk4obnVtYmVyLGJhc2UsZW5kaWFuKXtpZihCTi5pc0JOKG51bWJlcikpcmV0dXJuIG51bWJlcjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09bnVtYmVyJiYoImxlIiE9PWJhc2UmJiJiZSIhPT1iYXNlfHwoZW5kaWFuPWJhc2UsYmFzZT0xMCksdGhpcy5faW5pdChudW1iZXJ8fDAsYmFzZXx8MTAsZW5kaWFufHwiYmUiKSl9dmFyIEJ1ZmZlcjsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1CTjpleHBvcnRzLkJOPUJOLEJOLkJOPUJOLEJOLndvcmRTaXplPTI2O3RyeXtCdWZmZXI9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyfWNhdGNoKGUpe31mdW5jdGlvbiBwYXJzZUhleDRCaXRzKHN0cmluZyxpbmRleCl7dmFyIGM9c3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpO3JldHVybiBjPj02NSYmYzw9NzA/Yy01NTpjPj05NyYmYzw9MTAyP2MtODc6Yy00OCYxNX1mdW5jdGlvbiBwYXJzZUhleEJ5dGUoc3RyaW5nLGxvd2VyQm91bmQsaW5kZXgpe3ZhciByPXBhcnNlSGV4NEJpdHMoc3RyaW5nLGluZGV4KTtyZXR1cm4gaW5kZXgtMT49bG93ZXJCb3VuZCYmKHJ8PXBhcnNlSGV4NEJpdHMoc3RyaW5nLGluZGV4LTEpPDw0KSxyfWZ1bmN0aW9uIHBhcnNlQmFzZShzdHIsc3RhcnQsZW5kLG11bCl7Zm9yKHZhciByPTAsbGVuPU1hdGgubWluKHN0ci5sZW5ndGgsZW5kKSxpPXN0YXJ0O2k8bGVuO2krKyl7dmFyIGM9c3RyLmNoYXJDb2RlQXQoaSktNDg7cio9bXVsLHIrPWM+PTQ5P2MtNDkrMTA6Yz49MTc/Yy0xNysxMDpjfXJldHVybiByfUJOLmlzQk49ZnVuY3Rpb24gaXNCTihudW0pe3JldHVybiBudW0gaW5zdGFuY2VvZiBCTnx8bnVsbCE9PW51bSYmIm9iamVjdCI9PXR5cGVvZiBudW0mJm51bS5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUJOLndvcmRTaXplJiZBcnJheS5pc0FycmF5KG51bS53b3Jkcyl9LEJOLm1heD1mdW5jdGlvbiBtYXgobGVmdCxyaWdodCl7cmV0dXJuIGxlZnQuY21wKHJpZ2h0KT4wP2xlZnQ6cmlnaHR9LEJOLm1pbj1mdW5jdGlvbiBtaW4obGVmdCxyaWdodCl7cmV0dXJuIGxlZnQuY21wKHJpZ2h0KTwwP2xlZnQ6cmlnaHR9LEJOLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbiBpbml0KG51bWJlcixiYXNlLGVuZGlhbil7aWYoIm51bWJlciI9PXR5cGVvZiBudW1iZXIpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIobnVtYmVyLGJhc2UsZW5kaWFuKTtpZigib2JqZWN0Ij09dHlwZW9mIG51bWJlcilyZXR1cm4gdGhpcy5faW5pdEFycmF5KG51bWJlcixiYXNlLGVuZGlhbik7ImhleCI9PT1iYXNlJiYoYmFzZT0xNiksYXNzZXJ0KGJhc2U9PT0oMHxiYXNlKSYmYmFzZT49MiYmYmFzZTw9MzYpO3ZhciBzdGFydD0wOyItIj09PShudW1iZXI9bnVtYmVyLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHN0YXJ0KyssdGhpcy5uZWdhdGl2ZT0xKSxzdGFydDxudW1iZXIubGVuZ3RoJiYoMTY9PT1iYXNlP3RoaXMuX3BhcnNlSGV4KG51bWJlcixzdGFydCxlbmRpYW4pOih0aGlzLl9wYXJzZUJhc2UobnVtYmVyLGJhc2Usc3RhcnQpLCJsZSI9PT1lbmRpYW4mJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiYXNlLGVuZGlhbikpKX0sQk4ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uIF9pbml0TnVtYmVyKG51bWJlcixiYXNlLGVuZGlhbil7bnVtYmVyPDAmJih0aGlzLm5lZ2F0aXZlPTEsbnVtYmVyPS1udW1iZXIpLG51bWJlcjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmbnVtYmVyXSx0aGlzLmxlbmd0aD0xKTpudW1iZXI8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmbnVtYmVyLG51bWJlci82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGFzc2VydChudW1iZXI8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmbnVtYmVyLG51bWJlci82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09ZW5kaWFuJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYmFzZSxlbmRpYW4pfSxCTi5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbiBfaW5pdEFycmF5KG51bWJlcixiYXNlLGVuZGlhbil7aWYoYXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgbnVtYmVyLmxlbmd0aCksbnVtYmVyLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChudW1iZXIubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIGosdyxvZmY9MDtpZigiYmUiPT09ZW5kaWFuKWZvcihpPW51bWJlci5sZW5ndGgtMSxqPTA7aT49MDtpLT0zKXc9bnVtYmVyW2ldfG51bWJlcltpLTFdPDw4fG51bWJlcltpLTJdPDwxNix0aGlzLndvcmRzW2pdfD13PDxvZmYmNjcxMDg4NjMsdGhpcy53b3Jkc1tqKzFdPXc+Pj4yNi1vZmYmNjcxMDg4NjMsKG9mZis9MjQpPj0yNiYmKG9mZi09MjYsaisrKTtlbHNlIGlmKCJsZSI9PT1lbmRpYW4pZm9yKGk9MCxqPTA7aTxudW1iZXIubGVuZ3RoO2krPTMpdz1udW1iZXJbaV18bnVtYmVyW2krMV08PDh8bnVtYmVyW2krMl08PDE2LHRoaXMud29yZHNbal18PXc8PG9mZiY2NzEwODg2Myx0aGlzLndvcmRzW2orMV09dz4+PjI2LW9mZiY2NzEwODg2Mywob2ZmKz0yNCk+PTI2JiYob2ZmLT0yNixqKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24gX3BhcnNlSGV4KG51bWJlcixzdGFydCxlbmRpYW4pe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgobnVtYmVyLmxlbmd0aC1zdGFydCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDt2YXIgdyxvZmY9MCxqPTA7aWYoImJlIj09PWVuZGlhbilmb3IoaT1udW1iZXIubGVuZ3RoLTE7aT49c3RhcnQ7aS09Mil3PXBhcnNlSGV4Qnl0ZShudW1iZXIsc3RhcnQsaSk8PG9mZix0aGlzLndvcmRzW2pdfD02NzEwODg2MyZ3LG9mZj49MTg/KG9mZi09MTgsais9MSx0aGlzLndvcmRzW2pdfD13Pj4+MjYpOm9mZis9ODtlbHNlIGZvcihpPShudW1iZXIubGVuZ3RoLXN0YXJ0KSUyPT0wP3N0YXJ0KzE6c3RhcnQ7aTxudW1iZXIubGVuZ3RoO2krPTIpdz1wYXJzZUhleEJ5dGUobnVtYmVyLHN0YXJ0LGkpPDxvZmYsdGhpcy53b3Jkc1tqXXw9NjcxMDg4NjMmdyxvZmY+PTE4PyhvZmYtPTE4LGorPTEsdGhpcy53b3Jkc1tqXXw9dz4+PjI2KTpvZmYrPTg7dGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbiBfcGFyc2VCYXNlKG51bWJlcixiYXNlLHN0YXJ0KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgbGltYkxlbj0wLGxpbWJQb3c9MTtsaW1iUG93PD02NzEwODg2MztsaW1iUG93Kj1iYXNlKWxpbWJMZW4rKztsaW1iTGVuLS0sbGltYlBvdz1saW1iUG93L2Jhc2V8MDtmb3IodmFyIHRvdGFsPW51bWJlci5sZW5ndGgtc3RhcnQsbW9kPXRvdGFsJWxpbWJMZW4sZW5kPU1hdGgubWluKHRvdGFsLHRvdGFsLW1vZCkrc3RhcnQsd29yZD0wLGk9c3RhcnQ7aTxlbmQ7aSs9bGltYkxlbil3b3JkPXBhcnNlQmFzZShudW1iZXIsaSxpK2xpbWJMZW4sYmFzZSksdGhpcy5pbXVsbihsaW1iUG93KSx0aGlzLndvcmRzWzBdK3dvcmQ8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9d29yZDp0aGlzLl9pYWRkbih3b3JkKTtpZigwIT09bW9kKXt2YXIgcG93PTE7Zm9yKHdvcmQ9cGFyc2VCYXNlKG51bWJlcixpLG51bWJlci5sZW5ndGgsYmFzZSksaT0wO2k8bW9kO2krKylwb3cqPWJhc2U7dGhpcy5pbXVsbihwb3cpLHRoaXMud29yZHNbMF0rd29yZDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz13b3JkOnRoaXMuX2lhZGRuKHdvcmQpfXRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24gY29weShkZXN0KXtkZXN0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspZGVzdC53b3Jkc1tpXT10aGlzLndvcmRzW2ldO2Rlc3QubGVuZ3RoPXRoaXMubGVuZ3RoLGRlc3QubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxkZXN0LnJlZD10aGlzLnJlZH0sQk4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uIGNsb25lKCl7dmFyIHI9bmV3IEJOKG51bGwpO3JldHVybiB0aGlzLmNvcHkocikscn0sQk4ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24gX2V4cGFuZChzaXplKXtmb3IoO3RoaXMubGVuZ3RoPHNpemU7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sQk4ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uIHN0cmlwKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sQk4ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbiBfbm9ybVNpZ24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sQk4ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24gaW5zcGVjdCgpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgemVyb3M9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sZ3JvdXBTaXplcz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxncm91cEJhc2VzPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIHNtYWxsTXVsVG8oc2VsZixudW0sb3V0KXtvdXQubmVnYXRpdmU9bnVtLm5lZ2F0aXZlXnNlbGYubmVnYXRpdmU7dmFyIGxlbj1zZWxmLmxlbmd0aCtudW0ubGVuZ3RofDA7b3V0Lmxlbmd0aD1sZW4sbGVuPWxlbi0xfDA7dmFyIGE9MHxzZWxmLndvcmRzWzBdLGI9MHxudW0ud29yZHNbMF0scj1hKmIsbG89NjcxMDg4NjMmcixjYXJyeT1yLzY3MTA4ODY0fDA7b3V0LndvcmRzWzBdPWxvO2Zvcih2YXIgaz0xO2s8bGVuO2srKyl7Zm9yKHZhciBuY2Fycnk9Y2Fycnk+Pj4yNixyd29yZD02NzEwODg2MyZjYXJyeSxtYXhKPU1hdGgubWluKGssbnVtLmxlbmd0aC0xKSxqPU1hdGgubWF4KDAsay1zZWxmLmxlbmd0aCsxKTtqPD1tYXhKO2orKyl7dmFyIGk9ay1qfDA7bmNhcnJ5Kz0ocj0oYT0wfHNlbGYud29yZHNbaV0pKihiPTB8bnVtLndvcmRzW2pdKStyd29yZCkvNjcxMDg4NjR8MCxyd29yZD02NzEwODg2MyZyfW91dC53b3Jkc1trXT0wfHJ3b3JkLGNhcnJ5PTB8bmNhcnJ5fXJldHVybiAwIT09Y2Fycnk/b3V0LndvcmRzW2tdPTB8Y2Fycnk6b3V0Lmxlbmd0aC0tLG91dC5zdHJpcCgpfUJOLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbiB0b1N0cmluZyhiYXNlLHBhZGRpbmcpe3ZhciBvdXQ7aWYocGFkZGluZz0wfHBhZGRpbmd8fDEsMTY9PT0oYmFzZT1iYXNlfHwxMCl8fCJoZXgiPT09YmFzZSl7b3V0PSIiO2Zvcih2YXIgb2ZmPTAsY2Fycnk9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciB3PXRoaXMud29yZHNbaV0sd29yZD0oMTY3NzcyMTUmKHc8PG9mZnxjYXJyeSkpLnRvU3RyaW5nKDE2KTtjYXJyeT13Pj4+MjQtb2ZmJjE2Nzc3MjE1LChvZmYrPTIpPj0yNiYmKG9mZi09MjYsaS0tKSxvdXQ9MCE9PWNhcnJ5fHxpIT09dGhpcy5sZW5ndGgtMT96ZXJvc1s2LXdvcmQubGVuZ3RoXSt3b3JkK291dDp3b3JkK291dH1mb3IoMCE9PWNhcnJ5JiYob3V0PWNhcnJ5LnRvU3RyaW5nKDE2KStvdXQpO291dC5sZW5ndGglcGFkZGluZyE9PTA7KW91dD0iMCIrb3V0O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKG91dD0iLSIrb3V0KSxvdXR9aWYoYmFzZT09PSgwfGJhc2UpJiZiYXNlPj0yJiZiYXNlPD0zNil7dmFyIGdyb3VwU2l6ZT1ncm91cFNpemVzW2Jhc2VdLGdyb3VwQmFzZT1ncm91cEJhc2VzW2Jhc2VdO291dD0iIjt2YXIgYz10aGlzLmNsb25lKCk7Zm9yKGMubmVnYXRpdmU9MDshYy5pc1plcm8oKTspe3ZhciByPWMubW9kbihncm91cEJhc2UpLnRvU3RyaW5nKGJhc2UpO291dD0oYz1jLmlkaXZuKGdyb3VwQmFzZSkpLmlzWmVybygpP3Irb3V0Onplcm9zW2dyb3VwU2l6ZS1yLmxlbmd0aF0rcitvdXR9Zm9yKHRoaXMuaXNaZXJvKCkmJihvdXQ9IjAiK291dCk7b3V0Lmxlbmd0aCVwYWRkaW5nIT09MDspb3V0PSIwIitvdXQ7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYob3V0PSItIitvdXQpLG91dH1hc3NlcnQoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sQk4ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uIHRvTnVtYmVyKCl7dmFyIHJldD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cmV0Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cmV0Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmYXNzZXJ0KCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcmV0OnJldH0sQk4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbiB0b0pTT04oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEJOLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbiB0b0J1ZmZlcihlbmRpYW4sbGVuZ3RoKXtyZXR1cm4gYXNzZXJ0KHZvaWQgMCE9PUJ1ZmZlciksdGhpcy50b0FycmF5TGlrZShCdWZmZXIsZW5kaWFuLGxlbmd0aCl9LEJOLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uIHRvQXJyYXkoZW5kaWFuLGxlbmd0aCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZW5kaWFuLGxlbmd0aCl9LEJOLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbiB0b0FycmF5TGlrZShBcnJheVR5cGUsZW5kaWFuLGxlbmd0aCl7dmFyIGJ5dGVMZW5ndGg9dGhpcy5ieXRlTGVuZ3RoKCkscmVxTGVuZ3RoPWxlbmd0aHx8TWF0aC5tYXgoMSxieXRlTGVuZ3RoKTthc3NlcnQoYnl0ZUxlbmd0aDw9cmVxTGVuZ3RoLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksYXNzZXJ0KHJlcUxlbmd0aD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIGIsaSxsaXR0bGVFbmRpYW49ImxlIj09PWVuZGlhbixyZXM9bmV3IEFycmF5VHlwZShyZXFMZW5ndGgpLHE9dGhpcy5jbG9uZSgpO2lmKGxpdHRsZUVuZGlhbil7Zm9yKGk9MDshcS5pc1plcm8oKTtpKyspYj1xLmFuZGxuKDI1NSkscS5pdXNocm4oOCkscmVzW2ldPWI7Zm9yKDtpPHJlcUxlbmd0aDtpKyspcmVzW2ldPTB9ZWxzZXtmb3IoaT0wO2k8cmVxTGVuZ3RoLWJ5dGVMZW5ndGg7aSsrKXJlc1tpXT0wO2ZvcihpPTA7IXEuaXNaZXJvKCk7aSsrKWI9cS5hbmRsbigyNTUpLHEuaXVzaHJuKDgpLHJlc1tyZXFMZW5ndGgtaS0xXT1ifXJldHVybiByZXN9LE1hdGguY2x6MzI/Qk4ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24gX2NvdW50Qml0cyh3KXtyZXR1cm4gMzItTWF0aC5jbHozMih3KX06Qk4ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24gX2NvdW50Qml0cyh3KXt2YXIgdD13LHI9MDtyZXR1cm4gdD49NDA5NiYmKHIrPTEzLHQ+Pj49MTMpLHQ+PTY0JiYocis9Nyx0Pj4+PTcpLHQ+PTgmJihyKz00LHQ+Pj49NCksdD49MiYmKHIrPTIsdD4+Pj0yKSxyK3R9LEJOLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24gX3plcm9CaXRzKHcpe2lmKDA9PT13KXJldHVybiAyNjt2YXIgdD13LHI9MDtyZXR1cm4gODE5MSZ0fHwocis9MTMsdD4+Pj0xMyksMTI3JnR8fChyKz03LHQ+Pj49NyksMTUmdHx8KHIrPTQsdD4+Pj00KSwzJnR8fChyKz0yLHQ+Pj49MiksMSZ0fHxyKysscn0sQk4ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbiBiaXRMZW5ndGgoKXt2YXIgdz10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGhpPXRoaXMuX2NvdW50Qml0cyh3KTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2hpfSxCTi5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24gemVyb0JpdHMoKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcj0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKyl7dmFyIGI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tpXSk7aWYocis9YiwyNiE9PWIpYnJlYWt9cmV0dXJuIHJ9LEJOLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uIGJ5dGVMZW5ndGgoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEJOLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24gdG9Ud29zKHdpZHRoKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih3aWR0aCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxCTi5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24gZnJvbVR3b3Mod2lkdGgpe3JldHVybiB0aGlzLnRlc3RuKHdpZHRoLTEpP3RoaXMubm90bih3aWR0aCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sQk4ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uIGlzTmVnKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxCTi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uIG5lZygpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxCTi5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbiBpbmVnKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxCTi5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbiBpdW9yKG51bSl7Zm9yKDt0aGlzLmxlbmd0aDxudW0ubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBpPTA7aTxudW0ubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPXRoaXMud29yZHNbaV18bnVtLndvcmRzW2ldO3JldHVybiB0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24gaW9yKG51bSl7cmV0dXJuIGFzc2VydCgwPT09KHRoaXMubmVnYXRpdmV8bnVtLm5lZ2F0aXZlKSksdGhpcy5pdW9yKG51bSl9LEJOLnByb3RvdHlwZS5vcj1mdW5jdGlvbiBvcihudW0pe3JldHVybiB0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IobnVtKTpudW0uY2xvbmUoKS5pb3IodGhpcyl9LEJOLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24gdW9yKG51bSl7cmV0dXJuIHRoaXMubGVuZ3RoPm51bS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IobnVtKTpudW0uY2xvbmUoKS5pdW9yKHRoaXMpfSxCTi5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24gaXVhbmQobnVtKXt2YXIgYjtiPXRoaXMubGVuZ3RoPm51bS5sZW5ndGg/bnVtOnRoaXM7Zm9yKHZhciBpPTA7aTxiLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT10aGlzLndvcmRzW2ldJm51bS53b3Jkc1tpXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbiBpYW5kKG51bSl7cmV0dXJuIGFzc2VydCgwPT09KHRoaXMubmVnYXRpdmV8bnVtLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChudW0pfSxCTi5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uIGFuZChudW0pe3JldHVybiB0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKG51bSk6bnVtLmNsb25lKCkuaWFuZCh0aGlzKX0sQk4ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24gdWFuZChudW0pe3JldHVybiB0aGlzLmxlbmd0aD5udW0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChudW0pOm51bS5jbG9uZSgpLml1YW5kKHRoaXMpfSxCTi5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24gaXV4b3IobnVtKXt2YXIgYSxiO3RoaXMubGVuZ3RoPm51bS5sZW5ndGg/KGE9dGhpcyxiPW51bSk6KGE9bnVtLGI9dGhpcyk7Zm9yKHZhciBpPTA7aTxiLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT1hLndvcmRzW2ldXmIud29yZHNbaV07aWYodGhpcyE9PWEpZm9yKDtpPGEubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPWEud29yZHNbaV07cmV0dXJuIHRoaXMubGVuZ3RoPWEubGVuZ3RoLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24gaXhvcihudW0pe3JldHVybiBhc3NlcnQoMD09PSh0aGlzLm5lZ2F0aXZlfG51bS5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IobnVtKX0sQk4ucHJvdG90eXBlLnhvcj1mdW5jdGlvbiB4b3IobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihudW0pOm51bS5jbG9uZSgpLml4b3IodGhpcyl9LEJOLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uIHV4b3IobnVtKXtyZXR1cm4gdGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IobnVtKTpudW0uY2xvbmUoKS5pdXhvcih0aGlzKX0sQk4ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uIGlub3RuKHdpZHRoKXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiB3aWR0aCYmd2lkdGg+PTApO3ZhciBieXRlc05lZWRlZD0wfE1hdGguY2VpbCh3aWR0aC8yNiksYml0c0xlZnQ9d2lkdGglMjY7dGhpcy5fZXhwYW5kKGJ5dGVzTmVlZGVkKSxiaXRzTGVmdD4wJiZieXRlc05lZWRlZC0tO2Zvcih2YXIgaT0wO2k8Ynl0ZXNOZWVkZWQ7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIGJpdHNMZWZ0PjAmJih0aGlzLndvcmRzW2ldPX50aGlzLndvcmRzW2ldJjY3MTA4ODYzPj4yNi1iaXRzTGVmdCksdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUubm90bj1mdW5jdGlvbiBub3RuKHdpZHRoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHdpZHRoKX0sQk4ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24gc2V0bihiaXQsdmFsKXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXQmJmJpdD49MCk7dmFyIG9mZj1iaXQvMjZ8MCx3Yml0PWJpdCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKG9mZisxKSx0aGlzLndvcmRzW29mZl09dmFsP3RoaXMud29yZHNbb2ZmXXwxPDx3Yml0OnRoaXMud29yZHNbb2ZmXSZ+KDE8PHdiaXQpLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24gaWFkZChudW0pe3ZhciByLGEsYjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PW51bS5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHI9dGhpcy5pc3ViKG51bSksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09bnVtLm5lZ2F0aXZlKXJldHVybiBudW0ubmVnYXRpdmU9MCxyPXRoaXMuaXN1YihudW0pLG51bS5uZWdhdGl2ZT0xLHIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+bnVtLmxlbmd0aD8oYT10aGlzLGI9bnVtKTooYT1udW0sYj10aGlzKTtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8Yi5sZW5ndGg7aSsrKXI9KDB8YS53b3Jkc1tpXSkrKDB8Yi53b3Jkc1tpXSkrY2FycnksdGhpcy53b3Jkc1tpXT02NzEwODg2MyZyLGNhcnJ5PXI+Pj4yNjtmb3IoOzAhPT1jYXJyeSYmaTxhLmxlbmd0aDtpKyspcj0oMHxhLndvcmRzW2ldKStjYXJyeSx0aGlzLndvcmRzW2ldPTY3MTA4ODYzJnIsY2Fycnk9cj4+PjI2O2lmKHRoaXMubGVuZ3RoPWEubGVuZ3RoLDAhPT1jYXJyeSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1jYXJyeSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoYSE9PXRoaXMpZm9yKDtpPGEubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPWEud29yZHNbaV07cmV0dXJuIHRoaXN9LEJOLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24gYWRkKG51bSl7dmFyIHJlcztyZXR1cm4gMCE9PW51bS5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KG51bS5uZWdhdGl2ZT0wLHJlcz10aGlzLnN1YihudW0pLG51bS5uZWdhdGl2ZV49MSxyZXMpOjA9PT1udW0ubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAscmVzPW51bS5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHJlcyk6dGhpcy5sZW5ndGg+bnVtLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChudW0pOm51bS5jbG9uZSgpLmlhZGQodGhpcyl9LEJOLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uIGlzdWIobnVtKXtpZigwIT09bnVtLm5lZ2F0aXZlKXtudW0ubmVnYXRpdmU9MDt2YXIgcj10aGlzLmlhZGQobnVtKTtyZXR1cm4gbnVtLm5lZ2F0aXZlPTEsci5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChudW0pLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBhLGIsY21wPXRoaXMuY21wKG51bSk7aWYoMD09PWNtcClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7Y21wPjA/KGE9dGhpcyxiPW51bSk6KGE9bnVtLGI9dGhpcyk7Zm9yKHZhciBjYXJyeT0wLGk9MDtpPGIubGVuZ3RoO2krKyljYXJyeT0ocj0oMHxhLndvcmRzW2ldKS0oMHxiLndvcmRzW2ldKStjYXJyeSk+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmcjtmb3IoOzAhPT1jYXJyeSYmaTxhLmxlbmd0aDtpKyspY2Fycnk9KHI9KDB8YS53b3Jkc1tpXSkrY2FycnkpPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJnI7aWYoMD09PWNhcnJ5JiZpPGEubGVuZ3RoJiZhIT09dGhpcylmb3IoO2k8YS5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09YS53b3Jkc1tpXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaSksYSE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbiBzdWIobnVtKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIobnVtKX07dmFyIGNvbWIxME11bFRvPWZ1bmN0aW9uIGNvbWIxME11bFRvKHNlbGYsbnVtLG91dCl7dmFyIGxvLG1pZCxoaSxhPXNlbGYud29yZHMsYj1udW0ud29yZHMsbz1vdXQud29yZHMsYz0wLGEwPTB8YVswXSxhbDA9ODE5MSZhMCxhaDA9YTA+Pj4xMyxhMT0wfGFbMV0sYWwxPTgxOTEmYTEsYWgxPWExPj4+MTMsYTI9MHxhWzJdLGFsMj04MTkxJmEyLGFoMj1hMj4+PjEzLGEzPTB8YVszXSxhbDM9ODE5MSZhMyxhaDM9YTM+Pj4xMyxhND0wfGFbNF0sYWw0PTgxOTEmYTQsYWg0PWE0Pj4+MTMsYTU9MHxhWzVdLGFsNT04MTkxJmE1LGFoNT1hNT4+PjEzLGE2PTB8YVs2XSxhbDY9ODE5MSZhNixhaDY9YTY+Pj4xMyxhNz0wfGFbN10sYWw3PTgxOTEmYTcsYWg3PWE3Pj4+MTMsYTg9MHxhWzhdLGFsOD04MTkxJmE4LGFoOD1hOD4+PjEzLGE5PTB8YVs5XSxhbDk9ODE5MSZhOSxhaDk9YTk+Pj4xMyxiMD0wfGJbMF0sYmwwPTgxOTEmYjAsYmgwPWIwPj4+MTMsYjE9MHxiWzFdLGJsMT04MTkxJmIxLGJoMT1iMT4+PjEzLGIyPTB8YlsyXSxibDI9ODE5MSZiMixiaDI9YjI+Pj4xMyxiMz0wfGJbM10sYmwzPTgxOTEmYjMsYmgzPWIzPj4+MTMsYjQ9MHxiWzRdLGJsND04MTkxJmI0LGJoND1iND4+PjEzLGI1PTB8Yls1XSxibDU9ODE5MSZiNSxiaDU9YjU+Pj4xMyxiNj0wfGJbNl0sYmw2PTgxOTEmYjYsYmg2PWI2Pj4+MTMsYjc9MHxiWzddLGJsNz04MTkxJmI3LGJoNz1iNz4+PjEzLGI4PTB8Yls4XSxibDg9ODE5MSZiOCxiaDg9Yjg+Pj4xMyxiOT0wfGJbOV0sYmw5PTgxOTEmYjksYmg5PWI5Pj4+MTM7b3V0Lm5lZ2F0aXZlPXNlbGYubmVnYXRpdmVebnVtLm5lZ2F0aXZlLG91dC5sZW5ndGg9MTk7dmFyIHcwPShjKyhsbz1NYXRoLmltdWwoYWwwLGJsMCkpfDApKygoODE5MSYobWlkPShtaWQ9TWF0aC5pbXVsKGFsMCxiaDApKStNYXRoLmltdWwoYWgwLGJsMCl8MCkpPDwxMyl8MDtjPSgoaGk9TWF0aC5pbXVsKGFoMCxiaDApKSsobWlkPj4+MTMpfDApKyh3MD4+PjI2KXwwLHcwJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWwxLGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsMSxiaDApKStNYXRoLmltdWwoYWgxLGJsMCl8MCxoaT1NYXRoLmltdWwoYWgxLGJoMCk7dmFyIHcxPShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsMSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDEpfDApK01hdGguaW11bChhaDAsYmwxKXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoMSl8MCkrKG1pZD4+PjEzKXwwKSsodzE+Pj4yNil8MCx3MSY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsMixibDApLG1pZD0obWlkPU1hdGguaW11bChhbDIsYmgwKSkrTWF0aC5pbXVsKGFoMixibDApfDAsaGk9TWF0aC5pbXVsKGFoMixiaDApLGxvPWxvK01hdGguaW11bChhbDEsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoMSl8MCkrTWF0aC5pbXVsKGFoMSxibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDEpfDA7dmFyIHcyPShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsMil8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDIpfDApK01hdGguaW11bChhaDAsYmwyKXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoMil8MCkrKG1pZD4+PjEzKXwwKSsodzI+Pj4yNil8MCx3MiY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsMyxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDMsYmgwKSkrTWF0aC5pbXVsKGFoMyxibDApfDAsaGk9TWF0aC5pbXVsKGFoMyxiaDApLGxvPWxvK01hdGguaW11bChhbDIsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoMSl8MCkrTWF0aC5pbXVsKGFoMixibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsMSxibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmgyKXwwKStNYXRoLmltdWwoYWgxLGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoMil8MDt2YXIgdzM9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmwzKXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoMyl8MCkrTWF0aC5pbXVsKGFoMCxibDMpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmgzKXwwKSsobWlkPj4+MTMpfDApKyh3Mz4+PjI2KXwwLHczJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw0LGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsNCxiaDApKStNYXRoLmltdWwoYWg0LGJsMCl8MCxoaT1NYXRoLmltdWwoYWg0LGJoMCksbG89bG8rTWF0aC5pbXVsKGFsMyxibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmgxKXwwKStNYXRoLmltdWwoYWgzLGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoMSl8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDIpfDApK01hdGguaW11bChhaDIsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDIsYmgyKXwwLGxvPWxvK01hdGguaW11bChhbDEsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoMyl8MCkrTWF0aC5pbXVsKGFoMSxibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDMpfDA7dmFyIHc0PShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsNCl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDQpfDApK01hdGguaW11bChhaDAsYmw0KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoNCl8MCkrKG1pZD4+PjEzKXwwKSsodzQ+Pj4yNil8MCx3NCY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsNSxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDUsYmgwKSkrTWF0aC5pbXVsKGFoNSxibDApfDAsaGk9TWF0aC5pbXVsKGFoNSxiaDApLGxvPWxvK01hdGguaW11bChhbDQsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoMSl8MCkrTWF0aC5pbXVsKGFoNCxibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmgyKXwwKStNYXRoLmltdWwoYWgzLGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDMpfDApK01hdGguaW11bChhaDIsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDIsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDEsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoNCl8MCkrTWF0aC5pbXVsKGFoMSxibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDQpfDA7dmFyIHc1PShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsNSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDUpfDApK01hdGguaW11bChhaDAsYmw1KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoNSl8MCkrKG1pZD4+PjEzKXwwKSsodzU+Pj4yNil8MCx3NSY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsNixibDApLG1pZD0obWlkPU1hdGguaW11bChhbDYsYmgwKSkrTWF0aC5pbXVsKGFoNixibDApfDAsaGk9TWF0aC5pbXVsKGFoNixiaDApLGxvPWxvK01hdGguaW11bChhbDUsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoMSl8MCkrTWF0aC5pbXVsKGFoNSxibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmgyKXwwKStNYXRoLmltdWwoYWg0LGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDMpfDApK01hdGguaW11bChhaDMsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDMsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDIsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoNCl8MCkrTWF0aC5pbXVsKGFoMixibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsMSxibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmg1KXwwKStNYXRoLmltdWwoYWgxLGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoNSl8MDt2YXIgdzY9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmw2KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoNil8MCkrTWF0aC5pbXVsKGFoMCxibDYpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmg2KXwwKSsobWlkPj4+MTMpfDApKyh3Nj4+PjI2KXwwLHc2Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw3LGJsMCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsNyxiaDApKStNYXRoLmltdWwoYWg3LGJsMCl8MCxoaT1NYXRoLmltdWwoYWg3LGJoMCksbG89bG8rTWF0aC5pbXVsKGFsNixibDEpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmgxKXwwKStNYXRoLmltdWwoYWg2LGJsMSl8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoMSl8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsMil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDIpfDApK01hdGguaW11bChhaDUsYmwyKXwwLGhpPWhpK01hdGguaW11bChhaDUsYmgyKXwwLGxvPWxvK01hdGguaW11bChhbDQsYmwzKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoMyl8MCkrTWF0aC5pbXVsKGFoNCxibDMpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDMpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDQpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmg0KXwwKStNYXRoLmltdWwoYWgzLGJsNCl8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoNCl8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsNSl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDUpfDApK01hdGguaW11bChhaDIsYmw1KXwwLGhpPWhpK01hdGguaW11bChhaDIsYmg1KXwwLGxvPWxvK01hdGguaW11bChhbDEsYmw2KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoNil8MCkrTWF0aC5pbXVsKGFoMSxibDYpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDYpfDA7dmFyIHc3PShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsNyl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDcpfDApK01hdGguaW11bChhaDAsYmw3KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoNyl8MCkrKG1pZD4+PjEzKXwwKSsodzc+Pj4yNil8MCx3NyY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOCxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDgsYmgwKSkrTWF0aC5pbXVsKGFoOCxibDApfDAsaGk9TWF0aC5pbXVsKGFoOCxiaDApLGxvPWxvK01hdGguaW11bChhbDcsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw3LGJoMSl8MCkrTWF0aC5pbXVsKGFoNyxibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNyxiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsNixibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDYsYmgyKXwwKStNYXRoLmltdWwoYWg2LGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWg2LGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWw1LGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNSxiaDMpfDApK01hdGguaW11bChhaDUsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDUsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDQsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw0LGJoNCl8MCkrTWF0aC5pbXVsKGFoNCxibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNCxiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsMyxibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDMsYmg1KXwwKStNYXRoLmltdWwoYWgzLGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWgzLGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWwyLGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMixiaDYpfDApK01hdGguaW11bChhaDIsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDIsYmg2KXwwLGxvPWxvK01hdGguaW11bChhbDEsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwxLGJoNyl8MCkrTWF0aC5pbXVsKGFoMSxibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMSxiaDcpfDA7dmFyIHc4PShjKyhsbz1sbytNYXRoLmltdWwoYWwwLGJsOCl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMCxiaDgpfDApK01hdGguaW11bChhaDAsYmw4KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgwLGJoOCl8MCkrKG1pZD4+PjEzKXwwKSsodzg+Pj4yNil8MCx3OCY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDApLG1pZD0obWlkPU1hdGguaW11bChhbDksYmgwKSkrTWF0aC5pbXVsKGFoOSxibDApfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDApLGxvPWxvK01hdGguaW11bChhbDgsYmwxKXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoMSl8MCkrTWF0aC5pbXVsKGFoOCxibDEpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDEpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmgyKXwwKStNYXRoLmltdWwoYWg3LGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDMpfDApK01hdGguaW11bChhaDYsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDYsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDUsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoNCl8MCkrTWF0aC5pbXVsKGFoNSxibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg1KXwwKStNYXRoLmltdWwoYWg0LGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWwzLGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDYpfDApK01hdGguaW11bChhaDMsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDMsYmg2KXwwLGxvPWxvK01hdGguaW11bChhbDIsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwyLGJoNyl8MCkrTWF0aC5pbXVsKGFoMixibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMixiaDcpfDAsbG89bG8rTWF0aC5pbXVsKGFsMSxibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDEsYmg4KXwwKStNYXRoLmltdWwoYWgxLGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWgxLGJoOCl8MDt2YXIgdzk9KGMrKGxvPWxvK01hdGguaW11bChhbDAsYmw5KXwwKXwwKSsoKDgxOTEmKG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwwLGJoOSl8MCkrTWF0aC5pbXVsKGFoMCxibDkpfDApKTw8MTMpfDA7Yz0oKGhpPWhpK01hdGguaW11bChhaDAsYmg5KXwwKSsobWlkPj4+MTMpfDApKyh3OT4+PjI2KXwwLHc5Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsMSksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDEpKStNYXRoLmltdWwoYWg5LGJsMSl8MCxoaT1NYXRoLmltdWwoYWg5LGJoMSksbG89bG8rTWF0aC5pbXVsKGFsOCxibDIpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmgyKXwwKStNYXRoLmltdWwoYWg4LGJsMil8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoMil8MCxsbz1sbytNYXRoLmltdWwoYWw3LGJsMyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDMpfDApK01hdGguaW11bChhaDcsYmwzKXwwLGhpPWhpK01hdGguaW11bChhaDcsYmgzKXwwLGxvPWxvK01hdGguaW11bChhbDYsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoNCl8MCkrTWF0aC5pbXVsKGFoNixibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmg1KXwwKStNYXRoLmltdWwoYWg1LGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDYpfDApK01hdGguaW11bChhaDQsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDQsYmg2KXwwLGxvPWxvK01hdGguaW11bChhbDMsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoNyl8MCkrTWF0aC5pbXVsKGFoMyxibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDcpfDAsbG89bG8rTWF0aC5pbXVsKGFsMixibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmg4KXwwKStNYXRoLmltdWwoYWgyLGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWgyLGJoOCl8MDt2YXIgdzEwPShjKyhsbz1sbytNYXRoLmltdWwoYWwxLGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMSxiaDkpfDApK01hdGguaW11bChhaDEsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgxLGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzEwPj4+MjYpfDAsdzEwJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsMiksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDIpKStNYXRoLmltdWwoYWg5LGJsMil8MCxoaT1NYXRoLmltdWwoYWg5LGJoMiksbG89bG8rTWF0aC5pbXVsKGFsOCxibDMpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmgzKXwwKStNYXRoLmltdWwoYWg4LGJsMyl8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoMyl8MCxsbz1sbytNYXRoLmltdWwoYWw3LGJsNCl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDQpfDApK01hdGguaW11bChhaDcsYmw0KXwwLGhpPWhpK01hdGguaW11bChhaDcsYmg0KXwwLGxvPWxvK01hdGguaW11bChhbDYsYmw1KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoNSl8MCkrTWF0aC5pbXVsKGFoNixibDUpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDUpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmg2KXwwKStNYXRoLmltdWwoYWg1LGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWw0LGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDcpfDApK01hdGguaW11bChhaDQsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDQsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDMsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWwzLGJoOCl8MCkrTWF0aC5pbXVsKGFoMyxibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoMyxiaDgpfDA7dmFyIHcxMT0oYysobG89bG8rTWF0aC5pbXVsKGFsMixibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDIsYmg5KXwwKStNYXRoLmltdWwoYWgyLGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoMixiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxMT4+PjI2KXwwLHcxMSY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDMpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmgzKSkrTWF0aC5pbXVsKGFoOSxibDMpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDMpLGxvPWxvK01hdGguaW11bChhbDgsYmw0KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoNCl8MCkrTWF0aC5pbXVsKGFoOCxibDQpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDQpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg1KXwwKStNYXRoLmltdWwoYWg3LGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWw2LGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDYpfDApK01hdGguaW11bChhaDYsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDYsYmg2KXwwLGxvPWxvK01hdGguaW11bChhbDUsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw1LGJoNyl8MCkrTWF0aC5pbXVsKGFoNSxibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDcpfDAsbG89bG8rTWF0aC5pbXVsKGFsNCxibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDQsYmg4KXwwKStNYXRoLmltdWwoYWg0LGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWg0LGJoOCl8MDt2YXIgdzEyPShjKyhsbz1sbytNYXRoLmltdWwoYWwzLGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsMyxiaDkpfDApK01hdGguaW11bChhaDMsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWgzLGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzEyPj4+MjYpfDAsdzEyJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsNCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDQpKStNYXRoLmltdWwoYWg5LGJsNCl8MCxoaT1NYXRoLmltdWwoYWg5LGJoNCksbG89bG8rTWF0aC5pbXVsKGFsOCxibDUpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmg1KXwwKStNYXRoLmltdWwoYWg4LGJsNSl8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoNSl8MCxsbz1sbytNYXRoLmltdWwoYWw3LGJsNil8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDYpfDApK01hdGguaW11bChhaDcsYmw2KXwwLGhpPWhpK01hdGguaW11bChhaDcsYmg2KXwwLGxvPWxvK01hdGguaW11bChhbDYsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoNyl8MCkrTWF0aC5pbXVsKGFoNixibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDcpfDAsbG89bG8rTWF0aC5pbXVsKGFsNSxibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmg4KXwwKStNYXRoLmltdWwoYWg1LGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWg1LGJoOCl8MDt2YXIgdzEzPShjKyhsbz1sbytNYXRoLmltdWwoYWw0LGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNCxiaDkpfDApK01hdGguaW11bChhaDQsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWg0LGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzEzPj4+MjYpfDAsdzEzJj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsNSksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDUpKStNYXRoLmltdWwoYWg5LGJsNSl8MCxoaT1NYXRoLmltdWwoYWg5LGJoNSksbG89bG8rTWF0aC5pbXVsKGFsOCxibDYpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmg2KXwwKStNYXRoLmltdWwoYWg4LGJsNil8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoNil8MCxsbz1sbytNYXRoLmltdWwoYWw3LGJsNyl8MCxtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDcpfDApK01hdGguaW11bChhaDcsYmw3KXwwLGhpPWhpK01hdGguaW11bChhaDcsYmg3KXwwLGxvPWxvK01hdGguaW11bChhbDYsYmw4KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw2LGJoOCl8MCkrTWF0aC5pbXVsKGFoNixibDgpfDAsaGk9aGkrTWF0aC5pbXVsKGFoNixiaDgpfDA7dmFyIHcxND0oYysobG89bG8rTWF0aC5pbXVsKGFsNSxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDUsYmg5KXwwKStNYXRoLmltdWwoYWg1LGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoNSxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxND4+PjI2KXwwLHcxNCY9NjcxMDg4NjMsbG89TWF0aC5pbXVsKGFsOSxibDYpLG1pZD0obWlkPU1hdGguaW11bChhbDksYmg2KSkrTWF0aC5pbXVsKGFoOSxibDYpfDAsaGk9TWF0aC5pbXVsKGFoOSxiaDYpLGxvPWxvK01hdGguaW11bChhbDgsYmw3KXwwLG1pZD0obWlkPW1pZCtNYXRoLmltdWwoYWw4LGJoNyl8MCkrTWF0aC5pbXVsKGFoOCxibDcpfDAsaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDcpfDAsbG89bG8rTWF0aC5pbXVsKGFsNyxibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDcsYmg4KXwwKStNYXRoLmltdWwoYWg3LGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWg3LGJoOCl8MDt2YXIgdzE1PShjKyhsbz1sbytNYXRoLmltdWwoYWw2LGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNixiaDkpfDApK01hdGguaW11bChhaDYsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWg2LGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzE1Pj4+MjYpfDAsdzE1Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsNyksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDcpKStNYXRoLmltdWwoYWg5LGJsNyl8MCxoaT1NYXRoLmltdWwoYWg5LGJoNyksbG89bG8rTWF0aC5pbXVsKGFsOCxibDgpfDAsbWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmg4KXwwKStNYXRoLmltdWwoYWg4LGJsOCl8MCxoaT1oaStNYXRoLmltdWwoYWg4LGJoOCl8MDt2YXIgdzE2PShjKyhsbz1sbytNYXRoLmltdWwoYWw3LGJsOSl8MCl8MCkrKCg4MTkxJihtaWQ9KG1pZD1taWQrTWF0aC5pbXVsKGFsNyxiaDkpfDApK01hdGguaW11bChhaDcsYmw5KXwwKSk8PDEzKXwwO2M9KChoaT1oaStNYXRoLmltdWwoYWg3LGJoOSl8MCkrKG1pZD4+PjEzKXwwKSsodzE2Pj4+MjYpfDAsdzE2Jj02NzEwODg2Myxsbz1NYXRoLmltdWwoYWw5LGJsOCksbWlkPShtaWQ9TWF0aC5pbXVsKGFsOSxiaDgpKStNYXRoLmltdWwoYWg5LGJsOCl8MCxoaT1NYXRoLmltdWwoYWg5LGJoOCk7dmFyIHcxNz0oYysobG89bG8rTWF0aC5pbXVsKGFsOCxibDkpfDApfDApKygoODE5MSYobWlkPShtaWQ9bWlkK01hdGguaW11bChhbDgsYmg5KXwwKStNYXRoLmltdWwoYWg4LGJsOSl8MCkpPDwxMyl8MDtjPSgoaGk9aGkrTWF0aC5pbXVsKGFoOCxiaDkpfDApKyhtaWQ+Pj4xMyl8MCkrKHcxNz4+PjI2KXwwLHcxNyY9NjcxMDg4NjM7dmFyIHcxOD0oYysobG89TWF0aC5pbXVsKGFsOSxibDkpKXwwKSsoKDgxOTEmKG1pZD0obWlkPU1hdGguaW11bChhbDksYmg5KSkrTWF0aC5pbXVsKGFoOSxibDkpfDApKTw8MTMpfDA7cmV0dXJuIGM9KChoaT1NYXRoLmltdWwoYWg5LGJoOSkpKyhtaWQ+Pj4xMyl8MCkrKHcxOD4+PjI2KXwwLHcxOCY9NjcxMDg4NjMsb1swXT13MCxvWzFdPXcxLG9bMl09dzIsb1szXT13MyxvWzRdPXc0LG9bNV09dzUsb1s2XT13NixvWzddPXc3LG9bOF09dzgsb1s5XT13OSxvWzEwXT13MTAsb1sxMV09dzExLG9bMTJdPXcxMixvWzEzXT13MTMsb1sxNF09dzE0LG9bMTVdPXcxNSxvWzE2XT13MTYsb1sxN109dzE3LG9bMThdPXcxOCwwIT09YyYmKG9bMTldPWMsb3V0Lmxlbmd0aCsrKSxvdXR9O2Z1bmN0aW9uIGp1bWJvTXVsVG8oc2VsZixudW0sb3V0KXtyZXR1cm4obmV3IEZGVE0pLm11bHAoc2VsZixudW0sb3V0KX1mdW5jdGlvbiBGRlRNKHgseSl7dGhpcy54PXgsdGhpcy55PXl9TWF0aC5pbXVsfHwoY29tYjEwTXVsVG89c21hbGxNdWxUbyksQk4ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uIG11bFRvKG51bSxvdXQpe3ZhciByZXMsbGVuPXRoaXMubGVuZ3RoK251bS5sZW5ndGg7cmV0dXJuIHJlcz0xMD09PXRoaXMubGVuZ3RoJiYxMD09PW51bS5sZW5ndGg/Y29tYjEwTXVsVG8odGhpcyxudW0sb3V0KTpsZW48NjM/c21hbGxNdWxUbyh0aGlzLG51bSxvdXQpOmxlbjwxMDI0P2Z1bmN0aW9uIGJpZ011bFRvKHNlbGYsbnVtLG91dCl7b3V0Lm5lZ2F0aXZlPW51bS5uZWdhdGl2ZV5zZWxmLm5lZ2F0aXZlLG91dC5sZW5ndGg9c2VsZi5sZW5ndGgrbnVtLmxlbmd0aDtmb3IodmFyIGNhcnJ5PTAsaG5jYXJyeT0wLGs9MDtrPG91dC5sZW5ndGgtMTtrKyspe3ZhciBuY2Fycnk9aG5jYXJyeTtobmNhcnJ5PTA7Zm9yKHZhciByd29yZD02NzEwODg2MyZjYXJyeSxtYXhKPU1hdGgubWluKGssbnVtLmxlbmd0aC0xKSxqPU1hdGgubWF4KDAsay1zZWxmLmxlbmd0aCsxKTtqPD1tYXhKO2orKyl7dmFyIGk9ay1qLHI9KDB8c2VsZi53b3Jkc1tpXSkqKDB8bnVtLndvcmRzW2pdKSxsbz02NzEwODg2MyZyO3J3b3JkPTY3MTA4ODYzJihsbz1sbytyd29yZHwwKSxobmNhcnJ5Kz0obmNhcnJ5PShuY2Fycnk9bmNhcnJ5KyhyLzY3MTA4ODY0fDApfDApKyhsbz4+PjI2KXwwKT4+PjI2LG5jYXJyeSY9NjcxMDg4NjN9b3V0LndvcmRzW2tdPXJ3b3JkLGNhcnJ5PW5jYXJyeSxuY2Fycnk9aG5jYXJyeX1yZXR1cm4gMCE9PWNhcnJ5P291dC53b3Jkc1trXT1jYXJyeTpvdXQubGVuZ3RoLS0sb3V0LnN0cmlwKCl9KHRoaXMsbnVtLG91dCk6anVtYm9NdWxUbyh0aGlzLG51bSxvdXQpLHJlc30sRkZUTS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbiBtYWtlUkJUKE4pe2Zvcih2YXIgdD1uZXcgQXJyYXkoTiksbD1CTi5wcm90b3R5cGUuX2NvdW50Qml0cyhOKS0xLGk9MDtpPE47aSsrKXRbaV09dGhpcy5yZXZCaW4oaSxsLE4pO3JldHVybiB0fSxGRlRNLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24gcmV2QmluKHgsbCxOKXtpZigwPT09eHx8eD09PU4tMSlyZXR1cm4geDtmb3IodmFyIHJiPTAsaT0wO2k8bDtpKyspcmJ8PSgxJngpPDxsLWktMSx4Pj49MTtyZXR1cm4gcmJ9LEZGVE0ucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24gcGVybXV0ZShyYnQscndzLGl3cyxydHdzLGl0d3MsTil7Zm9yKHZhciBpPTA7aTxOO2krKylydHdzW2ldPXJ3c1tyYnRbaV1dLGl0d3NbaV09aXdzW3JidFtpXV19LEZGVE0ucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbiB0cmFuc2Zvcm0ocndzLGl3cyxydHdzLGl0d3MsTixyYnQpe3RoaXMucGVybXV0ZShyYnQscndzLGl3cyxydHdzLGl0d3MsTik7Zm9yKHZhciBzPTE7czxOO3M8PD0xKWZvcih2YXIgbD1zPDwxLHJ0d2RmPU1hdGguY29zKDIqTWF0aC5QSS9sKSxpdHdkZj1NYXRoLnNpbigyKk1hdGguUEkvbCkscD0wO3A8TjtwKz1sKWZvcih2YXIgcnR3ZGZfPXJ0d2RmLGl0d2RmXz1pdHdkZixqPTA7ajxzO2orKyl7dmFyIHJlPXJ0d3NbcCtqXSxpZT1pdHdzW3Aral0scm89cnR3c1twK2orc10saW89aXR3c1twK2orc10scng9cnR3ZGZfKnJvLWl0d2RmXyppbztpbz1ydHdkZl8qaW8raXR3ZGZfKnJvLHJvPXJ4LHJ0d3NbcCtqXT1yZStybyxpdHdzW3Aral09aWUraW8scnR3c1twK2orc109cmUtcm8saXR3c1twK2orc109aWUtaW8saiE9PWwmJihyeD1ydHdkZipydHdkZl8taXR3ZGYqaXR3ZGZfLGl0d2RmXz1ydHdkZippdHdkZl8raXR3ZGYqcnR3ZGZfLHJ0d2RmXz1yeCl9fSxGRlRNLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbiBndWVzc0xlbjEzYihuLG0pe3ZhciBOPTF8TWF0aC5tYXgobSxuKSxvZGQ9MSZOLGk9MDtmb3IoTj1OLzJ8MDtOO04+Pj49MSlpKys7cmV0dXJuIDE8PGkrMStvZGR9LEZGVE0ucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbiBjb25qdWdhdGUocndzLGl3cyxOKXtpZighKE48PTEpKWZvcih2YXIgaT0wO2k8Ti8yO2krKyl7dmFyIHQ9cndzW2ldO3J3c1tpXT1yd3NbTi1pLTFdLHJ3c1tOLWktMV09dCx0PWl3c1tpXSxpd3NbaV09LWl3c1tOLWktMV0saXdzW04taS0xXT0tdH19LEZGVE0ucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbiBub3JtYWxpemUxM2Iod3MsTil7Zm9yKHZhciBjYXJyeT0wLGk9MDtpPE4vMjtpKyspe3ZhciB3PTgxOTIqTWF0aC5yb3VuZCh3c1syKmkrMV0vTikrTWF0aC5yb3VuZCh3c1syKmldL04pK2NhcnJ5O3dzW2ldPTY3MTA4ODYzJncsY2Fycnk9dzw2NzEwODg2ND8wOncvNjcxMDg4NjR8MH1yZXR1cm4gd3N9LEZGVE0ucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24gY29udmVydDEzYih3cyxsZW4scndzLE4pe2Zvcih2YXIgY2Fycnk9MCxpPTA7aTxsZW47aSsrKWNhcnJ5Kz0wfHdzW2ldLHJ3c1syKmldPTgxOTEmY2FycnksY2Fycnk+Pj49MTMscndzWzIqaSsxXT04MTkxJmNhcnJ5LGNhcnJ5Pj4+PTEzO2ZvcihpPTIqbGVuO2k8TjsrK2kpcndzW2ldPTA7YXNzZXJ0KDA9PT1jYXJyeSksYXNzZXJ0KCEoLTgxOTImY2FycnkpKX0sRkZUTS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbiBzdHViKE4pe2Zvcih2YXIgcGg9bmV3IEFycmF5KE4pLGk9MDtpPE47aSsrKXBoW2ldPTA7cmV0dXJuIHBofSxGRlRNLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uIG11bHAoeCx5LG91dCl7dmFyIE49Mip0aGlzLmd1ZXNzTGVuMTNiKHgubGVuZ3RoLHkubGVuZ3RoKSxyYnQ9dGhpcy5tYWtlUkJUKE4pLF89dGhpcy5zdHViKE4pLHJ3cz1uZXcgQXJyYXkoTikscndzdD1uZXcgQXJyYXkoTiksaXdzdD1uZXcgQXJyYXkoTiksbnJ3cz1uZXcgQXJyYXkoTiksbnJ3c3Q9bmV3IEFycmF5KE4pLG5pd3N0PW5ldyBBcnJheShOKSxybXdzPW91dC53b3JkcztybXdzLmxlbmd0aD1OLHRoaXMuY29udmVydDEzYih4LndvcmRzLHgubGVuZ3RoLHJ3cyxOKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxucndzLE4pLHRoaXMudHJhbnNmb3JtKHJ3cyxfLHJ3c3QsaXdzdCxOLHJidCksdGhpcy50cmFuc2Zvcm0obnJ3cyxfLG5yd3N0LG5pd3N0LE4scmJ0KTtmb3IodmFyIGk9MDtpPE47aSsrKXt2YXIgcng9cndzdFtpXSpucndzdFtpXS1pd3N0W2ldKm5pd3N0W2ldO2l3c3RbaV09cndzdFtpXSpuaXdzdFtpXStpd3N0W2ldKm5yd3N0W2ldLHJ3c3RbaV09cnh9cmV0dXJuIHRoaXMuY29uanVnYXRlKHJ3c3QsaXdzdCxOKSx0aGlzLnRyYW5zZm9ybShyd3N0LGl3c3Qscm13cyxfLE4scmJ0KSx0aGlzLmNvbmp1Z2F0ZShybXdzLF8sTiksdGhpcy5ub3JtYWxpemUxM2Iocm13cyxOKSxvdXQubmVnYXRpdmU9eC5uZWdhdGl2ZV55Lm5lZ2F0aXZlLG91dC5sZW5ndGg9eC5sZW5ndGgreS5sZW5ndGgsb3V0LnN0cmlwKCl9LEJOLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24gbXVsKG51bSl7dmFyIG91dD1uZXcgQk4obnVsbCk7cmV0dXJuIG91dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrbnVtLmxlbmd0aCksdGhpcy5tdWxUbyhudW0sb3V0KX0sQk4ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24gbXVsZihudW0pe3ZhciBvdXQ9bmV3IEJOKG51bGwpO3JldHVybiBvdXQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK251bS5sZW5ndGgpLGp1bWJvTXVsVG8odGhpcyxudW0sb3V0KX0sQk4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24gaW11bChudW0pe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8obnVtLHRoaXMpfSxCTi5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24gaW11bG4obnVtKXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBudW0pLGFzc2VydChudW08NjcxMDg4NjQpO2Zvcih2YXIgY2Fycnk9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciB3PSgwfHRoaXMud29yZHNbaV0pKm51bSxsbz0oNjcxMDg4NjMmdykrKDY3MTA4ODYzJmNhcnJ5KTtjYXJyeT4+PTI2LGNhcnJ5Kz13LzY3MTA4ODY0fDAsY2FycnkrPWxvPj4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZsb31yZXR1cm4gMCE9PWNhcnJ5JiYodGhpcy53b3Jkc1tpXT1jYXJyeSx0aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09bnVtPzE6dGhpcy5sZW5ndGgsdGhpc30sQk4ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24gbXVsbihudW0pe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4obnVtKX0sQk4ucHJvdG90eXBlLnNxcj1mdW5jdGlvbiBzcXIoKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LEJOLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uIGlzcXIoKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEJOLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24gcG93KG51bSl7dmFyIHc9ZnVuY3Rpb24gdG9CaXRBcnJheShudW0pe2Zvcih2YXIgdz1uZXcgQXJyYXkobnVtLmJpdExlbmd0aCgpKSxiaXQ9MDtiaXQ8dy5sZW5ndGg7Yml0Kyspe3ZhciBvZmY9Yml0LzI2fDAsd2JpdD1iaXQlMjY7d1tiaXRdPShudW0ud29yZHNbb2ZmXSYxPDx3Yml0KT4+PndiaXR9cmV0dXJuIHd9KG51bSk7aWYoMD09PXcubGVuZ3RoKXJldHVybiBuZXcgQk4oMSk7Zm9yKHZhciByZXM9dGhpcyxpPTA7aTx3Lmxlbmd0aCYmMD09PXdbaV07aSsrLHJlcz1yZXMuc3FyKCkpO2lmKCsraTx3Lmxlbmd0aClmb3IodmFyIHE9cmVzLnNxcigpO2k8dy5sZW5ndGg7aSsrLHE9cS5zcXIoKSkwIT09d1tpXSYmKHJlcz1yZXMubXVsKHEpKTtyZXR1cm4gcmVzfSxCTi5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uIGl1c2hsbihiaXRzKXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXRzJiZiaXRzPj0wKTt2YXIgaSxyPWJpdHMlMjYscz0oYml0cy1yKS8yNixjYXJyeU1hc2s9NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgY2Fycnk9MDtmb3IoaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgbmV3Q2Fycnk9dGhpcy53b3Jkc1tpXSZjYXJyeU1hc2ssYz0oMHx0aGlzLndvcmRzW2ldKS1uZXdDYXJyeTw8cjt0aGlzLndvcmRzW2ldPWN8Y2FycnksY2Fycnk9bmV3Q2Fycnk+Pj4yNi1yfWNhcnJ5JiYodGhpcy53b3Jkc1tpXT1jYXJyeSx0aGlzLmxlbmd0aCsrKX1pZigwIT09cyl7Zm9yKGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSl0aGlzLndvcmRzW2krc109dGhpcy53b3Jkc1tpXTtmb3IoaT0wO2k8cztpKyspdGhpcy53b3Jkc1tpXT0wO3RoaXMubGVuZ3RoKz1zfXJldHVybiB0aGlzLnN0cmlwKCl9LEJOLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbiBpc2hsbihiaXRzKXtyZXR1cm4gYXNzZXJ0KDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihiaXRzKX0sQk4ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbiBpdXNocm4oYml0cyxoaW50LGV4dGVuZGVkKXt2YXIgaDthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXRzJiZiaXRzPj0wKSxoPWhpbnQ/KGhpbnQtaGludCUyNikvMjY6MDt2YXIgcj1iaXRzJTI2LHM9TWF0aC5taW4oKGJpdHMtcikvMjYsdGhpcy5sZW5ndGgpLG1hc2s9NjcxMDg4NjNeNjcxMDg4NjM+Pj5yPDxyLG1hc2tlZFdvcmRzPWV4dGVuZGVkO2lmKGgtPXMsaD1NYXRoLm1heCgwLGgpLG1hc2tlZFdvcmRzKXtmb3IodmFyIGk9MDtpPHM7aSsrKW1hc2tlZFdvcmRzLndvcmRzW2ldPXRoaXMud29yZHNbaV07bWFza2VkV29yZHMubGVuZ3RoPXN9aWYoMD09PXMpO2Vsc2UgaWYodGhpcy5sZW5ndGg+cylmb3IodGhpcy5sZW5ndGgtPXMsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09dGhpcy53b3Jkc1tpK3NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGNhcnJ5PTA7Zm9yKGk9dGhpcy5sZW5ndGgtMTtpPj0wJiYoMCE9PWNhcnJ5fHxpPj1oKTtpLS0pe3ZhciB3b3JkPTB8dGhpcy53b3Jkc1tpXTt0aGlzLndvcmRzW2ldPWNhcnJ5PDwyNi1yfHdvcmQ+Pj5yLGNhcnJ5PXdvcmQmbWFza31yZXR1cm4gbWFza2VkV29yZHMmJjAhPT1jYXJyeSYmKG1hc2tlZFdvcmRzLndvcmRzW21hc2tlZFdvcmRzLmxlbmd0aCsrXT1jYXJyeSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uIGlzaHJuKGJpdHMsaGludCxleHRlbmRlZCl7cmV0dXJuIGFzc2VydCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oYml0cyxoaW50LGV4dGVuZGVkKX0sQk4ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24gc2hsbihiaXRzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGJpdHMpfSxCTi5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24gdXNobG4oYml0cyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYml0cyl9LEJOLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uIHNocm4oYml0cyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiaXRzKX0sQk4ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uIHVzaHJuKGJpdHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGJpdHMpfSxCTi5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24gdGVzdG4oYml0KXthc3NlcnQoIm51bWJlciI9PXR5cGVvZiBiaXQmJmJpdD49MCk7dmFyIHI9Yml0JTI2LHM9KGJpdC1yKS8yNixxPTE8PHI7cmV0dXJuISh0aGlzLmxlbmd0aDw9cykmJiEhKHRoaXMud29yZHNbc10mcSl9LEJOLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24gaW1hc2tuKGJpdHMpe2Fzc2VydCgibnVtYmVyIj09dHlwZW9mIGJpdHMmJmJpdHM+PTApO3ZhciByPWJpdHMlMjYscz0oYml0cy1yKS8yNjtpZihhc3NlcnQoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1zKXJldHVybiB0aGlzO2lmKDAhPT1yJiZzKyssdGhpcy5sZW5ndGg9TWF0aC5taW4ocyx0aGlzLmxlbmd0aCksMCE9PXIpe3ZhciBtYXNrPTY3MTA4ODYzXjY3MTA4ODYzPj4+cjw8cjt0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj1tYXNrfXJldHVybiAwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUubWFza249ZnVuY3Rpb24gbWFza24oYml0cyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYml0cyl9LEJOLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbiBpYWRkbihudW0pe3JldHVybiBhc3NlcnQoIm51bWJlciI9PXR5cGVvZiBudW0pLGFzc2VydChudW08NjcxMDg4NjQpLG51bTwwP3RoaXMuaXN1Ym4oLW51bSk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxudW0/KHRoaXMud29yZHNbMF09bnVtLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4obnVtKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4obnVtKX0sQk4ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbiBfaWFkZG4obnVtKXt0aGlzLndvcmRzWzBdKz1udW07Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tpXT49NjcxMDg4NjQ7aSsrKXRoaXMud29yZHNbaV0tPTY3MTA4ODY0LGk9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbaSsxXT0xOnRoaXMud29yZHNbaSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxpKzEpLHRoaXN9LEJOLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbiBpc3VibihudW0pe2lmKGFzc2VydCgibnVtYmVyIj09dHlwZW9mIG51bSksYXNzZXJ0KG51bTw2NzEwODg2NCksbnVtPDApcmV0dXJuIHRoaXMuaWFkZG4oLW51bSk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKG51bSksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09bnVtLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tpXTwwO2krKyl0aGlzLndvcmRzW2ldKz02NzEwODg2NCx0aGlzLndvcmRzW2krMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24gYWRkbihudW0pe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4obnVtKX0sQk4ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24gc3VibihudW0pe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4obnVtKX0sQk4ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24gaWFicygpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sQk4ucHJvdG90eXBlLmFicz1mdW5jdGlvbiBhYnMoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sQk4ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbiBfaXNobG5zdWJtdWwobnVtLG11bCxzaGlmdCl7dmFyIGksdyxsZW49bnVtLmxlbmd0aCtzaGlmdDt0aGlzLl9leHBhbmQobGVuKTt2YXIgY2Fycnk9MDtmb3IoaT0wO2k8bnVtLmxlbmd0aDtpKyspe3c9KDB8dGhpcy53b3Jkc1tpK3NoaWZ0XSkrY2Fycnk7dmFyIHJpZ2h0PSgwfG51bS53b3Jkc1tpXSkqbXVsO2NhcnJ5PSgody09NjcxMDg4NjMmcmlnaHQpPj4yNiktKHJpZ2h0LzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStzaGlmdF09NjcxMDg4NjMmd31mb3IoO2k8dGhpcy5sZW5ndGgtc2hpZnQ7aSsrKWNhcnJ5PSh3PSgwfHRoaXMud29yZHNbaStzaGlmdF0pK2NhcnJ5KT4+MjYsdGhpcy53b3Jkc1tpK3NoaWZ0XT02NzEwODg2MyZ3O2lmKDA9PT1jYXJyeSlyZXR1cm4gdGhpcy5zdHJpcCgpO2Zvcihhc3NlcnQoLTE9PT1jYXJyeSksY2Fycnk9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspY2Fycnk9KHc9LSgwfHRoaXMud29yZHNbaV0pK2NhcnJ5KT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ3O3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxCTi5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24gX3dvcmREaXYobnVtLG1vZGUpe3ZhciBzaGlmdD0odGhpcy5sZW5ndGgsbnVtLmxlbmd0aCksYT10aGlzLmNsb25lKCksYj1udW0sYmhpPTB8Yi53b3Jkc1tiLmxlbmd0aC0xXTswIT09KHNoaWZ0PTI2LXRoaXMuX2NvdW50Qml0cyhiaGkpKSYmKGI9Yi51c2hsbihzaGlmdCksYS5pdXNobG4oc2hpZnQpLGJoaT0wfGIud29yZHNbYi5sZW5ndGgtMV0pO3ZhciBxLG09YS5sZW5ndGgtYi5sZW5ndGg7aWYoIm1vZCIhPT1tb2RlKXsocT1uZXcgQk4obnVsbCkpLmxlbmd0aD1tKzEscS53b3Jkcz1uZXcgQXJyYXkocS5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8cS5sZW5ndGg7aSsrKXEud29yZHNbaV09MH12YXIgZGlmZj1hLmNsb25lKCkuX2lzaGxuc3VibXVsKGIsMSxtKTswPT09ZGlmZi5uZWdhdGl2ZSYmKGE9ZGlmZixxJiYocS53b3Jkc1ttXT0xKSk7Zm9yKHZhciBqPW0tMTtqPj0wO2otLSl7dmFyIHFqPTY3MTA4ODY0KigwfGEud29yZHNbYi5sZW5ndGgral0pKygwfGEud29yZHNbYi5sZW5ndGgrai0xXSk7Zm9yKHFqPU1hdGgubWluKHFqL2JoaXwwLDY3MTA4ODYzKSxhLl9pc2hsbnN1Ym11bChiLHFqLGopOzAhPT1hLm5lZ2F0aXZlOylxai0tLGEubmVnYXRpdmU9MCxhLl9pc2hsbnN1Ym11bChiLDEsaiksYS5pc1plcm8oKXx8KGEubmVnYXRpdmVePTEpO3EmJihxLndvcmRzW2pdPXFqKX1yZXR1cm4gcSYmcS5zdHJpcCgpLGEuc3RyaXAoKSwiZGl2IiE9PW1vZGUmJjAhPT1zaGlmdCYmYS5pdXNocm4oc2hpZnQpLHtkaXY6cXx8bnVsbCxtb2Q6YX19LEJOLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24gZGl2bW9kKG51bSxtb2RlLHBvc2l0aXZlKXtyZXR1cm4gYXNzZXJ0KCFudW0uaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgQk4oMCksbW9kOm5ldyBCTigwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1udW0ubmVnYXRpdmU/KHJlcz10aGlzLm5lZygpLmRpdm1vZChudW0sbW9kZSksIm1vZCIhPT1tb2RlJiYoZGl2PXJlcy5kaXYubmVnKCkpLCJkaXYiIT09bW9kZSYmKG1vZD1yZXMubW9kLm5lZygpLHBvc2l0aXZlJiYwIT09bW9kLm5lZ2F0aXZlJiZtb2QuaWFkZChudW0pKSx7ZGl2LG1vZH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09bnVtLm5lZ2F0aXZlPyhyZXM9dGhpcy5kaXZtb2QobnVtLm5lZygpLG1vZGUpLCJtb2QiIT09bW9kZSYmKGRpdj1yZXMuZGl2Lm5lZygpKSx7ZGl2LG1vZDpyZXMubW9kfSk6MCE9PSh0aGlzLm5lZ2F0aXZlJm51bS5uZWdhdGl2ZSk/KHJlcz10aGlzLm5lZygpLmRpdm1vZChudW0ubmVnKCksbW9kZSksImRpdiIhPT1tb2RlJiYobW9kPXJlcy5tb2QubmVnKCkscG9zaXRpdmUmJjAhPT1tb2QubmVnYXRpdmUmJm1vZC5pc3ViKG51bSkpLHtkaXY6cmVzLmRpdixtb2R9KTpudW0ubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChudW0pPDA/e2RpdjpuZXcgQk4oMCksbW9kOnRoaXN9OjE9PT1udW0ubGVuZ3RoPyJkaXYiPT09bW9kZT97ZGl2OnRoaXMuZGl2bihudW0ud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PW1vZGU/e2RpdjpudWxsLG1vZDpuZXcgQk4odGhpcy5tb2RuKG51bS53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihudW0ud29yZHNbMF0pLG1vZDpuZXcgQk4odGhpcy5tb2RuKG51bS53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KG51bSxtb2RlKTt2YXIgZGl2LG1vZCxyZXN9LEJOLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24gZGl2KG51bSl7cmV0dXJuIHRoaXMuZGl2bW9kKG51bSwiZGl2IiwhMSkuZGl2fSxCTi5wcm90b3R5cGUubW9kPWZ1bmN0aW9uIG1vZChudW0pe3JldHVybiB0aGlzLmRpdm1vZChudW0sIm1vZCIsITEpLm1vZH0sQk4ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24gdW1vZChudW0pe3JldHVybiB0aGlzLmRpdm1vZChudW0sIm1vZCIsITApLm1vZH0sQk4ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uIGRpdlJvdW5kKG51bSl7dmFyIGRtPXRoaXMuZGl2bW9kKG51bSk7aWYoZG0ubW9kLmlzWmVybygpKXJldHVybiBkbS5kaXY7dmFyIG1vZD0wIT09ZG0uZGl2Lm5lZ2F0aXZlP2RtLm1vZC5pc3ViKG51bSk6ZG0ubW9kLGhhbGY9bnVtLnVzaHJuKDEpLHIyPW51bS5hbmRsbigxKSxjbXA9bW9kLmNtcChoYWxmKTtyZXR1cm4gY21wPDB8fDE9PT1yMiYmMD09PWNtcD9kbS5kaXY6MCE9PWRtLmRpdi5uZWdhdGl2ZT9kbS5kaXYuaXN1Ym4oMSk6ZG0uZGl2LmlhZGRuKDEpfSxCTi5wcm90b3R5cGUubW9kbj1mdW5jdGlvbiBtb2RuKG51bSl7YXNzZXJ0KG51bTw9NjcxMDg4NjMpO2Zvcih2YXIgcD0oMTw8MjYpJW51bSxhY2M9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pYWNjPShwKmFjYysoMHx0aGlzLndvcmRzW2ldKSklbnVtO3JldHVybiBhY2N9LEJOLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbiBpZGl2bihudW0pe2Fzc2VydChudW08PTY3MTA4ODYzKTtmb3IodmFyIGNhcnJ5PTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgdz0oMHx0aGlzLndvcmRzW2ldKSs2NzEwODg2NCpjYXJyeTt0aGlzLndvcmRzW2ldPXcvbnVtfDAsY2Fycnk9dyVudW19cmV0dXJuIHRoaXMuc3RyaXAoKX0sQk4ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24gZGl2bihudW0pe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4obnVtKX0sQk4ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24gZWdjZChwKXthc3NlcnQoMD09PXAubmVnYXRpdmUpLGFzc2VydCghcC5pc1plcm8oKSk7dmFyIHg9dGhpcyx5PXAuY2xvbmUoKTt4PTAhPT14Lm5lZ2F0aXZlP3gudW1vZChwKTp4LmNsb25lKCk7Zm9yKHZhciBBPW5ldyBCTigxKSxCPW5ldyBCTigwKSxDPW5ldyBCTigwKSxEPW5ldyBCTigxKSxnPTA7eC5pc0V2ZW4oKSYmeS5pc0V2ZW4oKTspeC5pdXNocm4oMSkseS5pdXNocm4oMSksKytnO2Zvcih2YXIgeXA9eS5jbG9uZSgpLHhwPXguY2xvbmUoKTsheC5pc1plcm8oKTspe2Zvcih2YXIgaT0wLGltPTE7MD09PSh4LndvcmRzWzBdJmltKSYmaTwyNjsrK2ksaW08PD0xKTtpZihpPjApZm9yKHguaXVzaHJuKGkpO2ktLSA+MDspKEEuaXNPZGQoKXx8Qi5pc09kZCgpKSYmKEEuaWFkZCh5cCksQi5pc3ViKHhwKSksQS5pdXNocm4oMSksQi5pdXNocm4oMSk7Zm9yKHZhciBqPTAsam09MTswPT09KHkud29yZHNbMF0mam0pJiZqPDI2OysraixqbTw8PTEpO2lmKGo+MClmb3IoeS5pdXNocm4oaik7ai0tID4wOykoQy5pc09kZCgpfHxELmlzT2RkKCkpJiYoQy5pYWRkKHlwKSxELmlzdWIoeHApKSxDLml1c2hybigxKSxELml1c2hybigxKTt4LmNtcCh5KT49MD8oeC5pc3ViKHkpLEEuaXN1YihDKSxCLmlzdWIoRCkpOih5LmlzdWIoeCksQy5pc3ViKEEpLEQuaXN1YihCKSl9cmV0dXJue2E6QyxiOkQsZ2NkOnkuaXVzaGxuKGcpfX0sQk4ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbiBfaW52bXAocCl7YXNzZXJ0KDA9PT1wLm5lZ2F0aXZlKSxhc3NlcnQoIXAuaXNaZXJvKCkpO3ZhciBhPXRoaXMsYj1wLmNsb25lKCk7YT0wIT09YS5uZWdhdGl2ZT9hLnVtb2QocCk6YS5jbG9uZSgpO2Zvcih2YXIgcmVzLHgxPW5ldyBCTigxKSx4Mj1uZXcgQk4oMCksZGVsdGE9Yi5jbG9uZSgpO2EuY21wbigxKT4wJiZiLmNtcG4oMSk+MDspe2Zvcih2YXIgaT0wLGltPTE7MD09PShhLndvcmRzWzBdJmltKSYmaTwyNjsrK2ksaW08PD0xKTtpZihpPjApZm9yKGEuaXVzaHJuKGkpO2ktLSA+MDspeDEuaXNPZGQoKSYmeDEuaWFkZChkZWx0YSkseDEuaXVzaHJuKDEpO2Zvcih2YXIgaj0wLGptPTE7MD09PShiLndvcmRzWzBdJmptKSYmajwyNjsrK2osam08PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspeDIuaXNPZGQoKSYmeDIuaWFkZChkZWx0YSkseDIuaXVzaHJuKDEpO2EuY21wKGIpPj0wPyhhLmlzdWIoYikseDEuaXN1Yih4MikpOihiLmlzdWIoYSkseDIuaXN1Yih4MSkpfXJldHVybihyZXM9MD09PWEuY21wbigxKT94MTp4MikuY21wbigwKTwwJiZyZXMuaWFkZChwKSxyZXN9LEJOLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24gZ2NkKG51bSl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gbnVtLmFicygpO2lmKG51bS5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYT10aGlzLmNsb25lKCksYj1udW0uY2xvbmUoKTthLm5lZ2F0aXZlPTAsYi5uZWdhdGl2ZT0wO2Zvcih2YXIgc2hpZnQ9MDthLmlzRXZlbigpJiZiLmlzRXZlbigpO3NoaWZ0KyspYS5pdXNocm4oMSksYi5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2EuaXNFdmVuKCk7KWEuaXVzaHJuKDEpO2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7dmFyIHI9YS5jbXAoYik7aWYocjwwKXt2YXIgdD1hO2E9YixiPXR9ZWxzZSBpZigwPT09cnx8MD09PWIuY21wbigxKSlicmVhazthLmlzdWIoYil9cmV0dXJuIGIuaXVzaGxuKHNoaWZ0KX0sQk4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24gaW52bShudW0pe3JldHVybiB0aGlzLmVnY2QobnVtKS5hLnVtb2QobnVtKX0sQk4ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbiBpc0V2ZW4oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LEJOLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbiBpc09kZCgpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LEJOLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbiBhbmRsbihudW0pe3JldHVybiB0aGlzLndvcmRzWzBdJm51bX0sQk4ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uIGJpbmNuKGJpdCl7YXNzZXJ0KCJudW1iZXIiPT10eXBlb2YgYml0KTt2YXIgcj1iaXQlMjYscz0oYml0LXIpLzI2LHE9MTw8cjtpZih0aGlzLmxlbmd0aDw9cylyZXR1cm4gdGhpcy5fZXhwYW5kKHMrMSksdGhpcy53b3Jkc1tzXXw9cSx0aGlzO2Zvcih2YXIgY2Fycnk9cSxpPXM7MCE9PWNhcnJ5JiZpPHRoaXMubGVuZ3RoO2krKyl7dmFyIHc9MHx0aGlzLndvcmRzW2ldO2NhcnJ5PSh3Kz1jYXJyeSk+Pj4yNix3Jj02NzEwODg2Myx0aGlzLndvcmRzW2ldPXd9cmV0dXJuIDAhPT1jYXJyeSYmKHRoaXMud29yZHNbaV09Y2FycnksdGhpcy5sZW5ndGgrKyksdGhpc30sQk4ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbiBpc1plcm8oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sQk4ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24gY21wbihudW0pe3ZhciByZXMsbmVnYXRpdmU9bnVtPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFuZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmbmVnYXRpdmUpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpcmVzPTE7ZWxzZXtuZWdhdGl2ZSYmKG51bT0tbnVtKSxhc3NlcnQobnVtPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgdz0wfHRoaXMud29yZHNbMF07cmVzPXc9PT1udW0/MDp3PG51bT8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1yZXM6cmVzfSxCTi5wcm90b3R5cGUuY21wPWZ1bmN0aW9uIGNtcChudW0pe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09bnVtLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09bnVtLm5lZ2F0aXZlKXJldHVybiAxO3ZhciByZXM9dGhpcy51Y21wKG51bSk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXJlczpyZXN9LEJOLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uIHVjbXAobnVtKXtpZih0aGlzLmxlbmd0aD5udW0ubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPG51bS5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciByZXM9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBhPTB8dGhpcy53b3Jkc1tpXSxiPTB8bnVtLndvcmRzW2ldO2lmKGEhPT1iKXthPGI/cmVzPS0xOmE+YiYmKHJlcz0xKTticmVha319cmV0dXJuIHJlc30sQk4ucHJvdG90eXBlLmd0bj1mdW5jdGlvbiBndG4obnVtKXtyZXR1cm4gMT09PXRoaXMuY21wbihudW0pfSxCTi5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24gZ3QobnVtKXtyZXR1cm4gMT09PXRoaXMuY21wKG51bSl9LEJOLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uIGd0ZW4obnVtKXtyZXR1cm4gdGhpcy5jbXBuKG51bSk+PTB9LEJOLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24gZ3RlKG51bSl7cmV0dXJuIHRoaXMuY21wKG51bSk+PTB9LEJOLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24gbHRuKG51bSl7cmV0dXJuLTE9PT10aGlzLmNtcG4obnVtKX0sQk4ucHJvdG90eXBlLmx0PWZ1bmN0aW9uIGx0KG51bSl7cmV0dXJuLTE9PT10aGlzLmNtcChudW0pfSxCTi5wcm90b3R5cGUubHRlbj1mdW5jdGlvbiBsdGVuKG51bSl7cmV0dXJuIHRoaXMuY21wbihudW0pPD0wfSxCTi5wcm90b3R5cGUubHRlPWZ1bmN0aW9uIGx0ZShudW0pe3JldHVybiB0aGlzLmNtcChudW0pPD0wfSxCTi5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uIGVxbihudW0pe3JldHVybiAwPT09dGhpcy5jbXBuKG51bSl9LEJOLnByb3RvdHlwZS5lcT1mdW5jdGlvbiBlcShudW0pe3JldHVybiAwPT09dGhpcy5jbXAobnVtKX0sQk4ucmVkPWZ1bmN0aW9uIHJlZChudW0pe3JldHVybiBuZXcgUmVkKG51bSl9LEJOLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbiB0b1JlZChjdHgpe3JldHVybiBhc3NlcnQoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksYXNzZXJ0KDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGN0eC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGN0eCl9LEJOLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uIGZyb21SZWQoKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEJOLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24gX2ZvcmNlUmVkKGN0eCl7cmV0dXJuIHRoaXMucmVkPWN0eCx0aGlzfSxCTi5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24gZm9yY2VSZWQoY3R4KXtyZXR1cm4gYXNzZXJ0KCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGN0eCl9LEJOLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24gcmVkQWRkKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uIHJlZElBZGQobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uIHJlZFN1YihudW0pe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbiByZWRJU3ViKG51bSl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbiByZWRTaGwobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsbnVtKX0sQk4ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbiByZWRNdWwobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxudW0pLHRoaXMucmVkLm11bCh0aGlzLG51bSl9LEJOLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uIHJlZElNdWwobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxudW0pLHRoaXMucmVkLmltdWwodGhpcyxudW0pfSxCTi5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uIHJlZFNxcigpe3JldHVybiBhc3NlcnQodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEJOLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uIHJlZElTcXIoKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEJOLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uIHJlZFNxcnQoKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LEJOLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uIHJlZEludm0oKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEJOLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24gcmVkTmVnKCl7cmV0dXJuIGFzc2VydCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sQk4ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbiByZWRQb3cobnVtKXtyZXR1cm4gYXNzZXJ0KHRoaXMucmVkJiYhbnVtLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxudW0pfTt2YXIgcHJpbWVzPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gTVByaW1lKG5hbWUscCl7dGhpcy5uYW1lPW5hbWUsdGhpcy5wPW5ldyBCTihwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgQk4oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIEsyNTYoKXtNUHJpbWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBQMjI0KCl7TVByaW1lLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gUDE5Migpe01QcmltZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFAyNTUxOSgpe01QcmltZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFJlZChtKXtpZigic3RyaW5nIj09dHlwZW9mIG0pe3ZhciBwcmltZT1CTi5fcHJpbWUobSk7dGhpcy5tPXByaW1lLnAsdGhpcy5wcmltZT1wcmltZX1lbHNlIGFzc2VydChtLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPW0sdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIE1vbnQobSl7UmVkLmNhbGwodGhpcyxtKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBCTigxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1NUHJpbWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24gX3RtcCgpe3ZhciB0bXA9bmV3IEJOKG51bGwpO3JldHVybiB0bXAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0bXB9LE1QcmltZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbiBpcmVkdWNlKG51bSl7dmFyIHJsZW4scj1udW07ZG97dGhpcy5zcGxpdChyLHRoaXMudG1wKSxybGVuPShyPShyPXRoaXMuaW11bEsocikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShybGVuPnRoaXMubik7dmFyIGNtcD1ybGVuPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PWNtcD8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOmNtcD4wP3IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXIuc3RyaXA/ci5zdHJpcCgpOnIuX3N0cmlwKCkscn0sTVByaW1lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbiBzcGxpdChpbnB1dCxvdXQpe2lucHV0Lml1c2hybih0aGlzLm4sMCxvdXQpfSxNUHJpbWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uIGltdWxLKG51bSl7cmV0dXJuIG51bS5pbXVsKHRoaXMuayl9LGluaGVyaXRzKEsyNTYsTVByaW1lKSxLMjU2LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbiBzcGxpdChpbnB1dCxvdXRwdXQpe2Zvcih2YXIgb3V0TGVuPU1hdGgubWluKGlucHV0Lmxlbmd0aCw5KSxpPTA7aTxvdXRMZW47aSsrKW91dHB1dC53b3Jkc1tpXT1pbnB1dC53b3Jkc1tpXTtpZihvdXRwdXQubGVuZ3RoPW91dExlbixpbnB1dC5sZW5ndGg8PTkpcmV0dXJuIGlucHV0LndvcmRzWzBdPTAsdm9pZChpbnB1dC5sZW5ndGg9MSk7dmFyIHByZXY9aW5wdXQud29yZHNbOV07Zm9yKG91dHB1dC53b3Jkc1tvdXRwdXQubGVuZ3RoKytdPTQxOTQzMDMmcHJldixpPTEwO2k8aW5wdXQubGVuZ3RoO2krKyl7dmFyIG5leHQ9MHxpbnB1dC53b3Jkc1tpXTtpbnB1dC53b3Jkc1tpLTEwXT0oNDE5NDMwMyZuZXh0KTw8NHxwcmV2Pj4+MjIscHJldj1uZXh0fXByZXY+Pj49MjIsaW5wdXQud29yZHNbaS0xMF09cHJldiwwPT09cHJldiYmaW5wdXQubGVuZ3RoPjEwP2lucHV0Lmxlbmd0aC09MTA6aW5wdXQubGVuZ3RoLT05fSxLMjU2LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbiBpbXVsSyhudW0pe251bS53b3Jkc1tudW0ubGVuZ3RoXT0wLG51bS53b3Jkc1tudW0ubGVuZ3RoKzFdPTAsbnVtLmxlbmd0aCs9Mjtmb3IodmFyIGxvPTAsaT0wO2k8bnVtLmxlbmd0aDtpKyspe3ZhciB3PTB8bnVtLndvcmRzW2ldO2xvKz05NzcqdyxudW0ud29yZHNbaV09NjcxMDg4NjMmbG8sbG89NjQqdysobG8vNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1udW0ud29yZHNbbnVtLmxlbmd0aC0xXSYmKG51bS5sZW5ndGgtLSwwPT09bnVtLndvcmRzW251bS5sZW5ndGgtMV0mJm51bS5sZW5ndGgtLSksbnVtfSxpbmhlcml0cyhQMjI0LE1QcmltZSksaW5oZXJpdHMoUDE5MixNUHJpbWUpLGluaGVyaXRzKFAyNTUxOSxNUHJpbWUpLFAyNTUxOS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24gaW11bEsobnVtKXtmb3IodmFyIGNhcnJ5PTAsaT0wO2k8bnVtLmxlbmd0aDtpKyspe3ZhciBoaT0xOSooMHxudW0ud29yZHNbaV0pK2NhcnJ5LGxvPTY3MTA4ODYzJmhpO2hpPj4+PTI2LG51bS53b3Jkc1tpXT1sbyxjYXJyeT1oaX1yZXR1cm4gMCE9PWNhcnJ5JiYobnVtLndvcmRzW251bS5sZW5ndGgrK109Y2FycnkpLG51bX0sQk4uX3ByaW1lPWZ1bmN0aW9uIHByaW1lKG5hbWUpe2lmKHByaW1lc1tuYW1lXSlyZXR1cm4gcHJpbWVzW25hbWVdO3ZhciBwcmltZTtpZigiazI1NiI9PT1uYW1lKXByaW1lPW5ldyBLMjU2O2Vsc2UgaWYoInAyMjQiPT09bmFtZSlwcmltZT1uZXcgUDIyNDtlbHNlIGlmKCJwMTkyIj09PW5hbWUpcHJpbWU9bmV3IFAxOTI7ZWxzZXtpZigicDI1NTE5IiE9PW5hbWUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrbmFtZSk7cHJpbWU9bmV3IFAyNTUxOX1yZXR1cm4gcHJpbWVzW25hbWVdPXByaW1lLHByaW1lfSxSZWQucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uIF92ZXJpZnkxKGEpe2Fzc2VydCgwPT09YS5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxhc3NlcnQoYS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sUmVkLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbiBfdmVyaWZ5MihhLGIpe2Fzc2VydCgwPT09KGEubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYXNzZXJ0KGEucmVkJiZhLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFJlZC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbiBpbW9kKGEpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShhKS5fZm9yY2VSZWQodGhpcyk6YS51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxSZWQucHJvdG90eXBlLm5lZz1mdW5jdGlvbiBuZWcoYSl7cmV0dXJuIGEuaXNaZXJvKCk/YS5jbG9uZSgpOnRoaXMubS5zdWIoYSkuX2ZvcmNlUmVkKHRoaXMpfSxSZWQucHJvdG90eXBlLmFkZD1mdW5jdGlvbiBhZGQoYSxiKXt0aGlzLl92ZXJpZnkyKGEsYik7dmFyIHJlcz1hLmFkZChiKTtyZXR1cm4gcmVzLmNtcCh0aGlzLm0pPj0wJiZyZXMuaXN1Yih0aGlzLm0pLHJlcy5fZm9yY2VSZWQodGhpcyl9LFJlZC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbiBpYWRkKGEsYil7dGhpcy5fdmVyaWZ5MihhLGIpO3ZhciByZXM9YS5pYWRkKGIpO3JldHVybiByZXMuY21wKHRoaXMubSk+PTAmJnJlcy5pc3ViKHRoaXMubSkscmVzfSxSZWQucHJvdG90eXBlLnN1Yj1mdW5jdGlvbiBzdWIoYSxiKXt0aGlzLl92ZXJpZnkyKGEsYik7dmFyIHJlcz1hLnN1YihiKTtyZXR1cm4gcmVzLmNtcG4oMCk8MCYmcmVzLmlhZGQodGhpcy5tKSxyZXMuX2ZvcmNlUmVkKHRoaXMpfSxSZWQucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24gaXN1YihhLGIpe3RoaXMuX3ZlcmlmeTIoYSxiKTt2YXIgcmVzPWEuaXN1YihiKTtyZXR1cm4gcmVzLmNtcG4oMCk8MCYmcmVzLmlhZGQodGhpcy5tKSxyZXN9LFJlZC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uIHNobChhLG51bSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoYSksdGhpcy5pbW9kKGEudXNobG4obnVtKSl9LFJlZC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbiBpbXVsKGEsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYSxiKSx0aGlzLmltb2QoYS5pbXVsKGIpKX0sUmVkLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24gbXVsKGEsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYSxiKSx0aGlzLmltb2QoYS5tdWwoYikpfSxSZWQucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24gaXNxcihhKXtyZXR1cm4gdGhpcy5pbXVsKGEsYS5jbG9uZSgpKX0sUmVkLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24gc3FyKGEpe3JldHVybiB0aGlzLm11bChhLGEpfSxSZWQucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24gc3FydChhKXtpZihhLmlzWmVybygpKXJldHVybiBhLmNsb25lKCk7dmFyIG1vZDM9dGhpcy5tLmFuZGxuKDMpO2lmKGFzc2VydChtb2QzJTI9PTEpLDM9PT1tb2QzKXt2YXIgcG93PXRoaXMubS5hZGQobmV3IEJOKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGEscG93KX1mb3IodmFyIHE9dGhpcy5tLnN1Ym4oMSkscz0wOyFxLmlzWmVybygpJiYwPT09cS5hbmRsbigxKTspcysrLHEuaXVzaHJuKDEpO2Fzc2VydCghcS5pc1plcm8oKSk7dmFyIG9uZT1uZXcgQk4oMSkudG9SZWQodGhpcyksbk9uZT1vbmUucmVkTmVnKCksbHBvdz10aGlzLm0uc3VibigxKS5pdXNocm4oMSksej10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHo9bmV3IEJOKDIqeip6KS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coeixscG93KS5jbXAobk9uZSk7KXoucmVkSUFkZChuT25lKTtmb3IodmFyIGM9dGhpcy5wb3coeixxKSxyPXRoaXMucG93KGEscS5hZGRuKDEpLml1c2hybigxKSksdD10aGlzLnBvdyhhLHEpLG09czswIT09dC5jbXAob25lKTspe2Zvcih2YXIgdG1wPXQsaT0wOzAhPT10bXAuY21wKG9uZSk7aSsrKXRtcD10bXAucmVkU3FyKCk7YXNzZXJ0KGk8bSk7dmFyIGI9dGhpcy5wb3coYyxuZXcgQk4oMSkuaXVzaGxuKG0taS0xKSk7cj1yLnJlZE11bChiKSxjPWIucmVkU3FyKCksdD10LnJlZE11bChjKSxtPWl9cmV0dXJuIHJ9LFJlZC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbiBpbnZtKGEpe3ZhciBpbnY9YS5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWludi5uZWdhdGl2ZT8oaW52Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGludikucmVkTmVnKCkpOnRoaXMuaW1vZChpbnYpfSxSZWQucHJvdG90eXBlLnBvdz1mdW5jdGlvbiBwb3coYSxudW0pe2lmKG51bS5pc1plcm8oKSlyZXR1cm4gbmV3IEJOKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1udW0uY21wbigxKSlyZXR1cm4gYS5jbG9uZSgpO3ZhciB3bmQ9bmV3IEFycmF5KDE2KTt3bmRbMF09bmV3IEJOKDEpLnRvUmVkKHRoaXMpLHduZFsxXT1hO2Zvcih2YXIgaT0yO2k8d25kLmxlbmd0aDtpKyspd25kW2ldPXRoaXMubXVsKHduZFtpLTFdLGEpO3ZhciByZXM9d25kWzBdLGN1cnJlbnQ9MCxjdXJyZW50TGVuPTAsc3RhcnQ9bnVtLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09c3RhcnQmJihzdGFydD0yNiksaT1udW0ubGVuZ3RoLTE7aT49MDtpLS0pe2Zvcih2YXIgd29yZD1udW0ud29yZHNbaV0saj1zdGFydC0xO2o+PTA7ai0tKXt2YXIgYml0PXdvcmQ+PmomMTtyZXMhPT13bmRbMF0mJihyZXM9dGhpcy5zcXIocmVzKSksMCE9PWJpdHx8MCE9PWN1cnJlbnQ/KGN1cnJlbnQ8PD0xLGN1cnJlbnR8PWJpdCwoND09PSsrY3VycmVudExlbnx8MD09PWkmJjA9PT1qKSYmKHJlcz10aGlzLm11bChyZXMsd25kW2N1cnJlbnRdKSxjdXJyZW50TGVuPTAsY3VycmVudD0wKSk6Y3VycmVudExlbj0wfXN0YXJ0PTI2fXJldHVybiByZXN9LFJlZC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uIGNvbnZlcnRUbyhudW0pe3ZhciByPW51bS51bW9kKHRoaXMubSk7cmV0dXJuIHI9PT1udW0/ci5jbG9uZSgpOnJ9LFJlZC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24gY29udmVydEZyb20obnVtKXt2YXIgcmVzPW51bS5jbG9uZSgpO3JldHVybiByZXMucmVkPW51bGwscmVzfSxCTi5tb250PWZ1bmN0aW9uIG1vbnQobnVtKXtyZXR1cm4gbmV3IE1vbnQobnVtKX0saW5oZXJpdHMoTW9udCxSZWQpLE1vbnQucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbiBjb252ZXJ0VG8obnVtKXtyZXR1cm4gdGhpcy5pbW9kKG51bS51c2hsbih0aGlzLnNoaWZ0KSl9LE1vbnQucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uIGNvbnZlcnRGcm9tKG51bSl7dmFyIHI9dGhpcy5pbW9kKG51bS5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHIucmVkPW51bGwscn0sTW9udC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbiBpbXVsKGEsYil7aWYoYS5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gYS53b3Jkc1swXT0wLGEubGVuZ3RoPTEsYTt2YXIgdD1hLmltdWwoYiksYz10Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSx1PXQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCkscmVzPXU7cmV0dXJuIHUuY21wKHRoaXMubSk+PTA/cmVzPXUuaXN1Yih0aGlzLm0pOnUuY21wbigwKTwwJiYocmVzPXUuaWFkZCh0aGlzLm0pKSxyZXMuX2ZvcmNlUmVkKHRoaXMpfSxNb250LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24gbXVsKGEsYil7aWYoYS5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IEJOKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgdD1hLm11bChiKSxjPXQubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHU9dC5pc3ViKGMpLml1c2hybih0aGlzLnNoaWZ0KSxyZXM9dTtyZXR1cm4gdS5jbXAodGhpcy5tKT49MD9yZXM9dS5pc3ViKHRoaXMubSk6dS5jbXBuKDApPDAmJihyZXM9dS5pYWRkKHRoaXMubSkpLHJlcy5fZm9yY2VSZWQodGhpcyl9LE1vbnQucHJvdG90eXBlLmludm09ZnVuY3Rpb24gaW52bShhKXtyZXR1cm4gdGhpcy5pbW9kKGEuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShtb2R1bGU9X193ZWJwYWNrX3JlcXVpcmVfXy5ubWQobW9kdWxlKSx0aGlzKX0sIi4uLy4uL25vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC9wcml2YXRlRGVjcnlwdC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgcGFyc2VLZXlzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wYXJzZS1hc24xL2luZGV4LmpzIiksbWdmPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC9tZ2YuanMiKSx4b3I9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3B1YmxpYy1lbmNyeXB0L3hvci5qcyIpLEJOPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC9ub2RlX21vZHVsZXMvYm4uanMvbGliL2JuLmpzIiksY3J0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXJzYS9pbmRleC5qcyIpLGNyZWF0ZUhhc2g9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NyZWF0ZS1oYXNoL2Jyb3dzZXIuanMiKSx3aXRoUHVibGljPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC93aXRoUHVibGljLmpzIiksQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcjttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBwcml2YXRlRGVjcnlwdChwcml2YXRlS2V5LGVuYyxyZXZlcnNlKXt2YXIgcGFkZGluZztwYWRkaW5nPXByaXZhdGVLZXkucGFkZGluZz9wcml2YXRlS2V5LnBhZGRpbmc6cmV2ZXJzZT8xOjQ7dmFyIG1zZyxrZXk9cGFyc2VLZXlzKHByaXZhdGVLZXkpLGs9a2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKGVuYy5sZW5ndGg+a3x8bmV3IEJOKGVuYykuY21wKGtleS5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTttc2c9cmV2ZXJzZT93aXRoUHVibGljKG5ldyBCTihlbmMpLGtleSk6Y3J0KGVuYyxrZXkpO3ZhciB6QnVmZmVyPUJ1ZmZlci5hbGxvYyhrLW1zZy5sZW5ndGgpO2lmKG1zZz1CdWZmZXIuY29uY2F0KFt6QnVmZmVyLG1zZ10sayksND09PXBhZGRpbmcpcmV0dXJuIGZ1bmN0aW9uIG9hZXAoa2V5LG1zZyl7dmFyIGs9a2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGlIYXNoPWNyZWF0ZUhhc2goInNoYTEiKS51cGRhdGUoQnVmZmVyLmFsbG9jKDApKS5kaWdlc3QoKSxoTGVuPWlIYXNoLmxlbmd0aDtpZigwIT09bXNnWzBdKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3ZhciBtYXNrZWRTZWVkPW1zZy5zbGljZSgxLGhMZW4rMSksbWFza2VkRGI9bXNnLnNsaWNlKGhMZW4rMSksc2VlZD14b3IobWFza2VkU2VlZCxtZ2YobWFza2VkRGIsaExlbikpLGRiPXhvcihtYXNrZWREYixtZ2Yoc2VlZCxrLWhMZW4tMSkpO2lmKGZ1bmN0aW9uIGNvbXBhcmUoYSxiKXthPUJ1ZmZlci5mcm9tKGEpLGI9QnVmZmVyLmZyb20oYik7dmFyIGRpZj0wLGxlbj1hLmxlbmd0aDthLmxlbmd0aCE9PWIubGVuZ3RoJiYoZGlmKyssbGVuPU1hdGgubWluKGEubGVuZ3RoLGIubGVuZ3RoKSk7dmFyIGk9LTE7Zm9yKDsrK2k8bGVuOylkaWYrPWFbaV1eYltpXTtyZXR1cm4gZGlmfShpSGFzaCxkYi5zbGljZSgwLGhMZW4pKSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTt2YXIgaT1oTGVuO2Zvcig7MD09PWRiW2ldOylpKys7aWYoMSE9PWRiW2krK10pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIGRiLnNsaWNlKGkpfShrZXksbXNnKTtpZigxPT09cGFkZGluZylyZXR1cm4gZnVuY3Rpb24gcGtjczEoa2V5LG1zZyxyZXZlcnNlKXt2YXIgcDE9bXNnLnNsaWNlKDAsMiksaT0yLHN0YXR1cz0wO2Zvcig7MCE9PW1zZ1tpKytdOylpZihpPj1tc2cubGVuZ3RoKXtzdGF0dXMrKzticmVha312YXIgcHM9bXNnLnNsaWNlKDIsaS0xKTsoIjAwMDIiIT09cDEudG9TdHJpbmcoImhleCIpJiYhcmV2ZXJzZXx8IjAwMDEiIT09cDEudG9TdHJpbmcoImhleCIpJiZyZXZlcnNlKSYmc3RhdHVzKys7cHMubGVuZ3RoPDgmJnN0YXR1cysrO2lmKHN0YXR1cyl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gbXNnLnNsaWNlKGkpfSgwLG1zZyxyZXZlcnNlKTtpZigzPT09cGFkZGluZylyZXR1cm4gbXNnO3Rocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3B1YmxpYy1lbmNyeXB0L3B1YmxpY0VuY3J5cHQuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIHBhcnNlS2V5cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcGFyc2UtYXNuMS9pbmRleC5qcyIpLHJhbmRvbUJ5dGVzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9yYW5kb21ieXRlcy9icm93c2VyLmpzIiksY3JlYXRlSGFzaD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY3JlYXRlLWhhc2gvYnJvd3Nlci5qcyIpLG1nZj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvbWdmLmpzIikseG9yPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC94b3IuanMiKSxCTj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvbm9kZV9tb2R1bGVzL2JuLmpzL2xpYi9ibi5qcyIpLHdpdGhQdWJsaWM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3B1YmxpYy1lbmNyeXB0L3dpdGhQdWJsaWMuanMiKSxjcnQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktcnNhL2luZGV4LmpzIiksQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcjttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBwdWJsaWNFbmNyeXB0KHB1YmxpY0tleSxtc2cscmV2ZXJzZSl7dmFyIHBhZGRpbmc7cGFkZGluZz1wdWJsaWNLZXkucGFkZGluZz9wdWJsaWNLZXkucGFkZGluZzpyZXZlcnNlPzE6NDt2YXIgcGFkZGVkTXNnLGtleT1wYXJzZUtleXMocHVibGljS2V5KTtpZig0PT09cGFkZGluZylwYWRkZWRNc2c9ZnVuY3Rpb24gb2FlcChrZXksbXNnKXt2YXIgaz1rZXkubW9kdWx1cy5ieXRlTGVuZ3RoKCksbUxlbj1tc2cubGVuZ3RoLGlIYXNoPWNyZWF0ZUhhc2goInNoYTEiKS51cGRhdGUoQnVmZmVyLmFsbG9jKDApKS5kaWdlc3QoKSxoTGVuPWlIYXNoLmxlbmd0aCxoTGVuMj0yKmhMZW47aWYobUxlbj5rLWhMZW4yLTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIHBzPUJ1ZmZlci5hbGxvYyhrLW1MZW4taExlbjItMiksZGJsZW49ay1oTGVuLTEsc2VlZD1yYW5kb21CeXRlcyhoTGVuKSxtYXNrZWREYj14b3IoQnVmZmVyLmNvbmNhdChbaUhhc2gscHMsQnVmZmVyLmFsbG9jKDEsMSksbXNnXSxkYmxlbiksbWdmKHNlZWQsZGJsZW4pKSxtYXNrZWRTZWVkPXhvcihzZWVkLG1nZihtYXNrZWREYixoTGVuKSk7cmV0dXJuIG5ldyBCTihCdWZmZXIuY29uY2F0KFtCdWZmZXIuYWxsb2MoMSksbWFza2VkU2VlZCxtYXNrZWREYl0saykpfShrZXksbXNnKTtlbHNlIGlmKDE9PT1wYWRkaW5nKXBhZGRlZE1zZz1mdW5jdGlvbiBwa2NzMShrZXksbXNnLHJldmVyc2Upe3ZhciBwcyxtTGVuPW1zZy5sZW5ndGgsaz1rZXkubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYobUxlbj5rLTExKXRocm93IG5ldyBFcnJvcigibWVzc2FnZSB0b28gbG9uZyIpO3BzPXJldmVyc2U/QnVmZmVyLmFsbG9jKGstbUxlbi0zLDI1NSk6ZnVuY3Rpb24gbm9uWmVybyhsZW4pe3ZhciBudW0sb3V0PUJ1ZmZlci5hbGxvY1Vuc2FmZShsZW4pLGk9MCxjYWNoZT1yYW5kb21CeXRlcygyKmxlbiksY3VyPTA7Zm9yKDtpPGxlbjspY3VyPT09Y2FjaGUubGVuZ3RoJiYoY2FjaGU9cmFuZG9tQnl0ZXMoMipsZW4pLGN1cj0wKSwobnVtPWNhY2hlW2N1cisrXSkmJihvdXRbaSsrXT1udW0pO3JldHVybiBvdXR9KGstbUxlbi0zKTtyZXR1cm4gbmV3IEJOKEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKFswLHJldmVyc2U/MToyXSkscHMsQnVmZmVyLmFsbG9jKDEpLG1zZ10saykpfShrZXksbXNnLHJldmVyc2UpO2Vsc2V7aWYoMyE9PXBhZGRpbmcpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKTtpZigocGFkZGVkTXNnPW5ldyBCTihtc2cpKS5jbXAoa2V5Lm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcigiZGF0YSB0b28gbG9uZyBmb3IgbW9kdWx1cyIpfXJldHVybiByZXZlcnNlP2NydChwYWRkZWRNc2csa2V5KTp3aXRoUHVibGljKHBhZGRlZE1zZyxrZXkpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC93aXRoUHVibGljLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBCTj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvbm9kZV9tb2R1bGVzL2JuLmpzL2xpYi9ibi5qcyIpLEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXI7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gd2l0aFB1YmxpYyhwYWRkZWRNc2csa2V5KXtyZXR1cm4gQnVmZmVyLmZyb20ocGFkZGVkTXNnLnRvUmVkKEJOLm1vbnQoa2V5Lm1vZHVsdXMpKS5yZWRQb3cobmV3IEJOKGtleS5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKS50b0FycmF5KCkpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC94b3IuanMiKG1vZHVsZSl7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24geG9yKGEsYil7Zm9yKHZhciBsZW49YS5sZW5ndGgsaT0tMTsrK2k8bGVuOylhW2ldXj1iW2ldO3JldHVybiBhfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5qcyIobW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fO21vZHVsZT1fX3dlYnBhY2tfcmVxdWlyZV9fLm5tZChtb2R1bGUpLGZ1bmN0aW9uKCl7ZXhwb3J0cyYmZXhwb3J0cy5ub2RlVHlwZSxtb2R1bGUmJm1vZHVsZS5ub2RlVHlwZTt2YXIgZnJlZUdsb2JhbD0ib2JqZWN0Ij09dHlwZW9mIF9fd2VicGFja19yZXF1aXJlX18uZyYmX193ZWJwYWNrX3JlcXVpcmVfXy5nO2ZyZWVHbG9iYWwuZ2xvYmFsIT09ZnJlZUdsb2JhbCYmZnJlZUdsb2JhbC53aW5kb3chPT1mcmVlR2xvYmFsJiZmcmVlR2xvYmFsLnNlbGY7dmFyIHB1bnljb2RlLG1heEludD0yMTQ3NDgzNjQ3LHJlZ2V4UHVueWNvZGU9L154bi0tLyxyZWdleE5vbkFTQ0lJPS9bXlx4MjAtXHg3RV0vLHJlZ2V4U2VwYXJhdG9ycz0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csZXJyb3JzPXtvdmVyZmxvdzoiT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MiLCJub3QtYmFzaWMiOiJJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpIiwiaW52YWxpZC1pbnB1dCI6IkludmFsaWQgaW5wdXQifSxmbG9vcj1NYXRoLmZsb29yLHN0cmluZ0Zyb21DaGFyQ29kZT1TdHJpbmcuZnJvbUNoYXJDb2RlO2Z1bmN0aW9uIGVycm9yKHR5cGUpe3Rocm93IG5ldyBSYW5nZUVycm9yKGVycm9yc1t0eXBlXSl9ZnVuY3Rpb24gbWFwKGFycmF5LGZuKXtmb3IodmFyIGxlbmd0aD1hcnJheS5sZW5ndGgscmVzdWx0PVtdO2xlbmd0aC0tOylyZXN1bHRbbGVuZ3RoXT1mbihhcnJheVtsZW5ndGhdKTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsZm4pe3ZhciBwYXJ0cz1zdHJpbmcuc3BsaXQoIkAiKSxyZXN1bHQ9IiI7cmV0dXJuIHBhcnRzLmxlbmd0aD4xJiYocmVzdWx0PXBhcnRzWzBdKyJAIixzdHJpbmc9cGFydHNbMV0pLHJlc3VsdCttYXAoKHN0cmluZz1zdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsIi4iKSkuc3BsaXQoIi4iKSxmbikuam9pbigiLiIpfWZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKXtmb3IodmFyIHZhbHVlLGV4dHJhLG91dHB1dD1bXSxjb3VudGVyPTAsbGVuZ3RoPXN0cmluZy5sZW5ndGg7Y291bnRlcjxsZW5ndGg7KSh2YWx1ZT1zdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspKT49NTUyOTYmJnZhbHVlPD01NjMxOSYmY291bnRlcjxsZW5ndGg/NTYzMjA9PSg2NDUxMiYoZXh0cmE9c3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKSkpP291dHB1dC5wdXNoKCgoMTAyMyZ2YWx1ZSk8PDEwKSsoMTAyMyZleHRyYSkrNjU1MzYpOihvdXRwdXQucHVzaCh2YWx1ZSksY291bnRlci0tKTpvdXRwdXQucHVzaCh2YWx1ZSk7cmV0dXJuIG91dHB1dH1mdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KXtyZXR1cm4gbWFwKGFycmF5LGZ1bmN0aW9uKHZhbHVlKXt2YXIgb3V0cHV0PSIiO3JldHVybiB2YWx1ZT42NTUzNSYmKG91dHB1dCs9c3RyaW5nRnJvbUNoYXJDb2RlKCh2YWx1ZS09NjU1MzYpPj4+MTAmMTAyM3w1NTI5NiksdmFsdWU9NTYzMjB8MTAyMyZ2YWx1ZSksb3V0cHV0Kz1zdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpfSkuam9pbigiIil9ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCl7cmV0dXJuIGNvZGVQb2ludC00ODwxMD9jb2RlUG9pbnQtMjI6Y29kZVBvaW50LTY1PDI2P2NvZGVQb2ludC02NTpjb2RlUG9pbnQtOTc8MjY/Y29kZVBvaW50LTk3OjM2fWZ1bmN0aW9uIGRpZ2l0VG9CYXNpYyhkaWdpdCxmbGFnKXtyZXR1cm4gZGlnaXQrMjIrNzUqKGRpZ2l0PDI2KS0oKDAhPWZsYWcpPDw1KX1mdW5jdGlvbiBhZGFwdChkZWx0YSxudW1Qb2ludHMsZmlyc3RUaW1lKXt2YXIgaz0wO2ZvcihkZWx0YT1maXJzdFRpbWU/Zmxvb3IoZGVsdGEvNzAwKTpkZWx0YT4+MSxkZWx0YSs9Zmxvb3IoZGVsdGEvbnVtUG9pbnRzKTtkZWx0YT40NTU7ays9MzYpZGVsdGE9Zmxvb3IoZGVsdGEvMzUpO3JldHVybiBmbG9vcihrKzM2KmRlbHRhLyhkZWx0YSszOCkpfWZ1bmN0aW9uIGRlY29kZShpbnB1dCl7dmFyIG91dCxiYXNpYyxqLGluZGV4LG9sZGksdyxrLGRpZ2l0LHQsYmFzZU1pbnVzVCxvdXRwdXQ9W10saW5wdXRMZW5ndGg9aW5wdXQubGVuZ3RoLGk9MCxuPTEyOCxiaWFzPTcyO2ZvcigoYmFzaWM9aW5wdXQubGFzdEluZGV4T2YoIi0iKSk8MCYmKGJhc2ljPTApLGo9MDtqPGJhc2ljOysrailpbnB1dC5jaGFyQ29kZUF0KGopPj0xMjgmJmVycm9yKCJub3QtYmFzaWMiKSxvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtmb3IoaW5kZXg9YmFzaWM+MD9iYXNpYysxOjA7aW5kZXg8aW5wdXRMZW5ndGg7KXtmb3Iob2xkaT1pLHc9MSxrPTM2O2luZGV4Pj1pbnB1dExlbmd0aCYmZXJyb3IoImludmFsaWQtaW5wdXQiKSwoKGRpZ2l0PWJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKSk+PTM2fHxkaWdpdD5mbG9vcigobWF4SW50LWkpL3cpKSYmZXJyb3IoIm92ZXJmbG93IiksaSs9ZGlnaXQqdywhKGRpZ2l0PCh0PWs8PWJpYXM/MTprPj1iaWFzKzI2PzI2OmstYmlhcykpO2srPTM2KXc+Zmxvb3IobWF4SW50LyhiYXNlTWludXNUPTM2LXQpKSYmZXJyb3IoIm92ZXJmbG93Iiksdyo9YmFzZU1pbnVzVDtiaWFzPWFkYXB0KGktb2xkaSxvdXQ9b3V0cHV0Lmxlbmd0aCsxLDA9PW9sZGkpLGZsb29yKGkvb3V0KT5tYXhJbnQtbiYmZXJyb3IoIm92ZXJmbG93Iiksbis9Zmxvb3IoaS9vdXQpLGklPW91dCxvdXRwdXQuc3BsaWNlKGkrKywwLG4pfXJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCl9ZnVuY3Rpb24gZW5jb2RlKGlucHV0KXt2YXIgbixkZWx0YSxoYW5kbGVkQ1BDb3VudCxiYXNpY0xlbmd0aCxiaWFzLGosbSxxLGssdCxjdXJyZW50VmFsdWUsaW5wdXRMZW5ndGgsaGFuZGxlZENQQ291bnRQbHVzT25lLGJhc2VNaW51c1QscU1pbnVzVCxvdXRwdXQ9W107Zm9yKGlucHV0TGVuZ3RoPShpbnB1dD11Y3MyZGVjb2RlKGlucHV0KSkubGVuZ3RoLG49MTI4LGRlbHRhPTAsYmlhcz03MixqPTA7ajxpbnB1dExlbmd0aDsrK2opKGN1cnJlbnRWYWx1ZT1pbnB1dFtqXSk8MTI4JiZvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7Zm9yKGhhbmRsZWRDUENvdW50PWJhc2ljTGVuZ3RoPW91dHB1dC5sZW5ndGgsYmFzaWNMZW5ndGgmJm91dHB1dC5wdXNoKCItIik7aGFuZGxlZENQQ291bnQ8aW5wdXRMZW5ndGg7KXtmb3IobT1tYXhJbnQsaj0wO2o8aW5wdXRMZW5ndGg7KytqKShjdXJyZW50VmFsdWU9aW5wdXRbal0pPj1uJiZjdXJyZW50VmFsdWU8bSYmKG09Y3VycmVudFZhbHVlKTtmb3IobS1uPmZsb29yKChtYXhJbnQtZGVsdGEpLyhoYW5kbGVkQ1BDb3VudFBsdXNPbmU9aGFuZGxlZENQQ291bnQrMSkpJiZlcnJvcigib3ZlcmZsb3ciKSxkZWx0YSs9KG0tbikqaGFuZGxlZENQQ291bnRQbHVzT25lLG49bSxqPTA7ajxpbnB1dExlbmd0aDsrK2opaWYoKGN1cnJlbnRWYWx1ZT1pbnB1dFtqXSk8biYmKytkZWx0YT5tYXhJbnQmJmVycm9yKCJvdmVyZmxvdyIpLGN1cnJlbnRWYWx1ZT09bil7Zm9yKHE9ZGVsdGEsaz0zNjshKHE8KHQ9azw9Ymlhcz8xOms+PWJpYXMrMjY/MjY6ay1iaWFzKSk7ays9MzYpcU1pbnVzVD1xLXQsYmFzZU1pbnVzVD0zNi10LG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCtxTWludXNUJWJhc2VNaW51c1QsMCkpKSxxPWZsb29yKHFNaW51c1QvYmFzZU1pbnVzVCk7b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLDApKSksYmlhcz1hZGFwdChkZWx0YSxoYW5kbGVkQ1BDb3VudFBsdXNPbmUsaGFuZGxlZENQQ291bnQ9PWJhc2ljTGVuZ3RoKSxkZWx0YT0wLCsraGFuZGxlZENQQ291bnR9KytkZWx0YSwrK259cmV0dXJuIG91dHB1dC5qb2luKCIiKX1wdW55Y29kZT17dmVyc2lvbjoiMS40LjEiLHVjczI6e2RlY29kZTp1Y3MyZGVjb2RlLGVuY29kZTp1Y3MyZW5jb2RlfSxkZWNvZGUsZW5jb2RlLHRvQVNDSUk6ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCl7cmV0dXJuIG1hcERvbWFpbihpbnB1dCxmdW5jdGlvbihzdHJpbmcpe3JldHVybiByZWdleE5vbkFTQ0lJLnRlc3Qoc3RyaW5nKT8ieG4tLSIrZW5jb2RlKHN0cmluZyk6c3RyaW5nfSl9LHRvVW5pY29kZTpmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpe3JldHVybiBtYXBEb21haW4oaW5wdXQsZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gcmVnZXhQdW55Y29kZS50ZXN0KHN0cmluZyk/ZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTpzdHJpbmd9KX19LHZvaWQgMD09PShfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXz1mdW5jdGlvbigpe3JldHVybiBwdW55Y29kZX0uY2FsbChleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18sZXhwb3J0cyxtb2R1bGUpKXx8KG1vZHVsZS5leHBvcnRzPV9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fKX0oKX0sIi4uLy4uL25vZGVfbW9kdWxlcy9xcy9saWIvZm9ybWF0cy5qcyIobW9kdWxlKXsidXNlIHN0cmljdCI7dmFyIHJlcGxhY2U9U3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLHBlcmNlbnRUd2VudGllcz0vJTIwL2csRm9ybWF0X1JGQzE3Mzg9IlJGQzE3MzgiLEZvcm1hdF9SRkMzOTg2PSJSRkMzOTg2Ijttb2R1bGUuZXhwb3J0cz17ZGVmYXVsdDpGb3JtYXRfUkZDMzk4Nixmb3JtYXR0ZXJzOntSRkMxNzM4OmZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gcmVwbGFjZS5jYWxsKHZhbHVlLHBlcmNlbnRUd2VudGllcywiKyIpfSxSRkMzOTg2OmZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gU3RyaW5nKHZhbHVlKX19LFJGQzE3Mzg6Rm9ybWF0X1JGQzE3MzgsUkZDMzk4NjpGb3JtYXRfUkZDMzk4Nn19LCIuLi8uLi9ub2RlX21vZHVsZXMvcXMvbGliL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgc3RyaW5naWZ5PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9xcy9saWIvc3RyaW5naWZ5LmpzIikscGFyc2U9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9wYXJzZS5qcyIpLGZvcm1hdHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9mb3JtYXRzLmpzIik7bW9kdWxlLmV4cG9ydHM9e2Zvcm1hdHMscGFyc2Usc3RyaW5naWZ5fX0sIi4uLy4uL25vZGVfbW9kdWxlcy9xcy9saWIvcGFyc2UuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciB1dGlscz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcXMvbGliL3V0aWxzLmpzIiksaGFzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksaXNBcnJheT1BcnJheS5pc0FycmF5LGRlZmF1bHRzPXthbGxvd0RvdHM6ITEsYWxsb3dFbXB0eUFycmF5czohMSxhbGxvd1Byb3RvdHlwZXM6ITEsYWxsb3dTcGFyc2U6ITEsYXJyYXlMaW1pdDoyMCxjaGFyc2V0OiJ1dGYtOCIsY2hhcnNldFNlbnRpbmVsOiExLGNvbW1hOiExLGRlY29kZURvdEluS2V5czohMSxkZWNvZGVyOnV0aWxzLmRlY29kZSxkZWxpbWl0ZXI6IiYiLGRlcHRoOjUsZHVwbGljYXRlczoiY29tYmluZSIsaWdub3JlUXVlcnlQcmVmaXg6ITEsaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzOiExLHBhcmFtZXRlckxpbWl0OjFlMyxwYXJzZUFycmF5czohMCxwbGFpbk9iamVjdHM6ITEsc3RyaWN0RGVwdGg6ITEsc3RyaWN0TnVsbEhhbmRsaW5nOiExLHRocm93T25MaW1pdEV4Y2VlZGVkOiExfSxpbnRlcnByZXROdW1lcmljRW50aXRpZXM9ZnVuY3Rpb24oc3RyKXtyZXR1cm4gc3RyLnJlcGxhY2UoLyYjKFxkKyk7L2csZnVuY3Rpb24oJDAsbnVtYmVyU3RyKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChudW1iZXJTdHIsMTApKX0pfSxwYXJzZUFycmF5VmFsdWU9ZnVuY3Rpb24odmFsLG9wdGlvbnMsY3VycmVudEFycmF5TGVuZ3RoKXtpZih2YWwmJiJzdHJpbmciPT10eXBlb2YgdmFsJiZvcHRpb25zLmNvbW1hJiZ2YWwuaW5kZXhPZigiLCIpPi0xKXJldHVybiB2YWwuc3BsaXQoIiwiKTtpZihvcHRpb25zLnRocm93T25MaW1pdEV4Y2VlZGVkJiZjdXJyZW50QXJyYXlMZW5ndGg+PW9wdGlvbnMuYXJyYXlMaW1pdCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXJyYXkgbGltaXQgZXhjZWVkZWQuIE9ubHkgIitvcHRpb25zLmFycmF5TGltaXQrIiBlbGVtZW50IisoMT09PW9wdGlvbnMuYXJyYXlMaW1pdD8iIjoicyIpKyIgYWxsb3dlZCBpbiBhbiBhcnJheS4iKTtyZXR1cm4gdmFsfSxwYXJzZUtleXM9ZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZ0tleXMoZ2l2ZW5LZXksdmFsLG9wdGlvbnMsdmFsdWVzUGFyc2VkKXtpZihnaXZlbktleSl7dmFyIGtleXM9ZnVuY3Rpb24gc3BsaXRLZXlJbnRvU2VnbWVudHMoZ2l2ZW5LZXksb3B0aW9ucyl7dmFyIGtleT1vcHRpb25zLmFsbG93RG90cz9naXZlbktleS5yZXBsYWNlKC9cLihbXi5bXSspL2csIlskMV0iKTpnaXZlbktleTtpZihvcHRpb25zLmRlcHRoPD0wKXtpZighb3B0aW9ucy5wbGFpbk9iamVjdHMmJmhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsa2V5KSYmIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKXJldHVybjtyZXR1cm5ba2V5XX12YXIgY2hpbGQ9LyhcW1teW1xdXSpdKS9nLHNlZ21lbnQ9LyhcW1teW1xdXSpdKS8uZXhlYyhrZXkpLHBhcmVudD1zZWdtZW50P2tleS5zbGljZSgwLHNlZ21lbnQuaW5kZXgpOmtleSxrZXlzPVtdO2lmKHBhcmVudCl7aWYoIW9wdGlvbnMucGxhaW5PYmplY3RzJiZoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLHBhcmVudCkmJiFvcHRpb25zLmFsbG93UHJvdG90eXBlcylyZXR1cm47a2V5c1trZXlzLmxlbmd0aF09cGFyZW50fWZvcih2YXIgaT0wO251bGwhPT0oc2VnbWVudD1jaGlsZC5leGVjKGtleSkpJiZpPG9wdGlvbnMuZGVwdGg7KXtpKz0xO3ZhciBzZWdtZW50Q29udGVudD1zZWdtZW50WzFdLnNsaWNlKDEsLTEpO2lmKCFvcHRpb25zLnBsYWluT2JqZWN0cyYmaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSxzZWdtZW50Q29udGVudCkmJiFvcHRpb25zLmFsbG93UHJvdG90eXBlcylyZXR1cm47a2V5c1trZXlzLmxlbmd0aF09c2VnbWVudFsxXX1pZihzZWdtZW50KXtpZighMD09PW9wdGlvbnMuc3RyaWN0RGVwdGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIklucHV0IGRlcHRoIGV4Y2VlZGVkIGRlcHRoIG9wdGlvbiBvZiAiK29wdGlvbnMuZGVwdGgrIiBhbmQgc3RyaWN0RGVwdGggaXMgdHJ1ZSIpO2tleXNba2V5cy5sZW5ndGhdPSJbIitrZXkuc2xpY2Uoc2VnbWVudC5pbmRleCkrIl0ifXJldHVybiBrZXlzfShnaXZlbktleSxvcHRpb25zKTtpZihrZXlzKXJldHVybiBmdW5jdGlvbihjaGFpbix2YWwsb3B0aW9ucyx2YWx1ZXNQYXJzZWQpe3ZhciBjdXJyZW50QXJyYXlMZW5ndGg9MDtpZihjaGFpbi5sZW5ndGg+MCYmIltdIj09PWNoYWluW2NoYWluLmxlbmd0aC0xXSl7dmFyIHBhcmVudEtleT1jaGFpbi5zbGljZSgwLC0xKS5qb2luKCIiKTtjdXJyZW50QXJyYXlMZW5ndGg9QXJyYXkuaXNBcnJheSh2YWwpJiZ2YWxbcGFyZW50S2V5XT92YWxbcGFyZW50S2V5XS5sZW5ndGg6MH1mb3IodmFyIGxlYWY9dmFsdWVzUGFyc2VkP3ZhbDpwYXJzZUFycmF5VmFsdWUodmFsLG9wdGlvbnMsY3VycmVudEFycmF5TGVuZ3RoKSxpPWNoYWluLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgb2JqLHJvb3Q9Y2hhaW5baV07aWYoIltdIj09PXJvb3QmJm9wdGlvbnMucGFyc2VBcnJheXMpb2JqPXV0aWxzLmlzT3ZlcmZsb3cobGVhZik/bGVhZjpvcHRpb25zLmFsbG93RW1wdHlBcnJheXMmJigiIj09PWxlYWZ8fG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nJiZudWxsPT09bGVhZik/W106dXRpbHMuY29tYmluZShbXSxsZWFmLG9wdGlvbnMuYXJyYXlMaW1pdCxvcHRpb25zLnBsYWluT2JqZWN0cyk7ZWxzZXtvYmo9b3B0aW9ucy5wbGFpbk9iamVjdHM/e19fcHJvdG9fXzpudWxsfTp7fTt2YXIgY2xlYW5Sb290PSJbIj09PXJvb3QuY2hhckF0KDApJiYiXSI9PT1yb290LmNoYXJBdChyb290Lmxlbmd0aC0xKT9yb290LnNsaWNlKDEsLTEpOnJvb3QsZGVjb2RlZFJvb3Q9b3B0aW9ucy5kZWNvZGVEb3RJbktleXM/Y2xlYW5Sb290LnJlcGxhY2UoLyUyRS9nLCIuIik6Y2xlYW5Sb290LGluZGV4PXBhcnNlSW50KGRlY29kZWRSb290LDEwKSxpc1ZhbGlkQXJyYXlJbmRleD0haXNOYU4oaW5kZXgpJiZyb290IT09ZGVjb2RlZFJvb3QmJlN0cmluZyhpbmRleCk9PT1kZWNvZGVkUm9vdCYmaW5kZXg+PTAmJm9wdGlvbnMucGFyc2VBcnJheXM7aWYob3B0aW9ucy5wYXJzZUFycmF5c3x8IiIhPT1kZWNvZGVkUm9vdClpZihpc1ZhbGlkQXJyYXlJbmRleCYmaW5kZXg8b3B0aW9ucy5hcnJheUxpbWl0KShvYmo9W10pW2luZGV4XT1sZWFmO2Vsc2V7aWYoaXNWYWxpZEFycmF5SW5kZXgmJm9wdGlvbnMudGhyb3dPbkxpbWl0RXhjZWVkZWQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkFycmF5IGxpbWl0IGV4Y2VlZGVkLiBPbmx5ICIrb3B0aW9ucy5hcnJheUxpbWl0KyIgZWxlbWVudCIrKDE9PT1vcHRpb25zLmFycmF5TGltaXQ/IiI6InMiKSsiIGFsbG93ZWQgaW4gYW4gYXJyYXkuIik7aXNWYWxpZEFycmF5SW5kZXg/KG9ialtpbmRleF09bGVhZix1dGlscy5tYXJrT3ZlcmZsb3cob2JqLGluZGV4KSk6Il9fcHJvdG9fXyIhPT1kZWNvZGVkUm9vdCYmKG9ialtkZWNvZGVkUm9vdF09bGVhZil9ZWxzZSBvYmo9ezA6bGVhZn19bGVhZj1vYmp9cmV0dXJuIGxlYWZ9KGtleXMsdmFsLG9wdGlvbnMsdmFsdWVzUGFyc2VkKX19O21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHN0cixvcHRzKXt2YXIgb3B0aW9ucz1mdW5jdGlvbiBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cyl7aWYoIW9wdHMpcmV0dXJuIGRlZmF1bHRzO2lmKHZvaWQgMCE9PW9wdHMuYWxsb3dFbXB0eUFycmF5cyYmImJvb2xlYW4iIT10eXBlb2Ygb3B0cy5hbGxvd0VtcHR5QXJyYXlzKXRocm93IG5ldyBUeXBlRXJyb3IoImBhbGxvd0VtcHR5QXJyYXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQiKTtpZih2b2lkIDAhPT1vcHRzLmRlY29kZURvdEluS2V5cyYmImJvb2xlYW4iIT10eXBlb2Ygb3B0cy5kZWNvZGVEb3RJbktleXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiYGRlY29kZURvdEluS2V5c2Agb3B0aW9uIGNhbiBvbmx5IGJlIGB0cnVlYCBvciBgZmFsc2VgLCB3aGVuIHByb3ZpZGVkIik7aWYobnVsbCE9PW9wdHMuZGVjb2RlciYmdm9pZCAwIT09b3B0cy5kZWNvZGVyJiYiZnVuY3Rpb24iIT10eXBlb2Ygb3B0cy5kZWNvZGVyKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uIik7aWYodm9pZCAwIT09b3B0cy5jaGFyc2V0JiYidXRmLTgiIT09b3B0cy5jaGFyc2V0JiYiaXNvLTg4NTktMSIhPT1vcHRzLmNoYXJzZXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGNoYXJzZXQgb3B0aW9uIG11c3QgYmUgZWl0aGVyIHV0Zi04LCBpc28tODg1OS0xLCBvciB1bmRlZmluZWQiKTtpZih2b2lkIDAhPT1vcHRzLnRocm93T25MaW1pdEV4Y2VlZGVkJiYiYm9vbGVhbiIhPXR5cGVvZiBvcHRzLnRocm93T25MaW1pdEV4Y2VlZGVkKXRocm93IG5ldyBUeXBlRXJyb3IoImB0aHJvd09uTGltaXRFeGNlZWRlZGAgb3B0aW9uIG11c3QgYmUgYSBib29sZWFuIik7dmFyIGNoYXJzZXQ9dm9pZCAwPT09b3B0cy5jaGFyc2V0P2RlZmF1bHRzLmNoYXJzZXQ6b3B0cy5jaGFyc2V0LGR1cGxpY2F0ZXM9dm9pZCAwPT09b3B0cy5kdXBsaWNhdGVzP2RlZmF1bHRzLmR1cGxpY2F0ZXM6b3B0cy5kdXBsaWNhdGVzO2lmKCJjb21iaW5lIiE9PWR1cGxpY2F0ZXMmJiJmaXJzdCIhPT1kdXBsaWNhdGVzJiYibGFzdCIhPT1kdXBsaWNhdGVzKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBkdXBsaWNhdGVzIG9wdGlvbiBtdXN0IGJlIGVpdGhlciBjb21iaW5lLCBmaXJzdCwgb3IgbGFzdCIpO3JldHVybnthbGxvd0RvdHM6dm9pZCAwPT09b3B0cy5hbGxvd0RvdHM/ITA9PT1vcHRzLmRlY29kZURvdEluS2V5c3x8ZGVmYXVsdHMuYWxsb3dEb3RzOiEhb3B0cy5hbGxvd0RvdHMsYWxsb3dFbXB0eUFycmF5czoiYm9vbGVhbiI9PXR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXM/ISFvcHRzLmFsbG93RW1wdHlBcnJheXM6ZGVmYXVsdHMuYWxsb3dFbXB0eUFycmF5cyxhbGxvd1Byb3RvdHlwZXM6ImJvb2xlYW4iPT10eXBlb2Ygb3B0cy5hbGxvd1Byb3RvdHlwZXM/b3B0cy5hbGxvd1Byb3RvdHlwZXM6ZGVmYXVsdHMuYWxsb3dQcm90b3R5cGVzLGFsbG93U3BhcnNlOiJib29sZWFuIj09dHlwZW9mIG9wdHMuYWxsb3dTcGFyc2U/b3B0cy5hbGxvd1NwYXJzZTpkZWZhdWx0cy5hbGxvd1NwYXJzZSxhcnJheUxpbWl0OiJudW1iZXIiPT10eXBlb2Ygb3B0cy5hcnJheUxpbWl0P29wdHMuYXJyYXlMaW1pdDpkZWZhdWx0cy5hcnJheUxpbWl0LGNoYXJzZXQsY2hhcnNldFNlbnRpbmVsOiJib29sZWFuIj09dHlwZW9mIG9wdHMuY2hhcnNldFNlbnRpbmVsP29wdHMuY2hhcnNldFNlbnRpbmVsOmRlZmF1bHRzLmNoYXJzZXRTZW50aW5lbCxjb21tYToiYm9vbGVhbiI9PXR5cGVvZiBvcHRzLmNvbW1hP29wdHMuY29tbWE6ZGVmYXVsdHMuY29tbWEsZGVjb2RlRG90SW5LZXlzOiJib29sZWFuIj09dHlwZW9mIG9wdHMuZGVjb2RlRG90SW5LZXlzP29wdHMuZGVjb2RlRG90SW5LZXlzOmRlZmF1bHRzLmRlY29kZURvdEluS2V5cyxkZWNvZGVyOiJmdW5jdGlvbiI9PXR5cGVvZiBvcHRzLmRlY29kZXI/b3B0cy5kZWNvZGVyOmRlZmF1bHRzLmRlY29kZXIsZGVsaW1pdGVyOiJzdHJpbmciPT10eXBlb2Ygb3B0cy5kZWxpbWl0ZXJ8fHV0aWxzLmlzUmVnRXhwKG9wdHMuZGVsaW1pdGVyKT9vcHRzLmRlbGltaXRlcjpkZWZhdWx0cy5kZWxpbWl0ZXIsZGVwdGg6Im51bWJlciI9PXR5cGVvZiBvcHRzLmRlcHRofHwhMT09PW9wdHMuZGVwdGg/K29wdHMuZGVwdGg6ZGVmYXVsdHMuZGVwdGgsZHVwbGljYXRlcyxpZ25vcmVRdWVyeVByZWZpeDohMD09PW9wdHMuaWdub3JlUXVlcnlQcmVmaXgsaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzOiJib29sZWFuIj09dHlwZW9mIG9wdHMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzP29wdHMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzOmRlZmF1bHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyxwYXJhbWV0ZXJMaW1pdDoibnVtYmVyIj09dHlwZW9mIG9wdHMucGFyYW1ldGVyTGltaXQ/b3B0cy5wYXJhbWV0ZXJMaW1pdDpkZWZhdWx0cy5wYXJhbWV0ZXJMaW1pdCxwYXJzZUFycmF5czohMSE9PW9wdHMucGFyc2VBcnJheXMscGxhaW5PYmplY3RzOiJib29sZWFuIj09dHlwZW9mIG9wdHMucGxhaW5PYmplY3RzP29wdHMucGxhaW5PYmplY3RzOmRlZmF1bHRzLnBsYWluT2JqZWN0cyxzdHJpY3REZXB0aDoiYm9vbGVhbiI9PXR5cGVvZiBvcHRzLnN0cmljdERlcHRoPyEhb3B0cy5zdHJpY3REZXB0aDpkZWZhdWx0cy5zdHJpY3REZXB0aCxzdHJpY3ROdWxsSGFuZGxpbmc6ImJvb2xlYW4iPT10eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmc/b3B0cy5zdHJpY3ROdWxsSGFuZGxpbmc6ZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nLHRocm93T25MaW1pdEV4Y2VlZGVkOiJib29sZWFuIj09dHlwZW9mIG9wdHMudGhyb3dPbkxpbWl0RXhjZWVkZWQmJm9wdHMudGhyb3dPbkxpbWl0RXhjZWVkZWR9fShvcHRzKTtpZigiIj09PXN0cnx8bnVsbD09c3RyKXJldHVybiBvcHRpb25zLnBsYWluT2JqZWN0cz97X19wcm90b19fOm51bGx9Ont9O2Zvcih2YXIgdGVtcE9iaj0ic3RyaW5nIj09dHlwZW9mIHN0cj9mdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nVmFsdWVzKHN0cixvcHRpb25zKXt2YXIgb2JqPXtfX3Byb3RvX186bnVsbH0sY2xlYW5TdHI9b3B0aW9ucy5pZ25vcmVRdWVyeVByZWZpeD9zdHIucmVwbGFjZSgvXlw/LywiIik6c3RyO2NsZWFuU3RyPWNsZWFuU3RyLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpO3ZhciBsaW1pdD1vcHRpb25zLnBhcmFtZXRlckxpbWl0PT09MS8wP3ZvaWQgMDpvcHRpb25zLnBhcmFtZXRlckxpbWl0LHBhcnRzPWNsZWFuU3RyLnNwbGl0KG9wdGlvbnMuZGVsaW1pdGVyLG9wdGlvbnMudGhyb3dPbkxpbWl0RXhjZWVkZWQ/bGltaXQrMTpsaW1pdCk7aWYob3B0aW9ucy50aHJvd09uTGltaXRFeGNlZWRlZCYmcGFydHMubGVuZ3RoPmxpbWl0KXRocm93IG5ldyBSYW5nZUVycm9yKCJQYXJhbWV0ZXIgbGltaXQgZXhjZWVkZWQuIE9ubHkgIitsaW1pdCsiIHBhcmFtZXRlciIrKDE9PT1saW1pdD8iIjoicyIpKyIgYWxsb3dlZC4iKTt2YXIgaSxza2lwSW5kZXg9LTEsY2hhcnNldD1vcHRpb25zLmNoYXJzZXQ7aWYob3B0aW9ucy5jaGFyc2V0U2VudGluZWwpZm9yKGk9MDtpPHBhcnRzLmxlbmd0aDsrK2kpMD09PXBhcnRzW2ldLmluZGV4T2YoInV0Zjg9IikmJigidXRmOD0lRTIlOUMlOTMiPT09cGFydHNbaV0/Y2hhcnNldD0idXRmLTgiOiJ1dGY4PSUyNiUyMzEwMDAzJTNCIj09PXBhcnRzW2ldJiYoY2hhcnNldD0iaXNvLTg4NTktMSIpLHNraXBJbmRleD1pLGk9cGFydHMubGVuZ3RoKTtmb3IoaT0wO2k8cGFydHMubGVuZ3RoOysraSlpZihpIT09c2tpcEluZGV4KXt2YXIga2V5LHZhbCxwYXJ0PXBhcnRzW2ldLGJyYWNrZXRFcXVhbHNQb3M9cGFydC5pbmRleE9mKCJdPSIpLHBvcz0tMT09PWJyYWNrZXRFcXVhbHNQb3M/cGFydC5pbmRleE9mKCI9Iik6YnJhY2tldEVxdWFsc1BvcysxO2lmKC0xPT09cG9zPyhrZXk9b3B0aW9ucy5kZWNvZGVyKHBhcnQsZGVmYXVsdHMuZGVjb2RlcixjaGFyc2V0LCJrZXkiKSx2YWw9b3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmc/bnVsbDoiIik6bnVsbCE9PShrZXk9b3B0aW9ucy5kZWNvZGVyKHBhcnQuc2xpY2UoMCxwb3MpLGRlZmF1bHRzLmRlY29kZXIsY2hhcnNldCwia2V5IikpJiYodmFsPXV0aWxzLm1heWJlTWFwKHBhcnNlQXJyYXlWYWx1ZShwYXJ0LnNsaWNlKHBvcysxKSxvcHRpb25zLGlzQXJyYXkob2JqW2tleV0pP29ialtrZXldLmxlbmd0aDowKSxmdW5jdGlvbihlbmNvZGVkVmFsKXtyZXR1cm4gb3B0aW9ucy5kZWNvZGVyKGVuY29kZWRWYWwsZGVmYXVsdHMuZGVjb2RlcixjaGFyc2V0LCJ2YWx1ZSIpfSkpLHZhbCYmb3B0aW9ucy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMmJiJpc28tODg1OS0xIj09PWNoYXJzZXQmJih2YWw9aW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzKFN0cmluZyh2YWwpKSkscGFydC5pbmRleE9mKCJbXT0iKT4tMSYmKHZhbD1pc0FycmF5KHZhbCk/W3ZhbF06dmFsKSxvcHRpb25zLmNvbW1hJiZpc0FycmF5KHZhbCkmJnZhbC5sZW5ndGg+b3B0aW9ucy5hcnJheUxpbWl0KXtpZihvcHRpb25zLnRocm93T25MaW1pdEV4Y2VlZGVkKXRocm93IG5ldyBSYW5nZUVycm9yKCJBcnJheSBsaW1pdCBleGNlZWRlZC4gT25seSAiK29wdGlvbnMuYXJyYXlMaW1pdCsiIGVsZW1lbnQiKygxPT09b3B0aW9ucy5hcnJheUxpbWl0PyIiOiJzIikrIiBhbGxvd2VkIGluIGFuIGFycmF5LiIpO3ZhbD11dGlscy5jb21iaW5lKFtdLHZhbCxvcHRpb25zLmFycmF5TGltaXQsb3B0aW9ucy5wbGFpbk9iamVjdHMpfWlmKG51bGwhPT1rZXkpe3ZhciBleGlzdGluZz1oYXMuY2FsbChvYmosa2V5KTtleGlzdGluZyYmImNvbWJpbmUiPT09b3B0aW9ucy5kdXBsaWNhdGVzP29ialtrZXldPXV0aWxzLmNvbWJpbmUob2JqW2tleV0sdmFsLG9wdGlvbnMuYXJyYXlMaW1pdCxvcHRpb25zLnBsYWluT2JqZWN0cyk6ZXhpc3RpbmcmJiJsYXN0IiE9PW9wdGlvbnMuZHVwbGljYXRlc3x8KG9ialtrZXldPXZhbCl9fXJldHVybiBvYmp9KHN0cixvcHRpb25zKTpzdHIsb2JqPW9wdGlvbnMucGxhaW5PYmplY3RzP3tfX3Byb3RvX186bnVsbH06e30sa2V5cz1PYmplY3Qua2V5cyh0ZW1wT2JqKSxpPTA7aTxrZXlzLmxlbmd0aDsrK2kpe3ZhciBrZXk9a2V5c1tpXSxuZXdPYmo9cGFyc2VLZXlzKGtleSx0ZW1wT2JqW2tleV0sb3B0aW9ucywic3RyaW5nIj09dHlwZW9mIHN0cik7b2JqPXV0aWxzLm1lcmdlKG9iaixuZXdPYmosb3B0aW9ucyl9cmV0dXJuITA9PT1vcHRpb25zLmFsbG93U3BhcnNlP29iajp1dGlscy5jb21wYWN0KG9iail9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9zdHJpbmdpZnkuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBnZXRTaWRlQ2hhbm5lbD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2lkZS1jaGFubmVsL2luZGV4LmpzIiksdXRpbHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi91dGlscy5qcyIpLGZvcm1hdHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9mb3JtYXRzLmpzIiksaGFzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYXJyYXlQcmVmaXhHZW5lcmF0b3JzPXticmFja2V0czpmdW5jdGlvbiBicmFja2V0cyhwcmVmaXgpe3JldHVybiBwcmVmaXgrIltdIn0sY29tbWE6ImNvbW1hIixpbmRpY2VzOmZ1bmN0aW9uIGluZGljZXMocHJlZml4LGtleSl7cmV0dXJuIHByZWZpeCsiWyIra2V5KyJdIn0scmVwZWF0OmZ1bmN0aW9uIHJlcGVhdChwcmVmaXgpe3JldHVybiBwcmVmaXh9fSxpc0FycmF5PUFycmF5LmlzQXJyYXkscHVzaD1BcnJheS5wcm90b3R5cGUucHVzaCxwdXNoVG9BcnJheT1mdW5jdGlvbihhcnIsdmFsdWVPckFycmF5KXtwdXNoLmFwcGx5KGFycixpc0FycmF5KHZhbHVlT3JBcnJheSk/dmFsdWVPckFycmF5Olt2YWx1ZU9yQXJyYXldKX0sdG9JU089RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcsZGVmYXVsdEZvcm1hdD1mb3JtYXRzLmRlZmF1bHQsZGVmYXVsdHM9e2FkZFF1ZXJ5UHJlZml4OiExLGFsbG93RG90czohMSxhbGxvd0VtcHR5QXJyYXlzOiExLGFycmF5Rm9ybWF0OiJpbmRpY2VzIixjaGFyc2V0OiJ1dGYtOCIsY2hhcnNldFNlbnRpbmVsOiExLGNvbW1hUm91bmRUcmlwOiExLGRlbGltaXRlcjoiJiIsZW5jb2RlOiEwLGVuY29kZURvdEluS2V5czohMSxlbmNvZGVyOnV0aWxzLmVuY29kZSxlbmNvZGVWYWx1ZXNPbmx5OiExLGZpbHRlcjp2b2lkIDAsZm9ybWF0OmRlZmF1bHRGb3JtYXQsZm9ybWF0dGVyOmZvcm1hdHMuZm9ybWF0dGVyc1tkZWZhdWx0Rm9ybWF0XSxpbmRpY2VzOiExLHNlcmlhbGl6ZURhdGU6ZnVuY3Rpb24gc2VyaWFsaXplRGF0ZShkYXRlKXtyZXR1cm4gdG9JU08uY2FsbChkYXRlKX0sc2tpcE51bGxzOiExLHN0cmljdE51bGxIYW5kbGluZzohMX0sc2VudGluZWw9e30sc3RyaW5naWZ5PWZ1bmN0aW9uIHN0cmluZ2lmeShvYmplY3QscHJlZml4LGdlbmVyYXRlQXJyYXlQcmVmaXgsY29tbWFSb3VuZFRyaXAsYWxsb3dFbXB0eUFycmF5cyxzdHJpY3ROdWxsSGFuZGxpbmcsc2tpcE51bGxzLGVuY29kZURvdEluS2V5cyxlbmNvZGVyLGZpbHRlcixzb3J0LGFsbG93RG90cyxzZXJpYWxpemVEYXRlLGZvcm1hdCxmb3JtYXR0ZXIsZW5jb2RlVmFsdWVzT25seSxjaGFyc2V0LHNpZGVDaGFubmVsKXtmb3IodmFyIG9iaj1vYmplY3QsdG1wU2M9c2lkZUNoYW5uZWwsc3RlcD0wLGZpbmRGbGFnPSExO3ZvaWQgMCE9PSh0bXBTYz10bXBTYy5nZXQoc2VudGluZWwpKSYmIWZpbmRGbGFnOyl7dmFyIHBvcz10bXBTYy5nZXQob2JqZWN0KTtpZihzdGVwKz0xLHZvaWQgMCE9PXBvcyl7aWYocG9zPT09c3RlcCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3ljbGljIG9iamVjdCB2YWx1ZSIpO2ZpbmRGbGFnPSEwfXZvaWQgMD09PXRtcFNjLmdldChzZW50aW5lbCkmJihzdGVwPTApfWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBmaWx0ZXI/b2JqPWZpbHRlcihwcmVmaXgsb2JqKTpvYmogaW5zdGFuY2VvZiBEYXRlP29iaj1zZXJpYWxpemVEYXRlKG9iaik6ImNvbW1hIj09PWdlbmVyYXRlQXJyYXlQcmVmaXgmJmlzQXJyYXkob2JqKSYmKG9iaj11dGlscy5tYXliZU1hcChvYmosZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGU/c2VyaWFsaXplRGF0ZSh2YWx1ZSk6dmFsdWV9KSksbnVsbD09PW9iail7aWYoc3RyaWN0TnVsbEhhbmRsaW5nKXJldHVybiBlbmNvZGVyJiYhZW5jb2RlVmFsdWVzT25seT9lbmNvZGVyKHByZWZpeCxkZWZhdWx0cy5lbmNvZGVyLGNoYXJzZXQsImtleSIsZm9ybWF0KTpwcmVmaXg7b2JqPSIifWlmKGZ1bmN0aW9uIGlzTm9uTnVsbGlzaFByaW1pdGl2ZSh2KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHZ8fCJudW1iZXIiPT10eXBlb2Ygdnx8ImJvb2xlYW4iPT10eXBlb2Ygdnx8InN5bWJvbCI9PXR5cGVvZiB2fHwiYmlnaW50Ij09dHlwZW9mIHZ9KG9iail8fHV0aWxzLmlzQnVmZmVyKG9iaikpcmV0dXJuIGVuY29kZXI/W2Zvcm1hdHRlcihlbmNvZGVWYWx1ZXNPbmx5P3ByZWZpeDplbmNvZGVyKHByZWZpeCxkZWZhdWx0cy5lbmNvZGVyLGNoYXJzZXQsImtleSIsZm9ybWF0KSkrIj0iK2Zvcm1hdHRlcihlbmNvZGVyKG9iaixkZWZhdWx0cy5lbmNvZGVyLGNoYXJzZXQsInZhbHVlIixmb3JtYXQpKV06W2Zvcm1hdHRlcihwcmVmaXgpKyI9Iitmb3JtYXR0ZXIoU3RyaW5nKG9iaikpXTt2YXIgb2JqS2V5cyx2YWx1ZXM9W107aWYodm9pZCAwPT09b2JqKXJldHVybiB2YWx1ZXM7aWYoImNvbW1hIj09PWdlbmVyYXRlQXJyYXlQcmVmaXgmJmlzQXJyYXkob2JqKSllbmNvZGVWYWx1ZXNPbmx5JiZlbmNvZGVyJiYob2JqPXV0aWxzLm1heWJlTWFwKG9iaixlbmNvZGVyKSksb2JqS2V5cz1be3ZhbHVlOm9iai5sZW5ndGg+MD9vYmouam9pbigiLCIpfHxudWxsOnZvaWQgMH1dO2Vsc2UgaWYoaXNBcnJheShmaWx0ZXIpKW9iaktleXM9ZmlsdGVyO2Vsc2V7dmFyIGtleXM9T2JqZWN0LmtleXMob2JqKTtvYmpLZXlzPXNvcnQ/a2V5cy5zb3J0KHNvcnQpOmtleXN9dmFyIGVuY29kZWRQcmVmaXg9ZW5jb2RlRG90SW5LZXlzP1N0cmluZyhwcmVmaXgpLnJlcGxhY2UoL1wuL2csIiUyRSIpOlN0cmluZyhwcmVmaXgpLGFkanVzdGVkUHJlZml4PWNvbW1hUm91bmRUcmlwJiZpc0FycmF5KG9iaikmJjE9PT1vYmoubGVuZ3RoP2VuY29kZWRQcmVmaXgrIltdIjplbmNvZGVkUHJlZml4O2lmKGFsbG93RW1wdHlBcnJheXMmJmlzQXJyYXkob2JqKSYmMD09PW9iai5sZW5ndGgpcmV0dXJuIGFkanVzdGVkUHJlZml4KyJbXSI7Zm9yKHZhciBqPTA7ajxvYmpLZXlzLmxlbmd0aDsrK2ope3ZhciBrZXk9b2JqS2V5c1tqXSx2YWx1ZT0ib2JqZWN0Ij09dHlwZW9mIGtleSYma2V5JiZ2b2lkIDAhPT1rZXkudmFsdWU/a2V5LnZhbHVlOm9ialtrZXldO2lmKCFza2lwTnVsbHN8fG51bGwhPT12YWx1ZSl7dmFyIGVuY29kZWRLZXk9YWxsb3dEb3RzJiZlbmNvZGVEb3RJbktleXM/U3RyaW5nKGtleSkucmVwbGFjZSgvXC4vZywiJTJFIik6U3RyaW5nKGtleSksa2V5UHJlZml4PWlzQXJyYXkob2JqKT8iZnVuY3Rpb24iPT10eXBlb2YgZ2VuZXJhdGVBcnJheVByZWZpeD9nZW5lcmF0ZUFycmF5UHJlZml4KGFkanVzdGVkUHJlZml4LGVuY29kZWRLZXkpOmFkanVzdGVkUHJlZml4OmFkanVzdGVkUHJlZml4KyhhbGxvd0RvdHM/Ii4iK2VuY29kZWRLZXk6IlsiK2VuY29kZWRLZXkrIl0iKTtzaWRlQ2hhbm5lbC5zZXQob2JqZWN0LHN0ZXApO3ZhciB2YWx1ZVNpZGVDaGFubmVsPWdldFNpZGVDaGFubmVsKCk7dmFsdWVTaWRlQ2hhbm5lbC5zZXQoc2VudGluZWwsc2lkZUNoYW5uZWwpLHB1c2hUb0FycmF5KHZhbHVlcyxzdHJpbmdpZnkodmFsdWUsa2V5UHJlZml4LGdlbmVyYXRlQXJyYXlQcmVmaXgsY29tbWFSb3VuZFRyaXAsYWxsb3dFbXB0eUFycmF5cyxzdHJpY3ROdWxsSGFuZGxpbmcsc2tpcE51bGxzLGVuY29kZURvdEluS2V5cywiY29tbWEiPT09Z2VuZXJhdGVBcnJheVByZWZpeCYmZW5jb2RlVmFsdWVzT25seSYmaXNBcnJheShvYmopP251bGw6ZW5jb2RlcixmaWx0ZXIsc29ydCxhbGxvd0RvdHMsc2VyaWFsaXplRGF0ZSxmb3JtYXQsZm9ybWF0dGVyLGVuY29kZVZhbHVlc09ubHksY2hhcnNldCx2YWx1ZVNpZGVDaGFubmVsKSl9fXJldHVybiB2YWx1ZXN9O21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKG9iamVjdCxvcHRzKXt2YXIgb2JqS2V5cyxvYmo9b2JqZWN0LG9wdGlvbnM9ZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyhvcHRzKXtpZighb3B0cylyZXR1cm4gZGVmYXVsdHM7aWYodm9pZCAwIT09b3B0cy5hbGxvd0VtcHR5QXJyYXlzJiYiYm9vbGVhbiIhPXR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiYGFsbG93RW1wdHlBcnJheXNgIG9wdGlvbiBjYW4gb25seSBiZSBgdHJ1ZWAgb3IgYGZhbHNlYCwgd2hlbiBwcm92aWRlZCIpO2lmKHZvaWQgMCE9PW9wdHMuZW5jb2RlRG90SW5LZXlzJiYiYm9vbGVhbiIhPXR5cGVvZiBvcHRzLmVuY29kZURvdEluS2V5cyl0aHJvdyBuZXcgVHlwZUVycm9yKCJgZW5jb2RlRG90SW5LZXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQiKTtpZihudWxsIT09b3B0cy5lbmNvZGVyJiZ2b2lkIDAhPT1vcHRzLmVuY29kZXImJiJmdW5jdGlvbiIhPXR5cGVvZiBvcHRzLmVuY29kZXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRW5jb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4iKTt2YXIgY2hhcnNldD1vcHRzLmNoYXJzZXR8fGRlZmF1bHRzLmNoYXJzZXQ7aWYodm9pZCAwIT09b3B0cy5jaGFyc2V0JiYidXRmLTgiIT09b3B0cy5jaGFyc2V0JiYiaXNvLTg4NTktMSIhPT1vcHRzLmNoYXJzZXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGNoYXJzZXQgb3B0aW9uIG11c3QgYmUgZWl0aGVyIHV0Zi04LCBpc28tODg1OS0xLCBvciB1bmRlZmluZWQiKTt2YXIgZm9ybWF0PWZvcm1hdHMuZGVmYXVsdDtpZih2b2lkIDAhPT1vcHRzLmZvcm1hdCl7aWYoIWhhcy5jYWxsKGZvcm1hdHMuZm9ybWF0dGVycyxvcHRzLmZvcm1hdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBmb3JtYXQgb3B0aW9uIHByb3ZpZGVkLiIpO2Zvcm1hdD1vcHRzLmZvcm1hdH12YXIgYXJyYXlGb3JtYXQsZm9ybWF0dGVyPWZvcm1hdHMuZm9ybWF0dGVyc1tmb3JtYXRdLGZpbHRlcj1kZWZhdWx0cy5maWx0ZXI7aWYoKCJmdW5jdGlvbiI9PXR5cGVvZiBvcHRzLmZpbHRlcnx8aXNBcnJheShvcHRzLmZpbHRlcikpJiYoZmlsdGVyPW9wdHMuZmlsdGVyKSxhcnJheUZvcm1hdD1vcHRzLmFycmF5Rm9ybWF0IGluIGFycmF5UHJlZml4R2VuZXJhdG9ycz9vcHRzLmFycmF5Rm9ybWF0OiJpbmRpY2VzImluIG9wdHM/b3B0cy5pbmRpY2VzPyJpbmRpY2VzIjoicmVwZWF0IjpkZWZhdWx0cy5hcnJheUZvcm1hdCwiY29tbWFSb3VuZFRyaXAiaW4gb3B0cyYmImJvb2xlYW4iIT10eXBlb2Ygb3B0cy5jb21tYVJvdW5kVHJpcCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgY29tbWFSb3VuZFRyaXBgIG11c3QgYmUgYSBib29sZWFuLCBvciBhYnNlbnQiKTt2YXIgYWxsb3dEb3RzPXZvaWQgMD09PW9wdHMuYWxsb3dEb3RzPyEwPT09b3B0cy5lbmNvZGVEb3RJbktleXN8fGRlZmF1bHRzLmFsbG93RG90czohIW9wdHMuYWxsb3dEb3RzO3JldHVybnthZGRRdWVyeVByZWZpeDoiYm9vbGVhbiI9PXR5cGVvZiBvcHRzLmFkZFF1ZXJ5UHJlZml4P29wdHMuYWRkUXVlcnlQcmVmaXg6ZGVmYXVsdHMuYWRkUXVlcnlQcmVmaXgsYWxsb3dEb3RzLGFsbG93RW1wdHlBcnJheXM6ImJvb2xlYW4iPT10eXBlb2Ygb3B0cy5hbGxvd0VtcHR5QXJyYXlzPyEhb3B0cy5hbGxvd0VtcHR5QXJyYXlzOmRlZmF1bHRzLmFsbG93RW1wdHlBcnJheXMsYXJyYXlGb3JtYXQsY2hhcnNldCxjaGFyc2V0U2VudGluZWw6ImJvb2xlYW4iPT10eXBlb2Ygb3B0cy5jaGFyc2V0U2VudGluZWw/b3B0cy5jaGFyc2V0U2VudGluZWw6ZGVmYXVsdHMuY2hhcnNldFNlbnRpbmVsLGNvbW1hUm91bmRUcmlwOiEhb3B0cy5jb21tYVJvdW5kVHJpcCxkZWxpbWl0ZXI6dm9pZCAwPT09b3B0cy5kZWxpbWl0ZXI/ZGVmYXVsdHMuZGVsaW1pdGVyOm9wdHMuZGVsaW1pdGVyLGVuY29kZToiYm9vbGVhbiI9PXR5cGVvZiBvcHRzLmVuY29kZT9vcHRzLmVuY29kZTpkZWZhdWx0cy5lbmNvZGUsZW5jb2RlRG90SW5LZXlzOiJib29sZWFuIj09dHlwZW9mIG9wdHMuZW5jb2RlRG90SW5LZXlzP29wdHMuZW5jb2RlRG90SW5LZXlzOmRlZmF1bHRzLmVuY29kZURvdEluS2V5cyxlbmNvZGVyOiJmdW5jdGlvbiI9PXR5cGVvZiBvcHRzLmVuY29kZXI/b3B0cy5lbmNvZGVyOmRlZmF1bHRzLmVuY29kZXIsZW5jb2RlVmFsdWVzT25seToiYm9vbGVhbiI9PXR5cGVvZiBvcHRzLmVuY29kZVZhbHVlc09ubHk/b3B0cy5lbmNvZGVWYWx1ZXNPbmx5OmRlZmF1bHRzLmVuY29kZVZhbHVlc09ubHksZmlsdGVyLGZvcm1hdCxmb3JtYXR0ZXIsc2VyaWFsaXplRGF0ZToiZnVuY3Rpb24iPT10eXBlb2Ygb3B0cy5zZXJpYWxpemVEYXRlP29wdHMuc2VyaWFsaXplRGF0ZTpkZWZhdWx0cy5zZXJpYWxpemVEYXRlLHNraXBOdWxsczoiYm9vbGVhbiI9PXR5cGVvZiBvcHRzLnNraXBOdWxscz9vcHRzLnNraXBOdWxsczpkZWZhdWx0cy5za2lwTnVsbHMsc29ydDoiZnVuY3Rpb24iPT10eXBlb2Ygb3B0cy5zb3J0P29wdHMuc29ydDpudWxsLHN0cmljdE51bGxIYW5kbGluZzoiYm9vbGVhbiI9PXR5cGVvZiBvcHRzLnN0cmljdE51bGxIYW5kbGluZz9vcHRzLnN0cmljdE51bGxIYW5kbGluZzpkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmd9fShvcHRzKTsiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucy5maWx0ZXI/b2JqPSgwLG9wdGlvbnMuZmlsdGVyKSgiIixvYmopOmlzQXJyYXkob3B0aW9ucy5maWx0ZXIpJiYob2JqS2V5cz1vcHRpb25zLmZpbHRlcik7dmFyIGtleXM9W107aWYoIm9iamVjdCIhPXR5cGVvZiBvYmp8fG51bGw9PT1vYmopcmV0dXJuIiI7dmFyIGdlbmVyYXRlQXJyYXlQcmVmaXg9YXJyYXlQcmVmaXhHZW5lcmF0b3JzW29wdGlvbnMuYXJyYXlGb3JtYXRdLGNvbW1hUm91bmRUcmlwPSJjb21tYSI9PT1nZW5lcmF0ZUFycmF5UHJlZml4JiZvcHRpb25zLmNvbW1hUm91bmRUcmlwO29iaktleXN8fChvYmpLZXlzPU9iamVjdC5rZXlzKG9iaikpLG9wdGlvbnMuc29ydCYmb2JqS2V5cy5zb3J0KG9wdGlvbnMuc29ydCk7Zm9yKHZhciBzaWRlQ2hhbm5lbD1nZXRTaWRlQ2hhbm5lbCgpLGk9MDtpPG9iaktleXMubGVuZ3RoOysraSl7dmFyIGtleT1vYmpLZXlzW2ldLHZhbHVlPW9ialtrZXldO29wdGlvbnMuc2tpcE51bGxzJiZudWxsPT09dmFsdWV8fHB1c2hUb0FycmF5KGtleXMsc3RyaW5naWZ5KHZhbHVlLGtleSxnZW5lcmF0ZUFycmF5UHJlZml4LGNvbW1hUm91bmRUcmlwLG9wdGlvbnMuYWxsb3dFbXB0eUFycmF5cyxvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyxvcHRpb25zLnNraXBOdWxscyxvcHRpb25zLmVuY29kZURvdEluS2V5cyxvcHRpb25zLmVuY29kZT9vcHRpb25zLmVuY29kZXI6bnVsbCxvcHRpb25zLmZpbHRlcixvcHRpb25zLnNvcnQsb3B0aW9ucy5hbGxvd0RvdHMsb3B0aW9ucy5zZXJpYWxpemVEYXRlLG9wdGlvbnMuZm9ybWF0LG9wdGlvbnMuZm9ybWF0dGVyLG9wdGlvbnMuZW5jb2RlVmFsdWVzT25seSxvcHRpb25zLmNoYXJzZXQsc2lkZUNoYW5uZWwpKX12YXIgam9pbmVkPWtleXMuam9pbihvcHRpb25zLmRlbGltaXRlcikscHJlZml4PSEwPT09b3B0aW9ucy5hZGRRdWVyeVByZWZpeD8iPyI6IiI7cmV0dXJuIG9wdGlvbnMuY2hhcnNldFNlbnRpbmVsJiYoImlzby04ODU5LTEiPT09b3B0aW9ucy5jaGFyc2V0P3ByZWZpeCs9InV0Zjg9JTI2JTIzMTAwMDMlM0ImIjpwcmVmaXgrPSJ1dGY4PSVFMiU5QyU5MyYiKSxqb2luZWQubGVuZ3RoPjA/cHJlZml4K2pvaW5lZDoiIn19LCIuLi8uLi9ub2RlX21vZHVsZXMvcXMvbGliL3V0aWxzLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgZm9ybWF0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcXMvbGliL2Zvcm1hdHMuanMiKSxnZXRTaWRlQ2hhbm5lbD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2lkZS1jaGFubmVsL2luZGV4LmpzIiksaGFzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksaXNBcnJheT1BcnJheS5pc0FycmF5LG92ZXJmbG93Q2hhbm5lbD1nZXRTaWRlQ2hhbm5lbCgpLG1hcmtPdmVyZmxvdz1mdW5jdGlvbiBtYXJrT3ZlcmZsb3cob2JqLG1heEluZGV4KXtyZXR1cm4gb3ZlcmZsb3dDaGFubmVsLnNldChvYmosbWF4SW5kZXgpLG9ian0saXNPdmVyZmxvdz1mdW5jdGlvbiBpc092ZXJmbG93KG9iail7cmV0dXJuIG92ZXJmbG93Q2hhbm5lbC5oYXMob2JqKX0sZ2V0TWF4SW5kZXg9ZnVuY3Rpb24gZ2V0TWF4SW5kZXgob2JqKXtyZXR1cm4gb3ZlcmZsb3dDaGFubmVsLmdldChvYmopfSxzZXRNYXhJbmRleD1mdW5jdGlvbiBzZXRNYXhJbmRleChvYmosbWF4SW5kZXgpe292ZXJmbG93Q2hhbm5lbC5zZXQob2JqLG1heEluZGV4KX0saGV4VGFibGU9ZnVuY3Rpb24oKXtmb3IodmFyIGFycmF5PVtdLGk9MDtpPDI1NjsrK2kpYXJyYXlbYXJyYXkubGVuZ3RoXT0iJSIrKChpPDE2PyIwIjoiIikraS50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIGFycmF5fSgpLGFycmF5VG9PYmplY3Q9ZnVuY3Rpb24gYXJyYXlUb09iamVjdChzb3VyY2Usb3B0aW9ucyl7Zm9yKHZhciBvYmo9b3B0aW9ucyYmb3B0aW9ucy5wbGFpbk9iamVjdHM/e19fcHJvdG9fXzpudWxsfTp7fSxpPTA7aTxzb3VyY2UubGVuZ3RoOysraSl2b2lkIDAhPT1zb3VyY2VbaV0mJihvYmpbaV09c291cmNlW2ldKTtyZXR1cm4gb2JqfTttb2R1bGUuZXhwb3J0cz17YXJyYXlUb09iamVjdCxhc3NpZ246ZnVuY3Rpb24gYXNzaWduU2luZ2xlU291cmNlKHRhcmdldCxzb3VyY2Upe3JldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbihhY2Msa2V5KXtyZXR1cm4gYWNjW2tleV09c291cmNlW2tleV0sYWNjfSx0YXJnZXQpfSxjb21iaW5lOmZ1bmN0aW9uIGNvbWJpbmUoYSxiLGFycmF5TGltaXQscGxhaW5PYmplY3RzKXtpZihpc092ZXJmbG93KGEpKXt2YXIgbmV3SW5kZXg9Z2V0TWF4SW5kZXgoYSkrMTtyZXR1cm4gYVtuZXdJbmRleF09YixzZXRNYXhJbmRleChhLG5ld0luZGV4KSxhfXZhciByZXN1bHQ9W10uY29uY2F0KGEsYik7cmV0dXJuIHJlc3VsdC5sZW5ndGg+YXJyYXlMaW1pdD9tYXJrT3ZlcmZsb3coYXJyYXlUb09iamVjdChyZXN1bHQse3BsYWluT2JqZWN0c30pLHJlc3VsdC5sZW5ndGgtMSk6cmVzdWx0fSxjb21wYWN0OmZ1bmN0aW9uIGNvbXBhY3QodmFsdWUpe2Zvcih2YXIgcXVldWU9W3tvYmo6e286dmFsdWV9LHByb3A6Im8ifV0scmVmcz1bXSxpPTA7aTxxdWV1ZS5sZW5ndGg7KytpKWZvcih2YXIgaXRlbT1xdWV1ZVtpXSxvYmo9aXRlbS5vYmpbaXRlbS5wcm9wXSxrZXlzPU9iamVjdC5rZXlzKG9iaiksaj0wO2o8a2V5cy5sZW5ndGg7KytqKXt2YXIga2V5PWtleXNbal0sdmFsPW9ialtrZXldOyJvYmplY3QiPT10eXBlb2YgdmFsJiZudWxsIT09dmFsJiYtMT09PXJlZnMuaW5kZXhPZih2YWwpJiYocXVldWVbcXVldWUubGVuZ3RoXT17b2JqLHByb3A6a2V5fSxyZWZzW3JlZnMubGVuZ3RoXT12YWwpfXJldHVybiBmdW5jdGlvbiBjb21wYWN0UXVldWUocXVldWUpe2Zvcig7cXVldWUubGVuZ3RoPjE7KXt2YXIgaXRlbT1xdWV1ZS5wb3AoKSxvYmo9aXRlbS5vYmpbaXRlbS5wcm9wXTtpZihpc0FycmF5KG9iaikpe2Zvcih2YXIgY29tcGFjdGVkPVtdLGo9MDtqPG9iai5sZW5ndGg7KytqKXZvaWQgMCE9PW9ialtqXSYmKGNvbXBhY3RlZFtjb21wYWN0ZWQubGVuZ3RoXT1vYmpbal0pO2l0ZW0ub2JqW2l0ZW0ucHJvcF09Y29tcGFjdGVkfX19KHF1ZXVlKSx2YWx1ZX0sZGVjb2RlOmZ1bmN0aW9uKHN0cixkZWZhdWx0RGVjb2RlcixjaGFyc2V0KXt2YXIgc3RyV2l0aG91dFBsdXM9c3RyLnJlcGxhY2UoL1wrL2csIiAiKTtpZigiaXNvLTg4NTktMSI9PT1jaGFyc2V0KXJldHVybiBzdHJXaXRob3V0UGx1cy5yZXBsYWNlKC8lWzAtOWEtZl17Mn0vZ2ksdW5lc2NhcGUpO3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cldpdGhvdXRQbHVzKX1jYXRjaChlKXtyZXR1cm4gc3RyV2l0aG91dFBsdXN9fSxlbmNvZGU6ZnVuY3Rpb24gZW5jb2RlKHN0cixkZWZhdWx0RW5jb2RlcixjaGFyc2V0LGtpbmQsZm9ybWF0KXtpZigwPT09c3RyLmxlbmd0aClyZXR1cm4gc3RyO3ZhciBzdHJpbmc9c3RyO2lmKCJzeW1ib2wiPT10eXBlb2Ygc3RyP3N0cmluZz1TeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3RyKToic3RyaW5nIiE9dHlwZW9mIHN0ciYmKHN0cmluZz1TdHJpbmcoc3RyKSksImlzby04ODU5LTEiPT09Y2hhcnNldClyZXR1cm4gZXNjYXBlKHN0cmluZykucmVwbGFjZSgvJXVbMC05YS1mXXs0fS9naSxmdW5jdGlvbigkMCl7cmV0dXJuIiUyNiUyMyIrcGFyc2VJbnQoJDAuc2xpY2UoMiksMTYpKyIlM0IifSk7Zm9yKHZhciBvdXQ9IiIsaj0wO2o8c3RyaW5nLmxlbmd0aDtqKz0xMDI0KXtmb3IodmFyIHNlZ21lbnQ9c3RyaW5nLmxlbmd0aD49MTAyND9zdHJpbmcuc2xpY2UoaixqKzEwMjQpOnN0cmluZyxhcnI9W10saT0wO2k8c2VnbWVudC5sZW5ndGg7KytpKXt2YXIgYz1zZWdtZW50LmNoYXJDb2RlQXQoaSk7NDU9PT1jfHw0Nj09PWN8fDk1PT09Y3x8MTI2PT09Y3x8Yz49NDgmJmM8PTU3fHxjPj02NSYmYzw9OTB8fGM+PTk3JiZjPD0xMjJ8fGZvcm1hdD09PWZvcm1hdHMuUkZDMTczOCYmKDQwPT09Y3x8NDE9PT1jKT9hcnJbYXJyLmxlbmd0aF09c2VnbWVudC5jaGFyQXQoaSk6YzwxMjg/YXJyW2Fyci5sZW5ndGhdPWhleFRhYmxlW2NdOmM8MjA0OD9hcnJbYXJyLmxlbmd0aF09aGV4VGFibGVbMTkyfGM+PjZdK2hleFRhYmxlWzEyOHw2MyZjXTpjPDU1Mjk2fHxjPj01NzM0ND9hcnJbYXJyLmxlbmd0aF09aGV4VGFibGVbMjI0fGM+PjEyXStoZXhUYWJsZVsxMjh8Yz4+NiY2M10raGV4VGFibGVbMTI4fDYzJmNdOihpKz0xLGM9NjU1MzYrKCgxMDIzJmMpPDwxMHwxMDIzJnNlZ21lbnQuY2hhckNvZGVBdChpKSksYXJyW2Fyci5sZW5ndGhdPWhleFRhYmxlWzI0MHxjPj4xOF0raGV4VGFibGVbMTI4fGM+PjEyJjYzXStoZXhUYWJsZVsxMjh8Yz4+NiY2M10raGV4VGFibGVbMTI4fDYzJmNdKX1vdXQrPWFyci5qb2luKCIiKX1yZXR1cm4gb3V0fSxpc0J1ZmZlcjpmdW5jdGlvbiBpc0J1ZmZlcihvYmope3JldHVybiEoIW9ianx8Im9iamVjdCIhPXR5cGVvZiBvYmopJiYhIShvYmouY29uc3RydWN0b3ImJm9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iaikpfSxpc092ZXJmbG93LGlzUmVnRXhwOmZ1bmN0aW9uIGlzUmVnRXhwKG9iail7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKX0sbWFya092ZXJmbG93LG1heWJlTWFwOmZ1bmN0aW9uIG1heWJlTWFwKHZhbCxmbil7aWYoaXNBcnJheSh2YWwpKXtmb3IodmFyIG1hcHBlZD1bXSxpPTA7aTx2YWwubGVuZ3RoO2krPTEpbWFwcGVkW21hcHBlZC5sZW5ndGhdPWZuKHZhbFtpXSk7cmV0dXJuIG1hcHBlZH1yZXR1cm4gZm4odmFsKX0sbWVyZ2U6ZnVuY3Rpb24gbWVyZ2UodGFyZ2V0LHNvdXJjZSxvcHRpb25zKXtpZighc291cmNlKXJldHVybiB0YXJnZXQ7aWYoIm9iamVjdCIhPXR5cGVvZiBzb3VyY2UmJiJmdW5jdGlvbiIhPXR5cGVvZiBzb3VyY2Upe2lmKGlzQXJyYXkodGFyZ2V0KSl7dmFyIG5leHRJbmRleD10YXJnZXQubGVuZ3RoO2lmKG9wdGlvbnMmJiJudW1iZXIiPT10eXBlb2Ygb3B0aW9ucy5hcnJheUxpbWl0JiZuZXh0SW5kZXg+b3B0aW9ucy5hcnJheUxpbWl0KXJldHVybiBtYXJrT3ZlcmZsb3coYXJyYXlUb09iamVjdCh0YXJnZXQuY29uY2F0KHNvdXJjZSksb3B0aW9ucyksbmV4dEluZGV4KTt0YXJnZXRbbmV4dEluZGV4XT1zb3VyY2V9ZWxzZXtpZighdGFyZ2V0fHwib2JqZWN0IiE9dHlwZW9mIHRhcmdldClyZXR1cm5bdGFyZ2V0LHNvdXJjZV07aWYoaXNPdmVyZmxvdyh0YXJnZXQpKXt2YXIgbmV3SW5kZXg9Z2V0TWF4SW5kZXgodGFyZ2V0KSsxO3RhcmdldFtuZXdJbmRleF09c291cmNlLHNldE1heEluZGV4KHRhcmdldCxuZXdJbmRleCl9ZWxzZShvcHRpb25zJiYob3B0aW9ucy5wbGFpbk9iamVjdHN8fG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKXx8IWhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsc291cmNlKSkmJih0YXJnZXRbc291cmNlXT0hMCl9cmV0dXJuIHRhcmdldH1pZighdGFyZ2V0fHwib2JqZWN0IiE9dHlwZW9mIHRhcmdldCl7aWYoaXNPdmVyZmxvdyhzb3VyY2UpKXtmb3IodmFyIHNvdXJjZUtleXM9T2JqZWN0LmtleXMoc291cmNlKSxyZXN1bHQ9b3B0aW9ucyYmb3B0aW9ucy5wbGFpbk9iamVjdHM/e19fcHJvdG9fXzpudWxsLDA6dGFyZ2V0fTp7MDp0YXJnZXR9LG09MDttPHNvdXJjZUtleXMubGVuZ3RoO20rKyl7cmVzdWx0W3BhcnNlSW50KHNvdXJjZUtleXNbbV0sMTApKzFdPXNvdXJjZVtzb3VyY2VLZXlzW21dXX1yZXR1cm4gbWFya092ZXJmbG93KHJlc3VsdCxnZXRNYXhJbmRleChzb3VyY2UpKzEpfXZhciBjb21iaW5lZD1bdGFyZ2V0XS5jb25jYXQoc291cmNlKTtyZXR1cm4gb3B0aW9ucyYmIm51bWJlciI9PXR5cGVvZiBvcHRpb25zLmFycmF5TGltaXQmJmNvbWJpbmVkLmxlbmd0aD5vcHRpb25zLmFycmF5TGltaXQ/bWFya092ZXJmbG93KGFycmF5VG9PYmplY3QoY29tYmluZWQsb3B0aW9ucyksY29tYmluZWQubGVuZ3RoLTEpOmNvbWJpbmVkfXZhciBtZXJnZVRhcmdldD10YXJnZXQ7cmV0dXJuIGlzQXJyYXkodGFyZ2V0KSYmIWlzQXJyYXkoc291cmNlKSYmKG1lcmdlVGFyZ2V0PWFycmF5VG9PYmplY3QodGFyZ2V0LG9wdGlvbnMpKSxpc0FycmF5KHRhcmdldCkmJmlzQXJyYXkoc291cmNlKT8oc291cmNlLmZvckVhY2goZnVuY3Rpb24oaXRlbSxpKXtpZihoYXMuY2FsbCh0YXJnZXQsaSkpe3ZhciB0YXJnZXRJdGVtPXRhcmdldFtpXTt0YXJnZXRJdGVtJiYib2JqZWN0Ij09dHlwZW9mIHRhcmdldEl0ZW0mJml0ZW0mJiJvYmplY3QiPT10eXBlb2YgaXRlbT90YXJnZXRbaV09bWVyZ2UodGFyZ2V0SXRlbSxpdGVtLG9wdGlvbnMpOnRhcmdldFt0YXJnZXQubGVuZ3RoXT1pdGVtfWVsc2UgdGFyZ2V0W2ldPWl0ZW19KSx0YXJnZXQpOk9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uKGFjYyxrZXkpe3ZhciB2YWx1ZT1zb3VyY2Vba2V5XTtpZihoYXMuY2FsbChhY2Msa2V5KT9hY2Nba2V5XT1tZXJnZShhY2Nba2V5XSx2YWx1ZSxvcHRpb25zKTphY2Nba2V5XT12YWx1ZSxpc092ZXJmbG93KHNvdXJjZSkmJiFpc092ZXJmbG93KGFjYykmJm1hcmtPdmVyZmxvdyhhY2MsZ2V0TWF4SW5kZXgoc291cmNlKSksaXNPdmVyZmxvdyhhY2MpKXt2YXIga2V5TnVtPXBhcnNlSW50KGtleSwxMCk7U3RyaW5nKGtleU51bSk9PT1rZXkmJmtleU51bT49MCYma2V5TnVtPmdldE1heEluZGV4KGFjYykmJnNldE1heEluZGV4KGFjYyxrZXlOdW0pfXJldHVybiBhY2N9LG1lcmdlVGFyZ2V0KX19fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiKG1vZHVsZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaixwcm9wKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaixwcm9wKX1tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihxcyxzZXAsZXEsb3B0aW9ucyl7c2VwPXNlcHx8IiYiLGVxPWVxfHwiPSI7dmFyIG9iaj17fTtpZigic3RyaW5nIiE9dHlwZW9mIHFzfHwwPT09cXMubGVuZ3RoKXJldHVybiBvYmo7dmFyIHJlZ2V4cD0vXCsvZztxcz1xcy5zcGxpdChzZXApO3ZhciBtYXhLZXlzPTFlMztvcHRpb25zJiYibnVtYmVyIj09dHlwZW9mIG9wdGlvbnMubWF4S2V5cyYmKG1heEtleXM9b3B0aW9ucy5tYXhLZXlzKTt2YXIgbGVuPXFzLmxlbmd0aDttYXhLZXlzPjAmJmxlbj5tYXhLZXlzJiYobGVuPW1heEtleXMpO2Zvcih2YXIgaT0wO2k8bGVuOysraSl7dmFyIGtzdHIsdnN0cixrLHYseD1xc1tpXS5yZXBsYWNlKHJlZ2V4cCwiJTIwIiksaWR4PXguaW5kZXhPZihlcSk7aWR4Pj0wPyhrc3RyPXguc3Vic3RyKDAsaWR4KSx2c3RyPXguc3Vic3RyKGlkeCsxKSk6KGtzdHI9eCx2c3RyPSIiKSxrPWRlY29kZVVSSUNvbXBvbmVudChrc3RyKSx2PWRlY29kZVVSSUNvbXBvbmVudCh2c3RyKSxoYXNPd25Qcm9wZXJ0eShvYmosayk/aXNBcnJheShvYmpba10pP29ialtrXS5wdXNoKHYpOm9ialtrXT1bb2JqW2tdLHZdOm9ialtrXT12fXJldHVybiBvYmp9O3ZhciBpc0FycmF5PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHhzKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIobW9kdWxlKXsidXNlIHN0cmljdCI7dmFyIHN0cmluZ2lmeVByaW1pdGl2ZT1mdW5jdGlvbih2KXtzd2l0Y2godHlwZW9mIHYpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gdjtjYXNlImJvb2xlYW4iOnJldHVybiB2PyJ0cnVlIjoiZmFsc2UiO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNGaW5pdGUodik/djoiIjtkZWZhdWx0OnJldHVybiIifX07bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24ob2JqLHNlcCxlcSxuYW1lKXtyZXR1cm4gc2VwPXNlcHx8IiYiLGVxPWVxfHwiPSIsbnVsbD09PW9iaiYmKG9iaj12b2lkIDApLCJvYmplY3QiPT10eXBlb2Ygb2JqP21hcChvYmplY3RLZXlzKG9iaiksZnVuY3Rpb24oayl7dmFyIGtzPWVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpK2VxO3JldHVybiBpc0FycmF5KG9ialtrXSk/bWFwKG9ialtrXSxmdW5jdGlvbih2KXtyZXR1cm4ga3MrZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSl9KS5qb2luKHNlcCk6a3MrZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmpba10pKX0pLmpvaW4oc2VwKTpuYW1lP2VuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpK2VxK2VuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk6IiJ9O3ZhciBpc0FycmF5PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHhzKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKX07ZnVuY3Rpb24gbWFwKHhzLGYpe2lmKHhzLm1hcClyZXR1cm4geHMubWFwKGYpO2Zvcih2YXIgcmVzPVtdLGk9MDtpPHhzLmxlbmd0aDtpKyspcmVzLnB1c2goZih4c1tpXSxpKSk7cmV0dXJuIHJlc312YXIgb2JqZWN0S2V5cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24ob2JqKXt2YXIgcmVzPVtdO2Zvcih2YXIga2V5IGluIG9iailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLGtleSkmJnJlcy5wdXNoKGtleSk7cmV0dXJuIHJlc319LCIuLi8uLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2luZGV4LmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0IjtleHBvcnRzLmRlY29kZT1leHBvcnRzLnBhcnNlPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZGVjb2RlLmpzIiksZXhwb3J0cy5lbmNvZGU9ZXhwb3J0cy5zdHJpbmdpZnk9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9lbmNvZGUuanMiKX0sIi4uLy4uL25vZGVfbW9kdWxlcy9yYW5kb21ieXRlcy9icm93c2VyLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgcHJvY2Vzcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvcHJveHkvcHJvY2Vzcy5qcyIpO3ZhciBCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLGNyeXB0bz1fX3dlYnBhY2tfcmVxdWlyZV9fLmcuY3J5cHRvfHxfX3dlYnBhY2tfcmVxdWlyZV9fLmcubXNDcnlwdG87Y3J5cHRvJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIHJhbmRvbUJ5dGVzKHNpemUsY2Ipe2lmKHNpemU+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBieXRlcz1CdWZmZXIuYWxsb2NVbnNhZmUoc2l6ZSk7aWYoc2l6ZT4wKWlmKHNpemU+NjU1MzYpZm9yKHZhciBnZW5lcmF0ZWQ9MDtnZW5lcmF0ZWQ8c2l6ZTtnZW5lcmF0ZWQrPTY1NTM2KWNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnl0ZXMuc2xpY2UoZ2VuZXJhdGVkLGdlbmVyYXRlZCs2NTUzNikpO2Vsc2UgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhieXRlcyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGNiKXJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7Y2IobnVsbCxieXRlcyl9KTtyZXR1cm4gYnl0ZXN9Om1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIG9sZEJyb3dzZXIoKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3JhbmRvbWZpbGwvYnJvd3Nlci5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHByb2Nlc3M9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL3Byb3h5L3Byb2Nlc3MuanMiKTtmdW5jdGlvbiBvbGRCcm93c2VyKCl7dGhyb3cgbmV3IEVycm9yKCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9dmFyIHNhZmVCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikscmFuZG9tYnl0ZXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JhbmRvbWJ5dGVzL2Jyb3dzZXIuanMiKSxCdWZmZXI9c2FmZUJ1ZmZlci5CdWZmZXIsa0J1ZmZlck1heExlbmd0aD1zYWZlQnVmZmVyLmtNYXhMZW5ndGgsY3J5cHRvPV9fd2VicGFja19yZXF1aXJlX18uZy5jcnlwdG98fF9fd2VicGFja19yZXF1aXJlX18uZy5tc0NyeXB0byxrTWF4VWludDMyPU1hdGgucG93KDIsMzIpLTE7ZnVuY3Rpb24gYXNzZXJ0T2Zmc2V0KG9mZnNldCxsZW5ndGgpe2lmKCJudW1iZXIiIT10eXBlb2Ygb2Zmc2V0fHxvZmZzZXQhPW9mZnNldCl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIG51bWJlciIpO2lmKG9mZnNldD5rTWF4VWludDMyfHxvZmZzZXQ8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKG9mZnNldD5rQnVmZmVyTWF4TGVuZ3RofHxvZmZzZXQ+bGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gYXNzZXJ0U2l6ZShzaXplLG9mZnNldCxsZW5ndGgpe2lmKCJudW1iZXIiIT10eXBlb2Ygc2l6ZXx8c2l6ZSE9c2l6ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihzaXplPmtNYXhVaW50MzJ8fHNpemU8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihzaXplK29mZnNldD5sZW5ndGh8fHNpemU+a0J1ZmZlck1heExlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiYnVmZmVyIHRvbyBzbWFsbCIpfWZ1bmN0aW9uIGFjdHVhbEZpbGwoYnVmLG9mZnNldCxzaXplLGNiKXtpZihwcm9jZXNzLmJyb3dzZXIpe3ZhciBvdXJCdWY9YnVmLmJ1ZmZlcix1aW50PW5ldyBVaW50OEFycmF5KG91ckJ1ZixvZmZzZXQsc2l6ZSk7cmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModWludCksY2I/dm9pZCBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7Y2IobnVsbCxidWYpfSk6YnVmfWlmKCFjYilyZXR1cm4gcmFuZG9tYnl0ZXMoc2l6ZSkuY29weShidWYsb2Zmc2V0KSxidWY7cmFuZG9tYnl0ZXMoc2l6ZSxmdW5jdGlvbihlcnIsYnl0ZXMpe2lmKGVycilyZXR1cm4gY2IoZXJyKTtieXRlcy5jb3B5KGJ1ZixvZmZzZXQpLGNiKG51bGwsYnVmKX0pfWNyeXB0byYmY3J5cHRvLmdldFJhbmRvbVZhbHVlc3x8IXByb2Nlc3MuYnJvd3Nlcj8oZXhwb3J0cy5yYW5kb21GaWxsPWZ1bmN0aW9uIHJhbmRvbUZpbGwoYnVmLG9mZnNldCxzaXplLGNiKXtpZighKEJ1ZmZlci5pc0J1ZmZlcihidWYpfHxidWYgaW5zdGFuY2VvZiBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG9mZnNldCljYj1vZmZzZXQsb2Zmc2V0PTAsc2l6ZT1idWYubGVuZ3RoO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHNpemUpY2I9c2l6ZSxzaXplPWJ1Zi5sZW5ndGgtb2Zmc2V0O2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIGNiKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIGFzc2VydE9mZnNldChvZmZzZXQsYnVmLmxlbmd0aCksYXNzZXJ0U2l6ZShzaXplLG9mZnNldCxidWYubGVuZ3RoKSxhY3R1YWxGaWxsKGJ1ZixvZmZzZXQsc2l6ZSxjYil9LGV4cG9ydHMucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24gcmFuZG9tRmlsbFN5bmMoYnVmLG9mZnNldCxzaXplKXt2b2lkIDA9PT1vZmZzZXQmJihvZmZzZXQ9MCk7aWYoIShCdWZmZXIuaXNCdWZmZXIoYnVmKXx8YnVmIGluc3RhbmNlb2YgX193ZWJwYWNrX3JlcXVpcmVfXy5nLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO2Fzc2VydE9mZnNldChvZmZzZXQsYnVmLmxlbmd0aCksdm9pZCAwPT09c2l6ZSYmKHNpemU9YnVmLmxlbmd0aC1vZmZzZXQpO3JldHVybiBhc3NlcnRTaXplKHNpemUsb2Zmc2V0LGJ1Zi5sZW5ndGgpLGFjdHVhbEZpbGwoYnVmLG9mZnNldCxzaXplKX0pOihleHBvcnRzLnJhbmRvbUZpbGw9b2xkQnJvd3NlcixleHBvcnRzLnJhbmRvbUZpbGxTeW5jPW9sZEJyb3dzZXIpfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBwbmE9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MtbmV4dGljay1hcmdzL2luZGV4LmpzIiksb2JqZWN0S2V5cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24ob2JqKXt2YXIga2V5cz1bXTtmb3IodmFyIGtleSBpbiBvYmopa2V5cy5wdXNoKGtleSk7cmV0dXJuIGtleXN9O21vZHVsZS5leHBvcnRzPUR1cGxleDt2YXIgdXRpbD1PYmplY3QuY3JlYXRlKF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLXV0aWwtaXMvbGliL3V0aWwuanMiKSk7dXRpbC5pbmhlcml0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpO3ZhciBSZWFkYWJsZT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiksV3JpdGFibGU9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIpO3V0aWwuaW5oZXJpdHMoRHVwbGV4LFJlYWRhYmxlKTtmb3IodmFyIGtleXM9b2JqZWN0S2V5cyhXcml0YWJsZS5wcm90b3R5cGUpLHY9MDt2PGtleXMubGVuZ3RoO3YrKyl7dmFyIG1ldGhvZD1rZXlzW3ZdO0R1cGxleC5wcm90b3R5cGVbbWV0aG9kXXx8KER1cGxleC5wcm90b3R5cGVbbWV0aG9kXT1Xcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXSl9ZnVuY3Rpb24gRHVwbGV4KG9wdGlvbnMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpcmV0dXJuIG5ldyBEdXBsZXgob3B0aW9ucyk7UmVhZGFibGUuY2FsbCh0aGlzLG9wdGlvbnMpLFdyaXRhYmxlLmNhbGwodGhpcyxvcHRpb25zKSxvcHRpb25zJiYhMT09PW9wdGlvbnMucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSxvcHRpb25zJiYhMT09PW9wdGlvbnMud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsb3B0aW9ucyYmITE9PT1vcHRpb25zLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEpLHRoaXMub25jZSgiZW5kIixvbmVuZCl9ZnVuY3Rpb24gb25lbmQoKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fHBuYS5uZXh0VGljayhvbkVuZE5ULHRoaXMpfWZ1bmN0aW9uIG9uRW5kTlQoc2VsZil7c2VsZi5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCl9LHNldDpmdW5jdGlvbih2YWx1ZSl7dm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPXZhbHVlLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXZhbHVlKX19KSxEdXBsZXgucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGVycixjYil7dGhpcy5wdXNoKG51bGwpLHRoaXMuZW5kKCkscG5hLm5leHRUaWNrKGNiLGVycil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9UGFzc1Rocm91Z2g7dmFyIFRyYW5zZm9ybT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIpLHV0aWw9T2JqZWN0LmNyZWF0ZShfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS11dGlsLWlzL2xpYi91dGlsLmpzIikpO2Z1bmN0aW9uIFBhc3NUaHJvdWdoKG9wdGlvbnMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFBhc3NUaHJvdWdoKSlyZXR1cm4gbmV3IFBhc3NUaHJvdWdoKG9wdGlvbnMpO1RyYW5zZm9ybS5jYWxsKHRoaXMsb3B0aW9ucyl9dXRpbC5pbmhlcml0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpLHV0aWwuaW5oZXJpdHMoUGFzc1Rocm91Z2gsVHJhbnNmb3JtKSxQYXNzVGhyb3VnaC5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihjaHVuayxlbmNvZGluZyxjYil7Y2IobnVsbCxjaHVuayl9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHByb2Nlc3M9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL3Byb3h5L3Byb2Nlc3MuanMiKSxwbmE9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MtbmV4dGljay1hcmdzL2luZGV4LmpzIik7bW9kdWxlLmV4cG9ydHM9UmVhZGFibGU7dmFyIER1cGxleCxpc0FycmF5PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIik7UmVhZGFibGUuUmVhZGFibGVTdGF0ZT1SZWFkYWJsZVN0YXRlO19fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIikuRXZlbnRFbWl0dGVyO3ZhciBFRWxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oZW1pdHRlcix0eXBlKXtyZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RofSxTdHJlYW09X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0tYnJvd3Nlci5qcyIpLEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcixPdXJVaW50OEFycmF5PSh2b2lkIDAhPT1fX3dlYnBhY2tfcmVxdWlyZV9fLmc/X193ZWJwYWNrX3JlcXVpcmVfXy5nOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9O3ZhciB1dGlsPU9iamVjdC5jcmVhdGUoX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcy9saWIvdXRpbC5qcyIpKTt1dGlsLmluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIik7dmFyIGRlYnVnVXRpbD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvdXRpbC91dGlsLmpzIiksZGVidWc9dm9pZCAwO2RlYnVnPWRlYnVnVXRpbCYmZGVidWdVdGlsLmRlYnVnbG9nP2RlYnVnVXRpbC5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBTdHJpbmdEZWNvZGVyLEJ1ZmZlckxpc3Q9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0LmpzIiksZGVzdHJveUltcGw9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95LmpzIik7dXRpbC5pbmhlcml0cyhSZWFkYWJsZSxTdHJlYW0pO3ZhciBrUHJveHlFdmVudHM9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLHN0cmVhbSl7b3B0aW9ucz1vcHRpb25zfHx7fTt2YXIgaXNEdXBsZXg9c3RyZWFtIGluc3RhbmNlb2YoRHVwbGV4PUR1cGxleHx8X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKSk7dGhpcy5vYmplY3RNb2RlPSEhb3B0aW9ucy5vYmplY3RNb2RlLGlzRHVwbGV4JiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZSk7dmFyIGh3bT1vcHRpb25zLmhpZ2hXYXRlck1hcmsscmVhZGFibGVId209b3B0aW9ucy5yZWFkYWJsZUhpZ2hXYXRlck1hcmssZGVmYXVsdEh3bT10aGlzLm9iamVjdE1vZGU/MTY6MTYzODQ7dGhpcy5oaWdoV2F0ZXJNYXJrPWh3bXx8MD09PWh3bT9od206aXNEdXBsZXgmJihyZWFkYWJsZUh3bXx8MD09PXJlYWRhYmxlSHdtKT9yZWFkYWJsZUh3bTpkZWZhdWx0SHdtLHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayksdGhpcy5idWZmZXI9bmV3IEJ1ZmZlckxpc3QsdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPW9wdGlvbnMuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsb3B0aW9ucy5lbmNvZGluZyYmKFN0cmluZ0RlY29kZXJ8fChTdHJpbmdEZWNvZGVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9saWIvc3RyaW5nX2RlY29kZXIuanMiKS5TdHJpbmdEZWNvZGVyKSx0aGlzLmRlY29kZXI9bmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1vcHRpb25zLmVuY29kaW5nKX1mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKXtpZihEdXBsZXg9RHVwbGV4fHxfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIpLCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSlyZXR1cm4gbmV3IFJlYWRhYmxlKG9wdGlvbnMpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucyx0aGlzKSx0aGlzLnJlYWRhYmxlPSEwLG9wdGlvbnMmJigiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucy5yZWFkJiYodGhpcy5fcmVhZD1vcHRpb25zLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBvcHRpb25zLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PW9wdGlvbnMuZGVzdHJveSkpLFN0cmVhbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLGNodW5rLGVuY29kaW5nLGFkZFRvRnJvbnQsc2tpcENodW5rQ2hlY2spe3ZhciBlcixzdGF0ZT1zdHJlYW0uX3JlYWRhYmxlU3RhdGU7bnVsbD09PWNodW5rPyhzdGF0ZS5yZWFkaW5nPSExLGZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLHN0YXRlKXtpZihzdGF0ZS5lbmRlZClyZXR1cm47aWYoc3RhdGUuZGVjb2Rlcil7dmFyIGNodW5rPXN0YXRlLmRlY29kZXIuZW5kKCk7Y2h1bmsmJmNodW5rLmxlbmd0aCYmKHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKSxzdGF0ZS5sZW5ndGgrPXN0YXRlLm9iamVjdE1vZGU/MTpjaHVuay5sZW5ndGgpfXN0YXRlLmVuZGVkPSEwLGVtaXRSZWFkYWJsZShzdHJlYW0pfShzdHJlYW0sc3RhdGUpKTooc2tpcENodW5rQ2hlY2t8fChlcj1mdW5jdGlvbiBjaHVua0ludmFsaWQoc3RhdGUsY2h1bmspe3ZhciBlcjsoZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmope3JldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKXx8b2JqIGluc3RhbmNlb2YgT3VyVWludDhBcnJheX0pKGNodW5rKXx8InN0cmluZyI9PXR5cGVvZiBjaHVua3x8dm9pZCAwPT09Y2h1bmt8fHN0YXRlLm9iamVjdE1vZGV8fChlcj1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpO3JldHVybiBlcn0oc3RhdGUsY2h1bmspKSxlcj9zdHJlYW0uZW1pdCgiZXJyb3IiLGVyKTpzdGF0ZS5vYmplY3RNb2RlfHxjaHVuayYmY2h1bmsubGVuZ3RoPjA/KCJzdHJpbmciPT10eXBlb2YgY2h1bmt8fHN0YXRlLm9iamVjdE1vZGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihjaHVuayk9PT1CdWZmZXIucHJvdG90eXBlfHwoY2h1bms9ZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuayl7cmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKX0oY2h1bmspKSxhZGRUb0Zyb250P3N0YXRlLmVuZEVtaXR0ZWQ/c3RyZWFtLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOmFkZENodW5rKHN0cmVhbSxzdGF0ZSxjaHVuaywhMCk6c3RhdGUuZW5kZWQ/c3RyZWFtLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIikpOihzdGF0ZS5yZWFkaW5nPSExLHN0YXRlLmRlY29kZXImJiFlbmNvZGluZz8oY2h1bms9c3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayksc3RhdGUub2JqZWN0TW9kZXx8MCE9PWNodW5rLmxlbmd0aD9hZGRDaHVuayhzdHJlYW0sc3RhdGUsY2h1bmssITEpOm1heWJlUmVhZE1vcmUoc3RyZWFtLHN0YXRlKSk6YWRkQ2h1bmsoc3RyZWFtLHN0YXRlLGNodW5rLCExKSkpOmFkZFRvRnJvbnR8fChzdGF0ZS5yZWFkaW5nPSExKSk7cmV0dXJuIGZ1bmN0aW9uIG5lZWRNb3JlRGF0YShzdGF0ZSl7cmV0dXJuIXN0YXRlLmVuZGVkJiYoc3RhdGUubmVlZFJlYWRhYmxlfHxzdGF0ZS5sZW5ndGg8c3RhdGUuaGlnaFdhdGVyTWFya3x8MD09PXN0YXRlLmxlbmd0aCl9KHN0YXRlKX1mdW5jdGlvbiBhZGRDaHVuayhzdHJlYW0sc3RhdGUsY2h1bmssYWRkVG9Gcm9udCl7c3RhdGUuZmxvd2luZyYmMD09PXN0YXRlLmxlbmd0aCYmIXN0YXRlLnN5bmM/KHN0cmVhbS5lbWl0KCJkYXRhIixjaHVuayksc3RyZWFtLnJlYWQoMCkpOihzdGF0ZS5sZW5ndGgrPXN0YXRlLm9iamVjdE1vZGU/MTpjaHVuay5sZW5ndGgsYWRkVG9Gcm9udD9zdGF0ZS5idWZmZXIudW5zaGlmdChjaHVuayk6c3RhdGUuYnVmZmVyLnB1c2goY2h1bmspLHN0YXRlLm5lZWRSZWFkYWJsZSYmZW1pdFJlYWRhYmxlKHN0cmVhbSkpLG1heWJlUmVhZE1vcmUoc3RyZWFtLHN0YXRlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbih2YWx1ZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPXZhbHVlKX19KSxSZWFkYWJsZS5wcm90b3R5cGUuZGVzdHJveT1kZXN0cm95SW1wbC5kZXN0cm95LFJlYWRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95PWRlc3Ryb3lJbXBsLnVuZGVzdHJveSxSZWFkYWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZXJyLGNiKXt0aGlzLnB1c2gobnVsbCksY2IoZXJyKX0sUmVhZGFibGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oY2h1bmssZW5jb2Rpbmcpe3ZhciBza2lwQ2h1bmtDaGVjayxzdGF0ZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBzdGF0ZS5vYmplY3RNb2RlP3NraXBDaHVua0NoZWNrPSEwOiJzdHJpbmciPT10eXBlb2YgY2h1bmsmJigoZW5jb2Rpbmc9ZW5jb2Rpbmd8fHN0YXRlLmRlZmF1bHRFbmNvZGluZykhPT1zdGF0ZS5lbmNvZGluZyYmKGNodW5rPUJ1ZmZlci5mcm9tKGNodW5rLGVuY29kaW5nKSxlbmNvZGluZz0iIiksc2tpcENodW5rQ2hlY2s9ITApLHJlYWRhYmxlQWRkQ2h1bmsodGhpcyxjaHVuayxlbmNvZGluZywhMSxza2lwQ2h1bmtDaGVjayl9LFJlYWRhYmxlLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKGNodW5rKXtyZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLGNodW5rLG51bGwsITAsITEpfSxSZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKGVuYyl7cmV0dXJuIFN0cmluZ0RlY29kZXJ8fChTdHJpbmdEZWNvZGVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9saWIvc3RyaW5nX2RlY29kZXIuanMiKS5TdHJpbmdEZWNvZGVyKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IFN0cmluZ0RlY29kZXIoZW5jKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPWVuYyx0aGlzfTtmdW5jdGlvbiBob3dNdWNoVG9SZWFkKG4sc3RhdGUpe3JldHVybiBuPD0wfHwwPT09c3RhdGUubGVuZ3RoJiZzdGF0ZS5lbmRlZD8wOnN0YXRlLm9iamVjdE1vZGU/MTpuIT1uP3N0YXRlLmZsb3dpbmcmJnN0YXRlLmxlbmd0aD9zdGF0ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpzdGF0ZS5sZW5ndGg6KG4+c3RhdGUuaGlnaFdhdGVyTWFyayYmKHN0YXRlLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobil7cmV0dXJuIG4+PTgzODg2MDg/bj04Mzg4NjA4OihuLS0sbnw9bj4+PjEsbnw9bj4+PjIsbnw9bj4+PjQsbnw9bj4+Pjgsbnw9bj4+PjE2LG4rKyksbn0obikpLG48PXN0YXRlLmxlbmd0aD9uOnN0YXRlLmVuZGVkP3N0YXRlLmxlbmd0aDooc3RhdGUubmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlvbiBlbWl0UmVhZGFibGUoc3RyZWFtKXt2YXIgc3RhdGU9c3RyZWFtLl9yZWFkYWJsZVN0YXRlO3N0YXRlLm5lZWRSZWFkYWJsZT0hMSxzdGF0ZS5lbWl0dGVkUmVhZGFibGV8fChkZWJ1ZygiZW1pdFJlYWRhYmxlIixzdGF0ZS5mbG93aW5nKSxzdGF0ZS5lbWl0dGVkUmVhZGFibGU9ITAsc3RhdGUuc3luYz9wbmEubmV4dFRpY2soZW1pdFJlYWRhYmxlXyxzdHJlYW0pOmVtaXRSZWFkYWJsZV8oc3RyZWFtKSl9ZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pe2RlYnVnKCJlbWl0IHJlYWRhYmxlIiksc3RyZWFtLmVtaXQoInJlYWRhYmxlIiksZmxvdyhzdHJlYW0pfWZ1bmN0aW9uIG1heWJlUmVhZE1vcmUoc3RyZWFtLHN0YXRlKXtzdGF0ZS5yZWFkaW5nTW9yZXx8KHN0YXRlLnJlYWRpbmdNb3JlPSEwLHBuYS5uZXh0VGljayhtYXliZVJlYWRNb3JlXyxzdHJlYW0sc3RhdGUpKX1mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sc3RhdGUpe2Zvcih2YXIgbGVuPXN0YXRlLmxlbmd0aDshc3RhdGUucmVhZGluZyYmIXN0YXRlLmZsb3dpbmcmJiFzdGF0ZS5lbmRlZCYmc3RhdGUubGVuZ3RoPHN0YXRlLmhpZ2hXYXRlck1hcmsmJihkZWJ1ZygibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxzdHJlYW0ucmVhZCgwKSxsZW4hPT1zdGF0ZS5sZW5ndGgpOylsZW49c3RhdGUubGVuZ3RoO3N0YXRlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZil7ZGVidWcoInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLHNlbGYucmVhZCgwKX1mdW5jdGlvbiByZXN1bWVfKHN0cmVhbSxzdGF0ZSl7c3RhdGUucmVhZGluZ3x8KGRlYnVnKCJyZXN1bWUgcmVhZCAwIiksc3RyZWFtLnJlYWQoMCkpLHN0YXRlLnJlc3VtZVNjaGVkdWxlZD0hMSxzdGF0ZS5hd2FpdERyYWluPTAsc3RyZWFtLmVtaXQoInJlc3VtZSIpLGZsb3coc3RyZWFtKSxzdGF0ZS5mbG93aW5nJiYhc3RhdGUucmVhZGluZyYmc3RyZWFtLnJlYWQoMCl9ZnVuY3Rpb24gZmxvdyhzdHJlYW0pe3ZhciBzdGF0ZT1zdHJlYW0uX3JlYWRhYmxlU3RhdGU7Zm9yKGRlYnVnKCJmbG93IixzdGF0ZS5mbG93aW5nKTtzdGF0ZS5mbG93aW5nJiZudWxsIT09c3RyZWFtLnJlYWQoKTspO31mdW5jdGlvbiBmcm9tTGlzdChuLHN0YXRlKXtyZXR1cm4gMD09PXN0YXRlLmxlbmd0aD9udWxsOihzdGF0ZS5vYmplY3RNb2RlP3JldD1zdGF0ZS5idWZmZXIuc2hpZnQoKTohbnx8bj49c3RhdGUubGVuZ3RoPyhyZXQ9c3RhdGUuZGVjb2Rlcj9zdGF0ZS5idWZmZXIuam9pbigiIik6MT09PXN0YXRlLmJ1ZmZlci5sZW5ndGg/c3RhdGUuYnVmZmVyLmhlYWQuZGF0YTpzdGF0ZS5idWZmZXIuY29uY2F0KHN0YXRlLmxlbmd0aCksc3RhdGUuYnVmZmVyLmNsZWFyKCkpOnJldD1mdW5jdGlvbiBmcm9tTGlzdFBhcnRpYWwobixsaXN0LGhhc1N0cmluZ3Mpe3ZhciByZXQ7bjxsaXN0LmhlYWQuZGF0YS5sZW5ndGg/KHJldD1saXN0LmhlYWQuZGF0YS5zbGljZSgwLG4pLGxpc3QuaGVhZC5kYXRhPWxpc3QuaGVhZC5kYXRhLnNsaWNlKG4pKTpyZXQ9bj09PWxpc3QuaGVhZC5kYXRhLmxlbmd0aD9saXN0LnNoaWZ0KCk6aGFzU3RyaW5ncz9mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlclN0cmluZyhuLGxpc3Qpe3ZhciBwPWxpc3QuaGVhZCxjPTEscmV0PXAuZGF0YTtuLT1yZXQubGVuZ3RoO2Zvcig7cD1wLm5leHQ7KXt2YXIgc3RyPXAuZGF0YSxuYj1uPnN0ci5sZW5ndGg/c3RyLmxlbmd0aDpuO2lmKG5iPT09c3RyLmxlbmd0aD9yZXQrPXN0cjpyZXQrPXN0ci5zbGljZSgwLG4pLDA9PT0obi09bmIpKXtuYj09PXN0ci5sZW5ndGg/KCsrYyxwLm5leHQ/bGlzdC5oZWFkPXAubmV4dDpsaXN0LmhlYWQ9bGlzdC50YWlsPW51bGwpOihsaXN0LmhlYWQ9cCxwLmRhdGE9c3RyLnNsaWNlKG5iKSk7YnJlYWt9KytjfXJldHVybiBsaXN0Lmxlbmd0aC09YyxyZXR9KG4sbGlzdCk6ZnVuY3Rpb24gY29weUZyb21CdWZmZXIobixsaXN0KXt2YXIgcmV0PUJ1ZmZlci5hbGxvY1Vuc2FmZShuKSxwPWxpc3QuaGVhZCxjPTE7cC5kYXRhLmNvcHkocmV0KSxuLT1wLmRhdGEubGVuZ3RoO2Zvcig7cD1wLm5leHQ7KXt2YXIgYnVmPXAuZGF0YSxuYj1uPmJ1Zi5sZW5ndGg/YnVmLmxlbmd0aDpuO2lmKGJ1Zi5jb3B5KHJldCxyZXQubGVuZ3RoLW4sMCxuYiksMD09PShuLT1uYikpe25iPT09YnVmLmxlbmd0aD8oKytjLHAubmV4dD9saXN0LmhlYWQ9cC5uZXh0Omxpc3QuaGVhZD1saXN0LnRhaWw9bnVsbCk6KGxpc3QuaGVhZD1wLHAuZGF0YT1idWYuc2xpY2UobmIpKTticmVha30rK2N9cmV0dXJuIGxpc3QubGVuZ3RoLT1jLHJldH0obixsaXN0KTtyZXR1cm4gcmV0fShuLHN0YXRlLmJ1ZmZlcixzdGF0ZS5kZWNvZGVyKSxyZXQpO3ZhciByZXR9ZnVuY3Rpb24gZW5kUmVhZGFibGUoc3RyZWFtKXt2YXIgc3RhdGU9c3RyZWFtLl9yZWFkYWJsZVN0YXRlO2lmKHN0YXRlLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcignImVuZFJlYWRhYmxlKCkiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7c3RhdGUuZW5kRW1pdHRlZHx8KHN0YXRlLmVuZGVkPSEwLHBuYS5uZXh0VGljayhlbmRSZWFkYWJsZU5ULHN0YXRlLHN0cmVhbSkpfWZ1bmN0aW9uIGVuZFJlYWRhYmxlTlQoc3RhdGUsc3RyZWFtKXtzdGF0ZS5lbmRFbWl0dGVkfHwwIT09c3RhdGUubGVuZ3RofHwoc3RhdGUuZW5kRW1pdHRlZD0hMCxzdHJlYW0ucmVhZGFibGU9ITEsc3RyZWFtLmVtaXQoImVuZCIpKX1mdW5jdGlvbiBpbmRleE9mKHhzLHgpe2Zvcih2YXIgaT0wLGw9eHMubGVuZ3RoO2k8bDtpKyspaWYoeHNbaV09PT14KXJldHVybiBpO3JldHVybi0xfVJlYWRhYmxlLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKG4pe2RlYnVnKCJyZWFkIixuKSxuPXBhcnNlSW50KG4sMTApO3ZhciBzdGF0ZT10aGlzLl9yZWFkYWJsZVN0YXRlLG5PcmlnPW47aWYoMCE9PW4mJihzdGF0ZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT1uJiZzdGF0ZS5uZWVkUmVhZGFibGUmJihzdGF0ZS5sZW5ndGg+PXN0YXRlLmhpZ2hXYXRlck1hcmt8fHN0YXRlLmVuZGVkKSlyZXR1cm4gZGVidWcoInJlYWQ6IGVtaXRSZWFkYWJsZSIsc3RhdGUubGVuZ3RoLHN0YXRlLmVuZGVkKSwwPT09c3RhdGUubGVuZ3RoJiZzdGF0ZS5lbmRlZD9lbmRSZWFkYWJsZSh0aGlzKTplbWl0UmVhZGFibGUodGhpcyksbnVsbDtpZigwPT09KG49aG93TXVjaFRvUmVhZChuLHN0YXRlKSkmJnN0YXRlLmVuZGVkKXJldHVybiAwPT09c3RhdGUubGVuZ3RoJiZlbmRSZWFkYWJsZSh0aGlzKSxudWxsO3ZhciByZXQsZG9SZWFkPXN0YXRlLm5lZWRSZWFkYWJsZTtyZXR1cm4gZGVidWcoIm5lZWQgcmVhZGFibGUiLGRvUmVhZCksKDA9PT1zdGF0ZS5sZW5ndGh8fHN0YXRlLmxlbmd0aC1uPHN0YXRlLmhpZ2hXYXRlck1hcmspJiZkZWJ1ZygibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLGRvUmVhZD0hMCksc3RhdGUuZW5kZWR8fHN0YXRlLnJlYWRpbmc/ZGVidWcoInJlYWRpbmcgb3IgZW5kZWQiLGRvUmVhZD0hMSk6ZG9SZWFkJiYoZGVidWcoImRvIHJlYWQiKSxzdGF0ZS5yZWFkaW5nPSEwLHN0YXRlLnN5bmM9ITAsMD09PXN0YXRlLmxlbmd0aCYmKHN0YXRlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKSxzdGF0ZS5zeW5jPSExLHN0YXRlLnJlYWRpbmd8fChuPWhvd011Y2hUb1JlYWQobk9yaWcsc3RhdGUpKSksbnVsbD09PShyZXQ9bj4wP2Zyb21MaXN0KG4sc3RhdGUpOm51bGwpPyhzdGF0ZS5uZWVkUmVhZGFibGU9ITAsbj0wKTpzdGF0ZS5sZW5ndGgtPW4sMD09PXN0YXRlLmxlbmd0aCYmKHN0YXRlLmVuZGVkfHwoc3RhdGUubmVlZFJlYWRhYmxlPSEwKSxuT3JpZyE9PW4mJnN0YXRlLmVuZGVkJiZlbmRSZWFkYWJsZSh0aGlzKSksbnVsbCE9PXJldCYmdGhpcy5lbWl0KCJkYXRhIixyZXQpLHJldH0sUmVhZGFibGUucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKG4pe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9LFJlYWRhYmxlLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKGRlc3QscGlwZU9wdHMpe3ZhciBzcmM9dGhpcyxzdGF0ZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChzdGF0ZS5waXBlc0NvdW50KXtjYXNlIDA6c3RhdGUucGlwZXM9ZGVzdDticmVhaztjYXNlIDE6c3RhdGUucGlwZXM9W3N0YXRlLnBpcGVzLGRlc3RdO2JyZWFrO2RlZmF1bHQ6c3RhdGUucGlwZXMucHVzaChkZXN0KX1zdGF0ZS5waXBlc0NvdW50Kz0xLGRlYnVnKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLHN0YXRlLnBpcGVzQ291bnQscGlwZU9wdHMpO3ZhciBlbmRGbj0oIXBpcGVPcHRzfHwhMSE9PXBpcGVPcHRzLmVuZCkmJmRlc3QhPT1wcm9jZXNzLnN0ZG91dCYmZGVzdCE9PXByb2Nlc3Muc3RkZXJyP29uZW5kOnVucGlwZTtmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSx1bnBpcGVJbmZvKXtkZWJ1Zygib251bnBpcGUiKSxyZWFkYWJsZT09PXNyYyYmdW5waXBlSW5mbyYmITE9PT11bnBpcGVJbmZvLmhhc1VucGlwZWQmJih1bnBpcGVJbmZvLmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24gY2xlYW51cCgpe2RlYnVnKCJjbGVhbnVwIiksZGVzdC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLG9uY2xvc2UpLGRlc3QucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsb25maW5pc2gpLGRlc3QucmVtb3ZlTGlzdGVuZXIoImRyYWluIixvbmRyYWluKSxkZXN0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsb25lcnJvciksZGVzdC5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixvbnVucGlwZSksc3JjLnJlbW92ZUxpc3RlbmVyKCJlbmQiLG9uZW5kKSxzcmMucmVtb3ZlTGlzdGVuZXIoImVuZCIsdW5waXBlKSxzcmMucmVtb3ZlTGlzdGVuZXIoImRhdGEiLG9uZGF0YSksY2xlYW5lZFVwPSEwLCFzdGF0ZS5hd2FpdERyYWlufHxkZXN0Ll93cml0YWJsZVN0YXRlJiYhZGVzdC5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fG9uZHJhaW4oKX0oKSl9ZnVuY3Rpb24gb25lbmQoKXtkZWJ1Zygib25lbmQiKSxkZXN0LmVuZCgpfXN0YXRlLmVuZEVtaXR0ZWQ/cG5hLm5leHRUaWNrKGVuZEZuKTpzcmMub25jZSgiZW5kIixlbmRGbiksZGVzdC5vbigidW5waXBlIixvbnVucGlwZSk7dmFyIG9uZHJhaW49ZnVuY3Rpb24gcGlwZU9uRHJhaW4oc3JjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgc3RhdGU9c3JjLl9yZWFkYWJsZVN0YXRlO2RlYnVnKCJwaXBlT25EcmFpbiIsc3RhdGUuYXdhaXREcmFpbiksc3RhdGUuYXdhaXREcmFpbiYmc3RhdGUuYXdhaXREcmFpbi0tLDA9PT1zdGF0ZS5hd2FpdERyYWluJiZFRWxpc3RlbmVyQ291bnQoc3JjLCJkYXRhIikmJihzdGF0ZS5mbG93aW5nPSEwLGZsb3coc3JjKSl9fShzcmMpO2Rlc3Qub24oImRyYWluIixvbmRyYWluKTt2YXIgY2xlYW5lZFVwPSExO3ZhciBpbmNyZWFzZWRBd2FpdERyYWluPSExO2Z1bmN0aW9uIG9uZGF0YShjaHVuayl7ZGVidWcoIm9uZGF0YSIpLGluY3JlYXNlZEF3YWl0RHJhaW49ITEsITEhPT1kZXN0LndyaXRlKGNodW5rKXx8aW5jcmVhc2VkQXdhaXREcmFpbnx8KCgxPT09c3RhdGUucGlwZXNDb3VudCYmc3RhdGUucGlwZXM9PT1kZXN0fHxzdGF0ZS5waXBlc0NvdW50PjEmJi0xIT09aW5kZXhPZihzdGF0ZS5waXBlcyxkZXN0KSkmJiFjbGVhbmVkVXAmJihkZWJ1ZygiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixzdGF0ZS5hd2FpdERyYWluKSxzdGF0ZS5hd2FpdERyYWluKyssaW5jcmVhc2VkQXdhaXREcmFpbj0hMCksc3JjLnBhdXNlKCkpfWZ1bmN0aW9uIG9uZXJyb3IoZXIpe2RlYnVnKCJvbmVycm9yIixlciksdW5waXBlKCksZGVzdC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLG9uZXJyb3IpLDA9PT1FRWxpc3RlbmVyQ291bnQoZGVzdCwiZXJyb3IiKSYmZGVzdC5lbWl0KCJlcnJvciIsZXIpfWZ1bmN0aW9uIG9uY2xvc2UoKXtkZXN0LnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLG9uZmluaXNoKSx1bnBpcGUoKX1mdW5jdGlvbiBvbmZpbmlzaCgpe2RlYnVnKCJvbmZpbmlzaCIpLGRlc3QucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixvbmNsb3NlKSx1bnBpcGUoKX1mdW5jdGlvbiB1bnBpcGUoKXtkZWJ1ZygidW5waXBlIiksc3JjLnVucGlwZShkZXN0KX1yZXR1cm4gc3JjLm9uKCJkYXRhIixvbmRhdGEpLGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLGV2ZW50LGZuKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyKGV2ZW50LGZuKTtlbWl0dGVyLl9ldmVudHMmJmVtaXR0ZXIuX2V2ZW50c1tldmVudF0/aXNBcnJheShlbWl0dGVyLl9ldmVudHNbZXZlbnRdKT9lbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pOmVtaXR0ZXIuX2V2ZW50c1tldmVudF09W2ZuLGVtaXR0ZXIuX2V2ZW50c1tldmVudF1dOmVtaXR0ZXIub24oZXZlbnQsZm4pfShkZXN0LCJlcnJvciIsb25lcnJvciksZGVzdC5vbmNlKCJjbG9zZSIsb25jbG9zZSksZGVzdC5vbmNlKCJmaW5pc2giLG9uZmluaXNoKSxkZXN0LmVtaXQoInBpcGUiLHNyYyksc3RhdGUuZmxvd2luZ3x8KGRlYnVnKCJwaXBlIHJlc3VtZSIpLHNyYy5yZXN1bWUoKSksZGVzdH0sUmVhZGFibGUucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihkZXN0KXt2YXIgc3RhdGU9dGhpcy5fcmVhZGFibGVTdGF0ZSx1bnBpcGVJbmZvPXtoYXNVbnBpcGVkOiExfTtpZigwPT09c3RhdGUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09c3RhdGUucGlwZXNDb3VudClyZXR1cm4gZGVzdCYmZGVzdCE9PXN0YXRlLnBpcGVzfHwoZGVzdHx8KGRlc3Q9c3RhdGUucGlwZXMpLHN0YXRlLnBpcGVzPW51bGwsc3RhdGUucGlwZXNDb3VudD0wLHN0YXRlLmZsb3dpbmc9ITEsZGVzdCYmZGVzdC5lbWl0KCJ1bnBpcGUiLHRoaXMsdW5waXBlSW5mbykpLHRoaXM7aWYoIWRlc3Qpe3ZhciBkZXN0cz1zdGF0ZS5waXBlcyxsZW49c3RhdGUucGlwZXNDb3VudDtzdGF0ZS5waXBlcz1udWxsLHN0YXRlLnBpcGVzQ291bnQ9MCxzdGF0ZS5mbG93aW5nPSExO2Zvcih2YXIgaT0wO2k8bGVuO2krKylkZXN0c1tpXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgaW5kZXg9aW5kZXhPZihzdGF0ZS5waXBlcyxkZXN0KTtyZXR1cm4tMT09PWluZGV4fHwoc3RhdGUucGlwZXMuc3BsaWNlKGluZGV4LDEpLHN0YXRlLnBpcGVzQ291bnQtPTEsMT09PXN0YXRlLnBpcGVzQ291bnQmJihzdGF0ZS5waXBlcz1zdGF0ZS5waXBlc1swXSksZGVzdC5lbWl0KCJ1bnBpcGUiLHRoaXMsdW5waXBlSW5mbykpLHRoaXN9LFJlYWRhYmxlLnByb3RvdHlwZS5vbj1mdW5jdGlvbihldixmbil7dmFyIHJlcz1TdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcyxldixmbik7aWYoImRhdGEiPT09ZXYpITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCk7ZWxzZSBpZigicmVhZGFibGUiPT09ZXYpe3ZhciBzdGF0ZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N0YXRlLmVuZEVtaXR0ZWR8fHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nfHwoc3RhdGUucmVhZGFibGVMaXN0ZW5pbmc9c3RhdGUubmVlZFJlYWRhYmxlPSEwLHN0YXRlLmVtaXR0ZWRSZWFkYWJsZT0hMSxzdGF0ZS5yZWFkaW5nP3N0YXRlLmxlbmd0aCYmZW1pdFJlYWRhYmxlKHRoaXMpOnBuYS5uZXh0VGljayhuUmVhZGluZ05leHRUaWNrLHRoaXMpKX1yZXR1cm4gcmVzfSxSZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9UmVhZGFibGUucHJvdG90eXBlLm9uLFJlYWRhYmxlLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgc3RhdGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gc3RhdGUuZmxvd2luZ3x8KGRlYnVnKCJyZXN1bWUiKSxzdGF0ZS5mbG93aW5nPSEwLGZ1bmN0aW9uIHJlc3VtZShzdHJlYW0sc3RhdGUpe3N0YXRlLnJlc3VtZVNjaGVkdWxlZHx8KHN0YXRlLnJlc3VtZVNjaGVkdWxlZD0hMCxwbmEubmV4dFRpY2socmVzdW1lXyxzdHJlYW0sc3RhdGUpKX0odGhpcyxzdGF0ZSkpLHRoaXN9LFJlYWRhYmxlLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBkZWJ1ZygiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoZGVidWcoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpc30sUmVhZGFibGUucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oc3RyZWFtKXt2YXIgX3RoaXM9dGhpcyxzdGF0ZT10aGlzLl9yZWFkYWJsZVN0YXRlLHBhdXNlZD0hMTtmb3IodmFyIGkgaW4gc3RyZWFtLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoZGVidWcoIndyYXBwZWQgZW5kIiksc3RhdGUuZGVjb2RlciYmIXN0YXRlLmVuZGVkKXt2YXIgY2h1bms9c3RhdGUuZGVjb2Rlci5lbmQoKTtjaHVuayYmY2h1bmsubGVuZ3RoJiZfdGhpcy5wdXNoKGNodW5rKX1fdGhpcy5wdXNoKG51bGwpfSksc3RyZWFtLm9uKCJkYXRhIixmdW5jdGlvbihjaHVuayl7KGRlYnVnKCJ3cmFwcGVkIGRhdGEiKSxzdGF0ZS5kZWNvZGVyJiYoY2h1bms9c3RhdGUuZGVjb2Rlci53cml0ZShjaHVuaykpLHN0YXRlLm9iamVjdE1vZGUmJm51bGw9PWNodW5rKXx8KHN0YXRlLm9iamVjdE1vZGV8fGNodW5rJiZjaHVuay5sZW5ndGgpJiYoX3RoaXMucHVzaChjaHVuayl8fChwYXVzZWQ9ITAsc3RyZWFtLnBhdXNlKCkpKX0pLHN0cmVhbSl2b2lkIDA9PT10aGlzW2ldJiYiZnVuY3Rpb24iPT10eXBlb2Ygc3RyZWFtW2ldJiYodGhpc1tpXT1mdW5jdGlvbihtZXRob2Qpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBzdHJlYW1bbWV0aG9kXS5hcHBseShzdHJlYW0sYXJndW1lbnRzKX19KGkpKTtmb3IodmFyIG49MDtuPGtQcm94eUV2ZW50cy5sZW5ndGg7bisrKXN0cmVhbS5vbihrUHJveHlFdmVudHNbbl0sdGhpcy5lbWl0LmJpbmQodGhpcyxrUHJveHlFdmVudHNbbl0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihuKXtkZWJ1Zygid3JhcHBlZCBfcmVhZCIsbikscGF1c2VkJiYocGF1c2VkPSExLHN0cmVhbS5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxSZWFkYWJsZS5fZnJvbUxpc3Q9ZnJvbUxpc3R9LCIuLi8uLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9VHJhbnNmb3JtO3ZhciBEdXBsZXg9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKSx1dGlsPU9iamVjdC5jcmVhdGUoX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcy9saWIvdXRpbC5qcyIpKTtmdW5jdGlvbiBhZnRlclRyYW5zZm9ybShlcixkYXRhKXt2YXIgdHM9dGhpcy5fdHJhbnNmb3JtU3RhdGU7dHMudHJhbnNmb3JtaW5nPSExO3ZhciBjYj10cy53cml0ZWNiO2lmKCFjYilyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJ3cml0ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSk7dHMud3JpdGVjaHVuaz1udWxsLHRzLndyaXRlY2I9bnVsbCxudWxsIT1kYXRhJiZ0aGlzLnB1c2goZGF0YSksY2IoZXIpO3ZhciBycz10aGlzLl9yZWFkYWJsZVN0YXRlO3JzLnJlYWRpbmc9ITEsKHJzLm5lZWRSZWFkYWJsZXx8cnMubGVuZ3RoPHJzLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIFRyYW5zZm9ybShvcHRpb25zKXtpZighKHRoaXMgaW5zdGFuY2VvZiBUcmFuc2Zvcm0pKXJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO0R1cGxleC5jYWxsKHRoaXMsb3B0aW9ucyksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOmFmdGVyVHJhbnNmb3JtLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxvcHRpb25zJiYoImZ1bmN0aW9uIj09dHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPW9wdGlvbnMudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucy5mbHVzaCYmKHRoaXMuX2ZsdXNoPW9wdGlvbnMuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLHByZWZpbmlzaCl9ZnVuY3Rpb24gcHJlZmluaXNoKCl7dmFyIF90aGlzPXRoaXM7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKGVyLGRhdGEpe2RvbmUoX3RoaXMsZXIsZGF0YSl9KTpkb25lKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBkb25lKHN0cmVhbSxlcixkYXRhKXtpZihlcilyZXR1cm4gc3RyZWFtLmVtaXQoImVycm9yIixlcik7aWYobnVsbCE9ZGF0YSYmc3RyZWFtLnB1c2goZGF0YSksc3RyZWFtLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0gMCIpO2lmKHN0cmVhbS5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZyIpO3JldHVybiBzdHJlYW0ucHVzaChudWxsKX11dGlsLmluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiksdXRpbC5pbmhlcml0cyhUcmFuc2Zvcm0sRHVwbGV4KSxUcmFuc2Zvcm0ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oY2h1bmssZW5jb2Rpbmcpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLER1cGxleC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsY2h1bmssZW5jb2RpbmcpfSxUcmFuc2Zvcm0ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oY2h1bmssZW5jb2RpbmcsY2Ipe3Rocm93IG5ldyBFcnJvcigiX3RyYW5zZm9ybSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxUcmFuc2Zvcm0ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihjaHVuayxlbmNvZGluZyxjYil7dmFyIHRzPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKHRzLndyaXRlY2I9Y2IsdHMud3JpdGVjaHVuaz1jaHVuayx0cy53cml0ZWVuY29kaW5nPWVuY29kaW5nLCF0cy50cmFuc2Zvcm1pbmcpe3ZhciBycz10aGlzLl9yZWFkYWJsZVN0YXRlOyh0cy5uZWVkVHJhbnNmb3JtfHxycy5uZWVkUmVhZGFibGV8fHJzLmxlbmd0aDxycy5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKX19LFRyYW5zZm9ybS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24obil7dmFyIHRzPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGwhPT10cy53cml0ZWNodW5rJiZ0cy53cml0ZWNiJiYhdHMudHJhbnNmb3JtaW5nPyh0cy50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKHRzLndyaXRlY2h1bmssdHMud3JpdGVlbmNvZGluZyx0cy5hZnRlclRyYW5zZm9ybSkpOnRzLm5lZWRUcmFuc2Zvcm09ITB9LFRyYW5zZm9ybS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZXJyLGNiKXt2YXIgX3RoaXMyPXRoaXM7RHVwbGV4LnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsZXJyLGZ1bmN0aW9uKGVycjIpe2NiKGVycjIpLF90aGlzMi5lbWl0KCJjbG9zZSIpfSl9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHByb2Nlc3M9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL3Byb3h5L3Byb2Nlc3MuanMiKSxwbmE9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MtbmV4dGljay1hcmdzL2luZGV4LmpzIik7ZnVuY3Rpb24gQ29ya2VkUmVxdWVzdChzdGF0ZSl7dmFyIF90aGlzPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIG9uQ29ya2VkRmluaXNoKGNvcmtSZXEsc3RhdGUsZXJyKXt2YXIgZW50cnk9Y29ya1JlcS5lbnRyeTtjb3JrUmVxLmVudHJ5PW51bGw7Zm9yKDtlbnRyeTspe3ZhciBjYj1lbnRyeS5jYWxsYmFjaztzdGF0ZS5wZW5kaW5nY2ItLSxjYihlcnIpLGVudHJ5PWVudHJ5Lm5leHR9c3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9Y29ya1JlcX0oX3RoaXMsc3RhdGUpfX1tb2R1bGUuZXhwb3J0cz1Xcml0YWJsZTt2YXIgRHVwbGV4LGFzeW5jV3JpdGU9IXByb2Nlc3MuYnJvd3NlciYmWyJ2MC4xMCIsInYwLjkuIl0uaW5kZXhPZihwcm9jZXNzLnZlcnNpb24uc2xpY2UoMCw1KSk+LTE/c2V0SW1tZWRpYXRlOnBuYS5uZXh0VGljaztXcml0YWJsZS5Xcml0YWJsZVN0YXRlPVdyaXRhYmxlU3RhdGU7dmFyIHV0aWw9T2JqZWN0LmNyZWF0ZShfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS11dGlsLWlzL2xpYi91dGlsLmpzIikpO3V0aWwuaW5oZXJpdHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKTt2YXIgaW50ZXJuYWxVdGlsPXtkZXByZWNhdGU6X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL2Jyb3dzZXIuanMiKX0sU3RyZWFtPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtLWJyb3dzZXIuanMiKSxCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXIsT3VyVWludDhBcnJheT0odm9pZCAwIT09X193ZWJwYWNrX3JlcXVpcmVfXy5nP19fd2VicGFja19yZXF1aXJlX18uZzoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fTt2YXIgcmVhbEhhc0luc3RhbmNlLGRlc3Ryb3lJbXBsPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5qcyIpO2Z1bmN0aW9uIG5vcCgpe31mdW5jdGlvbiBXcml0YWJsZVN0YXRlKG9wdGlvbnMsc3RyZWFtKXtEdXBsZXg9RHVwbGV4fHxfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIpLG9wdGlvbnM9b3B0aW9uc3x8e307dmFyIGlzRHVwbGV4PXN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDt0aGlzLm9iamVjdE1vZGU9ISFvcHRpb25zLm9iamVjdE1vZGUsaXNEdXBsZXgmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIW9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlKTt2YXIgaHdtPW9wdGlvbnMuaGlnaFdhdGVyTWFyayx3cml0YWJsZUh3bT1vcHRpb25zLndyaXRhYmxlSGlnaFdhdGVyTWFyayxkZWZhdWx0SHdtPXRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NDt0aGlzLmhpZ2hXYXRlck1hcms9aHdtfHwwPT09aHdtP2h3bTppc0R1cGxleCYmKHdyaXRhYmxlSHdtfHwwPT09d3JpdGFibGVId20pP3dyaXRhYmxlSHdtOmRlZmF1bHRId20sdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMTt2YXIgbm9EZWNvZGU9ITE9PT1vcHRpb25zLmRlY29kZVN0cmluZ3M7dGhpcy5kZWNvZGVTdHJpbmdzPSFub0RlY29kZSx0aGlzLmRlZmF1bHRFbmNvZGluZz1vcHRpb25zLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oZXIpeyFmdW5jdGlvbiBvbndyaXRlKHN0cmVhbSxlcil7dmFyIHN0YXRlPXN0cmVhbS5fd3JpdGFibGVTdGF0ZSxzeW5jPXN0YXRlLnN5bmMsY2I9c3RhdGUud3JpdGVjYjtpZihmdW5jdGlvbiBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpe3N0YXRlLndyaXRpbmc9ITEsc3RhdGUud3JpdGVjYj1udWxsLHN0YXRlLmxlbmd0aC09c3RhdGUud3JpdGVsZW4sc3RhdGUud3JpdGVsZW49MH0oc3RhdGUpLGVyKSFmdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLHN0YXRlLHN5bmMsZXIsY2Ipey0tc3RhdGUucGVuZGluZ2NiLHN5bmM/KHBuYS5uZXh0VGljayhjYixlcikscG5hLm5leHRUaWNrKGZpbmlzaE1heWJlLHN0cmVhbSxzdGF0ZSksc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxzdHJlYW0uZW1pdCgiZXJyb3IiLGVyKSk6KGNiKGVyKSxzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHN0cmVhbS5lbWl0KCJlcnJvciIsZXIpLGZpbmlzaE1heWJlKHN0cmVhbSxzdGF0ZSkpfShzdHJlYW0sc3RhdGUsc3luYyxlcixjYik7ZWxzZXt2YXIgZmluaXNoZWQ9bmVlZEZpbmlzaChzdGF0ZSk7ZmluaXNoZWR8fHN0YXRlLmNvcmtlZHx8c3RhdGUuYnVmZmVyUHJvY2Vzc2luZ3x8IXN0YXRlLmJ1ZmZlcmVkUmVxdWVzdHx8Y2xlYXJCdWZmZXIoc3RyZWFtLHN0YXRlKSxzeW5jP2FzeW5jV3JpdGUoYWZ0ZXJXcml0ZSxzdHJlYW0sc3RhdGUsZmluaXNoZWQsY2IpOmFmdGVyV3JpdGUoc3RyZWFtLHN0YXRlLGZpbmlzaGVkLGNiKX19KHN0cmVhbSxlcil9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IENvcmtlZFJlcXVlc3QodGhpcyl9ZnVuY3Rpb24gV3JpdGFibGUob3B0aW9ucyl7aWYoRHVwbGV4PUR1cGxleHx8X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKSwhKHJlYWxIYXNJbnN0YW5jZS5jYWxsKFdyaXRhYmxlLHRoaXMpfHx0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSlyZXR1cm4gbmV3IFdyaXRhYmxlKG9wdGlvbnMpO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IFdyaXRhYmxlU3RhdGUob3B0aW9ucyx0aGlzKSx0aGlzLndyaXRhYmxlPSEwLG9wdGlvbnMmJigiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucy53cml0ZSYmKHRoaXMuX3dyaXRlPW9wdGlvbnMud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBvcHRpb25zLndyaXRldiYmKHRoaXMuX3dyaXRldj1vcHRpb25zLndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIG9wdGlvbnMuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9b3B0aW9ucy5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucy5maW5hbCYmKHRoaXMuX2ZpbmFsPW9wdGlvbnMuZmluYWwpKSxTdHJlYW0uY2FsbCh0aGlzKX1mdW5jdGlvbiBkb1dyaXRlKHN0cmVhbSxzdGF0ZSx3cml0ZXYsbGVuLGNodW5rLGVuY29kaW5nLGNiKXtzdGF0ZS53cml0ZWxlbj1sZW4sc3RhdGUud3JpdGVjYj1jYixzdGF0ZS53cml0aW5nPSEwLHN0YXRlLnN5bmM9ITAsd3JpdGV2P3N0cmVhbS5fd3JpdGV2KGNodW5rLHN0YXRlLm9ud3JpdGUpOnN0cmVhbS5fd3JpdGUoY2h1bmssZW5jb2Rpbmcsc3RhdGUub253cml0ZSksc3RhdGUuc3luYz0hMX1mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSxzdGF0ZSxmaW5pc2hlZCxjYil7ZmluaXNoZWR8fGZ1bmN0aW9uIG9ud3JpdGVEcmFpbihzdHJlYW0sc3RhdGUpezA9PT1zdGF0ZS5sZW5ndGgmJnN0YXRlLm5lZWREcmFpbiYmKHN0YXRlLm5lZWREcmFpbj0hMSxzdHJlYW0uZW1pdCgiZHJhaW4iKSl9KHN0cmVhbSxzdGF0ZSksc3RhdGUucGVuZGluZ2NiLS0sY2IoKSxmaW5pc2hNYXliZShzdHJlYW0sc3RhdGUpfWZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSxzdGF0ZSl7c3RhdGUuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgZW50cnk9c3RhdGUuYnVmZmVyZWRSZXF1ZXN0O2lmKHN0cmVhbS5fd3JpdGV2JiZlbnRyeSYmZW50cnkubmV4dCl7dmFyIGw9c3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQsYnVmZmVyPW5ldyBBcnJheShsKSxob2xkZXI9c3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlO2hvbGRlci5lbnRyeT1lbnRyeTtmb3IodmFyIGNvdW50PTAsYWxsQnVmZmVycz0hMDtlbnRyeTspYnVmZmVyW2NvdW50XT1lbnRyeSxlbnRyeS5pc0J1Znx8KGFsbEJ1ZmZlcnM9ITEpLGVudHJ5PWVudHJ5Lm5leHQsY291bnQrPTE7YnVmZmVyLmFsbEJ1ZmZlcnM9YWxsQnVmZmVycyxkb1dyaXRlKHN0cmVhbSxzdGF0ZSwhMCxzdGF0ZS5sZW5ndGgsYnVmZmVyLCIiLGhvbGRlci5maW5pc2gpLHN0YXRlLnBlbmRpbmdjYisrLHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxob2xkZXIubmV4dD8oc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlPWhvbGRlci5uZXh0LGhvbGRlci5uZXh0PW51bGwpOnN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgQ29ya2VkUmVxdWVzdChzdGF0ZSksc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7ZW50cnk7KXt2YXIgY2h1bms9ZW50cnkuY2h1bmssZW5jb2Rpbmc9ZW50cnkuZW5jb2RpbmcsY2I9ZW50cnkuY2FsbGJhY2s7aWYoZG9Xcml0ZShzdHJlYW0sc3RhdGUsITEsc3RhdGUub2JqZWN0TW9kZT8xOmNodW5rLmxlbmd0aCxjaHVuayxlbmNvZGluZyxjYiksZW50cnk9ZW50cnkubmV4dCxzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLHN0YXRlLndyaXRpbmcpYnJlYWt9bnVsbD09PWVudHJ5JiYoc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1zdGF0ZS5idWZmZXJlZFJlcXVlc3Q9ZW50cnksc3RhdGUuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBuZWVkRmluaXNoKHN0YXRlKXtyZXR1cm4gc3RhdGUuZW5kaW5nJiYwPT09c3RhdGUubGVuZ3RoJiZudWxsPT09c3RhdGUuYnVmZmVyZWRSZXF1ZXN0JiYhc3RhdGUuZmluaXNoZWQmJiFzdGF0ZS53cml0aW5nfWZ1bmN0aW9uIGNhbGxGaW5hbChzdHJlYW0sc3RhdGUpe3N0cmVhbS5fZmluYWwoZnVuY3Rpb24oZXJyKXtzdGF0ZS5wZW5kaW5nY2ItLSxlcnImJnN0cmVhbS5lbWl0KCJlcnJvciIsZXJyKSxzdGF0ZS5wcmVmaW5pc2hlZD0hMCxzdHJlYW0uZW1pdCgicHJlZmluaXNoIiksZmluaXNoTWF5YmUoc3RyZWFtLHN0YXRlKX0pfWZ1bmN0aW9uIGZpbmlzaE1heWJlKHN0cmVhbSxzdGF0ZSl7dmFyIG5lZWQ9bmVlZEZpbmlzaChzdGF0ZSk7cmV0dXJuIG5lZWQmJighZnVuY3Rpb24gcHJlZmluaXNoKHN0cmVhbSxzdGF0ZSl7c3RhdGUucHJlZmluaXNoZWR8fHN0YXRlLmZpbmFsQ2FsbGVkfHwoImZ1bmN0aW9uIj09dHlwZW9mIHN0cmVhbS5fZmluYWw/KHN0YXRlLnBlbmRpbmdjYisrLHN0YXRlLmZpbmFsQ2FsbGVkPSEwLHBuYS5uZXh0VGljayhjYWxsRmluYWwsc3RyZWFtLHN0YXRlKSk6KHN0YXRlLnByZWZpbmlzaGVkPSEwLHN0cmVhbS5lbWl0KCJwcmVmaW5pc2giKSkpfShzdHJlYW0sc3RhdGUpLDA9PT1zdGF0ZS5wZW5kaW5nY2ImJihzdGF0ZS5maW5pc2hlZD0hMCxzdHJlYW0uZW1pdCgiZmluaXNoIikpKSxuZWVkfXV0aWwuaW5oZXJpdHMoV3JpdGFibGUsU3RyZWFtKSxXcml0YWJsZVN0YXRlLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24gZ2V0QnVmZmVyKCl7Zm9yKHZhciBjdXJyZW50PXRoaXMuYnVmZmVyZWRSZXF1ZXN0LG91dD1bXTtjdXJyZW50OylvdXQucHVzaChjdXJyZW50KSxjdXJyZW50PWN1cnJlbnQubmV4dDtyZXR1cm4gb3V0fSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDppbnRlcm5hbFV0aWwuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoKF8pe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KHJlYWxIYXNJbnN0YW5jZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihvYmplY3Qpe3JldHVybiEhcmVhbEhhc0luc3RhbmNlLmNhbGwodGhpcyxvYmplY3QpfHx0aGlzPT09V3JpdGFibGUmJihvYmplY3QmJm9iamVjdC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFdyaXRhYmxlU3RhdGUpfX0pKTpyZWFsSGFzSW5zdGFuY2U9ZnVuY3Rpb24ob2JqZWN0KXtyZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgdGhpc30sV3JpdGFibGUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSl9LFdyaXRhYmxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihjaHVuayxlbmNvZGluZyxjYil7dmFyIHN0YXRlPXRoaXMuX3dyaXRhYmxlU3RhdGUscmV0PSExLGlzQnVmPSFzdGF0ZS5vYmplY3RNb2RlJiZmdW5jdGlvbiBfaXNVaW50OEFycmF5KG9iail7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopfHxvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5fShjaHVuayk7cmV0dXJuIGlzQnVmJiYhQnVmZmVyLmlzQnVmZmVyKGNodW5rKSYmKGNodW5rPWZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspe3JldHVybiBCdWZmZXIuZnJvbShjaHVuayl9KGNodW5rKSksImZ1bmN0aW9uIj09dHlwZW9mIGVuY29kaW5nJiYoY2I9ZW5jb2RpbmcsZW5jb2Rpbmc9bnVsbCksaXNCdWY/ZW5jb2Rpbmc9ImJ1ZmZlciI6ZW5jb2Rpbmd8fChlbmNvZGluZz1zdGF0ZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiBjYiYmKGNiPW5vcCksc3RhdGUuZW5kZWQ/ZnVuY3Rpb24gd3JpdGVBZnRlckVuZChzdHJlYW0sY2Ipe3ZhciBlcj1uZXcgRXJyb3IoIndyaXRlIGFmdGVyIGVuZCIpO3N0cmVhbS5lbWl0KCJlcnJvciIsZXIpLHBuYS5uZXh0VGljayhjYixlcil9KHRoaXMsY2IpOihpc0J1Znx8ZnVuY3Rpb24gdmFsaWRDaHVuayhzdHJlYW0sc3RhdGUsY2h1bmssY2Ipe3ZhciB2YWxpZD0hMCxlcj0hMTtyZXR1cm4gbnVsbD09PWNodW5rP2VyPW5ldyBUeXBlRXJyb3IoIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIik6InN0cmluZyI9PXR5cGVvZiBjaHVua3x8dm9pZCAwPT09Y2h1bmt8fHN0YXRlLm9iamVjdE1vZGV8fChlcj1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLGVyJiYoc3RyZWFtLmVtaXQoImVycm9yIixlcikscG5hLm5leHRUaWNrKGNiLGVyKSx2YWxpZD0hMSksdmFsaWR9KHRoaXMsc3RhdGUsY2h1bmssY2IpKSYmKHN0YXRlLnBlbmRpbmdjYisrLHJldD1mdW5jdGlvbiB3cml0ZU9yQnVmZmVyKHN0cmVhbSxzdGF0ZSxpc0J1ZixjaHVuayxlbmNvZGluZyxjYil7aWYoIWlzQnVmKXt2YXIgbmV3Q2h1bms9ZnVuY3Rpb24gZGVjb2RlQ2h1bmsoc3RhdGUsY2h1bmssZW5jb2Rpbmcpe3N0YXRlLm9iamVjdE1vZGV8fCExPT09c3RhdGUuZGVjb2RlU3RyaW5nc3x8InN0cmluZyIhPXR5cGVvZiBjaHVua3x8KGNodW5rPUJ1ZmZlci5mcm9tKGNodW5rLGVuY29kaW5nKSk7cmV0dXJuIGNodW5rfShzdGF0ZSxjaHVuayxlbmNvZGluZyk7Y2h1bmshPT1uZXdDaHVuayYmKGlzQnVmPSEwLGVuY29kaW5nPSJidWZmZXIiLGNodW5rPW5ld0NodW5rKX12YXIgbGVuPXN0YXRlLm9iamVjdE1vZGU/MTpjaHVuay5sZW5ndGg7c3RhdGUubGVuZ3RoKz1sZW47dmFyIHJldD1zdGF0ZS5sZW5ndGg8c3RhdGUuaGlnaFdhdGVyTWFyaztyZXR8fChzdGF0ZS5uZWVkRHJhaW49ITApO2lmKHN0YXRlLndyaXRpbmd8fHN0YXRlLmNvcmtlZCl7dmFyIGxhc3Q9c3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuayxlbmNvZGluZyxpc0J1ZixjYWxsYmFjazpjYixuZXh0Om51bGx9LGxhc3Q/bGFzdC5uZXh0PXN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q6c3RhdGUuYnVmZmVyZWRSZXF1ZXN0PXN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Qsc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBkb1dyaXRlKHN0cmVhbSxzdGF0ZSwhMSxsZW4sY2h1bmssZW5jb2RpbmcsY2IpO3JldHVybiByZXR9KHRoaXMsc3RhdGUsaXNCdWYsY2h1bmssZW5jb2RpbmcsY2IpKSxyZXR9LFdyaXRhYmxlLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sV3JpdGFibGUucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBzdGF0ZT10aGlzLl93cml0YWJsZVN0YXRlO3N0YXRlLmNvcmtlZCYmKHN0YXRlLmNvcmtlZC0tLHN0YXRlLndyaXRpbmd8fHN0YXRlLmNvcmtlZHx8c3RhdGUuYnVmZmVyUHJvY2Vzc2luZ3x8IXN0YXRlLmJ1ZmZlcmVkUmVxdWVzdHx8Y2xlYXJCdWZmZXIodGhpcyxzdGF0ZSkpfSxXcml0YWJsZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZyl7aWYoInN0cmluZyI9PXR5cGVvZiBlbmNvZGluZyYmKGVuY29kaW5nPWVuY29kaW5nLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKGVuY29kaW5nKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlbmNvZGluZyk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPWVuY29kaW5nLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxXcml0YWJsZS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGNodW5rLGVuY29kaW5nLGNiKXtjYihuZXcgRXJyb3IoIl93cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXY9bnVsbCxXcml0YWJsZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGNodW5rLGVuY29kaW5nLGNiKXt2YXIgc3RhdGU9dGhpcy5fd3JpdGFibGVTdGF0ZTsiZnVuY3Rpb24iPT10eXBlb2YgY2h1bms/KGNiPWNodW5rLGNodW5rPW51bGwsZW5jb2Rpbmc9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIGVuY29kaW5nJiYoY2I9ZW5jb2RpbmcsZW5jb2Rpbmc9bnVsbCksbnVsbCE9Y2h1bmsmJnRoaXMud3JpdGUoY2h1bmssZW5jb2RpbmcpLHN0YXRlLmNvcmtlZCYmKHN0YXRlLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLHN0YXRlLmVuZGluZ3x8ZnVuY3Rpb24gZW5kV3JpdGFibGUoc3RyZWFtLHN0YXRlLGNiKXtzdGF0ZS5lbmRpbmc9ITAsZmluaXNoTWF5YmUoc3RyZWFtLHN0YXRlKSxjYiYmKHN0YXRlLmZpbmlzaGVkP3BuYS5uZXh0VGljayhjYik6c3RyZWFtLm9uY2UoImZpbmlzaCIsY2IpKTtzdGF0ZS5lbmRlZD0hMCxzdHJlYW0ud3JpdGFibGU9ITF9KHRoaXMsc3RhdGUsY2IpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbih2YWx1ZSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXZhbHVlKX19KSxXcml0YWJsZS5wcm90b3R5cGUuZGVzdHJveT1kZXN0cm95SW1wbC5kZXN0cm95LFdyaXRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95PWRlc3Ryb3lJbXBsLnVuZGVzdHJveSxXcml0YWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZXJyLGNiKXt0aGlzLmVuZCgpLGNiKGVycil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLHV0aWw9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIpO2Z1bmN0aW9uIGNvcHlCdWZmZXIoc3JjLHRhcmdldCxvZmZzZXQpe3NyYy5jb3B5KHRhcmdldCxvZmZzZXQpfW1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQnVmZmVyTGlzdCgpeyFmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsQ29uc3RydWN0b3Ipe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsQnVmZmVyTGlzdCksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gQnVmZmVyTGlzdC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbiBwdXNoKHYpe3ZhciBlbnRyeT17ZGF0YTp2LG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1lbnRyeTp0aGlzLmhlYWQ9ZW50cnksdGhpcy50YWlsPWVudHJ5LCsrdGhpcy5sZW5ndGh9LEJ1ZmZlckxpc3QucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24gdW5zaGlmdCh2KXt2YXIgZW50cnk9e2RhdGE6dixuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPWVudHJ5KSx0aGlzLmhlYWQ9ZW50cnksKyt0aGlzLmxlbmd0aH0sQnVmZmVyTGlzdC5wcm90b3R5cGUuc2hpZnQ9ZnVuY3Rpb24gc2hpZnQoKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciByZXQ9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIDE9PT10aGlzLmxlbmd0aD90aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgscmV0fX0sQnVmZmVyTGlzdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gY2xlYXIoKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0sQnVmZmVyTGlzdC5wcm90b3R5cGUuam9pbj1mdW5jdGlvbiBqb2luKHMpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIHA9dGhpcy5oZWFkLHJldD0iIitwLmRhdGE7cD1wLm5leHQ7KXJldCs9cytwLmRhdGE7cmV0dXJuIHJldH0sQnVmZmVyTGlzdC5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uIGNvbmNhdChuKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtmb3IodmFyIHJldD1CdWZmZXIuYWxsb2NVbnNhZmUobj4+PjApLHA9dGhpcy5oZWFkLGk9MDtwOyljb3B5QnVmZmVyKHAuZGF0YSxyZXQsaSksaSs9cC5kYXRhLmxlbmd0aCxwPXAubmV4dDtyZXR1cm4gcmV0fSxCdWZmZXJMaXN0fSgpLHV0aWwmJnV0aWwuaW5zcGVjdCYmdXRpbC5pbnNwZWN0LmN1c3RvbSYmKG1vZHVsZS5leHBvcnRzLnByb3RvdHlwZVt1dGlsLmluc3BlY3QuY3VzdG9tXT1mdW5jdGlvbigpe3ZhciBvYmo9dXRpbC5pbnNwZWN0KHtsZW5ndGg6dGhpcy5sZW5ndGh9KTtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lKyIgIitvYmp9KX0sIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHBuYT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy1uZXh0aWNrLWFyZ3MvaW5kZXguanMiKTtmdW5jdGlvbiBlbWl0RXJyb3JOVChzZWxmLGVycil7c2VsZi5lbWl0KCJlcnJvciIsZXJyKX1tb2R1bGUuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiBkZXN0cm95KGVycixjYil7dmFyIF90aGlzPXRoaXMscmVhZGFibGVEZXN0cm95ZWQ9dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQsd3JpdGFibGVEZXN0cm95ZWQ9dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7cmV0dXJuIHJlYWRhYmxlRGVzdHJveWVkfHx3cml0YWJsZURlc3Ryb3llZD8oY2I/Y2IoZXJyKTplcnImJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAscG5hLm5leHRUaWNrKGVtaXRFcnJvck5ULHRoaXMsZXJyKSk6cG5hLm5leHRUaWNrKGVtaXRFcnJvck5ULHRoaXMsZXJyKSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KGVycnx8bnVsbCxmdW5jdGlvbihlcnIpeyFjYiYmZXJyP190aGlzLl93cml0YWJsZVN0YXRlP190aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KF90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwbmEubmV4dFRpY2soZW1pdEVycm9yTlQsX3RoaXMsZXJyKSk6cG5hLm5leHRUaWNrKGVtaXRFcnJvck5ULF90aGlzLGVycik6Y2ImJmNiKGVycil9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uIHVuZGVzdHJveSgpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX19fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0tYnJvd3Nlci5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXttb2R1bGUuZXhwb3J0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIpLkV2ZW50RW1pdHRlcn0sIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgYnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKSxCdWZmZXI9YnVmZmVyLkJ1ZmZlcjtmdW5jdGlvbiBjb3B5UHJvcHMoc3JjLGRzdCl7Zm9yKHZhciBrZXkgaW4gc3JjKWRzdFtrZXldPXNyY1trZXldfWZ1bmN0aW9uIFNhZmVCdWZmZXIoYXJnLGVuY29kaW5nT3JPZmZzZXQsbGVuZ3RoKXtyZXR1cm4gQnVmZmVyKGFyZyxlbmNvZGluZ09yT2Zmc2V0LGxlbmd0aCl9QnVmZmVyLmZyb20mJkJ1ZmZlci5hbGxvYyYmQnVmZmVyLmFsbG9jVW5zYWZlJiZCdWZmZXIuYWxsb2NVbnNhZmVTbG93P21vZHVsZS5leHBvcnRzPWJ1ZmZlcjooY29weVByb3BzKGJ1ZmZlcixleHBvcnRzKSxleHBvcnRzLkJ1ZmZlcj1TYWZlQnVmZmVyKSxjb3B5UHJvcHMoQnVmZmVyLFNhZmVCdWZmZXIpLFNhZmVCdWZmZXIuZnJvbT1mdW5jdGlvbihhcmcsZW5jb2RpbmdPck9mZnNldCxsZW5ndGgpe2lmKCJudW1iZXIiPT10eXBlb2YgYXJnKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIEJ1ZmZlcihhcmcsZW5jb2RpbmdPck9mZnNldCxsZW5ndGgpfSxTYWZlQnVmZmVyLmFsbG9jPWZ1bmN0aW9uKHNpemUsZmlsbCxlbmNvZGluZyl7aWYoIm51bWJlciIhPXR5cGVvZiBzaXplKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgYnVmPUJ1ZmZlcihzaXplKTtyZXR1cm4gdm9pZCAwIT09ZmlsbD8ic3RyaW5nIj09dHlwZW9mIGVuY29kaW5nP2J1Zi5maWxsKGZpbGwsZW5jb2RpbmcpOmJ1Zi5maWxsKGZpbGwpOmJ1Zi5maWxsKDApLGJ1Zn0sU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihzaXplKXtpZigibnVtYmVyIiE9dHlwZW9mIHNpemUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBCdWZmZXIoc2l6ZSl9LFNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHNpemUpe2lmKCJudW1iZXIiIT10eXBlb2Ygc2l6ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIGJ1ZmZlci5TbG93QnVmZmVyKHNpemUpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUtYnJvd3Nlci5qcyIobW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7KGV4cG9ydHM9bW9kdWxlLmV4cG9ydHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIpKS5TdHJlYW09ZXhwb3J0cyxleHBvcnRzLlJlYWRhYmxlPWV4cG9ydHMsZXhwb3J0cy5Xcml0YWJsZT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiksZXhwb3J0cy5EdXBsZXg9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKSxleHBvcnRzLlRyYW5zZm9ybT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIpLGV4cG9ydHMuUGFzc1Rocm91Z2g9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcyIpfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3JpcGVtZDE2MC9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLGluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiksSGFzaEJhc2U9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JpcGVtZDE2MC9ub2RlX21vZHVsZXMvaGFzaC1iYXNlL2luZGV4LmpzIiksQVJSQVkxNj1uZXcgQXJyYXkoMTYpLHpsPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLHpyPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLHNsPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxzcj1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV0saGw9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0MDg1MzgzOF0saHI9WzEzNTI4Mjk5MjYsMTU0ODYwMzY4NCwxODM2MDcyNjkxLDIwNTM5OTQyMTcsMF07ZnVuY3Rpb24gcm90bCh4LG4pe3JldHVybiB4PDxufHg+Pj4zMi1ufWZ1bmN0aW9uIGZuMShhLGIsYyxkLGUsbSxrLHMpe3JldHVybiByb3RsKGErKGJeY15kKSttK2t8MCxzKStlfDB9ZnVuY3Rpb24gZm4yKGEsYixjLGQsZSxtLGsscyl7cmV0dXJuIHJvdGwoYSsoYiZjfH5iJmQpK20ra3wwLHMpK2V8MH1mdW5jdGlvbiBmbjMoYSxiLGMsZCxlLG0sayxzKXtyZXR1cm4gcm90bChhKygoYnx+YyleZCkrbStrfDAscykrZXwwfWZ1bmN0aW9uIGZuNChhLGIsYyxkLGUsbSxrLHMpe3JldHVybiByb3RsKGErKGImZHxjJn5kKSttK2t8MCxzKStlfDB9ZnVuY3Rpb24gZm41KGEsYixjLGQsZSxtLGsscyl7cmV0dXJuIHJvdGwoYSsoYl4oY3x+ZCkpK20ra3wwLHMpK2V8MH1mdW5jdGlvbiBSSVBFTUQxNjAoKXtIYXNoQmFzZS5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1pbmhlcml0cyhSSVBFTUQxNjAsSGFzaEJhc2UpLFJJUEVNRDE2MC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgd29yZHM9QVJSQVkxNixqPTA7ajwxNjsrK2opd29yZHNbal09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpqKTtmb3IodmFyIGFsPTB8dGhpcy5fYSxibD0wfHRoaXMuX2IsY2w9MHx0aGlzLl9jLGRsPTB8dGhpcy5fZCxlbD0wfHRoaXMuX2UsYXI9MHx0aGlzLl9hLGJyPTB8dGhpcy5fYixjcj0wfHRoaXMuX2MsZHI9MHx0aGlzLl9kLGVyPTB8dGhpcy5fZSxpPTA7aTw4MDtpKz0xKXt2YXIgdGwsdHI7aTwxNj8odGw9Zm4xKGFsLGJsLGNsLGRsLGVsLHdvcmRzW3psW2ldXSxobFswXSxzbFtpXSksdHI9Zm41KGFyLGJyLGNyLGRyLGVyLHdvcmRzW3pyW2ldXSxoclswXSxzcltpXSkpOmk8MzI/KHRsPWZuMihhbCxibCxjbCxkbCxlbCx3b3Jkc1t6bFtpXV0saGxbMV0sc2xbaV0pLHRyPWZuNChhcixicixjcixkcixlcix3b3Jkc1t6cltpXV0saHJbMV0sc3JbaV0pKTppPDQ4Pyh0bD1mbjMoYWwsYmwsY2wsZGwsZWwsd29yZHNbemxbaV1dLGhsWzJdLHNsW2ldKSx0cj1mbjMoYXIsYnIsY3IsZHIsZXIsd29yZHNbenJbaV1dLGhyWzJdLHNyW2ldKSk6aTw2ND8odGw9Zm40KGFsLGJsLGNsLGRsLGVsLHdvcmRzW3psW2ldXSxobFszXSxzbFtpXSksdHI9Zm4yKGFyLGJyLGNyLGRyLGVyLHdvcmRzW3pyW2ldXSxoclszXSxzcltpXSkpOih0bD1mbjUoYWwsYmwsY2wsZGwsZWwsd29yZHNbemxbaV1dLGhsWzRdLHNsW2ldKSx0cj1mbjEoYXIsYnIsY3IsZHIsZXIsd29yZHNbenJbaV1dLGhyWzRdLHNyW2ldKSksYWw9ZWwsZWw9ZGwsZGw9cm90bChjbCwxMCksY2w9YmwsYmw9dGwsYXI9ZXIsZXI9ZHIsZHI9cm90bChjciwxMCksY3I9YnIsYnI9dHJ9dmFyIHQ9dGhpcy5fYitjbCtkcnwwO3RoaXMuX2I9dGhpcy5fYytkbCtlcnwwLHRoaXMuX2M9dGhpcy5fZCtlbCthcnwwLHRoaXMuX2Q9dGhpcy5fZSthbCticnwwLHRoaXMuX2U9dGhpcy5fYStibCtjcnwwLHRoaXMuX2E9dH0sUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXRdPTEyOCx0aGlzLl9ibG9ja09mZnNldCs9MSx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBidWZmZXI9QnVmZmVyLmFsbG9jP0J1ZmZlci5hbGxvYygyMCk6bmV3IEJ1ZmZlcigyMCk7cmV0dXJuIGJ1ZmZlci53cml0ZUludDMyTEUodGhpcy5fYSwwKSxidWZmZXIud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLGJ1ZmZlci53cml0ZUludDMyTEUodGhpcy5fZCwxMiksYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9lLDE2KSxidWZmZXJ9LG1vZHVsZS5leHBvcnRzPVJJUEVNRDE2MH0sIi4uLy4uL25vZGVfbW9kdWxlcy9yaXBlbWQxNjAvbm9kZV9tb2R1bGVzL2hhc2gtYmFzZS9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXIsdG9CdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3JpcGVtZDE2MC9ub2RlX21vZHVsZXMvaGFzaC1iYXNlL3RvLWJ1ZmZlci5qcyIpLFRyYW5zZm9ybT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL3JlYWRhYmxlLWJyb3dzZXIuanMiKS5UcmFuc2Zvcm07ZnVuY3Rpb24gSGFzaEJhc2UoYmxvY2tTaXplKXtUcmFuc2Zvcm0uY2FsbCh0aGlzKSx0aGlzLl9ibG9jaz1CdWZmZXIuYWxsb2NVbnNhZmUoYmxvY2tTaXplKSx0aGlzLl9ibG9ja1NpemU9YmxvY2tTaXplLHRoaXMuX2Jsb2NrT2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPVswLDAsMCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKShIYXNoQmFzZSxUcmFuc2Zvcm0pLEhhc2hCYXNlLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGNodW5rLGVuY29kaW5nLGNhbGxiYWNrKXt2YXIgZXJyb3I9bnVsbDt0cnl7dGhpcy51cGRhdGUoY2h1bmssZW5jb2RpbmcpfWNhdGNoKGVycil7ZXJyb3I9ZXJyfWNhbGxiYWNrKGVycm9yKX0sSGFzaEJhc2UucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihjYWxsYmFjayl7dmFyIGVycm9yPW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChlcnIpe2Vycm9yPWVycn1jYWxsYmFjayhlcnJvcil9LEhhc2hCYXNlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZGF0YSxlbmNvZGluZyl7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7Zm9yKHZhciBkYXRhQnVmZmVyPXRvQnVmZmVyKGRhdGEsZW5jb2RpbmcpLGJsb2NrPXRoaXMuX2Jsb2NrLG9mZnNldD0wO3RoaXMuX2Jsb2NrT2Zmc2V0K2RhdGFCdWZmZXIubGVuZ3RoLW9mZnNldD49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBpPXRoaXMuX2Jsb2NrT2Zmc2V0O2k8dGhpcy5fYmxvY2tTaXplOylibG9ja1tpXT1kYXRhQnVmZmVyW29mZnNldF0saSs9MSxvZmZzZXQrPTE7dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO29mZnNldDxkYXRhQnVmZmVyLmxlbmd0aDspYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXRdPWRhdGFCdWZmZXJbb2Zmc2V0XSx0aGlzLl9ibG9ja09mZnNldCs9MSxvZmZzZXQrPTE7Zm9yKHZhciBqPTAsY2Fycnk9OCpkYXRhQnVmZmVyLmxlbmd0aDtjYXJyeT4wOysrail0aGlzLl9sZW5ndGhbal0rPWNhcnJ5LChjYXJyeT10aGlzLl9sZW5ndGhbal0vNDI5NDk2NzI5NnwwKT4wJiYodGhpcy5fbGVuZ3RoW2pdLT00Mjk0OTY3Mjk2KmNhcnJ5KTtyZXR1cm4gdGhpc30sSGFzaEJhc2UucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgaXMgbm90IGltcGxlbWVudGVkIil9LEhhc2hCYXNlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oZW5jb2Rpbmcpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgZGlnZXN0PXRoaXMuX2RpZ2VzdCgpO3ZvaWQgMCE9PWVuY29kaW5nJiYoZGlnZXN0PWRpZ2VzdC50b1N0cmluZyhlbmNvZGluZykpLHRoaXMuX2Jsb2NrLmZpbGwoMCksdGhpcy5fYmxvY2tPZmZzZXQ9MDtmb3IodmFyIGk9MDtpPDQ7KytpKXRoaXMuX2xlbmd0aFtpXT0wO3JldHVybiBkaWdlc3R9LEhhc2hCYXNlLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfZGlnZXN0IGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxtb2R1bGUuZXhwb3J0cz1IYXNoQmFzZX0sIi4uLy4uL25vZGVfbW9kdWxlcy9yaXBlbWQxNjAvbm9kZV9tb2R1bGVzL2hhc2gtYmFzZS90by1idWZmZXIuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLHRvQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy90by1idWZmZXIvaW5kZXguanMiKSx1c2VVaW50OEFycmF5PSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheSxpc1ZpZXc9dXNlVWludDhBcnJheSYmInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3O21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHRoaW5nLGVuY29kaW5nKXtpZigic3RyaW5nIj09dHlwZW9mIHRoaW5nfHxCdWZmZXIuaXNCdWZmZXIodGhpbmcpfHx1c2VVaW50OEFycmF5JiZ0aGluZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fGlzVmlldyYmaXNWaWV3KHRoaW5nKSlyZXR1cm4gdG9CdWZmZXIodGhpbmcsZW5jb2RpbmcpO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgVWludDhBcnJheSwgb3IgYSBEYXRhVmlldycpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIobW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIGJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiksQnVmZmVyPWJ1ZmZlci5CdWZmZXI7ZnVuY3Rpb24gY29weVByb3BzKHNyYyxkc3Qpe2Zvcih2YXIga2V5IGluIHNyYylkc3Rba2V5XT1zcmNba2V5XX1mdW5jdGlvbiBTYWZlQnVmZmVyKGFyZyxlbmNvZGluZ09yT2Zmc2V0LGxlbmd0aCl7cmV0dXJuIEJ1ZmZlcihhcmcsZW5jb2RpbmdPck9mZnNldCxsZW5ndGgpfUJ1ZmZlci5mcm9tJiZCdWZmZXIuYWxsb2MmJkJ1ZmZlci5hbGxvY1Vuc2FmZSYmQnVmZmVyLmFsbG9jVW5zYWZlU2xvdz9tb2R1bGUuZXhwb3J0cz1idWZmZXI6KGNvcHlQcm9wcyhidWZmZXIsZXhwb3J0cyksZXhwb3J0cy5CdWZmZXI9U2FmZUJ1ZmZlciksU2FmZUJ1ZmZlci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCdWZmZXIucHJvdG90eXBlKSxjb3B5UHJvcHMoQnVmZmVyLFNhZmVCdWZmZXIpLFNhZmVCdWZmZXIuZnJvbT1mdW5jdGlvbihhcmcsZW5jb2RpbmdPck9mZnNldCxsZW5ndGgpe2lmKCJudW1iZXIiPT10eXBlb2YgYXJnKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIEJ1ZmZlcihhcmcsZW5jb2RpbmdPck9mZnNldCxsZW5ndGgpfSxTYWZlQnVmZmVyLmFsbG9jPWZ1bmN0aW9uKHNpemUsZmlsbCxlbmNvZGluZyl7aWYoIm51bWJlciIhPXR5cGVvZiBzaXplKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgYnVmPUJ1ZmZlcihzaXplKTtyZXR1cm4gdm9pZCAwIT09ZmlsbD8ic3RyaW5nIj09dHlwZW9mIGVuY29kaW5nP2J1Zi5maWxsKGZpbGwsZW5jb2RpbmcpOmJ1Zi5maWxsKGZpbGwpOmJ1Zi5maWxsKDApLGJ1Zn0sU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihzaXplKXtpZigibnVtYmVyIiE9dHlwZW9mIHNpemUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBCdWZmZXIoc2l6ZSl9LFNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHNpemUpe2lmKCJudW1iZXIiIT10eXBlb2Ygc2l6ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIGJ1ZmZlci5TbG93QnVmZmVyKHNpemUpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLXJlZ2V4LXRlc3QvaW5kZXguanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBjYWxsQm91bmQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NhbGwtYm91bmQvaW5kZXguanMiKSxpc1JlZ2V4PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pcy1yZWdleC9pbmRleC5qcyIpLCRleGVjPWNhbGxCb3VuZCgiUmVnRXhwLnByb3RvdHlwZS5leGVjIiksJFR5cGVFcnJvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3R5cGUuanMiKTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiByZWdleFRlc3RlcihyZWdleCl7aWYoIWlzUmVnZXgocmVnZXgpKXRocm93IG5ldyAkVHlwZUVycm9yKCJgcmVnZXhgIG11c3QgYmUgYSBSZWdFeHAiKTtyZXR1cm4gZnVuY3Rpb24gdGVzdChzKXtyZXR1cm4gbnVsbCE9PSRleGVjKHJlZ2V4LHMpfX19LCIuLi8uLi9ub2RlX21vZHVsZXMvc2V0LWZ1bmN0aW9uLWxlbmd0aC9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIEdldEludHJpbnNpYz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcyIpLGRlZmluZT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZGVmaW5lLWRhdGEtcHJvcGVydHkvaW5kZXguanMiKSxoYXNEZXNjcmlwdG9ycz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaGFzLXByb3BlcnR5LWRlc2NyaXB0b3JzL2luZGV4LmpzIikoKSxnT1BEPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9nb3BkL2luZGV4LmpzIiksJFR5cGVFcnJvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3R5cGUuanMiKSwkZmxvb3I9R2V0SW50cmluc2ljKCIlTWF0aC5mbG9vciUiKTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBzZXRGdW5jdGlvbkxlbmd0aChmbixsZW5ndGgpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBmbil0aHJvdyBuZXcgJFR5cGVFcnJvcigiYGZuYCBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCJudW1iZXIiIT10eXBlb2YgbGVuZ3RofHxsZW5ndGg8MHx8bGVuZ3RoPjQyOTQ5NjcyOTV8fCRmbG9vcihsZW5ndGgpIT09bGVuZ3RoKXRocm93IG5ldyAkVHlwZUVycm9yKCJgbGVuZ3RoYCBtdXN0IGJlIGEgcG9zaXRpdmUgMzItYml0IGludGVnZXIiKTt2YXIgbG9vc2U9YXJndW1lbnRzLmxlbmd0aD4yJiYhIWFyZ3VtZW50c1syXSxmdW5jdGlvbkxlbmd0aElzQ29uZmlndXJhYmxlPSEwLGZ1bmN0aW9uTGVuZ3RoSXNXcml0YWJsZT0hMDtpZigibGVuZ3RoImluIGZuJiZnT1BEKXt2YXIgZGVzYz1nT1BEKGZuLCJsZW5ndGgiKTtkZXNjJiYhZGVzYy5jb25maWd1cmFibGUmJihmdW5jdGlvbkxlbmd0aElzQ29uZmlndXJhYmxlPSExKSxkZXNjJiYhZGVzYy53cml0YWJsZSYmKGZ1bmN0aW9uTGVuZ3RoSXNXcml0YWJsZT0hMSl9cmV0dXJuKGZ1bmN0aW9uTGVuZ3RoSXNDb25maWd1cmFibGV8fGZ1bmN0aW9uTGVuZ3RoSXNXcml0YWJsZXx8IWxvb3NlKSYmKGhhc0Rlc2NyaXB0b3JzP2RlZmluZShmbiwibGVuZ3RoIixsZW5ndGgsITAsITApOmRlZmluZShmbiwibGVuZ3RoIixsZW5ndGgpKSxmbn19LCIuLi8uLi9ub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBwcm9jZXNzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9wcm94eS9wcm9jZXNzLmpzIik7IWZ1bmN0aW9uKGdsb2JhbCl7InVzZSBzdHJpY3QiO2lmKCFnbG9iYWwuc2V0SW1tZWRpYXRlKXt2YXIgcmVnaXN0ZXJJbW1lZGlhdGUsbmV4dEhhbmRsZT0xLHRhc2tzQnlIYW5kbGU9e30sY3VycmVudGx5UnVubmluZ0FUYXNrPSExLGRvYz1nbG9iYWwuZG9jdW1lbnQsYXR0YWNoVG89T2JqZWN0LmdldFByb3RvdHlwZU9mJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsKTthdHRhY2hUbz1hdHRhY2hUbyYmYXR0YWNoVG8uc2V0VGltZW91dD9hdHRhY2hUbzpnbG9iYWwsIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChnbG9iYWwucHJvY2Vzcyk/ZnVuY3Rpb24gaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKXtyZWdpc3RlckltbWVkaWF0ZT1mdW5jdGlvbihoYW5kbGUpe3Byb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtydW5JZlByZXNlbnQoaGFuZGxlKX0pfX0oKTohZnVuY3Rpb24gY2FuVXNlUG9zdE1lc3NhZ2UoKXtpZihnbG9iYWwucG9zdE1lc3NhZ2UmJiFnbG9iYWwuaW1wb3J0U2NyaXB0cyl7dmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXM9ITAsb2xkT25NZXNzYWdlPWdsb2JhbC5vbm1lc3NhZ2U7cmV0dXJuIGdsb2JhbC5vbm1lc3NhZ2U9ZnVuY3Rpb24oKXtwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzPSExfSxnbG9iYWwucG9zdE1lc3NhZ2UoIiIsIioiKSxnbG9iYWwub25tZXNzYWdlPW9sZE9uTWVzc2FnZSxwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzfX0oKT9nbG9iYWwuTWVzc2FnZUNoYW5uZWw/ZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKXt2YXIgY2hhbm5lbD1uZXcgTWVzc2FnZUNoYW5uZWw7Y2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oZXZlbnQpe3J1bklmUHJlc2VudChldmVudC5kYXRhKX0scmVnaXN0ZXJJbW1lZGlhdGU9ZnVuY3Rpb24oaGFuZGxlKXtjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSl9fSgpOmRvYyYmIm9ucmVhZHlzdGF0ZWNoYW5nZSJpbiBkb2MuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik/ZnVuY3Rpb24gaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpe3ZhciBodG1sPWRvYy5kb2N1bWVudEVsZW1lbnQ7cmVnaXN0ZXJJbW1lZGlhdGU9ZnVuY3Rpb24oaGFuZGxlKXt2YXIgc2NyaXB0PWRvYy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7cnVuSWZQcmVzZW50KGhhbmRsZSksc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGh0bWwucmVtb3ZlQ2hpbGQoc2NyaXB0KSxzY3JpcHQ9bnVsbH0saHRtbC5hcHBlbmRDaGlsZChzY3JpcHQpfX0oKTpmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCl7cmVnaXN0ZXJJbW1lZGlhdGU9ZnVuY3Rpb24oaGFuZGxlKXtzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwwLGhhbmRsZSl9fSgpOmZ1bmN0aW9uIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCl7dmFyIG1lc3NhZ2VQcmVmaXg9InNldEltbWVkaWF0ZSQiK01hdGgucmFuZG9tKCkrIiQiLG9uR2xvYmFsTWVzc2FnZT1mdW5jdGlvbihldmVudCl7ZXZlbnQuc291cmNlPT09Z2xvYmFsJiYic3RyaW5nIj09dHlwZW9mIGV2ZW50LmRhdGEmJjA9PT1ldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkmJnJ1bklmUHJlc2VudCgrZXZlbnQuZGF0YS5zbGljZShtZXNzYWdlUHJlZml4Lmxlbmd0aCkpfTtnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcj9nbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsb25HbG9iYWxNZXNzYWdlLCExKTpnbG9iYWwuYXR0YWNoRXZlbnQoIm9ubWVzc2FnZSIsb25HbG9iYWxNZXNzYWdlKSxyZWdpc3RlckltbWVkaWF0ZT1mdW5jdGlvbihoYW5kbGUpe2dsb2JhbC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4K2hhbmRsZSwiKiIpfX0oKSxhdHRhY2hUby5zZXRJbW1lZGlhdGU9ZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGNhbGxiYWNrKXsiZnVuY3Rpb24iIT10eXBlb2YgY2FsbGJhY2smJihjYWxsYmFjaz1uZXcgRnVuY3Rpb24oIiIrY2FsbGJhY2spKTtmb3IodmFyIGFyZ3M9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSksaT0wO2k8YXJncy5sZW5ndGg7aSsrKWFyZ3NbaV09YXJndW1lbnRzW2krMV07dmFyIHRhc2s9e2NhbGxiYWNrLGFyZ3N9O3JldHVybiB0YXNrc0J5SGFuZGxlW25leHRIYW5kbGVdPXRhc2sscmVnaXN0ZXJJbW1lZGlhdGUobmV4dEhhbmRsZSksbmV4dEhhbmRsZSsrfSxhdHRhY2hUby5jbGVhckltbWVkaWF0ZT1jbGVhckltbWVkaWF0ZX1mdW5jdGlvbiBjbGVhckltbWVkaWF0ZShoYW5kbGUpe2RlbGV0ZSB0YXNrc0J5SGFuZGxlW2hhbmRsZV19ZnVuY3Rpb24gcnVuSWZQcmVzZW50KGhhbmRsZSl7aWYoY3VycmVudGx5UnVubmluZ0FUYXNrKXNldFRpbWVvdXQocnVuSWZQcmVzZW50LDAsaGFuZGxlKTtlbHNle3ZhciB0YXNrPXRhc2tzQnlIYW5kbGVbaGFuZGxlXTtpZih0YXNrKXtjdXJyZW50bHlSdW5uaW5nQVRhc2s9ITA7dHJ5eyFmdW5jdGlvbiBydW4odGFzayl7dmFyIGNhbGxiYWNrPXRhc2suY2FsbGJhY2ssYXJncz10YXNrLmFyZ3M7c3dpdGNoKGFyZ3MubGVuZ3RoKXtjYXNlIDA6Y2FsbGJhY2soKTticmVhaztjYXNlIDE6Y2FsbGJhY2soYXJnc1swXSk7YnJlYWs7Y2FzZSAyOmNhbGxiYWNrKGFyZ3NbMF0sYXJnc1sxXSk7YnJlYWs7Y2FzZSAzOmNhbGxiYWNrKGFyZ3NbMF0sYXJnc1sxXSxhcmdzWzJdKTticmVhaztkZWZhdWx0OmNhbGxiYWNrLmFwcGx5KHZvaWQgMCxhcmdzKX19KHRhc2spfWZpbmFsbHl7Y2xlYXJJbW1lZGlhdGUoaGFuZGxlKSxjdXJyZW50bHlSdW5uaW5nQVRhc2s9ITF9fX19fSgidW5kZWZpbmVkIj09dHlwZW9mIHNlbGY/dm9pZCAwPT09X193ZWJwYWNrX3JlcXVpcmVfXy5nP3RoaXM6X193ZWJwYWNrX3JlcXVpcmVfXy5nOnNlbGYpfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3NoYS5qcy9oYXNoLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcix0b0J1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvdG8tYnVmZmVyL2luZGV4LmpzIik7ZnVuY3Rpb24gSGFzaChibG9ja1NpemUsZmluYWxTaXplKXt0aGlzLl9ibG9jaz1CdWZmZXIuYWxsb2MoYmxvY2tTaXplKSx0aGlzLl9maW5hbFNpemU9ZmluYWxTaXplLHRoaXMuX2Jsb2NrU2l6ZT1ibG9ja1NpemUsdGhpcy5fbGVuPTB9SGFzaC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGRhdGEsZW5jKXtkYXRhPXRvQnVmZmVyKGRhdGEsZW5jfHwidXRmOCIpO2Zvcih2YXIgYmxvY2s9dGhpcy5fYmxvY2ssYmxvY2tTaXplPXRoaXMuX2Jsb2NrU2l6ZSxsZW5ndGg9ZGF0YS5sZW5ndGgsYWNjdW09dGhpcy5fbGVuLG9mZnNldD0wO29mZnNldDxsZW5ndGg7KXtmb3IodmFyIGFzc2lnbmVkPWFjY3VtJWJsb2NrU2l6ZSxyZW1haW5kZXI9TWF0aC5taW4obGVuZ3RoLW9mZnNldCxibG9ja1NpemUtYXNzaWduZWQpLGk9MDtpPHJlbWFpbmRlcjtpKyspYmxvY2tbYXNzaWduZWQraV09ZGF0YVtvZmZzZXQraV07b2Zmc2V0Kz1yZW1haW5kZXIsKGFjY3VtKz1yZW1haW5kZXIpJWJsb2NrU2l6ZT09PTAmJnRoaXMuX3VwZGF0ZShibG9jayl9cmV0dXJuIHRoaXMuX2xlbis9bGVuZ3RoLHRoaXN9LEhhc2gucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihlbmMpe3ZhciByZW09dGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZTt0aGlzLl9ibG9ja1tyZW1dPTEyOCx0aGlzLl9ibG9jay5maWxsKDAscmVtKzEpLHJlbT49dGhpcy5fZmluYWxTaXplJiYodGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSx0aGlzLl9ibG9jay5maWxsKDApKTt2YXIgYml0cz04KnRoaXMuX2xlbjtpZihiaXRzPD00Mjk0OTY3Mjk1KXRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoYml0cyx0aGlzLl9ibG9ja1NpemUtNCk7ZWxzZXt2YXIgbG93Qml0cz0oNDI5NDk2NzI5NSZiaXRzKT4+PjAsaGlnaEJpdHM9KGJpdHMtbG93Qml0cykvNDI5NDk2NzI5Njt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKGhpZ2hCaXRzLHRoaXMuX2Jsb2NrU2l6ZS04KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKGxvd0JpdHMsdGhpcy5fYmxvY2tTaXplLTQpfXRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayk7dmFyIGhhc2g9dGhpcy5faGFzaCgpO3JldHVybiBlbmM/aGFzaC50b1N0cmluZyhlbmMpOmhhc2h9LEhhc2gucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcyIpfSxtb2R1bGUuZXhwb3J0cz1IYXNofSwiLi4vLi4vbm9kZV9tb2R1bGVzL3NoYS5qcy9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gU0hBKGFsZ29yaXRobSl7dmFyIGFsZz1hbGdvcml0aG0udG9Mb3dlckNhc2UoKSxBbGdvcml0aG09bW9kdWxlLmV4cG9ydHNbYWxnXTtpZighQWxnb3JpdGhtKXRocm93IG5ldyBFcnJvcihhbGcrIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cykiKTtyZXR1cm4gbmV3IEFsZ29yaXRobX0sbW9kdWxlLmV4cG9ydHMuc2hhPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zaGEuanMvc2hhLmpzIiksbW9kdWxlLmV4cG9ydHMuc2hhMT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2hhLmpzL3NoYTEuanMiKSxtb2R1bGUuZXhwb3J0cy5zaGEyMjQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NoYS5qcy9zaGEyMjQuanMiKSxtb2R1bGUuZXhwb3J0cy5zaGEyNTY9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NoYS5qcy9zaGEyNTYuanMiKSxtb2R1bGUuZXhwb3J0cy5zaGEzODQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NoYS5qcy9zaGEzODQuanMiKSxtb2R1bGUuZXhwb3J0cy5zaGE1MTI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NoYS5qcy9zaGE1MTIuanMiKX0sIi4uLy4uL25vZGVfbW9kdWxlcy9zaGEuanMvc2hhLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgaW5oZXJpdHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKSxIYXNoPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zaGEuanMvaGFzaC5qcyIpLEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXIsSz1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLFc9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBTaGEoKXt0aGlzLmluaXQoKSx0aGlzLl93PVcsSGFzaC5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIHJvdGw1KG51bSl7cmV0dXJuIG51bTw8NXxudW0+Pj4yN31mdW5jdGlvbiByb3RsMzAobnVtKXtyZXR1cm4gbnVtPDwzMHxudW0+Pj4yfWZ1bmN0aW9uIGZ0KHMsYixjLGQpe3JldHVybiAwPT09cz9iJmN8fmImZDoyPT09cz9iJmN8YiZkfGMmZDpiXmNeZH1pbmhlcml0cyhTaGEsSGFzaCksU2hhLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxTaGEucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTSl7Zm9yKHZhciB3PXRoaXMuX3csYT0wfHRoaXMuX2EsYj0wfHRoaXMuX2IsYz0wfHRoaXMuX2MsZD0wfHRoaXMuX2QsZT0wfHRoaXMuX2UsaT0wO2k8MTY7KytpKXdbaV09TS5yZWFkSW50MzJCRSg0KmkpO2Zvcig7aTw4MDsrK2kpd1tpXT13W2ktM11ed1tpLThdXndbaS0xNF1ed1tpLTE2XTtmb3IodmFyIGo9MDtqPDgwOysrail7dmFyIHM9fn4oai8yMCksdD1yb3RsNShhKStmdChzLGIsYyxkKStlK3dbal0rS1tzXXwwO2U9ZCxkPWMsYz1yb3RsMzAoYiksYj1hLGE9dH10aGlzLl9hPWErdGhpcy5fYXwwLHRoaXMuX2I9Yit0aGlzLl9ifDAsdGhpcy5fYz1jK3RoaXMuX2N8MCx0aGlzLl9kPWQrdGhpcy5fZHwwLHRoaXMuX2U9ZSt0aGlzLl9lfDB9LFNoYS5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgSD1CdWZmZXIuYWxsb2NVbnNhZmUoMjApO3JldHVybiBILndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksSC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLEgud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxILndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLEgud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksSH0sbW9kdWxlLmV4cG9ydHM9U2hhfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3NoYS5qcy9zaGExLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgaW5oZXJpdHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKSxIYXNoPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zaGEuanMvaGFzaC5qcyIpLEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXIsSz1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLFc9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBTaGExKCl7dGhpcy5pbml0KCksdGhpcy5fdz1XLEhhc2guY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiByb3RsMShudW0pe3JldHVybiBudW08PDF8bnVtPj4+MzF9ZnVuY3Rpb24gcm90bDUobnVtKXtyZXR1cm4gbnVtPDw1fG51bT4+PjI3fWZ1bmN0aW9uIHJvdGwzMChudW0pe3JldHVybiBudW08PDMwfG51bT4+PjJ9ZnVuY3Rpb24gZnQocyxiLGMsZCl7cmV0dXJuIDA9PT1zP2ImY3x+YiZkOjI9PT1zP2ImY3xiJmR8YyZkOmJeY15kfWluaGVyaXRzKFNoYTEsSGFzaCksU2hhMS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sU2hhMS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihNKXtmb3IodmFyIHc9dGhpcy5fdyxhPTB8dGhpcy5fYSxiPTB8dGhpcy5fYixjPTB8dGhpcy5fYyxkPTB8dGhpcy5fZCxlPTB8dGhpcy5fZSxpPTA7aTwxNjsrK2kpd1tpXT1NLnJlYWRJbnQzMkJFKDQqaSk7Zm9yKDtpPDgwOysraSl3W2ldPXJvdGwxKHdbaS0zXV53W2ktOF1ed1tpLTE0XV53W2ktMTZdKTtmb3IodmFyIGo9MDtqPDgwOysrail7dmFyIHM9fn4oai8yMCksdD1yb3RsNShhKStmdChzLGIsYyxkKStlK3dbal0rS1tzXXwwO2U9ZCxkPWMsYz1yb3RsMzAoYiksYj1hLGE9dH10aGlzLl9hPWErdGhpcy5fYXwwLHRoaXMuX2I9Yit0aGlzLl9ifDAsdGhpcy5fYz1jK3RoaXMuX2N8MCx0aGlzLl9kPWQrdGhpcy5fZHwwLHRoaXMuX2U9ZSt0aGlzLl9lfDB9LFNoYTEucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEg9QnVmZmVyLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gSC53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLEgud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxILndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksSC53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxILndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLEh9LG1vZHVsZS5leHBvcnRzPVNoYTF9LCIuLi8uLi9ub2RlX21vZHVsZXMvc2hhLmpzL3NoYTIyNC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiksU2hhMjU2PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zaGEuanMvc2hhMjU2LmpzIiksSGFzaD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2hhLmpzL2hhc2guanMiKSxCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLFc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBTaGEyMjQoKXt0aGlzLmluaXQoKSx0aGlzLl93PVcsSGFzaC5jYWxsKHRoaXMsNjQsNTYpfWluaGVyaXRzKFNoYTIyNCxTaGEyNTYpLFNoYTIyNC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEwMzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxTaGEyMjQucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEg9QnVmZmVyLmFsbG9jVW5zYWZlKDI4KTtyZXR1cm4gSC53cml0ZUludDMyQkUodGhpcy5fYSwwKSxILndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLEgud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksSC53cml0ZUludDMyQkUodGhpcy5fZCwxMiksSC53cml0ZUludDMyQkUodGhpcy5fZSwxNiksSC53cml0ZUludDMyQkUodGhpcy5fZiwyMCksSC53cml0ZUludDMyQkUodGhpcy5fZywyNCksSH0sbW9kdWxlLmV4cG9ydHM9U2hhMjI0fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3NoYS5qcy9zaGEyNTYuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBpbmhlcml0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpLEhhc2g9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NoYS5qcy9oYXNoLmpzIiksQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcixLPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLFc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBTaGEyNTYoKXt0aGlzLmluaXQoKSx0aGlzLl93PVcsSGFzaC5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIGNoKHgseSx6KXtyZXR1cm4gel54Jih5XnopfWZ1bmN0aW9uIG1haih4LHkseil7cmV0dXJuIHgmeXx6Jih4fHkpfWZ1bmN0aW9uIHNpZ21hMCh4KXtyZXR1cm4oeD4+PjJ8eDw8MzApXih4Pj4+MTN8eDw8MTkpXih4Pj4+MjJ8eDw8MTApfWZ1bmN0aW9uIHNpZ21hMSh4KXtyZXR1cm4oeD4+PjZ8eDw8MjYpXih4Pj4+MTF8eDw8MjEpXih4Pj4+MjV8eDw8Nyl9ZnVuY3Rpb24gZ2FtbWEwKHgpe3JldHVybih4Pj4+N3x4PDwyNSleKHg+Pj4xOHx4PDwxNCleeD4+PjN9ZnVuY3Rpb24gZ2FtbWExKHgpe3JldHVybih4Pj4+MTd8eDw8MTUpXih4Pj4+MTl8eDw8MTMpXng+Pj4xMH1pbmhlcml0cyhTaGEyNTYsSGFzaCksU2hhMjU2LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTc3OTAzMzcwMyx0aGlzLl9iPTMxNDQxMzQyNzcsdGhpcy5fYz0xMDEzOTA0MjQyLHRoaXMuX2Q9Mjc3MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0yNjAwODIyOTI0LHRoaXMuX2c9NTI4NzM0NjM1LHRoaXMuX2g9MTU0MTQ1OTIyNSx0aGlzfSxTaGEyNTYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTSl7Zm9yKHZhciB3PXRoaXMuX3csYT0wfHRoaXMuX2EsYj0wfHRoaXMuX2IsYz0wfHRoaXMuX2MsZD0wfHRoaXMuX2QsZT0wfHRoaXMuX2UsZj0wfHRoaXMuX2YsZz0wfHRoaXMuX2csaD0wfHRoaXMuX2gsaT0wO2k8MTY7KytpKXdbaV09TS5yZWFkSW50MzJCRSg0KmkpO2Zvcig7aTw2NDsrK2kpd1tpXT1nYW1tYTEod1tpLTJdKSt3W2ktN10rZ2FtbWEwKHdbaS0xNV0pK3dbaS0xNl18MDtmb3IodmFyIGo9MDtqPDY0Oysrail7dmFyIFQxPWgrc2lnbWExKGUpK2NoKGUsZixnKStLW2pdK3dbal18MCxUMj1zaWdtYTAoYSkrbWFqKGEsYixjKXwwO2g9ZyxnPWYsZj1lLGU9ZCtUMXwwLGQ9YyxjPWIsYj1hLGE9VDErVDJ8MH10aGlzLl9hPWErdGhpcy5fYXwwLHRoaXMuX2I9Yit0aGlzLl9ifDAsdGhpcy5fYz1jK3RoaXMuX2N8MCx0aGlzLl9kPWQrdGhpcy5fZHwwLHRoaXMuX2U9ZSt0aGlzLl9lfDAsdGhpcy5fZj1mK3RoaXMuX2Z8MCx0aGlzLl9nPWcrdGhpcy5fZ3wwLHRoaXMuX2g9aCt0aGlzLl9ofDB9LFNoYTI1Ni5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgSD1CdWZmZXIuYWxsb2NVbnNhZmUoMzIpO3JldHVybiBILndyaXRlSW50MzJCRSh0aGlzLl9hLDApLEgud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksSC53cml0ZUludDMyQkUodGhpcy5fYyw4KSxILndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxILndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxILndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxILndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxILndyaXRlSW50MzJCRSh0aGlzLl9oLDI4KSxIfSxtb2R1bGUuZXhwb3J0cz1TaGEyNTZ9LCIuLi8uLi9ub2RlX21vZHVsZXMvc2hhLmpzL3NoYTM4NC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiksU0hBNTEyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zaGEuanMvc2hhNTEyLmpzIiksSGFzaD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2hhLmpzL2hhc2guanMiKSxCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLFc9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gU2hhMzg0KCl7dGhpcy5pbml0KCksdGhpcy5fdz1XLEhhc2guY2FsbCh0aGlzLDEyOCwxMTIpfWluaGVyaXRzKFNoYTM4NCxTSEE1MTIpLFNoYTM4NC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0zNDE4MDcwMzY1LHRoaXMuX2JoPTE2NTQyNzAyNTAsdGhpcy5fY2g9MjQzODUyOTM3MCx0aGlzLl9kaD0zNTU0NjIzNjAsdGhpcy5fZWg9MTczMTQwNTQxNSx0aGlzLl9maD0yMzk0MTgwMjMxLHRoaXMuX2doPTM2NzUwMDg1MjUsdGhpcy5faGg9MTIwMzA2MjgxMyx0aGlzLl9hbD0zMjM4MzcxMDMyLHRoaXMuX2JsPTkxNDE1MDY2Myx0aGlzLl9jbD04MTI3MDI5OTksdGhpcy5fZGw9NDE0NDkxMjY5Nyx0aGlzLl9lbD00MjkwNzc1ODU3LHRoaXMuX2ZsPTE3NTA2MDMwMjUsdGhpcy5fZ2w9MTY5NDA3NjgzOSx0aGlzLl9obD0zMjA0MDc1NDI4LHRoaXN9LFNoYTM4NC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgSD1CdWZmZXIuYWxsb2NVbnNhZmUoNDgpO2Z1bmN0aW9uIHdyaXRlSW50NjRCRShoLGwsb2Zmc2V0KXtILndyaXRlSW50MzJCRShoLG9mZnNldCksSC53cml0ZUludDMyQkUobCxvZmZzZXQrNCl9cmV0dXJuIHdyaXRlSW50NjRCRSh0aGlzLl9haCx0aGlzLl9hbCwwKSx3cml0ZUludDY0QkUodGhpcy5fYmgsdGhpcy5fYmwsOCksd3JpdGVJbnQ2NEJFKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSx3cml0ZUludDY0QkUodGhpcy5fZGgsdGhpcy5fZGwsMjQpLHdyaXRlSW50NjRCRSh0aGlzLl9laCx0aGlzLl9lbCwzMiksd3JpdGVJbnQ2NEJFKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxIfSxtb2R1bGUuZXhwb3J0cz1TaGEzODR9LCIuLi8uLi9ub2RlX21vZHVsZXMvc2hhLmpzL3NoYTUxMi5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiksSGFzaD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2hhLmpzL2hhc2guanMiKSxCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIikuQnVmZmVyLEs9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXSxXPW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIFNoYTUxMigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9VyxIYXNoLmNhbGwodGhpcywxMjgsMTEyKX1mdW5jdGlvbiBDaCh4LHkseil7cmV0dXJuIHpeeCYoeV56KX1mdW5jdGlvbiBtYWooeCx5LHope3JldHVybiB4Jnl8eiYoeHx5KX1mdW5jdGlvbiBzaWdtYTAoeCx4bCl7cmV0dXJuKHg+Pj4yOHx4bDw8NCleKHhsPj4+Mnx4PDwzMCleKHhsPj4+N3x4PDwyNSl9ZnVuY3Rpb24gc2lnbWExKHgseGwpe3JldHVybih4Pj4+MTR8eGw8PDE4KV4oeD4+PjE4fHhsPDwxNCleKHhsPj4+OXx4PDwyMyl9ZnVuY3Rpb24gR2FtbWEwKHgseGwpe3JldHVybih4Pj4+MXx4bDw8MzEpXih4Pj4+OHx4bDw8MjQpXng+Pj43fWZ1bmN0aW9uIEdhbW1hMGwoeCx4bCl7cmV0dXJuKHg+Pj4xfHhsPDwzMSleKHg+Pj44fHhsPDwyNCleKHg+Pj43fHhsPDwyNSl9ZnVuY3Rpb24gR2FtbWExKHgseGwpe3JldHVybih4Pj4+MTl8eGw8PDEzKV4oeGw+Pj4yOXx4PDwzKV54Pj4+Nn1mdW5jdGlvbiBHYW1tYTFsKHgseGwpe3JldHVybih4Pj4+MTl8eGw8PDEzKV4oeGw+Pj4yOXx4PDwzKV4oeD4+PjZ8eGw8PDI2KX1mdW5jdGlvbiBnZXRDYXJyeShhLGIpe3JldHVybiBhPj4+MDxiPj4+MD8xOjB9aW5oZXJpdHMoU2hhNTEyLEhhc2gpLFNoYTUxMi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0xNzc5MDMzNzAzLHRoaXMuX2JoPTMxNDQxMzQyNzcsdGhpcy5fY2g9MTAxMzkwNDI0Mix0aGlzLl9kaD0yNzczNDgwNzYyLHRoaXMuX2VoPTEzNTk4OTMxMTksdGhpcy5fZmg9MjYwMDgyMjkyNCx0aGlzLl9naD01Mjg3MzQ2MzUsdGhpcy5faGg9MTU0MTQ1OTIyNSx0aGlzLl9hbD00MDg5MjM1NzIwLHRoaXMuX2JsPTIyMjc4NzM1OTUsdGhpcy5fY2w9NDI3MTE3NTcyMyx0aGlzLl9kbD0xNTk1NzUwMTI5LHRoaXMuX2VsPTI5MTc1NjUxMzcsdGhpcy5fZmw9NzI1NTExMTk5LHRoaXMuX2dsPTQyMTUzODk1NDcsdGhpcy5faGw9MzI3MDMzMjA5LHRoaXN9LFNoYTUxMi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihNKXtmb3IodmFyIHc9dGhpcy5fdyxhaD0wfHRoaXMuX2FoLGJoPTB8dGhpcy5fYmgsY2g9MHx0aGlzLl9jaCxkaD0wfHRoaXMuX2RoLGVoPTB8dGhpcy5fZWgsZmg9MHx0aGlzLl9maCxnaD0wfHRoaXMuX2doLGhoPTB8dGhpcy5faGgsYWw9MHx0aGlzLl9hbCxibD0wfHRoaXMuX2JsLGNsPTB8dGhpcy5fY2wsZGw9MHx0aGlzLl9kbCxlbD0wfHRoaXMuX2VsLGZsPTB8dGhpcy5fZmwsZ2w9MHx0aGlzLl9nbCxobD0wfHRoaXMuX2hsLGk9MDtpPDMyO2krPTIpd1tpXT1NLnJlYWRJbnQzMkJFKDQqaSksd1tpKzFdPU0ucmVhZEludDMyQkUoNCppKzQpO2Zvcig7aTwxNjA7aSs9Mil7dmFyIHhoPXdbaS0zMF0seGw9d1tpLTMwKzFdLGdhbW1hMD1HYW1tYTAoeGgseGwpLGdhbW1hMGw9R2FtbWEwbCh4bCx4aCksZ2FtbWExPUdhbW1hMSh4aD13W2ktNF0seGw9d1tpLTQrMV0pLGdhbW1hMWw9R2FtbWExbCh4bCx4aCksV2k3aD13W2ktMTRdLFdpN2w9d1tpLTE0KzFdLFdpMTZoPXdbaS0zMl0sV2kxNmw9d1tpLTMyKzFdLFdpbD1nYW1tYTBsK1dpN2x8MCxXaWg9Z2FtbWEwK1dpN2grZ2V0Q2FycnkoV2lsLGdhbW1hMGwpfDA7V2loPShXaWg9V2loK2dhbW1hMStnZXRDYXJyeShXaWw9V2lsK2dhbW1hMWx8MCxnYW1tYTFsKXwwKStXaTE2aCtnZXRDYXJyeShXaWw9V2lsK1dpMTZsfDAsV2kxNmwpfDAsd1tpXT1XaWgsd1tpKzFdPVdpbH1mb3IodmFyIGo9MDtqPDE2MDtqKz0yKXtXaWg9d1tqXSxXaWw9d1tqKzFdO3ZhciBtYWpoPW1haihhaCxiaCxjaCksbWFqbD1tYWooYWwsYmwsY2wpLHNpZ21hMGg9c2lnbWEwKGFoLGFsKSxzaWdtYTBsPXNpZ21hMChhbCxhaCksc2lnbWExaD1zaWdtYTEoZWgsZWwpLHNpZ21hMWw9c2lnbWExKGVsLGVoKSxLaWg9S1tqXSxLaWw9S1tqKzFdLGNoaD1DaChlaCxmaCxnaCksY2hsPUNoKGVsLGZsLGdsKSx0MWw9aGwrc2lnbWExbHwwLHQxaD1oaCtzaWdtYTFoK2dldENhcnJ5KHQxbCxobCl8MDt0MWg9KHQxaD0odDFoPXQxaCtjaGgrZ2V0Q2FycnkodDFsPXQxbCtjaGx8MCxjaGwpfDApK0tpaCtnZXRDYXJyeSh0MWw9dDFsK0tpbHwwLEtpbCl8MCkrV2loK2dldENhcnJ5KHQxbD10MWwrV2lsfDAsV2lsKXwwO3ZhciB0Mmw9c2lnbWEwbCttYWpsfDAsdDJoPXNpZ21hMGgrbWFqaCtnZXRDYXJyeSh0Mmwsc2lnbWEwbCl8MDtoaD1naCxobD1nbCxnaD1maCxnbD1mbCxmaD1laCxmbD1lbCxlaD1kaCt0MWgrZ2V0Q2FycnkoZWw9ZGwrdDFsfDAsZGwpfDAsZGg9Y2gsZGw9Y2wsY2g9YmgsY2w9YmwsYmg9YWgsYmw9YWwsYWg9dDFoK3QyaCtnZXRDYXJyeShhbD10MWwrdDJsfDAsdDFsKXwwfXRoaXMuX2FsPXRoaXMuX2FsK2FsfDAsdGhpcy5fYmw9dGhpcy5fYmwrYmx8MCx0aGlzLl9jbD10aGlzLl9jbCtjbHwwLHRoaXMuX2RsPXRoaXMuX2RsK2RsfDAsdGhpcy5fZWw9dGhpcy5fZWwrZWx8MCx0aGlzLl9mbD10aGlzLl9mbCtmbHwwLHRoaXMuX2dsPXRoaXMuX2dsK2dsfDAsdGhpcy5faGw9dGhpcy5faGwraGx8MCx0aGlzLl9haD10aGlzLl9haCthaCtnZXRDYXJyeSh0aGlzLl9hbCxhbCl8MCx0aGlzLl9iaD10aGlzLl9iaCtiaCtnZXRDYXJyeSh0aGlzLl9ibCxibCl8MCx0aGlzLl9jaD10aGlzLl9jaCtjaCtnZXRDYXJyeSh0aGlzLl9jbCxjbCl8MCx0aGlzLl9kaD10aGlzLl9kaCtkaCtnZXRDYXJyeSh0aGlzLl9kbCxkbCl8MCx0aGlzLl9laD10aGlzLl9laCtlaCtnZXRDYXJyeSh0aGlzLl9lbCxlbCl8MCx0aGlzLl9maD10aGlzLl9maCtmaCtnZXRDYXJyeSh0aGlzLl9mbCxmbCl8MCx0aGlzLl9naD10aGlzLl9naCtnaCtnZXRDYXJyeSh0aGlzLl9nbCxnbCl8MCx0aGlzLl9oaD10aGlzLl9oaCtoaCtnZXRDYXJyeSh0aGlzLl9obCxobCl8MH0sU2hhNTEyLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBIPUJ1ZmZlci5hbGxvY1Vuc2FmZSg2NCk7ZnVuY3Rpb24gd3JpdGVJbnQ2NEJFKGgsbCxvZmZzZXQpe0gud3JpdGVJbnQzMkJFKGgsb2Zmc2V0KSxILndyaXRlSW50MzJCRShsLG9mZnNldCs0KX1yZXR1cm4gd3JpdGVJbnQ2NEJFKHRoaXMuX2FoLHRoaXMuX2FsLDApLHdyaXRlSW50NjRCRSh0aGlzLl9iaCx0aGlzLl9ibCw4KSx3cml0ZUludDY0QkUodGhpcy5fY2gsdGhpcy5fY2wsMTYpLHdyaXRlSW50NjRCRSh0aGlzLl9kaCx0aGlzLl9kbCwyNCksd3JpdGVJbnQ2NEJFKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSx3cml0ZUludDY0QkUodGhpcy5fZmgsdGhpcy5fZmwsNDApLHdyaXRlSW50NjRCRSh0aGlzLl9naCx0aGlzLl9nbCw0OCksd3JpdGVJbnQ2NEJFKHRoaXMuX2hoLHRoaXMuX2hsLDU2KSxIfSxtb2R1bGUuZXhwb3J0cz1TaGE1MTJ9LCIuLi8uLi9ub2RlX21vZHVsZXMvc2lkZS1jaGFubmVsLWxpc3QvaW5kZXguanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBpbnNwZWN0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcyIpLCRUeXBlRXJyb3I9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy90eXBlLmpzIiksbGlzdEdldE5vZGU9ZnVuY3Rpb24obGlzdCxrZXksaXNEZWxldGUpe2Zvcih2YXIgY3VycixwcmV2PWxpc3Q7bnVsbCE9KGN1cnI9cHJldi5uZXh0KTtwcmV2PWN1cnIpaWYoY3Vyci5rZXk9PT1rZXkpcmV0dXJuIHByZXYubmV4dD1jdXJyLm5leHQsaXNEZWxldGV8fChjdXJyLm5leHQ9bGlzdC5uZXh0LGxpc3QubmV4dD1jdXJyKSxjdXJyfTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBnZXRTaWRlQ2hhbm5lbExpc3QoKXt2YXIgJG8sY2hhbm5lbD17YXNzZXJ0OmZ1bmN0aW9uKGtleSl7aWYoIWNoYW5uZWwuaGFzKGtleSkpdGhyb3cgbmV3ICRUeXBlRXJyb3IoIlNpZGUgY2hhbm5lbCBkb2VzIG5vdCBjb250YWluICIraW5zcGVjdChrZXkpKX0sZGVsZXRlOmZ1bmN0aW9uKGtleSl7dmFyIGRlbGV0ZWROb2RlPWZ1bmN0aW9uKG9iamVjdHMsa2V5KXtpZihvYmplY3RzKXJldHVybiBsaXN0R2V0Tm9kZShvYmplY3RzLGtleSwhMCl9KCRvLGtleSk7cmV0dXJuIGRlbGV0ZWROb2RlJiYkbyYmISRvLm5leHQmJigkbz12b2lkIDApLCEhZGVsZXRlZE5vZGV9LGdldDpmdW5jdGlvbihrZXkpe3JldHVybiBmdW5jdGlvbihvYmplY3RzLGtleSl7aWYob2JqZWN0cyl7dmFyIG5vZGU9bGlzdEdldE5vZGUob2JqZWN0cyxrZXkpO3JldHVybiBub2RlJiZub2RlLnZhbHVlfX0oJG8sa2V5KX0saGFzOmZ1bmN0aW9uKGtleSl7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdHMsa2V5KXtyZXR1cm4hIW9iamVjdHMmJiEhbGlzdEdldE5vZGUob2JqZWN0cyxrZXkpfSgkbyxrZXkpfSxzZXQ6ZnVuY3Rpb24oa2V5LHZhbHVlKXskb3x8KCRvPXtuZXh0OnZvaWQgMH0pLGZ1bmN0aW9uKG9iamVjdHMsa2V5LHZhbHVlKXt2YXIgbm9kZT1saXN0R2V0Tm9kZShvYmplY3RzLGtleSk7bm9kZT9ub2RlLnZhbHVlPXZhbHVlOm9iamVjdHMubmV4dD17a2V5LG5leHQ6b2JqZWN0cy5uZXh0LHZhbHVlfX0oJG8sa2V5LHZhbHVlKX19O3JldHVybiBjaGFubmVsfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9zaWRlLWNoYW5uZWwtbWFwL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgR2V0SW50cmluc2ljPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9nZXQtaW50cmluc2ljL2luZGV4LmpzIiksY2FsbEJvdW5kPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJvdW5kL2luZGV4LmpzIiksaW5zcGVjdD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvb2JqZWN0LWluc3BlY3QvaW5kZXguanMiKSwkVHlwZUVycm9yPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvdHlwZS5qcyIpLCRNYXA9R2V0SW50cmluc2ljKCIlTWFwJSIsITApLCRtYXBHZXQ9Y2FsbEJvdW5kKCJNYXAucHJvdG90eXBlLmdldCIsITApLCRtYXBTZXQ9Y2FsbEJvdW5kKCJNYXAucHJvdG90eXBlLnNldCIsITApLCRtYXBIYXM9Y2FsbEJvdW5kKCJNYXAucHJvdG90eXBlLmhhcyIsITApLCRtYXBEZWxldGU9Y2FsbEJvdW5kKCJNYXAucHJvdG90eXBlLmRlbGV0ZSIsITApLCRtYXBTaXplPWNhbGxCb3VuZCgiTWFwLnByb3RvdHlwZS5zaXplIiwhMCk7bW9kdWxlLmV4cG9ydHM9ISEkTWFwJiZmdW5jdGlvbiBnZXRTaWRlQ2hhbm5lbE1hcCgpe3ZhciAkbSxjaGFubmVsPXthc3NlcnQ6ZnVuY3Rpb24oa2V5KXtpZighY2hhbm5lbC5oYXMoa2V5KSl0aHJvdyBuZXcgJFR5cGVFcnJvcigiU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gIitpbnNwZWN0KGtleSkpfSxkZWxldGU6ZnVuY3Rpb24oa2V5KXtpZigkbSl7dmFyIHJlc3VsdD0kbWFwRGVsZXRlKCRtLGtleSk7cmV0dXJuIDA9PT0kbWFwU2l6ZSgkbSkmJigkbT12b2lkIDApLHJlc3VsdH1yZXR1cm4hMX0sZ2V0OmZ1bmN0aW9uKGtleSl7aWYoJG0pcmV0dXJuICRtYXBHZXQoJG0sa2V5KX0saGFzOmZ1bmN0aW9uKGtleSl7cmV0dXJuISEkbSYmJG1hcEhhcygkbSxrZXkpfSxzZXQ6ZnVuY3Rpb24oa2V5LHZhbHVlKXskbXx8KCRtPW5ldyAkTWFwKSwkbWFwU2V0KCRtLGtleSx2YWx1ZSl9fTtyZXR1cm4gY2hhbm5lbH19LCIuLi8uLi9ub2RlX21vZHVsZXMvc2lkZS1jaGFubmVsLXdlYWttYXAvaW5kZXguanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBHZXRJbnRyaW5zaWM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2dldC1pbnRyaW5zaWMvaW5kZXguanMiKSxjYWxsQm91bmQ9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2NhbGwtYm91bmQvaW5kZXguanMiKSxpbnNwZWN0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcyIpLGdldFNpZGVDaGFubmVsTWFwPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zaWRlLWNoYW5uZWwtbWFwL2luZGV4LmpzIiksJFR5cGVFcnJvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3R5cGUuanMiKSwkV2Vha01hcD1HZXRJbnRyaW5zaWMoIiVXZWFrTWFwJSIsITApLCR3ZWFrTWFwR2V0PWNhbGxCb3VuZCgiV2Vha01hcC5wcm90b3R5cGUuZ2V0IiwhMCksJHdlYWtNYXBTZXQ9Y2FsbEJvdW5kKCJXZWFrTWFwLnByb3RvdHlwZS5zZXQiLCEwKSwkd2Vha01hcEhhcz1jYWxsQm91bmQoIldlYWtNYXAucHJvdG90eXBlLmhhcyIsITApLCR3ZWFrTWFwRGVsZXRlPWNhbGxCb3VuZCgiV2Vha01hcC5wcm90b3R5cGUuZGVsZXRlIiwhMCk7bW9kdWxlLmV4cG9ydHM9JFdlYWtNYXA/ZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWxXZWFrTWFwKCl7dmFyICR3bSwkbSxjaGFubmVsPXthc3NlcnQ6ZnVuY3Rpb24oa2V5KXtpZighY2hhbm5lbC5oYXMoa2V5KSl0aHJvdyBuZXcgJFR5cGVFcnJvcigiU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gIitpbnNwZWN0KGtleSkpfSxkZWxldGU6ZnVuY3Rpb24oa2V5KXtpZigkV2Vha01hcCYma2V5JiYoIm9iamVjdCI9PXR5cGVvZiBrZXl8fCJmdW5jdGlvbiI9PXR5cGVvZiBrZXkpKXtpZigkd20pcmV0dXJuICR3ZWFrTWFwRGVsZXRlKCR3bSxrZXkpfWVsc2UgaWYoZ2V0U2lkZUNoYW5uZWxNYXAmJiRtKXJldHVybiAkbS5kZWxldGUoa2V5KTtyZXR1cm4hMX0sZ2V0OmZ1bmN0aW9uKGtleSl7cmV0dXJuICRXZWFrTWFwJiZrZXkmJigib2JqZWN0Ij09dHlwZW9mIGtleXx8ImZ1bmN0aW9uIj09dHlwZW9mIGtleSkmJiR3bT8kd2Vha01hcEdldCgkd20sa2V5KTokbSYmJG0uZ2V0KGtleSl9LGhhczpmdW5jdGlvbihrZXkpe3JldHVybiAkV2Vha01hcCYma2V5JiYoIm9iamVjdCI9PXR5cGVvZiBrZXl8fCJmdW5jdGlvbiI9PXR5cGVvZiBrZXkpJiYkd20/JHdlYWtNYXBIYXMoJHdtLGtleSk6ISEkbSYmJG0uaGFzKGtleSl9LHNldDpmdW5jdGlvbihrZXksdmFsdWUpeyRXZWFrTWFwJiZrZXkmJigib2JqZWN0Ij09dHlwZW9mIGtleXx8ImZ1bmN0aW9uIj09dHlwZW9mIGtleSk/KCR3bXx8KCR3bT1uZXcgJFdlYWtNYXApLCR3ZWFrTWFwU2V0KCR3bSxrZXksdmFsdWUpKTpnZXRTaWRlQ2hhbm5lbE1hcCYmKCRtfHwoJG09Z2V0U2lkZUNoYW5uZWxNYXAoKSksJG0uc2V0KGtleSx2YWx1ZSkpfX07cmV0dXJuIGNoYW5uZWx9OmdldFNpZGVDaGFubmVsTWFwfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyICRUeXBlRXJyb3I9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy90eXBlLmpzIiksaW5zcGVjdD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvb2JqZWN0LWluc3BlY3QvaW5kZXguanMiKSxnZXRTaWRlQ2hhbm5lbExpc3Q9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC1saXN0L2luZGV4LmpzIiksZ2V0U2lkZUNoYW5uZWxNYXA9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC1tYXAvaW5kZXguanMiKSxtYWtlQ2hhbm5lbD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2lkZS1jaGFubmVsLXdlYWttYXAvaW5kZXguanMiKXx8Z2V0U2lkZUNoYW5uZWxNYXB8fGdldFNpZGVDaGFubmVsTGlzdDttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBnZXRTaWRlQ2hhbm5lbCgpe3ZhciAkY2hhbm5lbERhdGEsY2hhbm5lbD17YXNzZXJ0OmZ1bmN0aW9uKGtleSl7aWYoIWNoYW5uZWwuaGFzKGtleSkpdGhyb3cgbmV3ICRUeXBlRXJyb3IoIlNpZGUgY2hhbm5lbCBkb2VzIG5vdCBjb250YWluICIraW5zcGVjdChrZXkpKX0sZGVsZXRlOmZ1bmN0aW9uKGtleSl7cmV0dXJuISEkY2hhbm5lbERhdGEmJiRjaGFubmVsRGF0YS5kZWxldGUoa2V5KX0sZ2V0OmZ1bmN0aW9uKGtleSl7cmV0dXJuICRjaGFubmVsRGF0YSYmJGNoYW5uZWxEYXRhLmdldChrZXkpfSxoYXM6ZnVuY3Rpb24oa2V5KXtyZXR1cm4hISRjaGFubmVsRGF0YSYmJGNoYW5uZWxEYXRhLmhhcyhrZXkpfSxzZXQ6ZnVuY3Rpb24oa2V5LHZhbHVlKXskY2hhbm5lbERhdGF8fCgkY2hhbm5lbERhdGE9bWFrZUNoYW5uZWwoKSksJGNoYW5uZWxEYXRhLnNldChrZXksdmFsdWUpfX07cmV0dXJuIGNoYW5uZWx9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe21vZHVsZS5leHBvcnRzPVN0cmVhbTt2YXIgRUU9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiKS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gU3RyZWFtKCl7RUUuY2FsbCh0aGlzKX1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpKFN0cmVhbSxFRSksU3RyZWFtLlJlYWRhYmxlPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiksU3RyZWFtLldyaXRhYmxlPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiksU3RyZWFtLkR1cGxleD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKSxTdHJlYW0uVHJhbnNmb3JtPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIpLFN0cmVhbS5QYXNzVGhyb3VnaD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcyIpLFN0cmVhbS5maW5pc2hlZD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzIiksU3RyZWFtLnBpcGVsaW5lPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3BpcGVsaW5lLmpzIiksU3RyZWFtLlN0cmVhbT1TdHJlYW0sU3RyZWFtLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKGRlc3Qsb3B0aW9ucyl7dmFyIHNvdXJjZT10aGlzO2Z1bmN0aW9uIG9uZGF0YShjaHVuayl7ZGVzdC53cml0YWJsZSYmITE9PT1kZXN0LndyaXRlKGNodW5rKSYmc291cmNlLnBhdXNlJiZzb3VyY2UucGF1c2UoKX1mdW5jdGlvbiBvbmRyYWluKCl7c291cmNlLnJlYWRhYmxlJiZzb3VyY2UucmVzdW1lJiZzb3VyY2UucmVzdW1lKCl9c291cmNlLm9uKCJkYXRhIixvbmRhdGEpLGRlc3Qub24oImRyYWluIixvbmRyYWluKSxkZXN0Ll9pc1N0ZGlvfHxvcHRpb25zJiYhMT09PW9wdGlvbnMuZW5kfHwoc291cmNlLm9uKCJlbmQiLG9uZW5kKSxzb3VyY2Uub24oImNsb3NlIixvbmNsb3NlKSk7dmFyIGRpZE9uRW5kPSExO2Z1bmN0aW9uIG9uZW5kKCl7ZGlkT25FbmR8fChkaWRPbkVuZD0hMCxkZXN0LmVuZCgpKX1mdW5jdGlvbiBvbmNsb3NlKCl7ZGlkT25FbmR8fChkaWRPbkVuZD0hMCwiZnVuY3Rpb24iPT10eXBlb2YgZGVzdC5kZXN0cm95JiZkZXN0LmRlc3Ryb3koKSl9ZnVuY3Rpb24gb25lcnJvcihlcil7aWYoY2xlYW51cCgpLDA9PT1FRS5saXN0ZW5lckNvdW50KHRoaXMsImVycm9yIikpdGhyb3cgZXJ9ZnVuY3Rpb24gY2xlYW51cCgpe3NvdXJjZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsb25kYXRhKSxkZXN0LnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsb25kcmFpbiksc291cmNlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLG9uZW5kKSxzb3VyY2UucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixvbmNsb3NlKSxzb3VyY2UucmVtb3ZlTGlzdGVuZXIoImVycm9yIixvbmVycm9yKSxkZXN0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsb25lcnJvciksc291cmNlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLGNsZWFudXApLHNvdXJjZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGNsZWFudXApLGRlc3QucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixjbGVhbnVwKX1yZXR1cm4gc291cmNlLm9uKCJlcnJvciIsb25lcnJvciksZGVzdC5vbigiZXJyb3IiLG9uZXJyb3IpLHNvdXJjZS5vbigiZW5kIixjbGVhbnVwKSxzb3VyY2Uub24oImNsb3NlIixjbGVhbnVwKSxkZXN0Lm9uKCJjbG9zZSIsY2xlYW51cCksZGVzdC5lbWl0KCJwaXBlIixzb3VyY2UpLGRlc3R9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZXJyb3JzLWJyb3dzZXIuanMiKG1vZHVsZSl7InVzZSBzdHJpY3QiO3ZhciBjb2Rlcz17fTtmdW5jdGlvbiBjcmVhdGVFcnJvclR5cGUoY29kZSxtZXNzYWdlLEJhc2Upe0Jhc2V8fChCYXNlPUVycm9yKTt2YXIgTm9kZUVycm9yPWZ1bmN0aW9uKF9CYXNlKXtmdW5jdGlvbiBOb2RlRXJyb3IoYXJnMSxhcmcyLGFyZzMpe3JldHVybiBfQmFzZS5jYWxsKHRoaXMsZnVuY3Rpb24gZ2V0TWVzc2FnZShhcmcxLGFyZzIsYXJnMyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBtZXNzYWdlP21lc3NhZ2U6bWVzc2FnZShhcmcxLGFyZzIsYXJnMyl9KGFyZzEsYXJnMixhcmczKSl8fHRoaXN9cmV0dXJuIGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLHN1cGVyQ2xhc3Mpe3N1YkNsYXNzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKSxzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3I9c3ViQ2xhc3Msc3ViQ2xhc3MuX19wcm90b19fPXN1cGVyQ2xhc3N9KE5vZGVFcnJvcixfQmFzZSksTm9kZUVycm9yfShCYXNlKTtOb2RlRXJyb3IucHJvdG90eXBlLm5hbWU9QmFzZS5uYW1lLE5vZGVFcnJvci5wcm90b3R5cGUuY29kZT1jb2RlLGNvZGVzW2NvZGVdPU5vZGVFcnJvcn1mdW5jdGlvbiBvbmVPZihleHBlY3RlZCx0aGluZyl7aWYoQXJyYXkuaXNBcnJheShleHBlY3RlZCkpe3ZhciBsZW49ZXhwZWN0ZWQubGVuZ3RoO3JldHVybiBleHBlY3RlZD1leHBlY3RlZC5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIFN0cmluZyhpKX0pLGxlbj4yPyJvbmUgb2YgIi5jb25jYXQodGhpbmcsIiAiKS5jb25jYXQoZXhwZWN0ZWQuc2xpY2UoMCxsZW4tMSkuam9pbigiLCAiKSwiLCBvciAiKStleHBlY3RlZFtsZW4tMV06Mj09PWxlbj8ib25lIG9mICIuY29uY2F0KHRoaW5nLCIgIikuY29uY2F0KGV4cGVjdGVkWzBdLCIgb3IgIikuY29uY2F0KGV4cGVjdGVkWzFdKToib2YgIi5jb25jYXQodGhpbmcsIiAiKS5jb25jYXQoZXhwZWN0ZWRbMF0pfXJldHVybiJvZiAiLmNvbmNhdCh0aGluZywiICIpLmNvbmNhdChTdHJpbmcoZXhwZWN0ZWQpKX1jcmVhdGVFcnJvclR5cGUoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24obmFtZSx2YWx1ZSl7cmV0dXJuJ1RoZSB2YWx1ZSAiJyt2YWx1ZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gIicrbmFtZSsnIid9LFR5cGVFcnJvciksY3JlYXRlRXJyb3JUeXBlKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24obmFtZSxleHBlY3RlZCxhY3R1YWwpe3ZhciBkZXRlcm1pbmVyLG1zZztpZigic3RyaW5nIj09dHlwZW9mIGV4cGVjdGVkJiZmdW5jdGlvbiBzdGFydHNXaXRoKHN0cixzZWFyY2gscG9zKXtyZXR1cm4gc3RyLnN1YnN0cighcG9zfHxwb3M8MD8wOitwb3Msc2VhcmNoLmxlbmd0aCk9PT1zZWFyY2h9KGV4cGVjdGVkLCJub3QgIik/KGRldGVybWluZXI9Im11c3Qgbm90IGJlIixleHBlY3RlZD1leHBlY3RlZC5yZXBsYWNlKC9ebm90IC8sIiIpKTpkZXRlcm1pbmVyPSJtdXN0IGJlIixmdW5jdGlvbiBlbmRzV2l0aChzdHIsc2VhcmNoLHRoaXNfbGVuKXtyZXR1cm4odm9pZCAwPT09dGhpc19sZW58fHRoaXNfbGVuPnN0ci5sZW5ndGgpJiYodGhpc19sZW49c3RyLmxlbmd0aCksc3RyLnN1YnN0cmluZyh0aGlzX2xlbi1zZWFyY2gubGVuZ3RoLHRoaXNfbGVuKT09PXNlYXJjaH0obmFtZSwiIGFyZ3VtZW50IikpbXNnPSJUaGUgIi5jb25jYXQobmFtZSwiICIpLmNvbmNhdChkZXRlcm1pbmVyLCIgIikuY29uY2F0KG9uZU9mKGV4cGVjdGVkLCJ0eXBlIikpO2Vsc2V7dmFyIHR5cGU9ZnVuY3Rpb24gaW5jbHVkZXMoc3RyLHNlYXJjaCxzdGFydCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBzdGFydCYmKHN0YXJ0PTApLCEoc3RhcnQrc2VhcmNoLmxlbmd0aD5zdHIubGVuZ3RoKSYmLTEhPT1zdHIuaW5kZXhPZihzZWFyY2gsc3RhcnQpfShuYW1lLCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO21zZz0nVGhlICInLmNvbmNhdChuYW1lLCciICcpLmNvbmNhdCh0eXBlLCIgIikuY29uY2F0KGRldGVybWluZXIsIiAiKS5jb25jYXQob25lT2YoZXhwZWN0ZWQsInR5cGUiKSl9cmV0dXJuIG1zZys9Ii4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2YgYWN0dWFsKX0sVHlwZUVycm9yKSxjcmVhdGVFcnJvclR5cGUoIkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YiLCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpLGNyZWF0ZUVycm9yVHlwZSgiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKG5hbWUpe3JldHVybiJUaGUgIituYW1lKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxjcmVhdGVFcnJvclR5cGUoIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiwiUHJlbWF0dXJlIGNsb3NlIiksY3JlYXRlRXJyb3JUeXBlKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsZnVuY3Rpb24obmFtZSl7cmV0dXJuIkNhbm5vdCBjYWxsICIrbmFtZSsiIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQifSksY3JlYXRlRXJyb3JUeXBlKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxjcmVhdGVFcnJvclR5cGUoIkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUiLCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlIiksY3JlYXRlRXJyb3JUeXBlKCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCIsIndyaXRlIGFmdGVyIGVuZCIpLGNyZWF0ZUVycm9yVHlwZSgiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLGNyZWF0ZUVycm9yVHlwZSgiRVJSX1VOS05PV05fRU5DT0RJTkciLGZ1bmN0aW9uKGFyZyl7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrYXJnfSxUeXBlRXJyb3IpLGNyZWF0ZUVycm9yVHlwZSgiRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCIsInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IiksbW9kdWxlLmV4cG9ydHMuRj1jb2Rlc30sIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHByb2Nlc3M9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL3Byb3h5L3Byb2Nlc3MuanMiKSxvYmplY3RLZXlzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihvYmope3ZhciBrZXlzPVtdO2Zvcih2YXIga2V5IGluIG9iailrZXlzLnB1c2goa2V5KTtyZXR1cm4ga2V5c307bW9kdWxlLmV4cG9ydHM9RHVwbGV4O3ZhciBSZWFkYWJsZT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIpLFdyaXRhYmxlPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIik7X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKShEdXBsZXgsUmVhZGFibGUpO2Zvcih2YXIga2V5cz1vYmplY3RLZXlzKFdyaXRhYmxlLnByb3RvdHlwZSksdj0wO3Y8a2V5cy5sZW5ndGg7disrKXt2YXIgbWV0aG9kPWtleXNbdl07RHVwbGV4LnByb3RvdHlwZVttZXRob2RdfHwoRHVwbGV4LnByb3RvdHlwZVttZXRob2RdPVdyaXRhYmxlLnByb3RvdHlwZVttZXRob2RdKX1mdW5jdGlvbiBEdXBsZXgob3B0aW9ucyl7aWYoISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSlyZXR1cm4gbmV3IER1cGxleChvcHRpb25zKTtSZWFkYWJsZS5jYWxsKHRoaXMsb3B0aW9ucyksV3JpdGFibGUuY2FsbCh0aGlzLG9wdGlvbnMpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxvcHRpb25zJiYoITE9PT1vcHRpb25zLnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksITE9PT1vcHRpb25zLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksITE9PT1vcHRpb25zLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEsdGhpcy5vbmNlKCJlbmQiLG9uZW5kKSkpfWZ1bmN0aW9uIG9uZW5kKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8cHJvY2Vzcy5uZXh0VGljayhvbkVuZE5ULHRoaXMpfWZ1bmN0aW9uIG9uRW5kTlQoc2VsZil7c2VsZi5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24gZ2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uIGdldCgpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkKX0sc2V0OmZ1bmN0aW9uIHNldCh2YWx1ZSl7dm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPXZhbHVlLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXZhbHVlKX19KX0sIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1QYXNzVGhyb3VnaDt2YXIgVHJhbnNmb3JtPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIpO2Z1bmN0aW9uIFBhc3NUaHJvdWdoKG9wdGlvbnMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFBhc3NUaHJvdWdoKSlyZXR1cm4gbmV3IFBhc3NUaHJvdWdoKG9wdGlvbnMpO1RyYW5zZm9ybS5jYWxsKHRoaXMsb3B0aW9ucyl9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKShQYXNzVGhyb3VnaCxUcmFuc2Zvcm0pLFBhc3NUaHJvdWdoLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGNodW5rLGVuY29kaW5nLGNiKXtjYihudWxsLGNodW5rKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIER1cGxleCxwcm9jZXNzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9wcm94eS9wcm9jZXNzLmpzIik7bW9kdWxlLmV4cG9ydHM9UmVhZGFibGUsUmVhZGFibGUuUmVhZGFibGVTdGF0ZT1SZWFkYWJsZVN0YXRlO19fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIikuRXZlbnRFbWl0dGVyO3ZhciBFRWxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24gRUVsaXN0ZW5lckNvdW50KGVtaXR0ZXIsdHlwZSl7cmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJzKHR5cGUpLmxlbmd0aH0sU3RyZWFtPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbS1icm93c2VyLmpzIiksQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKS5CdWZmZXIsT3VyVWludDhBcnJheT0odm9pZCAwIT09X193ZWJwYWNrX3JlcXVpcmVfXy5nP19fd2VicGFja19yZXF1aXJlX18uZzoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fTt2YXIgZGVidWcsZGVidWdVdGlsPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiKTtkZWJ1Zz1kZWJ1Z1V0aWwmJmRlYnVnVXRpbC5kZWJ1Z2xvZz9kZWJ1Z1V0aWwuZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uIGRlYnVnKCl7fTt2YXIgU3RyaW5nRGVjb2RlcixjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3IsZnJvbSxCdWZmZXJMaXN0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0LmpzIiksZGVzdHJveUltcGw9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5qcyIpLGdldEhpZ2hXYXRlck1hcms9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RhdGUuanMiKS5nZXRIaWdoV2F0ZXJNYXJrLF9yZXF1aXJlJGNvZGVzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2Vycm9ycy1icm93c2VyLmpzIikuRixFUlJfSU5WQUxJRF9BUkdfVFlQRT1fcmVxdWlyZSRjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSxFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GPV9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQ9X3JlcXVpcmUkY29kZXMuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVD1fcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UO19fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIikoUmVhZGFibGUsU3RyZWFtKTt2YXIgZXJyb3JPckRlc3Ryb3k9ZGVzdHJveUltcGwuZXJyb3JPckRlc3Ryb3ksa1Byb3h5RXZlbnRzPVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucyxzdHJlYW0saXNEdXBsZXgpe0R1cGxleD1EdXBsZXh8fF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIpLG9wdGlvbnM9b3B0aW9uc3x8e30sImJvb2xlYW4iIT10eXBlb2YgaXNEdXBsZXgmJihpc0R1cGxleD1zdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXgpLHRoaXMub2JqZWN0TW9kZT0hIW9wdGlvbnMub2JqZWN0TW9kZSxpc0R1cGxleCYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1nZXRIaWdoV2F0ZXJNYXJrKHRoaXMsb3B0aW9ucywicmVhZGFibGVIaWdoV2F0ZXJNYXJrIixpc0R1cGxleCksdGhpcy5idWZmZXI9bmV3IEJ1ZmZlckxpc3QsdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMucGF1c2VkPSEwLHRoaXMuZW1pdENsb3NlPSExIT09b3B0aW9ucy5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIW9wdGlvbnMuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9b3B0aW9ucy5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxvcHRpb25zLmVuY29kaW5nJiYoU3RyaW5nRGVjb2Rlcnx8KFN0cmluZ0RlY29kZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2xpYi9zdHJpbmdfZGVjb2Rlci5qcyIpLlN0cmluZ0RlY29kZXIpLHRoaXMuZGVjb2Rlcj1uZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPW9wdGlvbnMuZW5jb2RpbmcpfWZ1bmN0aW9uIFJlYWRhYmxlKG9wdGlvbnMpe2lmKER1cGxleD1EdXBsZXh8fF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIpLCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSlyZXR1cm4gbmV3IFJlYWRhYmxlKG9wdGlvbnMpO3ZhciBpc0R1cGxleD10aGlzIGluc3RhbmNlb2YgRHVwbGV4O3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucyx0aGlzLGlzRHVwbGV4KSx0aGlzLnJlYWRhYmxlPSEwLG9wdGlvbnMmJigiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucy5yZWFkJiYodGhpcy5fcmVhZD1vcHRpb25zLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBvcHRpb25zLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PW9wdGlvbnMuZGVzdHJveSkpLFN0cmVhbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLGNodW5rLGVuY29kaW5nLGFkZFRvRnJvbnQsc2tpcENodW5rQ2hlY2spe2RlYnVnKCJyZWFkYWJsZUFkZENodW5rIixjaHVuayk7dmFyIGVyLHN0YXRlPXN0cmVhbS5fcmVhZGFibGVTdGF0ZTtpZihudWxsPT09Y2h1bmspc3RhdGUucmVhZGluZz0hMSxmdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSxzdGF0ZSl7aWYoZGVidWcoIm9uRW9mQ2h1bmsiKSxzdGF0ZS5lbmRlZClyZXR1cm47aWYoc3RhdGUuZGVjb2Rlcil7dmFyIGNodW5rPXN0YXRlLmRlY29kZXIuZW5kKCk7Y2h1bmsmJmNodW5rLmxlbmd0aCYmKHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKSxzdGF0ZS5sZW5ndGgrPXN0YXRlLm9iamVjdE1vZGU/MTpjaHVuay5sZW5ndGgpfXN0YXRlLmVuZGVkPSEwLHN0YXRlLnN5bmM/ZW1pdFJlYWRhYmxlKHN0cmVhbSk6KHN0YXRlLm5lZWRSZWFkYWJsZT0hMSxzdGF0ZS5lbWl0dGVkUmVhZGFibGV8fChzdGF0ZS5lbWl0dGVkUmVhZGFibGU9ITAsZW1pdFJlYWRhYmxlXyhzdHJlYW0pKSl9KHN0cmVhbSxzdGF0ZSk7ZWxzZSBpZihza2lwQ2h1bmtDaGVja3x8KGVyPWZ1bmN0aW9uIGNodW5rSW52YWxpZChzdGF0ZSxjaHVuayl7dmFyIGVyOyhmdW5jdGlvbiBfaXNVaW50OEFycmF5KG9iail7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopfHxvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5fSkoY2h1bmspfHwic3RyaW5nIj09dHlwZW9mIGNodW5rfHx2b2lkIDA9PT1jaHVua3x8c3RhdGUub2JqZWN0TW9kZXx8KGVyPW5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIiwiVWludDhBcnJheSJdLGNodW5rKSk7cmV0dXJuIGVyfShzdGF0ZSxjaHVuaykpLGVyKWVycm9yT3JEZXN0cm95KHN0cmVhbSxlcik7ZWxzZSBpZihzdGF0ZS5vYmplY3RNb2RlfHxjaHVuayYmY2h1bmsubGVuZ3RoPjApaWYoInN0cmluZyI9PXR5cGVvZiBjaHVua3x8c3RhdGUub2JqZWN0TW9kZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGNodW5rKT09PUJ1ZmZlci5wcm90b3R5cGV8fChjaHVuaz1mdW5jdGlvbiBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKXtyZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspfShjaHVuaykpLGFkZFRvRnJvbnQpc3RhdGUuZW5kRW1pdHRlZD9lcnJvck9yRGVzdHJveShzdHJlYW0sbmV3IEVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQpOmFkZENodW5rKHN0cmVhbSxzdGF0ZSxjaHVuaywhMCk7ZWxzZSBpZihzdGF0ZS5lbmRlZCllcnJvck9yRGVzdHJveShzdHJlYW0sbmV3IEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YpO2Vsc2V7aWYoc3RhdGUuZGVzdHJveWVkKXJldHVybiExO3N0YXRlLnJlYWRpbmc9ITEsc3RhdGUuZGVjb2RlciYmIWVuY29kaW5nPyhjaHVuaz1zdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKSxzdGF0ZS5vYmplY3RNb2RlfHwwIT09Y2h1bmsubGVuZ3RoP2FkZENodW5rKHN0cmVhbSxzdGF0ZSxjaHVuaywhMSk6bWF5YmVSZWFkTW9yZShzdHJlYW0sc3RhdGUpKTphZGRDaHVuayhzdHJlYW0sc3RhdGUsY2h1bmssITEpfWVsc2UgYWRkVG9Gcm9udHx8KHN0YXRlLnJlYWRpbmc9ITEsbWF5YmVSZWFkTW9yZShzdHJlYW0sc3RhdGUpKTtyZXR1cm4hc3RhdGUuZW5kZWQmJihzdGF0ZS5sZW5ndGg8c3RhdGUuaGlnaFdhdGVyTWFya3x8MD09PXN0YXRlLmxlbmd0aCl9ZnVuY3Rpb24gYWRkQ2h1bmsoc3RyZWFtLHN0YXRlLGNodW5rLGFkZFRvRnJvbnQpe3N0YXRlLmZsb3dpbmcmJjA9PT1zdGF0ZS5sZW5ndGgmJiFzdGF0ZS5zeW5jPyhzdGF0ZS5hd2FpdERyYWluPTAsc3RyZWFtLmVtaXQoImRhdGEiLGNodW5rKSk6KHN0YXRlLmxlbmd0aCs9c3RhdGUub2JqZWN0TW9kZT8xOmNodW5rLmxlbmd0aCxhZGRUb0Zyb250P3N0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKTpzdGF0ZS5idWZmZXIucHVzaChjaHVuayksc3RhdGUubmVlZFJlYWRhYmxlJiZlbWl0UmVhZGFibGUoc3RyZWFtKSksbWF5YmVSZWFkTW9yZShzdHJlYW0sc3RhdGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uIGdldCgpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uIHNldCh2YWx1ZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPXZhbHVlKX19KSxSZWFkYWJsZS5wcm90b3R5cGUuZGVzdHJveT1kZXN0cm95SW1wbC5kZXN0cm95LFJlYWRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95PWRlc3Ryb3lJbXBsLnVuZGVzdHJveSxSZWFkYWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZXJyLGNiKXtjYihlcnIpfSxSZWFkYWJsZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihjaHVuayxlbmNvZGluZyl7dmFyIHNraXBDaHVua0NoZWNrLHN0YXRlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHN0YXRlLm9iamVjdE1vZGU/c2tpcENodW5rQ2hlY2s9ITA6InN0cmluZyI9PXR5cGVvZiBjaHVuayYmKChlbmNvZGluZz1lbmNvZGluZ3x8c3RhdGUuZGVmYXVsdEVuY29kaW5nKSE9PXN0YXRlLmVuY29kaW5nJiYoY2h1bms9QnVmZmVyLmZyb20oY2h1bmssZW5jb2RpbmcpLGVuY29kaW5nPSIiKSxza2lwQ2h1bmtDaGVjaz0hMCkscmVhZGFibGVBZGRDaHVuayh0aGlzLGNodW5rLGVuY29kaW5nLCExLHNraXBDaHVua0NoZWNrKX0sUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oY2h1bmspe3JldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsY2h1bmssbnVsbCwhMCwhMSl9LFJlYWRhYmxlLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxSZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oZW5jKXtTdHJpbmdEZWNvZGVyfHwoU3RyaW5nRGVjb2Rlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyaW5nX2RlY29kZXIvbGliL3N0cmluZ19kZWNvZGVyLmpzIikuU3RyaW5nRGVjb2Rlcik7dmFyIGRlY29kZXI9bmV3IFN0cmluZ0RlY29kZXIoZW5jKTt0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9ZGVjb2Rlcix0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFyIHA9dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVhZCxjb250ZW50PSIiO251bGwhPT1wOyljb250ZW50Kz1kZWNvZGVyLndyaXRlKHAuZGF0YSkscD1wLm5leHQ7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmNsZWFyKCksIiIhPT1jb250ZW50JiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKGNvbnRlbnQpLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoPWNvbnRlbnQubGVuZ3RoLHRoaXN9O2Z1bmN0aW9uIGhvd011Y2hUb1JlYWQobixzdGF0ZSl7cmV0dXJuIG48PTB8fDA9PT1zdGF0ZS5sZW5ndGgmJnN0YXRlLmVuZGVkPzA6c3RhdGUub2JqZWN0TW9kZT8xOm4hPW4/c3RhdGUuZmxvd2luZyYmc3RhdGUubGVuZ3RoP3N0YXRlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOnN0YXRlLmxlbmd0aDoobj5zdGF0ZS5oaWdoV2F0ZXJNYXJrJiYoc3RhdGUuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKXtyZXR1cm4gbj49MTA3Mzc0MTgyND9uPTEwNzM3NDE4MjQ6KG4tLSxufD1uPj4+MSxufD1uPj4+MixufD1uPj4+NCxufD1uPj4+OCxufD1uPj4+MTYsbisrKSxufShuKSksbjw9c3RhdGUubGVuZ3RoP246c3RhdGUuZW5kZWQ/c3RhdGUubGVuZ3RoOihzdGF0ZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pe3ZhciBzdGF0ZT1zdHJlYW0uX3JlYWRhYmxlU3RhdGU7ZGVidWcoImVtaXRSZWFkYWJsZSIsc3RhdGUubmVlZFJlYWRhYmxlLHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSksc3RhdGUubmVlZFJlYWRhYmxlPSExLHN0YXRlLmVtaXR0ZWRSZWFkYWJsZXx8KGRlYnVnKCJlbWl0UmVhZGFibGUiLHN0YXRlLmZsb3dpbmcpLHN0YXRlLmVtaXR0ZWRSZWFkYWJsZT0hMCxwcm9jZXNzLm5leHRUaWNrKGVtaXRSZWFkYWJsZV8sc3RyZWFtKSl9ZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pe3ZhciBzdGF0ZT1zdHJlYW0uX3JlYWRhYmxlU3RhdGU7ZGVidWcoImVtaXRSZWFkYWJsZV8iLHN0YXRlLmRlc3Ryb3llZCxzdGF0ZS5sZW5ndGgsc3RhdGUuZW5kZWQpLHN0YXRlLmRlc3Ryb3llZHx8IXN0YXRlLmxlbmd0aCYmIXN0YXRlLmVuZGVkfHwoc3RyZWFtLmVtaXQoInJlYWRhYmxlIiksc3RhdGUuZW1pdHRlZFJlYWRhYmxlPSExKSxzdGF0ZS5uZWVkUmVhZGFibGU9IXN0YXRlLmZsb3dpbmcmJiFzdGF0ZS5lbmRlZCYmc3RhdGUubGVuZ3RoPD1zdGF0ZS5oaWdoV2F0ZXJNYXJrLGZsb3coc3RyZWFtKX1mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSxzdGF0ZSl7c3RhdGUucmVhZGluZ01vcmV8fChzdGF0ZS5yZWFkaW5nTW9yZT0hMCxwcm9jZXNzLm5leHRUaWNrKG1heWJlUmVhZE1vcmVfLHN0cmVhbSxzdGF0ZSkpfWZ1bmN0aW9uIG1heWJlUmVhZE1vcmVfKHN0cmVhbSxzdGF0ZSl7Zm9yKDshc3RhdGUucmVhZGluZyYmIXN0YXRlLmVuZGVkJiYoc3RhdGUubGVuZ3RoPHN0YXRlLmhpZ2hXYXRlck1hcmt8fHN0YXRlLmZsb3dpbmcmJjA9PT1zdGF0ZS5sZW5ndGgpOyl7dmFyIGxlbj1zdGF0ZS5sZW5ndGg7aWYoZGVidWcoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksc3RyZWFtLnJlYWQoMCksbGVuPT09c3RhdGUubGVuZ3RoKWJyZWFrfXN0YXRlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nKHNlbGYpe3ZhciBzdGF0ZT1zZWxmLl9yZWFkYWJsZVN0YXRlO3N0YXRlLnJlYWRhYmxlTGlzdGVuaW5nPXNlbGYubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLHN0YXRlLnJlc3VtZVNjaGVkdWxlZCYmIXN0YXRlLnBhdXNlZD9zdGF0ZS5mbG93aW5nPSEwOnNlbGYubGlzdGVuZXJDb3VudCgiZGF0YSIpPjAmJnNlbGYucmVzdW1lKCl9ZnVuY3Rpb24gblJlYWRpbmdOZXh0VGljayhzZWxmKXtkZWJ1ZygicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksc2VsZi5yZWFkKDApfWZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLHN0YXRlKXtkZWJ1ZygicmVzdW1lIixzdGF0ZS5yZWFkaW5nKSxzdGF0ZS5yZWFkaW5nfHxzdHJlYW0ucmVhZCgwKSxzdGF0ZS5yZXN1bWVTY2hlZHVsZWQ9ITEsc3RyZWFtLmVtaXQoInJlc3VtZSIpLGZsb3coc3RyZWFtKSxzdGF0ZS5mbG93aW5nJiYhc3RhdGUucmVhZGluZyYmc3RyZWFtLnJlYWQoMCl9ZnVuY3Rpb24gZmxvdyhzdHJlYW0pe3ZhciBzdGF0ZT1zdHJlYW0uX3JlYWRhYmxlU3RhdGU7Zm9yKGRlYnVnKCJmbG93IixzdGF0ZS5mbG93aW5nKTtzdGF0ZS5mbG93aW5nJiZudWxsIT09c3RyZWFtLnJlYWQoKTspO31mdW5jdGlvbiBmcm9tTGlzdChuLHN0YXRlKXtyZXR1cm4gMD09PXN0YXRlLmxlbmd0aD9udWxsOihzdGF0ZS5vYmplY3RNb2RlP3JldD1zdGF0ZS5idWZmZXIuc2hpZnQoKTohbnx8bj49c3RhdGUubGVuZ3RoPyhyZXQ9c3RhdGUuZGVjb2Rlcj9zdGF0ZS5idWZmZXIuam9pbigiIik6MT09PXN0YXRlLmJ1ZmZlci5sZW5ndGg/c3RhdGUuYnVmZmVyLmZpcnN0KCk6c3RhdGUuYnVmZmVyLmNvbmNhdChzdGF0ZS5sZW5ndGgpLHN0YXRlLmJ1ZmZlci5jbGVhcigpKTpyZXQ9c3RhdGUuYnVmZmVyLmNvbnN1bWUobixzdGF0ZS5kZWNvZGVyKSxyZXQpO3ZhciByZXR9ZnVuY3Rpb24gZW5kUmVhZGFibGUoc3RyZWFtKXt2YXIgc3RhdGU9c3RyZWFtLl9yZWFkYWJsZVN0YXRlO2RlYnVnKCJlbmRSZWFkYWJsZSIsc3RhdGUuZW5kRW1pdHRlZCksc3RhdGUuZW5kRW1pdHRlZHx8KHN0YXRlLmVuZGVkPSEwLHByb2Nlc3MubmV4dFRpY2soZW5kUmVhZGFibGVOVCxzdGF0ZSxzdHJlYW0pKX1mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLHN0cmVhbSl7aWYoZGVidWcoImVuZFJlYWRhYmxlTlQiLHN0YXRlLmVuZEVtaXR0ZWQsc3RhdGUubGVuZ3RoKSwhc3RhdGUuZW5kRW1pdHRlZCYmMD09PXN0YXRlLmxlbmd0aCYmKHN0YXRlLmVuZEVtaXR0ZWQ9ITAsc3RyZWFtLnJlYWRhYmxlPSExLHN0cmVhbS5lbWl0KCJlbmQiKSxzdGF0ZS5hdXRvRGVzdHJveSkpe3ZhciB3U3RhdGU9c3RyZWFtLl93cml0YWJsZVN0YXRlOyghd1N0YXRlfHx3U3RhdGUuYXV0b0Rlc3Ryb3kmJndTdGF0ZS5maW5pc2hlZCkmJnN0cmVhbS5kZXN0cm95KCl9fWZ1bmN0aW9uIGluZGV4T2YoeHMseCl7Zm9yKHZhciBpPTAsbD14cy5sZW5ndGg7aTxsO2krKylpZih4c1tpXT09PXgpcmV0dXJuIGk7cmV0dXJuLTF9UmVhZGFibGUucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24obil7ZGVidWcoInJlYWQiLG4pLG49cGFyc2VJbnQobiwxMCk7dmFyIHN0YXRlPXRoaXMuX3JlYWRhYmxlU3RhdGUsbk9yaWc9bjtpZigwIT09biYmKHN0YXRlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PW4mJnN0YXRlLm5lZWRSZWFkYWJsZSYmKCgwIT09c3RhdGUuaGlnaFdhdGVyTWFyaz9zdGF0ZS5sZW5ndGg+PXN0YXRlLmhpZ2hXYXRlck1hcms6c3RhdGUubGVuZ3RoPjApfHxzdGF0ZS5lbmRlZCkpcmV0dXJuIGRlYnVnKCJyZWFkOiBlbWl0UmVhZGFibGUiLHN0YXRlLmxlbmd0aCxzdGF0ZS5lbmRlZCksMD09PXN0YXRlLmxlbmd0aCYmc3RhdGUuZW5kZWQ/ZW5kUmVhZGFibGUodGhpcyk6ZW1pdFJlYWRhYmxlKHRoaXMpLG51bGw7aWYoMD09PShuPWhvd011Y2hUb1JlYWQobixzdGF0ZSkpJiZzdGF0ZS5lbmRlZClyZXR1cm4gMD09PXN0YXRlLmxlbmd0aCYmZW5kUmVhZGFibGUodGhpcyksbnVsbDt2YXIgcmV0LGRvUmVhZD1zdGF0ZS5uZWVkUmVhZGFibGU7cmV0dXJuIGRlYnVnKCJuZWVkIHJlYWRhYmxlIixkb1JlYWQpLCgwPT09c3RhdGUubGVuZ3RofHxzdGF0ZS5sZW5ndGgtbjxzdGF0ZS5oaWdoV2F0ZXJNYXJrKSYmZGVidWcoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixkb1JlYWQ9ITApLHN0YXRlLmVuZGVkfHxzdGF0ZS5yZWFkaW5nP2RlYnVnKCJyZWFkaW5nIG9yIGVuZGVkIixkb1JlYWQ9ITEpOmRvUmVhZCYmKGRlYnVnKCJkbyByZWFkIiksc3RhdGUucmVhZGluZz0hMCxzdGF0ZS5zeW5jPSEwLDA9PT1zdGF0ZS5sZW5ndGgmJihzdGF0ZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoc3RhdGUuaGlnaFdhdGVyTWFyayksc3RhdGUuc3luYz0hMSxzdGF0ZS5yZWFkaW5nfHwobj1ob3dNdWNoVG9SZWFkKG5PcmlnLHN0YXRlKSkpLG51bGw9PT0ocmV0PW4+MD9mcm9tTGlzdChuLHN0YXRlKTpudWxsKT8oc3RhdGUubmVlZFJlYWRhYmxlPXN0YXRlLmxlbmd0aDw9c3RhdGUuaGlnaFdhdGVyTWFyayxuPTApOihzdGF0ZS5sZW5ndGgtPW4sc3RhdGUuYXdhaXREcmFpbj0wKSwwPT09c3RhdGUubGVuZ3RoJiYoc3RhdGUuZW5kZWR8fChzdGF0ZS5uZWVkUmVhZGFibGU9ITApLG5PcmlnIT09biYmc3RhdGUuZW5kZWQmJmVuZFJlYWRhYmxlKHRoaXMpKSxudWxsIT09cmV0JiZ0aGlzLmVtaXQoImRhdGEiLHJldCkscmV0fSxSZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24obil7ZXJyb3JPckRlc3Ryb3kodGhpcyxuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoIl9yZWFkKCkiKSl9LFJlYWRhYmxlLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKGRlc3QscGlwZU9wdHMpe3ZhciBzcmM9dGhpcyxzdGF0ZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChzdGF0ZS5waXBlc0NvdW50KXtjYXNlIDA6c3RhdGUucGlwZXM9ZGVzdDticmVhaztjYXNlIDE6c3RhdGUucGlwZXM9W3N0YXRlLnBpcGVzLGRlc3RdO2JyZWFrO2RlZmF1bHQ6c3RhdGUucGlwZXMucHVzaChkZXN0KX1zdGF0ZS5waXBlc0NvdW50Kz0xLGRlYnVnKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLHN0YXRlLnBpcGVzQ291bnQscGlwZU9wdHMpO3ZhciBlbmRGbj0oIXBpcGVPcHRzfHwhMSE9PXBpcGVPcHRzLmVuZCkmJmRlc3QhPT1wcm9jZXNzLnN0ZG91dCYmZGVzdCE9PXByb2Nlc3Muc3RkZXJyP29uZW5kOnVucGlwZTtmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSx1bnBpcGVJbmZvKXtkZWJ1Zygib251bnBpcGUiKSxyZWFkYWJsZT09PXNyYyYmdW5waXBlSW5mbyYmITE9PT11bnBpcGVJbmZvLmhhc1VucGlwZWQmJih1bnBpcGVJbmZvLmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24gY2xlYW51cCgpe2RlYnVnKCJjbGVhbnVwIiksZGVzdC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLG9uY2xvc2UpLGRlc3QucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsb25maW5pc2gpLGRlc3QucmVtb3ZlTGlzdGVuZXIoImRyYWluIixvbmRyYWluKSxkZXN0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsb25lcnJvciksZGVzdC5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixvbnVucGlwZSksc3JjLnJlbW92ZUxpc3RlbmVyKCJlbmQiLG9uZW5kKSxzcmMucmVtb3ZlTGlzdGVuZXIoImVuZCIsdW5waXBlKSxzcmMucmVtb3ZlTGlzdGVuZXIoImRhdGEiLG9uZGF0YSksY2xlYW5lZFVwPSEwLCFzdGF0ZS5hd2FpdERyYWlufHxkZXN0Ll93cml0YWJsZVN0YXRlJiYhZGVzdC5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fG9uZHJhaW4oKX0oKSl9ZnVuY3Rpb24gb25lbmQoKXtkZWJ1Zygib25lbmQiKSxkZXN0LmVuZCgpfXN0YXRlLmVuZEVtaXR0ZWQ/cHJvY2Vzcy5uZXh0VGljayhlbmRGbik6c3JjLm9uY2UoImVuZCIsZW5kRm4pLGRlc3Qub24oInVucGlwZSIsb251bnBpcGUpO3ZhciBvbmRyYWluPWZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYyl7cmV0dXJuIGZ1bmN0aW9uIHBpcGVPbkRyYWluRnVuY3Rpb25SZXN1bHQoKXt2YXIgc3RhdGU9c3JjLl9yZWFkYWJsZVN0YXRlO2RlYnVnKCJwaXBlT25EcmFpbiIsc3RhdGUuYXdhaXREcmFpbiksc3RhdGUuYXdhaXREcmFpbiYmc3RhdGUuYXdhaXREcmFpbi0tLDA9PT1zdGF0ZS5hd2FpdERyYWluJiZFRWxpc3RlbmVyQ291bnQoc3JjLCJkYXRhIikmJihzdGF0ZS5mbG93aW5nPSEwLGZsb3coc3JjKSl9fShzcmMpO2Rlc3Qub24oImRyYWluIixvbmRyYWluKTt2YXIgY2xlYW5lZFVwPSExO2Z1bmN0aW9uIG9uZGF0YShjaHVuayl7ZGVidWcoIm9uZGF0YSIpO3ZhciByZXQ9ZGVzdC53cml0ZShjaHVuayk7ZGVidWcoImRlc3Qud3JpdGUiLHJldCksITE9PT1yZXQmJigoMT09PXN0YXRlLnBpcGVzQ291bnQmJnN0YXRlLnBpcGVzPT09ZGVzdHx8c3RhdGUucGlwZXNDb3VudD4xJiYtMSE9PWluZGV4T2Yoc3RhdGUucGlwZXMsZGVzdCkpJiYhY2xlYW5lZFVwJiYoZGVidWcoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsc3RhdGUuYXdhaXREcmFpbiksc3RhdGUuYXdhaXREcmFpbisrKSxzcmMucGF1c2UoKSl9ZnVuY3Rpb24gb25lcnJvcihlcil7ZGVidWcoIm9uZXJyb3IiLGVyKSx1bnBpcGUoKSxkZXN0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsb25lcnJvciksMD09PUVFbGlzdGVuZXJDb3VudChkZXN0LCJlcnJvciIpJiZlcnJvck9yRGVzdHJveShkZXN0LGVyKX1mdW5jdGlvbiBvbmNsb3NlKCl7ZGVzdC5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixvbmZpbmlzaCksdW5waXBlKCl9ZnVuY3Rpb24gb25maW5pc2goKXtkZWJ1Zygib25maW5pc2giKSxkZXN0LnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsb25jbG9zZSksdW5waXBlKCl9ZnVuY3Rpb24gdW5waXBlKCl7ZGVidWcoInVucGlwZSIpLHNyYy51bnBpcGUoZGVzdCl9cmV0dXJuIHNyYy5vbigiZGF0YSIsb25kYXRhKSxmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIoZW1pdHRlcixldmVudCxmbil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyKXJldHVybiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCxmbik7ZW1pdHRlci5fZXZlbnRzJiZlbWl0dGVyLl9ldmVudHNbZXZlbnRdP0FycmF5LmlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSk/ZW1pdHRlci5fZXZlbnRzW2V2ZW50XS51bnNoaWZ0KGZuKTplbWl0dGVyLl9ldmVudHNbZXZlbnRdPVtmbixlbWl0dGVyLl9ldmVudHNbZXZlbnRdXTplbWl0dGVyLm9uKGV2ZW50LGZuKX0oZGVzdCwiZXJyb3IiLG9uZXJyb3IpLGRlc3Qub25jZSgiY2xvc2UiLG9uY2xvc2UpLGRlc3Qub25jZSgiZmluaXNoIixvbmZpbmlzaCksZGVzdC5lbWl0KCJwaXBlIixzcmMpLHN0YXRlLmZsb3dpbmd8fChkZWJ1ZygicGlwZSByZXN1bWUiKSxzcmMucmVzdW1lKCkpLGRlc3R9LFJlYWRhYmxlLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oZGVzdCl7dmFyIHN0YXRlPXRoaXMuX3JlYWRhYmxlU3RhdGUsdW5waXBlSW5mbz17aGFzVW5waXBlZDohMX07aWYoMD09PXN0YXRlLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PXN0YXRlLnBpcGVzQ291bnQpcmV0dXJuIGRlc3QmJmRlc3QhPT1zdGF0ZS5waXBlc3x8KGRlc3R8fChkZXN0PXN0YXRlLnBpcGVzKSxzdGF0ZS5waXBlcz1udWxsLHN0YXRlLnBpcGVzQ291bnQ9MCxzdGF0ZS5mbG93aW5nPSExLGRlc3QmJmRlc3QuZW1pdCgidW5waXBlIix0aGlzLHVucGlwZUluZm8pKSx0aGlzO2lmKCFkZXN0KXt2YXIgZGVzdHM9c3RhdGUucGlwZXMsbGVuPXN0YXRlLnBpcGVzQ291bnQ7c3RhdGUucGlwZXM9bnVsbCxzdGF0ZS5waXBlc0NvdW50PTAsc3RhdGUuZmxvd2luZz0hMTtmb3IodmFyIGk9MDtpPGxlbjtpKyspZGVzdHNbaV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIGluZGV4PWluZGV4T2Yoc3RhdGUucGlwZXMsZGVzdCk7cmV0dXJuLTE9PT1pbmRleHx8KHN0YXRlLnBpcGVzLnNwbGljZShpbmRleCwxKSxzdGF0ZS5waXBlc0NvdW50LT0xLDE9PT1zdGF0ZS5waXBlc0NvdW50JiYoc3RhdGUucGlwZXM9c3RhdGUucGlwZXNbMF0pLGRlc3QuZW1pdCgidW5waXBlIix0aGlzLHVucGlwZUluZm8pKSx0aGlzfSxSZWFkYWJsZS5wcm90b3R5cGUub249ZnVuY3Rpb24oZXYsZm4pe3ZhciByZXM9U3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsZXYsZm4pLHN0YXRlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuImRhdGEiPT09ZXY/KHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLCExIT09c3RhdGUuZmxvd2luZyYmdGhpcy5yZXN1bWUoKSk6InJlYWRhYmxlIj09PWV2JiYoc3RhdGUuZW5kRW1pdHRlZHx8c3RhdGUucmVhZGFibGVMaXN0ZW5pbmd8fChzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZz1zdGF0ZS5uZWVkUmVhZGFibGU9ITAsc3RhdGUuZmxvd2luZz0hMSxzdGF0ZS5lbWl0dGVkUmVhZGFibGU9ITEsZGVidWcoIm9uIHJlYWRhYmxlIixzdGF0ZS5sZW5ndGgsc3RhdGUucmVhZGluZyksc3RhdGUubGVuZ3RoP2VtaXRSZWFkYWJsZSh0aGlzKTpzdGF0ZS5yZWFkaW5nfHxwcm9jZXNzLm5leHRUaWNrKG5SZWFkaW5nTmV4dFRpY2ssdGhpcykpKSxyZXN9LFJlYWRhYmxlLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1SZWFkYWJsZS5wcm90b3R5cGUub24sUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGV2LGZuKXt2YXIgcmVzPVN0cmVhbS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLGV2LGZuKTtyZXR1cm4icmVhZGFibGUiPT09ZXYmJnByb2Nlc3MubmV4dFRpY2sodXBkYXRlUmVhZGFibGVMaXN0ZW5pbmcsdGhpcykscmVzfSxSZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGV2KXt2YXIgcmVzPVN0cmVhbS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4icmVhZGFibGUiIT09ZXYmJnZvaWQgMCE9PWV2fHxwcm9jZXNzLm5leHRUaWNrKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLHRoaXMpLHJlc30sUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciBzdGF0ZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBzdGF0ZS5mbG93aW5nfHwoZGVidWcoInJlc3VtZSIpLHN0YXRlLmZsb3dpbmc9IXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nLGZ1bmN0aW9uIHJlc3VtZShzdHJlYW0sc3RhdGUpe3N0YXRlLnJlc3VtZVNjaGVkdWxlZHx8KHN0YXRlLnJlc3VtZVNjaGVkdWxlZD0hMCxwcm9jZXNzLm5leHRUaWNrKHJlc3VtZV8sc3RyZWFtLHN0YXRlKSl9KHRoaXMsc3RhdGUpKSxzdGF0ZS5wYXVzZWQ9ITEsdGhpc30sUmVhZGFibGUucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIGRlYnVnKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihkZWJ1ZygicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxSZWFkYWJsZS5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihzdHJlYW0pe3ZhciBfdGhpcz10aGlzLHN0YXRlPXRoaXMuX3JlYWRhYmxlU3RhdGUscGF1c2VkPSExO2Zvcih2YXIgaSBpbiBzdHJlYW0ub24oImVuZCIsZnVuY3Rpb24oKXtpZihkZWJ1Zygid3JhcHBlZCBlbmQiKSxzdGF0ZS5kZWNvZGVyJiYhc3RhdGUuZW5kZWQpe3ZhciBjaHVuaz1zdGF0ZS5kZWNvZGVyLmVuZCgpO2NodW5rJiZjaHVuay5sZW5ndGgmJl90aGlzLnB1c2goY2h1bmspfV90aGlzLnB1c2gobnVsbCl9KSxzdHJlYW0ub24oImRhdGEiLGZ1bmN0aW9uKGNodW5rKXsoZGVidWcoIndyYXBwZWQgZGF0YSIpLHN0YXRlLmRlY29kZXImJihjaHVuaz1zdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKSksc3RhdGUub2JqZWN0TW9kZSYmbnVsbD09Y2h1bmspfHwoc3RhdGUub2JqZWN0TW9kZXx8Y2h1bmsmJmNodW5rLmxlbmd0aCkmJihfdGhpcy5wdXNoKGNodW5rKXx8KHBhdXNlZD0hMCxzdHJlYW0ucGF1c2UoKSkpfSksc3RyZWFtKXZvaWQgMD09PXRoaXNbaV0mJiJmdW5jdGlvbiI9PXR5cGVvZiBzdHJlYW1baV0mJih0aGlzW2ldPWZ1bmN0aW9uIG1ldGhvZFdyYXAobWV0aG9kKXtyZXR1cm4gZnVuY3Rpb24gbWV0aG9kV3JhcFJldHVybkZ1bmN0aW9uKCl7cmV0dXJuIHN0cmVhbVttZXRob2RdLmFwcGx5KHN0cmVhbSxhcmd1bWVudHMpfX0oaSkpO2Zvcih2YXIgbj0wO248a1Byb3h5RXZlbnRzLmxlbmd0aDtuKyspc3RyZWFtLm9uKGtQcm94eUV2ZW50c1tuXSx0aGlzLmVtaXQuYmluZCh0aGlzLGtQcm94eUV2ZW50c1tuXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKG4pe2RlYnVnKCJ3cmFwcGVkIF9yZWFkIixuKSxwYXVzZWQmJihwYXVzZWQ9ITEsc3RyZWFtLnJlc3VtZSgpKX0sdGhpc30sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFJlYWRhYmxlLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09Y3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yJiYoY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2FzeW5jX2l0ZXJhdG9yLmpzIikpLGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcih0aGlzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uIGdldCgpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwicmVhZGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24gZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sc2V0OmZ1bmN0aW9uIHNldChzdGF0ZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1zdGF0ZSl9fSksUmVhZGFibGUuX2Zyb21MaXN0PWZyb21MaXN0LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsInJlYWRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24gZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RofX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihSZWFkYWJsZS5mcm9tPWZ1bmN0aW9uKGl0ZXJhYmxlLG9wdHMpe3JldHVybiB2b2lkIDA9PT1mcm9tJiYoZnJvbT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9mcm9tLWJyb3dzZXIuanMiKSksZnJvbShSZWFkYWJsZSxpdGVyYWJsZSxvcHRzKX0pfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1UcmFuc2Zvcm07dmFyIF9yZXF1aXJlJGNvZGVzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2Vycm9ycy1icm93c2VyLmpzIikuRixFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRD1fcmVxdWlyZSRjb2Rlcy5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxFUlJfTVVMVElQTEVfQ0FMTEJBQ0s9X3JlcXVpcmUkY29kZXMuRVJSX01VTFRJUExFX0NBTExCQUNLLEVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkc9X3JlcXVpcmUkY29kZXMuRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyxFUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzA9X3JlcXVpcmUkY29kZXMuRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wLER1cGxleD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKTtmdW5jdGlvbiBhZnRlclRyYW5zZm9ybShlcixkYXRhKXt2YXIgdHM9dGhpcy5fdHJhbnNmb3JtU3RhdGU7dHMudHJhbnNmb3JtaW5nPSExO3ZhciBjYj10cy53cml0ZWNiO2lmKG51bGw9PT1jYilyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IEVSUl9NVUxUSVBMRV9DQUxMQkFDSyk7dHMud3JpdGVjaHVuaz1udWxsLHRzLndyaXRlY2I9bnVsbCxudWxsIT1kYXRhJiZ0aGlzLnB1c2goZGF0YSksY2IoZXIpO3ZhciBycz10aGlzLl9yZWFkYWJsZVN0YXRlO3JzLnJlYWRpbmc9ITEsKHJzLm5lZWRSZWFkYWJsZXx8cnMubGVuZ3RoPHJzLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIFRyYW5zZm9ybShvcHRpb25zKXtpZighKHRoaXMgaW5zdGFuY2VvZiBUcmFuc2Zvcm0pKXJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO0R1cGxleC5jYWxsKHRoaXMsb3B0aW9ucyksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOmFmdGVyVHJhbnNmb3JtLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxvcHRpb25zJiYoImZ1bmN0aW9uIj09dHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPW9wdGlvbnMudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucy5mbHVzaCYmKHRoaXMuX2ZsdXNoPW9wdGlvbnMuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLHByZWZpbmlzaCl9ZnVuY3Rpb24gcHJlZmluaXNoKCl7dmFyIF90aGlzPXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9kb25lKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbihlcixkYXRhKXtkb25lKF90aGlzLGVyLGRhdGEpfSl9ZnVuY3Rpb24gZG9uZShzdHJlYW0sZXIsZGF0YSl7aWYoZXIpcmV0dXJuIHN0cmVhbS5lbWl0KCJlcnJvciIsZXIpO2lmKG51bGwhPWRhdGEmJnN0cmVhbS5wdXNoKGRhdGEpLHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IEVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMDtpZihzdHJlYW0uX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORztyZXR1cm4gc3RyZWFtLnB1c2gobnVsbCl9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKShUcmFuc2Zvcm0sRHVwbGV4KSxUcmFuc2Zvcm0ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oY2h1bmssZW5jb2Rpbmcpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLER1cGxleC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsY2h1bmssZW5jb2RpbmcpfSxUcmFuc2Zvcm0ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oY2h1bmssZW5jb2RpbmcsY2Ipe2NiKG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgiX3RyYW5zZm9ybSgpIikpfSxUcmFuc2Zvcm0ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihjaHVuayxlbmNvZGluZyxjYil7dmFyIHRzPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKHRzLndyaXRlY2I9Y2IsdHMud3JpdGVjaHVuaz1jaHVuayx0cy53cml0ZWVuY29kaW5nPWVuY29kaW5nLCF0cy50cmFuc2Zvcm1pbmcpe3ZhciBycz10aGlzLl9yZWFkYWJsZVN0YXRlOyh0cy5uZWVkVHJhbnNmb3JtfHxycy5uZWVkUmVhZGFibGV8fHJzLmxlbmd0aDxycy5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKX19LFRyYW5zZm9ybS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24obil7dmFyIHRzPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT10cy53cml0ZWNodW5rfHx0cy50cmFuc2Zvcm1pbmc/dHMubmVlZFRyYW5zZm9ybT0hMDoodHMudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybSh0cy53cml0ZWNodW5rLHRzLndyaXRlZW5jb2RpbmcsdHMuYWZ0ZXJUcmFuc2Zvcm0pKX0sVHJhbnNmb3JtLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlcnIsY2Ipe0R1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLGVycixmdW5jdGlvbihlcnIyKXtjYihlcnIyKX0pfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgRHVwbGV4LHByb2Nlc3M9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL3Byb3h5L3Byb2Nlc3MuanMiKTtmdW5jdGlvbiBDb3JrZWRSZXF1ZXN0KHN0YXRlKXt2YXIgX3RoaXM9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24gb25Db3JrZWRGaW5pc2goY29ya1JlcSxzdGF0ZSxlcnIpe3ZhciBlbnRyeT1jb3JrUmVxLmVudHJ5O2NvcmtSZXEuZW50cnk9bnVsbDtmb3IoO2VudHJ5Oyl7dmFyIGNiPWVudHJ5LmNhbGxiYWNrO3N0YXRlLnBlbmRpbmdjYi0tLGNiKGVyciksZW50cnk9ZW50cnkubmV4dH1zdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1jb3JrUmVxfShfdGhpcyxzdGF0ZSl9fW1vZHVsZS5leHBvcnRzPVdyaXRhYmxlLFdyaXRhYmxlLldyaXRhYmxlU3RhdGU9V3JpdGFibGVTdGF0ZTt2YXIgaW50ZXJuYWxVdGlsPXtkZXByZWNhdGU6X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL2Jyb3dzZXIuanMiKX0sU3RyZWFtPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbS1icm93c2VyLmpzIiksQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKS5CdWZmZXIsT3VyVWludDhBcnJheT0odm9pZCAwIT09X193ZWJwYWNrX3JlcXVpcmVfXy5nP19fd2VicGFja19yZXF1aXJlX18uZzoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fTt2YXIgcmVhbEhhc0luc3RhbmNlLGRlc3Ryb3lJbXBsPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kuanMiKSxnZXRIaWdoV2F0ZXJNYXJrPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlLmpzIikuZ2V0SGlnaFdhdGVyTWFyayxfcmVxdWlyZSRjb2Rlcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9lcnJvcnMtYnJvd3Nlci5qcyIpLkYsRVJSX0lOVkFMSURfQVJHX1RZUEU9X3JlcXVpcmUkY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUsRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQ9X3JlcXVpcmUkY29kZXMuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsRVJSX01VTFRJUExFX0NBTExCQUNLPV9yZXF1aXJlJGNvZGVzLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxFUlJfU1RSRUFNX0NBTk5PVF9QSVBFPV9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsRVJSX1NUUkVBTV9ERVNUUk9ZRUQ9X3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9ERVNUUk9ZRUQsRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUz1fcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX05VTExfVkFMVUVTLEVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EPV9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELEVSUl9VTktOT1dOX0VOQ09ESU5HPV9yZXF1aXJlJGNvZGVzLkVSUl9VTktOT1dOX0VOQ09ESU5HLGVycm9yT3JEZXN0cm95PWRlc3Ryb3lJbXBsLmVycm9yT3JEZXN0cm95O2Z1bmN0aW9uIG5vcCgpe31mdW5jdGlvbiBXcml0YWJsZVN0YXRlKG9wdGlvbnMsc3RyZWFtLGlzRHVwbGV4KXtEdXBsZXg9RHVwbGV4fHxfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKSxvcHRpb25zPW9wdGlvbnN8fHt9LCJib29sZWFuIiE9dHlwZW9mIGlzRHVwbGV4JiYoaXNEdXBsZXg9c3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4KSx0aGlzLm9iamVjdE1vZGU9ISFvcHRpb25zLm9iamVjdE1vZGUsaXNEdXBsZXgmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIW9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9Z2V0SGlnaFdhdGVyTWFyayh0aGlzLG9wdGlvbnMsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIsaXNEdXBsZXgpLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExO3ZhciBub0RlY29kZT0hMT09PW9wdGlvbnMuZGVjb2RlU3RyaW5nczt0aGlzLmRlY29kZVN0cmluZ3M9IW5vRGVjb2RlLHRoaXMuZGVmYXVsdEVuY29kaW5nPW9wdGlvbnMuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihlcil7IWZ1bmN0aW9uIG9ud3JpdGUoc3RyZWFtLGVyKXt2YXIgc3RhdGU9c3RyZWFtLl93cml0YWJsZVN0YXRlLHN5bmM9c3RhdGUuc3luYyxjYj1zdGF0ZS53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjYil0aHJvdyBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLO2lmKGZ1bmN0aW9uIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSl7c3RhdGUud3JpdGluZz0hMSxzdGF0ZS53cml0ZWNiPW51bGwsc3RhdGUubGVuZ3RoLT1zdGF0ZS53cml0ZWxlbixzdGF0ZS53cml0ZWxlbj0wfShzdGF0ZSksZXIpIWZ1bmN0aW9uIG9ud3JpdGVFcnJvcihzdHJlYW0sc3RhdGUsc3luYyxlcixjYil7LS1zdGF0ZS5wZW5kaW5nY2Isc3luYz8ocHJvY2Vzcy5uZXh0VGljayhjYixlcikscHJvY2Vzcy5uZXh0VGljayhmaW5pc2hNYXliZSxzdHJlYW0sc3RhdGUpLHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsZXJyb3JPckRlc3Ryb3koc3RyZWFtLGVyKSk6KGNiKGVyKSxzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLGVycm9yT3JEZXN0cm95KHN0cmVhbSxlciksZmluaXNoTWF5YmUoc3RyZWFtLHN0YXRlKSl9KHN0cmVhbSxzdGF0ZSxzeW5jLGVyLGNiKTtlbHNle3ZhciBmaW5pc2hlZD1uZWVkRmluaXNoKHN0YXRlKXx8c3RyZWFtLmRlc3Ryb3llZDtmaW5pc2hlZHx8c3RhdGUuY29ya2VkfHxzdGF0ZS5idWZmZXJQcm9jZXNzaW5nfHwhc3RhdGUuYnVmZmVyZWRSZXF1ZXN0fHxjbGVhckJ1ZmZlcihzdHJlYW0sc3RhdGUpLHN5bmM/cHJvY2Vzcy5uZXh0VGljayhhZnRlcldyaXRlLHN0cmVhbSxzdGF0ZSxmaW5pc2hlZCxjYik6YWZ0ZXJXcml0ZShzdHJlYW0sc3RhdGUsZmluaXNoZWQsY2IpfX0oc3RyZWFtLGVyKX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSExIT09b3B0aW9ucy5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIW9wdGlvbnMuYXV0b0Rlc3Ryb3ksdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBDb3JrZWRSZXF1ZXN0KHRoaXMpfWZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpe3ZhciBpc0R1cGxleD10aGlzIGluc3RhbmNlb2YoRHVwbGV4PUR1cGxleHx8X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fZHVwbGV4LmpzIikpO2lmKCFpc0R1cGxleCYmIXJlYWxIYXNJbnN0YW5jZS5jYWxsKFdyaXRhYmxlLHRoaXMpKXJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucyk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgV3JpdGFibGVTdGF0ZShvcHRpb25zLHRoaXMsaXNEdXBsZXgpLHRoaXMud3JpdGFibGU9ITAsb3B0aW9ucyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBvcHRpb25zLndyaXRlJiYodGhpcy5fd3JpdGU9b3B0aW9ucy53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIG9wdGlvbnMud3JpdGV2JiYodGhpcy5fd3JpdGV2PW9wdGlvbnMud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucy5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1vcHRpb25zLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBvcHRpb25zLmZpbmFsJiYodGhpcy5fZmluYWw9b3B0aW9ucy5maW5hbCkpLFN0cmVhbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLHN0YXRlLHdyaXRldixsZW4sY2h1bmssZW5jb2RpbmcsY2Ipe3N0YXRlLndyaXRlbGVuPWxlbixzdGF0ZS53cml0ZWNiPWNiLHN0YXRlLndyaXRpbmc9ITAsc3RhdGUuc3luYz0hMCxzdGF0ZS5kZXN0cm95ZWQ/c3RhdGUub253cml0ZShuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoIndyaXRlIikpOndyaXRldj9zdHJlYW0uX3dyaXRldihjaHVuayxzdGF0ZS5vbndyaXRlKTpzdHJlYW0uX3dyaXRlKGNodW5rLGVuY29kaW5nLHN0YXRlLm9ud3JpdGUpLHN0YXRlLnN5bmM9ITF9ZnVuY3Rpb24gYWZ0ZXJXcml0ZShzdHJlYW0sc3RhdGUsZmluaXNoZWQsY2Ipe2ZpbmlzaGVkfHxmdW5jdGlvbiBvbndyaXRlRHJhaW4oc3RyZWFtLHN0YXRlKXswPT09c3RhdGUubGVuZ3RoJiZzdGF0ZS5uZWVkRHJhaW4mJihzdGF0ZS5uZWVkRHJhaW49ITEsc3RyZWFtLmVtaXQoImRyYWluIikpfShzdHJlYW0sc3RhdGUpLHN0YXRlLnBlbmRpbmdjYi0tLGNiKCksZmluaXNoTWF5YmUoc3RyZWFtLHN0YXRlKX1mdW5jdGlvbiBjbGVhckJ1ZmZlcihzdHJlYW0sc3RhdGUpe3N0YXRlLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIGVudHJ5PXN0YXRlLmJ1ZmZlcmVkUmVxdWVzdDtpZihzdHJlYW0uX3dyaXRldiYmZW50cnkmJmVudHJ5Lm5leHQpe3ZhciBsPXN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50LGJ1ZmZlcj1uZXcgQXJyYXkobCksaG9sZGVyPXN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZTtob2xkZXIuZW50cnk9ZW50cnk7Zm9yKHZhciBjb3VudD0wLGFsbEJ1ZmZlcnM9ITA7ZW50cnk7KWJ1ZmZlcltjb3VudF09ZW50cnksZW50cnkuaXNCdWZ8fChhbGxCdWZmZXJzPSExKSxlbnRyeT1lbnRyeS5uZXh0LGNvdW50Kz0xO2J1ZmZlci5hbGxCdWZmZXJzPWFsbEJ1ZmZlcnMsZG9Xcml0ZShzdHJlYW0sc3RhdGUsITAsc3RhdGUubGVuZ3RoLGJ1ZmZlciwiIixob2xkZXIuZmluaXNoKSxzdGF0ZS5wZW5kaW5nY2IrKyxzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsaG9sZGVyLm5leHQ/KHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZT1ob2xkZXIubmV4dCxob2xkZXIubmV4dD1udWxsKTpzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IENvcmtlZFJlcXVlc3Qoc3RhdGUpLHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO2VudHJ5Oyl7dmFyIGNodW5rPWVudHJ5LmNodW5rLGVuY29kaW5nPWVudHJ5LmVuY29kaW5nLGNiPWVudHJ5LmNhbGxiYWNrO2lmKGRvV3JpdGUoc3RyZWFtLHN0YXRlLCExLHN0YXRlLm9iamVjdE1vZGU/MTpjaHVuay5sZW5ndGgsY2h1bmssZW5jb2RpbmcsY2IpLGVudHJ5PWVudHJ5Lm5leHQsc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSxzdGF0ZS53cml0aW5nKWJyZWFrfW51bGw9PT1lbnRyeSYmKHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9c3RhdGUuYnVmZmVyZWRSZXF1ZXN0PWVudHJ5LHN0YXRlLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gbmVlZEZpbmlzaChzdGF0ZSl7cmV0dXJuIHN0YXRlLmVuZGluZyYmMD09PXN0YXRlLmxlbmd0aCYmbnVsbD09PXN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCYmIXN0YXRlLmZpbmlzaGVkJiYhc3RhdGUud3JpdGluZ31mdW5jdGlvbiBjYWxsRmluYWwoc3RyZWFtLHN0YXRlKXtzdHJlYW0uX2ZpbmFsKGZ1bmN0aW9uKGVycil7c3RhdGUucGVuZGluZ2NiLS0sZXJyJiZlcnJvck9yRGVzdHJveShzdHJlYW0sZXJyKSxzdGF0ZS5wcmVmaW5pc2hlZD0hMCxzdHJlYW0uZW1pdCgicHJlZmluaXNoIiksZmluaXNoTWF5YmUoc3RyZWFtLHN0YXRlKX0pfWZ1bmN0aW9uIGZpbmlzaE1heWJlKHN0cmVhbSxzdGF0ZSl7dmFyIG5lZWQ9bmVlZEZpbmlzaChzdGF0ZSk7aWYobmVlZCYmKGZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sc3RhdGUpe3N0YXRlLnByZWZpbmlzaGVkfHxzdGF0ZS5maW5hbENhbGxlZHx8KCJmdW5jdGlvbiIhPXR5cGVvZiBzdHJlYW0uX2ZpbmFsfHxzdGF0ZS5kZXN0cm95ZWQ/KHN0YXRlLnByZWZpbmlzaGVkPSEwLHN0cmVhbS5lbWl0KCJwcmVmaW5pc2giKSk6KHN0YXRlLnBlbmRpbmdjYisrLHN0YXRlLmZpbmFsQ2FsbGVkPSEwLHByb2Nlc3MubmV4dFRpY2soY2FsbEZpbmFsLHN0cmVhbSxzdGF0ZSkpKX0oc3RyZWFtLHN0YXRlKSwwPT09c3RhdGUucGVuZGluZ2NiJiYoc3RhdGUuZmluaXNoZWQ9ITAsc3RyZWFtLmVtaXQoImZpbmlzaCIpLHN0YXRlLmF1dG9EZXN0cm95KSkpe3ZhciByU3RhdGU9c3RyZWFtLl9yZWFkYWJsZVN0YXRlOyghclN0YXRlfHxyU3RhdGUuYXV0b0Rlc3Ryb3kmJnJTdGF0ZS5lbmRFbWl0dGVkKSYmc3RyZWFtLmRlc3Ryb3koKX1yZXR1cm4gbmVlZH1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpKFdyaXRhYmxlLFN0cmVhbSksV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uIGdldEJ1ZmZlcigpe2Zvcih2YXIgY3VycmVudD10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxvdXQ9W107Y3VycmVudDspb3V0LnB1c2goY3VycmVudCksY3VycmVudD1jdXJyZW50Lm5leHQ7cmV0dXJuIG91dH0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlU3RhdGUucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6aW50ZXJuYWxVdGlsLmRlcHJlY2F0ZShmdW5jdGlvbiB3cml0YWJsZVN0YXRlQnVmZmVyR2V0dGVyKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoKF8pe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KHJlYWxIYXNJbnN0YW5jZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbiB2YWx1ZShvYmplY3Qpe3JldHVybiEhcmVhbEhhc0luc3RhbmNlLmNhbGwodGhpcyxvYmplY3QpfHx0aGlzPT09V3JpdGFibGUmJihvYmplY3QmJm9iamVjdC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFdyaXRhYmxlU3RhdGUpfX0pKTpyZWFsSGFzSW5zdGFuY2U9ZnVuY3Rpb24gcmVhbEhhc0luc3RhbmNlKG9iamVjdCl7cmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIHRoaXN9LFdyaXRhYmxlLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7ZXJyb3JPckRlc3Ryb3kodGhpcyxuZXcgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSl9LFdyaXRhYmxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihjaHVuayxlbmNvZGluZyxjYil7dmFyIHN0YXRlPXRoaXMuX3dyaXRhYmxlU3RhdGUscmV0PSExLGlzQnVmPSFzdGF0ZS5vYmplY3RNb2RlJiZmdW5jdGlvbiBfaXNVaW50OEFycmF5KG9iail7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopfHxvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5fShjaHVuayk7cmV0dXJuIGlzQnVmJiYhQnVmZmVyLmlzQnVmZmVyKGNodW5rKSYmKGNodW5rPWZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspe3JldHVybiBCdWZmZXIuZnJvbShjaHVuayl9KGNodW5rKSksImZ1bmN0aW9uIj09dHlwZW9mIGVuY29kaW5nJiYoY2I9ZW5jb2RpbmcsZW5jb2Rpbmc9bnVsbCksaXNCdWY/ZW5jb2Rpbmc9ImJ1ZmZlciI6ZW5jb2Rpbmd8fChlbmNvZGluZz1zdGF0ZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiBjYiYmKGNiPW5vcCksc3RhdGUuZW5kaW5nP2Z1bmN0aW9uIHdyaXRlQWZ0ZXJFbmQoc3RyZWFtLGNiKXt2YXIgZXI9bmV3IEVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EO2Vycm9yT3JEZXN0cm95KHN0cmVhbSxlcikscHJvY2Vzcy5uZXh0VGljayhjYixlcil9KHRoaXMsY2IpOihpc0J1Znx8ZnVuY3Rpb24gdmFsaWRDaHVuayhzdHJlYW0sc3RhdGUsY2h1bmssY2Ipe3ZhciBlcjtyZXR1cm4gbnVsbD09PWNodW5rP2VyPW5ldyBFUlJfU1RSRUFNX05VTExfVkFMVUVTOiJzdHJpbmciPT10eXBlb2YgY2h1bmt8fHN0YXRlLm9iamVjdE1vZGV8fChlcj1uZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLGNodW5rKSksIWVyfHwoZXJyb3JPckRlc3Ryb3koc3RyZWFtLGVyKSxwcm9jZXNzLm5leHRUaWNrKGNiLGVyKSwhMSl9KHRoaXMsc3RhdGUsY2h1bmssY2IpKSYmKHN0YXRlLnBlbmRpbmdjYisrLHJldD1mdW5jdGlvbiB3cml0ZU9yQnVmZmVyKHN0cmVhbSxzdGF0ZSxpc0J1ZixjaHVuayxlbmNvZGluZyxjYil7aWYoIWlzQnVmKXt2YXIgbmV3Q2h1bms9ZnVuY3Rpb24gZGVjb2RlQ2h1bmsoc3RhdGUsY2h1bmssZW5jb2Rpbmcpe3N0YXRlLm9iamVjdE1vZGV8fCExPT09c3RhdGUuZGVjb2RlU3RyaW5nc3x8InN0cmluZyIhPXR5cGVvZiBjaHVua3x8KGNodW5rPUJ1ZmZlci5mcm9tKGNodW5rLGVuY29kaW5nKSk7cmV0dXJuIGNodW5rfShzdGF0ZSxjaHVuayxlbmNvZGluZyk7Y2h1bmshPT1uZXdDaHVuayYmKGlzQnVmPSEwLGVuY29kaW5nPSJidWZmZXIiLGNodW5rPW5ld0NodW5rKX12YXIgbGVuPXN0YXRlLm9iamVjdE1vZGU/MTpjaHVuay5sZW5ndGg7c3RhdGUubGVuZ3RoKz1sZW47dmFyIHJldD1zdGF0ZS5sZW5ndGg8c3RhdGUuaGlnaFdhdGVyTWFyaztyZXR8fChzdGF0ZS5uZWVkRHJhaW49ITApO2lmKHN0YXRlLndyaXRpbmd8fHN0YXRlLmNvcmtlZCl7dmFyIGxhc3Q9c3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuayxlbmNvZGluZyxpc0J1ZixjYWxsYmFjazpjYixuZXh0Om51bGx9LGxhc3Q/bGFzdC5uZXh0PXN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q6c3RhdGUuYnVmZmVyZWRSZXF1ZXN0PXN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Qsc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBkb1dyaXRlKHN0cmVhbSxzdGF0ZSwhMSxsZW4sY2h1bmssZW5jb2RpbmcsY2IpO3JldHVybiByZXR9KHRoaXMsc3RhdGUsaXNCdWYsY2h1bmssZW5jb2RpbmcsY2IpKSxyZXR9LFdyaXRhYmxlLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sV3JpdGFibGUucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBzdGF0ZT10aGlzLl93cml0YWJsZVN0YXRlO3N0YXRlLmNvcmtlZCYmKHN0YXRlLmNvcmtlZC0tLHN0YXRlLndyaXRpbmd8fHN0YXRlLmNvcmtlZHx8c3RhdGUuYnVmZmVyUHJvY2Vzc2luZ3x8IXN0YXRlLmJ1ZmZlcmVkUmVxdWVzdHx8Y2xlYXJCdWZmZXIodGhpcyxzdGF0ZSkpfSxXcml0YWJsZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZyl7aWYoInN0cmluZyI9PXR5cGVvZiBlbmNvZGluZyYmKGVuY29kaW5nPWVuY29kaW5nLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKGVuY29kaW5nKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IEVSUl9VTktOT1dOX0VOQ09ESU5HKGVuY29kaW5nKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9ZW5jb2RpbmcsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLFdyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oY2h1bmssZW5jb2RpbmcsY2Ipe2NiKG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgiX3dyaXRlKCkiKSl9LFdyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsV3JpdGFibGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbihjaHVuayxlbmNvZGluZyxjYil7dmFyIHN0YXRlPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGNodW5rPyhjYj1jaHVuayxjaHVuaz1udWxsLGVuY29kaW5nPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBlbmNvZGluZyYmKGNiPWVuY29kaW5nLGVuY29kaW5nPW51bGwpLG51bGwhPWNodW5rJiZ0aGlzLndyaXRlKGNodW5rLGVuY29kaW5nKSxzdGF0ZS5jb3JrZWQmJihzdGF0ZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxzdGF0ZS5lbmRpbmd8fGZ1bmN0aW9uIGVuZFdyaXRhYmxlKHN0cmVhbSxzdGF0ZSxjYil7c3RhdGUuZW5kaW5nPSEwLGZpbmlzaE1heWJlKHN0cmVhbSxzdGF0ZSksY2ImJihzdGF0ZS5maW5pc2hlZD9wcm9jZXNzLm5leHRUaWNrKGNiKTpzdHJlYW0ub25jZSgiZmluaXNoIixjYikpO3N0YXRlLmVuZGVkPSEwLHN0cmVhbS53cml0YWJsZT0hMX0odGhpcyxzdGF0ZSxjYiksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24gZ2V0KCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24gc2V0KHZhbHVlKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dmFsdWUpfX0pLFdyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95PWRlc3Ryb3lJbXBsLmRlc3Ryb3ksV3JpdGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3k9ZGVzdHJveUltcGwudW5kZXN0cm95LFdyaXRhYmxlLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlcnIsY2Ipe2NiKGVycil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3IuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBfT2JqZWN0JHNldFByb3RvdHlwZU8scHJvY2Vzcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvcHJveHkvcHJvY2Vzcy5qcyIpO2Z1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHZhbHVlKXtyZXR1cm4oa2V5PWZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZyl7dmFyIGtleT1mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsaGludCl7aWYoIm9iamVjdCIhPXR5cGVvZiBpbnB1dHx8bnVsbD09PWlucHV0KXJldHVybiBpbnB1dDt2YXIgcHJpbT1pbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXByaW0pe3ZhciByZXM9cHJpbS5jYWxsKGlucHV0LGhpbnR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByZXMpcmV0dXJuIHJlczt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWhpbnQ/U3RyaW5nOk51bWJlcikoaW5wdXQpfShhcmcsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yga2V5P2tleTpTdHJpbmcoa2V5KX0oa2V5KSlpbiBvYmo/T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaixrZXkse3ZhbHVlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6b2JqW2tleV09dmFsdWUsb2JqfXZhciBmaW5pc2hlZD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzIiksa0xhc3RSZXNvbHZlPVN5bWJvbCgibGFzdFJlc29sdmUiKSxrTGFzdFJlamVjdD1TeW1ib2woImxhc3RSZWplY3QiKSxrRXJyb3I9U3ltYm9sKCJlcnJvciIpLGtFbmRlZD1TeW1ib2woImVuZGVkIiksa0xhc3RQcm9taXNlPVN5bWJvbCgibGFzdFByb21pc2UiKSxrSGFuZGxlUHJvbWlzZT1TeW1ib2woImhhbmRsZVByb21pc2UiKSxrU3RyZWFtPVN5bWJvbCgic3RyZWFtIik7ZnVuY3Rpb24gY3JlYXRlSXRlclJlc3VsdCh2YWx1ZSxkb25lKXtyZXR1cm57dmFsdWUsZG9uZX19ZnVuY3Rpb24gcmVhZEFuZFJlc29sdmUoaXRlcil7dmFyIHJlc29sdmU9aXRlcltrTGFzdFJlc29sdmVdO2lmKG51bGwhPT1yZXNvbHZlKXt2YXIgZGF0YT1pdGVyW2tTdHJlYW1dLnJlYWQoKTtudWxsIT09ZGF0YSYmKGl0ZXJba0xhc3RQcm9taXNlXT1udWxsLGl0ZXJba0xhc3RSZXNvbHZlXT1udWxsLGl0ZXJba0xhc3RSZWplY3RdPW51bGwscmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KGRhdGEsITEpKSl9fWZ1bmN0aW9uIG9uUmVhZGFibGUoaXRlcil7cHJvY2Vzcy5uZXh0VGljayhyZWFkQW5kUmVzb2x2ZSxpdGVyKX12YXIgQXN5bmNJdGVyYXRvclByb3RvdHlwZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZnVuY3Rpb24oKXt9KSxSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3JQcm90b3R5cGU9T2JqZWN0LnNldFByb3RvdHlwZU9mKChfZGVmaW5lUHJvcGVydHkoX09iamVjdCRzZXRQcm90b3R5cGVPPXtnZXQgc3RyZWFtKCl7cmV0dXJuIHRoaXNba1N0cmVhbV19LG5leHQ6ZnVuY3Rpb24gbmV4dCgpe3ZhciBfdGhpcz10aGlzLGVycm9yPXRoaXNba0Vycm9yXTtpZihudWxsIT09ZXJyb3IpcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtpZih0aGlzW2tFbmRlZF0pcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHZvaWQgMCwhMCkpO2lmKHRoaXNba1N0cmVhbV0uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLHJlamVjdCl7cHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe190aGlzW2tFcnJvcl0/cmVqZWN0KF90aGlzW2tFcnJvcl0pOnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh2b2lkIDAsITApKX0pfSk7dmFyIHByb21pc2UsbGFzdFByb21pc2U9dGhpc1trTGFzdFByb21pc2VdO2lmKGxhc3RQcm9taXNlKXByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24gd3JhcEZvck5leHQobGFzdFByb21pc2UsaXRlcil7cmV0dXJuIGZ1bmN0aW9uKHJlc29sdmUscmVqZWN0KXtsYXN0UHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7aXRlcltrRW5kZWRdP3Jlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh2b2lkIDAsITApKTppdGVyW2tIYW5kbGVQcm9taXNlXShyZXNvbHZlLHJlamVjdCl9LHJlamVjdCl9fShsYXN0UHJvbWlzZSx0aGlzKSk7ZWxzZXt2YXIgZGF0YT10aGlzW2tTdHJlYW1dLnJlYWQoKTtpZihudWxsIT09ZGF0YSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQoZGF0YSwhMSkpO3Byb21pc2U9bmV3IFByb21pc2UodGhpc1trSGFuZGxlUHJvbWlzZV0pfXJldHVybiB0aGlzW2tMYXN0UHJvbWlzZV09cHJvbWlzZSxwcm9taXNlfX0sU3ltYm9sLmFzeW5jSXRlcmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JHNldFByb3RvdHlwZU8sInJldHVybiIsZnVuY3Rpb24gX3JldHVybigpe3ZhciBfdGhpczI9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSxyZWplY3Qpe190aGlzMltrU3RyZWFtXS5kZXN0cm95KG51bGwsZnVuY3Rpb24oZXJyKXtlcnI/cmVqZWN0KGVycik6cmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHZvaWQgMCwhMCkpfSl9KX0pLF9PYmplY3Qkc2V0UHJvdG90eXBlTyksQXN5bmNJdGVyYXRvclByb3RvdHlwZSk7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yKHN0cmVhbSl7dmFyIF9PYmplY3QkY3JlYXRlLGl0ZXJhdG9yPU9iamVjdC5jcmVhdGUoUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yUHJvdG90eXBlLChfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGU9e30sa1N0cmVhbSx7dmFsdWU6c3RyZWFtLHdyaXRhYmxlOiEwfSksX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLGtMYXN0UmVzb2x2ZSx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSxrTGFzdFJlamVjdCx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSxrRXJyb3Ise3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsa0VuZGVkLHt2YWx1ZTpzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSxrSGFuZGxlUHJvbWlzZSx7dmFsdWU6ZnVuY3Rpb24gdmFsdWUocmVzb2x2ZSxyZWplY3Qpe3ZhciBkYXRhPWl0ZXJhdG9yW2tTdHJlYW1dLnJlYWQoKTtkYXRhPyhpdGVyYXRvcltrTGFzdFByb21pc2VdPW51bGwsaXRlcmF0b3Jba0xhc3RSZXNvbHZlXT1udWxsLGl0ZXJhdG9yW2tMYXN0UmVqZWN0XT1udWxsLHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChkYXRhLCExKSkpOihpdGVyYXRvcltrTGFzdFJlc29sdmVdPXJlc29sdmUsaXRlcmF0b3Jba0xhc3RSZWplY3RdPXJlamVjdCl9LHdyaXRhYmxlOiEwfSksX09iamVjdCRjcmVhdGUpKTtyZXR1cm4gaXRlcmF0b3Jba0xhc3RQcm9taXNlXT1udWxsLGZpbmlzaGVkKHN0cmVhbSxmdW5jdGlvbihlcnIpe2lmKGVyciYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PWVyci5jb2RlKXt2YXIgcmVqZWN0PWl0ZXJhdG9yW2tMYXN0UmVqZWN0XTtyZXR1cm4gbnVsbCE9PXJlamVjdCYmKGl0ZXJhdG9yW2tMYXN0UHJvbWlzZV09bnVsbCxpdGVyYXRvcltrTGFzdFJlc29sdmVdPW51bGwsaXRlcmF0b3Jba0xhc3RSZWplY3RdPW51bGwscmVqZWN0KGVycikpLHZvaWQoaXRlcmF0b3Jba0Vycm9yXT1lcnIpfXZhciByZXNvbHZlPWl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV07bnVsbCE9PXJlc29sdmUmJihpdGVyYXRvcltrTGFzdFByb21pc2VdPW51bGwsaXRlcmF0b3Jba0xhc3RSZXNvbHZlXT1udWxsLGl0ZXJhdG9yW2tMYXN0UmVqZWN0XT1udWxsLHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh2b2lkIDAsITApKSksaXRlcmF0b3Jba0VuZGVkXT0hMH0pLHN0cmVhbS5vbigicmVhZGFibGUiLG9uUmVhZGFibGUuYmluZChudWxsLGl0ZXJhdG9yKSksaXRlcmF0b3J9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYnVmZmVyX2xpc3QuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG93bktleXMob2JqZWN0LGVudW1lcmFibGVPbmx5KXt2YXIga2V5cz1PYmplY3Qua2V5cyhvYmplY3QpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBzeW1ib2xzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtlbnVtZXJhYmxlT25seSYmKHN5bWJvbHM9c3ltYm9scy5maWx0ZXIoZnVuY3Rpb24oc3ltKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3Qsc3ltKS5lbnVtZXJhYmxlfSkpLGtleXMucHVzaC5hcHBseShrZXlzLHN5bWJvbHMpfXJldHVybiBrZXlzfWZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgc291cmNlPW51bGwhPWFyZ3VtZW50c1tpXT9hcmd1bWVudHNbaV06e307aSUyP293bktleXMoT2JqZWN0KHNvdXJjZSksITApLmZvckVhY2goZnVuY3Rpb24oa2V5KXtfZGVmaW5lUHJvcGVydHkodGFyZ2V0LGtleSxzb3VyY2Vba2V5XSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk6b3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbihrZXkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLGtleSkpfSl9cmV0dXJuIHRhcmdldH1mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLGtleSx2YWx1ZSl7cmV0dXJuKGtleT1fdG9Qcm9wZXJ0eUtleShrZXkpKWluIG9iaj9PYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLGtleSx7dmFsdWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpvYmpba2V5XT12YWx1ZSxvYmp9ZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8fCExLGRlc2NyaXB0b3IuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkZXNjcmlwdG9yJiYoZGVzY3JpcHRvci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCxfdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksZGVzY3JpcHRvcil9fWZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZyl7dmFyIGtleT1mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsaGludCl7aWYoIm9iamVjdCIhPXR5cGVvZiBpbnB1dHx8bnVsbD09PWlucHV0KXJldHVybiBpbnB1dDt2YXIgcHJpbT1pbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXByaW0pe3ZhciByZXM9cHJpbS5jYWxsKGlucHV0LGhpbnR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByZXMpcmV0dXJuIHJlczt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWhpbnQ/U3RyaW5nOk51bWJlcikoaW5wdXQpfShhcmcsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yga2V5P2tleTpTdHJpbmcoa2V5KX12YXIgQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKS5CdWZmZXIsaW5zcGVjdD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvdXRpbC91dGlsLmpzIikuaW5zcGVjdCxjdXN0b209aW5zcGVjdCYmaW5zcGVjdC5jdXN0b218fCJpbnNwZWN0IjtmdW5jdGlvbiBjb3B5QnVmZmVyKHNyYyx0YXJnZXQsb2Zmc2V0KXtCdWZmZXIucHJvdG90eXBlLmNvcHkuY2FsbChzcmMsdGFyZ2V0LG9mZnNldCl9bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBCdWZmZXJMaXN0KCl7IWZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSxDb25zdHJ1Y3Rvcil7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxCdWZmZXJMaXN0KSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IscHJvdG9Qcm9wcyxzdGF0aWNQcm9wcyl7cmV0dXJuIHByb3RvUHJvcHMmJl9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSxwcm90b1Byb3BzKSxzdGF0aWNQcm9wcyYmX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3Isc3RhdGljUHJvcHMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxDb25zdHJ1Y3Rvcn0oQnVmZmVyTGlzdCxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24gcHVzaCh2KXt2YXIgZW50cnk9e2RhdGE6dixuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9ZW50cnk6dGhpcy5oZWFkPWVudHJ5LHRoaXMudGFpbD1lbnRyeSwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24gdW5zaGlmdCh2KXt2YXIgZW50cnk9e2RhdGE6dixuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPWVudHJ5KSx0aGlzLmhlYWQ9ZW50cnksKyt0aGlzLmxlbmd0aH19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbiBzaGlmdCgpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIHJldD10aGlzLmhlYWQuZGF0YTtyZXR1cm4gMT09PXRoaXMubGVuZ3RoP3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQ9dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxyZXR9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uIGNsZWFyKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2YWx1ZTpmdW5jdGlvbiBqb2luKHMpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIHA9dGhpcy5oZWFkLHJldD0iIitwLmRhdGE7cD1wLm5leHQ7KXJldCs9cytwLmRhdGE7cmV0dXJuIHJldH19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24gY29uY2F0KG4pe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gQnVmZmVyLmFsbG9jKDApO2Zvcih2YXIgcmV0PUJ1ZmZlci5hbGxvY1Vuc2FmZShuPj4+MCkscD10aGlzLmhlYWQsaT0wO3A7KWNvcHlCdWZmZXIocC5kYXRhLHJldCxpKSxpKz1wLmRhdGEubGVuZ3RoLHA9cC5uZXh0O3JldHVybiByZXR9fSx7a2V5OiJjb25zdW1lIix2YWx1ZTpmdW5jdGlvbiBjb25zdW1lKG4saGFzU3RyaW5ncyl7dmFyIHJldDtyZXR1cm4gbjx0aGlzLmhlYWQuZGF0YS5sZW5ndGg/KHJldD10aGlzLmhlYWQuZGF0YS5zbGljZSgwLG4pLHRoaXMuaGVhZC5kYXRhPXRoaXMuaGVhZC5kYXRhLnNsaWNlKG4pKTpyZXQ9bj09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6aGFzU3RyaW5ncz90aGlzLl9nZXRTdHJpbmcobik6dGhpcy5fZ2V0QnVmZmVyKG4pLHJldH19LHtrZXk6ImZpcnN0Iix2YWx1ZTpmdW5jdGlvbiBmaXJzdCgpe3JldHVybiB0aGlzLmhlYWQuZGF0YX19LHtrZXk6Il9nZXRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uIF9nZXRTdHJpbmcobil7dmFyIHA9dGhpcy5oZWFkLGM9MSxyZXQ9cC5kYXRhO2ZvcihuLT1yZXQubGVuZ3RoO3A9cC5uZXh0Oyl7dmFyIHN0cj1wLmRhdGEsbmI9bj5zdHIubGVuZ3RoP3N0ci5sZW5ndGg6bjtpZihuYj09PXN0ci5sZW5ndGg/cmV0Kz1zdHI6cmV0Kz1zdHIuc2xpY2UoMCxuKSwwPT09KG4tPW5iKSl7bmI9PT1zdHIubGVuZ3RoPygrK2MscC5uZXh0P3RoaXMuaGVhZD1wLm5leHQ6dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPXAscC5kYXRhPXN0ci5zbGljZShuYikpO2JyZWFrfSsrY31yZXR1cm4gdGhpcy5sZW5ndGgtPWMscmV0fX0se2tleToiX2dldEJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24gX2dldEJ1ZmZlcihuKXt2YXIgcmV0PUJ1ZmZlci5hbGxvY1Vuc2FmZShuKSxwPXRoaXMuaGVhZCxjPTE7Zm9yKHAuZGF0YS5jb3B5KHJldCksbi09cC5kYXRhLmxlbmd0aDtwPXAubmV4dDspe3ZhciBidWY9cC5kYXRhLG5iPW4+YnVmLmxlbmd0aD9idWYubGVuZ3RoOm47aWYoYnVmLmNvcHkocmV0LHJldC5sZW5ndGgtbiwwLG5iKSwwPT09KG4tPW5iKSl7bmI9PT1idWYubGVuZ3RoPygrK2MscC5uZXh0P3RoaXMuaGVhZD1wLm5leHQ6dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPXAscC5kYXRhPWJ1Zi5zbGljZShuYikpO2JyZWFrfSsrY31yZXR1cm4gdGhpcy5sZW5ndGgtPWMscmV0fX0se2tleTpjdXN0b20sdmFsdWU6ZnVuY3Rpb24gdmFsdWUoXyxvcHRpb25zKXtyZXR1cm4gaW5zcGVjdCh0aGlzLF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSxvcHRpb25zKSx7fSx7ZGVwdGg6MCxjdXN0b21JbnNwZWN0OiExfSkpfX1dKSxCdWZmZXJMaXN0fSgpfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHByb2Nlc3M9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL3Byb3h5L3Byb2Nlc3MuanMiKTtmdW5jdGlvbiBlbWl0RXJyb3JBbmRDbG9zZU5UKHNlbGYsZXJyKXtlbWl0RXJyb3JOVChzZWxmLGVyciksZW1pdENsb3NlTlQoc2VsZil9ZnVuY3Rpb24gZW1pdENsb3NlTlQoc2VsZil7c2VsZi5fd3JpdGFibGVTdGF0ZSYmIXNlbGYuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHxzZWxmLl9yZWFkYWJsZVN0YXRlJiYhc2VsZi5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHNlbGYuZW1pdCgiY2xvc2UiKX1mdW5jdGlvbiBlbWl0RXJyb3JOVChzZWxmLGVycil7c2VsZi5lbWl0KCJlcnJvciIsZXJyKX1tb2R1bGUuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiBkZXN0cm95KGVycixjYil7dmFyIF90aGlzPXRoaXMscmVhZGFibGVEZXN0cm95ZWQ9dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQsd3JpdGFibGVEZXN0cm95ZWQ9dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7cmV0dXJuIHJlYWRhYmxlRGVzdHJveWVkfHx3cml0YWJsZURlc3Ryb3llZD8oY2I/Y2IoZXJyKTplcnImJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JOVCx0aGlzLGVycikpOnByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yTlQsdGhpcyxlcnIpKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3koZXJyfHxudWxsLGZ1bmN0aW9uKGVycil7IWNiJiZlcnI/X3RoaXMuX3dyaXRhYmxlU3RhdGU/X3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkP3Byb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlTlQsX3RoaXMpOihfdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JBbmRDbG9zZU5ULF90aGlzLGVycikpOnByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQW5kQ2xvc2VOVCxfdGhpcyxlcnIpOmNiPyhwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULF90aGlzKSxjYihlcnIpKTpwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULF90aGlzKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24gdW5kZXN0cm95KCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbiBlcnJvck9yRGVzdHJveShzdHJlYW0sZXJyKXt2YXIgclN0YXRlPXN0cmVhbS5fcmVhZGFibGVTdGF0ZSx3U3RhdGU9c3RyZWFtLl93cml0YWJsZVN0YXRlO3JTdGF0ZSYmclN0YXRlLmF1dG9EZXN0cm95fHx3U3RhdGUmJndTdGF0ZS5hdXRvRGVzdHJveT9zdHJlYW0uZGVzdHJveShlcnIpOnN0cmVhbS5lbWl0KCJlcnJvciIsZXJyKX19fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2Vycm9ycy1icm93c2VyLmpzIikuRi5FUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRTtmdW5jdGlvbiBub29wKCl7fW1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGVvcyhzdHJlYW0sb3B0cyxjYWxsYmFjayl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG9wdHMpcmV0dXJuIGVvcyhzdHJlYW0sbnVsbCxvcHRzKTtvcHRzfHwob3B0cz17fSksY2FsbGJhY2s9ZnVuY3Rpb24gb25jZShjYWxsYmFjayl7dmFyIGNhbGxlZD0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighY2FsbGVkKXtjYWxsZWQ9ITA7Zm9yKHZhciBfbGVuPWFyZ3VtZW50cy5sZW5ndGgsYXJncz1uZXcgQXJyYXkoX2xlbiksX2tleT0wO19rZXk8X2xlbjtfa2V5KyspYXJnc1tfa2V5XT1hcmd1bWVudHNbX2tleV07Y2FsbGJhY2suYXBwbHkodGhpcyxhcmdzKX19fShjYWxsYmFja3x8bm9vcCk7dmFyIHJlYWRhYmxlPW9wdHMucmVhZGFibGV8fCExIT09b3B0cy5yZWFkYWJsZSYmc3RyZWFtLnJlYWRhYmxlLHdyaXRhYmxlPW9wdHMud3JpdGFibGV8fCExIT09b3B0cy53cml0YWJsZSYmc3RyZWFtLndyaXRhYmxlLG9ubGVnYWN5ZmluaXNoPWZ1bmN0aW9uIG9ubGVnYWN5ZmluaXNoKCl7c3RyZWFtLndyaXRhYmxlfHxvbmZpbmlzaCgpfSx3cml0YWJsZUVuZGVkPXN0cmVhbS5fd3JpdGFibGVTdGF0ZSYmc3RyZWFtLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLG9uZmluaXNoPWZ1bmN0aW9uIG9uZmluaXNoKCl7d3JpdGFibGU9ITEsd3JpdGFibGVFbmRlZD0hMCxyZWFkYWJsZXx8Y2FsbGJhY2suY2FsbChzdHJlYW0pfSxyZWFkYWJsZUVuZGVkPXN0cmVhbS5fcmVhZGFibGVTdGF0ZSYmc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsb25lbmQ9ZnVuY3Rpb24gb25lbmQoKXtyZWFkYWJsZT0hMSxyZWFkYWJsZUVuZGVkPSEwLHdyaXRhYmxlfHxjYWxsYmFjay5jYWxsKHN0cmVhbSl9LG9uZXJyb3I9ZnVuY3Rpb24gb25lcnJvcihlcnIpe2NhbGxiYWNrLmNhbGwoc3RyZWFtLGVycil9LG9uY2xvc2U9ZnVuY3Rpb24gb25jbG9zZSgpe3ZhciBlcnI7cmV0dXJuIHJlYWRhYmxlJiYhcmVhZGFibGVFbmRlZD8oc3RyZWFtLl9yZWFkYWJsZVN0YXRlJiZzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kZWR8fChlcnI9bmV3IEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFKSxjYWxsYmFjay5jYWxsKHN0cmVhbSxlcnIpKTp3cml0YWJsZSYmIXdyaXRhYmxlRW5kZWQ/KHN0cmVhbS5fd3JpdGFibGVTdGF0ZSYmc3RyZWFtLl93cml0YWJsZVN0YXRlLmVuZGVkfHwoZXJyPW5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSksY2FsbGJhY2suY2FsbChzdHJlYW0sZXJyKSk6dm9pZCAwfSxvbnJlcXVlc3Q9ZnVuY3Rpb24gb25yZXF1ZXN0KCl7c3RyZWFtLnJlcS5vbigiZmluaXNoIixvbmZpbmlzaCl9O3JldHVybiFmdW5jdGlvbiBpc1JlcXVlc3Qoc3RyZWFtKXtyZXR1cm4gc3RyZWFtLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIHN0cmVhbS5hYm9ydH0oc3RyZWFtKT93cml0YWJsZSYmIXN0cmVhbS5fd3JpdGFibGVTdGF0ZSYmKHN0cmVhbS5vbigiZW5kIixvbmxlZ2FjeWZpbmlzaCksc3RyZWFtLm9uKCJjbG9zZSIsb25sZWdhY3lmaW5pc2gpKTooc3RyZWFtLm9uKCJjb21wbGV0ZSIsb25maW5pc2gpLHN0cmVhbS5vbigiYWJvcnQiLG9uY2xvc2UpLHN0cmVhbS5yZXE/b25yZXF1ZXN0KCk6c3RyZWFtLm9uKCJyZXF1ZXN0IixvbnJlcXVlc3QpKSxzdHJlYW0ub24oImVuZCIsb25lbmQpLHN0cmVhbS5vbigiZmluaXNoIixvbmZpbmlzaCksITEhPT1vcHRzLmVycm9yJiZzdHJlYW0ub24oImVycm9yIixvbmVycm9yKSxzdHJlYW0ub24oImNsb3NlIixvbmNsb3NlKSxmdW5jdGlvbigpe3N0cmVhbS5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLG9uZmluaXNoKSxzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImFib3J0IixvbmNsb3NlKSxzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoInJlcXVlc3QiLG9ucmVxdWVzdCksc3RyZWFtLnJlcSYmc3RyZWFtLnJlcS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixvbmZpbmlzaCksc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJlbmQiLG9ubGVnYWN5ZmluaXNoKSxzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixvbmxlZ2FjeWZpbmlzaCksc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLG9uZmluaXNoKSxzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImVuZCIsb25lbmQpLHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLG9uZXJyb3IpLHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLG9uY2xvc2UpfX19LCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9mcm9tLWJyb3dzZXIuanMiKG1vZHVsZSl7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3BpcGVsaW5lLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgZW9zO3ZhciBfcmVxdWlyZSRjb2Rlcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9lcnJvcnMtYnJvd3Nlci5qcyIpLkYsRVJSX01JU1NJTkdfQVJHUz1fcmVxdWlyZSRjb2Rlcy5FUlJfTUlTU0lOR19BUkdTLEVSUl9TVFJFQU1fREVTVFJPWUVEPV9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIG5vb3AoZXJyKXtpZihlcnIpdGhyb3cgZXJyfWZ1bmN0aW9uIGNhbGwoZm4pe2ZuKCl9ZnVuY3Rpb24gcGlwZShmcm9tLHRvKXtyZXR1cm4gZnJvbS5waXBlKHRvKX1tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBwaXBlbGluZSgpe2Zvcih2YXIgX2xlbj1hcmd1bWVudHMubGVuZ3RoLHN0cmVhbXM9bmV3IEFycmF5KF9sZW4pLF9rZXk9MDtfa2V5PF9sZW47X2tleSsrKXN0cmVhbXNbX2tleV09YXJndW1lbnRzW19rZXldO3ZhciBlcnJvcixjYWxsYmFjaz1mdW5jdGlvbiBwb3BDYWxsYmFjayhzdHJlYW1zKXtyZXR1cm4gc3RyZWFtcy5sZW5ndGg/ImZ1bmN0aW9uIiE9dHlwZW9mIHN0cmVhbXNbc3RyZWFtcy5sZW5ndGgtMV0/bm9vcDpzdHJlYW1zLnBvcCgpOm5vb3B9KHN0cmVhbXMpO2lmKEFycmF5LmlzQXJyYXkoc3RyZWFtc1swXSkmJihzdHJlYW1zPXN0cmVhbXNbMF0pLHN0cmVhbXMubGVuZ3RoPDIpdGhyb3cgbmV3IEVSUl9NSVNTSU5HX0FSR1MoInN0cmVhbXMiKTt2YXIgZGVzdHJveXM9c3RyZWFtcy5tYXAoZnVuY3Rpb24oc3RyZWFtLGkpe3ZhciByZWFkaW5nPWk8c3RyZWFtcy5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24gZGVzdHJveWVyKHN0cmVhbSxyZWFkaW5nLHdyaXRpbmcsY2FsbGJhY2spe2NhbGxiYWNrPWZ1bmN0aW9uIG9uY2UoY2FsbGJhY2spe3ZhciBjYWxsZWQ9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7Y2FsbGVkfHwoY2FsbGVkPSEwLGNhbGxiYWNrLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX19KGNhbGxiYWNrKTt2YXIgY2xvc2VkPSExO3N0cmVhbS5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7Y2xvc2VkPSEwfSksdm9pZCAwPT09ZW9zJiYoZW9zPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMiKSksZW9zKHN0cmVhbSx7cmVhZGFibGU6cmVhZGluZyx3cml0YWJsZTp3cml0aW5nfSxmdW5jdGlvbihlcnIpe2lmKGVycilyZXR1cm4gY2FsbGJhY2soZXJyKTtjbG9zZWQ9ITAsY2FsbGJhY2soKX0pO3ZhciBkZXN0cm95ZWQ9ITE7cmV0dXJuIGZ1bmN0aW9uKGVycil7aWYoIWNsb3NlZCYmIWRlc3Ryb3llZClyZXR1cm4gZGVzdHJveWVkPSEwLGZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pe3JldHVybiBzdHJlYW0uc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2Ygc3RyZWFtLmFib3J0fShzdHJlYW0pP3N0cmVhbS5hYm9ydCgpOiJmdW5jdGlvbiI9PXR5cGVvZiBzdHJlYW0uZGVzdHJveT9zdHJlYW0uZGVzdHJveSgpOnZvaWQgY2FsbGJhY2soZXJyfHxuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoInBpcGUiKSl9fShzdHJlYW0scmVhZGluZyxpPjAsZnVuY3Rpb24oZXJyKXtlcnJvcnx8KGVycm9yPWVyciksZXJyJiZkZXN0cm95cy5mb3JFYWNoKGNhbGwpLHJlYWRpbmd8fChkZXN0cm95cy5mb3JFYWNoKGNhbGwpLGNhbGxiYWNrKGVycm9yKSl9KX0pO3JldHVybiBzdHJlYW1zLnJlZHVjZShwaXBlKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZS5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIEVSUl9JTlZBTElEX09QVF9WQUxVRT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9lcnJvcnMtYnJvd3Nlci5qcyIpLkYuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO21vZHVsZS5leHBvcnRzPXtnZXRIaWdoV2F0ZXJNYXJrOmZ1bmN0aW9uIGdldEhpZ2hXYXRlck1hcmsoc3RhdGUsb3B0aW9ucyxkdXBsZXhLZXksaXNEdXBsZXgpe3ZhciBod209ZnVuY3Rpb24gaGlnaFdhdGVyTWFya0Zyb20ob3B0aW9ucyxpc0R1cGxleCxkdXBsZXhLZXkpe3JldHVybiBudWxsIT1vcHRpb25zLmhpZ2hXYXRlck1hcms/b3B0aW9ucy5oaWdoV2F0ZXJNYXJrOmlzRHVwbGV4P29wdGlvbnNbZHVwbGV4S2V5XTpudWxsfShvcHRpb25zLGlzRHVwbGV4LGR1cGxleEtleSk7aWYobnVsbCE9aHdtKXtpZighaXNGaW5pdGUoaHdtKXx8TWF0aC5mbG9vcihod20pIT09aHdtfHxod208MCl0aHJvdyBuZXcgRVJSX0lOVkFMSURfT1BUX1ZBTFVFKGlzRHVwbGV4P2R1cGxleEtleToiaGlnaFdhdGVyTWFyayIsaHdtKTtyZXR1cm4gTWF0aC5mbG9vcihod20pfXJldHVybiBzdGF0ZS5vYmplY3RNb2RlPzE2OjE2Mzg0fX19LCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0tYnJvd3Nlci5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXttb2R1bGUuZXhwb3J0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIpLkV2ZW50RW1pdHRlcn0sIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9pbmRleC5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgQ2xpZW50UmVxdWVzdD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbGliL3JlcXVlc3QuanMiKSxyZXNwb25zZT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbGliL3Jlc3BvbnNlLmpzIiksZXh0ZW5kPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy94dGVuZC9pbW11dGFibGUuanMiKSxzdGF0dXNDb2Rlcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYnVpbHRpbi1zdGF0dXMtY29kZXMvYnJvd3Nlci5qcyIpLHVybD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvcHJveHkvdXJsLmpzIiksaHR0cD1leHBvcnRzO2h0dHAucmVxdWVzdD1mdW5jdGlvbihvcHRzLGNiKXtvcHRzPSJzdHJpbmciPT10eXBlb2Ygb3B0cz91cmwucGFyc2Uob3B0cyk6ZXh0ZW5kKG9wdHMpO3ZhciBkZWZhdWx0UHJvdG9jb2w9LTE9PT1fX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24ucHJvdG9jb2wuc2VhcmNoKC9eaHR0cHM/OiQvKT8iaHR0cDoiOiIiLHByb3RvY29sPW9wdHMucHJvdG9jb2x8fGRlZmF1bHRQcm90b2NvbCxob3N0PW9wdHMuaG9zdG5hbWV8fG9wdHMuaG9zdCxwb3J0PW9wdHMucG9ydCxwYXRoPW9wdHMucGF0aHx8Ii8iO2hvc3QmJi0xIT09aG9zdC5pbmRleE9mKCI6IikmJihob3N0PSJbIitob3N0KyJdIiksb3B0cy51cmw9KGhvc3Q/cHJvdG9jb2wrIi8vIitob3N0OiIiKSsocG9ydD8iOiIrcG9ydDoiIikrcGF0aCxvcHRzLm1ldGhvZD0ob3B0cy5tZXRob2R8fCJHRVQiKS50b1VwcGVyQ2FzZSgpLG9wdHMuaGVhZGVycz1vcHRzLmhlYWRlcnN8fHt9O3ZhciByZXE9bmV3IENsaWVudFJlcXVlc3Qob3B0cyk7cmV0dXJuIGNiJiZyZXEub24oInJlc3BvbnNlIixjYikscmVxfSxodHRwLmdldD1mdW5jdGlvbiBnZXQob3B0cyxjYil7dmFyIHJlcT1odHRwLnJlcXVlc3Qob3B0cyxjYik7cmV0dXJuIHJlcS5lbmQoKSxyZXF9LGh0dHAuQ2xpZW50UmVxdWVzdD1DbGllbnRSZXF1ZXN0LGh0dHAuSW5jb21pbmdNZXNzYWdlPXJlc3BvbnNlLkluY29taW5nTWVzc2FnZSxodHRwLkFnZW50PWZ1bmN0aW9uKCl7fSxodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzPTQsaHR0cC5nbG9iYWxBZ2VudD1uZXcgaHR0cC5BZ2VudCxodHRwLlNUQVRVU19DT0RFUz1zdGF0dXNDb2RlcyxodHRwLk1FVEhPRFM9WyJDSEVDS09VVCIsIkNPTk5FQ1QiLCJDT1BZIiwiREVMRVRFIiwiR0VUIiwiSEVBRCIsIkxPQ0siLCJNLVNFQVJDSCIsIk1FUkdFIiwiTUtBQ1RJVklUWSIsIk1LQ09MIiwiTU9WRSIsIk5PVElGWSIsIk9QVElPTlMiLCJQQVRDSCIsIlBPU1QiLCJQUk9QRklORCIsIlBST1BQQVRDSCIsIlBVUkdFIiwiUFVUIiwiUkVQT1JUIiwiU0VBUkNIIiwiU1VCU0NSSUJFIiwiVFJBQ0UiLCJVTkxPQ0siLCJVTlNVQlNDUklCRSJdfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL2xpYi9jYXBhYmlsaXR5LmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciB4aHI7ZnVuY3Rpb24gZ2V0WEhSKCl7aWYodm9pZCAwIT09eGhyKXJldHVybiB4aHI7aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5nLlhNTEh0dHBSZXF1ZXN0KXt4aHI9bmV3IF9fd2VicGFja19yZXF1aXJlX18uZy5YTUxIdHRwUmVxdWVzdDt0cnl7eGhyLm9wZW4oIkdFVCIsX193ZWJwYWNrX3JlcXVpcmVfXy5nLlhEb21haW5SZXF1ZXN0PyIvIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIpfWNhdGNoKGUpe3hocj1udWxsfX1lbHNlIHhocj1udWxsO3JldHVybiB4aHJ9ZnVuY3Rpb24gY2hlY2tUeXBlU3VwcG9ydCh0eXBlKXt2YXIgeGhyPWdldFhIUigpO2lmKCF4aHIpcmV0dXJuITE7dHJ5e3JldHVybiB4aHIucmVzcG9uc2VUeXBlPXR5cGUseGhyLnJlc3BvbnNlVHlwZT09PXR5cGV9Y2F0Y2goZSl7fXJldHVybiExfWZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB2YWx1ZX1leHBvcnRzLmZldGNoPWlzRnVuY3Rpb24oX193ZWJwYWNrX3JlcXVpcmVfXy5nLmZldGNoKSYmaXNGdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fLmcuUmVhZGFibGVTdHJlYW0pLGV4cG9ydHMud3JpdGFibGVTdHJlYW09aXNGdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fLmcuV3JpdGFibGVTdHJlYW0pLGV4cG9ydHMuYWJvcnRDb250cm9sbGVyPWlzRnVuY3Rpb24oX193ZWJwYWNrX3JlcXVpcmVfXy5nLkFib3J0Q29udHJvbGxlciksZXhwb3J0cy5hcnJheWJ1ZmZlcj1leHBvcnRzLmZldGNofHxjaGVja1R5cGVTdXBwb3J0KCJhcnJheWJ1ZmZlciIpLGV4cG9ydHMubXNzdHJlYW09IWV4cG9ydHMuZmV0Y2gmJmNoZWNrVHlwZVN1cHBvcnQoIm1zLXN0cmVhbSIpLGV4cG9ydHMubW96Y2h1bmtlZGFycmF5YnVmZmVyPSFleHBvcnRzLmZldGNoJiZjaGVja1R5cGVTdXBwb3J0KCJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlciIpLGV4cG9ydHMub3ZlcnJpZGVNaW1lVHlwZT1leHBvcnRzLmZldGNofHwhIWdldFhIUigpJiZpc0Z1bmN0aW9uKGdldFhIUigpLm92ZXJyaWRlTWltZVR5cGUpLHhocj1udWxsfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL2xpYi9yZXF1ZXN0LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpLHByb2Nlc3M9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL3Byb3h5L3Byb2Nlc3MuanMiKSxjYXBhYmlsaXR5PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9saWIvY2FwYWJpbGl0eS5qcyIpLGluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIikscmVzcG9uc2U9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL2xpYi9yZXNwb25zZS5qcyIpLHN0cmVhbT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9yZWFkYWJsZS1icm93c2VyLmpzIiksSW5jb21pbmdNZXNzYWdlPXJlc3BvbnNlLkluY29taW5nTWVzc2FnZSxyU3RhdGVzPXJlc3BvbnNlLnJlYWR5U3RhdGVzO3ZhciBDbGllbnRSZXF1ZXN0PW1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKG9wdHMpe3ZhciBwcmVmZXJCaW5hcnksc2VsZj10aGlzO3N0cmVhbS5Xcml0YWJsZS5jYWxsKHNlbGYpLHNlbGYuX29wdHM9b3B0cyxzZWxmLl9ib2R5PVtdLHNlbGYuX2hlYWRlcnM9e30sb3B0cy5hdXRoJiZzZWxmLnNldEhlYWRlcigiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrQnVmZmVyLmZyb20ob3B0cy5hdXRoKS50b1N0cmluZygiYmFzZTY0IikpLE9iamVjdC5rZXlzKG9wdHMuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKXtzZWxmLnNldEhlYWRlcihuYW1lLG9wdHMuaGVhZGVyc1tuYW1lXSl9KTt2YXIgdXNlRmV0Y2g9ITA7aWYoImRpc2FibGUtZmV0Y2giPT09b3B0cy5tb2RlfHwicmVxdWVzdFRpbWVvdXQiaW4gb3B0cyYmIWNhcGFiaWxpdHkuYWJvcnRDb250cm9sbGVyKXVzZUZldGNoPSExLHByZWZlckJpbmFyeT0hMDtlbHNlIGlmKCJwcmVmZXItc3RyZWFtaW5nIj09PW9wdHMubW9kZSlwcmVmZXJCaW5hcnk9ITE7ZWxzZSBpZigiYWxsb3ctd3JvbmctY29udGVudC10eXBlIj09PW9wdHMubW9kZSlwcmVmZXJCaW5hcnk9IWNhcGFiaWxpdHkub3ZlcnJpZGVNaW1lVHlwZTtlbHNle2lmKG9wdHMubW9kZSYmImRlZmF1bHQiIT09b3B0cy5tb2RlJiYicHJlZmVyLWZhc3QiIT09b3B0cy5tb2RlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3Igb3B0cy5tb2RlIik7cHJlZmVyQmluYXJ5PSEwfXNlbGYuX21vZGU9ZnVuY3Rpb24gZGVjaWRlTW9kZShwcmVmZXJCaW5hcnksdXNlRmV0Y2gpe3JldHVybiBjYXBhYmlsaXR5LmZldGNoJiZ1c2VGZXRjaD8iZmV0Y2giOmNhcGFiaWxpdHkubW96Y2h1bmtlZGFycmF5YnVmZmVyPyJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlciI6Y2FwYWJpbGl0eS5tc3N0cmVhbT8ibXMtc3RyZWFtIjpjYXBhYmlsaXR5LmFycmF5YnVmZmVyJiZwcmVmZXJCaW5hcnk/ImFycmF5YnVmZmVyIjoidGV4dCJ9KHByZWZlckJpbmFyeSx1c2VGZXRjaCksc2VsZi5fZmV0Y2hUaW1lcj1udWxsLHNlbGYuX3NvY2tldFRpbWVvdXQ9bnVsbCxzZWxmLl9zb2NrZXRUaW1lcj1udWxsLHNlbGYub24oImZpbmlzaCIsZnVuY3Rpb24oKXtzZWxmLl9vbkZpbmlzaCgpfSl9O2luaGVyaXRzKENsaWVudFJlcXVlc3Qsc3RyZWFtLldyaXRhYmxlKSxDbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5zZXRIZWFkZXI9ZnVuY3Rpb24obmFtZSx2YWx1ZSl7dmFyIGxvd2VyTmFtZT1uYW1lLnRvTG93ZXJDYXNlKCk7LTE9PT11bnNhZmVIZWFkZXJzLmluZGV4T2YobG93ZXJOYW1lKSYmKHRoaXMuX2hlYWRlcnNbbG93ZXJOYW1lXT17bmFtZSx2YWx1ZX0pfSxDbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5nZXRIZWFkZXI9ZnVuY3Rpb24obmFtZSl7dmFyIGhlYWRlcj10aGlzLl9oZWFkZXJzW25hbWUudG9Mb3dlckNhc2UoKV07cmV0dXJuIGhlYWRlcj9oZWFkZXIudmFsdWU6bnVsbH0sQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUucmVtb3ZlSGVhZGVyPWZ1bmN0aW9uKG5hbWUpe2RlbGV0ZSB0aGlzLl9oZWFkZXJzW25hbWUudG9Mb3dlckNhc2UoKV19LENsaWVudFJlcXVlc3QucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3ZhciBzZWxmPXRoaXM7aWYoIXNlbGYuX2Rlc3Ryb3llZCl7dmFyIG9wdHM9c2VsZi5fb3B0czsidGltZW91dCJpbiBvcHRzJiYwIT09b3B0cy50aW1lb3V0JiZzZWxmLnNldFRpbWVvdXQob3B0cy50aW1lb3V0KTt2YXIgaGVhZGVyc09iaj1zZWxmLl9oZWFkZXJzLGJvZHk9bnVsbDsiR0VUIiE9PW9wdHMubWV0aG9kJiYiSEVBRCIhPT1vcHRzLm1ldGhvZCYmKGJvZHk9bmV3IEJsb2Ioc2VsZi5fYm9keSx7dHlwZTooaGVhZGVyc09ialsiY29udGVudC10eXBlIl18fHt9KS52YWx1ZXx8IiJ9KSk7dmFyIGhlYWRlcnNMaXN0PVtdO2lmKE9iamVjdC5rZXlzKGhlYWRlcnNPYmopLmZvckVhY2goZnVuY3Rpb24oa2V5TmFtZSl7dmFyIG5hbWU9aGVhZGVyc09ialtrZXlOYW1lXS5uYW1lLHZhbHVlPWhlYWRlcnNPYmpba2V5TmFtZV0udmFsdWU7QXJyYXkuaXNBcnJheSh2YWx1ZSk/dmFsdWUuZm9yRWFjaChmdW5jdGlvbih2KXtoZWFkZXJzTGlzdC5wdXNoKFtuYW1lLHZdKX0pOmhlYWRlcnNMaXN0LnB1c2goW25hbWUsdmFsdWVdKX0pLCJmZXRjaCI9PT1zZWxmLl9tb2RlKXt2YXIgc2lnbmFsPW51bGw7aWYoY2FwYWJpbGl0eS5hYm9ydENvbnRyb2xsZXIpe3ZhciBjb250cm9sbGVyPW5ldyBBYm9ydENvbnRyb2xsZXI7c2lnbmFsPWNvbnRyb2xsZXIuc2lnbmFsLHNlbGYuX2ZldGNoQWJvcnRDb250cm9sbGVyPWNvbnRyb2xsZXIsInJlcXVlc3RUaW1lb3V0ImluIG9wdHMmJjAhPT1vcHRzLnJlcXVlc3RUaW1lb3V0JiYoc2VsZi5fZmV0Y2hUaW1lcj1fX3dlYnBhY2tfcmVxdWlyZV9fLmcuc2V0VGltZW91dChmdW5jdGlvbigpe3NlbGYuZW1pdCgicmVxdWVzdFRpbWVvdXQiKSxzZWxmLl9mZXRjaEFib3J0Q29udHJvbGxlciYmc2VsZi5fZmV0Y2hBYm9ydENvbnRyb2xsZXIuYWJvcnQoKX0sb3B0cy5yZXF1ZXN0VGltZW91dCkpfV9fd2VicGFja19yZXF1aXJlX18uZy5mZXRjaChzZWxmLl9vcHRzLnVybCx7bWV0aG9kOnNlbGYuX29wdHMubWV0aG9kLGhlYWRlcnM6aGVhZGVyc0xpc3QsYm9keTpib2R5fHx2b2lkIDAsbW9kZToiY29ycyIsY3JlZGVudGlhbHM6b3B0cy53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiIsc2lnbmFsfSkudGhlbihmdW5jdGlvbihyZXNwb25zZSl7c2VsZi5fZmV0Y2hSZXNwb25zZT1yZXNwb25zZSxzZWxmLl9yZXNldFRpbWVycyghMSksc2VsZi5fY29ubmVjdCgpfSxmdW5jdGlvbihyZWFzb24pe3NlbGYuX3Jlc2V0VGltZXJzKCEwKSxzZWxmLl9kZXN0cm95ZWR8fHNlbGYuZW1pdCgiZXJyb3IiLHJlYXNvbil9KX1lbHNle3ZhciB4aHI9c2VsZi5feGhyPW5ldyBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuWE1MSHR0cFJlcXVlc3Q7dHJ5e3hoci5vcGVuKHNlbGYuX29wdHMubWV0aG9kLHNlbGYuX29wdHMudXJsLCEwKX1jYXRjaChlcnIpe3JldHVybiB2b2lkIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtzZWxmLmVtaXQoImVycm9yIixlcnIpfSl9InJlc3BvbnNlVHlwZSJpbiB4aHImJih4aHIucmVzcG9uc2VUeXBlPXNlbGYuX21vZGUpLCJ3aXRoQ3JlZGVudGlhbHMiaW4geGhyJiYoeGhyLndpdGhDcmVkZW50aWFscz0hIW9wdHMud2l0aENyZWRlbnRpYWxzKSwidGV4dCI9PT1zZWxmLl9tb2RlJiYib3ZlcnJpZGVNaW1lVHlwZSJpbiB4aHImJnhoci5vdmVycmlkZU1pbWVUeXBlKCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkIiksInJlcXVlc3RUaW1lb3V0ImluIG9wdHMmJih4aHIudGltZW91dD1vcHRzLnJlcXVlc3RUaW1lb3V0LHhoci5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtzZWxmLmVtaXQoInJlcXVlc3RUaW1lb3V0Iil9KSxoZWFkZXJzTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcil7eGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyWzBdLGhlYWRlclsxXSl9KSxzZWxmLl9yZXNwb25zZT1udWxsLHhoci5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtzd2l0Y2goeGhyLnJlYWR5U3RhdGUpe2Nhc2UgclN0YXRlcy5MT0FESU5HOmNhc2UgclN0YXRlcy5ET05FOnNlbGYuX29uWEhSUHJvZ3Jlc3MoKX19LCJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlciI9PT1zZWxmLl9tb2RlJiYoeGhyLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24oKXtzZWxmLl9vblhIUlByb2dyZXNzKCl9KSx4aHIub25lcnJvcj1mdW5jdGlvbigpe3NlbGYuX2Rlc3Ryb3llZHx8KHNlbGYuX3Jlc2V0VGltZXJzKCEwKSxzZWxmLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIlhIUiBlcnJvciIpKSl9O3RyeXt4aHIuc2VuZChib2R5KX1jYXRjaChlcnIpe3JldHVybiB2b2lkIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtzZWxmLmVtaXQoImVycm9yIixlcnIpfSl9fX19LENsaWVudFJlcXVlc3QucHJvdG90eXBlLl9vblhIUlByb2dyZXNzPWZ1bmN0aW9uKCl7dGhpcy5fcmVzZXRUaW1lcnMoITEpLGZ1bmN0aW9uIHN0YXR1c1ZhbGlkKHhocil7dHJ5e3ZhciBzdGF0dXM9eGhyLnN0YXR1cztyZXR1cm4gbnVsbCE9PXN0YXR1cyYmMCE9PXN0YXR1c31jYXRjaChlKXtyZXR1cm4hMX19KHRoaXMuX3hocikmJiF0aGlzLl9kZXN0cm95ZWQmJih0aGlzLl9yZXNwb25zZXx8dGhpcy5fY29ubmVjdCgpLHRoaXMuX3Jlc3BvbnNlLl9vblhIUlByb2dyZXNzKHRoaXMuX3Jlc2V0VGltZXJzLmJpbmQodGhpcykpKX0sQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuX2Nvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgc2VsZj10aGlzO3NlbGYuX2Rlc3Ryb3llZHx8KHNlbGYuX3Jlc3BvbnNlPW5ldyBJbmNvbWluZ01lc3NhZ2Uoc2VsZi5feGhyLHNlbGYuX2ZldGNoUmVzcG9uc2Usc2VsZi5fbW9kZSxzZWxmLl9yZXNldFRpbWVycy5iaW5kKHNlbGYpKSxzZWxmLl9yZXNwb25zZS5vbigiZXJyb3IiLGZ1bmN0aW9uKGVycil7c2VsZi5lbWl0KCJlcnJvciIsZXJyKX0pLHNlbGYuZW1pdCgicmVzcG9uc2UiLHNlbGYuX3Jlc3BvbnNlKSl9LENsaWVudFJlcXVlc3QucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihjaHVuayxlbmNvZGluZyxjYil7dGhpcy5fYm9keS5wdXNoKGNodW5rKSxjYigpfSxDbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5fcmVzZXRUaW1lcnM9ZnVuY3Rpb24oZG9uZSl7dmFyIHNlbGY9dGhpcztfX3dlYnBhY2tfcmVxdWlyZV9fLmcuY2xlYXJUaW1lb3V0KHNlbGYuX3NvY2tldFRpbWVyKSxzZWxmLl9zb2NrZXRUaW1lcj1udWxsLGRvbmU/KF9fd2VicGFja19yZXF1aXJlX18uZy5jbGVhclRpbWVvdXQoc2VsZi5fZmV0Y2hUaW1lciksc2VsZi5fZmV0Y2hUaW1lcj1udWxsKTpzZWxmLl9zb2NrZXRUaW1lb3V0JiYoc2VsZi5fc29ja2V0VGltZXI9X193ZWJwYWNrX3JlcXVpcmVfXy5nLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZWxmLmVtaXQoInRpbWVvdXQiKX0sc2VsZi5fc29ja2V0VGltZW91dCkpfSxDbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5hYm9ydD1DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKGVycil7dGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX3Jlc2V0VGltZXJzKCEwKSx0aGlzLl9yZXNwb25zZSYmKHRoaXMuX3Jlc3BvbnNlLl9kZXN0cm95ZWQ9ITApLHRoaXMuX3hocj90aGlzLl94aHIuYWJvcnQoKTp0aGlzLl9mZXRjaEFib3J0Q29udHJvbGxlciYmdGhpcy5fZmV0Y2hBYm9ydENvbnRyb2xsZXIuYWJvcnQoKSxlcnImJnRoaXMuZW1pdCgiZXJyb3IiLGVycil9LENsaWVudFJlcXVlc3QucHJvdG90eXBlLmVuZD1mdW5jdGlvbihkYXRhLGVuY29kaW5nLGNiKXsiZnVuY3Rpb24iPT10eXBlb2YgZGF0YSYmKGNiPWRhdGEsZGF0YT12b2lkIDApLHN0cmVhbS5Xcml0YWJsZS5wcm90b3R5cGUuZW5kLmNhbGwodGhpcyxkYXRhLGVuY29kaW5nLGNiKX0sQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuc2V0VGltZW91dD1mdW5jdGlvbih0aW1lb3V0LGNiKXtjYiYmdGhpcy5vbmNlKCJ0aW1lb3V0IixjYiksdGhpcy5fc29ja2V0VGltZW91dD10aW1lb3V0LHRoaXMuX3Jlc2V0VGltZXJzKCExKX0sQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuZmx1c2hIZWFkZXJzPWZ1bmN0aW9uKCl7fSxDbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5zZXROb0RlbGF5PWZ1bmN0aW9uKCl7fSxDbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5zZXRTb2NrZXRLZWVwQWxpdmU9ZnVuY3Rpb24oKXt9O3ZhciB1bnNhZmVIZWFkZXJzPVsiYWNjZXB0LWNoYXJzZXQiLCJhY2NlcHQtZW5jb2RpbmciLCJhY2Nlc3MtY29udHJvbC1yZXF1ZXN0LWhlYWRlcnMiLCJhY2Nlc3MtY29udHJvbC1yZXF1ZXN0LW1ldGhvZCIsImNvbm5lY3Rpb24iLCJjb250ZW50LWxlbmd0aCIsImNvb2tpZSIsImNvb2tpZTIiLCJkYXRlIiwiZG50IiwiZXhwZWN0IiwiaG9zdCIsImtlZXAtYWxpdmUiLCJvcmlnaW4iLCJyZWZlcmVyIiwidGUiLCJ0cmFpbGVyIiwidHJhbnNmZXItZW5jb2RpbmciLCJ1cGdyYWRlIiwidmlhIl19LCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbGliL3Jlc3BvbnNlLmpzIihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBwcm9jZXNzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9wcm94eS9wcm9jZXNzLmpzIiksQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiKSxjYXBhYmlsaXR5PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9saWIvY2FwYWJpbGl0eS5qcyIpLGluaGVyaXRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiksc3RyZWFtPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL3JlYWRhYmxlLWJyb3dzZXIuanMiKSxyU3RhdGVzPWV4cG9ydHMucmVhZHlTdGF0ZXM9e1VOU0VOVDowLE9QRU5FRDoxLEhFQURFUlNfUkVDRUlWRUQ6MixMT0FESU5HOjMsRE9ORTo0fSxJbmNvbWluZ01lc3NhZ2U9ZXhwb3J0cy5JbmNvbWluZ01lc3NhZ2U9ZnVuY3Rpb24oeGhyLHJlc3BvbnNlLG1vZGUscmVzZXRUaW1lcnMpe3ZhciBzZWxmPXRoaXM7aWYoc3RyZWFtLlJlYWRhYmxlLmNhbGwoc2VsZiksc2VsZi5fbW9kZT1tb2RlLHNlbGYuaGVhZGVycz17fSxzZWxmLnJhd0hlYWRlcnM9W10sc2VsZi50cmFpbGVycz17fSxzZWxmLnJhd1RyYWlsZXJzPVtdLHNlbGYub24oImVuZCIsZnVuY3Rpb24oKXtwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7c2VsZi5lbWl0KCJjbG9zZSIpfSl9KSwiZmV0Y2giPT09bW9kZSl7aWYoc2VsZi5fZmV0Y2hSZXNwb25zZT1yZXNwb25zZSxzZWxmLnVybD1yZXNwb25zZS51cmwsc2VsZi5zdGF0dXNDb2RlPXJlc3BvbnNlLnN0YXR1cyxzZWxmLnN0YXR1c01lc3NhZ2U9cmVzcG9uc2Uuc3RhdHVzVGV4dCxyZXNwb25zZS5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyLGtleSl7c2VsZi5oZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXT1oZWFkZXIsc2VsZi5yYXdIZWFkZXJzLnB1c2goa2V5LGhlYWRlcil9KSxjYXBhYmlsaXR5LndyaXRhYmxlU3RyZWFtKXt2YXIgd3JpdGFibGU9bmV3IFdyaXRhYmxlU3RyZWFtKHt3cml0ZTpmdW5jdGlvbihjaHVuayl7cmV0dXJuIHJlc2V0VGltZXJzKCExKSxuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLHJlamVjdCl7c2VsZi5fZGVzdHJveWVkP3JlamVjdCgpOnNlbGYucHVzaChCdWZmZXIuZnJvbShjaHVuaykpP3Jlc29sdmUoKTpzZWxmLl9yZXN1bWVGZXRjaD1yZXNvbHZlfSl9LGNsb3NlOmZ1bmN0aW9uKCl7cmVzZXRUaW1lcnMoITApLHNlbGYuX2Rlc3Ryb3llZHx8c2VsZi5wdXNoKG51bGwpfSxhYm9ydDpmdW5jdGlvbihlcnIpe3Jlc2V0VGltZXJzKCEwKSxzZWxmLl9kZXN0cm95ZWR8fHNlbGYuZW1pdCgiZXJyb3IiLGVycil9fSk7dHJ5e3JldHVybiB2b2lkIHJlc3BvbnNlLmJvZHkucGlwZVRvKHdyaXRhYmxlKS5jYXRjaChmdW5jdGlvbihlcnIpe3Jlc2V0VGltZXJzKCEwKSxzZWxmLl9kZXN0cm95ZWR8fHNlbGYuZW1pdCgiZXJyb3IiLGVycil9KX1jYXRjaChlKXt9fXZhciByZWFkZXI9cmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTshZnVuY3Rpb24gcmVhZCgpe3JlYWRlci5yZWFkKCkudGhlbihmdW5jdGlvbihyZXN1bHQpe3NlbGYuX2Rlc3Ryb3llZHx8KHJlc2V0VGltZXJzKHJlc3VsdC5kb25lKSxyZXN1bHQuZG9uZT9zZWxmLnB1c2gobnVsbCk6KHNlbGYucHVzaChCdWZmZXIuZnJvbShyZXN1bHQudmFsdWUpKSxyZWFkKCkpKX0pLmNhdGNoKGZ1bmN0aW9uKGVycil7cmVzZXRUaW1lcnMoITApLHNlbGYuX2Rlc3Ryb3llZHx8c2VsZi5lbWl0KCJlcnJvciIsZXJyKX0pfSgpfWVsc2V7aWYoc2VsZi5feGhyPXhocixzZWxmLl9wb3M9MCxzZWxmLnVybD14aHIucmVzcG9uc2VVUkwsc2VsZi5zdGF0dXNDb2RlPXhoci5zdGF0dXMsc2VsZi5zdGF0dXNNZXNzYWdlPXhoci5zdGF0dXNUZXh0LHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKS5zcGxpdCgvXHI/XG4vKS5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcil7dmFyIG1hdGNoZXM9aGVhZGVyLm1hdGNoKC9eKFteOl0rKTpccyooLiopLyk7aWYobWF0Y2hlcyl7dmFyIGtleT1tYXRjaGVzWzFdLnRvTG93ZXJDYXNlKCk7InNldC1jb29raWUiPT09a2V5Pyh2b2lkIDA9PT1zZWxmLmhlYWRlcnNba2V5XSYmKHNlbGYuaGVhZGVyc1trZXldPVtdKSxzZWxmLmhlYWRlcnNba2V5XS5wdXNoKG1hdGNoZXNbMl0pKTp2b2lkIDAhPT1zZWxmLmhlYWRlcnNba2V5XT9zZWxmLmhlYWRlcnNba2V5XSs9IiwgIittYXRjaGVzWzJdOnNlbGYuaGVhZGVyc1trZXldPW1hdGNoZXNbMl0sc2VsZi5yYXdIZWFkZXJzLnB1c2gobWF0Y2hlc1sxXSxtYXRjaGVzWzJdKX19KSxzZWxmLl9jaGFyc2V0PSJ4LXVzZXItZGVmaW5lZCIsIWNhcGFiaWxpdHkub3ZlcnJpZGVNaW1lVHlwZSl7dmFyIG1pbWVUeXBlPXNlbGYucmF3SGVhZGVyc1sibWltZS10eXBlIl07aWYobWltZVR5cGUpe3ZhciBjaGFyc2V0TWF0Y2g9bWltZVR5cGUubWF0Y2goLztccypjaGFyc2V0PShbXjtdKSg7fCQpLyk7Y2hhcnNldE1hdGNoJiYoc2VsZi5fY2hhcnNldD1jaGFyc2V0TWF0Y2hbMV0udG9Mb3dlckNhc2UoKSl9c2VsZi5fY2hhcnNldHx8KHNlbGYuX2NoYXJzZXQ9InV0Zi04Iil9fX07aW5oZXJpdHMoSW5jb21pbmdNZXNzYWdlLHN0cmVhbS5SZWFkYWJsZSksSW5jb21pbmdNZXNzYWdlLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbigpe3ZhciByZXNvbHZlPXRoaXMuX3Jlc3VtZUZldGNoO3Jlc29sdmUmJih0aGlzLl9yZXN1bWVGZXRjaD1udWxsLHJlc29sdmUoKSl9LEluY29taW5nTWVzc2FnZS5wcm90b3R5cGUuX29uWEhSUHJvZ3Jlc3M9ZnVuY3Rpb24ocmVzZXRUaW1lcnMpe3ZhciBzZWxmPXRoaXMseGhyPXNlbGYuX3hocixyZXNwb25zZT1udWxsO3N3aXRjaChzZWxmLl9tb2RlKXtjYXNlInRleHQiOmlmKChyZXNwb25zZT14aHIucmVzcG9uc2VUZXh0KS5sZW5ndGg+c2VsZi5fcG9zKXt2YXIgbmV3RGF0YT1yZXNwb25zZS5zdWJzdHIoc2VsZi5fcG9zKTtpZigieC11c2VyLWRlZmluZWQiPT09c2VsZi5fY2hhcnNldCl7Zm9yKHZhciBidWZmZXI9QnVmZmVyLmFsbG9jKG5ld0RhdGEubGVuZ3RoKSxpPTA7aTxuZXdEYXRhLmxlbmd0aDtpKyspYnVmZmVyW2ldPTI1NSZuZXdEYXRhLmNoYXJDb2RlQXQoaSk7c2VsZi5wdXNoKGJ1ZmZlcil9ZWxzZSBzZWxmLnB1c2gobmV3RGF0YSxzZWxmLl9jaGFyc2V0KTtzZWxmLl9wb3M9cmVzcG9uc2UubGVuZ3RofWJyZWFrO2Nhc2UiYXJyYXlidWZmZXIiOmlmKHhoci5yZWFkeVN0YXRlIT09clN0YXRlcy5ET05FfHwheGhyLnJlc3BvbnNlKWJyZWFrO3Jlc3BvbnNlPXhoci5yZXNwb25zZSxzZWxmLnB1c2goQnVmZmVyLmZyb20obmV3IFVpbnQ4QXJyYXkocmVzcG9uc2UpKSk7YnJlYWs7Y2FzZSJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlciI6aWYocmVzcG9uc2U9eGhyLnJlc3BvbnNlLHhoci5yZWFkeVN0YXRlIT09clN0YXRlcy5MT0FESU5HfHwhcmVzcG9uc2UpYnJlYWs7c2VsZi5wdXNoKEJ1ZmZlci5mcm9tKG5ldyBVaW50OEFycmF5KHJlc3BvbnNlKSkpO2JyZWFrO2Nhc2UibXMtc3RyZWFtIjppZihyZXNwb25zZT14aHIucmVzcG9uc2UseGhyLnJlYWR5U3RhdGUhPT1yU3RhdGVzLkxPQURJTkcpYnJlYWs7dmFyIHJlYWRlcj1uZXcgX193ZWJwYWNrX3JlcXVpcmVfXy5nLk1TU3RyZWFtUmVhZGVyO3JlYWRlci5vbnByb2dyZXNzPWZ1bmN0aW9uKCl7cmVhZGVyLnJlc3VsdC5ieXRlTGVuZ3RoPnNlbGYuX3BvcyYmKHNlbGYucHVzaChCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheShyZWFkZXIucmVzdWx0LnNsaWNlKHNlbGYuX3BvcykpKSksc2VsZi5fcG9zPXJlYWRlci5yZXN1bHQuYnl0ZUxlbmd0aCl9LHJlYWRlci5vbmxvYWQ9ZnVuY3Rpb24oKXtyZXNldFRpbWVycyghMCksc2VsZi5wdXNoKG51bGwpfSxyZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIocmVzcG9uc2UpfXNlbGYuX3hoci5yZWFkeVN0YXRlPT09clN0YXRlcy5ET05FJiYibXMtc3RyZWFtIiE9PXNlbGYuX21vZGUmJihyZXNldFRpbWVycyghMCksc2VsZi5wdXNoKG51bGwpKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9lcnJvcnMtYnJvd3Nlci5qcyIobW9kdWxlKXsidXNlIHN0cmljdCI7dmFyIGNvZGVzPXt9O2Z1bmN0aW9uIGNyZWF0ZUVycm9yVHlwZShjb2RlLG1lc3NhZ2UsQmFzZSl7QmFzZXx8KEJhc2U9RXJyb3IpO3ZhciBOb2RlRXJyb3I9ZnVuY3Rpb24oX0Jhc2Upe2Z1bmN0aW9uIE5vZGVFcnJvcihhcmcxLGFyZzIsYXJnMyl7cmV0dXJuIF9CYXNlLmNhbGwodGhpcyxmdW5jdGlvbiBnZXRNZXNzYWdlKGFyZzEsYXJnMixhcmczKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG1lc3NhZ2U/bWVzc2FnZTptZXNzYWdlKGFyZzEsYXJnMixhcmczKX0oYXJnMSxhcmcyLGFyZzMpKXx8dGhpc31yZXR1cm4gZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3Msc3VwZXJDbGFzcyl7c3ViQ2xhc3MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpLHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1zdWJDbGFzcyxzdWJDbGFzcy5fX3Byb3RvX189c3VwZXJDbGFzc30oTm9kZUVycm9yLF9CYXNlKSxOb2RlRXJyb3J9KEJhc2UpO05vZGVFcnJvci5wcm90b3R5cGUubmFtZT1CYXNlLm5hbWUsTm9kZUVycm9yLnByb3RvdHlwZS5jb2RlPWNvZGUsY29kZXNbY29kZV09Tm9kZUVycm9yfWZ1bmN0aW9uIG9uZU9mKGV4cGVjdGVkLHRoaW5nKXtpZihBcnJheS5pc0FycmF5KGV4cGVjdGVkKSl7dmFyIGxlbj1leHBlY3RlZC5sZW5ndGg7cmV0dXJuIGV4cGVjdGVkPWV4cGVjdGVkLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gU3RyaW5nKGkpfSksbGVuPjI/Im9uZSBvZiAiLmNvbmNhdCh0aGluZywiICIpLmNvbmNhdChleHBlY3RlZC5zbGljZSgwLGxlbi0xKS5qb2luKCIsICIpLCIsIG9yICIpK2V4cGVjdGVkW2xlbi0xXToyPT09bGVuPyJvbmUgb2YgIi5jb25jYXQodGhpbmcsIiAiKS5jb25jYXQoZXhwZWN0ZWRbMF0sIiBvciAiKS5jb25jYXQoZXhwZWN0ZWRbMV0pOiJvZiAiLmNvbmNhdCh0aGluZywiICIpLmNvbmNhdChleHBlY3RlZFswXSl9cmV0dXJuIm9mICIuY29uY2F0KHRoaW5nLCIgIikuY29uY2F0KFN0cmluZyhleHBlY3RlZCkpfWNyZWF0ZUVycm9yVHlwZSgiRVJSX0lOVkFMSURfT1BUX1ZBTFVFIixmdW5jdGlvbihuYW1lLHZhbHVlKXtyZXR1cm4nVGhlIHZhbHVlICInK3ZhbHVlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAiJytuYW1lKyciJ30sVHlwZUVycm9yKSxjcmVhdGVFcnJvclR5cGUoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihuYW1lLGV4cGVjdGVkLGFjdHVhbCl7dmFyIGRldGVybWluZXIsbXNnO2lmKCJzdHJpbmciPT10eXBlb2YgZXhwZWN0ZWQmJmZ1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyLHNlYXJjaCxwb3Mpe3JldHVybiBzdHIuc3Vic3RyKCFwb3N8fHBvczwwPzA6K3BvcyxzZWFyY2gubGVuZ3RoKT09PXNlYXJjaH0oZXhwZWN0ZWQsIm5vdCAiKT8oZGV0ZXJtaW5lcj0ibXVzdCBub3QgYmUiLGV4cGVjdGVkPWV4cGVjdGVkLnJlcGxhY2UoL15ub3QgLywiIikpOmRldGVybWluZXI9Im11c3QgYmUiLGZ1bmN0aW9uIGVuZHNXaXRoKHN0cixzZWFyY2gsdGhpc19sZW4pe3JldHVybih2b2lkIDA9PT10aGlzX2xlbnx8dGhpc19sZW4+c3RyLmxlbmd0aCkmJih0aGlzX2xlbj1zdHIubGVuZ3RoKSxzdHIuc3Vic3RyaW5nKHRoaXNfbGVuLXNlYXJjaC5sZW5ndGgsdGhpc19sZW4pPT09c2VhcmNofShuYW1lLCIgYXJndW1lbnQiKSltc2c9IlRoZSAiLmNvbmNhdChuYW1lLCIgIikuY29uY2F0KGRldGVybWluZXIsIiAiKS5jb25jYXQob25lT2YoZXhwZWN0ZWQsInR5cGUiKSk7ZWxzZXt2YXIgdHlwZT1mdW5jdGlvbiBpbmNsdWRlcyhzdHIsc2VhcmNoLHN0YXJ0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHN0YXJ0JiYoc3RhcnQ9MCksIShzdGFydCtzZWFyY2gubGVuZ3RoPnN0ci5sZW5ndGgpJiYtMSE9PXN0ci5pbmRleE9mKHNlYXJjaCxzdGFydCl9KG5hbWUsIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7bXNnPSdUaGUgIicuY29uY2F0KG5hbWUsJyIgJykuY29uY2F0KHR5cGUsIiAiKS5jb25jYXQoZGV0ZXJtaW5lciwiICIpLmNvbmNhdChvbmVPZihleHBlY3RlZCwidHlwZSIpKX1yZXR1cm4gbXNnKz0iLiBSZWNlaXZlZCB0eXBlICIuY29uY2F0KHR5cGVvZiBhY3R1YWwpfSxUeXBlRXJyb3IpLGNyZWF0ZUVycm9yVHlwZSgiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksY3JlYXRlRXJyb3JUeXBlKCJFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCIsZnVuY3Rpb24obmFtZSl7cmV0dXJuIlRoZSAiK25hbWUrIiBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIn0pLGNyZWF0ZUVycm9yVHlwZSgiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJQcmVtYXR1cmUgY2xvc2UiKSxjcmVhdGVFcnJvclR5cGUoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihuYW1lKXtyZXR1cm4iQ2Fubm90IGNhbGwgIituYW1lKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxjcmVhdGVFcnJvclR5cGUoIkVSUl9NVUxUSVBMRV9DQUxMQkFDSyIsIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpLGNyZWF0ZUVycm9yVHlwZSgiRVJSX1NUUkVBTV9DQU5OT1RfUElQRSIsIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSxjcmVhdGVFcnJvclR5cGUoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksY3JlYXRlRXJyb3JUeXBlKCJFUlJfU1RSRUFNX05VTExfVkFMVUVTIiwiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iLFR5cGVFcnJvciksY3JlYXRlRXJyb3JUeXBlKCJFUlJfVU5LTk9XTl9FTkNPRElORyIsZnVuY3Rpb24oYXJnKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIithcmd9LFR5cGVFcnJvciksY3JlYXRlRXJyb3JUeXBlKCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UIiwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSxtb2R1bGUuZXhwb3J0cy5GPWNvZGVzfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fZHVwbGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgcHJvY2Vzcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvcHJveHkvcHJvY2Vzcy5qcyIpLG9iamVjdEtleXM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKG9iail7dmFyIGtleXM9W107Zm9yKHZhciBrZXkgaW4gb2JqKWtleXMucHVzaChrZXkpO3JldHVybiBrZXlzfTttb2R1bGUuZXhwb3J0cz1EdXBsZXg7dmFyIFJlYWRhYmxlPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiksV3JpdGFibGU9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fd3JpdGFibGUuanMiKTtfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpKER1cGxleCxSZWFkYWJsZSk7Zm9yKHZhciBrZXlzPW9iamVjdEtleXMoV3JpdGFibGUucHJvdG90eXBlKSx2PTA7djxrZXlzLmxlbmd0aDt2Kyspe3ZhciBtZXRob2Q9a2V5c1t2XTtEdXBsZXgucHJvdG90eXBlW21ldGhvZF18fChEdXBsZXgucHJvdG90eXBlW21ldGhvZF09V3JpdGFibGUucHJvdG90eXBlW21ldGhvZF0pfWZ1bmN0aW9uIER1cGxleChvcHRpb25zKXtpZighKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKXJldHVybiBuZXcgRHVwbGV4KG9wdGlvbnMpO1JlYWRhYmxlLmNhbGwodGhpcyxvcHRpb25zKSxXcml0YWJsZS5jYWxsKHRoaXMsb3B0aW9ucyksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLG9wdGlvbnMmJighMT09PW9wdGlvbnMucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PW9wdGlvbnMud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PW9wdGlvbnMuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIsb25lbmQpKSl9ZnVuY3Rpb24gb25lbmQoKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxwcm9jZXNzLm5leHRUaWNrKG9uRW5kTlQsdGhpcyl9ZnVuY3Rpb24gb25FbmROVChzZWxmKXtzZWxmLmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uIGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uIGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24gZ2V0KCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQpfSxzZXQ6ZnVuY3Rpb24gc2V0KHZhbHVlKXt2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9dmFsdWUsdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dmFsdWUpfX0pfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPVBhc3NUaHJvdWdoO3ZhciBUcmFuc2Zvcm09X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIik7ZnVuY3Rpb24gUGFzc1Rocm91Z2gob3B0aW9ucyl7aWYoISh0aGlzIGluc3RhbmNlb2YgUGFzc1Rocm91Z2gpKXJldHVybiBuZXcgUGFzc1Rocm91Z2gob3B0aW9ucyk7VHJhbnNmb3JtLmNhbGwodGhpcyxvcHRpb25zKX1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpKFBhc3NUaHJvdWdoLFRyYW5zZm9ybSksUGFzc1Rocm91Z2gucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oY2h1bmssZW5jb2RpbmcsY2Ipe2NiKG51bGwsY2h1bmspfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgRHVwbGV4LHByb2Nlc3M9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL3Byb3h5L3Byb2Nlc3MuanMiKTttb2R1bGUuZXhwb3J0cz1SZWFkYWJsZSxSZWFkYWJsZS5SZWFkYWJsZVN0YXRlPVJlYWRhYmxlU3RhdGU7X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiKS5FdmVudEVtaXR0ZXI7dmFyIEVFbGlzdGVuZXJDb3VudD1mdW5jdGlvbiBFRWxpc3RlbmVyQ291bnQoZW1pdHRlcix0eXBlKXtyZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RofSxTdHJlYW09X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtLWJyb3dzZXIuanMiKSxCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcixPdXJVaW50OEFycmF5PSh2b2lkIDAhPT1fX3dlYnBhY2tfcmVxdWlyZV9fLmc/X193ZWJwYWNrX3JlcXVpcmVfXy5nOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9O3ZhciBkZWJ1ZyxkZWJ1Z1V0aWw9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIpO2RlYnVnPWRlYnVnVXRpbCYmZGVidWdVdGlsLmRlYnVnbG9nP2RlYnVnVXRpbC5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24gZGVidWcoKXt9O3ZhciBTdHJpbmdEZWNvZGVyLGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcixmcm9tLEJ1ZmZlckxpc3Q9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYnVmZmVyX2xpc3QuanMiKSxkZXN0cm95SW1wbD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95LmpzIiksZ2V0SGlnaFdhdGVyTWFyaz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZS5qcyIpLmdldEhpZ2hXYXRlck1hcmssX3JlcXVpcmUkY29kZXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZXJyb3JzLWJyb3dzZXIuanMiKS5GLEVSUl9JTlZBTElEX0FSR19UWVBFPV9yZXF1aXJlJGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFLEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0Y9X3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRD1fcmVxdWlyZSRjb2Rlcy5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UPV9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiKShSZWFkYWJsZSxTdHJlYW0pO3ZhciBlcnJvck9yRGVzdHJveT1kZXN0cm95SW1wbC5lcnJvck9yRGVzdHJveSxrUHJveHlFdmVudHM9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLHN0cmVhbSxpc0R1cGxleCl7RHVwbGV4PUR1cGxleHx8X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fZHVwbGV4LmpzIiksb3B0aW9ucz1vcHRpb25zfHx7fSwiYm9vbGVhbiIhPXR5cGVvZiBpc0R1cGxleCYmKGlzRHVwbGV4PXN0cmVhbSBpbnN0YW5jZW9mIER1cGxleCksdGhpcy5vYmplY3RNb2RlPSEhb3B0aW9ucy5vYmplY3RNb2RlLGlzRHVwbGV4JiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPWdldEhpZ2hXYXRlck1hcmsodGhpcyxvcHRpb25zLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLGlzRHVwbGV4KSx0aGlzLmJ1ZmZlcj1uZXcgQnVmZmVyTGlzdCx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1vcHRpb25zLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhb3B0aW9ucy5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz1vcHRpb25zLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLG9wdGlvbnMuZW5jb2RpbmcmJihTdHJpbmdEZWNvZGVyfHwoU3RyaW5nRGVjb2Rlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyaW5nX2RlY29kZXIvbGliL3N0cmluZ19kZWNvZGVyLmpzIikuU3RyaW5nRGVjb2RlciksdGhpcy5kZWNvZGVyPW5ldyBTdHJpbmdEZWNvZGVyKG9wdGlvbnMuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9b3B0aW9ucy5lbmNvZGluZyl9ZnVuY3Rpb24gUmVhZGFibGUob3B0aW9ucyl7aWYoRHVwbGV4PUR1cGxleHx8X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fZHVwbGV4LmpzIiksISh0aGlzIGluc3RhbmNlb2YgUmVhZGFibGUpKXJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucyk7dmFyIGlzRHVwbGV4PXRoaXMgaW5zdGFuY2VvZiBEdXBsZXg7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLHRoaXMsaXNEdXBsZXgpLHRoaXMucmVhZGFibGU9ITAsb3B0aW9ucyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBvcHRpb25zLnJlYWQmJih0aGlzLl9yZWFkPW9wdGlvbnMucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIG9wdGlvbnMuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9b3B0aW9ucy5kZXN0cm95KSksU3RyZWFtLmNhbGwodGhpcyl9ZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sY2h1bmssZW5jb2RpbmcsYWRkVG9Gcm9udCxza2lwQ2h1bmtDaGVjayl7ZGVidWcoInJlYWRhYmxlQWRkQ2h1bmsiLGNodW5rKTt2YXIgZXIsc3RhdGU9c3RyZWFtLl9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT1jaHVuaylzdGF0ZS5yZWFkaW5nPSExLGZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLHN0YXRlKXtpZihkZWJ1Zygib25Fb2ZDaHVuayIpLHN0YXRlLmVuZGVkKXJldHVybjtpZihzdGF0ZS5kZWNvZGVyKXt2YXIgY2h1bms9c3RhdGUuZGVjb2Rlci5lbmQoKTtjaHVuayYmY2h1bmsubGVuZ3RoJiYoc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspLHN0YXRlLmxlbmd0aCs9c3RhdGUub2JqZWN0TW9kZT8xOmNodW5rLmxlbmd0aCl9c3RhdGUuZW5kZWQ9ITAsc3RhdGUuc3luYz9lbWl0UmVhZGFibGUoc3RyZWFtKTooc3RhdGUubmVlZFJlYWRhYmxlPSExLHN0YXRlLmVtaXR0ZWRSZWFkYWJsZXx8KHN0YXRlLmVtaXR0ZWRSZWFkYWJsZT0hMCxlbWl0UmVhZGFibGVfKHN0cmVhbSkpKX0oc3RyZWFtLHN0YXRlKTtlbHNlIGlmKHNraXBDaHVua0NoZWNrfHwoZXI9ZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLGNodW5rKXt2YXIgZXI7KGZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKG9iail8fG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXl9KShjaHVuayl8fCJzdHJpbmciPT10eXBlb2YgY2h1bmt8fHZvaWQgMD09PWNodW5rfHxzdGF0ZS5vYmplY3RNb2RlfHwoZXI9bmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiLCJVaW50OEFycmF5Il0sY2h1bmspKTtyZXR1cm4gZXJ9KHN0YXRlLGNodW5rKSksZXIpZXJyb3JPckRlc3Ryb3koc3RyZWFtLGVyKTtlbHNlIGlmKHN0YXRlLm9iamVjdE1vZGV8fGNodW5rJiZjaHVuay5sZW5ndGg+MClpZigic3RyaW5nIj09dHlwZW9mIGNodW5rfHxzdGF0ZS5vYmplY3RNb2RlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoY2h1bmspPT09QnVmZmVyLnByb3RvdHlwZXx8KGNodW5rPWZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspe3JldHVybiBCdWZmZXIuZnJvbShjaHVuayl9KGNodW5rKSksYWRkVG9Gcm9udClzdGF0ZS5lbmRFbWl0dGVkP2Vycm9yT3JEZXN0cm95KHN0cmVhbSxuZXcgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCk6YWRkQ2h1bmsoc3RyZWFtLHN0YXRlLGNodW5rLCEwKTtlbHNlIGlmKHN0YXRlLmVuZGVkKWVycm9yT3JEZXN0cm95KHN0cmVhbSxuZXcgRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRik7ZWxzZXtpZihzdGF0ZS5kZXN0cm95ZWQpcmV0dXJuITE7c3RhdGUucmVhZGluZz0hMSxzdGF0ZS5kZWNvZGVyJiYhZW5jb2Rpbmc/KGNodW5rPXN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspLHN0YXRlLm9iamVjdE1vZGV8fDAhPT1jaHVuay5sZW5ndGg/YWRkQ2h1bmsoc3RyZWFtLHN0YXRlLGNodW5rLCExKTptYXliZVJlYWRNb3JlKHN0cmVhbSxzdGF0ZSkpOmFkZENodW5rKHN0cmVhbSxzdGF0ZSxjaHVuaywhMSl9ZWxzZSBhZGRUb0Zyb250fHwoc3RhdGUucmVhZGluZz0hMSxtYXliZVJlYWRNb3JlKHN0cmVhbSxzdGF0ZSkpO3JldHVybiFzdGF0ZS5lbmRlZCYmKHN0YXRlLmxlbmd0aDxzdGF0ZS5oaWdoV2F0ZXJNYXJrfHwwPT09c3RhdGUubGVuZ3RoKX1mdW5jdGlvbiBhZGRDaHVuayhzdHJlYW0sc3RhdGUsY2h1bmssYWRkVG9Gcm9udCl7c3RhdGUuZmxvd2luZyYmMD09PXN0YXRlLmxlbmd0aCYmIXN0YXRlLnN5bmM/KHN0YXRlLmF3YWl0RHJhaW49MCxzdHJlYW0uZW1pdCgiZGF0YSIsY2h1bmspKTooc3RhdGUubGVuZ3RoKz1zdGF0ZS5vYmplY3RNb2RlPzE6Y2h1bmsubGVuZ3RoLGFkZFRvRnJvbnQ/c3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspOnN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKSxzdGF0ZS5uZWVkUmVhZGFibGUmJmVtaXRSZWFkYWJsZShzdHJlYW0pKSxtYXliZVJlYWRNb3JlKHN0cmVhbSxzdGF0ZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24gZ2V0KCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24gc2V0KHZhbHVlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9dmFsdWUpfX0pLFJlYWRhYmxlLnByb3RvdHlwZS5kZXN0cm95PWRlc3Ryb3lJbXBsLmRlc3Ryb3ksUmVhZGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3k9ZGVzdHJveUltcGwudW5kZXN0cm95LFJlYWRhYmxlLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlcnIsY2Ipe2NiKGVycil9LFJlYWRhYmxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGNodW5rLGVuY29kaW5nKXt2YXIgc2tpcENodW5rQ2hlY2ssc3RhdGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gc3RhdGUub2JqZWN0TW9kZT9za2lwQ2h1bmtDaGVjaz0hMDoic3RyaW5nIj09dHlwZW9mIGNodW5rJiYoKGVuY29kaW5nPWVuY29kaW5nfHxzdGF0ZS5kZWZhdWx0RW5jb2RpbmcpIT09c3RhdGUuZW5jb2RpbmcmJihjaHVuaz1CdWZmZXIuZnJvbShjaHVuayxlbmNvZGluZyksZW5jb2Rpbmc9IiIpLHNraXBDaHVua0NoZWNrPSEwKSxyZWFkYWJsZUFkZENodW5rKHRoaXMsY2h1bmssZW5jb2RpbmcsITEsc2tpcENodW5rQ2hlY2spfSxSZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihjaHVuayl7cmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcyxjaHVuayxudWxsLCEwLCExKX0sUmVhZGFibGUucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LFJlYWRhYmxlLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihlbmMpe1N0cmluZ0RlY29kZXJ8fChTdHJpbmdEZWNvZGVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9saWIvc3RyaW5nX2RlY29kZXIuanMiKS5TdHJpbmdEZWNvZGVyKTt2YXIgZGVjb2Rlcj1uZXcgU3RyaW5nRGVjb2RlcihlbmMpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1kZWNvZGVyLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgcD10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkLGNvbnRlbnQ9IiI7bnVsbCE9PXA7KWNvbnRlbnQrPWRlY29kZXIud3JpdGUocC5kYXRhKSxwPXAubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PWNvbnRlbnQmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goY29udGVudCksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9Y29udGVudC5sZW5ndGgsdGhpc307ZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLHN0YXRlKXtyZXR1cm4gbjw9MHx8MD09PXN0YXRlLmxlbmd0aCYmc3RhdGUuZW5kZWQ/MDpzdGF0ZS5vYmplY3RNb2RlPzE6biE9bj9zdGF0ZS5mbG93aW5nJiZzdGF0ZS5sZW5ndGg/c3RhdGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6c3RhdGUubGVuZ3RoOihuPnN0YXRlLmhpZ2hXYXRlck1hcmsmJihzdGF0ZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uIGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pe3JldHVybiBuPj0xMDczNzQxODI0P249MTA3Mzc0MTgyNDoobi0tLG58PW4+Pj4xLG58PW4+Pj4yLG58PW4+Pj40LG58PW4+Pj44LG58PW4+Pj4xNixuKyspLG59KG4pKSxuPD1zdGF0ZS5sZW5ndGg/bjpzdGF0ZS5lbmRlZD9zdGF0ZS5sZW5ndGg6KHN0YXRlLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gZW1pdFJlYWRhYmxlKHN0cmVhbSl7dmFyIHN0YXRlPXN0cmVhbS5fcmVhZGFibGVTdGF0ZTtkZWJ1ZygiZW1pdFJlYWRhYmxlIixzdGF0ZS5uZWVkUmVhZGFibGUsc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSxzdGF0ZS5uZWVkUmVhZGFibGU9ITEsc3RhdGUuZW1pdHRlZFJlYWRhYmxlfHwoZGVidWcoImVtaXRSZWFkYWJsZSIsc3RhdGUuZmxvd2luZyksc3RhdGUuZW1pdHRlZFJlYWRhYmxlPSEwLHByb2Nlc3MubmV4dFRpY2soZW1pdFJlYWRhYmxlXyxzdHJlYW0pKX1mdW5jdGlvbiBlbWl0UmVhZGFibGVfKHN0cmVhbSl7dmFyIHN0YXRlPXN0cmVhbS5fcmVhZGFibGVTdGF0ZTtkZWJ1ZygiZW1pdFJlYWRhYmxlXyIsc3RhdGUuZGVzdHJveWVkLHN0YXRlLmxlbmd0aCxzdGF0ZS5lbmRlZCksc3RhdGUuZGVzdHJveWVkfHwhc3RhdGUubGVuZ3RoJiYhc3RhdGUuZW5kZWR8fChzdHJlYW0uZW1pdCgicmVhZGFibGUiKSxzdGF0ZS5lbWl0dGVkUmVhZGFibGU9ITEpLHN0YXRlLm5lZWRSZWFkYWJsZT0hc3RhdGUuZmxvd2luZyYmIXN0YXRlLmVuZGVkJiZzdGF0ZS5sZW5ndGg8PXN0YXRlLmhpZ2hXYXRlck1hcmssZmxvdyhzdHJlYW0pfWZ1bmN0aW9uIG1heWJlUmVhZE1vcmUoc3RyZWFtLHN0YXRlKXtzdGF0ZS5yZWFkaW5nTW9yZXx8KHN0YXRlLnJlYWRpbmdNb3JlPSEwLHByb2Nlc3MubmV4dFRpY2sobWF5YmVSZWFkTW9yZV8sc3RyZWFtLHN0YXRlKSl9ZnVuY3Rpb24gbWF5YmVSZWFkTW9yZV8oc3RyZWFtLHN0YXRlKXtmb3IoOyFzdGF0ZS5yZWFkaW5nJiYhc3RhdGUuZW5kZWQmJihzdGF0ZS5sZW5ndGg8c3RhdGUuaGlnaFdhdGVyTWFya3x8c3RhdGUuZmxvd2luZyYmMD09PXN0YXRlLmxlbmd0aCk7KXt2YXIgbGVuPXN0YXRlLmxlbmd0aDtpZihkZWJ1ZygibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxzdHJlYW0ucmVhZCgwKSxsZW49PT1zdGF0ZS5sZW5ndGgpYnJlYWt9c3RhdGUucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gdXBkYXRlUmVhZGFibGVMaXN0ZW5pbmcoc2VsZil7dmFyIHN0YXRlPXNlbGYuX3JlYWRhYmxlU3RhdGU7c3RhdGUucmVhZGFibGVMaXN0ZW5pbmc9c2VsZi5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsc3RhdGUucmVzdW1lU2NoZWR1bGVkJiYhc3RhdGUucGF1c2VkP3N0YXRlLmZsb3dpbmc9ITA6c2VsZi5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYmc2VsZi5yZXN1bWUoKX1mdW5jdGlvbiBuUmVhZGluZ05leHRUaWNrKHNlbGYpe2RlYnVnKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSxzZWxmLnJlYWQoMCl9ZnVuY3Rpb24gcmVzdW1lXyhzdHJlYW0sc3RhdGUpe2RlYnVnKCJyZXN1bWUiLHN0YXRlLnJlYWRpbmcpLHN0YXRlLnJlYWRpbmd8fHN0cmVhbS5yZWFkKDApLHN0YXRlLnJlc3VtZVNjaGVkdWxlZD0hMSxzdHJlYW0uZW1pdCgicmVzdW1lIiksZmxvdyhzdHJlYW0pLHN0YXRlLmZsb3dpbmcmJiFzdGF0ZS5yZWFkaW5nJiZzdHJlYW0ucmVhZCgwKX1mdW5jdGlvbiBmbG93KHN0cmVhbSl7dmFyIHN0YXRlPXN0cmVhbS5fcmVhZGFibGVTdGF0ZTtmb3IoZGVidWcoImZsb3ciLHN0YXRlLmZsb3dpbmcpO3N0YXRlLmZsb3dpbmcmJm51bGwhPT1zdHJlYW0ucmVhZCgpOyk7fWZ1bmN0aW9uIGZyb21MaXN0KG4sc3RhdGUpe3JldHVybiAwPT09c3RhdGUubGVuZ3RoP251bGw6KHN0YXRlLm9iamVjdE1vZGU/cmV0PXN0YXRlLmJ1ZmZlci5zaGlmdCgpOiFufHxuPj1zdGF0ZS5sZW5ndGg/KHJldD1zdGF0ZS5kZWNvZGVyP3N0YXRlLmJ1ZmZlci5qb2luKCIiKToxPT09c3RhdGUuYnVmZmVyLmxlbmd0aD9zdGF0ZS5idWZmZXIuZmlyc3QoKTpzdGF0ZS5idWZmZXIuY29uY2F0KHN0YXRlLmxlbmd0aCksc3RhdGUuYnVmZmVyLmNsZWFyKCkpOnJldD1zdGF0ZS5idWZmZXIuY29uc3VtZShuLHN0YXRlLmRlY29kZXIpLHJldCk7dmFyIHJldH1mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pe3ZhciBzdGF0ZT1zdHJlYW0uX3JlYWRhYmxlU3RhdGU7ZGVidWcoImVuZFJlYWRhYmxlIixzdGF0ZS5lbmRFbWl0dGVkKSxzdGF0ZS5lbmRFbWl0dGVkfHwoc3RhdGUuZW5kZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhlbmRSZWFkYWJsZU5ULHN0YXRlLHN0cmVhbSkpfWZ1bmN0aW9uIGVuZFJlYWRhYmxlTlQoc3RhdGUsc3RyZWFtKXtpZihkZWJ1ZygiZW5kUmVhZGFibGVOVCIsc3RhdGUuZW5kRW1pdHRlZCxzdGF0ZS5sZW5ndGgpLCFzdGF0ZS5lbmRFbWl0dGVkJiYwPT09c3RhdGUubGVuZ3RoJiYoc3RhdGUuZW5kRW1pdHRlZD0hMCxzdHJlYW0ucmVhZGFibGU9ITEsc3RyZWFtLmVtaXQoImVuZCIpLHN0YXRlLmF1dG9EZXN0cm95KSl7dmFyIHdTdGF0ZT1zdHJlYW0uX3dyaXRhYmxlU3RhdGU7KCF3U3RhdGV8fHdTdGF0ZS5hdXRvRGVzdHJveSYmd1N0YXRlLmZpbmlzaGVkKSYmc3RyZWFtLmRlc3Ryb3koKX19ZnVuY3Rpb24gaW5kZXhPZih4cyx4KXtmb3IodmFyIGk9MCxsPXhzLmxlbmd0aDtpPGw7aSsrKWlmKHhzW2ldPT09eClyZXR1cm4gaTtyZXR1cm4tMX1SZWFkYWJsZS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihuKXtkZWJ1ZygicmVhZCIsbiksbj1wYXJzZUludChuLDEwKTt2YXIgc3RhdGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxuT3JpZz1uO2lmKDAhPT1uJiYoc3RhdGUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09biYmc3RhdGUubmVlZFJlYWRhYmxlJiYoKDAhPT1zdGF0ZS5oaWdoV2F0ZXJNYXJrP3N0YXRlLmxlbmd0aD49c3RhdGUuaGlnaFdhdGVyTWFyazpzdGF0ZS5sZW5ndGg+MCl8fHN0YXRlLmVuZGVkKSlyZXR1cm4gZGVidWcoInJlYWQ6IGVtaXRSZWFkYWJsZSIsc3RhdGUubGVuZ3RoLHN0YXRlLmVuZGVkKSwwPT09c3RhdGUubGVuZ3RoJiZzdGF0ZS5lbmRlZD9lbmRSZWFkYWJsZSh0aGlzKTplbWl0UmVhZGFibGUodGhpcyksbnVsbDtpZigwPT09KG49aG93TXVjaFRvUmVhZChuLHN0YXRlKSkmJnN0YXRlLmVuZGVkKXJldHVybiAwPT09c3RhdGUubGVuZ3RoJiZlbmRSZWFkYWJsZSh0aGlzKSxudWxsO3ZhciByZXQsZG9SZWFkPXN0YXRlLm5lZWRSZWFkYWJsZTtyZXR1cm4gZGVidWcoIm5lZWQgcmVhZGFibGUiLGRvUmVhZCksKDA9PT1zdGF0ZS5sZW5ndGh8fHN0YXRlLmxlbmd0aC1uPHN0YXRlLmhpZ2hXYXRlck1hcmspJiZkZWJ1ZygibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLGRvUmVhZD0hMCksc3RhdGUuZW5kZWR8fHN0YXRlLnJlYWRpbmc/ZGVidWcoInJlYWRpbmcgb3IgZW5kZWQiLGRvUmVhZD0hMSk6ZG9SZWFkJiYoZGVidWcoImRvIHJlYWQiKSxzdGF0ZS5yZWFkaW5nPSEwLHN0YXRlLnN5bmM9ITAsMD09PXN0YXRlLmxlbmd0aCYmKHN0YXRlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKSxzdGF0ZS5zeW5jPSExLHN0YXRlLnJlYWRpbmd8fChuPWhvd011Y2hUb1JlYWQobk9yaWcsc3RhdGUpKSksbnVsbD09PShyZXQ9bj4wP2Zyb21MaXN0KG4sc3RhdGUpOm51bGwpPyhzdGF0ZS5uZWVkUmVhZGFibGU9c3RhdGUubGVuZ3RoPD1zdGF0ZS5oaWdoV2F0ZXJNYXJrLG49MCk6KHN0YXRlLmxlbmd0aC09bixzdGF0ZS5hd2FpdERyYWluPTApLDA9PT1zdGF0ZS5sZW5ndGgmJihzdGF0ZS5lbmRlZHx8KHN0YXRlLm5lZWRSZWFkYWJsZT0hMCksbk9yaWchPT1uJiZzdGF0ZS5lbmRlZCYmZW5kUmVhZGFibGUodGhpcykpLG51bGwhPT1yZXQmJnRoaXMuZW1pdCgiZGF0YSIscmV0KSxyZXR9LFJlYWRhYmxlLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihuKXtlcnJvck9yRGVzdHJveSh0aGlzLG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgiX3JlYWQoKSIpKX0sUmVhZGFibGUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oZGVzdCxwaXBlT3B0cyl7dmFyIHNyYz10aGlzLHN0YXRlPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKHN0YXRlLnBpcGVzQ291bnQpe2Nhc2UgMDpzdGF0ZS5waXBlcz1kZXN0O2JyZWFrO2Nhc2UgMTpzdGF0ZS5waXBlcz1bc3RhdGUucGlwZXMsZGVzdF07YnJlYWs7ZGVmYXVsdDpzdGF0ZS5waXBlcy5wdXNoKGRlc3QpfXN0YXRlLnBpcGVzQ291bnQrPTEsZGVidWcoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsc3RhdGUucGlwZXNDb3VudCxwaXBlT3B0cyk7dmFyIGVuZEZuPSghcGlwZU9wdHN8fCExIT09cGlwZU9wdHMuZW5kKSYmZGVzdCE9PXByb2Nlc3Muc3Rkb3V0JiZkZXN0IT09cHJvY2Vzcy5zdGRlcnI/b25lbmQ6dW5waXBlO2Z1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlLHVucGlwZUluZm8pe2RlYnVnKCJvbnVucGlwZSIpLHJlYWRhYmxlPT09c3JjJiZ1bnBpcGVJbmZvJiYhMT09PXVucGlwZUluZm8uaGFzVW5waXBlZCYmKHVucGlwZUluZm8uaGFzVW5waXBlZD0hMCxmdW5jdGlvbiBjbGVhbnVwKCl7ZGVidWcoImNsZWFudXAiKSxkZXN0LnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsb25jbG9zZSksZGVzdC5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixvbmZpbmlzaCksZGVzdC5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLG9uZHJhaW4pLGRlc3QucmVtb3ZlTGlzdGVuZXIoImVycm9yIixvbmVycm9yKSxkZXN0LnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLG9udW5waXBlKSxzcmMucmVtb3ZlTGlzdGVuZXIoImVuZCIsb25lbmQpLHNyYy5yZW1vdmVMaXN0ZW5lcigiZW5kIix1bnBpcGUpLHNyYy5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsb25kYXRhKSxjbGVhbmVkVXA9ITAsIXN0YXRlLmF3YWl0RHJhaW58fGRlc3QuX3dyaXRhYmxlU3RhdGUmJiFkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbnx8b25kcmFpbigpfSgpKX1mdW5jdGlvbiBvbmVuZCgpe2RlYnVnKCJvbmVuZCIpLGRlc3QuZW5kKCl9c3RhdGUuZW5kRW1pdHRlZD9wcm9jZXNzLm5leHRUaWNrKGVuZEZuKTpzcmMub25jZSgiZW5kIixlbmRGbiksZGVzdC5vbigidW5waXBlIixvbnVucGlwZSk7dmFyIG9uZHJhaW49ZnVuY3Rpb24gcGlwZU9uRHJhaW4oc3JjKXtyZXR1cm4gZnVuY3Rpb24gcGlwZU9uRHJhaW5GdW5jdGlvblJlc3VsdCgpe3ZhciBzdGF0ZT1zcmMuX3JlYWRhYmxlU3RhdGU7ZGVidWcoInBpcGVPbkRyYWluIixzdGF0ZS5hd2FpdERyYWluKSxzdGF0ZS5hd2FpdERyYWluJiZzdGF0ZS5hd2FpdERyYWluLS0sMD09PXN0YXRlLmF3YWl0RHJhaW4mJkVFbGlzdGVuZXJDb3VudChzcmMsImRhdGEiKSYmKHN0YXRlLmZsb3dpbmc9ITAsZmxvdyhzcmMpKX19KHNyYyk7ZGVzdC5vbigiZHJhaW4iLG9uZHJhaW4pO3ZhciBjbGVhbmVkVXA9ITE7ZnVuY3Rpb24gb25kYXRhKGNodW5rKXtkZWJ1Zygib25kYXRhIik7dmFyIHJldD1kZXN0LndyaXRlKGNodW5rKTtkZWJ1ZygiZGVzdC53cml0ZSIscmV0KSwhMT09PXJldCYmKCgxPT09c3RhdGUucGlwZXNDb3VudCYmc3RhdGUucGlwZXM9PT1kZXN0fHxzdGF0ZS5waXBlc0NvdW50PjEmJi0xIT09aW5kZXhPZihzdGF0ZS5waXBlcyxkZXN0KSkmJiFjbGVhbmVkVXAmJihkZWJ1ZygiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixzdGF0ZS5hd2FpdERyYWluKSxzdGF0ZS5hd2FpdERyYWluKyspLHNyYy5wYXVzZSgpKX1mdW5jdGlvbiBvbmVycm9yKGVyKXtkZWJ1Zygib25lcnJvciIsZXIpLHVucGlwZSgpLGRlc3QucmVtb3ZlTGlzdGVuZXIoImVycm9yIixvbmVycm9yKSwwPT09RUVsaXN0ZW5lckNvdW50KGRlc3QsImVycm9yIikmJmVycm9yT3JEZXN0cm95KGRlc3QsZXIpfWZ1bmN0aW9uIG9uY2xvc2UoKXtkZXN0LnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLG9uZmluaXNoKSx1bnBpcGUoKX1mdW5jdGlvbiBvbmZpbmlzaCgpe2RlYnVnKCJvbmZpbmlzaCIpLGRlc3QucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixvbmNsb3NlKSx1bnBpcGUoKX1mdW5jdGlvbiB1bnBpcGUoKXtkZWJ1ZygidW5waXBlIiksc3JjLnVucGlwZShkZXN0KX1yZXR1cm4gc3JjLm9uKCJkYXRhIixvbmRhdGEpLGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLGV2ZW50LGZuKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyKGV2ZW50LGZuKTtlbWl0dGVyLl9ldmVudHMmJmVtaXR0ZXIuX2V2ZW50c1tldmVudF0/QXJyYXkuaXNBcnJheShlbWl0dGVyLl9ldmVudHNbZXZlbnRdKT9lbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pOmVtaXR0ZXIuX2V2ZW50c1tldmVudF09W2ZuLGVtaXR0ZXIuX2V2ZW50c1tldmVudF1dOmVtaXR0ZXIub24oZXZlbnQsZm4pfShkZXN0LCJlcnJvciIsb25lcnJvciksZGVzdC5vbmNlKCJjbG9zZSIsb25jbG9zZSksZGVzdC5vbmNlKCJmaW5pc2giLG9uZmluaXNoKSxkZXN0LmVtaXQoInBpcGUiLHNyYyksc3RhdGUuZmxvd2luZ3x8KGRlYnVnKCJwaXBlIHJlc3VtZSIpLHNyYy5yZXN1bWUoKSksZGVzdH0sUmVhZGFibGUucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihkZXN0KXt2YXIgc3RhdGU9dGhpcy5fcmVhZGFibGVTdGF0ZSx1bnBpcGVJbmZvPXtoYXNVbnBpcGVkOiExfTtpZigwPT09c3RhdGUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09c3RhdGUucGlwZXNDb3VudClyZXR1cm4gZGVzdCYmZGVzdCE9PXN0YXRlLnBpcGVzfHwoZGVzdHx8KGRlc3Q9c3RhdGUucGlwZXMpLHN0YXRlLnBpcGVzPW51bGwsc3RhdGUucGlwZXNDb3VudD0wLHN0YXRlLmZsb3dpbmc9ITEsZGVzdCYmZGVzdC5lbWl0KCJ1bnBpcGUiLHRoaXMsdW5waXBlSW5mbykpLHRoaXM7aWYoIWRlc3Qpe3ZhciBkZXN0cz1zdGF0ZS5waXBlcyxsZW49c3RhdGUucGlwZXNDb3VudDtzdGF0ZS5waXBlcz1udWxsLHN0YXRlLnBpcGVzQ291bnQ9MCxzdGF0ZS5mbG93aW5nPSExO2Zvcih2YXIgaT0wO2k8bGVuO2krKylkZXN0c1tpXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgaW5kZXg9aW5kZXhPZihzdGF0ZS5waXBlcyxkZXN0KTtyZXR1cm4tMT09PWluZGV4fHwoc3RhdGUucGlwZXMuc3BsaWNlKGluZGV4LDEpLHN0YXRlLnBpcGVzQ291bnQtPTEsMT09PXN0YXRlLnBpcGVzQ291bnQmJihzdGF0ZS5waXBlcz1zdGF0ZS5waXBlc1swXSksZGVzdC5lbWl0KCJ1bnBpcGUiLHRoaXMsdW5waXBlSW5mbykpLHRoaXN9LFJlYWRhYmxlLnByb3RvdHlwZS5vbj1mdW5jdGlvbihldixmbil7dmFyIHJlcz1TdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcyxldixmbiksc3RhdGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT1ldj8oc3RhdGUucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1zdGF0ZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09ZXYmJihzdGF0ZS5lbmRFbWl0dGVkfHxzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZ3x8KHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nPXN0YXRlLm5lZWRSZWFkYWJsZT0hMCxzdGF0ZS5mbG93aW5nPSExLHN0YXRlLmVtaXR0ZWRSZWFkYWJsZT0hMSxkZWJ1Zygib24gcmVhZGFibGUiLHN0YXRlLmxlbmd0aCxzdGF0ZS5yZWFkaW5nKSxzdGF0ZS5sZW5ndGg/ZW1pdFJlYWRhYmxlKHRoaXMpOnN0YXRlLnJlYWRpbmd8fHByb2Nlc3MubmV4dFRpY2soblJlYWRpbmdOZXh0VGljayx0aGlzKSkpLHJlc30sUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyPVJlYWRhYmxlLnByb3RvdHlwZS5vbixSZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZXYsZm4pe3ZhciByZXM9U3RyZWFtLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsZXYsZm4pO3JldHVybiJyZWFkYWJsZSI9PT1ldiYmcHJvY2Vzcy5uZXh0VGljayh1cGRhdGVSZWFkYWJsZUxpc3RlbmluZyx0aGlzKSxyZXN9LFJlYWRhYmxlLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oZXYpe3ZhciByZXM9U3RyZWFtLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiJyZWFkYWJsZSIhPT1ldiYmdm9pZCAwIT09ZXZ8fHByb2Nlc3MubmV4dFRpY2sodXBkYXRlUmVhZGFibGVMaXN0ZW5pbmcsdGhpcykscmVzfSxSZWFkYWJsZS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIHN0YXRlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHN0YXRlLmZsb3dpbmd8fChkZWJ1ZygicmVzdW1lIiksc3RhdGUuZmxvd2luZz0hc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcsZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSxzdGF0ZSl7c3RhdGUucmVzdW1lU2NoZWR1bGVkfHwoc3RhdGUucmVzdW1lU2NoZWR1bGVkPSEwLHByb2Nlc3MubmV4dFRpY2socmVzdW1lXyxzdHJlYW0sc3RhdGUpKX0odGhpcyxzdGF0ZSkpLHN0YXRlLnBhdXNlZD0hMSx0aGlzfSxSZWFkYWJsZS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gZGVidWcoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKGRlYnVnKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRoaXN9LFJlYWRhYmxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHN0cmVhbSl7dmFyIF90aGlzPXRoaXMsc3RhdGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxwYXVzZWQ9ITE7Zm9yKHZhciBpIGluIHN0cmVhbS5vbigiZW5kIixmdW5jdGlvbigpe2lmKGRlYnVnKCJ3cmFwcGVkIGVuZCIpLHN0YXRlLmRlY29kZXImJiFzdGF0ZS5lbmRlZCl7dmFyIGNodW5rPXN0YXRlLmRlY29kZXIuZW5kKCk7Y2h1bmsmJmNodW5rLmxlbmd0aCYmX3RoaXMucHVzaChjaHVuayl9X3RoaXMucHVzaChudWxsKX0pLHN0cmVhbS5vbigiZGF0YSIsZnVuY3Rpb24oY2h1bmspeyhkZWJ1Zygid3JhcHBlZCBkYXRhIiksc3RhdGUuZGVjb2RlciYmKGNodW5rPXN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspKSxzdGF0ZS5vYmplY3RNb2RlJiZudWxsPT1jaHVuayl8fChzdGF0ZS5vYmplY3RNb2RlfHxjaHVuayYmY2h1bmsubGVuZ3RoKSYmKF90aGlzLnB1c2goY2h1bmspfHwocGF1c2VkPSEwLHN0cmVhbS5wYXVzZSgpKSl9KSxzdHJlYW0pdm9pZCAwPT09dGhpc1tpXSYmImZ1bmN0aW9uIj09dHlwZW9mIHN0cmVhbVtpXSYmKHRoaXNbaV09ZnVuY3Rpb24gbWV0aG9kV3JhcChtZXRob2Qpe3JldHVybiBmdW5jdGlvbiBtZXRob2RXcmFwUmV0dXJuRnVuY3Rpb24oKXtyZXR1cm4gc3RyZWFtW21ldGhvZF0uYXBwbHkoc3RyZWFtLGFyZ3VtZW50cyl9fShpKSk7Zm9yKHZhciBuPTA7bjxrUHJveHlFdmVudHMubGVuZ3RoO24rKylzdHJlYW0ub24oa1Byb3h5RXZlbnRzW25dLHRoaXMuZW1pdC5iaW5kKHRoaXMsa1Byb3h5RXZlbnRzW25dKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24obil7ZGVidWcoIndyYXBwZWQgX3JlYWQiLG4pLHBhdXNlZCYmKHBhdXNlZD0hMSxzdHJlYW0ucmVzdW1lKCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoUmVhZGFibGUucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1jcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3ImJihjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3IuanMiKSksY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24gZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uIGdldCgpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCJyZWFkYWJsZUZsb3dpbmciLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24gc2V0KHN0YXRlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPXN0YXRlKX19KSxSZWFkYWJsZS5fZnJvbUxpc3Q9ZnJvbUxpc3QsT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGh9fSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFJlYWRhYmxlLmZyb209ZnVuY3Rpb24oaXRlcmFibGUsb3B0cyl7cmV0dXJuIHZvaWQgMD09PWZyb20mJihmcm9tPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Zyb20tYnJvd3Nlci5qcyIpKSxmcm9tKFJlYWRhYmxlLGl0ZXJhYmxlLG9wdHMpfSl9LCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPVRyYW5zZm9ybTt2YXIgX3JlcXVpcmUkY29kZXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZXJyb3JzLWJyb3dzZXIuanMiKS5GLEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEPV9yZXF1aXJlJGNvZGVzLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELEVSUl9NVUxUSVBMRV9DQUxMQkFDSz1fcmVxdWlyZSRjb2Rlcy5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORz1fcmVxdWlyZSRjb2Rlcy5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLEVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMD1fcmVxdWlyZSRjb2Rlcy5FUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAsRHVwbGV4PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIpO2Z1bmN0aW9uIGFmdGVyVHJhbnNmb3JtKGVyLGRhdGEpe3ZhciB0cz10aGlzLl90cmFuc2Zvcm1TdGF0ZTt0cy50cmFuc2Zvcm1pbmc9ITE7dmFyIGNiPXRzLndyaXRlY2I7aWYobnVsbD09PWNiKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKTt0cy53cml0ZWNodW5rPW51bGwsdHMud3JpdGVjYj1udWxsLG51bGwhPWRhdGEmJnRoaXMucHVzaChkYXRhKSxjYihlcik7dmFyIHJzPXRoaXMuX3JlYWRhYmxlU3RhdGU7cnMucmVhZGluZz0hMSwocnMubmVlZFJlYWRhYmxlfHxycy5sZW5ndGg8cnMuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQocnMuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gVHJhbnNmb3JtKG9wdGlvbnMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFRyYW5zZm9ybSkpcmV0dXJuIG5ldyBUcmFuc2Zvcm0ob3B0aW9ucyk7RHVwbGV4LmNhbGwodGhpcyxvcHRpb25zKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06YWZ0ZXJUcmFuc2Zvcm0uYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLG9wdGlvbnMmJigiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucy50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09b3B0aW9ucy50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBvcHRpb25zLmZsdXNoJiYodGhpcy5fZmx1c2g9b3B0aW9ucy5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIscHJlZmluaXNoKX1mdW5jdGlvbiBwcmVmaW5pc2goKXt2YXIgX3RoaXM9dGhpczsiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZmx1c2h8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkP2RvbmUodGhpcyxudWxsLG51bGwpOnRoaXMuX2ZsdXNoKGZ1bmN0aW9uKGVyLGRhdGEpe2RvbmUoX3RoaXMsZXIsZGF0YSl9KX1mdW5jdGlvbiBkb25lKHN0cmVhbSxlcixkYXRhKXtpZihlcilyZXR1cm4gc3RyZWFtLmVtaXQoImVycm9yIixlcik7aWYobnVsbCE9ZGF0YSYmc3RyZWFtLnB1c2goZGF0YSksc3RyZWFtLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wO2lmKHN0cmVhbS5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBFUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HO3JldHVybiBzdHJlYW0ucHVzaChudWxsKX1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpKFRyYW5zZm9ybSxEdXBsZXgpLFRyYW5zZm9ybS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihjaHVuayxlbmNvZGluZyl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsRHVwbGV4LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxjaHVuayxlbmNvZGluZyl9LFRyYW5zZm9ybS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihjaHVuayxlbmNvZGluZyxjYil7Y2IobmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCJfdHJhbnNmb3JtKCkiKSl9LFRyYW5zZm9ybS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGNodW5rLGVuY29kaW5nLGNiKXt2YXIgdHM9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYodHMud3JpdGVjYj1jYix0cy53cml0ZWNodW5rPWNodW5rLHRzLndyaXRlZW5jb2Rpbmc9ZW5jb2RpbmcsIXRzLnRyYW5zZm9ybWluZyl7dmFyIHJzPXRoaXMuX3JlYWRhYmxlU3RhdGU7KHRzLm5lZWRUcmFuc2Zvcm18fHJzLm5lZWRSZWFkYWJsZXx8cnMubGVuZ3RoPHJzLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspfX0sVHJhbnNmb3JtLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihuKXt2YXIgdHM9dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbD09PXRzLndyaXRlY2h1bmt8fHRzLnRyYW5zZm9ybWluZz90cy5uZWVkVHJhbnNmb3JtPSEwOih0cy50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKHRzLndyaXRlY2h1bmssdHMud3JpdGVlbmNvZGluZyx0cy5hZnRlclRyYW5zZm9ybSkpfSxUcmFuc2Zvcm0ucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGVycixjYil7RHVwbGV4LnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsZXJyLGZ1bmN0aW9uKGVycjIpe2NiKGVycjIpfSl9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fd3JpdGFibGUuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBEdXBsZXgscHJvY2Vzcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvcHJveHkvcHJvY2Vzcy5qcyIpO2Z1bmN0aW9uIENvcmtlZFJlcXVlc3Qoc3RhdGUpe3ZhciBfdGhpcz10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBvbkNvcmtlZEZpbmlzaChjb3JrUmVxLHN0YXRlLGVycil7dmFyIGVudHJ5PWNvcmtSZXEuZW50cnk7Y29ya1JlcS5lbnRyeT1udWxsO2Zvcig7ZW50cnk7KXt2YXIgY2I9ZW50cnkuY2FsbGJhY2s7c3RhdGUucGVuZGluZ2NiLS0sY2IoZXJyKSxlbnRyeT1lbnRyeS5uZXh0fXN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PWNvcmtSZXF9KF90aGlzLHN0YXRlKX19bW9kdWxlLmV4cG9ydHM9V3JpdGFibGUsV3JpdGFibGUuV3JpdGFibGVTdGF0ZT1Xcml0YWJsZVN0YXRlO3ZhciBpbnRlcm5hbFV0aWw9e2RlcHJlY2F0ZTpfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvdXRpbC1kZXByZWNhdGUvYnJvd3Nlci5qcyIpfSxTdHJlYW09X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtLWJyb3dzZXIuanMiKSxCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcixPdXJVaW50OEFycmF5PSh2b2lkIDAhPT1fX3dlYnBhY2tfcmVxdWlyZV9fLmc/X193ZWJwYWNrX3JlcXVpcmVfXy5nOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9O3ZhciByZWFsSGFzSW5zdGFuY2UsZGVzdHJveUltcGw9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5qcyIpLGdldEhpZ2hXYXRlck1hcms9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RhdGUuanMiKS5nZXRIaWdoV2F0ZXJNYXJrLF9yZXF1aXJlJGNvZGVzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2Vycm9ycy1icm93c2VyLmpzIikuRixFUlJfSU5WQUxJRF9BUkdfVFlQRT1fcmVxdWlyZSRjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSxFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRD1fcmVxdWlyZSRjb2Rlcy5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxFUlJfTVVMVElQTEVfQ0FMTEJBQ0s9X3JlcXVpcmUkY29kZXMuRVJSX01VTFRJUExFX0NBTExCQUNLLEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEU9X3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9DQU5OT1RfUElQRSxFUlJfU1RSRUFNX0RFU1RST1lFRD1fcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX0RFU1RST1lFRCxFUlJfU1RSRUFNX05VTExfVkFMVUVTPV9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQ9X3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsRVJSX1VOS05PV05fRU5DT0RJTkc9X3JlcXVpcmUkY29kZXMuRVJSX1VOS05PV05fRU5DT0RJTkcsZXJyb3JPckRlc3Ryb3k9ZGVzdHJveUltcGwuZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gbm9wKCl7fWZ1bmN0aW9uIFdyaXRhYmxlU3RhdGUob3B0aW9ucyxzdHJlYW0saXNEdXBsZXgpe0R1cGxleD1EdXBsZXh8fF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIpLG9wdGlvbnM9b3B0aW9uc3x8e30sImJvb2xlYW4iIT10eXBlb2YgaXNEdXBsZXgmJihpc0R1cGxleD1zdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXgpLHRoaXMub2JqZWN0TW9kZT0hIW9wdGlvbnMub2JqZWN0TW9kZSxpc0R1cGxleCYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1nZXRIaWdoV2F0ZXJNYXJrKHRoaXMsb3B0aW9ucywid3JpdGFibGVIaWdoV2F0ZXJNYXJrIixpc0R1cGxleCksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITE7dmFyIG5vRGVjb2RlPSExPT09b3B0aW9ucy5kZWNvZGVTdHJpbmdzO3RoaXMuZGVjb2RlU3RyaW5ncz0hbm9EZWNvZGUsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9b3B0aW9ucy5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKGVyKXshZnVuY3Rpb24gb253cml0ZShzdHJlYW0sZXIpe3ZhciBzdGF0ZT1zdHJlYW0uX3dyaXRhYmxlU3RhdGUsc3luYz1zdGF0ZS5zeW5jLGNiPXN0YXRlLndyaXRlY2I7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGNiKXRocm93IG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0s7aWYoZnVuY3Rpb24gb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKXtzdGF0ZS53cml0aW5nPSExLHN0YXRlLndyaXRlY2I9bnVsbCxzdGF0ZS5sZW5ndGgtPXN0YXRlLndyaXRlbGVuLHN0YXRlLndyaXRlbGVuPTB9KHN0YXRlKSxlcikhZnVuY3Rpb24gb253cml0ZUVycm9yKHN0cmVhbSxzdGF0ZSxzeW5jLGVyLGNiKXstLXN0YXRlLnBlbmRpbmdjYixzeW5jPyhwcm9jZXNzLm5leHRUaWNrKGNiLGVyKSxwcm9jZXNzLm5leHRUaWNrKGZpbmlzaE1heWJlLHN0cmVhbSxzdGF0ZSksc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxlcnJvck9yRGVzdHJveShzdHJlYW0sZXIpKTooY2IoZXIpLHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsZXJyb3JPckRlc3Ryb3koc3RyZWFtLGVyKSxmaW5pc2hNYXliZShzdHJlYW0sc3RhdGUpKX0oc3RyZWFtLHN0YXRlLHN5bmMsZXIsY2IpO2Vsc2V7dmFyIGZpbmlzaGVkPW5lZWRGaW5pc2goc3RhdGUpfHxzdHJlYW0uZGVzdHJveWVkO2ZpbmlzaGVkfHxzdGF0ZS5jb3JrZWR8fHN0YXRlLmJ1ZmZlclByb2Nlc3Npbmd8fCFzdGF0ZS5idWZmZXJlZFJlcXVlc3R8fGNsZWFyQnVmZmVyKHN0cmVhbSxzdGF0ZSksc3luYz9wcm9jZXNzLm5leHRUaWNrKGFmdGVyV3JpdGUsc3RyZWFtLHN0YXRlLGZpbmlzaGVkLGNiKTphZnRlcldyaXRlKHN0cmVhbSxzdGF0ZSxmaW5pc2hlZCxjYil9fShzdHJlYW0sZXIpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT1vcHRpb25zLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhb3B0aW9ucy5hdXRvRGVzdHJveSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IENvcmtlZFJlcXVlc3QodGhpcyl9ZnVuY3Rpb24gV3JpdGFibGUob3B0aW9ucyl7dmFyIGlzRHVwbGV4PXRoaXMgaW5zdGFuY2VvZihEdXBsZXg9RHVwbGV4fHxfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKSk7aWYoIWlzRHVwbGV4JiYhcmVhbEhhc0luc3RhbmNlLmNhbGwoV3JpdGFibGUsdGhpcykpcmV0dXJuIG5ldyBXcml0YWJsZShvcHRpb25zKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsdGhpcyxpc0R1cGxleCksdGhpcy53cml0YWJsZT0hMCxvcHRpb25zJiYoImZ1bmN0aW9uIj09dHlwZW9mIG9wdGlvbnMud3JpdGUmJih0aGlzLl93cml0ZT1vcHRpb25zLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucy53cml0ZXYmJih0aGlzLl93cml0ZXY9b3B0aW9ucy53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBvcHRpb25zLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PW9wdGlvbnMuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIG9wdGlvbnMuZmluYWwmJih0aGlzLl9maW5hbD1vcHRpb25zLmZpbmFsKSksU3RyZWFtLmNhbGwodGhpcyl9ZnVuY3Rpb24gZG9Xcml0ZShzdHJlYW0sc3RhdGUsd3JpdGV2LGxlbixjaHVuayxlbmNvZGluZyxjYil7c3RhdGUud3JpdGVsZW49bGVuLHN0YXRlLndyaXRlY2I9Y2Isc3RhdGUud3JpdGluZz0hMCxzdGF0ZS5zeW5jPSEwLHN0YXRlLmRlc3Ryb3llZD9zdGF0ZS5vbndyaXRlKG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgid3JpdGUiKSk6d3JpdGV2P3N0cmVhbS5fd3JpdGV2KGNodW5rLHN0YXRlLm9ud3JpdGUpOnN0cmVhbS5fd3JpdGUoY2h1bmssZW5jb2Rpbmcsc3RhdGUub253cml0ZSksc3RhdGUuc3luYz0hMX1mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSxzdGF0ZSxmaW5pc2hlZCxjYil7ZmluaXNoZWR8fGZ1bmN0aW9uIG9ud3JpdGVEcmFpbihzdHJlYW0sc3RhdGUpezA9PT1zdGF0ZS5sZW5ndGgmJnN0YXRlLm5lZWREcmFpbiYmKHN0YXRlLm5lZWREcmFpbj0hMSxzdHJlYW0uZW1pdCgiZHJhaW4iKSl9KHN0cmVhbSxzdGF0ZSksc3RhdGUucGVuZGluZ2NiLS0sY2IoKSxmaW5pc2hNYXliZShzdHJlYW0sc3RhdGUpfWZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSxzdGF0ZSl7c3RhdGUuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgZW50cnk9c3RhdGUuYnVmZmVyZWRSZXF1ZXN0O2lmKHN0cmVhbS5fd3JpdGV2JiZlbnRyeSYmZW50cnkubmV4dCl7dmFyIGw9c3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQsYnVmZmVyPW5ldyBBcnJheShsKSxob2xkZXI9c3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlO2hvbGRlci5lbnRyeT1lbnRyeTtmb3IodmFyIGNvdW50PTAsYWxsQnVmZmVycz0hMDtlbnRyeTspYnVmZmVyW2NvdW50XT1lbnRyeSxlbnRyeS5pc0J1Znx8KGFsbEJ1ZmZlcnM9ITEpLGVudHJ5PWVudHJ5Lm5leHQsY291bnQrPTE7YnVmZmVyLmFsbEJ1ZmZlcnM9YWxsQnVmZmVycyxkb1dyaXRlKHN0cmVhbSxzdGF0ZSwhMCxzdGF0ZS5sZW5ndGgsYnVmZmVyLCIiLGhvbGRlci5maW5pc2gpLHN0YXRlLnBlbmRpbmdjYisrLHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxob2xkZXIubmV4dD8oc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlPWhvbGRlci5uZXh0LGhvbGRlci5uZXh0PW51bGwpOnN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgQ29ya2VkUmVxdWVzdChzdGF0ZSksc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7ZW50cnk7KXt2YXIgY2h1bms9ZW50cnkuY2h1bmssZW5jb2Rpbmc9ZW50cnkuZW5jb2RpbmcsY2I9ZW50cnkuY2FsbGJhY2s7aWYoZG9Xcml0ZShzdHJlYW0sc3RhdGUsITEsc3RhdGUub2JqZWN0TW9kZT8xOmNodW5rLmxlbmd0aCxjaHVuayxlbmNvZGluZyxjYiksZW50cnk9ZW50cnkubmV4dCxzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLHN0YXRlLndyaXRpbmcpYnJlYWt9bnVsbD09PWVudHJ5JiYoc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1zdGF0ZS5idWZmZXJlZFJlcXVlc3Q9ZW50cnksc3RhdGUuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBuZWVkRmluaXNoKHN0YXRlKXtyZXR1cm4gc3RhdGUuZW5kaW5nJiYwPT09c3RhdGUubGVuZ3RoJiZudWxsPT09c3RhdGUuYnVmZmVyZWRSZXF1ZXN0JiYhc3RhdGUuZmluaXNoZWQmJiFzdGF0ZS53cml0aW5nfWZ1bmN0aW9uIGNhbGxGaW5hbChzdHJlYW0sc3RhdGUpe3N0cmVhbS5fZmluYWwoZnVuY3Rpb24oZXJyKXtzdGF0ZS5wZW5kaW5nY2ItLSxlcnImJmVycm9yT3JEZXN0cm95KHN0cmVhbSxlcnIpLHN0YXRlLnByZWZpbmlzaGVkPSEwLHN0cmVhbS5lbWl0KCJwcmVmaW5pc2giKSxmaW5pc2hNYXliZShzdHJlYW0sc3RhdGUpfSl9ZnVuY3Rpb24gZmluaXNoTWF5YmUoc3RyZWFtLHN0YXRlKXt2YXIgbmVlZD1uZWVkRmluaXNoKHN0YXRlKTtpZihuZWVkJiYoZnVuY3Rpb24gcHJlZmluaXNoKHN0cmVhbSxzdGF0ZSl7c3RhdGUucHJlZmluaXNoZWR8fHN0YXRlLmZpbmFsQ2FsbGVkfHwoImZ1bmN0aW9uIiE9dHlwZW9mIHN0cmVhbS5fZmluYWx8fHN0YXRlLmRlc3Ryb3llZD8oc3RhdGUucHJlZmluaXNoZWQ9ITAsc3RyZWFtLmVtaXQoInByZWZpbmlzaCIpKTooc3RhdGUucGVuZGluZ2NiKyssc3RhdGUuZmluYWxDYWxsZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhjYWxsRmluYWwsc3RyZWFtLHN0YXRlKSkpfShzdHJlYW0sc3RhdGUpLDA9PT1zdGF0ZS5wZW5kaW5nY2ImJihzdGF0ZS5maW5pc2hlZD0hMCxzdHJlYW0uZW1pdCgiZmluaXNoIiksc3RhdGUuYXV0b0Rlc3Ryb3kpKSl7dmFyIHJTdGF0ZT1zdHJlYW0uX3JlYWRhYmxlU3RhdGU7KCFyU3RhdGV8fHJTdGF0ZS5hdXRvRGVzdHJveSYmclN0YXRlLmVuZEVtaXR0ZWQpJiZzdHJlYW0uZGVzdHJveSgpfXJldHVybiBuZWVkfV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIikoV3JpdGFibGUsU3RyZWFtKSxXcml0YWJsZVN0YXRlLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24gZ2V0QnVmZmVyKCl7Zm9yKHZhciBjdXJyZW50PXRoaXMuYnVmZmVyZWRSZXF1ZXN0LG91dD1bXTtjdXJyZW50OylvdXQucHVzaChjdXJyZW50KSxjdXJyZW50PWN1cnJlbnQubmV4dDtyZXR1cm4gb3V0fSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDppbnRlcm5hbFV0aWwuZGVwcmVjYXRlKGZ1bmN0aW9uIHdyaXRhYmxlU3RhdGVCdWZmZXJHZXR0ZXIoKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2goXyl7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8ocmVhbEhhc0luc3RhbmNlPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uIHZhbHVlKG9iamVjdCl7cmV0dXJuISFyZWFsSGFzSW5zdGFuY2UuY2FsbCh0aGlzLG9iamVjdCl8fHRoaXM9PT1Xcml0YWJsZSYmKG9iamVjdCYmb2JqZWN0Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgV3JpdGFibGVTdGF0ZSl9fSkpOnJlYWxIYXNJbnN0YW5jZT1mdW5jdGlvbiByZWFsSGFzSW5zdGFuY2Uob2JqZWN0KXtyZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgdGhpc30sV3JpdGFibGUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtlcnJvck9yRGVzdHJveSh0aGlzLG5ldyBFUlJfU1RSRUFNX0NBTk5PVF9QSVBFKX0sV3JpdGFibGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGNodW5rLGVuY29kaW5nLGNiKXt2YXIgc3RhdGU9dGhpcy5fd3JpdGFibGVTdGF0ZSxyZXQ9ITEsaXNCdWY9IXN0YXRlLm9iamVjdE1vZGUmJmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKG9iail8fG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXl9KGNodW5rKTtyZXR1cm4gaXNCdWYmJiFCdWZmZXIuaXNCdWZmZXIoY2h1bmspJiYoY2h1bms9ZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuayl7cmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKX0oY2h1bmspKSwiZnVuY3Rpb24iPT10eXBlb2YgZW5jb2RpbmcmJihjYj1lbmNvZGluZyxlbmNvZGluZz1udWxsKSxpc0J1Zj9lbmNvZGluZz0iYnVmZmVyIjplbmNvZGluZ3x8KGVuY29kaW5nPXN0YXRlLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIGNiJiYoY2I9bm9wKSxzdGF0ZS5lbmRpbmc/ZnVuY3Rpb24gd3JpdGVBZnRlckVuZChzdHJlYW0sY2Ipe3ZhciBlcj1uZXcgRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQ7ZXJyb3JPckRlc3Ryb3koc3RyZWFtLGVyKSxwcm9jZXNzLm5leHRUaWNrKGNiLGVyKX0odGhpcyxjYik6KGlzQnVmfHxmdW5jdGlvbiB2YWxpZENodW5rKHN0cmVhbSxzdGF0ZSxjaHVuayxjYil7dmFyIGVyO3JldHVybiBudWxsPT09Y2h1bms/ZXI9bmV3IEVSUl9TVFJFQU1fTlVMTF9WQUxVRVM6InN0cmluZyI9PXR5cGVvZiBjaHVua3x8c3RhdGUub2JqZWN0TW9kZXx8KGVyPW5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0sY2h1bmspKSwhZXJ8fChlcnJvck9yRGVzdHJveShzdHJlYW0sZXIpLHByb2Nlc3MubmV4dFRpY2soY2IsZXIpLCExKX0odGhpcyxzdGF0ZSxjaHVuayxjYikpJiYoc3RhdGUucGVuZGluZ2NiKysscmV0PWZ1bmN0aW9uIHdyaXRlT3JCdWZmZXIoc3RyZWFtLHN0YXRlLGlzQnVmLGNodW5rLGVuY29kaW5nLGNiKXtpZighaXNCdWYpe3ZhciBuZXdDaHVuaz1mdW5jdGlvbiBkZWNvZGVDaHVuayhzdGF0ZSxjaHVuayxlbmNvZGluZyl7c3RhdGUub2JqZWN0TW9kZXx8ITE9PT1zdGF0ZS5kZWNvZGVTdHJpbmdzfHwic3RyaW5nIiE9dHlwZW9mIGNodW5rfHwoY2h1bms9QnVmZmVyLmZyb20oY2h1bmssZW5jb2RpbmcpKTtyZXR1cm4gY2h1bmt9KHN0YXRlLGNodW5rLGVuY29kaW5nKTtjaHVuayE9PW5ld0NodW5rJiYoaXNCdWY9ITAsZW5jb2Rpbmc9ImJ1ZmZlciIsY2h1bms9bmV3Q2h1bmspfXZhciBsZW49c3RhdGUub2JqZWN0TW9kZT8xOmNodW5rLmxlbmd0aDtzdGF0ZS5sZW5ndGgrPWxlbjt2YXIgcmV0PXN0YXRlLmxlbmd0aDxzdGF0ZS5oaWdoV2F0ZXJNYXJrO3JldHx8KHN0YXRlLm5lZWREcmFpbj0hMCk7aWYoc3RhdGUud3JpdGluZ3x8c3RhdGUuY29ya2VkKXt2YXIgbGFzdD1zdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O3N0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rLGVuY29kaW5nLGlzQnVmLGNhbGxiYWNrOmNiLG5leHQ6bnVsbH0sbGFzdD9sYXN0Lm5leHQ9c3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDpzdGF0ZS5idWZmZXJlZFJlcXVlc3Q9c3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCxzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIGRvV3JpdGUoc3RyZWFtLHN0YXRlLCExLGxlbixjaHVuayxlbmNvZGluZyxjYik7cmV0dXJuIHJldH0odGhpcyxzdGF0ZSxpc0J1ZixjaHVuayxlbmNvZGluZyxjYikpLHJldH0sV3JpdGFibGUucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxXcml0YWJsZS5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIHN0YXRlPXRoaXMuX3dyaXRhYmxlU3RhdGU7c3RhdGUuY29ya2VkJiYoc3RhdGUuY29ya2VkLS0sc3RhdGUud3JpdGluZ3x8c3RhdGUuY29ya2VkfHxzdGF0ZS5idWZmZXJQcm9jZXNzaW5nfHwhc3RhdGUuYnVmZmVyZWRSZXF1ZXN0fHxjbGVhckJ1ZmZlcih0aGlzLHN0YXRlKSl9LFdyaXRhYmxlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24gc2V0RGVmYXVsdEVuY29kaW5nKGVuY29kaW5nKXtpZigic3RyaW5nIj09dHlwZW9mIGVuY29kaW5nJiYoZW5jb2Rpbmc9ZW5jb2RpbmcudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigoZW5jb2RpbmcrIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgRVJSX1VOS05PV05fRU5DT0RJTkcoZW5jb2RpbmcpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1lbmNvZGluZyx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uIGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uIGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksV3JpdGFibGUucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihjaHVuayxlbmNvZGluZyxjYil7Y2IobmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCJfd3JpdGUoKSIpKX0sV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXY9bnVsbCxXcml0YWJsZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGNodW5rLGVuY29kaW5nLGNiKXt2YXIgc3RhdGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY2h1bms/KGNiPWNodW5rLGNodW5rPW51bGwsZW5jb2Rpbmc9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIGVuY29kaW5nJiYoY2I9ZW5jb2RpbmcsZW5jb2Rpbmc9bnVsbCksbnVsbCE9Y2h1bmsmJnRoaXMud3JpdGUoY2h1bmssZW5jb2RpbmcpLHN0YXRlLmNvcmtlZCYmKHN0YXRlLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLHN0YXRlLmVuZGluZ3x8ZnVuY3Rpb24gZW5kV3JpdGFibGUoc3RyZWFtLHN0YXRlLGNiKXtzdGF0ZS5lbmRpbmc9ITAsZmluaXNoTWF5YmUoc3RyZWFtLHN0YXRlKSxjYiYmKHN0YXRlLmZpbmlzaGVkP3Byb2Nlc3MubmV4dFRpY2soY2IpOnN0cmVhbS5vbmNlKCJmaW5pc2giLGNiKSk7c3RhdGUuZW5kZWQ9ITAsc3RyZWFtLndyaXRhYmxlPSExfSh0aGlzLHN0YXRlLGNiKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uIGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbiBzZXQodmFsdWUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD12YWx1ZSl9fSksV3JpdGFibGUucHJvdG90eXBlLmRlc3Ryb3k9ZGVzdHJveUltcGwuZGVzdHJveSxXcml0YWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveT1kZXN0cm95SW1wbC51bmRlc3Ryb3ksV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGVycixjYil7Y2IoZXJyKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9hc3luY19pdGVyYXRvci5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIF9PYmplY3Qkc2V0UHJvdG90eXBlTyxwcm9jZXNzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9wcm94eS9wcm9jZXNzLmpzIik7ZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaixrZXksdmFsdWUpe3JldHVybihrZXk9ZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKXt2YXIga2V5PWZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCxoaW50KXtpZigib2JqZWN0IiE9dHlwZW9mIGlucHV0fHxudWxsPT09aW5wdXQpcmV0dXJuIGlucHV0O3ZhciBwcmltPWlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cHJpbSl7dmFyIHJlcz1wcmltLmNhbGwoaW5wdXQsaGludHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHJlcylyZXR1cm4gcmVzO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09aGludD9TdHJpbmc6TnVtYmVyKShpbnB1dCl9KGFyZywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBrZXk/a2V5OlN0cmluZyhrZXkpfShrZXkpKWluIG9iaj9PYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLGtleSx7dmFsdWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpvYmpba2V5XT12YWx1ZSxvYmp9dmFyIGZpbmlzaGVkPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMiKSxrTGFzdFJlc29sdmU9U3ltYm9sKCJsYXN0UmVzb2x2ZSIpLGtMYXN0UmVqZWN0PVN5bWJvbCgibGFzdFJlamVjdCIpLGtFcnJvcj1TeW1ib2woImVycm9yIiksa0VuZGVkPVN5bWJvbCgiZW5kZWQiKSxrTGFzdFByb21pc2U9U3ltYm9sKCJsYXN0UHJvbWlzZSIpLGtIYW5kbGVQcm9taXNlPVN5bWJvbCgiaGFuZGxlUHJvbWlzZSIpLGtTdHJlYW09U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBjcmVhdGVJdGVyUmVzdWx0KHZhbHVlLGRvbmUpe3JldHVybnt2YWx1ZSxkb25lfX1mdW5jdGlvbiByZWFkQW5kUmVzb2x2ZShpdGVyKXt2YXIgcmVzb2x2ZT1pdGVyW2tMYXN0UmVzb2x2ZV07aWYobnVsbCE9PXJlc29sdmUpe3ZhciBkYXRhPWl0ZXJba1N0cmVhbV0ucmVhZCgpO251bGwhPT1kYXRhJiYoaXRlcltrTGFzdFByb21pc2VdPW51bGwsaXRlcltrTGFzdFJlc29sdmVdPW51bGwsaXRlcltrTGFzdFJlamVjdF09bnVsbCxyZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQoZGF0YSwhMSkpKX19ZnVuY3Rpb24gb25SZWFkYWJsZShpdGVyKXtwcm9jZXNzLm5leHRUaWNrKHJlYWRBbmRSZXNvbHZlLGl0ZXIpfXZhciBBc3luY0l0ZXJhdG9yUHJvdG90eXBlPU9iamVjdC5nZXRQcm90b3R5cGVPZihmdW5jdGlvbigpe30pLFJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvclByb3RvdHlwZT1PYmplY3Quc2V0UHJvdG90eXBlT2YoKF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JHNldFByb3RvdHlwZU89e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1trU3RyZWFtXX0sbmV4dDpmdW5jdGlvbiBuZXh0KCl7dmFyIF90aGlzPXRoaXMsZXJyb3I9dGhpc1trRXJyb3JdO2lmKG51bGwhPT1lcnJvcilyZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO2lmKHRoaXNba0VuZGVkXSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodm9pZCAwLCEwKSk7aWYodGhpc1trU3RyZWFtXS5kZXN0cm95ZWQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUscmVqZWN0KXtwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7X3RoaXNba0Vycm9yXT9yZWplY3QoX3RoaXNba0Vycm9yXSk6cmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHZvaWQgMCwhMCkpfSl9KTt2YXIgcHJvbWlzZSxsYXN0UHJvbWlzZT10aGlzW2tMYXN0UHJvbWlzZV07aWYobGFzdFByb21pc2UpcHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbiB3cmFwRm9yTmV4dChsYXN0UHJvbWlzZSxpdGVyKXtyZXR1cm4gZnVuY3Rpb24ocmVzb2x2ZSxyZWplY3Qpe2xhc3RQcm9taXNlLnRoZW4oZnVuY3Rpb24oKXtpdGVyW2tFbmRlZF0/cmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHZvaWQgMCwhMCkpOml0ZXJba0hhbmRsZVByb21pc2VdKHJlc29sdmUscmVqZWN0KX0scmVqZWN0KX19KGxhc3RQcm9taXNlLHRoaXMpKTtlbHNle3ZhciBkYXRhPXRoaXNba1N0cmVhbV0ucmVhZCgpO2lmKG51bGwhPT1kYXRhKXJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChkYXRhLCExKSk7cHJvbWlzZT1uZXcgUHJvbWlzZSh0aGlzW2tIYW5kbGVQcm9taXNlXSl9cmV0dXJuIHRoaXNba0xhc3RQcm9taXNlXT1wcm9taXNlLHByb21pc2V9fSxTeW1ib2wuYXN5bmNJdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSksX2RlZmluZVByb3BlcnR5KF9PYmplY3Qkc2V0UHJvdG90eXBlTywicmV0dXJuIixmdW5jdGlvbiBfcmV0dXJuKCl7dmFyIF90aGlzMj10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLHJlamVjdCl7X3RoaXMyW2tTdHJlYW1dLmRlc3Ryb3kobnVsbCxmdW5jdGlvbihlcnIpe2Vycj9yZWplY3QoZXJyKTpyZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodm9pZCAwLCEwKSl9KX0pfSksX09iamVjdCRzZXRQcm90b3R5cGVPKSxBc3luY0l0ZXJhdG9yUHJvdG90eXBlKTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3Ioc3RyZWFtKXt2YXIgX09iamVjdCRjcmVhdGUsaXRlcmF0b3I9T2JqZWN0LmNyZWF0ZShSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3JQcm90b3R5cGUsKF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZT17fSxrU3RyZWFtLHt2YWx1ZTpzdHJlYW0sd3JpdGFibGU6ITB9KSxfZGVmaW5lUHJvcGVydHkoX09iamVjdCRjcmVhdGUsa0xhc3RSZXNvbHZlLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLGtMYXN0UmVqZWN0LHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLGtFcnJvcix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSxrRW5kZWQse3ZhbHVlOnN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSksX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLGtIYW5kbGVQcm9taXNlLHt2YWx1ZTpmdW5jdGlvbiB2YWx1ZShyZXNvbHZlLHJlamVjdCl7dmFyIGRhdGE9aXRlcmF0b3Jba1N0cmVhbV0ucmVhZCgpO2RhdGE/KGl0ZXJhdG9yW2tMYXN0UHJvbWlzZV09bnVsbCxpdGVyYXRvcltrTGFzdFJlc29sdmVdPW51bGwsaXRlcmF0b3Jba0xhc3RSZWplY3RdPW51bGwscmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KGRhdGEsITEpKSk6KGl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV09cmVzb2x2ZSxpdGVyYXRvcltrTGFzdFJlamVjdF09cmVqZWN0KX0sd3JpdGFibGU6ITB9KSxfT2JqZWN0JGNyZWF0ZSkpO3JldHVybiBpdGVyYXRvcltrTGFzdFByb21pc2VdPW51bGwsZmluaXNoZWQoc3RyZWFtLGZ1bmN0aW9uKGVycil7aWYoZXJyJiYiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiIT09ZXJyLmNvZGUpe3ZhciByZWplY3Q9aXRlcmF0b3Jba0xhc3RSZWplY3RdO3JldHVybiBudWxsIT09cmVqZWN0JiYoaXRlcmF0b3Jba0xhc3RQcm9taXNlXT1udWxsLGl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV09bnVsbCxpdGVyYXRvcltrTGFzdFJlamVjdF09bnVsbCxyZWplY3QoZXJyKSksdm9pZChpdGVyYXRvcltrRXJyb3JdPWVycil9dmFyIHJlc29sdmU9aXRlcmF0b3Jba0xhc3RSZXNvbHZlXTtudWxsIT09cmVzb2x2ZSYmKGl0ZXJhdG9yW2tMYXN0UHJvbWlzZV09bnVsbCxpdGVyYXRvcltrTGFzdFJlc29sdmVdPW51bGwsaXRlcmF0b3Jba0xhc3RSZWplY3RdPW51bGwscmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHZvaWQgMCwhMCkpKSxpdGVyYXRvcltrRW5kZWRdPSEwfSksc3RyZWFtLm9uKCJyZWFkYWJsZSIsb25SZWFkYWJsZS5iaW5kKG51bGwsaXRlcmF0b3IpKSxpdGVyYXRvcn19LCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9idWZmZXJfbGlzdC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsZW51bWVyYWJsZU9ubHkpe3ZhciBrZXlzPU9iamVjdC5rZXlzKG9iamVjdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHN5bWJvbHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO2VudW1lcmFibGVPbmx5JiYoc3ltYm9scz1zeW1ib2xzLmZpbHRlcihmdW5jdGlvbihzeW0pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCxzeW0pLmVudW1lcmFibGV9KSksa2V5cy5wdXNoLmFwcGx5KGtleXMsc3ltYm9scyl9cmV0dXJuIGtleXN9ZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpe2Zvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBzb3VyY2U9bnVsbCE9YXJndW1lbnRzW2ldP2FyZ3VtZW50c1tpXTp7fTtpJTI/b3duS2V5cyhPYmplY3Qoc291cmNlKSwhMCkuZm9yRWFjaChmdW5jdGlvbihrZXkpe19kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LHNvdXJjZVtrZXldKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTpvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCxrZXksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2Usa2V5KSl9KX1yZXR1cm4gdGFyZ2V0fWZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHZhbHVlKXtyZXR1cm4oa2V5PV90b1Byb3BlcnR5S2V5KGtleSkpaW4gb2JqP09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHt2YWx1ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm9ialtrZXldPXZhbHVlLG9ian1mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQscHJvcHMpe2Zvcih2YXIgaT0wO2k8cHJvcHMubGVuZ3RoO2krKyl7dmFyIGRlc2NyaXB0b3I9cHJvcHNbaV07ZGVzY3JpcHRvci5lbnVtZXJhYmxlPWRlc2NyaXB0b3IuZW51bWVyYWJsZXx8ITEsZGVzY3JpcHRvci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGRlc2NyaXB0b3ImJihkZXNjcmlwdG9yLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LF90b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSxkZXNjcmlwdG9yKX19ZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKXt2YXIga2V5PWZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCxoaW50KXtpZigib2JqZWN0IiE9dHlwZW9mIGlucHV0fHxudWxsPT09aW5wdXQpcmV0dXJuIGlucHV0O3ZhciBwcmltPWlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cHJpbSl7dmFyIHJlcz1wcmltLmNhbGwoaW5wdXQsaGludHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHJlcylyZXR1cm4gcmVzO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09aGludD9TdHJpbmc6TnVtYmVyKShpbnB1dCl9KGFyZywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBrZXk/a2V5OlN0cmluZyhrZXkpfXZhciBCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcixpbnNwZWN0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiKS5pbnNwZWN0LGN1c3RvbT1pbnNwZWN0JiZpbnNwZWN0LmN1c3RvbXx8Imluc3BlY3QiO2Z1bmN0aW9uIGNvcHlCdWZmZXIoc3JjLHRhcmdldCxvZmZzZXQpe0J1ZmZlci5wcm90b3R5cGUuY29weS5jYWxsKHNyYyx0YXJnZXQsb2Zmc2V0KX1tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIEJ1ZmZlckxpc3QoKXshZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLEJ1ZmZlckxpc3QpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3Rvcixwcm90b1Byb3BzLHN0YXRpY1Byb3BzKXtyZXR1cm4gcHJvdG9Qcm9wcyYmX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLHByb3RvUHJvcHMpLHN0YXRpY1Byb3BzJiZfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3RvcixzdGF0aWNQcm9wcyksT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLENvbnN0cnVjdG9yfShCdWZmZXJMaXN0LFt7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlvbiBwdXNoKHYpe3ZhciBlbnRyeT17ZGF0YTp2LG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1lbnRyeTp0aGlzLmhlYWQ9ZW50cnksdGhpcy50YWlsPWVudHJ5LCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbiB1bnNoaWZ0KHYpe3ZhciBlbnRyeT17ZGF0YTp2LG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9ZW50cnkpLHRoaXMuaGVhZD1lbnRyeSwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uIHNoaWZ0KCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgcmV0PXRoaXMuaGVhZC5kYXRhO3JldHVybiAxPT09dGhpcy5sZW5ndGg/dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsOnRoaXMuaGVhZD10aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLHJldH19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24gY2xlYXIoKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZhbHVlOmZ1bmN0aW9uIGpvaW4ocyl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgcD10aGlzLmhlYWQscmV0PSIiK3AuZGF0YTtwPXAubmV4dDspcmV0Kz1zK3AuZGF0YTtyZXR1cm4gcmV0fX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbiBjb25jYXQobil7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBCdWZmZXIuYWxsb2MoMCk7Zm9yKHZhciByZXQ9QnVmZmVyLmFsbG9jVW5zYWZlKG4+Pj4wKSxwPXRoaXMuaGVhZCxpPTA7cDspY29weUJ1ZmZlcihwLmRhdGEscmV0LGkpLGkrPXAuZGF0YS5sZW5ndGgscD1wLm5leHQ7cmV0dXJuIHJldH19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uIGNvbnN1bWUobixoYXNTdHJpbmdzKXt2YXIgcmV0O3JldHVybiBuPHRoaXMuaGVhZC5kYXRhLmxlbmd0aD8ocmV0PXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsbiksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UobikpOnJldD1uPT09dGhpcy5oZWFkLmRhdGEubGVuZ3RoP3RoaXMuc2hpZnQoKTpoYXNTdHJpbmdzP3RoaXMuX2dldFN0cmluZyhuKTp0aGlzLl9nZXRCdWZmZXIobikscmV0fX0se2tleToiZmlyc3QiLHZhbHVlOmZ1bmN0aW9uIGZpcnN0KCl7cmV0dXJuIHRoaXMuaGVhZC5kYXRhfX0se2tleToiX2dldFN0cmluZyIsdmFsdWU6ZnVuY3Rpb24gX2dldFN0cmluZyhuKXt2YXIgcD10aGlzLmhlYWQsYz0xLHJldD1wLmRhdGE7Zm9yKG4tPXJldC5sZW5ndGg7cD1wLm5leHQ7KXt2YXIgc3RyPXAuZGF0YSxuYj1uPnN0ci5sZW5ndGg/c3RyLmxlbmd0aDpuO2lmKG5iPT09c3RyLmxlbmd0aD9yZXQrPXN0cjpyZXQrPXN0ci5zbGljZSgwLG4pLDA9PT0obi09bmIpKXtuYj09PXN0ci5sZW5ndGg/KCsrYyxwLm5leHQ/dGhpcy5oZWFkPXAubmV4dDp0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9cCxwLmRhdGE9c3RyLnNsaWNlKG5iKSk7YnJlYWt9KytjfXJldHVybiB0aGlzLmxlbmd0aC09YyxyZXR9fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbiBfZ2V0QnVmZmVyKG4pe3ZhciByZXQ9QnVmZmVyLmFsbG9jVW5zYWZlKG4pLHA9dGhpcy5oZWFkLGM9MTtmb3IocC5kYXRhLmNvcHkocmV0KSxuLT1wLmRhdGEubGVuZ3RoO3A9cC5uZXh0Oyl7dmFyIGJ1Zj1wLmRhdGEsbmI9bj5idWYubGVuZ3RoP2J1Zi5sZW5ndGg6bjtpZihidWYuY29weShyZXQscmV0Lmxlbmd0aC1uLDAsbmIpLDA9PT0obi09bmIpKXtuYj09PWJ1Zi5sZW5ndGg/KCsrYyxwLm5leHQ/dGhpcy5oZWFkPXAubmV4dDp0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9cCxwLmRhdGE9YnVmLnNsaWNlKG5iKSk7YnJlYWt9KytjfXJldHVybiB0aGlzLmxlbmd0aC09YyxyZXR9fSx7a2V5OmN1c3RvbSx2YWx1ZTpmdW5jdGlvbiB2YWx1ZShfLG9wdGlvbnMpe3JldHVybiBpbnNwZWN0KHRoaXMsX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LG9wdGlvbnMpLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pLEJ1ZmZlckxpc3R9KCl9LCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgcHJvY2Vzcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvcHJveHkvcHJvY2Vzcy5qcyIpO2Z1bmN0aW9uIGVtaXRFcnJvckFuZENsb3NlTlQoc2VsZixlcnIpe2VtaXRFcnJvck5UKHNlbGYsZXJyKSxlbWl0Q2xvc2VOVChzZWxmKX1mdW5jdGlvbiBlbWl0Q2xvc2VOVChzZWxmKXtzZWxmLl93cml0YWJsZVN0YXRlJiYhc2VsZi5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHNlbGYuX3JlYWRhYmxlU3RhdGUmJiFzZWxmLl9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZXx8c2VsZi5lbWl0KCJjbG9zZSIpfWZ1bmN0aW9uIGVtaXRFcnJvck5UKHNlbGYsZXJyKXtzZWxmLmVtaXQoImVycm9yIixlcnIpfW1vZHVsZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIGRlc3Ryb3koZXJyLGNiKXt2YXIgX3RoaXM9dGhpcyxyZWFkYWJsZURlc3Ryb3llZD10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCx3cml0YWJsZURlc3Ryb3llZD10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtyZXR1cm4gcmVhZGFibGVEZXN0cm95ZWR8fHdyaXRhYmxlRGVzdHJveWVkPyhjYj9jYihlcnIpOmVyciYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvck5ULHRoaXMsZXJyKSk6cHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JOVCx0aGlzLGVycikpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveShlcnJ8fG51bGwsZnVuY3Rpb24oZXJyKXshY2ImJmVycj9fdGhpcy5fd3JpdGFibGVTdGF0ZT9fdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ/cHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCxfdGhpcyk6KF90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvckFuZENsb3NlTlQsX3RoaXMsZXJyKSk6cHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JBbmRDbG9zZU5ULF90aGlzLGVycik6Y2I/KHByb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlTlQsX3RoaXMpLGNiKGVycikpOnByb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlTlQsX3RoaXMpfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiB1bmRlc3Ryb3koKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9LGVycm9yT3JEZXN0cm95OmZ1bmN0aW9uIGVycm9yT3JEZXN0cm95KHN0cmVhbSxlcnIpe3ZhciByU3RhdGU9c3RyZWFtLl9yZWFkYWJsZVN0YXRlLHdTdGF0ZT1zdHJlYW0uX3dyaXRhYmxlU3RhdGU7clN0YXRlJiZyU3RhdGUuYXV0b0Rlc3Ryb3l8fHdTdGF0ZSYmd1N0YXRlLmF1dG9EZXN0cm95P3N0cmVhbS5kZXN0cm95KGVycik6c3RyZWFtLmVtaXQoImVycm9yIixlcnIpfX19LCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZXJyb3JzLWJyb3dzZXIuanMiKS5GLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO2Z1bmN0aW9uIG5vb3AoKXt9bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gZW9zKHN0cmVhbSxvcHRzLGNhbGxiYWNrKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygb3B0cylyZXR1cm4gZW9zKHN0cmVhbSxudWxsLG9wdHMpO29wdHN8fChvcHRzPXt9KSxjYWxsYmFjaz1mdW5jdGlvbiBvbmNlKGNhbGxiYWNrKXt2YXIgY2FsbGVkPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFjYWxsZWQpe2NhbGxlZD0hMDtmb3IodmFyIF9sZW49YXJndW1lbnRzLmxlbmd0aCxhcmdzPW5ldyBBcnJheShfbGVuKSxfa2V5PTA7X2tleTxfbGVuO19rZXkrKylhcmdzW19rZXldPWFyZ3VtZW50c1tfa2V5XTtjYWxsYmFjay5hcHBseSh0aGlzLGFyZ3MpfX19KGNhbGxiYWNrfHxub29wKTt2YXIgcmVhZGFibGU9b3B0cy5yZWFkYWJsZXx8ITEhPT1vcHRzLnJlYWRhYmxlJiZzdHJlYW0ucmVhZGFibGUsd3JpdGFibGU9b3B0cy53cml0YWJsZXx8ITEhPT1vcHRzLndyaXRhYmxlJiZzdHJlYW0ud3JpdGFibGUsb25sZWdhY3lmaW5pc2g9ZnVuY3Rpb24gb25sZWdhY3lmaW5pc2goKXtzdHJlYW0ud3JpdGFibGV8fG9uZmluaXNoKCl9LHdyaXRhYmxlRW5kZWQ9c3RyZWFtLl93cml0YWJsZVN0YXRlJiZzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQsb25maW5pc2g9ZnVuY3Rpb24gb25maW5pc2goKXt3cml0YWJsZT0hMSx3cml0YWJsZUVuZGVkPSEwLHJlYWRhYmxlfHxjYWxsYmFjay5jYWxsKHN0cmVhbSl9LHJlYWRhYmxlRW5kZWQ9c3RyZWFtLl9yZWFkYWJsZVN0YXRlJiZzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxvbmVuZD1mdW5jdGlvbiBvbmVuZCgpe3JlYWRhYmxlPSExLHJlYWRhYmxlRW5kZWQ9ITAsd3JpdGFibGV8fGNhbGxiYWNrLmNhbGwoc3RyZWFtKX0sb25lcnJvcj1mdW5jdGlvbiBvbmVycm9yKGVycil7Y2FsbGJhY2suY2FsbChzdHJlYW0sZXJyKX0sb25jbG9zZT1mdW5jdGlvbiBvbmNsb3NlKCl7dmFyIGVycjtyZXR1cm4gcmVhZGFibGUmJiFyZWFkYWJsZUVuZGVkPyhzdHJlYW0uX3JlYWRhYmxlU3RhdGUmJnN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lbmRlZHx8KGVycj1uZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UpLGNhbGxiYWNrLmNhbGwoc3RyZWFtLGVycikpOndyaXRhYmxlJiYhd3JpdGFibGVFbmRlZD8oc3RyZWFtLl93cml0YWJsZVN0YXRlJiZzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZW5kZWR8fChlcnI9bmV3IEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFKSxjYWxsYmFjay5jYWxsKHN0cmVhbSxlcnIpKTp2b2lkIDB9LG9ucmVxdWVzdD1mdW5jdGlvbiBvbnJlcXVlc3QoKXtzdHJlYW0ucmVxLm9uKCJmaW5pc2giLG9uZmluaXNoKX07cmV0dXJuIWZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pe3JldHVybiBzdHJlYW0uc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2Ygc3RyZWFtLmFib3J0fShzdHJlYW0pP3dyaXRhYmxlJiYhc3RyZWFtLl93cml0YWJsZVN0YXRlJiYoc3RyZWFtLm9uKCJlbmQiLG9ubGVnYWN5ZmluaXNoKSxzdHJlYW0ub24oImNsb3NlIixvbmxlZ2FjeWZpbmlzaCkpOihzdHJlYW0ub24oImNvbXBsZXRlIixvbmZpbmlzaCksc3RyZWFtLm9uKCJhYm9ydCIsb25jbG9zZSksc3RyZWFtLnJlcT9vbnJlcXVlc3QoKTpzdHJlYW0ub24oInJlcXVlc3QiLG9ucmVxdWVzdCkpLHN0cmVhbS5vbigiZW5kIixvbmVuZCksc3RyZWFtLm9uKCJmaW5pc2giLG9uZmluaXNoKSwhMSE9PW9wdHMuZXJyb3ImJnN0cmVhbS5vbigiZXJyb3IiLG9uZXJyb3IpLHN0cmVhbS5vbigiY2xvc2UiLG9uY2xvc2UpLGZ1bmN0aW9uKCl7c3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJjb21wbGV0ZSIsb25maW5pc2gpLHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigiYWJvcnQiLG9uY2xvc2UpLHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsb25yZXF1ZXN0KSxzdHJlYW0ucmVxJiZzdHJlYW0ucmVxLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLG9uZmluaXNoKSxzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImVuZCIsb25sZWdhY3lmaW5pc2gpLHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLG9ubGVnYWN5ZmluaXNoKSxzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsb25maW5pc2gpLHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigiZW5kIixvbmVuZCksc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsb25lcnJvciksc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsb25jbG9zZSl9fX0sIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Zyb20tYnJvd3Nlci5qcyIobW9kdWxlKXttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciBlb3M7dmFyIF9yZXF1aXJlJGNvZGVzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2Vycm9ycy1icm93c2VyLmpzIikuRixFUlJfTUlTU0lOR19BUkdTPV9yZXF1aXJlJGNvZGVzLkVSUl9NSVNTSU5HX0FSR1MsRVJSX1NUUkVBTV9ERVNUUk9ZRUQ9X3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gbm9vcChlcnIpe2lmKGVycil0aHJvdyBlcnJ9ZnVuY3Rpb24gY2FsbChmbil7Zm4oKX1mdW5jdGlvbiBwaXBlKGZyb20sdG8pe3JldHVybiBmcm9tLnBpcGUodG8pfW1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIHBpcGVsaW5lKCl7Zm9yKHZhciBfbGVuPWFyZ3VtZW50cy5sZW5ndGgsc3RyZWFtcz1uZXcgQXJyYXkoX2xlbiksX2tleT0wO19rZXk8X2xlbjtfa2V5Kyspc3RyZWFtc1tfa2V5XT1hcmd1bWVudHNbX2tleV07dmFyIGVycm9yLGNhbGxiYWNrPWZ1bmN0aW9uIHBvcENhbGxiYWNrKHN0cmVhbXMpe3JldHVybiBzdHJlYW1zLmxlbmd0aD8iZnVuY3Rpb24iIT10eXBlb2Ygc3RyZWFtc1tzdHJlYW1zLmxlbmd0aC0xXT9ub29wOnN0cmVhbXMucG9wKCk6bm9vcH0oc3RyZWFtcyk7aWYoQXJyYXkuaXNBcnJheShzdHJlYW1zWzBdKSYmKHN0cmVhbXM9c3RyZWFtc1swXSksc3RyZWFtcy5sZW5ndGg8Mil0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUygic3RyZWFtcyIpO3ZhciBkZXN0cm95cz1zdHJlYW1zLm1hcChmdW5jdGlvbihzdHJlYW0saSl7dmFyIHJlYWRpbmc9aTxzdHJlYW1zLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbiBkZXN0cm95ZXIoc3RyZWFtLHJlYWRpbmcsd3JpdGluZyxjYWxsYmFjayl7Y2FsbGJhY2s9ZnVuY3Rpb24gb25jZShjYWxsYmFjayl7dmFyIGNhbGxlZD0hMTtyZXR1cm4gZnVuY3Rpb24oKXtjYWxsZWR8fChjYWxsZWQ9ITAsY2FsbGJhY2suYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfX0oY2FsbGJhY2spO3ZhciBjbG9zZWQ9ITE7c3RyZWFtLm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtjbG9zZWQ9ITB9KSx2b2lkIDA9PT1lb3MmJihlb3M9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qcyIpKSxlb3Moc3RyZWFtLHtyZWFkYWJsZTpyZWFkaW5nLHdyaXRhYmxlOndyaXRpbmd9LGZ1bmN0aW9uKGVycil7aWYoZXJyKXJldHVybiBjYWxsYmFjayhlcnIpO2Nsb3NlZD0hMCxjYWxsYmFjaygpfSk7dmFyIGRlc3Ryb3llZD0hMTtyZXR1cm4gZnVuY3Rpb24oZXJyKXtpZighY2xvc2VkJiYhZGVzdHJveWVkKXJldHVybiBkZXN0cm95ZWQ9ITAsZnVuY3Rpb24gaXNSZXF1ZXN0KHN0cmVhbSl7cmV0dXJuIHN0cmVhbS5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBzdHJlYW0uYWJvcnR9KHN0cmVhbSk/c3RyZWFtLmFib3J0KCk6ImZ1bmN0aW9uIj09dHlwZW9mIHN0cmVhbS5kZXN0cm95P3N0cmVhbS5kZXN0cm95KCk6dm9pZCBjYWxsYmFjayhlcnJ8fG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgicGlwZSIpKX19KHN0cmVhbSxyZWFkaW5nLGk+MCxmdW5jdGlvbihlcnIpe2Vycm9yfHwoZXJyb3I9ZXJyKSxlcnImJmRlc3Ryb3lzLmZvckVhY2goY2FsbCkscmVhZGluZ3x8KGRlc3Ryb3lzLmZvckVhY2goY2FsbCksY2FsbGJhY2soZXJyb3IpKX0pfSk7cmV0dXJuIHN0cmVhbXMucmVkdWNlKHBpcGUpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgRVJSX0lOVkFMSURfT1BUX1ZBTFVFPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2Vycm9ycy1icm93c2VyLmpzIikuRi5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7bW9kdWxlLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6ZnVuY3Rpb24gZ2V0SGlnaFdhdGVyTWFyayhzdGF0ZSxvcHRpb25zLGR1cGxleEtleSxpc0R1cGxleCl7dmFyIGh3bT1mdW5jdGlvbiBoaWdoV2F0ZXJNYXJrRnJvbShvcHRpb25zLGlzRHVwbGV4LGR1cGxleEtleSl7cmV0dXJuIG51bGwhPW9wdGlvbnMuaGlnaFdhdGVyTWFyaz9vcHRpb25zLmhpZ2hXYXRlck1hcms6aXNEdXBsZXg/b3B0aW9uc1tkdXBsZXhLZXldOm51bGx9KG9wdGlvbnMsaXNEdXBsZXgsZHVwbGV4S2V5KTtpZihudWxsIT1od20pe2lmKCFpc0Zpbml0ZShod20pfHxNYXRoLmZsb29yKGh3bSkhPT1od218fGh3bTwwKXRocm93IG5ldyBFUlJfSU5WQUxJRF9PUFRfVkFMVUUoaXNEdXBsZXg/ZHVwbGV4S2V5OiJoaWdoV2F0ZXJNYXJrIixod20pO3JldHVybiBNYXRoLmZsb29yKGh3bSl9cmV0dXJuIHN0YXRlLm9iamVjdE1vZGU/MTY6MTYzODR9fX0sIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbS1icm93c2VyLmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe21vZHVsZS5leHBvcnRzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIikuRXZlbnRFbWl0dGVyfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUtYnJvd3Nlci5qcyIobW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7KGV4cG9ydHM9bW9kdWxlLmV4cG9ydHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcmVhZGFibGUuanMiKSkuU3RyZWFtPWV4cG9ydHMsZXhwb3J0cy5SZWFkYWJsZT1leHBvcnRzLGV4cG9ydHMuV3JpdGFibGU9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fd3JpdGFibGUuanMiKSxleHBvcnRzLkR1cGxleD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKSxleHBvcnRzLlRyYW5zZm9ybT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiKSxleHBvcnRzLlBhc3NUaHJvdWdoPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIiksZXhwb3J0cy5maW5pc2hlZD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzIiksZXhwb3J0cy5waXBlbGluZT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcyIpfSwiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2xpYi9zdHJpbmdfZGVjb2Rlci5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIEJ1ZmZlcj1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiKS5CdWZmZXIsaXNFbmNvZGluZz1CdWZmZXIuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oZW5jb2Rpbmcpe3N3aXRjaCgoZW5jb2Rpbmc9IiIrZW5jb2RpbmcpJiZlbmNvZGluZy50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIFN0cmluZ0RlY29kZXIoZW5jb2Rpbmcpe3ZhciBuYjtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbiBub3JtYWxpemVFbmNvZGluZyhlbmMpe3ZhciBuZW5jPWZ1bmN0aW9uIF9ub3JtYWxpemVFbmNvZGluZyhlbmMpe2lmKCFlbmMpcmV0dXJuInV0ZjgiO2Zvcih2YXIgcmV0cmllZDs7KXN3aXRjaChlbmMpe2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBlbmM7ZGVmYXVsdDppZihyZXRyaWVkKXJldHVybjtlbmM9KCIiK2VuYykudG9Mb3dlckNhc2UoKSxyZXRyaWVkPSEwfX0oZW5jKTtpZigic3RyaW5nIiE9dHlwZW9mIG5lbmMmJihCdWZmZXIuaXNFbmNvZGluZz09PWlzRW5jb2Rpbmd8fCFpc0VuY29kaW5nKGVuYykpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlbmMpO3JldHVybiBuZW5jfHxlbmN9KGVuY29kaW5nKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD11dGYxNlRleHQsdGhpcy5lbmQ9dXRmMTZFbmQsbmI9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9dXRmOEZpbGxMYXN0LG5iPTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4dD1iYXNlNjRUZXh0LHRoaXMuZW5kPWJhc2U2NEVuZCxuYj0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9c2ltcGxlV3JpdGUsdm9pZCh0aGlzLmVuZD1zaW1wbGVFbmQpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9QnVmZmVyLmFsbG9jVW5zYWZlKG5iKX1mdW5jdGlvbiB1dGY4Q2hlY2tCeXRlKGJ5dGUpe3JldHVybiBieXRlPD0xMjc/MDpieXRlPj41PT02PzI6Ynl0ZT4+ND09MTQ/MzpieXRlPj4zPT0zMD80OmJ5dGU+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24gdXRmOEZpbGxMYXN0KGJ1Zil7dmFyIHA9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxyPWZ1bmN0aW9uIHV0ZjhDaGVja0V4dHJhQnl0ZXMoc2VsZixidWYscCl7aWYoMTI4IT0oMTkyJmJ1ZlswXSkpcmV0dXJuIHNlbGYubGFzdE5lZWQ9MCwi77+9IjtpZihzZWxmLmxhc3ROZWVkPjEmJmJ1Zi5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJmJ1ZlsxXSkpcmV0dXJuIHNlbGYubGFzdE5lZWQ9MSwi77+9IjtpZihzZWxmLmxhc3ROZWVkPjImJmJ1Zi5sZW5ndGg+MiYmMTI4IT0oMTkyJmJ1ZlsyXSkpcmV0dXJuIHNlbGYubGFzdE5lZWQ9Miwi77+9In19KHRoaXMsYnVmKTtyZXR1cm4gdm9pZCAwIT09cj9yOnRoaXMubGFzdE5lZWQ8PWJ1Zi5sZW5ndGg/KGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIscCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIscCwwLGJ1Zi5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09YnVmLmxlbmd0aCkpfWZ1bmN0aW9uIHV0ZjE2VGV4dChidWYsaSl7aWYoKGJ1Zi5sZW5ndGgtaSklMj09MCl7dmFyIHI9YnVmLnRvU3RyaW5nKCJ1dGYxNmxlIixpKTtpZihyKXt2YXIgYz1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSk7aWYoYz49NTUyOTYmJmM8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPWJ1ZltidWYubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09YnVmW2J1Zi5sZW5ndGgtMV0sci5zbGljZSgwLC0xKX1yZXR1cm4gcn1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1idWZbYnVmLmxlbmd0aC0xXSxidWYudG9TdHJpbmcoInV0ZjE2bGUiLGksYnVmLmxlbmd0aC0xKX1mdW5jdGlvbiB1dGYxNkVuZChidWYpe3ZhciByPWJ1ZiYmYnVmLmxlbmd0aD90aGlzLndyaXRlKGJ1Zik6IiI7aWYodGhpcy5sYXN0TmVlZCl7dmFyIGVuZD10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkO3JldHVybiByK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsZW5kKX1yZXR1cm4gcn1mdW5jdGlvbiBiYXNlNjRUZXh0KGJ1ZixpKXt2YXIgbj0oYnVmLmxlbmd0aC1pKSUzO3JldHVybiAwPT09bj9idWYudG9TdHJpbmcoImJhc2U2NCIsaSk6KHRoaXMubGFzdE5lZWQ9My1uLHRoaXMubGFzdFRvdGFsPTMsMT09PW4/dGhpcy5sYXN0Q2hhclswXT1idWZbYnVmLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1idWZbYnVmLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPWJ1ZltidWYubGVuZ3RoLTFdKSxidWYudG9TdHJpbmcoImJhc2U2NCIsaSxidWYubGVuZ3RoLW4pKX1mdW5jdGlvbiBiYXNlNjRFbmQoYnVmKXt2YXIgcj1idWYmJmJ1Zi5sZW5ndGg/dGhpcy53cml0ZShidWYpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3IrdGhpcy5sYXN0Q2hhci50b1N0cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6cn1mdW5jdGlvbiBzaW1wbGVXcml0ZShidWYpe3JldHVybiBidWYudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gc2ltcGxlRW5kKGJ1Zil7cmV0dXJuIGJ1ZiYmYnVmLmxlbmd0aD90aGlzLndyaXRlKGJ1Zik6IiJ9ZXhwb3J0cy5TdHJpbmdEZWNvZGVyPVN0cmluZ0RlY29kZXIsU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oYnVmKXtpZigwPT09YnVmLmxlbmd0aClyZXR1cm4iIjt2YXIgcixpO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShyPXRoaXMuZmlsbExhc3QoYnVmKSkpcmV0dXJuIiI7aT10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1lbHNlIGk9MDtyZXR1cm4gaTxidWYubGVuZ3RoP3I/cit0aGlzLnRleHQoYnVmLGkpOnRoaXMudGV4dChidWYsaSk6cnx8IiJ9LFN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZD1mdW5jdGlvbiB1dGY4RW5kKGJ1Zil7dmFyIHI9YnVmJiZidWYubGVuZ3RoP3RoaXMud3JpdGUoYnVmKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9yKyLvv70iOnJ9LFN0cmluZ0RlY29kZXIucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24gdXRmOFRleHQoYnVmLGkpe3ZhciB0b3RhbD1mdW5jdGlvbiB1dGY4Q2hlY2tJbmNvbXBsZXRlKHNlbGYsYnVmLGkpe3ZhciBqPWJ1Zi5sZW5ndGgtMTtpZihqPGkpcmV0dXJuIDA7dmFyIG5iPXV0ZjhDaGVja0J5dGUoYnVmW2pdKTtpZihuYj49MClyZXR1cm4gbmI+MCYmKHNlbGYubGFzdE5lZWQ9bmItMSksbmI7aWYoLS1qPGl8fC0yPT09bmIpcmV0dXJuIDA7aWYobmI9dXRmOENoZWNrQnl0ZShidWZbal0pLG5iPj0wKXJldHVybiBuYj4wJiYoc2VsZi5sYXN0TmVlZD1uYi0yKSxuYjtpZigtLWo8aXx8LTI9PT1uYilyZXR1cm4gMDtpZihuYj11dGY4Q2hlY2tCeXRlKGJ1ZltqXSksbmI+PTApcmV0dXJuIG5iPjAmJigyPT09bmI/bmI9MDpzZWxmLmxhc3ROZWVkPW5iLTMpLG5iO3JldHVybiAwfSh0aGlzLGJ1ZixpKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gYnVmLnRvU3RyaW5nKCJ1dGY4IixpKTt0aGlzLmxhc3RUb3RhbD10b3RhbDt2YXIgZW5kPWJ1Zi5sZW5ndGgtKHRvdGFsLXRoaXMubGFzdE5lZWQpO3JldHVybiBidWYuY29weSh0aGlzLmxhc3RDaGFyLDAsZW5kKSxidWYudG9TdHJpbmcoInV0ZjgiLGksZW5kKX0sU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24oYnVmKXtpZih0aGlzLmxhc3ROZWVkPD1idWYubGVuZ3RoKXJldHVybiBidWYuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7YnVmLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsYnVmLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09YnVmLmxlbmd0aH19LCIuLi8uLi9ub2RlX21vZHVsZXMvc3lzdGVtanMvZGlzdC9zeXN0ZW0uanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24oKXtmdW5jdGlvbiBlcnJNc2coZXJyQ29kZSxtc2cpe3JldHVybihtc2d8fCIiKSsiIChTeXN0ZW1KUyBFcnJvciMiK2VyckNvZGUrIiBodHRwczovL2dpdGh1Yi5jb20vc3lzdGVtanMvc3lzdGVtanMvYmxvYi9tYWluL2RvY3MvZXJyb3JzLm1kIyIrZXJyQ29kZSsiKSJ9dmFyIGJhc2VVcmwsaGFzU3ltYm9sPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sLGhhc1NlbGY9InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmLGhhc0RvY3VtZW50PSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQsZW52R2xvYmFsPWhhc1NlbGY/c2VsZjpfX3dlYnBhY2tfcmVxdWlyZV9fLmc7aWYoaGFzRG9jdW1lbnQpe3ZhciBiYXNlRWw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYmFzZVtocmVmXSIpO2Jhc2VFbCYmKGJhc2VVcmw9YmFzZUVsLmhyZWYpfWlmKCFiYXNlVXJsJiYidW5kZWZpbmVkIiE9dHlwZW9mIGxvY2F0aW9uKXt2YXIgbGFzdFNlcEluZGV4PShiYXNlVXJsPWxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXS5zcGxpdCgiPyIpWzBdKS5sYXN0SW5kZXhPZigiLyIpOy0xIT09bGFzdFNlcEluZGV4JiYoYmFzZVVybD1iYXNlVXJsLnNsaWNlKDAsbGFzdFNlcEluZGV4KzEpKX12YXIgYmFja3NsYXNoUmVnRXg9L1xcL2c7ZnVuY3Rpb24gcmVzb2x2ZUlmTm90UGxhaW5PclVybChyZWxVcmwscGFyZW50VXJsKXtpZigtMSE9PXJlbFVybC5pbmRleE9mKCJcXCIpJiYocmVsVXJsPXJlbFVybC5yZXBsYWNlKGJhY2tzbGFzaFJlZ0V4LCIvIikpLCIvIj09PXJlbFVybFswXSYmIi8iPT09cmVsVXJsWzFdKXJldHVybiBwYXJlbnRVcmwuc2xpY2UoMCxwYXJlbnRVcmwuaW5kZXhPZigiOiIpKzEpK3JlbFVybDtpZigiLiI9PT1yZWxVcmxbMF0mJigiLyI9PT1yZWxVcmxbMV18fCIuIj09PXJlbFVybFsxXSYmKCIvIj09PXJlbFVybFsyXXx8Mj09PXJlbFVybC5sZW5ndGgmJihyZWxVcmwrPSIvIikpfHwxPT09cmVsVXJsLmxlbmd0aCYmKHJlbFVybCs9Ii8iKSl8fCIvIj09PXJlbFVybFswXSl7dmFyIHBhdGhuYW1lLHBhcmVudFByb3RvY29sPXBhcmVudFVybC5zbGljZSgwLHBhcmVudFVybC5pbmRleE9mKCI6IikrMSk7aWYocGF0aG5hbWU9Ii8iPT09cGFyZW50VXJsW3BhcmVudFByb3RvY29sLmxlbmd0aCsxXT8iZmlsZToiIT09cGFyZW50UHJvdG9jb2w/KHBhdGhuYW1lPXBhcmVudFVybC5zbGljZShwYXJlbnRQcm90b2NvbC5sZW5ndGgrMikpLnNsaWNlKHBhdGhuYW1lLmluZGV4T2YoIi8iKSsxKTpwYXJlbnRVcmwuc2xpY2UoOCk6cGFyZW50VXJsLnNsaWNlKHBhcmVudFByb3RvY29sLmxlbmd0aCsoIi8iPT09cGFyZW50VXJsW3BhcmVudFByb3RvY29sLmxlbmd0aF0pKSwiLyI9PT1yZWxVcmxbMF0pcmV0dXJuIHBhcmVudFVybC5zbGljZSgwLHBhcmVudFVybC5sZW5ndGgtcGF0aG5hbWUubGVuZ3RoLTEpK3JlbFVybDtmb3IodmFyIHNlZ21lbnRlZD1wYXRobmFtZS5zbGljZSgwLHBhdGhuYW1lLmxhc3RJbmRleE9mKCIvIikrMSkrcmVsVXJsLG91dHB1dD1bXSxzZWdtZW50SW5kZXg9LTEsaT0wO2k8c2VnbWVudGVkLmxlbmd0aDtpKyspLTEhPT1zZWdtZW50SW5kZXg/Ii8iPT09c2VnbWVudGVkW2ldJiYob3V0cHV0LnB1c2goc2VnbWVudGVkLnNsaWNlKHNlZ21lbnRJbmRleCxpKzEpKSxzZWdtZW50SW5kZXg9LTEpOiIuIj09PXNlZ21lbnRlZFtpXT8iLiIhPT1zZWdtZW50ZWRbaSsxXXx8Ii8iIT09c2VnbWVudGVkW2krMl0mJmkrMiE9PXNlZ21lbnRlZC5sZW5ndGg/Ii8iPT09c2VnbWVudGVkW2krMV18fGkrMT09PXNlZ21lbnRlZC5sZW5ndGg/aSs9MTpzZWdtZW50SW5kZXg9aToob3V0cHV0LnBvcCgpLGkrPTIpOnNlZ21lbnRJbmRleD1pO3JldHVybi0xIT09c2VnbWVudEluZGV4JiZvdXRwdXQucHVzaChzZWdtZW50ZWQuc2xpY2Uoc2VnbWVudEluZGV4KSkscGFyZW50VXJsLnNsaWNlKDAscGFyZW50VXJsLmxlbmd0aC1wYXRobmFtZS5sZW5ndGgpK291dHB1dC5qb2luKCIiKX19ZnVuY3Rpb24gcmVzb2x2ZVVybChyZWxVcmwscGFyZW50VXJsKXtyZXR1cm4gcmVzb2x2ZUlmTm90UGxhaW5PclVybChyZWxVcmwscGFyZW50VXJsKXx8KC0xIT09cmVsVXJsLmluZGV4T2YoIjoiKT9yZWxVcmw6cmVzb2x2ZUlmTm90UGxhaW5PclVybCgiLi8iK3JlbFVybCxwYXJlbnRVcmwpKX1mdW5jdGlvbiByZXNvbHZlQW5kQ29tcG9zZVBhY2thZ2VzKHBhY2thZ2VzLG91dFBhY2thZ2VzLGJhc2VVcmwscGFyZW50TWFwLHBhcmVudFVybCl7Zm9yKHZhciBwIGluIHBhY2thZ2VzKXt2YXIgcmVzb2x2ZWRMaHM9cmVzb2x2ZUlmTm90UGxhaW5PclVybChwLGJhc2VVcmwpfHxwLHJocz1wYWNrYWdlc1twXTtpZigic3RyaW5nIj09dHlwZW9mIHJocyl7dmFyIG1hcHBlZD1yZXNvbHZlSW1wb3J0TWFwKHBhcmVudE1hcCxyZXNvbHZlSWZOb3RQbGFpbk9yVXJsKHJocyxiYXNlVXJsKXx8cmhzLHBhcmVudFVybCk7bWFwcGVkP291dFBhY2thZ2VzW3Jlc29sdmVkTGhzXT1tYXBwZWQ6dGFyZ2V0V2FybmluZygiVzEiLHAscmhzLCJiYXJlIHNwZWNpZmllciBkaWQgbm90IHJlc29sdmUiKX19fWZ1bmN0aW9uIHJlc29sdmVBbmRDb21wb3NlSW1wb3J0TWFwKGpzb24sYmFzZVVybCxvdXRNYXApe3ZhciB1O2Zvcih1IGluIGpzb24uaW1wb3J0cyYmcmVzb2x2ZUFuZENvbXBvc2VQYWNrYWdlcyhqc29uLmltcG9ydHMsb3V0TWFwLmltcG9ydHMsYmFzZVVybCxvdXRNYXAsbnVsbCksanNvbi5zY29wZXN8fHt9KXt2YXIgcmVzb2x2ZWRTY29wZT1yZXNvbHZlVXJsKHUsYmFzZVVybCk7cmVzb2x2ZUFuZENvbXBvc2VQYWNrYWdlcyhqc29uLnNjb3Blc1t1XSxvdXRNYXAuc2NvcGVzW3Jlc29sdmVkU2NvcGVdfHwob3V0TWFwLnNjb3Blc1tyZXNvbHZlZFNjb3BlXT17fSksYmFzZVVybCxvdXRNYXAscmVzb2x2ZWRTY29wZSl9Zm9yKHUgaW4ganNvbi5kZXBjYWNoZXx8e30pb3V0TWFwLmRlcGNhY2hlW3Jlc29sdmVVcmwodSxiYXNlVXJsKV09anNvbi5kZXBjYWNoZVt1XTtmb3IodSBpbiBqc29uLmludGVncml0eXx8e30pb3V0TWFwLmludGVncml0eVtyZXNvbHZlVXJsKHUsYmFzZVVybCldPWpzb24uaW50ZWdyaXR5W3VdfWZ1bmN0aW9uIGdldE1hdGNoKHBhdGgsbWF0Y2hPYmope2lmKG1hdGNoT2JqW3BhdGhdKXJldHVybiBwYXRoO3ZhciBzZXBJbmRleD1wYXRoLmxlbmd0aDtkb3t2YXIgc2VnbWVudD1wYXRoLnNsaWNlKDAsc2VwSW5kZXgrMSk7aWYoc2VnbWVudCBpbiBtYXRjaE9iailyZXR1cm4gc2VnbWVudH13aGlsZSgtMSE9PShzZXBJbmRleD1wYXRoLmxhc3RJbmRleE9mKCIvIixzZXBJbmRleC0xKSkpfWZ1bmN0aW9uIGFwcGx5UGFja2FnZXMoaWQscGFja2FnZXMpe3ZhciBwa2dOYW1lPWdldE1hdGNoKGlkLHBhY2thZ2VzKTtpZihwa2dOYW1lKXt2YXIgcGtnPXBhY2thZ2VzW3BrZ05hbWVdO2lmKG51bGw9PT1wa2cpcmV0dXJuO2lmKCEoaWQubGVuZ3RoPnBrZ05hbWUubGVuZ3RoJiYiLyIhPT1wa2dbcGtnLmxlbmd0aC0xXSkpcmV0dXJuIHBrZytpZC5zbGljZShwa2dOYW1lLmxlbmd0aCk7dGFyZ2V0V2FybmluZygiVzIiLHBrZ05hbWUscGtnLCJzaG91bGQgaGF2ZSBhIHRyYWlsaW5nICcvJyIpfX1mdW5jdGlvbiB0YXJnZXRXYXJuaW5nKGNvZGUsbWF0Y2gsdGFyZ2V0LG1zZyl7Y29uc29sZS53YXJuKGVyck1zZyhjb2RlLCJQYWNrYWdlIHRhcmdldCAiK21zZysiLCByZXNvbHZpbmcgdGFyZ2V0ICciK3RhcmdldCsiJyBmb3IgIittYXRjaCkpfWZ1bmN0aW9uIHJlc29sdmVJbXBvcnRNYXAoaW1wb3J0TWFwLHJlc29sdmVkT3JQbGFpbixwYXJlbnRVcmwpe2Zvcih2YXIgc2NvcGVzPWltcG9ydE1hcC5zY29wZXMsc2NvcGVVcmw9cGFyZW50VXJsJiZnZXRNYXRjaChwYXJlbnRVcmwsc2NvcGVzKTtzY29wZVVybDspe3ZhciBwYWNrYWdlUmVzb2x1dGlvbj1hcHBseVBhY2thZ2VzKHJlc29sdmVkT3JQbGFpbixzY29wZXNbc2NvcGVVcmxdKTtpZihwYWNrYWdlUmVzb2x1dGlvbilyZXR1cm4gcGFja2FnZVJlc29sdXRpb247c2NvcGVVcmw9Z2V0TWF0Y2goc2NvcGVVcmwuc2xpY2UoMCxzY29wZVVybC5sYXN0SW5kZXhPZigiLyIpKSxzY29wZXMpfXJldHVybiBhcHBseVBhY2thZ2VzKHJlc29sdmVkT3JQbGFpbixpbXBvcnRNYXAuaW1wb3J0cyl8fC0xIT09cmVzb2x2ZWRPclBsYWluLmluZGV4T2YoIjoiKSYmcmVzb2x2ZWRPclBsYWlufXZhciB0b1N0cmluZ1RhZyQxPWhhc1N5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnLFJFR0lTVFJZPWhhc1N5bWJvbD9TeW1ib2woKToiQCI7ZnVuY3Rpb24gU3lzdGVtSlMoKXt0aGlzW1JFR0lTVFJZXT17fX12YXIgbGFzdFJlZ2lzdGVyLHN5c3RlbUpTUHJvdG90eXBlPVN5c3RlbUpTLnByb3RvdHlwZTtmdW5jdGlvbiBsb2FkVG9JZChsb2FkKXtyZXR1cm4gbG9hZC5pZH1mdW5jdGlvbiB0cmlnZ2VyT25sb2FkKGxvYWRlcixsb2FkLGVycixpc0VyclNvdXJjZSl7aWYobG9hZGVyLm9ubG9hZChlcnIsbG9hZC5pZCxsb2FkLmQmJmxvYWQuZC5tYXAobG9hZFRvSWQpLCEhaXNFcnJTb3VyY2UpLGVycil0aHJvdyBlcnJ9ZnVuY3Rpb24gZ2V0T3JDcmVhdGVMb2FkKGxvYWRlcixpZCxmaXJzdFBhcmVudFVybCxtZXRhKXt2YXIgbG9hZD1sb2FkZXJbUkVHSVNUUlldW2lkXTtpZihsb2FkKXJldHVybiBsb2FkO3ZhciBpbXBvcnRlclNldHRlcnM9W10sbnM9T2JqZWN0LmNyZWF0ZShudWxsKTt0b1N0cmluZ1RhZyQxJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsdG9TdHJpbmdUYWckMSx7dmFsdWU6Ik1vZHVsZSJ9KTt2YXIgaW5zdGFudGlhdGVQcm9taXNlPVByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gbG9hZGVyLmluc3RhbnRpYXRlKGlkLGZpcnN0UGFyZW50VXJsLG1ldGEpfSkudGhlbihmdW5jdGlvbihyZWdpc3RyYXRpb24pe2lmKCFyZWdpc3RyYXRpb24pdGhyb3cgRXJyb3IoZXJyTXNnKDIsIk1vZHVsZSAiK2lkKyIgZGlkIG5vdCBpbnN0YW50aWF0ZSIpKTt2YXIgZGVjbGFyZWQ9cmVnaXN0cmF0aW9uWzFdKGZ1bmN0aW9uIF9leHBvcnQobmFtZSx2YWx1ZSl7bG9hZC5oPSEwO3ZhciBjaGFuZ2VkPSExO2lmKCJzdHJpbmciPT10eXBlb2YgbmFtZSluYW1lIGluIG5zJiZuc1tuYW1lXT09PXZhbHVlfHwobnNbbmFtZV09dmFsdWUsY2hhbmdlZD0hMCk7ZWxzZXtmb3IodmFyIHAgaW4gbmFtZSl7dmFsdWU9bmFtZVtwXTtwIGluIG5zJiZuc1twXT09PXZhbHVlfHwobnNbcF09dmFsdWUsY2hhbmdlZD0hMCl9bmFtZSYmbmFtZS5fX2VzTW9kdWxlJiYobnMuX19lc01vZHVsZT1uYW1lLl9fZXNNb2R1bGUpfWlmKGNoYW5nZWQpZm9yKHZhciBpPTA7aTxpbXBvcnRlclNldHRlcnMubGVuZ3RoO2krKyl7dmFyIHNldHRlcj1pbXBvcnRlclNldHRlcnNbaV07c2V0dGVyJiZzZXR0ZXIobnMpfXJldHVybiB2YWx1ZX0sMj09PXJlZ2lzdHJhdGlvblsxXS5sZW5ndGg/e2ltcG9ydDpmdW5jdGlvbihpbXBvcnRJZCxtZXRhKXtyZXR1cm4gbG9hZGVyLmltcG9ydChpbXBvcnRJZCxpZCxtZXRhKX0sbWV0YTpsb2FkZXIuY3JlYXRlQ29udGV4dChpZCl9OnZvaWQgMCk7cmV0dXJuIGxvYWQuZT1kZWNsYXJlZC5leGVjdXRlfHxmdW5jdGlvbigpe30sW3JlZ2lzdHJhdGlvblswXSxkZWNsYXJlZC5zZXR0ZXJzfHxbXSxyZWdpc3RyYXRpb25bMl18fFtdXX0sZnVuY3Rpb24oZXJyKXt0aHJvdyBsb2FkLmU9bnVsbCxsb2FkLmVyPWVycix0cmlnZ2VyT25sb2FkKGxvYWRlcixsb2FkLGVyciwhMCksZXJyfSksbGlua1Byb21pc2U9aW5zdGFudGlhdGVQcm9taXNlLnRoZW4oZnVuY3Rpb24oaW5zdGFudGlhdGlvbil7cmV0dXJuIFByb21pc2UuYWxsKGluc3RhbnRpYXRpb25bMF0ubWFwKGZ1bmN0aW9uKGRlcCxpKXt2YXIgc2V0dGVyPWluc3RhbnRpYXRpb25bMV1baV0sbWV0YT1pbnN0YW50aWF0aW9uWzJdW2ldO3JldHVybiBQcm9taXNlLnJlc29sdmUobG9hZGVyLnJlc29sdmUoZGVwLGlkKSkudGhlbihmdW5jdGlvbihkZXBJZCl7dmFyIGRlcExvYWQ9Z2V0T3JDcmVhdGVMb2FkKGxvYWRlcixkZXBJZCxpZCxtZXRhKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRlcExvYWQuSSkudGhlbihmdW5jdGlvbigpe3JldHVybiBzZXR0ZXImJihkZXBMb2FkLmkucHVzaChzZXR0ZXIpLCFkZXBMb2FkLmgmJmRlcExvYWQuSXx8c2V0dGVyKGRlcExvYWQubikpLGRlcExvYWR9KX0pfSkpLnRoZW4oZnVuY3Rpb24oZGVwTG9hZHMpe2xvYWQuZD1kZXBMb2Fkc30pfSk7cmV0dXJuIGxvYWQ9bG9hZGVyW1JFR0lTVFJZXVtpZF09e2lkLGk6aW1wb3J0ZXJTZXR0ZXJzLG46bnMsbTptZXRhLEk6aW5zdGFudGlhdGVQcm9taXNlLEw6bGlua1Byb21pc2UsaDohMSxkOnZvaWQgMCxlOnZvaWQgMCxlcjp2b2lkIDAsRTp2b2lkIDAsQzp2b2lkIDAscDp2b2lkIDB9fWZ1bmN0aW9uIGluc3RhbnRpYXRlQWxsKGxvYWRlcixsb2FkLHBhcmVudCxsb2FkZWQpe2lmKCFsb2FkZWRbbG9hZC5pZF0pcmV0dXJuIGxvYWRlZFtsb2FkLmlkXT0hMCxQcm9taXNlLnJlc29sdmUobG9hZC5MKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGxvYWQucCYmbnVsbCE9PWxvYWQucC5lfHwobG9hZC5wPXBhcmVudCksUHJvbWlzZS5hbGwobG9hZC5kLm1hcChmdW5jdGlvbihkZXApe3JldHVybiBpbnN0YW50aWF0ZUFsbChsb2FkZXIsZGVwLHBhcmVudCxsb2FkZWQpfSkpfSkuY2F0Y2goZnVuY3Rpb24oZXJyKXtpZihsb2FkLmVyKXRocm93IGVycjt0aHJvdyBsb2FkLmU9bnVsbCx0cmlnZ2VyT25sb2FkKGxvYWRlcixsb2FkLGVyciwhMSksZXJyfSl9c3lzdGVtSlNQcm90b3R5cGUuaW1wb3J0PWZ1bmN0aW9uKGlkLHBhcmVudFVybCxtZXRhKXt2YXIgbG9hZGVyPXRoaXM7cmV0dXJuIHBhcmVudFVybCYmIm9iamVjdCI9PXR5cGVvZiBwYXJlbnRVcmwmJihtZXRhPXBhcmVudFVybCxwYXJlbnRVcmw9dm9pZCAwKSxQcm9taXNlLnJlc29sdmUobG9hZGVyLnByZXBhcmVJbXBvcnQoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBsb2FkZXIucmVzb2x2ZShpZCxwYXJlbnRVcmwsbWV0YSl9KS50aGVuKGZ1bmN0aW9uKGlkKXt2YXIgbG9hZD1nZXRPckNyZWF0ZUxvYWQobG9hZGVyLGlkLHZvaWQgMCxtZXRhKTtyZXR1cm4gbG9hZC5DfHxmdW5jdGlvbiB0b3BMZXZlbExvYWQobG9hZGVyLGxvYWQpe3JldHVybiBsb2FkLkM9aW5zdGFudGlhdGVBbGwobG9hZGVyLGxvYWQsbG9hZCx7fSkudGhlbihmdW5jdGlvbigpe3JldHVybiBwb3N0T3JkZXJFeGVjKGxvYWRlcixsb2FkLHt9KX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gbG9hZC5ufSl9KGxvYWRlcixsb2FkKX0pfSxzeXN0ZW1KU1Byb3RvdHlwZS5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKHBhcmVudElkKXt2YXIgbG9hZGVyPXRoaXM7cmV0dXJue3VybDpwYXJlbnRJZCxyZXNvbHZlOmZ1bmN0aW9uKGlkLHBhcmVudFVybCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShsb2FkZXIucmVzb2x2ZShpZCxwYXJlbnRVcmx8fHBhcmVudElkKSl9fX0sc3lzdGVtSlNQcm90b3R5cGUub25sb2FkPWZ1bmN0aW9uKCl7fSxzeXN0ZW1KU1Byb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbihkZXBzLGRlY2xhcmUsbWV0YXMpe2xhc3RSZWdpc3Rlcj1bZGVwcyxkZWNsYXJlLG1ldGFzXX0sc3lzdGVtSlNQcm90b3R5cGUuZ2V0UmVnaXN0ZXI9ZnVuY3Rpb24oKXt2YXIgX2xhc3RSZWdpc3Rlcj1sYXN0UmVnaXN0ZXI7cmV0dXJuIGxhc3RSZWdpc3Rlcj12b2lkIDAsX2xhc3RSZWdpc3Rlcn07dmFyIG51bGxDb250ZXh0PU9iamVjdC5mcmVlemUoT2JqZWN0LmNyZWF0ZShudWxsKSk7ZnVuY3Rpb24gcG9zdE9yZGVyRXhlYyhsb2FkZXIsbG9hZCxzZWVuKXtpZighc2Vlbltsb2FkLmlkXSl7aWYoc2Vlbltsb2FkLmlkXT0hMCwhbG9hZC5lKXtpZihsb2FkLmVyKXRocm93IGxvYWQuZXI7cmV0dXJuIGxvYWQuRT9sb2FkLkU6dm9pZCAwfXZhciBkZXBMb2FkUHJvbWlzZXMsZXhlYz1sb2FkLmU7cmV0dXJuIGxvYWQuZT1udWxsLGxvYWQuZC5mb3JFYWNoKGZ1bmN0aW9uKGRlcExvYWQpe3RyeXt2YXIgZGVwTG9hZFByb21pc2U9cG9zdE9yZGVyRXhlYyhsb2FkZXIsZGVwTG9hZCxzZWVuKTtkZXBMb2FkUHJvbWlzZSYmKGRlcExvYWRQcm9taXNlcz1kZXBMb2FkUHJvbWlzZXN8fFtdKS5wdXNoKGRlcExvYWRQcm9taXNlKX1jYXRjaChlcnIpe3Rocm93IGxvYWQuZXI9ZXJyLHRyaWdnZXJPbmxvYWQobG9hZGVyLGxvYWQsZXJyLCExKSxlcnJ9fSksZGVwTG9hZFByb21pc2VzP1Byb21pc2UuYWxsKGRlcExvYWRQcm9taXNlcykudGhlbihkb0V4ZWMpOmRvRXhlYygpfWZ1bmN0aW9uIGRvRXhlYygpe3RyeXt2YXIgZXhlY1Byb21pc2U9ZXhlYy5jYWxsKG51bGxDb250ZXh0KTtpZihleGVjUHJvbWlzZSlyZXR1cm4gZXhlY1Byb21pc2U9ZXhlY1Byb21pc2UudGhlbihmdW5jdGlvbigpe2xvYWQuQz1sb2FkLm4sbG9hZC5FPW51bGwsdHJpZ2dlck9ubG9hZChsb2FkZXIsbG9hZCxudWxsLCEwKX0sZnVuY3Rpb24oZXJyKXt0aHJvdyBsb2FkLmVyPWVycixsb2FkLkU9bnVsbCx0cmlnZ2VyT25sb2FkKGxvYWRlcixsb2FkLGVyciwhMCksZXJyfSksbG9hZC5FPWV4ZWNQcm9taXNlO2xvYWQuQz1sb2FkLm4sbG9hZC5MPWxvYWQuST12b2lkIDB9Y2F0Y2goZXJyKXt0aHJvdyBsb2FkLmVyPWVycixlcnJ9ZmluYWxseXt0cmlnZ2VyT25sb2FkKGxvYWRlcixsb2FkLGxvYWQuZXIsITApfX19ZW52R2xvYmFsLlN5c3RlbT1uZXcgU3lzdGVtSlM7dmFyIGxhc3RBdXRvSW1wb3J0RGVwcyxsYXN0QXV0b0ltcG9ydFRpbWVvdXQsaW1wb3J0TWFwUHJvbWlzZT1Qcm9taXNlLnJlc29sdmUoKSxpbXBvcnRNYXA9e2ltcG9ydHM6e30sc2NvcGVzOnt9LGRlcGNhY2hlOnt9LGludGVncml0eTp7fX0scHJvY2Vzc0ZpcnN0PWhhc0RvY3VtZW50O2Z1bmN0aW9uIHByb2Nlc3NTY3JpcHRzKCl7W10uZm9yRWFjaC5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInNjcmlwdCIpLGZ1bmN0aW9uKHNjcmlwdCl7aWYoIXNjcmlwdC5zcClpZigic3lzdGVtanMtbW9kdWxlIj09PXNjcmlwdC50eXBlKXtpZihzY3JpcHQuc3A9ITAsIXNjcmlwdC5zcmMpcmV0dXJuO1N5c3RlbS5pbXBvcnQoImltcG9ydDoiPT09c2NyaXB0LnNyYy5zbGljZSgwLDcpP3NjcmlwdC5zcmMuc2xpY2UoNyk6cmVzb2x2ZVVybChzY3JpcHQuc3JjLGJhc2VVcmwpKS5jYXRjaChmdW5jdGlvbihlKXtpZihlLm1lc3NhZ2UuaW5kZXhPZigiaHR0cHM6Ly9naXRodWIuY29tL3N5c3RlbWpzL3N5c3RlbWpzL2Jsb2IvbWFpbi9kb2NzL2Vycm9ycy5tZCMzIik+LTEpe3ZhciBldmVudD1kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKTtldmVudC5pbml0RXZlbnQoImVycm9yIiwhMSwhMSksc2NyaXB0LmRpc3BhdGNoRXZlbnQoZXZlbnQpfXJldHVybiBQcm9taXNlLnJlamVjdChlKX0pfWVsc2UgaWYoInN5c3RlbWpzLWltcG9ydG1hcCI9PT1zY3JpcHQudHlwZSl7c2NyaXB0LnNwPSEwO3ZhciBmZXRjaFByb21pc2U9c2NyaXB0LnNyYz8oU3lzdGVtLmZldGNofHxmZXRjaCkoc2NyaXB0LnNyYyx7aW50ZWdyaXR5OnNjcmlwdC5pbnRlZ3JpdHkscHJpb3JpdHk6c2NyaXB0LmZldGNoUHJpb3JpdHkscGFzc1Rocm91Z2g6ITB9KS50aGVuKGZ1bmN0aW9uKHJlcyl7aWYoIXJlcy5vayl0aHJvdyBFcnJvcigiSW52YWxpZCBzdGF0dXMgY29kZTogIityZXMuc3RhdHVzKTtyZXR1cm4gcmVzLnRleHQoKX0pLmNhdGNoKGZ1bmN0aW9uKGVycil7cmV0dXJuIGVyci5tZXNzYWdlPWVyck1zZygiVzQiLCJFcnJvciBmZXRjaGluZyBzeXN0ZW1qcy1pbXBvcnQgbWFwICIrc2NyaXB0LnNyYykrIlxuIitlcnIubWVzc2FnZSxjb25zb2xlLndhcm4oZXJyKSwiZnVuY3Rpb24iPT10eXBlb2Ygc2NyaXB0Lm9uZXJyb3ImJnNjcmlwdC5vbmVycm9yKCksInt9In0pOnNjcmlwdC5pbm5lckhUTUw7aW1wb3J0TWFwUHJvbWlzZT1pbXBvcnRNYXBQcm9taXNlLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZmV0Y2hQcm9taXNlfSkudGhlbihmdW5jdGlvbih0ZXh0KXshZnVuY3Rpb24gZXh0ZW5kSW1wb3J0TWFwKGltcG9ydE1hcCxuZXdNYXBUZXh0LG5ld01hcFVybCl7dmFyIG5ld01hcD17fTt0cnl7bmV3TWFwPUpTT04ucGFyc2UobmV3TWFwVGV4dCl9Y2F0Y2goZXJyKXtjb25zb2xlLndhcm4oRXJyb3IoZXJyTXNnKCJXNSIsInN5c3RlbWpzLWltcG9ydG1hcCBjb250YWlucyBpbnZhbGlkIEpTT04iKSsiXG5cbiIrbmV3TWFwVGV4dCsiXG4iKSl9cmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAobmV3TWFwLG5ld01hcFVybCxpbXBvcnRNYXApfShpbXBvcnRNYXAsdGV4dCxzY3JpcHQuc3JjfHxiYXNlVXJsKX0pfX0pfWlmKHN5c3RlbUpTUHJvdG90eXBlLnByZXBhcmVJbXBvcnQ9ZnVuY3Rpb24oZG9Qcm9jZXNzU2NyaXB0cyl7cmV0dXJuKHByb2Nlc3NGaXJzdHx8ZG9Qcm9jZXNzU2NyaXB0cykmJihwcm9jZXNzU2NyaXB0cygpLHByb2Nlc3NGaXJzdD0hMSksaW1wb3J0TWFwUHJvbWlzZX0sc3lzdGVtSlNQcm90b3R5cGUuZ2V0SW1wb3J0TWFwPWZ1bmN0aW9uKCl7cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW1wb3J0TWFwKSl9LGhhc0RvY3VtZW50JiYocHJvY2Vzc1NjcmlwdHMoKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIscHJvY2Vzc1NjcmlwdHMpKSxzeXN0ZW1KU1Byb3RvdHlwZS5hZGRJbXBvcnRNYXA9ZnVuY3Rpb24obmV3TWFwLG1hcEJhc2Upe3Jlc29sdmVBbmRDb21wb3NlSW1wb3J0TWFwKG5ld01hcCxtYXBCYXNlfHxiYXNlVXJsLGltcG9ydE1hcCl9LGhhc0RvY3VtZW50KXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKGV2dCl7bGFzdFdpbmRvd0Vycm9yVXJsPWV2dC5maWxlbmFtZSxsYXN0V2luZG93RXJyb3I9ZXZ0LmVycm9yfSk7dmFyIGJhc2VPcmlnaW49bG9jYXRpb24ub3JpZ2lufXN5c3RlbUpTUHJvdG90eXBlLmNyZWF0ZVNjcmlwdD1mdW5jdGlvbih1cmwpe3ZhciBzY3JpcHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7c2NyaXB0LmFzeW5jPSEwLHVybC5pbmRleE9mKGJhc2VPcmlnaW4rIi8iKSYmKHNjcmlwdC5jcm9zc09yaWdpbj0iYW5vbnltb3VzIik7dmFyIGludGVncml0eT1pbXBvcnRNYXAuaW50ZWdyaXR5W3VybF07cmV0dXJuIGludGVncml0eSYmKHNjcmlwdC5pbnRlZ3JpdHk9aW50ZWdyaXR5KSxzY3JpcHQuc3JjPXVybCxzY3JpcHR9O3ZhciBsYXN0V2luZG93RXJyb3JVcmwsbGFzdFdpbmRvd0Vycm9yLGF1dG9JbXBvcnRDYW5kaWRhdGVzPXt9LHN5c3RlbVJlZ2lzdGVyPXN5c3RlbUpTUHJvdG90eXBlLnJlZ2lzdGVyO3N5c3RlbUpTUHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKGRlcHMsZGVjbGFyZSl7aWYoaGFzRG9jdW1lbnQmJiJsb2FkaW5nIj09PWRvY3VtZW50LnJlYWR5U3RhdGUmJiJzdHJpbmciIT10eXBlb2YgZGVwcyl7dmFyIHNjcmlwdHM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic2NyaXB0W3NyY10iKSxsYXN0U2NyaXB0PXNjcmlwdHNbc2NyaXB0cy5sZW5ndGgtMV07aWYobGFzdFNjcmlwdCl7bGFzdFNjcmlwdC5zcmMsbGFzdEF1dG9JbXBvcnREZXBzPWRlcHM7dmFyIGxvYWRlcj10aGlzO2xhc3RBdXRvSW1wb3J0VGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YXV0b0ltcG9ydENhbmRpZGF0ZXNbbGFzdFNjcmlwdC5zcmNdPVtkZXBzLGRlY2xhcmVdLGxvYWRlci5pbXBvcnQobGFzdFNjcmlwdC5zcmMpfSl9fWVsc2UgbGFzdEF1dG9JbXBvcnREZXBzPXZvaWQgMDtyZXR1cm4gc3lzdGVtUmVnaXN0ZXIuY2FsbCh0aGlzLGRlcHMsZGVjbGFyZSl9LHN5c3RlbUpTUHJvdG90eXBlLmluc3RhbnRpYXRlPWZ1bmN0aW9uKHVybCxmaXJzdFBhcmVudFVybCl7dmFyIGF1dG9JbXBvcnRSZWdpc3RyYXRpb249YXV0b0ltcG9ydENhbmRpZGF0ZXNbdXJsXTtpZihhdXRvSW1wb3J0UmVnaXN0cmF0aW9uKXJldHVybiBkZWxldGUgYXV0b0ltcG9ydENhbmRpZGF0ZXNbdXJsXSxhdXRvSW1wb3J0UmVnaXN0cmF0aW9uO3ZhciBsb2FkZXI9dGhpcztyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN5c3RlbUpTUHJvdG90eXBlLmNyZWF0ZVNjcmlwdCh1cmwpKS50aGVuKGZ1bmN0aW9uKHNjcmlwdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUscmVqZWN0KXtzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKCl7cmVqZWN0KEVycm9yKGVyck1zZygzLCJFcnJvciBsb2FkaW5nICIrdXJsKyhmaXJzdFBhcmVudFVybD8iIGZyb20gIitmaXJzdFBhcmVudFVybDoiIikpKSl9KSxzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oKXtpZihkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKHNjcmlwdCksbGFzdFdpbmRvd0Vycm9yVXJsPT09dXJsKXJlamVjdChsYXN0V2luZG93RXJyb3IpO2Vsc2V7dmFyIHJlZ2lzdGVyPWxvYWRlci5nZXRSZWdpc3Rlcih1cmwpO3JlZ2lzdGVyJiZyZWdpc3RlclswXT09PWxhc3RBdXRvSW1wb3J0RGVwcyYmY2xlYXJUaW1lb3V0KGxhc3RBdXRvSW1wb3J0VGltZW91dCkscmVzb2x2ZShyZWdpc3Rlcil9fSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpfSl9KX0sc3lzdGVtSlNQcm90b3R5cGUuc2hvdWxkRmV0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sInVuZGVmaW5lZCIhPXR5cGVvZiBmZXRjaCYmKHN5c3RlbUpTUHJvdG90eXBlLmZldGNoPWZldGNoKTt2YXIgaW5zdGFudGlhdGU9c3lzdGVtSlNQcm90b3R5cGUuaW5zdGFudGlhdGUsanNDb250ZW50VHlwZVJlZ0V4PS9eKHRleHR8YXBwbGljYXRpb24pXC8oeC0pP2phdmFzY3JpcHQoO3wkKS87c3lzdGVtSlNQcm90b3R5cGUuaW5zdGFudGlhdGU9ZnVuY3Rpb24odXJsLHBhcmVudCxtZXRhKXt2YXIgbG9hZGVyPXRoaXM7cmV0dXJuIHRoaXMuc2hvdWxkRmV0Y2godXJsLHBhcmVudCxtZXRhKT90aGlzLmZldGNoKHVybCx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIixpbnRlZ3JpdHk6aW1wb3J0TWFwLmludGVncml0eVt1cmxdLG1ldGF9KS50aGVuKGZ1bmN0aW9uKHJlcyl7aWYoIXJlcy5vayl0aHJvdyBFcnJvcihlcnJNc2coNyxyZXMuc3RhdHVzKyIgIityZXMuc3RhdHVzVGV4dCsiLCBsb2FkaW5nICIrdXJsKyhwYXJlbnQ/IiBmcm9tICIrcGFyZW50OiIiKSkpO3ZhciBjb250ZW50VHlwZT1yZXMuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpO2lmKCFjb250ZW50VHlwZXx8IWpzQ29udGVudFR5cGVSZWdFeC50ZXN0KGNvbnRlbnRUeXBlKSl0aHJvdyBFcnJvcihlcnJNc2coNCwnVW5rbm93biBDb250ZW50LVR5cGUgIicrY29udGVudFR5cGUrJyIsIGxvYWRpbmcgJyt1cmwrKHBhcmVudD8iIGZyb20gIitwYXJlbnQ6IiIpKSk7cmV0dXJuIHJlcy50ZXh0KCkudGhlbihmdW5jdGlvbihzb3VyY2Upe3JldHVybiBzb3VyY2UuaW5kZXhPZigiLy8jIHNvdXJjZVVSTD0iKTwwJiYoc291cmNlKz0iXG4vLyMgc291cmNlVVJMPSIrdXJsKSwoMCxldmFsKShzb3VyY2UpLGxvYWRlci5nZXRSZWdpc3Rlcih1cmwpfSl9KTppbnN0YW50aWF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHN5c3RlbUpTUHJvdG90eXBlLnJlc29sdmU9ZnVuY3Rpb24oaWQscGFyZW50VXJsKXtyZXR1cm4gcmVzb2x2ZUltcG9ydE1hcChpbXBvcnRNYXAscmVzb2x2ZUlmTm90UGxhaW5PclVybChpZCxwYXJlbnRVcmw9cGFyZW50VXJsfHxiYXNlVXJsKXx8aWQscGFyZW50VXJsKXx8ZnVuY3Rpb24gdGhyb3dVbnJlc29sdmVkKGlkLHBhcmVudFVybCl7dGhyb3cgRXJyb3IoZXJyTXNnKDgsIlVuYWJsZSB0byByZXNvbHZlIGJhcmUgc3BlY2lmaWVyICciK2lkKyhwYXJlbnRVcmw/IicgZnJvbSAiK3BhcmVudFVybDoiJyIpKSl9KGlkLHBhcmVudFVybCl9O3ZhciBzeXN0ZW1JbnN0YW50aWF0ZT1zeXN0ZW1KU1Byb3RvdHlwZS5pbnN0YW50aWF0ZTtzeXN0ZW1KU1Byb3RvdHlwZS5pbnN0YW50aWF0ZT1mdW5jdGlvbih1cmwsZmlyc3RQYXJlbnRVcmwsbWV0YSl7dmFyIHByZWxvYWRzPWltcG9ydE1hcC5kZXBjYWNoZVt1cmxdO2lmKHByZWxvYWRzKWZvcih2YXIgaT0wO2k8cHJlbG9hZHMubGVuZ3RoO2krKylnZXRPckNyZWF0ZUxvYWQodGhpcyx0aGlzLnJlc29sdmUocHJlbG9hZHNbaV0sdXJsKSx1cmwpO3JldHVybiBzeXN0ZW1JbnN0YW50aWF0ZS5jYWxsKHRoaXMsdXJsLGZpcnN0UGFyZW50VXJsLG1ldGEpfSxoYXNTZWxmJiYiZnVuY3Rpb24iPT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmKHN5c3RlbUpTUHJvdG90eXBlLmluc3RhbnRpYXRlPWZ1bmN0aW9uKHVybCl7dmFyIGxvYWRlcj10aGlzO3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGltcG9ydFNjcmlwdHModXJsKSxsb2FkZXIuZ2V0UmVnaXN0ZXIodXJsKX0pfSksZnVuY3Rpb24oZ2xvYmFsKXt2YXIgZmlyc3RHbG9iYWxQcm9wLHNlY29uZEdsb2JhbFByb3AsbGFzdEdsb2JhbFByb3Asc3lzdGVtSlNQcm90b3R5cGU9Z2xvYmFsLlN5c3RlbS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7dmFyIGltcHQ9c3lzdGVtSlNQcm90b3R5cGUuaW1wb3J0O3N5c3RlbUpTUHJvdG90eXBlLmltcG9ydD1mdW5jdGlvbihpZCxwYXJlbnRVcmwsbWV0YSl7cmV0dXJuIGZ1bmN0aW9uIG5vdGVHbG9iYWxQcm9wcygpe2Zvcih2YXIgcCBpbiBmaXJzdEdsb2JhbFByb3A9c2Vjb25kR2xvYmFsUHJvcD12b2lkIDAsZ2xvYmFsKXNob3VsZFNraXBQcm9wZXJ0eShwKXx8KGZpcnN0R2xvYmFsUHJvcD9zZWNvbmRHbG9iYWxQcm9wfHwoc2Vjb25kR2xvYmFsUHJvcD1wKTpmaXJzdEdsb2JhbFByb3A9cCxsYXN0R2xvYmFsUHJvcD1wKTtyZXR1cm4gbGFzdEdsb2JhbFByb3B9KCksaW1wdC5jYWxsKHRoaXMsaWQscGFyZW50VXJsLG1ldGEpfTt2YXIgZW1wdHlJbnN0YW50aWF0aW9uPVtbXSxmdW5jdGlvbigpe3JldHVybnt9fV0sZ2V0UmVnaXN0ZXI9c3lzdGVtSlNQcm90b3R5cGUuZ2V0UmVnaXN0ZXI7c3lzdGVtSlNQcm90b3R5cGUuZ2V0UmVnaXN0ZXI9ZnVuY3Rpb24oKXt2YXIgbGFzdFJlZ2lzdGVyPWdldFJlZ2lzdGVyLmNhbGwodGhpcyk7aWYobGFzdFJlZ2lzdGVyKXJldHVybiBsYXN0UmVnaXN0ZXI7dmFyIGdsb2JhbEV4cG9ydCxnbG9iYWxQcm9wPWZ1bmN0aW9uIGdldEdsb2JhbFByb3AodXNlRmlyc3RHbG9iYWxQcm9wKXt2YXIgZm91bmRMYXN0UHJvcCxyZXN1bHQsY250PTA7Zm9yKHZhciBwIGluIGdsb2JhbClpZighc2hvdWxkU2tpcFByb3BlcnR5KHApKXtpZigwPT09Y250JiZwIT09Zmlyc3RHbG9iYWxQcm9wfHwxPT09Y250JiZwIT09c2Vjb25kR2xvYmFsUHJvcClyZXR1cm4gcDtmb3VuZExhc3RQcm9wPyhsYXN0R2xvYmFsUHJvcD1wLHJlc3VsdD11c2VGaXJzdEdsb2JhbFByb3AmJnJlc3VsdHx8cCk6Zm91bmRMYXN0UHJvcD1wPT09bGFzdEdsb2JhbFByb3AsY250Kyt9cmV0dXJuIHJlc3VsdH0odGhpcy5maXJzdEdsb2JhbFByb3ApO2lmKCFnbG9iYWxQcm9wKXJldHVybiBlbXB0eUluc3RhbnRpYXRpb247dHJ5e2dsb2JhbEV4cG9ydD1nbG9iYWxbZ2xvYmFsUHJvcF19Y2F0Y2goZSl7cmV0dXJuIGVtcHR5SW5zdGFudGlhdGlvbn1yZXR1cm5bW10sZnVuY3Rpb24oX2V4cG9ydCl7cmV0dXJue2V4ZWN1dGU6ZnVuY3Rpb24oKXtfZXhwb3J0KGdsb2JhbEV4cG9ydCksX2V4cG9ydCh7ZGVmYXVsdDpnbG9iYWxFeHBvcnQsX191c2VEZWZhdWx0OiEwfSl9fX1dfTt2YXIgaXNJRTExPSJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYtMSE9PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiVHJpZGVudCIpO2Z1bmN0aW9uIHNob3VsZFNraXBQcm9wZXJ0eShwKXtyZXR1cm4hZ2xvYmFsLmhhc093blByb3BlcnR5KHApfHwhaXNOYU4ocCkmJnA8Z2xvYmFsLmxlbmd0aHx8aXNJRTExJiZnbG9iYWxbcF0mJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZnbG9iYWxbcF0ucGFyZW50PT09d2luZG93fX0oInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6X193ZWJwYWNrX3JlcXVpcmVfXy5nKSxmdW5jdGlvbihnbG9iYWwpe3ZhciBzeXN0ZW1KU1Byb3RvdHlwZT1nbG9iYWwuU3lzdGVtLmNvbnN0cnVjdG9yLnByb3RvdHlwZSxtb2R1bGVUeXBlc1JlZ0V4PS9eW14jP10rXC4oY3NzfGh0bWx8anNvbnx3YXNtKShbPyNdLiopPyQvLF9zaG91bGRGZXRjaD1zeXN0ZW1KU1Byb3RvdHlwZS5zaG91bGRGZXRjaC5iaW5kKHN5c3RlbUpTUHJvdG90eXBlKTtzeXN0ZW1KU1Byb3RvdHlwZS5zaG91bGRGZXRjaD1mdW5jdGlvbih1cmwpe3JldHVybiBfc2hvdWxkRmV0Y2godXJsKXx8bW9kdWxlVHlwZXNSZWdFeC50ZXN0KHVybCl9O3ZhciBqc29uQ29udGVudFR5cGU9L15hcHBsaWNhdGlvblwvanNvbig7fCQpLyxjc3NDb250ZW50VHlwZT0vXnRleHRcL2Nzcyg7fCQpLyx3YXNtQ29udGVudFR5cGU9L15hcHBsaWNhdGlvblwvd2FzbSg7fCQpLyxmZXRjaD1zeXN0ZW1KU1Byb3RvdHlwZS5mZXRjaDtzeXN0ZW1KU1Byb3RvdHlwZS5mZXRjaD1mdW5jdGlvbih1cmwsb3B0aW9ucyl7cmV0dXJuIGZldGNoKHVybCxvcHRpb25zKS50aGVuKGZ1bmN0aW9uKHJlcyl7aWYob3B0aW9ucy5wYXNzVGhyb3VnaClyZXR1cm4gcmVzO2lmKCFyZXMub2spcmV0dXJuIHJlczt2YXIgY29udGVudFR5cGU9cmVzLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKTtyZXR1cm4ganNvbkNvbnRlbnRUeXBlLnRlc3QoY29udGVudFR5cGUpP3Jlcy5qc29uKCkudGhlbihmdW5jdGlvbihqc29uKXtyZXR1cm4gbmV3IFJlc3BvbnNlKG5ldyBCbG9iKFsnU3lzdGVtLnJlZ2lzdGVyKFtdLGZ1bmN0aW9uKGUpe3JldHVybntleGVjdXRlOmZ1bmN0aW9uKCl7ZSgiZGVmYXVsdCIsJytKU09OLnN0cmluZ2lmeShqc29uKSsiKX19fSkiXSx7dHlwZToiYXBwbGljYXRpb24vamF2YXNjcmlwdCJ9KSl9KTpjc3NDb250ZW50VHlwZS50ZXN0KGNvbnRlbnRUeXBlKT9yZXMudGV4dCgpLnRoZW4oZnVuY3Rpb24oc291cmNlKXtyZXR1cm4gc291cmNlPXNvdXJjZS5yZXBsYWNlKC91cmxcKFxzKig/OihbIiddKSgoPzpcXC58W15cblxcIiddKSspXDF8KCg/OlxcLnxbXlxzLCInKClcXF0pKykpXHMqXCkvZyxmdW5jdGlvbihtYXRjaCxxdW90ZXMscmVsVXJsMSxyZWxVcmwyKXtyZXR1cm5bInVybCgiLHF1b3RlcyxyZXNvbHZlVXJsKHJlbFVybDF8fHJlbFVybDIsdXJsKSxxdW90ZXMsIikiXS5qb2luKCIiKX0pLG5ldyBSZXNwb25zZShuZXcgQmxvYihbIlN5c3RlbS5yZWdpc3RlcihbXSxmdW5jdGlvbihlKXtyZXR1cm57ZXhlY3V0ZTpmdW5jdGlvbigpe3ZhciBzPW5ldyBDU1NTdHlsZVNoZWV0KCk7cy5yZXBsYWNlU3luYygiK0pTT04uc3RyaW5naWZ5KHNvdXJjZSkrJyk7ZSgiZGVmYXVsdCIscyl9fX0pJ10se3R5cGU6ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQifSkpfSk6d2FzbUNvbnRlbnRUeXBlLnRlc3QoY29udGVudFR5cGUpPyhXZWJBc3NlbWJseS5jb21waWxlU3RyZWFtaW5nP1dlYkFzc2VtYmx5LmNvbXBpbGVTdHJlYW1pbmcocmVzKTpyZXMuYXJyYXlCdWZmZXIoKS50aGVuKFdlYkFzc2VtYmx5LmNvbXBpbGUpKS50aGVuKGZ1bmN0aW9uKG1vZHVsZSl7Z2xvYmFsLlN5c3RlbS53YXNtTW9kdWxlc3x8KGdsb2JhbC5TeXN0ZW0ud2FzbU1vZHVsZXM9T2JqZWN0LmNyZWF0ZShudWxsKSksZ2xvYmFsLlN5c3RlbS53YXNtTW9kdWxlc1t1cmxdPW1vZHVsZTt2YXIgZGVwcz1bXSxzZXR0ZXJTb3VyY2VzPVtdO3JldHVybiBXZWJBc3NlbWJseS5Nb2R1bGUuaW1wb3J0cyYmV2ViQXNzZW1ibHkuTW9kdWxlLmltcG9ydHMobW9kdWxlKS5mb3JFYWNoKGZ1bmN0aW9uKGltcHQpe3ZhciBrZXk9SlNPTi5zdHJpbmdpZnkoaW1wdC5tb2R1bGUpOy0xPT09ZGVwcy5pbmRleE9mKGtleSkmJihkZXBzLnB1c2goa2V5KSxzZXR0ZXJTb3VyY2VzLnB1c2goImZ1bmN0aW9uKG0pe2lbIitrZXkrIl09bX0iKSl9KSxuZXcgUmVzcG9uc2UobmV3IEJsb2IoWyJTeXN0ZW0ucmVnaXN0ZXIoWyIrZGVwcy5qb2luKCIsIikrIl0sZnVuY3Rpb24oZSl7dmFyIGk9e307cmV0dXJue3NldHRlcnM6WyIrc2V0dGVyU291cmNlcy5qb2luKCIsIikrIl0sZXhlY3V0ZTpmdW5jdGlvbigpe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShTeXN0ZW0ud2FzbU1vZHVsZXNbIitKU09OLnN0cmluZ2lmeSh1cmwpKyJdLGkpLnRoZW4oZnVuY3Rpb24obSl7ZShtLmV4cG9ydHMpfSl9fX0pIl0se3R5cGU6ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQifSkpfSk6cmVzfSl9fSgidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjpfX3dlYnBhY2tfcmVxdWlyZV9fLmcpO3ZhciB0b1N0cmluZ1RhZz0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnO3N5c3RlbUpTUHJvdG90eXBlLmdldD1mdW5jdGlvbihpZCl7dmFyIGxvYWQ9dGhpc1tSRUdJU1RSWV1baWRdO2lmKGxvYWQmJm51bGw9PT1sb2FkLmUmJiFsb2FkLkUpcmV0dXJuIGxvYWQuZXI/bnVsbDpsb2FkLm59LHN5c3RlbUpTUHJvdG90eXBlLnNldD1mdW5jdGlvbihpZCxtb2R1bGUpe3RyeXtuZXcgVVJMKGlkKX1jYXRjaChlcnIpe2NvbnNvbGUud2FybihFcnJvcihlcnJNc2coIlczIiwnIicraWQrJyIgaXMgbm90IGEgdmFsaWQgVVJMIHRvIHNldCBpbiB0aGUgbW9kdWxlIHJlZ2lzdHJ5JykpKX12YXIgbnM7dG9TdHJpbmdUYWcmJiJNb2R1bGUiPT09bW9kdWxlW3RvU3RyaW5nVGFnXT9ucz1tb2R1bGU6KG5zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSxtb2R1bGUpLHRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsdG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBkb25lPVByb21pc2UucmVzb2x2ZShucyksbG9hZD10aGlzW1JFR0lTVFJZXVtpZF18fCh0aGlzW1JFR0lTVFJZXVtpZF09e2lkLGk6W10saDohMSxkOltdLGU6bnVsbCxlcjp2b2lkIDAsRTp2b2lkIDB9KTtyZXR1cm4hbG9hZC5lJiYhbG9hZC5FJiYoT2JqZWN0LmFzc2lnbihsb2FkLHtuOm5zLEk6dm9pZCAwLEw6dm9pZCAwLEM6ZG9uZX0pLG5zKX0sc3lzdGVtSlNQcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGlkKXtyZXR1cm4hIXRoaXNbUkVHSVNUUlldW2lkXX0sc3lzdGVtSlNQcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGlkKXt2YXIgcmVnaXN0cnk9dGhpc1tSRUdJU1RSWV0sbG9hZD1yZWdpc3RyeVtpZF07aWYoIWxvYWR8fGxvYWQucCYmbnVsbCE9PWxvYWQucC5lfHxsb2FkLkUpcmV0dXJuITE7dmFyIGltcG9ydGVyU2V0dGVycz1sb2FkLmk7cmV0dXJuIGxvYWQuZCYmbG9hZC5kLmZvckVhY2goZnVuY3Rpb24oZGVwTG9hZCl7dmFyIGltcG9ydGVySW5kZXg9ZGVwTG9hZC5pLmluZGV4T2YobG9hZCk7LTEhPT1pbXBvcnRlckluZGV4JiZkZXBMb2FkLmkuc3BsaWNlKGltcG9ydGVySW5kZXgsMSl9KSxkZWxldGUgcmVnaXN0cnlbaWRdLGZ1bmN0aW9uKCl7dmFyIGxvYWQ9cmVnaXN0cnlbaWRdO2lmKCFsb2FkfHwhaW1wb3J0ZXJTZXR0ZXJzfHxudWxsIT09bG9hZC5lfHxsb2FkLkUpcmV0dXJuITE7aW1wb3J0ZXJTZXR0ZXJzLmZvckVhY2goZnVuY3Rpb24oc2V0dGVyKXtsb2FkLmkucHVzaChzZXR0ZXIpLHNldHRlcihsb2FkLm4pfSksaW1wb3J0ZXJTZXR0ZXJzPW51bGx9fTt2YXIgaXRlcmF0b3I9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtzeXN0ZW1KU1Byb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIG5zLGtleSxsb2FkZXI9dGhpcyxrZXlzPU9iamVjdC5rZXlzKGxvYWRlcltSRUdJU1RSWV0pLGluZGV4PTAscmVzdWx0PXtuZXh0OmZ1bmN0aW9uKCl7Zm9yKDt2b2lkIDAhPT0oa2V5PWtleXNbaW5kZXgrK10pJiZ2b2lkIDA9PT0obnM9bG9hZGVyLmdldChrZXkpKTspO3JldHVybntkb25lOnZvaWQgMD09PWtleSx2YWx1ZTp2b2lkIDAhPT1rZXkmJltrZXksbnNdfX19O3JldHVybiByZXN1bHRbaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHJlc3VsdH19KCl9LCIuLi8uLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgc2NvcGU9dm9pZCAwIT09X193ZWJwYWNrX3JlcXVpcmVfXy5nJiZfX3dlYnBhY2tfcmVxdWlyZV9fLmd8fCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZnx8d2luZG93LGFwcGx5PUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtmdW5jdGlvbiBUaW1lb3V0KGlkLGNsZWFyRm4pe3RoaXMuX2lkPWlkLHRoaXMuX2NsZWFyRm49Y2xlYXJGbn1leHBvcnRzLnNldFRpbWVvdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LHNjb3BlLGFyZ3VtZW50cyksY2xlYXJUaW1lb3V0KX0sZXhwb3J0cy5zZXRJbnRlcnZhbD1mdW5jdGlvbigpe3JldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLHNjb3BlLGFyZ3VtZW50cyksY2xlYXJJbnRlcnZhbCl9LGV4cG9ydHMuY2xlYXJUaW1lb3V0PWV4cG9ydHMuY2xlYXJJbnRlcnZhbD1mdW5jdGlvbih0aW1lb3V0KXt0aW1lb3V0JiZ0aW1lb3V0LmNsb3NlKCl9LFRpbWVvdXQucHJvdG90eXBlLnVucmVmPVRpbWVvdXQucHJvdG90eXBlLnJlZj1mdW5jdGlvbigpe30sVGltZW91dC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9jbGVhckZuLmNhbGwoc2NvcGUsdGhpcy5faWQpfSxleHBvcnRzLmVucm9sbD1mdW5jdGlvbihpdGVtLG1zZWNzKXtjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCksaXRlbS5faWRsZVRpbWVvdXQ9bXNlY3N9LGV4cG9ydHMudW5lbnJvbGw9ZnVuY3Rpb24oaXRlbSl7Y2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpLGl0ZW0uX2lkbGVUaW1lb3V0PS0xfSxleHBvcnRzLl91bnJlZkFjdGl2ZT1leHBvcnRzLmFjdGl2ZT1mdW5jdGlvbihpdGVtKXtjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7dmFyIG1zZWNzPWl0ZW0uX2lkbGVUaW1lb3V0O21zZWNzPj0wJiYoaXRlbS5faWRsZVRpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpe2l0ZW0uX29uVGltZW91dCYmaXRlbS5fb25UaW1lb3V0KCl9LG1zZWNzKSl9LF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzIiksZXhwb3J0cy5zZXRJbW1lZGlhdGU9InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmLnNldEltbWVkaWF0ZXx8dm9pZCAwIT09X193ZWJwYWNrX3JlcXVpcmVfXy5nJiZfX3dlYnBhY2tfcmVxdWlyZV9fLmcuc2V0SW1tZWRpYXRlfHx0aGlzJiZ0aGlzLnNldEltbWVkaWF0ZSxleHBvcnRzLmNsZWFySW1tZWRpYXRlPSJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZi5jbGVhckltbWVkaWF0ZXx8dm9pZCAwIT09X193ZWJwYWNrX3JlcXVpcmVfXy5nJiZfX3dlYnBhY2tfcmVxdWlyZV9fLmcuY2xlYXJJbW1lZGlhdGV8fHRoaXMmJnRoaXMuY2xlYXJJbW1lZGlhdGV9LCIuLi8uLi9ub2RlX21vZHVsZXMvdG8tYnVmZmVyL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijt2YXIgQnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIpLkJ1ZmZlcixpc0FycmF5PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy90by1idWZmZXIvbm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanMiKSx0eXBlZEFycmF5QnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy90eXBlZC1hcnJheS1idWZmZXIvaW5kZXguanMiKSxpc1ZpZXc9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbiBpc1ZpZXcob2JqKXt0cnl7cmV0dXJuIHR5cGVkQXJyYXlCdWZmZXIob2JqKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19LHVzZVVpbnQ4QXJyYXk9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5LHVzZUFycmF5QnVmZmVyPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheSx1c2VGcm9tQXJyYXlCdWZmZXI9dXNlQXJyYXlCdWZmZXImJihCdWZmZXIucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8QnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIHRvQnVmZmVyKGRhdGEsZW5jb2Rpbmcpe2lmKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSlyZXR1cm4gZGF0YS5jb25zdHJ1Y3RvciYmISgiaXNCdWZmZXIiaW4gZGF0YSk/QnVmZmVyLmZyb20oZGF0YSk6ZGF0YTtpZigic3RyaW5nIj09dHlwZW9mIGRhdGEpcmV0dXJuIEJ1ZmZlci5mcm9tKGRhdGEsZW5jb2RpbmcpO2lmKHVzZUFycmF5QnVmZmVyJiZpc1ZpZXcoZGF0YSkpe2lmKDA9PT1kYXRhLmJ5dGVMZW5ndGgpcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtpZih1c2VGcm9tQXJyYXlCdWZmZXIpe3ZhciByZXM9QnVmZmVyLmZyb20oZGF0YS5idWZmZXIsZGF0YS5ieXRlT2Zmc2V0LGRhdGEuYnl0ZUxlbmd0aCk7aWYocmVzLmJ5dGVMZW5ndGg9PT1kYXRhLmJ5dGVMZW5ndGgpcmV0dXJuIHJlc312YXIgdWludDg9ZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/ZGF0YTpuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlcixkYXRhLmJ5dGVPZmZzZXQsZGF0YS5ieXRlTGVuZ3RoKSxyZXN1bHQ9QnVmZmVyLmZyb20odWludDgpO2lmKHJlc3VsdC5sZW5ndGg9PT1kYXRhLmJ5dGVMZW5ndGgpcmV0dXJuIHJlc3VsdH1pZih1c2VVaW50OEFycmF5JiZkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gQnVmZmVyLmZyb20oZGF0YSk7dmFyIGlzQXJyPWlzQXJyYXkoZGF0YSk7aWYoaXNBcnIpZm9yKHZhciBpPTA7aTxkYXRhLmxlbmd0aDtpKz0xKXt2YXIgeD1kYXRhW2ldO2lmKCJudW1iZXIiIT10eXBlb2YgeHx8eDwwfHx4PjI1NXx8fn54IT09eCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXJyYXkgaXRlbXMgbXVzdCBiZSBudW1iZXJzIGluIHRoZSByYW5nZSAwLTI1NS4iKX1pZihpc0Fycnx8QnVmZmVyLmlzQnVmZmVyKGRhdGEpJiZkYXRhLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZGF0YS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZGF0YS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihkYXRhKSlyZXR1cm4gQnVmZmVyLmZyb20oZGF0YSk7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJkYXRhIiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBhbiBBcnJheSwgYSBCdWZmZXIsIGEgVWludDhBcnJheSwgb3IgYSBEYXRhVmlldy4nKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvdG8tYnVmZmVyL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIihtb2R1bGUpe3ZhciB0b1N0cmluZz17fS50b1N0cmluZzttb2R1bGUuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhcnIpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PXRvU3RyaW5nLmNhbGwoYXJyKX19LCIuLi8uLi9ub2RlX21vZHVsZXMvdHR5LWJyb3dzZXJpZnkvaW5kZXguanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMpe2V4cG9ydHMuaXNhdHR5PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGV4cG9ydHMuUmVhZFN0cmVhbT1mdW5jdGlvbiBSZWFkU3RyZWFtKCl7dGhyb3cgbmV3IEVycm9yKCJ0dHkuUmVhZFN0cmVhbSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sZXhwb3J0cy5Xcml0ZVN0cmVhbT1mdW5jdGlvbiBXcml0ZVN0cmVhbSgpe3Rocm93IG5ldyBFcnJvcigidHR5LldyaXRlU3RyZWFtIGlzIG5vdCBpbXBsZW1lbnRlZCIpfX0sIi4uLy4uL25vZGVfbW9kdWxlcy90eXBlZC1hcnJheS1idWZmZXIvaW5kZXguanMiKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO3ZhciAkVHlwZUVycm9yPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvdHlwZS5qcyIpLCR0eXBlZEFycmF5QnVmZmVyPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJvdW5kL2luZGV4LmpzIikoIlR5cGVkQXJyYXkucHJvdG90eXBlLmJ1ZmZlciIsITApLGlzVHlwZWRBcnJheT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaXMtdHlwZWQtYXJyYXkvaW5kZXguanMiKTttb2R1bGUuZXhwb3J0cz0kdHlwZWRBcnJheUJ1ZmZlcnx8ZnVuY3Rpb24gdHlwZWRBcnJheUJ1ZmZlcih4KXtpZighaXNUeXBlZEFycmF5KHgpKXRocm93IG5ldyAkVHlwZUVycm9yKCJOb3QgYSBUeXBlZCBBcnJheSIpO3JldHVybiB4LmJ1ZmZlcn19LCIuLi8uLi9ub2RlX21vZHVsZXMvdXRpbC1kZXByZWNhdGUvYnJvd3Nlci5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXtmdW5jdGlvbiBjb25maWcobmFtZSl7dHJ5e2lmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoKF8pe3JldHVybiExfXZhciB2YWw9X193ZWJwYWNrX3JlcXVpcmVfXy5nLmxvY2FsU3RvcmFnZVtuYW1lXTtyZXR1cm4gbnVsbCE9dmFsJiYidHJ1ZSI9PT1TdHJpbmcodmFsKS50b0xvd2VyQ2FzZSgpfW1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGRlcHJlY2F0ZShmbixtc2cpe2lmKGNvbmZpZygibm9EZXByZWNhdGlvbiIpKXJldHVybiBmbjt2YXIgd2FybmVkPSExO3JldHVybiBmdW5jdGlvbiBkZXByZWNhdGVkKCl7aWYoIXdhcm5lZCl7aWYoY29uZmlnKCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3IEVycm9yKG1zZyk7Y29uZmlnKCJ0cmFjZURlcHJlY2F0aW9uIik/Y29uc29sZS50cmFjZShtc2cpOmNvbnNvbGUud2Fybihtc2cpLHdhcm5lZD0hMH1yZXR1cm4gZm4uYXBwbHkodGhpcyxhcmd1bWVudHMpfX19LCIuLi8uLi9ub2RlX21vZHVsZXMvdXRpbC9zdXBwb3J0L2lzQnVmZmVyQnJvd3Nlci5qcyIobW9kdWxlKXttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBpc0J1ZmZlcihhcmcpe3JldHVybiBhcmcmJiJvYmplY3QiPT10eXBlb2YgYXJnJiYiZnVuY3Rpb24iPT10eXBlb2YgYXJnLmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBhcmcuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIGFyZy5yZWFkVUludDh9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3V0aWwvc3VwcG9ydC90eXBlcy5qcyIoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGlzQXJndW1lbnRzT2JqZWN0PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pcy1hcmd1bWVudHMvaW5kZXguanMiKSxpc0dlbmVyYXRvckZ1bmN0aW9uPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pcy1nZW5lcmF0b3ItZnVuY3Rpb24vaW5kZXguanMiKSx3aGljaFR5cGVkQXJyYXk9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3doaWNoLXR5cGVkLWFycmF5L2luZGV4LmpzIiksaXNUeXBlZEFycmF5PV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9pcy10eXBlZC1hcnJheS9pbmRleC5qcyIpO2Z1bmN0aW9uIHVuY3VycnlUaGlzKGYpe3JldHVybiBmLmNhbGwuYmluZChmKX12YXIgQmlnSW50U3VwcG9ydGVkPSJ1bmRlZmluZWQiIT10eXBlb2YgQmlnSW50LFN5bWJvbFN1cHBvcnRlZD0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCxPYmplY3RUb1N0cmluZz11bmN1cnJ5VGhpcyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSxudW1iZXJWYWx1ZT11bmN1cnJ5VGhpcyhOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YpLHN0cmluZ1ZhbHVlPXVuY3VycnlUaGlzKFN0cmluZy5wcm90b3R5cGUudmFsdWVPZiksYm9vbGVhblZhbHVlPXVuY3VycnlUaGlzKEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YpO2lmKEJpZ0ludFN1cHBvcnRlZCl2YXIgYmlnSW50VmFsdWU9dW5jdXJyeVRoaXMoQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mKTtpZihTeW1ib2xTdXBwb3J0ZWQpdmFyIHN5bWJvbFZhbHVlPXVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7ZnVuY3Rpb24gY2hlY2tCb3hlZFByaW1pdGl2ZSh2YWx1ZSxwcm90b3R5cGVWYWx1ZU9mKXtpZigib2JqZWN0IiE9dHlwZW9mIHZhbHVlKXJldHVybiExO3RyeXtyZXR1cm4gcHJvdG90eXBlVmFsdWVPZih2YWx1ZSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uIGlzTWFwVG9TdHJpbmcodmFsdWUpe3JldHVybiJbb2JqZWN0IE1hcF0iPT09T2JqZWN0VG9TdHJpbmcodmFsdWUpfWZ1bmN0aW9uIGlzU2V0VG9TdHJpbmcodmFsdWUpe3JldHVybiJbb2JqZWN0IFNldF0iPT09T2JqZWN0VG9TdHJpbmcodmFsdWUpfWZ1bmN0aW9uIGlzV2Vha01hcFRvU3RyaW5nKHZhbHVlKXtyZXR1cm4iW29iamVjdCBXZWFrTWFwXSI9PT1PYmplY3RUb1N0cmluZyh2YWx1ZSl9ZnVuY3Rpb24gaXNXZWFrU2V0VG9TdHJpbmcodmFsdWUpe3JldHVybiJbb2JqZWN0IFdlYWtTZXRdIj09PU9iamVjdFRvU3RyaW5nKHZhbHVlKX1mdW5jdGlvbiBpc0FycmF5QnVmZmVyVG9TdHJpbmcodmFsdWUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1PYmplY3RUb1N0cmluZyh2YWx1ZSl9ZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWx1ZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmKGlzQXJyYXlCdWZmZXJUb1N0cmluZy53b3JraW5nP2lzQXJyYXlCdWZmZXJUb1N0cmluZyh2YWx1ZSk6dmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil9ZnVuY3Rpb24gaXNEYXRhVmlld1RvU3RyaW5nKHZhbHVlKXtyZXR1cm4iW29iamVjdCBEYXRhVmlld10iPT09T2JqZWN0VG9TdHJpbmcodmFsdWUpfWZ1bmN0aW9uIGlzRGF0YVZpZXcodmFsdWUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgRGF0YVZpZXcmJihpc0RhdGFWaWV3VG9TdHJpbmcud29ya2luZz9pc0RhdGFWaWV3VG9TdHJpbmcodmFsdWUpOnZhbHVlIGluc3RhbmNlb2YgRGF0YVZpZXcpfWV4cG9ydHMuaXNBcmd1bWVudHNPYmplY3Q9aXNBcmd1bWVudHNPYmplY3QsZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uPWlzR2VuZXJhdG9yRnVuY3Rpb24sZXhwb3J0cy5pc1R5cGVkQXJyYXk9aXNUeXBlZEFycmF5LGV4cG9ydHMuaXNQcm9taXNlPWZ1bmN0aW9uIGlzUHJvbWlzZShpbnB1dCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBQcm9taXNlJiZpbnB1dCBpbnN0YW5jZW9mIFByb21pc2V8fG51bGwhPT1pbnB1dCYmIm9iamVjdCI9PXR5cGVvZiBpbnB1dCYmImZ1bmN0aW9uIj09dHlwZW9mIGlucHV0LnRoZW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBpbnB1dC5jYXRjaH0sZXhwb3J0cy5pc0FycmF5QnVmZmVyVmlldz1mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWx1ZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSk6aXNUeXBlZEFycmF5KHZhbHVlKXx8aXNEYXRhVmlldyh2YWx1ZSl9LGV4cG9ydHMuaXNVaW50OEFycmF5PWZ1bmN0aW9uIGlzVWludDhBcnJheSh2YWx1ZSl7cmV0dXJuIlVpbnQ4QXJyYXkiPT09d2hpY2hUeXBlZEFycmF5KHZhbHVlKX0sZXhwb3J0cy5pc1VpbnQ4Q2xhbXBlZEFycmF5PWZ1bmN0aW9uIGlzVWludDhDbGFtcGVkQXJyYXkodmFsdWUpe3JldHVybiJVaW50OENsYW1wZWRBcnJheSI9PT13aGljaFR5cGVkQXJyYXkodmFsdWUpfSxleHBvcnRzLmlzVWludDE2QXJyYXk9ZnVuY3Rpb24gaXNVaW50MTZBcnJheSh2YWx1ZSl7cmV0dXJuIlVpbnQxNkFycmF5Ij09PXdoaWNoVHlwZWRBcnJheSh2YWx1ZSl9LGV4cG9ydHMuaXNVaW50MzJBcnJheT1mdW5jdGlvbiBpc1VpbnQzMkFycmF5KHZhbHVlKXtyZXR1cm4iVWludDMyQXJyYXkiPT09d2hpY2hUeXBlZEFycmF5KHZhbHVlKX0sZXhwb3J0cy5pc0ludDhBcnJheT1mdW5jdGlvbiBpc0ludDhBcnJheSh2YWx1ZSl7cmV0dXJuIkludDhBcnJheSI9PT13aGljaFR5cGVkQXJyYXkodmFsdWUpfSxleHBvcnRzLmlzSW50MTZBcnJheT1mdW5jdGlvbiBpc0ludDE2QXJyYXkodmFsdWUpe3JldHVybiJJbnQxNkFycmF5Ij09PXdoaWNoVHlwZWRBcnJheSh2YWx1ZSl9LGV4cG9ydHMuaXNJbnQzMkFycmF5PWZ1bmN0aW9uIGlzSW50MzJBcnJheSh2YWx1ZSl7cmV0dXJuIkludDMyQXJyYXkiPT09d2hpY2hUeXBlZEFycmF5KHZhbHVlKX0sZXhwb3J0cy5pc0Zsb2F0MzJBcnJheT1mdW5jdGlvbiBpc0Zsb2F0MzJBcnJheSh2YWx1ZSl7cmV0dXJuIkZsb2F0MzJBcnJheSI9PT13aGljaFR5cGVkQXJyYXkodmFsdWUpfSxleHBvcnRzLmlzRmxvYXQ2NEFycmF5PWZ1bmN0aW9uIGlzRmxvYXQ2NEFycmF5KHZhbHVlKXtyZXR1cm4iRmxvYXQ2NEFycmF5Ij09PXdoaWNoVHlwZWRBcnJheSh2YWx1ZSl9LGV4cG9ydHMuaXNCaWdJbnQ2NEFycmF5PWZ1bmN0aW9uIGlzQmlnSW50NjRBcnJheSh2YWx1ZSl7cmV0dXJuIkJpZ0ludDY0QXJyYXkiPT09d2hpY2hUeXBlZEFycmF5KHZhbHVlKX0sZXhwb3J0cy5pc0JpZ1VpbnQ2NEFycmF5PWZ1bmN0aW9uIGlzQmlnVWludDY0QXJyYXkodmFsdWUpe3JldHVybiJCaWdVaW50NjRBcnJheSI9PT13aGljaFR5cGVkQXJyYXkodmFsdWUpfSxpc01hcFRvU3RyaW5nLndvcmtpbmc9InVuZGVmaW5lZCIhPXR5cGVvZiBNYXAmJmlzTWFwVG9TdHJpbmcobmV3IE1hcCksZXhwb3J0cy5pc01hcD1mdW5jdGlvbiBpc01hcCh2YWx1ZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBNYXAmJihpc01hcFRvU3RyaW5nLndvcmtpbmc/aXNNYXBUb1N0cmluZyh2YWx1ZSk6dmFsdWUgaW5zdGFuY2VvZiBNYXApfSxpc1NldFRvU3RyaW5nLndvcmtpbmc9InVuZGVmaW5lZCIhPXR5cGVvZiBTZXQmJmlzU2V0VG9TdHJpbmcobmV3IFNldCksZXhwb3J0cy5pc1NldD1mdW5jdGlvbiBpc1NldCh2YWx1ZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBTZXQmJihpc1NldFRvU3RyaW5nLndvcmtpbmc/aXNTZXRUb1N0cmluZyh2YWx1ZSk6dmFsdWUgaW5zdGFuY2VvZiBTZXQpfSxpc1dlYWtNYXBUb1N0cmluZy53b3JraW5nPSJ1bmRlZmluZWQiIT10eXBlb2YgV2Vha01hcCYmaXNXZWFrTWFwVG9TdHJpbmcobmV3IFdlYWtNYXApLGV4cG9ydHMuaXNXZWFrTWFwPWZ1bmN0aW9uIGlzV2Vha01hcCh2YWx1ZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBXZWFrTWFwJiYoaXNXZWFrTWFwVG9TdHJpbmcud29ya2luZz9pc1dlYWtNYXBUb1N0cmluZyh2YWx1ZSk6dmFsdWUgaW5zdGFuY2VvZiBXZWFrTWFwKX0saXNXZWFrU2V0VG9TdHJpbmcud29ya2luZz0idW5kZWZpbmVkIiE9dHlwZW9mIFdlYWtTZXQmJmlzV2Vha1NldFRvU3RyaW5nKG5ldyBXZWFrU2V0KSxleHBvcnRzLmlzV2Vha1NldD1mdW5jdGlvbiBpc1dlYWtTZXQodmFsdWUpe3JldHVybiBpc1dlYWtTZXRUb1N0cmluZyh2YWx1ZSl9LGlzQXJyYXlCdWZmZXJUb1N0cmluZy53b3JraW5nPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJmlzQXJyYXlCdWZmZXJUb1N0cmluZyhuZXcgQXJyYXlCdWZmZXIpLGV4cG9ydHMuaXNBcnJheUJ1ZmZlcj1pc0FycmF5QnVmZmVyLGlzRGF0YVZpZXdUb1N0cmluZy53b3JraW5nPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJ1bmRlZmluZWQiIT10eXBlb2YgRGF0YVZpZXcmJmlzRGF0YVZpZXdUb1N0cmluZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpLDAsMSkpLGV4cG9ydHMuaXNEYXRhVmlldz1pc0RhdGFWaWV3O3ZhciBTaGFyZWRBcnJheUJ1ZmZlckNvcHk9InVuZGVmaW5lZCIhPXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcj9TaGFyZWRBcnJheUJ1ZmZlcjp2b2lkIDA7ZnVuY3Rpb24gaXNTaGFyZWRBcnJheUJ1ZmZlclRvU3RyaW5nKHZhbHVlKXtyZXR1cm4iW29iamVjdCBTaGFyZWRBcnJheUJ1ZmZlcl0iPT09T2JqZWN0VG9TdHJpbmcodmFsdWUpfWZ1bmN0aW9uIGlzU2hhcmVkQXJyYXlCdWZmZXIodmFsdWUpe3JldHVybiB2b2lkIDAhPT1TaGFyZWRBcnJheUJ1ZmZlckNvcHkmJih2b2lkIDA9PT1pc1NoYXJlZEFycmF5QnVmZmVyVG9TdHJpbmcud29ya2luZyYmKGlzU2hhcmVkQXJyYXlCdWZmZXJUb1N0cmluZy53b3JraW5nPWlzU2hhcmVkQXJyYXlCdWZmZXJUb1N0cmluZyhuZXcgU2hhcmVkQXJyYXlCdWZmZXJDb3B5KSksaXNTaGFyZWRBcnJheUJ1ZmZlclRvU3RyaW5nLndvcmtpbmc/aXNTaGFyZWRBcnJheUJ1ZmZlclRvU3RyaW5nKHZhbHVlKTp2YWx1ZSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyQ29weSl9ZnVuY3Rpb24gaXNOdW1iZXJPYmplY3QodmFsdWUpe3JldHVybiBjaGVja0JveGVkUHJpbWl0aXZlKHZhbHVlLG51bWJlclZhbHVlKX1mdW5jdGlvbiBpc1N0cmluZ09iamVjdCh2YWx1ZSl7cmV0dXJuIGNoZWNrQm94ZWRQcmltaXRpdmUodmFsdWUsc3RyaW5nVmFsdWUpfWZ1bmN0aW9uIGlzQm9vbGVhbk9iamVjdCh2YWx1ZSl7cmV0dXJuIGNoZWNrQm94ZWRQcmltaXRpdmUodmFsdWUsYm9vbGVhblZhbHVlKX1mdW5jdGlvbiBpc0JpZ0ludE9iamVjdCh2YWx1ZSl7cmV0dXJuIEJpZ0ludFN1cHBvcnRlZCYmY2hlY2tCb3hlZFByaW1pdGl2ZSh2YWx1ZSxiaWdJbnRWYWx1ZSl9ZnVuY3Rpb24gaXNTeW1ib2xPYmplY3QodmFsdWUpe3JldHVybiBTeW1ib2xTdXBwb3J0ZWQmJmNoZWNrQm94ZWRQcmltaXRpdmUodmFsdWUsc3ltYm9sVmFsdWUpfWV4cG9ydHMuaXNTaGFyZWRBcnJheUJ1ZmZlcj1pc1NoYXJlZEFycmF5QnVmZmVyLGV4cG9ydHMuaXNBc3luY0Z1bmN0aW9uPWZ1bmN0aW9uIGlzQXN5bmNGdW5jdGlvbih2YWx1ZSl7cmV0dXJuIltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT09T2JqZWN0VG9TdHJpbmcodmFsdWUpfSxleHBvcnRzLmlzTWFwSXRlcmF0b3I9ZnVuY3Rpb24gaXNNYXBJdGVyYXRvcih2YWx1ZSl7cmV0dXJuIltvYmplY3QgTWFwIEl0ZXJhdG9yXSI9PT1PYmplY3RUb1N0cmluZyh2YWx1ZSl9LGV4cG9ydHMuaXNTZXRJdGVyYXRvcj1mdW5jdGlvbiBpc1NldEl0ZXJhdG9yKHZhbHVlKXtyZXR1cm4iW29iamVjdCBTZXQgSXRlcmF0b3JdIj09PU9iamVjdFRvU3RyaW5nKHZhbHVlKX0sZXhwb3J0cy5pc0dlbmVyYXRvck9iamVjdD1mdW5jdGlvbiBpc0dlbmVyYXRvck9iamVjdCh2YWx1ZSl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSI9PT1PYmplY3RUb1N0cmluZyh2YWx1ZSl9LGV4cG9ydHMuaXNXZWJBc3NlbWJseUNvbXBpbGVkTW9kdWxlPWZ1bmN0aW9uIGlzV2ViQXNzZW1ibHlDb21waWxlZE1vZHVsZSh2YWx1ZSl7cmV0dXJuIltvYmplY3QgV2ViQXNzZW1ibHkuTW9kdWxlXSI9PT1PYmplY3RUb1N0cmluZyh2YWx1ZSl9LGV4cG9ydHMuaXNOdW1iZXJPYmplY3Q9aXNOdW1iZXJPYmplY3QsZXhwb3J0cy5pc1N0cmluZ09iamVjdD1pc1N0cmluZ09iamVjdCxleHBvcnRzLmlzQm9vbGVhbk9iamVjdD1pc0Jvb2xlYW5PYmplY3QsZXhwb3J0cy5pc0JpZ0ludE9iamVjdD1pc0JpZ0ludE9iamVjdCxleHBvcnRzLmlzU3ltYm9sT2JqZWN0PWlzU3ltYm9sT2JqZWN0LGV4cG9ydHMuaXNCb3hlZFByaW1pdGl2ZT1mdW5jdGlvbiBpc0JveGVkUHJpbWl0aXZlKHZhbHVlKXtyZXR1cm4gaXNOdW1iZXJPYmplY3QodmFsdWUpfHxpc1N0cmluZ09iamVjdCh2YWx1ZSl8fGlzQm9vbGVhbk9iamVjdCh2YWx1ZSl8fGlzQmlnSW50T2JqZWN0KHZhbHVlKXx8aXNTeW1ib2xPYmplY3QodmFsdWUpfSxleHBvcnRzLmlzQW55QXJyYXlCdWZmZXI9ZnVuY3Rpb24gaXNBbnlBcnJheUJ1ZmZlcih2YWx1ZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5JiYoaXNBcnJheUJ1ZmZlcih2YWx1ZSl8fGlzU2hhcmVkQXJyYXlCdWZmZXIodmFsdWUpKX0sWyJpc1Byb3h5IiwiaXNFeHRlcm5hbCIsImlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0Il0uZm9yRWFjaChmdW5jdGlvbihtZXRob2Qpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLG1ldGhvZCx7ZW51bWVyYWJsZTohMSx2YWx1ZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihtZXRob2QrIiBpcyBub3Qgc3VwcG9ydGVkIGluIHVzZXJsYW5kIil9fSl9KX0sIi4uLy4uL25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIHByb2Nlc3M9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL3Byb3h5L3Byb2Nlc3MuanMiKSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfHxmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iail7Zm9yKHZhciBrZXlzPU9iamVjdC5rZXlzKG9iaiksZGVzY3JpcHRvcnM9e30saT0wO2k8a2V5cy5sZW5ndGg7aSsrKWRlc2NyaXB0b3JzW2tleXNbaV1dPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLGtleXNbaV0pO3JldHVybiBkZXNjcmlwdG9yc30sZm9ybWF0UmVnRXhwPS8lW3NkaiVdL2c7ZXhwb3J0cy5mb3JtYXQ9ZnVuY3Rpb24oZil7aWYoIWlzU3RyaW5nKGYpKXtmb3IodmFyIG9iamVjdHM9W10saT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspb2JqZWN0cy5wdXNoKGluc3BlY3QoYXJndW1lbnRzW2ldKSk7cmV0dXJuIG9iamVjdHMuam9pbigiICIpfWk9MTtmb3IodmFyIGFyZ3M9YXJndW1lbnRzLGxlbj1hcmdzLmxlbmd0aCxzdHI9U3RyaW5nKGYpLnJlcGxhY2UoZm9ybWF0UmVnRXhwLGZ1bmN0aW9uKHgpe2lmKCIlJSI9PT14KXJldHVybiIlIjtpZihpPj1sZW4pcmV0dXJuIHg7c3dpdGNoKHgpe2Nhc2UiJXMiOnJldHVybiBTdHJpbmcoYXJnc1tpKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKGFyZ3NbaSsrXSk7Y2FzZSIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShhcmdzW2krK10pfWNhdGNoKF8pe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiB4fX0pLHg9YXJnc1tpXTtpPGxlbjt4PWFyZ3NbKytpXSlpc051bGwoeCl8fCFpc09iamVjdCh4KT9zdHIrPSIgIit4OnN0cis9IiAiK2luc3BlY3QoeCk7cmV0dXJuIHN0cn0sZXhwb3J0cy5kZXByZWNhdGU9ZnVuY3Rpb24oZm4sbXNnKXtpZih2b2lkIDAhPT1wcm9jZXNzJiYhMD09PXByb2Nlc3Mubm9EZXByZWNhdGlvbilyZXR1cm4gZm47aWYodm9pZCAwPT09cHJvY2VzcylyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZXhwb3J0cy5kZXByZWNhdGUoZm4sbXNnKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciB3YXJuZWQ9ITE7cmV0dXJuIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKXtpZighd2FybmVkKXtpZihwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKG1zZyk7cHJvY2Vzcy50cmFjZURlcHJlY2F0aW9uP2NvbnNvbGUudHJhY2UobXNnKTpjb25zb2xlLmVycm9yKG1zZyksd2FybmVkPSEwfXJldHVybiBmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgZGVidWdzPXt9LGRlYnVnRW52UmVnZXg9L14kLztpZihwcm9jZXNzLmVudi5OT0RFX0RFQlVHKXt2YXIgZGVidWdFbnY9cHJvY2Vzcy5lbnYuTk9ERV9ERUJVRztkZWJ1Z0Vudj1kZWJ1Z0Vudi5yZXBsYWNlKC9bfFxce30oKVtcXV4kKz8uXS9nLCJcXCQmIikucmVwbGFjZSgvXCovZywiLioiKS5yZXBsYWNlKC8sL2csIiR8XiIpLnRvVXBwZXJDYXNlKCksZGVidWdFbnZSZWdleD1uZXcgUmVnRXhwKCJeIitkZWJ1Z0VudisiJCIsImkiKX1mdW5jdGlvbiBpbnNwZWN0KG9iaixvcHRzKXt2YXIgY3R4PXtzZWVuOltdLHN0eWxpemU6c3R5bGl6ZU5vQ29sb3J9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoY3R4LmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKGN0eC5jb2xvcnM9YXJndW1lbnRzWzNdKSxpc0Jvb2xlYW4ob3B0cyk/Y3R4LnNob3dIaWRkZW49b3B0czpvcHRzJiZleHBvcnRzLl9leHRlbmQoY3R4LG9wdHMpLGlzVW5kZWZpbmVkKGN0eC5zaG93SGlkZGVuKSYmKGN0eC5zaG93SGlkZGVuPSExKSxpc1VuZGVmaW5lZChjdHguZGVwdGgpJiYoY3R4LmRlcHRoPTIpLGlzVW5kZWZpbmVkKGN0eC5jb2xvcnMpJiYoY3R4LmNvbG9ycz0hMSksaXNVbmRlZmluZWQoY3R4LmN1c3RvbUluc3BlY3QpJiYoY3R4LmN1c3RvbUluc3BlY3Q9ITApLGN0eC5jb2xvcnMmJihjdHguc3R5bGl6ZT1zdHlsaXplV2l0aENvbG9yKSxmb3JtYXRWYWx1ZShjdHgsb2JqLGN0eC5kZXB0aCl9ZnVuY3Rpb24gc3R5bGl6ZVdpdGhDb2xvcihzdHIsc3R5bGVUeXBlKXt2YXIgc3R5bGU9aW5zcGVjdC5zdHlsZXNbc3R5bGVUeXBlXTtyZXR1cm4gc3R5bGU/IhtbIitpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMF0rIm0iK3N0cisiG1siK2luc3BlY3QuY29sb3JzW3N0eWxlXVsxXSsibSI6c3RyfWZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0cixzdHlsZVR5cGUpe3JldHVybiBzdHJ9ZnVuY3Rpb24gZm9ybWF0VmFsdWUoY3R4LHZhbHVlLHJlY3Vyc2VUaW1lcyl7aWYoY3R4LmN1c3RvbUluc3BlY3QmJnZhbHVlJiZpc0Z1bmN0aW9uKHZhbHVlLmluc3BlY3QpJiZ2YWx1ZS5pbnNwZWN0IT09ZXhwb3J0cy5pbnNwZWN0JiYoIXZhbHVlLmNvbnN0cnVjdG9yfHx2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT12YWx1ZSkpe3ZhciByZXQ9dmFsdWUuaW5zcGVjdChyZWN1cnNlVGltZXMsY3R4KTtyZXR1cm4gaXNTdHJpbmcocmV0KXx8KHJldD1mb3JtYXRWYWx1ZShjdHgscmV0LHJlY3Vyc2VUaW1lcykpLHJldH12YXIgcHJpbWl0aXZlPWZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsdmFsdWUpe2lmKGlzVW5kZWZpbmVkKHZhbHVlKSlyZXR1cm4gY3R4LnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKGlzU3RyaW5nKHZhbHVlKSl7dmFyIHNpbXBsZT0iJyIrSlNPTi5zdHJpbmdpZnkodmFsdWUpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIGN0eC5zdHlsaXplKHNpbXBsZSwic3RyaW5nIil9aWYoaXNOdW1iZXIodmFsdWUpKXJldHVybiBjdHguc3R5bGl6ZSgiIit2YWx1ZSwibnVtYmVyIik7aWYoaXNCb29sZWFuKHZhbHVlKSlyZXR1cm4gY3R4LnN0eWxpemUoIiIrdmFsdWUsImJvb2xlYW4iKTtpZihpc051bGwodmFsdWUpKXJldHVybiBjdHguc3R5bGl6ZSgibnVsbCIsIm51bGwiKX0oY3R4LHZhbHVlKTtpZihwcmltaXRpdmUpcmV0dXJuIHByaW1pdGl2ZTt2YXIga2V5cz1PYmplY3Qua2V5cyh2YWx1ZSksdmlzaWJsZUtleXM9ZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpe3ZhciBoYXNoPXt9O3JldHVybiBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCxpZHgpe2hhc2hbdmFsXT0hMH0pLGhhc2h9KGtleXMpO2lmKGN0eC5zaG93SGlkZGVuJiYoa2V5cz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSkpLGlzRXJyb3IodmFsdWUpJiYoa2V5cy5pbmRleE9mKCJtZXNzYWdlIik+PTB8fGtleXMuaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtpZigwPT09a2V5cy5sZW5ndGgpe2lmKGlzRnVuY3Rpb24odmFsdWUpKXt2YXIgbmFtZT12YWx1ZS5uYW1lPyI6ICIrdmFsdWUubmFtZToiIjtyZXR1cm4gY3R4LnN0eWxpemUoIltGdW5jdGlvbiIrbmFtZSsiXSIsInNwZWNpYWwiKX1pZihpc1JlZ0V4cCh2YWx1ZSkpcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksInJlZ2V4cCIpO2lmKGlzRGF0ZSh2YWx1ZSkpcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCJkYXRlIik7aWYoaXNFcnJvcih2YWx1ZSkpcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKX12YXIgb3V0cHV0LGJhc2U9IiIsYXJyYXk9ITEsYnJhY2VzPVsieyIsIn0iXTsoaXNBcnJheSh2YWx1ZSkmJihhcnJheT0hMCxicmFjZXM9WyJbIiwiXSJdKSxpc0Z1bmN0aW9uKHZhbHVlKSkmJihiYXNlPSIgW0Z1bmN0aW9uIisodmFsdWUubmFtZT8iOiAiK3ZhbHVlLm5hbWU6IiIpKyJdIik7cmV0dXJuIGlzUmVnRXhwKHZhbHVlKSYmKGJhc2U9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkpLGlzRGF0ZSh2YWx1ZSkmJihiYXNlPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHZhbHVlKSksaXNFcnJvcih2YWx1ZSkmJihiYXNlPSIgIitmb3JtYXRFcnJvcih2YWx1ZSkpLDAhPT1rZXlzLmxlbmd0aHx8YXJyYXkmJjAhPXZhbHVlLmxlbmd0aD9yZWN1cnNlVGltZXM8MD9pc1JlZ0V4cCh2YWx1ZSk/Y3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwicmVnZXhwIik6Y3R4LnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOihjdHguc2Vlbi5wdXNoKHZhbHVlKSxvdXRwdXQ9YXJyYXk/ZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LHZhbHVlLHJlY3Vyc2VUaW1lcyx2aXNpYmxlS2V5cyxrZXlzKXtmb3IodmFyIG91dHB1dD1bXSxpPTAsbD12YWx1ZS5sZW5ndGg7aTxsOysraSloYXNPd25Qcm9wZXJ0eSh2YWx1ZSxTdHJpbmcoaSkpP291dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCx2YWx1ZSxyZWN1cnNlVGltZXMsdmlzaWJsZUtleXMsU3RyaW5nKGkpLCEwKSk6b3V0cHV0LnB1c2goIiIpO3JldHVybiBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KXtrZXkubWF0Y2goL15cZCskLyl8fG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCx2YWx1ZSxyZWN1cnNlVGltZXMsdmlzaWJsZUtleXMsa2V5LCEwKSl9KSxvdXRwdXR9KGN0eCx2YWx1ZSxyZWN1cnNlVGltZXMsdmlzaWJsZUtleXMsa2V5cyk6a2V5cy5tYXAoZnVuY3Rpb24oa2V5KXtyZXR1cm4gZm9ybWF0UHJvcGVydHkoY3R4LHZhbHVlLHJlY3Vyc2VUaW1lcyx2aXNpYmxlS2V5cyxrZXksYXJyYXkpfSksY3R4LnNlZW4ucG9wKCksZnVuY3Rpb24gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LGJhc2UsYnJhY2VzKXt2YXIgbGVuZ3RoPW91dHB1dC5yZWR1Y2UoZnVuY3Rpb24ocHJldixjdXIpe3JldHVybiBjdXIuaW5kZXhPZigiXG4iKT49MCYmMCxwcmV2K2N1ci5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk7aWYobGVuZ3RoPjYwKXJldHVybiBicmFjZXNbMF0rKCIiPT09YmFzZT8iIjpiYXNlKyJcbiAiKSsiICIrb3V0cHV0LmpvaW4oIixcbiAgIikrIiAiK2JyYWNlc1sxXTtyZXR1cm4gYnJhY2VzWzBdK2Jhc2UrIiAiK291dHB1dC5qb2luKCIsICIpKyIgIiticmFjZXNbMV19KG91dHB1dCxiYXNlLGJyYWNlcykpOmJyYWNlc1swXStiYXNlK2JyYWNlc1sxXX1mdW5jdGlvbiBmb3JtYXRFcnJvcih2YWx1ZSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSsiXSJ9ZnVuY3Rpb24gZm9ybWF0UHJvcGVydHkoY3R4LHZhbHVlLHJlY3Vyc2VUaW1lcyx2aXNpYmxlS2V5cyxrZXksYXJyYXkpe3ZhciBuYW1lLHN0cixkZXNjO2lmKChkZXNjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsa2V5KXx8e3ZhbHVlOnZhbHVlW2tleV19KS5nZXQ/c3RyPWRlc2Muc2V0P2N0eC5zdHlsaXplKCJbR2V0dGVyL1NldHRlcl0iLCJzcGVjaWFsIik6Y3R4LnN0eWxpemUoIltHZXR0ZXJdIiwic3BlY2lhbCIpOmRlc2Muc2V0JiYoc3RyPWN0eC5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksaGFzT3duUHJvcGVydHkodmlzaWJsZUtleXMsa2V5KXx8KG5hbWU9IlsiK2tleSsiXSIpLHN0cnx8KGN0eC5zZWVuLmluZGV4T2YoZGVzYy52YWx1ZSk8MD8oc3RyPWlzTnVsbChyZWN1cnNlVGltZXMpP2Zvcm1hdFZhbHVlKGN0eCxkZXNjLnZhbHVlLG51bGwpOmZvcm1hdFZhbHVlKGN0eCxkZXNjLnZhbHVlLHJlY3Vyc2VUaW1lcy0xKSkuaW5kZXhPZigiXG4iKT4tMSYmKHN0cj1hcnJheT9zdHIuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKGxpbmUpe3JldHVybiIgICIrbGluZX0pLmpvaW4oIlxuIikuc2xpY2UoMik6IlxuIitzdHIuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKGxpbmUpe3JldHVybiIgICAiK2xpbmV9KS5qb2luKCJcbiIpKTpzdHI9Y3R4LnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLGlzVW5kZWZpbmVkKG5hbWUpKXtpZihhcnJheSYma2V5Lm1hdGNoKC9eXGQrJC8pKXJldHVybiBzdHI7KG5hbWU9SlNPTi5zdHJpbmdpZnkoIiIra2V5KSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8obmFtZT1uYW1lLnNsaWNlKDEsLTEpLG5hbWU9Y3R4LnN0eWxpemUobmFtZSwibmFtZSIpKToobmFtZT1uYW1lLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIiciKSxuYW1lPWN0eC5zdHlsaXplKG5hbWUsInN0cmluZyIpKX1yZXR1cm4gbmFtZSsiOiAiK3N0cn1mdW5jdGlvbiBpc0FycmF5KGFyKXtyZXR1cm4gQXJyYXkuaXNBcnJheShhcil9ZnVuY3Rpb24gaXNCb29sZWFuKGFyZyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYXJnfWZ1bmN0aW9uIGlzTnVsbChhcmcpe3JldHVybiBudWxsPT09YXJnfWZ1bmN0aW9uIGlzTnVtYmVyKGFyZyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBhcmd9ZnVuY3Rpb24gaXNTdHJpbmcoYXJnKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGFyZ31mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpe3JldHVybiB2b2lkIDA9PT1hcmd9ZnVuY3Rpb24gaXNSZWdFeHAocmUpe3JldHVybiBpc09iamVjdChyZSkmJiJbb2JqZWN0IFJlZ0V4cF0iPT09b2JqZWN0VG9TdHJpbmcocmUpfWZ1bmN0aW9uIGlzT2JqZWN0KGFyZyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBhcmcmJm51bGwhPT1hcmd9ZnVuY3Rpb24gaXNEYXRlKGQpe3JldHVybiBpc09iamVjdChkKSYmIltvYmplY3QgRGF0ZV0iPT09b2JqZWN0VG9TdHJpbmcoZCl9ZnVuY3Rpb24gaXNFcnJvcihlKXtyZXR1cm4gaXNPYmplY3QoZSkmJigiW29iamVjdCBFcnJvcl0iPT09b2JqZWN0VG9TdHJpbmcoZSl8fGUgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBhcmd9ZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKX1mdW5jdGlvbiBwYWQobil7cmV0dXJuIG48MTA/IjAiK24udG9TdHJpbmcoMTApOm4udG9TdHJpbmcoMTApfWV4cG9ydHMuZGVidWdsb2c9ZnVuY3Rpb24oc2V0KXtpZihzZXQ9c2V0LnRvVXBwZXJDYXNlKCksIWRlYnVnc1tzZXRdKWlmKGRlYnVnRW52UmVnZXgudGVzdChzZXQpKXt2YXIgcGlkPXByb2Nlc3MucGlkO2RlYnVnc1tzZXRdPWZ1bmN0aW9uKCl7dmFyIG1zZz1leHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcigiJXMgJWQ6ICVzIixzZXQscGlkLG1zZyl9fWVsc2UgZGVidWdzW3NldF09ZnVuY3Rpb24oKXt9O3JldHVybiBkZWJ1Z3Nbc2V0XX0sZXhwb3J0cy5pbnNwZWN0PWluc3BlY3QsaW5zcGVjdC5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LGluc3BlY3Quc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sZXhwb3J0cy50eXBlcz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvdXRpbC9zdXBwb3J0L3R5cGVzLmpzIiksZXhwb3J0cy5pc0FycmF5PWlzQXJyYXksZXhwb3J0cy5pc0Jvb2xlYW49aXNCb29sZWFuLGV4cG9ydHMuaXNOdWxsPWlzTnVsbCxleHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZyl7cmV0dXJuIG51bGw9PWFyZ30sZXhwb3J0cy5pc051bWJlcj1pc051bWJlcixleHBvcnRzLmlzU3RyaW5nPWlzU3RyaW5nLGV4cG9ydHMuaXNTeW1ib2w9ZnVuY3Rpb24gaXNTeW1ib2woYXJnKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGFyZ30sZXhwb3J0cy5pc1VuZGVmaW5lZD1pc1VuZGVmaW5lZCxleHBvcnRzLmlzUmVnRXhwPWlzUmVnRXhwLGV4cG9ydHMudHlwZXMuaXNSZWdFeHA9aXNSZWdFeHAsZXhwb3J0cy5pc09iamVjdD1pc09iamVjdCxleHBvcnRzLmlzRGF0ZT1pc0RhdGUsZXhwb3J0cy50eXBlcy5pc0RhdGU9aXNEYXRlLGV4cG9ydHMuaXNFcnJvcj1pc0Vycm9yLGV4cG9ydHMudHlwZXMuaXNOYXRpdmVFcnJvcj1pc0Vycm9yLGV4cG9ydHMuaXNGdW5jdGlvbj1pc0Z1bmN0aW9uLGV4cG9ydHMuaXNQcmltaXRpdmU9ZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKXtyZXR1cm4gbnVsbD09PWFyZ3x8ImJvb2xlYW4iPT10eXBlb2YgYXJnfHwibnVtYmVyIj09dHlwZW9mIGFyZ3x8InN0cmluZyI9PXR5cGVvZiBhcmd8fCJzeW1ib2wiPT10eXBlb2YgYXJnfHx2b2lkIDA9PT1hcmd9LGV4cG9ydHMuaXNCdWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3V0aWwvc3VwcG9ydC9pc0J1ZmZlckJyb3dzZXIuanMiKTt2YXIgbW9udGhzPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLHByb3Ape3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLHByb3ApfWV4cG9ydHMubG9nPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coIiVzIC0gJXMiLGZ1bmN0aW9uIHRpbWVzdGFtcCgpe3ZhciBkPW5ldyBEYXRlLHRpbWU9W3BhZChkLmdldEhvdXJzKCkpLHBhZChkLmdldE1pbnV0ZXMoKSkscGFkKGQuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVybltkLmdldERhdGUoKSxtb250aHNbZC5nZXRNb250aCgpXSx0aW1lXS5qb2luKCIgIil9KCksZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cyxhcmd1bWVudHMpKX0sZXhwb3J0cy5pbmhlcml0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIpLGV4cG9ydHMuX2V4dGVuZD1mdW5jdGlvbihvcmlnaW4sYWRkKXtpZighYWRkfHwhaXNPYmplY3QoYWRkKSlyZXR1cm4gb3JpZ2luO2Zvcih2YXIga2V5cz1PYmplY3Qua2V5cyhhZGQpLGk9a2V5cy5sZW5ndGg7aS0tOylvcmlnaW5ba2V5c1tpXV09YWRkW2tleXNbaV1dO3JldHVybiBvcmlnaW59O3ZhciBrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2w9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2w/U3ltYm9sKCJ1dGlsLnByb21pc2lmeS5jdXN0b20iKTp2b2lkIDA7ZnVuY3Rpb24gY2FsbGJhY2tpZnlPblJlamVjdGVkKHJlYXNvbixjYil7aWYoIXJlYXNvbil7dmFyIG5ld1JlYXNvbj1uZXcgRXJyb3IoIlByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggYSBmYWxzeSB2YWx1ZSIpO25ld1JlYXNvbi5yZWFzb249cmVhc29uLHJlYXNvbj1uZXdSZWFzb259cmV0dXJuIGNiKHJlYXNvbil9ZXhwb3J0cy5wcm9taXNpZnk9ZnVuY3Rpb24gcHJvbWlzaWZ5KG9yaWdpbmFsKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygb3JpZ2luYWwpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJvcmlnaW5hbCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7aWYoa0N1c3RvbVByb21pc2lmaWVkU3ltYm9sJiZvcmlnaW5hbFtrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2xdKXt2YXIgZm47aWYoImZ1bmN0aW9uIiE9dHlwZW9mKGZuPW9yaWdpbmFsW2tDdXN0b21Qcm9taXNpZmllZFN5bWJvbF0pKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidXRpbC5wcm9taXNpZnkuY3VzdG9tIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLGtDdXN0b21Qcm9taXNpZmllZFN5bWJvbCx7dmFsdWU6Zm4sZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxmbn1mdW5jdGlvbiBmbigpe2Zvcih2YXIgcHJvbWlzZVJlc29sdmUscHJvbWlzZVJlamVjdCxwcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUscmVqZWN0KXtwcm9taXNlUmVzb2x2ZT1yZXNvbHZlLHByb21pc2VSZWplY3Q9cmVqZWN0fSksYXJncz1bXSxpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKylhcmdzLnB1c2goYXJndW1lbnRzW2ldKTthcmdzLnB1c2goZnVuY3Rpb24oZXJyLHZhbHVlKXtlcnI/cHJvbWlzZVJlamVjdChlcnIpOnByb21pc2VSZXNvbHZlKHZhbHVlKX0pO3RyeXtvcmlnaW5hbC5hcHBseSh0aGlzLGFyZ3MpfWNhdGNoKGVycil7cHJvbWlzZVJlamVjdChlcnIpfXJldHVybiBwcm9taXNlfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoZm4sT2JqZWN0LmdldFByb3RvdHlwZU9mKG9yaWdpbmFsKSksa0N1c3RvbVByb21pc2lmaWVkU3ltYm9sJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sa0N1c3RvbVByb21pc2lmaWVkU3ltYm9sLHt2YWx1ZTpmbixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZuLGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob3JpZ2luYWwpKX0sZXhwb3J0cy5wcm9taXNpZnkuY3VzdG9tPWtDdXN0b21Qcm9taXNpZmllZFN5bWJvbCxleHBvcnRzLmNhbGxiYWNraWZ5PWZ1bmN0aW9uIGNhbGxiYWNraWZ5KG9yaWdpbmFsKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygb3JpZ2luYWwpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJvcmlnaW5hbCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7ZnVuY3Rpb24gY2FsbGJhY2tpZmllZCgpe2Zvcih2YXIgYXJncz1bXSxpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKylhcmdzLnB1c2goYXJndW1lbnRzW2ldKTt2YXIgbWF5YmVDYj1hcmdzLnBvcCgpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBtYXliZUNiKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBsYXN0IGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbiIpO3ZhciBzZWxmPXRoaXMsY2I9ZnVuY3Rpb24oKXtyZXR1cm4gbWF5YmVDYi5hcHBseShzZWxmLGFyZ3VtZW50cyl9O29yaWdpbmFsLmFwcGx5KHRoaXMsYXJncykudGhlbihmdW5jdGlvbihyZXQpe3Byb2Nlc3MubmV4dFRpY2soY2IuYmluZChudWxsLG51bGwscmV0KSl9LGZ1bmN0aW9uKHJlail7cHJvY2Vzcy5uZXh0VGljayhjYWxsYmFja2lmeU9uUmVqZWN0ZWQuYmluZChudWxsLHJlaixjYikpfSl9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihjYWxsYmFja2lmaWVkLE9iamVjdC5nZXRQcm90b3R5cGVPZihvcmlnaW5hbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNhbGxiYWNraWZpZWQsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvcmlnaW5hbCkpLGNhbGxiYWNraWZpZWR9fSwiLi4vLi4vbm9kZV9tb2R1bGVzL3ZtLWJyb3dzZXJpZnkvaW5kZXguanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMpe3ZhciBpbmRleE9mPWZ1bmN0aW9uKHhzLGl0ZW0pe2lmKHhzLmluZGV4T2YpcmV0dXJuIHhzLmluZGV4T2YoaXRlbSk7Zm9yKHZhciBpPTA7aTx4cy5sZW5ndGg7aSsrKWlmKHhzW2ldPT09aXRlbSlyZXR1cm4gaTtyZXR1cm4tMX0sT2JqZWN0X2tleXM9ZnVuY3Rpb24ob2JqKXtpZihPYmplY3Qua2V5cylyZXR1cm4gT2JqZWN0LmtleXMob2JqKTt2YXIgcmVzPVtdO2Zvcih2YXIga2V5IGluIG9iailyZXMucHVzaChrZXkpO3JldHVybiByZXN9LGZvckVhY2g9ZnVuY3Rpb24oeHMsZm4pe2lmKHhzLmZvckVhY2gpcmV0dXJuIHhzLmZvckVhY2goZm4pO2Zvcih2YXIgaT0wO2k8eHMubGVuZ3RoO2krKylmbih4c1tpXSxpLHhzKX0sZGVmaW5lUHJvcD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfIix7fSksZnVuY3Rpb24ob2JqLG5hbWUsdmFsdWUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosbmFtZSx7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsdmFsdWV9KX19Y2F0Y2goZSl7cmV0dXJuIGZ1bmN0aW9uKG9iaixuYW1lLHZhbHVlKXtvYmpbbmFtZV09dmFsdWV9fX0oKSxnbG9iYWxzPVsiQXJyYXkiLCJCb29sZWFuIiwiRGF0ZSIsIkVycm9yIiwiRXZhbEVycm9yIiwiRnVuY3Rpb24iLCJJbmZpbml0eSIsIkpTT04iLCJNYXRoIiwiTmFOIiwiTnVtYmVyIiwiT2JqZWN0IiwiUmFuZ2VFcnJvciIsIlJlZmVyZW5jZUVycm9yIiwiUmVnRXhwIiwiU3RyaW5nIiwiU3ludGF4RXJyb3IiLCJUeXBlRXJyb3IiLCJVUklFcnJvciIsImRlY29kZVVSSSIsImRlY29kZVVSSUNvbXBvbmVudCIsImVuY29kZVVSSSIsImVuY29kZVVSSUNvbXBvbmVudCIsImVzY2FwZSIsImV2YWwiLCJpc0Zpbml0ZSIsImlzTmFOIiwicGFyc2VGbG9hdCIsInBhcnNlSW50IiwidW5kZWZpbmVkIiwidW5lc2NhcGUiXTtmdW5jdGlvbiBDb250ZXh0KCl7fUNvbnRleHQucHJvdG90eXBlPXt9O3ZhciBTY3JpcHQ9ZXhwb3J0cy5TY3JpcHQ9ZnVuY3Rpb24gTm9kZVNjcmlwdChjb2RlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBTY3JpcHQpKXJldHVybiBuZXcgU2NyaXB0KGNvZGUpO3RoaXMuY29kZT1jb2RlfTtTY3JpcHQucHJvdG90eXBlLnJ1bkluQ29udGV4dD1mdW5jdGlvbihjb250ZXh0KXtpZighKGNvbnRleHQgaW5zdGFuY2VvZiBDb250ZXh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJuZWVkcyBhICdjb250ZXh0JyBhcmd1bWVudC4iKTt2YXIgaWZyYW1lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2lmcmFtZS5zdHlsZXx8KGlmcmFtZS5zdHlsZT17fSksaWZyYW1lLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTt2YXIgd2luPWlmcmFtZS5jb250ZW50V2luZG93LHdFdmFsPXdpbi5ldmFsLHdFeGVjU2NyaXB0PXdpbi5leGVjU2NyaXB0OyF3RXZhbCYmd0V4ZWNTY3JpcHQmJih3RXhlY1NjcmlwdC5jYWxsKHdpbiwibnVsbCIpLHdFdmFsPXdpbi5ldmFsKSxmb3JFYWNoKE9iamVjdF9rZXlzKGNvbnRleHQpLGZ1bmN0aW9uKGtleSl7d2luW2tleV09Y29udGV4dFtrZXldfSksZm9yRWFjaChnbG9iYWxzLGZ1bmN0aW9uKGtleSl7Y29udGV4dFtrZXldJiYod2luW2tleV09Y29udGV4dFtrZXldKX0pO3ZhciB3aW5LZXlzPU9iamVjdF9rZXlzKHdpbikscmVzPXdFdmFsLmNhbGwod2luLHRoaXMuY29kZSk7cmV0dXJuIGZvckVhY2goT2JqZWN0X2tleXMod2luKSxmdW5jdGlvbihrZXkpeyhrZXkgaW4gY29udGV4dHx8LTE9PT1pbmRleE9mKHdpbktleXMsa2V5KSkmJihjb250ZXh0W2tleV09d2luW2tleV0pfSksZm9yRWFjaChnbG9iYWxzLGZ1bmN0aW9uKGtleSl7a2V5IGluIGNvbnRleHR8fGRlZmluZVByb3AoY29udGV4dCxrZXksd2luW2tleV0pfSksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpZnJhbWUpLHJlc30sU2NyaXB0LnByb3RvdHlwZS5ydW5JblRoaXNDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGV2YWwodGhpcy5jb2RlKX0sU2NyaXB0LnByb3RvdHlwZS5ydW5Jbk5ld0NvbnRleHQ9ZnVuY3Rpb24oY29udGV4dCl7dmFyIGN0eD1TY3JpcHQuY3JlYXRlQ29udGV4dChjb250ZXh0KSxyZXM9dGhpcy5ydW5JbkNvbnRleHQoY3R4KTtyZXR1cm4gY29udGV4dCYmZm9yRWFjaChPYmplY3Rfa2V5cyhjdHgpLGZ1bmN0aW9uKGtleSl7Y29udGV4dFtrZXldPWN0eFtrZXldfSkscmVzfSxmb3JFYWNoKE9iamVjdF9rZXlzKFNjcmlwdC5wcm90b3R5cGUpLGZ1bmN0aW9uKG5hbWUpe2V4cG9ydHNbbmFtZV09U2NyaXB0W25hbWVdPWZ1bmN0aW9uKGNvZGUpe3ZhciBzPVNjcmlwdChjb2RlKTtyZXR1cm4gc1tuYW1lXS5hcHBseShzLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKX19KSxleHBvcnRzLmlzQ29udGV4dD1mdW5jdGlvbihjb250ZXh0KXtyZXR1cm4gY29udGV4dCBpbnN0YW5jZW9mIENvbnRleHR9LGV4cG9ydHMuY3JlYXRlU2NyaXB0PWZ1bmN0aW9uKGNvZGUpe3JldHVybiBleHBvcnRzLlNjcmlwdChjb2RlKX0sZXhwb3J0cy5jcmVhdGVDb250ZXh0PVNjcmlwdC5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGNvbnRleHQpe3ZhciBjb3B5PW5ldyBDb250ZXh0O3JldHVybiJvYmplY3QiPT10eXBlb2YgY29udGV4dCYmZm9yRWFjaChPYmplY3Rfa2V5cyhjb250ZXh0KSxmdW5jdGlvbihrZXkpe2NvcHlba2V5XT1jb250ZXh0W2tleV19KSxjb3B5fX0sIi4uLy4uL25vZGVfbW9kdWxlcy93aGljaC10eXBlZC1hcnJheS9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGZvckVhY2g9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Zvci1lYWNoL2luZGV4LmpzIiksYXZhaWxhYmxlVHlwZWRBcnJheXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2F2YWlsYWJsZS10eXBlZC1hcnJheXMvaW5kZXguanMiKSxjYWxsQmluZD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzIiksY2FsbEJvdW5kPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJvdW5kL2luZGV4LmpzIiksZ09QRD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZ29wZC9pbmRleC5qcyIpLGdldFByb3RvPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9nZXQtcHJvdG8vaW5kZXguanMiKSwkdG9TdHJpbmc9Y2FsbEJvdW5kKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIiksaGFzVG9TdHJpbmdUYWc9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2hhcy10b3N0cmluZ3RhZy9zaGFtcy5qcyIpKCksZz0idW5kZWZpbmVkIj09dHlwZW9mIGdsb2JhbFRoaXM/X193ZWJwYWNrX3JlcXVpcmVfXy5nOmdsb2JhbFRoaXMsdHlwZWRBcnJheXM9YXZhaWxhYmxlVHlwZWRBcnJheXMoKSwkc2xpY2U9Y2FsbEJvdW5kKCJTdHJpbmcucHJvdG90eXBlLnNsaWNlIiksJGluZGV4T2Y9Y2FsbEJvdW5kKCJBcnJheS5wcm90b3R5cGUuaW5kZXhPZiIsITApfHxmdW5jdGlvbiBpbmRleE9mKGFycmF5LHZhbHVlKXtmb3IodmFyIGk9MDtpPGFycmF5Lmxlbmd0aDtpKz0xKWlmKGFycmF5W2ldPT09dmFsdWUpcmV0dXJuIGk7cmV0dXJuLTF9LGNhY2hlPXtfX3Byb3RvX186bnVsbH07Zm9yRWFjaCh0eXBlZEFycmF5cyxoYXNUb1N0cmluZ1RhZyYmZ09QRCYmZ2V0UHJvdG8/ZnVuY3Rpb24odHlwZWRBcnJheSl7dmFyIGFycj1uZXcgZ1t0eXBlZEFycmF5XTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gYXJyJiZnZXRQcm90byl7dmFyIHByb3RvPWdldFByb3RvKGFyciksZGVzY3JpcHRvcj1nT1BEKHByb3RvLFN5bWJvbC50b1N0cmluZ1RhZyk7aWYoIWRlc2NyaXB0b3ImJnByb3RvKXt2YXIgc3VwZXJQcm90bz1nZXRQcm90byhwcm90byk7ZGVzY3JpcHRvcj1nT1BEKHN1cGVyUHJvdG8sU3ltYm9sLnRvU3RyaW5nVGFnKX1pZihkZXNjcmlwdG9yJiZkZXNjcmlwdG9yLmdldCl7dmFyIGJvdW5kPWNhbGxCaW5kKGRlc2NyaXB0b3IuZ2V0KTtjYWNoZVsiJCIrdHlwZWRBcnJheV09Ym91bmR9fX06ZnVuY3Rpb24odHlwZWRBcnJheSl7dmFyIGFycj1uZXcgZ1t0eXBlZEFycmF5XSxmbj1hcnIuc2xpY2V8fGFyci5zZXQ7aWYoZm4pe3ZhciBib3VuZD1jYWxsQmluZChmbik7Y2FjaGVbIiQiK3R5cGVkQXJyYXldPWJvdW5kfX0pO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIHdoaWNoVHlwZWRBcnJheSh2YWx1ZSl7aWYoIXZhbHVlfHwib2JqZWN0IiE9dHlwZW9mIHZhbHVlKXJldHVybiExO2lmKCFoYXNUb1N0cmluZ1RhZyl7dmFyIHRhZz0kc2xpY2UoJHRvU3RyaW5nKHZhbHVlKSw4LC0xKTtyZXR1cm4gJGluZGV4T2YodHlwZWRBcnJheXMsdGFnKT4tMT90YWc6Ik9iamVjdCI9PT10YWcmJmZ1bmN0aW9uIHRyeUFsbFNsaWNlcyh2YWx1ZSl7dmFyIGZvdW5kPSExO3JldHVybiBmb3JFYWNoKGNhY2hlLGZ1bmN0aW9uKGdldHRlcixuYW1lKXtpZighZm91bmQpdHJ5e2dldHRlcih2YWx1ZSksZm91bmQ9JHNsaWNlKG5hbWUsMSl9Y2F0Y2goZSl7fX0pLGZvdW5kfSh2YWx1ZSl9cmV0dXJuIGdPUEQ/ZnVuY3Rpb24gdHJ5QWxsVHlwZWRBcnJheXModmFsdWUpe3ZhciBmb3VuZD0hMTtyZXR1cm4gZm9yRWFjaChjYWNoZSxmdW5jdGlvbihnZXR0ZXIsdHlwZWRBcnJheSl7aWYoIWZvdW5kKXRyeXsiJCIrZ2V0dGVyKHZhbHVlKT09PXR5cGVkQXJyYXkmJihmb3VuZD0kc2xpY2UodHlwZWRBcnJheSwxKSl9Y2F0Y2goZSl7fX0pLGZvdW5kfSh2YWx1ZSk6bnVsbH19LCIuLi8uLi9ub2RlX21vZHVsZXMveHRlbmQvaW1tdXRhYmxlLmpzIihtb2R1bGUpe21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGV4dGVuZCgpe2Zvcih2YXIgdGFyZ2V0PXt9LGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgc291cmNlPWFyZ3VtZW50c1tpXTtmb3IodmFyIGtleSBpbiBzb3VyY2UpaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2Usa2V5KSYmKHRhcmdldFtrZXldPXNvdXJjZVtrZXldKX1yZXR1cm4gdGFyZ2V0fTt2YXIgaGFzT3duUHJvcGVydHk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eX0sIi4vc3JjL3V0b28vaW5kZXguanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fd2VicGFja19leHBvcnRzX18sX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLHtEUjooKT0+RVJSX05PVF9BTExPV0VELEZzOigpPT5GcyxISjooKT0+d29ya2VyQ3JlYXRlZCxLTDooKT0+RVJSX1RZUEVfTUlTTUFUQ0gsUVI6KCk9PmluaXRTeW5jLFI2OigpPT5FUlJfUVVPVEFfRVhDRUVERUQsVTc6KCk9PkVSUl9OT19NT0RJRklDQVRJT05fQUxMT1dFRCxXdjooKT0+RVJSX0lOVkFMSURfU1RBVEUsYU46KCk9PnJlY3ZUYXNrTWVzc2FnZUluV29ya2VyLGg4OigpPT5FUlJfQUJPUlQsbDI6KCk9PnNlbmRUYXNrTWVzc2FnZSxydjooKT0+RVJSX05PVF9GT1VORH0pO2NsYXNzIEJ1aWxkT3B0aW9uc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsQnVpbGRPcHRpb25zRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX2J1aWxkb3B0aW9uc19mcmVlKHB0ciwwKX1nZXQgY29uZmlnKCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5idWlsZG9wdGlvbnNfY29uZmlnKHRoaXMuX193YmdfcHRyKSl9Y29uc3RydWN0b3IoKXtjb25zdCByZXQ9d2FzbS5idWlsZG9wdGlvbnNfbmV3KCk7cmV0dXJuIHRoaXMuX193YmdfcHRyPXJldD4+PjAsQnVpbGRPcHRpb25zRmluYWxpemF0aW9uLnJlZ2lzdGVyKHRoaXMsdGhpcy5fX3diZ19wdHIsdGhpcyksdGhpc31zZXQgY29uZmlnKHZhbCl7d2FzbS5idWlsZG9wdGlvbnNfc2V0X2NvbmZpZyh0aGlzLl9fd2JnX3B0cixhZGRIZWFwT2JqZWN0KHZhbCkpfWdldCBjbGVhbnVwKCl7cmV0dXJuIDAhPT13YXNtLl9fd2JnX2dldF9idWlsZG9wdGlvbnNfY2xlYW51cCh0aGlzLl9fd2JnX3B0cil9c2V0IGNsZWFudXAoYXJnMCl7d2FzbS5fX3diZ19zZXRfYnVpbGRvcHRpb25zX2NsZWFudXAodGhpcy5fX3diZ19wdHIsYXJnMCl9fVN5bWJvbC5kaXNwb3NlJiYoQnVpbGRPcHRpb25zLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09QnVpbGRPcHRpb25zLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9uc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsQ3JlYXRlU3luY0FjY2Vzc0hhbmRsZU9wdGlvbnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfY3JlYXRlc3luY2FjY2Vzc2hhbmRsZW9wdGlvbnNfZnJlZShwdHIsMCl9fVN5bWJvbC5kaXNwb3NlJiYoQ3JlYXRlU3luY0FjY2Vzc0hhbmRsZU9wdGlvbnMucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1DcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9ucy5wcm90b3R5cGUuZnJlZSk7Y2xhc3MgRGlyRW50cnl7c3RhdGljIF9fd3JhcChwdHIpe3B0cj4+Pj0wO2NvbnN0IG9iaj1PYmplY3QuY3JlYXRlKERpckVudHJ5LnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLERpckVudHJ5RmluYWxpemF0aW9uLnJlZ2lzdGVyKG9iaixvYmouX193YmdfcHRyLG9iaiksb2JqfXRvSlNPTigpe3JldHVybntuYW1lOnRoaXMubmFtZSx0eXBlOnRoaXMudHlwZX19dG9TdHJpbmcoKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyl9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLERpckVudHJ5RmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX2RpcmVudHJ5X2ZyZWUocHRyLDApfWdldCBuYW1lKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5fX3diZ19nZXRfZGlyZW50cnlfbmFtZShyZXRwdHIsdGhpcy5fX3diZ19wdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19Z2V0IHR5cGUoKXtjb25zdCByZXQ9d2FzbS5fX3diZ19nZXRfZGlyZW50cnlfdHlwZSh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIF9fd2JpbmRnZW5fZW51bV9EaXJFbnRyeVR5cGVbcmV0XX1zZXQgbmFtZShhcmcwKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGFyZzAsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5fX3diZ19zZXRfZGlyZW50cnlfbmFtZSh0aGlzLl9fd2JnX3B0cixwdHIwLGxlbjApfXNldCB0eXBlKGFyZzApe3dhc20uX193Ymdfc2V0X2RpcmVudHJ5X3R5cGUodGhpcy5fX3diZ19wdHIsKF9fd2JpbmRnZW5fZW51bV9EaXJFbnRyeVR5cGUuaW5kZXhPZihhcmcwKSsxfHwzKS0xKX19ZnVuY3Rpb24gRVJSX0FCT1JUKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfQUJPUlQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9JTlZBTElEX1NUQVRFKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfSU5WQUxJRF9TVEFURShyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX0tFWV9BTFJFQURZX0VYSVNUUygpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uRVJSX0tFWV9BTFJFQURZX0VYSVNUUyhyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX05PVF9BTExPV0VEKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfTk9UX0FMTE9XRUQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9OT1RfRk9VTkQoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9OT1RfRk9VTkQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9OT19NT0RJRklDQVRJT05fQUxMT1dFRCgpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uRVJSX0tFWV9BTFJFQURZX0VYSVNUUyhyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX1FVT1RBX0VYQ0VFREVEKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfUVVPVEFfRVhDRUVERUQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9UWVBFX01JU01BVENIKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfVFlQRV9NSVNNQVRDSChyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19U3ltYm9sLmRpc3Bvc2UmJihEaXJFbnRyeS5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPURpckVudHJ5LnByb3RvdHlwZS5mcmVlKTtjbGFzcyBGc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsRnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfZnNfZnJlZShwdHIsMCl9c3RhdGljIGNvcHlGaWxlKHNyYyxkc3Qpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoc3JjLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOLHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoZHN0LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfY29weUZpbGUocHRyMCxsZW4wLHB0cjEsbGVuMSkpfXN0YXRpYyBjb3B5RmlsZVN5bmMoc3JjLGRzdCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHNyYyx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTixwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGRzdCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4xPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NvcHlGaWxlU3luYyhyZXRwdHIscHRyMCxsZW4wLHB0cjEsbGVuMSk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgY3JlYXRlRGlyKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX2NyZWF0ZURpcihwdHIwLGxlbjApKX1zdGF0aWMgY3JlYXRlRGlyQWxsKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX2NyZWF0ZURpckFsbChwdHIwLGxlbjApKX1zdGF0aWMgY3JlYXRlRGlyQWxsU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NyZWF0ZURpckFsbFN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgY3JlYXRlRGlyU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NyZWF0ZURpclN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgbWV0YWRhdGEocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfbWV0YWRhdGEocHRyMCxsZW4wKSl9c3RhdGljIG1ldGFkYXRhU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX21ldGFkYXRhU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrOCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMSk7cmV0dXJuIE1ldGFkYXRhLl9fd3JhcChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgcmVhZChwYXRoKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19yZWFkKHB0cjAsbGVuMCkpfXN0YXRpYyByZWFkRGlyKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3JlYWREaXIocHRyMCxsZW4wKSl9c3RhdGljIHJlYWREaXJTeW5jKHBhdGgpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfcmVhZERpclN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkscjI9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzgsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cisxMiwhMCkpdGhyb3cgdGFrZU9iamVjdChyMik7dmFyIHYyPWdldEFycmF5SnNWYWx1ZUZyb21XYXNtMChyMCxyMSkuc2xpY2UoKTtyZXR1cm4gd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQocjAsNCpyMSw0KSx2Mn1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyByZWFkU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX3JlYWRTeW5jKHJldHB0cixwdHIwLGxlbjApO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis4LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIxKTtyZXR1cm4gdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgcmVhZFRvU3RyaW5nKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3JlYWRUb1N0cmluZyhwdHIwLGxlbjApKX1zdGF0aWMgcmVtb3ZlRGlyKHBhdGgscmVjdXJzaXZlKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19yZW1vdmVEaXIocHRyMCxsZW4wLHJlY3Vyc2l2ZSkpfXN0YXRpYyByZW1vdmVEaXJTeW5jKHBhdGgscmVjdXJzaXZlKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX3JlbW92ZURpclN5bmMocmV0cHRyLHB0cjAsbGVuMCxyZWN1cnNpdmUpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCk7aWYoZ2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApKXRocm93IHRha2VPYmplY3QocjApfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KX19c3RhdGljIHJlbW92ZUZpbGUocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfcmVtb3ZlRmlsZShwdHIwLGxlbjApKX1zdGF0aWMgcmVtb3ZlRmlsZVN5bmMocGF0aCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5mc19yZW1vdmVGaWxlU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyB3cml0ZShwYXRoLGNvbnRlbnQpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3dyaXRlKHB0cjAsbGVuMCxhZGRIZWFwT2JqZWN0KGNvbnRlbnQpKSl9c3RhdGljIHdyaXRlU3RyaW5nKHBhdGgsY29udGVudCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOLHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoY29udGVudCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4xPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3dyaXRlU3RyaW5nKHB0cjAsbGVuMCxwdHIxLGxlbjEpKX1zdGF0aWMgd3JpdGVTeW5jKHBhdGgsY29udGVudCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5mc193cml0ZVN5bmMocmV0cHRyLHB0cjAsbGVuMCxhZGRIZWFwT2JqZWN0KGNvbnRlbnQpKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fX1TeW1ib2wuZGlzcG9zZSYmKEZzLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09RnMucHJvdG90eXBlLmZyZWUpO2NsYXNzIE1ldGFkYXRhe3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShNZXRhZGF0YS5wcm90b3R5cGUpO3JldHVybiBvYmouX193YmdfcHRyPXB0cixNZXRhZGF0YUZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian10b0pTT04oKXtyZXR1cm57ZmlsZV9zaXplOnRoaXMuZmlsZV9zaXplLHR5cGU6dGhpcy50eXBlfX10b1N0cmluZygpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKX1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsTWV0YWRhdGFGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfbWV0YWRhdGFfZnJlZShwdHIsMCl9Z2V0IGZpbGVfc2l6ZSgpe2NvbnN0IHJldD13YXNtLl9fd2JnX2dldF9tZXRhZGF0YV9maWxlX3NpemUodGhpcy5fX3diZ19wdHIpO3JldHVybiBCaWdJbnQuYXNVaW50Tig2NCxyZXQpfWdldCB0eXBlKCl7Y29uc3QgcmV0PXdhc20uX193YmdfZ2V0X21ldGFkYXRhX3R5cGUodGhpcy5fX3diZ19wdHIpO3JldHVybiBfX3diaW5kZ2VuX2VudW1fRGlyRW50cnlUeXBlW3JldF19c2V0IGZpbGVfc2l6ZShhcmcwKXt3YXNtLl9fd2JnX3NldF9tZXRhZGF0YV9maWxlX3NpemUodGhpcy5fX3diZ19wdHIsYXJnMCl9c2V0IHR5cGUoYXJnMCl7d2FzbS5fX3diZ19zZXRfbWV0YWRhdGFfdHlwZSh0aGlzLl9fd2JnX3B0ciwoX193YmluZGdlbl9lbnVtX0RpckVudHJ5VHlwZS5pbmRleE9mKGFyZzApKzF8fDMpLTEpfX1TeW1ib2wuZGlzcG9zZSYmKE1ldGFkYXRhLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09TWV0YWRhdGEucHJvdG90eXBlLmZyZWUpO2NsYXNzIFByb2plY3R7X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFByb2plY3RGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfcHJvamVjdF9mcmVlKHB0ciwwKX1zdGF0aWMgYnVpbGQob3B0aW9ucyl7X2Fzc2VydENsYXNzKG9wdGlvbnMsQnVpbGRPcHRpb25zKTt2YXIgcHRyMD1vcHRpb25zLl9fZGVzdHJveV9pbnRvX3JhdygpO3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9idWlsZChwdHIwKSl9c3RhdGljIGdldCBjd2QoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLnByb2plY3RfY3dkKHJldHB0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1zdGF0aWMgZGVwcyhyZWdpc3RyeSxjb25jdXJyZW5jeSl7dmFyIHB0cjA9aXNMaWtlTm9uZShyZWdpc3RyeSk/MDpwYXNzU3RyaW5nVG9XYXNtMChyZWdpc3RyeSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfZGVwcyhwdHIwLGxlbjAsaXNMaWtlTm9uZShjb25jdXJyZW5jeSk/NDI5NDk2NzI5Nzpjb25jdXJyZW5jeT4+PjApKX1zdGF0aWMgZW50cnlwb2ludHNTdWJzY3JpYmUoY29uZmlnLGNhbGxiYWNrKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfZW50cnlwb2ludHNTdWJzY3JpYmUoYWRkSGVhcE9iamVjdChjb25maWcpLGFkZEhlYXBPYmplY3QoY2FsbGJhY2spKSl9c3RhdGljIGd6aXAoZmlsZXMpe3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9nemlwKGFkZEhlYXBPYmplY3QoZmlsZXMpKSl9c3RhdGljIGhtckV2ZW50cyhpZGVudGlmaWVyLGNhbGxiYWNrKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGlkZW50aWZpZXIsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5wcm9qZWN0X2htckV2ZW50cyhwdHIwLGxlbjAsYWRkSGVhcE9iamVjdChjYWxsYmFjaykpKX1zdGF0aWMgaW5pdCh0aHJlYWRfdXJsKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHRocmVhZF91cmwsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5wcm9qZWN0X2luaXQocHRyMCxsZW4wKX1zdGF0aWMgaW5zdGFsbChwYWNrYWdlX2xvY2ssbWF4X2NvbmN1cnJlbnRfZG93bmxvYWRzKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhY2thZ2VfbG9jayx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfaW5zdGFsbChwdHIwLGxlbjAsaXNMaWtlTm9uZShtYXhfY29uY3VycmVudF9kb3dubG9hZHMpPzQyOTQ5NjcyOTc6bWF4X2NvbmN1cnJlbnRfZG93bmxvYWRzPj4+MCkpfXN0YXRpYyBzZXRDd2QocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20ucHJvamVjdF9zZXRDd2QocHRyMCxsZW4wKX1zdGF0aWMgc2lnTWQ1KGNvbnRlbnQpe3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9zaWdNZDUoYWRkSGVhcE9iamVjdChjb250ZW50KSkpfXN0YXRpYyB1cGRhdGVJbmZvU3Vic2NyaWJlKGFnZ3JlZ2F0aW9uX21zLGNhbGxiYWNrKXt3YXNtLnByb2plY3RfdXBkYXRlSW5mb1N1YnNjcmliZShhZ2dyZWdhdGlvbl9tcyxhZGRIZWFwT2JqZWN0KGNhbGxiYWNrKSl9c3RhdGljIHdyaXRlQWxsVG9EaXNrKGNhbGxiYWNrKXt3YXNtLnByb2plY3Rfd3JpdGVBbGxUb0Rpc2soYWRkSGVhcE9iamVjdChjYWxsYmFjaykpfX1TeW1ib2wuZGlzcG9zZSYmKFByb2plY3QucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1Qcm9qZWN0LnByb3RvdHlwZS5mcmVlKTtjbGFzcyBSb290VGFza3tzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoUm9vdFRhc2sucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsUm9vdFRhc2tGaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFJvb3RUYXNrRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3Jvb3R0YXNrX2ZyZWUocHRyLDApfX1TeW1ib2wuZGlzcG9zZSYmKFJvb3RUYXNrLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09Um9vdFRhc2sucHJvdG90eXBlLmZyZWUpO2NsYXNzIFdhc21UYXNrTWVzc2FnZXtzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoV2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLFdhc21UYXNrTWVzc2FnZUZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsV2FzbVRhc2tNZXNzYWdlRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3dhc210YXNrbWVzc2FnZV9mcmVlKHB0ciwwKX1nZXQgdGFza0lkKCl7cmV0dXJuIHdhc20uX193YmdfZ2V0X3dhc210YXNrbWVzc2FnZV90YXNrSWQodGhpcy5fX3diZ19wdHIpPj4+MH1zZXQgdGFza0lkKGFyZzApe3dhc20uX193Ymdfc2V0X3dhc210YXNrbWVzc2FnZV90YXNrSWQodGhpcy5fX3diZ19wdHIsYXJnMCl9Z2V0IGRhdGEoKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLndhc210YXNrbWVzc2FnZV9kYXRhKHRoaXMuX193YmdfcHRyKSl9fVN5bWJvbC5kaXNwb3NlJiYoV2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09V2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBXZWJXb3JrZXJDcmVhdGlvbntzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoV2ViV29ya2VyQ3JlYXRpb24ucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsV2ViV29ya2VyQ3JlYXRpb25GaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFdlYldvcmtlckNyZWF0aW9uRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3dlYndvcmtlcmNyZWF0aW9uX2ZyZWUocHRyLDApfWdldCBvcHRpb25zKCl7Y29uc3QgcmV0PXdhc20uX193YmdfZ2V0X3dlYndvcmtlcmNyZWF0aW9uX29wdGlvbnModGhpcy5fX3diZ19wdHIpO3JldHVybiBXZWJXb3JrZXJPcHRpb25zLl9fd3JhcChyZXQpfXNldCBvcHRpb25zKGFyZzApe19hc3NlcnRDbGFzcyhhcmcwLFdlYldvcmtlck9wdGlvbnMpO3ZhciBwdHIwPWFyZzAuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ19zZXRfd2Vid29ya2VyY3JlYXRpb25fb3B0aW9ucyh0aGlzLl9fd2JnX3B0cixwdHIwKX19U3ltYm9sLmRpc3Bvc2UmJihXZWJXb3JrZXJDcmVhdGlvbi5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlckNyZWF0aW9uLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBXZWJXb3JrZXJPcHRpb25ze3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShXZWJXb3JrZXJPcHRpb25zLnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLFdlYldvcmtlck9wdGlvbnNGaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFdlYldvcmtlck9wdGlvbnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfd2Vid29ya2Vyb3B0aW9uc19mcmVlKHB0ciwwKX1nZXQgY3dkKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5fX3diZ19nZXRfd2Vid29ya2Vyb3B0aW9uc19jd2QocmV0cHRyLHRoaXMuX193YmdfcHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWdldCBmaWxlbmFtZSgpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uX193YmdfZ2V0X3dlYndvcmtlcm9wdGlvbnNfZmlsZW5hbWUocmV0cHRyLHRoaXMuX193YmdfcHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fXNldCBjd2QoYXJnMCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChhcmcwLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uX193Ymdfc2V0X3dlYndvcmtlcm9wdGlvbnNfY3dkKHRoaXMuX193YmdfcHRyLHB0cjAsbGVuMCl9c2V0IGZpbGVuYW1lKGFyZzApe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoYXJnMCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJvcHRpb25zX2ZpbGVuYW1lKHRoaXMuX193YmdfcHRyLHB0cjAsbGVuMCl9fVN5bWJvbC5kaXNwb3NlJiYoV2ViV29ya2VyT3B0aW9ucy5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlck9wdGlvbnMucHJvdG90eXBlLmZyZWUpO2NsYXNzIFdlYldvcmtlclRlcm1pbmF0aW9ue3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShXZWJXb3JrZXJUZXJtaW5hdGlvbi5wcm90b3R5cGUpO3JldHVybiBvYmouX193YmdfcHRyPXB0cixXZWJXb3JrZXJUZXJtaW5hdGlvbkZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsV2ViV29ya2VyVGVybWluYXRpb25GaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfd2Vid29ya2VydGVybWluYXRpb25fZnJlZShwdHIsMCl9Z2V0IG9wdGlvbnMoKXtjb25zdCByZXQ9d2FzbS5fX3diZ19nZXRfd2Vid29ya2VydGVybWluYXRpb25fb3B0aW9ucyh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIFdlYldvcmtlck9wdGlvbnMuX193cmFwKHJldCl9Z2V0IHdvcmtlcklkKCl7cmV0dXJuIHdhc20uX193YmdfZ2V0X3dlYndvcmtlcnRlcm1pbmF0aW9uX3dvcmtlcklkKHRoaXMuX193YmdfcHRyKT4+PjB9c2V0IG9wdGlvbnMoYXJnMCl7X2Fzc2VydENsYXNzKGFyZzAsV2ViV29ya2VyT3B0aW9ucyk7dmFyIHB0cjA9YXJnMC5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl9vcHRpb25zKHRoaXMuX193YmdfcHRyLHB0cjApfXNldCB3b3JrZXJJZChhcmcwKXt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl93b3JrZXJJZCh0aGlzLl9fd2JnX3B0cixhcmcwKX19ZnVuY3Rpb24gZ2V0V2FzbU1lbW9yeSgpe3JldHVybiB0YWtlT2JqZWN0KHdhc20uZ2V0V2FzbU1lbW9yeSgpKX1mdW5jdGlvbiBnZXRXYXNtTW9kdWxlKCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5nZXRXYXNtTW9kdWxlKCkpfWZ1bmN0aW9uIGluaXRMb2dGaWx0ZXIoZmlsdGVyKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGZpbHRlcix3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmluaXRMb2dGaWx0ZXIocHRyMCxsZW4wKX1mdW5jdGlvbiBpbml0X3BhY2soKXt3YXNtLmluaXRfcGFjaygpfWZ1bmN0aW9uIHJlY3ZUYXNrTWVzc2FnZUluV29ya2VyKHdvcmtlcl9pZCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5yZWN2VGFza01lc3NhZ2VJbldvcmtlcih3b3JrZXJfaWQpKX1mdW5jdGlvbiByZWdpc3RlcldvcmtlclNjaGVkdWxlcihjcmVhdG9yLHRlcm1pbmF0b3Ipe3dhc20ucmVnaXN0ZXJXb3JrZXJTY2hlZHVsZXIoYWRkSGVhcE9iamVjdChjcmVhdG9yKSxhZGRIZWFwT2JqZWN0KHRlcm1pbmF0b3IpKX1mdW5jdGlvbiBzZW5kVGFza01lc3NhZ2UobWVzc2FnZSl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5zZW5kVGFza01lc3NhZ2UoYWRkSGVhcE9iamVjdChtZXNzYWdlKSkpfWZ1bmN0aW9uIHdhc21fdGhyZWFkX2VudHJ5X3BvaW50KHB0cil7d2FzbS53YXNtX3RocmVhZF9lbnRyeV9wb2ludChwdHIpfWZ1bmN0aW9uIHdvcmtlckNyZWF0ZWQod29ya2VyX2lkKXt3YXNtLndvcmtlckNyZWF0ZWQod29ya2VyX2lkKX1mdW5jdGlvbiBfX3diZ19nZXRfaW1wb3J0cyhtZW1vcnkpe2NvbnN0IGltcG9ydDA9e19fcHJvdG9fXzpudWxsLF9fd2JnX0Vycm9yXzhjNGU0M2ZlNzQ1NTlkNzM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxfX3diZ19fX3diaW5kZ2VuX2RlYnVnX3N0cmluZ18wYmM4NDgyYzZlMzUwOGFlOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Y29uc3QgcHRyMT1wYXNzU3RyaW5nVG9XYXNtMChkZWJ1Z1N0cmluZyhnZXRPYmplY3QoYXJnMSkpLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX19fd2JpbmRnZW5faXNfZnVuY3Rpb25fMDA5NWE3M2I4YjE1NmY3NjpmdW5jdGlvbihhcmcwKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZ2V0T2JqZWN0KGFyZzApfSxfX3diZ19fX3diaW5kZ2VuX2lzX251bGxfYWMzNGY1MDAzOTkxNzU5YTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gbnVsbD09PWdldE9iamVjdChhcmcwKX0sX193YmdfX193YmluZGdlbl9pc19vYmplY3RfNWFlOGU1ODgwZjJjMWZiZDpmdW5jdGlvbihhcmcwKXtjb25zdCB2YWw9Z2V0T2JqZWN0KGFyZzApO3JldHVybiJvYmplY3QiPT10eXBlb2YgdmFsJiZudWxsIT09dmFsfSxfX3diZ19fX3diaW5kZ2VuX2lzX3VuZGVmaW5lZF85ZTRkOTI1MzRjNDJkNzc4OmZ1bmN0aW9uKGFyZzApe3JldHVybiB2b2lkIDA9PT1nZXRPYmplY3QoYXJnMCl9LF9fd2JnX19fd2JpbmRnZW5fbWVtb3J5X2JkMWZiY2YyMWZiZWYzYzg6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdCh3YXNtLm1lbW9yeSl9LF9fd2JnX19fd2JpbmRnZW5fbW9kdWxlX2Y2YjgwNTJkNzljMWNjMTY6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdCh3YXNtTW9kdWxlKX0sX193YmdfX193YmluZGdlbl9udW1iZXJfZ2V0XzhmZjQyNTU1MTZjY2FkM2U6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBvYmo9Z2V0T2JqZWN0KGFyZzEpLHJldD0ibnVtYmVyIj09dHlwZW9mIG9iaj9vYmo6dm9pZCAwO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEZsb2F0NjQoYXJnMCs4LGlzTGlrZU5vbmUocmV0KT8wOnJldCwhMCksZ2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCswLCFpc0xpa2VOb25lKHJldCksITApfSxfX3diZ19fX3diaW5kZ2VuX3JldGhyb3dfMDU1MjVjNTY3ZjE1NDQ3MjpmdW5jdGlvbihhcmcwKXt0aHJvdyB0YWtlT2JqZWN0KGFyZzApfSxfX3diZ19fX3diaW5kZ2VuX3N0cmluZ19nZXRfNzJmYjY5NjIwMmM1NjcyOTpmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IG9iaj1nZXRPYmplY3QoYXJnMSkscmV0PSJzdHJpbmciPT10eXBlb2Ygb2JqP29iajp2b2lkIDA7dmFyIHB0cjE9aXNMaWtlTm9uZShyZXQpPzA6cGFzc1N0cmluZ1RvV2FzbTAocmV0LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX19fd2JpbmRnZW5fdGhyb3dfYmUyODlkNTAzNGVkMjcxYjpmdW5jdGlvbihhcmcwLGFyZzEpe3Rocm93IG5ldyBFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSl9LF9fd2JnX193YmdfY2JfdW5yZWZfZDliODdmZjc5ODJlM2IyMTpmdW5jdGlvbihhcmcwKXtnZXRPYmplY3QoYXJnMCkuX3diZ19jYl91bnJlZigpfSxfX3diZ19hYm9ydF8yZjA1ODRlMDNlOGUzOTUwOmZ1bmN0aW9uKGFyZzApe2dldE9iamVjdChhcmcwKS5hYm9ydCgpfSxfX3diZ19hYm9ydF9kNTQ5YjkyZDNjNjY1ZGUxOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmFib3J0KGdldE9iamVjdChhcmcxKSl9LF9fd2JnX2FwcGVuZF9hOTkyY2NjMzdhYTYyZGM0OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMsYXJnNCl7Z2V0T2JqZWN0KGFyZzApLmFwcGVuZChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMyxhcmc0KSl9LGFyZ3VtZW50cyl9LF9fd2JnX2FycmF5QnVmZmVyXzA1Y2UxYWYyM2U5MDY0ZTg6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmFycmF5QnVmZmVyKCkpfSxfX3diZ19hcnJheUJ1ZmZlcl9iYjU0MDc2MTY2MDA2YzM5OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5hcnJheUJ1ZmZlcigpKX0sYXJndW1lbnRzKX0sX193YmdfYXN5bmNfNzlmMmE2MWY5ZDBiMzFjZjpmdW5jdGlvbihhcmcwKXtyZXR1cm4gZ2V0T2JqZWN0KGFyZzApLmFzeW5jfSxfX3diZ19idWZmZXJfN2I1ZjUzZTQ2NTU3ZDhmMTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuYnVmZmVyKX0sX193YmdfY2FsbF8zODllZmUyODQzNWE5Mzg4OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNhbGwoZ2V0T2JqZWN0KGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX2NhbGxfNDcwOGUwYzEzYmRjOGU5NTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNhbGwoZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxhcmd1bWVudHMpfSxfX3diZ19jaGFuZ2VkSGFuZGxlXzEyMzY5NmVhZWFmZjMyZDc6ZnVuY3Rpb24oYXJnMCl7Y29uc3QgcmV0PWdldE9iamVjdChhcmcwKS5jaGFuZ2VkSGFuZGxlO3JldHVybiBpc0xpa2VOb25lKHJldCk/MDphZGRIZWFwT2JqZWN0KHJldCl9LF9fd2JnX2NsZWFyVGltZW91dF83YTQyYjQ5Nzg0YWVhNjQxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGNsZWFyVGltZW91dCh0YWtlT2JqZWN0KGFyZzApKSl9LF9fd2JnX2Nsb3NlXzRiYTMxMjI1M2M0MjQzNDI6ZnVuY3Rpb24oYXJnMCl7Z2V0T2JqZWN0KGFyZzApLmNsb3NlKCl9LF9fd2JnX2Nsb3NlXzgzZmI4MDlhY2EzZGU3Zjk6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNsb3NlKCkpfSxfX3diZ19jcmVhdGVPYmplY3RVUkxfOTE4MTg1ZGI2YTEwYTBjODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoVVJMLmNyZWF0ZU9iamVjdFVSTChnZXRPYmplY3QoYXJnMSkpLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LGFyZ3VtZW50cyl9LF9fd2JnX2NyZWF0ZVdyaXRhYmxlXzgwYmM1ZGUzNzQ0NDhiNDI6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNyZWF0ZVdyaXRhYmxlKCkpfSxfX3diZ19kYXRhXzUzMzBkYTUwMzEyZDBiYzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmRhdGEpfSxfX3diZ19kZWJ1Z180NmE5Mzk5NWZjNmY4ODIwOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe2NvbnNvbGUuZGVidWcoZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193YmdfZGVidWdfYTQwOTlmYTEyZGI2Y2Q2MTpmdW5jdGlvbihhcmcwKXtjb25zb2xlLmRlYnVnKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX2RpcmVudHJ5X25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChEaXJFbnRyeS5fX3dyYXAoYXJnMCkpfSxfX3diZ19kb25lXzU3YjM5ZWNkOWFkZGZlODE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5kb25lfSxfX3diZ19lbnRyaWVzXzA0YTRiOTgyMzUxYTcxN2Y6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmVudHJpZXMoKSl9LF9fd2JnX2Vycm9yXzc1MzRiOGU5YTM2ZjFhYjQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtsZXQgZGVmZXJyZWQwXzAsZGVmZXJyZWQwXzE7dHJ5e2RlZmVycmVkMF8wPWFyZzAsZGVmZXJyZWQwXzE9YXJnMSxjb25zb2xlLmVycm9yKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMF8wLGRlZmVycmVkMF8xLDEpfX0sX193YmdfZXJyb3JfNzk0ZDBmZmM5ZDAwZDVjMzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLmVycm9yKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpLGdldE9iamVjdChhcmczKSl9LF9fd2JnX2Vycm9yXzlhN2ZlM2Y5MzIwMzRjZGU6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS5lcnJvcihnZXRPYmplY3QoYXJnMCkpfSxfX3diZ19ldmFsXzNmMGI5ZjBjYmFmNDVhMzQ6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCByZXQ9ZXZhbChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSk7cmV0dXJuIGFkZEhlYXBPYmplY3QocmV0KX0sYXJndW1lbnRzKX0sX193YmdfZmV0Y2hfNzRhM2U4NGViZDJjOWEwZTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChmZXRjaChnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfZmV0Y2hfYWZiNmE0YjZjYWNmODc2ZDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5mZXRjaChnZXRPYmplY3QoYXJnMSkpKX0sX193YmdfZmx1c2hfMjJiNzg1MDYwNTkyY2E1ZjpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtnZXRPYmplY3QoYXJnMCkuZmx1c2goKX0sYXJndW1lbnRzKX0sX193YmdfZnJvbV9iZGRkNjRlN2Q1ZmY2OTQxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KEFycmF5LmZyb20oZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX2dldERpcmVjdG9yeUhhbmRsZV84N2NlOGNhNTNjZjRkOGRjOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXREaXJlY3RvcnlIYW5kbGUoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzEsYXJnMiksZ2V0T2JqZWN0KGFyZzMpKSl9LF9fd2JnX2dldERpcmVjdG9yeV9iNjZhZTNlNzlmOTAyOTgyOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXREaXJlY3RvcnkoKSl9LF9fd2JnX2dldEZpbGVIYW5kbGVfZmY0YWI5MTdiNDVhZmZiMzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuZ2V0RmlsZUhhbmRsZShnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRPYmplY3QoYXJnMykpKX0sX193YmdfZ2V0RmlsZV8xMTUzNTRmYzk1MGVkYzg4OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXRGaWxlKCkpfSxfX3diZ19nZXRSYW5kb21WYWx1ZXNfODA1NzhiMmZmMmEwOTNiYTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZ2V0T2JqZWN0KGFyZzApKX0sYXJndW1lbnRzKX0sX193YmdfZ2V0XzliOTRkNzNlNjIyMWY3NWM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMClbYXJnMT4+PjBdKX0sX193YmdfZ2V0X2IzZWQzYWQ0YmUyYmM4YWM6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChSZWZsZWN0LmdldChnZXRPYmplY3QoYXJnMCksZ2V0T2JqZWN0KGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX2hhc19kNGU1MzIzODk2NmMxMmI2OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIFJlZmxlY3QuaGFzKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSkpfSxhcmd1bWVudHMpfSxfX3diZ19oZWFkZXJzXzU5YTI5MzhkYjlmODA5ODU6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmhlYWRlcnMpfSxfX3diZ19pbmZvXzE0OGQwNDM4NDA1ODIwMTI6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS5pbmZvKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX2luZm9fOWU2MDJjZjEwYzVjNjkwYjpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLmluZm8oZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193YmdfaW5zdGFuY2VvZl9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZV8xNTA2YjNkMDE3Nzk5ZDQ4OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlfWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pbnN0YW5jZW9mX0RvbUV4Y2VwdGlvbl85OWMxNzcxOTNlNTU0Yjc1OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbn1jYXRjaChfKXtyZXN1bHQ9ITF9cmV0dXJuIHJlc3VsdH0sX193YmdfaW5zdGFuY2VvZl9GaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlXzU2YTE2NzAzOWQ2MTQ1NDg6ZnVuY3Rpb24oYXJnMCl7bGV0IHJlc3VsdDt0cnl7cmVzdWx0PWdldE9iamVjdChhcmcwKWluc3RhbmNlb2YgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZX1jYXRjaChfKXtyZXN1bHQ9ITF9cmV0dXJuIHJlc3VsdH0sX193YmdfaW5zdGFuY2VvZl9SZXNwb25zZV9lZTFkNTRkNzlhZTQxOTc3OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIFJlc3BvbnNlfWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pbnN0YW5jZW9mX1VpbnQ4QXJyYXlfOWI5MDc1OTM1Yzc0NzA3YzpmdW5jdGlvbihhcmcwKXtsZXQgcmVzdWx0O3RyeXtyZXN1bHQ9Z2V0T2JqZWN0KGFyZzApaW5zdGFuY2VvZiBVaW50OEFycmF5fWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pc0FycmF5X2QzMTRiYjk4ZmNmMDgzMzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZ2V0T2JqZWN0KGFyZzApKX0sX193YmdfaXRlcmF0b3JfNmZmNjU2MGNhMTU2OGU1NTpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KFN5bWJvbC5pdGVyYXRvcil9LF9fd2JnX2tpbmRfOTA3NjlkNmMxNmZhZWFmZDpmdW5jdGlvbihhcmcwKXtjb25zdCByZXQ9Z2V0T2JqZWN0KGFyZzApLmtpbmQ7cmV0dXJuKF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtSGFuZGxlS2luZC5pbmRleE9mKHJldCkrMXx8MyktMX0sX193YmdfbGVuZ3RoXzMyZWQ5YTI3OWFjZDA1NGM6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5sZW5ndGh9LF9fd2JnX2xlbmd0aF8zNWE3YmFjZTQwZjM2ZWFjOmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkubGVuZ3RofSxfX3diZ19tZXNzYWdlXzBiMmIwMjk4YTIzMWIwZDQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS5tZXNzYWdlLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX21ldGFkYXRhX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChNZXRhZGF0YS5fX3dyYXAoYXJnMCkpfSxfX3diZ19uYW1lXzI0Mjc1M2U1MTEwY2Q3NTY6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS5uYW1lLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX25hdmlnYXRvcl80NDc4OTMxZjMyZWJjYTU3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5uYXZpZ2F0b3IpfSxfX3diZ19uZXdfMzYxMzA4YjIzNTZjZWNkMDpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBPYmplY3QpfSxfX3diZ19uZXdfM2ViMzZhZTI0MWZlNmY0NDpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBBcnJheSl9LF9fd2JnX25ld180ZjhmM2MxMjNlNDc0MzU4OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFdvcmtlcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXdfNjQyODRiZDQ4N2Y5ZDIzOTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBIZWFkZXJzKX0sYXJndW1lbnRzKX0sX193YmdfbmV3XzcyYzYyN2JhODBkZTFjMjE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEludDMyQXJyYXkoZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX25ld184YTZmMjM4YTZlY2U4NmVhOmZ1bmN0aW9uKCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEVycm9yKX0sX193YmdfbmV3XzhlYzU4MDFiMzlkNmY4NjI6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEZpbGVTeXN0ZW1PYnNlcnZlcihnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfbmV3X2I1ZDllMmZiMzg5ZmVmOTE6ZnVuY3Rpb24oYXJnMCxhcmcxKXt0cnl7dmFyIHN0YXRlMD17YTphcmcwLGI6YXJnMX07Y29uc3QgcmV0PW5ldyBQcm9taXNlKChhcmcwLGFyZzEpPT57Y29uc3QgYT1zdGF0ZTAuYTtzdGF0ZTAuYT0wO3RyeXtyZXR1cm4gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzMzNDQoYSxzdGF0ZTAuYixhcmcwLGFyZzEpfWZpbmFsbHl7c3RhdGUwLmE9YX19KTtyZXR1cm4gYWRkSGVhcE9iamVjdChyZXQpfWZpbmFsbHl7c3RhdGUwLmE9c3RhdGUwLmI9MH19LF9fd2JnX25ld19iOTQ5ZTdmNTYxNTBhNWQxOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEFib3J0Q29udHJvbGxlcil9LGFyZ3VtZW50cyl9LF9fd2JnX25ld19kZDJiNjgwYzhiZjZhZTI5OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBVaW50OEFycmF5KGdldE9iamVjdChhcmcwKSkpfSxfX3diZ19uZXdfZnJvbV9zbGljZV9hM2QyNjI5ZGMxODI2Nzg0OmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFVpbnQ4QXJyYXkoZ2V0QXJyYXlVOEZyb21XYXNtMChhcmcwLGFyZzEpKSl9LF9fd2JnX25ld19ub19hcmdzXzFjN2M4NDJmMDhkMDBlYmI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgRnVuY3Rpb24oZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzAsYXJnMSkpKX0sX193YmdfbmV3X3dpdGhfbGVuZ3RoX2EyYzM5Y2JlODhmZDhmZjE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFVpbnQ4QXJyYXkoYXJnMD4+PjApKX0sX193YmdfbmV3X3dpdGhfb3B0aW9uc18xNDVhZmJhOTIyYWQzNzAzOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgV29ya2VyKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXdfd2l0aF9zdHJfYW5kX2luaXRfYTYxY2JjNmJkZWYyMTYxNDpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFJlcXVlc3QoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzAsYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX25ld193aXRoX3N0cl9zZXF1ZW5jZV9jZWEyYzA1NzFkNmRjNmFiOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBCbG9iKGdldE9iamVjdChhcmcwKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXh0XzBhNWUwZjhhZjk4MTQ2YWE6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLm5leHQoKSl9LGFyZ3VtZW50cyl9LF9fd2JnX25leHRfMzQ4MmY1NGM0OWU4YWYxOTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkubmV4dCgpKX0sYXJndW1lbnRzKX0sX193YmdfbmV4dF80MThmODBkOGY1MzAzMjMzOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5uZXh0KX0sX193Ymdfbm93XzBkYzQ5MjBhNDdjZjcyODA6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5ub3coKX0sX193Ymdfbm93X2EzYWY5YTJmNGJiYWE0ZDE6ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX0sX193Ymdfb2JzZXJ2ZV8zMjIzNWI1ZTYxOTVkNGFiOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkub2JzZXJ2ZShnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX29mX2RkYzA5NDJiMGRjZTE2YTE6ZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe3JldHVybiBhZGRIZWFwT2JqZWN0KEFycmF5Lm9mKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX3BhcnNlXzcwODQ2MWExZmVkZGZiMzg6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChKU09OLnBhcnNlKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3BlcmZvcm1hbmNlXzZhZGMzYjg5OWU0NDhhMjM6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnBlcmZvcm1hbmNlKX0sX193YmdfcG9zdE1lc3NhZ2VfMjA0MWY0ZTkwYWY2MTMxODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5wb3N0TWVzc2FnZShnZXRPYmplY3QoYXJnMSkpfSxhcmd1bWVudHMpfSxfX3diZ19wb3N0TWVzc2FnZV83NzFlZjMyOTNhMjhiYmFjOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLnBvc3RNZXNzYWdlKGdldE9iamVjdChhcmcxKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3Byb3RvdHlwZXNldGNhbGxfYmRjZGNjNTg0MmU0ZDc3ZDpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZ2V0QXJyYXlVOEZyb21XYXNtMChhcmcwLGFyZzEpLGdldE9iamVjdChhcmcyKSl9LF9fd2JnX3B1c2hfOGZmZGNiMjA2MzM0MGJhNTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBnZXRPYmplY3QoYXJnMCkucHVzaChnZXRPYmplY3QoYXJnMSkpfSxfX3diZ19xdWV1ZU1pY3JvdGFza18wYWEwYTkyN2Y3OGY1ZDk4OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5xdWV1ZU1pY3JvdGFzayl9LF9fd2JnX3F1ZXVlTWljcm90YXNrXzViYjUzNjk4MmY3OGE1NmY6ZnVuY3Rpb24oYXJnMCl7cXVldWVNaWNyb3Rhc2soZ2V0T2JqZWN0KGFyZzApKX0sX193YmdfcmFuZG9tXzkxMjI4NGRiZjYzNmYyNjk6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yYW5kb20oKX0sX193YmdfcmVsYXRpdmVQYXRoQ29tcG9uZW50c19iYzQ4MjQwM2NiNmQ3ZWE5OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5yZWxhdGl2ZVBhdGhDb21wb25lbnRzKX0sX193YmdfcmVtb3ZlRW50cnlfYzRlZmZmZGQzMThiNTFhMTpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkucmVtb3ZlRW50cnkoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzEsYXJnMiksZ2V0T2JqZWN0KGFyZzMpKSl9LF9fd2JnX3Jlc29sdmVfMDAyYzRiN2Q5ZDhmNmI2NDpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChQcm9taXNlLnJlc29sdmUoZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX3Jvb3R0YXNrX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChSb290VGFzay5fX3dyYXAoYXJnMCkpfSxfX3diZ19zZXRUaW1lb3V0XzYzMDA4NjEzNjQ0YjA3YWY6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5zZXRUaW1lb3V0KGdldE9iamVjdChhcmcxKSxhcmcyKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3NldFRpbWVvdXRfN2JiMzQyOTY2MmFiMWU3MDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KHNldFRpbWVvdXQoZ2V0T2JqZWN0KGFyZzApLGFyZzEpKX0sX193Ymdfc2V0X2F0X2U0NTNjZjNmNGJlOWUyZDk6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuYXQ9YXJnMX0sX193Ymdfc2V0X2JvZHlfOWE3ZTAwYWZlM2NmZTI0NDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5ib2R5PWdldE9iamVjdChhcmcxKX0sX193Ymdfc2V0X2NhY2hlXzMxNWEzZWQ3NzNhNDE1NDM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuY2FjaGU9X193YmluZGdlbl9lbnVtX1JlcXVlc3RDYWNoZVthcmcxXX0sX193Ymdfc2V0X2NyZWF0ZV8xZjkwMmM1OTM2YWRkZTdkOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmNyZWF0ZT0wIT09YXJnMX0sX193Ymdfc2V0X2NyZWF0ZV9jOTVkZGNhMDE4ZmFjOWNlOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmNyZWF0ZT0wIT09YXJnMX0sX193Ymdfc2V0X2NyZWRlbnRpYWxzX2M0YTU4ZDJlMDVlZjI0ZmI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuY3JlZGVudGlhbHM9X193YmluZGdlbl9lbnVtX1JlcXVlc3RDcmVkZW50aWFsc1thcmcxXX0sX193Ymdfc2V0X2Y0M2U1NzdhZWE5NDQ2NWI6ZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe2dldE9iamVjdChhcmcwKVthcmcxPj4+MF09dGFrZU9iamVjdChhcmcyKX0sX193Ymdfc2V0X2hlYWRlcnNfY2ZjNWY0YjJjMWYyMDU0OTpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5oZWFkZXJzPWdldE9iamVjdChhcmcxKX0sX193Ymdfc2V0X21ldGhvZF9jM2UyMDM3NWY1YWU3ZmFjOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtnZXRPYmplY3QoYXJnMCkubWV0aG9kPWdldFN0cmluZ0Zyb21XYXNtMChhcmcxLGFyZzIpfSxfX3diZ19zZXRfbW9kZV9iMTM2NDJjMzEyNjQ4MjAyOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLm1vZGU9X193YmluZGdlbl9lbnVtX1JlcXVlc3RNb2RlW2FyZzFdfSxfX3diZ19zZXRfbmFtZV80OWI5ZWNiYTdmNThmMmU1OmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtnZXRPYmplY3QoYXJnMCkubmFtZT1nZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKX0sX193Ymdfc2V0X29ubWVzc2FnZV82ZWQ0MTA1MGU0YTVjZWUyOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLm9ubWVzc2FnZT1nZXRPYmplY3QoYXJnMSl9LF9fd2JnX3NldF9yZWN1cnNpdmVfNjVlZDA3ZGY4OTJiNDg4NTpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5yZWN1cnNpdmU9MCE9PWFyZzF9LF9fd2JnX3NldF9yZWN1cnNpdmVfZjVkMzQxNjA5ODMyODExMDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5yZWN1cnNpdmU9MCE9PWFyZzF9LF9fd2JnX3NldF9zaWduYWxfZjJkM2Y4NTk5MjQ4ODk2ZDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5zaWduYWw9Z2V0T2JqZWN0KGFyZzEpfSxfX3diZ19zZXRfdHlwZV9lMTI3ZjI2Yjc4ZDc4YmZjOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLnR5cGU9X193YmluZGdlbl9lbnVtX1dvcmtlclR5cGVbYXJnMV19LF9fd2JnX3NpZ25hbF9kMTI4NWVjYWI0ZWJjNWFkOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5zaWduYWwpfSxfX3diZ19zaXplX2UwNWQzMWNjNjA0OTgxNWY6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5zaXplfSxfX3diZ19zbGljZV81NjZhMTVmMzIxNGZhNTJlOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMsYXJnNCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnNsaWNlKGFyZzEsYXJnMixnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMyxhcmc0KSkpfSxhcmd1bWVudHMpfSxfX3diZ19zdGFja18wZWQ3NWQ2ODU3NWIwZjNjOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Y29uc3QgcHRyMT1wYXNzU3RyaW5nVG9XYXNtMChnZXRPYmplY3QoYXJnMSkuc3RhY2ssd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193Ymdfc3RhdGljX2FjY2Vzc29yX0dMT0JBTF8xMjgzNzE2N2FkOTM1MTE2OmZ1bmN0aW9uKCl7Y29uc3QgcmV0PXZvaWQgMD09PV9fd2VicGFja19yZXF1aXJlX18uZz9udWxsOl9fd2VicGFja19yZXF1aXJlX18uZztyZXR1cm4gaXNMaWtlTm9uZShyZXQpPzA6YWRkSGVhcE9iamVjdChyZXQpfSxfX3diZ19zdGF0aWNfYWNjZXNzb3JfR0xPQkFMX1RISVNfZTYyOGU4OWFiM2IxYzk1ZjpmdW5jdGlvbigpe2NvbnN0IHJldD0idW5kZWZpbmVkIj09dHlwZW9mIGdsb2JhbFRoaXM/bnVsbDpnbG9iYWxUaGlzO3JldHVybiBpc0xpa2VOb25lKHJldCk/MDphZGRIZWFwT2JqZWN0KHJldCl9LF9fd2JnX3N0YXRpY19hY2Nlc3Nvcl9TRUxGX2E2MjFkM2RmYmI2MGQwY2U6ZnVuY3Rpb24oKXtjb25zdCByZXQ9InVuZGVmaW5lZCI9PXR5cGVvZiBzZWxmP251bGw6c2VsZjtyZXR1cm4gaXNMaWtlTm9uZShyZXQpPzA6YWRkSGVhcE9iamVjdChyZXQpfSxfX3diZ19zdGF0aWNfYWNjZXNzb3JfV0lORE9XX2Y4NzI3ZjBjZjg4OGUwYmQ6ZnVuY3Rpb24oKXtjb25zdCByZXQ9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/bnVsbDp3aW5kb3c7cmV0dXJuIGlzTGlrZU5vbmUocmV0KT8wOmFkZEhlYXBPYmplY3QocmV0KX0sX193Ymdfc3RhdHVzXzg5ZDdlODAzZGI5MTFlZTc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5zdGF0dXN9LF9fd2JnX3N0b3JhZ2VfYzAwMmI1M2JjNDg4MzI5OTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuc3RvcmFnZSl9LF9fd2JnX3N0cmluZ2lmeV84ZDFjYzZmZjM4M2U4YmFlOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KEpTT04uc3RyaW5naWZ5KGdldE9iamVjdChhcmcwKSkpfSxhcmd1bWVudHMpfSxfX3diZ19zdWJhcnJheV9hOTZlMWZlZjE3ZWQyM2NiOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuc3ViYXJyYXkoYXJnMT4+PjAsYXJnMj4+PjApKX0sX193YmdfdGhlbl8wZDlmZTJjN2IxODU3ZDMyOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudGhlbihnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX3RoZW5fYjllN2IzYjVmMWE5ZTFiNTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS50aGVuKGdldE9iamVjdChhcmcxKSkpfSxfX3diZ190b1N0cmluZ185NjRmZjdmZTZlY2E4MzYyOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS50b1N0cmluZygpKX0sX193YmdfdHJ1bmNhdGVfZGM2NjFmZGNiMDA2MmZhNzpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS50cnVuY2F0ZShhcmcxPj4+MCl9LGFyZ3VtZW50cyl9LF9fd2JnX3R5cGVfMDNkZmU0NjIxNzM1ZTUyODpmdW5jdGlvbihhcmcwKXtjb25zdCByZXQ9Z2V0T2JqZWN0KGFyZzApLnR5cGU7cmV0dXJuKF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtQ2hhbmdlUmVjb3JkVHlwZS5pbmRleE9mKHJldCkrMXx8NyktMX0sX193YmdfdXJsX2M0ODRjMjZiMWZiZjUxMjY6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS51cmwsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193YmdfdmFsdWVfMDU0NjI1NWI0MTVlOTZjMTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudmFsdWUpfSxfX3diZ192YWx1ZV9mZTZlZTM0YWY1ZGMzZGNlOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS52YWx1ZSl9LF9fd2JnX3dhaXRBc3luY19hNThiMjEzNGJmZjM5YzNlOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChBdG9taWNzLndhaXRBc3luYyhnZXRPYmplY3QoYXJnMCksYXJnMT4+PjAsYXJnMikpfSxfX3diZ193YWl0QXN5bmNfYzBhMzlhN2QzMzE4ZDkxZTpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KEF0b21pY3Mud2FpdEFzeW5jKX0sX193Ymdfd2Fybl9hNDBiOTcxNDY3YjIxOWM3OmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe2NvbnNvbGUud2FybihnZXRPYmplY3QoYXJnMCksZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSxnZXRPYmplY3QoYXJnMykpfSxfX3diZ193YXJuX2Y3YWUxYjJlNjZjY2I5MzA6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS53YXJuKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX3dhc210YXNrbWVzc2FnZV9uZXc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoV2FzbVRhc2tNZXNzYWdlLl9fd3JhcChhcmcwKSl9LF9fd2JnX3dlYndvcmtlcmNyZWF0aW9uX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChXZWJXb3JrZXJDcmVhdGlvbi5fX3dyYXAoYXJnMCkpfSxfX3diZ193ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl9uZXc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoV2ViV29ya2VyVGVybWluYXRpb24uX193cmFwKGFyZzApKX0sX193Ymdfd3JpdGVfMmQ1OTMzN2NjNDk2OTE5ZDpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gZ2V0T2JqZWN0KGFyZzApLndyaXRlKGdldEFycmF5VThGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRPYmplY3QoYXJnMykpfSxhcmd1bWVudHMpfSxfX3diZ193cml0ZV8zN2Y1YTYyYTI0ZGE2NjJmOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLndyaXRlKGdldE9iamVjdChhcmcxKSkpfSxhcmd1bWVudHMpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwMTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSx3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk4NSxfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzk2NDMpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTk5ODUsX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NjQzKSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDAzOmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobWFrZU11dENsb3N1cmUoYXJnMCxhcmcxLHdhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzE5OTg1LF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTY3OSkpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSx3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk4NSxfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTk5NzEpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDU6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlQ2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzkwMDUsX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5MDA2KSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA2OmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobWFrZU11dENsb3N1cmUoYXJnMCxhcmcxLHdhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NzEwLF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk3MSkpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChhcmcwKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDg6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA5OmZ1bmN0aW9uKGFyZzAsYXJnMSl7dmFyIHYwPWdldEFycmF5SnNWYWx1ZUZyb21XYXNtMChhcmcwLGFyZzEpLnNsaWNlKCk7d2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoYXJnMCw0KmFyZzEsNCk7cmV0dXJuIGFkZEhlYXBPYmplY3QodjApfSxfX3diaW5kZ2VuX2xpbmtfMGIxZjc2ZDIzNWZkMmI4NjpmdW5jdGlvbihhcmcwKXtjb25zdCB2YWw9Im9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgICAgIGxldCBbaWEsIGluZGV4LCB2YWx1ZV0gPSBldi5kYXRhO1xuICAgICAgICAgICAgICAgIGlhID0gbmV3IEludDMyQXJyYXkoaWEuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gQXRvbWljcy53YWl0KGlhLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHJlc3VsdCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgIixwdHIxPXBhc3NTdHJpbmdUb1dhc20wKHZvaWQgMD09PVVSTC5jcmVhdGVPYmplY3RVUkw/ImRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdCwiK2VuY29kZVVSSUNvbXBvbmVudCh2YWwpOlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3ZhbF0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193YmluZGdlbl9vYmplY3RfY2xvbmVfcmVmOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKSl9LF9fd2JpbmRnZW5fb2JqZWN0X2Ryb3BfcmVmOmZ1bmN0aW9uKGFyZzApe3Rha2VPYmplY3QoYXJnMCl9LG1lbW9yeTptZW1vcnl8fG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6MTAyNSxtYXhpbXVtOjY1NTM2LHNoYXJlZDohMH0pfTtyZXR1cm57X19wcm90b19fOm51bGwsIi4vaW5kZXhfYmcuanMiOmltcG9ydDB9fWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk3MShhcmcwLGFyZzEpe3dhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzE5OTcxKGFyZzAsYXJnMSl9ZnVuY3Rpb24gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NjQzKGFyZzAsYXJnMSxhcmcyKXt3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTY0MyhhcmcwLGFyZzEsYWRkSGVhcE9iamVjdChhcmcyKSl9ZnVuY3Rpb24gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5Njc5KGFyZzAsYXJnMSxhcmcyKXt0cnl7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzk2NzkoYXJnMCxhcmcxLGFkZEJvcnJvd2VkT2JqZWN0KGFyZzIpKX1maW5hbGx5e2hlYXBbc3RhY2tfcG9pbnRlcisrXT12b2lkIDB9fWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTAwNihhcmcwLGFyZzEsYXJnMil7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzkwMDYoYXJnMCxhcmcxLGFkZEhlYXBPYmplY3QoYXJnMikpfWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8zMzQ0KGFyZzAsYXJnMSxhcmcyLGFyZzMpe3dhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzMzNDQoYXJnMCxhcmcxLGFkZEhlYXBPYmplY3QoYXJnMiksYWRkSGVhcE9iamVjdChhcmczKSl9U3ltYm9sLmRpc3Bvc2UmJihXZWJXb3JrZXJUZXJtaW5hdGlvbi5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlclRlcm1pbmF0aW9uLnByb3RvdHlwZS5mcmVlKTtjb25zdCBfX3diaW5kZ2VuX2VudW1fRGlyRW50cnlUeXBlPVsiZmlsZSIsImRpcmVjdG9yeSJdLF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtQ2hhbmdlUmVjb3JkVHlwZT1bImFwcGVhcmVkIiwiZGlzYXBwZWFyZWQiLCJlcnJvcmVkIiwibW9kaWZpZWQiLCJtb3ZlZCIsInVua25vd24iXSxfX3diaW5kZ2VuX2VudW1fRmlsZVN5c3RlbUhhbmRsZUtpbmQ9WyJmaWxlIiwiZGlyZWN0b3J5Il0sX193YmluZGdlbl9lbnVtX1JlcXVlc3RDYWNoZT1bImRlZmF1bHQiLCJuby1zdG9yZSIsInJlbG9hZCIsIm5vLWNhY2hlIiwiZm9yY2UtY2FjaGUiLCJvbmx5LWlmLWNhY2hlZCJdLF9fd2JpbmRnZW5fZW51bV9SZXF1ZXN0Q3JlZGVudGlhbHM9WyJvbWl0Iiwic2FtZS1vcmlnaW4iLCJpbmNsdWRlIl0sX193YmluZGdlbl9lbnVtX1JlcXVlc3RNb2RlPVsic2FtZS1vcmlnaW4iLCJuby1jb3JzIiwiY29ycyIsIm5hdmlnYXRlIl0sX193YmluZGdlbl9lbnVtX1dvcmtlclR5cGU9WyJjbGFzc2ljIiwibW9kdWxlIl0sQnVpbGRPcHRpb25zRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19idWlsZG9wdGlvbnNfZnJlZShwdHI+Pj4wLDEpKSxDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9uc0ZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfY3JlYXRlc3luY2FjY2Vzc2hhbmRsZW9wdGlvbnNfZnJlZShwdHI+Pj4wLDEpKSxEaXJFbnRyeUZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfZGlyZW50cnlfZnJlZShwdHI+Pj4wLDEpKSxGc0ZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfZnNfZnJlZShwdHI+Pj4wLDEpKSxNZXRhZGF0YUZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfbWV0YWRhdGFfZnJlZShwdHI+Pj4wLDEpKSxQcm9qZWN0RmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19wcm9qZWN0X2ZyZWUocHRyPj4+MCwxKSksUm9vdFRhc2tGaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3Jvb3R0YXNrX2ZyZWUocHRyPj4+MCwxKSksV2FzbVRhc2tNZXNzYWdlRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ193YXNtdGFza21lc3NhZ2VfZnJlZShwdHI+Pj4wLDEpKSxXZWJXb3JrZXJDcmVhdGlvbkZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193Ymdfd2Vid29ya2VyY3JlYXRpb25fZnJlZShwdHI+Pj4wLDEpKSxXZWJXb3JrZXJPcHRpb25zRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ193ZWJ3b3JrZXJvcHRpb25zX2ZyZWUocHRyPj4+MCwxKSksV2ViV29ya2VyVGVybWluYXRpb25GaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3dlYndvcmtlcnRlcm1pbmF0aW9uX2ZyZWUocHRyPj4+MCwxKSk7ZnVuY3Rpb24gYWRkSGVhcE9iamVjdChvYmope2hlYXBfbmV4dD09PWhlYXAubGVuZ3RoJiZoZWFwLnB1c2goaGVhcC5sZW5ndGgrMSk7Y29uc3QgaWR4PWhlYXBfbmV4dDtyZXR1cm4gaGVhcF9uZXh0PWhlYXBbaWR4XSxoZWFwW2lkeF09b2JqLGlkeH1mdW5jdGlvbiBfYXNzZXJ0Q2xhc3MoaW5zdGFuY2Usa2xhc3Mpe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBrbGFzcykpdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBpbnN0YW5jZSBvZiAke2tsYXNzLm5hbWV9YCl9ZnVuY3Rpb24gYWRkQm9ycm93ZWRPYmplY3Qob2JqKXtpZigxPT1zdGFja19wb2ludGVyKXRocm93IG5ldyBFcnJvcigib3V0IG9mIGpzIHN0YWNrIik7cmV0dXJuIGhlYXBbLS1zdGFja19wb2ludGVyXT1vYmosc3RhY2tfcG9pbnRlcn1jb25zdCBDTE9TVVJFX0RUT1JTPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHN0YXRlPT5zdGF0ZS5kdG9yKHN0YXRlLmEsc3RhdGUuYikpO2Z1bmN0aW9uIGRlYnVnU3RyaW5nKHZhbCl7Y29uc3QgdHlwZT10eXBlb2YgdmFsO2lmKCJudW1iZXIiPT10eXBlfHwiYm9vbGVhbiI9PXR5cGV8fG51bGw9PXZhbClyZXR1cm5gJHt2YWx9YDtpZigic3RyaW5nIj09dHlwZSlyZXR1cm5gIiR7dmFsfSJgO2lmKCJzeW1ib2wiPT10eXBlKXtjb25zdCBkZXNjcmlwdGlvbj12YWwuZGVzY3JpcHRpb247cmV0dXJuIG51bGw9PWRlc2NyaXB0aW9uPyJTeW1ib2wiOmBTeW1ib2woJHtkZXNjcmlwdGlvbn0pYH1pZigiZnVuY3Rpb24iPT10eXBlKXtjb25zdCBuYW1lPXZhbC5uYW1lO3JldHVybiJzdHJpbmciPT10eXBlb2YgbmFtZSYmbmFtZS5sZW5ndGg+MD9gRnVuY3Rpb24oJHtuYW1lfSlgOiJGdW5jdGlvbiJ9aWYoQXJyYXkuaXNBcnJheSh2YWwpKXtjb25zdCBsZW5ndGg9dmFsLmxlbmd0aDtsZXQgZGVidWc9IlsiO2xlbmd0aD4wJiYoZGVidWcrPWRlYnVnU3RyaW5nKHZhbFswXSkpO2ZvcihsZXQgaT0xO2k8bGVuZ3RoO2krKylkZWJ1Zys9IiwgIitkZWJ1Z1N0cmluZyh2YWxbaV0pO3JldHVybiBkZWJ1Zys9Il0iLGRlYnVnfWNvbnN0IGJ1aWx0SW5NYXRjaGVzPS9cW29iamVjdCAoW15cXV0rKVxdLy5leGVjKHRvU3RyaW5nLmNhbGwodmFsKSk7bGV0IGNsYXNzTmFtZTtpZighKGJ1aWx0SW5NYXRjaGVzJiZidWlsdEluTWF0Y2hlcy5sZW5ndGg+MSkpcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKTtpZihjbGFzc05hbWU9YnVpbHRJbk1hdGNoZXNbMV0sIk9iamVjdCI9PWNsYXNzTmFtZSl0cnl7cmV0dXJuIk9iamVjdCgiK0pTT04uc3RyaW5naWZ5KHZhbCkrIikifWNhdGNoKF8pe3JldHVybiJPYmplY3QifXJldHVybiB2YWwgaW5zdGFuY2VvZiBFcnJvcj9gJHt2YWwubmFtZX06ICR7dmFsLm1lc3NhZ2V9XG4ke3ZhbC5zdGFja31gOmNsYXNzTmFtZX1mdW5jdGlvbiBkcm9wT2JqZWN0KGlkeCl7aWR4PDEzMnx8KGhlYXBbaWR4XT1oZWFwX25leHQsaGVhcF9uZXh0PWlkeCl9ZnVuY3Rpb24gZ2V0QXJyYXlKc1ZhbHVlRnJvbVdhc20wKHB0cixsZW4pe3B0cj4+Pj0wO2NvbnN0IG1lbT1nZXREYXRhVmlld01lbW9yeTAoKSxyZXN1bHQ9W107Zm9yKGxldCBpPXB0cjtpPHB0cis0KmxlbjtpKz00KXJlc3VsdC5wdXNoKHRha2VPYmplY3QobWVtLmdldFVpbnQzMihpLCEwKSkpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gZ2V0QXJyYXlVOEZyb21XYXNtMChwdHIsbGVuKXtyZXR1cm4gcHRyPj4+PTAsZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zdWJhcnJheShwdHIvMSxwdHIvMStsZW4pfWxldCBjYWNoZWREYXRhVmlld01lbW9yeTA9bnVsbDtmdW5jdGlvbiBnZXREYXRhVmlld01lbW9yeTAoKXtyZXR1cm4gbnVsbCE9PWNhY2hlZERhdGFWaWV3TWVtb3J5MCYmY2FjaGVkRGF0YVZpZXdNZW1vcnkwLmJ1ZmZlcj09PXdhc20ubWVtb3J5LmJ1ZmZlcnx8KGNhY2hlZERhdGFWaWV3TWVtb3J5MD1uZXcgRGF0YVZpZXcod2FzbS5tZW1vcnkuYnVmZmVyKSksY2FjaGVkRGF0YVZpZXdNZW1vcnkwfWZ1bmN0aW9uIGdldFN0cmluZ0Zyb21XYXNtMChwdHIsbGVuKXtyZXR1cm4gZGVjb2RlVGV4dChwdHI+Pj49MCxsZW4pfWxldCBjYWNoZWRVaW50OEFycmF5TWVtb3J5MD1udWxsO2Z1bmN0aW9uIGdldFVpbnQ4QXJyYXlNZW1vcnkwKCl7cmV0dXJuIG51bGwhPT1jYWNoZWRVaW50OEFycmF5TWVtb3J5MCYmY2FjaGVkVWludDhBcnJheU1lbW9yeTAuYnVmZmVyPT09d2FzbS5tZW1vcnkuYnVmZmVyfHwoY2FjaGVkVWludDhBcnJheU1lbW9yeTA9bmV3IFVpbnQ4QXJyYXkod2FzbS5tZW1vcnkuYnVmZmVyKSksY2FjaGVkVWludDhBcnJheU1lbW9yeTB9ZnVuY3Rpb24gZ2V0T2JqZWN0KGlkeCl7cmV0dXJuIGhlYXBbaWR4XX1mdW5jdGlvbiBoYW5kbGVFcnJvcihmLGFyZ3Mpe3RyeXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3MpfWNhdGNoKGUpe3dhc20uX193YmluZGdlbl9leHBvcnQzKGFkZEhlYXBPYmplY3QoZSkpfX1sZXQgaGVhcD1uZXcgQXJyYXkoMTI4KS5maWxsKHZvaWQgMCk7aGVhcC5wdXNoKHZvaWQgMCxudWxsLCEwLCExKTtsZXQgaGVhcF9uZXh0PWhlYXAubGVuZ3RoO2Z1bmN0aW9uIGlzTGlrZU5vbmUoeCl7cmV0dXJuIG51bGw9PXh9ZnVuY3Rpb24gbWFrZUNsb3N1cmUoYXJnMCxhcmcxLGR0b3IsZil7Y29uc3Qgc3RhdGU9e2E6YXJnMCxiOmFyZzEsY250OjEsZHRvcn0scmVhbD0oLi4uYXJncyk9PntzdGF0ZS5jbnQrKzt0cnl7cmV0dXJuIGYoc3RhdGUuYSxzdGF0ZS5iLC4uLmFyZ3MpfWZpbmFsbHl7cmVhbC5fd2JnX2NiX3VucmVmKCl9fTtyZXR1cm4gcmVhbC5fd2JnX2NiX3VucmVmPSgpPT57MD09PS0tc3RhdGUuY250JiYoc3RhdGUuZHRvcihzdGF0ZS5hLHN0YXRlLmIpLHN0YXRlLmE9MCxDTE9TVVJFX0RUT1JTLnVucmVnaXN0ZXIoc3RhdGUpKX0sQ0xPU1VSRV9EVE9SUy5yZWdpc3RlcihyZWFsLHN0YXRlLHN0YXRlKSxyZWFsfWZ1bmN0aW9uIG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSxkdG9yLGYpe2NvbnN0IHN0YXRlPXthOmFyZzAsYjphcmcxLGNudDoxLGR0b3J9LHJlYWw9KC4uLmFyZ3MpPT57c3RhdGUuY250Kys7Y29uc3QgYT1zdGF0ZS5hO3N0YXRlLmE9MDt0cnl7cmV0dXJuIGYoYSxzdGF0ZS5iLC4uLmFyZ3MpfWZpbmFsbHl7c3RhdGUuYT1hLHJlYWwuX3diZ19jYl91bnJlZigpfX07cmV0dXJuIHJlYWwuX3diZ19jYl91bnJlZj0oKT0+ezA9PT0tLXN0YXRlLmNudCYmKHN0YXRlLmR0b3Ioc3RhdGUuYSxzdGF0ZS5iKSxzdGF0ZS5hPTAsQ0xPU1VSRV9EVE9SUy51bnJlZ2lzdGVyKHN0YXRlKSl9LENMT1NVUkVfRFRPUlMucmVnaXN0ZXIocmVhbCxzdGF0ZSxzdGF0ZSkscmVhbH1mdW5jdGlvbiBwYXNzU3RyaW5nVG9XYXNtMChhcmcsbWFsbG9jLHJlYWxsb2Mpe2lmKHZvaWQgMD09PXJlYWxsb2Mpe2NvbnN0IGJ1Zj1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGUoYXJnKSxwdHI9bWFsbG9jKGJ1Zi5sZW5ndGgsMSk+Pj4wO3JldHVybiBnZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHB0cixwdHIrYnVmLmxlbmd0aCkuc2V0KGJ1ZiksV0FTTV9WRUNUT1JfTEVOPWJ1Zi5sZW5ndGgscHRyfWxldCBsZW49YXJnLmxlbmd0aCxwdHI9bWFsbG9jKGxlbiwxKT4+PjA7Y29uc3QgbWVtPWdldFVpbnQ4QXJyYXlNZW1vcnkwKCk7bGV0IG9mZnNldD0wO2Zvcig7b2Zmc2V0PGxlbjtvZmZzZXQrKyl7Y29uc3QgY29kZT1hcmcuY2hhckNvZGVBdChvZmZzZXQpO2lmKGNvZGU+MTI3KWJyZWFrO21lbVtwdHIrb2Zmc2V0XT1jb2RlfWlmKG9mZnNldCE9PWxlbil7MCE9PW9mZnNldCYmKGFyZz1hcmcuc2xpY2Uob2Zmc2V0KSkscHRyPXJlYWxsb2MocHRyLGxlbixsZW49b2Zmc2V0KzMqYXJnLmxlbmd0aCwxKT4+PjA7Y29uc3Qgdmlldz1nZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHB0citvZmZzZXQscHRyK2xlbik7b2Zmc2V0Kz1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGVJbnRvKGFyZyx2aWV3KS53cml0dGVuLHB0cj1yZWFsbG9jKHB0cixsZW4sb2Zmc2V0LDEpPj4+MH1yZXR1cm4gV0FTTV9WRUNUT1JfTEVOPW9mZnNldCxwdHJ9bGV0IHN0YWNrX3BvaW50ZXI9MTI4O2Z1bmN0aW9uIHRha2VPYmplY3QoaWR4KXtjb25zdCByZXQ9Z2V0T2JqZWN0KGlkeCk7cmV0dXJuIGRyb3BPYmplY3QoaWR4KSxyZXR9bGV0IGNhY2hlZFRleHREZWNvZGVyPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIse2lnbm9yZUJPTTohMCxmYXRhbDohMH0pOnZvaWQgMDtjYWNoZWRUZXh0RGVjb2RlciYmY2FjaGVkVGV4dERlY29kZXIuZGVjb2RlKCk7Y29uc3QgTUFYX1NBRkFSSV9ERUNPREVfQllURVM9MjE0NjQzNTA3MjtsZXQgbnVtQnl0ZXNEZWNvZGVkPTA7ZnVuY3Rpb24gZGVjb2RlVGV4dChwdHIsbGVuKXtyZXR1cm4gbnVtQnl0ZXNEZWNvZGVkKz1sZW4sbnVtQnl0ZXNEZWNvZGVkPj1NQVhfU0FGQVJJX0RFQ09ERV9CWVRFUyYmKGNhY2hlZFRleHREZWNvZGVyPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtpZ25vcmVCT006ITAsZmF0YWw6ITB9KSxjYWNoZWRUZXh0RGVjb2Rlci5kZWNvZGUoKSxudW1CeXRlc0RlY29kZWQ9bGVuKSxjYWNoZWRUZXh0RGVjb2Rlci5kZWNvZGUoZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zbGljZShwdHIscHRyK2xlbikpfWNvbnN0IGNhY2hlZFRleHRFbmNvZGVyPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dEVuY29kZXI/bmV3IFRleHRFbmNvZGVyOnZvaWQgMDtjYWNoZWRUZXh0RW5jb2RlciYmKGNhY2hlZFRleHRFbmNvZGVyLmVuY29kZUludG89ZnVuY3Rpb24oYXJnLHZpZXcpe2NvbnN0IGJ1Zj1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGUoYXJnKTtyZXR1cm4gdmlldy5zZXQoYnVmKSx7cmVhZDphcmcubGVuZ3RoLHdyaXR0ZW46YnVmLmxlbmd0aH19KTtsZXQgV0FTTV9WRUNUT1JfTEVOPTAsd2FzbU1vZHVsZSx3YXNtO2Z1bmN0aW9uIF9fd2JnX2ZpbmFsaXplX2luaXQoaW5zdGFuY2UsbW9kdWxlLHRocmVhZF9zdGFja19zaXplKXtpZih3YXNtPWluc3RhbmNlLmV4cG9ydHMsd2FzbU1vZHVsZT1tb2R1bGUsY2FjaGVkRGF0YVZpZXdNZW1vcnkwPW51bGwsY2FjaGVkVWludDhBcnJheU1lbW9yeTA9bnVsbCx2b2lkIDAhPT10aHJlYWRfc3RhY2tfc2l6ZSYmKCJudW1iZXIiIT10eXBlb2YgdGhyZWFkX3N0YWNrX3NpemV8fDA9PT10aHJlYWRfc3RhY2tfc2l6ZXx8dGhyZWFkX3N0YWNrX3NpemUlNjU1MzYhPTApKXRocm93ImludmFsaWQgc3RhY2sgc2l6ZSI7cmV0dXJuIHdhc20uX193YmluZGdlbl9zdGFydCh0aHJlYWRfc3RhY2tfc2l6ZSksd2FzbX1hc3luYyBmdW5jdGlvbiBfX3diZ19sb2FkKG1vZHVsZSxpbXBvcnRzKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgUmVzcG9uc2UmJm1vZHVsZSBpbnN0YW5jZW9mIFJlc3BvbnNlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcpdHJ5e3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhtb2R1bGUsaW1wb3J0cyl9Y2F0Y2goZSl7aWYoIShtb2R1bGUub2smJmZ1bmN0aW9uIGV4cGVjdGVkUmVzcG9uc2VUeXBlKHR5cGUpe3N3aXRjaCh0eXBlKXtjYXNlImJhc2ljIjpjYXNlImNvcnMiOmNhc2UiZGVmYXVsdCI6cmV0dXJuITB9cmV0dXJuITF9KG1vZHVsZS50eXBlKSl8fCJhcHBsaWNhdGlvbi93YXNtIj09PW1vZHVsZS5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIikpdGhyb3cgZTtjb25zb2xlLndhcm4oImBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZ2AgZmFpbGVkIGJlY2F1c2UgeW91ciBzZXJ2ZXIgZG9lcyBub3Qgc2VydmUgV2FzbSB3aXRoIGBhcHBsaWNhdGlvbi93YXNtYCBNSU1FIHR5cGUuIEZhbGxpbmcgYmFjayB0byBgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVgIHdoaWNoIGlzIHNsb3dlci4gT3JpZ2luYWwgZXJyb3I6XG4iLGUpfWNvbnN0IGJ5dGVzPWF3YWl0IG1vZHVsZS5hcnJheUJ1ZmZlcigpO3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShieXRlcyxpbXBvcnRzKX17Y29uc3QgaW5zdGFuY2U9YXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kdWxlLGltcG9ydHMpO3JldHVybiBpbnN0YW5jZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lkluc3RhbmNlP3tpbnN0YW5jZSxtb2R1bGV9Omluc3RhbmNlfX1mdW5jdGlvbiBpbml0U3luYyhtb2R1bGUsbWVtb3J5KXtpZih2b2lkIDAhPT13YXNtKXJldHVybiB3YXNtO2xldCB0aHJlYWRfc3RhY2tfc2l6ZTt2b2lkIDAhPT1tb2R1bGUmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kdWxlKT09PU9iamVjdC5wcm90b3R5cGU/KHttb2R1bGUsbWVtb3J5LHRocmVhZF9zdGFja19zaXplfT1tb2R1bGUpOmNvbnNvbGUud2FybigidXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciBgaW5pdFN5bmMoKWA7IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQiKSk7Y29uc3QgaW1wb3J0cz1fX3diZ19nZXRfaW1wb3J0cyhtZW1vcnkpO21vZHVsZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZXx8KG1vZHVsZT1uZXcgV2ViQXNzZW1ibHkuTW9kdWxlKG1vZHVsZSkpO3JldHVybiBfX3diZ19maW5hbGl6ZV9pbml0KG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsaW1wb3J0cyksbW9kdWxlLHRocmVhZF9zdGFja19zaXplKX1hc3luYyBmdW5jdGlvbiBfX3diZ19pbml0KG1vZHVsZV9vcl9wYXRoLG1lbW9yeSl7aWYodm9pZCAwIT09d2FzbSlyZXR1cm4gd2FzbTtsZXQgdGhyZWFkX3N0YWNrX3NpemU7dm9pZCAwIT09bW9kdWxlX29yX3BhdGgmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kdWxlX29yX3BhdGgpPT09T2JqZWN0LnByb3RvdHlwZT8oe21vZHVsZV9vcl9wYXRoLG1lbW9yeSx0aHJlYWRfc3RhY2tfc2l6ZX09bW9kdWxlX29yX3BhdGgpOmNvbnNvbGUud2FybigidXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb247IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQiKSksdm9pZCAwPT09bW9kdWxlX29yX3BhdGgmJihtb2R1bGVfb3JfcGF0aD1uZXcgVVJMKF9fd2VicGFja19yZXF1aXJlX18oIi4vc3JjL3V0b28vaW5kZXhfYmcud2FzbSIpLF9fd2VicGFja19yZXF1aXJlX18uYikpO2NvbnN0IGltcG9ydHM9X193YmdfZ2V0X2ltcG9ydHMobWVtb3J5KTsoInN0cmluZyI9PXR5cGVvZiBtb2R1bGVfb3JfcGF0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIFJlcXVlc3QmJm1vZHVsZV9vcl9wYXRoIGluc3RhbmNlb2YgUmVxdWVzdHx8ImZ1bmN0aW9uIj09dHlwZW9mIFVSTCYmbW9kdWxlX29yX3BhdGggaW5zdGFuY2VvZiBVUkwpJiYobW9kdWxlX29yX3BhdGg9ZmV0Y2gobW9kdWxlX29yX3BhdGgpKTtjb25zdHtpbnN0YW5jZSxtb2R1bGV9PWF3YWl0IF9fd2JnX2xvYWQoYXdhaXQgbW9kdWxlX29yX3BhdGgsaW1wb3J0cyk7cmV0dXJuIF9fd2JnX2ZpbmFsaXplX2luaXQoaW5zdGFuY2UsbW9kdWxlLHRocmVhZF9zdGFja19zaXplKX19LCIuL3NyYy91dG9vL2luZGV4X2JnLndhc20iKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPV9fd2VicGFja19yZXF1aXJlX18ucCsiNjljOTNhZmYyOTY4ZTAwMTFlZWYud2FzbSJ9LCI/Yzk1YSIoKXt9LCIuLi8uLi9ub2RlX21vZHVsZXMvYXZhaWxhYmxlLXR5cGVkLWFycmF5cy9pbmRleC5qcyIobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIHBvc3NpYmxlTmFtZXM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3NpYmxlLXR5cGVkLWFycmF5LW5hbWVzL2luZGV4LmpzIiksZz0idW5kZWZpbmVkIj09dHlwZW9mIGdsb2JhbFRoaXM/X193ZWJwYWNrX3JlcXVpcmVfXy5nOmdsb2JhbFRoaXM7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gYXZhaWxhYmxlVHlwZWRBcnJheXMoKXtmb3IodmFyIG91dD1bXSxpPTA7aTxwb3NzaWJsZU5hbWVzLmxlbmd0aDtpKyspImZ1bmN0aW9uIj09dHlwZW9mIGdbcG9zc2libGVOYW1lc1tpXV0mJihvdXRbb3V0Lmxlbmd0aF09cG9zc2libGVOYW1lc1tpXSk7cmV0dXJuIG91dH19LCIuLi8uLi9ub2RlX21vZHVsZXMvZG9tYWluLWJyb3dzZXIvc291cmNlL2luZGV4LmpzIihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBldmVudHM9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiKSxkb21haW49e307cmV0dXJuIGRvbWFpbi5jcmVhdGVEb21haW49ZG9tYWluLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciBkPW5ldyBldmVudHMuRXZlbnRFbWl0dGVyO2Z1bmN0aW9uIGVtaXRFcnJvcihlKXtkLmVtaXQoImVycm9yIixlKX1yZXR1cm4gZC5hZGQ9ZnVuY3Rpb24oZW1pdHRlcil7ZW1pdHRlci5vbigiZXJyb3IiLGVtaXRFcnJvcil9LGQucmVtb3ZlPWZ1bmN0aW9uKGVtaXR0ZXIpe2VtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoImVycm9yIixlbWl0RXJyb3IpfSxkLmJpbmQ9ZnVuY3Rpb24oZm4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBhcmdzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dHJ5e2ZuLmFwcGx5KG51bGwsYXJncyl9Y2F0Y2goZXJyKXtlbWl0RXJyb3IoZXJyKX19fSxkLmludGVyY2VwdD1mdW5jdGlvbihmbil7cmV0dXJuIGZ1bmN0aW9uKGVycil7aWYoZXJyKWVtaXRFcnJvcihlcnIpO2Vsc2V7dmFyIGFyZ3M9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3RyeXtmbi5hcHBseShudWxsLGFyZ3MpfWNhdGNoKGVycil7ZW1pdEVycm9yKGVycil9fX19LGQucnVuPWZ1bmN0aW9uKGZuKXt0cnl7Zm4oKX1jYXRjaChlcnIpe2VtaXRFcnJvcihlcnIpfXJldHVybiB0aGlzfSxkLmRpc3Bvc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSxkLmVudGVyPWQuZXhpdD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxkfSxkb21haW59LmNhbGwodGhpcyl9LCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvbW9jay9lbXB0eS5qcyIobW9kdWxlKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9bnVsbH0sIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9wcm94eS9wcm9jZXNzLmpzIihtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgY2FjaGVkU2V0VGltZW91dCxjYWNoZWRDbGVhclRpbWVvdXQsYnJvd3NlciQxPXtleHBvcnRzOnt9fSxwcm9jZXNzPWJyb3dzZXIkMS5leHBvcnRzPXt9O2Z1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0KCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bil7aWYoY2FjaGVkU2V0VGltZW91dD09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZnVuLDApO2lmKChjYWNoZWRTZXRUaW1lb3V0PT09ZGVmYXVsdFNldFRpbW91dHx8IWNhY2hlZFNldFRpbWVvdXQpJiZzZXRUaW1lb3V0KXJldHVybiBjYWNoZWRTZXRUaW1lb3V0PXNldFRpbWVvdXQsc2V0VGltZW91dChmdW4sMCk7dHJ5e3JldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwwKX1jYXRjaChlKXt0cnl7cmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLGZ1biwwKX1jYXRjaChlKXtyZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsZnVuLDApfX19IWZ1bmN0aW9uKCl7dHJ5e2NhY2hlZFNldFRpbWVvdXQ9ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpkZWZhdWx0U2V0VGltb3V0fWNhdGNoKGUpe2NhY2hlZFNldFRpbWVvdXQ9ZGVmYXVsdFNldFRpbW91dH10cnl7Y2FjaGVkQ2xlYXJUaW1lb3V0PSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OmRlZmF1bHRDbGVhclRpbWVvdXR9Y2F0Y2goZSl7Y2FjaGVkQ2xlYXJUaW1lb3V0PWRlZmF1bHRDbGVhclRpbWVvdXR9fSgpO3ZhciBjdXJyZW50UXVldWUscXVldWU9W10sZHJhaW5pbmc9ITEscXVldWVJbmRleD0tMTtmdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKXtkcmFpbmluZyYmY3VycmVudFF1ZXVlJiYoZHJhaW5pbmc9ITEsY3VycmVudFF1ZXVlLmxlbmd0aD9xdWV1ZT1jdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTpxdWV1ZUluZGV4PS0xLHF1ZXVlLmxlbmd0aCYmZHJhaW5RdWV1ZSgpKX1mdW5jdGlvbiBkcmFpblF1ZXVlKCl7aWYoIWRyYWluaW5nKXt2YXIgdGltZW91dD1ydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7ZHJhaW5pbmc9ITA7Zm9yKHZhciBsZW49cXVldWUubGVuZ3RoO2xlbjspe2ZvcihjdXJyZW50UXVldWU9cXVldWUscXVldWU9W107KytxdWV1ZUluZGV4PGxlbjspY3VycmVudFF1ZXVlJiZjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7cXVldWVJbmRleD0tMSxsZW49cXVldWUubGVuZ3RofWN1cnJlbnRRdWV1ZT1udWxsLGRyYWluaW5nPSExLGZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpe2lmKGNhY2hlZENsZWFyVGltZW91dD09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7aWYoKGNhY2hlZENsZWFyVGltZW91dD09PWRlZmF1bHRDbGVhclRpbWVvdXR8fCFjYWNoZWRDbGVhclRpbWVvdXQpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dD1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KG1hcmtlcik7dHJ5e3JldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKX1jYXRjaChlKXt0cnl7cmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsbWFya2VyKX1jYXRjaChlKXtyZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcyxtYXJrZXIpfX19KHRpbWVvdXQpfX1mdW5jdGlvbiBJdGVtKGZ1bixhcnJheSl7dGhpcy5mdW49ZnVuLHRoaXMuYXJyYXk9YXJyYXl9ZnVuY3Rpb24gbm9vcCQxKCl7fWZ1bmN0aW9uIG5vb3AoKXt9cHJvY2Vzcy5uZXh0VGljaz1mdW5jdGlvbihmdW4pe3ZhciBhcmdzPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKWFyZ3NbaS0xXT1hcmd1bWVudHNbaV07cXVldWUucHVzaChuZXcgSXRlbShmdW4sYXJncykpLDEhPT1xdWV1ZS5sZW5ndGh8fGRyYWluaW5nfHxydW5UaW1lb3V0KGRyYWluUXVldWUpfSxJdGVtLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxwcm9jZXNzLnRpdGxlPSJicm93c2VyIixwcm9jZXNzLmJyb3dzZXI9ITAscHJvY2Vzcy5lbnY9e30scHJvY2Vzcy5hcmd2PVtdLHByb2Nlc3MudmVyc2lvbj0iIixwcm9jZXNzLnZlcnNpb25zPXt9LHByb2Nlc3Mub249bm9vcCQxLHByb2Nlc3MuYWRkTGlzdGVuZXI9bm9vcCQxLHByb2Nlc3Mub25jZT1ub29wJDEscHJvY2Vzcy5vZmY9bm9vcCQxLHByb2Nlc3MucmVtb3ZlTGlzdGVuZXI9bm9vcCQxLHByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzPW5vb3AkMSxwcm9jZXNzLmVtaXQ9bm9vcCQxLHByb2Nlc3MucHJlcGVuZExpc3RlbmVyPW5vb3AkMSxwcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXI9bm9vcCQxLHByb2Nlc3MubGlzdGVuZXJzPWZ1bmN0aW9uKG5hbWUpe3JldHVybltdfSxwcm9jZXNzLmJpbmRpbmc9ZnVuY3Rpb24obmFtZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxwcm9jZXNzLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0scHJvY2Vzcy5jaGRpcj1mdW5jdGlvbihkaXIpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LHByb2Nlc3MudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH07dmFyIGJyb3dzZXI9YnJvd3NlciQxLmV4cG9ydHMuYnJvd3NlcixlbWl0V2FybmluZz1ub29wLGJpbmRpbmc9YnJvd3NlciQxLmV4cG9ydHMuYmluZGluZyxleGl0PW5vb3AsZmVhdHVyZXM9e30sa2lsbD1ub29wLGRsb3Blbj1ub29wLHVwdGltZT1ub29wLG1lbW9yeVVzYWdlPW5vb3AsdXZDb3VudGVycz1ub29wLGV4ZWNBcmd2PVtdLGFwaT17bmV4dFRpY2s6YnJvd3NlciQxLmV4cG9ydHMubmV4dFRpY2ssdGl0bGU6YnJvd3NlciQxLmV4cG9ydHMudGl0bGUsYnJvd3NlcixlbnY6YnJvd3NlciQxLmV4cG9ydHMuZW52LGFyZ3Y6YnJvd3NlciQxLmV4cG9ydHMuYXJndix2ZXJzaW9uOmJyb3dzZXIkMS5leHBvcnRzLnZlcnNpb24sdmVyc2lvbnM6YnJvd3NlciQxLmV4cG9ydHMudmVyc2lvbnMsb246YnJvd3NlciQxLmV4cG9ydHMub24sYWRkTGlzdGVuZXI6YnJvd3NlciQxLmV4cG9ydHMuYWRkTGlzdGVuZXIsb25jZTpicm93c2VyJDEuZXhwb3J0cy5vbmNlLG9mZjpicm93c2VyJDEuZXhwb3J0cy5vZmYscmVtb3ZlTGlzdGVuZXI6YnJvd3NlciQxLmV4cG9ydHMucmVtb3ZlTGlzdGVuZXIscmVtb3ZlQWxsTGlzdGVuZXJzOmJyb3dzZXIkMS5leHBvcnRzLnJlbW92ZUFsbExpc3RlbmVycyxlbWl0OmJyb3dzZXIkMS5leHBvcnRzLmVtaXQsZW1pdFdhcm5pbmcscHJlcGVuZExpc3RlbmVyOmJyb3dzZXIkMS5leHBvcnRzLnByZXBlbmRMaXN0ZW5lcixwcmVwZW5kT25jZUxpc3RlbmVyOmJyb3dzZXIkMS5leHBvcnRzLnByZXBlbmRPbmNlTGlzdGVuZXIsbGlzdGVuZXJzOmJyb3dzZXIkMS5leHBvcnRzLmxpc3RlbmVycyxiaW5kaW5nLGN3ZDpicm93c2VyJDEuZXhwb3J0cy5jd2QsY2hkaXI6YnJvd3NlciQxLmV4cG9ydHMuY2hkaXIsdW1hc2s6YnJvd3NlciQxLmV4cG9ydHMudW1hc2ssZXhpdCxwaWQ6MSxmZWF0dXJlcyxraWxsLGRsb3Blbix1cHRpbWUsbWVtb3J5VXNhZ2UsdXZDb3VudGVycyxwbGF0Zm9ybToiYnJvd3NlciIsYXJjaDoiYnJvd3NlciIsZXhlY1BhdGg6ImJyb3dzZXIiLGV4ZWNBcmd2fTtleHBvcnRzLmFkZExpc3RlbmVyPWJyb3dzZXIkMS5leHBvcnRzLmFkZExpc3RlbmVyLGV4cG9ydHMuYXJjaD0iYnJvd3NlciIsZXhwb3J0cy5hcmd2PWJyb3dzZXIkMS5leHBvcnRzLmFyZ3YsZXhwb3J0cy5iaW5kaW5nPWJpbmRpbmcsZXhwb3J0cy5icm93c2VyPWJyb3dzZXIsZXhwb3J0cy5jaGRpcj1icm93c2VyJDEuZXhwb3J0cy5jaGRpcixleHBvcnRzLmN3ZD1icm93c2VyJDEuZXhwb3J0cy5jd2QsZXhwb3J0cy5kZWZhdWx0PWFwaSxleHBvcnRzLmRsb3Blbj1kbG9wZW4sZXhwb3J0cy5lbWl0PWJyb3dzZXIkMS5leHBvcnRzLmVtaXQsZXhwb3J0cy5lbWl0V2FybmluZz1lbWl0V2FybmluZyxleHBvcnRzLmVudj1icm93c2VyJDEuZXhwb3J0cy5lbnYsZXhwb3J0cy5leGVjQXJndj1leGVjQXJndixleHBvcnRzLmV4ZWNQYXRoPSJicm93c2VyIixleHBvcnRzLmV4aXQ9ZXhpdCxleHBvcnRzLmZlYXR1cmVzPWZlYXR1cmVzLGV4cG9ydHMua2lsbD1raWxsLGV4cG9ydHMubGlzdGVuZXJzPWJyb3dzZXIkMS5leHBvcnRzLmxpc3RlbmVycyxleHBvcnRzLm1lbW9yeVVzYWdlPW1lbW9yeVVzYWdlLGV4cG9ydHMubmV4dFRpY2s9YnJvd3NlciQxLmV4cG9ydHMubmV4dFRpY2ssZXhwb3J0cy5vZmY9YnJvd3NlciQxLmV4cG9ydHMub2ZmLGV4cG9ydHMub249YnJvd3NlciQxLmV4cG9ydHMub24sZXhwb3J0cy5vbmNlPWJyb3dzZXIkMS5leHBvcnRzLm9uY2UsZXhwb3J0cy5waWQ9MSxleHBvcnRzLnBsYXRmb3JtPSJicm93c2VyIixleHBvcnRzLnByZXBlbmRMaXN0ZW5lcj1icm93c2VyJDEuZXhwb3J0cy5wcmVwZW5kTGlzdGVuZXIsZXhwb3J0cy5wcmVwZW5kT25jZUxpc3RlbmVyPWJyb3dzZXIkMS5leHBvcnRzLnByZXBlbmRPbmNlTGlzdGVuZXIsZXhwb3J0cy5yZW1vdmVBbGxMaXN0ZW5lcnM9YnJvd3NlciQxLmV4cG9ydHMucmVtb3ZlQWxsTGlzdGVuZXJzLGV4cG9ydHMucmVtb3ZlTGlzdGVuZXI9YnJvd3NlciQxLmV4cG9ydHMucmVtb3ZlTGlzdGVuZXIsZXhwb3J0cy50aXRsZT1icm93c2VyJDEuZXhwb3J0cy50aXRsZSxleHBvcnRzLnVtYXNrPWJyb3dzZXIkMS5leHBvcnRzLnVtYXNrLGV4cG9ydHMudXB0aW1lPXVwdGltZSxleHBvcnRzLnV2Q291bnRlcnM9dXZDb3VudGVycyxleHBvcnRzLnZlcnNpb249YnJvd3NlciQxLmV4cG9ydHMudmVyc2lvbixleHBvcnRzLnZlcnNpb25zPWJyb3dzZXIkMS5leHBvcnRzLnZlcnNpb25zLGV4cG9ydHM9bW9kdWxlLmV4cG9ydHM9YXBpfSwiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL3Byb3h5L3F1ZXJ5c3RyaW5nLmpzIihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBxdWVyeXN0cmluZ0VzMz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2luZGV4LmpzIik7ZnVuY3Rpb24gcXNFc2NhcGUoc3RyaW5nKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZyl9ZnVuY3Rpb24gcXNVbmVzY2FwZShzdHJpbmcpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyaW5nKX12YXIgYXBpPXtkZWNvZGU6cXVlcnlzdHJpbmdFczMuZGVjb2RlLGVuY29kZTpxdWVyeXN0cmluZ0VzMy5lbmNvZGUscGFyc2U6cXVlcnlzdHJpbmdFczMucGFyc2Usc3RyaW5naWZ5OnF1ZXJ5c3RyaW5nRXMzLnN0cmluZ2lmeSxlc2NhcGU6cXNFc2NhcGUsdW5lc2NhcGU6cXNVbmVzY2FwZX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsImRlY29kZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHF1ZXJ5c3RyaW5nRXMzLmRlY29kZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywiZW5jb2RlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcXVlcnlzdHJpbmdFczMuZW5jb2RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCJwYXJzZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHF1ZXJ5c3RyaW5nRXMzLnBhcnNlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCJzdHJpbmdpZnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBxdWVyeXN0cmluZ0VzMy5zdHJpbmdpZnl9fSksZXhwb3J0cy5kZWZhdWx0PWFwaSxleHBvcnRzLmVzY2FwZT1xc0VzY2FwZSxleHBvcnRzLnVuZXNjYXBlPXFzVW5lc2NhcGUsZXhwb3J0cz1tb2R1bGUuZXhwb3J0cz1hcGl9LCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvcHJveHkvdXJsLmpzIihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByZXF1aXJlJCQwPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5qcyIpLHJlcXVpcmUkJDE9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9pbmRleC5qcyIpO2Z1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdExlZ2FjeShlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYiZGVmYXVsdCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIHJlcXVpcmUkJDBfX2RlZmF1bHQ9X2ludGVyb3BEZWZhdWx0TGVnYWN5KHJlcXVpcmUkJDApLHJlcXVpcmUkJDFfX2RlZmF1bHQ9X2ludGVyb3BEZWZhdWx0TGVnYWN5KHJlcXVpcmUkJDEpLHB1bnljb2RlPXJlcXVpcmUkJDBfX2RlZmF1bHQuZGVmYXVsdDtmdW5jdGlvbiBVcmwoKXt0aGlzLnByb3RvY29sPW51bGwsdGhpcy5zbGFzaGVzPW51bGwsdGhpcy5hdXRoPW51bGwsdGhpcy5ob3N0PW51bGwsdGhpcy5wb3J0PW51bGwsdGhpcy5ob3N0bmFtZT1udWxsLHRoaXMuaGFzaD1udWxsLHRoaXMuc2VhcmNoPW51bGwsdGhpcy5xdWVyeT1udWxsLHRoaXMucGF0aG5hbWU9bnVsbCx0aGlzLnBhdGg9bnVsbCx0aGlzLmhyZWY9bnVsbH12YXIgcHJvdG9jb2xQYXR0ZXJuPS9eKFthLXowLTkuKy1dKzopL2kscG9ydFBhdHRlcm49LzpbMC05XSokLyxzaW1wbGVQYXRoUGF0dGVybj0vXihcL1wvPyg/IVwvKVteP1xzXSopKFw/W15cc10qKT8kLyx1bndpc2U9WyJ7IiwifSIsInwiLCJcXCIsIl4iLCJgIl0uY29uY2F0KFsiPCIsIj4iLCciJywiYCIsIiAiLCJcciIsIlxuIiwiXHQiXSksYXV0b0VzY2FwZT1bIiciXS5jb25jYXQodW53aXNlKSxub25Ib3N0Q2hhcnM9WyIlIiwiLyIsIj8iLCI7IiwiIyJdLmNvbmNhdChhdXRvRXNjYXBlKSxob3N0RW5kaW5nQ2hhcnM9WyIvIiwiPyIsIiMiXSxob3N0bmFtZVBhcnRQYXR0ZXJuPS9eWythLXowLTlBLVpfLV17MCw2M30kLyxob3N0bmFtZVBhcnRTdGFydD0vXihbK2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sdW5zYWZlUHJvdG9jb2w9e2phdmFzY3JpcHQ6ITAsImphdmFzY3JpcHQ6IjohMH0saG9zdGxlc3NQcm90b2NvbD17amF2YXNjcmlwdDohMCwiamF2YXNjcmlwdDoiOiEwfSxzbGFzaGVkUHJvdG9jb2w9e2h0dHA6ITAsaHR0cHM6ITAsZnRwOiEwLGdvcGhlcjohMCxmaWxlOiEwLCJodHRwOiI6ITAsImh0dHBzOiI6ITAsImZ0cDoiOiEwLCJnb3BoZXI6IjohMCwiZmlsZToiOiEwfSxxdWVyeXN0cmluZz1yZXF1aXJlJCQxX19kZWZhdWx0LmRlZmF1bHQ7ZnVuY3Rpb24gdXJsUGFyc2UodXJsLHBhcnNlUXVlcnlTdHJpbmcsc2xhc2hlc0Rlbm90ZUhvc3Qpe2lmKHVybCYmIm9iamVjdCI9PXR5cGVvZiB1cmwmJnVybCBpbnN0YW5jZW9mIFVybClyZXR1cm4gdXJsO3ZhciB1PW5ldyBVcmw7cmV0dXJuIHUucGFyc2UodXJsLHBhcnNlUXVlcnlTdHJpbmcsc2xhc2hlc0Rlbm90ZUhvc3QpLHV9VXJsLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih1cmwscGFyc2VRdWVyeVN0cmluZyxzbGFzaGVzRGVub3RlSG9zdCl7aWYoInN0cmluZyIhPXR5cGVvZiB1cmwpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICd1cmwnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiB1cmwpO3ZhciBxdWVyeUluZGV4PXVybC5pbmRleE9mKCI/Iiksc3BsaXR0ZXI9LTEhPT1xdWVyeUluZGV4JiZxdWVyeUluZGV4PHVybC5pbmRleE9mKCIjIik/Ij8iOiIjIix1U3BsaXQ9dXJsLnNwbGl0KHNwbGl0dGVyKTt1U3BsaXRbMF09dVNwbGl0WzBdLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgcmVzdD11cmw9dVNwbGl0LmpvaW4oc3BsaXR0ZXIpO2lmKHJlc3Q9cmVzdC50cmltKCksIXNsYXNoZXNEZW5vdGVIb3N0JiYxPT09dXJsLnNwbGl0KCIjIikubGVuZ3RoKXt2YXIgc2ltcGxlUGF0aD1zaW1wbGVQYXRoUGF0dGVybi5leGVjKHJlc3QpO2lmKHNpbXBsZVBhdGgpcmV0dXJuIHRoaXMucGF0aD1yZXN0LHRoaXMuaHJlZj1yZXN0LHRoaXMucGF0aG5hbWU9c2ltcGxlUGF0aFsxXSxzaW1wbGVQYXRoWzJdPyh0aGlzLnNlYXJjaD1zaW1wbGVQYXRoWzJdLHRoaXMucXVlcnk9cGFyc2VRdWVyeVN0cmluZz9xdWVyeXN0cmluZy5wYXJzZSh0aGlzLnNlYXJjaC5zdWJzdHIoMSkpOnRoaXMuc2VhcmNoLnN1YnN0cigxKSk6cGFyc2VRdWVyeVN0cmluZyYmKHRoaXMuc2VhcmNoPSIiLHRoaXMucXVlcnk9e30pLHRoaXN9dmFyIHByb3RvPXByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO2lmKHByb3RvKXt2YXIgbG93ZXJQcm90bz0ocHJvdG89cHJvdG9bMF0pLnRvTG93ZXJDYXNlKCk7dGhpcy5wcm90b2NvbD1sb3dlclByb3RvLHJlc3Q9cmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKX1pZihzbGFzaGVzRGVub3RlSG9zdHx8cHJvdG98fHJlc3QubWF0Y2goL15cL1wvW15AL10rQFteQC9dKy8pKXt2YXIgc2xhc2hlcz0iLy8iPT09cmVzdC5zdWJzdHIoMCwyKTshc2xhc2hlc3x8cHJvdG8mJmhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dfHwocmVzdD1yZXN0LnN1YnN0cigyKSx0aGlzLnNsYXNoZXM9ITApfWlmKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSYmKHNsYXNoZXN8fHByb3RvJiYhc2xhc2hlZFByb3RvY29sW3Byb3RvXSkpe2Zvcih2YXIgYXV0aCxhdFNpZ24saG9zdEVuZD0tMSxpPTA7aTxob3N0RW5kaW5nQ2hhcnMubGVuZ3RoO2krKyl7LTEhPT0oaGVjPXJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pKSYmKC0xPT09aG9zdEVuZHx8aGVjPGhvc3RFbmQpJiYoaG9zdEVuZD1oZWMpfS0xIT09KGF0U2lnbj0tMT09PWhvc3RFbmQ/cmVzdC5sYXN0SW5kZXhPZigiQCIpOnJlc3QubGFzdEluZGV4T2YoIkAiLGhvc3RFbmQpKSYmKGF1dGg9cmVzdC5zbGljZSgwLGF0U2lnbikscmVzdD1yZXN0LnNsaWNlKGF0U2lnbisxKSx0aGlzLmF1dGg9ZGVjb2RlVVJJQ29tcG9uZW50KGF1dGgpKSxob3N0RW5kPS0xO2ZvcihpPTA7aTxub25Ib3N0Q2hhcnMubGVuZ3RoO2krKyl7dmFyIGhlYzstMSE9PShoZWM9cmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSkpJiYoLTE9PT1ob3N0RW5kfHxoZWM8aG9zdEVuZCkmJihob3N0RW5kPWhlYyl9LTE9PT1ob3N0RW5kJiYoaG9zdEVuZD1yZXN0Lmxlbmd0aCksdGhpcy5ob3N0PXJlc3Quc2xpY2UoMCxob3N0RW5kKSxyZXN0PXJlc3Quc2xpY2UoaG9zdEVuZCksdGhpcy5wYXJzZUhvc3QoKSx0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWV8fCIiO3ZhciBpcHY2SG9zdG5hbWU9IlsiPT09dGhpcy5ob3N0bmFtZVswXSYmIl0iPT09dGhpcy5ob3N0bmFtZVt0aGlzLmhvc3RuYW1lLmxlbmd0aC0xXTtpZighaXB2Nkhvc3RuYW1lKWZvcih2YXIgaG9zdHBhcnRzPXRoaXMuaG9zdG5hbWUuc3BsaXQoL1wuLyksbD0oaT0wLGhvc3RwYXJ0cy5sZW5ndGgpO2k8bDtpKyspe3ZhciBwYXJ0PWhvc3RwYXJ0c1tpXTtpZihwYXJ0JiYhcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSl7Zm9yKHZhciBuZXdwYXJ0PSIiLGo9MCxrPXBhcnQubGVuZ3RoO2o8aztqKyspcGFydC5jaGFyQ29kZUF0KGopPjEyNz9uZXdwYXJ0Kz0ieCI6bmV3cGFydCs9cGFydFtqXTtpZighbmV3cGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSl7dmFyIHZhbGlkUGFydHM9aG9zdHBhcnRzLnNsaWNlKDAsaSksbm90SG9zdD1ob3N0cGFydHMuc2xpY2UoaSsxKSxiaXQ9cGFydC5tYXRjaChob3N0bmFtZVBhcnRTdGFydCk7Yml0JiYodmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSksbm90SG9zdC51bnNoaWZ0KGJpdFsyXSkpLG5vdEhvc3QubGVuZ3RoJiYocmVzdD0iLyIrbm90SG9zdC5qb2luKCIuIikrcmVzdCksdGhpcy5ob3N0bmFtZT12YWxpZFBhcnRzLmpvaW4oIi4iKTticmVha319fXRoaXMuaG9zdG5hbWUubGVuZ3RoPjI1NT90aGlzLmhvc3RuYW1lPSIiOnRoaXMuaG9zdG5hbWU9dGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpLGlwdjZIb3N0bmFtZXx8KHRoaXMuaG9zdG5hbWU9cHVueWNvZGUudG9BU0NJSSh0aGlzLmhvc3RuYW1lKSk7dmFyIHA9dGhpcy5wb3J0PyI6Iit0aGlzLnBvcnQ6IiIsaD10aGlzLmhvc3RuYW1lfHwiIjt0aGlzLmhvc3Q9aCtwLHRoaXMuaHJlZis9dGhpcy5ob3N0LGlwdjZIb3N0bmFtZSYmKHRoaXMuaG9zdG5hbWU9dGhpcy5ob3N0bmFtZS5zdWJzdHIoMSx0aGlzLmhvc3RuYW1lLmxlbmd0aC0yKSwiLyIhPT1yZXN0WzBdJiYocmVzdD0iLyIrcmVzdCkpfWlmKCF1bnNhZmVQcm90b2NvbFtsb3dlclByb3RvXSlmb3IoaT0wLGw9YXV0b0VzY2FwZS5sZW5ndGg7aTxsO2krKyl7dmFyIGFlPWF1dG9Fc2NhcGVbaV07aWYoLTEhPT1yZXN0LmluZGV4T2YoYWUpKXt2YXIgZXNjPWVuY29kZVVSSUNvbXBvbmVudChhZSk7ZXNjPT09YWUmJihlc2M9ZXNjYXBlKGFlKSkscmVzdD1yZXN0LnNwbGl0KGFlKS5qb2luKGVzYyl9fXZhciBoYXNoPXJlc3QuaW5kZXhPZigiIyIpOy0xIT09aGFzaCYmKHRoaXMuaGFzaD1yZXN0LnN1YnN0cihoYXNoKSxyZXN0PXJlc3Quc2xpY2UoMCxoYXNoKSk7dmFyIHFtPXJlc3QuaW5kZXhPZigiPyIpO2lmKC0xIT09cW0/KHRoaXMuc2VhcmNoPXJlc3Quc3Vic3RyKHFtKSx0aGlzLnF1ZXJ5PXJlc3Quc3Vic3RyKHFtKzEpLHBhcnNlUXVlcnlTdHJpbmcmJih0aGlzLnF1ZXJ5PXF1ZXJ5c3RyaW5nLnBhcnNlKHRoaXMucXVlcnkpKSxyZXN0PXJlc3Quc2xpY2UoMCxxbSkpOnBhcnNlUXVlcnlTdHJpbmcmJih0aGlzLnNlYXJjaD0iIix0aGlzLnF1ZXJ5PXt9KSxyZXN0JiYodGhpcy5wYXRobmFtZT1yZXN0KSxzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10mJnRoaXMuaG9zdG5hbWUmJiF0aGlzLnBhdGhuYW1lJiYodGhpcy5wYXRobmFtZT0iLyIpLHRoaXMucGF0aG5hbWV8fHRoaXMuc2VhcmNoKXtwPXRoaXMucGF0aG5hbWV8fCIiO3ZhciBzPXRoaXMuc2VhcmNofHwiIjt0aGlzLnBhdGg9cCtzfXJldHVybiB0aGlzLmhyZWY9dGhpcy5mb3JtYXQoKSx0aGlzfSxVcmwucHJvdG90eXBlLmZvcm1hdD1mdW5jdGlvbigpe3ZhciBhdXRoPXRoaXMuYXV0aHx8IiI7YXV0aCYmKGF1dGg9KGF1dGg9ZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpKS5yZXBsYWNlKC8lM0EvaSwiOiIpLGF1dGgrPSJAIik7dmFyIHByb3RvY29sPXRoaXMucHJvdG9jb2x8fCIiLHBhdGhuYW1lPXRoaXMucGF0aG5hbWV8fCIiLGhhc2g9dGhpcy5oYXNofHwiIixob3N0PSExLHF1ZXJ5PSIiO3RoaXMuaG9zdD9ob3N0PWF1dGgrdGhpcy5ob3N0OnRoaXMuaG9zdG5hbWUmJihob3N0PWF1dGgrKC0xPT09dGhpcy5ob3N0bmFtZS5pbmRleE9mKCI6Iik/dGhpcy5ob3N0bmFtZToiWyIrdGhpcy5ob3N0bmFtZSsiXSIpLHRoaXMucG9ydCYmKGhvc3QrPSI6Iit0aGlzLnBvcnQpKSx0aGlzLnF1ZXJ5JiYib2JqZWN0Ij09dHlwZW9mIHRoaXMucXVlcnkmJk9iamVjdC5rZXlzKHRoaXMucXVlcnkpLmxlbmd0aCYmKHF1ZXJ5PXF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5LHthcnJheUZvcm1hdDoicmVwZWF0IixhZGRRdWVyeVByZWZpeDohMX0pKTt2YXIgc2VhcmNoPXRoaXMuc2VhcmNofHxxdWVyeSYmIj8iK3F1ZXJ5fHwiIjtyZXR1cm4gcHJvdG9jb2wmJiI6IiE9PXByb3RvY29sLnN1YnN0cigtMSkmJihwcm90b2NvbCs9IjoiKSx0aGlzLnNsYXNoZXN8fCghcHJvdG9jb2x8fHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pJiYhMSE9PWhvc3Q/KGhvc3Q9Ii8vIisoaG9zdHx8IiIpLHBhdGhuYW1lJiYiLyIhPT1wYXRobmFtZS5jaGFyQXQoMCkmJihwYXRobmFtZT0iLyIrcGF0aG5hbWUpKTpob3N0fHwoaG9zdD0iIiksaGFzaCYmIiMiIT09aGFzaC5jaGFyQXQoMCkmJihoYXNoPSIjIitoYXNoKSxzZWFyY2gmJiI/IiE9PXNlYXJjaC5jaGFyQXQoMCkmJihzZWFyY2g9Ij8iK3NlYXJjaCkscHJvdG9jb2wraG9zdCsocGF0aG5hbWU9cGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG1hdGNoKX0pKSsoc2VhcmNoPXNlYXJjaC5yZXBsYWNlKCIjIiwiJTIzIikpK2hhc2h9LFVybC5wcm90b3R5cGUucmVzb2x2ZT1mdW5jdGlvbihyZWxhdGl2ZSl7cmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwhMSwhMCkpLmZvcm1hdCgpfSxVcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3Q9ZnVuY3Rpb24ocmVsYXRpdmUpe2lmKCJzdHJpbmciPT10eXBlb2YgcmVsYXRpdmUpe3ZhciByZWw9bmV3IFVybDtyZWwucGFyc2UocmVsYXRpdmUsITEsITApLHJlbGF0aXZlPXJlbH1mb3IodmFyIHJlc3VsdD1uZXcgVXJsLHRrZXlzPU9iamVjdC5rZXlzKHRoaXMpLHRrPTA7dGs8dGtleXMubGVuZ3RoO3RrKyspe3ZhciB0a2V5PXRrZXlzW3RrXTtyZXN1bHRbdGtleV09dGhpc1t0a2V5XX1pZihyZXN1bHQuaGFzaD1yZWxhdGl2ZS5oYXNoLCIiPT09cmVsYXRpdmUuaHJlZilyZXR1cm4gcmVzdWx0LmhyZWY9cmVzdWx0LmZvcm1hdCgpLHJlc3VsdDtpZihyZWxhdGl2ZS5zbGFzaGVzJiYhcmVsYXRpdmUucHJvdG9jb2wpe2Zvcih2YXIgcmtleXM9T2JqZWN0LmtleXMocmVsYXRpdmUpLHJrPTA7cms8cmtleXMubGVuZ3RoO3JrKyspe3ZhciBya2V5PXJrZXlzW3JrXTsicHJvdG9jb2wiIT09cmtleSYmKHJlc3VsdFtya2V5XT1yZWxhdGl2ZVtya2V5XSl9cmV0dXJuIHNsYXNoZWRQcm90b2NvbFtyZXN1bHQucHJvdG9jb2xdJiZyZXN1bHQuaG9zdG5hbWUmJiFyZXN1bHQucGF0aG5hbWUmJihyZXN1bHQucGF0aG5hbWU9Ii8iLHJlc3VsdC5wYXRoPXJlc3VsdC5wYXRobmFtZSkscmVzdWx0LmhyZWY9cmVzdWx0LmZvcm1hdCgpLHJlc3VsdH1pZihyZWxhdGl2ZS5wcm90b2NvbCYmcmVsYXRpdmUucHJvdG9jb2whPT1yZXN1bHQucHJvdG9jb2wpe2lmKCFzbGFzaGVkUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKXtmb3IodmFyIGtleXM9T2JqZWN0LmtleXMocmVsYXRpdmUpLHY9MDt2PGtleXMubGVuZ3RoO3YrKyl7dmFyIGs9a2V5c1t2XTtyZXN1bHRba109cmVsYXRpdmVba119cmV0dXJuIHJlc3VsdC5ocmVmPXJlc3VsdC5mb3JtYXQoKSxyZXN1bHR9aWYocmVzdWx0LnByb3RvY29sPXJlbGF0aXZlLnByb3RvY29sLHJlbGF0aXZlLmhvc3R8fGhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKXJlc3VsdC5wYXRobmFtZT1yZWxhdGl2ZS5wYXRobmFtZTtlbHNle2Zvcih2YXIgcmVsUGF0aD0ocmVsYXRpdmUucGF0aG5hbWV8fCIiKS5zcGxpdCgiLyIpO3JlbFBhdGgubGVuZ3RoJiYhKHJlbGF0aXZlLmhvc3Q9cmVsUGF0aC5zaGlmdCgpKTspO3JlbGF0aXZlLmhvc3R8fChyZWxhdGl2ZS5ob3N0PSIiKSxyZWxhdGl2ZS5ob3N0bmFtZXx8KHJlbGF0aXZlLmhvc3RuYW1lPSIiKSwiIiE9PXJlbFBhdGhbMF0mJnJlbFBhdGgudW5zaGlmdCgiIikscmVsUGF0aC5sZW5ndGg8MiYmcmVsUGF0aC51bnNoaWZ0KCIiKSxyZXN1bHQucGF0aG5hbWU9cmVsUGF0aC5qb2luKCIvIil9aWYocmVzdWx0LnNlYXJjaD1yZWxhdGl2ZS5zZWFyY2gscmVzdWx0LnF1ZXJ5PXJlbGF0aXZlLnF1ZXJ5LHJlc3VsdC5ob3N0PXJlbGF0aXZlLmhvc3R8fCIiLHJlc3VsdC5hdXRoPXJlbGF0aXZlLmF1dGgscmVzdWx0Lmhvc3RuYW1lPXJlbGF0aXZlLmhvc3RuYW1lfHxyZWxhdGl2ZS5ob3N0LHJlc3VsdC5wb3J0PXJlbGF0aXZlLnBvcnQscmVzdWx0LnBhdGhuYW1lfHxyZXN1bHQuc2VhcmNoKXt2YXIgcD1yZXN1bHQucGF0aG5hbWV8fCIiLHM9cmVzdWx0LnNlYXJjaHx8IiI7cmVzdWx0LnBhdGg9cCtzfXJldHVybiByZXN1bHQuc2xhc2hlcz1yZXN1bHQuc2xhc2hlc3x8cmVsYXRpdmUuc2xhc2hlcyxyZXN1bHQuaHJlZj1yZXN1bHQuZm9ybWF0KCkscmVzdWx0fXZhciBpc1NvdXJjZUFicz1yZXN1bHQucGF0aG5hbWUmJiIvIj09PXJlc3VsdC5wYXRobmFtZS5jaGFyQXQoMCksaXNSZWxBYnM9cmVsYXRpdmUuaG9zdHx8cmVsYXRpdmUucGF0aG5hbWUmJiIvIj09PXJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSxtdXN0RW5kQWJzPWlzUmVsQWJzfHxpc1NvdXJjZUFic3x8cmVzdWx0Lmhvc3QmJnJlbGF0aXZlLnBhdGhuYW1lLHJlbW92ZUFsbERvdHM9bXVzdEVuZEFicyxzcmNQYXRoPXJlc3VsdC5wYXRobmFtZSYmcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCIvIil8fFtdLHBzeWNob3RpYz0ocmVsUGF0aD1yZWxhdGl2ZS5wYXRobmFtZSYmcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoIi8iKXx8W10scmVzdWx0LnByb3RvY29sJiYhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0pO2lmKHBzeWNob3RpYyYmKHJlc3VsdC5ob3N0bmFtZT0iIixyZXN1bHQucG9ydD1udWxsLHJlc3VsdC5ob3N0JiYoIiI9PT1zcmNQYXRoWzBdP3NyY1BhdGhbMF09cmVzdWx0Lmhvc3Q6c3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KSkscmVzdWx0Lmhvc3Q9IiIscmVsYXRpdmUucHJvdG9jb2wmJihyZWxhdGl2ZS5ob3N0bmFtZT1udWxsLHJlbGF0aXZlLnBvcnQ9bnVsbCxyZWxhdGl2ZS5ob3N0JiYoIiI9PT1yZWxQYXRoWzBdP3JlbFBhdGhbMF09cmVsYXRpdmUuaG9zdDpyZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCkpLHJlbGF0aXZlLmhvc3Q9bnVsbCksbXVzdEVuZEFicz1tdXN0RW5kQWJzJiYoIiI9PT1yZWxQYXRoWzBdfHwiIj09PXNyY1BhdGhbMF0pKSxpc1JlbEFicylyZXN1bHQuaG9zdD1yZWxhdGl2ZS5ob3N0fHwiIj09PXJlbGF0aXZlLmhvc3Q/cmVsYXRpdmUuaG9zdDpyZXN1bHQuaG9zdCxyZXN1bHQuaG9zdG5hbWU9cmVsYXRpdmUuaG9zdG5hbWV8fCIiPT09cmVsYXRpdmUuaG9zdG5hbWU/cmVsYXRpdmUuaG9zdG5hbWU6cmVzdWx0Lmhvc3RuYW1lLHJlc3VsdC5zZWFyY2g9cmVsYXRpdmUuc2VhcmNoLHJlc3VsdC5xdWVyeT1yZWxhdGl2ZS5xdWVyeSxzcmNQYXRoPXJlbFBhdGg7ZWxzZSBpZihyZWxQYXRoLmxlbmd0aClzcmNQYXRofHwoc3JjUGF0aD1bXSksc3JjUGF0aC5wb3AoKSxzcmNQYXRoPXNyY1BhdGguY29uY2F0KHJlbFBhdGgpLHJlc3VsdC5zZWFyY2g9cmVsYXRpdmUuc2VhcmNoLHJlc3VsdC5xdWVyeT1yZWxhdGl2ZS5xdWVyeTtlbHNlIGlmKG51bGwhPXJlbGF0aXZlLnNlYXJjaCl7aWYocHN5Y2hvdGljKXJlc3VsdC5ob3N0PXNyY1BhdGguc2hpZnQoKSxyZXN1bHQuaG9zdG5hbWU9cmVzdWx0Lmhvc3QsKGF1dGhJbkhvc3Q9ISEocmVzdWx0Lmhvc3QmJnJlc3VsdC5ob3N0LmluZGV4T2YoIkAiKT4wKSYmcmVzdWx0Lmhvc3Quc3BsaXQoIkAiKSkmJihyZXN1bHQuYXV0aD1hdXRoSW5Ib3N0LnNoaWZ0KCkscmVzdWx0Lmhvc3RuYW1lPWF1dGhJbkhvc3Quc2hpZnQoKSxyZXN1bHQuaG9zdD1yZXN1bHQuaG9zdG5hbWUpO3JldHVybiByZXN1bHQuc2VhcmNoPXJlbGF0aXZlLnNlYXJjaCxyZXN1bHQucXVlcnk9cmVsYXRpdmUucXVlcnksbnVsbD09PXJlc3VsdC5wYXRobmFtZSYmbnVsbD09PXJlc3VsdC5zZWFyY2h8fChyZXN1bHQucGF0aD0ocmVzdWx0LnBhdGhuYW1lP3Jlc3VsdC5wYXRobmFtZToiIikrKHJlc3VsdC5zZWFyY2g/cmVzdWx0LnNlYXJjaDoiIikpLHJlc3VsdC5ocmVmPXJlc3VsdC5mb3JtYXQoKSxyZXN1bHR9aWYoIXNyY1BhdGgubGVuZ3RoKXJldHVybiByZXN1bHQucGF0aG5hbWU9bnVsbCxyZXN1bHQuc2VhcmNoP3Jlc3VsdC5wYXRoPSIvIityZXN1bHQuc2VhcmNoOnJlc3VsdC5wYXRoPW51bGwscmVzdWx0LmhyZWY9cmVzdWx0LmZvcm1hdCgpLHJlc3VsdDtmb3IodmFyIGxhc3Q9c3JjUGF0aC5zbGljZSgtMSlbMF0saGFzVHJhaWxpbmdTbGFzaD0ocmVzdWx0Lmhvc3R8fHJlbGF0aXZlLmhvc3R8fHNyY1BhdGgubGVuZ3RoPjEpJiYoIi4iPT09bGFzdHx8Ii4uIj09PWxhc3QpfHwiIj09PWxhc3QsdXA9MCxpPXNyY1BhdGgubGVuZ3RoO2k+PTA7aS0tKSIuIj09PShsYXN0PXNyY1BhdGhbaV0pP3NyY1BhdGguc3BsaWNlKGksMSk6Ii4uIj09PWxhc3Q/KHNyY1BhdGguc3BsaWNlKGksMSksdXArKyk6dXAmJihzcmNQYXRoLnNwbGljZShpLDEpLHVwLS0pO2lmKCFtdXN0RW5kQWJzJiYhcmVtb3ZlQWxsRG90cylmb3IoO3VwLS07dXApc3JjUGF0aC51bnNoaWZ0KCIuLiIpOyFtdXN0RW5kQWJzfHwiIj09PXNyY1BhdGhbMF18fHNyY1BhdGhbMF0mJiIvIj09PXNyY1BhdGhbMF0uY2hhckF0KDApfHxzcmNQYXRoLnVuc2hpZnQoIiIpLGhhc1RyYWlsaW5nU2xhc2gmJiIvIiE9PXNyY1BhdGguam9pbigiLyIpLnN1YnN0cigtMSkmJnNyY1BhdGgucHVzaCgiIik7dmFyIGF1dGhJbkhvc3QsaXNBYnNvbHV0ZT0iIj09PXNyY1BhdGhbMF18fHNyY1BhdGhbMF0mJiIvIj09PXNyY1BhdGhbMF0uY2hhckF0KDApO3BzeWNob3RpYyYmKHJlc3VsdC5ob3N0bmFtZT1pc0Fic29sdXRlPyIiOnNyY1BhdGgubGVuZ3RoP3NyY1BhdGguc2hpZnQoKToiIixyZXN1bHQuaG9zdD1yZXN1bHQuaG9zdG5hbWUsKGF1dGhJbkhvc3Q9ISEocmVzdWx0Lmhvc3QmJnJlc3VsdC5ob3N0LmluZGV4T2YoIkAiKT4wKSYmcmVzdWx0Lmhvc3Quc3BsaXQoIkAiKSkmJihyZXN1bHQuYXV0aD1hdXRoSW5Ib3N0LnNoaWZ0KCkscmVzdWx0Lmhvc3RuYW1lPWF1dGhJbkhvc3Quc2hpZnQoKSxyZXN1bHQuaG9zdD1yZXN1bHQuaG9zdG5hbWUpKTtyZXR1cm4obXVzdEVuZEFicz1tdXN0RW5kQWJzfHxyZXN1bHQuaG9zdCYmc3JjUGF0aC5sZW5ndGgpJiYhaXNBYnNvbHV0ZSYmc3JjUGF0aC51bnNoaWZ0KCIiKSxzcmNQYXRoLmxlbmd0aD4wP3Jlc3VsdC5wYXRobmFtZT1zcmNQYXRoLmpvaW4oIi8iKToocmVzdWx0LnBhdGhuYW1lPW51bGwscmVzdWx0LnBhdGg9bnVsbCksbnVsbD09PXJlc3VsdC5wYXRobmFtZSYmbnVsbD09PXJlc3VsdC5zZWFyY2h8fChyZXN1bHQucGF0aD0ocmVzdWx0LnBhdGhuYW1lP3Jlc3VsdC5wYXRobmFtZToiIikrKHJlc3VsdC5zZWFyY2g/cmVzdWx0LnNlYXJjaDoiIikpLHJlc3VsdC5hdXRoPXJlbGF0aXZlLmF1dGh8fHJlc3VsdC5hdXRoLHJlc3VsdC5zbGFzaGVzPXJlc3VsdC5zbGFzaGVzfHxyZWxhdGl2ZS5zbGFzaGVzLHJlc3VsdC5ocmVmPXJlc3VsdC5mb3JtYXQoKSxyZXN1bHR9LFVybC5wcm90b3R5cGUucGFyc2VIb3N0PWZ1bmN0aW9uKCl7dmFyIGhvc3Q9dGhpcy5ob3N0LHBvcnQ9cG9ydFBhdHRlcm4uZXhlYyhob3N0KTtwb3J0JiYoIjoiIT09KHBvcnQ9cG9ydFswXSkmJih0aGlzLnBvcnQ9cG9ydC5zdWJzdHIoMSkpLGhvc3Q9aG9zdC5zdWJzdHIoMCxob3N0Lmxlbmd0aC1wb3J0Lmxlbmd0aCkpLGhvc3QmJih0aGlzLmhvc3RuYW1lPWhvc3QpfTt2YXIgcGFyc2U9dXJsUGFyc2UscmVzb2x2ZSQxPWZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLHJlbGF0aXZlKXtyZXR1cm4gdXJsUGFyc2Uoc291cmNlLCExLCEwKS5yZXNvbHZlKHJlbGF0aXZlKX0scmVzb2x2ZU9iamVjdD1mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSxyZWxhdGl2ZSl7cmV0dXJuIHNvdXJjZT91cmxQYXJzZShzb3VyY2UsITEsITApLnJlc29sdmVPYmplY3QocmVsYXRpdmUpOnJlbGF0aXZlfSxmb3JtYXQ9ZnVuY3Rpb24gdXJsRm9ybWF0KG9iail7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBvYmomJihvYmo9dXJsUGFyc2Uob2JqKSksb2JqIGluc3RhbmNlb2YgVXJsP29iai5mb3JtYXQoKTpVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iail9LFVybF8xPVVybDt2YXIgX2dsb2JhbFRoaXM9ZnVuY3Rpb24oT2JqZWN0KXtmdW5jdGlvbiBnZXQoKXt2YXIgX2dsb2JhbD10aGlzfHxzZWxmO3JldHVybiBkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5fX21hZ2ljX18sX2dsb2JhbH1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczp0aGlzP2dldCgpOihPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSwiX19tYWdpY19fIix7Y29uZmlndXJhYmxlOiEwLGdldH0pLF9fbWFnaWNfXyl9KE9iamVjdCksZm9ybWF0SW1wb3J0PWZvcm1hdCxwYXJzZUltcG9ydD1wYXJzZSxyZXNvbHZlSW1wb3J0PXJlc29sdmUkMSxVcmxJbXBvcnQ9VXJsXzEsVVJMPV9nbG9iYWxUaGlzLlVSTCxVUkxTZWFyY2hQYXJhbXM9X2dsb2JhbFRoaXMuVVJMU2VhcmNoUGFyYW1zLHBlcmNlbnRSZWdFeD0vJS9nLGJhY2tzbGFzaFJlZ0V4PS9cXC9nLG5ld2xpbmVSZWdFeD0vXG4vZyxjYXJyaWFnZVJldHVyblJlZ0V4PS9cci9nLHRhYlJlZ0V4PS9cdC9nO3ZhciBkb21haW5Ub0FTQ0lJPWZ1bmN0aW9uIGRvbWFpblRvQVNDSUkoZG9tYWluKXtpZih2b2lkIDA9PT1kb21haW4pdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJkb21haW4iIGFyZ3VtZW50IG11c3QgYmUgc3BlY2lmaWVkJyk7cmV0dXJuIG5ldyBVUkwoImh0dHA6Ly8iK2RvbWFpbikuaG9zdG5hbWV9LGRvbWFpblRvVW5pY29kZT1mdW5jdGlvbiBkb21haW5Ub1VuaWNvZGUoZG9tYWluKXtpZih2b2lkIDA9PT1kb21haW4pdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJkb21haW4iIGFyZ3VtZW50IG11c3QgYmUgc3BlY2lmaWVkJyk7cmV0dXJuIG5ldyBVUkwoImh0dHA6Ly8iK2RvbWFpbikuaG9zdG5hbWV9LHBhdGhUb0ZpbGVVUkw9ZnVuY3Rpb24gcGF0aFRvRmlsZVVSTChmaWxlcGF0aCl7dmFyIG91dFVSTD1uZXcgVVJMKCJmaWxlOi8vIikscmVzb2x2ZWQ9ZnVuY3Rpb24gcmVzb2x2ZSgpe2Zvcih2YXIgcmVzb2x2ZWRQYXRoPSIiLHJlc29sdmVkQWJzb2x1dGU9ITEsaT1hcmd1bWVudHMubGVuZ3RoLTE7aT49LTEmJiFyZXNvbHZlZEFic29sdXRlO2ktLSl7dmFyIHBhdGg9aT49MD9hcmd1bWVudHNbaV06Ii8iO2lmKCJzdHJpbmciIT10eXBlb2YgcGF0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO3BhdGgmJihyZXNvbHZlZFBhdGg9cGF0aCsiLyIrcmVzb2x2ZWRQYXRoLHJlc29sdmVkQWJzb2x1dGU9Ii8iPT09cGF0aC5jaGFyQXQoMCkpfXJldHVybiByZXNvbHZlZFBhdGg9ZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsYWxsb3dBYm92ZVJvb3Qpe2Zvcih2YXIgdXA9MCxpPXBhcnRzLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgbGFzdD1wYXJ0c1tpXTsiLiI9PT1sYXN0P3BhcnRzLnNwbGljZShpLDEpOiIuLiI9PT1sYXN0PyhwYXJ0cy5zcGxpY2UoaSwxKSx1cCsrKTp1cCYmKHBhcnRzLnNwbGljZShpLDEpLHVwLS0pfWlmKGFsbG93QWJvdmVSb290KWZvcig7dXAtLTt1cClwYXJ0cy51bnNoaWZ0KCIuLiIpO3JldHVybiBwYXJ0c30oZnVuY3Rpb24gZmlsdGVyKHhzLGYpe2lmKHhzLmZpbHRlcilyZXR1cm4geHMuZmlsdGVyKGYpO2Zvcih2YXIgcmVzPVtdLGk9MDtpPHhzLmxlbmd0aDtpKyspZih4c1tpXSxpLHhzKSYmcmVzLnB1c2goeHNbaV0pO3JldHVybiByZXN9KHJlc29sdmVkUGF0aC5zcGxpdCgiLyIpLGZ1bmN0aW9uKHApe3JldHVybiEhcH0pLCFyZXNvbHZlZEFic29sdXRlKS5qb2luKCIvIiksKHJlc29sdmVkQWJzb2x1dGU/Ii8iOiIiKStyZXNvbHZlZFBhdGh8fCIuIn0oZmlsZXBhdGgpO3JldHVybiA0Nz09PWZpbGVwYXRoLmNoYXJDb2RlQXQoZmlsZXBhdGgubGVuZ3RoLTEpJiYiLyIhPT1yZXNvbHZlZFtyZXNvbHZlZC5sZW5ndGgtMV0mJihyZXNvbHZlZCs9Ii8iKSxvdXRVUkwucGF0aG5hbWU9ZnVuY3Rpb24gZW5jb2RlUGF0aENoYXJzKGZpbGVwYXRoKXtyZXR1cm4gZmlsZXBhdGguaW5jbHVkZXMoIiUiKSYmKGZpbGVwYXRoPWZpbGVwYXRoLnJlcGxhY2UocGVyY2VudFJlZ0V4LCIlMjUiKSksZmlsZXBhdGguaW5jbHVkZXMoIlxcIikmJihmaWxlcGF0aD1maWxlcGF0aC5yZXBsYWNlKGJhY2tzbGFzaFJlZ0V4LCIlNUMiKSksZmlsZXBhdGguaW5jbHVkZXMoIlxuIikmJihmaWxlcGF0aD1maWxlcGF0aC5yZXBsYWNlKG5ld2xpbmVSZWdFeCwiJTBBIikpLGZpbGVwYXRoLmluY2x1ZGVzKCJcciIpJiYoZmlsZXBhdGg9ZmlsZXBhdGgucmVwbGFjZShjYXJyaWFnZVJldHVyblJlZ0V4LCIlMEQiKSksZmlsZXBhdGguaW5jbHVkZXMoIlx0IikmJihmaWxlcGF0aD1maWxlcGF0aC5yZXBsYWNlKHRhYlJlZ0V4LCIlMDkiKSksZmlsZXBhdGh9KHJlc29sdmVkKSxvdXRVUkx9LGZpbGVVUkxUb1BhdGg9ZnVuY3Rpb24gZmlsZVVSTFRvUGF0aChwYXRoKXtpZighZnVuY3Rpb24gaXNVUkxJbnN0YW5jZShpbnN0YW5jZSl7dmFyIHJlc29sdmVkPW51bGwhPWluc3RhbmNlP2luc3RhbmNlOm51bGw7cmV0dXJuIEJvb2xlYW4obnVsbCE9PXJlc29sdmVkJiYobnVsbD09cmVzb2x2ZWQ/dm9pZCAwOnJlc29sdmVkLmhyZWYpJiYobnVsbD09cmVzb2x2ZWQ/dm9pZCAwOnJlc29sdmVkLm9yaWdpbikpfShwYXRoKSYmInN0cmluZyIhPXR5cGVvZiBwYXRoKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBVUkwuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgcGF0aCsiICgiK3BhdGgrIikiKTt2YXIgcmVzb2x2ZWQ9bmV3IFVSTChwYXRoKTtpZigiZmlsZToiIT09cmVzb2x2ZWQucHJvdG9jb2wpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIFVSTCBtdXN0IGJlIG9mIHNjaGVtZSBmaWxlIik7cmV0dXJuIGZ1bmN0aW9uIGdldFBhdGhGcm9tVVJMUG9zaXgodXJsKXtpZigiIiE9PXVybC5ob3N0bmFtZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdGaWxlIFVSTCBob3N0IG11c3QgYmUgImxvY2FsaG9zdCIgb3IgZW1wdHkgb24gYnJvd3NlcicpO2Zvcih2YXIgcGF0aG5hbWU9dXJsLnBhdGhuYW1lLG49MDtuPHBhdGhuYW1lLmxlbmd0aDtuKyspaWYoIiUiPT09cGF0aG5hbWVbbl0pe3ZhciB0aGlyZD0zMnxwYXRobmFtZS5jb2RlUG9pbnRBdChuKzIpO2lmKCIyIj09PXBhdGhuYW1lW24rMV0mJjEwMj09PXRoaXJkKXRocm93IG5ldyBUeXBlRXJyb3IoIkZpbGUgVVJMIHBhdGggbXVzdCBub3QgaW5jbHVkZSBlbmNvZGVkIC8gY2hhcmFjdGVycyIpfXJldHVybiBkZWNvZGVVUklDb21wb25lbnQocGF0aG5hbWUpfShyZXNvbHZlZCl9LGZvcm1hdEltcG9ydFdpdGhPdmVybG9hZHM9ZnVuY3Rpb24gZm9ybWF0SW1wb3J0V2l0aE92ZXJsb2Fkcyh1cmxPYmplY3Qsb3B0aW9ucyl7dmFyIF9vcHRpb25zJGF1dGgsX29wdGlvbnMkZnJhZ21lbnQsX29wdGlvbnMkc2VhcmNoO2lmKHZvaWQgMD09PW9wdGlvbnMmJihvcHRpb25zPXt9KSwhKHVybE9iamVjdCBpbnN0YW5jZW9mIFVSTCkpcmV0dXJuIGZvcm1hdEltcG9ydCh1cmxPYmplY3QpO2lmKCJvYmplY3QiIT10eXBlb2Ygb3B0aW9uc3x8bnVsbD09PW9wdGlvbnMpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJvcHRpb25zIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgb2JqZWN0LicpO3ZhciBhdXRoPW51bGw9PShfb3B0aW9ucyRhdXRoPW9wdGlvbnMuYXV0aCl8fF9vcHRpb25zJGF1dGgsZnJhZ21lbnQ9bnVsbD09KF9vcHRpb25zJGZyYWdtZW50PW9wdGlvbnMuZnJhZ21lbnQpfHxfb3B0aW9ucyRmcmFnbWVudCxzZWFyY2g9bnVsbD09KF9vcHRpb25zJHNlYXJjaD1vcHRpb25zLnNlYXJjaCl8fF9vcHRpb25zJHNlYXJjaDtvcHRpb25zLnVuaWNvZGU7dmFyIHBhcnNlZD1uZXcgVVJMKHVybE9iamVjdC50b1N0cmluZygpKTtyZXR1cm4gYXV0aHx8KHBhcnNlZC51c2VybmFtZT0iIixwYXJzZWQucGFzc3dvcmQ9IiIpLGZyYWdtZW50fHwocGFyc2VkLmhhc2g9IiIpLHNlYXJjaHx8KHBhcnNlZC5zZWFyY2g9IiIpLHBhcnNlZC50b1N0cmluZygpfSxhcGk9e2Zvcm1hdDpmb3JtYXRJbXBvcnRXaXRoT3ZlcmxvYWRzLHBhcnNlOnBhcnNlSW1wb3J0LHJlc29sdmU6cmVzb2x2ZUltcG9ydCxyZXNvbHZlT2JqZWN0LFVybDpVcmxJbXBvcnQsVVJMLFVSTFNlYXJjaFBhcmFtcyxkb21haW5Ub0FTQ0lJLGRvbWFpblRvVW5pY29kZSxwYXRoVG9GaWxlVVJMLGZpbGVVUkxUb1BhdGh9O2V4cG9ydHMuVVJMPVVSTCxleHBvcnRzLlVSTFNlYXJjaFBhcmFtcz1VUkxTZWFyY2hQYXJhbXMsZXhwb3J0cy5Vcmw9VXJsSW1wb3J0LGV4cG9ydHMuZGVmYXVsdD1hcGksZXhwb3J0cy5kb21haW5Ub0FTQ0lJPWRvbWFpblRvQVNDSUksZXhwb3J0cy5kb21haW5Ub1VuaWNvZGU9ZG9tYWluVG9Vbmljb2RlLGV4cG9ydHMuZmlsZVVSTFRvUGF0aD1maWxlVVJMVG9QYXRoLGV4cG9ydHMuZm9ybWF0PWZvcm1hdEltcG9ydFdpdGhPdmVybG9hZHMsZXhwb3J0cy5wYXJzZT1wYXJzZUltcG9ydCxleHBvcnRzLnBhdGhUb0ZpbGVVUkw9cGF0aFRvRmlsZVVSTCxleHBvcnRzLnJlc29sdmU9cmVzb2x2ZUltcG9ydCxleHBvcnRzLnJlc29sdmVPYmplY3Q9cmVzb2x2ZU9iamVjdCxleHBvcnRzPW1vZHVsZS5leHBvcnRzPWFwaX0sIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9saXN0Lmpzb24iKG1vZHVsZSl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siYWVzLTEyOC1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMTI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMTkyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMjU2Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0xOTItZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMjU2LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifX0nKX0sIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYnJvd3Nlci9hbGdvcml0aG1zLmpzb24iKG1vZHVsZSl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sic2hhMjI0V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sIlJTQS1TSEEyMjQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJSU0EtU0hBMjU2Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwiUlNBLVNIQTM4NCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwic2hhNTEyV2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEE1MTIiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEExIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0In0sImVjZHNhLXdpdGgtU0hBMSI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sInNoYTI1NiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwic2hhMjI0Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJzaGEzODQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sInNoYTUxMiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtU0hBMSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1SSVBFTUQxNjAiOnsic2lnbiI6ImRzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IiJ9LCJyaXBlbWQxNjBXaXRoUlNBIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwiUlNBLVJJUEVNRDE2MCI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifSwiUlNBLU1ENSI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn19Jyl9LCIuLi8uLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2Jyb3dzZXIvY3VydmVzLmpzb24iKG1vZHVsZSl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwiMS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44NDAuMTAwNDUuMy4xLjEiOiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAuMzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9Jyl9LCIuLi8uLi9ub2RlX21vZHVsZXMvY29uc3RhbnRzLWJyb3dzZXJpZnkvY29uc3RhbnRzLmpzb24iKG1vZHVsZSl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siT19SRE9OTFkiOjAsIk9fV1JPTkxZIjoxLCJPX1JEV1IiOjIsIlNfSUZNVCI6NjE0NDAsIlNfSUZSRUciOjMyNzY4LCJTX0lGRElSIjoxNjM4NCwiU19JRkNIUiI6ODE5MiwiU19JRkJMSyI6MjQ1NzYsIlNfSUZJRk8iOjQwOTYsIlNfSUZMTksiOjQwOTYwLCJTX0lGU09DSyI6NDkxNTIsIk9fQ1JFQVQiOjUxMiwiT19FWENMIjoyMDQ4LCJPX05PQ1RUWSI6MTMxMDcyLCJPX1RSVU5DIjoxMDI0LCJPX0FQUEVORCI6OCwiT19ESVJFQ1RPUlkiOjEwNDg1NzYsIk9fTk9GT0xMT1ciOjI1NiwiT19TWU5DIjoxMjgsIk9fU1lNTElOSyI6MjA5NzE1MiwiT19OT05CTE9DSyI6NCwiU19JUldYVSI6NDQ4LCJTX0lSVVNSIjoyNTYsIlNfSVdVU1IiOjEyOCwiU19JWFVTUiI6NjQsIlNfSVJXWEciOjU2LCJTX0lSR1JQIjozMiwiU19JV0dSUCI6MTYsIlNfSVhHUlAiOjgsIlNfSVJXWE8iOjcsIlNfSVJPVEgiOjQsIlNfSVdPVEgiOjIsIlNfSVhPVEgiOjEsIkUyQklHIjo3LCJFQUNDRVMiOjEzLCJFQUREUklOVVNFIjo0OCwiRUFERFJOT1RBVkFJTCI6NDksIkVBRk5PU1VQUE9SVCI6NDcsIkVBR0FJTiI6MzUsIkVBTFJFQURZIjozNywiRUJBREYiOjksIkVCQURNU0ciOjk0LCJFQlVTWSI6MTYsIkVDQU5DRUxFRCI6ODksIkVDSElMRCI6MTAsIkVDT05OQUJPUlRFRCI6NTMsIkVDT05OUkVGVVNFRCI6NjEsIkVDT05OUkVTRVQiOjU0LCJFREVBRExLIjoxMSwiRURFU1RBRERSUkVRIjozOSwiRURPTSI6MzMsIkVEUVVPVCI6NjksIkVFWElTVCI6MTcsIkVGQVVMVCI6MTQsIkVGQklHIjoyNywiRUhPU1RVTlJFQUNIIjo2NSwiRUlEUk0iOjkwLCJFSUxTRVEiOjkyLCJFSU5QUk9HUkVTUyI6MzYsIkVJTlRSIjo0LCJFSU5WQUwiOjIyLCJFSU8iOjUsIkVJU0NPTk4iOjU2LCJFSVNESVIiOjIxLCJFTE9PUCI6NjIsIkVNRklMRSI6MjQsIkVNTElOSyI6MzEsIkVNU0dTSVpFIjo0MCwiRU1VTFRJSE9QIjo5NSwiRU5BTUVUT09MT05HIjo2MywiRU5FVERPV04iOjUwLCJFTkVUUkVTRVQiOjUyLCJFTkVUVU5SRUFDSCI6NTEsIkVORklMRSI6MjMsIkVOT0JVRlMiOjU1LCJFTk9EQVRBIjo5NiwiRU5PREVWIjoxOSwiRU5PRU5UIjoyLCJFTk9FWEVDIjo4LCJFTk9MQ0siOjc3LCJFTk9MSU5LIjo5NywiRU5PTUVNIjoxMiwiRU5PTVNHIjo5MSwiRU5PUFJPVE9PUFQiOjQyLCJFTk9TUEMiOjI4LCJFTk9TUiI6OTgsIkVOT1NUUiI6OTksIkVOT1NZUyI6NzgsIkVOT1RDT05OIjo1NywiRU5PVERJUiI6MjAsIkVOT1RFTVBUWSI6NjYsIkVOT1RTT0NLIjozOCwiRU5PVFNVUCI6NDUsIkVOT1RUWSI6MjUsIkVOWElPIjo2LCJFT1BOT1RTVVBQIjoxMDIsIkVPVkVSRkxPVyI6ODQsIkVQRVJNIjoxLCJFUElQRSI6MzIsIkVQUk9UTyI6MTAwLCJFUFJPVE9OT1NVUFBPUlQiOjQzLCJFUFJPVE9UWVBFIjo0MSwiRVJBTkdFIjozNCwiRVJPRlMiOjMwLCJFU1BJUEUiOjI5LCJFU1JDSCI6MywiRVNUQUxFIjo3MCwiRVRJTUUiOjEwMSwiRVRJTUVET1VUIjo2MCwiRVRYVEJTWSI6MjYsIkVXT1VMREJMT0NLIjozNSwiRVhERVYiOjE4LCJTSUdIVVAiOjEsIlNJR0lOVCI6MiwiU0lHUVVJVCI6MywiU0lHSUxMIjo0LCJTSUdUUkFQIjo1LCJTSUdBQlJUIjo2LCJTSUdJT1QiOjYsIlNJR0JVUyI6MTAsIlNJR0ZQRSI6OCwiU0lHS0lMTCI6OSwiU0lHVVNSMSI6MzAsIlNJR1NFR1YiOjExLCJTSUdVU1IyIjozMSwiU0lHUElQRSI6MTMsIlNJR0FMUk0iOjE0LCJTSUdURVJNIjoxNSwiU0lHQ0hMRCI6MjAsIlNJR0NPTlQiOjE5LCJTSUdTVE9QIjoxNywiU0lHVFNUUCI6MTgsIlNJR1RUSU4iOjIxLCJTSUdUVE9VIjoyMiwiU0lHVVJHIjoxNiwiU0lHWENQVSI6MjQsIlNJR1hGU1oiOjI1LCJTSUdWVEFMUk0iOjI2LCJTSUdQUk9GIjoyNywiU0lHV0lOQ0giOjI4LCJTSUdJTyI6MjMsIlNJR1NZUyI6MTIsIlNTTF9PUF9BTEwiOjIxNDc0ODY3MTksIlNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT04iOjI2MjE0NCwiU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSI6NDE5NDMwNCwiU1NMX09QX0NJU0NPX0FOWUNPTk5FQ1QiOjMyNzY4LCJTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFIjo4MTkyLCJTU0xfT1BfQ1JZUFRPUFJPX1RMU0VYVF9CVUciOjIxNDc0ODM2NDgsIlNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMiOjIwNDgsIlNTTF9PUF9FUEhFTUVSQUxfUlNBIjowLCJTU0xfT1BfTEVHQUNZX1NFUlZFUl9DT05ORUNUIjo0LCJTU0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIiOjMyLCJTU0xfT1BfTUlDUk9TT0ZUX1NFU1NfSURfQlVHIjoxLCJTU0xfT1BfTVNJRV9TU0xWMl9SU0FfUEFERElORyI6MCwiU1NMX09QX05FVFNDQVBFX0NBX0ROX0JVRyI6NTM2ODcwOTEyLCJTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRyI6MiwiU1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUciOjEwNzM3NDE4MjQsIlNTTF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRyI6OCwiU1NMX09QX05PX0NPTVBSRVNTSU9OIjoxMzEwNzIsIlNTTF9PUF9OT19RVUVSWV9NVFUiOjQwOTYsIlNTTF9PUF9OT19TRVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTiI6NjU1MzYsIlNTTF9PUF9OT19TU0x2MiI6MTY3NzcyMTYsIlNTTF9PUF9OT19TU0x2MyI6MzM1NTQ0MzIsIlNTTF9PUF9OT19USUNLRVQiOjE2Mzg0LCJTU0xfT1BfTk9fVExTdjEiOjY3MTA4ODY0LCJTU0xfT1BfTk9fVExTdjFfMSI6MjY4NDM1NDU2LCJTU0xfT1BfTk9fVExTdjFfMiI6MTM0MjE3NzI4LCJTU0xfT1BfUEtDUzFfQ0hFQ0tfMSI6MCwiU1NMX09QX1BLQ1MxX0NIRUNLXzIiOjAsIlNTTF9PUF9TSU5HTEVfREhfVVNFIjoxMDQ4NTc2LCJTU0xfT1BfU0lOR0xFX0VDREhfVVNFIjo1MjQyODgsIlNTTF9PUF9TU0xFQVlfMDgwX0NMSUVOVF9ESF9CVUciOjEyOCwiU1NMX09QX1NTTFJFRjJfUkVVU0VfQ0VSVF9UWVBFX0JVRyI6MCwiU1NMX09QX1RMU19CTE9DS19QQURESU5HX0JVRyI6NTEyLCJTU0xfT1BfVExTX0Q1X0JVRyI6MjU2LCJTU0xfT1BfVExTX1JPTExCQUNLX0JVRyI6ODM4ODYwOCwiRU5HSU5FX01FVEhPRF9EU0EiOjIsIkVOR0lORV9NRVRIT0RfREgiOjQsIkVOR0lORV9NRVRIT0RfUkFORCI6OCwiRU5HSU5FX01FVEhPRF9FQ0RIIjoxNiwiRU5HSU5FX01FVEhPRF9FQ0RTQSI6MzIsIkVOR0lORV9NRVRIT0RfQ0lQSEVSUyI6NjQsIkVOR0lORV9NRVRIT0RfRElHRVNUUyI6MTI4LCJFTkdJTkVfTUVUSE9EX1NUT1JFIjoyNTYsIkVOR0lORV9NRVRIT0RfUEtFWV9NRVRIUyI6NTEyLCJFTkdJTkVfTUVUSE9EX1BLRVlfQVNOMV9NRVRIUyI6MTAyNCwiRU5HSU5FX01FVEhPRF9BTEwiOjY1NTM1LCJFTkdJTkVfTUVUSE9EX05PTkUiOjAsIkRIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUUiOjIsIkRIX0NIRUNLX1BfTk9UX1BSSU1FIjoxLCJESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SIjo0LCJESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SIjo4LCJOUE5fRU5BQkxFRCI6MSwiUlNBX1BLQ1MxX1BBRERJTkciOjEsIlJTQV9TU0xWMjNfUEFERElORyI6MiwiUlNBX05PX1BBRERJTkciOjMsIlJTQV9QS0NTMV9PQUVQX1BBRERJTkciOjQsIlJTQV9YOTMxX1BBRERJTkciOjUsIlJTQV9QS0NTMV9QU1NfUEFERElORyI6NiwiUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEIjoyLCJQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCI6NCwiUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQiOjYsIkZfT0siOjAsIlJfT0siOjQsIldfT0siOjIsIlhfT0siOjEsIlVWX1VEUF9SRVVTRUFERFIiOjR9Jyl9LCIuLi8uLi9ub2RlX21vZHVsZXMvZGlmZmllLWhlbGxtYW4vbGliL3ByaW1lcy5qc29uIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1KU09OLnBhcnNlKCd7Im1vZHAxIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDIiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2NTM4MWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTQiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTciOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkY2M0MDI0ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTgiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2FhYjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUzODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmIn19Jyl9LCIuLi8uLi9ub2RlX21vZHVsZXMvZWxsaXB0aWMvcGFja2FnZS5qc29uIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz17ckU6IjYuNi4xIn19LCIuLi8uLi9ub2RlX21vZHVsZXMvcGFyc2UtYXNuMS9hZXNpZC5qc29uIihtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIiOiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0xOTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFlcy0yNTYtY2ZiIn0nKX19LF9fd2VicGFja19tb2R1bGVfY2FjaGVfXz17fTtmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKXt2YXIgY2FjaGVkTW9kdWxlPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07aWYodm9pZCAwIT09Y2FjaGVkTW9kdWxlKXJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0czt2YXIgbW9kdWxlPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF09e2lkOm1vZHVsZUlkLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4gX193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cyxtb2R1bGUsbW9kdWxlLmV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyksbW9kdWxlLmxvYWRlZD0hMCxtb2R1bGUuZXhwb3J0c31fX3dlYnBhY2tfcmVxdWlyZV9fLm09X193ZWJwYWNrX21vZHVsZXNfXyxfX3dlYnBhY2tfcmVxdWlyZV9fLm49bW9kdWxlPT57dmFyIGdldHRlcj1tb2R1bGUmJm1vZHVsZS5fX2VzTW9kdWxlPygpPT5tb2R1bGUuZGVmYXVsdDooKT0+bW9kdWxlO3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLHthOmdldHRlcn0pLGdldHRlcn0sX193ZWJwYWNrX3JlcXVpcmVfXy5kPShleHBvcnRzLGRlZmluaXRpb24pPT57Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbilfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbixrZXkpJiYhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsa2V5KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsa2V5LHtlbnVtZXJhYmxlOiEwLGdldDpkZWZpbml0aW9uW2tleV19KX0sX193ZWJwYWNrX3JlcXVpcmVfXy5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2goZSl7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksX193ZWJwYWNrX3JlcXVpcmVfXy5vPShvYmoscHJvcCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmoscHJvcCksX193ZWJwYWNrX3JlcXVpcmVfXy5yPWV4cG9ydHM9PnsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cyxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxfX3dlYnBhY2tfcmVxdWlyZV9fLm5tZD1tb2R1bGU9Pihtb2R1bGUucGF0aHM9W10sbW9kdWxlLmNoaWxkcmVufHwobW9kdWxlLmNoaWxkcmVuPVtdKSxtb2R1bGUpLCgoKT0+e3ZhciBzY3JpcHRVcmw7X193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMmJihzY3JpcHRVcmw9X193ZWJwYWNrX3JlcXVpcmVfXy5nLmxvY2F0aW9uKyIiKTt2YXIgZG9jdW1lbnQ9X193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O2lmKCFzY3JpcHRVcmwmJmRvY3VtZW50JiYoZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmIlNDUklQVCI9PT1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnRhZ05hbWUudG9VcHBlckNhc2UoKSYmKHNjcmlwdFVybD1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksIXNjcmlwdFVybCkpe3ZhciBzY3JpcHRzPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTtpZihzY3JpcHRzLmxlbmd0aClmb3IodmFyIGk9c2NyaXB0cy5sZW5ndGgtMTtpPi0xJiYoIXNjcmlwdFVybHx8IS9eaHR0cChzPyk6Ly50ZXN0KHNjcmlwdFVybCkpOylzY3JpcHRVcmw9c2NyaXB0c1tpLS1dLnNyY31pZighc2NyaXB0VXJsKXRocm93IG5ldyBFcnJvcigiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXIiKTtzY3JpcHRVcmw9c2NyaXB0VXJsLnJlcGxhY2UoL15ibG9iOi8sIiIpLnJlcGxhY2UoLyMuKiQvLCIiKS5yZXBsYWNlKC9cPy4qJC8sIiIpLnJlcGxhY2UoL1wvW15cL10rJC8sIi8iKSxfX3dlYnBhY2tfcmVxdWlyZV9fLnA9c2NyaXB0VXJsfSkoKSxfX3dlYnBhY2tfcmVxdWlyZV9fLmI9c2VsZi5sb2NhdGlvbisiIjt2YXIgX193ZWJwYWNrX2V4cG9ydHNfXz17fTtyZXR1cm4oKCk9PnsidXNlIHN0cmljdCI7X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18se2RlZmF1bHQ6KCk9Pndvcmtlcn0pO3ZhciB3b3JrZXJUaHJlYWRzUG9seWZpbGxfbmFtZXNwYWNlT2JqZWN0PXt9O19fd2VicGFja19yZXF1aXJlX18ucih3b3JrZXJUaHJlYWRzUG9seWZpbGxfbmFtZXNwYWNlT2JqZWN0KSxfX3dlYnBhY2tfcmVxdWlyZV9fLmQod29ya2VyVGhyZWFkc1BvbHlmaWxsX25hbWVzcGFjZU9iamVjdCx7aXNNYWluVGhyZWFkOigpPT5pc01haW5UaHJlYWQscGFyZW50UG9ydDooKT0+cGFyZW50UG9ydCx3b3JrZXJEYXRhOigpPT53b3JrZXJEYXRhfSk7dmFyIGZzUG9seWZpbGxfbmFtZXNwYWNlT2JqZWN0PXt9O19fd2VicGFja19yZXF1aXJlX18ucihmc1BvbHlmaWxsX25hbWVzcGFjZU9iamVjdCksX193ZWJwYWNrX3JlcXVpcmVfXy5kKGZzUG9seWZpbGxfbmFtZXNwYWNlT2JqZWN0LHthY2Nlc3M6KCk9PmZzUG9seWZpbGxfYWNjZXNzLGFjY2Vzc1N5bmM6KCk9PmFjY2Vzc1N5bmMsY29uc3RhbnRzOigpPT5jb25zdGFudHMsY29weUZpbGU6KCk9PmZzUG9seWZpbGxfY29weUZpbGUsY29weUZpbGVTeW5jOigpPT5jb3B5RmlsZVN5bmMsZGVmYXVsdDooKT0+ZnNQb2x5ZmlsbCxleGlzdHNTeW5jOigpPT5leGlzdHNTeW5jLGxzdGF0OigpPT5mc1BvbHlmaWxsX2xzdGF0LGxzdGF0U3luYzooKT0+bHN0YXRTeW5jLG1rZGlyOigpPT5mc1BvbHlmaWxsX21rZGlyLG1rZGlyU3luYzooKT0+bWtkaXJTeW5jLHByb21pc2VzOigpPT5wcm9taXNlcyxyZWFkRmlsZTooKT0+ZnNQb2x5ZmlsbF9yZWFkRmlsZSxyZWFkRmlsZVN5bmM6KCk9PnJlYWRGaWxlU3luYyxyZWFkZGlyOigpPT5mc1BvbHlmaWxsX3JlYWRkaXIscmVhZGRpclN5bmM6KCk9PnJlYWRkaXJTeW5jLHJlYWxwYXRoOigpPT5mc1BvbHlmaWxsX3JlYWxwYXRoLHJlYWxwYXRoU3luYzooKT0+cmVhbHBhdGhTeW5jLHJtOigpPT5mc1BvbHlmaWxsX3JtLHJtU3luYzooKT0+cm1TeW5jLHJtZGlyOigpPT5mc1BvbHlmaWxsX3JtZGlyLHJtZGlyU3luYzooKT0+cm1kaXJTeW5jLHN0YXQ6KCk9PmZzUG9seWZpbGxfc3RhdCxzdGF0U3luYzooKT0+c3RhdFN5bmMsd3JpdGVGaWxlOigpPT5mc1BvbHlmaWxsX3dyaXRlRmlsZSx3cml0ZUZpbGVTeW5jOigpPT53cml0ZUZpbGVTeW5jfSk7dmFyIHV0b289X193ZWJwYWNrX3JlcXVpcmVfXygiLi9zcmMvdXRvby9pbmRleC5qcyIpLGJ1ZmZlcj0oX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N5c3RlbWpzL2Rpc3Qvc3lzdGVtLmpzIiksX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpKTtjbGFzcyBTdGF0c3tjb25zdHJ1Y3RvcihyYXcpe3RoaXMucmF3PXJhdyx0aGlzLmRldj0wLHRoaXMuaW5vPTAsdGhpcy5ubGluaz0xLHRoaXMudWlkPTAsdGhpcy5naWQ9MCx0aGlzLnJkZXY9MCx0aGlzLmJsa3NpemU9NDA5Nix0aGlzLmJsb2Nrcz0wLHRoaXMuc2l6ZT1yYXcuc2l6ZSx0aGlzLm1vZGU9ImRpcmVjdG9yeSI9PT1yYXcudHlwZT8xNjg3NzozMzE4OCx0aGlzLmF0aW1lTXM9cmF3LmF0aW1lTXN8fDAsdGhpcy5tdGltZU1zPXJhdy5tdGltZU1zfHwwLHRoaXMuY3RpbWVNcz1yYXcuY3RpbWVNc3x8MCx0aGlzLmJpcnRodGltZU1zPXJhdy5iaXJ0aHRpbWVNc3x8MCx0aGlzLmF0aW1lPW5ldyBEYXRlKHRoaXMuYXRpbWVNcyksdGhpcy5tdGltZT1uZXcgRGF0ZSh0aGlzLm10aW1lTXMpLHRoaXMuY3RpbWU9bmV3IERhdGUodGhpcy5jdGltZU1zKSx0aGlzLmJpcnRodGltZT1uZXcgRGF0ZSh0aGlzLmJpcnRodGltZU1zKX1pc0RpcmVjdG9yeSgpe3JldHVybiJkaXJlY3RvcnkiPT09dGhpcy5yYXcudHlwZX1pc0ZpbGUoKXtyZXR1cm4iZmlsZSI9PT10aGlzLnJhdy50eXBlfWlzU3ltYm9saWNMaW5rKCl7cmV0dXJuITF9aXNCbG9ja0RldmljZSgpe3JldHVybiExfWlzQ2hhcmFjdGVyRGV2aWNlKCl7cmV0dXJuITF9aXNGSUZPKCl7cmV0dXJuITF9aXNTb2NrZXQoKXtyZXR1cm4hMX19dmFyIHBhdGhfYnJvd3NlcmlmeT1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcGF0aC1icm93c2VyaWZ5L2luZGV4LmpzIikscGF0aF9icm93c2VyaWZ5X2RlZmF1bHQ9X193ZWJwYWNrX3JlcXVpcmVfXy5uKHBhdGhfYnJvd3NlcmlmeSk7Y29uc3QgZ2xvYmFsU2VsZj1zZWxmLHdvcmtlckRhdGE9bmV3IFByb3h5KHt9LHtnZXQoX3RhcmdldCxwcm9wKXt2YXIgX2E7cmV0dXJuIG51bGw9PT0oX2E9Z2xvYmFsU2VsZi53b3JrZXJEYXRhKXx8dm9pZCAwPT09X2E/dm9pZCAwOl9hW3Byb3BdfSxoYXM6KF90YXJnZXQscHJvcCk9Pmdsb2JhbFNlbGYud29ya2VyRGF0YSYmcHJvcCBpbiBnbG9iYWxTZWxmLndvcmtlckRhdGEsb3duS2V5czpfdGFyZ2V0PT5nbG9iYWxTZWxmLndvcmtlckRhdGE/UmVmbGVjdC5vd25LZXlzKGdsb2JhbFNlbGYud29ya2VyRGF0YSk6W10sZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOihfdGFyZ2V0LHByb3ApPT5nbG9iYWxTZWxmLndvcmtlckRhdGE/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWxTZWxmLndvcmtlckRhdGEscHJvcCk6dm9pZCAwfSksaXNNYWluVGhyZWFkPSExLHBhcmVudFBvcnQ9e3Bvc3RNZXNzYWdlOm1lc3NhZ2U9PnNlbGYucG9zdE1lc3NhZ2UobWVzc2FnZSksb246KGV2ZW50LGxpc3RlbmVyKT0+eyJtZXNzYWdlIj09PWV2ZW50JiYoc2VsZi5vbm1lc3NhZ2U9ZT0+bGlzdGVuZXIoZS5kYXRhKSl9LG9mZjooZXZlbnQsbGlzdGVuZXIpPT57Im1lc3NhZ2UiPT09ZXZlbnQmJihzZWxmLm9ubWVzc2FnZT1udWxsKX19O2Z1bmN0aW9uIHJlc29sdmVQYXRoKHApe3ZhciBfYSxfYjtjb25zdCBjd2Q9KG51bGw9PT0oX2I9bnVsbD09PShfYT1zZWxmLnByb2Nlc3MpfHx2b2lkIDA9PT1fYT92b2lkIDA6X2EuY3dkKXx8dm9pZCAwPT09X2I/dm9pZCAwOl9iLmNhbGwoX2EpKXx8KG51bGw9PXdvcmtlckRhdGE/dm9pZCAwOndvcmtlckRhdGEuY3dkKXx8Ii8iO3JldHVybiBwYXRoX2Jyb3dzZXJpZnlfZGVmYXVsdCgpLnJlc29sdmUoY3dkLHApfWZ1bmN0aW9uIGdldEZzKCl7Y29uc3QgZnM9d29ya2VyRGF0YS5mcztpZighZnMpdGhyb3cgbmV3IEVycm9yKCJGUyBub3QgaW5pdGlhbGl6ZWQiKTtyZXR1cm4gZnN9ZnVuY3Rpb24gdHJhbnNsYXRlRXJyb3IoZXJyb3IscGF0aCxzeXNjYWxsKXtjb25zdCBtZXNzYWdlPWVycm9yLm1lc3NhZ2V8fFN0cmluZyhlcnJvcik7aWYobWVzc2FnZS5pbmNsdWRlcygoMCx1dG9vLnJ2KSgpKSl7Y29uc3QgZT1uZXcgRXJyb3IoYEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSwgJHtzeXNjYWxsfSAnJHtwYXRofSdgKTtyZXR1cm4gZS5lcnJubz0tMixlLmNvZGU9IkVOT0VOVCIsZS5zeXNjYWxsPXN5c2NhbGwsZS5wYXRoPXBhdGgsZX1pZihtZXNzYWdlLmluY2x1ZGVzKCgwLHV0b28uS0wpKCkpKXtjb25zdCBlPW5ldyBFcnJvcihgRUlTRElSOiBpbGxlZ2FsIG9wZXJhdGlvbiBvbiBhIGRpcmVjdG9yeSwgJHtzeXNjYWxsfSAnJHtwYXRofSdgKTtyZXR1cm4gZS5lcnJubz0tMjEsZS5jb2RlPSJFSVNESVIiLGUuc3lzY2FsbD1zeXNjYWxsLGUucGF0aD1wYXRoLGV9aWYobWVzc2FnZS5pbmNsdWRlcygoMCx1dG9vLlU3KSgpKSl7Y29uc3QgZT1uZXcgRXJyb3IoYEVBR0FJTjogcmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUsICR7c3lzY2FsbH0gJyR7cGF0aH0nYCk7cmV0dXJuIGUuZXJybm89LTExLGUuY29kZT0iRUFHQUlOIixlLnN5c2NhbGw9c3lzY2FsbCxlLnBhdGg9cGF0aCxlfWlmKG1lc3NhZ2UuaW5jbHVkZXMoKDAsdXRvby5EUikoKSkpe2NvbnN0IGU9bmV3IEVycm9yKGBFQUNDRVM6IHBlcm1pc3Npb24gZGVuaWVkLCAke3N5c2NhbGx9ICcke3BhdGh9J2ApO3JldHVybiBlLmVycm5vPS0xMyxlLmNvZGU9IkVBQ0NFUyIsZS5zeXNjYWxsPXN5c2NhbGwsZS5wYXRoPXBhdGgsZX1pZihtZXNzYWdlLmluY2x1ZGVzKCgwLHV0b28uUjYpKCkpKXtjb25zdCBlPW5ldyBFcnJvcihgRU5PU1BDOiBubyBzcGFjZSBsZWZ0IG9uIGRldmljZSwgJHtzeXNjYWxsfSAnJHtwYXRofSdgKTtyZXR1cm4gZS5lcnJubz0tMjgsZS5jb2RlPSJFTk9TUEMiLGUuc3lzY2FsbD1zeXNjYWxsLGUucGF0aD1wYXRoLGV9aWYobWVzc2FnZS5pbmNsdWRlcygoMCx1dG9vLld2KSgpKSl7Y29uc3QgZT1uZXcgRXJyb3IoYEVJTlZBTDogaW52YWxpZCBhcmd1bWVudCwgJHtzeXNjYWxsfSAnJHtwYXRofSdgKTtyZXR1cm4gZS5lcnJubz0tMjIsZS5jb2RlPSJFSU5WQUwiLGUuc3lzY2FsbD1zeXNjYWxsLGUucGF0aD1wYXRoLGV9aWYobWVzc2FnZS5pbmNsdWRlcygoMCx1dG9vLmg4KSgpKSl7Y29uc3QgZT1uZXcgRXJyb3IoYEVJTlRSOiBpbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCwgJHtzeXNjYWxsfSAnJHtwYXRofSdgKTtyZXR1cm4gZS5lcnJubz0tNCxlLmNvZGU9IkVJTlRSIixlLnN5c2NhbGw9c3lzY2FsbCxlLnBhdGg9cGF0aCxlfXJldHVybiBlcnJvcn1jb25zdCBwcm9taXNlcz17cmVhZEZpbGU6YXN5bmMocCxvcHRpb25zKT0+e2NvbnN0IGVuY29kaW5nPSJ1dGY4Ij09PW9wdGlvbnN8fCJ1dGYtOCI9PT1vcHRpb25zfHwidXRmOCI9PT0obnVsbD09b3B0aW9ucz92b2lkIDA6b3B0aW9ucy5lbmNvZGluZyl8fCJ1dGYtOCI9PT0obnVsbD09b3B0aW9ucz92b2lkIDA6b3B0aW9ucy5lbmNvZGluZyk/InV0ZjgiOnZvaWQgMCxmcz1nZXRGcygpLHJlc29sdmVkUGF0aD1yZXNvbHZlUGF0aChwKTt0cnl7Y29uc3QgZGF0YT1hd2FpdChlbmNvZGluZz9mcy5yZWFkVG9TdHJpbmcocmVzb2x2ZWRQYXRoKTpmcy5yZWFkKHJlc29sdmVkUGF0aCkpO3JldHVybiBlbmNvZGluZz9kYXRhOmJ1ZmZlci5CdWZmZXIuZnJvbShkYXRhKX1jYXRjaChlKXt0aHJvdyB0cmFuc2xhdGVFcnJvcihlLHAsIm9wZW4iKX19LHdyaXRlRmlsZTphc3luYyhwLGRhdGEsb3B0aW9ucyk9Pntjb25zdCBmcz1nZXRGcygpLHJlc29sdmVkUGF0aD1yZXNvbHZlUGF0aChwKTt0cnl7InN0cmluZyI9PXR5cGVvZiBkYXRhP2F3YWl0IGZzLndyaXRlU3RyaW5nKHJlc29sdmVkUGF0aCxkYXRhKTphd2FpdCBmcy53cml0ZShyZXNvbHZlZFBhdGgsZGF0YSl9Y2F0Y2goZSl7dGhyb3cgdHJhbnNsYXRlRXJyb3IoZSxwLCJvcGVuIil9fSxyZWFkZGlyOmFzeW5jKHAsb3B0aW9ucyk9Pntjb25zdCByZXNvbHZlZFBhdGg9cmVzb2x2ZVBhdGgocCk7dHJ5e3JldHVybihhd2FpdCBnZXRGcygpLnJlYWREaXIocmVzb2x2ZWRQYXRoKSkubWFwKGU9Pntjb25zdCBqc29uPWUudG9KU09OKCk7cmV0dXJuKG51bGw9PW9wdGlvbnM/dm9pZCAwOm9wdGlvbnMud2l0aEZpbGVUeXBlcyk/e25hbWU6anNvbi5uYW1lLGlzRmlsZTooKT0+ImZpbGUiPT09anNvbi50eXBlLGlzRGlyZWN0b3J5OigpPT4iZGlyZWN0b3J5Ij09PWpzb24udHlwZSxpc1N5bWJvbGljTGluazooKT0+ITF9Ompzb24ubmFtZX0pfWNhdGNoKGUpe3Rocm93IHRyYW5zbGF0ZUVycm9yKGUscCwic2NhbmRpciIpfX0sbWtkaXI6YXN5bmMocCxvcHRpb25zKT0+e2NvbnN0IGZzPWdldEZzKCkscmVzb2x2ZWRQYXRoPXJlc29sdmVQYXRoKHApO3RyeXsobnVsbD09b3B0aW9ucz92b2lkIDA6b3B0aW9ucy5yZWN1cnNpdmUpP2F3YWl0IGZzLmNyZWF0ZURpckFsbChyZXNvbHZlZFBhdGgpOmF3YWl0IGZzLmNyZWF0ZURpcihyZXNvbHZlZFBhdGgpfWNhdGNoKGUpe3Rocm93IHRyYW5zbGF0ZUVycm9yKGUscCwibWtkaXIiKX19LHJtOmFzeW5jKHAsb3B0aW9ucyk9Pntjb25zdCBmcz1nZXRGcygpLHJlc29sdmVkUGF0aD1yZXNvbHZlUGF0aChwKTt0cnl7Y29uc3QgbWV0YWRhdGE9YXdhaXQgZnMubWV0YWRhdGEocmVzb2x2ZWRQYXRoKTsiZmlsZSI9PT1tZXRhZGF0YS50b0pTT04oKS50eXBlP2F3YWl0IGZzLnJlbW92ZUZpbGUocmVzb2x2ZWRQYXRoKTphd2FpdCBmcy5yZW1vdmVEaXIocmVzb2x2ZWRQYXRoLCEhKG51bGw9PW9wdGlvbnM/dm9pZCAwOm9wdGlvbnMucmVjdXJzaXZlKSl9Y2F0Y2goZSl7dGhyb3cgdHJhbnNsYXRlRXJyb3IoZSxwLCJybSIpfX0scm1kaXI6YXN5bmMocCxvcHRpb25zKT0+e2NvbnN0IHJlc29sdmVkUGF0aD1yZXNvbHZlUGF0aChwKTt0cnl7cmV0dXJuIGF3YWl0IGdldEZzKCkucmVtb3ZlRGlyKHJlc29sdmVkUGF0aCwhIShudWxsPT1vcHRpb25zP3ZvaWQgMDpvcHRpb25zLnJlY3Vyc2l2ZSkpfWNhdGNoKGUpe3Rocm93IHRyYW5zbGF0ZUVycm9yKGUscCwicm1kaXIiKX19LGNvcHlGaWxlOmFzeW5jKHNyYyxkc3QpPT57dHJ5e3JldHVybiBhd2FpdCBnZXRGcygpLmNvcHlGaWxlKHJlc29sdmVQYXRoKHNyYykscmVzb2x2ZVBhdGgoZHN0KSl9Y2F0Y2goZSl7dGhyb3cgdHJhbnNsYXRlRXJyb3IoZSxzcmMsImNvcHlmaWxlIil9fSxzdGF0OmFzeW5jIHA9Pntjb25zdCByZXNvbHZlZFBhdGg9cmVzb2x2ZVBhdGgocCk7dHJ5e2NvbnN0IGpzb249KGF3YWl0IGdldEZzKCkubWV0YWRhdGEocmVzb2x2ZWRQYXRoKSkudG9KU09OKCk7cmV0dXJuIG5ldyBTdGF0cyh7dHlwZTpqc29uLnR5cGUsc2l6ZTpOdW1iZXIoanNvbi5maWxlX3NpemV8fDApfSl9Y2F0Y2goZSl7dGhyb3cgdHJhbnNsYXRlRXJyb3IoZSxwLCJzdGF0Iil9fSxsc3RhdDphc3luYyBwPT57Y29uc3QgcmVzb2x2ZWRQYXRoPXJlc29sdmVQYXRoKHApO3RyeXtjb25zdCBqc29uPShhd2FpdCBnZXRGcygpLm1ldGFkYXRhKHJlc29sdmVkUGF0aCkpLnRvSlNPTigpO3JldHVybiBuZXcgU3RhdHMoe3R5cGU6anNvbi50eXBlLHNpemU6TnVtYmVyKGpzb24uZmlsZV9zaXplfHwwKX0pfWNhdGNoKGUpe3Rocm93IHRyYW5zbGF0ZUVycm9yKGUscCwibHN0YXQiKX19LHJlYWxwYXRoOmFzeW5jIHA9PnAsYWNjZXNzOmFzeW5jKHAsbW9kZSk9Pntjb25zdCByZXNvbHZlZFBhdGg9cmVzb2x2ZVBhdGgocCk7dHJ5e2F3YWl0IGdldEZzKCkubWV0YWRhdGEocmVzb2x2ZWRQYXRoKX1jYXRjaChlKXt0aHJvdyB0cmFuc2xhdGVFcnJvcihlLHAsImFjY2VzcyIpfX19LHRleHREZWNvZGVyPShwcm9taXNlcy5yZWFkRmlsZSxwcm9taXNlcy53cml0ZUZpbGUscHJvbWlzZXMucmVhZGRpcixwcm9taXNlcy5ta2Rpcixwcm9taXNlcy5ybSxwcm9taXNlcy5ybWRpcixwcm9taXNlcy5jb3B5RmlsZSxwcm9taXNlcy5zdGF0LHByb21pc2VzLmxzdGF0LHByb21pc2VzLnJlYWxwYXRoLHByb21pc2VzLmFjY2VzcyxuZXcgVGV4dERlY29kZXIpO2Z1bmN0aW9uIHJlYWRGaWxlU3luYyhwYXRoLG9wdGlvbnMpe2NvbnN0IGZzPWdldEZzKCkscmVzb2x2ZWRQYXRoPXJlc29sdmVQYXRoKHBhdGgpO3RyeXtjb25zdCByZXN1bHQ9ZnMucmVhZFN5bmMocmVzb2x2ZWRQYXRoKTtyZXR1cm4idXRmOCI9PT1vcHRpb25zfHwidXRmLTgiPT09b3B0aW9uc3x8b3B0aW9ucyYmKCJ1dGY4Ij09PW9wdGlvbnMuZW5jb2Rpbmd8fCJ1dGYtOCI9PT1vcHRpb25zLmVuY29kaW5nKT90ZXh0RGVjb2Rlci5kZWNvZGUocmVzdWx0KTpidWZmZXIuQnVmZmVyLmZyb20ocmVzdWx0KX1jYXRjaChlKXt0aHJvdyB0cmFuc2xhdGVFcnJvcihlLHBhdGgsIm9wZW4iKX19ZnVuY3Rpb24gcmVhZGRpclN5bmMocGF0aCxvcHRpb25zKXtjb25zdCBmcz1nZXRGcygpLHJlc29sdmVkUGF0aD1yZXNvbHZlUGF0aChwYXRoKTt0cnl7Y29uc3QgZW50cmllcz1mcy5yZWFkRGlyU3luYyhyZXNvbHZlZFBhdGgpO3JldHVybihudWxsPT1vcHRpb25zP3ZvaWQgMDpvcHRpb25zLndpdGhGaWxlVHlwZXMpP2VudHJpZXMubWFwKGU9Pih7bmFtZTplLm5hbWUsaXNGaWxlOigpPT4iZmlsZSI9PT1lLnR5cGUsaXNEaXJlY3Rvcnk6KCk9PiJkaXJlY3RvcnkiPT09ZS50eXBlLGlzU3ltYm9saWNMaW5rOigpPT4hMX0pKTplbnRyaWVzLm1hcChlPT5lLm5hbWUpfWNhdGNoKGUpe3Rocm93IHRyYW5zbGF0ZUVycm9yKGUscGF0aCwic2NhbmRpciIpfX1mdW5jdGlvbiB3cml0ZUZpbGVTeW5jKHBhdGgsZGF0YSxvcHRpb25zKXtjb25zdCBmcz1nZXRGcygpLHJlc29sdmVkUGF0aD1yZXNvbHZlUGF0aChwYXRoKTt0cnl7bGV0IGNvbnRlbnQ7Y29udGVudD0ic3RyaW5nIj09dHlwZW9mIGRhdGE/KG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGRhdGEpOmRhdGEsZnMud3JpdGVTeW5jKHJlc29sdmVkUGF0aCxjb250ZW50KX1jYXRjaChlKXt0aHJvdyB0cmFuc2xhdGVFcnJvcihlLHBhdGgsIm9wZW4iKX19ZnVuY3Rpb24gbWtkaXJTeW5jKHBhdGgsb3B0aW9ucyl7Y29uc3QgZnM9Z2V0RnMoKSxyZXNvbHZlZFBhdGg9cmVzb2x2ZVBhdGgocGF0aCk7dHJ5eyhudWxsPT1vcHRpb25zP3ZvaWQgMDpvcHRpb25zLnJlY3Vyc2l2ZSl8fCExP2ZzLmNyZWF0ZURpckFsbFN5bmMocmVzb2x2ZWRQYXRoKTpmcy5jcmVhdGVEaXJTeW5jKHJlc29sdmVkUGF0aCl9Y2F0Y2goZSl7dGhyb3cgdHJhbnNsYXRlRXJyb3IoZSxwYXRoLCJta2RpciIpfX1mdW5jdGlvbiBybVN5bmMocGF0aCxvcHRpb25zKXtjb25zdCBmcz1nZXRGcygpLHJlc29sdmVkUGF0aD1yZXNvbHZlUGF0aChwYXRoKTt0cnl7KG51bGw9PW9wdGlvbnM/dm9pZCAwOm9wdGlvbnMucmVjdXJzaXZlKXx8ITE/ZnMucmVtb3ZlRGlyU3luYyhyZXNvbHZlZFBhdGgsITApOmZzLnJlbW92ZUZpbGVTeW5jKHJlc29sdmVkUGF0aCl9Y2F0Y2goZSl7dGhyb3cgdHJhbnNsYXRlRXJyb3IoZSxwYXRoLCJybSIpfX1mdW5jdGlvbiBybWRpclN5bmMocGF0aCxvcHRpb25zKXtjb25zdCBmcz1nZXRGcygpLHJlc29sdmVkUGF0aD1yZXNvbHZlUGF0aChwYXRoKTt0cnl7Y29uc3QgcmVjdXJzaXZlPShudWxsPT1vcHRpb25zP3ZvaWQgMDpvcHRpb25zLnJlY3Vyc2l2ZSl8fCExO2ZzLnJlbW92ZURpclN5bmMocmVzb2x2ZWRQYXRoLHJlY3Vyc2l2ZSl9Y2F0Y2goZSl7dGhyb3cgdHJhbnNsYXRlRXJyb3IoZSxwYXRoLCJybWRpciIpfX1mdW5jdGlvbiBjb3B5RmlsZVN5bmMoc3JjLGRzdCl7Y29uc3QgZnM9Z2V0RnMoKTt0cnl7ZnMuY29weUZpbGVTeW5jKHJlc29sdmVQYXRoKHNyYykscmVzb2x2ZVBhdGgoZHN0KSl9Y2F0Y2goZSl7dGhyb3cgdHJhbnNsYXRlRXJyb3IoZSxzcmMsImNvcHlmaWxlIil9fWZ1bmN0aW9uIHN0YXRTeW5jKHApe2NvbnN0IGZzPWdldEZzKCkscmVzb2x2ZWRQYXRoPXJlc29sdmVQYXRoKHApO3RyeXtjb25zdCBtZXRhZGF0YT1mcy5tZXRhZGF0YVN5bmMocmVzb2x2ZWRQYXRoKTtsZXQgdHlwZSxzaXplO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBtZXRhZGF0YS50b0pTT04pe2NvbnN0IGpzb249bWV0YWRhdGEudG9KU09OKCk7dHlwZT1qc29uLnR5cGUsc2l6ZT1qc29uLmZpbGVfc2l6ZX1lbHNlIHR5cGU9bWV0YWRhdGEudHlwZSxzaXplPW1ldGFkYXRhLmZpbGVfc2l6ZTtyZXR1cm4gbmV3IFN0YXRzKHt0eXBlOiJkaXJlY3RvcnkiPT09dHlwZT8iZGlyZWN0b3J5IjoiZmlsZSIsc2l6ZTpOdW1iZXIoc2l6ZXx8MCksYXRpbWVNczpEYXRlLm5vdygpLG10aW1lTXM6RGF0ZS5ub3coKSxjdGltZU1zOkRhdGUubm93KCksYmlydGh0aW1lTXM6RGF0ZS5ub3coKX0pfWNhdGNoKGUpe3Rocm93IHRyYW5zbGF0ZUVycm9yKGUscCwic3RhdCIpfX1mdW5jdGlvbiBsc3RhdFN5bmMocCl7Y29uc3QgZnM9Z2V0RnMoKSxyZXNvbHZlZFBhdGg9cmVzb2x2ZVBhdGgocCk7dHJ5e2NvbnN0IG1ldGFkYXRhPWZzLm1ldGFkYXRhU3luYyhyZXNvbHZlZFBhdGgpO2xldCB0eXBlLHNpemU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG1ldGFkYXRhLnRvSlNPTil7Y29uc3QganNvbj1tZXRhZGF0YS50b0pTT04oKTt0eXBlPWpzb24udHlwZSxzaXplPWpzb24uZmlsZV9zaXplfWVsc2UgdHlwZT1tZXRhZGF0YS50eXBlLHNpemU9bWV0YWRhdGEuZmlsZV9zaXplO3JldHVybiBuZXcgU3RhdHMoe3R5cGU6ImRpcmVjdG9yeSI9PT10eXBlPyJkaXJlY3RvcnkiOiJmaWxlIixzaXplOk51bWJlcihzaXplfHwwKSxhdGltZU1zOkRhdGUubm93KCksbXRpbWVNczpEYXRlLm5vdygpLGN0aW1lTXM6RGF0ZS5ub3coKSxiaXJ0aHRpbWVNczpEYXRlLm5vdygpfSl9Y2F0Y2goZSl7dGhyb3cgdHJhbnNsYXRlRXJyb3IoZSxwLCJsc3RhdCIpfX1mdW5jdGlvbiByZWFscGF0aFN5bmMocCl7cmV0dXJuIHB9ZnVuY3Rpb24gYWNjZXNzU3luYyhwLG1vZGUpe2NvbnN0IGZzPWdldEZzKCkscmVzb2x2ZWRQYXRoPXJlc29sdmVQYXRoKHApO3RyeXtmcy5tZXRhZGF0YVN5bmMocmVzb2x2ZWRQYXRoKX1jYXRjaChlKXt0aHJvdyB0cmFuc2xhdGVFcnJvcihlLHAsImFjY2VzcyIpfX1mdW5jdGlvbiBleGlzdHNTeW5jKHBhdGgpe3RyeXtyZXR1cm4gc3RhdFN5bmMocGF0aCksITB9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uIGZzUG9seWZpbGxfcmVhZEZpbGUocGF0aCxvcHRpb25zLGNiKXsiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucyYmKGNiPW9wdGlvbnMsb3B0aW9ucz17fSk7Y29uc3QgZW5jb2Rpbmc9InV0ZjgiPT09b3B0aW9uc3x8InV0Zi04Ij09PW9wdGlvbnN8fCJ1dGY4Ij09PShudWxsPT1vcHRpb25zP3ZvaWQgMDpvcHRpb25zLmVuY29kaW5nKXx8InV0Zi04Ij09PShudWxsPT1vcHRpb25zP3ZvaWQgMDpvcHRpb25zLmVuY29kaW5nKT8idXRmOCI6dm9pZCAwLHJlc29sdmVkUGF0aD1yZXNvbHZlUGF0aChwYXRoKSxmcz1nZXRGcygpOyhlbmNvZGluZz9mcy5yZWFkVG9TdHJpbmcocmVzb2x2ZWRQYXRoKTpmcy5yZWFkKHJlc29sdmVkUGF0aCkpLnRoZW4oZGF0YT0+Y2IobnVsbCxlbmNvZGluZz9kYXRhOmJ1ZmZlci5CdWZmZXIuZnJvbShkYXRhKSksZT0+Y2IodHJhbnNsYXRlRXJyb3IoZSxwYXRoLCJvcGVuIikpKX1mdW5jdGlvbiBmc1BvbHlmaWxsX3JlYWRkaXIocGF0aCxvcHRpb25zLGNiKXsiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucyYmKGNiPW9wdGlvbnMsb3B0aW9ucz17fSksZ2V0RnMoKS5yZWFkRGlyKHJlc29sdmVQYXRoKHBhdGgpKS50aGVuKGVudHJpZXM9Pntjb25zdCByZXN1bHQ9ZW50cmllcy5tYXAoZT0+e2NvbnN0IGpzb249ZS50b0pTT04oKTtyZXR1cm4obnVsbD09b3B0aW9ucz92b2lkIDA6b3B0aW9ucy53aXRoRmlsZVR5cGVzKT97bmFtZTpqc29uLm5hbWUsaXNGaWxlOigpPT4iZmlsZSI9PT1qc29uLnR5cGUsaXNEaXJlY3Rvcnk6KCk9PiJkaXJlY3RvcnkiPT09anNvbi50eXBlLGlzU3ltYm9saWNMaW5rOigpPT4hMX06anNvbi5uYW1lfSk7Y2IobnVsbCxyZXN1bHQpfSxlPT5jYih0cmFuc2xhdGVFcnJvcihlLHBhdGgsInNjYW5kaXIiKSkpfWZ1bmN0aW9uIGZzUG9seWZpbGxfd3JpdGVGaWxlKHBhdGgsZGF0YSxvcHRpb25zLGNiKXsiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucyYmKGNiPW9wdGlvbnMsb3B0aW9ucz17fSk7Y29uc3QgcmVzb2x2ZWRQYXRoPXJlc29sdmVQYXRoKHBhdGgpLGZzPWdldEZzKCk7KCJzdHJpbmciPT10eXBlb2YgZGF0YT9mcy53cml0ZVN0cmluZyhyZXNvbHZlZFBhdGgsZGF0YSk6ZnMud3JpdGUocmVzb2x2ZWRQYXRoLGRhdGEpKS50aGVuKCgpPT5jYihudWxsKSxlPT5jYih0cmFuc2xhdGVFcnJvcihlLHBhdGgsIm9wZW4iKSkpfWZ1bmN0aW9uIGZzUG9seWZpbGxfbWtkaXIocGF0aCxvcHRpb25zLGNiKXsiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucyYmKGNiPW9wdGlvbnMsb3B0aW9ucz17fSk7Y29uc3QgcmVzb2x2ZWRQYXRoPXJlc29sdmVQYXRoKHBhdGgpLGZzPWdldEZzKCk7KChudWxsPT1vcHRpb25zP3ZvaWQgMDpvcHRpb25zLnJlY3Vyc2l2ZSk/ZnMuY3JlYXRlRGlyQWxsKHJlc29sdmVkUGF0aCk6ZnMuY3JlYXRlRGlyKHJlc29sdmVkUGF0aCkpLnRoZW4oKCk9PmNiKG51bGwpLGU9PmNiKHRyYW5zbGF0ZUVycm9yKGUscGF0aCwibWtkaXIiKSkpfWZ1bmN0aW9uIGZzUG9seWZpbGxfcm0ocGF0aCxvcHRpb25zLGNiKXsiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucyYmKGNiPW9wdGlvbnMsb3B0aW9ucz17fSk7Y29uc3QgcmVzb2x2ZWRQYXRoPXJlc29sdmVQYXRoKHBhdGgpLGZzPWdldEZzKCk7ZnMubWV0YWRhdGEocmVzb2x2ZWRQYXRoKS50aGVuKG1ldGFkYXRhPT4iZmlsZSI9PT1tZXRhZGF0YS50b0pTT04oKS50eXBlP2ZzLnJlbW92ZUZpbGUocmVzb2x2ZWRQYXRoKTpmcy5yZW1vdmVEaXIocmVzb2x2ZWRQYXRoLCEhKG51bGw9PW9wdGlvbnM/dm9pZCAwOm9wdGlvbnMucmVjdXJzaXZlKSkpLnRoZW4oKCk9PmNiKG51bGwpLGU9PmNiKHRyYW5zbGF0ZUVycm9yKGUscGF0aCwicm0iKSkpfWZ1bmN0aW9uIGZzUG9seWZpbGxfcm1kaXIocGF0aCxvcHRpb25zLGNiKXsiZnVuY3Rpb24iPT10eXBlb2Ygb3B0aW9ucyYmKGNiPW9wdGlvbnMsb3B0aW9ucz17fSksZ2V0RnMoKS5yZW1vdmVEaXIocmVzb2x2ZVBhdGgocGF0aCksISEobnVsbD09b3B0aW9ucz92b2lkIDA6b3B0aW9ucy5yZWN1cnNpdmUpKS50aGVuKCgpPT5jYihudWxsKSxlPT5jYih0cmFuc2xhdGVFcnJvcihlLHBhdGgsInJtZGlyIikpKX1mdW5jdGlvbiBmc1BvbHlmaWxsX2NvcHlGaWxlKHNyYyxkc3QsY2Ipe2dldEZzKCkuY29weUZpbGUocmVzb2x2ZVBhdGgoc3JjKSxyZXNvbHZlUGF0aChkc3QpKS50aGVuKCgpPT5jYihudWxsKSxlPT5jYih0cmFuc2xhdGVFcnJvcihlLHNyYywiY29weWZpbGUiKSkpfWZ1bmN0aW9uIGZzUG9seWZpbGxfc3RhdChwLGNiKXtnZXRGcygpLm1ldGFkYXRhKHJlc29sdmVQYXRoKHApKS50aGVuKG1ldGFkYXRhPT57Y29uc3QganNvbj1tZXRhZGF0YS50b0pTT04oKTtjYihudWxsLG5ldyBTdGF0cyh7dHlwZTpqc29uLnR5cGUsc2l6ZTpOdW1iZXIoanNvbi5maWxlX3NpemV8fDApfSkpfSxlPT5jYih0cmFuc2xhdGVFcnJvcihlLHAsInN0YXQiKSkpfWZ1bmN0aW9uIGZzUG9seWZpbGxfbHN0YXQocCxjYil7Z2V0RnMoKS5tZXRhZGF0YShyZXNvbHZlUGF0aChwKSkudGhlbihtZXRhZGF0YT0+e2NvbnN0IGpzb249bWV0YWRhdGEudG9KU09OKCk7Y2IobnVsbCxuZXcgU3RhdHMoe3R5cGU6anNvbi50eXBlLHNpemU6TnVtYmVyKGpzb24uZmlsZV9zaXplfHwwKX0pKX0sZT0+Y2IodHJhbnNsYXRlRXJyb3IoZSxwLCJsc3RhdCIpKSl9ZnVuY3Rpb24gZnNQb2x5ZmlsbF9yZWFscGF0aChwLGNiKXtjYihudWxsLHApfWZ1bmN0aW9uIGZzUG9seWZpbGxfYWNjZXNzKHAsbW9kZSxjYil7ImZ1bmN0aW9uIj09dHlwZW9mIG1vZGUmJihjYj1tb2RlLG1vZGU9MCksZ2V0RnMoKS5tZXRhZGF0YShyZXNvbHZlUGF0aChwKSkudGhlbigoKT0+e2NiJiZjYihudWxsKX0sZT0+e2NiJiZjYih0cmFuc2xhdGVFcnJvcihlLHAsImFjY2VzcyIpKX0pfWNvbnN0IGNvbnN0YW50cz17Rl9PSzowLFJfT0s6NCxXX09LOjIsWF9PSzoxfSxmc1BvbHlmaWxsPXtyZWFkRmlsZTpmc1BvbHlmaWxsX3JlYWRGaWxlLHJlYWRGaWxlU3luYyxyZWFkZGlyOmZzUG9seWZpbGxfcmVhZGRpcixyZWFkZGlyU3luYyx3cml0ZUZpbGU6ZnNQb2x5ZmlsbF93cml0ZUZpbGUsd3JpdGVGaWxlU3luYyxta2Rpcjpmc1BvbHlmaWxsX21rZGlyLG1rZGlyU3luYyxybTpmc1BvbHlmaWxsX3JtLHJtU3luYyxybWRpcjpmc1BvbHlmaWxsX3JtZGlyLHJtZGlyU3luYyxjb3B5RmlsZTpmc1BvbHlmaWxsX2NvcHlGaWxlLGNvcHlGaWxlU3luYyxzdGF0OmZzUG9seWZpbGxfc3RhdCxzdGF0U3luYyxsc3RhdDpmc1BvbHlmaWxsX2xzdGF0LGxzdGF0U3luYyxyZWFscGF0aDpmc1BvbHlmaWxsX3JlYWxwYXRoLHJlYWxwYXRoU3luYyxhY2Nlc3M6ZnNQb2x5ZmlsbF9hY2Nlc3MsYWNjZXNzU3luYyxleGlzdHNTeW5jLHByb21pc2VzLGNvbnN0YW50c30sbm9kZVBvbHlGaWxsc19idWZmZXI9X193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIpO3NlbGYuQnVmZmVyPW5vZGVQb2x5RmlsbHNfYnVmZmVyLkJ1ZmZlcjtjb25zdCBwcm9jZXNzPV9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9wcm94eS9wcm9jZXNzLmpzIiksb3JpZ2luYWxDd2Q9cHJvY2Vzcy5jd2Q7cHJvY2Vzcy5jd2Q9KCk9Pnt2YXIgX2E7cmV0dXJuKG51bGw9PT0oX2E9d29ya2VyRGF0YSl8fHZvaWQgMD09PV9hP3ZvaWQgMDpfYS5jd2QpfHwobnVsbD09b3JpZ2luYWxDd2Q/dm9pZCAwOm9yaWdpbmFsQ3dkKCkpfHwiLyJ9LHByb2Nlc3MudmVyc2lvbnN8fChwcm9jZXNzLnZlcnNpb25zPXt9KSxwcm9jZXNzLnZlcnNpb25zLm5vZGV8fChwcm9jZXNzLnZlcnNpb25zLm5vZGU9IjI0LjAuMCIpLHNlbGYucHJvY2Vzcz1wcm9jZXNzLHNlbGYuZ2xvYmFsPXNlbGY7Y29uc3QgcGF0aD1fX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvcGF0aC1icm93c2VyaWZ5L2luZGV4LmpzIiksb3JpZ2luYWxSZXNvbHZlPXBhdGgucmVzb2x2ZTtwYXRoLnJlc29sdmU9KC4uLmFyZ3MpPT57dmFyIF9hO2NvbnN0IGN3ZD0obnVsbD09PShfYT13b3JrZXJEYXRhKXx8dm9pZCAwPT09X2E/dm9pZCAwOl9hLmN3ZCl8fCIvIjtyZXR1cm4gb3JpZ2luYWxSZXNvbHZlKGN3ZCwuLi5hcmdzKX07Y29uc3Qgd29ya2VyVGhyZWFkc1dpdGhXb3JrZXJEYXRhPXsuLi53b3JrZXJUaHJlYWRzUG9seWZpbGxfbmFtZXNwYWNlT2JqZWN0LGdldCB3b3JrZXJEYXRhKCl7cmV0dXJuIHdvcmtlckRhdGF9LGdldCB0aHJlYWRJZCgpe3ZhciBfYTtyZXR1cm4obnVsbD09PShfYT13b3JrZXJEYXRhKXx8dm9pZCAwPT09X2E/dm9pZCAwOl9hLnRocmVhZElkKXx8MH19LG5vZGVQb2x5RmlsbHM9e2dldCBhc3NlcnQoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2Fzc2VydC9idWlsZC9hc3NlcnQuanMiKX0sZ2V0Im5vZGU6YXNzZXJ0Iigpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvYXNzZXJ0L2J1aWxkL2Fzc2VydC5qcyIpfSxidWZmZXI6bm9kZVBvbHlGaWxsc19idWZmZXIsIm5vZGU6YnVmZmVyIjpub2RlUG9seUZpbGxzX2J1ZmZlcixnZXQgY2hpbGRfcHJvY2Vzcygpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvbW9jay9lbXB0eS5qcyIpfSxnZXQibm9kZTpjaGlsZF9wcm9jZXNzIigpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvbW9jay9lbXB0eS5qcyIpfSxnZXQgY2x1c3Rlcigpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvbW9jay9lbXB0eS5qcyIpfSxnZXQibm9kZTpjbHVzdGVyIigpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvbW9jay9lbXB0eS5qcyIpfSxnZXQgY29uc29sZSgpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY29uc29sZS1icm93c2VyaWZ5L2luZGV4LmpzIil9LGdldCJub2RlOmNvbnNvbGUiKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9jb25zb2xlLWJyb3dzZXJpZnkvaW5kZXguanMiKX0sZ2V0IGNvbnN0YW50cygpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY29uc3RhbnRzLWJyb3dzZXJpZnkvY29uc3RhbnRzLmpzb24iKX0sZ2V0Im5vZGU6Y29uc3RhbnRzIigpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY29uc3RhbnRzLWJyb3dzZXJpZnkvY29uc3RhbnRzLmpzb24iKX0sZ2V0IGNyeXB0bygpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY3J5cHRvLWJyb3dzZXJpZnkvaW5kZXguanMiKX0sZ2V0Im5vZGU6Y3J5cHRvIigpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvY3J5cHRvLWJyb3dzZXJpZnkvaW5kZXguanMiKX0sZ2V0IGRncmFtKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9tb2NrL2VtcHR5LmpzIil9LGdldCJub2RlOmRncmFtIigpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvbW9jay9lbXB0eS5qcyIpfSxnZXQgZG5zKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9tb2NrL2VtcHR5LmpzIil9LGdldCJub2RlOmRucyIoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL21vY2svZW1wdHkuanMiKX0sZ2V0IGRvbWFpbigpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvZG9tYWluLWJyb3dzZXIvc291cmNlL2luZGV4LmpzIil9LGdldCJub2RlOmRvbWFpbiIoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2RvbWFpbi1icm93c2VyL3NvdXJjZS9pbmRleC5qcyIpfSxnZXQgZXZlbnRzKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIil9LGdldCJub2RlOmV2ZW50cyIoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiKX0sZ2V0IGh0dHAoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1odHRwL2luZGV4LmpzIil9LGdldCJub2RlOmh0dHAiKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJlYW0taHR0cC9pbmRleC5qcyIpfSxnZXQgaHR0cDIoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL21vY2svZW1wdHkuanMiKX0sZ2V0Im5vZGU6aHR0cDIiKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9tb2NrL2VtcHR5LmpzIil9LGdldCBodHRwcygpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvaHR0cHMtYnJvd3NlcmlmeS9pbmRleC5qcyIpfSxnZXQibm9kZTpodHRwcyIoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL2h0dHBzLWJyb3dzZXJpZnkvaW5kZXguanMiKX0sZ2V0IG1vZHVsZSgpe3JldHVybntjcmVhdGVSZXF1aXJlOnNlbGYuY3JlYXRlUmVxdWlyZX19LGdldCJub2RlOm1vZHVsZSIoKXtyZXR1cm57Y3JlYXRlUmVxdWlyZTpzZWxmLmNyZWF0ZVJlcXVpcmV9fSxnZXQgbmV0KCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9tb2NrL2VtcHR5LmpzIil9LGdldCJub2RlOm5ldCIoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL21vY2svZW1wdHkuanMiKX0sZ2V0IG9zKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9vcy1icm93c2VyaWZ5L2Jyb3dzZXIuanMiKX0sZ2V0Im5vZGU6b3MiKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9vcy1icm93c2VyaWZ5L2Jyb3dzZXIuanMiKX0sZ2V0IHB1bnljb2RlKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5qcyIpfSxnZXQibm9kZTpwdW55Y29kZSIoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIil9LGdldCBxdWVyeXN0cmluZygpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvcHJveHkvcXVlcnlzdHJpbmcuanMiKX0sZ2V0Im5vZGU6cXVlcnlzdHJpbmciKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9wcm94eS9xdWVyeXN0cmluZy5qcyIpfSxnZXQgcmVhZGxpbmUoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL21vY2svZW1wdHkuanMiKX0sZ2V0Im5vZGU6cmVhZGxpbmUiKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9tb2NrL2VtcHR5LmpzIil9LGdldCByZXBsKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9tb2NrL2VtcHR5LmpzIil9LGdldCJub2RlOnJlcGwiKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9tb2NrL2VtcHR5LmpzIil9LGdldCBzdHJlYW0oKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L2luZGV4LmpzIil9LGdldCJub2RlOnN0cmVhbSIoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L2luZGV4LmpzIil9LGdldCBzdHJpbmdfZGVjb2Rlcigpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyaW5nX2RlY29kZXIvbGliL3N0cmluZ19kZWNvZGVyLmpzIil9LGdldCJub2RlOnN0cmluZ19kZWNvZGVyIigpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyaW5nX2RlY29kZXIvbGliL3N0cmluZ19kZWNvZGVyLmpzIil9LGdldCBzeXMoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIpfSxnZXQibm9kZTpzeXMiKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiKX0sZ2V0IHRpbWVycygpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIpfSxnZXQibm9kZTp0aW1lcnMiKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIil9LGdldCB0bHMoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL21vY2svZW1wdHkuanMiKX0sZ2V0Im5vZGU6dGxzIigpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvbm9kZS1zdGRsaWItYnJvd3Nlci9janMvbW9jay9lbXB0eS5qcyIpfSxnZXQgdHR5KCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy90dHktYnJvd3NlcmlmeS9pbmRleC5qcyIpfSxnZXQibm9kZTp0dHkiKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy90dHktYnJvd3NlcmlmeS9pbmRleC5qcyIpfSxnZXQgdm0oKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3ZtLWJyb3dzZXJpZnkvaW5kZXguanMiKX0sZ2V0Im5vZGU6dm0iKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy92bS1icm93c2VyaWZ5L2luZGV4LmpzIil9LGdldCB6bGliKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXpsaWIvbGliL2luZGV4LmpzIil9LGdldCJub2RlOnpsaWIiKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXpsaWIvbGliL2luZGV4LmpzIil9LGZzOmZzUG9seWZpbGxfbmFtZXNwYWNlT2JqZWN0LCJub2RlOmZzIjpmc1BvbHlmaWxsX25hbWVzcGFjZU9iamVjdCxwYXRoLCJub2RlOnBhdGgiOnBhdGgscHJvY2Vzcywibm9kZTpwcm9jZXNzIjpwcm9jZXNzLGdldCB1cmwoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL25vZGUtc3RkbGliLWJyb3dzZXIvY2pzL3Byb3h5L3VybC5qcyIpfSxnZXQibm9kZTp1cmwiKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oIi4uLy4uL25vZGVfbW9kdWxlcy9ub2RlLXN0ZGxpYi1icm93c2VyL2Nqcy9wcm94eS91cmwuanMiKX0sZ2V0IHV0aWwoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygiLi4vLi4vbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIpfSxnZXQibm9kZTp1dGlsIigpe3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKCIuLi8uLi9ub2RlX21vZHVsZXMvdXRpbC91dGlsLmpzIil9LHdvcmtlcl90aHJlYWRzOndvcmtlclRocmVhZHNXaXRoV29ya2VyRGF0YSwibm9kZTp3b3JrZXJfdGhyZWFkcyI6d29ya2VyVGhyZWFkc1dpdGhXb3JrZXJEYXRhfSxmcz1ub2RlUG9seUZpbGxzLmZzLGNqc19wYXRoPW5vZGVQb2x5RmlsbHMucGF0aCxpbnN0YWxsZWRNb2R1bGVzPXt9LHBrZ0pzb25DYWNoZT17fSxyZXNvbHV0aW9uQ2FjaGU9e30sc2VhcmNoUGF0aHNDYWNoZT17fSxSRVNPTFVUSU9OX0VYVEVOU0lPTlM9WyIiLCIuanMiLCIuY2pzIiwiLmpzb24iLCIvaW5kZXguanMiLCIvaW5kZXguY2pzIiwiL2luZGV4Lmpzb24iXSx0cnlSZWFkRmlsZT1wPT57dHJ5e3JldHVybiBmcy5yZWFkRmlsZVN5bmMocCwidXRmOCIpfWNhdGNoKF9hKXtyZXR1cm4gbnVsbH19LHJlc29sdmVXaXRoRXh0ZW5zaW9ucz0ocCxza2lwSW5kZXhKc0lmSnM9ITEpPT57Zm9yKGNvbnN0IGV4dCBvZiBSRVNPTFVUSU9OX0VYVEVOU0lPTlMpe2lmKHNraXBJbmRleEpzSWZKcyYmIi9pbmRleC5qcyI9PT1leHQmJnAuZW5kc1dpdGgoIi5qcyIpKWNvbnRpbnVlO2NvbnN0IGNhbmRpZGF0ZT1wK2V4dCxjb2RlPXRyeVJlYWRGaWxlKGNhbmRpZGF0ZSk7aWYobnVsbCE9PWNvZGUpcmV0dXJue2NvZGUsaWQ6Y2FuZGlkYXRlfX1yZXR1cm4gbnVsbH0sbG9hZE1vZHVsZT0oaWQsY29udGV4dCxpbXBvcnRNYXBzLGVudHJ5cG9pbnQpPT57dmFyIF9hO2NvbnN0IGNhY2hlS2V5PWAke2NvbnRleHR9OiR7aWR9YDtpZihyZXNvbHV0aW9uQ2FjaGVbY2FjaGVLZXldKXtjb25zdCBjYWNoZWRJZD1yZXNvbHV0aW9uQ2FjaGVbY2FjaGVLZXldO2lmKGluc3RhbGxlZE1vZHVsZXNbY2FjaGVkSWRdKXJldHVybiBpbnN0YWxsZWRNb2R1bGVzW2NhY2hlZElkXS5leHBvcnRzfWxldCByZXNvbHZlZElkPWlkLnN0YXJ0c1dpdGgoIi4iKT9janNfcGF0aC5qb2luKGNvbnRleHQsaWQpOmlkO2NvbnN0IHN5c0RlZj1TeXN0ZW0uZ2V0KHJlc29sdmVkSWQpfHxpZCE9PXJlc29sdmVkSWQmJlN5c3RlbS5nZXQoaWQpO2lmKHN5c0RlZilyZXR1cm4gc3lzRGVmLmRlZmF1bHQ7aWYoaWQgaW4gbm9kZVBvbHlGaWxscylyZXR1cm4gbm9kZVBvbHlGaWxsc1tpZF07aWYocmVzb2x2ZWRJZCBpbiBub2RlUG9seUZpbGxzKXJldHVybiBub2RlUG9seUZpbGxzW3Jlc29sdmVkSWRdO2xldCBtb2R1bGVDb2RlPWltcG9ydE1hcHNbaWRdLG1vZHVsZUlkPW1vZHVsZUNvZGU/aWQ6cmVzb2x2ZWRJZDtpZighbW9kdWxlQ29kZSYmIWlkLnN0YXJ0c1dpdGgoIi4iKSYmIWlkLnN0YXJ0c1dpdGgoIi8iKSl7bGV0IHNlYXJjaFBhdGhzPXNlYXJjaFBhdGhzQ2FjaGVbY29udGV4dF07aWYoIXNlYXJjaFBhdGhzKXtzZWFyY2hQYXRocz1bXTtsZXQgY3VycmVudERpcj1jb250ZXh0O2Zvcig7Oyl7aWYoIm5vZGVfbW9kdWxlcyIhPT1janNfcGF0aC5iYXNlbmFtZShjdXJyZW50RGlyKSl7Y29uc3Qgbm1QYXRoPWNqc19wYXRoLmpvaW4oY3VycmVudERpciwibm9kZV9tb2R1bGVzIik7c2VhcmNoUGF0aHMuaW5jbHVkZXMobm1QYXRoKXx8c2VhcmNoUGF0aHMucHVzaChubVBhdGgpfWNvbnN0IHBhcmVudD1janNfcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO2lmKHBhcmVudD09PWN1cnJlbnREaXIpYnJlYWs7Y3VycmVudERpcj1wYXJlbnR9Y29uc3QgY3dkTm09Y2pzX3BhdGguam9pbihub2RlUG9seUZpbGxzLnByb2Nlc3MuY3dkKCksIm5vZGVfbW9kdWxlcyIpO3NlYXJjaFBhdGhzLmluY2x1ZGVzKGN3ZE5tKXx8c2VhcmNoUGF0aHMucHVzaChjd2RObSksc2VhcmNoUGF0aHNDYWNoZVtjb250ZXh0XT1zZWFyY2hQYXRoc31mb3IoY29uc3Qgbm9kZU1vZHVsZXNEaXIgb2Ygc2VhcmNoUGF0aHMpe2NvbnN0IG5vZGVNb2R1bGVzUGF0aD1janNfcGF0aC5qb2luKG5vZGVNb2R1bGVzRGlyLGlkKSxwa2dQYXRoPWNqc19wYXRoLmpvaW4obm9kZU1vZHVsZXNQYXRoLCJwYWNrYWdlLmpzb24iKTtsZXQgcGtnTWFpbjtpZighcGtnSnNvbkNhY2hlW3BrZ1BhdGhdKXtjb25zdCBqc29uPXRyeVJlYWRGaWxlKHBrZ1BhdGgpO2lmKGpzb24pdHJ5e3BrZ0pzb25DYWNoZVtwa2dQYXRoXT1KU09OLnBhcnNlKGpzb24pfWNhdGNoKF9iKXt9fWlmKG51bGw9PT0oX2E9cGtnSnNvbkNhY2hlW3BrZ1BhdGhdKXx8dm9pZCAwPT09X2E/dm9pZCAwOl9hLm1haW4pe3BrZ01haW49Y2pzX3BhdGgucmVzb2x2ZShub2RlTW9kdWxlc1BhdGgscGtnSnNvbkNhY2hlW3BrZ1BhdGhdLm1haW4pO2NvbnN0IHJlcz1yZXNvbHZlV2l0aEV4dGVuc2lvbnMocGtnTWFpbik7aWYocmVzKXttb2R1bGVDb2RlPXJlcy5jb2RlLG1vZHVsZUlkPXJlcy5pZDticmVha319Y29uc3QgcmVzPXJlc29sdmVXaXRoRXh0ZW5zaW9ucyhub2RlTW9kdWxlc1BhdGgpO2lmKHJlcyl7bW9kdWxlQ29kZT1yZXMuY29kZSxtb2R1bGVJZD1yZXMuaWQ7YnJlYWt9fX1pZighbW9kdWxlQ29kZSYmKGlkLnN0YXJ0c1dpdGgoIi8iKXx8aWQuc3RhcnRzV2l0aCgiLiIpKSl7Y29uc3QgcmVzPXJlc29sdmVXaXRoRXh0ZW5zaW9ucyhyZXNvbHZlZElkLGlkLmVuZHNXaXRoKCIuanMiKSk7cmVzJiYobW9kdWxlQ29kZT1yZXMuY29kZSxtb2R1bGVJZD1yZXMuaWQpfWlmKG1vZHVsZUNvZGUpcmV0dXJuIHJlc29sdXRpb25DYWNoZVtgJHtjb250ZXh0fToke2lkfWBdPW1vZHVsZUlkLCgobW9kdWxlSWQsbW9kdWxlQ29kZSxpbXBvcnRNYXBzLGVudHJ5cG9pbnQpPT57aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pcmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7Y29uc3QgY29udGV4dD1janNfcGF0aC5kaXJuYW1lKG1vZHVsZUlkKTtsZXQgZmluYWxFeHBvcnRzPXt9O2NvbnN0IG1vZHVsZVJlcXVpcmU9Y2hpbGRJZD0+bG9hZE1vZHVsZShjaGlsZElkLGNvbnRleHQsaW1wb3J0TWFwcyxlbnRyeXBvaW50KTttb2R1bGVSZXF1aXJlLnJlc29sdmU9cmVxdWVzdD0+cmVxdWVzdDtjb25zdCBtb2R1bGU9e2V4cG9ydHM6ZmluYWxFeHBvcnRzLHJlcXVpcmU6bW9kdWxlUmVxdWlyZX07KG1vZHVsZUlkLmluY2x1ZGVzKCJub2RlX21vZHVsZXMiKXx8bW9kdWxlSWQgaW4gaW1wb3J0TWFwcykmJihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXT1tb2R1bGUpLG1vZHVsZUlkPT09ZW50cnlwb2ludCYmKG1vZHVsZUNvZGU9InNlbGYuQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyOyIrbW9kdWxlQ29kZSksbW9kdWxlSWQuZW5kc1dpdGgoIi5qc29uIil8fChtb2R1bGVDb2RlPWAvLyBbRGVidWddIFJlc29sdmVkOiAke21vZHVsZUlkfVxuYCttb2R1bGVDb2RlKTt0cnl7bW9kdWxlSWQuZW5kc1dpdGgoIi5qc29uIik/KGZpbmFsRXhwb3J0cz1KU09OLnBhcnNlKG1vZHVsZUNvZGUpLG1vZHVsZS5leHBvcnRzPWZpbmFsRXhwb3J0cyk6KG5ldyBGdW5jdGlvbigicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJfX2ZpbGVuYW1lIiwiX19kaXJuYW1lIiwicHJvY2VzcyIsbW9kdWxlQ29kZSkobW9kdWxlUmVxdWlyZSxtb2R1bGUuZXhwb3J0cyxtb2R1bGUsbW9kdWxlSWQsY29udGV4dCxub2RlUG9seUZpbGxzLnByb2Nlc3MpLGZpbmFsRXhwb3J0cz1tb2R1bGUuZXhwb3J0cyl9Y2F0Y2goZSl7dGhyb3cgY29uc29sZS5lcnJvcihgV29ya2VyOiBFcnJvciBleGVjdXRpbmcgbW9kdWxlICR7bW9kdWxlSWR9OmAsZSksbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBkZXBlbmRlbmN5ICR7bW9kdWxlSWR9OiAke2UubWVzc2FnZX1gKX10cnl7U3lzdGVtLnNldChtb2R1bGVJZCx7ZGVmYXVsdDpmaW5hbEV4cG9ydHN9KX1jYXRjaChfYSl7fXJldHVybiBmaW5hbEV4cG9ydHN9KShtb2R1bGVJZCxtb2R1bGVDb2RlLGltcG9ydE1hcHMsZW50cnlwb2ludCk7Y29uc3QgZXJyb3I9bmV3IEVycm9yKGBXb3JrZXI6IERlcGVuZGVuY3kgJHtpZH0gKHJlc29sdmVkOiAke21vZHVsZUlkfSkgbm90IGZvdW5kLiBDb250ZXh0OiAke2NvbnRleHR9LiBJbXBvcnRNYXBzIGNvdW50OiAke09iamVjdC5rZXlzKGltcG9ydE1hcHMpLmxlbmd0aH0uIENXRDogJHtub2RlUG9seUZpbGxzLnByb2Nlc3MuY3dkKCl9LiBTYW1wbGUgSW1wb3J0TWFwcyBrZXlzOiAke09iamVjdC5rZXlzKGltcG9ydE1hcHMpLnNsaWNlKDAsNSkuam9pbigiLCAiKX1gKTt0aHJvdyBjb25zb2xlLmVycm9yKGVycm9yKSxlcnJvcn07Y29uc3QgYmluZGluZz17cmVjdlRhc2tNZXNzYWdlSW5Xb3JrZXI6dXRvby5hTixzZW5kVGFza01lc3NhZ2U6dXRvby5sMix3b3JrZXJDcmVhdGVkOnV0b28uSEp9O2Z1bmN0aW9uIHN0YXJ0TG9hZGVyV29ya2VyKCl7c2VsZi5vbm1lc3NhZ2U9ZXZlbnQ9PntsZXRbbW9kdWxlLG1lbW9yeSxtZXRhXT1ldmVudC5kYXRhO3RyeXsoMCx1dG9vLlFSKSh7bW9kdWxlLG1lbW9yeX0pfWNhdGNoKGVycil7dGhyb3cgY29uc29sZS5lcnJvcihlcnIpLGVycn1zZWxmLndvcmtlckRhdGE9e3RocmVhZElkOm1ldGEud29ya2VyRGF0YS50aHJlYWRJZCxjd2Q6bWV0YS53b3JrZXJEYXRhLmN3ZCxwcm9qZWN0Um9vdDptZXRhLndvcmtlckRhdGEucHJvamVjdFJvb3QsYmluZGluZyxmczp1dG9vLkZzfSxzZWxmLnByb2Nlc3M9e2Vudjp7fSxjd2Q6KCk9PnNlbGYud29ya2VyRGF0YS5jd2R9LGFzeW5jIGZ1bmN0aW9uIGNqcyhlbnRyeXBvaW50LGltcG9ydE1hcHMpe1twa2dKc29uQ2FjaGUscmVzb2x1dGlvbkNhY2hlLHNlYXJjaFBhdGhzQ2FjaGVdLmZvckVhY2goYz0+e2Zvcihjb25zdCBrZXkgaW4gYylkZWxldGUgY1trZXldfSksYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoaW1wb3J0TWFwcykubWFwKGFzeW5jKFtrLHZdKT0+e2lmKHYuc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSl0cnl7Y29uc3QgcmVzcG9uc2U9YXdhaXQgZmV0Y2godik7cmVzcG9uc2Uub2s/aW1wb3J0TWFwc1trXT1hd2FpdCByZXNwb25zZS50ZXh0KCk6KGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBmZXRjaCBsb2FkZXIgJyR7a30nOiAke3Jlc3BvbnNlLnN0YXR1c31gKSxkZWxldGUgaW1wb3J0TWFwc1trXSl9Y2F0Y2goZXJyb3Ipe2NvbnNvbGUuZXJyb3IoYEVycm9yIGZldGNoaW5nIGxvYWRlciAnJHtrfSc6YCxlcnJvciksZGVsZXRlIGltcG9ydE1hcHNba119fSkpO2NvbnN0IG9yaWdpbmFsV2Fybj1jb25zb2xlLndhcm47Y29uc29sZS53YXJuPSguLi5hcmdzKT0+e3ZhciBfYTsoKG51bGw9PT0oX2E9YXJnc1swXSl8fHZvaWQgMD09PV9hP3ZvaWQgMDpfYS50b1N0cmluZygpKXx8IiIpLmluY2x1ZGVzKCIoU3lzdGVtSlMgRXJyb3IjVzMiKXx8b3JpZ2luYWxXYXJuLmFwcGx5KGNvbnNvbGUsYXJncyl9LHNlbGYuX19zeXN0ZW1qc19yZXF1aXJlX189aWQ9PmxvYWRNb2R1bGUoaWQsY2pzX3BhdGguZGlybmFtZShlbnRyeXBvaW50KSxpbXBvcnRNYXBzLGVudHJ5cG9pbnQpLHNlbGYuX19zeXN0ZW1qc19yZXF1aXJlX18ucmVzb2x2ZT1yZXF1ZXN0PT5yZXF1ZXN0LHNlbGYuY3JlYXRlUmVxdWlyZT1maWxlbmFtZT0+e2NvbnN0IGNvbnRleHQ9Y2pzX3BhdGguZGlybmFtZShmaWxlbmFtZSkscmVxPWlkPT5sb2FkTW9kdWxlKGlkLGNvbnRleHQsaW1wb3J0TWFwcyxlbnRyeXBvaW50KTtyZXR1cm4gcmVxLnJlc29sdmU9cmVxdWVzdD0+cmVxdWVzdCxyZXF9LGxvYWRNb2R1bGUoZW50cnlwb2ludCxjanNfcGF0aC5kaXJuYW1lKGVudHJ5cG9pbnQpLGltcG9ydE1hcHMsZW50cnlwb2ludCl9KG1ldGEubG9hZGVyQXNzZXRzLmVudHJ5cG9pbnQsbWV0YS5sb2FkZXJBc3NldHMuaW1wb3J0TWFwcyl9fXNlbGYuc3RhcnRMb2FkZXJXb3JrZXI9c3RhcnRMb2FkZXJXb3JrZXIsc3RhcnRMb2FkZXJXb3JrZXIoKTtjb25zdCB3b3JrZXI9c3RhcnRMb2FkZXJXb3JrZXJ9KSgpLF9fd2VicGFja19leHBvcnRzX189X193ZWJwYWNrX2V4cG9ydHNfXy5kZWZhdWx0LF9fd2VicGFja19leHBvcnRzX199KSgpKTs=";
|