1 |
- {"remainingRequest":"D:\\wnmp\\www\\vue\\seaBlueAdmin\\node_modules\\babel-loader\\lib\\index.js!D:\\wnmp\\www\\vue\\seaBlueAdmin\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\wnmp\\www\\vue\\seaBlueAdmin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\wnmp\\www\\vue\\seaBlueAdmin\\src\\views\\goods\\sale\\AddGoods.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\wnmp\\www\\vue\\seaBlueAdmin\\src\\views\\goods\\sale\\AddGoods.vue","mtime":1678954023612},{"path":"D:\\wnmp\\www\\vue\\seaBlueAdmin\\babel.config.js","mtime":1681371897685},{"path":"D:\\wnmp\\www\\vue\\seaBlueAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1681371913603},{"path":"D:\\wnmp\\www\\vue\\seaBlueAdmin\\node_modules\\babel-loader\\lib\\index.js","mtime":1681371912860},{"path":"D:\\wnmp\\www\\vue\\seaBlueAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1681371913603},{"path":"D:\\wnmp\\www\\vue\\seaBlueAdmin\\node_modules\\vue-loader\\lib\\index.js","mtime":1681371925849}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwppbXBvcnQgR29vZHNXYXJlaG91c2UgZnJvbSAiQC9jb21wb25lbnQvZ29vZHMvR29vZHNXYXJlaG91c2UiOwppbXBvcnQgQ2hhcnQxIGZyb20gIi4uL2NvbXBvbmVudHMvQ2hhcnQxIjsKaW1wb3J0IFNlbGVjdFNob3AgZnJvbSAiQC9jb21wb25lbnQvZ29vZHMvU2VsZWN0U2hvcC52dWUiOwppbXBvcnQgeyBnZXRBbGxFeHByZXNzUnVsZSwgZ2V0QWxsQ3VzdG9tZXJTb3VyY2UgfSBmcm9tICJAL2FwaS9TeXN0ZW0iOwppbXBvcnQgeyBhZGRQYXVzZVNhdmUsIGRlbFBhdXNlU2F2ZSwgZ2V0UGF1c2VTYXZlIH0gZnJvbSAiQC9hcGkvY29tbW9uIjsKaW1wb3J0IHsgZ2V0R29vZHNJbmZvLCBlZGl0R29vZHMsIGFkZEdvb2RzLCBnZXRHb29kc0Jhc2ljSW5mb0J5SWQsIGdldEFsbEdvb2RzU3VwcG9ydCwgZ2V0QWxsR29vZHNHcm91cHMgfSBmcm9tICJAL2FwaS9nb29kcyI7CmltcG9ydCBDbGllbnRMaXN0TW9kYWwgZnJvbSAiQC9jb21wb25lbnQvY29tbW9uL0NsaWVudExpc3RNb2RhbCI7CmltcG9ydCBDdXN0b21lclByaWNlIGZyb20gIi4uL2NvbXBvbmVudHMvQ3VzdG9tZXJQcmljZSI7CmltcG9ydCBMYWRkZXJQcmljZSBmcm9tICIuLi9jb21wb25lbnRzL0xhZGRlclByaWNlIjsKaW1wb3J0IEN1c3RvbWVyVHlwZVByaWNlIGZyb20gIi4uL2NvbXBvbmVudHMvQ3VzdG9tZXJUeXBlUHJpY2UiOwppbXBvcnQgUmVnaW9uVHJlZSBmcm9tICJAL2NvbXBvbmVudC9jb21tb24vUmVnaW9uVHJlZSI7CmltcG9ydCB7IG1hcEdldHRlcnMgfSBmcm9tICJ2dWV4IjsKaW1wb3J0IHsgRW50ZXJwcmlzZSB9IGZyb20gIkAvYXBpL3VzZXIiOwppbXBvcnQgeyBDdXN0b21lclByaWNlQWRqdXN0bWVudEFkZCwgYWRkQ3VzdG9tZXJUeXBlUHJpY2VBZGp1c3RtZW50LCBnZXRDdXN0b21lclByaWNlQnlHb29kc0lkcywgZ2V0Q3VzdG9tZXJUeXBlUHJpY2VCeUdvb2RzSWRzIH0gZnJvbSAiQC9hcGkvUHJpY2UiOwpjb25zdCBwcmljZURhdGFMaSA9IHsKICBlbmFibGVkTGFkZGVyOiAwLAogIG1hcmtldFByaWNlOiAiIiwKICBtZW1iZXJQcmljZTogIiIsCiAgY29zdFByaWNlOiAiIiwKICBzYWxlUHJpY2U6ICIiLAogIHNldE51bTogMCwKICBpc1NhbGU6IDUsCiAgc2FsZVByaWNlQXJlYVR5cGU6IDEsCiAgbGFkZGVyUHJpY2U6IFsKICAgIC8qIHsKICAgICAgZnJvbTogMSwKICAgICAgcHJpY2U6IDAuMDEsCiAgICAgIHRvOiAyCiAgICB9LCB7CiAgICAgIGZyb206IDMsCiAgICAgIHByaWNlOiAwLjAxLAogICAgICB0bzogNAogICAgfSwKICAgIHsKICAgICAgZnJvbTogNSwKICAgICAgcHJpY2U6IDAuMDEsCiAgICAgIHRvOiA5OTk5OTk5OTkKICAgIH0gKi8KICBdCn07CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAiQWRkQmFzZURhdGEiLAogIGNvbXBvbmVudHM6IHsKICAgIFNlbGVjdFNob3AsCiAgICBHb29kc1dhcmVob3VzZSwKICAgIFJlZ2lvblRyZWUsCiAgICBDbGllbnRMaXN0TW9kYWwsCiAgICBDaGFydDEsCiAgICBDdXN0b21lclByaWNlLAogICAgQ3VzdG9tZXJUeXBlUHJpY2UsCiAgICBMYWRkZXJQcmljZQogIH0sCiAgcHJvcHM6IHsKICAgIGdvb2RzSWQ6IHsKICAgICAgdHlwZTogW051bWJlciwgU3RyaW5nXSwKICAgICAgZGVmYXVsdDogMAogICAgfSwKICAgIGJhc2ljR29vZHNJZDogewogICAgICB0eXBlOiBbTnVtYmVyLCBTdHJpbmddLAogICAgICBkZWZhdWx0OiAwCiAgICB9CiAgfSwKCiAgZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIC8vIGZsYWdTOiBmYWxzZSwKICAgICAgdW5pdGlzTWFzdGVyOiA0LAogICAgICBjaG9vc2Vfc3VwcG9ydDogW10sCiAgICAgIHVuaXRfaW5kZXg6IDAsCiAgICAgIHNrdV9pbmRleDogMCwKICAgICAgbGFkZGVyUHJpY2U6IFtdLAogICAgICBlbmFibGVkTGFkZGVyOiAwLAogICAgICBsYWRkZXJfcHJpY2Vfc2hvdzogZmFsc2UsCiAgICAgIC8vIOmYtuair+S7t+W8ueeqlwogICAgICB0eXBlX3ByaWNlX3Nob3c6IGZhbHNlLAogICAgICAvLyDlrqLmiLfnsbvlnovku7flvLnnqpcKICAgICAgY3VzdG9tZXJUeXBlUHJpY2VPcGVuOiBmYWxzZSwKICAgICAgLy8g5a6i5oi357G75Z6L5Lu35by556qX5byA5YWzCiAgICAgIGN1c3RvbWVyVHlwZVByaWNlOiBbXSwKICAgICAgLy8g5a6i5oi357G75Z6L5Lu35by556qX5pWw5o2uCiAgICAgIGN1c3RvbWVyUHJpY2VPcGVuOiBmYWxzZSwKICAgICAgY3VzdG9tZXJQcmljZTogW10sCiAgICAgIGFwcG9pbnRfcHJpY2Vfc2hvdzogZmFsc2UsCiAgICAgIC8vIOWuouaIt+aMh+WumuS7t+W8ueeqlwogICAgICBjdXN0b21lcl9zaG93OiBmYWxzZSwKICAgICAgLy8g57uP6JCl5bGP6JS9LT7lrqLmiLfliJfooajlvLnnqpfpgInmi6kKICAgICAgY3VzdG9tZXJfbGlzdDogW10sCiAgICAgIC8vIOe7j+iQpeWxj+iUvS0+5a6i5oi35YiX6KGoCiAgICAgIGN1c3RvbWVyX3R5cGVfY2hlY2s6IFtdLAogICAgICAvLyDnu4/okKXlsY/olL0tPuWuouaIt+exu+Wei+mAieaLqeaVsOe7hAogICAgICBjdXN0b21lcl90eXBlX2xpc3Q6IFtdLAogICAgICAvLyDnu4/okKXlsY/olL0tPuWuouaIt+exu+Wei+WIl+ihqAogICAgICByZWdpb25fYXJyOiBbXSwKICAgICAgLy8g57uP6JCl5bGP6JS9LT7lvZPliY3llYblk4Hlt7LpgInmi6nov4fnmoTljLrln58KICAgICAgcGFnZV90YWJzOiAiMSIsCiAgICAgIC8vIOmhtemdonRhYuWIh+aNogogICAgICB1bml0X25hbWVfdGFiOiAiIiwKICAgICAgc2hvd19yZWdpb246IGZhbHNlLAogICAgICBnb29kc19kYXRhOiB7CiAgICAgICAgc3BlY1R5cGU6IDEKICAgICAgfSwKICAgICAgcHJpbWFyeV91bml0OiAiIiwKICAgICAgcHJpY2VfZGF0YTogWy8vIHsgbWFya2V0UHJpY2U6ICcnIH0KICAgICAgXSwKICAgICAgc2hvd19nb29kczogZmFsc2UsCiAgICAgIHNob3dfY2hvc2U6IGZhbHNlLAogICAgICBpc01vZGVsOiBmYWxzZSwKICAgICAgYmFzZV9ydWxlczogewogICAgICAgIHNob3BOYW1lOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup5bqX6ZO6IiwKICAgICAgICAgIHRyaWdnZXI6ICJjaGFuZ2UiCiAgICAgICAgfV0sCiAgICAgICAgZ29vZHNOYW1lOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup5ZWG5ZOBIiwKICAgICAgICAgIHRyaWdnZXI6ICJjaGFuZ2UiCiAgICAgICAgfV0sCiAgICAgICAgZGVsaXZlcnlTdXBJZHM6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIHR5cGU6ICJhcnJheSIsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup54mp5rWB5pSv5oyBIiwKICAgICAgICAgIHRyaWdnZXI6ICJjaGFuZ2UiCiAgICAgICAgfV0sCiAgICAgICAgcnVsZUlkOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup6L+Q6LS55qih5p2/IiwKICAgICAgICAgIHRyaWdnZXI6ICJjaGFuZ2UiCiAgICAgICAgfV0sCiAgICAgICAgZXhwcmVzc0ZlZTogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogIuivt+i+k+WFpei/kOi0uSIsCiAgICAgICAgICB0cmlnZ2VyOiAiYmx1ciIKICAgICAgICB9XQogICAgICB9LAogICAgICBwcmljZTogIiIsCiAgICAgIGV4cHJlc3NfbGlzdDogW10sCiAgICAgIC8vIOi/kOi0ueaooeeJiOWIl+ihqAogICAgICBiYXNlX2Zvcm06IHsKICAgICAgICBjcmVhdGVVc2VyTmFtZTogIiIsCiAgICAgICAgZ29vZHNOYW1lOiAiIiwKICAgICAgICBlbmFibGVTdGF0dXM6IDUsCiAgICAgICAgaXNEaXN0cmlidXRpb246IDQsCiAgICAgICAgLy/otJ/lupPlrZjplIDllK4KICAgICAgICBzcGVjVHlwZTogIiIsCiAgICAgICAgZ29vZHNCYXNpY0lkOiAwLAogICAgICAgIC8vIOWVhuWTgeWfuuehgOi1hOaWmQogICAgICAgIHNob3BJZDogIiIsCiAgICAgICAgLy8g5bqX6ZO6CiAgICAgICAgc2hvcE5hbWU6ICIiLAogICAgICAgIC8vIOW6l+mTugogICAgICAgIGltYWdlczogW10sCiAgICAgICAgLy8g55u45YaMCiAgICAgICAgc2FsZXNBcmVhOiBbXSwKICAgICAgICAvLyDplIDllK7ljLrln58KICAgICAgICBzZXJ2aWNlSW5mbzogMSwKICAgICAgICBwcmljZTogW10sCiAgICAgICAgLy8g5Yy65Z+f5Lu3CiAgICAgICAgc3BlY2lmaWNhdGlvbjogW10sCiAgICAgICAgLy8gLy8g6KeE5qC8CiAgICAgICAgY29udGVudDogIiIsCiAgICAgICAgLy8g5ZWG5ZOB5o+P6L+wCiAgICAgICAgaXNSZWNvbW1lbmQ6IDUsCiAgICAgICAgLy8gNeaOqOiNkCA05LiN5o6o6I2QCiAgICAgICAgc29ydDogIjk5OSIsCiAgICAgICAgLy8g5o6S5bqPCiAgICAgICAgZGVsaXZlcnlTdXBJZHM6IFsiMSIsICIyIl0sCiAgICAgICAgLy8g54mp5rWB5pSv5oyBIOWbuuWumuWAvCAxIOW/q+mAkiAyIOiHquaPkCDkvKDlj4LmoLzlvI/vvJoxLDIKICAgICAgICBleHByZXNzVHlwZTogMSwKICAgICAgICAvLyDlv6vpgJLov5DotLkgMSDljIXpgq4gMiDov5DotLnmqKHniYggMyDlm7rlrprotLnnlKgKICAgICAgICBleHByZXNzRmVlOiAiIiwKICAgICAgICAvLyDlm7rlrprotLnnlKgKICAgICAgICBzaG93RXhwcmVzczogNSwKICAgICAgICAvLyDmmK/lkKblsZXnpLrlv6vpgJIgNeWxleekuiA05LiN5bGV56S6CiAgICAgICAgcnVsZUlkOiAiIiwKICAgICAgICAvLyDov5DotLnmqKHniYhpZAogICAgICAgIGlzU2hpZWxkOiA0LAogICAgICAgIC8vIOe7j+iQpeWxj+iUvSA05YWz6ZetIDXlvIDlkK8KICAgICAgICBub3RBcmVhOiBbXSwKICAgICAgICAvL+e7j+iQpeWxj+iUveWcsOWMugogICAgICAgIG5vdEN1c3RvbWVyVHlwZTogIiIsCiAgICAgICAgLy/nu4/okKXlsY/olL0g5a6i5oi357G75Z6L5bGP6JS9CiAgICAgICAgbm90Q3VzdG9tZXI6ICIiLAogICAgICAgIC8v57uP6JCl5bGP6JS9IOWuouaIt+Wxj+iUvQogICAgICAgIHNob3dNaW5Vbml0UHJpY2U6IDQgLy/mnIDlsI/ljZXkvY0KCiAgICAgIH0sCiAgICAgIGRlbGl2ZXJ5X2Zvcm06IHt9LAogICAgICB1c2VyX3Bvd2VyOiB7fSwKICAgICAgZ29vZHNfaWQ6IDAsCiAgICAgIHN1Yl9sb2FkOiBmYWxzZSwKICAgICAgcGFnZU5hbWU6ICIiLAogICAgICB0aW1lX2RhdGE6IFtdLAogICAgICBnb29kc051bV9kYXRhOiBbXSwKICAgICAgb3JkZXJNb25leV9kYXRhOiBbXSwKICAgICAgb3JkZXJOdW1fZGF0YTogW10sCiAgICAgIHRpbWU6IFtdLAogICAgICB0YWJsZURhdGE6IFtdLAogICAgICBwYWdlOiAxLAogICAgICBwYWdlU2l6ZTogMjAsCiAgICAgIHRvdGFsOiAwLAogICAgICBzdXBwb3J0OiBbXSwKICAgICAgb3B0aW9uc192YWx1ZTogW10sCiAgICAgIGdvb2RzX2dyb3VwczogW10sCiAgICAgIHNrdV9pZDogIiIKICAgIH07CiAgfSwKCiAgY29tcHV0ZWQ6IHsgLi4ubWFwR2V0dGVycyh7CiAgICAgIHNhbGVQcmljZVRpbWVzOiAiTVVzZXIvc2FsZVByaWNlVGltZXMiLAogICAgICBzeXN0ZW1UeXBlOiAiTVVzZXIvc3lzdGVtVHlwZSIsCiAgICAgIHN0b3JlRGF0YTogIk1Vc2VyL3N0b3JlRGF0YSIKICAgIH0pCiAgfSwKCiAgYXN5bmMgY3JlYXRlZCgpIHsKICAgIHRoaXMucGFnZU5hbWUgPSB0aGlzLiRyb3V0ZS5uYW1lOwoKICAgIGlmICh0aGlzLmJhc2ljR29vZHNJZCkgewogICAgICBhd2FpdCB0aGlzLnNlbEdvb2RzKFtdLCB0aGlzLmJhc2ljR29vZHNJZCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodGhpcy4kcm91dGUucGFyYW1zLmlkKSB7CiAgICAgIHRoaXMuZ29vZHNfaWQgPSB0aGlzLiRyb3V0ZS5wYXJhbXMuaWQ7CiAgICAgIGF3YWl0IHRoaXMuZ2V0RGV0YWlsKCk7CiAgICB9IGVsc2UgewogICAgICBhd2FpdCB0aGlzLmdldFBhdXNlU2F2ZSgpOwoKICAgICAgaWYgKFsyLCAzXS5pbmNsdWRlcyh0aGlzLnN5c3RlbVR5cGUpKSB7CiAgICAgICAgY29uc29sZS5sb2codGhpcy5wYWdlTmFtZSk7CiAgICAgICAgdGhpcy5iYXNlX2Zvcm0uc2hvcElkID0gdGhpcy5zdG9yZURhdGEuaWQ7IC8vIOW6l+mTugoKICAgICAgICB0aGlzLmJhc2VfZm9ybS5zaG9wTmFtZSA9IHRoaXMuc3RvcmVEYXRhLm5hbWU7IC8vIOW6l+mTugogICAgICB9CiAgICB9IC8vIOiOt+WPlui/kOi0ueaooeeJiAoKCiAgICBhd2FpdCB0aGlzLmdldEFsbEV4cHJlc3NSdWxlKCk7IC8vIOiOt+WPluWuouaIt+exu+WeiwoKICAgIGF3YWl0IHRoaXMuZ2V0QWxsQ3VzdG9tZXJTb3VyY2UoKTsgLy8g6I635Y+W5ZWG5ZOB5pyN5YqhCgogICAgYXdhaXQgdGhpcy5nZXRBbGxHb29kc1N1cHBvcnQoKTsgLy8g5ZWG5ZOB5YiG57uECgogICAgYXdhaXQgdGhpcy5nZXRBbGxHb29kc0dyb3VwcygpOwogIH0sCgogIG1ldGhvZHM6IHsKICAgIGdldFNob3AoKSB7CiAgICAgIHRoaXMuJGVtaXQoImNsb3NlU2hvcCIpOwogICAgICB0aGlzLiRyb3V0ZXIucHVzaCgiL1N5c3RlbVNldHRpbmdzL2xpYW5zdW9ndWFubGkvQWRkU2hvcCIpOwogICAgfSwKCiAgICAvLyDojrflj5bov5DotLnmqKHniYgKICAgIGFzeW5jIGdldEFsbEV4cHJlc3NSdWxlKCkgewogICAgICBjb25zdCB7CiAgICAgICAgZGF0YQogICAgICB9ID0gYXdhaXQgZ2V0QWxsRXhwcmVzc1J1bGUoKTsKICAgICAgdGhpcy5leHByZXNzX2xpc3QgPSBkYXRhOwogICAgICBjb25zdCBkYXRhMSA9IGF3YWl0IEVudGVycHJpc2UoewogICAgICAgIHJhbmtpbmc6IDEsCiAgICAgICAgLy8gIjHplIDph4/mjpLooYwgMumUgOmineaOkuihjCIsCiAgICAgICAgYnVzaW5lc3NPdmVydmlld1Nob3BJZDogIiIsCiAgICAgICAgLy8gIue7j+iQpeamguWGteaMieW6l+mTuuetm+mAie+8muS4uuepuuWImeetm+mAieWFqOW6lyIsCiAgICAgICAgY2F0ZWdvcnlSYW5raW5nU2hvcElkOiAiIiwKICAgICAgICAvLyAi57G755uu5o6S6KGM5oyJ5bqX6ZO6562b6YCJ77ya5Li656m65YiZ562b6YCJ5YWo5bqXIiwKICAgICAgICBnb29kc1JhbmtpbmdTaG9wSWQ6ICIiLAogICAgICAgIC8vICLllYblk4HmjpLooYzmjInlupfpk7rnrZvpgInvvJrkuLrnqbrliJnnrZvpgInlhajlupciLAogICAgICAgIHN1cHBsaWVyUmFua2luZ1Nob3BJZDogIiIgLy8g5L6b5bqU5ZWG5o6S6KGM5oyJ5bqX6ZO6562b6YCJ77ya5Li656m65YiZ562b6YCJ5YWo5bqXIgoKICAgICAgfSk7CgogICAgICBpZiAoZGF0YTEuZGF0YS5hZ2dyZWdhdGVTdGF0aXN0aWNzKSB7CiAgICAgICAgaWYgKHRoaXMudGltZV9kYXRhLmxlbmd0aCkgewogICAgICAgICAgdGhpcy50aW1lX2RhdGEgPSBbXTsKICAgICAgICB9CgogICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgIGRhdGExLmRhdGEuY2hhcnREYXRhLmZvckVhY2godmFsdWUgPT4gewogICAgICAgICAgICB0aGlzLnRpbWVfZGF0YS5wdXNoKHZhbHVlLmRhdGUpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCgogICAgLy8g6K6h566X5biC5Zy65Lu3CiAgICBzYWxlUHJpY2VCbHVyKGluZGV4LCBpbmRleFUpIHsKICAgICAgaWYgKHRoaXMuZ29vZHNfZGF0YS5zcGVjVHlwZSA9PT0gMSkgewogICAgICAgIC8vIOagueaNruavlOS+i+iHquWKqOaNoueul+mUgOWUruS7twogICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJF9jb21tb24uZGVlcENsb25lKHRoaXMucHJpY2VfZGF0YSk7CiAgICAgICAgY29uc3QgbWFya2V0UHJpY2UgPSB0aGlzLiROUC50aW1lcyh0YXJnZXRbaW5kZXhdLnNhbGVQcmljZSwgdGhpcy5zYWxlUHJpY2VUaW1lcyk7CiAgICAgICAgdGFyZ2V0W2luZGV4XSA9IHsgLi4udGFyZ2V0W2luZGV4XSwKICAgICAgICAgIG1hcmtldFByaWNlOiBtYXJrZXRQcmljZQogICAgICAgIH07IC8vIHRhcmdldC5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgLy8gICBpZiAoCiAgICAgICAgLy8gICAgIGl0ZW0uY29udmVyc2lvbiAmJgogICAgICAgIC8vICAgICBpdGVtLmlzTWFzdGVyID09PSA0ICYmCiAgICAgICAgLy8gICAgIHRoaXMuZ29vZHNfZGF0YS5pc0VxID09PSA1CiAgICAgICAgLy8gICApIHsKICAgICAgICAvLyAgICAgaXRlbS5zYWxlUHJpY2UgPSB0aGlzLiROUC50aW1lcygKICAgICAgICAvLyAgICAgICB0YXJnZXRbaW5kZXhdLnNhbGVQcmljZSwKICAgICAgICAvLyAgICAgICBpdGVtLmNvbnZlcnNpb24KICAgICAgICAvLyAgICAgKTsKICAgICAgICAvLyAgICAgaXRlbS5tYXJrZXRQcmljZSA9IHRoaXMuJE5QLnRpbWVzKG1hcmtldFByaWNlLCBpdGVtLmNvbnZlcnNpb24pOwogICAgICAgIC8vICAgfQogICAgICAgIC8vIH0pOwoKICAgICAgICB0aGlzLnByaWNlX2RhdGEgPSB0YXJnZXQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5nb29kc19kYXRhLnVuaXREYXRhW2luZGV4VV0ucHJpY2VEYXRhW2luZGV4XS5tYXJrZXRQcmljZSA9IHRoaXMuJE5QLnRpbWVzKHRoaXMuZ29vZHNfZGF0YS51bml0RGF0YVtpbmRleFVdLnByaWNlRGF0YVtpbmRleF0uc2FsZVByaWNlLCB0aGlzLnNhbGVQcmljZVRpbWVzKTsKICAgICAgfQogICAgfSwKCiAgICAvLyDkvJrlkZjku7flpLHljrvnhKbngrkKICAgIG1lbWJlclByaWNlQmx1cihpbmRleCkgewogICAgICByZXR1cm47IC8vIOagueaNruavlOS+i+iHquWKqOaNoueulyDkvJrlkZjku7cKCiAgICAgIGlmICh0aGlzLmdvb2RzX2RhdGEuc3BlY1R5cGUgPT09IDEpIHsKICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLnByaWNlX2RhdGEpOwogICAgICAgIHRhcmdldC5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgICAgaWYgKGl0ZW0uY29udmVyc2lvbiAmJiBpdGVtLmlzTWFzdGVyID09PSA0ICYmIHRoaXMuZ29vZHNfZGF0YS5pc0VxID09PSA1KSB7CiAgICAgICAgICAgIGl0ZW0ubWVtYmVyUHJpY2UgPSB0aGlzLiROUC50aW1lcyh0YXJnZXRbaW5kZXhdLm1lbWJlclByaWNlLCBpdGVtLmNvbnZlcnNpb24pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHRoaXMucHJpY2VfZGF0YSA9IHRhcmdldDsKICAgICAgfQogICAgfSwKCiAgICBzaG9wRGVmYXVsdCh2YWwsIHJvdykgewogICAgICB0aGlzLmJhc2VfZm9ybS5zaG9wSWQgPSB2YWw7CiAgICAgIHRoaXMuYmFzZV9mb3JtLnNob3BOYW1lID0gcm93Lm5hbWU7CiAgICB9LAoKICAgIG90aGVyU2V0UHJpY2Uocm93LCBpbmRleCkgewogICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLmdvb2RzX2RhdGEpOwogICAgICB0YXJnZXQudW5pdERhdGFbaW5kZXhdLnByaWNlRGF0YSA9IHRhcmdldC51bml0RGF0YVtpbmRleF0ucHJpY2VEYXRhLm1hcChpdGVtID0+IHsKICAgICAgICByZXR1cm4geyAuLi5pdGVtLAogICAgICAgICAgY3VzdG9tZXJUeXBlUHJpY2U6IHJvdy5jdXN0b21lclR5cGVQcmljZSwKICAgICAgICAgIGN1c3RvbWVyVHlwZVByaWNlT3Blbjogcm93LmN1c3RvbWVyVHlwZVByaWNlT3BlbiwKICAgICAgICAgIGN1c3RvbWVyUHJpY2U6IHJvdy5jdXN0b21lclByaWNlLAogICAgICAgICAgY3VzdG9tZXJQcmljZU9wZW46IHJvdy5jdXN0b21lclByaWNlT3BlbiwKICAgICAgICAgIG1hcmtldFByaWNlOiByb3cubWFya2V0UHJpY2UsCiAgICAgICAgICBtZW1iZXJQcmljZTogcm93Lm1lbWJlclByaWNlLAogICAgICAgICAgc2FsZVByaWNlOiByb3cuc2FsZVByaWNlLAogICAgICAgICAgZW5hYmxlZExhZGRlcjogcm93LmVuYWJsZWRMYWRkZXIsCiAgICAgICAgICBsYWRkZXJQcmljZTogcm93LmxhZGRlclByaWNlLAogICAgICAgICAgc2V0TnVtOiByb3cuc2V0TnVtLAogICAgICAgICAgaXNTYWxlOiByb3cuaXNTYWxlIHx8IDUKICAgICAgICB9OwogICAgICB9KTsKICAgICAgdGhpcy5nb29kc19kYXRhID0gdGFyZ2V0OwogICAgfSwKCiAgICBvcGVuU2hvcCgpIHsKICAgICAgaWYgKHRoaXMuZ29vZHNfaWQpIHJldHVybjsKICAgICAgdGhpcy5zaG93X2Nob3NlID0gdHJ1ZTsKICAgIH0sCgogICAgb3Blbkdvb2RzTW9kZWwoKSB7CiAgICAgIGlmICghdGhpcy5iYXNlX2Zvcm0uc2hvcE5hbWUgfHwgISF0aGlzLmdvb2RzX2lkKSByZXR1cm47CiAgICAgIHRoaXMuc2hvd19nb29kcyA9IHRydWU7CiAgICB9LAoKICAgIC8vIOiOt+WPluWVhuWTgeivpuaDhQogICAgYXN5bmMgZ2V0RGV0YWlsKCkgewogICAgICBjb25zdCB7CiAgICAgICAgZGF0YQogICAgICB9ID0gYXdhaXQgZ2V0R29vZHNJbmZvKHRoaXMuZ29vZHNfaWQpOwogICAgICB0aGlzLmdvb2RzX2RhdGEgPSBkYXRhOwogICAgICB0aGlzLmNob29zZV9zdXBwb3J0ID0gZGF0YS5zdXBwb3J0OwogICAgICBsZXQgYXJyID0gW107CiAgICAgIGRhdGEuZ29vZHNHcm91cHMuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICBpZiAoaXRlbSkgewogICAgICAgICAgYXJyLnB1c2goTnVtYmVyKGl0ZW0pKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLm9wdGlvbnNfdmFsdWUgPSBhcnI7CiAgICAgIHRoaXMuYmFzZV9mb3JtID0gewogICAgICAgIGNyZWF0ZVVzZXJOYW1lOiB0aGlzLnVzZXJOYW1lLAogICAgICAgIGdvb2RzTmFtZTogZGF0YS50aXRsZSwKICAgICAgICBlbmFibGVTdGF0dXM6IGRhdGEuZW5hYmxlU3RhdHVzLAogICAgICAgIC8vIOaYr+WQpuS4iuaetgogICAgICAgIGlzRGlzdHJpYnV0aW9uOiBkYXRhLmlzRGlzdHJpYnV0aW9uLAogICAgICAgIC8v5piv5ZCm6LSf5bqT5a2Y6ZSA5ZSuCiAgICAgICAgZ29vZHNCYXNpY0lkOiBkYXRhLmJhc2ljR29vZHNJZCwKICAgICAgICAvLyDllYblk4Hln7rnoYDotYTmlpkKICAgICAgICBzaG9wSWQ6IGRhdGEuc2hvcElkLAogICAgICAgIC8vIOW6l+mTugogICAgICAgIHNob3BOYW1lOiBkYXRhLnNob3BOYW1lLAogICAgICAgIC8vIOW6l+mTugogICAgICAgIGltYWdlczogZGF0YS5pbWFnZXMsCiAgICAgICAgLy8g55u45YaMCiAgICAgICAgc2FsZXNBcmVhOiBkYXRhLnNhbGVzQXJlYSwKICAgICAgICAvLyDplIDllK7ljLrln58KICAgICAgICBzZXJ2aWNlSW5mbzogZGF0YS5zZXJ2aWNlSW5mbywKICAgICAgICBwcmljZTogW10sCiAgICAgICAgc3BlY2lmaWNhdGlvbjogZGF0YS5zcGVjaWZpY2F0aW9uLAogICAgICAgIC8vIC8vIOinhOagvAogICAgICAgIGNvbnRlbnQ6IGRhdGEuY29udGVudCwKICAgICAgICAvLyDllYblk4Hmj4/ov7AKICAgICAgICBpc1JlY29tbWVuZDogZGF0YS5pc1JlY29tbWVuZCwKICAgICAgICAvLyA15o6o6I2QIDTkuI3mjqjojZAKICAgICAgICBzb3J0OiBkYXRhLnNvcnQsCiAgICAgICAgLy8g5o6S5bqPCiAgICAgICAgc3BlY1R5cGU6IGRhdGEuc3BlY1R5cGUsCiAgICAgICAgLy8gMiDlpJrop4TmoLwgMeWNleinhOagvAogICAgICAgIGRlbGl2ZXJ5U3VwSWRzOiBkYXRhLmRlbGl2ZXJ5U3VwSWRzLnNwbGl0KCIsIiksCiAgICAgICAgLy8g54mp5rWB5pSv5oyBIOWbuuWumuWAvCAxIOW/q+mAkiAyIOiHquaPkCDkvKDlj4LmoLzlvI/vvJoxLDIKICAgICAgICBleHByZXNzVHlwZTogZGF0YS5leHByZXNzVHlwZSwKICAgICAgICAvLyDlv6vpgJLov5DotLkgMSDljIXpgq4gMiDov5DotLnmqKHniYggMyDlm7rlrprotLnnlKgKICAgICAgICBleHByZXNzRmVlOiBkYXRhLmV4cHJlc3NGZWUsCiAgICAgICAgLy8g5Zu65a6a6LS555SoCiAgICAgICAgc2hvd0V4cHJlc3M6IGRhdGEuc2hvd0V4cHJlc3MsCiAgICAgICAgLy8g5piv5ZCm5bGV56S65b+r6YCSIDXlsZXnpLogNOS4jeWxleekugogICAgICAgIHJ1bGVJZDogZGF0YS5ydWxlSWQsCiAgICAgICAgLy8g6L+Q6LS55qih54mIaWQKICAgICAgICBpc1NoaWVsZDogZGF0YS5pc1NoaWVsZCwKICAgICAgICAvLyDnu4/okKXlsY/olL0KICAgICAgICBub3RBcmVhOiBkYXRhLm5vdEFyZWEsCiAgICAgICAgbm90Q3VzdG9tZXJUeXBlOiBkYXRhLm5vdEN1c3RvbWVyVHlwZSwKICAgICAgICBub3RDdXN0b21lcjogZGF0YS5ub3RDdXN0b21lciwKICAgICAgICBzaG93TWluVW5pdFByaWNlOiBkYXRhLnNob3dNaW5Vbml0UHJpY2UKICAgICAgfTsKICAgICAgdGhpcy5yZWdpb25fYXJyID0gZGF0YS5ub3RBcmVhOwogICAgICB0aGlzLmN1c3RvbWVyX3R5cGVfY2hlY2sgPSBkYXRhLm5vdEN1c3RvbWVyVHlwZSA/IGRhdGEubm90Q3VzdG9tZXJUeXBlLnNwbGl0KCIsIikubWFwKGl0ZW0gPT4gcGFyc2VJbnQoaXRlbSkpIDogW107CiAgICAgIHRoaXMuY3VzdG9tZXJfbGlzdCA9IGRhdGEubm90Q3VzdG9tZXJMaXN0cyB8fCBbXTsKCiAgICAgIGlmIChkYXRhLnNwZWNUeXBlID09PSAxKSB7CiAgICAgICAgdGhpcy5wcmljZV9kYXRhID0gZGF0YS5zcGVjTXVsdGlwbGUubWFwKGl0ZW0gPT4gewogICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSwKICAgICAgICAgICAgaXNTYWxlOiBpdGVtLmlzU2FsZSB8fCA1LAogICAgICAgICAgICAvLyDlrqLmiLfnsbvlnovlkozlrqLmiLflv6vpgJ/osIPku7cKICAgICAgICAgICAgY3VzdG9tZXJUeXBlUHJpY2U6IFtdLAogICAgICAgICAgICBjdXN0b21lclR5cGVQcmljZU9wZW46IGZhbHNlLAogICAgICAgICAgICBjdXN0b21lclByaWNlOiBbXSwKICAgICAgICAgICAgY3VzdG9tZXJQcmljZU9wZW46IGZhbHNlCiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKGRhdGEuc3BlY1R5cGUgPT09IDIpIHsKICAgICAgICBpZiAodGhpcy5nb29kc19kYXRhLnVuaXREYXRhICYmIHRoaXMuZ29vZHNfZGF0YS51bml0RGF0YS5sZW5ndGgpIHsKICAgICAgICAgIHRoaXMudW5pdF9uYW1lX3RhYiA9IHRoaXMuZ29vZHNfZGF0YS51bml0RGF0YVswXS51bml0TmFtZTsKICAgICAgICAgIHRoaXMuZ29vZHNfZGF0YS51bml0RGF0YSA9IHRoaXMuZ29vZHNfZGF0YS51bml0RGF0YS5tYXAoaXRlbVUgPT4gewogICAgICAgICAgICBjb25zdCBwcmljZURhdGEgPSBkYXRhLnNwZWNNdWx0aXBsZS5maWx0ZXIoaXRlbUYgPT4gaXRlbUYudW5pdElkID09PSBpdGVtVS51bml0SWQpLm1hcChpdGVtID0+IHsKICAgICAgICAgICAgICBjb25zdCBza3VOYW1lID0gaXRlbS5zcGVjR3JvdXAubWFwKGl0ZW1NID0+IHsKICAgICAgICAgICAgICAgIHJldHVybiBpdGVtTS5zcGVjVmFsdWVOYW1lOwogICAgICAgICAgICAgIH0pLmpvaW4oIl8iKTsgLy8gaXRlbS5zcGVjR3JvdXAuZm9yRWFjaCgoaXRlbVMpID0+IHsKICAgICAgICAgICAgICAvLyAgIGlmIChpdGVtUy5zcGVjSWQgPT09IDExKSB7CiAgICAgICAgICAgICAgLy8gICAgIHRoaXMuZmxhZ1MgPSB0cnVlOwogICAgICAgICAgICAgIC8vICAgfQogICAgICAgICAgICAgIC8vIH0pOwoKICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtLAogICAgICAgICAgICAgICAgaXNTYWxlOiBpdGVtLmlzU2FsZSB8fCA1LAogICAgICAgICAgICAgICAgc2t1TmFtZTogc2t1TmFtZSwKICAgICAgICAgICAgICAgIC8vIOWuouaIt+exu+Wei+WSjOWuouaIt+W/q+mAn+iwg+S7twogICAgICAgICAgICAgICAgY3VzdG9tZXJUeXBlUHJpY2U6IFtdLAogICAgICAgICAgICAgICAgY3VzdG9tZXJUeXBlUHJpY2VPcGVuOiBmYWxzZSwKICAgICAgICAgICAgICAgIGN1c3RvbWVyUHJpY2U6IFtdLAogICAgICAgICAgICAgICAgY3VzdG9tZXJQcmljZU9wZW46IGZhbHNlLAogICAgICAgICAgICAgICAgbWluVW5pdFByaWNlQ29udmVydDogaXRlbS5taW5Vbml0UHJpY2VDb252ZXJ0IHx8ICIiCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW1VLAogICAgICAgICAgICAgIHByaWNlRGF0YTogcHJpY2VEYXRhCiAgICAgICAgICAgIH07CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0gLy8gdGhpcy5yZWdpb25fYXJyID0gZGF0YS5zYWxlc0FyZWEKCgogICAgICBpZiAoZGF0YS5iYXNpY0dvb2RzSWQpIHsKICAgICAgICBhd2FpdCB0aGlzLnNlbEdvb2RzKFtdLCBkYXRhLmJhc2ljR29vZHNJZCk7CiAgICAgIH0KCiAgICAgIHRoaXMudG9nZ2xlU2VsZWN0aW9uKCk7IC8vIOiOt+WPluaMh+WumuWVhuWTgeeahOacgOWQjueUn+aViOeahOWuouaIt+iwg+S7t+WNleaVsOaNrgoKICAgICAgYXdhaXQgdGhpcy5nZXRDdXN0b21lclByaWNlQnlHb29kc0lkcygpOyAvL+iOt+WPluaMh+WumuWVhuWTgeeahOacgOWQjueUn+aViOeahOWuouaIt+exu+Wei+iwg+S7t+aVsOaNrgoKICAgICAgYXdhaXQgdGhpcy5nZXRDdXN0b21lclR5cGVQcmljZUJ5R29vZHNJZHMoKTsKICAgIH0sCgogICAgLy8g5qOA5p+l5o+Q5LqkCiAgICBjaGVja1N1YigpIHsKICAgICAgdGhpcy4kcmVmcy5iYXNlX2Zvcm0udmFsaWRhdGUodmFsaWQgPT4gewogICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgbGV0IHByaWNlRGF0YSA9IFtdOwoKICAgICAgICAgIGlmICh0aGlzLmdvb2RzX2RhdGEuc3BlY1R5cGUgPT09IDIpIHsKICAgICAgICAgICAgLy8g5aSa5bGe5oCnCiAgICAgICAgICAgIHRoaXMuZ29vZHNfZGF0YS51bml0RGF0YS5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgICAgICAgIGl0ZW0ucHJpY2VEYXRhLmZvckVhY2goaXRlbVAgPT4gewogICAgICAgICAgICAgICAgcHJpY2VEYXRhLnB1c2goewogICAgICAgICAgICAgICAgICBpZDogaXRlbVAuaWQsCiAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb246IGl0ZW1QLmNvbnZlcnNpb24sCiAgICAgICAgICAgICAgICAgIHVuaXROYW1lOiBpdGVtUC51bml0TmFtZSwKICAgICAgICAgICAgICAgICAgdW5pdElkOiBpdGVtUC51bml0SWQsCiAgICAgICAgICAgICAgICAgIGlzTWFzdGVyOiBpdGVtUC5pc01hc3RlciwKICAgICAgICAgICAgICAgICAgZGVsZXRlU3RhdHVzOiBpdGVtUC5kZWxldGVTdGF0dXMgfHwgNCwKICAgICAgICAgICAgICAgICAgZW5hYmxlZExhZGRlcjogaXRlbVAuZW5hYmxlZExhZGRlciwKICAgICAgICAgICAgICAgICAgc2FsZVByaWNlQXJlYVR5cGU6IGl0ZW1QLnNhbGVQcmljZUFyZWFUeXBlLAogICAgICAgICAgICAgICAgICBzYWxlUHJpY2U6IGl0ZW1QLnNhbGVQcmljZSwKICAgICAgICAgICAgICAgICAgbGFkZGVyUHJpY2U6IGl0ZW1QLmxhZGRlclByaWNlLAogICAgICAgICAgICAgICAgICBtYXJrZXRQcmljZTogaXRlbVAubWFya2V0UHJpY2UsCiAgICAgICAgICAgICAgICAgIG1lbWJlclByaWNlOiBpdGVtUC5tZW1iZXJQcmljZSwKICAgICAgICAgICAgICAgICAgc2V0TnVtOiBpdGVtUC5zZXROdW0sCiAgICAgICAgICAgICAgICAgIGlzU2FsZTogaXRlbVAuaXNTYWxlIHx8IDUsCiAgICAgICAgICAgICAgICAgIG1pblVuaXRQcmljZUNvbnZlcnQ6IGl0ZW1QLm1pblVuaXRQcmljZUNvbnZlcnQKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHByaWNlRGF0YSA9IHRoaXMuJF9jb21tb24uZGVlcENsb25lKHRoaXMucHJpY2VfZGF0YSkubWFwKGl0ZW0gPT4gewogICAgICAgICAgICAgIGRlbGV0ZSBpdGVtLmN1c3RvbWVyVHlwZVByaWNlOwogICAgICAgICAgICAgIGRlbGV0ZSBpdGVtLmN1c3RvbWVyVHlwZVByaWNlT3BlbjsKICAgICAgICAgICAgICBkZWxldGUgaXRlbS5jdXN0b21lclByaWNlOwogICAgICAgICAgICAgIGRlbGV0ZSBpdGVtLmN1c3RvbWVyUHJpY2VPcGVuOwogICAgICAgICAgICAgIHJldHVybiBpdGVtOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KCiAgICAgICAgICBsZXQgbGFkZGVyUHJpY2VMZW5ndGggPSB0cnVlOwogICAgICAgICAgbGV0IGlzTGFkZGVyUHJpY2UgPSB0cnVlOwoKICAgICAgICAgIGZvciAobGV0IGkgaW4gcHJpY2VEYXRhKSB7CiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwcmljZURhdGFbaV07CgogICAgICAgICAgICBpZiAoaXRlbS5lbmFibGVkTGFkZGVyID09PSAxKSB7CiAgICAgICAgICAgICAgaWYgKGl0ZW0ubGFkZGVyUHJpY2UubGVuZ3RoIDwgMikgewogICAgICAgICAgICAgICAgbGFkZGVyUHJpY2VMZW5ndGggPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWl0ZW0ubGFkZGVyUHJpY2UuZXZlcnkoaXRlbVAgPT4gaXRlbVAucHJpY2UgPiAwKSkgewogICAgICAgICAgICAgICAgaXNMYWRkZXJQcmljZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGlmICghaXRlbS5zYWxlUHJpY2UpIHsKICAgICAgICAgICAgICAgIGlzTGFkZGVyUHJpY2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGlmICghbGFkZGVyUHJpY2VMZW5ndGgpIHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7foh7PlsJHorr7nva7kuKTmnaHpmLbmoq/ku7ciKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICghaXNMYWRkZXJQcmljZSkgewogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIuivt+i+k+WFpeS7t+agvCIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5wcmljZSA9IHByaWNlRGF0YS5tYXAoaXRlbSA9PiB7CiAgICAgICAgICAgIGlmIChpdGVtLmxhZGRlclByaWNlLmxlbmd0aCkgewogICAgICAgICAgICAgIGl0ZW0ubGFkZGVyUHJpY2VbaXRlbS5sYWRkZXJQcmljZS5sZW5ndGggLSAxXS50byA9IDk5OTk5OTk5OTk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxldCBtaW4gPSAwOwoKICAgICAgICAgICAgaWYgKGl0ZW0uZW5hYmxlZExhZGRlciA9PT0gMSkgewogICAgICAgICAgICAgIGNvbnN0IGFyciA9IGl0ZW0ubGFkZGVyUHJpY2UubWFwKGl0ZW1NID0+IHsKICAgICAgICAgICAgICAgIHJldHVybiBpdGVtTS5wcmljZTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBtaW4gPSBNYXRoLm1pbi5hcHBseShudWxsLCBhcnIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtLAogICAgICAgICAgICAgIGxhZGRlclByaWNlOiBpdGVtLmVuYWJsZWRMYWRkZXIgPT09IDAgPyBbXSA6IGl0ZW0ubGFkZGVyUHJpY2UsCiAgICAgICAgICAgICAgc2FsZVByaWNlOiBpdGVtLmVuYWJsZWRMYWRkZXIgPT09IDEgPyBtaW4gOiBpdGVtLnNhbGVQcmljZQogICAgICAgICAgICB9OwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLnByaWNlID0gcHJpY2VEYXRhOwogICAgICAgICAgdGhpcy5zdWJEYXRhKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCgogICAgLy8g5ZWG5ZOB5paw5bu65o+Q5LqkCiAgICBhc3luYyBzdWJEYXRhKCkgewogICAgICBsZXQgdGFyZ2V0ID0ge307CiAgICAgIGNvbnN0IG5vdEN1c3RvbWVyID0gdGhpcy5jdXN0b21lcl9saXN0Lm1hcChpdGVtID0+IHsKICAgICAgICByZXR1cm4gaXRlbS5pZDsKICAgICAgfSk7CiAgICAgIGNvbnN0IGlzRlNhbGUgPSB0aGlzLnByaWNlLmV2ZXJ5KGl0ZW0gPT4gaXRlbS5pc1NhbGUgPT09IDQpOwoKICAgICAgaWYgKGlzRlNhbGUpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIuiHs+WwkeS/neeVmeS4gOadoeinhOagvOeahOmUgOWUrueKtuaAgeS4uuOAkOWQr+eUqOOAkSIpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLmJhc2VfZm9ybSwKICAgICAgICBwcmljZTogdGhpcy5wcmljZSwKICAgICAgICBkZWxpdmVyeVN1cElkczogdGhpcy5iYXNlX2Zvcm0uZGVsaXZlcnlTdXBJZHMuam9pbigiLCIpLAogICAgICAgIG5vdEN1c3RvbWVyVHlwZTogdGhpcy5jdXN0b21lcl90eXBlX2NoZWNrLmpvaW4oIiwiKSwKICAgICAgICBub3RDdXN0b21lcjogbm90Q3VzdG9tZXIuam9pbigiLCIpLAogICAgICAgIHN1cHBvcnQ6IHRoaXMuY2hvb3NlX3N1cHBvcnQsCiAgICAgICAgZ29vZHNHcm91cHM6IHRoaXMub3B0aW9uc192YWx1ZQogICAgICB9OwogICAgICB0aGlzLnN1Yl9sb2FkID0gdHJ1ZTsKCiAgICAgIHRyeSB7CiAgICAgICAgaWYgKHRoaXMuZ29vZHNfaWQpIHsKICAgICAgICAgIHRhcmdldCA9IGF3YWl0IGVkaXRHb29kcyh0aGlzLmdvb2RzX2lkLCBwYXJhbXMpOwogICAgICAgICAgdGhpcy5zdWJfbG9hZCA9IGZhbHNlOwogICAgICAgICAgYXdhaXQgdGhpcy5BZGp1c3RQcmljZSh0aGlzLmdvb2RzX2lkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGFyZ2V0ID0gYXdhaXQgYWRkR29vZHMoeyAuLi5wYXJhbXMsCiAgICAgICAgICAgIGNyZWF0ZVVzZXJOYW1lOiB0aGlzLnVzZXJOYW1lCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuc3ViX2xvYWQgPSBmYWxzZTsKICAgICAgICAgIGF3YWl0IHRoaXMuQWRqdXN0UHJpY2UodGFyZ2V0LmRhdGEpOwogICAgICAgICAgYXdhaXQgdGhpcy5kZWxQYXVzZVNhdmUoKTsKICAgICAgICB9CgogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogInN1Y2Nlc3MiLAogICAgICAgICAgbWVzc2FnZTogIuaPkOS6pOaIkOWKnyIKICAgICAgICB9KTsKCiAgICAgICAgaWYgKHRoaXMuYmFzaWNHb29kc0lkKSB7CiAgICAgICAgICB0aGlzLiRlbWl0KCJzdWJEYXRhIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICh0aGlzLnN5c3RlbVR5cGUgPT09IDIpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy4kY2xvc2VDdXJyZW50R29FZGl0KCIvU2luZ2xlU3RvcmUvZ29vZHMvR29vZHNBZG1pbmlzdHJhdGlvbiIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy4kY2xvc2VDdXJyZW50R29FZGl0KCIvZ29vZHMvc2FsZS9QdWJsaXNoR29vZHMiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdGhpcy5zdWJfbG9hZCA9IGZhbHNlOwogICAgICB9CiAgICB9LAoKICAgIC8vIOivt+axguW/q+mAn+iwg+S7t+aOpeWPowogICAgYXN5bmMgQWRqdXN0UHJpY2UoZ29vZHNJZCkgewogICAgICBsZXQgdHlwZVBhcmFtcyA9IFtdOwogICAgICBsZXQgY3VzdG9tZXJQYXJhbXMgPSBbXTsKICAgICAgbGV0IHR5cGVQcmljZSA9IFtdOwogICAgICBsZXQgY3VzdG9tZXJQcmljZSA9IFtdOwoKICAgICAgaWYgKHRoaXMuZ29vZHNfZGF0YS5zcGVjVHlwZSA9PT0gMSkgewogICAgICAgIHRoaXMucHJpY2VfZGF0YS5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgICAgaWYgKGl0ZW0uY3VzdG9tZXJUeXBlUHJpY2VPcGVuKSB7CiAgICAgICAgICAgIGl0ZW0uY3VzdG9tZXJUeXBlUHJpY2UuZm9yRWFjaCh0eXBlID0+IHsKICAgICAgICAgICAgICAvLyBpZiAoIXR5cGUucHJpY2VJZCkgewogICAgICAgICAgICAgIHR5cGVQYXJhbXMucHVzaCh7CiAgICAgICAgICAgICAgICBjcmVhdGVVc2VyTmFtZTogdGhpcy51c2VyTmFtZSwKICAgICAgICAgICAgICAgIGdvb2RzTmFtZTogdGhpcy5iYXNlX2Zvcm0uZ29vZHNOYW1lLAogICAgICAgICAgICAgICAgZ29vZHNJZDogZ29vZHNJZCwKICAgICAgICAgICAgICAgIHNob3BJZDogdGhpcy5iYXNlX2Zvcm0uc2hvcElkLAogICAgICAgICAgICAgICAgc2hvcE5hbWU6IHRoaXMuYmFzZV9mb3JtLnNob3BOYW1lLAogICAgICAgICAgICAgICAgY3VzdG9tZXJOYW1lOiB0eXBlLm5hbWUsCiAgICAgICAgICAgICAgICBjdXN0b21lclR5cGU6IHR5cGUuaWQsCiAgICAgICAgICAgICAgICBlZmZlY3RpdmU6IDUsCiAgICAgICAgICAgICAgICAvL+iwg+S7t+WNleeri+WNs+eUn+aViGVmZmVjdGl2ZSA156uL5Y2z55Sf5pWIIDTpnIDopoHmiYvliqjnlJ/mlYgKICAgICAgICAgICAgICAgIHNhbGVQcmljZTogW3sKICAgICAgICAgICAgICAgICAgcHJpY2U6IHR5cGUucHJpY2UsCiAgICAgICAgICAgICAgICAgIHNrdUlkOiBpdGVtLmlkLAogICAgICAgICAgICAgICAgICB1bml0TmFtZTogaXRlbS51bml0TmFtZSwKICAgICAgICAgICAgICAgICAgYWRqUHJpY2V0YWc6IHR5cGUuYWRqUHJpY2V0YWcsCiAgICAgICAgICAgICAgICAgIGxhZGRlclByaWNlOiB0eXBlLmxhZGRlclByaWNlIHx8IFtdCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH0pOyAvLyB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChpdGVtLmN1c3RvbWVyUHJpY2VPcGVuKSB7CiAgICAgICAgICAgIGl0ZW0uY3VzdG9tZXJQcmljZS5mb3JFYWNoKHR5cGUgPT4gewogICAgICAgICAgICAgIC8vIGlmICghdHlwZS5wcmljZUlkKSB7CiAgICAgICAgICAgICAgY3VzdG9tZXJQYXJhbXMucHVzaCh7CiAgICAgICAgICAgICAgICBjcmVhdGVVc2VyTmFtZTogdGhpcy51c2VyTmFtZSwKICAgICAgICAgICAgICAgIGdvb2RzTmFtZTogdGhpcy5iYXNlX2Zvcm0uZ29vZHNOYW1lLAogICAgICAgICAgICAgICAgZ29vZHNJZDogZ29vZHNJZCwKICAgICAgICAgICAgICAgIHNob3BJZDogdGhpcy5iYXNlX2Zvcm0uc2hvcElkLAogICAgICAgICAgICAgICAgc2hvcE5hbWU6IHRoaXMuYmFzZV9mb3JtLnNob3BOYW1lLAogICAgICAgICAgICAgICAgY3VzdG9tZXJOYW1lOiB0eXBlLm5hbWUsCiAgICAgICAgICAgICAgICBjdXN0b21lcklkOiB0eXBlLmlkLAogICAgICAgICAgICAgICAgZWZmZWN0aXZlOiA1LAogICAgICAgICAgICAgICAgLy/osIPku7fljZXnq4vljbPnlJ/mlYhlZmZlY3RpdmUgNeeri+WNs+eUn+aViCA06ZyA6KaB5omL5Yqo55Sf5pWICiAgICAgICAgICAgICAgICBzYWxlUHJpY2U6IFt7CiAgICAgICAgICAgICAgICAgIHByaWNlOiB0eXBlLnByaWNlLAogICAgICAgICAgICAgICAgICBza3VJZDogaXRlbS5pZCwKICAgICAgICAgICAgICAgICAgdW5pdE5hbWU6IGl0ZW0udW5pdE5hbWUsCiAgICAgICAgICAgICAgICAgIGFkalByaWNldGFnOiB0eXBlLmFkalByaWNldGFnLAogICAgICAgICAgICAgICAgICBsYWRkZXJQcmljZTogdHlwZS5sYWRkZXJQcmljZSB8fCBbXQogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICB9KTsgLy8gfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyDlpJrlsZ7mgKcKICAgICAgICB0aGlzLmdvb2RzX2RhdGEudW5pdERhdGEuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICAgIGl0ZW0ucHJpY2VEYXRhLmZvckVhY2goaXRlbVAgPT4gewogICAgICAgICAgICBpZiAoaXRlbVAuY3VzdG9tZXJUeXBlUHJpY2VPcGVuKSB7CiAgICAgICAgICAgICAgaXRlbVAuY3VzdG9tZXJUeXBlUHJpY2UuZm9yRWFjaCh0eXBlID0+IHsKICAgICAgICAgICAgICAgIC8vIGlmICghdHlwZS5wcmljZUlkKSB7CiAgICAgICAgICAgICAgICB0eXBlUGFyYW1zLnB1c2goewogICAgICAgICAgICAgICAgICBjcmVhdGVVc2VyTmFtZTogdGhpcy51c2VyTmFtZSwKICAgICAgICAgICAgICAgICAgZ29vZHNOYW1lOiB0aGlzLmJhc2VfZm9ybS5nb29kc05hbWUsCiAgICAgICAgICAgICAgICAgIGdvb2RzSWQ6IGdvb2RzSWQsCiAgICAgICAgICAgICAgICAgIHNob3BJZDogdGhpcy5iYXNlX2Zvcm0uc2hvcElkLAogICAgICAgICAgICAgICAgICBzaG9wTmFtZTogdGhpcy5iYXNlX2Zvcm0uc2hvcE5hbWUsCiAgICAgICAgICAgICAgICAgIGN1c3RvbWVyTmFtZTogdHlwZS5uYW1lLAogICAgICAgICAgICAgICAgICBjdXN0b21lclR5cGU6IHR5cGUuaWQsCiAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZTogNSwKICAgICAgICAgICAgICAgICAgLy/osIPku7fljZXnq4vljbPnlJ/mlYhlZmZlY3RpdmUgNeeri+WNs+eUn+aViCA06ZyA6KaB5omL5Yqo55Sf5pWICiAgICAgICAgICAgICAgICAgIHNhbGVQcmljZTogW3sKICAgICAgICAgICAgICAgICAgICBwcmljZTogdHlwZS5wcmljZSwKICAgICAgICAgICAgICAgICAgICBza3VJZDogaXRlbVAuaWQsCiAgICAgICAgICAgICAgICAgICAgdW5pdE5hbWU6IGl0ZW1QLnVuaXROYW1lLAogICAgICAgICAgICAgICAgICAgIGFkalByaWNldGFnOiB0eXBlLmFkalByaWNldGFnLAogICAgICAgICAgICAgICAgICAgIGxhZGRlclByaWNlOiB0eXBlLmxhZGRlclByaWNlIHx8IFtdCiAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9KTsgLy8gfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXRlbVAuY3VzdG9tZXJQcmljZU9wZW4pIHsKICAgICAgICAgICAgICBpdGVtUC5jdXN0b21lclByaWNlLmZvckVhY2godHlwZSA9PiB7CiAgICAgICAgICAgICAgICAvLyBpZiAoIXR5cGUucHJpY2VJZCkgewogICAgICAgICAgICAgICAgY3VzdG9tZXJQYXJhbXMucHVzaCh7CiAgICAgICAgICAgICAgICAgIGNyZWF0ZVVzZXJOYW1lOiB0aGlzLnVzZXJOYW1lLAogICAgICAgICAgICAgICAgICBnb29kc05hbWU6IHRoaXMuYmFzZV9mb3JtLmdvb2RzTmFtZSwKICAgICAgICAgICAgICAgICAgZ29vZHNJZDogZ29vZHNJZCwKICAgICAgICAgICAgICAgICAgc2hvcElkOiB0aGlzLmJhc2VfZm9ybS5zaG9wSWQsCiAgICAgICAgICAgICAgICAgIHNob3BOYW1lOiB0aGlzLmJhc2VfZm9ybS5zaG9wTmFtZSwKICAgICAgICAgICAgICAgICAgY3VzdG9tZXJOYW1lOiB0eXBlLm5hbWUsCiAgICAgICAgICAgICAgICAgIGN1c3RvbWVySWQ6IHR5cGUuaWQsCiAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZTogNSwKICAgICAgICAgICAgICAgICAgLy/osIPku7fljZXnq4vljbPnlJ/mlYhlZmZlY3RpdmUgNeeri+WNs+eUn+aViCA06ZyA6KaB5omL5Yqo55Sf5pWICiAgICAgICAgICAgICAgICAgIHNhbGVQcmljZTogW3sKICAgICAgICAgICAgICAgICAgICBwcmljZTogdHlwZS5wcmljZSwKICAgICAgICAgICAgICAgICAgICBza3VJZDogaXRlbVAuaWQsCiAgICAgICAgICAgICAgICAgICAgdW5pdE5hbWU6IGl0ZW1QLnVuaXROYW1lLAogICAgICAgICAgICAgICAgICAgIGFkalByaWNldGFnOiB0eXBlLmFkalByaWNldGFnLAogICAgICAgICAgICAgICAgICAgIGxhZGRlclByaWNlOiB0eXBlLmxhZGRlclByaWNlIHx8IFtdCiAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9KTsgLy8gfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfSAvL+WuouaIt+exu+WeiwoKCiAgICAgIHR5cGVQYXJhbXMuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICBjb25zdCBpbmRleCA9IHR5cGVQcmljZS5maW5kSW5kZXgocHJpY2UgPT4gcHJpY2UuY3VzdG9tZXJUeXBlID09PSBpdGVtLmN1c3RvbWVyVHlwZSk7CgogICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsKICAgICAgICAgIHR5cGVQcmljZS5wdXNoKHsgLi4uaXRlbQogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHR5cGVQcmljZVtpbmRleF0uc2FsZVByaWNlID0gdHlwZVByaWNlW2luZGV4XS5zYWxlUHJpY2UuY29uY2F0KGl0ZW0uc2FsZVByaWNlKTsKICAgICAgICB9CiAgICAgIH0pOyAvL+WuouaIt+S7t+agvAoKICAgICAgY3VzdG9tZXJQYXJhbXMuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICBjb25zdCBpbmRleCA9IGN1c3RvbWVyUHJpY2UuZmluZEluZGV4KHByaWNlID0+IHByaWNlLmN1c3RvbWVySWQgPT09IGl0ZW0uY3VzdG9tZXJJZCk7CgogICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsKICAgICAgICAgIGN1c3RvbWVyUHJpY2UucHVzaCh7IC4uLml0ZW0KICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXN0b21lclByaWNlW2luZGV4XS5zYWxlUHJpY2UgPSBjdXN0b21lclByaWNlW2luZGV4XS5zYWxlUHJpY2UuY29uY2F0KGl0ZW0uc2FsZVByaWNlKTsKICAgICAgICB9CiAgICAgIH0pOyAvLyBjb25zb2xlLmxvZygidHlwZVByaWNlIiwgdHlwZVByaWNlKTsKICAgICAgLy8gY29uc29sZS5sb2coImN1c3RvbWVyUHJpY2UiLCBjdXN0b21lclByaWNlKTsKCiAgICAgIGF3YWl0IHRoaXMuYWRkQ3VzdG9tZXJUeXBlUHJpY2VBZGp1c3RtZW50KHR5cGVQcmljZSk7CiAgICAgIGF3YWl0IHRoaXMuQ3VzdG9tZXJQcmljZUFkanVzdG1lbnRBZGQoY3VzdG9tZXJQcmljZSk7CiAgICB9LAoKICAgIC8vIOiOt+WPluaaguWtmOS/oeaBrwogICAgYXN5bmMgZ2V0UGF1c2VTYXZlKCkgewogICAgICBjb25zdCB7CiAgICAgICAgZGF0YQogICAgICB9ID0gYXdhaXQgZ2V0UGF1c2VTYXZlKHsKICAgICAgICBrZXk6IHRoaXMucGFnZU5hbWUKICAgICAgfSk7CiAgICAgIGlmIChKU09OLnN0cmluZ2lmeShkYXRhKSA9PT0gInt9IikgcmV0dXJuOwoKICAgICAgaWYgKGRhdGEuZ29vZHNfZGF0YSkgewogICAgICAgIHRoaXMuZ29vZHNfZGF0YSA9IGRhdGEuZ29vZHNfZGF0YTsKICAgICAgfQoKICAgICAgaWYgKGRhdGEuYmFzZV9mb3JtKSB7CiAgICAgICAgdGhpcy5iYXNlX2Zvcm0gPSBkYXRhLmJhc2VfZm9ybTsKICAgICAgICB0aGlzLnJlZ2lvbl9hcnIgPSB0aGlzLmJhc2VfZm9ybS5ub3RBcmVhOwogICAgICB9CgogICAgICBpZiAoZGF0YS5wcmljZSkgewogICAgICAgIHRoaXMucHJpY2VfZGF0YSA9IGRhdGEucHJpY2U7CiAgICAgIH0KCiAgICAgIGlmIChkYXRhLnVuaXRfbmFtZV90YWIpIHsKICAgICAgICB0aGlzLnVuaXRfbmFtZV90YWIgPSBkYXRhLnVuaXRfbmFtZV90YWI7CiAgICAgIH0KCiAgICAgIGlmIChkYXRhLmN1c3RvbWVyX2xpc3QpIHsKICAgICAgICB0aGlzLmN1c3RvbWVyX2xpc3QgPSBkYXRhLmN1c3RvbWVyX2xpc3Q7CiAgICAgIH0KICAgIH0sCgogICAgLy8g5Yig6Zmk5pqC5a2Y5L+h5oGvCiAgICBhc3luYyBkZWxQYXVzZVNhdmUodHlwZSkgewogICAgICBjb25zdCBkYXRhID0gZGVsUGF1c2VTYXZlKHsKICAgICAgICBrZXk6IHRoaXMucGFnZU5hbWUKICAgICAgfSk7CgogICAgICBpZiAodHlwZSkgewogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogInN1Y2Nlc3MiLAogICAgICAgICAgbWVzc2FnZTogIua4hemZpOaaguWtmOaIkOWKnyIKICAgICAgICB9KTsKICAgICAgICB0aGlzLiRjbG9zZUN1cnJlbnRHb0VkaXQoIi9nb29kcy9zYWxlL0FkZEdvb2RzIik7CiAgICAgIH0KICAgIH0sCgogICAgLy8g5ZWG5ZOB5pqC5a2YCiAgICBhc3luYyB0ZW1wRGF0YSgpIHsKICAgICAgdGhpcy5zdWJfbG9hZCA9IHRydWU7CgogICAgICB0cnkgewogICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBhZGRQYXVzZVNhdmUoewogICAgICAgICAga2V5OiB0aGlzLnBhZ2VOYW1lLAogICAgICAgICAgZGF0YTogewogICAgICAgICAgICBiYXNlX2Zvcm06IHRoaXMuYmFzZV9mb3JtLAogICAgICAgICAgICBwcmljZTogdGhpcy5wcmljZSwKICAgICAgICAgICAgZ29vZHNfZGF0YTogdGhpcy5nb29kc19kYXRhLAogICAgICAgICAgICB1bml0X25hbWVfdGFiOiB0aGlzLnVuaXRfbmFtZV90YWIsCiAgICAgICAgICAgIGN1c3RvbWVyX2xpc3Q6IHRoaXMuY3VzdG9tZXJfbGlzdAogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHRoaXMuc3ViX2xvYWQgPSBmYWxzZTsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICAgIG1lc3NhZ2U6ICLmmoLlrZjmiJDlip8iCiAgICAgICAgfSk7CgogICAgICAgIGlmICh0aGlzLnN5c3RlbVR5cGUgPT09IDIpIHsKICAgICAgICAgIHRoaXMuJGNsb3NlQ3VycmVudEdvRWRpdCgiL1NpbmdsZVN0b3JlL2dvb2RzL0dvb2RzQWRtaW5pc3RyYXRpb24iKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy4kY2xvc2VDdXJyZW50R29FZGl0KCIvZ29vZHMvc2FsZS9QdWJsaXNoR29vZHMiKTsKICAgICAgICB9CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdGhpcy5zdWJfbG9hZCA9IGZhbHNlOwogICAgICB9CiAgICB9LAoKICAgIC8vIOmAieaLqeWVhuWTgQogICAgYXN5bmMgc2VsR29vZHMocm93LCBiYXNpY0dvb2RzSWQpIHsKICAgICAgY29uc3QgewogICAgICAgIGRhdGEKICAgICAgfSA9IGF3YWl0IGdldEdvb2RzQmFzaWNJbmZvQnlJZChiYXNpY0dvb2RzSWQgfHwgcm93WzBdLmlkLCB7CiAgICAgICAgaXNBZGRHb29kczogNQogICAgICB9KTsKCiAgICAgIGlmICh0aGlzLmdvb2RzX2lkKSB7CiAgICAgICAgdGhpcy5nb29kc19kYXRhID0geyAuLi50aGlzLmdvb2RzX2RhdGEsCiAgICAgICAgICBjYXRlZ29yeVRpdGxlOiBkYXRhLmNhdGVnb3J5VGl0bGUsCiAgICAgICAgICBicmFuZFRpdGxlOiBkYXRhLmJyYW5kVGl0bGUsCiAgICAgICAgICBleHBpcmVUaW1lOiBkYXRhLmV4cGlyZVRpbWUsCiAgICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbiwKICAgICAgICAgIHRhZzogZGF0YS50YWcsCiAgICAgICAgICBtYXN0ZXJVbml0OiBkYXRhLnVuaXREYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmlzTWFzdGVyID09PSA1KSwKICAgICAgICAgIGJyYW5jaFVuaXQ6IGRhdGEudW5pdERhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pc01hc3RlciA9PT0gNCkKICAgICAgICB9OwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgdGhpcy5nb29kc19kYXRhID0geyAuLi5kYXRhLAogICAgICAgIG1hc3RlclVuaXQ6IGRhdGEudW5pdERhdGEuZmluZChpdGVtID0+IGl0ZW0uaXNNYXN0ZXIgPT09IDUpLAogICAgICAgIGJyYW5jaFVuaXQ6IGRhdGEudW5pdERhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pc01hc3RlciA9PT0gNCkKICAgICAgfTsKICAgICAgdGhpcy5iYXNlX2Zvcm0uZ29vZHNOYW1lID0gZGF0YS50aXRsZTsKICAgICAgdGhpcy51bml0X25hbWVfdGFiID0gZGF0YS51bml0RGF0YVswXS51bml0TmFtZTsKICAgICAgdGhpcy5iYXNlX2Zvcm0uaW1hZ2VzID0gZGF0YS5pbWFnZXM7CiAgICAgIHRoaXMuYmFzZV9mb3JtLnNwZWNUeXBlID0gZGF0YS5zcGVjVHlwZTsKICAgICAgdGhpcy5iYXNlX2Zvcm0uY29udGVudCA9IGRhdGEuZGVzY3JpcHRpb247CiAgICAgIHRoaXMuYmFzZV9mb3JtLmdvb2RzQmFzaWNJZCA9IGRhdGEuaWQ7CiAgICAgIGxldCBwcmljZURhdGEgPSBbXTsKICAgICAgY29uc3QgcHJpY2VEYXRhSXRlbSA9IHRoaXMuJF9jb21tb24uZGVlcENsb25lKHByaWNlRGF0YUxpKTsKCiAgICAgIGlmIChkYXRhLnNwZWNUeXBlID09PSAxKSB7CiAgICAgICAgcHJpY2VEYXRhID0gZGF0YS51bml0RGF0YS5tYXAoaXRlbSA9PiB7CiAgICAgICAgICByZXR1cm4geyAuLi5pdGVtLAogICAgICAgICAgICAuLi5wcmljZURhdGFJdGVtLAogICAgICAgICAgICBpc1NhbGU6IDUsCiAgICAgICAgICAgIC8vIOWuouaIt+exu+Wei+WSjOWuouaIt+W/q+mAn+iwg+S7twogICAgICAgICAgICBjdXN0b21lclR5cGVQcmljZTogW10sCiAgICAgICAgICAgIGN1c3RvbWVyVHlwZVByaWNlT3BlbjogZmFsc2UsCiAgICAgICAgICAgIGN1c3RvbWVyUHJpY2U6IFtdLAogICAgICAgICAgICBjdXN0b21lclByaWNlT3BlbjogZmFsc2UKICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5wcmljZV9kYXRhID0gcHJpY2VEYXRhOwogICAgICB9IGVsc2UgaWYgKGRhdGEuc3BlY1R5cGUgPT09IDIpIHsKICAgICAgICB0aGlzLmdvb2RzX2RhdGEudW5pdERhdGEgPSB0aGlzLmdvb2RzX2RhdGEudW5pdERhdGEubWFwKGl0ZW1VID0+IHsKICAgICAgICAgIGNvbnN0IHByaWNlRCA9IGRhdGEuc3BlY011bHRpcGxlLmZpbHRlcihpdGVtRiA9PiBpdGVtRi51bml0SWQgPT09IGl0ZW1VLnVuaXRJZCkubWFwKGl0ZW0gPT4gewogICAgICAgICAgICBjb25zdCBza3VOYW1lID0gaXRlbS5zcGVjR3JvdXAubWFwKGl0ZW1NID0+IHsKICAgICAgICAgICAgICByZXR1cm4gaXRlbU0uc3BlY1ZhbHVlTmFtZTsKICAgICAgICAgICAgfSkuam9pbigiXyIpOyAvLyBpdGVtLnNwZWNHcm91cC5mb3JFYWNoKChpdGVtUykgPT4gewogICAgICAgICAgICAvLyAgIGlmIChpdGVtUy5zcGVjSWQgPT09IDExKSB7CiAgICAgICAgICAgIC8vICAgICB0aGlzLmZsYWdTID0gdHJ1ZTsKICAgICAgICAgICAgLy8gICB9CiAgICAgICAgICAgIC8vIH0pOwoKICAgICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSwKICAgICAgICAgICAgICAuLi5wcmljZURhdGFJdGVtLAogICAgICAgICAgICAgIGlzU2FsZTogNSwKICAgICAgICAgICAgICBza3VOYW1lOiBza3VOYW1lLAogICAgICAgICAgICAgIC8vIOWuouaIt+exu+Wei+WSjOWuouaIt+W/q+mAn+iwg+S7twogICAgICAgICAgICAgIGN1c3RvbWVyVHlwZVByaWNlOiBbXSwKICAgICAgICAgICAgICBjdXN0b21lclR5cGVQcmljZU9wZW46IGZhbHNlLAogICAgICAgICAgICAgIGN1c3RvbWVyUHJpY2U6IFtdLAogICAgICAgICAgICAgIGN1c3RvbWVyUHJpY2VPcGVuOiBmYWxzZQogICAgICAgICAgICB9OwogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4geyAuLi5pdGVtVSwKICAgICAgICAgICAgcHJpY2VEYXRhOiBwcmljZUQKICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIGxldCBzcGVjaWZpY2F0aW9uID0gW107CgogICAgICBpZiAocm93WzBdKSB7CiAgICAgICAgaWYgKHJvd1swXS5zcGVjVHlwZSA9PT0gMSkgewogICAgICAgICAgc3BlY2lmaWNhdGlvbiA9IChyb3dbMF0uYnJhbmNoVW5pdCB8fCBbXSkuY29uY2F0KHJvd1swXS5tYXN0ZXJVbml0KTsKICAgICAgICB9IGVsc2UgaWYgKHJvd1swXS5zcGVjVHlwZSA9PT0gMikgewogICAgICAgICAgc3BlY2lmaWNhdGlvbiA9IHJvd1swXS5zcGVjTXVsdGlwbGU7CiAgICAgICAgfQogICAgICB9CgogICAgICB0aGlzLmJhc2VfZm9ybS5zcGVjaWZpY2F0aW9uID0gc3BlY2lmaWNhdGlvbjsKICAgICAgbGV0IGFyciA9ICIiOwogICAgICB0aGlzLnByaWNlX2RhdGEuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICBpZiAoaXRlbS5pc01hc3RlciA9PT0gNSkgewogICAgICAgICAgYXJyID0gaXRlbS51bml0TmFtZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnByaW1hcnlfdW5pdCA9IGFycjsKICAgIH0sCgogICAgLy8g6YCJ5oup5ZWG6ZO6CiAgICBzZWxDaG9zZSh2YWwsIHJvdykgewogICAgICB0aGlzLmJhc2VfZm9ybS5zaG9wSWQgPSByb3dbMF0uaWQ7CiAgICAgIHRoaXMuYmFzZV9mb3JtLnNob3BOYW1lID0gcm93WzBdLm5hbWU7CiAgICB9LAoKICAgIC8vIOWcsOWMuumAieaLqQogICAgc2VsUmVnaW9uKHJvdykgewogICAgICB0aGlzLmJhc2VfZm9ybS5ub3RBcmVhID0gcm93Lm1hcChpdGVtID0+IHsKICAgICAgICByZXR1cm4gaXRlbS5jb2RlUGF0aDsKICAgICAgfSk7CiAgICB9LAoKICAgIC8vIOiOt+WPluWuouaIt+exu+WeiwogICAgYXN5bmMgZ2V0QWxsQ3VzdG9tZXJTb3VyY2UoKSB7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRBbGxDdXN0b21lclNvdXJjZSh7CiAgICAgICAgcGFnZTogMSwKICAgICAgICBwYWdlU2l6ZTogNTAKICAgICAgfSk7CiAgICAgIHRoaXMuY3VzdG9tZXJfdHlwZV9saXN0ID0gZGF0YS5kYXRhOwogICAgfSwKCiAgICAvLyDpgInmi6nlrqLmiLcKICAgIGN1c3RvbWVyU2VsKHZhbCkgewogICAgICB0aGlzLmN1c3RvbWVyX2xpc3QgPSB2YWw7CiAgICB9LAoKICAgIC8vIOWIoOmZpOWuouaItwogICAgZGVsZXRlQ3VzdG9tZXIoaW5kZXgpIHsKICAgICAgdGhpcy5jdXN0b21lcl9saXN0LnNwbGljZShpbmRleCwgMSk7CiAgICB9LAoKICAgIC8vIOS7t+agvOazouWKqOWbvgogICAgb3JkZXJEYXRlKCkgewogICAgICBjb25zb2xlLmxvZyh0aGlzLnRpbWUpOwogICAgfSwKCiAgICAvLyDmiZPlvIDmjIflrprku7flvLnnqpcKICAgIG9wZW5Nb2RhbChpbmRleCwga2V5LCByb3csIGluZGV4VSkgewogICAgICAvLyDojrflj5bpmLbmoq/ku7fmlbDmja7vvIzlgZrpmLbmoq/ku7fosIPku7cKICAgICAgaWYgKHJvdykgewogICAgICAgIHRoaXMudW5pdGlzTWFzdGVyID0gcm93LmlzTWFzdGVyOwogICAgICAgIHRoaXMuc2t1X2lkID0gcm93LmlkOwogICAgICAgIHRoaXMubGFkZGVyUHJpY2UgPSByb3cubGFkZGVyUHJpY2U7CiAgICAgICAgdGhpcy5lbmFibGVkTGFkZGVyID0gcm93LmVuYWJsZWRMYWRkZXI7CgogICAgICAgIGlmIChrZXkgPT09ICJ0eXBlX3ByaWNlX3Nob3ciKSB7CiAgICAgICAgICAvLyDlrqLmiLfnsbvlnovmjIflrprku7fosIPku7fmlbDmja4KICAgICAgICAgIHRoaXMuY3VzdG9tZXJUeXBlUHJpY2VPcGVuID0gcm93LmN1c3RvbWVyVHlwZVByaWNlT3BlbjsKICAgICAgICAgIHRoaXMuY3VzdG9tZXJUeXBlUHJpY2UgPSByb3cuY3VzdG9tZXJUeXBlUHJpY2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoa2V5ID09PSAiYXBwb2ludF9wcmljZV9zaG93IikgewogICAgICAgICAgLy8g5a6i5oi35oyH5a6a5Lu36LCD5Lu35pWw5o2uCiAgICAgICAgICB0aGlzLmN1c3RvbWVyUHJpY2VPcGVuID0gcm93LmN1c3RvbWVyUHJpY2VPcGVuOwogICAgICAgICAgdGhpcy5jdXN0b21lclByaWNlID0gcm93LmN1c3RvbWVyUHJpY2U7CiAgICAgICAgfQogICAgICB9CgogICAgICB0aGlzLnNrdV9pbmRleCA9IGluZGV4OwoKICAgICAgaWYgKGluZGV4VSA+IC0xKSB7CiAgICAgICAgdGhpcy51bml0X2luZGV4ID0gaW5kZXhVOwogICAgICB9CgogICAgICB0aGlzW2tleV0gPSB0cnVlOwogICAgfSwKCiAgICAvLyDmjIflrprku7fmlbDmja7noa7lrpoKICAgIGFwcG9pbnRQcmljZUNvbmZpcm0oY3VzdG9tZXJQcmljZU9wZW4sIGN1c3RvbWVyUHJpY2UpIHsKICAgICAgaWYgKHRoaXMuZ29vZHNfZGF0YS5zcGVjVHlwZSA9PT0gMSkgewogICAgICAgIC8vIOWNleinhOagvAogICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJF9jb21tb24uZGVlcENsb25lKHRoaXMucHJpY2VfZGF0YSk7CiAgICAgICAgdGFyZ2V0W3RoaXMuc2t1X2luZGV4XS5jdXN0b21lclByaWNlT3BlbiA9IGN1c3RvbWVyUHJpY2VPcGVuOwogICAgICAgIHRhcmdldFt0aGlzLnNrdV9pbmRleF0uY3VzdG9tZXJQcmljZSA9IGN1c3RvbWVyUHJpY2VPcGVuID8gY3VzdG9tZXJQcmljZSA6IFtdOwogICAgICAgIHRoaXMucHJpY2VfZGF0YSA9IHRhcmdldDsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyDlpJrop4TmoLwKICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLmdvb2RzX2RhdGEudW5pdERhdGEpOwogICAgICAgIHRhcmdldFt0aGlzLnVuaXRfaW5kZXhdLnByaWNlRGF0YVt0aGlzLnNrdV9pbmRleF0uY3VzdG9tZXJQcmljZU9wZW4gPSBjdXN0b21lclByaWNlT3BlbjsKICAgICAgICB0YXJnZXRbdGhpcy51bml0X2luZGV4XS5wcmljZURhdGFbdGhpcy5za3VfaW5kZXhdLmN1c3RvbWVyUHJpY2UgPSBjdXN0b21lclByaWNlT3BlbiA/IGN1c3RvbWVyUHJpY2UgOiBbXTsKICAgICAgICB0aGlzLmdvb2RzX2RhdGEudW5pdERhdGEgPSB0YXJnZXQ7CiAgICAgIH0KICAgIH0sCgogICAgLy8g5oyH5a6a5Lu35pWw5o2u5Y+W5raICiAgICBhc3luYyBhcHBvaW50UHJpY2VDYW5jZWwoY3VzdG9tZXJQcmljZU9wZW4sIGN1c3RvbWVyUHJpY2UpIHsKICAgICAgdGhpcy5hcHBvaW50X3ByaWNlX3Nob3cgPSBmYWxzZTsKCiAgICAgIGlmICh0aGlzLiRyb3V0ZS5wYXJhbXMuaWQpIHsKICAgICAgICBhd2FpdCB0aGlzLmFwcG9pbnRQcmljZUNvbmZpcm0oY3VzdG9tZXJQcmljZU9wZW4sIGN1c3RvbWVyUHJpY2UpOwogICAgICB9CiAgICB9LAoKICAgIC8vIOWuouaIt+exu+Wei+S7t+iuvue9rgogICAgdHlwZVByaWNlQ29uZmlybShjdXN0b21lclR5cGVQcmljZU9wZW4sIGN1c3RvbWVyVHlwZVByaWNlKSB7CiAgICAgIGlmICh0aGlzLmdvb2RzX2RhdGEuc3BlY1R5cGUgPT09IDEpIHsKICAgICAgICAvLyDljZXop4TmoLwKICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLnByaWNlX2RhdGEpOwogICAgICAgIHRhcmdldFt0aGlzLnNrdV9pbmRleF0uY3VzdG9tZXJUeXBlUHJpY2VPcGVuID0gY3VzdG9tZXJUeXBlUHJpY2VPcGVuOwogICAgICAgIHRhcmdldFt0aGlzLnNrdV9pbmRleF0uY3VzdG9tZXJUeXBlUHJpY2UgPSBjdXN0b21lclR5cGVQcmljZU9wZW4gPyBjdXN0b21lclR5cGVQcmljZSA6IFtdOwogICAgICAgIHRoaXMucHJpY2VfZGF0YSA9IHRhcmdldDsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyDlpJrop4TmoLwKICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLmdvb2RzX2RhdGEudW5pdERhdGEpOwogICAgICAgIHRhcmdldFt0aGlzLnVuaXRfaW5kZXhdLnByaWNlRGF0YVt0aGlzLnNrdV9pbmRleF0uY3VzdG9tZXJUeXBlUHJpY2VPcGVuID0gY3VzdG9tZXJUeXBlUHJpY2VPcGVuOwogICAgICAgIHRhcmdldFt0aGlzLnVuaXRfaW5kZXhdLnByaWNlRGF0YVt0aGlzLnNrdV9pbmRleF0uY3VzdG9tZXJUeXBlUHJpY2UgPSBjdXN0b21lclR5cGVQcmljZU9wZW4gPyBjdXN0b21lclR5cGVQcmljZSA6IFtdOwogICAgICAgIHRoaXMuZ29vZHNfZGF0YS51bml0RGF0YSA9IHRhcmdldDsKICAgICAgfQogICAgfSwKCiAgICAvLyDlrqLmiLfnsbvlnovku7fmlbDmja7lj5bmtogKICAgIGFzeW5jIHR5cGVQcmljZUNhbmNlbChjdXN0b21lclR5cGVQcmljZU9wZW4sIGN1c3RvbWVyVHlwZVByaWNlKSB7CiAgICAgIHRoaXMudHlwZV9wcmljZV9zaG93ID0gZmFsc2U7CgogICAgICBpZiAodGhpcy4kcm91dGUucGFyYW1zLmlkKSB7CiAgICAgICAgLy/ojrflj5bmjIflrprllYblk4HnmoTmnIDlkI7nlJ/mlYjnmoTlrqLmiLfnsbvlnovosIPku7fmlbDmja4KICAgICAgICBhd2FpdCB0aGlzLnR5cGVQcmljZUNvbmZpcm0oY3VzdG9tZXJUeXBlUHJpY2VPcGVuLCBjdXN0b21lclR5cGVQcmljZSk7CiAgICAgIH0KICAgIH0sCgogICAgLy8g6Zi25qKv5Lu36K6+572uCiAgICBsYWRkZXJQcmljZUNvbmZpcm0oZW5hYmxlZExhZGRlciwgbGFkZGVyUHJpY2UpIHsKICAgICAgaWYgKHRoaXMuZ29vZHNfZGF0YS5zcGVjVHlwZSA9PT0gMSkgewogICAgICAgIC8vIOWNleinhOagvAogICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJF9jb21tb24uZGVlcENsb25lKHRoaXMucHJpY2VfZGF0YSk7IC8vIGlmICh0aGlzLmdvb2RzX2RhdGEuaXNFcSA9PT0gNSkgewogICAgICAgIC8vICAgLy8g5oqE56CB5ZWG5ZOB5qC55o2u5q+U5L6L6Ieq5Yqo5o2i566X6ZSA5ZSu5Lu3CiAgICAgICAgLy8gICB0YXJnZXQuZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICAgIC8vICAgICBpdGVtLmVuYWJsZWRMYWRkZXIgPSBlbmFibGVkTGFkZGVyOwogICAgICAgIC8vICAgICBpZiAoZW5hYmxlZExhZGRlcikgewogICAgICAgIC8vICAgICAgIGlmIChpdGVtLmNvbnZlcnNpb24gJiYgaXRlbS5pc01hc3RlciA9PT0gNCkgewogICAgICAgIC8vICAgICAgICAgaXRlbS5sYWRkZXJQcmljZSA9IGxhZGRlclByaWNlLm1hcCgobGFkZGVyKSA9PiB7CiAgICAgICAgLy8gICAgICAgICAgIHJldHVybiB7CiAgICAgICAgLy8gICAgICAgICAgICAgLi4ubGFkZGVyLAogICAgICAgIC8vICAgICAgICAgICAgIHByaWNlOiB0aGlzLiROUC50aW1lcyhsYWRkZXIucHJpY2UsIGl0ZW0uY29udmVyc2lvbiksCiAgICAgICAgLy8gICAgICAgICAgIH07CiAgICAgICAgLy8gICAgICAgICB9KTsKICAgICAgICAvLyAgICAgICB9IGVsc2UgewogICAgICAgIC8vICAgICAgICAgaXRlbS5sYWRkZXJQcmljZSA9IGxhZGRlclByaWNlOwogICAgICAgIC8vICAgICAgIH0KICAgICAgICAvLyAgICAgfSBlbHNlIHsKICAgICAgICAvLyAgICAgICBpdGVtLmxhZGRlclByaWNlID0gW107CiAgICAgICAgLy8gICAgIH0KICAgICAgICAvLyAgIH0pOwogICAgICAgIC8vIH0gZWxzZSB7CiAgICAgICAgLy8gICB0YXJnZXRbdGhpcy5za3VfaW5kZXhdLmVuYWJsZWRMYWRkZXIgPSBlbmFibGVkTGFkZGVyOwogICAgICAgIC8vICAgdGFyZ2V0W3RoaXMuc2t1X2luZGV4XS5sYWRkZXJQcmljZSA9IGVuYWJsZWRMYWRkZXIKICAgICAgICAvLyAgICAgPyBsYWRkZXJQcmljZQogICAgICAgIC8vICAgICA6IFtdOwogICAgICAgIC8vIH0KCiAgICAgICAgdGFyZ2V0W3RoaXMuc2t1X2luZGV4XS5lbmFibGVkTGFkZGVyID0gZW5hYmxlZExhZGRlcjsKICAgICAgICB0YXJnZXRbdGhpcy5za3VfaW5kZXhdLmxhZGRlclByaWNlID0gZW5hYmxlZExhZGRlciA/IGxhZGRlclByaWNlIDogW107CiAgICAgICAgdGhpcy5wcmljZV9kYXRhID0gdGFyZ2V0OwogICAgICB9IGVsc2UgewogICAgICAgIC8vIOWkmuinhOagvAogICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJF9jb21tb24uZGVlcENsb25lKHRoaXMuZ29vZHNfZGF0YS51bml0RGF0YSk7CiAgICAgICAgdGFyZ2V0W3RoaXMudW5pdF9pbmRleF0ucHJpY2VEYXRhW3RoaXMuc2t1X2luZGV4XS5lbmFibGVkTGFkZGVyID0gZW5hYmxlZExhZGRlcjsKICAgICAgICB0YXJnZXRbdGhpcy51bml0X2luZGV4XS5wcmljZURhdGFbdGhpcy5za3VfaW5kZXhdLmxhZGRlclByaWNlID0gZW5hYmxlZExhZGRlciA/IGxhZGRlclByaWNlIDogW107CiAgICAgICAgdGhpcy5nb29kc19kYXRhLnVuaXREYXRhID0gdGFyZ2V0OwogICAgICB9CiAgICB9LAoKICAgIGxhZGRlclByaWNlQ2FuY2VsKCkgewogICAgICB0aGlzLmxhZGRlcl9wcmljZV9zaG93ID0gZmFsc2U7CiAgICB9LAoKICAgIC8vIOWuouaIt+iwg+S7t+WNlQogICAgYXN5bmMgQ3VzdG9tZXJQcmljZUFkanVzdG1lbnRBZGQocGFyYW1zKSB7CiAgICAgIGlmICghcGFyYW1zLmxlbmd0aCkgcmV0dXJuOwogICAgICBjb25zdCB7CiAgICAgICAgZGF0YQogICAgICB9ID0gYXdhaXQgQ3VzdG9tZXJQcmljZUFkanVzdG1lbnRBZGQocGFyYW1zKTsKICAgIH0sCgogICAgLy8g5a6i5oi357G75Z6L6LCD5Lu35Y2VCiAgICBhc3luYyBhZGRDdXN0b21lclR5cGVQcmljZUFkanVzdG1lbnQocGFyYW1zKSB7CiAgICAgIGlmICghcGFyYW1zLmxlbmd0aCkgcmV0dXJuOwogICAgICBjb25zdCB7CiAgICAgICAgZGF0YQogICAgICB9ID0gYXdhaXQgYWRkQ3VzdG9tZXJUeXBlUHJpY2VBZGp1c3RtZW50KHBhcmFtcyk7CiAgICB9LAoKICAgIGFzeW5jIGdldEFsbEdvb2RzU3VwcG9ydCgpIHsKICAgICAgY29uc3QgewogICAgICAgIGRhdGEsCiAgICAgICAgcGFnZVRvdGFsCiAgICAgIH0gPSBhd2FpdCBnZXRBbGxHb29kc1N1cHBvcnQoewogICAgICAgIHBhZ2U6IHRoaXMucGFnZSwKICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZQogICAgICB9KTsKICAgICAgdGhpcy50YWJsZURhdGEgPSBkYXRhOwogICAgICB0aGlzLnRvdGFsID0gcGFnZVRvdGFsOwogICAgfSwKCiAgICB0b2dnbGVTZWxlY3Rpb24oKSB7CiAgICAgIGxldCBhcnIgPSBbXTsKICAgICAgdGhpcy5nb29kc19kYXRhLnN1cHBvcnQuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICBhcnIucHVzaChOdW1iZXIoaXRlbSkpOwogICAgICB9KTsKICAgICAgdGhpcy5jaG9vc2Vfc3VwcG9ydCA9IGFycjsKICAgIH0sCgogICAgLy8g5ZWG5ZOB57uECiAgICBhc3luYyBnZXRBbGxHb29kc0dyb3VwcygpIHsKICAgICAgY29uc3QgewogICAgICAgIGRhdGEKICAgICAgfSA9IGF3YWl0IGdldEFsbEdvb2RzR3JvdXBzKHsKICAgICAgICBwYWdlOiAxLAogICAgICAgIHBhZ2VTaXplOiA5OTksCiAgICAgICAgbmFtZTogIiIKICAgICAgfSk7CiAgICAgIHRoaXMuZ29vZHNfZ3JvdXBzID0gZGF0YTsKICAgIH0sCgogICAgLy8g6I635Y+W5oyH5a6a5ZWG5ZOB55qE5pyA5ZCO55Sf5pWI55qE5a6i5oi36LCD5Lu35Y2V5pWw5o2uCiAgICBhc3luYyBnZXRDdXN0b21lclByaWNlQnlHb29kc0lkcygpIHsKICAgICAgY29uc3QgewogICAgICAgIGRhdGEsCiAgICAgICAgcGFnZVRvdGFsCiAgICAgIH0gPSBhd2FpdCBnZXRDdXN0b21lclByaWNlQnlHb29kc0lkcyh7CiAgICAgICAgZ29vZHNJZDogdGhpcy5nb29kc19pZCwKICAgICAgICBwYWdlOiAxLAogICAgICAgIHBhZ2VTaXplOiAyMDAKICAgICAgfSk7CiAgICAgIHRoaXMuY3VzdG9tZXJQcmljZSA9IGRhdGE7CiAgICB9LAoKICAgIC8vIOiOt+WPluaMh+WumuWVhuWTgeeahOacgOWQjueUn+aViOeahOWuouaIt+exu+Wei+iwg+S7t+aVsOaNrgogICAgYXN5bmMgZ2V0Q3VzdG9tZXJUeXBlUHJpY2VCeUdvb2RzSWRzKCkgewogICAgICBjb25zdCB7CiAgICAgICAgZGF0YQogICAgICB9ID0gYXdhaXQgZ2V0Q3VzdG9tZXJUeXBlUHJpY2VCeUdvb2RzSWRzKHsKICAgICAgICBnb29kc0lkOiB0aGlzLmdvb2RzX2lkLAogICAgICAgIHBhZ2U6IDEsCiAgICAgICAgcGFnZVNpemU6IDk5OQogICAgICB9KTsKICAgICAgdGhpcy5jdXN0b21lclR5cGVQcmljZSA9IGRhdGE7CiAgICAgIHRoaXMuYWRqdXN0bWVudERhdGEoKTsKICAgIH0sCgogICAgYWRqdXN0bWVudERhdGEoKSB7CiAgICAgIGlmICh0aGlzLmJhc2VfZm9ybS5zcGVjVHlwZSA9PT0gMSkgewogICAgICAgIHRoaXMucHJpY2VfZGF0YSA9IHRoaXMucHJpY2VfZGF0YS5tYXAoaXRlbSA9PiB7CiAgICAgICAgICAvL+WuouaIt+exu+Wei+S7twogICAgICAgICAgbGV0IGN1c3RvbWVyVHlwZVByaWNlID0gW107CiAgICAgICAgICB0aGlzLmN1c3RvbWVyVHlwZVByaWNlLmZvckVhY2godHlwZSA9PiB7CiAgICAgICAgICAgIGlmICh0eXBlLnNhbGVQcmljZSAmJiB0eXBlLnNhbGVQcmljZS5sZW5ndGgpIHsKICAgICAgICAgICAgICB0eXBlLnNhbGVQcmljZS5mb3JFYWNoKHBpdGVtID0+IHsKICAgICAgICAgICAgICAgIGlmIChwaXRlbS5za3VJZCA9PT0gaXRlbS5pZCkgewogICAgICAgICAgICAgICAgICBjdXN0b21lclR5cGVQcmljZS5wdXNoKHsKICAgICAgICAgICAgICAgICAgICBhZGpQcmljZXRhZzogcGl0ZW0uYWRqUHJpY2V0YWcsCiAgICAgICAgICAgICAgICAgICAgbGFkZGVyUHJpY2U6IHBpdGVtLmxhZGRlclByaWNlLAogICAgICAgICAgICAgICAgICAgIHByaWNlOiBwaXRlbS5wcmljZSwKICAgICAgICAgICAgICAgICAgICBuYW1lOiB0eXBlLmN1c3RvbWVyVHlwZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgaWQ6IHR5cGUuY3VzdG9tZXJUeXBlLAogICAgICAgICAgICAgICAgICAgIHByaWNlSWQ6IHR5cGUuaWQKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOyAvL+WuouaIt+S7twoKICAgICAgICAgIGxldCBjdXN0b21lclByaWNlID0gW107CiAgICAgICAgICB0aGlzLmN1c3RvbWVyUHJpY2UuZm9yRWFjaCh0eXBlID0+IHsKICAgICAgICAgICAgaWYgKHR5cGUuc2FsZVByaWNlICYmIHR5cGUuc2FsZVByaWNlLmxlbmd0aCkgewogICAgICAgICAgICAgIHR5cGUuc2FsZVByaWNlLmZvckVhY2gocGl0ZW0gPT4gewogICAgICAgICAgICAgICAgaWYgKHBpdGVtLnNrdUlkID09PSBpdGVtLmlkKSB7CiAgICAgICAgICAgICAgICAgIGN1c3RvbWVyUHJpY2UucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgYWRqUHJpY2V0YWc6IHBpdGVtLmFkalByaWNldGFnLAogICAgICAgICAgICAgICAgICAgIGxhZGRlclByaWNlOiBwaXRlbS5sYWRkZXJQcmljZSwKICAgICAgICAgICAgICAgICAgICBwcmljZTogcGl0ZW0ucHJpY2UsCiAgICAgICAgICAgICAgICAgICAgbmFtZTogdHlwZS5jdXN0b21lck5hbWUsCiAgICAgICAgICAgICAgICAgICAgaWQ6IHR5cGUuY3VzdG9tZXJJZCwKICAgICAgICAgICAgICAgICAgICBwcmljZUlkOiB0eXBlLmlkCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0sCiAgICAgICAgICAgIC8vIOWuouaIt+exu+Wei+WSjOWuouaIt+W/q+mAn+iwg+S7twogICAgICAgICAgICBjdXN0b21lclR5cGVQcmljZTogY3VzdG9tZXJUeXBlUHJpY2UsCiAgICAgICAgICAgIGN1c3RvbWVyVHlwZVByaWNlT3BlbjogY3VzdG9tZXJUeXBlUHJpY2UubGVuZ3RoID4gMCwKICAgICAgICAgICAgY3VzdG9tZXJQcmljZTogY3VzdG9tZXJQcmljZSwKICAgICAgICAgICAgY3VzdG9tZXJQcmljZU9wZW46IGN1c3RvbWVyUHJpY2UubGVuZ3RoID4gMAogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmdvb2RzX2RhdGEudW5pdERhdGEgPSB0aGlzLmdvb2RzX2RhdGEudW5pdERhdGEubWFwKGl0ZW1VID0+IHsKICAgICAgICAgIHJldHVybiB7IC4uLml0ZW1VLAogICAgICAgICAgICBwcmljZURhdGE6IGl0ZW1VLnByaWNlRGF0YS5tYXAoaXRlbSA9PiB7CiAgICAgICAgICAgICAgLy/lrqLmiLfnsbvlnovku7cKICAgICAgICAgICAgICBsZXQgY3VzdG9tZXJUeXBlUHJpY2UgPSBbXTsKICAgICAgICAgICAgICB0aGlzLmN1c3RvbWVyVHlwZVByaWNlLmZvckVhY2godHlwZSA9PiB7CiAgICAgICAgICAgICAgICBpZiAodHlwZS5zYWxlUHJpY2UgJiYgdHlwZS5zYWxlUHJpY2UubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgIHR5cGUuc2FsZVByaWNlLmZvckVhY2gocGl0ZW0gPT4gewogICAgICAgICAgICAgICAgICAgIGlmIChwaXRlbS5za3VJZCA9PT0gaXRlbS5pZCkgewogICAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXJUeXBlUHJpY2UucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkalByaWNldGFnOiBwaXRlbS5hZGpQcmljZXRhZywKICAgICAgICAgICAgICAgICAgICAgICAgbGFkZGVyUHJpY2U6IHBpdGVtLmxhZGRlclByaWNlLAogICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogcGl0ZW0ucHJpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHR5cGUuY3VzdG9tZXJUeXBlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHR5cGUuY3VzdG9tZXJUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICBwcmljZUlkOiB0eXBlLmlkCiAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOyAvL+WuouaIt+S7twoKICAgICAgICAgICAgICBsZXQgY3VzdG9tZXJQcmljZSA9IFtdOwogICAgICAgICAgICAgIHRoaXMuY3VzdG9tZXJQcmljZS5mb3JFYWNoKHR5cGUgPT4gewogICAgICAgICAgICAgICAgaWYgKHR5cGUuc2FsZVByaWNlICYmIHR5cGUuc2FsZVByaWNlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICB0eXBlLnNhbGVQcmljZS5mb3JFYWNoKHBpdGVtID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAocGl0ZW0uc2t1SWQgPT09IGl0ZW0uaWQpIHsKICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbWVyUHJpY2UucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkalByaWNldGFnOiBwaXRlbS5hZGpQcmljZXRhZywKICAgICAgICAgICAgICAgICAgICAgICAgbGFkZGVyUHJpY2U6IHBpdGVtLmxhZGRlclByaWNlLAogICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogcGl0ZW0ucHJpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHR5cGUuY3VzdG9tZXJOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBpZDogdHlwZS5jdXN0b21lcklkLAogICAgICAgICAgICAgICAgICAgICAgICBwcmljZUlkOiB0eXBlLmlkCiAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0sCiAgICAgICAgICAgICAgICBjdXN0b21lclR5cGVQcmljZTogY3VzdG9tZXJUeXBlUHJpY2UsCiAgICAgICAgICAgICAgICBjdXN0b21lclR5cGVQcmljZU9wZW46IGN1c3RvbWVyVHlwZVByaWNlLmxlbmd0aCA+IDAsCiAgICAgICAgICAgICAgICBjdXN0b21lclByaWNlOiBjdXN0b21lclByaWNlLAogICAgICAgICAgICAgICAgY3VzdG9tZXJQcmljZU9wZW46IGN1c3RvbWVyUHJpY2UubGVuZ3RoID4gMAogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0pCiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICB9CiAgICB9CgogIH0KfTs="},{"version":3,"mappings":"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A;QACA;UACA;UACA;YACA,oCACA0F,MADA,CACAC,sCADA,EAEAC,GAFA,CAEAR;cACA,+BACAQ,GADA,CACAC;gBACA;cACA,CAHA,EAIAC,IAJA,CAIA,GAJA,EADA,CAMA;cACA;cACA;cACA;cACA;;cACA,SACA,OADA;gBAEAzH,wBAFA;gBAGA0H,gBAHA;gBAIA;gBACAhG,qBALA;gBAMAD,4BANA;gBAOAG,iBAPA;gBAQAD,wBARA;gBASAgG;cATA;YAWA,CAxBA;YAyBA,SACA,QADA;cAEAC;YAFA;UAIA,CA9BA;QA+BA;MACA,CA3FA,CA4FA;;;MACA;QACA;MACA;;MACA,uBAhGA,CAiGA;;MACA,wCAlGA,CAmGA;;MACA;IACA,CA5NA;;IA6NA;IACAC;MACA;QACA;UACA;;UACA;YACA;YACA;cACAd;gBACAa;kBACAE,YADA;kBAEAC,4BAFA;kBAGAC,wBAHA;kBAIAC,oBAJA;kBAKAC,wBALA;kBAMAC,qCANA;kBAOAzI,kCAPA;kBAQAO,0CARA;kBASAH,0BATA;kBAUAI,8BAVA;kBAWAP,8BAXA;kBAYAC,8BAZA;kBAaAG,oBAbA;kBAcAC,yBAdA;kBAeA2H;gBAfA;cAiBA,CAlBA;YAmBA,CApBA;UAqBA,CAvBA,MAuBA;YACAC,0BACAQ,SADA,CACA,eADA,EAEAb,GAFA,CAEAR;cACA;cACA;cACA;cACA;cACA;YACA,CARA;UASA;;UAEA;UACA;;UACA;YACA;;YACA;cACA;gBACAsB;gBACA;cACA,CAHA,MAGA,IACA,iDADA,EAEA;gBACAC;gBACA;cACA;YACA,CAVA,MAUA;cACA;gBACAA;gBACA;cACA;YACA;UACA;;UACA;YACA;YACA;UACA;;UACA;YACA;YACA;UACA;;UACA;YACA;cACAvB;YACA;;YACA;;YACA;cACA;gBACA;cACA,CAFA;cAGAwB;YACA;;YACA,SACA,OADA;cAEArI,6DAFA;cAGAJ;YAHA;UAKA,CAhBA;UAiBA;UACA;QACA;MACA,CAvFA;IAwFA,CAvTA;;IAwTA;IACA;MACA;MACA;QACA;MACA,CAFA;MAGA;;MACA;QACA;QACA;MACA;;MACA,iBACA,iBADA;QAEAwD,iBAFA;QAGAH,uDAHA;QAIAsB,mDAJA;QAKAC,kCALA;QAMAgB,4BANA;QAOA8C;MAPA;MASA;;MACA;QACA;UACA5B;UACA;UACA;QACA,CAJA,MAIA;UACAA,0BACA,SADA;YAEAnD;UAFA;UAIA;UACA;UACA;QACA;;QACA;UACA1C,eADA;UAEAiC;QAFA;;QAIA;UACA;QACA,CAFA,MAEA;UACA;YACA,+BACA,wCADA;UAGA,CAJA,MAIA;YACA;UACA;QACA;MACA,CA7BA,SA6BA;QACA;MACA;IACA,CA7WA;;IA8WA;IACA;MACA;MACA;MACA;MACA;;MACA;QACA;UACA;YACA+D;cACA;cACA0B;gBACAhF,6BADA;gBAEAP,mCAFA;gBAGApC,gBAHA;gBAIA+C,6BAJA;gBAKAf,iCALA;gBAMA4F,uBANA;gBAOAC,qBAPA;gBAQAC,YARA;gBAQA;gBACA9I,YACA;kBACAwD,iBADA;kBAEAuF,cAFA;kBAGAb,uBAHA;kBAIAc,6BAJA;kBAKA5I;gBALA,CADA;cATA,GAFA,CAqBA;YACA,CAtBA;UAuBA;;UACA;YACA6G;cACA;cACAgC;gBACAtF,6BADA;gBAEAP,mCAFA;gBAGApC,gBAHA;gBAIA+C,6BAJA;gBAKAf,iCALA;gBAMA4F,uBANA;gBAOAM,mBAPA;gBAQAJ,YARA;gBAQA;gBACA9I,YACA;kBACAwD,iBADA;kBAEAuF,cAFA;kBAGAb,uBAHA;kBAIAc,6BAJA;kBAKA5I;gBALA,CADA;cATA,GAFA,CAqBA;YACA,CAtBA;UAuBA;QACA,CAnDA;MAoDA,CArDA,MAqDA;QACA;QACA;UACA6G;YACA;cACAkC;gBACA;gBACAR;kBACAhF,6BADA;kBAEAP,mCAFA;kBAGApC,gBAHA;kBAIA+C,6BAJA;kBAKAf,iCALA;kBAMA4F,uBANA;kBAOAC,qBAPA;kBAQAC,YARA;kBAQA;kBACA9I,YACA;oBACAwD,iBADA;oBAEAuF,eAFA;oBAGAb,wBAHA;oBAIAc,6BAJA;oBAKA5I;kBALA,CADA;gBATA,GAFA,CAqBA;cACA,CAtBA;YAuBA;;YACA;cACA+I;gBACA;gBACAF;kBACAtF,6BADA;kBAEAP,mCAFA;kBAGApC,gBAHA;kBAIA+C,6BAJA;kBAKAf,iCALA;kBAMA4F,uBANA;kBAOAM,mBAPA;kBAQAJ,YARA;kBAQA;kBACA9I,YACA;oBACAwD,iBADA;oBAEAuF,eAFA;oBAGAb,wBAHA;oBAIAc,6BAJA;oBAKA5I;kBALA,CADA;gBATA,GAFA,CAqBA;cACA,CAtBA;YAuBA;UACA,CAnDA;QAoDA,CArDA;MAsDA,CAlHA,CAmHA;;;MACAuI;QACA,kCACAnF,iDADA;;QAGA;UACA4F,iBACA;UADA;QAGA,CAJA,MAIA;UACAA,+DACAnC,cADA;QAGA;MACA,CAbA,EApHA,CAkIA;;MACAgC;QACA,sCACAzF,6CADA;;QAGA;UACA1B,qBACA;UADA;QAGA,CAJA,MAIA;UACAA,+CACAiF,KADA,EAEA/G,SAFA,CAEAqJ,MAFA,CAEApC,cAFA;QAGA;MACA,CAbA,EAnIA,CAkJA;MACA;;MACA;MACA;IACA,CArgBA;;IAsgBA;IACA;MACA;QAAA7F;MAAA;QACAkI;MADA;MAIA;;MACA;QACA;MACA;;MACA;QACA;QACA;MACA;;MACA;QACA;MACA;;MACA;QACA;MACA;;MACA;QACA;MACA;IACA,CA7hBA;;IA8hBA;IACA;MACA;QACAA;MADA;;MAIA;QACA;UACArI,eADA;UAEAiC;QAFA;QAIA;MACA;IACA,CA3iBA;;IA4iBA;IACA;MACA;;MACA;QACA;UACAoG,kBADA;UAEAlI;YACAsC,yBADA;YAEAF,iBAFA;YAGAhB,2BAHA;YAIAF,iCAJA;YAKAL;UALA;QAFA;QAUA;QAEA;UACAhB,eADA;UAEAiC;QAFA;;QAIA;UACA;QACA,CAFA,MAEA;UACA;QACA;MACA,CAtBA,SAsBA;QACA;MACA;IACA,CAxkBA;;IAykBA;IACA;MACA;QAAA9B;MAAA,gCACAD,yBADA,EAEA;QACAoI;MADA,CAFA;;MAOA;QACA,oBACA,kBADA;UAEAC,iCAFA;UAGAC,2BAHA;UAIAC,2BAJA;UAKAC,6BALA;UAMAC,aANA;UAOAC,2DAPA;UAQAC;QARA;QAUA;MACA;;MACA,oBACA,OADA;QAEAD,2DAFA;QAGAC;MAHA;MAKA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;MACA;QACAhC;UACA,SACA,OADA;YAEA,gBAFA;YAGA5H,SAHA;YAIA;YACA0B,qBALA;YAMAD,4BANA;YAOAG,iBAPA;YAQAD;UARA;QAUA,CAXA;QAYA;MACA,CAdA,MAcA;QACA;UACA,iCACA0F,MADA,CACAC,sCADA,EAEAC,GAFA,CAEAR;YACA,+BACAQ,GADA,CACAC;cACA;YACA,CAHA,EAIAC,IAJA,CAIA,GAJA,EADA,CAMA;YACA;YACA;YACA;YACA;;YACA,SACA,OADA;cAEA,gBAFA;cAGAzH,SAHA;cAIA0H,gBAJA;cAKA;cACAhG,qBANA;cAOAD,4BAPA;cAQAG,iBARA;cASAD;YATA;UAWA,CAxBA;UAyBA,SACA,QADA;YAEAiG;UAFA;QAIA,CA9BA;MA+BA;;MACA;;MACA;QACA;UACA3D;QACA,CAFA,MAEA;UACAA;QACA;MACA;;MACA;MACA;MACA;QACA;UACAmD;QACA;MACA,CAJA;MAKA;IACA,CA3qBA;;IA4qBA;IACAyC;MACA;MACA;IACA,CAhrBA;;IAirBA;IACAC;MACA;QACA;MACA,CAFA;IAGA,CAtrBA;;IAurBA;IACA;MACA;QACAvE,OADA;QAEAC;MAFA;MAKA;IACA,CA/rBA;;IAgsBA;IACAuE;MACA;IACA,CAnsBA;;IAosBA;IACAC;MACA;IACA,CAvsBA;;IAwsBA;IACAC;MACA/D;IACA,CA3sBA;;IA4sBA;IACAgE;MACA;MACA;QACA;QACA;QACA;QACA;;QACA;UACA;UACA;UACA;QACA;;QACA;UACA;UACA;UACA;QACA;MACA;;MACA;;MACA;QACA;MACA;;MACA;IACA,CApuBA;;IAquBA;IACAC;MACA;QACA;QACA;QACAvD;QACAA,2DACAhF,aADA,GAEA,EAFA;QAGA;MACA,CARA,MAQA;QACA;QACA;QACAgF,kCACA,cADA,EAEAjF,iBAFA,GAEAA,iBAFA;QAGAiF,kCACA,cADA,EAEAhF,aAFA,GAEAD,sCAFA;QAGA;MACA;IACA,CA1vBA;;IA2vBA;IACA;MACA;;MACA;QACA;MACA;IACA,CAjwBA;;IAkwBA;IACAyI;MACA;QACA;QACA;QACAxD;QACAA,mEACAlF,iBADA,GAEA,EAFA;QAGA;MACA,CARA,MAQA;QACA;QACA;QACAkF,kCACA,cADA,EAEAnF,qBAFA,GAEAA,qBAFA;QAGAmF,kCACA,cADA,EAEAlF,iBAFA,GAEAD,8CAFA;QAGA;MACA;IACA,CAvxBA;;IAwxBA;IACA;MACA;;MACA;QACA;QACA;MACA;IACA,CA/xBA;;IAgyBA;IACA4I;MACA;QACA;QACA,wDAFA,CAGA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QACAzD;QACAA;QACA;MACA,CA/BA,MA+BA;QACA;QACA;QACAA,kCACA,cADA,EAEAlH,aAFA,GAEAA,aAFA;QAGAkH,kCACA,cADA,EAEA1G,WAFA,GAEAR,gCAFA;QAGA;MACA;IACA,CA50BA;;IA60BA4K;MACA;IACA,CA/0BA;;IAg1BA;IACA;MACA;MACA;QAAApJ;MAAA;IACA,CAp1BA;;IAq1BA;IACA;MACA;MACA;QAAAA;MAAA;IACA,CAz1BA;;IA01BA;MACA;QAAAA;QAAAqJ;MAAA;QACAhF,eADA;QAEAC;MAFA;MAIA;MACA;IACA,CAj2BA;;IAk2BAgF;MACA;MACA;QACApD;MACA,CAFA;MAGA;IACA,CAx2BA;;IAy2BA;IACA;MACA;QAAAlG;MAAA;QACAqE,OADA;QAEAC,aAFA;QAGArF;MAHA;MAKA;IACA,CAj3BA;;IAk3BA;IACA;MACA;QAAAe;QAAAqJ;MAAA;QACAzJ,sBADA;QAEAyE,OAFA;QAGAC;MAHA;MAKA;IACA,CA13BA;;IA23BA;IACA;MACA;QAAAtE;MAAA;QACAJ,sBADA;QAEAyE,OAFA;QAGAC;MAHA;MAKA;MACA;IACA,CAp4BA;;IAq4BAiF;MACA;QACA;UACA;UACA;UACA;YACA;cACA1J;gBACA;kBACAW;oBACAoH,8BADA;oBAEA5I,8BAFA;oBAGAoD,kBAHA;oBAIAnD,2BAJA;oBAKA2H,qBALA;oBAMA4C;kBANA;gBAQA;cACA,CAXA;YAYA;UACA,CAfA,EAHA,CAmBA;;UACA;UACA;YACA;cACA3J;gBACA;kBACAa;oBACAkH,8BADA;oBAEA5I,8BAFA;oBAGAoD,kBAHA;oBAIAnD,uBAJA;oBAKA2H,mBALA;oBAMA4C;kBANA;gBAQA;cACA,CAXA;YAYA;UACA,CAfA;UAgBA,SACA,OADA;YAEA;YACAhJ,oCAHA;YAIAD,mDAJA;YAKAG,4BALA;YAMAD;UANA;QAQA,CA7CA;MA8CA,CA/CA,MA+CA;QACA;UACA,SACA,QADA;YAEAiG;cACA;cACA;cACA;gBACA;kBACA7G;oBACA;sBACAW;wBACAoH,8BADA;wBAEA5I,8BAFA;wBAGAoD,kBAHA;wBAIAnD,2BAJA;wBAKA2H,qBALA;wBAMA4C;sBANA;oBAQA;kBACA,CAXA;gBAYA;cACA,CAfA,EAHA,CAmBA;;cACA;cACA;gBACA;kBACA3J;oBACA;sBACAa;wBACAkH,8BADA;wBAEA5I,8BAFA;wBAGAoD,kBAHA;wBAIAnD,uBAJA;wBAKA2H,mBALA;wBAMA4C;sBANA;oBAQA;kBACA,CAXA;gBAYA;cACA,CAfA;cAgBA,SACA,OADA;gBAEAhJ,oCAFA;gBAGAD,mDAHA;gBAIAG,4BAJA;gBAKAD;cALA;YAOA,CA5CA;UAFA;QAgDA,CAjDA;MAkDA;IACA;;EAz+BA;AAlKA","names":["getGoodsInfo","editGoods","addGoods","getGoodsBasicInfoById","getAllGoodsSupport","getAllGoodsGroups","CustomerPriceAdjustmentAdd","addCustomerTypePriceAdjustment","getCustomerPriceByGoodsIds","getCustomerTypePriceByGoodsIds","enabledLadder","marketPrice","memberPrice","costPrice","salePrice","setNum","isSale","salePriceAreaType","ladderPrice","name","components","SelectShop","GoodsWarehouse","RegionTree","ClientListModal","Chart1","CustomerPrice","CustomerTypePrice","LadderPrice","props","goodsId","type","default","basicGoodsId","data","unitisMaster","choose_support","unit_index","sku_index","ladder_price_show","type_price_show","customerTypePriceOpen","customerTypePrice","customerPriceOpen","customerPrice","appoint_price_show","customer_show","customer_list","customer_type_check","customer_type_list","region_arr","page_tabs","unit_name_tab","show_region","goods_data","specType","primary_unit","price_data","show_goods","show_chose","isModel","base_rules","shopName","required","message","trigger","goodsName","deliverySupIds","ruleId","expressFee","price","express_list","base_form","createUserName","enableStatus","isDistribution","goodsBasicId","shopId","images","salesArea","serviceInfo","specification","content","isRecommend","sort","expressType","showExpress","isShield","notArea","notCustomerType","notCustomer","showMinUnitPrice","delivery_form","user_power","goods_id","sub_load","pageName","time_data","goodsNum_data","orderMoney_data","orderNum_data","time","tableData","page","pageSize","total","support","options_value","goods_groups","sku_id","computed","salePriceTimes","systemType","storeData","console","methods","getShop","ranking","businessOverviewShopId","categoryRankingShopId","goodsRankingShopId","supplierRankingShopId","data1","salePriceBlur","target","index","memberPriceBlur","item","shopDefault","otherSetPrice","openShop","openGoodsModel","arr","filter","itemF","map","itemM","join","skuName","minUnitPriceConvert","priceData","checkSub","id","conversion","unitName","unitId","isMaster","deleteStatus","deepClone","ladderPriceLength","isLadderPrice","min","goodsGroups","typeParams","customerName","customerType","effective","skuId","adjPricetag","customerParams","customerId","itemP","typePrice","concat","key","isAddGoods","categoryTitle","brandTitle","expireTime","description","tag","masterUnit","branchUnit","selChose","selRegion","customerSel","deleteCustomer","orderDate","openModal","appointPriceConfirm","typePriceConfirm","ladderPriceConfirm","ladderPriceCancel","pageTotal","toggleSelection","adjustmentData","priceId"],"sourceRoot":"src/views/goods/sale","sources":["AddGoods.vue"],"sourcesContent":["<!--添加基础资料-->\n<template>\n <ContainerTit>\n <span v-if=\"!!goods_id\" slot=\"pagetit\">商品详情</span>\n <span v-if=\"!!basicGoodsId\" slot=\"pagetit\">商品发布</span>\n <div\n v-if=\"\n (!!basicGoodsId || !!goods_id) &&\n $accessCheck($Access.PublishGoodsEditGoods)\n \"\n slot=\"headr\"\n >\n <el-button :loading=\"sub_load\" type=\"primary\" @click=\"checkSub\">\n 提交保存\n </el-button>\n </div>\n <div v-if=\"$route.name === 'AddGoods'\" slot=\"headr\">\n <el-button :loading=\"sub_load\" @click=\"delPauseSave(1)\">\n 清除暂存\n </el-button>\n <el-button :loading=\"sub_load\" @click=\"tempData\">暂存</el-button>\n <el-button :loading=\"sub_load\" type=\"primary\" @click=\"checkSub\">\n 提交保存\n </el-button>\n </div>\n <el-form\n ref=\"base_form\"\n label-position=\"right\"\n :model=\"base_form\"\n :rules=\"base_rules\"\n size=\"small\"\n label-width=\"130px\"\n >\n <div class=\"detail-tab-item\" style=\"padding: 0 20px\">\n <el-tabs v-model=\"page_tabs\">\n <el-tab-pane label=\"商品信息\" name=\"1\"></el-tab-pane>\n <el-tab-pane\n :disabled=\"base_form.isShield === 4\"\n label=\"经营屏蔽\"\n name=\"2\"\n ></el-tab-pane>\n <!-- <el-tab-pane label=\"商品服务\" name=\"4\"></el-tab-pane>-->\n <!--<el-tab-pane\n v-if=\"goods_id\"\n label=\"价格波动图\"\n name=\"3\"\n ></el-tab-pane>-->\n </el-tabs>\n </div>\n <!-- 商品信息-->\n <div v-if=\"page_tabs === '1'\">\n <el-row :gutter=\"10\">\n <el-col :span=\"12\">\n <div class=\"detail-tab-item\">\n <div class=\"detail-tab-title\">基础信息</div>\n <div class=\"detail-tab-main\" style=\"padding-bottom: 1px\">\n <el-form-item\n v-if=\"systemType === 1\"\n label=\"选择店铺:\"\n prop=\"shopName\"\n >\n <SelectShop\n v-model=\"base_form.shopId\"\n :is-default=\"true\"\n :clearable=\"false\"\n :action=\"1\"\n :materiel-id=\"basicGoodsId\"\n @change=\"selChose\"\n @default=\"shopDefault\"\n />\n <el-button size=\"mini\" type=\"text\" @click=\"getShop\">\n 【新建店铺】\n </el-button>\n </el-form-item>\n <el-form-item v-else label=\"当前店铺:\" prop=\"shopName\">\n {{ base_form.shopName }}\n </el-form-item>\n <el-form-item label=\"选择商品:\" prop=\"goodsName\">\n <el-input\n v-if=\"!basicGoodsId\"\n v-model=\"base_form.goodsName\"\n style=\"width: 200px\"\n :disabled=\"!base_form.shopName || !!goods_id\"\n readonly\n placeholder=\"请选择商品\"\n >\n <i\n slot=\"suffix\"\n class=\"el-input__icon el-icon-search\"\n @click=\"openGoodsModel\"\n ></i>\n </el-input>\n <span v-else>{{ base_form.goodsName || \"--\" }}</span>\n </el-form-item>\n <el-form-item label=\"商品分组:\">\n <el-select\n v-model=\"options_value\"\n multiple\n style=\"width: 200px\"\n placeholder=\"请选择\"\n >\n <el-option\n v-for=\"item in goods_groups\"\n :key=\"item.id\"\n :label=\"item.name\"\n :value=\"item.id\"\n ></el-option>\n </el-select>\n </el-form-item>\n <el-form-item label=\"是否上架:\">\n <el-switch\n v-model=\"base_form.enableStatus\"\n active-color=\"#36B365\"\n inactive-color=\"#ff4949\"\n :active-value=\"5\"\n :inactive-value=\"4\"\n active-text=\"上架\"\n inactive-text=\"下架\"\n ></el-switch>\n </el-form-item>\n <el-form-item label=\"负库存销售:\">\n <el-switch\n v-model=\"base_form.isDistribution\"\n active-color=\"#36B365\"\n inactive-color=\"#ff4949\"\n :active-value=\"5\"\n :inactive-value=\"4\"\n active-text=\"启用\"\n inactive-text=\"禁用\"\n ></el-switch>\n </el-form-item>\n <el-form-item label=\"经营屏蔽:\">\n <el-switch\n v-model=\"base_form.isShield\"\n active-color=\"#36B365\"\n inactive-color=\"#ff4949\"\n :active-value=\"5\"\n :inactive-value=\"4\"\n active-text=\"启用\"\n inactive-text=\"禁用\"\n ></el-switch>\n </el-form-item>\n <el-form-item\n v-if=\"goods_data.specType === 2\"\n label=\"重量属性斤价:\"\n >\n <el-switch\n v-model=\"base_form.showMinUnitPrice\"\n active-color=\"#36B365\"\n inactive-color=\"#ff4949\"\n :active-value=\"5\"\n :inactive-value=\"4\"\n active-text=\"显示\"\n inactive-text=\"不显示\"\n ></el-switch>\n <el-tooltip placement=\"right\">\n <div slot=\"content\">\n 根据最小单位换算比例换算当前重量属性每斤价钱\n <br />\n 例如:10公斤=50元换算后1斤=2.5元\n </div>\n <i\n style=\"\n position: absolute;\n top: 30%;\n left: 150px;\n color: rgb(192, 197, 207);\n \"\n class=\"el-icon-question\"\n ></i>\n </el-tooltip>\n </el-form-item>\n </div>\n </div>\n </el-col>\n <el-col :span=\"12\">\n <!-- 物流设置 -->\n <div class=\"detail-tab-item\" style=\"height: 330px\">\n <div class=\"detail-tab-title clearfix\">物流设置</div>\n <div class=\"detail-tab-main\">\n <el-form-item\n v-if=\"false\"\n label=\"物流支持:\"\n prop=\"deliverySupIds\"\n >\n <el-checkbox-group v-model=\"base_form.deliverySupIds\">\n <el-checkbox label=\"1\">快递</el-checkbox>\n <el-checkbox label=\"2\">自提</el-checkbox>\n </el-checkbox-group>\n <p\n v-if=\"!goods_id\"\n class=\"form-tip\"\n @click=\"$router.push('/SystemSettings/jiaoyiset/Delivery')\"\n >\n <el-button type=\"text\" size=\"small\">\n 【配送方式配置】\n </el-button>\n </p>\n </el-form-item>\n <el-form-item label=\"快递运费:\">\n <el-radio-group v-model=\"base_form.expressType\">\n <el-radio :label=\"1\">包邮</el-radio>\n <el-radio :label=\"2\">运费模版</el-radio>\n <el-radio :label=\"3\">统一运费</el-radio>\n </el-radio-group>\n </el-form-item>\n <div v-if=\"base_form.expressType === 2\">\n <el-form-item label=\"运费模板:\" prop=\"ruleId\">\n <el-select v-model=\"base_form.ruleId\" placeholder=\"请选择\">\n <el-option\n v-for=\"(item, index) in express_list\"\n :key=\"index\"\n :label=\"item.title\"\n :value=\"item.id\"\n ></el-option>\n </el-select>\n </el-form-item>\n </div>\n <div v-if=\"base_form.expressType === 3\">\n <el-form-item label=\"统一运费:\" prop=\"expressFee\">\n <el-input\n v-model=\"base_form.expressFee\"\n style=\"width: 200px\"\n type=\"number\"\n :controls=\"false\"\n >\n <el-button slot=\"append\">元</el-button>\n </el-input>\n </el-form-item>\n </div>\n <el-form-item v-if=\"false\" label=\"是否展示快递:\">\n <el-radio-group v-model=\"base_form.showExpress\">\n <el-radio :label=\"4\">不展示</el-radio>\n <el-radio :label=\"5\">展示</el-radio>\n </el-radio-group>\n </el-form-item>\n </div>\n <div class=\"detail-tab-title clearfix\">商品服务</div>\n <div class=\"detail-tab-main\">\n <el-checkbox-group\n v-model=\"choose_support\"\n style=\"margin-left: 25px\"\n >\n <el-checkbox\n v-for=\"(item, index) in tableData\"\n :key=\"index\"\n :label=\"item.id\"\n >\n {{ item.servicesName }}\n <el-tooltip\n class=\"item\"\n effect=\"dark\"\n :content=\"item.describe\"\n placement=\"top\"\n >\n <span\n class=\"el-icon-question\"\n style=\"color: rgb(96, 98, 102)\"\n ></span>\n </el-tooltip>\n </el-checkbox>\n </el-checkbox-group>\n </div>\n </div>\n </el-col>\n </el-row>\n\n <!-- 无属性价格管理-->\n <div v-if=\"goods_data.specType === 1\" class=\"detail-tab-item\">\n <div class=\"detail-tab-title clearfix\">价格管理</div>\n <div class=\"detail-tab-main\">\n <el-table border :data=\"price_data\">\n <el-table-column\n prop=\"unitName\"\n label=\"属性\"\n min-width=\"80\"\n ></el-table-column>\n <el-table-column label=\"换算比例\" min-width=\"80\">\n <template slot-scope=\"scope\">\n <span v-if=\"scope.row.isMaster === 4\">\n 1{{ scope.row.unitName }}={{ Number(scope.row.conversion)\n }}{{ primary_unit }}\n </span>\n <span v-else>主单位</span>\n </template>\n </el-table-column>\n <el-table-column\n v-if=\"goods_data.supplierId && !goods_id\"\n prop=\"costPrice\"\n label=\"成本价/元\"\n min-width=\"100\"\n >\n <template slot-scope=\"scope\">\n <el-input-number\n v-model=\"scope.row.costPrice\"\n style=\"width: 80px\"\n :controls=\"false\"\n placeholder=\"成本价\"\n size=\"small\"\n ></el-input-number>\n </template>\n </el-table-column>\n <el-table-column label=\"销售价/元\" min-width=\"120\">\n <!-- 抄码商品不允许修改辅助单位的销售价-->\n <template slot-scope=\"scope\">\n <el-input-number\n v-model=\"scope.row.salePrice\"\n size=\"mini\"\n :controls=\"false\"\n :min=\"0\"\n style=\"width: 100%\"\n @blur=\"salePriceBlur(scope.$index)\"\n ></el-input-number>\n </template>\n </el-table-column>\n <el-table-column label=\"会员价/元\" min-width=\"120\">\n <template slot-scope=\"scope\">\n <el-input-number\n v-model=\"scope.row.memberPrice\"\n size=\"mini\"\n :controls=\"false\"\n :min=\"0\"\n style=\"width: 100%\"\n @blur=\"memberPriceBlur(scope.$index)\"\n ></el-input-number>\n </template>\n </el-table-column>\n <el-table-column\n prop=\"marketPrice\"\n label=\"市场价/元\"\n min-width=\"100\"\n >\n <template slot-scope=\"scope\">\n <el-input-number\n v-model=\"scope.row.marketPrice\"\n style=\"width: 100%\"\n :controls=\"false\"\n placeholder=\"市场价\"\n size=\"small\"\n :min=\"0\"\n ></el-input-number>\n </template>\n </el-table-column>\n <el-table-column label=\"起订数量\" min-width=\"100\">\n <template slot-scope=\"scope\">\n <el-input-number\n v-model=\"scope.row.setNum\"\n style=\"width: 100%\"\n :controls=\"false\"\n placeholder=\"起订数量\"\n size=\"small\"\n :precision=\"0\"\n :min=\"1\"\n ></el-input-number>\n </template>\n </el-table-column>\n <el-table-column label=\"是否销售\" min-width=\"100\">\n <template slot-scope=\"scope\">\n <el-switch\n v-model=\"scope.row.isSale\"\n class=\"switchStyle\"\n active-text=\"启用\"\n inactive-text=\"禁用\"\n active-color=\"#2153D4\"\n inactive-color=\"#879BBA\"\n :active-value=\"5\"\n :inactive-value=\"4\"\n ></el-switch>\n </template>\n </el-table-column>\n <el-table-column label=\"阶梯价\" min-width=\"100\">\n <template slot-scope=\"scope\">\n <el-button\n v-if=\"\n scope.row.ladderPrice.length &&\n scope.row.enabledLadder === 1\n \"\n type=\"primary\"\n size=\"mini\"\n @click=\"\n openModal(scope.$index, 'ladder_price_show', scope.row)\n \"\n >\n 已设置\n </el-button>\n <el-button\n v-else\n type=\"infCustomerTypePrice.vueo\"\n size=\"mini\"\n @click=\"\n openModal(scope.$index, 'ladder_price_show', scope.row)\n \"\n >\n 去设置\n </el-button>\n </template>\n </el-table-column>\n <el-table-column label=\"客户类型价\" min-width=\"100\">\n <template slot-scope=\"scope\">\n <div v-if=\"$route.name !== 'EditGoods'\">\n <el-button\n v-if=\"\n scope.row.customerTypePrice.length &&\n scope.row.customerTypePriceOpen\n \"\n type=\"primary\"\n size=\"mini\"\n @click=\"\n openModal(scope.$index, 'type_price_show', scope.row)\n \"\n >\n 已设置\n </el-button>\n <el-button\n v-else\n type=\"info\"\n size=\"mini\"\n @click=\"\n openModal(scope.$index, 'type_price_show', scope.row)\n \"\n >\n 去设置\n </el-button>\n </div>\n <div v-else>\n <el-button\n :type=\"\n scope.row.customerTypePriceOpen ? 'primary' : 'info'\n \"\n size=\"mini\"\n @click=\"\n openModal(scope.$index, 'type_price_show', scope.row)\n \"\n >\n {{ scope.row.customerTypePriceOpen ? \"查看\" : \"未设置\" }}\n </el-button>\n </div>\n </template>\n </el-table-column>\n <el-table-column label=\"客户指定价\" min-width=\"100\">\n <template slot-scope=\"scope\">\n <el-button\n v-if=\"\n scope.row.customerPrice.length &&\n scope.row.customerPriceOpen\n \"\n type=\"primary\"\n size=\"mini\"\n @click=\"\n openModal(scope.$index, 'appoint_price_show', scope.row)\n \"\n >\n 已设置\n </el-button>\n <el-button\n v-else\n type=\"info\"\n size=\"mini\"\n @click=\"\n openModal(scope.$index, 'appoint_price_show', scope.row)\n \"\n >\n 去设置\n </el-button>\n </template>\n </el-table-column>\n </el-table>\n </div>\n </div>\n <!-- 多属性价格管理-->\n <div v-if=\"goods_data.specType === 2\" class=\"detail-tab-item\">\n <div class=\"detail-tab-title clearfix\">价格管理</div>\n <div class=\"detail-tab-main\">\n <el-form-item v-if=\"false\" label=\"商品推荐:\" prop=\"isRecommend\">\n <el-radio v-model=\"base_form.isRecommend\" :label=\"5\">是</el-radio>\n <el-radio v-model=\"base_form.isRecommend\" :label=\"4\">否</el-radio>\n </el-form-item>\n <el-tabs v-model=\"unit_name_tab\" type=\"card\">\n <el-tab-pane\n v-for=\"(itemU, indexU) in goods_data.unitData\"\n :key=\"indexU\"\n :label=\"itemU.unitName\"\n :name=\"itemU.unitName\"\n >\n <el-table\n :data=\"itemU.priceData\"\n border\n style=\"width: 100%\"\n size=\"mini\"\n >\n <el-table-column\n prop=\"skuName\"\n label=\"属性\"\n min-width=\"80\"\n ></el-table-column>\n <el-table-column\n v-if=\"base_form.showMinUnitPrice === 5\"\n prop=\"skuName\"\n label=\"换算比例\"\n min-width=\"100\"\n >\n <template slot=\"header\" slot-scope=\"scope\">\n <span v-if=\"false\">{{ scope.$index }}</span>\n {{ itemU.unitName }}/元换算比例\n </template>\n <template slot-scope=\"scope\">\n <el-input-number\n v-model=\"scope.row.minUnitPriceConvert\"\n size=\"mini\"\n :controls=\"false\"\n ></el-input-number>\n </template>\n </el-table-column>\n <el-table-column label=\"销售价/元\" min-width=\"120\">\n <template slot-scope=\"scope\">\n <el-input-number\n v-model=\"scope.row.salePrice\"\n size=\"mini\"\n :controls=\"false\"\n @blur=\"salePriceBlur(scope.$index, indexU)\"\n ></el-input-number>\n </template>\n </el-table-column>\n <el-table-column label=\"会员价/元\" min-width=\"120\">\n <template slot-scope=\"scope\">\n <el-input-number\n v-model=\"scope.row.memberPrice\"\n size=\"mini\"\n :controls=\"false\"\n ></el-input-number>\n </template>\n </el-table-column>\n <el-table-column\n prop=\"marketPrice\"\n label=\"市场价/元\"\n min-width=\"100\"\n >\n <template slot-scope=\"scope\">\n <el-input-number\n v-model=\"scope.row.marketPrice\"\n style=\"width: 80px\"\n :controls=\"false\"\n placeholder=\"市场价\"\n size=\"small\"\n :min=\"0\"\n ></el-input-number>\n </template>\n </el-table-column>\n <el-table-column label=\"起订数量\" min-width=\"100\">\n <template slot-scope=\"scope\">\n <el-input-number\n v-model=\"scope.row.setNum\"\n style=\"width: 80px\"\n :controls=\"false\"\n placeholder=\"起订数量\"\n size=\"small\"\n :precision=\"0\"\n :min=\"1\"\n ></el-input-number>\n </template>\n </el-table-column>\n <el-table-column label=\"是否销售\" min-width=\"100\">\n <template slot-scope=\"scope\">\n <el-switch\n v-model=\"scope.row.isSale\"\n class=\"switchStyle\"\n active-text=\"启用\"\n inactive-text=\"禁用\"\n active-color=\"#2153D4\"\n inactive-color=\"#879BBA\"\n :active-value=\"5\"\n :inactive-value=\"4\"\n ></el-switch>\n </template>\n </el-table-column>\n <el-table-column label=\"阶梯价\" min-width=\"100\">\n <template slot-scope=\"scope\">\n <el-button\n v-if=\"\n scope.row.ladderPrice.length &&\n scope.row.enabledLadder === 1\n \"\n type=\"primary\"\n size=\"mini\"\n @click=\"\n openModal(\n scope.$index,\n 'ladder_price_show',\n scope.row,\n indexU\n )\n \"\n >\n 已设置\n </el-button>\n <el-button\n v-else\n type=\"info\"\n size=\"mini\"\n @click=\"\n openModal(\n scope.$index,\n 'ladder_price_show',\n scope.row,\n indexU\n )\n \"\n >\n 去设置\n </el-button>\n </template>\n </el-table-column>\n <el-table-column label=\"客户类型价\" min-width=\"100\">\n <template slot-scope=\"scope\">\n <el-button\n v-if=\"\n scope.row.customerTypePrice.length &&\n scope.row.customerTypePriceOpen\n \"\n type=\"primary\"\n size=\"mini\"\n @click=\"\n openModal(\n scope.$index,\n 'type_price_show',\n scope.row,\n indexU\n )\n \"\n >\n 已设置\n </el-button>\n <el-button\n v-else\n type=\"info\"\n size=\"mini\"\n @click=\"\n openModal(\n scope.$index,\n 'type_price_show',\n scope.row,\n indexU\n )\n \"\n >\n 去设置\n </el-button>\n </template>\n </el-table-column>\n <el-table-column label=\"客户指定价\" min-width=\"100\">\n <template slot-scope=\"scope\">\n <el-button\n v-if=\"\n scope.row.customerPrice.length &&\n scope.row.customerPriceOpen\n \"\n type=\"primary\"\n size=\"mini\"\n @click=\"\n openModal(\n scope.$index,\n 'appoint_price_show',\n scope.row,\n indexU\n )\n \"\n >\n 已设置\n </el-button>\n <el-button\n v-else\n type=\"info\"\n size=\"mini\"\n @click=\"\n openModal(\n scope.$index,\n 'appoint_price_show',\n scope.row,\n indexU\n )\n \"\n >\n 去设置\n </el-button>\n </template>\n </el-table-column>\n <el-table-column label=\"操作\" min-width=\"100\">\n <template slot-scope=\"scope\">\n <el-button\n type=\"text\"\n size=\"small\"\n @click=\"otherSetPrice(scope.row, indexU)\"\n >\n 同步\n </el-button>\n </template>\n </el-table-column>\n </el-table>\n </el-tab-pane>\n </el-tabs>\n </div>\n </div>\n </div>\n <!-- 经营屏蔽-->\n <div v-if=\"page_tabs === '2'\">\n <div class=\"page-tip-div\">\n <i class=\"el-icon-info\"></i>\n 符合以下条件的客户用将无法看到此商品\n </div>\n <el-row :gutter=\"10\">\n <el-col :span=\"8\">\n <div class=\"detail-tab-item\" style=\"margin-bottom: 0\">\n <div class=\"detail-tab-title\">地区屏蔽</div>\n <div\n class=\"detail-tab-main\"\n style=\"height: calc(100vh - 380px); overflow: auto\"\n >\n <RegionTree\n :checked-key=\"region_arr\"\n @checkChange=\"selRegion\"\n />\n </div>\n </div>\n </el-col>\n <el-col :span=\"16\">\n <div class=\"detail-tab-item\">\n <div class=\"detail-tab-title\">客户类型屏蔽</div>\n <div class=\"detail-tab-main\">\n <div\n v-if=\"!customer_type_list.length\"\n style=\"text-align: center\"\n >\n 暂无客户类型\n </div>\n <el-checkbox-group v-model=\"customer_type_check\">\n <el-checkbox\n v-for=\"(item, index) in customer_type_list\"\n :key=\"index\"\n :label=\"item.id\"\n >\n {{ item.name }}\n </el-checkbox>\n </el-checkbox-group>\n </div>\n </div>\n <div class=\"detail-tab-item\">\n <div class=\"detail-tab-title clearfix\">\n <span class=\"float_left\">客户屏蔽</span>\n <div class=\"float_right\">\n <el-button\n type=\"primary\"\n size=\"mini\"\n @click=\"customer_show = true\"\n >\n 选择客户\n </el-button>\n </div>\n </div>\n <div class=\"detail-tab-main\">\n <el-table border :data=\"customer_list\">\n <el-table-column\n show-overflow-tooltip\n prop=\"code\"\n label=\"编号\"\n ></el-table-column>\n <el-table-column\n show-overflow-tooltip\n prop=\"name\"\n label=\"姓名\"\n ></el-table-column>\n <el-table-column\n prop=\"customerType\"\n label=\"类型\"\n ></el-table-column>\n <el-table-column\n prop=\"shopName\"\n label=\"所属商铺\"\n show-overflow-tooltip\n ></el-table-column>\n <el-table-column label=\"管理\">\n <template slot-scope=\"scope\">\n <el-button\n type=\"text\"\n @click=\"deleteCustomer(scope.$index)\"\n >\n 删除\n </el-button>\n </template>\n </el-table-column>\n </el-table>\n </div>\n </div>\n </el-col>\n </el-row>\n </div>\n <!-- 价格波动图-->\n <div v-if=\"page_tabs === '3'\">\n <div class=\"ph\" style=\"height: 350px\">\n <div style=\"padding-bottom: 20px\">\n <el-date-picker\n v-model=\"time\"\n clearable\n type=\"daterange\"\n value-format=\"timestamp\"\n range-separator=\"-\"\n start-placeholder=\"开始日期\"\n end-placeholder=\"结束日期\"\n @change=\"orderDate\"\n ></el-date-picker>\n <chart1\n :time-data=\"time_data\"\n :goods-num=\"goodsNum_data\"\n :order-num=\"orderNum_data\"\n :order-money=\"orderMoney_data\"\n ></chart1>\n </div>\n </div>\n </div>\n <!-- 商品服务-->\n <!-- <div v-show=\"page_tabs === '4'\">-->\n <!-- <el-table-->\n <!-- ref=\"multipleTable\"-->\n <!-- :data=\"tableData\"-->\n <!-- tooltip-effect=\"dark\"-->\n <!-- @selection-change=\"handleSelectionChange\"-->\n <!-- >-->\n <!-- <el-table-column type=\"selection\"></el-table-column>-->\n <!-- <el-table-column-->\n <!-- prop=\"servicesName\"-->\n <!-- label=\"商品服务名称\"-->\n <!-- ></el-table-column>-->\n <!-- <el-table-column prop=\"describe\" label=\"描述\"></el-table-column>-->\n <!-- </el-table>-->\n <!-- <FooterPage-->\n <!-- :page-size=\"pageSize\"-->\n <!-- :total-page.sync=\"total\"-->\n <!-- :current-page.sync=\"page\"-->\n <!-- @pageChange=\"pageChange\"-->\n <!-- @sizeChange=\"sizeChange\"-->\n <!-- ></FooterPage>-->\n <!-- </div>-->\n </el-form>\n\n <!-- 商品列表-->\n <GoodsWarehouse\n v-if=\"show_goods\"\n :modal=\"!goodsId\"\n :shop-id=\"base_form.shopId\"\n goods-warehouse\n :is-check=\"false\"\n :is-show=\"show_goods\"\n :enable=\"true\"\n @cancel=\"show_goods = false\"\n @confirm=\"selGoods\"\n />\n <!-- 客户选择-->\n <ClientListModal\n v-if=\"customer_show\"\n :is-show=\"customer_show\"\n :is-check=\"true\"\n :modal=\"!basicGoodsId\"\n :is-show-add=\"true\"\n @cancel=\"customer_show = false\"\n @confirm=\"customerSel\"\n />\n <!-- 客户调价-->\n <CustomerPrice\n v-if=\"appoint_price_show\"\n :is-show=\"appoint_price_show\"\n :customer-price-open=\"customerPriceOpen\"\n :customer-price=\"customerPrice\"\n :modal=\"!basicGoodsId && !goodsId\"\n :ladder-price=\"ladderPrice\"\n :sku-id=\"sku_id\"\n :enabled-ladder=\"enabledLadder\"\n @confirm=\"appointPriceConfirm\"\n @cancel=\"appointPriceCancel\"\n />\n <!-- 客户类型调价-->\n <CustomerTypePrice\n v-if=\"type_price_show\"\n :is-show=\"type_price_show\"\n :customer-type-price-open=\"customerTypePriceOpen\"\n :customer-type-price=\"customerTypePrice\"\n :ladder-price=\"ladderPrice\"\n :enabled-ladder=\"enabledLadder\"\n :modal=\"!basicGoodsId && !goodsId\"\n :sku-id=\"sku_id\"\n @confirm=\"typePriceConfirm\"\n @cancel=\"typePriceCancel\"\n />\n <!-- 阶梯价弹窗-->\n <LadderPrice\n v-if=\"ladder_price_show\"\n :enabled-ladder=\"enabledLadder\"\n :ladder-price=\"ladderPrice\"\n :is-show=\"ladder_price_show\"\n :modal=\"!basicGoodsId && !goodsId\"\n @confirm=\"ladderPriceConfirm\"\n @cancel=\"ladderPriceCancel\"\n />\n <!-- :disabled=\"-->\n <!-- goods_data.isEq === 5 && unitisMaster === 4 && goods_data.specType === 1-->\n <!-- \"-->\n </ContainerTit>\n</template>\n\n<script>\n import GoodsWarehouse from \"@/component/goods/GoodsWarehouse\";\n import Chart1 from \"../components/Chart1\";\n import SelectShop from \"@/component/goods/SelectShop.vue\";\n import { getAllExpressRule, getAllCustomerSource } from \"@/api/System\";\n import { addPauseSave, delPauseSave, getPauseSave } from \"@/api/common\";\n import {\n getGoodsInfo,\n editGoods,\n addGoods,\n getGoodsBasicInfoById,\n getAllGoodsSupport,\n getAllGoodsGroups,\n } from \"@/api/goods\";\n import ClientListModal from \"@/component/common/ClientListModal\";\n import CustomerPrice from \"../components/CustomerPrice\";\n import LadderPrice from \"../components/LadderPrice\";\n import CustomerTypePrice from \"../components/CustomerTypePrice\";\n import RegionTree from \"@/component/common/RegionTree\";\n import { mapGetters } from \"vuex\";\n import { Enterprise } from \"@/api/user\";\n import {\n CustomerPriceAdjustmentAdd,\n addCustomerTypePriceAdjustment,\n getCustomerPriceByGoodsIds,\n getCustomerTypePriceByGoodsIds,\n } from \"@/api/Price\";\n const priceDataLi = {\n enabledLadder: 0,\n marketPrice: \"\",\n memberPrice: \"\",\n costPrice: \"\",\n salePrice: \"\",\n setNum: 0,\n isSale: 5,\n salePriceAreaType: 1,\n ladderPrice: [\n /* {\n from: 1,\n price: 0.01,\n to: 2\n }, {\n from: 3,\n price: 0.01,\n to: 4\n },\n {\n from: 5,\n price: 0.01,\n to: 999999999\n } */\n ],\n };\n export default {\n name: \"AddBaseData\",\n components: {\n SelectShop,\n GoodsWarehouse,\n RegionTree,\n ClientListModal,\n Chart1,\n CustomerPrice,\n CustomerTypePrice,\n LadderPrice,\n },\n props: {\n goodsId: {\n type: [Number, String],\n default: 0,\n },\n basicGoodsId: {\n type: [Number, String],\n default: 0,\n },\n },\n data() {\n return {\n // flagS: false,\n unitisMaster: 4,\n choose_support: [],\n unit_index: 0,\n sku_index: 0,\n ladderPrice: [],\n enabledLadder: 0,\n ladder_price_show: false, // 阶梯价弹窗\n type_price_show: false, // 客户类型价弹窗\n customerTypePriceOpen: false, // 客户类型价弹窗开关\n customerTypePrice: [], // 客户类型价弹窗数据\n customerPriceOpen: false,\n customerPrice: [],\n appoint_price_show: false, // 客户指定价弹窗\n customer_show: false, // 经营屏蔽->客户列表弹窗选择\n customer_list: [], // 经营屏蔽->客户列表\n customer_type_check: [], // 经营屏蔽->客户类型选择数组\n customer_type_list: [], // 经营屏蔽->客户类型列表\n region_arr: [], // 经营屏蔽->当前商品已选择过的区域\n page_tabs: \"1\", // 页面tab切换\n unit_name_tab: \"\",\n show_region: false,\n goods_data: {\n specType: 1,\n },\n primary_unit: \"\",\n price_data: [\n // { marketPrice: '' }\n ],\n show_goods: false,\n show_chose: false,\n isModel: false,\n base_rules: {\n shopName: [\n { required: true, message: \"请选择店铺\", trigger: \"change\" },\n ],\n goodsName: [\n { required: true, message: \"请选择商品\", trigger: \"change\" },\n ],\n deliverySupIds: [\n {\n required: true,\n type: \"array\",\n message: \"请选择物流支持\",\n trigger: \"change\",\n },\n ],\n ruleId: [\n { required: true, message: \"请选择运费模板\", trigger: \"change\" },\n ],\n expressFee: [\n { required: true, message: \"请输入运费\", trigger: \"blur\" },\n ],\n },\n price: \"\",\n express_list: [], // 运费模版列表\n base_form: {\n createUserName: \"\",\n goodsName: \"\",\n enableStatus: 5,\n isDistribution: 4, //负库存销售\n specType: \"\",\n goodsBasicId: 0, // 商品基础资料\n shopId: \"\", // 店铺\n shopName: \"\", // 店铺\n images: [], // 相册\n salesArea: [], // 销售区域\n serviceInfo: 1,\n price: [], // 区域价\n specification: [], // // 规格\n content: \"\", // 商品描述\n isRecommend: 5, // 5推荐 4不推荐\n sort: \"999\", // 排序\n deliverySupIds: [\"1\", \"2\"], // 物流支持 固定值 1 快递 2 自提 传参格式:1,2\n expressType: 1, // 快递运费 1 包邮 2 运费模版 3 固定费用\n expressFee: \"\", // 固定费用\n showExpress: 5, // 是否展示快递 5展示 4不展示\n ruleId: \"\", // 运费模版id\n isShield: 4, // 经营屏蔽 4关闭 5开启\n notArea: [], //经营屏蔽地区\n notCustomerType: \"\", //经营屏蔽 客户类型屏蔽\n notCustomer: \"\", //经营屏蔽 客户屏蔽\n showMinUnitPrice: 4, //最小单位\n },\n delivery_form: {},\n user_power: {},\n goods_id: 0,\n sub_load: false,\n pageName: \"\",\n time_data: [],\n goodsNum_data: [],\n orderMoney_data: [],\n orderNum_data: [],\n time: [],\n tableData: [],\n page: 1,\n pageSize: 20,\n total: 0,\n support: [],\n options_value: [],\n goods_groups: [],\n sku_id: \"\",\n };\n },\n computed: {\n ...mapGetters({\n salePriceTimes: \"MUser/salePriceTimes\",\n systemType: \"MUser/systemType\",\n storeData: \"MUser/storeData\",\n }),\n },\n async created() {\n this.pageName = this.$route.name;\n if (this.basicGoodsId) {\n await this.selGoods([], this.basicGoodsId);\n return;\n }\n if (this.$route.params.id) {\n this.goods_id = this.$route.params.id;\n await this.getDetail();\n } else {\n await this.getPauseSave();\n\t\t\n if ([2, 3].includes(this.systemType)) {\n\t\t\tconsole.log( this.pageName);\n this.base_form.shopId = this.storeData.id; // 店铺\n this.base_form.shopName = this.storeData.name; // 店铺\n }\n }\n // 获取运费模版\n await this.getAllExpressRule();\n // 获取客户类型\n await this.getAllCustomerSource();\n // 获取商品服务\n await this.getAllGoodsSupport();\n // 商品分组\n await this.getAllGoodsGroups();\n },\n methods: {\n getShop() {\n this.$emit(\"closeShop\");\n this.$router.push(\"/SystemSettings/liansuoguanli/AddShop\");\n },\n // 获取运费模版\n async getAllExpressRule() {\n const { data } = await getAllExpressRule();\n this.express_list = data;\n const data1 = await Enterprise({\n ranking: 1, // \"1销量排行 2销额排行\",\n businessOverviewShopId: \"\", // \"经营概况按店铺筛选:为空则筛选全店\",\n categoryRankingShopId: \"\", // \"类目排行按店铺筛选:为空则筛选全店\",\n goodsRankingShopId: \"\", // \"商品排行按店铺筛选:为空则筛选全店\",\n supplierRankingShopId: \"\", // 供应商排行按店铺筛选:为空则筛选全店\"\n });\n if (data1.data.aggregateStatistics) {\n if (this.time_data.length) {\n this.time_data = [];\n }\n this.$nextTick(() => {\n data1.data.chartData.forEach((value) => {\n this.time_data.push(value.date);\n });\n });\n }\n },\n // 计算市场价\n salePriceBlur(index, indexU) {\n if (this.goods_data.specType === 1) {\n // 根据比例自动换算销售价\n const target = this.$_common.deepClone(this.price_data);\n const marketPrice = this.$NP.times(\n target[index].salePrice,\n this.salePriceTimes\n );\n target[index] = {\n ...target[index],\n marketPrice: marketPrice,\n };\n // target.forEach((item) => {\n // if (\n // item.conversion &&\n // item.isMaster === 4 &&\n // this.goods_data.isEq === 5\n // ) {\n // item.salePrice = this.$NP.times(\n // target[index].salePrice,\n // item.conversion\n // );\n // item.marketPrice = this.$NP.times(marketPrice, item.conversion);\n // }\n // });\n this.price_data = target;\n } else {\n this.goods_data.unitData[indexU].priceData[\n index\n ].marketPrice = this.$NP.times(\n this.goods_data.unitData[indexU].priceData[index].salePrice,\n this.salePriceTimes\n );\n }\n },\n // 会员价失去焦点\n memberPriceBlur(index) {\n return;\n // 根据比例自动换算 会员价\n if (this.goods_data.specType === 1) {\n const target = this.$_common.deepClone(this.price_data);\n target.forEach((item) => {\n if (\n item.conversion &&\n item.isMaster === 4 &&\n this.goods_data.isEq === 5\n ) {\n item.memberPrice = this.$NP.times(\n target[index].memberPrice,\n item.conversion\n );\n }\n });\n this.price_data = target;\n }\n },\n shopDefault(val, row) {\n this.base_form.shopId = val;\n this.base_form.shopName = row.name;\n },\n otherSetPrice(row, index) {\n const target = this.$_common.deepClone(this.goods_data);\n target.unitData[index].priceData = target.unitData[index].priceData.map(\n (item) => {\n return {\n ...item,\n customerTypePrice: row.customerTypePrice,\n customerTypePriceOpen: row.customerTypePriceOpen,\n customerPrice: row.customerPrice,\n customerPriceOpen: row.customerPriceOpen,\n marketPrice: row.marketPrice,\n memberPrice: row.memberPrice,\n salePrice: row.salePrice,\n enabledLadder: row.enabledLadder,\n ladderPrice: row.ladderPrice,\n setNum: row.setNum,\n isSale: row.isSale || 5,\n };\n }\n );\n this.goods_data = target;\n },\n openShop() {\n if (this.goods_id) return;\n this.show_chose = true;\n },\n openGoodsModel() {\n if (!this.base_form.shopName || !!this.goods_id) return;\n this.show_goods = true;\n },\n // 获取商品详情\n async getDetail() {\n const { data } = await getGoodsInfo(this.goods_id);\n this.goods_data = data;\n this.choose_support = data.support;\n let arr = [];\n data.goodsGroups.forEach((item) => {\n if (item) {\n arr.push(Number(item));\n }\n });\n this.options_value = arr;\n this.base_form = {\n createUserName: this.userName,\n goodsName: data.title,\n enableStatus: data.enableStatus, // 是否上架\n isDistribution: data.isDistribution, //是否负库存销售\n goodsBasicId: data.basicGoodsId, // 商品基础资料\n shopId: data.shopId, // 店铺\n shopName: data.shopName, // 店铺\n images: data.images, // 相册\n salesArea: data.salesArea, // 销售区域\n serviceInfo: data.serviceInfo,\n price: [],\n specification: data.specification, // // 规格\n content: data.content, // 商品描述\n isRecommend: data.isRecommend, // 5推荐 4不推荐\n sort: data.sort, // 排序\n specType: data.specType, // 2 多规格 1单规格\n deliverySupIds: data.deliverySupIds.split(\",\"), // 物流支持 固定值 1 快递 2 自提 传参格式:1,2\n expressType: data.expressType, // 快递运费 1 包邮 2 运费模版 3 固定费用\n expressFee: data.expressFee, // 固定费用\n showExpress: data.showExpress, // 是否展示快递 5展示 4不展示\n ruleId: data.ruleId, // 运费模版id\n isShield: data.isShield, // 经营屏蔽\n notArea: data.notArea,\n notCustomerType: data.notCustomerType,\n notCustomer: data.notCustomer,\n showMinUnitPrice: data.showMinUnitPrice,\n };\n this.region_arr = data.notArea;\n this.customer_type_check = data.notCustomerType\n ? data.notCustomerType.split(\",\").map((item) => parseInt(item))\n : [];\n this.customer_list = data.notCustomerLists || [];\n if (data.specType === 1) {\n this.price_data = data.specMultiple.map((item) => {\n return {\n ...item,\n isSale: item.isSale || 5,\n // 客户类型和客户快速调价\n customerTypePrice: [],\n customerTypePriceOpen: false,\n customerPrice: [],\n customerPriceOpen: false,\n };\n });\n } else if (data.specType === 2) {\n if (this.goods_data.unitData && this.goods_data.unitData.length) {\n this.unit_name_tab = this.goods_data.unitData[0].unitName;\n this.goods_data.unitData = this.goods_data.unitData.map((itemU) => {\n const priceData = data.specMultiple\n .filter((itemF) => itemF.unitId === itemU.unitId)\n .map((item) => {\n const skuName = item.specGroup\n .map((itemM) => {\n return itemM.specValueName;\n })\n .join(\"_\");\n // item.specGroup.forEach((itemS) => {\n // if (itemS.specId === 11) {\n // this.flagS = true;\n // }\n // });\n return {\n ...item,\n isSale: item.isSale || 5,\n skuName: skuName,\n // 客户类型和客户快速调价\n customerTypePrice: [],\n customerTypePriceOpen: false,\n customerPrice: [],\n customerPriceOpen: false,\n minUnitPriceConvert: item.minUnitPriceConvert || \"\",\n };\n });\n return {\n ...itemU,\n priceData: priceData,\n };\n });\n }\n }\n // this.region_arr = data.salesArea\n if (data.basicGoodsId) {\n await this.selGoods([], data.basicGoodsId);\n }\n this.toggleSelection();\n // 获取指定商品的最后生效的客户调价单数据\n await this.getCustomerPriceByGoodsIds();\n //获取指定商品的最后生效的客户类型调价数据\n await this.getCustomerTypePriceByGoodsIds();\n },\n // 检查提交\n checkSub() {\n this.$refs.base_form.validate((valid) => {\n if (valid) {\n let priceData = [];\n if (this.goods_data.specType === 2) {\n // 多属性\n this.goods_data.unitData.forEach((item) => {\n item.priceData.forEach((itemP) => {\n priceData.push({\n id: itemP.id,\n conversion: itemP.conversion,\n unitName: itemP.unitName,\n unitId: itemP.unitId,\n isMaster: itemP.isMaster,\n deleteStatus: itemP.deleteStatus || 4,\n enabledLadder: itemP.enabledLadder,\n salePriceAreaType: itemP.salePriceAreaType,\n salePrice: itemP.salePrice,\n ladderPrice: itemP.ladderPrice,\n marketPrice: itemP.marketPrice,\n memberPrice: itemP.memberPrice,\n setNum: itemP.setNum,\n isSale: itemP.isSale || 5,\n minUnitPriceConvert: itemP.minUnitPriceConvert,\n });\n });\n });\n } else {\n priceData = this.$_common\n .deepClone(this.price_data)\n .map((item) => {\n delete item.customerTypePrice;\n delete item.customerTypePriceOpen;\n delete item.customerPrice;\n delete item.customerPriceOpen;\n return item;\n });\n }\n\n let ladderPriceLength = true;\n let isLadderPrice = true;\n for (let i in priceData) {\n const item = priceData[i];\n if (item.enabledLadder === 1) {\n if (item.ladderPrice.length < 2) {\n ladderPriceLength = false;\n break;\n } else if (\n !item.ladderPrice.every((itemP) => itemP.price > 0)\n ) {\n isLadderPrice = false;\n break;\n }\n } else {\n if (!item.salePrice) {\n isLadderPrice = false;\n break;\n }\n }\n }\n if (!ladderPriceLength) {\n this.$message.warning(\"请至少设置两条阶梯价\");\n return;\n }\n if (!isLadderPrice) {\n this.$message.warning(\"请输入价格\");\n return;\n }\n this.price = priceData.map((item) => {\n if (item.ladderPrice.length) {\n item.ladderPrice[item.ladderPrice.length - 1].to = 9999999999;\n }\n let min = 0;\n if (item.enabledLadder === 1) {\n const arr = item.ladderPrice.map((itemM) => {\n return itemM.price;\n });\n min = Math.min.apply(null, arr);\n }\n return {\n ...item,\n ladderPrice: item.enabledLadder === 0 ? [] : item.ladderPrice,\n salePrice: item.enabledLadder === 1 ? min : item.salePrice,\n };\n });\n this.price = priceData;\n this.subData();\n }\n });\n },\n // 商品新建提交\n async subData() {\n let target = {};\n const notCustomer = this.customer_list.map((item) => {\n return item.id;\n });\n const isFSale = this.price.every((item) => item.isSale === 4);\n if (isFSale) {\n this.$message.warning(\"至少保留一条规格的销售状态为【启用】\");\n return;\n }\n const params = {\n ...this.base_form,\n price: this.price,\n deliverySupIds: this.base_form.deliverySupIds.join(\",\"),\n notCustomerType: this.customer_type_check.join(\",\"),\n notCustomer: notCustomer.join(\",\"),\n support: this.choose_support,\n goodsGroups: this.options_value,\n };\n this.sub_load = true;\n try {\n if (this.goods_id) {\n target = await editGoods(this.goods_id, params);\n this.sub_load = false;\n await this.AdjustPrice(this.goods_id);\n } else {\n target = await addGoods({\n ...params,\n createUserName: this.userName,\n });\n this.sub_load = false;\n await this.AdjustPrice(target.data);\n await this.delPauseSave();\n }\n this.$message({\n type: \"success\",\n message: \"提交成功\",\n });\n if (this.basicGoodsId) {\n this.$emit(\"subData\");\n } else {\n if (this.systemType === 2) {\n await this.$closeCurrentGoEdit(\n \"/SingleStore/goods/GoodsAdministration\"\n );\n } else {\n await this.$closeCurrentGoEdit(\"/goods/sale/PublishGoods\");\n }\n }\n } finally {\n this.sub_load = false;\n }\n },\n // 请求快速调价接口\n async AdjustPrice(goodsId) {\n let typeParams = [];\n let customerParams = [];\n let typePrice = [];\n let customerPrice = [];\n if (this.goods_data.specType === 1) {\n this.price_data.forEach((item) => {\n if (item.customerTypePriceOpen) {\n item.customerTypePrice.forEach((type) => {\n // if (!type.priceId) {\n typeParams.push({\n createUserName: this.userName,\n goodsName: this.base_form.goodsName,\n goodsId: goodsId,\n shopId: this.base_form.shopId,\n shopName: this.base_form.shopName,\n customerName: type.name,\n customerType: type.id,\n effective: 5, //调价单立即生效effective 5立即生效 4需要手动生效\n salePrice: [\n {\n price: type.price,\n skuId: item.id,\n unitName: item.unitName,\n adjPricetag: type.adjPricetag,\n ladderPrice: type.ladderPrice || [],\n },\n ],\n });\n // }\n });\n }\n if (item.customerPriceOpen) {\n item.customerPrice.forEach((type) => {\n // if (!type.priceId) {\n customerParams.push({\n createUserName: this.userName,\n goodsName: this.base_form.goodsName,\n goodsId: goodsId,\n shopId: this.base_form.shopId,\n shopName: this.base_form.shopName,\n customerName: type.name,\n customerId: type.id,\n effective: 5, //调价单立即生效effective 5立即生效 4需要手动生效\n salePrice: [\n {\n price: type.price,\n skuId: item.id,\n unitName: item.unitName,\n adjPricetag: type.adjPricetag,\n ladderPrice: type.ladderPrice || [],\n },\n ],\n });\n // }\n });\n }\n });\n } else {\n // 多属性\n this.goods_data.unitData.forEach((item) => {\n item.priceData.forEach((itemP) => {\n if (itemP.customerTypePriceOpen) {\n itemP.customerTypePrice.forEach((type) => {\n // if (!type.priceId) {\n typeParams.push({\n createUserName: this.userName,\n goodsName: this.base_form.goodsName,\n goodsId: goodsId,\n shopId: this.base_form.shopId,\n shopName: this.base_form.shopName,\n customerName: type.name,\n customerType: type.id,\n effective: 5, //调价单立即生效effective 5立即生效 4需要手动生效\n salePrice: [\n {\n price: type.price,\n skuId: itemP.id,\n unitName: itemP.unitName,\n adjPricetag: type.adjPricetag,\n ladderPrice: type.ladderPrice || [],\n },\n ],\n });\n // }\n });\n }\n if (itemP.customerPriceOpen) {\n itemP.customerPrice.forEach((type) => {\n // if (!type.priceId) {\n customerParams.push({\n createUserName: this.userName,\n goodsName: this.base_form.goodsName,\n goodsId: goodsId,\n shopId: this.base_form.shopId,\n shopName: this.base_form.shopName,\n customerName: type.name,\n customerId: type.id,\n effective: 5, //调价单立即生效effective 5立即生效 4需要手动生效\n salePrice: [\n {\n price: type.price,\n skuId: itemP.id,\n unitName: itemP.unitName,\n adjPricetag: type.adjPricetag,\n ladderPrice: type.ladderPrice || [],\n },\n ],\n });\n // }\n });\n }\n });\n });\n }\n //客户类型\n typeParams.forEach((item) => {\n const index = typePrice.findIndex(\n (price) => price.customerType === item.customerType\n );\n if (index === -1) {\n typePrice.push({\n ...item,\n });\n } else {\n typePrice[index].salePrice = typePrice[index].salePrice.concat(\n item.salePrice\n );\n }\n });\n //客户价格\n customerParams.forEach((item) => {\n const index = customerPrice.findIndex(\n (price) => price.customerId === item.customerId\n );\n if (index === -1) {\n customerPrice.push({\n ...item,\n });\n } else {\n customerPrice[index].salePrice = customerPrice[\n index\n ].salePrice.concat(item.salePrice);\n }\n });\n\n // console.log(\"typePrice\", typePrice);\n // console.log(\"customerPrice\", customerPrice);\n await this.addCustomerTypePriceAdjustment(typePrice);\n await this.CustomerPriceAdjustmentAdd(customerPrice);\n },\n // 获取暂存信息\n async getPauseSave() {\n const { data } = await getPauseSave({\n key: this.pageName,\n });\n\n if (JSON.stringify(data) === \"{}\") return;\n if (data.goods_data) {\n this.goods_data = data.goods_data;\n }\n if (data.base_form) {\n this.base_form = data.base_form;\n this.region_arr = this.base_form.notArea;\n }\n if (data.price) {\n this.price_data = data.price;\n }\n if (data.unit_name_tab) {\n this.unit_name_tab = data.unit_name_tab;\n }\n if (data.customer_list) {\n this.customer_list = data.customer_list;\n }\n },\n // 删除暂存信息\n async delPauseSave(type) {\n const data = delPauseSave({\n key: this.pageName,\n });\n\n if (type) {\n this.$message({\n type: \"success\",\n message: \"清除暂存成功\",\n });\n this.$closeCurrentGoEdit(\"/goods/sale/AddGoods\");\n }\n },\n // 商品暂存\n async tempData() {\n this.sub_load = true;\n try {\n const data = await addPauseSave({\n key: this.pageName,\n data: {\n base_form: this.base_form,\n price: this.price,\n goods_data: this.goods_data,\n unit_name_tab: this.unit_name_tab,\n customer_list: this.customer_list,\n },\n });\n this.sub_load = false;\n\n this.$message({\n type: \"success\",\n message: \"暂存成功\",\n });\n if (this.systemType === 2) {\n this.$closeCurrentGoEdit(\"/SingleStore/goods/GoodsAdministration\");\n } else {\n this.$closeCurrentGoEdit(\"/goods/sale/PublishGoods\");\n }\n } finally {\n this.sub_load = false;\n }\n },\n // 选择商品\n async selGoods(row, basicGoodsId) {\n const { data } = await getGoodsBasicInfoById(\n basicGoodsId || row[0].id,\n {\n isAddGoods: 5,\n }\n );\n\n if (this.goods_id) {\n this.goods_data = {\n ...this.goods_data,\n categoryTitle: data.categoryTitle,\n brandTitle: data.brandTitle,\n expireTime: data.expireTime,\n description: data.description,\n tag: data.tag,\n masterUnit: data.unitData.find((item) => item.isMaster === 5),\n branchUnit: data.unitData.filter((item) => item.isMaster === 4),\n };\n return;\n }\n this.goods_data = {\n ...data,\n masterUnit: data.unitData.find((item) => item.isMaster === 5),\n branchUnit: data.unitData.filter((item) => item.isMaster === 4),\n };\n this.base_form.goodsName = data.title;\n this.unit_name_tab = data.unitData[0].unitName;\n this.base_form.images = data.images;\n this.base_form.specType = data.specType;\n this.base_form.content = data.description;\n this.base_form.goodsBasicId = data.id;\n let priceData = [];\n const priceDataItem = this.$_common.deepClone(priceDataLi);\n if (data.specType === 1) {\n priceData = data.unitData.map((item) => {\n return {\n ...item,\n ...priceDataItem,\n isSale: 5,\n // 客户类型和客户快速调价\n customerTypePrice: [],\n customerTypePriceOpen: false,\n customerPrice: [],\n customerPriceOpen: false,\n };\n });\n this.price_data = priceData;\n } else if (data.specType === 2) {\n this.goods_data.unitData = this.goods_data.unitData.map((itemU) => {\n const priceD = data.specMultiple\n .filter((itemF) => itemF.unitId === itemU.unitId)\n .map((item) => {\n const skuName = item.specGroup\n .map((itemM) => {\n return itemM.specValueName;\n })\n .join(\"_\");\n // item.specGroup.forEach((itemS) => {\n // if (itemS.specId === 11) {\n // this.flagS = true;\n // }\n // });\n return {\n ...item,\n ...priceDataItem,\n isSale: 5,\n skuName: skuName,\n // 客户类型和客户快速调价\n customerTypePrice: [],\n customerTypePriceOpen: false,\n customerPrice: [],\n customerPriceOpen: false,\n };\n });\n return {\n ...itemU,\n priceData: priceD,\n };\n });\n }\n let specification = [];\n if (row[0]) {\n if (row[0].specType === 1) {\n specification = (row[0].branchUnit || []).concat(row[0].masterUnit);\n } else if (row[0].specType === 2) {\n specification = row[0].specMultiple;\n }\n }\n this.base_form.specification = specification;\n let arr = \"\";\n this.price_data.forEach((item) => {\n if (item.isMaster === 5) {\n arr = item.unitName;\n }\n });\n this.primary_unit = arr;\n },\n // 选择商铺\n selChose(val, row) {\n this.base_form.shopId = row[0].id;\n this.base_form.shopName = row[0].name;\n },\n // 地区选择\n selRegion(row) {\n this.base_form.notArea = row.map((item) => {\n return item.codePath;\n });\n },\n // 获取客户类型\n async getAllCustomerSource() {\n const data = await getAllCustomerSource({\n page: 1,\n pageSize: 50,\n });\n\n this.customer_type_list = data.data;\n },\n // 选择客户\n customerSel(val) {\n this.customer_list = val;\n },\n // 删除客户\n deleteCustomer(index) {\n this.customer_list.splice(index, 1);\n },\n // 价格波动图\n orderDate() {\n console.log(this.time);\n },\n // 打开指定价弹窗\n openModal(index, key, row, indexU) {\n // 获取阶梯价数据,做阶梯价调价\n if (row) {\n this.unitisMaster = row.isMaster;\n this.sku_id = row.id;\n this.ladderPrice = row.ladderPrice;\n this.enabledLadder = row.enabledLadder;\n if (key === \"type_price_show\") {\n // 客户类型指定价调价数据\n this.customerTypePriceOpen = row.customerTypePriceOpen;\n this.customerTypePrice = row.customerTypePrice;\n }\n if (key === \"appoint_price_show\") {\n // 客户指定价调价数据\n this.customerPriceOpen = row.customerPriceOpen;\n this.customerPrice = row.customerPrice;\n }\n }\n this.sku_index = index;\n if (indexU > -1) {\n this.unit_index = indexU;\n }\n this[key] = true;\n },\n // 指定价数据确定\n appointPriceConfirm(customerPriceOpen, customerPrice) {\n if (this.goods_data.specType === 1) {\n // 单规格\n const target = this.$_common.deepClone(this.price_data);\n target[this.sku_index].customerPriceOpen = customerPriceOpen;\n target[this.sku_index].customerPrice = customerPriceOpen\n ? customerPrice\n : [];\n this.price_data = target;\n } else {\n // 多规格\n const target = this.$_common.deepClone(this.goods_data.unitData);\n target[this.unit_index].priceData[\n this.sku_index\n ].customerPriceOpen = customerPriceOpen;\n target[this.unit_index].priceData[\n this.sku_index\n ].customerPrice = customerPriceOpen ? customerPrice : [];\n this.goods_data.unitData = target;\n }\n },\n // 指定价数据取消\n async appointPriceCancel(customerPriceOpen, customerPrice) {\n this.appoint_price_show = false;\n if (this.$route.params.id) {\n await this.appointPriceConfirm(customerPriceOpen, customerPrice);\n }\n },\n // 客户类型价设置\n typePriceConfirm(customerTypePriceOpen, customerTypePrice) {\n if (this.goods_data.specType === 1) {\n // 单规格\n const target = this.$_common.deepClone(this.price_data);\n target[this.sku_index].customerTypePriceOpen = customerTypePriceOpen;\n target[this.sku_index].customerTypePrice = customerTypePriceOpen\n ? customerTypePrice\n : [];\n this.price_data = target;\n } else {\n // 多规格\n const target = this.$_common.deepClone(this.goods_data.unitData);\n target[this.unit_index].priceData[\n this.sku_index\n ].customerTypePriceOpen = customerTypePriceOpen;\n target[this.unit_index].priceData[\n this.sku_index\n ].customerTypePrice = customerTypePriceOpen ? customerTypePrice : [];\n this.goods_data.unitData = target;\n }\n },\n // 客户类型价数据取消\n async typePriceCancel(customerTypePriceOpen, customerTypePrice) {\n this.type_price_show = false;\n if (this.$route.params.id) {\n //获取指定商品的最后生效的客户类型调价数据\n await this.typePriceConfirm(customerTypePriceOpen, customerTypePrice);\n }\n },\n // 阶梯价设置\n ladderPriceConfirm(enabledLadder, ladderPrice) {\n if (this.goods_data.specType === 1) {\n // 单规格\n const target = this.$_common.deepClone(this.price_data);\n // if (this.goods_data.isEq === 5) {\n // // 抄码商品根据比例自动换算销售价\n // target.forEach((item) => {\n // item.enabledLadder = enabledLadder;\n // if (enabledLadder) {\n // if (item.conversion && item.isMaster === 4) {\n // item.ladderPrice = ladderPrice.map((ladder) => {\n // return {\n // ...ladder,\n // price: this.$NP.times(ladder.price, item.conversion),\n // };\n // });\n // } else {\n // item.ladderPrice = ladderPrice;\n // }\n // } else {\n // item.ladderPrice = [];\n // }\n // });\n // } else {\n // target[this.sku_index].enabledLadder = enabledLadder;\n // target[this.sku_index].ladderPrice = enabledLadder\n // ? ladderPrice\n // : [];\n // }\n target[this.sku_index].enabledLadder = enabledLadder;\n target[this.sku_index].ladderPrice = enabledLadder ? ladderPrice : [];\n this.price_data = target;\n } else {\n // 多规格\n const target = this.$_common.deepClone(this.goods_data.unitData);\n target[this.unit_index].priceData[\n this.sku_index\n ].enabledLadder = enabledLadder;\n target[this.unit_index].priceData[\n this.sku_index\n ].ladderPrice = enabledLadder ? ladderPrice : [];\n this.goods_data.unitData = target;\n }\n },\n ladderPriceCancel() {\n this.ladder_price_show = false;\n },\n // 客户调价单\n async CustomerPriceAdjustmentAdd(params) {\n if (!params.length) return;\n const { data } = await CustomerPriceAdjustmentAdd(params);\n },\n // 客户类型调价单\n async addCustomerTypePriceAdjustment(params) {\n if (!params.length) return;\n const { data } = await addCustomerTypePriceAdjustment(params);\n },\n async getAllGoodsSupport() {\n const { data, pageTotal } = await getAllGoodsSupport({\n page: this.page,\n pageSize: this.pageSize,\n });\n this.tableData = data;\n this.total = pageTotal;\n },\n toggleSelection() {\n let arr = [];\n this.goods_data.support.forEach((item) => {\n arr.push(Number(item));\n });\n this.choose_support = arr;\n },\n // 商品组\n async getAllGoodsGroups() {\n const { data } = await getAllGoodsGroups({\n page: 1,\n pageSize: 999,\n name: \"\",\n });\n this.goods_groups = data;\n },\n // 获取指定商品的最后生效的客户调价单数据\n async getCustomerPriceByGoodsIds() {\n const { data, pageTotal } = await getCustomerPriceByGoodsIds({\n goodsId: this.goods_id,\n page: 1,\n pageSize: 200,\n });\n this.customerPrice = data;\n },\n // 获取指定商品的最后生效的客户类型调价数据\n async getCustomerTypePriceByGoodsIds() {\n const { data } = await getCustomerTypePriceByGoodsIds({\n goodsId: this.goods_id,\n page: 1,\n pageSize: 999,\n });\n this.customerTypePrice = data;\n this.adjustmentData();\n },\n adjustmentData() {\n if (this.base_form.specType === 1) {\n this.price_data = this.price_data.map((item) => {\n //客户类型价\n let customerTypePrice = [];\n this.customerTypePrice.forEach((type) => {\n if (type.salePrice && type.salePrice.length) {\n type.salePrice.forEach((pitem) => {\n if (pitem.skuId === item.id) {\n customerTypePrice.push({\n adjPricetag: pitem.adjPricetag,\n ladderPrice: pitem.ladderPrice,\n price: pitem.price,\n name: type.customerTypeName,\n id: type.customerType,\n priceId: type.id,\n });\n }\n });\n }\n });\n //客户价\n let customerPrice = [];\n this.customerPrice.forEach((type) => {\n if (type.salePrice && type.salePrice.length) {\n type.salePrice.forEach((pitem) => {\n if (pitem.skuId === item.id) {\n customerPrice.push({\n adjPricetag: pitem.adjPricetag,\n ladderPrice: pitem.ladderPrice,\n price: pitem.price,\n name: type.customerName,\n id: type.customerId,\n priceId: type.id,\n });\n }\n });\n }\n });\n return {\n ...item,\n // 客户类型和客户快速调价\n customerTypePrice: customerTypePrice,\n customerTypePriceOpen: customerTypePrice.length > 0,\n customerPrice: customerPrice,\n customerPriceOpen: customerPrice.length > 0,\n };\n });\n } else {\n this.goods_data.unitData = this.goods_data.unitData.map((itemU) => {\n return {\n ...itemU,\n priceData: itemU.priceData.map((item) => {\n //客户类型价\n let customerTypePrice = [];\n this.customerTypePrice.forEach((type) => {\n if (type.salePrice && type.salePrice.length) {\n type.salePrice.forEach((pitem) => {\n if (pitem.skuId === item.id) {\n customerTypePrice.push({\n adjPricetag: pitem.adjPricetag,\n ladderPrice: pitem.ladderPrice,\n price: pitem.price,\n name: type.customerTypeName,\n id: type.customerType,\n priceId: type.id,\n });\n }\n });\n }\n });\n //客户价\n let customerPrice = [];\n this.customerPrice.forEach((type) => {\n if (type.salePrice && type.salePrice.length) {\n type.salePrice.forEach((pitem) => {\n if (pitem.skuId === item.id) {\n customerPrice.push({\n adjPricetag: pitem.adjPricetag,\n ladderPrice: pitem.ladderPrice,\n price: pitem.price,\n name: type.customerName,\n id: type.customerId,\n priceId: type.id,\n });\n }\n });\n }\n });\n return {\n ...item,\n customerTypePrice: customerTypePrice,\n customerTypePriceOpen: customerTypePrice.length > 0,\n customerPrice: customerPrice,\n customerPriceOpen: customerPrice.length > 0,\n };\n }),\n };\n });\n }\n },\n },\n };\n</script>\n<style scoped lang=\"scss\">\n .ph {\n background-color: #fff;\n height: 240px;\n padding: 12px 17px 12px 17px;\n border-radius: 6px;\n box-shadow: 0 2px 6px 0 rgba(76, 80, 88, 0.16);\n position: relative;\n .ranking-sel {\n position: absolute;\n left: 130px;\n top: 14px;\n }\n h4 {\n display: inline-block;\n width: 120px;\n }\n .ph-num-text {\n font-size: 16px;\n font-weight: 600;\n color: #24365c;\n margin: -8px 0 0 10px;\n }\n }\n .switch-div {\n padding-bottom: 10px;\n }\n .td-label {\n display: inline-block;\n width: 80px;\n text-align: right;\n font-size: 13px;\n vertical-align: middle;\n }\n .ladder-price-ul {\n vertical-align: middle;\n display: inline-block;\n }\n</style>\n"]}]}
|