{"remainingRequest":"/home/camus/work/lotus/node_modules/vue-loader/lib/index.js??vue-loader-options!/home/camus/work/lotus/app/views/playground.vue?vue&type=script&lang=js","dependencies":[{"path":"/home/camus/work/lotus/app/views/playground.vue","mtime":1732184618437},{"path":"/home/camus/work/lotus/node_modules/cache-loader/dist/cjs.js","mtime":1719800821084},{"path":"/home/camus/work/lotus/node_modules/babel-loader/lib/index.js","mtime":1727163989637},{"path":"/home/camus/work/lotus/node_modules/cache-loader/dist/cjs.js","mtime":1719800821084},{"path":"/home/camus/work/lotus/node_modules/vue-loader/lib/index.js","mtime":1719800840033}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CgkvL2ltcG9ydCBfIGZyb20gImxvZGFzaCI7CglpbXBvcnQgcmVzaXplIGZyb20gInZ1ZS1yZXNpemUtZGlyZWN0aXZlIjsKCWltcG9ydCB7TUlESSwgTWlkaUF1ZGlvLCBNaWRpVXRpbHMsIE11c2ljTm90YXRpb259IGZyb20gIkBrLWwtbGFtYmRhL211c2ljLXdpZGdldHMiOwoKCWltcG9ydCB7ZG93bmxvYWRVcmx9IGZyb20gIi4uL3V0aWxzLmpzIjsKCWltcG9ydCB7bXV0ZXhEZWxheSwgYW5pbWF0aW9uRGVsYXl9IGZyb20gIi4uL2RlbGF5LmpzIjsKCWltcG9ydCB7cmVjb3ZlckpTT059IGZyb20gIi4uLy4uL2luYy9qc29uUmVjb3ZlcnkudHMiOwoJaW1wb3J0IFN0YWZmVG9rZW4gZnJvbSAiLi4vLi4vaW5jL3N0YWZmU3ZnL3N0YWZmVG9rZW4udHMiOwoJaW1wb3J0IFNoZWV0RG9jdW1lbnQgZnJvbSAiLi4vLi4vaW5jL3N0YWZmU3ZnL3NoZWV0RG9jdW1lbnQudHMiOwoJaW1wb3J0ICogYXMgTGlseU5vdGF0aW9uIGZyb20gIi4uLy4uL2luYy9saWx5Tm90YXRpb24iOwoJaW1wb3J0IExvZ1JlY29yZGVyIGZyb20gIi4uLy4uL2luYy9sb2dSZWNvcmRlci50cyI7CglpbXBvcnQgKiBhcyBTdGFmZk5vdGF0aW9uIGZyb20gIi4uLy4uL2luYy9zdGFmZlN2Zy9zdGFmZk5vdGF0aW9uLnRzIjsKCWltcG9ydCBsb2FkSmlzb25QYXJzZXIgZnJvbSAiLi4vbG9hZEppc29uUGFyc2VyLmpzIjsKCWltcG9ydCB7TGlseURvY3VtZW50LCByZXBsYWNlU291cmNlVG9rZW4sIGNyZWF0ZVBpYW5vUmh5dGhtLCBMaWx5VGVybXN9IGZyb20gIi4uLy4uL2luYy9saWx5UGFyc2VyIjsKCWltcG9ydCB7TXVzaWNUcmFja30gZnJvbSAiLi4vLi4vaW5jL2xpbHlQYXJzZXIvbGlseUludGVycHJldGVyIjsKCWltcG9ydCB7Q01fVE9fUFh9IGZyb20gIi4uLy4uL2luYy9jb25zdGFudHMudHMiOwoJaW1wb3J0IFRleHRTb3VyY2UgZnJvbSAiLi4vLi4vaW5jL3RleHRTb3VyY2UudHMiOwoJaW1wb3J0ICogYXMgU2hlZXRCYWtlciBmcm9tICIuLi9zaGVldEJha2VyLnRzIjsKCWltcG9ydCB7UGl0Y2hDb250ZXh0VGFibGV9IGZyb20gIi4uLy4uL2luYy9waXRjaENvbnRleHQudHMiOwoJaW1wb3J0ICogYXMgbWVhc3VyZUxheW91dCBmcm9tICIuLi8uLi9pbmMvbWVhc3VyZUxheW91dCI7CglpbXBvcnQgbnBtUGFja2FnZSBmcm9tICIuLi8uLi9wYWNrYWdlLmpzb24iOwoKCWltcG9ydCBNaWRpUm9sbCBmcm9tICIuLi9jb21wb25lbnRzL21pZGktcm9sbC52dWUiOwoJaW1wb3J0IFNvdXJjZUVkaXRvciBmcm9tICIuLi9jb21wb25lbnRzL3NvdXJjZS1lZGl0b3IudnVlIjsKCWltcG9ydCBTaGVldFNpbXBsZSBmcm9tICIuLi9jb21wb25lbnRzL3NoZWV0LXNpbXBsZS52dWUiOwoJaW1wb3J0IFNoZWV0TGl2ZSBmcm9tICIuLi9jb21wb25lbnRzL3NoZWV0LWxpdmUudnVlIjsKCWltcG9ydCBTaGVldFNpZ25zIGZyb20gIi4uL2NvbXBvbmVudHMvc2hlZXQtc2lnbnMudnVlIjsKCWltcG9ydCBMb2FkaW5nIGZyb20gIi4uL2NvbXBvbmVudHMvbG9hZGluZy1kb3RzLnZ1ZSI7CglpbXBvcnQgU3RvcmVJbnB1dCBmcm9tICIuLi9jb21wb25lbnRzL3N0b3JlLWlucHV0LnZ1ZSI7CglpbXBvcnQgQm9vbFN0b3JlSW5wdXQgZnJvbSAiLi4vY29tcG9uZW50cy9ib29sLXN0b3JlLWlucHV0LnZ1ZSI7CglpbXBvcnQgQ2hlY2tCdXR0b24gZnJvbSAiLi4vY29tcG9uZW50cy9jaGVjay1idXR0b24udnVlIjsKCWltcG9ydCBOb3RhdGlvbnNNYXRjaGVyIGZyb20gIi4uL2NvbXBvbmVudHMvbm90YXRpb25zLW1hdGNoZXIudnVlIjsKCWltcG9ydCBEaWFsb2cgZnJvbSAiLi4vY29tcG9uZW50cy9kaWFsb2cudnVlIjsKCWltcG9ydCBSZW1vdGVGaWxlIGZyb20gIi4uL2NvbXBvbmVudHMvcmVtb3RlLWZpbGUudnVlIjsKCWltcG9ydCBEaXJCcm93c2VyIGZyb20gIi4uL2NvbXBvbmVudHMvZGlyLWJyb3dzZXIudnVlIjsKCglpbXBvcnQgUXVpdENsZWFybmVyIGZyb20gIi4uL21peGlucy9xdWl0LWNsZWFuZXIiOwoKCgoKCWV4cG9ydCBkZWZhdWx0IHsKCQluYW1lOiAicGxheWdyb3VuZCIsCgoKCQlkaXJlY3RpdmVzOiB7CgkJCXJlc2l6ZSwKCQl9LAoKCgkJbWl4aW5zOiBbCgkJCVF1aXRDbGVhcm5lciwKCQldLAoKCgkJY29tcG9uZW50czogewoJCQlTb3VyY2VFZGl0b3IsCgkJCVNoZWV0U2ltcGxlLAoJCQlTaGVldExpdmUsCgkJCVNoZWV0U2lnbnMsCgkJCUxvYWRpbmcsCgkJCVN0b3JlSW5wdXQsCgkJCUJvb2xTdG9yZUlucHV0LAoJCQlDaGVja0J1dHRvbiwKCQkJTWlkaVJvbGwsCgkJCU5vdGF0aW9uc01hdGNoZXIsCgkJCURpYWxvZywKCQkJUmVtb3RlRmlsZSwKCQkJRGlyQnJvd3NlciwKCQl9LAoKCgkJZGF0YSAoKSB7CgkJCXJldHVybiB7CgkJCQlidWlsZENvbnRhaW5lclNpemU6IHsKCQkJCQl3aWR0aDogMTAwLAoJCQkJCWhlaWdodDogMTAwLAoJCQkJfSwKCQkJCXNoZWV0Q29udGFpbmVyU2l6ZTogewoJCQkJCXdpZHRoOiAxMDAsCgkJCQkJaGVpZ2h0OiAxMDAsCgkJCQl9LAoJCQkJZHJhZ0hvdmVyOiBudWxsLAoJCQkJc291cmNlRHJhZ0hvdmVyOiBmYWxzZSwKCQkJCWxpbHlTb3VyY2U6ICIiLAoJCQkJY29udmVydGluZzogZmFsc2UsCgkJCQllbmdyYXZpbmc6IGZhbHNlLAoJCQkJc3ZnRG9jdW1lbnRzOiBudWxsLAoJCQkJZW5ncmF2ZXJMb2dzOiBudWxsLAoJCQkJZW5ncmF2ZXJEaXJ0eTogZmFsc2UsCgkJCQlhdXRvRW5ncmF2ZTogdHJ1ZSwKCQkJCXRva2VuaXplU3RhZmY6IHRydWUsCgkJCQlzaGVldERvY3VtZW50OiBudWxsLAoJCQkJdGl0bGU6IG51bGwsCgkJCQlzdmdIYXNoVGFibGU6IG51bGwsCgkJCQltaWRpOiBudWxsLAoJCQkJbWlkaU5vdGF0aW9uOiBudWxsLAoJCQkJc2NoZWR1bGVyOiBudWxsLAoJCQkJcGl0Y2hDb250ZXh0R3JvdXA6IG51bGwsCgkJCQllbmFibGVkQ2hyb21hdGljOiBmYWxzZSwKCQkJCWNocm9tYXRpY01vZGU6ICJzeW1ib2xzIiwKCQkJCW1pZGlQbGF5ZXI6IG51bGwsCgkJCQlyb2xsVmlzaWJsZTogZmFsc2UsCgkJCQltYXRjaGVyTm90YXRpb25zOiBudWxsLAoJCQkJc2hvd05vdGF0aW9uc01hdGNoZXI6IGZhbHNlLAoJCQkJZW5hYmxlZE1pZGlBdWRpbzogdHJ1ZSwKCQkJCXNob3dDdXJzb3I6IHRydWUsCgkJCQlzZXR0aW5nUGFuZWxWaXNpYmxlOiBmYWxzZSwKCQkJCXhtbDJseU9wdGlvbnM6IHsKCQkJCQlyZW1vdmVCcmVha3M6IHRydWUsCgkJCQkJcmVtb3ZlU3RhZmZHcm91cDogdHJ1ZSwKCQkJCQltZXJnZUNvbnRpbnVvdXNHcmFjZXM6IHRydWUsCgkJCQkJZXhjbHVkZUNob3JkVHJhY2tzRnJvbU1JREk6IHRydWUsCgkJCQkJbWlkaUNoYW5uZWxNYXBwaW5nOiBmYWxzZSwKCQkJCX0sCgkJCQllbmdyYXZlV2l0aExvZ3M6IGZhbHNlLAoJCQkJZW5hYmxlZEZ1enp5TWF0Y2hlcjogdHJ1ZSwKCQkJCWVuYWJsZWRTaGVldE5vdGF0aW9uOiBmYWxzZSwKCQkJCWxpbHlNYXJrdXBzOiB7CgkJCQkJZW5hYmxlZDogdHJ1ZSwKCQkJCQlzdGFmZlNpemU6IG51bGwsCgkJCQkJYXV0b1BhcGVyU2l6ZTogdHJ1ZSwKCQkJCQlwYWdlQ291bnQ6IDIsCgkJCQkJc3lzdGVtU3BhY2luZzogLTEsCgkJCQkJdG9wTWFya3VwU3BhY2luZzogLTEsCgkJCQkJcmFnZ2VkTGFzdDogdHJ1ZSwKCQkJCX0sCgkJCQlsaWx5UGFyc2VyOiBudWxsLAoJCQkJbWVhc3VyZXNQYXJzZXI6IG51bGwsCgkJCQlsaWx5RG9jdW1lbnREaXJ0eTogZmFsc2UsCgkJCQlsaWx5VGV4dFNvdXJjZURpcnR5OiBmYWxzZSwKCQkJCWJha2luZ1NoZWV0OiBmYWxzZSwKCQkJCWJha2luZ0ltYWdlczogbnVsbCwKCQkJCWVuYWJsZWRNdXNpY0ZvbnQ6IGZhbHNlLAoJCQkJaGlkZUJha2luZ0ltYWdlczogZmFsc2UsCgkJCQlsaWx5TWFya3VwTWV0aG9kczogT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTGlseURvY3VtZW50LnByb3RvdHlwZSksCgkJCQljaG9zZW5MaWx5TWFya3VwTWV0aG9kOiBudWxsLAoJCQkJb3BlcmF0aW5nOiBmYWxzZSwKCQkJCWxvYWRpbmdMaWx5UGFyc2VyOiBmYWxzZSwKCQkJCWVuYWJsZWRQb2ludGVyOiBmYWxzZSwKCQkJCXBvaW50ZXJEYXRhOiBudWxsLAoJCQkJc291cmNlRWRpdG9yRW5hYmxlZDogISFwcm9jZXNzLmVudi5WVUVfQVBQX1VTRV9TT1VSQ0VfRURJVE9SLAoJCQkJc2hvd1NvdXJjZURpcjogZmFsc2UsCgkJCQlzb3VyY2VFZGl0b3JIb3N0OiBgd3M6Ly8ke2xvY2F0aW9uLmhvc3R9YCwKCQkJCXNvdXJjZUVkaXRvckZpbGVQYXRoOiBudWxsLAoJCQkJc291cmNlRWRpdG9yQ29ubmVjdGVkOiBmYWxzZSwKCQkJCXNvdXJjZUVkaXRvckxvYWRpbmc6IGZhbHNlLAoJCQkJbWVhc3VyZUxheW91dFR5cGU6ICJvcmRpbmFyeSIsCgkJCQltZWFzdXJlTGF5b3V0Q29kZTogbnVsbCwKCQkJCW1lYXN1cmVMYXlvdXRDb2RlRGlydHk6IGZhbHNlLAoJCQkJbWVhc3VyZUxheW91dENvZGVFcnJvcjogbnVsbCwKCQkJCWFydGljdWxhdGVNSURJOiBmYWxzZSwKCQkJCWhpZ2hsaWdodFN5bWJvbDogbnVsbCwKCQkJfTsKCQl9LAoKCgkJY29tcHV0ZWQ6IHsKCQkJbWFya3VwVmFsdWVIYXNoICgpIHsKCQkJCWNvbnN0IHtlbmFibGVkLCAuLi5maWVsZHN9ID0gdGhpcy5saWx5TWFya3VwczsKCQkJCXZvaWQoZW5hYmxlZCk7CgoJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KGZpZWxkcyk7CgkJCX0sCgoKCQkJYXV0b1BhZ2VTaXplICgpIHsKCQkJCXJldHVybiB7CgkJCQkJd2lkdGg6IHRoaXMuc2hlZXRDb250YWluZXJTaXplLndpZHRoIC8gdGhpcy5saWx5TWFya3Vwcy5wYWdlQ291bnQgLSAzNCwKCQkJCQloZWlnaHQ6IHRoaXMuc2hlZXRDb250YWluZXJTaXplLmhlaWdodCAtIDM4LAoJCQkJfTsKCQkJfSwKCgoJCQllbmdyYXZlckxvZ1N0YXR1cyAoKSB7CgkJCQlpZiAoIXRoaXMuZW5ncmF2ZXJMb2dzKQoJCQkJCXJldHVybiBudWxsOwoKCQkJCWlmICgvZXJyb3I6L2kudGVzdCh0aGlzLmVuZ3JhdmVyTG9ncykpCgkJCQkJcmV0dXJuICJlcnJvciI7CgoJCQkJaWYgKC93YXJuaW5nOi9pLnRlc3QodGhpcy5lbmdyYXZlckxvZ3MpKQoJCQkJCXJldHVybiAid2FybmluZyI7CgoJCQkJcmV0dXJuICJpbmZvIjsKCQkJfSwKCgoJCQlzb3VyY2VJc0xvYWRpbmcgKCkgewoJCQkJcmV0dXJuIHRoaXMuY29udmVydGluZyB8fCB0aGlzLnNvdXJjZUVkaXRvckxvYWRpbmc7CgkJCX0sCgoKCQkJLyoKCQkJCVsJc3lzdGVtCgkJCQkJWwlzdGFmZgoJCQkJCQlbY29udGV4dF0KCQkJCQldCgkJCQldCgkJCSovCgkJCXBpdGNoQ29udGV4dE1hcmtzICgpIHsKCQkJCS8vY29uc3Qgc2NoZWR1bGVyID0gdGhpcy4kcmVmcy5zaGVldCAmJiB0aGlzLiRyZWZzLnNoZWV0LnNjaGVkdWxlcjsKCQkJCWlmICghdGhpcy5waXRjaENvbnRleHRHcm91cCB8fCAhdGhpcy5zY2hlZHVsZXIpCgkJCQkJcmV0dXJuIFtdOwoKCQkJCXJldHVybiB0aGlzLnBpdGNoQ29udGV4dEdyb3VwLm1hcCh0YWJsZSA9PiB0YWJsZS5pdGVtcy5tYXAoaXRlbSA9PiB7CgkJCQkJY29uc3QgY29udGV4dCA9IGl0ZW0uY29udGV4dDsKCQkJCQljb25zdCB5VG9OYW1lID0geSA9PiAoe3ksIGFsdGVyOiBjb250ZXh0LmFsdGVyT25Ob3RlKGNvbnRleHQueVRvTm90ZSh5KSksIG5hbWU6IGNvbnRleHQueVRvUGl0Y2hOYW1lKHkpfSk7CgoJCQkJCWNvbnN0IHtzeXN0ZW0sIHh9ID0gdGhpcy5zY2hlZHVsZXIubG9va3VwUG9zaXRpb24oaXRlbS50aWNrKTsKCQkJCQljb25zdCBuYW1lcyA9IFsKCQkJCQkJWy0yLCAtMSwgMCwgMSwgMl0ubWFwKHlUb05hbWUpLAoJCQkJCQlbLTEuNSwgLTAuNSwgMC41LCAxLjVdLm1hcCh5VG9OYW1lKSwKCQkJCQldOwoKCQkJCQlyZXR1cm4ge3N5c3RlbSwgeCwgbmFtZXN9OwoJCQkJfSkpLnJlZHVjZSgocmVzdWx0LCB0YWJsZSwgc3RhZmYpID0+ICh0YWJsZS5mb3JFYWNoKCh7c3lzdGVtLCAuLi5pdGVtfSkgPT4gewoJCQkJCXJlc3VsdFtzeXN0ZW1dID0gcmVzdWx0W3N5c3RlbV0gfHwgW107CgkJCQkJcmVzdWx0W3N5c3RlbV1bc3RhZmZdID0gcmVzdWx0W3N5c3RlbV1bc3RhZmZdIHx8IFtdOwoJCQkJCXJlc3VsdFtzeXN0ZW1dW3N0YWZmXS5wdXNoKGl0ZW0pOwoJCQkJfSksIHJlc3VsdCksIFtdKTsKCQkJfSwKCQl9LAoKCgkJYXN5bmMgY3JlYXRlZCAoKSB7CgkJCXdpbmRvdy4kbWFpbiA9IHRoaXM7CgoJCQkvKmlmICghd2luZG93LiRsaXlhZCkgewoJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgIiRsaXlhZCIsIHsKCQkJCQlnZXQ6IGFzeW5jICgpID0+IHsKCQkJCQkJd2luZG93LmxpeWFkID0gYXdhaXQgaW1wb3J0KCJsaXlhZCIpOwoJCQkJCQljb25zb2xlLmxvZygibGl5YWQ6Iiwgd2luZG93LmxpeWFkKTsKCgkJCQkJCXJldHVybiB3aW5kb3cubGl5YWQ7CgkJCQkJfSwKCQkJCX0pOwoJCQl9Ki8KCgkJCWlmIChNaWRpQXVkaW8uV2ViQXVkaW8uZW1wdHkoKSkKCQkJCU1pZGlBdWRpby5sb2FkUGx1Z2luKHtzb3VuZGZvbnRVcmw6ICIvc291bmRmb250LyIsIGFwaTogIndlYmF1ZGlvIn0pLnRoZW4oKCkgPT4gY29uc29sZS5sb2coIlNvdW5kZm9udCBsb2FkZWQuIikpOwoKCQkJbG9hZEppc29uUGFyc2VyKGltcG9ydCgiLi4vLi4vamlzb24vbWVhc3VyZUxheW91dC5qaXNvbiIpKS50aGVuKHBhcnNlciA9PiB7CgkJCQl0aGlzLm1lYXN1cmVzUGFyc2VyID0gcGFyc2VyOwoJCQkJY29uc29sZS5kZWJ1ZygibWVhc3VyZUxheW91dCBwYXJzZXIgbG9hZGVkLiIpOwoJCQl9KTsKCgkJCXRoaXMubG9hZGluZ0xpbHlQYXJzZXIgPSB0cnVlOwoJCQl0aGlzLmxpbHlQYXJzZXIgPSBhd2FpdCBsb2FkSmlzb25QYXJzZXIoaW1wb3J0KCIuLi8uLi9qaXNvbi9saWx5cG9uZC5qaXNvbiIpKTsKCQkJdGhpcy5sb2FkaW5nTGlseVBhcnNlciA9IGZhbHNlOwoJCQljb25zb2xlLmRlYnVnKCJsaWx5IHBhcnNlciBsb2FkZWQuIik7CgoJCQl0aGlzLnVwZGF0ZUxpbHlEb2N1bWVudCgpOwoJCX0sCgoKCQlhc3luYyBtb3VudGVkICgpIHsKCQkJY29uc3Qga2V5RG93bkhhbmRsZXIgPSBldmVudCA9PiB7CgkJCQlzd2l0Y2ggKGV2ZW50LmNvZGUpIHsKCQkJCWNhc2UgIkY4IjoKCQkJCQl0aGlzLmVuZ3JhdmUoKTsKCgkJCQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKCgkJCQkJYnJlYWs7CgkJCQl9CgoJCQkJLy9pZiAoWyJJTlBVVCIsICJURVhUQVJFQSJdLmluY2x1ZGVzKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQubm9kZU5hbWUpKQoJCQkJLy8JcmV0dXJuOwoJCQl9OwoJCQlkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwga2V5RG93bkhhbmRsZXIpOwoJCQl0aGlzLmFwcGVuZENsZWFuZXIoKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGtleURvd25IYW5kbGVyKSk7CgoJCQlhd2FpdCB0aGlzLiRuZXh0VGljaygpOwoJCQl0aGlzLndhdGNoRW5ncmF2ZSgpOwoJCX0sCgoKCQltZXRob2RzOiB7CgkJCW9uUmVzaXplICgpIHsKCQkJCXRoaXMuYnVpbGRDb250YWluZXJTaXplLndpZHRoID0gdGhpcy4kcmVmcy5idWlsZENvbnRhaW5lci5jbGllbnRXaWR0aDsKCQkJCXRoaXMuYnVpbGRDb250YWluZXJTaXplLmhlaWdodCA9IHRoaXMuJHJlZnMuYnVpbGRDb250YWluZXIuY2xpZW50SGVpZ2h0OwoKCQkJCXRoaXMuc2hlZXRDb250YWluZXJTaXplLndpZHRoID0gdGhpcy4kcmVmcy5zaGVldENvbnRhaW5lci5jbGllbnRXaWR0aDsKCQkJCXRoaXMuc2hlZXRDb250YWluZXJTaXplLmhlaWdodCA9IHRoaXMuJHJlZnMuc2hlZXRDb250YWluZXIuY2xpZW50SGVpZ2h0OwoJCQl9LAoKCgkJCW9uRHJhZ092ZXIgKGV2ZW50KSB7CgkJCQljb25zdCBpdGVtID0gZXZlbnQuZGF0YVRyYW5zZmVyLml0ZW1zWzBdOwoJCQkJaWYgKGl0ZW0pCgkJCQkJdGhpcy5kcmFnSG92ZXIgPSBpdGVtLnR5cGU7CgkJCX0sCgoKCQkJYXN5bmMgb25Ecm9wRmlsZSAoZXZlbnQsIHtzb3VyY2V9ID0ge30pIHsKCQkJCXRoaXMuZHJhZ0hvdmVyID0gbnVsbDsKCQkJCXRoaXMuc291cmNlRHJhZ0hvdmVyID0gZmFsc2U7CgkJCQkvL2NvbnNvbGUubG9nKCJvbkRyb3BGaWxlOiIsIGV2ZW50LmRhdGFUcmFuc2Zlci5pdGVtc1swXSwgc291cmNlKTsKCgkJCQlpZiAodGhpcy5zb3VyY2VFZGl0b3JDb25uZWN0ZWQpIHsKCQkJCQlpZiAod2luZG93LmNvbmZpcm0oIkJyZWFrIHRoZSBlZGlkdG9yIGZpbGUgY29ubmVjdGlvbiBhbmQgY29udGludWUgbG9hZGluZz8iKSkKCQkJCQkJdGhpcy4kcmVmcy5yZW1vdGVGaWxlLmRpc2Nvbm5lY3QoKTsKCQkJCQllbHNlCgkJCQkJCXJldHVybjsKCQkJCX0KCgkJCQljb25zdCBmaWxlID0gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdOwoJCQkJaWYgKGZpbGUpIHsKCQkJCQlzd2l0Y2ggKGZpbGUudHlwZSkgewoJCQkJCWNhc2UgInRleHQveC1saWx5cG9uZCI6CgkJCQkJY2FzZSAidGV4dC9saWx5cG9uZC1zb3VyY2UiOgoJCQkJCWNhc2UgIiI6CgkJCQkJCXRoaXMubGlseVNvdXJjZSA9IGF3YWl0IGZpbGUucmVhZEFzKCJUZXh0Iik7CgkJCQkJCS8vY29uc29sZS5sb2coImNvbnRlbnQ6IiwgY29udGVudCk7CgoJCQkJCQl0aGlzLmVuZ3JhdmVyTG9ncyA9IG51bGw7CgkJCQkJCXRoaXMuY2xlYXJTaGVldCgpOwoKCQkJCQkJYXdhaXQgdGhpcy51cGRhdGVMaWx5RG9jdW1lbnQoKTsKCgkJCQkJCXRoaXMuZW5ncmF2ZSgpOwoKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAidGV4dC94bWwiOgoJCQkJCQl0aGlzLmNvbnZlcnRpbmcgPSB0cnVlOwoKCQkJCQkJdHJ5IHsKCQkJCQkJCWNvbnN0IHhtbCA9IGF3YWl0IGZpbGUucmVhZEFzKCJUZXh0Iik7CgkJCQkJCQkvL2NvbnNvbGUubG9nKCJ4bWw6IiwgeG1sKTsKCQkJCQkJCXRoaXMubGlseVNvdXJjZSA9IGF3YWl0IHRoaXMubXVzaWN4bWwybHkoeG1sKTsKCQkJCQkJCXRoaXMuZW5ncmF2ZXJMb2dzID0gbnVsbDsKCQkJCQkJfQoJCQkJCQljYXRjaCAoZXJyKSB7CgkJCQkJCQljb25zb2xlLndhcm4oIm11c2ljeG1sMmx5IGZhaWxlZDoiLCBlcnIpOwoJCQkJCQl9CgkJCQkJCXRoaXMuY29udmVydGluZyA9IGZhbHNlOwoKCQkJCQkJdGhpcy5jbGVhclNoZWV0KCk7CgoJCQkJCQlhd2FpdCB0aGlzLnVwZGF0ZUxpbHlEb2N1bWVudCgpOwoKCQkJCQkJaWYgKHRoaXMubGlseVNvdXJjZSkKCQkJCQkJCXRoaXMuZW5ncmF2ZSgpOwoKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAiYXVkaW8vbWlkaSI6CgkJCQkJY2FzZSAiYXVkaW8vbWlkIjoKCQkJCQkJaWYgKHNvdXJjZSkgewoJCQkJCQkJdGhpcy5jb252ZXJ0aW5nID0gdHJ1ZTsKCgkJCQkJCQl0cnkgewoJCQkJCQkJCXRoaXMubGlseVNvdXJjZSA9IGF3YWl0IHRoaXMubWlkaTJseShmaWxlKTsKCQkJCQkJCQl0aGlzLmVuZ3JhdmVyTG9ncyA9IG51bGw7CgkJCQkJCQl9CgkJCQkJCQljYXRjaCAoZXJyKSB7CgkJCQkJCQkJY29uc29sZS53YXJuKCJtdXNpY3htbDJseSBmYWlsZWQ6IiwgZXJyKTsKCQkJCQkJCX0KCQkJCQkJCXRoaXMuY29udmVydGluZyA9IGZhbHNlOwoKCQkJCQkJCXRoaXMuY2xlYXJTaGVldCgpOwoKCQkJCQkJCWF3YWl0IHRoaXMudXBkYXRlTGlseURvY3VtZW50KCk7CgoJCQkJCQkJaWYgKHRoaXMubGlseVNvdXJjZSkKCQkJCQkJCQl0aGlzLmVuZ3JhdmUoKTsKCQkJCQkJfQoJCQkJCQllbHNlIHsKCQkJCQkJCWNvbnN0IGJ1ZmZlciA9IGF3YWl0IGZpbGUucmVhZEFzKCJBcnJheUJ1ZmZlciIpOwoJCQkJCQkJdGhpcy5taWRpID0gTUlESS5wYXJzZU1pZGlEYXRhKGJ1ZmZlcik7CgkJCQkJCX0KCgkJCQkJCWJyZWFrOwoJCQkJCWRlZmF1bHQ6CgkJCQkJCWNvbnNvbGUud2FybigidW5zdXBwb3J0ZWQgZmlsZSB0eXBlOiIsIGZpbGUudHlwZSk7CgkJCQkJfQoJCQkJfQoJCQkJLyplbHNlIHsKCQkJCQljb25zdCBpdGVtID0gZXZlbnQuZGF0YVRyYW5zZmVyLml0ZW1zWzBdOwoJCQkJCWlmIChpdGVtKSB7CgkJCQkJCXN3aXRjaCAoaXRlbS50eXBlKSB7CgkJCQkJCWNhc2UgInRleHQvcGxhaW4iOgoJCQkJCQkJdGhpcy5saWx5U291cmNlID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBpdGVtLmdldEFzU3RyaW5nKHJlc29sdmUpKTsKCgkJCQkJCQl0aGlzLmNsZWFyU2hlZXQoKTsKCgkJCQkJCQl0aGlzLnVwZGF0ZUxpbHlEb2N1bWVudCgpOwoJCQkJCQkJdGhpcy5lbmdyYXZlKCk7CgoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQl9CgkJCQl9Ki8KCQkJfSwKCgoJCQlvbk1pZGkgKGRhdGEsIHRpbWVzdGFtcCkgewoJCQkJLy9jb25zb2xlLmxvZygib25NaWRpOiIsIGRhdGEsIHRpbWVzdGFtcCk7CgkJCQlpZiAodGhpcy5lbmFibGVkTWlkaUF1ZGlvKSB7CgkJCQkJc3dpdGNoIChkYXRhLnN1YnR5cGUpIHsKCQkJCQljYXNlICJub3RlT24iOgoJCQkJCQlNaWRpQXVkaW8ubm90ZU9uKGRhdGEuY2hhbm5lbCwgZGF0YS5ub3RlTnVtYmVyLCBkYXRhLnZlbG9jaXR5LCB0aW1lc3RhbXApOwoKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAibm90ZU9mZiI6CgkJCQkJCU1pZGlBdWRpby5ub3RlT2ZmKGRhdGEuY2hhbm5lbCwgZGF0YS5ub3RlTnVtYmVyLCB0aW1lc3RhbXApOwoKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9LAoKCgkJCW9uQ3Vyc29yUGFnZVNoaWZ0IChwYWdlSW5kZXgpIHsKCQkJCWNvbnNvbGUubG9nKCJvbkN1cnNvclBhZ2VTaGlmdDoiLCBwYWdlSW5kZXgpOwoJCQl9LAoKCgkJCW9uUG9pbnRlclVwZGF0ZSAocG9pbnQpIHsKCQkJCS8vY29uc29sZS5sb2coIm9uUG9pbnRlclVwZGF0ZToiLCBwb2ludCk7CgkJCQl0aGlzLnBvaW50ZXJEYXRhID0gcG9pbnQ7CgkJCX0sCgoKCQkJYXN5bmMgb25Qb2ludGVyQ2xpY2sgKHBvaW50LCBldmVudCkgewoJCQkJaWYgKCFldmVudC5jdHJsS2V5ICYmIE51bWJlci5pc0Zpbml0ZShwb2ludC50aWNrKSkgewoJCQkJCWNvbnN0IGlzUGxheWluZyA9IHRoaXMubWlkaVBsYXllci5pc1BsYXlpbmc7CgkJCQkJaWYgKGlzUGxheWluZykgewoJCQkJCQl0aGlzLm1pZGlQbGF5ZXIucGF1c2UoKTsKCQkJCQkJYXdhaXQgYW5pbWF0aW9uRGVsYXkoKTsKCQkJCQl9CgoJCQkJCXRoaXMubWlkaVBsYXllci5wcm9ncmVzc1RpY2tzID0gcG9pbnQudGljazsKCgkJCQkJaWYgKGlzUGxheWluZykKCQkJCQkJdGhpcy5taWRpUGxheWVyLnBsYXkoKTsKCQkJCX0KCQkJfSwKCgoJCQljbGVhclNoZWV0ICgpIHsKCQkJCXRoaXMudGl0bGUgPSBudWxsOwoJCQkJdGhpcy5zaGVldERvY3VtZW50ID0gbnVsbDsKCQkJCXRoaXMuc2hlZXROb3RhdGlvbiA9IG51bGw7CgkJCQl0aGlzLnN2Z0hhc2hUYWJsZSA9IG51bGw7CgkJCQl0aGlzLmxpbHlOb3RhdGlvbiA9IG51bGw7CgkJCQl0aGlzLm1pZGkgPSBudWxsOwoJCQkJdGhpcy5taWRpTm90YXRpb24gPSBudWxsOwoJCQkJdGhpcy5zY2hlZHVsZXIgPSBudWxsOwoJCQkJdGhpcy5waXRjaENvbnRleHRHcm91cCA9IG51bGw7CgkJCQl0aGlzLm1pZGlQbGF5ZXIgPSBudWxsOwoJCQkJdGhpcy5tYXRjaGVyTm90YXRpb25zID0gbnVsbDsKCQkJCXRoaXMuYmFraW5nSW1hZ2VzID0gbnVsbDsKCQkJfSwKCgoJCQlhc3luYyBtdXNpY3htbDJseSAoeG1sKSB7CgkJCQljb25zdCBib2R5ID0gbmV3IEZvcm1EYXRhKCk7CgkJCQlib2R5LmFwcGVuZCgieG1sIiwgeG1sKTsKCQkJCWJvZHkuYXBwZW5kKCJvcHRpb25zIiwgSlNPTi5zdHJpbmdpZnkoewoJCQkJCXJlbW92ZUJyZWFrOiB0aGlzLnhtbDJseU9wdGlvbnMucmVtb3ZlQnJlYWtzLAoJCQkJCXJlbW92ZVBhZ2VCcmVhazogdGhpcy54bWwybHlPcHRpb25zLnJlbW92ZUJyZWFrcywKCQkJCX0pKTsKCgkJCQljb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCIvbXVzaWN4bWwybHkiLCB7CgkJCQkJbWV0aG9kOiAiUE9TVCIsCgkJCQkJYm9keSwKCQkJCX0pOwoJCQkJaWYgKCFyZXNwb25zZS5vaykgewoJCQkJCWNvbnN0IHJlYXNvbiA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTsKCQkJCQljb25zb2xlLndhcm4oIm11c2ljeG1sMmx5IGZhaWxlZDoiLCByZWFzb24pOwoKCQkJCQl0aHJvdyBuZXcgRXJyb3IocmVhc29uKTsKCQkJCX0KCQkJCWVsc2UgIHsKCQkJCQljb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CgkJCQkJY29uc29sZS5kZWJ1ZygibXVzaWN4bWwybHkgYWNjb21wbGlzaGVkLiIpOwoKCQkJCQlyZXR1cm4gdGhpcy5wb3N0UHJvY2Vzc1NvdXJjZShyZXN1bHQpOwoJCQkJfQoJCQl9LAoKCgkJCWFzeW5jIG1pZGkybHkgKG1pZGkpIHsKCQkJCWNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTsKCQkJCWJvZHkuYXBwZW5kKCJtaWRpIiwgbWlkaSk7CgkJCQlib2R5LmFwcGVuZCgib3B0aW9ucyIsIEpTT04uc3RyaW5naWZ5KHtyZW1vdmVJbnN0cnVtZW50TmFtZTogdHJ1ZSwgdHVwbGV0UmVwbGFjZTogdHJ1ZX0pKTsKCgkJCQljb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCIvbWlkaTJseSIsIHsKCQkJCQltZXRob2Q6ICJQT1NUIiwKCQkJCQlib2R5LAoJCQkJfSk7CgkJCQlpZiAoIXJlc3BvbnNlLm9rKSB7CgkJCQkJY29uc29sZS53YXJuKCJNSURJIHRvIGx5IGZhaWxlZDoiLCBhd2FpdCByZXNwb25zZS50ZXh0KCkpOwoKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJcmV0dXJuIHJlc3BvbnNlLnRleHQoKTsKCQkJfSwKCgoJCQlhc3luYyBlbmdyYXZlICgpIHsKCQkJCWlmICh0aGlzLmVuZ3JhdmluZykgewoJCQkJCWNvbnNvbGUud2FybigiYWxyZWFkeSBlbmdyYXZpbmcsIGNhbmNlbGxlZC4iKTsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJdGhpcy5lbmdyYXZpbmcgPSB0cnVlOwoJCQkJYXdhaXQgdGhpcy4kbmV4dFRpY2soKTsKCQkJCWF3YWl0IGFuaW1hdGlvbkRlbGF5KCk7CgkJCQlhd2FpdCBhbmltYXRpb25EZWxheSgpOwoKCQkJCWlmICh0aGlzLnRva2VuaXplU3RhZmYpIHsKCQkJCQl0cnkgewoJCQkJCQlhd2FpdCB0aGlzLnVwZGF0ZUxpbHlEb2N1bWVudCgpOwoJCQkJCQlpZiAodGhpcy5saWx5RG9jdW1lbnQpCgkJCQkJCQl0aGlzLmxpbHlEb2N1bWVudC5pbnRlcnByZXQoe3VzZUNhY2hlZDogZmFsc2V9KTsKCQkJCQl9CgkJCQkJY2F0Y2ggKGVycikgewoJCQkJCQljb25zb2xlLndhcm4oImxpbHlkb2N1bWVudCBwYXJzaW5nIGZhaWxlZDoiLCBlcnIpOwoJCQkJCX0KCQkJCX0KCgkJCQljb25zdCBib2R5ID0gbmV3IEZvcm1EYXRhKCk7CgkJCQlib2R5LmFwcGVuZCgic291cmNlIiwgdGhpcy5saWx5U291cmNlKTsKCQkJCWlmICh0aGlzLmVuZ3JhdmVXaXRoTG9ncykKCQkJCQlib2R5LmFwcGVuZCgibG9nIiwgdGhpcy5lbmdyYXZlV2l0aExvZ3MpOwoJCQkJaWYgKHRoaXMudG9rZW5pemVTdGFmZikKCQkJCQlib2R5LmFwcGVuZCgidG9rZW5pemUiLCB0aGlzLnRva2VuaXplU3RhZmYpOwoKCQkJCWNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goIi9lbmdyYXZlIiwgewoJCQkJCW1ldGhvZDogIlBPU1QiLAoJCQkJCWJvZHksCgkJCQl9KTsKCQkJCWlmICghcmVzcG9uc2Uub2spIHsKCQkJCQl0aGlzLmVuZ3JhdmVyTG9ncyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTsKCQkJCQkvL2NvbnNvbGUud2FybigiRW5ncmF2aW5nIGZhaWxlZDoiLCBhd2FpdCByZXNwb25zZS50ZXh0KCkpOwoKCQkJCQl0aGlzLmNsZWFyU2hlZXQoKTsKCQkJCQl0aGlzLnN2Z0RvY3VtZW50cyA9IG51bGw7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQljb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7CgkJCQkJY29uc29sZS5sb2coIkVuZ3JhdmluZyBhY2NvbXBsaXNoZWQuIik7CgoJCQkJCXRoaXMuZW5ncmF2ZXJMb2dzID0gcmVzdWx0LmxvZ3M7CgkJCQkJdGhpcy5lbmdyYXZlckxvZ2dlciA9IHJlc3VsdC5sb2dnZXI7CgkJCQkJdGhpcy5zdmdEb2N1bWVudHMgPSByZXN1bHQuc3ZnczsKCgkJCQkJaWYgKHRoaXMudG9rZW5pemVTdGFmZikgewoJCQkJCQkvL2NvbnNvbGUubG9nKCJkb2M6IiwgcmVzdWx0LmRvYywgcmVzdWx0Lmhhc2hUYWJsZSk7CgkJCQkJCXRoaXMuc2hlZXREb2N1bWVudCA9IHJlY292ZXJKU09OKHJlc3VsdC5kb2MsIHtTdGFmZlRva2VuLCBTaGVldERvY3VtZW50fSk7CgkJCQkJCXRoaXMuc3ZnSGFzaFRhYmxlID0gcmVzdWx0Lmhhc2hUYWJsZTsKCgkJCQkJCXRoaXMuc2hlZXREb2N1bWVudC5hc3NpZ25GbGFnc1RyYWNrKCk7CgoJCQkJCQlpZiAodGhpcy5hcnRpY3VsYXRlTUlESSkKCQkJCQkJCXRoaXMubWlkaSA9IGF3YWl0IHRoaXMuZW5ncmF2ZU1JREkoKTsKCQkJCQkJZWxzZQoJCQkJCQkJdGhpcy5taWRpID0gcmVzdWx0Lm1pZGk7CgoJCQkJCQlpZiAodGhpcy5lbmFibGVkU2hlZXROb3RhdGlvbikKCQkJCQkJCXRoaXMudXBkYXRlU2hlZXROb3RhdGlvbigpOwoKCQkJCQkJaWYgKHRoaXMubWlkaSkKCQkJCQkJCXRoaXMubWF0Y2hOb3RhdGlvbnModGhpcy5taWRpKTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCQl0aGlzLmNsZWFyU2hlZXQoKTsKCgkJCQkJdGhpcy5lbmdyYXZpbmcgPSBmYWxzZTsKCQkJCX0KCgkJCQl0aGlzLmVuZ3JhdmVyRGlydHkgPSBmYWxzZTsKCQkJCXRoaXMuZW5ncmF2aW5nID0gZmFsc2U7CgkJCX0sCgoKCQkJYXN5bmMgZW5ncmF2ZVNjbSAoKSB7CgkJCQljb25zdCBib2R5ID0gbmV3IEZvcm1EYXRhKCk7CgkJCQlib2R5LmFwcGVuZCgic291cmNlIiwgdGhpcy5saWx5U291cmNlKTsKCgkJCQljb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCIvZW5ncmF2ZVNjbSIsIHsKCQkJCQltZXRob2Q6ICJQT1NUIiwKCQkJCQlib2R5LAoJCQkJfSk7CgkJCQlpZiAoIXJlc3BvbnNlLm9rKSB7CgkJCQkJY29uc29sZS53YXJuKCJlbmdyYXZlU2NtIGVycm9yOiIsIGF3YWl0IHJlc3BvbnNlLnRleHQoKSk7CgkJCQkJcmV0dXJuOwoJCQkJfQoKCQkJCWNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKCQkJCXRoaXMuZW5ncmF2ZXJMb2dzID0gcmVzdWx0LmxvZ3M7CgoJCQkJY29uc3QgbGl5YWQgPSBhd2FpdCBpbXBvcnQoImxpeWFkIik7CgkJCQljb25zdCBzY21PYmogPSBsaXlhZC5TKHJlc3VsdC5zY20pOwoJCQkJY29uc29sZS5sb2coIlNDTToiLCBzY21PYmopOwoJCQl9LAoKCgkJCWFzeW5jIGVuZ3JhdmVNSURJICh7YXJ0aWN1bGF0ZSA9IHRydWV9ID0ge30pIHsKCQkJCWNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTsKCQkJCWJvZHkuYXBwZW5kKCJzb3VyY2UiLCB0aGlzLmxpbHlTb3VyY2UpOwoJCQkJaWYgKGFydGljdWxhdGUpCgkJCQkJYm9keS5hcHBlbmQoImFydGljdWxhdGUiLCAiMSIpOwoKCQkJCWNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goIi9lbmdyYXZlTUlESSIsIHsKCQkJCQltZXRob2Q6ICJQT1NUIiwKCQkJCQlib2R5LAoJCQkJfSk7CgkJCQlpZiAoIXJlc3BvbnNlLm9rKSB7CgkJCQkJY29uc29sZS53YXJuKCJlbmdyYXZlTUlESSBlcnJvcjoiLCBhd2FpdCByZXNwb25zZS50ZXh0KCkpOwoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQljb25zdCBidWZmZXIgPSBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpOwoJCQkJcmV0dXJuIE1JREkucGFyc2VNaWRpRGF0YShidWZmZXIpOwoJCQl9LAoKCgkJCXNhdmVTb3VyY2UgKCkgewoJCQkJY29uc3Qgc291cmNlRmlsZSA9IG5ldyBCbG9iKFt0aGlzLmxpbHlTb3VyY2VdLCB7dHlwZTogInRleHQveC1saWx5cG9uZCJ9KTsKCgkJCQljb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwoJCQkJbGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChzb3VyY2VGaWxlKTsKCgkJCQljb25zdCBmaWxlbmFtZSA9IHByb21wdCgiSW5wdXQgeW91ciBmaWxlIG5hbWU6IiwgYCR7dGhpcy50aXRsZSB8fCAibG90dXMtZWRpdG9yIn0ubHlgKTsKCQkJCWlmIChmaWxlbmFtZSkgewoJCQkJCWxpbmsuZG93bmxvYWQgPSAvXC5cdysvLnRlc3QoZmlsZW5hbWUpID8gZmlsZW5hbWUgOiBmaWxlbmFtZSArICIubHkiOwoJCQkJCWxpbmsuY2xpY2soKTsKCQkJCX0KCQkJfSwKCgoJCQl3YXRjaEVuZ3JhdmUgKCkgewoJCQkJaWYgKHRoaXMuYXV0b0VuZ3JhdmUgJiYgdGhpcy5lbmdyYXZlckRpcnR5ICYmICF0aGlzLmVuZ3JhdmluZykgCgkJCQkJdGhpcy5lbmdyYXZlKCk7CgkJCX0sCgoKCQkJdG9nZ2xlUGxheWVyICgpIHsKCQkJCWlmICh0aGlzLm1pZGlQbGF5ZXIpIHsKCQkJCQlpZiAodGhpcy5taWRpUGxheWVyLmlzUGxheWluZykKCQkJCQkJdGhpcy5taWRpUGxheWVyLnBhdXNlKCk7CgkJCQkJZWxzZQoJCQkJCQl0aGlzLm1pZGlQbGF5ZXIucGxheSgpOwoJCQkJfQoJCQl9LAoKCgkJCWFzeW5jIHNsaWNlU291cmNlIChzdGFydFRpY2ssIGVuZFRpY2spIHsKCQkJCWlmICghdGhpcy5taWRpKQoJCQkJCXJldHVybiBudWxsOwoKCQkJCWNvbnN0IHBhcnRNaWRpID0gTWlkaVV0aWxzLnNsaWNlTWlkaSh0aGlzLm1pZGksIHN0YXJ0VGljaywgZW5kVGljayk7CgkJCQljb25zb2xlLmxvZygicGFydE1pZGk6IiwgcGFydE1pZGkpOwoKCQkJCWNvbnN0IG1pZGkgPSBuZXcgQmxvYihbTUlESS5lbmNvZGVNaWRpRmlsZShwYXJ0TWlkaSldLCB7dHlwZTogImF1ZGlvL21pZGkifSk7CgkJCQljb25zdCBseSA9IHRoaXMubWlkaTJseShtaWRpKTsKCQkJCWNvbnNvbGUubG9nKCJseToiLCBseSk7CgkJCX0sCgoKCQkJdXBkYXRlU2hlZXROb3RhdGlvbiAoKSB7CgkJCQl0aGlzLnNoZWV0Tm90YXRpb24gPSBudWxsOwoJCQkJdGhpcy5tYXRjaGVyTm90YXRpb25zID0gbnVsbDsKCgkJCQlpZiAodGhpcy5zaGVldERvY3VtZW50KSB7CgkJCQkJY29uc3QgbG9nZ2VyID0gbmV3IExvZ1JlY29yZGVyKHtlbmFibGVkOiB0cnVlfSk7CgkJCQkJdGhpcy5zaGVldE5vdGF0aW9uID0gU3RhZmZOb3RhdGlvbi5wYXJzZU5vdGF0aW9uRnJvbVNoZWV0RG9jdW1lbnQodGhpcy5zaGVldERvY3VtZW50LCB7bG9nZ2VyfSk7CgoJCQkJCWlmICh0aGlzLmxpbHlEb2N1bWVudCkgewoJCQkJCQljb25zdCB0aWNrVGFibGUgPSB0aGlzLmxpbHlEb2N1bWVudC5nZXRMb2NhdGlvblRpY2tUYWJsZSgpOwoJCQkJCQlTdGFmZk5vdGF0aW9uLmFzc2lnblRpY2tCeUxvY2F0aW9uVGFibGUodGhpcy5zaGVldE5vdGF0aW9uLCB0aWNrVGFibGUpOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJCWNvbnNvbGUud2FybigibGlseURvY3VtZW50IGlzIG51bGwsIGFzc2lnblRpY2tCeUxvY2F0aW9uVGFibGUgc2tpcHBlZC4iKTsKCgkJCQkJY29uc29sZS5sb2coInNoZWV0IG5vdGF0aW9uIHBhcnNlZDoiLCBsb2dnZXIudG9KU09OKCkpOwoJCQkJfQoJCQl9LAoKCgkJCWFzeW5jIG1hdGNoTm90YXRpb25zIChtaWRpKSB7CgkJCQljb25zb2xlLmFzc2VydChtaWRpLCAibWlkaSBpcyBudWxsLiIpOwoJCQkJaWYgKHRoaXMuZW5hYmxlZFNoZWV0Tm90YXRpb24pIHsKCQkJCQljb25zb2xlLmFzc2VydCh0aGlzLnNoZWV0Tm90YXRpb24sICJzaGVldE5vdGF0aW9uIGlzIG51bGwuIik7CgoJCQkJCWNvbnN0IG1pZGlOb3RhdGlvbiA9IE11c2ljTm90YXRpb24uTm90YXRpb24ucGFyc2VNaWRpKG1pZGkpOwoKCQkJCQl0aGlzLm1hdGNoZXJOb3RhdGlvbnMgPSBhd2FpdCBTdGFmZk5vdGF0aW9uLm1hdGNoTm90YXRpb25zKG1pZGlOb3RhdGlvbiwgdGhpcy5zaGVldE5vdGF0aW9uLCB7ZW5hYmxlRnV6enk6IHRoaXMuZW5hYmxlZEZ1enp5TWF0Y2hlcn0pOwoKCQkJCQl0aGlzLm1pZGlOb3RhdGlvbiA9IG1pZGlOb3RhdGlvbjsKCgkJCQkJdGhpcy5waXRjaENvbnRleHRHcm91cCA9IFBpdGNoQ29udGV4dFRhYmxlLmNyZWF0ZVBpdGNoQ29udGV4dEdyb3VwKHRoaXMuc2hlZXROb3RhdGlvbi5waXRjaENvbnRleHRzLCB0aGlzLm1pZGlOb3RhdGlvbik7CgoJCQkJCXRoaXMubWF0Y2hlZElkcyA9IG5ldyBTZXQoKTsKCQkJCQl0aGlzLm1pZGlOb3RhdGlvbi5ub3Rlcy5mb3JFYWNoKG5vdGUgPT4gbm90ZS5pZHMgJiYgbm90ZS5pZHMuZm9yRWFjaChpZCA9PiB0aGlzLm1hdGNoZWRJZHMuYWRkKGlkKSkpOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJdGhpcy5saWx5Tm90YXRpb24gPSB0aGlzLmxpbHlEb2N1bWVudC5pbnRlcnByZXQoKS5nZXROb3RhdGlvbigpOwoJCQkJCXRoaXMubWF0Y2hlck5vdGF0aW9ucyA9IGF3YWl0IExpbHlOb3RhdGlvbi5tYXRjaFdpdGhFeGFjdE1JREkodGhpcy5saWx5Tm90YXRpb24sIG1pZGkpOwoKCQkJCQljb25zdCBtZWFzdXJlSW5kaWNlcyA9IHRoaXMubGlseU5vdGF0aW9uLmdldE1lYXN1cmVJbmRpY2VzKHRoaXMubWVhc3VyZUxheW91dFR5cGUpOwoJCQkJCXRoaXMubWlkaU5vdGF0aW9uID0gdGhpcy5saWx5Tm90YXRpb24udG9QZXJmb3JtaW5nTm90YXRpb25XaXRoRXZlbnRzKG1lYXN1cmVJbmRpY2VzKTsKCQkJCQl0aGlzLnBpdGNoQ29udGV4dEdyb3VwID0gdGhpcy5saWx5Tm90YXRpb24uZ2V0Q29udGV4dEdyb3VwKG1lYXN1cmVJbmRpY2VzKTsKCgkJCQkJdGhpcy5tYXRjaGVkSWRzID0gdGhpcy5saWx5Tm90YXRpb24uaWRTZXQ7CgoJCQkJCXRoaXMuc2NoZWR1bGVyID0gTGlseU5vdGF0aW9uLlNjaGVkdWxlci5jcmVhdGVGcm9tTm90YXRpb24odGhpcy5saWx5Tm90YXRpb24udG9QZXJmb3JtaW5nTm90YXRpb24obWVhc3VyZUluZGljZXMsIHt3aXRoUmVzdFRpZWQ6IHRydWV9KSwgdGhpcy5zaGVldERvY3VtZW50LmdldFRva2VuTWFwKCkpOwoJCQkJfQoKCQkJCXRoaXMuc2hlZXREb2N1bWVudC51cGRhdGVNYXRjaGVkVG9rZW5zKHRoaXMubWF0Y2hlZElkcyk7CgoJCQkJaWYgKHRoaXMuYmFraW5nU2hlZXQpCgkJCQkJdGhpcy5iYWtlU2hlZXQoKTsKCQkJfSwKCgoJCQlhc3luYyBleHBvcnRTY29yZSAoKSB7CgkJCQljb25zb2xlLmFzc2VydCh0aGlzLnNoZWV0RG9jdW1lbnQsICJzaGVldERvY3VtZW50IGlzIG51bGwuIik7CgkJCQljb25zb2xlLmFzc2VydCh0aGlzLnBpdGNoQ29udGV4dEdyb3VwLCAicGl0Y2hDb250ZXh0R3JvdXAgaXMgbnVsbC4iKTsKCQkJCWNvbnNvbGUuYXNzZXJ0KHRoaXMubWlkaU5vdGF0aW9uLCAibWlkaU5vdGF0aW9uIGlzIG51bGwuIik7CgoJCQkJYXdhaXQgdGhpcy51cGRhdGVMaWx5RG9jdW1lbnQoKTsKCQkJCWNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLmxpbHlEb2N1bWVudC5nbG9iYWxBdHRyaWJ1dGVzKHtyZWFkb25seTogdHJ1ZX0pOwoKCQkJCWNvbnN0IG1pZGlNdXNpYyA9IHRoaXMubGlseURvY3VtZW50LmludGVycHJldCgpLm1pZGlNdXNpYzsKCgkJCQljb25zdCBtZXRhID0gewoJCQkJCXRpdGxlOiBhdHRyaWJ1dGVzLnRpdGxlICYmIGF0dHJpYnV0ZXMudGl0bGUudG9TdHJpbmcoKSwKCQkJCQljb21wb3NlcjogYXR0cmlidXRlcy5jb21wb3NlciAmJiBhdHRyaWJ1dGVzLmNvbXBvc2VyLnRvU3RyaW5nKCksCgkJCQkJcGFnZVNpemU6IHRoaXMuc2hlZXREb2N1bWVudC5wYWdlU2l6ZSwKCQkJCQlwYWdlQ291bnQ6IHRoaXMuc2hlZXREb2N1bWVudC5wYWdlcy5sZW5ndGgsCgkJCQkJc3RhZmZTaXplOiBhdHRyaWJ1dGVzLnN0YWZmU2l6ZSwKCQkJCQl0cmFja0luZm9zOiBtaWRpTXVzaWMgJiYgbWlkaU11c2ljLnRyYWNrQ29udGV4dERpY3RzLAoJCQkJfTsKCgkJCQkvL2NvbnN0IG5vdGVMaW5raW5ncyA9IHRoaXMubWlkaU5vdGF0aW9uLm5vdGVzLm1hcChub3RlID0+IF8ucGljayhub3RlLCBbImlkcyIsICJzdGFmZlRyYWNrIiwgImNvbnRleHRJbmRleCJdKSk7CgoJCQkJY29uc3QgZGF0YSA9IHsKCQkJCQl2ZXJzaW9uOiBucG1QYWNrYWdlLnZlcnNpb24gKyAiIC1wbGF5Z3JvdW5kIiwKCQkJCQltZXRhLAoJCQkJCWRvYzogdGhpcy5zaGVldERvY3VtZW50LAoJCQkJCS8vbWlkaTogdGhpcy5taWRpLAoJCQkJCWhhc2hUYWJsZTogdGhpcy5iYWtpbmdTaGVldCA/IG51bGwgOiB0aGlzLnN2Z0hhc2hUYWJsZSwKCQkJCQkvL25vdGVMaW5raW5ncywKCQkJCQlsaWx5Tm90YXRpb246IHRoaXMubGlseU5vdGF0aW9uLAoJCQkJCS8vcGl0Y2hDb250ZXh0R3JvdXA6IHRoaXMucGl0Y2hDb250ZXh0R3JvdXAsCgkJCQl9OwoJCQkJY29uc3Qgc2NvcmUgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoZGF0YSldLCB7dHlwZTogImFwcGxpY2F0aW9uL2pzb24ifSk7CgoJCQkJY29uc3Qge2RlZmF1bHQ6IEpTWmlwfSA9IGF3YWl0IGltcG9ydCgianN6aXAiKTsKCQkJCWNvbnN0IHBhY2sgPSBuZXcgSlNaaXAoKTsKCQkJCXBhY2suZmlsZSgic2NvcmUuanNvbiIsIHNjb3JlKTsKCgkJCQlpZiAodGhpcy5iYWtpbmdTaGVldCAmJiB0aGlzLmJha2luZ0ltYWdlcykgewoJCQkJCWF3YWl0IFByb21pc2UuYWxsKHRoaXMuYmFraW5nSW1hZ2VzLm1hcChhc3luYyAodXJsLCBpbmRleCkgPT4gewoJCQkJCQljb25zdCBpbWcgPSBhd2FpdCAoYXdhaXQgZmV0Y2godXJsKSkuYmxvYigpOwoJCQkJCQlwYWNrLmZpbGUoYGJha2luZyR7aW5kZXh9LnBuZ2AsIGltZyk7CgkJCQkJCWNvbnNvbGUubG9nKCJpbWc6IiwgaW1nKTsKCQkJCQl9KSk7CgkJCQl9CgoJCQkJY29uc3QgYmxvYiA9IGF3YWl0IHBhY2suZ2VuZXJhdGVBc3luYyh7dHlwZTogImJsb2IiLCBjb21wcmVzc2lvbjogIkRFRkxBVEUiLCBjb21wcmVzc2lvbk9wdGlvbnM6IHtsZXZlbDogNX19KTsKCQkJCWRvd25sb2FkVXJsKFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYiksIGAke3RoaXMudGl0bGUgfHwgIiJ9LnppcGApOwoJCQl9LAoKCgkJCWFzeW5jIHVwZGF0ZUxpbHlEb2N1bWVudCAoKSB7CgkJCQlpZiAoKCF0aGlzLmxpbHlEb2N1bWVudCB8fCB0aGlzLmxpbHlEb2N1bWVudERpcnR5KSAmJiB0aGlzLmxpbHlQYXJzZXIpIHsKCQkJCQljb25zdCByYXcgPSBhd2FpdCB0aGlzLmxpbHlQYXJzZXIucGFyc2UodGhpcy5saWx5U291cmNlKTsKCQkJCQl0aGlzLmxpbHlEb2N1bWVudCA9IG5ldyBMaWx5RG9jdW1lbnQocmF3KTsKCgkJCQkJY29uc3QgdGl0bGVFeHAgPSB0aGlzLmxpbHlEb2N1bWVudC5nbG9iYWxBdHRyaWJ1dGVzKHtyZWFkb25seTogdHJ1ZX0pLnRpdGxlOwoJCQkJCXRoaXMudGl0bGUgPSB0aXRsZUV4cCAmJiB0aXRsZUV4cC50b1N0cmluZygpOwoKCQkJCQkvL2NvbnNvbGUubG9nKCJsaWx5IGRvY3VtZW50IiwgdGhpcy5saWx5RG9jdW1lbnQpOwoJCQkJCS8vY29uc29sZS5sb2codGhpcy5saWx5RG9jdW1lbnQudG9TdHJpbmcoKSk7CgoJCQkJCXRoaXMubGlseURvY3VtZW50RGlydHkgPSBmYWxzZTsKCQkJCX0KCQkJfSwKCgoJCQl1cGRhdGVMaWx5VGV4dFNvdXJjZSAoKSB7CgkJCQlpZiAodGhpcy5saWx5VGV4dFNvdXJjZURpcnR5KSB7CgkJCQkJdGhpcy5saWx5VGV4dFNvdXJjZSA9IG5ldyBUZXh0U291cmNlKHRoaXMubGlseVNvdXJjZSk7CgoJCQkJCXRoaXMubGlseVRleHRTb3VyY2VEaXJ0eSA9IGZhbHNlOwoJCQkJfQoJCQl9LAoKCgkJCW1hcmt1cExpbHlEb2N1bWVudCAoZG9jKSB7CgkJCQlkb2MuZm9ybWFsaXplKCk7CgoJCQkJY29uc3QgZ2xvYmFsQXR0cmlidXRlcyA9IGRvYy5nbG9iYWxBdHRyaWJ1dGVzKCk7CgoJCQkJaWYgKHRoaXMubGlseU1hcmt1cHMuc3RhZmZTaXplKQoJCQkJCWdsb2JhbEF0dHJpYnV0ZXMuc3RhZmZTaXplLnZhbHVlID0gdGhpcy5saWx5TWFya3Vwcy5zdGFmZlNpemU7CgoJCQkJaWYgKHRoaXMubGlseU1hcmt1cHMuYXV0b1BhcGVyU2l6ZSkgewoJCQkJCWdsb2JhbEF0dHJpYnV0ZXMucGFwZXJXaWR0aC52YWx1ZS5zZXQoe251bWJlcjogdGhpcy5hdXRvUGFnZVNpemUud2lkdGggLyBDTV9UT19QWCwgdW5pdDogIlxcY20ifSk7CgkJCQkJZ2xvYmFsQXR0cmlidXRlcy5wYXBlckhlaWdodC52YWx1ZS5zZXQoe251bWJlcjogdGhpcy5hdXRvUGFnZVNpemUuaGVpZ2h0IC8gQ01fVE9fUFgsIHVuaXQ6ICJcXGNtIn0pOwoJCQkJfQoKCQkJCWlmICh0aGlzLmxpbHlNYXJrdXBzLnN5c3RlbVNwYWNpbmcgPj0gMCkKCQkJCQlnbG9iYWxBdHRyaWJ1dGVzLnN5c3RlbVNwYWNpbmcudmFsdWUgPSB0aGlzLmxpbHlNYXJrdXBzLnN5c3RlbVNwYWNpbmc7CgoJCQkJaWYgKHRoaXMubGlseU1hcmt1cHMudG9wTWFya3VwU3BhY2luZyA+PSAwKQoJCQkJCWdsb2JhbEF0dHJpYnV0ZXMudG9wTWFya3VwU3BhY2luZy52YWx1ZSA9IHRoaXMubGlseU1hcmt1cHMudG9wTWFya3VwU3BhY2luZzsKCgkJCQlpZiAodHlwZW9mIHRoaXMubGlseU1hcmt1cHMucmFnZ2VkTGFzdCA9PT0gImJvb2xlYW4iKQoJCQkJCWdsb2JhbEF0dHJpYnV0ZXMucmFnZ2VkTGFzdC52YWx1ZSA9IHRoaXMubGlseU1hcmt1cHMucmFnZ2VkTGFzdDsKCQkJfSwKCgoJCQlhc3luYyBtYXJrdXBTb3VyY2UgKCkgewoJCQkJYXdhaXQgdGhpcy51cGRhdGVMaWx5RG9jdW1lbnQoKTsKCgkJCQljb25zb2xlLmFzc2VydCh0aGlzLmxpbHlEb2N1bWVudCwgImxpbHlEb2N1bWVudCBpcyBudWxsLiIpOwoKCQkJCXRoaXMubWFya3VwTGlseURvY3VtZW50KHRoaXMubGlseURvY3VtZW50KTsKCgkJCQl0aGlzLmxpbHlTb3VyY2UgPSB0aGlzLmxpbHlEb2N1bWVudC50b1N0cmluZygpOwoKCQkJCWF3YWl0IHRoaXMuJG5leHRUaWNrKCk7CgkJCQl0aGlzLmVuZ3JhdmVyTG9ncyA9IG51bGw7CgkJCX0sCgoKCQkJYXN5bmMgcG9zdFByb2Nlc3NTb3VyY2UgKHNvdXJjZSkgewoJCQkJY29uc3QgbGlseURvY3VtZW50ID0gbmV3IExpbHlEb2N1bWVudChhd2FpdCB0aGlzLmxpbHlQYXJzZXIucGFyc2Uoc291cmNlKSk7CgoJCQkJaWYgKHRoaXMueG1sMmx5T3B0aW9ucy5yZW1vdmVTdGFmZkdyb3VwKQoJCQkJCWxpbHlEb2N1bWVudC5yZW1vdmVTdGFmZkdyb3VwKCk7CgoJCQkJaWYgKHRoaXMueG1sMmx5T3B0aW9ucy5tZXJnZUNvbnRpbnVvdXNHcmFjZXMpCgkJCQkJbGlseURvY3VtZW50Lm1lcmdlQ29udGludW91c0dyYWNlcygpOwoKCQkJCWlmICh0aGlzLnhtbDJseU9wdGlvbnMuZXhjbHVkZUNob3JkVHJhY2tzRnJvbU1JREkpCgkJCQkJbGlseURvY3VtZW50LmV4Y2x1ZGVDaG9yZFRyYWNrc0Zyb21NSURJKCk7CgoJCQkJaWYgKHRoaXMueG1sMmx5T3B0aW9ucy5taWRpQ2hhbm5lbE1hcHBpbmcpCgkJCQkJbGlseURvY3VtZW50LnVzZU1pZGlJbnN0cnVtZW50Q2hhbm5lbE1hcHBpbmcoKTsKCgkJCQlyZXR1cm4gbGlseURvY3VtZW50LnRvU3RyaW5nKCk7CgkJCX0sCgoKCQkJcmVtb3ZlVHJpbGxTcGFucyAoKSB7CgkJCQlyZXR1cm4gdGhpcy5leGVjdXRlTWFya3VwKCJyZW1vdmVUcmlsbFNwYW5zIik7CgkJCX0sCgoKCQkJYXN5bmMgZXhwb3J0TWFya3VwTGlseSAoKSB7CgkJCQljb25zdCBsaWx5RG9jdW1lbnQgPSBuZXcgTGlseURvY3VtZW50KGF3YWl0IHRoaXMubGlseVBhcnNlci5wYXJzZSgiXFx2ZXJzaW9uIFwiMi4yMC4wXCIiKSk7CgkJCQl0aGlzLm1hcmt1cExpbHlEb2N1bWVudChsaWx5RG9jdW1lbnQpOwoKCQkJCWNvbnN0IGJsb2IgPSBuZXcgQmxvYihbbGlseURvY3VtZW50LnRvU3RyaW5nKCldKTsKCgkJCQlyZXR1cm4gZG93bmxvYWRVcmwoVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSwgIm1hcmt1cC5seSIpOwoJCQl9LAoKCgkJCWFzeW5jIGJha2VTaGVldCAoKSB7CgkJCQljb25zb2xlLmFzc2VydCh0aGlzLnN2Z0RvY3VtZW50cywgInN2Z0RvY3VtZW50cyBpcyBudWxsLiIpOwoJCQkJY29uc29sZS5hc3NlcnQodGhpcy5tYXRjaGVkSWRzLCAibWF0Y2hlZElkcyBpcyBudWxsLiIpOwoKCQkJCXRoaXMuYmFraW5nSW1hZ2VzID0gYXdhaXQgU2hlZXRCYWtlci5iYWtlUmF3U3Zncyh0aGlzLnN2Z0RvY3VtZW50cywgdGhpcy5tYXRjaGVkSWRzLCB0aGlzLiRyZWZzLmNhbnZhcyk7CgkJCX0sCgoKCQkJYXN5bmMgaW5zcGVjdExpbHkgKCkgewoJCQkJYXdhaXQgdGhpcy51cGRhdGVMaWx5RG9jdW1lbnQoKTsKCQkJCXRoaXMudXBkYXRlTGlseVRleHRTb3VyY2UoKTsKCgkJCQljb25zb2xlLmxvZyh0aGlzLmxpbHlEb2N1bWVudCk7CgkJCX0sCgoKCQkJc2hvd0VuZ3JhdmVyTG9nICgpIHsKCQkJCWNvbnNvbGUubG9nKHRoaXMuZW5ncmF2ZXJMb2dzKTsKCQkJfSwKCgoJCQlhc3luYyBleGVjdXRlTWFya3VwIChmdW5jKSB7CgkJCQlhd2FpdCB0aGlzLnVwZGF0ZUxpbHlEb2N1bWVudCgpOwoJCQkJaWYgKCF0aGlzLmxpbHlEb2N1bWVudCkKCQkJCQljb25zb2xlLmxvZygibGlseURvY3VtZW50IHBhcnNpbmcgZmFpbGVkLiIpOwoKCQkJCWlmICghdGhpcy5saWx5RG9jdW1lbnRbZnVuY10pCgkJCQkJY29uc29sZS53YXJuKCJNYXJrdXAgZnVuY3Rpb24gbm90IGZvdW5kOiIsIGZ1bmMsIHRoaXMubGlseURvY3VtZW50KTsKCgkJCQl0aGlzLmxpbHlEb2N1bWVudFtmdW5jXSgpOwoKCQkJCXRoaXMubGlseVNvdXJjZSA9IHRoaXMubGlseURvY3VtZW50LnRvU3RyaW5nKCk7CgkJCX0sCgoKCQkJYXN5bmMgdW5mb2xkUmVwZWF0cyAoKSB7CgkJCQl0aGlzLm9wZXJhdGluZyA9IHRydWU7CgoJCQkJdHJ5IHsKCQkJCQlhd2FpdCB0aGlzLnVwZGF0ZUxpbHlEb2N1bWVudCgpOwoKCQkJCQlpZiAoIXRoaXMubGlseURvY3VtZW50KQoJCQkJCQl0aHJvdyBuZXcgRXJyb3IoImxpbHlEb2N1bWVudCBpcyBudWxsLiIpOwoKCQkJCQl0aGlzLmxpbHlEb2N1bWVudC51bmZvbGRSZXBlYXRzKCk7CgkJCQkJdGhpcy5saWx5U291cmNlID0gdGhpcy5saWx5RG9jdW1lbnQudG9TdHJpbmcoKTsKCgkJCQkJYXdhaXQgdGhpcy5lbmdyYXZlKCk7CgoJCQkJCXRoaXMubGlseVNvdXJjZSA9IHJlcGxhY2VTb3VyY2VUb2tlbih0aGlzLmxpbHlTb3VyY2UsICJcXHVuZm9sZFJlcGVhdHMiKTsKCgkJCQkJdGhpcy5lbmdyYXZpbmcgPSB0cnVlOwoKCQkJCQljb25zdCBib2R5ID0gbmV3IEZvcm1EYXRhKCk7CgkJCQkJYm9keS5hcHBlbmQoInNvdXJjZSIsIHRoaXMubGlseVNvdXJjZSk7CgkJCQkJaWYgKHRoaXMuZW5ncmF2ZVdpdGhMb2dzKQoJCQkJCQlib2R5LmFwcGVuZCgibG9nIiwgdGhpcy5lbmdyYXZlV2l0aExvZ3MpOwoJCQkJCWJvZHkuYXBwZW5kKCJ0b2tlbml6ZSIsIHRydWUpOwoKCQkJCQljb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCIvZW5ncmF2ZSIsIHsKCQkJCQkJbWV0aG9kOiAiUE9TVCIsCgkJCQkJCWJvZHksCgkJCQkJfSk7CgkJCQkJaWYgKCFyZXNwb25zZS5vaykgewoJCQkJCQljb25zdCByZWFzb24gPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CgkJCQkJCXRocm93IG5ldyBFcnJvcihyZWFzb24pOwoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOwoKCQkJCQkJdGhpcy5lbmdyYXZlckxvZ3MgPSByZXN1bHQubG9nczsKCQkJCQkJdGhpcy5zdmdEb2N1bWVudHMgPSByZXN1bHQuc3ZnczsKCgkJCQkJCXRoaXMuc2hlZXREb2N1bWVudCA9IHJlY292ZXJKU09OKHJlc3VsdC5kb2MsIHtTdGFmZlRva2VuLCBTaGVldERvY3VtZW50fSk7CgkJCQkJCXRoaXMuc3ZnSGFzaFRhYmxlID0gcmVzdWx0Lmhhc2hUYWJsZTsKCgkJCQkJCXRoaXMuc2hlZXREb2N1bWVudC51cGRhdGVNYXRjaGVkVG9rZW5zKHRoaXMubWF0Y2hlZElkcyk7CgkJCQkJCXRoaXMuJHJlZnMuc2hlZXQucHJlcGFyZVBsYXllcigpOwoJCQkJCX0KCQkJCX0KCQkJCWNhdGNoIChlcnIpIHsKCQkJCQljb25zb2xlLndhcm4oInVuZm9sZFJlcGVhdHMgZmFpbGVkOiIsIGVycik7CgkJCQl9CgoKCQkJCXRoaXMuZW5ncmF2ZXJEaXJ0eSA9IGZhbHNlOwoJCQkJdGhpcy5lbmdyYXZpbmcgPSBmYWxzZTsKCQkJCXRoaXMub3BlcmF0aW5nID0gZmFsc2U7CgkJCX0sCgoKCQkJYXN5bmMgcmVkaXZpZGVMaWx5RG9jdW1lbnQgKHtyZWNvbnN0cnVjdCA9IGZhbHNlfSA9IHt9KSB7CgkJCQlhd2FpdCB0aGlzLnVwZGF0ZUxpbHlEb2N1bWVudCgpOwoJCQkJY29uc3QgaW50ZXJwcmV0ZXIgPSB0aGlzLmxpbHlEb2N1bWVudC5pbnRlcnByZXQoe3VzZUNhY2hlZDogZmFsc2V9KTsKCgkJCQlpZiAocmVjb25zdHJ1Y3QpIHsKCQkJCQlpbnRlcnByZXRlci5sYXlvdXRNdXNpYy5tdXNpY1RyYWNrcy5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnJlZGl2aWRlKCkpOwoKCQkJCQl0aGlzLmxpbHlEb2N1bWVudCA9IGludGVycHJldGVyLnRvRG9jdW1lbnQoKTsKCQkJCQl0aGlzLmxpbHlTb3VyY2UgPSB0aGlzLmxpbHlEb2N1bWVudC50b1N0cmluZygpOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJdGhpcy5saWx5RG9jdW1lbnQucm9vdC5mb3JFYWNoVG9wVGVybShMaWx5VGVybXMuQXNzaWdubWVudCwgYXNzaWduID0+IHsKCQkJCQkJaWYgKGFzc2lnbi52YWx1ZSAmJiB0eXBlb2YgYXNzaWduLnZhbHVlID09PSAib2JqZWN0IiAmJiBhc3NpZ24udmFsdWUuaXNNdXNpYykgewoJCQkJCQkJY29uc3Qga2V5ID0gYXNzaWduLmtleS50b1N0cmluZygpOwoJCQkJCQkJY29uc3QgdHJhY2sgPSBpbnRlcnByZXRlci5sYXlvdXRNdXNpYy5tdXNpY1RyYWNrcy5maW5kKHRyYWNrID0+IHRyYWNrLmNvbnRleHREaWN0LlZvaWNlID09PSBrZXkpOwoJCQkJCQkJY29uc3QgYmxvY2sgPSBhc3NpZ24udmFsdWUuZmluZEZpcnN0KExpbHlUZXJtcy5NdXNpY0Jsb2NrKTsKCQkJCQkJCS8vY29uc29sZS5sb2coInRyYWNrOiIsIGtleSwgdHJhY2ssIGJsb2NrKTsKCgkJCQkJCQlibG9jay5yZWRpdmlkZSh7bWVhc3VyZUhlYWRzOiB0cmFjay5tZWFzdXJlSGVhZHN9KTsKCQkJCQkJfQoJCQkJCX0pOwoJCQkJCXRoaXMubGlseVNvdXJjZSA9IHRoaXMubGlseURvY3VtZW50LnRvU3RyaW5nKCk7CgkJCQl9CgoJCQkJLy90aGlzLmV4ZWN1dGVNYXJrdXAoInJlZGl2aWRlIik7CgkJCX0sCgoKCQkJYXN5bmMgc2xpY2VNZWFzdXJlcyAoc3RhcnQsIGNvdW50KSB7CgkJCQlhd2FpdCB0aGlzLnVwZGF0ZUxpbHlEb2N1bWVudCgpOwoKCQkJCWNvbnN0IGludGVycHJldGVyID0gdGhpcy5saWx5RG9jdW1lbnQuaW50ZXJwcmV0KHt1c2VDYWNoZWQ6IGZhbHNlfSk7CgkJCQlpbnRlcnByZXRlci5zbGljZU1lYXN1cmVzKHN0YXJ0LCBjb3VudCk7CgkJCQl0aGlzLmxpbHlEb2N1bWVudCA9IGludGVycHJldGVyLnRvRG9jdW1lbnQoKTsKCQkJCXRoaXMubGlseVNvdXJjZSA9IHRoaXMubGlseURvY3VtZW50LnRvU3RyaW5nKCk7CgkJCX0sCgoKCQkJYXN5bmMgY3JlYXRlUGlhbm9SaHl0aG0gKG9wdGlvbnMpIHsKCQkJCWF3YWl0IHRoaXMudXBkYXRlTGlseURvY3VtZW50KCk7CgoJCQkJY29uc3QgaW50ZXJwcmV0ZXIgPSB0aGlzLmxpbHlEb2N1bWVudC5pbnRlcnByZXQoe3VzZUNhY2hlZDogZmFsc2V9KTsKCQkJCWNyZWF0ZVBpYW5vUmh5dGhtKGludGVycHJldGVyLCBvcHRpb25zKTsKCgkJCQl0aGlzLmxpbHlEb2N1bWVudCA9IGludGVycHJldGVyLnRvRG9jdW1lbnQoKTsKCQkJCXRoaXMubGlseVNvdXJjZSA9IHRoaXMubGlseURvY3VtZW50LnRvU3RyaW5nKCk7CgoJCQkJYXdhaXQgdGhpcy4kbmV4dFRpY2soKTsKCQkJCXRoaXMubGlseURvY3VtZW50RGlydHkgPSBmYWxzZTsKCQkJfSwKCgoJCQlhc3luYyB0ZXN0SW50ZXJwcmV0ZXIgKHtmbGF0dGVuID0gZmFsc2V9ID0ge30pIHsKCQkJCWF3YWl0IHRoaXMudXBkYXRlTGlseURvY3VtZW50KCk7CgoJCQkJY29uc3QgaW50ZXJwcmV0ZXIgPSB0aGlzLmxpbHlEb2N1bWVudC5pbnRlcnByZXQoe3VzZUNhY2hlZDogZmFsc2V9KTsKCgkJCQljb25zdCBsaWx5Tm90YXRpb24gPSBpbnRlcnByZXRlci5nZXROb3RhdGlvbigpOwoKCQkJCWlmIChmbGF0dGVuKQoJCQkJCWludGVycHJldGVyLmxheW91dE11c2ljLm11c2ljVHJhY2tzLmZvckVhY2godHJhY2sgPT4gdHJhY2suZmxhdHRlbih7c3ByZWFkUmVwZWF0czogdHJ1ZX0pKTsKCQkJCWNvbnN0IG5ld0RvYyA9IGludGVycHJldGVyLnRvRG9jdW1lbnQoKTsKCgkJCQljb25zb2xlLmxvZygiSU5URVJQUkVURVI6IiwgaW50ZXJwcmV0ZXIpOwoJCQkJY29uc29sZS5sb2coIkRPQzoiLCBuZXdEb2MpOwoJCQkJY29uc29sZS5sb2coIk5PVEFUSU9OOiIsIGxpbHlOb3RhdGlvbik7CgkJCX0sCgoKCQkJb25Tb3VyY2VEaXJQaWNrIChmaWxlUGF0aCkgewoJCQkJLy9jb25zb2xlLmxvZygib25Tb3VyY2VEaXJQaWNrOiIsIGZpbGVQYXRoKTsKCQkJCXRoaXMuc291cmNlRWRpdG9yRmlsZVBhdGggPSBmaWxlUGF0aDsKCQkJCXRoaXMuJG5leHRUaWNrKCgpID0+IHsKCQkJCQlpZiAodGhpcy4kcmVmcy5yZW1vdGVGaWxlKQoJCQkJCQl0aGlzLiRyZWZzLnJlbW90ZUZpbGUuY29ubmVjdCgpOwoJCQkJfSk7CgkJCX0sCgoKCQkJaGlnaGxpZ2h0U291cmNlUG9zaXRpb24gKHBvc2l0aW9uKSB7CgkJCQl0aGlzLnVwZGF0ZUxpbHlUZXh0U291cmNlKCk7CgoJCQkJaWYgKHBvc2l0aW9uLmxlbmd0aCA+PSAyKSB7CgkJCQkJY29uc3QgdGV4dGFyZWEgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCIucHJpc20tZWRpdG9yX190ZXh0YXJlYSIpOwoJCQkJCWlmICghdGV4dGFyZWEpIHsKCQkJCQkJY29uc29sZS53YXJuKCIucHJpc20tZWRpdG9yX190ZXh0YXJlYSBpcyBub3QgZm91bmQuIik7CgkJCQkJCXJldHVybjsKCQkJCQl9CgoJCQkJCWNvbnN0IHN0YXJ0Q2hhcnMgPSB0aGlzLmxpbHlUZXh0U291cmNlLnBvc2l0aW9uVG9DaGFycyhbcG9zaXRpb25bMF0sIHBvc2l0aW9uWzFdXSk7CgkJCQkJY29uc3QgZW5kQ2hhcnMgPSBwb3NpdGlvbi5sZW5ndGggPj0gMyA/IHRoaXMubGlseVRleHRTb3VyY2UucG9zaXRpb25Ub0NoYXJzKFtwb3NpdGlvblswXSwgcG9zaXRpb25bMl1dKSA6IHN0YXJ0Q2hhcnM7CgoJCQkJCS8vY29uc29sZS5sb2coImhpZ2hsaWdodFNvdXJjZVBvc2l0aW9uOiIsIHBvc2l0aW9uLCB0ZXh0YXJlYSwgc3RhcnRDaGFycywgZW5kQ2hhcnMpOwoJCQkJCXRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0Q2hhcnMsIGVuZENoYXJzKTsKCQkJCQl0ZXh0YXJlYS5mb2N1cygpOwoKCQkJCQljb25zdCB3cmFwcGVyID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvcigiLnByaXNtLWVkaXRvci13cmFwcGVyIik7CgoJCQkJCS8vY29uc29sZS5sb2coInNjcm9sbDoiLCAocG9zaXRpb25bMl0gfHwgcG9zaXRpb25bMV0pICogOS43IC0gdGV4dGFyZWEuY2xpZW50V2lkdGgsIHBvc2l0aW9uWzBdICogMTkgLSB0aGlzLiRyZWZzLnNvdXJjZUVkaXRvci4kZWwuY2xpZW50SGVpZ2h0KTsKCQkJCQljb25zdCBpZGVhbFBvcyA9IHsKCQkJCQkJbGVmdDogcG9zaXRpb25bMV0gKiA5LjcsCgkJCQkJCXJpZ2h0OiAoKHBvc2l0aW9uWzJdIHx8IHBvc2l0aW9uWzFdKSArIDIpICogOS43LAoJCQkJCQl0b3A6IChwb3NpdGlvblswXSAtIDEpICogMTksCgkJCQkJCWJvdHRvbTogKHBvc2l0aW9uWzBdICsgMikgKiAxOSwKCQkJCQl9OwoJCQkJCXdyYXBwZXIuc2Nyb2xsTGVmdCA9IE1hdGgubWF4KGlkZWFsUG9zLnJpZ2h0ICsgNTAgLSB3cmFwcGVyLmNsaWVudFdpZHRoLCB3cmFwcGVyLnNjcm9sbExlZnQpOwoJCQkJCXdyYXBwZXIuc2Nyb2xsTGVmdCA9IE1hdGgubWluKGlkZWFsUG9zLmxlZnQsIHdyYXBwZXIuc2Nyb2xsTGVmdCk7CgkJCQkJd3JhcHBlci5zY3JvbGxUb3AgPSBNYXRoLm1heChpZGVhbFBvcy5ib3R0b20gLSB3cmFwcGVyLmNsaWVudEhlaWdodCwgd3JhcHBlci5zY3JvbGxUb3ApOwoJCQkJCXdyYXBwZXIuc2Nyb2xsVG9wID0gTWF0aC5taW4oaWRlYWxQb3MudG9wLCB3cmFwcGVyLnNjcm9sbFRvcCk7CgkJCQl9CgkJCX0sCgoKCQkJb25TaGVldExpbmsgKGV2ZW50LCBocmVmKSB7CgkJCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoKCQkJCS8vY29uc29sZS5sb2coIm9uU2hlZXRMaW5rOiIsIGhyZWYpOwoJCQkJY29uc3QgcG9zaXRpb24gPSBocmVmLm1hdGNoKC9cZCsvZyk7CgkJCQlpZiAocG9zaXRpb24pCgkJCQkJdGhpcy5oaWdobGlnaHRTb3VyY2VQb3NpdGlvbihwb3NpdGlvbi5tYXAoTnVtYmVyKSk7CgkJCX0sCgoKCQkJb25DbGlja1Rva2VuICh0b2tlbiwgZXZlbnQpIHsKCQkJCS8vY29uc29sZS5sb2coIm9uQ2xpY2tUb2tlbjoiLCB0b2tlbiwgZXZlbnQpOwoJCQkJaWYgKGV2ZW50LmN0cmxLZXkgJiYgdG9rZW4uaHJlZikgewoJCQkJCWNvbnN0IHBvc2l0aW9uID0gdG9rZW4uaHJlZi5tYXRjaCgvXGQrL2cpOwoJCQkJCWlmIChwb3NpdGlvbikKCQkJCQkJdGhpcy5oaWdobGlnaHRTb3VyY2VQb3NpdGlvbihwb3NpdGlvbi5tYXAoTnVtYmVyKSk7CgkJCQl9CgkJCQllbHNlCgkJCQkJY29uc29sZS5sb2coInRva2VuOiIsIHRva2VuKTsKCQkJfSwKCgoJCQlvbkNsaWNrTWF0Y2hlck5vdGUgKG5vdGUpIHsKCQkJCWNvbnNvbGUubG9nKCJtYXRjaGVyIG5vdGU6Iiwgey4uLm5vdGV9KTsKCgkJCQlpZiAobm90ZS5pZCkgewoJCQkJCWNvbnN0IHBvc2l0aW9uID0gbm90ZS5pZC5tYXRjaCgvXGQrL2cpOwoJCQkJCWlmIChwb3NpdGlvbikKCQkJCQkJdGhpcy5oaWdobGlnaHRTb3VyY2VQb3NpdGlvbihwb3NpdGlvbi5tYXAoTnVtYmVyKSk7CgkJCQl9CgkJCX0sCgoKCQkJYXN5bmMgdXBkYXRlTWVhc3VyZUxheW91dENvZGUgKCkgewoJCQkJYXdhaXQgdGhpcy51cGRhdGVMaWx5RG9jdW1lbnQoKTsKCQkJCXRoaXMubWVhc3VyZUxheW91dENvZGUgPSB0aGlzLmxpbHlEb2N1bWVudC5pbnRlcnByZXQoKS5sYXlvdXRNdXNpYy5tZWFzdXJlTGF5b3V0Q29kZTsKCQkJCXRoaXMubWVhc3VyZUxheW91dENvZGVEaXJ0eSA9IGZhbHNlOwoJCQl9LAoKCgkJCWFzeW5jIHZhbGlkYXRlTWVhc3VyZUxheW91dENvZGUgKCkgewoJCQkJdGhpcy5tZWFzdXJlTGF5b3V0Q29kZUVycm9yID0gbnVsbDsKCgkJCQlpZiAoIXRoaXMubWVhc3VyZUxheW91dENvZGUpCgkJCQkJcmV0dXJuOwoKCQkJCXRyeSB7CgkJCQkJLypjb25zdCByZXN1bHQgPSovIGF3YWl0IHRoaXMubWVhc3VyZXNQYXJzZXIucGFyc2UodGhpcy5tZWFzdXJlTGF5b3V0Q29kZSk7CgkJCQkJLy9jb25zdCBtZWFzdXJlcyA9IHJlY292ZXJKU09OKHJlc3VsdC5kYXRhLCBtZWFzdXJlTGF5b3V0KTsKCQkJCQkvL2NvbnNvbGUubG9nKCJtZWFzdXJlczoiLCBtZWFzdXJlcyk7CgoJCQkJCS8vIFRPRE86IHZhbGlkYXRlIG1lYXN1cmUgaW5kaWNlcwoJCQkJfQoJCQkJY2F0Y2ggKGVycikgewoJCQkJCS8vY29uc29sZS53YXJuKCJtZWFzdXJlIGxheW91dCBjb2RlIHBhcnNlIGVycm9yOiIsIGVycik7CgkJCQkJdGhpcy5tZWFzdXJlTGF5b3V0Q29kZUVycm9yID0gZXJyOwoJCQkJfQoJCQl9LAoKCgkJCWFzeW5jIGFwcGx5VXBkYXRlTWVhc3VyZUxheW91dENvZGUgKCkgewoJCQkJaWYgKCF0aGlzLm1lYXN1cmVMYXlvdXRDb2RlKQoJCQkJCXJldHVybjsKCgkJCQl0cnkgewoJCQkJCWNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubWVhc3VyZXNQYXJzZXIucGFyc2UodGhpcy5tZWFzdXJlTGF5b3V0Q29kZSk7CgkJCQkJY29uc3QgbGF5b3V0ID0gcmVjb3ZlckpTT04ocmVzdWx0LmRhdGEsIG1lYXN1cmVMYXlvdXQpOwoKCQkJCQlhd2FpdCB0aGlzLnVwZGF0ZUxpbHlEb2N1bWVudCgpOwoJCQkJCS8qY29uc3QgaW50ZXJwcmV0ZXIgPSB0aGlzLmxpbHlEb2N1bWVudC5pbnRlcnByZXQoKTsKCgkJCQkJaW50ZXJwcmV0ZXIubGF5b3V0TXVzaWMuYXBwbHlNZWFzdXJlTGF5b3V0KGxheW91dCk7CgkJCQkJdGhpcy5saWx5U291cmNlID0gaW50ZXJwcmV0ZXIudG9Eb2N1bWVudCgpLnRvU3RyaW5nKCk7Ki8KCQkJCQl0aGlzLmxpbHlEb2N1bWVudC5pbnRlcnByZXQoKTsKCgkJCQkJdGhpcy5hcHBseU1lYXN1cmVMYXlvdXQobGF5b3V0KTsKCgkJCQkJdGhpcy5tZWFzdXJlTGF5b3V0Q29kZURpcnR5ID0gZmFsc2U7CgkJCQl9CgkJCQljYXRjaCAoZXJyKSB7CgkJCQkJdGhpcy5tZWFzdXJlTGF5b3V0Q29kZUVycm9yID0gZXJyOwoJCQkJCWNvbnNvbGUuZXJyb3IoZXJyKTsKCQkJCX0KCQkJfSwKCgoJCQlhcHBseU1lYXN1cmVMYXlvdXQgKGxheW91dCkgewoJCQkJY29uc3QgdHJhY2tzID0gdGhpcy5saWx5RG9jdW1lbnQucm9vdC5zZWN0aW9ucy5maWx0ZXIoc2VjdGlvbiA9PgoJCQkJCXNlY3Rpb24gaW5zdGFuY2VvZiBMaWx5VGVybXMuQXNzaWdubWVudCAmJiBzZWN0aW9uLnZhbHVlIGluc3RhbmNlb2YgTGlseVRlcm1zLlJlbGF0aXZlICYmIHNlY3Rpb24udmFsdWUubWVhc3VyZUxheW91dCkKCQkJCQkubWFwKGFzc2lnbm1lbnQgPT4gYXNzaWdubWVudC52YWx1ZS5hcmdzKQoJCQkJCS5tYXAoYXJncyA9PiBNdXNpY1RyYWNrLmZyb21CbG9ja0FuY2hvcihhcmdzWzFdLCBhcmdzWzBdKSk7CgkJCQl0cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5hcHBseU1lYXN1cmVMYXlvdXQobGF5b3V0KSk7CgoJCQkJdGhpcy5saWx5U291cmNlID0gdGhpcy5saWx5RG9jdW1lbnQudG9TdHJpbmcoKTsKCQkJfSwKCgoJCQlhc3luYyBmbGF0dGVuVHJhY2tzICgpIHsKCQkJCWF3YWl0IHRoaXMudXBkYXRlTGlseURvY3VtZW50KCk7CgkJCQl0aGlzLmxpbHlEb2N1bWVudC5pbnRlcnByZXQoKTsKCgkJCQljb25zdCB0cmFja3MgPSB0aGlzLmxpbHlEb2N1bWVudC5yb290LnNlY3Rpb25zLmZpbHRlcihzZWN0aW9uID0+CgkJCQkJc2VjdGlvbiBpbnN0YW5jZW9mIExpbHlUZXJtcy5Bc3NpZ25tZW50ICYmIHNlY3Rpb24udmFsdWUgaW5zdGFuY2VvZiBMaWx5VGVybXMuUmVsYXRpdmUgJiYgc2VjdGlvbi52YWx1ZS5tZWFzdXJlTGF5b3V0KQoJCQkJCS5tYXAoYXNzaWdubWVudCA9PiBhc3NpZ25tZW50LnZhbHVlLmFyZ3MpCgkJCQkJLm1hcChhcmdzID0+IE11c2ljVHJhY2suZnJvbUJsb2NrQW5jaG9yKGFyZ3NbMV0sIGFyZ3NbMF0pKTsKCQkJCXRyYWNrcy5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLmZsYXR0ZW4oe3NwcmVhZFJlcGVhdHM6IHRydWV9KSk7CgoJCQkJdGhpcy5saWx5U291cmNlID0gdGhpcy5saWx5RG9jdW1lbnQudG9TdHJpbmcoKTsKCQkJfSwKCgoJCQkvLyAnczogMSBuKlt4XScgPT4gJ3M6IG4qW3grMV0nCgkJCWFzeW5jIG1lcmdlU2luZ2xlVm9sdGFNTGF5b3V0ICgpIHsKCQkJCWF3YWl0IHRoaXMudXBkYXRlTGlseURvY3VtZW50KCk7CgkJCQljb25zdCBpbnRlcnByZXRlciA9IHRoaXMubGlseURvY3VtZW50LmludGVycHJldCgpOwoKCQkJCWNvbnN0IGxheW91dCA9IGludGVycHJldGVyLmxheW91dE11c2ljLm1haW5UcmFjay5ibG9jay5tZWFzdXJlTGF5b3V0OwoJCQkJbGV0IGluZGV4ID0gMTsKCQkJCWZvciAoOyBpbmRleCA8IGxheW91dC5zZXEubGVuZ3RoIC0gMTsgKytpbmRleCkgewoJCQkJCWNvbnN0IGZvdW5kID0gIShsYXlvdXQuc2VxW2luZGV4IC0gMV0gaW5zdGFuY2VvZiBtZWFzdXJlTGF5b3V0LlNpbmdsZU1MYXlvdXQpCgkJCQkJCSYmIGxheW91dC5zZXFbaW5kZXhdIGluc3RhbmNlb2YgbWVhc3VyZUxheW91dC5TaW5nbGVNTGF5b3V0CgkJCQkJCSYmIGxheW91dC5zZXFbaW5kZXggKyAxXSBpbnN0YW5jZW9mIG1lYXN1cmVMYXlvdXQuVm9sdGFNTGF5b3V0OwoKCQkJCQlpZiAoZm91bmQpCgkJCQkJCWJyZWFrOwoJCQkJfQoKCQkJCWlmIChpbmRleCA8IGxheW91dC5zZXEubGVuZ3RoIC0gMSkgewoJCQkJCWNvbnN0IFtzaW5nbGVdID0gbGF5b3V0LnNlcS5zcGxpY2UoaW5kZXgsIDEpOwoJCQkJCWNvbnN0IHZvbHRhID0gbGF5b3V0LnNlcVtpbmRleF07CgkJCQkJdm9sdGEuYm9keS51bnNoaWZ0KHNpbmdsZSk7CgkJCQkJLy9jb25zb2xlLmxvZygiY29kZToiLCBsYXlvdXQuY29kZSk7CgoJCQkJCXRoaXMuYXBwbHlNZWFzdXJlTGF5b3V0KGxheW91dCk7CgoJCQkJCXJldHVybiB0cnVlOwoJCQkJfQoKCQkJCXJldHVybiBmYWxzZTsKCQkJfSwKCgoJCQlzdGFmZlRvcFRva2VuIChzdGFmZikgewoJCQkJY29uc3QgdG9rZW5zID0gW10uY29uY2F0KC4uLnN0YWZmLm1lYXN1cmVzLm1hcChtZWFzdXJlID0+IG1lYXN1cmUudG9rZW5zKSk7CgkJCQlyZXR1cm4gdG9rZW5zLnJlZHVjZSgodG9wLCB0b2tlbikgPT4gIXRvcCB8fCB0b2tlbi55IDwgdG9wLnkgPyB0b2tlbiA6IHRvcCwgbnVsbCk7CgkJCX0sCgoKCQkJc3RhZmZCb3R0b21Ub2tlbiAoc3RhZmYpIHsKCQkJCWNvbnN0IHRva2VucyA9IFtdLmNvbmNhdCguLi5zdGFmZi5tZWFzdXJlcy5tYXAobWVhc3VyZSA9PiBtZWFzdXJlLnRva2VucykpOwoJCQkJcmV0dXJuIHRva2Vucy5yZWR1Y2UoKGJvdHRvbSwgdG9rZW4pID0+ICFib3R0b20gfHwgdG9rZW4ueSA+IGJvdHRvbS55ID8gdG9rZW4gOiBib3R0b20sIG51bGwpOwoJCQl9LAoJCX0sCgoKCQl3YXRjaDogewoJCQlsaWx5U291cmNlICgpIHsKCQkJCXRoaXMuZW5ncmF2ZXJEaXJ0eSA9IHRydWU7CgkJCQl0aGlzLmxpbHlEb2N1bWVudERpcnR5ID0gdHJ1ZTsKCQkJCXRoaXMubGlseVRleHRTb3VyY2VEaXJ0eSA9IHRydWU7CgkJCQl0aGlzLmVuZ3JhdmVyTG9ncyA9IG51bGw7CgkJCQl0aGlzLm1lYXN1cmVMYXlvdXRDb2RlID0gbnVsbDsKCQkJCXRoaXMubWVhc3VyZUxheW91dENvZGVFcnJvciA9IG51bGw7CgoJCQkJaWYgKCF0aGlzLnNvdXJjZUVkaXRvckNvbm5lY3RlZCkKCQkJCQl0aGlzLnNvdXJjZUVkaXRvckZpbGVQYXRoID0gbnVsbDsKCQkJfSwKCgoJCQltYXJrdXBWYWx1ZUhhc2ggKCkgewoJCQkJaWYgKHRoaXMubGlseVBhcnNlciAmJiB0aGlzLmxpbHlNYXJrdXBzLmVuYWJsZWQpCgkJCQkJdGhpcy5tYXJrdXBTb3VyY2UoKTsKCQkJfSwKCgoJCQllbmdyYXZlckRpcnR5ICh2YWx1ZSkgewoJCQkJaWYgKHZhbHVlICYmIHRoaXMuYXV0b0VuZ3JhdmUpCgkJCQkJbXV0ZXhEZWxheSgiYXV0b0VuZ3JhdmUiLCA1ZSszKS50aGVuKHZhbGlkID0+ICF2YWxpZCB8fCB0aGlzLndhdGNoRW5ncmF2ZSgpKTsKCQkJfSwKCgoJCQlhdXRvRW5ncmF2ZTogIndhdGNoRW5ncmF2ZSIsCgoKCQkJdG9rZW5pemVTdGFmZiAodmFsdWUpIHsKCQkJCWlmICh2YWx1ZSAmJiB0aGlzLmxpbHlTb3VyY2UgJiYgIXRoaXMuc2hlZXREb2N1bWVudCkKCQkJCQl0aGlzLmVuZ3JhdmVyRGlydHkgPSB0cnVlOwoJCQl9LAoKCgkJCWJha2luZ1NoZWV0ICh2YWx1ZSkgewoJCQkJaWYgKHZhbHVlKSB7CgkJCQkJaWYgKHRoaXMuc3ZnRG9jdW1lbnRzICYmIHRoaXMubWF0Y2hlZElkcykKCQkJCQkJdGhpcy5iYWtlU2hlZXQoKTsKCQkJCX0KCQkJCWVsc2UKCQkJCQl0aGlzLmJha2luZ0ltYWdlcyA9IG51bGw7CgkJCX0sCgkJfSwKCX07Cg=="},{"version":3,"sources":["playground.vue"],"names":[],"mappings":";AA8WA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;AAKA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"playground.vue","sourceRoot":"app/views","sourcesContent":["\n\n\n\n\n"]}]}