{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\views\\dataShare\\shareApi\\Resource\\DetailDialog.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\views\\dataShare\\shareApi\\Resource\\DetailDialog.vue","mtime":1734116152820},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgZGlhbG9nTWl4aW4gZnJvbSAnQC9taXhpbnMvZGlhbG9nLmpzJzsNCi8vIGltcG9ydCBNb2RlbEhlYWRlciBmcm9tICcuL01vZGVsSGVhZGVyJzsNCi8vIGltcG9ydCBNb2RlbEVudHMgZnJvbSAnLi9Nb2RlbEVudHMnOw0KLy8gaW1wb3J0IE1vZGVsQXR0ciBmcm9tICcuL01vZGVsQXR0cic7DQppbXBvcnQgZm9ybSBmcm9tICdAL2FwaS9mb3JtLmpzJzsNCmltcG9ydCB1dGlsIGZyb20gJ0AvaG90ZW50LXVpLXV0aWwuanMnOw0KaW1wb3J0IHJlcSBmcm9tICdAL3JlcXVlc3QuanMnOw0KaW1wb3J0IG1haW4gZnJvbSAnQC9tYWluLmpzJzsNCg0KZXhwb3J0IGRlZmF1bHQgew0KICBuYW1lOiAnQ29tcGFueURpYWxvZycsDQogIC8vIGNvbXBvbmVudHM6IHsgTW9kZWxIZWFkZXIsIE1vZGVsRW50cywgTW9kZWxBdHRyIH0sDQogIG1peGluczogW2RpYWxvZ01peGluXSwNCiAgcHJvcHM6IHsNCiAgICBzZWxlY3RlZFJvd3M6IHsNCiAgICAgIHR5cGU6IEFycmF5LA0KICAgICAgZGVmYXVsdDogKCkgPT4gW10sDQogICAgfSwNCiAgfSwNCiAgZGF0YSgpIHsNCiAgICByZXR1cm4gew0KICAgICAgZm9ybURhdGE6IHsNCiAgICAgICAgYWxpYXM6ICcnLA0KICAgICAgICBjYXRlZ29yeUlkOiAnJywNCiAgICAgICAgY2F0ZWdvcnlOYW1lOiAnJywNCiAgICAgICAgZGVwbG95ZWQ6IDAsDQogICAgICAgIGRlc2NyaXB0aW9uOiAnJywNCiAgICAgICAgZHNOYW1lOiAnJywNCiAgICAgICAgaXNDcmVhdGVUYWJsZTogJycsDQogICAgICAgIGlzRXh0ZXJuYWw6ICcnLA0KICAgICAgICBzdGF0dXM6ICdub3JtYWwnLA0KICAgICAgICBzdXBwb3J0RGI6IHRydWUsDQogICAgICAgIGVudHM6IFtdLA0KICAgICAgfSwNCiAgICAgIHJ1bGVzOiB7DQogICAgICAgIG5hbWU6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn6LWE5rqQ5ZCN56ew5LiN6IO95Li656m6JyB9XSwNCiAgICAgICAgaXNfYWN0aXZlOiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+i1hOa6kOexu+Wei+S4jeiDveS4uuepuicgfV0sDQogICAgICAgIHR5cGU6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn5p2l5rqQ5qC85byP5LiN6IO95Li656m6JyB9XSwNCiAgICAgICAgaXNfcHVibGlzaDogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfmmK/lkKblj5HluIPkuI3og73kuLrnqbonIH1dLA0KICAgICAgfSwNCiAgICAgIGxvYWRpbmc6IGZhbHNlLA0KICAgICAgYXNpZGVTaG93OiB0cnVlLA0KICAgICAgZW50SW5kZXg6IDAsDQogICAgICBncmFuZFNvbkluZGV4OiAtMSwNCiAgICAgIG9wZW5HcmFuZFNvbkF0dHI6IGZhbHNlLA0KICAgICAgYXR0clRhYmxlRGF0YTogW10sDQogICAgICBtZXNzYWdlQ2F0aW9uczoge30sDQogICAgfTsNCiAgfSwNCiAgbW91bnRlZCgpIHt9LA0KICBtZXRob2RzOiB7DQogICAgLyoqDQogICAgICogQGRlc2NyaXB0aW9uOiBkaWFsb2fmr4/mrKHmmL7npLrml7bop6blj5HnmoRpbml05pa55rOVDQogICAgICogQHBhcmFtIHsqfSBkYXRhIOS8oOWFpWRhdGENCiAgICAgKiBAcmV0dXJuIHsqfQ0KICAgICAqLw0KICAgIGluaXREYXRhKGRhdGEpIHsNCiAgICAgIGNvbnN0IG9yZ0Zvcm0gPSB0aGlzLiRvcHRpb25zLmRhdGEoKS5mb3JtRGF0YTsNCiAgICAgIHRoaXMuZm9ybURhdGEgPSB7IC4uLm9yZ0Zvcm0sIC4uLmRhdGEgfTsNCiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsNCiAgICAgICAgdGhpcy4kcmVmcy5mb3JtLmNsZWFyVmFsaWRhdGUoKTsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g6KGo5Y2V5pWw5o2u5Yqg6L29DQogICAgZ2V0Rm9ybURhdGEoKSB7DQogICAgICBpZiAodGhpcy5kYXRhVmlldy5pZCkgew0KICAgICAgICBmb3JtLmdldEVudERhdGEodGhpcy5kYXRhVmlldy5pZCwgcmVzcCA9PiB7DQogICAgICAgICAgcmVzcC5kYXRhLmVudHMuZm9yRWFjaCgoZW50RGF0YSwgaW5kZXgpID0+IHsNCiAgICAgICAgICAgIGlmIChlbnREYXRhLmlzRXh0ZXJuYWwgPT0gJzEnICYmIGluZGV4ID09IDApIHsNCiAgICAgICAgICAgICAgZW50RGF0YS5zaG93ID0gJ+S4u+WunuS9ky3lpJYnOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChlbnREYXRhLmlzRXh0ZXJuYWwgPT0gJzEnKSB7DQogICAgICAgICAgICAgIGVudERhdGEuc2hvdyA9ICflrZDlrp7kvZMt5aSWJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkgew0KICAgICAgICAgICAgICBlbnREYXRhLmlzQ2hlY2sgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGVudERhdGEuY2hpbGRyZW4pIHsNCiAgICAgICAgICAgICAgZW50RGF0YS5jaGlsZHJlbi5mb3JFYWNoKHYgPT4gew0KICAgICAgICAgICAgICAgIGlmICh2LmlzRXh0ZXJuYWwgPT0gJzEnKSB7DQogICAgICAgICAgICAgICAgICB2LnNob3cgPSAn5a2Z5a6e5L2TLeWklic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGZvciAobGV0IHEgPSAwOyBxIDwgZW50RGF0YS5hdHRyaWJ1dGVMaXN0Lmxlbmd0aDsgcSsrKSB7DQogICAgICAgICAgICAgIGlmIChlbnREYXRhLmF0dHJpYnV0ZUxpc3RbcV0pIHsNCiAgICAgICAgICAgICAgICBpZiAoZW50RGF0YS5hdHRyaWJ1dGVMaXN0W3FdLmlzUmVxdWlyZWQgPT0gMCkgew0KICAgICAgICAgICAgICAgICAgZW50RGF0YS5hdHRyaWJ1dGVMaXN0W3FdLmlzUmVxdWlyZWQgPSAnMCc7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgIGVudERhdGEuYXR0cmlidXRlTGlzdFtxXS5pc1JlcXVpcmVkID0gJzEnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudERhdGEuYXR0cmlidXRlTGlzdC5sZW5ndGggLSAxIC0gcTsgaSsrKSB7DQogICAgICAgICAgICAgICAgaWYgKGVudERhdGEuYXR0cmlidXRlTGlzdFtpXS5pbmRleCA+IGVudERhdGEuYXR0cmlidXRlTGlzdFtpICsgMV0uaW5kZXgpIHsNCiAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBlbnREYXRhLmF0dHJpYnV0ZUxpc3RbaV07DQogICAgICAgICAgICAgICAgICBlbnREYXRhLmF0dHJpYnV0ZUxpc3RbaV0gPSBlbnREYXRhLmF0dHJpYnV0ZUxpc3RbaSArIDFdOw0KICAgICAgICAgICAgICAgICAgZW50RGF0YS5hdHRyaWJ1dGVMaXN0W2kgKyAxXSA9IHRlbXA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQogICAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHJlc3AuZGF0YTsNCiAgICAgICAgfSk7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDmlrDlop7lrp7kvZMNCiAgICBhZGRFbnRSb3dzKCkgew0KICAgICAgY29uc3QgdGhpc18gPSB0aGlzOw0KICAgICAgdXRpbA0KICAgICAgICAudmFsaWRhdGVGb3JtKHRoaXNfLCAnZm9ybScpDQogICAgICAgIC50aGVuKCgpID0+IHsNCiAgICAgICAgICBpZiAodGhpc18uZm9ybURhdGEuZW50cy5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXNfLmZvcm1EYXRhLmVudHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgaWYgKHRoaXNfLmNoZWNrR3JhbmRTb25FbnRzKGkpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzXy5jb3VudEF0dHJMZW5ndGggPSAwOw0KICAgICAgICAgICAgaWYgKCF0aGlzXy5jaGVja0VudEZ1bmModGhpc18uZm9ybURhdGEuZW50cykpIHsNCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpc18uZXh0TGVuID0gMDsNCiAgICAgICAgICB9DQogICAgICAgICAgdGhpc18uZm9ybURhdGEuZW50cy5mb3JFYWNoKGRhdGEgPT4gew0KICAgICAgICAgICAgZGF0YS5pc0NoZWNrID0gZmFsc2U7DQogICAgICAgICAgfSk7DQogICAgICAgICAgdGhpc18uZW50SW5kZXggPSArK3RoaXNfLmVudEluZGV4Ow0KICAgICAgICAgIGxldCByb3cgPSB7DQogICAgICAgICAgICBkZXNjOiAnJywNCiAgICAgICAgICAgIGluZGV4OiB0aGlzXy5lbnRJbmRleCwNCiAgICAgICAgICAgIG5hbWU6ICcnLA0KICAgICAgICAgICAgcGFja2FnZUlkOiAnJywNCiAgICAgICAgICAgIHNob3c6ICflrZDlrp7kvZMnLA0KICAgICAgICAgICAgY2hpbGRyZW46IFtdLA0KICAgICAgICAgICAgcmVsYXRpb246ICdvbmV0b21hbnknLA0KICAgICAgICAgICAgYXR0cmlidXRlTGlzdDogW10sDQogICAgICAgICAgICBzdGF0dXM6ICcnLA0KICAgICAgICAgICAgaXNDaGVjazogdHJ1ZSwNCiAgICAgICAgICB9Ow0KICAgICAgICAgIGlmICh0aGlzXy5mb3JtRGF0YS5lbnRzLmxlbmd0aCA9PSAwKSB7DQogICAgICAgICAgICB0aGlzXy5lbnRJbmRleCA9IDA7DQogICAgICAgICAgICByb3cgPSB7DQogICAgICAgICAgICAgIGRlc2M6ICcnLA0KICAgICAgICAgICAgICBpbmRleDogMCwNCiAgICAgICAgICAgICAgbmFtZTogJycsDQogICAgICAgICAgICAgIHBhY2thZ2VJZDogJycsDQogICAgICAgICAgICAgIHNob3c6ICfkuLvlrp7kvZMnLA0KICAgICAgICAgICAgICByZWxhdGlvbjogJ21haW4nLA0KICAgICAgICAgICAgICBzdGF0dXM6ICcnLA0KICAgICAgICAgICAgICBhdHRyaWJ1dGVMaXN0OiBbXSwNCiAgICAgICAgICAgICAgaXNDaGVjazogdHJ1ZSwNCiAgICAgICAgICAgIH07DQogICAgICAgICAgfQ0KICAgICAgICAgIGlmICh0aGlzXy5mb3JtRGF0YS5lbnRzLmxlbmd0aCA+IDAgJiYgdGhpc18uY2hlY2tHcmFuZFNvbkVudHModGhpc18uZm9ybURhdGEuZW50cy5sZW5ndGggLSAxKSkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgIH0NCiAgICAgICAgICB0aGlzXy5mb3JtRGF0YS5lbnRzLnB1c2gocm93KTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKHJlYXNvbiA9PiB7DQogICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlYXNvbikpIHsNCiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlYXNvbik7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgfQ0KICAgICAgICAgIGxldCBydWxlID0gcmVhc29uLm1hcCh2ID0+IHsNCiAgICAgICAgICAgIHJldHVybiB2LnJ1bGU7DQogICAgICAgICAgfSk7DQogICAgICAgICAgcnVsZSA9IHJ1bGUudW5pcXVlKCk7DQogICAgICAgICAgaWYgKHJ1bGUuaW5jbHVkZXMoJ3JlcXVpcmVkJykpIHsNCiAgICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+WwhuS/oeaBr+Whq+WGmeWujOaVtCcpOw0KICAgICAgICAgICAgdGhpcy5tZXNzYWdlQ2F0aW9uc1tuLmlkXSA9IG47DQogICAgICAgICAgfSBlbHNlIGlmIChydWxlLmluY2x1ZGVzKCdyZWdleCcpKSB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+WPquiDvei+k+WFpeWtl+avjeOAgeaVsOWtl+OAgeS4i+WIkue6v++8jOS4lOS7peWtl+avjeW8gOWktCcpOw0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfSwNCiAgICAvLyDliKDpmaTlrp7kvZMNCiAgICBkZWxldGVFbnRSb3dzKGluZGV4KSB7DQogICAgICB0aGlzLmVudEluZGV4ID0gaW5kZXg7DQogICAgICBpZiAoIXRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5hdHRyaWJ1dGVMaXN0KSB7DQogICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5hdHRyaWJ1dGVMaXN0ID0gW107DQogICAgICB9DQogICAgICB0aGlzLmZvcm1EYXRhLmVudHMuc3BsaWNlKGluZGV4LCAxKTsNCiAgICAgIGlmICh0aGlzLmVudEluZGV4ID49IHRoaXMuZm9ybURhdGEuZW50cy5sZW5ndGgpIHsNCiAgICAgICAgdGhpcy5lbnRJbmRleCA9IHRoaXMuZm9ybURhdGEuZW50cy5sZW5ndGggLSAxOw0KICAgICAgICB0aGlzLmdldEVudHNCeUluZGV4KHRoaXMuZW50SW5kZXgpOw0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW50cy5sZW5ndGggPiAwKSB7DQogICAgICAgIGlmIChpbmRleCA9PSAwKSB7DQogICAgICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW50c1swXS5pc0V4dGVybmFsICE9ICcxJykgew0KICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzWzBdLnNob3cgPSAn5Li75a6e5L2TJzsNCiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1swXS5yZWxhdGlvbiA9ICdtYWluJzsNCiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1swXS5jaGlsZHJlbiA9IFtdOw0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbMF0uc2hvdyA9ICfkuLvlrp7kvZMt5aSWJzsNCiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1swXS5yZWxhdGlvbiA9ICdtYWluJzsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9LA0KICAgIGNoZWNrR3JhbmRTb25FbnRzKGluZGV4LCBwYXJhbSkgew0KICAgICAgaWYgKCh0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLmNoaWxkcmVuICYmIHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW4ubGVuZ3RoID09IDApIHx8ICF0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLmNoaWxkcmVuKSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbjsNCiAgICAgIGNvbnN0IGxlbiA9IHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW4ubGVuZ3RoIC0gMTsNCiAgICAgIGNoaWxkW2xlbl0uY29tbWVudCA9IGNoaWxkW2xlbl0uZGVzYzsNCiAgICAgIGNoaWxkW2xlbl0uZGVzY3JpcHRpb24gPSBjaGlsZFtsZW5dLmRlc2M7DQogICAgICBpZiAoIXBhcmFtICYmIGNoaWxkW2xlbl0uYXR0cmlidXRlTGlzdC5sZW5ndGggPT0gMCkgew0KICAgICAgICB0aGlzLiRtZXNzYWdlKHsgbWVzc2FnZTogJ+ivt+a3u+WKoOWtl+auteS/oeaBrycsIHR5cGU6ICd3YXJuaW5nJyB9KTsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICB9DQogICAgfSwNCiAgICBhZGRHcmFuZFNvbkVudChpbmRleCkgew0KICAgICAgdGhpcy5nZXRFbnRzQnlJbmRleChpbmRleCk7DQogICAgICBjb25zdCByb3cgPSB7DQogICAgICAgIGRlc2M6ICcnLA0KICAgICAgICBpbmRleDogdGhpcy5lbnRJbmRleCwNCiAgICAgICAgbmFtZTogJycsDQogICAgICAgIHBhY2thZ2VJZDogJycsDQogICAgICAgIHNob3c6ICflrZnlrp7kvZMnLA0KICAgICAgICByZWxhdGlvbjogJ29uZXRvbWFueScsDQogICAgICAgIGF0dHJpYnV0ZUxpc3Q6IFtdLA0KICAgICAgICBzdGF0dXM6ICcnLA0KICAgICAgICBpc0NoZWNrOiB0cnVlLA0KICAgICAgfTsNCiAgICAgIGlmICghdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbikgew0KICAgICAgICB0aGlzLiRzZXQodGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XSwgJ2NoaWxkcmVuJywgW10pOw0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMuY2hlY2tHcmFuZFNvbkVudHMoaW5kZXgpKSB7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgICAgIHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW4ucHVzaChyb3cpOw0KICAgICAgdGhpcy5ncmFuZFNvbkluZGV4ID0gdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbi5sZW5ndGggLSAxOw0KICAgICAgdGhpcy5vcGVuR3JhbmRTb25BdHRyID0gdHJ1ZTsNCiAgICAgIHRoaXMuYXR0clRhYmxlRGF0YSA9IHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW5bdGhpcy5ncmFuZFNvbkluZGV4XS5hdHRyaWJ1dGVMaXN0Ow0KICAgIH0sDQogICAgZ2V0RW50c0J5SW5kZXgoaW5kZXgsIHBhcmFtKSB7DQogICAgICAvLyDlpoLmnpzmmK/liKDpmaToh6rliqjpgInmi6nkuIrkuIDkuKrlrp7kvZMNCiAgICAgIGlmIChwYXJhbSA9PSAnZGVsZXRlJykgew0KICAgICAgICBpZiAodGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XSkgew0KICAgICAgICAgIHRoaXMuZW50SW5kZXggPSBpbmRleDsNCiAgICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHMuZm9yRWFjaChkYXRhID0+IHsNCiAgICAgICAgICAgIGRhdGEuaXNDaGVjayA9IGZhbHNlOw0KICAgICAgICAgIH0pOw0KICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uaXNDaGVjayA9IHRydWU7DQogICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGNvbnN0IHRoaXNfID0gdGhpczsNCiAgICAgICAgdXRpbA0KICAgICAgICAgIC52YWxpZGF0ZUZvcm0odGhpcywgJ2Zvcm0nKQ0KICAgICAgICAgIC50aGVuKCgpID0+IHsNCiAgICAgICAgICAgIHRoaXMub3BlbkdyYW5kU29uQXR0ciA9IGZhbHNlOw0KICAgICAgICAgICAgaWYgKHBhcmFtID09ICdncmFuZFNvbkVudCcpIHsNCiAgICAgICAgICAgICAgdGhpcy5vcGVuR3JhbmRTb25BdHRyID0gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdKSB7DQogICAgICAgICAgICAgIHRoaXMuZW50SW5kZXggPSBpbmRleDsNCiAgICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzLmZvckVhY2goZGF0YSA9PiB7DQogICAgICAgICAgICAgICAgZGF0YS5pc0NoZWNrID0gZmFsc2U7DQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLmlzQ2hlY2sgPSB0cnVlOw0KICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KQ0KICAgICAgICAgIC5jYXRjaChyZWFzb24gPT4gew0KICAgICAgICAgICAgbGV0IHJ1bGUgPSByZWFzb24ubWFwKHYgPT4gew0KICAgICAgICAgICAgICByZXR1cm4gdi5ydWxlOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBydWxlID0gcnVsZS51bmlxdWUoKTsNCiAgICAgICAgICAgIHRoaXNfLmNsb3NlQWxsTm90aWZpY2F0aW9uKCk7DQogICAgICAgICAgICBpZiAocnVsZS5pbmNsdWRlcygncmVxdWlyZWQnKSkgew0KICAgICAgICAgICAgICBjb25zdCBuID0gdGhpc18uJG1lc3NhZ2Uud2FybmluZygn6K+35bCG5L+h5oGv5aGr5YaZ5a6M5pW0Jyk7DQogICAgICAgICAgICAgIHRoaXNfLm1lc3NhZ2VDYXRpb25zW24uaWRdID0gbjsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVsZS5pbmNsdWRlcygncmVnZXgnKSkgew0KICAgICAgICAgICAgICBjb25zdCBuID0gdGhpc18uJG1lc3NhZ2Uud2FybmluZygn5Y+q6IO96L6T5YWl5a2X5q+N44CB5pWw5a2X44CB5LiL5YiS57q/77yM5LiU5Lul5a2X5q+N5byA5aS0Jyk7DQogICAgICAgICAgICAgIHRoaXNfLm1lc3NhZ2VDYXRpb25zW24uaWRdID0gbjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCiAgICAgIH0NCiAgICB9LA0KICAgIGNoaW5lc2VGb3JtYXQoaWQsIGxpc3QsIHBhcmFtLCBpbmRleCwgdikgew0KICAgICAgY29uc3QgX3RoaXMgPSB0aGlzOw0KICAgICAgY29uc3QgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsNCiAgICAgIC8vIGRpc2FibGVkIOaIluiAhSByZWFkb25seSDml7Yg5LiN6ZyA6KaB6K+35rGCDQogICAgICBsZXQgdGltZXIgPSBudWxsOw0KICAgICAgaWYgKGQgPT09IG51bGwgfHwgZC5fX3Z1ZV9fLmRpc2FibGVkIHx8IGQuX192dWVfXy5yZWFkb25seSB8fCAhdikgcmV0dXJuOw0KICAgICAgaWYgKHRpbWVyKSB7DQogICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7DQogICAgICB9DQogICAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQogICAgICAgIHJlcQ0KICAgICAgICAgIC5yZXF1ZXN0KHsNCiAgICAgICAgICAgIHVybDogYCR7d2luZG93LmNvbnRleHQudWN9L2Jhc2UvdG9vbHMvdjEvZ2V0UGlueWluYCwNCiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsDQogICAgICAgICAgICBwYXJhbXM6IHsgY2hpbmVzZTogdiwgdHlwZTogMCB9LA0KICAgICAgICAgIH0pDQogICAgICAgICAgLnRoZW4ocmVzID0+IHsNCiAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0ZSkgew0KICAgICAgICAgICAgICBsaXN0W2luZGV4XVtwYXJhbV0gPSByZXMuZGF0YS52YWx1ZTsNCiAgICAgICAgICAgICAgbWFpbi4kbmV4dFRpY2soKCkgPT4gew0KICAgICAgICAgICAgICAgIG1haW4uJHZhbGlkYXRvci52YWxpZGF0ZSgpOw0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCiAgICAgIH0sIDUwMCk7DQogICAgfSwNCiAgICBlbnRCbHVyKCkgew0KICAgICAgaWYgKA0KICAgICAgICB0aGlzLm9wZW5HcmFuZFNvbkF0dHIgJiYNCiAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmNoaWxkcmVuW3RoaXMuZ3JhbmRTb25JbmRleF0uYXR0cmlidXRlTGlzdCAmJg0KICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5bdGhpcy5ncmFuZFNvbkluZGV4XS5hdHRyaWJ1dGVMaXN0Lmxlbmd0aCA+IDANCiAgICAgICkgew0KICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5bdGhpcy5ncmFuZFNvbkluZGV4XS5hdHRyaWJ1dGVMaXN0LmZvckVhY2goaXRlbSA9PiB7DQogICAgICAgICAgaXRlbS5kZXNjID0gaXRlbS5jb21tZW50Ow0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICAgIGlmICh0eXBlb2YgdGhpcy5lbnRCbHVyRGVzY1JlcGVhdEluZGV4ID09PSAnbnVtYmVyJykgew0KICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNoYW5nZUVudHNEZXNjJHt0aGlzLmVudEJsdXJEZXNjUmVwZWF0SW5kZXh9YCkpIHsNCiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY2hhbmdlRW50c0Rlc2Mke3RoaXMuZW50Qmx1ckRlc2NSZXBlYXRJbmRleH1gKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJyc7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjaGFuZ2VHcmFuZFNvbkVudHNEZXNjJHt0aGlzLmVudEJsdXJEZXNjUmVwZWF0SW5kZXh9YCkpIHsNCiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY2hhbmdlR3JhbmRTb25FbnRzRGVzYyR7dGhpcy5lbnRCbHVyRGVzY1JlcGVhdEluZGV4fWApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnJzsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKHR5cGVvZiB0aGlzLmVudEJsdXJOYW1lUmVwZWF0SW5kZXggPT09ICdudW1iZXInKSB7DQogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgZW50TmFtZSR7dGhpcy5lbnRCbHVyTmFtZVJlcGVhdEluZGV4fWApKSB7DQogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGVudE5hbWUke3RoaXMuZW50Qmx1ck5hbWVSZXBlYXRJbmRleH1gKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJyc7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjaGFuZ2VHcmFuZFNvbkVudHNOYW1lJHt0aGlzLmVudEJsdXJOYW1lUmVwZWF0SW5kZXh9YCkpIHsNCiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY2hhbmdlR3JhbmRTb25FbnRzTmFtZSR7dGhpcy5lbnRCbHVyTmFtZVJlcGVhdEluZGV4fWApLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnJzsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMuYXR0ckNvbW1lbnRFbGVtZW50SWQgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyQ29tbWVudEVsZW1lbnRJZCkpIHsNCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyQ29tbWVudEVsZW1lbnRJZCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcnOw0KICAgICAgfQ0KICAgICAgaWYgKHR5cGVvZiB0aGlzLmNoZWNrQXR0ck5hbWVJbmRleCA9PT0gJ251bWJlcicpIHsNCiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3RoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEF0dHJJbmRleF0uYXR0cmlidXRlTGlzdFt0aGlzLmNoZWNrQXR0ck5hbWVJbmRleF0ubmFtZX1hdHRyTmFtZSR7dGhpcy5jaGVja0F0dHJOYW1lSW5kZXh9YCkpIHsNCiAgICAgICAgICBkb2N1bWVudA0KICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKGAke3RoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEF0dHJJbmRleF0uYXR0cmlidXRlTGlzdFt0aGlzLmNoZWNrQXR0ck5hbWVJbmRleF0ubmFtZX1hdHRyTmFtZSR7dGhpcy5jaGVja0F0dHJOYW1lSW5kZXh9YCkNCiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJyc7DQogICAgICAgIH0NCiAgICAgICAgY29uc3Qgc29uQXR0ciA9IHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLnNvbkF0dHJJbmRleF07DQogICAgICAgIGlmIChzb25BdHRyKSB7DQogICAgICAgICAgZG9jdW1lbnQNCiAgICAgICAgICAgIC5nZXRFbGVtZW50QnlJZChgJHtzb25BdHRyLmNoaWxkcmVuW3RoaXMuZW50QXR0ckluZGV4XS5hdHRyaWJ1dGVMaXN0W3RoaXMuY2hlY2tBdHRyTmFtZUluZGV4XS5uYW1lfWF0dHJOYW1lJHt0aGlzLmNoZWNrQXR0ck5hbWVJbmRleH1gKQ0KICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnJzsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLmNoZWNrQXR0ck5hbWVJbmRleCA9IG51bGw7DQogICAgICB9DQogICAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWVUeXBlKSB7DQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGBkZWZhdWx0VmFsdWUke3RoaXMuZGVmYXVsdFZhbHVlSW5kZXh9YClbMF0uc3R5bGUuYm9yZGVyID0gJyc7DQogICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlVHlwZSA9IG51bGw7DQogICAgICB9DQogICAgICBpZiAodGhpcy5hdHRyTGVuRWxlbWVudElkICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkpIHsNCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnJzsNCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLmF0dHJEZWNpbWFFbGVtZW50SWQgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyRGVjaW1hRWxlbWVudElkKSkgew0KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJEZWNpbWFFbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcnOw0KICAgICAgfQ0KICAgIH0sDQogICAgLy8g5YWz6Zet5omA5pyJ5qCh6aqM6YCa55+lDQogICAgY2xvc2VBbGxOb3RpZmljYXRpb24oKSB7DQogICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLm1lc3NhZ2VDYXRpb25zKSB7DQogICAgICAgIHRoaXMubWVzc2FnZUNhdGlvbnNba2V5XS5jbG9zZSgpOw0KICAgICAgICBkZWxldGUgdGhpcy5tZXNzYWdlQ2F0aW9uc1trZXldOw0KICAgICAgfQ0KICAgIH0sDQogICAgZ2V0R3JhbmRTb25FbnRzQnlJbmRleChpLCBpbmRleCkgew0KICAgICAgdGhpcy5nZXRFbnRzQnlJbmRleChpbmRleCwgJ2dyYW5kU29uRW50Jyk7DQogICAgICB0aGlzLmdyYW5kU29uSW5kZXggPSBpOw0KICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbiAmJiB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5baV0pIHsNCiAgICAgICAgdGhpcy5hdHRyVGFibGVEYXRhID0gdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmNoaWxkcmVuW2ldLmF0dHJpYnV0ZUxpc3Q7DQogICAgICB9DQogICAgfSwNCiAgICBkZWxldGVHcmFuZFNvbkVudFJvd3MoaSwgaW5kZXgpIHsNCiAgICAgIHRoaXMuZ2V0RW50c0J5SW5kZXgoaW5kZXgsICdub0NoZWNrJyk7DQogICAgICB0aGlzLmdyYW5kU29uSW5kZXggPSBpOw0KICAgICAgaWYgKCF0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uYXR0cmlidXRlTGlzdCkgew0KICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5baV0uYXR0cmlidXRlTGlzdCA9IFtdOw0KICAgICAgfQ0KICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmNoaWxkcmVuLnNwbGljZShpLCAxKTsNCiAgICAgIHRoaXMub3BlbkdyYW5kU29uQXR0ciA9IGZhbHNlOw0KICAgICAgdGhpcy5hdHRyVGFibGVEYXRhID0gdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmF0dHJpYnV0ZUxpc3Q7DQogICAgICBpZiAodGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmNoaWxkcmVuW2kgLSAxXSAmJiB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5baSAtIDFdLmF0dHJpYnV0ZUxpc3QubGVuZ3RoID4gMCkgew0KICAgICAgICB0aGlzLmF0dHJUYWJsZURhdGEgPSB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5baSAtIDFdLmF0dHJpYnV0ZUxpc3Q7DQogICAgICB9DQogICAgfSwNCiAgICBjaGVja0VudEZ1bmMoZW50LCBzb25JbmRleCkgew0KICAgICAgY29uc3QgZW50VmFsID0ge307DQogICAgICBpZiAoZW50Lmxlbmd0aCA8IDEpIHsNCiAgICAgICAgdGhpcy4kbWVzc2FnZSh7IHR5cGU6ICd3YXJuaW5nJywgbWVzc2FnZTogJ+ivt+a3u+WKoOWunuS9k+Wvueixoe+8gScgfSk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW50Lmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGlmIChlbnRbaV0uc2hvdyAhPSAn5a2Z5a6e5L2TJykgew0KICAgICAgICAgIGVudFtpXS5kZXNjcmlwdGlvbiA9IGVudFtpXS5jb21tZW50Ow0KICAgICAgICAgIGVudFtpXS5kZXNjID0gZW50W2ldLmNvbW1lbnQ7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCFlbnRWYWxbYGRlc2Mke2VudFtpXS5kZXNjfWBdKSB7DQogICAgICAgICAgZW50VmFsW2BkZXNjJHtlbnRbaV0uZGVzY31gXSA9IGVudFtpXS5kZXNjOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMuZW50Qmx1ckRlc2NSZXBlYXRJbmRleCA9IGk7DQogICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjaGFuZ2VFbnRzRGVzYyR7aX1gKSAmJiBlbnRbaV0uc2hvdyA9PSAn5a2Q5a6e5L2TJykgew0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgIG1lc3NhZ2U6IGDlt7LlrZjlnKjlrZDlrp7kvZPmj4/ov7DkuLrjgJAke2VudFtpXS5kZXNjfeOAkeeahGJv5a6e5L2TYCwNCiAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLA0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBkb2N1bWVudA0KICAgICAgICAgICAgICAuZ2V0RWxlbWVudEJ5SWQoYGNoYW5nZUVudHNEZXNjJHtpfWApDQogICAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0NCiAgICAgICAgICAgICAgLmxhc3RFbGVtZW50Q2hpbGQuZm9jdXMoKTsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjaGFuZ2VFbnRzRGVzYyR7aX1gKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgbWVzc2FnZTogYOW3suWtmOWcqOWtmeWunuS9k+aPj+i/sOS4uuOAkCR7ZW50W2ldLmRlc2N944CR55qEYm/lrp7kvZNgLA0KICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsDQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGRvY3VtZW50DQogICAgICAgICAgICAgIC5nZXRFbGVtZW50QnlJZChgY2hhbmdlR3JhbmRTb25FbnRzRGVzYyR7aX1gKQ0KICAgICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdDQogICAgICAgICAgICAgIC5sYXN0RWxlbWVudENoaWxkLmZvY3VzKCk7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY2hhbmdlR3JhbmRTb25FbnRzRGVzYyR7aX1gKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgIH0NCiAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCFlbnRWYWxbYG5hbWUke2VudFtpXS5uYW1lfWBdKSB7DQogICAgICAgICAgZW50VmFsW2BuYW1lJHtlbnRbaV0ubmFtZX1gXSA9IGVudFtpXS5uYW1lOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMuZW50Qmx1ck5hbWVSZXBlYXRJbmRleCA9IGk7DQogICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBlbnROYW1lJHtpfWApICYmIGVudFtpXS5zaG93ID09ICflrZDlrp7kvZMnKSB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgbWVzc2FnZTogYOW3suWtmOWcqOWtkOWunuS9k+WQjeensOS4uuOAkCR7ZW50W2ldLm5hbWV944CR55qEYm/lrp7kvZNgLA0KICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsDQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGRvY3VtZW50DQogICAgICAgICAgICAgIC5nZXRFbGVtZW50QnlJZChgZW50TmFtZSR7aX1gKQ0KICAgICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdDQogICAgICAgICAgICAgIC5sYXN0RWxlbWVudENoaWxkLmZvY3VzKCk7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgZW50TmFtZSR7aX1gKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgbWVzc2FnZTogYOW3suWtmOWcqOWtmeWunuS9k+WQjeensOS4uuOAkCR7ZW50W2ldLm5hbWV944CR55qEYm/lrp7kvZNgLA0KICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsDQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGRvY3VtZW50DQogICAgICAgICAgICAgIC5nZXRFbGVtZW50QnlJZChgY2hhbmdlR3JhbmRTb25FbnRzTmFtZSR7aX1gKQ0KICAgICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdDQogICAgICAgICAgICAgIC5sYXN0RWxlbWVudENoaWxkLmZvY3VzKCk7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY2hhbmdlR3JhbmRTb25FbnRzTmFtZSR7aX1gKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgIH0NCiAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGVudFtpXS5pc0V4dGVybmFsID09ICcxJykgew0KICAgICAgICAgICsrdGhpcy5leHRMZW47DQogICAgICAgICAgaWYgKGkgIT0gMCAmJiB0aGlzLmV4dExlbiA+IDEgJiYgIWVudFtpXS5maykgew0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgIG1lc3NhZ2U6IGDor7fnu5kke2VudFtpXS5jb21tZW50feWunuS9k+a3u+WKoOWklumUru+8gWAsDQogICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBpZiAoZW50W2ldLmF0dHJpYnV0ZUxpc3QubGVuZ3RoID4gMCkgew0KICAgICAgICAgIGlmICghdGhpcy5jaGVja0F0dHJGdW5jKGVudFtpXSwgaSwgc29uSW5kZXgpKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoeyBtZXNzYWdlOiAn6K+35re75Yqg5a2X5q6177yBJywgdHlwZTogJ3dhcm5pbmcnIH0pOw0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoZW50W2ldLmNoaWxkcmVuICYmIGVudFtpXS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7DQogICAgICAgICAgdGhpcy5jb3VudEF0dHJMZW5ndGggPSAwOw0KICAgICAgICAgIGlmICghdGhpcy5jaGVja0VudEZ1bmMoZW50W2ldLmNoaWxkcmVuLCBpKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICB0aGlzLmNvdW50QXR0ckxlbmd0aCA9IDA7DQogICAgICB9DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9LA0KICAgIGNoZWNrQXR0ckZ1bmMoZW50LCBpLCBzb25JbmRleCkgew0KICAgICAgY29uc3QgcmVnUG9zID0gbmV3IFJlZ0V4cCgnXlxcZCooPzpcXC5cXGR7MSwyfSk/JCcpOw0KICAgICAgY29uc3QgYXR0clZhbCA9IHt9Ow0KICAgICAgY29uc3QgYXR0ciA9IGVudC5hdHRyaWJ1dGVMaXN0Ow0KICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBhdHRyLmxlbmd0aDsgaisrKSB7DQogICAgICAgIGF0dHJbal0uZGVzYyA9IGF0dHJbal0uY29tbWVudDsNCiAgICAgICAgaWYgKGF0dHJbal0uZGVmYXVsdFZhbHVlID09IG51bGwpIHsNCiAgICAgICAgICBhdHRyW2pdLmRlZmF1bHRWYWx1ZSA9ICcnOw0KICAgICAgICB9DQogICAgICAgIGF0dHJbal0uZGVmYXVsdFZhbHVlID0gYXR0cltqXS5kZWZhdWx0VmFsdWUudHJpbSgpOw0KICAgICAgICB0aGlzLmF0dHJDb21tZW50RWxlbWVudElkID0gYCR7YXR0cltqXS5uYW1lfWNvbW1lbnQke2p9YDsNCiAgICAgICAgaWYgKGVudC5pc0V4dGVybmFsICE9ICcxJykgew0KICAgICAgICAgIGlmICghYXR0clZhbFtgbmFtZSR7YXR0cltqXS5uYW1lfWBdKSB7DQogICAgICAgICAgICBhdHRyVmFsW2BuYW1lJHthdHRyW2pdLm5hbWV9YF0gPSBhdHRyW2pdLm5hbWU7DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMuZW50QXR0ckluZGV4ID0gaTsNCiAgICAgICAgICAgIGlmIChzb25JbmRleCkgew0KICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpcy5hdHRyTmFtZUVsZW1lbnRJZCA9IGF0dHI7DQogICAgICAgICAgICB0aGlzLmNoZWNrQXR0ck5hbWVJbmRleCA9IGo7DQogICAgICAgICAgICBjb25zdCBtc2cgPSBg5a6e5L2T77yaJHtlbnQuZGVzY33vvIgke2VudC5uYW1lfe+8ieS4reWtmOWcqOmHjeWkjeWtl+auteWQjeOAkCR7YXR0cltqXS5uYW1lfeOAkWA7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsgbWVzc2FnZTogbXNnLCB0eXBlOiAnd2FybmluZycgfSk7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0aGlzLmF0dHJOYW1lRWxlbWVudElkW2pdLm5hbWV9YXR0ck5hbWUke2p9YCkuZm9jdXMoKTsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3RoaXMuYXR0ck5hbWVFbGVtZW50SWRbal0ubmFtZX1hdHRyTmFtZSR7an1gKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0NCiAgICAgICAgICAgICAgJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgIH0NCiAgICAgICAgICB0aGlzLmF0dHJMZW5FbGVtZW50SWQgPSBgJHthdHRyW2pdLm5hbWV9YXR0ckxlbiR7an1gOw0KICAgICAgICAgIGlmIChhdHRyW2pdLmF0dHJMZW5ndGggJiYgYXR0cltqXS5hdHRyTGVuZ3RoICE9PSAwKSB7DQogICAgICAgICAgICBpZiAoIXJlZ1Bvcy50ZXN0KGF0dHJbal0uYXR0ckxlbmd0aCkpIHsNCiAgICAgICAgICAgICAgdGhpcy5lbnRBdHRySW5kZXggPSBpOw0KICAgICAgICAgICAgICBpZiAoc29uSW5kZXgpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuZm9jdXMoKTsNCiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+i+k+WFpeato+ehruaVsOWtlycpOw0KICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VDYXRpb25zW24uaWRdID0gbjsNCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICB0aGlzLmF0dHJEZWNpbWFFbGVtZW50SWQgPSBgJHthdHRyW2pdLm5hbWV9ZGVjaW1hJHtqfWA7DQogICAgICAgICAgaWYgKGF0dHJbal0uZGVjaW1hbExlbiAmJiBhdHRyW2pdLmRlY2ltYWxMZW4gIT09IDApIHsNCiAgICAgICAgICAgIGlmICghcmVnUG9zLnRlc3QoYXR0cltqXS5kZWNpbWFsTGVuKSkgew0KICAgICAgICAgICAgICB0aGlzLmVudEF0dHJJbmRleCA9IGk7DQogICAgICAgICAgICAgIGlmIChzb25JbmRleCkgew0KICAgICAgICAgICAgICAgIHRoaXMuc29uQXR0ckluZGV4ID0gc29uSW5kZXg7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyRGVjaW1hRWxlbWVudElkKS5mb2N1cygpOw0KICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJEZWNpbWFFbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICAgICAgY29uc3QgbiA9IHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+36L6T5YWl5q2j56Gu5pWw5a2XJyk7DQogICAgICAgICAgICAgIHRoaXMubWVzc2FnZUNhdGlvbnNbbi5pZF0gPSBuOw0KICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIGlmIChhdHRyW2pdLmRlY2ltYWxMZW4pIHsNCiAgICAgICAgICAgIGlmIChhdHRyW2pdLmRlY2ltYWxMZW4ubGVuZ3RoID4gMSkgew0KICAgICAgICAgICAgICBjb25zdCBkZWNpbWFsTGVuID0gYXR0cltqXS5kZWNpbWFsTGVuLnN1YnN0cigwLCAxKTsNCiAgICAgICAgICAgICAgaWYgKGRlY2ltYWxMZW4gPT0gJzAnKSB7DQogICAgICAgICAgICAgICAgYXR0cltqXS5kZWNpbWFsTGVuID0gYXR0cltqXS5kZWNpbWFsTGVuLnN1YnN0cigxLCBhdHRyW2pdLmRlY2ltYWxMZW4ubGVuZ3RoKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGF0dHJbal0uZGVjaW1hbExlbiA8IDAgfHwgYXR0cltqXS5kZWNpbWFsTGVuID4gMzApIHsNCiAgICAgICAgICAgICAgdGhpcy5lbnRBdHRySW5kZXggPSBpOw0KICAgICAgICAgICAgICBpZiAoc29uSW5kZXgpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckRlY2ltYUVsZW1lbnRJZCkuZm9jdXMoKTsNCiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyRGVjaW1hRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflsI/mlbDplb/luqbkuI3og73lsI/kuo4w5oiW6ICF5aSn5LqOMzAnLA0KICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKGF0dHJbal0uZGF0YVR5cGUgPT09ICd2YXJjaGFyJykgew0KICAgICAgICAgICAgdGhpcy5jb3VudEF0dHJMZW5ndGggKz0gcGFyc2VJbnQoYXR0cltqXS5hdHRyTGVuZ3RoKTsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKGF0dHJbal0uYXR0ckxlbmd0aCkgew0KICAgICAgICAgICAgaWYgKGF0dHJbal0uYXR0ckxlbmd0aC5sZW5ndGggPiAxKSB7DQogICAgICAgICAgICAgIGNvbnN0IGF0dHJMZW5ndGggPSBhdHRyW2pdLmF0dHJMZW5ndGguc3Vic3RyKDAsIDEpOw0KICAgICAgICAgICAgICBpZiAoYXR0ckxlbmd0aCA9PSAnMCcpIHsNCiAgICAgICAgICAgICAgICBhdHRyW2pdLmF0dHJMZW5ndGggPSBhdHRyW2pdLmF0dHJMZW5ndGguc3Vic3RyKDEsIGF0dHJbal0uYXR0ckxlbmd0aC5sZW5ndGgpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYXR0cltqXS5kYXRhVHlwZSA9PT0gJ3ZhcmNoYXInKSB7DQogICAgICAgICAgICAgIGlmIChhdHRyW2pdLmF0dHJMZW5ndGggPCAxIHx8IHRoaXMuY291bnRBdHRyTGVuZ3RoID4gMjE1MDApIHsNCiAgICAgICAgICAgICAgICB0aGlzLmVudEF0dHJJbmRleCA9IGk7DQogICAgICAgICAgICAgICAgaWYgKHNvbkluZGV4KSB7DQogICAgICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLmZvY3VzKCk7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5pW05pWw6ZW/5bqm5LiN6IO95bCP5LqOMeaIluiAhemVv+W6puaAu+WSjOi2heWHujIxNTAwJywNCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKGF0dHJbal0uZGF0YVR5cGUgPT09ICdudW1iZXInIHx8IGF0dHJbal0uZGF0YVR5cGUgPT0gJ+aVsOWtlycpIHsNCiAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbCA9IGF0dHJbal0uZGVmYXVsdFZhbHVlLnNwbGl0KCcuJyk7DQogICAgICAgICAgICAgIGlmIChOdW1iZXIoYXR0cltqXS5hdHRyTGVuZ3RoKSA8IDEpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmVudEF0dHJJbmRleCA9IGk7DQogICAgICAgICAgICAgICAgaWYgKHNvbkluZGV4KSB7DQogICAgICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLmZvY3VzKCk7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5pW05pWw6ZW/5bqm5LiN6IO95bCP5LqOMScsDQogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmIChOdW1iZXIoYXR0cltqXS5hdHRyTGVuZ3RoKSArIE51bWJlcihhdHRyW2pdLmRlY2ltYWxMZW4pID4gMzgpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmVudEF0dHJJbmRleCA9IGk7DQogICAgICAgICAgICAgICAgaWYgKHNvbkluZGV4KSB7DQogICAgICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLmZvY3VzKCk7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5pW05pWw6ZW/5bqm5LiO5bCP5pWw6ZW/5bqm5LmL5ZKM5LiN6IO96LaF6L+HMzgnLA0KICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAoZGVmYXVsdFZhbFsxXSAmJiBOdW1iZXIoZGVmYXVsdFZhbFsxXS5sZW5ndGgpID4gTnVtYmVyKGF0dHJbal0uZGVjaW1hbExlbikpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZUluZGV4ID0gajsNCiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVR5cGUgPSAnbnVtYmVyJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShgZGVmYXVsdFZhbHVlJHtqfWApWzBdLmZvY3VzKCk7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoYGRlZmF1bHRWYWx1ZSR7an1gKVswXS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn6buY6K6k5YC85Lit5bCP5pWw6ZW/5bqm6LaF5Ye66K6+572u5YC8JywNCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKGF0dHJbal0uZGVmYXVsdFZhbHVlICYmIGF0dHJbal0uZGVmYXVsdFZhbHVlLmxlbmd0aCA+IDIxKSB7DQogICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVJbmRleCA9IGo7DQogICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVUeXBlID0gJ251bWJlcic7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoYGRlZmF1bHRWYWx1ZSR7an1gKVswXS5mb2N1cygpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGBkZWZhdWx0VmFsdWUke2p9YClbMF0uc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoeyBtZXNzYWdlOiAn5pW05pWw6ZW/5bqm5LiN6IO96LaF6L+HMjEnLCB0eXBlOiAnd2FybmluZycgfSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmICghcmVnUG9zLnRlc3QoTnVtYmVyKGF0dHJbal0uZGVmYXVsdFZhbHVlKSkpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZUluZGV4ID0gajsNCiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVR5cGUgPSAnbnVtYmVyJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShgZGVmYXVsdFZhbHVlJHtqfWApWzBdLmZvY3VzKCk7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoYGRlZmF1bHRWYWx1ZSR7an1gKVswXS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7IG1lc3NhZ2U6ICfpu5jorqTlgLzlupTkuLrmlbDlrZcnLCB0eXBlOiAnd2FybmluZycgfSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBsZXQgZCA9IGF0dHJbal0uZGVmYXVsdFZhbHVlOw0KICAgICAgICAgICAgaWYgKGQuaW5kZXhPZignLicpID4gLTEpIHsNCiAgICAgICAgICAgICAgY29uc3QgaSA9IGQuaW5kZXhPZignLicpOw0KICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGQuc3Vic3RyaW5nKDAsIGkpOw0KICAgICAgICAgICAgICBjb25zdCBlbmQgPSBkLnN1YnN0cmluZyhpICsgMSwgYXR0cltqXS5kZWZhdWx0VmFsdWUubGVuZ3RoKTsNCiAgICAgICAgICAgICAgZCA9IHN0YXJ0ICsgZW5kOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGQubGVuZ3RoID4gYXR0cltqXS5hdHRyTGVuZ3RoICsgYXR0cltqXS5kZWNpbWFsTGVuKSB7DQogICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlSW5kZXggPSBqOw0KICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVR5cGUgPSAndmFyY2hhcic7DQogICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGBkZWZhdWx0VmFsdWUke2p9YClbMF0uZm9jdXMoKTsNCiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoYGRlZmF1bHRWYWx1ZSR7an1gKVswXS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7DQogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICfpu5jorqTlgLzplb/luqbpnIDlsI/kuo7mlbTmlbDplb/luqYnLA0KICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJbal0uZGF0YVR5cGUgPT09ICd2YXJjaGFyJyB8fCBhdHRyW2pdLmRhdGFUeXBlID09PSAnbnVtYmVyJykgew0KICAgICAgICAgICAgdGhpcy5lbnRBdHRySW5kZXggPSBpOw0KICAgICAgICAgICAgaWYgKHNvbkluZGV4KSB7DQogICAgICAgICAgICAgIHRoaXMuc29uQXR0ckluZGV4ID0gc29uSW5kZXg7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLmZvY3VzKCk7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoeyBtZXNzYWdlOiAn6K+35re75Yqg5pW05pWw6ZW/5bqmJywgdHlwZTogJ3dhcm5pbmcnIH0pOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfSwNCiAgICAvLyDlhbPpl63ooajljZXlr7nor53moYYNCiAgICBoYW5kbGVEaWFsb2dDbG9zZSgpIHsNCiAgICAgIHRoaXMuJGVtaXQoJ2xvYWRUYWJsZURhdGEnKTsNCiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlOw0KICAgICAgdGhpcy5pc1NhdmUgPSBmYWxzZTsNCiAgICAgIHRoaXMuZW50SW5kZXggPSAwOw0KICAgICAgdGhpcy5ncmFuZFNvbkluZGV4ID0gLTE7DQogICAgICB0aGlzLm9wZW5HcmFuZFNvbkF0dHIgPSBmYWxzZTsNCiAgICAgIHRoaXMuY291bnRBdHRyTGVuZ3RoID0gMDsNCiAgICAgIHRoaXMuZm9ybURhdGEgPSB0aGlzLiRvcHRpb25zLmRhdGEoKS5mb3JtRGF0YTsNCiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogJy9zeXNwbGF0L2J1c2luZXNzT2JqJyB9KTsgLy8gZm9ybSNidXNpbmVzc09iag0KICAgIH0sDQogICAgb25DYW5jZWwoKSB7DQogICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTsNCiAgICB9LA0KICAgIG9uQ29uZmlybSgpIHsNCiAgICAgIHRoaXMuJHJlZnMuZm9ybS52YWxpZGF0ZShhc3luYyB2YWxpZCA9PiB7DQogICAgICAgIGlmICh2YWxpZCkgew0KICAgICAgICAgIC8vIGNvbnN0IHBhcmFtcyA9IHRoaXMuaGFuZGxlUGFyYW1zKCkNCiAgICAgICAgICAvLyB0cnkgew0KICAgICAgICAgIC8vICAgdGhpcy5sb2FkaW5nID0gdHJ1ZQ0KICAgICAgICAgIC8vICAgaWYgKHRoaXMuZGF0YT8uaWQpIHsNCiAgICAgICAgICAvLyAgICAgYXdhaXQgdXBkYXRlRGF0YShwYXJhbXMpDQogICAgICAgICAgLy8gICB9IGVsc2Ugew0KICAgICAgICAgIC8vICAgICBhd2FpdCBkYXRhQWRkKHBhcmFtcykNCiAgICAgICAgICAvLyAgIH0NCiAgICAgICAgICAvLyAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygn5pON5L2c5oiQ5YqfJykNCiAgICAgICAgICAvLyAgIHRoaXMub25DYW5jZWwoKQ0KICAgICAgICAgIC8vIHRoaXMuJGVtaXQoJ2NvbmZpcm0nLCB7Li4udGhpcy5mb3JtRGF0YX0pDQogICAgICAgICAgLy8gfSBmaW5hbGx5IHsNCiAgICAgICAgICAvLyAgIHRoaXMubG9hZGluZyA9IGZhbHNlDQogICAgICAgICAgLy8gfQ0KICAgICAgICB9DQogICAgICB9KTsNCiAgICB9LA0KICB9LA0KfTsNCg=="},null]}