{"remainingRequest":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/vue-loader/lib/index.js??vue-loader-options!/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/src/views/rail/index.vue?vue&type=script&lang=js","dependencies":[{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/src/views/rail/index.vue","mtime":1702017170931},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/cache-loader/dist/cjs.js","mtime":1702017195495},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/babel-loader/lib/index.js","mtime":1702017196389},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/cache-loader/dist/cjs.js","mtime":1702017195495},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/vue-loader/lib/index.js","mtime":1702017196548}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CmltcG9ydCB7IHV0aWxzLCBWTWFwLCBWVGlsZSwgVlZlY3RvciwgVk92ZXJsYXksIFZEcmF3IH0gZnJvbSAidi1vbC1tYXAiOwppbXBvcnQgInYtb2wtbWFwL2xpYi92LW9sLW1hcC5jc3MiOwppbXBvcnQgbWFwVG9vbGJhciBmcm9tICJAL2NvbXBvbmVudHMvbWFwVG9vbGJhci9pbmRleC52dWUiOwppbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAiZWxlbWVudC11aSI7CmltcG9ydCB7IGRlbGV0ZVJhaWxBY2Nlc3MsIGdldFJhaWxEZXRhaWxBY2Nlc3MsIHNlYXJjaFJhaWxBY2Nlc3MgfSBmcm9tICJAL2FwaS9zZWN1cml0eS1zdGF0aW9uLXJhaWxzLWNvbnRyb2xsZXIiOwppbXBvcnQgeyB0ZXh0U2xpY2UgfSBmcm9tICJAL2FwaS9jb21tb24iOwppbXBvcnQgT3ZlcmxheVN0YXRpb24gZnJvbSAiQC9jb21wb25lbnRzL21hcE92ZXJsYXkvc3RhdGlvbiI7CmltcG9ydCBPdmVybGF5Q29tcGFueSBmcm9tICJAL2NvbXBvbmVudHMvbWFwT3ZlcmxheS9jb21wYW55IjsKaW1wb3J0IHsgZ2V0Q29tcGFueURldGFpbCB9IGZyb20gIkAvYXBpL2NvbXBhbnktY29udHJvbGxlciI7CmltcG9ydCB7IGdldEVtcGxveWVlcyB9IGZyb20gIkAvYXBpL2VtcGxveWVlLWNvbnRyb2xsZXIiOwppbXBvcnQgT3ZlcmxheVN0YXRpb25FbXBsb3llZXMgZnJvbSAiQC9jb21wb25lbnRzL21hcE92ZXJsYXkvc3RhdGlvbkVtcGxveWVlcyI7CmltcG9ydCBlbGVjdHJvbmljRmVuY2VEaWFsb2cgZnJvbSAiQC92aWV3cy9yYWlsL2NvbXBvbmVudHMvZWxlY3Ryb25pY0ZlbmNlLnZ1ZSI7CmltcG9ydCBlbGVjdHJvbmljRmVuY2VFZGl0RGlhbG9nIGZyb20gIkAvY29tcG9uZW50cy9lbGVjdHJvbmljRmVuY2VFZGl0LnZ1ZSI7CmltcG9ydCBlbGVjdHJvbmljRmVuY2VQZW9wbGUgZnJvbSAiQC9jb21wb25lbnRzL2VsZWN0cm9uaWNGZW5jZVBlb3BsZS52dWUiOwppbXBvcnQgZWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkRpYWxvZyBmcm9tICJAL2NvbXBvbmVudHMvZWxlY3Ryb25pY0ZlbmNlU3RhdGlvbi52dWUiOwoKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICJyYWlsIiwKICBjb21wb25lbnRzOiB7CiAgICBWTWFwLAogICAgVlRpbGUsCiAgICBWVmVjdG9yLAogICAgVk92ZXJsYXksCiAgICBWRHJhdywKICAgIG1hcFRvb2xiYXIsCiAgICBPdmVybGF5U3RhdGlvbiwKICAgIE92ZXJsYXlDb21wYW55LAogICAgT3ZlcmxheVN0YXRpb25FbXBsb3llZXMsCiAgICBlbGVjdHJvbmljRmVuY2VEaWFsb2csCiAgICBlbGVjdHJvbmljRmVuY2VFZGl0RGlhbG9nLAogICAgZWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkRpYWxvZywKICAgIGVsZWN0cm9uaWNGZW5jZVBlb3BsZSwKICB9LAogIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICB2aWV3OiB7CiAgICAgICAgY2l0eTogIuWOpumXqCIsCiAgICAgICAgem9vbTogMTIsCiAgICAgIH0sCiAgICAgIHRpbGVUeXBlOiAiR0QiLAogICAgICBpbnRlcmFjdGlvbnM6IHsKICAgICAgICBEcmFnUm90YXRlQW5kWm9vbTogdHJ1ZSwKICAgICAgICBkb3VibGVDbGlja1pvb206IGZhbHNlLAogICAgICB9LAogICAgICBjb250cm9sczogewogICAgICAgIHpvb206IHRydWUsCiAgICAgICAgem9vbU9wdGlvbnM6IHsKICAgICAgICAgIGNsYXNzTmFtZTogIm9sLXpvb20tY3VzdG9tIiwKICAgICAgICB9LAogICAgICB9LAogICAgICBzdGF0aW9uSWQ6ICIiLAogICAgICBtYXBUb29sTGlzdDogWyJmZW5jZSIsICJ0aWxlIl0sCiAgICAgIHRhYmxlRGF0YTogW10sCiAgICAgIG9yaWdpbkRhdGE6IFtdLAogICAgICBzdGF0aW9uOiB7fSwKICAgICAgaW5mbzoge30sCiAgICAgIHJldHVybldpbjoge30sCiAgICAgIGxheWVyczogewogICAgICAgIC8vIOmpu+WLpOeCuQogICAgICAgIHN0YXRpb25MYXllcjogewogICAgICAgICAgZmVhdHVyZXM6IFtdLAogICAgICAgICAgb3ZlcmxheTogewogICAgICAgICAgICBwb3NpdGlvbjogdW5kZWZpbmVkLAogICAgICAgICAgICBvZmZzZXQ6IFswLCAtMzZdLAogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIC8vIOS8geS4mgogICAgICAgIGNvbXBhbnlMYXllcjogewogICAgICAgICAgZmVhdHVyZXM6IFtdLAogICAgICAgICAgb3ZlcmxheTogewogICAgICAgICAgICBwb3NpdGlvbjogdW5kZWZpbmVkLAogICAgICAgICAgICBvZmZzZXQ6IFswLCAtMzZdLAogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIC8vIOmpu+WLpOeCueS6uuWRmAogICAgICAgIHN0YXRpb25FbXBsb3llZXNMYXllcjogewogICAgICAgICAgZmVhdHVyZXM6IFtdLAogICAgICAgICAgb3ZlcmxheTogewogICAgICAgICAgICBwb3NpdGlvbjogdW5kZWZpbmVkLAogICAgICAgICAgICBvZmZzZXQ6IFswLCAtMzZdLAogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIC8vIOeUteWtkOWbtOagjwogICAgICAgIHJhaWxMYXllcjogewogICAgICAgICAgZmVhdHVyZXM6IFtdLAogICAgICAgICAgY2x1c3RlcjogewogICAgICAgICAgICBkaXN0YW5jZTogMTEwLAogICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgIGNpcmNsZTogewogICAgICAgICAgICAgICAgcmFkaXVzOiA1MCwKICAgICAgICAgICAgICAgIGZpbGw6IHsKICAgICAgICAgICAgICAgICAgY29sb3I6ICIjMEU3MUZGIiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB0ZXh0OiB7CiAgICAgICAgICAgICAgICBmb250OiAiMjJweCBTb3VyY2UgSGFuIFNhbnMgQ04tTWVkaXVtLCBTb3VyY2UgSGFuIFNhbnMgQ04iLAogICAgICAgICAgICAgICAgZmlsbDogewogICAgICAgICAgICAgICAgICBjb2xvcjogIiNGRkZGRkYiLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgIGZpbGw6IHsKICAgICAgICAgICAgICBjb2xvcjogInJnYmEoMjMwLDE2Miw2MCwwLjIpIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc3Ryb2tlOiB7CiAgICAgICAgICAgICAgY29sb3I6ICIjRTZBMjNDIiwKICAgICAgICAgICAgICB3aWR0aDogMiwKICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgICBvdmVybGF5OiB7CiAgICAgICAgICAgIHBvc2l0aW9uOiB1bmRlZmluZWQsCiAgICAgICAgICAgIG9mZnNldDogWzAsIC0zNl0sCiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIGlzRWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZzogZmFsc2UsCiAgICAgIGlzRWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkRpYWxvZzogZmFsc2UsCiAgICAgIGlzRWxlY3Ryb25pY0ZlbmNlRGlhbG9nOiBmYWxzZSwKICAgICAgaXNFbGVjdHJvbmljRmVuY2VQZW9wbGU6IGZhbHNlLAogICAgICBlbGVjdHJvbmljRmVuY2VEYXRhOiBbXSwKICAgICAgZWxlY3Ryb25pY0ZlbmNlSW5mbzoge30sCiAgICAgIGRyYXdUeXBlOiAiIiwKICAgICAgZWxlY3Ryb25pY0ZlbmNlUGVvcGxlTGlzdDogW10sCiAgICAgIHBlb3BsZVN0YXRpb25OYW1lOiAiIiwKICAgIH07CiAgfSwKICBtZXRob2RzOiB7CiAgICAvKioKICAgICAqIEDpqbvli6Tngrnlm77lsYLngrnlh7vkuovku7YKICAgICAqIDHjgIHlhYjliKTmlq3ngrnlh7vkvY3nva7mmK/lkKbmnInpqbvli6TngrkKICAgICAqIDLjgIHojrflj5bngrnlsZ7mgKdpZAogICAgICogM+OAgemAmui/h2lk5p+l5om+6am75Yuk54K56K+m5oOFCiAgICAgKiA044CB5oqK6K+m5oOF5pS+5YiwaW5mb+WPmOmHj+eUqOadpeWxleeOsOivpuaDhe+8iHNob3dTdGF0aW9uSW5mb++8iQogICAgICogNeOAgeaKiue7j+e6rOW6pui1i+WAvOe7mXBvc2l0aW9u5bGe5oCn5bGV56S65by55qGGCiAgICAgKiBAcGFyYW0gZXZ0CiAgICAgKiBAcGFyYW0gZmVhdHVyZQogICAgICovCiAgICBjbGlja1N0YXRpb24oZXZ0LCBmZWF0dXJlKSB7CiAgICAgIGlmIChmZWF0dXJlKSB7CiAgICAgICAgdGhpcy5zaG93U3RhdGlvbkluZm8oKTsKICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogQOS8geS4muWbvuWxgueCueWHu+S6i+S7tgogICAgICogQHBhcmFtIGV2dAogICAgICogQHBhcmFtIGZlYXR1cmUKICAgICAqLwogICAgY2xpY2tDb21wYW55KGV2dCwgZmVhdHVyZSkgewogICAgICBpZiAoZmVhdHVyZSkgewogICAgICAgIGNvbnNvbGUubG9nKGZlYXR1cmUpOwogICAgICAgIGNvbnN0IGZlYXR1cmVzID0gZmVhdHVyZS5nZXQoImZlYXR1cmVzIik7CiAgICAgICAgaWYgKGZlYXR1cmVzICYmIGZlYXR1cmVzLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgY29uc3QgY29tcGFueSA9IGZlYXR1cmVzWzBdOwogICAgICAgICAgY29uc3QgaW5mbyA9IGNvbXBhbnkuZ2V0KCJwcm9wcyIpOwogICAgICAgICAgY29uc29sZS5sb2coaW5mbyk7CiAgICAgICAgICB0aGlzLnNob3dDb21wYW55SW5mbyh7IGluZm8gfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIOWmguaenOaYr+iBmuWQiOeCueWwseS4i+mSu+S4gOe6pwogICAgICAgICAgY29uc3Qgem9vbSA9IHRoaXMuJHJlZnMubWFwLm1hcC5nZXRWaWV3KCkuZ2V0Wm9vbSgpICsgMTsKICAgICAgICAgIGNvbnN0IGNlbnRlciA9IGV2dC5jb29yZGluYXRlOwogICAgICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oeyB6b29tLCBjZW50ZXIgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBA6am75Yuk54K56K+m5oOFCiAgICAgKi8KICAgIHNob3dTdGF0aW9uSW5mbygpIHsKICAgICAgdGhpcy5jbGVhck1hcCgpOwogICAgICBjb25zdCB7IHN1cGVydmlzZURlcGFydE5hbWUsIGFkZHJlc3MsIGxvbmdpdHVkZSwgbGF0aXR1ZGUsIHN0YXRpb25UeXBlcyB9ID0gdGhpcy5zdGF0aW9uOwogICAgICBjb25zdCBbeyBtYXBJY29uIH1dID0gc3RhdGlvblR5cGVzOwogICAgICBpZiAodGhpcy5sYXllcnMuc3RhdGlvbkxheWVyLmZlYXR1cmVzLmxlbmd0aCA8PSAwKSB7CiAgICAgICAgdGhpcy5sYXllcnMuc3RhdGlvbkxheWVyLmZlYXR1cmVzID0gWwogICAgICAgICAgewogICAgICAgICAgICBjb29yZGluYXRlczogW051bWJlcihsb25naXR1ZGUpLCBOdW1iZXIobGF0aXR1ZGUpXSwKICAgICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICBpY29uOiB7CiAgICAgICAgICAgICAgICBzcmM6IG1hcEljb24sCiAgICAgICAgICAgICAgICBzY2FsZTogMC41LAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHByb3BzOiB0aGlzLnN0YXRpb24sCiAgICAgICAgICB9LAogICAgICAgIF07CiAgICAgIH0KICAgICAgdGhpcy5pbmZvID0gewogICAgICAgIC4uLnRoaXMuc3RhdGlvbiwKICAgICAgICBzdXBlcnZpc2VEZXBhcnROYW1lU2xpY2U6IHRleHRTbGljZShzdXBlcnZpc2VEZXBhcnROYW1lKSwKICAgICAgICBhZGRyZXNzU2xpY2U6IHRleHRTbGljZShhZGRyZXNzKSwKICAgICAgfTsKICAgICAgLyoqCiAgICAgICAqIEDlvLnmoYbkvY3nva7ovazpq5jlvrfovaw4NAogICAgICAgKi8KICAgICAgdGhpcy5sYXllcnMuc3RhdGlvbkxheWVyLm92ZXJsYXkucG9zaXRpb24gPSB1dGlscy5jb252ZXJ0Q29vcmRpbmF0ZShbTnVtYmVyKGxvbmdpdHVkZSksIE51bWJlcihsYXRpdHVkZSldLCAiZ2QtODQiKTsKICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oewogICAgICAgIGNlbnRlcjogdGhpcy5sYXllcnMuc3RhdGlvbkxheWVyLm92ZXJsYXkucG9zaXRpb24sCiAgICAgIH0pOwogICAgfSwKICAgIC8qKgogICAgICogQOmpu+WLpOeCueW8ueahhueCueWHu+WFs+mXrQogICAgICovCiAgICBjbG9zZVN0YXRpb25JbmZvKCkgewogICAgICB0aGlzLmxheWVycy5zdGF0aW9uTGF5ZXIub3ZlcmxheS5wb3NpdGlvbiA9IHVuZGVmaW5lZDsKICAgIH0sCiAgICAvKioKICAgICAqIEDkvIHkuJror6bmg4UKICAgICAqIEBwYXJhbSBpbmZvCiAgICAgKiBAcGFyYW0gaW5mb1R5cGUKICAgICAqLwogICAgc2hvd0NvbXBhbnlJbmZvKHsgaW5mbywgaW5mb1R5cGUgfSkgewogICAgICBjb25zb2xlLmxvZygiY29tcGFueSIsIGluZm8pOwogICAgICBsZXQgeyBvcmdhbml6YXRpb25JZCB9ID0gaW5mbzsKICAgICAgZ2V0Q29tcGFueURldGFpbChvcmdhbml6YXRpb25JZCkKICAgICAgICAudGhlbigoY29tcGFueSkgPT4gewogICAgICAgICAgY29uc3QgeyByZWdpc3RlckFkZHJlc3MsIGxvbmdpdHVkZSwgbGF0aXR1ZGUgfSA9IGNvbXBhbnk7CiAgICAgICAgICBjb25zb2xlLmxvZygiY29tcGFueSIsIGNvbXBhbnkpOwogICAgICAgICAgdGhpcy5pbmZvID0gewogICAgICAgICAgICAuLi5jb21wYW55LAogICAgICAgICAgICByZWdpc3RlckFkZHJlc3NTbGljZTogdGV4dFNsaWNlKHJlZ2lzdGVyQWRkcmVzcyksCiAgICAgICAgICB9OwogICAgICAgICAgaWYgKGluZm9UeXBlKSB7CiAgICAgICAgICAgIHRoaXMuY2xlYXJNYXAoKTsKICAgICAgICAgICAgdGhpcy5oaWRlRmVuY2VUYWJsZSgpOwogICAgICAgICAgICB0aGlzLnJldHVybldpbiA9IHsgaW5mbywgaW5mb1R5cGUgfTsKICAgICAgICAgICAgdGhpcy5sYXllcnMuY29tcGFueUxheWVyLmZlYXR1cmVzID0gWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbTnVtYmVyKGxvbmdpdHVkZSksIE51bWJlcihsYXRpdHVkZSldLAogICAgICAgICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgICAgICAgIGljb246IHsKICAgICAgICAgICAgICAgICAgICBzcmM6IHJlcXVpcmUoIkAvYXNzZXRzL2ltYWdlcy9tYXBTZWFyY2gv5YWs5Y+4LnBuZyIpLAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHByb3BzOiBjb21wYW55LAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF07CiAgICAgICAgICB9CiAgICAgICAgICAvKioKICAgICAgICAgICAqIEDlvLnmoYbkvY3nva7ovazpq5jlvrfovaw4NAogICAgICAgICAgICovCiAgICAgICAgICB0aGlzLmxheWVycy5jb21wYW55TGF5ZXIub3ZlcmxheS5wb3NpdGlvbiA9IHV0aWxzLmNvbnZlcnRDb29yZGluYXRlKFtOdW1iZXIobG9uZ2l0dWRlKSwgTnVtYmVyKGxhdGl0dWRlKV0sICJnZC04NCIpOwogICAgICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oewogICAgICAgICAgICBjZW50ZXI6IHRoaXMubGF5ZXJzLmNvbXBhbnlMYXllci5vdmVybGF5LnBvc2l0aW9uLAogICAgICAgICAgfSk7CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goKGVycikgPT4gewogICAgICAgICAgY29uc29sZS5sb2coZXJyKTsKICAgICAgICB9KTsKICAgIH0sCiAgICAvKioKICAgICAqIEDkvIHkuJrlvLnmoYbngrnlh7vlhbPpl60KICAgICAqLwogICAgY2xvc2VDb21wYW55SW5mbygpIHsKICAgICAgdGhpcy5yZXR1cm5XaW4gPSB7fTsKICAgICAgdGhpcy5sYXllcnMuY29tcGFueUxheWVyLm92ZXJsYXkucG9zaXRpb24gPSB1bmRlZmluZWQ7CiAgICB9LAogICAgLyoqCiAgICAgKiBA6am75Yuk54K55Lq65ZGY6K+m5oOFCiAgICAgKiBAcGFyYW0gaW5mbwogICAgICogQHBhcmFtIGluZm9UeXBlCiAgICAgKi8KICAgIHNob3dTdGF0aW9uRW1wbG95ZWVzSW5mbyh7IGluZm8sIGluZm9UeXBlIH0pIHsKICAgICAgY29uc29sZS5sb2coInNob3dTdGF0aW9uRW1wbG95ZWVzSW5mby0iICsgaW5mb1R5cGUsIGluZm8pOwogICAgICBsZXQgeyBpZCB9ID0gaW5mbzsKICAgICAgZ2V0RW1wbG95ZWVzKHsKICAgICAgICBwYWdlSW5kZXg6IDEsCiAgICAgICAgcGFnZVNpemU6IDEwMDAsCiAgICAgICAgc2VjdXJpdHlTdGF0aW9uSWQ6IGlkLAogICAgICAgIHNlYXJjaE1vZGVsOiAic2VjdXJpdHlTdGF0aW9uIiwKICAgICAgfSkKICAgICAgICAudGhlbigocmVzKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygic3RhdGlvbkVtcGxveWVlcyIsIHJlcyk7CiAgICAgICAgICBjb25zb2xlLmxvZygic3RhdGlvbiIsIGluZm8pOwogICAgICAgICAgaW5mb1sic3RhdGlvbkVtcGxveWVlcyJdID0gWy4uLnJlc10ubWFwKCh4KSA9PiB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgLi4ueCwKICAgICAgICAgICAgICBpc1Bob25lOiBmYWxzZSwKICAgICAgICAgICAgfTsKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5pbmZvID0geyAuLi57fSwgLi4uaW5mbyB9OwogICAgICAgICAgY29uc29sZS5sb2coImluZm8iLCB0aGlzLmluZm8pOwogICAgICAgICAgaWYgKGluZm9UeXBlKSB7CiAgICAgICAgICAgIHRoaXMuY2xlYXJNYXAoKTsKICAgICAgICAgICAgdGhpcy5oaWRlRmVuY2VUYWJsZSgpOwoKICAgICAgICAgICAgdGhpcy5yZXR1cm5XaW4gPSB7IGluZm8sIGluZm9UeXBlIH07CiAgICAgICAgICAgIHRoaXMubGF5ZXJzLnN0YXRpb25FbXBsb3llZXNMYXllci5mZWF0dXJlcyA9IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb29yZGluYXRlczogW051bWJlcihpbmZvLmxvbmdpdHVkZSksIE51bWJlcihpbmZvLmxhdGl0dWRlKV0sCiAgICAgICAgICAgICAgICBjb252ZXJ0OiAiZ2QtODQiLAogICAgICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICAgICAgaWNvbjogewogICAgICAgICAgICAgICAgICAgIHNyYzogcmVxdWlyZSgiQC9hc3NldHMvaW1hZ2VzL21hcFNlYXJjaC/lnKjlspdf5L+d5a6J5ZGYLnBuZyIpLAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHByb3BzOiBpbmZvLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGlmIChpbmZvVHlwZSA9PT0gInJhaWwiKSB7CiAgICAgICAgICAgICAgaW5mb1sibmFtZSJdID0gaW5mby5zdGF0aW9uTmFtZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBA5by55qGG5L2N572u6L2s6auY5b636L2sODQKICAgICAgICAgICAqLwogICAgICAgICAgdGhpcy5sYXllcnMuc3RhdGlvbkVtcGxveWVlc0xheWVyLm92ZXJsYXkucG9zaXRpb24gPSB1dGlscy5jb252ZXJ0Q29vcmRpbmF0ZSgKICAgICAgICAgICAgW051bWJlcihpbmZvLmxvbmdpdHVkZSksIE51bWJlcihpbmZvLmxhdGl0dWRlKV0sCiAgICAgICAgICAgICJnZC04NCIKICAgICAgICAgICk7CiAgICAgICAgICB0aGlzLiRyZWZzLm1hcC5wYW5Ubyh7CiAgICAgICAgICAgIC8vIHpvb206IDEzLAogICAgICAgICAgICAvLyBmbHlab29tOiA4LAogICAgICAgICAgICBjZW50ZXI6IHRoaXMubGF5ZXJzLnN0YXRpb25FbXBsb3llZXNMYXllci5vdmVybGF5LnBvc2l0aW9uLAogICAgICAgICAgfSk7CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goKGVycikgPT4gewogICAgICAgICAgY29uc29sZS5sb2coZXJyKTsKICAgICAgICB9KTsKICAgIH0sCiAgICAvKioKICAgICAqIEDpqbvli6TngrnkurrlkZjlm77lsYLngrnlh7vkuovku7YKICAgICAqIEBwYXJhbSBldnQKICAgICAqIEBwYXJhbSBmZWF0dXJlCiAgICAgKi8KICAgIGNsaWNrU3RhdGlvbkVtcGxveWVlcyhldnQsIGZlYXR1cmUpIHsKICAgICAgaWYgKGZlYXR1cmUpIHsKICAgICAgICBjb25zb2xlLmxvZygiY2xpY2tTdGF0aW9uRW1wbG95ZWVzLWZlYXR1cmUiLCBmZWF0dXJlKTsKICAgICAgICBjb25zdCBzdGF0aW9ucyA9IGZlYXR1cmUuZ2V0KCJmZWF0dXJlcyIpOwogICAgICAgIGlmIChzdGF0aW9ucyAmJiBzdGF0aW9ucy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgIGNvbnN0IHN0YXRpb24gPSBzdGF0aW9uc1swXTsKICAgICAgICAgIGNvbnN0IGluZm8gPSBzdGF0aW9uLmdldCgicHJvcHMiKTsKICAgICAgICAgIHRoaXMuc2hvd1N0YXRpb25FbXBsb3llZXNJbmZvKHsgaW5mbyB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGZlYXR1cmUuZ2V0KCJwcm9wcyIpKSB7CiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBmZWF0dXJlLmdldCgicHJvcHMiKTsKICAgICAgICAgICAgdGhpcy5zaG93U3RhdGlvbkVtcGxveWVlc0luZm8oeyBpbmZvIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8g5aaC5p6c5piv6IGa5ZCI54K55bCx5LiL6ZK75LiA57qnCiAgICAgICAgICAgIGNvbnN0IHpvb20gPSB0aGlzLiRyZWZzLm1hcC5tYXAuZ2V0VmlldygpLmdldFpvb20oKSArIDE7CiAgICAgICAgICAgIGNvbnN0IGNlbnRlciA9IGV2dC5jb29yZGluYXRlOwogICAgICAgICAgICB0aGlzLiRyZWZzLm1hcC5wYW5Ubyh7IHpvb20sIGNlbnRlciB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIEDpqbvli6TngrnkurrmlbDlvLnmoYbngrnlh7vlhbPpl60KICAgICAqLwogICAgY2xvc2VTdGF0aW9uRW1wbG95ZWVzSW5mbygpIHsKICAgICAgdGhpcy5yZXR1cm5XaW4gPSB7fTsKICAgICAgdGhpcy5sYXllcnMuc3RhdGlvbkVtcGxveWVlc0xheWVyLm92ZXJsYXkucG9zaXRpb24gPSB1bmRlZmluZWQ7CiAgICB9LAogICAgLyoqCiAgICAgKiBA55S15a2Q5Zu05qCP5Zu+5bGC54K55Ye75LqL5Lu2CiAgICAgKiBAcGFyYW0gZXZ0CiAgICAgKiBAcGFyYW0gZmVhdHVyZQogICAgICovCiAgICBjbGlja1JhaWwoZXZ0LCBmZWF0dXJlKSB7CiAgICAgIGlmIChmZWF0dXJlKSB7CiAgICAgICAgY29uc29sZS5sb2coZmVhdHVyZSk7CiAgICAgICAgY29uc3QgcmFpbHMgPSBmZWF0dXJlLmdldCgiZmVhdHVyZXMiKTsKICAgICAgICBpZiAocmFpbHMgJiYgcmFpbHMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICB0aGlzLnNob3dSYWlsSW5mb0Zyb21MaXN0ID0gZmFsc2U7CiAgICAgICAgICBjb25zdCByYWlsID0gcmFpbHNbMF07CiAgICAgICAgICBjb25zdCBpbmZvID0gcmFpbC5nZXQoInByb3BzIik7CiAgICAgICAgICBjb25zb2xlLmxvZygiY2xpY2tSYWlsSW5mbyIsIGluZm8pOwogICAgICAgICAgdGhpcy5zaG93UmFpbEluZm8oeyBpbmZvIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoZmVhdHVyZS5nZXQoInByb3BzIikpIHsKICAgICAgICAgICAgdGhpcy5zaG93UmFpbEluZm9Gcm9tTGlzdCA9IGZhbHNlOwogICAgICAgICAgICBjb25zdCBpbmZvID0gZmVhdHVyZS5nZXQoInByb3BzIik7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJjbGlja1JhaWxJbmZvIiwgaW5mbyk7CiAgICAgICAgICAgIHRoaXMuc2hvd1JhaWxJbmZvKHsgaW5mbyB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIOWmguaenOaYr+iBmuWQiOeCueWwseS4i+mSu+S4gOe6pwogICAgICAgICAgICBjb25zdCB6b29tID0gdGhpcy4kcmVmcy5tYXAubWFwLmdldFZpZXcoKS5nZXRab29tKCkgKyAxOwogICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBldnQuY29vcmRpbmF0ZTsKICAgICAgICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oeyB6b29tLCBjZW50ZXIgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBA55S15a2Q5Zu05qCP6K+m5oOFCiAgICAgKiBAcGFyYW0gaW5mbwogICAgICogQHBhcmFtIGluZm9UeXBlCiAgICAgKi8KICAgIHNob3dSYWlsSW5mbyh7IGluZm8sIGluZm9UeXBlIH0pIHsKICAgICAgLy8gdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gW107CiAgICAgIGdldFJhaWxEZXRhaWxBY2Nlc3MoaW5mby5pZCkKICAgICAgICAudGhlbigocmVzKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygicmFpbHJlcyIsIHJlcyk7CiAgICAgICAgICBjb25zb2xlLmxvZygicmFpbGluZm8iLCBpbmZvKTsKICAgICAgICAgIGNvbnN0IHsgaWQsIHNoYXBlZExvY2F0aW9uIH0gPSBpbmZvOwogICAgICAgICAgY29uc3QgeyBjb21wYW55TmFtZSwgcmFpbFNoYXBlVHlwZSB9ID0gcmVzOwogICAgICAgICAgdGhpcy5pbmZvID0gewogICAgICAgICAgICAuLi5yZXMsCiAgICAgICAgICAgIGNvbXBhbnlOYW1lU2xpY2U6IHRleHRTbGljZShjb21wYW55TmFtZSksCiAgICAgICAgICAgIHNoYXBlZExvY2F0aW9uLCAvL+WQjuerr+S8oOWAvOaciemXrumimAogICAgICAgICAgICBpZCwgLy/lkI7nq6/kvKDlgLzmnInpl67popgKICAgICAgICAgIH07CiAgICAgICAgICBpZiAoaW5mb1R5cGUpIHsKICAgICAgICAgICAgdGhpcy5jbGVhck1hcCgpOwogICAgICAgICAgICB0aGlzLmhpZGVGZW5jZVRhYmxlKCk7CiAgICAgICAgICAgIHRoaXMucmV0dXJuV2luID0geyBpbmZvLCBpbmZvVHlwZSB9OwogICAgICAgICAgfQogICAgICAgICAgaWYgKHJhaWxTaGFwZVR5cGUgJiYgcmFpbFNoYXBlVHlwZSA9PT0gIkNpcmNsZSIpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIkNpcmNsZSIsIHJlcy5zaGFwZWRMb2NhdGlvbik7CiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSB7CiAgICAgICAgICAgICAgdHlwZTogImNpcmNsZSIsCiAgICAgICAgICAgICAgLy8gY2VudGVyOiBbMTE4LjA1MTg3NiwgMjQuNjA3NDUzXSwKICAgICAgICAgICAgICAvLyByYWRpdXM6IDI3MiwKICAgICAgICAgICAgICBjb252ZXJ0OiAiZ2QtODQiLAogICAgICAgICAgICAgIGNlbnRlcjogW3Jlcy5zaGFwZWRMb2NhdGlvbi5nZW9zWzBdLmxvbiwgcmVzLnNoYXBlZExvY2F0aW9uLmdlb3NbMF0ubGF0XSwKICAgICAgICAgICAgICByYWRpdXM6IHJlcy5zaGFwZWRMb2NhdGlvbi5yYWRpdXMsCiAgICAgICAgICAgICAgcHJvcHM6IGluZm8sCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZlYXR1cmUpOwogICAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuY2x1c3RlciA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbZmVhdHVyZV07CiAgICAgICAgICB9IGVsc2UgaWYgKHJhaWxTaGFwZVR5cGUgPT09ICJDcmliIiB8fCByYWlsU2hhcGVUeXBlID09PSAiUG9seWdvbiIpIHsKICAgICAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSByZXMuc2hhcGVkTG9jYXRpb24uZ2Vvcy5tYXAoKHgpID0+IHsKICAgICAgICAgICAgICByZXR1cm4gW3gubG9uLCB4LmxhdF07CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuY2x1c3RlciA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHlwZTogInBvbHlnb24iLAogICAgICAgICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLAogICAgICAgICAgICAgICAgcHJvcHM6IGluZm8sCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXTsKICAgICAgICAgIH0KICAgICAgICB9KQogICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpOwogICAgICAgIH0pOwogICAgfSwKICAgIG9uUmFpbExheWVyQ2hhbmdlKGZlYXR1cmVzKSB7CiAgICAgIGNvbnNvbGUubG9nKGZlYXR1cmVzKTsKICAgICAgaWYgKGZlYXR1cmVzICYmIGZlYXR1cmVzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlc1swXTsKICAgICAgICBjb25zdCB0eXBlID0gZmVhdHVyZS5nZXQoInR5cGUiKTsKICAgICAgICBpZiAodHlwZSAmJiAhdGhpcy5zaG93UmFpbEluZm9Gcm9tTGlzdCkgewogICAgICAgICAgY29uc29sZS5sb2codHlwZSk7CiAgICAgICAgICBpZiAodHlwZSA9PT0gInBvbHlnb24iIHx8IHR5cGUgPT09ICJQb2x5Z29uIikgewogICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGZlYXR1cmUuZ2V0KCJnZW9tZXRyeSIpOwogICAgICAgICAgICAvLyBjb25zdCB2aWV3ID0gdGhpcy4kcmVmcy5tYXAubWFwLmdldFZpZXcoKTsKICAgICAgICAgICAgLy8gdmlldy5maXQoZ2VvbWV0cnksIHsKICAgICAgICAgICAgLy8gICBkdXJhdGlvbjogMTAwMCwKICAgICAgICAgICAgLy8gfSk7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuJHJlZnMubWFwLmNhbGN1bGF0ZUNlbnRlcihnZW9tZXRyeSk7CiAgICAgICAgICAgIGNvbnN0IHsgY2VudGVyIH0gPSByZXN1bHQ7CiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGNvb3JkaW5hdGVzKQogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQOW8ueahhuS9jee9rui9rOmrmOW+t+i9rDg0CiAgICAgICAgICAgICAqLwogICAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIub3ZlcmxheS5wb3NpdGlvbiA9IGNlbnRlcjsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gImNpcmNsZSIgfHwgdHlwZSA9PT0gIkNpcmNsZSIpIHsKICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBmZWF0dXJlLmdldCgiZ2VvbWV0cnkiKTsKICAgICAgICAgICAgLy8gY29uc3QgdmlldyA9IHRoaXMuJHJlZnMubWFwLm1hcC5nZXRWaWV3KCk7CiAgICAgICAgICAgIC8vIHZpZXcuZml0KGdlb21ldHJ5LCB7CiAgICAgICAgICAgIC8vICAgZHVyYXRpb246IDEwMDAsCiAgICAgICAgICAgIC8vIH0pOwogICAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIub3ZlcmxheS5wb3NpdGlvbiA9IGdlb21ldHJ5LmdldENlbnRlcigpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogQOeUteWtkOWbtOagj+WIl+ihqAogICAgICovCiAgICBzZXRGZW5jZSgpIHsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZURpYWxvZyA9IHRydWU7CiAgICB9LAogICAgLyoqCiAgICAgKiBA5rOo5YaM5pi+56S65by55qGG57G75LqL5Lu2CiAgICAgKi8KICAgIGV2ZW50QnVzQmluZGluZygpIHsKICAgICAgdGhpcy4kYnVzLiRvbigiY2xpY2stc3RhdGlvbiIsIHRoaXMuc2hvd1N0YXRpb25JbmZvKTsgLy8g5pi+56S66am75Yuk54K55by55qGGCiAgICAgIHRoaXMuJGJ1cy4kb24oImNsaWNrLWNvbXBhbnkiLCB0aGlzLnNob3dDb21wYW55SW5mbyk7IC8vIOaYvuekuuWFrOWPuOW8ueahhgogICAgICB0aGlzLiRidXMuJG9uKCJjbGljay1zdGF0aW9uRW1wbG95ZWVzIiwgdGhpcy5zaG93U3RhdGlvbkVtcGxveWVlc0luZm8pOyAvLyDmmL7npLrpqbvli6TngrnkurrlkZgKICAgIH0sCiAgICAvKioKICAgICAqIEDmuIXnqbrlnLDlm74KICAgICAqLwogICAgY2xlYXJNYXAoZXhjbHVkZSA9IFsic3RhdGlvbkxheWVyIl0pIHsKICAgICAgZm9yIChsZXQgbGF5ZXJzS2V5IGluIHRoaXMubGF5ZXJzKSB7CiAgICAgICAgaWYgKCFleGNsdWRlLmluY2x1ZGVzKGxheWVyc0tleSkpIHsKICAgICAgICAgIHRoaXMubGF5ZXJzW2xheWVyc0tleV0uZmVhdHVyZXMgPSBbXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy4kcmVmcy5tYXAuY2xvc2VPdmVybGF5cygpOwogICAgfSwKICAgIG9uQ2hhbmdlTGF5ZXIodHlwZSkgewogICAgICAvLyBjb25zb2xlLmxvZygib25DaGFuZ2VMYXllciIsIHR5cGUpOwogICAgICBpZiAodHlwZS5pbmRleE9mKCJkZWZhdWx0IikgPiAtMSkgewogICAgICAgIHRoaXMudGlsZVR5cGUgPSAiR0QiOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMudGlsZVR5cGUgPSAiR0RfSU1HIjsKICAgICAgfQogICAgfSwKICAgIGhpZGVGZW5jZVRhYmxlKCkgewogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkRpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRGlhbG9nID0gZmFsc2U7CiAgICB9LAogICAgZWxlY3Ryb25pY0ZlbmNlQ2FuY2VsKCkgewogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRGlhbG9nID0gZmFsc2U7CiAgICB9LAogICAgLyoqCiAgICAgKiBA5paw5aKe55S15a2Q5Zu05qCPCiAgICAgKi8KICAgIGFkZEVsZWN0cm9uaWMoKSB7CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VFZGl0RGlhbG9nID0gdHJ1ZTsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZURpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuaW5mbykpOwogICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8gPSB7fTsKICAgICAgY29uc29sZS5sb2codGhpcy5zdGF0aW9uKTsKICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gewogICAgICAgIHRoaXMuJHJlZnMuZWxlY3Ryb25pY0ZlbmNlRWRpdC51cGRhdGVTdGF0aW9uKHsKICAgICAgICAgIHN0YXRpb25OYW1lOiB0aGlzLnN0YXRpb24ubmFtZSwKICAgICAgICAgIHBlb3BsZU51bTogdGhpcy5zdGF0aW9uLmNvdW50T2ZTZWN1cml0eU1hbiwKICAgICAgICAgIGNvdW50T2ZTZWN1cml0eU1hbjogdGhpcy5zdGF0aW9uLmNvdW50T2ZTZWN1cml0eU1hbiwKICAgICAgICAgIHN0YXRpb25JZDogdGhpcy5zdGF0aW9uLmlkLAogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICAvKioKICAgICAqIEDnvJbovpHmn5DmnaHnlLXlrZDlm7TmoI8KICAgICAqIEBwYXJhbSBkYXRhCiAgICAgKi8KICAgIGFzeW5jIGVsZWN0cm9uaWNGZW5jZUVkaXRGbih7IGRhdGEgfSkgewogICAgICBjb25zb2xlLmxvZygi57yW6L6R5p+Q5p2h55S15a2Q5Zu05qCPIiwgZGF0YSk7CiAgICAgIHRoaXMuc2hvd1JhaWxJbmZvRnJvbUxpc3QgPSB0cnVlOwogICAgICAvLyB0aGlzLm1hcC5jbGVhck1hcCgpOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRGlhbG9nID0gZmFsc2U7CiAgICAgIHRoaXMuZWxlY3Ryb25pY0ZlbmNlSW5mbyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8udGltZSA9IFt0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8uYmVnaW5UaW1lLCB0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8uZW5kVGltZV07CiAgICAgIGNvbnN0IHJhaWwgPSBhd2FpdCBnZXRSYWlsRGV0YWlsQWNjZXNzKGRhdGEuaWQpOwogICAgICB0aGlzLmluZm8gPSB7IC4uLnJhaWwsIC4uLnRoaXMuZWxlY3Ryb25pY0ZlbmNlSW5mbyB9OyAvLyDlvLnmoYbkv6Hmga8KICAgICAgY29uc29sZS5sb2codGhpcy5pbmZvKTsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZUVkaXREaWFsb2cgPSB0cnVlOwogICAgICAvLyDmmL7npLrlj6/nvJbovpHlm7TmoI/ljLrln58KICAgICAgdGhpcy5zaG93TWFwRWRpdG9yKGRhdGEpOwogICAgfSwKICAgIGRlbEVsZWN0cm9uaWMoZGF0YSkgewogICAgICBjb25zb2xlLmxvZyhkYXRhKTsKICAgICAgbGV0IHBhcmFtcyA9IHsKICAgICAgICBpZDogZGF0YS5kYXRhLmlkLAogICAgICB9OwogICAgICBkZWxldGVSYWlsQWNjZXNzKHBhcmFtcykKICAgICAgICAudGhlbigocmVzKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygiZGVsZXRlUmFpbEFjY2VzcyIsIHJlcyk7CiAgICAgICAgICB0aGlzLiRyZWZzWyJlbGVjdHJvbmljRmVuY2UiXS5nZXRSYWlscygpOwogICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgIG1lc3NhZ2U6ICLliKDpmaTmiJDlip8iLAogICAgICAgICAgICB0eXBlOiAic3VjY2VzcyIsCiAgICAgICAgICB9KTsKICAgICAgICB9KQogICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpOwogICAgICAgIH0pOwogICAgfSwKICAgIG9wZW5QZW9wbGVOdW1GbihpZCwgc3RhdGlvbk5hbWUpIHsKICAgICAgdGhpcy5lbGVjdHJvbmljRmVuY2VQZW9wbGVMaXN0ID0gW107CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VQZW9wbGUgPSB0cnVlOwogICAgICB0aGlzLnBlb3BsZVN0YXRpb25OYW1lID0gc3RhdGlvbk5hbWU7CiAgICAgIGdldEVtcGxveWVlcyh7CiAgICAgICAgcGFnZUluZGV4OiAxLAogICAgICAgIHBhZ2VTaXplOiAxMDAwLAogICAgICAgIHNlY3VyaXR5U3RhdGlvbklkOiBpZCwKICAgICAgICBzZWFyY2hNb2RlbDogInNlY3VyaXR5U3RhdGlvbiIsCiAgICAgIH0pLnRoZW4oKHJlcykgPT4gewogICAgICAgIHRoaXMuZWxlY3Ryb25pY0ZlbmNlUGVvcGxlTGlzdCA9IHJlczsKICAgICAgfSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBA5YWz6IGU6am75Yuk54K5CiAgICAgKi8KICAgIHJlbGF0aW9uU3RhdGlvbkZuKGluZm8pIHsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZVN0YXRpb25EaWFsb2cgPSB0cnVlOwogICAgICB0aGlzLmluZm8gPSB7IC4uLnRoaXMuaW5mbywgLi4uaW5mbyB9OwogICAgfSwKICAgIGVsZWN0cm9uaWNGZW5jZUVkaXRDYW5jZWwoKSB7CiAgICAgIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFtdOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmNsZWFuRHJhd0ZpZ3VyZSgpOwogICAgICBzZWFyY2hSYWlsQWNjZXNzKHsKICAgICAgICBwYWdlSW5kZXg6IDAsCiAgICAgICAgcGFnZVNpemU6IDAsCiAgICAgICAgc2VhcmNoTW9kZWw6ICJTdGF0aW9uIiwKICAgICAgICBzdGF0aW9uSWQ6IHRoaXMuc3RhdGlvbklkLAogICAgICB9KQogICAgICAgIC50aGVuKChyZXMpID0+IHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJzZWFyY2hSYWlsIiwgcmVzKTsKICAgICAgICAgIGlmIChyZXMpIHsKICAgICAgICAgICAgdGhpcy5lbGVjdHJvbmljRmVuY2VEYXRhID0gcmVzOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgTWVzc2FnZSh7CiAgICAgICAgICAgICAgdHlwZTogImVycm9yIiwKICAgICAgICAgICAgICBtZXNzYWdlOiAi5p+l6K+i55S15a2Q5Zu05qCP5L+h5oGv5aSx6LSlIiwKICAgICAgICAgICAgICBvbkNsb3NlOiAoKSA9PiB7CiAgICAgICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24gPSAiaHR0cHM6Ly93d3cuYmFpZHUuY29tIjsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9KQogICAgICAgIC5jYXRjaCgoKSA9PiB7CiAgICAgICAgICBNZXNzYWdlKHsKICAgICAgICAgICAgdHlwZTogImVycm9yIiwKICAgICAgICAgICAgbWVzc2FnZTogIuafpeivoueUteWtkOWbtOagj+S/oeaBr+Wksei0pSIsCiAgICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHsKICAgICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24gPSAiaHR0cHM6Ly93d3cuYmFpZHUuY29tIjsKICAgICAgICAgICAgfSwKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgfSwKICAgIGNsZWFuRHJhd0ZpZ3VyZSgpIHsKICAgICAgdGhpcy5kcmF3VHlwZSA9ICIiOwogICAgfSwKICAgIC8qKgogICAgICogQOWFs+mXrempu+WLpOeCueS6uuWRmAogICAgICovCiAgICBlbGVjdHJvbmljRmVuY2VQZW9wbGVDYW5jZWwoKSB7CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VQZW9wbGUgPSBmYWxzZTsKICAgIH0sCiAgICBlbGVjdHJvbmljRmVuY2VTdGF0aW9uQ2FuY2VsKCkgewogICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbXTsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZVN0YXRpb25EaWFsb2cgPSBmYWxzZTsKICAgICAgdGhpcy5jbGVhbkRyYXdGaWd1cmUoKTsKICAgIH0sCiAgICBzaG93TWFwRWRpdG9yKHsgc2hhcGVUeXBlLCBzaGFwZWRMb2NhdGlvbiB9KSB7CiAgICAgIHN3aXRjaCAoc2hhcGVUeXBlKSB7CiAgICAgICAgY2FzZSAiQ2lyY2xlIjogLy8g5ZyGCiAgICAgICAgICB0aGlzLnNob3dDaXJjbGVFZGl0b3Ioc2hhcGVkTG9jYXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiUG9seWdvbiI6CiAgICAgICAgICB0aGlzLnNob3dQb2x5Z29uRWRpdG9yKHNoYXBlZExvY2F0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkNyaWIiOgogICAgICAgICAgdGhpcy5zaG93Q3JpYkVkaXRvcihzaGFwZWRMb2NhdGlvbik7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSwKICAgIHNob3dQb2x5Z29uRWRpdG9yKHsgZ2VvcyB9KSB7CiAgICAgIGxldCBsaXN0ID0gZ2Vvcy5tYXAoKGl0ZW0pID0+IFtpdGVtLmxvbiwgaXRlbS5sYXRdKTsKICAgICAgY29uc29sZS5sb2cobGlzdCk7CiAgICAgIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAicG9seWdvbiIsCiAgICAgICAgICBjb29yZGluYXRlczogbGlzdCwKICAgICAgICAgIHN0eWxlOiB0aGlzLmxheWVycy5yYWlsTGF5ZXIuc3R5bGUsCiAgICAgICAgICBjb252ZXJ0OiAiZ2QtODQiLAogICAgICAgIH0sCiAgICAgIF07CiAgICAgIHRoaXMuJHJlZnMubWFwLmZseVRvKHsKICAgICAgICB6b29tOiAxMywKICAgICAgICBmbHlab29tOiA4LAogICAgICAgIGNlbnRlcjogbGlzdFswXSwKICAgICAgfSk7CiAgICAgIGNvbnNvbGUubG9nKHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyk7CiAgICB9LAogICAgc2hvd0NyaWJFZGl0b3IoeyBnZW9zIH0pIHsKICAgICAgbGV0IGxpc3QgPSBnZW9zLm1hcCgoaXRlbSkgPT4gW2l0ZW0ubG9uLCBpdGVtLmxhdF0pOwogICAgICBjb25zb2xlLmxvZyhsaXN0KTsKICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJwb2x5Z29uIiwKICAgICAgICAgIGNvb3JkaW5hdGVzOiBsaXN0LAogICAgICAgICAgc3R5bGU6IHRoaXMubGF5ZXJzLnJhaWxMYXllci5zdHlsZSwKICAgICAgICAgIGNvbnZlcnQ6ICJnZC04NCIsCiAgICAgICAgfSwKICAgICAgXTsKICAgICAgdGhpcy4kcmVmcy5tYXAuZmx5VG8oewogICAgICAgIHpvb206IDEzLAogICAgICAgIGZseVpvb206IDgsCiAgICAgICAgY2VudGVyOiBsaXN0WzBdLAogICAgICB9KTsKICAgICAgY29uc29sZS5sb2codGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzKTsKICAgIH0sCiAgICBzaG93Q2lyY2xlRWRpdG9yKHsgZ2VvcywgcmFkaXVzIH0pIHsKICAgICAgY29uc3QgW2NlbnRlcl0gPSBnZW9zLm1hcCgoaXRlbSkgPT4gW2l0ZW0ubG9uLCBpdGVtLmxhdF0pOwogICAgICBjb25zb2xlLmxvZyhjZW50ZXIpOwogICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbCiAgICAgICAgewogICAgICAgICAgdHlwZTogIkNpcmNsZSIsCiAgICAgICAgICBjZW50ZXIsCiAgICAgICAgICByYWRpdXMsCiAgICAgICAgICBzdHlsZTogdGhpcy5sYXllcnMucmFpbExheWVyLnN0eWxlLAogICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICB9LAogICAgICBdOwogICAgICB0aGlzLiRyZWZzLm1hcC5mbHlUbyh7CiAgICAgICAgem9vbTogMTMsCiAgICAgICAgLy8gZmx5Wm9vbTogOCwKICAgICAgICBjZW50ZXIsCiAgICAgIH0pOwogICAgfSwKICAgIGRyYXdSYWlsKHR5cGUpIHsKICAgICAgY29uc29sZS5sb2coImRyYXdSYWlsIiwgdHlwZSk7CiAgICAgIC8vIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFtdCiAgICAgIHRoaXMuZHJhd1R5cGUgPSB0eXBlOwogICAgfSwKICAgIGRyYXdlbmQoZXZ0LCBtYXApIHsKICAgICAgY29uc3QgeyBmZWF0dXJlIH0gPSBldnQ7CiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZHJhd1R5cGUpOwogICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbXTsgLy8g5riF56m65LiK5LiA5Liq55S15a2Q5Zu05qCPCiAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZmVhdHVyZS5nZXRHZW9tZXRyeSgpOwogICAgICBpZiAodGhpcy5kcmF3VHlwZSA9PT0gIlJlY3RhbmdsZSIgfHwgdGhpcy5kcmF3VHlwZSA9PT0gIlBvbHlnb24iKSB7CiAgICAgICAgY29uc3QgW2Nvb3JkaW5hdGVzXSA9IGdlb21ldHJ5LmdldENvb3JkaW5hdGVzKCk7CiAgICAgICAgY29uc3QgY29udmVydENvb3JkaW5hdGVzID0gY29vcmRpbmF0ZXMubWFwKChjb29yZGluYXRlKSA9PiB7CiAgICAgICAgICByZXR1cm4gdXRpbHMuY29udmVydENvb3JkaW5hdGUoY29vcmRpbmF0ZSwgIjg0LWdkIik7CiAgICAgICAgfSk7CiAgICAgICAgY29uc29sZS5sb2coY29vcmRpbmF0ZXMpOwogICAgICAgIGNvbnNvbGUubG9nKGNvbnZlcnRDb29yZGluYXRlcyk7CiAgICAgICAgY29uc3QgcGFyYW1zID0gewogICAgICAgICAgZ2VvczogY29udmVydENvb3JkaW5hdGVzLm1hcCgoaXRlbSkgPT4gewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGxvbjogaXRlbVswXSwKICAgICAgICAgICAgICBsYXQ6IGl0ZW1bMV0sCiAgICAgICAgICAgIH07CiAgICAgICAgICB9KSwKICAgICAgICB9OwogICAgICAgIGNvbnNvbGUubG9nKHBhcmFtcyk7CiAgICAgICAgdGhpcy4kcmVmcy5lbGVjdHJvbmljRmVuY2VFZGl0LnVwZGF0ZUdlb21ldHJ5KHBhcmFtcyk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmF3VHlwZSA9PT0gIkNpcmNsZSIpIHsKICAgICAgICBjb25zdCBjZW50ZXIgPSBnZW9tZXRyeS5nZXRDZW50ZXIoKTsKICAgICAgICBjb25zb2xlLmxvZyhjZW50ZXIpOwogICAgICAgIGNvbnN0IGdlb1JhZGl1cyA9IGdlb21ldHJ5LmdldFJhZGl1cygpOyAvLyDljYrlvoQKICAgICAgICBjb25zdCBtZXRlcnNQZXJVbml0ID0gbWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCkuZ2V0TWV0ZXJzUGVyVW5pdCgpOyAvLyDljYrlvoTku6XnsbPkuLrljZXkvY0KICAgICAgICBjb25zdCByYWRpdXMgPSAoZ2VvUmFkaXVzICogbWV0ZXJzUGVyVW5pdCkudG9GaXhlZCgyKTsKICAgICAgICBjb25zb2xlLmxvZyhyYWRpdXMpOwogICAgICAgIGNvbnN0IGNvbnZlcnRDb29yZGluYXRlcyA9IHV0aWxzLmNvbnZlcnRDb29yZGluYXRlKGNlbnRlciwgIjg0LWdkIik7CiAgICAgICAgY29uc3QgcGFyYW1zID0gewogICAgICAgICAgZ2VvczogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbG9uOiBjb252ZXJ0Q29vcmRpbmF0ZXNbMF0sCiAgICAgICAgICAgICAgbGF0OiBjb252ZXJ0Q29vcmRpbmF0ZXNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICBdLAogICAgICAgICAgcmFkaXVzLAogICAgICAgIH07CiAgICAgICAgY29uc29sZS5sb2cocGFyYW1zKTsKICAgICAgICB0aGlzLiRyZWZzLmVsZWN0cm9uaWNGZW5jZUVkaXQudXBkYXRlR2VvbWV0cnkocGFyYW1zKTsKICAgICAgfQogICAgfSwKICB9LAogIGJlZm9yZVJvdXRlRW50ZXIodG8sIGZyb20sIG5leHQpIHsKICAgIC8vIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8jL3JhaWwKICAgIC8vID9zdGF0aW9uSWQ9VkdVa1RXekpxRTdZZU9jalZVcC0tX19XMDUyYjFYTm9MbVBja0Y2Y2gxCiAgICAvLyAmYWNjZXNzVG9rZW49ZXlKaGJHY2lPaUpJVXpJMU5pSjkuZXlKcGMzTWlPaUpoZFhSb01DSXNJbVY0Y0NJNk1UY3dNalV6TnpNd09Dd2lkWE5sY201aGJXVWlPaUp2ZFVGdmNqWlNja2hKUm5aMlMybHRXVFJDSW4wLjBkd0JILW9HSTZveUR0NGJRSEVXMzVrWl92eTV5MFhFLXpFbUc0dm03MGMKICAgIGNvbnN0IHN0YXRpb25JZCA9IHRvLnF1ZXJ5LnN0YXRpb25JZDsKICAgIGlmIChzdGF0aW9uSWQpIHsKICAgICAgLy8g6I635Y+W55S15a2Q5Zu05qCP5L+h5oGvCiAgICAgIHNlYXJjaFJhaWxBY2Nlc3MoewogICAgICAgIHBhZ2VJbmRleDogMCwKICAgICAgICBwYWdlU2l6ZTogMCwKICAgICAgICBzZWFyY2hNb2RlbDogIlN0YXRpb24iLAogICAgICAgIHN0YXRpb25JZCwKICAgICAgfSkKICAgICAgICAudGhlbigocmVzKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygic2VhcmNoUmFpbCIsIHJlcyk7CiAgICAgICAgICBpZiAocmVzKSB7CiAgICAgICAgICAgIG5leHQoKHZtKSA9PiB7CiAgICAgICAgICAgICAgdm0uc3RhdGlvbklkID0gc3RhdGlvbklkOwogICAgICAgICAgICAgIHZtLmVsZWN0cm9uaWNGZW5jZURhdGEgPSByZXM7CiAgICAgICAgICAgICAgdm0uaXNFbGVjdHJvbmljRmVuY2VEaWFsb2cgPSB0cnVlOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIE1lc3NhZ2UoewogICAgICAgICAgICAgIHR5cGU6ICJlcnJvciIsCiAgICAgICAgICAgICAgbWVzc2FnZTogIuafpeivoueUteWtkOWbtOagj+S/oeaBr+Wksei0pSIsCiAgICAgICAgICAgICAgb25DbG9zZTogKCkgPT4gewogICAgICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uID0gImh0dHBzOi8vd3d3LmJhaWR1LmNvbSI7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goKHsgcmVzcG9uc2UgfSkgPT4gewogICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTsKICAgICAgICAgIE1lc3NhZ2UoewogICAgICAgICAgICB0eXBlOiAiZXJyb3IiLAogICAgICAgICAgICBtZXNzYWdlOiBkYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHsKICAgICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24gPSAiaHR0cHM6Ly93d3cuYmFpZHUuY29tIjsKICAgICAgICAgICAgfSwKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgTWVzc2FnZSh7CiAgICAgICAgdHlwZTogImVycm9yIiwKICAgICAgICBtZXNzYWdlOiAi5pyq6K+G5Yir6am75Yuk54K5SUQiLAogICAgICAgIG9uQ2xvc2U6ICgpID0+IHsKICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbiA9ICJodHRwczovL3d3dy5iYWlkdS5jb20iOwogICAgICAgIH0sCiAgICAgIH0pOwogICAgfQogIH0sCiAgbW91bnRlZCgpIHsKICAgIHRoaXMuZXZlbnRCdXNCaW5kaW5nKCk7CiAgfSwKfTsK"},null]}