1 |
- {"remainingRequest":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\thread-loader\\dist\\cjs.js!E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\babel-loader\\lib\\index.js!E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\src\\views\\goods\\manageG\\AddBaseData.vue?vue&type=script&lang=js&","dependencies":[{"path":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\src\\views\\goods\\manageG\\AddBaseData.vue","mtime":1655374732000},{"path":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\babel.config.js","mtime":1655374732000},{"path":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\node_modules\\vue-loader\\lib\\index.js","mtime":1655715099000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KaW1wb3J0IEdvb2RzQ2F0ZWdvcnkgZnJvbSAiQC9jb21wb25lbnQvY29tbW9uL0dvb2RzQ2F0ZWdvcnkudnVlIjsKaW1wb3J0IEJyYW5kU2VsTW9kZWwgZnJvbSAiQC9jb21wb25lbnQvZ29vZHMvQnJhbmRTZWxNb2RlbC52dWUiOwppbXBvcnQgVGlueW1jZSBmcm9tICJAL2NvbXBvbmVudC9UaW55bWNlIjsKaW1wb3J0IFVwbG9hZFFpbml1IGZyb20gIkAvY29tcG9uZW50L2NvbW1vbi9VcGxvYWRRaW5pdS52dWUiOyAvLyDmlrDlop7liIbnsbsKCmltcG9ydCBBZGRDYXRlIGZyb20gIkAvY29tcG9uZW50L2dvb2RzL0FkZENhdGUudnVlIjsKaW1wb3J0IEFkZEJyYW5kIGZyb20gIi4vQWRkQnJhbmQiOwppbXBvcnQgU2VsZWN0U2hvcCBmcm9tICJAL2NvbXBvbmVudC9nb29kcy9TZWxlY3RTaG9wLnZ1ZSI7CmltcG9ydCB7IGdldEFsbFVuaXQsIGRlZmluZVNwZWMsIFNwZWNNYW5hZ2VnZXRBbGwsIGdldEdvb2RzQmFzaWNJbmZvQnlJZCwgZWRpdEdvb2RzQmFzaWMsIGFkZEdvb2RzQmFzaWMsIGdldEFsbENhdGVnb3J5UG9zdCB9IGZyb20gIkAvYXBpL2dvb2RzIjsKaW1wb3J0IHsgYWRkUGF1c2VTYXZlLCBkZWxQYXVzZVNhdmUsIGdldFBhdXNlU2F2ZSB9IGZyb20gIkAvYXBpL2NvbW1vbiI7CmltcG9ydCB7IGdldEFsbE1lcmNoYW50TGlzdCB9IGZyb20gIkAvYXBpL01lcmNoYW50cyI7CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAiQWRkQmFzZURhdGEiLAogIGNvbXBvbmVudHM6IHsKICAgIC8vIEdvb2RzQ2F0ZWdvcnksCiAgICBCcmFuZFNlbE1vZGVsLAogICAgVGlueW1jZSwKICAgIFVwbG9hZFFpbml1LAogICAgQWRkQ2F0ZSwKICAgIEFkZEJyYW5kLAogICAgU2VsZWN0U2hvcAogIH0sCgogIGRhdGEoKSB7CiAgICBjb25zdCB2YWxpZGF0ZVVuaXQgPSAocnVsZSwgdmFsdWUsIGNhbGxiYWNrKSA9PiB7CiAgICAgIGlmICh2YWx1ZS51bml0TmFtZSA9PT0gIiIpIHsKICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoIuivt+iuvue9ruWfuuacrOWNleS9jSIpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9OwoKICAgIHJldHVybiB7CiAgICAgIC8vIOiuoemHj+WNleS9jQogICAgICBzZWxmX3NwZWNfdmFsOiAiIiwKICAgICAgLy8g6Ieq5a6a5LmJ5bGe5oCn5YC86L6T5YWl5qGGCiAgICAgIHNwZWNfbmFtZV9pbmRleDogMCwKICAgICAgLy8g5bGe5oCn5ZCNaW5kZXgKICAgICAgc2VsZl9zcGVjX2lucHV0OiBmYWxzZSwKICAgICAgLy8g5pi+56S66Ieq5a6a5LmJ5bGe5oCn5YC86L6T5YWl5qGGCiAgICAgIHNwZWNfbW9kZWw6IGZhbHNlLAogICAgICAvLyDpgInmi6nlsZ7mgKflgLzlvLnnqpcKICAgICAgc3BlY19pdGVtX2NoZWNrOiBbXSwKICAgICAgLy8g5bGe5oCn5YC85by556qX5Y2V6YCJdmFsdWUKICAgICAgaXNfaW5kZXRlcm1pbmF0ZV9zcGVjOiBmYWxzZSwKICAgICAgLy8g5om56YeP6YCJ5oup5bGe5oCn5YC8IOWFqOmAiemAieaLqeahhueKtuaAgQogICAgICBzcGVjX2NoZWNrX2FsbDogZmFsc2UsCiAgICAgIC8vIOWxnuaAp+WAvCDlhajpgInpgInmi6nmoYZ2YWx1ZQogICAgICBzcGVjX2RhdGE6IFtdLAogICAgICAvLyDlsZ7mgKfliJfooagKICAgICAgc3BlY19kYXRhX2NoaWxkOiBbXSwKICAgICAgLy8g5bGe5oCn5YC85YiX6KGoCiAgICAgIHNwZWNfdGFibGVfRGF0YTogW10sCiAgICAgIC8vIOinhOagvOaYjue7hgogICAgICBza3VfbGlzdDogWy8vIOWVhuWTgeWxnuaAp+WIl+ihqAogICAgICB7CiAgICAgICAgc3BlY19kYXRhX2NoaWxkOiBbXSwKICAgICAgICBncm91cFNwZWNJZDogIiIsCiAgICAgICAgc2VsZl9zcGVjX3ZhbDogIiIsCiAgICAgICAgc2VsZl9zcGVjX2lucHV0OiBmYWxzZSwKICAgICAgICBncm91cFNwZWNOYW1lOiAiIiwKICAgICAgICBwYXJhbXM6IFtdCiAgICAgIH1dLAogICAgICBhZGRfbW9kZWw6IGZhbHNlLAogICAgICAvLyDmlrDlu7rliIbnsbsKICAgICAgZGlhbG9nVGl0bGU6ICLmlrDlu7rliIbnsbsiLAogICAgICBwaWRfYXJyOiBbXSwKICAgICAgYWRkX0JyYW5kOiBmYWxzZSwKICAgICAgLy8g5paw5aKe5ZOB54mMCiAgICAgIHBhZ2VOYW1lOiAiIiwKICAgICAgLy8g5pqC5a2Y5pWw5o2u5Y+C5pWwCiAgICAgIGxvYWRpbmc6IGZhbHNlLAogICAgICBpbWdfbGlzdDogW10sCiAgICAgIC8vIOWFs+mUruivjQogICAgICBkeW5hbWljVGFnczogW10sCiAgICAgIGlucHV0VmlzaWJsZTogZmFsc2UsCiAgICAgIGlucHV0VmFsdWU6ICIiLAogICAgICAvLyDlhbPplK7or40gRU5ECiAgICAgIGFzc2lzdF9tb2RlbDogZmFsc2UsCiAgICAgIGVkaXRfYXNzaXN0X21vZGVsOiBmYWxzZSwKICAgICAgYXNzaXN0X2luZGV4OiAwLAogICAgICB1bml0X29wdGlvbnM6IFtdLAogICAgICAvLyDorqHph4/ljZXkvY3lvLnnqpcKICAgICAgYXNzaXN0X2Zvcm06IHsKICAgICAgICB1bml0TmFtZTogIiIsCiAgICAgICAgaXNNYXN0ZXI6IDQsCiAgICAgICAgaXNEZWZhdWx0OiA0LAogICAgICAgIHdlaWdodDogIiIsCiAgICAgICAgdW5pdElkOiAiIiwKICAgICAgICBiYXJDb2RlOiAiIiwKICAgICAgICBjb252ZXJzaW9uOiAiIgogICAgICB9LAogICAgICBzZWxfYnJhbmQ6IGZhbHNlLAogICAgICAvLyDmiZPlvIDlk4HniYzpgInmi6nlvLnnqpcKICAgICAgc2VsX3Nob3A6IGZhbHNlLAogICAgICAvLyDmiZPlvIDlupfpk7rpgInmi6nlvLnnqpcKICAgICAgbWFzdGVyX3VuaXRfbmFtZTogIiIsCiAgICAgIGJhc2VfZm9ybTogewogICAgICAgIC8vICDln7rmnKzkv6Hmga8KICAgICAgICBzcGVjVHlwZTogMSwKICAgICAgICAvLyDmmK/lkKblpJrop4TmoLwKICAgICAgICBkZWxVbml0SWRzOiBbXSwKICAgICAgICAvLyDovoXliqnljZXkvY3liKDpmaRkZWxVbml0SWRzICh1bml0SWQpCiAgICAgICAgZGVsU3BlY1NrdUlkczogW10sCiAgICAgICAgLy8g5bGe5oCn5Yig6ZmkZGVsU3BlY1NrdUlkc++8iOi/meS4queUqGlk77yJCiAgICAgICAgYnJhbmNoVW5pdDogW10sCiAgICAgICAgYnJhbmROYW1lOiAiIiwKICAgICAgICBjYXRlZ29yeVBhdGg6IFtdLAogICAgICAgIC8vIOWIhuexu+mAieaLqQogICAgICAgIGFzc2lzdENhdGVnb3J5UGF0aDogW10sCiAgICAgICAgLy/lia/liIbnsbsKICAgICAgICBub1NhbGVzU2hvcDogW10sCiAgICAgICAgdW5pdERhdGE6IFtdLAogICAgICAgIGlzRXE6IDQsCiAgICAgICAgLy/mmK/lkKbmmK/mioTnoIHllYblk4EKICAgICAgICBtYXN0ZXJVbml0OiB7CiAgICAgICAgICBpc0RlZmF1bHQ6IDUsCiAgICAgICAgICBpc01hc3RlcjogNSwKICAgICAgICAgIHdlaWdodDogIiIsCiAgICAgICAgICB1bml0TmFtZTogIiIsCiAgICAgICAgICB1bml0SWQ6ICIiLAogICAgICAgICAgYmFyQ29kZTogIiIKICAgICAgICB9LAogICAgICAgIGRlc2NyaWJlOiAiIiwKICAgICAgICBzdG9yYWdlOiAiIiwKICAgICAgICB0aXRsZTogIiIsCiAgICAgICAgY29kZTogIiIsCiAgICAgICAgYmFyQ29kZTogIiIsCiAgICAgICAgLy8g5ZWG5ZOB5p2h56CBCiAgICAgICAgY2F0ZWdvcnlJZDogIiIsCiAgICAgICAgYXNzaXN0Q2F0ZWdvcnlJZDogIiIsCiAgICAgICAgZXhwaXJlVGltZTogIiIsCiAgICAgICAgYnJhbmRJZDogIiIsCiAgICAgICAgdGFnOiAiIiwKICAgICAgICBkZXNjcmlwdGlvbjogIiIsCiAgICAgICAgc2FsZXNTaG9wOiAiIiwKICAgICAgICBpbWFnZXM6IFtdLAogICAgICAgIG1lcmNoYW50SWQ6ICIiIC8v5ZWG5oi3SUQKCiAgICAgIH0sCiAgICAgIGJhc2VfcnVsZXM6IHsKICAgICAgICAvLyDln7rmnKzkv6Hmga/pqozor4EKICAgICAgICB0aXRsZTogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogIuivt+i+k+WFpeWVhuWTgeWQjeensCIsCiAgICAgICAgICB0cmlnZ2VyOiAiYmx1ciIKICAgICAgICB9XSwKICAgICAgICBjYXRlZ29yeUlkOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup5ZWG5ZOB5YiG57G7IiwKICAgICAgICAgIHRyaWdnZXI6ICJjaGFuZ2UiCiAgICAgICAgfV0sCiAgICAgICAgZXhwaXJlVGltZTogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogIuivt+i+k+WFpeWVhuWTgeS/nei0qOacnyIsCiAgICAgICAgICB0cmlnZ2VyOiAiYmx1ciIKICAgICAgICB9XSwKICAgICAgICBtYXN0ZXJVbml0OiBbewogICAgICAgICAgdmFsaWRhdG9yOiB2YWxpZGF0ZVVuaXQsCiAgICAgICAgICB0cmlnZ2VyOiAiY2hhbmdlIgogICAgICAgIH1dCiAgICAgIH0sCiAgICAgIGltYWdlc19ydWxlczogewogICAgICAgIGltYWdlczogW3sKICAgICAgICAgIHR5cGU6ICJhcnJheSIsCiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICLor7fkuIrkvKDllYblk4Hlm77niYciLAogICAgICAgICAgdHJpZ2dlcjogImNoYW5nZSIKICAgICAgICB9XQogICAgICB9LAogICAgICBiYXNlX2dvb2RzX2lkOiAwLAogICAgICBpc0VkaXRTcGVjOiA1LAogICAgICAvLyA1IOihqOekuuatpOWVhuWTgeS7juacqumHh+i0rei/h++8jOWFgeiuuOeUqOaIt+maj+aEj+e8lui+keWNleS9jeWSjOWxnuaAp++8mzQg6KGo56S65ZWG5ZOB5bey57uP6YeH6LSt6L+H77yM6ZqQ6JeP5re75Yqg5bGe5oCn5oyJ6ZKu77yM6YG/5YWNc2t1aWTph43nu4QKICAgICAgaXNOZXc6IDUsCiAgICAgIC8vIDUg5qCH56S66L+Z5piv5LiA5Liq5pyA6L+R5paw5aKe55qE5ZWG5ZOB77yM5Z+65pys5Y2V5L2N5Li65pyA5bCP5Y2V5L2N77yMNOagh+ekuui/meaYr+S5i+WJjeeahOiAgeaVsOaNru+8jOWfuuacrOWNleS9jeS4uuacgOWkp+WNleS9jTMKICAgICAgc2VsX21lcmNoYW50OiBmYWxzZSwKICAgICAgc2VsX2NpdGllczogW10sCiAgICAgIGNhdGVnb3J5X2RhdGE6IFtdLAogICAgICAvL+WVhuWTgeWIhuexu+WIl+ihqAogICAgICBjYXRlX3Byb3BzOiB7CiAgICAgICAgbGFiZWw6ICJ0aXRsZSIsCiAgICAgICAgdmFsdWU6ICJpZCIsCiAgICAgICAgY2hlY2tTdHJpY3RseTogdHJ1ZQogICAgICB9LAogICAgICBhc3Npc3RfY2F0ZTogW3sKICAgICAgICBhc3Npc3RDYXRlZ29yeVBhdGg6IFtdCiAgICAgIH1dLAogICAgICBwYWdlX3RhYnM6ICIxIiwKICAgICAgc3RlcF9hY3RpdmU6IDEKICAgIH07CiAgfSwKCiAgYXN5bmMgY3JlYXRlZCgpIHsKICAgIC8vIHRoaXMuZ2V0QWxsR29vZHNTdXBwb3J0KCk7CiAgICAvLyDllYblk4HliIbnsbvliJfooagKICAgIGF3YWl0IHRoaXMuZ2V0QWxsQ2F0ZWdvcnlQb3N0KCk7CiAgICB0aGlzLnBhZ2VOYW1lID0gdGhpcy4kcm91dGUubmFtZTsgLy8g5ZWG5oi3566h55CGCgogICAgYXdhaXQgdGhpcy5nZXRBbGxNZXJjaGFudExpc3QoKTsgLy8g5bGe5oCn566h55CGCgogICAgYXdhaXQgdGhpcy5TcGVjTWFuYWdlZ2V0QWxsKCk7CiAgICBhd2FpdCB0aGlzLmdldEFsbFVuaXQoKTsKCiAgICBpZiAodGhpcy4kcm91dGUucGFyYW1zLmlkKSB7CiAgICAgIHRoaXMuYmFzZV9nb29kc19pZCA9IHRoaXMuJHJvdXRlLnBhcmFtcy5pZDsKICAgICAgYXdhaXQgdGhpcy5nZXRHb29kc0Jhc2ljSW5mb0J5SWQoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIOiOt+WPluaaguWtmOS/oeaBrwogICAgICBhd2FpdCB0aGlzLmdldFBhdXNlU2F2ZSgpOwogICAgfQogIH0sCgogIGFzeW5jIGFjdGl2YXRlZCgpIHsKICAgIGlmICh0aGlzLiRfaXNJbml0KCkpIHJldHVybjsKICAgIHRoaXMucGFnZU5hbWUgPSB0aGlzLiRyb3V0ZS5uYW1lOwogICAgdGhpcy5zdGVwX2FjdGl2ZSA9IDE7CiAgICB0aGlzLnBhZ2VfdGFicyA9ICIxIjsKCiAgICBpZiAodGhpcy4kcm91dGUucGFyYW1zLmlkKSB7CiAgICAgIHRoaXMuYmFzZV9nb29kc19pZCA9IHRoaXMuJHJvdXRlLnBhcmFtcy5pZDsKICAgICAgYXdhaXQgdGhpcy5nZXRHb29kc0Jhc2ljSW5mb0J5SWQoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIOiOt+WPluaaguWtmOS/oeaBrwogICAgICBhd2FpdCB0aGlzLmdldFBhdXNlU2F2ZSgpOwogICAgfQogIH0sCgogIG1ldGhvZHM6IHsKICAgIC8vIOm7mOiupOWNleS9jWNoYW5nZQogICAgaXNEZWZhdWx0Q2hhbmdlKHZhbCwgaW5kZXgsIHNJbmRleCkgewogICAgICAvLyDlpJrop4TmoLzmlbDmja4KICAgICAgaWYgKHRoaXMuc3BlY190YWJsZV9EYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICBpZiAodmFsID09PSA1KSB7CiAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLnNwZWNfdGFibGVfRGF0YSk7CiAgICAgICAgICB0YXJnZXQuZm9yRWFjaCgoaXRlbSwgaW5kZXhTKSA9PiB7CiAgICAgICAgICAgIGl0ZW0uYmFyQ29kZS5mb3JFYWNoKChpdGVtQiwgaW5kZXhCKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGluZGV4UyAhPT0gc0luZGV4KSB7CiAgICAgICAgICAgICAgICBpdGVtQi5pc0RlZmF1bHQgPSA0OwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoaW5kZXhCICE9PSBpbmRleCkgewogICAgICAgICAgICAgICAgICBpdGVtQi5pc0RlZmF1bHQgPSA0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuc3BlY190YWJsZV9EYXRhID0gdGFyZ2V0OwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAodmFsID09PSA1KSB7CiAgICAgICAgICBpZiAoaW5kZXggPT09ICJtYXN0ZXJVbml0IikgewogICAgICAgICAgICB0aGlzLmJhc2VfZm9ybS5icmFuY2hVbml0LmZvckVhY2goaXRlbSA9PiB7CiAgICAgICAgICAgICAgaXRlbS5pc0RlZmF1bHQgPSA0OwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuYmFzZV9mb3JtLm1hc3RlclVuaXQuaXNEZWZhdWx0ID0gNDsKICAgICAgICAgICAgdGhpcy5iYXNlX2Zvcm0uYnJhbmNoVW5pdC5mb3JFYWNoKChpdGVtLCBpbmRleFUpID0+IHsKICAgICAgICAgICAgICBpZiAoaW5kZXhVICE9PSBpbmRleCkgewogICAgICAgICAgICAgICAgaXRlbS5pc0RlZmF1bHQgPSA0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAoKICAgIC8vIOivt+axguWfuuacrOWNleS9jeaVsOaNrgogICAgYXN5bmMgZ2V0QWxsVW5pdCgpIHsKICAgICAgY29uc3QgewogICAgICAgIGRhdGEKICAgICAgfSA9IGF3YWl0IGdldEFsbFVuaXQoewogICAgICAgIHBhZ2U6IDEsCiAgICAgICAgcGFnZVNpemU6IDk5LAogICAgICAgIHNvdXJjZTogNAogICAgICB9KTsKICAgICAgdGhpcy51bml0X29wdGlvbnMgPSBkYXRhOwogICAgfSwKCiAgICBtb2RlbENsb3NlKCkgewogICAgICB0aGlzLmFkZF9tb2RlbCA9IGZhbHNlOwogICAgfSwKCiAgICAvLyDmiZPlvIDmlrDlop7lvLnnqpcKICAgIG9wZW5Nb2RlbCh0aXRsZSwgcm93KSB7CiAgICAgIHRoaXMuYWRkX21vZGVsID0gdHJ1ZTsKICAgICAgdGhpcy5kaWFsb2dUaXRsZSA9IHRpdGxlOwoKICAgICAgaWYgKHRpdGxlID09PSAi5paw5bu65a2Q5YiG57G7IikgewogICAgICAgIGxldCBsaW5rID0gcm93LmxpbmsgPyByb3cubGluay5zcGxpdCgiLCIpLm1hcChpdGVtID0+IHsKICAgICAgICAgIHJldHVybiBwYXJzZUludChpdGVtKTsKICAgICAgICB9KSA6IFtdOwogICAgICAgIGxpbmsucHVzaChyb3cuaWQpOwogICAgICAgIHRoaXMucGlkX2FyciA9IGxpbms7CiAgICAgIH0KICAgIH0sCgogICAgLy8g5paw5aKeL+e8lui+keWIhuexuwogICAgYXN5bmMgc3ViQ2F0ZWdvcnkoKSB7CiAgICAgIGF3YWl0IHRoaXMuZ2V0QWxsQ2F0ZWdvcnlQb3N0KCk7CiAgICB9LAoKICAgIC8vIOaWsOW7uuWTgeeJjAogICAgc3VibWl0QnJhbmQoKSB7CiAgICAgIHRoaXMuYWRkX0JyYW5kID0gZmFsc2U7CiAgICB9LAoKICAgIC8vIOa3u+WKoOaaguWtmAogICAgYXN5bmMgQWRkVGVtKCkgewogICAgICBjb25zdCBwYXJhbXMgPSB7IC4uLnRoaXMuYmFzZV9mb3JtLAogICAgICAgIHNwZWNHcm91cDogdGhpcy5za3VfbGlzdCwKICAgICAgICBzcGVjTXVsdGlwbGU6IHRoaXMuc3BlY190YWJsZV9EYXRhLAogICAgICAgIHRhZzogdGhpcy5keW5hbWljVGFncywKICAgICAgICBhc3Npc3RfY2F0ZTogdGhpcy5hc3Npc3RfY2F0ZQogICAgICB9OwogICAgICBjb25zdCBkYXRhID0gYXdhaXQgYWRkUGF1c2VTYXZlKHsKICAgICAgICBrZXk6IHRoaXMucGFnZU5hbWUsCiAgICAgICAgZGF0YTogcGFyYW1zCiAgICAgIH0pOwogICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICB0eXBlOiAic3VjY2VzcyIsCiAgICAgICAgbWVzc2FnZTogIuaaguWtmOaIkOWKnyIKICAgICAgfSk7CiAgICAgIHRoaXMuJGNsb3NlQ3VycmVudEdvRWRpdCgiL2dvb2RzL21hbmFnZUcvQmFzZURhdGFMaXN0Iik7CiAgICB9LAoKICAgIC8vIOWIoOmZpOaaguWtmOS/oeaBrwogICAgYXN5bmMgZGVsUGF1c2VTYXZlKHR5cGUpIHsKICAgICAgY29uc3QgZGF0YSA9IGRlbFBhdXNlU2F2ZSh7CiAgICAgICAga2V5OiB0aGlzLnBhZ2VOYW1lCiAgICAgIH0pOwoKICAgICAgaWYgKHR5cGUpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICAgIG1lc3NhZ2U6ICLmuIXpmaTmmoLlrZjmiJDlip8iCiAgICAgICAgfSk7CiAgICAgICAgdGhpcy4kY2xvc2VDdXJyZW50R29FZGl0KCIvZ29vZHMvbWFuYWdlRy9BZGRCYXNlRGF0YSIpOwogICAgICB9CiAgICB9LAoKICAgIC8vIOiOt+WPluaaguWtmOS/oeaBrwogICAgYXN5bmMgZ2V0UGF1c2VTYXZlKCkgewogICAgICBjb25zdCB7CiAgICAgICAgZGF0YQogICAgICB9ID0gYXdhaXQgZ2V0UGF1c2VTYXZlKHsKICAgICAgICBrZXk6IHRoaXMucGFnZU5hbWUKICAgICAgfSk7CiAgICAgIGlmIChKU09OLnN0cmluZ2lmeShkYXRhKSA9PT0gInt9IikgcmV0dXJuOwogICAgICB0aGlzLmJhc2VfZm9ybSA9IHsgLi4uZGF0YSwKICAgICAgICBjYXRlZ29yeVBhdGg6IEFycmF5LmlzQXJyYXkoZGF0YS5jYXRlZ29yeVBhdGgpID8gZGF0YS5jYXRlZ29yeVBhdGggOiBbXQogICAgICB9OwogICAgICB0aGlzLmFzc2lzdF9jYXRlID0gZGF0YS5hc3Npc3RfY2F0ZSB8fCBbewogICAgICAgIGFzc2lzdENhdGVnb3J5UGF0aDogW10KICAgICAgfV07CiAgICAgIHRoaXMuc2t1X2xpc3QgPSBkYXRhLnNwZWNHcm91cCB8fCBbXTsKICAgICAgdGhpcy5zcGVjX3RhYmxlX0RhdGEgPSBkYXRhLnNwZWNNdWx0aXBsZSB8fCBbXTsKICAgICAgdGhpcy5keW5hbWljVGFncyA9IGRhdGEudGFnIHx8IFtdOwoKICAgICAgaWYgKGRhdGEuaW1hZ2VzKSB7CiAgICAgICAgdGhpcy5pbWdfbGlzdCA9IGRhdGEuaW1hZ2VzLm1hcChpdGVtID0+IHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIG5hbWU6ICIiLAogICAgICAgICAgICB1cmw6IGl0ZW0KICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCgogICAgLy8g6KeE5qC85piO57uG5Yig6ZmkCiAgICBzcGVjRGV0YWlsRGVsKHJvdywgaW5kZXgpIHsKICAgICAgaWYgKHJvdy5zcGVjR3JvdXBIYXNoICYmIHRoaXMuYmFzZV9mb3JtLmRlbFNwZWNTa3VJZHMuaW5kZXhPZihyb3cuc3BlY0dyb3VwSGFzaCkgPT09IC0xKSB7CiAgICAgICAgdGhpcy5iYXNlX2Zvcm0uZGVsU3BlY1NrdUlkcy5wdXNoKHJvdy5zcGVjR3JvdXBIYXNoKTsKICAgICAgfQoKICAgICAgdGhpcy5zcGVjX3RhYmxlX0RhdGEuc3BsaWNlKGluZGV4LCAxKTsKICAgICAgY29uc3Qgc3BlY05hbWVBcnIgPSByb3cuc3BlY05hbWUuaW5kZXhPZigiXyIpID8gcm93LnNwZWNOYW1lLnNwbGl0KCJfIikgOiByb3cuc3BlY05hbWU7IC8vIGNvbnNvbGUubG9nKCdzcGVjTmFtZUFycicsIHJvdy5zcGVjTmFtZSkKICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMuc3BlY190YWJsZV9EYXRhJywgdGhpcy5zcGVjX3RhYmxlX0RhdGEpCgogICAgICBsZXQgaXNGYWxzZVZhbCA9ICIiOwoKICAgICAgZm9yIChsZXQgaSBpbiBzcGVjTmFtZUFycikgewogICAgICAgIGxldCBpdGVtUyA9IHNwZWNOYW1lQXJyW2ldOyAvLyBjb25zb2xlLmxvZyhpdGVtUykKICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnNwZWNfdGFibGVfRGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5zcGVjTmFtZS5pbmRleE9mKGl0ZW1TKSA+IC0xKSkKCiAgICAgICAgaWYgKCF0aGlzLnNwZWNfdGFibGVfRGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5zcGVjTmFtZS5pbmRleE9mKGl0ZW1TKSA+IC0xKSkgewogICAgICAgICAgaXNGYWxzZVZhbCA9IGl0ZW1TOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IC8vIGNvbnNvbGUubG9nKCdpc1N0YXksJywgaXNGYWxzZVZhbCkKICAgICAgLy8gY29uc29sZS5sb2codGhpcy5za3VfbGlzdCkKCgogICAgICBpZiAoaXNGYWxzZVZhbCkgewogICAgICAgIHRoaXMuc2t1X2xpc3QuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICAgIGNvbnN0IGluZGV4UCA9IGl0ZW0ucGFyYW1zLmZpbmRJbmRleChpdGVtUCA9PiBpdGVtUC5zcGVjTmFtZSA9PT0gaXNGYWxzZVZhbCk7CgogICAgICAgICAgaWYgKGluZGV4UCA+IC0xKSB7CiAgICAgICAgICAgIGl0ZW0ucGFyYW1zLnNwbGljZShpbmRleFAsIDEpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9LAoKICAgIC8vIGRkZWwodmFsKSB7CiAgICAvLyAgIHRoaXMuZnJvbS5jYXRlZ29yeVBhdGggPSB2YWw7CiAgICAvLyB9LAogICAgLy8g6KeE5qC85Zu+54mHCiAgICB1cGxvYWRTcGVjU3VjY2Vzcyh2YWwsIGluZGV4KSB7CiAgICAgIGxldCB0YXJnZXQgPSB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLnNwZWNfdGFibGVfRGF0YSk7CiAgICAgIHRhcmdldFtpbmRleF0uc3BlY0ltYWdlID0gewogICAgICAgIG5hbWU6ICIiLAogICAgICAgIHVybDogdmFsCiAgICAgIH07CiAgICAgIHRoaXMuc3BlY190YWJsZV9EYXRhID0gdGFyZ2V0OwogICAgfSwKCiAgICAvLyDmt7vliqDop4TmoLzpobnnm64KICAgIGFkZFNrdVAoKSB7CiAgICAgIGlmICh0aGlzLmlzRWRpdFNwZWMgPT09IDUpIHsKICAgICAgICB0aGlzLnNrdV9saXN0LnB1c2goewogICAgICAgICAgc3BlY19kYXRhX2NoaWxkOiBbXSwKICAgICAgICAgIHNlbGZfc3BlY19pbnB1dDogZmFsc2UsCiAgICAgICAgICBzZWxmX3NwZWNfdmFsOiAiIiwKICAgICAgICAgIGdyb3VwU3BlY0lkOiAiIiwKICAgICAgICAgIGdyb3VwU3BlY05hbWU6ICIiLAogICAgICAgICAgcGFyYW1zOiBbXQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJGNvbmZpcm0oIuaWsOWinuinhOagvOS8muWvvOiHtOWOn+acieW6k+WtmOmHjee9rizor7fosKjmhY7mk43kvZwhIOaYr+WQpue7p+e7rT8iLCAi5o+Q56S6IiwgewogICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICLnu6fnu63mlrDlop4iLAogICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogIuWPlua2iCIsCiAgICAgICAgICB0eXBlOiAid2FybmluZyIKICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgIHRoaXMuc2t1X2xpc3QucHVzaCh7CiAgICAgICAgICAgIHNwZWNfZGF0YV9jaGlsZDogW10sCiAgICAgICAgICAgIHNlbGZfc3BlY19pbnB1dDogZmFsc2UsCiAgICAgICAgICAgIHNlbGZfc3BlY192YWw6ICIiLAogICAgICAgICAgICBncm91cFNwZWNJZDogIiIsCiAgICAgICAgICAgIGdyb3VwU3BlY05hbWU6ICIiLAogICAgICAgICAgICBwYXJhbXM6IFtdCiAgICAgICAgICB9KTsKICAgICAgICB9KS5jYXRjaCgoKSA9PiB7fSk7CiAgICAgIH0KICAgIH0sCgogICAgLy8g6KeE5qC85piO5YiH5o2iCiAgICBncm91cFNwZWNJZENoYW5nZSh2YWwsIGluZGV4UykgewogICAgICBsZXQgdGFyZ2V0ID0gdGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5za3VfbGlzdCk7CiAgICAgIGNvbnN0IHNwZWNEYXRhSXRlbSA9IHRoaXMuc3BlY19kYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSB2YWwpOwogICAgICBjb25zdCBpc0hhdmUgPSB0YXJnZXQuZmluZChpdGVtID0+IGl0ZW0uZ3JvdXBTcGVjTmFtZSA9PT0gc3BlY0RhdGFJdGVtLnNwZWNOYW1lKTsKCiAgICAgIGlmIChpc0hhdmUpIHsKICAgICAgICB0YXJnZXRbaW5kZXhTXS5ncm91cFNwZWNJZCA9ICIiOwogICAgICAgIHRoaXMuc2t1X2xpc3QgPSB0YXJnZXQ7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKGDlsZ7mgKc644CQJHtzcGVjRGF0YUl0ZW0uc3BlY05hbWV944CR5bey5a2Y5ZyoYCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB0YXJnZXRbaW5kZXhTXS5ncm91cFNwZWNOYW1lID0gc3BlY0RhdGFJdGVtLnNwZWNOYW1lOwogICAgICB0YXJnZXRbaW5kZXhTXS5zcGVjX2RhdGFfY2hpbGQgPSBzcGVjRGF0YUl0ZW0uY2hpbGQgfHwgW107CiAgICAgIHRhcmdldFtpbmRleFNdLnBhcmFtcyA9IFtdOwogICAgICB0aGlzLnNrdV9saXN0ID0gdGFyZ2V0OyAvLyDph43mjpLop4TmoLznu4TlkIgKICAgICAgLy8gdGhpcy5zcGVjR3JvdXBSZXN0KCkKICAgICAgLy8gY29uc29sZS5sb2codGhpcy5za3VfbGlzdCkKICAgICAgLy8gY29uc29sZS5sb2codGhpcy5zcGVjX3RhYmxlX0RhdGEpCiAgICB9LAoKICAgIC8vIOmHjeaOkuinhOagvOe7hOWQiAogICAgc3BlY0dyb3VwUmVzdCgpIHsKICAgICAgLy8g57yW6L6R6aG16Z2i5a2Y5YKo6K+m5oOF5o6l5Y+j6L+U5Zue6KeE5qC857uE5ZCIaWQKICAgICAgdGhpcy5zcGVjX3RhYmxlX0RhdGEuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICBpZiAoaXRlbS5zcGVjR3JvdXBIYXNoICYmIHRoaXMuYmFzZV9mb3JtLmRlbFNwZWNTa3VJZHMuaW5kZXhPZihpdGVtLnNwZWNHcm91cEhhc2gpID09PSAtMSkgewogICAgICAgICAgdGhpcy5iYXNlX2Zvcm0uZGVsU3BlY1NrdUlkcy5wdXNoKGl0ZW0uc3BlY0dyb3VwSGFzaCk7CiAgICAgICAgfQogICAgICB9KTsgLy8g5aSH5Lu95LiA5Lu96KeE5qC85piO57uG77yM55So5p2l5aGr5YWF6YeN5o6S6KeE5qC857uE5LmL5YmN55qE5pWw5o2uCgogICAgICBjb25zdCBjbG9uZVNwZWNHcm91cCA9IHRoaXMuJF9jb21tb24uZGVlcENsb25lKHRoaXMuc3BlY190YWJsZV9EYXRhKTsKICAgICAgY29uc3Qgc2t1QXJyID0gdGhpcy5za3VfbGlzdC5tYXAoaXRlbSA9PiB7CiAgICAgICAgaXRlbS5wYXJhbXMgPSBpdGVtLnBhcmFtcy5tYXAoaXRlbVAgPT4gewogICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbVAsCiAgICAgICAgICAgIGdyb3VwU3BlY05hbWU6IGl0ZW0uZ3JvdXBTcGVjTmFtZQogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gaXRlbS5wYXJhbXM7CiAgICAgIH0pOyAvLyBjb25zb2xlLmxvZygnc2t1QXJyOjonLCBza3VBcnIpCgogICAgICB0aGlzLnNwZWNfdGFibGVfRGF0YSA9IHRoaXMuZG9FeGNoYW5nZShza3VBcnIpOyAvLyBjb25zb2xlLmxvZyh0aGlzLnNwZWNfdGFibGVfRGF0YSkKCiAgICAgIHRoaXMuc3BlY190YWJsZV9EYXRhLmZvckVhY2goaXRlbSA9PiB7CiAgICAgICAgY29uc3QgaW5kZXggPSBjbG9uZVNwZWNHcm91cC5maW5kSW5kZXgoaXRlbUMgPT4gaXRlbUMuaWQgPT09IGl0ZW0uaWQpOwoKICAgICAgICBpZiAoaW5kZXggPiAtMSkgewogICAgICAgICAgaXRlbS5iYXJDb2RlID0gY2xvbmVTcGVjR3JvdXBbaW5kZXhdLmJhckNvZGU7CiAgICAgICAgICBpdGVtLnNwZWNJbWFnZSA9IGNsb25lU3BlY0dyb3VwW2luZGV4XS5zcGVjSW1hZ2U7CiAgICAgICAgICBpdGVtLmludmVudG9yeSA9IGNsb25lU3BlY0dyb3VwW2luZGV4XS5pbnZlbnRvcnk7CiAgICAgICAgICBpdGVtLmlzRWRpdFNwZWMgPSBjbG9uZVNwZWNHcm91cFtpbmRleF0uaXNFZGl0U3BlYyB8fCA1OwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAoKICAgIC8vIOinhOagvOe7hOWQiAogICAgZG9FeGNoYW5nZShkb3VibGVBcnJheXMpIHsKICAgICAgY29uc3QgbGVuID0gZG91YmxlQXJyYXlzLmxlbmd0aDsKICAgICAgbGV0IHVuaXREYXRhID0gdGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5iYXNlX2Zvcm0uYnJhbmNoVW5pdCk7CiAgICAgIHVuaXREYXRhLnVuc2hpZnQodGhpcy5iYXNlX2Zvcm0ubWFzdGVyVW5pdCk7CiAgICAgIGNvbnN0IGJhckNvZGVBcnIgPSB1bml0RGF0YS5tYXAoaXRlbSA9PiB7CiAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSwKICAgICAgICAgIGJhckNvZGU6ICIiLAogICAgICAgICAgd2VpZ2h0OiAiIiwKICAgICAgICAgIGlzRGVmYXVsdDogNAogICAgICAgIH07CiAgICAgIH0pOwoKICAgICAgaWYgKGxlbiA+PSAyKSB7CiAgICAgICAgY29uc3QgbGVuMSA9IGRvdWJsZUFycmF5c1swXS5sZW5ndGg7CiAgICAgICAgY29uc3QgbGVuMiA9IGRvdWJsZUFycmF5c1sxXS5sZW5ndGg7CiAgICAgICAgY29uc3QgbmV3bGVuID0gbGVuMSAqIGxlbjI7CiAgICAgICAgY29uc3QgdGVtcCA9IG5ldyBBcnJheShuZXdsZW4pOwogICAgICAgIGxldCBpbmRleCA9IDA7CgogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuMTsgaSsrKSB7CiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlbjI7IGorKykgewogICAgICAgICAgICB0ZW1wW2luZGV4XSA9IHsKICAgICAgICAgICAgICBncm91cFNwZWNJZDogZG91YmxlQXJyYXlzWzBdW2ldLmdyb3VwU3BlY0lkICsgIl8iICsgZG91YmxlQXJyYXlzWzFdW2pdLmdyb3VwU3BlY0lkLAogICAgICAgICAgICAgIGdyb3VwU3BlY05hbWU6IGRvdWJsZUFycmF5c1swXVtpXS5ncm91cFNwZWNOYW1lICsgIl8iICsgZG91YmxlQXJyYXlzWzFdW2pdLmdyb3VwU3BlY05hbWUsCiAgICAgICAgICAgICAgaWQ6IGRvdWJsZUFycmF5c1swXVtpXS5pZCArICJfIiArIGRvdWJsZUFycmF5c1sxXVtqXS5pZCwKICAgICAgICAgICAgICBzcGVjTmFtZTogZG91YmxlQXJyYXlzWzBdW2ldLnNwZWNOYW1lICsgIl8iICsgZG91YmxlQXJyYXlzWzFdW2pdLnNwZWNOYW1lLAogICAgICAgICAgICAgIHNwZWNJbWFnZTogewogICAgICAgICAgICAgICAgbmFtZTogIiIsCiAgICAgICAgICAgICAgICB1cmw6ICIiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBiYXJDb2RlOiB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZShiYXJDb2RlQXJyKQogICAgICAgICAgICB9OwogICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbGV0IG5ld0FycmF5ID0gbmV3IEFycmF5KGxlbiAtIDEpOwogICAgICAgIG5ld0FycmF5WzBdID0gdGVtcDsKCiAgICAgICAgaWYgKGxlbiA+IDIpIHsKICAgICAgICAgIGxldCBfY291bnQgPSAxOwoKICAgICAgICAgIGZvciAobGV0IGkgPSAyOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgbmV3QXJyYXlbX2NvdW50XSA9IGRvdWJsZUFycmF5c1tpXTsKICAgICAgICAgICAgX2NvdW50Kys7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpcy5kb0V4Y2hhbmdlKG5ld0FycmF5KTsKICAgICAgfSBlbHNlIGlmIChsZW4gPiAwKSB7CiAgICAgICAgcmV0dXJuIGRvdWJsZUFycmF5c1swXS5tYXAoaXRlbSA9PiB7CiAgICAgICAgICByZXR1cm4geyAuLi5pdGVtLAogICAgICAgICAgICBiYXJDb2RlOiB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZShiYXJDb2RlQXJyKSwKICAgICAgICAgICAgc3BlY0ltYWdlOiB7CiAgICAgICAgICAgICAgbmFtZTogIiIsCiAgICAgICAgICAgICAgdXJsOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgfSwKCiAgICAvLyDoh6rlrprkuYnlsZ7mgKflgLzovpPlhaXmoYbnoa7lrpogIOa3u+WKoOiHquWumuS5ieWxnuaApwogICAgYXN5bmMgc2VsZlNwZWNDb25maXJtKGluZGV4KSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJF9jb21tb24uZGVlcENsb25lKHRoaXMuc2t1X2xpc3QpOwoKICAgICAgaWYgKCF0YXJnZXRbaW5kZXhdLnNlbGZfc3BlY192YWwpIHsKICAgICAgICB0YXJnZXRbaW5kZXhdLnNlbGZfc3BlY19pbnB1dCA9IGZhbHNlOwogICAgICAgIHRoaXMuc2t1X2xpc3QgPSB0YXJnZXQ7CiAgICAgICAgcmV0dXJuOwogICAgICB9IC8vIOajgOafpeW9k+WJjeWxnuaAp+WAvOaYr+WQpuW3suiiq+mAieaLqQoKCiAgICAgIGNvbnN0IGlzSGF2ZSA9IHRhcmdldFtpbmRleF0ucGFyYW1zLmZpbmQoaXRlbSA9PiBpdGVtLnNwZWNOYW1lID09PSB0YXJnZXRbaW5kZXhdLnNlbGZfc3BlY192YWwpOwoKICAgICAgaWYgKGlzSGF2ZSkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZyhg5bGe5oCn5YC8OuOAkCR7dGFyZ2V0W2luZGV4XS5zZWxmX3NwZWNfdmFsfeOAkeW3suWtmOWcqGApOwogICAgICAgIHRhcmdldFtpbmRleF0uc2VsZl9zcGVjX3ZhbCA9ICIiOwogICAgICAgIHRhcmdldFtpbmRleF0uc2VsZl9zcGVjX2lucHV0ID0gZmFsc2U7CiAgICAgICAgdGhpcy5za3VfbGlzdCA9IHRhcmdldDsKICAgICAgICByZXR1cm47CiAgICAgIH0gLy8g5bGe5oCn5YC85pyq6KKr6YCJ5oupIOWBmuaOpeWPo+ivt+axggoKCiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhCiAgICAgIH0gPSBhd2FpdCBkZWZpbmVTcGVjKHsKICAgICAgICBzcGVjTmFtZTogdGFyZ2V0W2luZGV4XS5zZWxmX3NwZWNfdmFsLAogICAgICAgIHBpZDogdGFyZ2V0W2luZGV4XS5ncm91cFNwZWNJZCwKICAgICAgICBoaWRkZW46IDQKICAgICAgfSk7CiAgICAgIHRhcmdldFtpbmRleF0uc2VsZl9zcGVjX2lucHV0ID0gZmFsc2U7CiAgICAgIHRhcmdldFtpbmRleF0ucGFyYW1zLnB1c2goewogICAgICAgIHNwZWNOYW1lOiBkYXRhLnNwZWNOYW1lLAogICAgICAgIGlkOiBkYXRhLmlkLAogICAgICAgIGdyb3VwU3BlY0lkOiB0YXJnZXRbaW5kZXhdLmdyb3VwU3BlY0lkCiAgICAgIH0pOwogICAgICB0YXJnZXRbaW5kZXhdLnNlbGZfc3BlY192YWwgPSAiIjsKICAgICAgdGhpcy5za3VfbGlzdCA9IHRhcmdldDsgLy8g6YeN5o6S6KeE5qC857uE5ZCICgogICAgICB0aGlzLnNwZWNHcm91cFJlc3QoKTsKICAgIH0sCgogICAgLy8g5paw5aKe6KeE5qC85YC8CiAgICBhZGRTcGVjVmFsKGluZGV4UykgewogICAgICB0aGlzLnNwZWNfbW9kZWwgPSB0cnVlOwogICAgICB0aGlzLnNwZWNfZGF0YV9jaGlsZCA9IHRoaXMuc2t1X2xpc3RbaW5kZXhTXS5zcGVjX2RhdGFfY2hpbGQ7CiAgICAgIHRoaXMuc3BlY19uYW1lX2luZGV4ID0gaW5kZXhTOwogICAgICB0aGlzLnNwZWNfaXRlbV9jaGVjayA9IHRoaXMuc2t1X2xpc3RbaW5kZXhTXS5wYXJhbXMubWFwKGl0ZW0gPT4gaXRlbS5pZCk7IC8vIOS9v+eUqOWxnuaAp+WAvOWNlemAieaWueazle+8jOS4uuS6huiuvue9ruWFqOmAiemAieaLqeahhueKtuaAgQoKICAgICAgdGhpcy5zcGVjSXRlbUNoYW5nZSh0aGlzLnNwZWNfaXRlbV9jaGVjayk7CiAgICB9LAoKICAgIC8vIOmAieaLqeWxnuaAp+WAvAogICAgc2VsU3BlY1ZhbCgpIHsKICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5za3VfbGlzdCk7CiAgICAgIGNvbnN0IHNwZWN2YWwgPSB0aGlzLnNwZWNfZGF0YV9jaGlsZC5maWx0ZXIoaXRlbSA9PiB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3BlY19pdGVtX2NoZWNrLmZpbmRJbmRleChpdGVtUyA9PiBpdGVtUyA9PT0gaXRlbS5pZCkgPiAtMTsKICAgICAgfSkubWFwKGl0ZW0gPT4gewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBzcGVjTmFtZTogaXRlbS5zcGVjTmFtZSwKICAgICAgICAgIGlkOiBpdGVtLmlkLAogICAgICAgICAgZ3JvdXBTcGVjSWQ6IGl0ZW0ucGlkCiAgICAgICAgfTsKICAgICAgfSk7CiAgICAgIHRhcmdldFt0aGlzLnNwZWNfbmFtZV9pbmRleF0ucGFyYW1zID0gdGhpcy4kX2NvbW1vbi51bmlxdWUodGFyZ2V0W3RoaXMuc3BlY19uYW1lX2luZGV4XS5wYXJhbXMuY29uY2F0KHNwZWN2YWwpLCBbImlkIl0pOwogICAgICB0aGlzLnNrdV9saXN0ID0gdGFyZ2V0OwogICAgICB0aGlzLnNwZWNfbW9kZWwgPSBmYWxzZTsgLy8g6YeN5o6S6KeE5qC857uE5ZCICgogICAgICB0aGlzLnNwZWNHcm91cFJlc3QoKTsKICAgIH0sCgogICAgLy8g5bGe5oCn5YC85YWo6YCJCiAgICBjaGVja0FsbFNwZWNDaGFuZ2UodmFsKSB7CiAgICAgIHRoaXMuaXNfaW5kZXRlcm1pbmF0ZV9zcGVjID0gZmFsc2U7CgogICAgICBpZiAodmFsKSB7CiAgICAgICAgdGhpcy5zcGVjX2l0ZW1fY2hlY2sgPSB0aGlzLnNwZWNfZGF0YV9jaGlsZC5tYXAoaXRlbSA9PiB7CiAgICAgICAgICByZXR1cm4gaXRlbS5pZDsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNwZWNfaXRlbV9jaGVjayA9IFtdOwogICAgICB9CiAgICB9LAoKICAgIC8vIOWxnuaAp+WAvOWNlemAiQogICAgc3BlY0l0ZW1DaGFuZ2UodmFsKSB7CiAgICAgIGxldCBjaGVja2VkQ291bnQgPSB2YWwubGVuZ3RoOwogICAgICB0aGlzLnNwZWNfY2hlY2tfYWxsID0gY2hlY2tlZENvdW50ID09PSB0aGlzLnNwZWNfZGF0YV9jaGlsZC5sZW5ndGg7CiAgICAgIHRoaXMuaXNfaW5kZXRlcm1pbmF0ZV9zcGVjID0gY2hlY2tlZENvdW50ID4gMCAmJiBjaGVja2VkQ291bnQgPCB0aGlzLnNwZWNfZGF0YV9jaGlsZC5sZW5ndGg7CiAgICB9LAoKICAgIC8vIOWIoOmZpOinhOagvOWAvAogICAgZGVsU3BlY1ZhbChpbmRleEMsIGluZGV4UywgaXRlbUMpIHsKICAgICAgdGhpcy4kY29uZmlybSgi56Gu5a6a6KaB5Yig6Zmk6K+l6KeE5qC85YC85ZCXPyIsICLmj5DnpLoiLCB7CiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICLnoa7lrpoiLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICLlj5bmtogiLAogICAgICAgIHR5cGU6ICJ3YXJuaW5nIgogICAgICB9KS50aGVuKGFzeW5jICgpID0+IHsKICAgICAgICBpZiAodGhpcy5iYXNlX2dvb2RzX2lkKSB7CiAgICAgICAgICB0aGlzLmJhc2VfZm9ybS5kZWxTcGVjU2t1SWRzID0gdGhpcy5zcGVjX3RhYmxlX0RhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zcGVjTmFtZS5pbmRleE9mKGl0ZW1DLnNwZWNOYW1lKSA+IC0xKS5tYXAoaXRlbU0gPT4gewogICAgICAgICAgICByZXR1cm4gaXRlbU0uc3BlY0dyb3VwSGFzaDsKICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5zcGVjX3RhYmxlX0RhdGEgPSB0aGlzLnNwZWNfdGFibGVfRGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnNwZWNOYW1lLmluZGV4T2YoaXRlbUMuc3BlY05hbWUpID09PSAtMSk7CiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5za3VfbGlzdCk7CiAgICAgICAgdGFyZ2V0W2luZGV4U10ucGFyYW1zLnNwbGljZShpbmRleEMsIDEpOwogICAgICAgIHRoaXMuc2t1X2xpc3QgPSB0YXJnZXQ7CiAgICAgIH0pOwogICAgfSwKCiAgICAvLyDliKDpmaTop4TmoLznu4QKICAgIGRlbEdyb3VwU3BlY0lkKGluZGV4UykgewogICAgICB0aGlzLiRjb25maXJtKCLnoa7lrpropoHliKDpmaTor6Xop4TmoLznu4TlkJc/IiwgIuaPkOekuiIsIHsKICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogIuehruWumiIsCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogIuWPlua2iCIsCiAgICAgICAgdHlwZTogIndhcm5pbmciCiAgICAgIH0pLnRoZW4oYXN5bmMgKCkgPT4gewogICAgICAgIHRoaXMuc2t1X2xpc3Quc3BsaWNlKGluZGV4UywgMSk7IC8vIOmHjeaOkuinhOagvOe7hOWQiAoKICAgICAgICB0aGlzLnNwZWNHcm91cFJlc3QoKTsKICAgICAgfSk7CiAgICB9LAoKICAgIC8vIOiOt+WPluWxnuaAp+WIl+ihqAogICAgYXN5bmMgU3BlY01hbmFnZWdldEFsbCgpIHsKICAgICAgY29uc3QgewogICAgICAgIGRhdGEsCiAgICAgICAgcGFnZVRvdGFsCiAgICAgIH0gPSBhd2FpdCBTcGVjTWFuYWdlZ2V0QWxsKHsKICAgICAgICBwYWdlOiAxLAogICAgICAgIHBhZ2VTaXplOiAxMDAKICAgICAgfSk7CiAgICAgIHRoaXMuc3BlY19kYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnNwZWNOYW1lICE9PSAi6K6h6YeP5Y2V5L2NIik7IC8vIHRoaXMudW5pdF9vcHRpb25zID0gZGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5zcGVjTmFtZSA9PT0gJ+iuoemHj+WNleS9jScpLmNoaWxkCiAgICB9LAoKICAgIC8vIOmAieaLqeWbvueJhwogICAgdXBsb2FkU3VjY2Vzcyh2YWwsIHJlcywgZmlsZSwgZmlsZUxpc3QpIHsKICAgICAgY29uc3QgaW1nQXJyID0gZmlsZUxpc3QubWFwKGl0ZW0gPT4gewogICAgICAgIHJldHVybiBpdGVtLmNvbnRlbnQ7CiAgICAgIH0pOwoKICAgICAgaWYgKHRoaXMuYmFzZV9mb3JtLmltYWdlcy5sZW5ndGgpIHsKICAgICAgICB0aGlzLmJhc2VfZm9ybS5pbWFnZXMgPSB0aGlzLmJhc2VfZm9ybS5pbWFnZXMuY29uY2F0KGltZ0Fycik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5iYXNlX2Zvcm0uaW1hZ2VzID0gaW1nQXJyOwogICAgICB9CgogICAgICB0aGlzLmltZ19saXN0ID0gdGhpcy5iYXNlX2Zvcm0uaW1hZ2VzLm1hcChpdGVtID0+IHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgbmFtZTogIiIsCiAgICAgICAgICBjb250ZW50OiBpdGVtCiAgICAgICAgfTsKICAgICAgfSk7CgogICAgICBpZiAodGhpcy5pbWdfbGlzdC5sZW5ndGggPiAxMCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygi5Zu+54mH5pyA5aSa5Y+q6IO96YCJ5oup5Y2B5bygIik7CiAgICAgICAgdGhpcy5pbWdfbGlzdCA9IHRoaXMuaW1nX2xpc3Quc2xpY2UoMCwgMTApOwogICAgICB9CiAgICB9LAoKICAgIC8vIOWbvueJh+aLluaLveaOkuW6jwogICAgaW1nU29ydENoYW5nZShsaXN0KSB7CiAgICAgIHRoaXMuYmFzZV9mb3JtLmltYWdlcyA9IGxpc3QubWFwKGl0ZW0gPT4gewogICAgICAgIHJldHVybiBpdGVtLmNvbnRlbnQ7CiAgICAgIH0pOwogICAgfSwKCiAgICB1cGxvYWRSZW1vdmUoZmlsZSwgZmlsZUxpc3QpIHsKICAgICAgdGhpcy5iYXNlX2Zvcm0uaW1hZ2VzID0gZmlsZUxpc3QubWFwKGl0ZW0gPT4gewogICAgICAgIHJldHVybiBpdGVtLmNvbnRlbnQ7CiAgICAgIH0pOwogICAgfSwKCiAgICAvLyDlhbPplK7or43liKDpmaQKICAgIGhhbmRsZUNsb3NlKHRhZykgewogICAgICB0aGlzLmR5bmFtaWNUYWdzLnNwbGljZSh0aGlzLmR5bmFtaWNUYWdzLmluZGV4T2YodGFnKSwgMSk7CiAgICB9LAoKICAgIC8vIOWFs+mUruivjeaYvuekuui+k+WFpeahhgogICAgc2hvd0lucHV0KCkgewogICAgICB0aGlzLmlucHV0VmlzaWJsZSA9IHRydWU7CiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsKICAgICAgICB0aGlzLiRyZWZzLnNhdmVUYWdJbnB1dC4kcmVmcy5pbnB1dC5mb2N1cygpOwogICAgICB9KTsKICAgIH0sCgogICAgLy8g5YWz6ZSu6K+N5pi+56S66L6T5YWl56Gu5a6aCiAgICBoYW5kbGVJbnB1dENvbmZpcm0oKSB7CiAgICAgIGxldCBpbnB1dFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlOwoKICAgICAgaWYgKGlucHV0VmFsdWUpIHsKICAgICAgICB0aGlzLmR5bmFtaWNUYWdzLnB1c2goaW5wdXRWYWx1ZSk7CiAgICAgIH0KCiAgICAgIHRoaXMuaW5wdXRWaXNpYmxlID0gZmFsc2U7CiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICIiOwogICAgfSwKCiAgICAvLyDlhbPplK7or41FTkQKICAgIC8vIOiuvue9ruiuoemHj+WNleS9jQogICAgLy8g5Yig6Zmk6L6F5Yqp5Y2V5L2NCiAgICBkZWxGdVVuaXQocm93LCBpdCkgewogICAgICBpZiAocm93LnVuaXRJZCAmJiB0aGlzLmJhc2VfZm9ybS5kZWxVbml0SWRzLmluZGV4T2Yocm93LnVuaXRJZCkgPT09IC0xKSB7CiAgICAgICAgdGhpcy5iYXNlX2Zvcm0uZGVsVW5pdElkcy5wdXNoKHJvdy51bml0SWQpOwogICAgICB9CgogICAgICB0aGlzLnNwZWNfdGFibGVfRGF0YSA9IHRoaXMuc3BlY190YWJsZV9EYXRhLm1hcChpdGVtID0+IHsKICAgICAgICByZXR1cm4geyAuLi5pdGVtLAogICAgICAgICAgYmFyQ29kZTogaXRlbS5iYXJDb2RlLmZpbHRlcihpdGVtID0+IGl0ZW0udW5pdElkICE9PSByb3cudW5pdElkKQogICAgICAgIH07CiAgICAgIH0pOwogICAgICB0aGlzLmJhc2VfZm9ybS5icmFuY2hVbml0LnNwbGljZShpdCwgMSk7CiAgICB9LAoKICAgIC8vIOaWsOWinui+heWKqeWNleS9jQogICAgYWRkRnVVbml0KCkgewogICAgICB0aGlzLmFzc2lzdF9tb2RlbCA9IHRydWU7CiAgICAgIHRoaXMuZWRpdF9hc3Npc3RfbW9kZWwgPSBmYWxzZTsKICAgICAgdGhpcy5hc3Npc3RfZm9ybSA9IHsKICAgICAgICB1bml0TmFtZTogIiIsCiAgICAgICAgaXNNYXN0ZXI6IDQsCiAgICAgICAgdW5pdElkOiAiIiwKICAgICAgICBjb252ZXJzaW9uOiAiIgogICAgICB9OwogICAgfSwKCiAgICAvLyDkv67mlLnpmYTljZXkvY0KICAgIEVkaXRGdVVuaXQoaXQpIHsKICAgICAgdGhpcy5hc3Npc3RfbW9kZWwgPSB0cnVlOwogICAgICB0aGlzLmVkaXRfYXNzaXN0X21vZGVsID0gdHJ1ZTsKICAgICAgdGhpcy5hc3Npc3RfZm9ybSA9IHRoaXMuYmFzZV9mb3JtLmJyYW5jaFVuaXRbaXRdOwogICAgICB0aGlzLmFzc2lzdF9pbmRleCA9IGl0OwogICAgfSwKCiAgICAvLyDlvLnnqpfmj5DkuqQKICAgIHN1YkFzc2lzdCgpIHsKICAgICAgaWYgKCF0aGlzLmFzc2lzdF9mb3JtLmNvbnZlcnNpb24pIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIuivt+i+k+WFpeWNleS9jeS7tuaNoueul+WFs+ezuyIpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKCF0aGlzLmFzc2lzdF9mb3JtLnVuaXROYW1lKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fpgInmi6novoXliqnljZXkvY0iKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlmICghdGhpcy5lZGl0X2Fzc2lzdF9tb2RlbCkgewogICAgICAgIHRoaXMuYXNzaXN0X2Zvcm0ud2VpZ2h0ID0gdGhpcy5iYXNlX2Zvcm0ubWFzdGVyVW5pdC53ZWlnaHQgKiB0aGlzLmFzc2lzdF9mb3JtLmNvbnZlcnNpb247CiAgICAgICAgdGhpcy5iYXNlX2Zvcm0uYnJhbmNoVW5pdC5wdXNoKHRoaXMuYXNzaXN0X2Zvcm0pOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuYmFzZV9mb3JtLmJyYW5jaFVuaXRbdGhpcy5hc3Npc3RfaW5kZXhdID0gdGhpcy5hc3Npc3RfZm9ybTsKICAgICAgfQoKICAgICAgdGhpcy5hc3Npc3RfbW9kZWwgPSBmYWxzZTsKICAgICAgdGhpcy5zcGVjX3RhYmxlX0RhdGEgPSB0aGlzLnNwZWNfdGFibGVfRGF0YS5tYXAoaXRlbSA9PiB7CiAgICAgICAgaXRlbS5iYXJDb2RlLnB1c2godGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5hc3Npc3RfZm9ybSkpOwogICAgICAgIHJldHVybiB7IC4uLml0ZW0KICAgICAgICB9OwogICAgICB9KTsKICAgIH0sCgogICAgY2hhbmdlV2VpZ2h0KCkgewogICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLmJhc2VfZm9ybS5icmFuY2hVbml0KTsKICAgICAgdGFyZ2V0LmZvckVhY2goaXRlbSA9PiB7CiAgICAgICAgaXRlbS53ZWlnaHQgPSB0aGlzLmJhc2VfZm9ybS5tYXN0ZXJVbml0LndlaWdodCAqIGl0ZW0uY29udmVyc2lvbjsKICAgICAgfSk7CiAgICAgIHRoaXMuYmFzZV9mb3JtLmJyYW5jaFVuaXQgPSB0YXJnZXQ7CiAgICB9LAoKICAgIC8vIOWfuuacrOWNleS9jeWIh+aNogogICAgbWFzdGVyVW5pdENoYW5nZSh7CiAgICAgIHZhbHVlLAogICAgICAkZXZlbnQKICAgIH0pIHsKICAgICAgLy8g57yW6L6R6aG16Z2i5oqK5Yig6ZmkIOeahOWNleS9jUlE5a2Y5YKo5LiL5p2lCiAgICAgIGlmICghIXRoaXMuYmFzZV9nb29kc19pZCkgewogICAgICAgIGNvbnN0IHVuaXREYXRhID0gdGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5iYXNlX2Zvcm0udW5pdERhdGEpOwogICAgICAgIHRoaXMuYmFzZV9mb3JtLmRlbFVuaXRJZHMgPSB1bml0RGF0YS5tYXAoaXRlbSA9PiBpdGVtLnVuaXRJZCk7CgogICAgICAgIGlmICh0aGlzLmJhc2VfZm9ybS5zcGVjVHlwZSA9PT0gMSkgewogICAgICAgICAgY29uc3Qgc3BlY011bHRpcGxlID0gdGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5iYXNlX2Zvcm0uc3BlY011bHRpcGxlKTsKICAgICAgICAgIHRoaXMuYmFzZV9mb3JtLmRlbFNwZWNTa3VJZHMgPSBzcGVjTXVsdGlwbGUubWFwKGl0ZW0gPT4gaXRlbS5pZCk7CiAgICAgICAgfSAvL+aKiuaJgOacieeahOWNleS9jeWIoOmZpO+8jOmHjeaWsOiuvue9ruS4gOS4quaWsOeahOS4u+WNleS9jQoKCiAgICAgICAgaWYgKHRoaXMuYmFzZV9mb3JtLm1hc3RlclVuaXQuaWQpIHsKICAgICAgICAgIGRlbGV0ZSB0aGlzLmJhc2VfZm9ybS5tYXN0ZXJVbml0LmlkOwogICAgICAgIH0KICAgICAgfQoKICAgICAgY29uc3QgdmFsID0gdmFsdWU7CiAgICAgIHRoaXMuYmFzZV9mb3JtLm1hc3RlclVuaXQudW5pdE5hbWUgPSB0aGlzLnVuaXRfb3B0aW9ucy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gdmFsKS51bml0TmFtZTsgLy8g6YeN572u6L6F5Yqp5Y2V5L2NCgogICAgICB0aGlzLmJhc2VfZm9ybS5icmFuY2hVbml0ID0gW107CiAgICAgIHRoaXMuc3BlY190YWJsZV9EYXRhID0gdGhpcy5zcGVjX3RhYmxlX0RhdGEubWFwKGl0ZW0gPT4gewogICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbS5iYXJDb2RlLmZpbmRJbmRleChpdGVtRiA9PiBpdGVtRi5pc01hc3RlciA9PT0gNSk7CiAgICAgICAgY29uc3QgYmFyT2JqID0geyAuLi50aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLmJhc2VfZm9ybS5tYXN0ZXJVbml0KSwKICAgICAgICAgIGJhckNvZGU6IGl0ZW0uYmFyQ29kZVtpbmRleF0uYmFyQ29kZSB8fCAiIgogICAgICAgIH07CiAgICAgICAgdGhpcy4kc2V0KGl0ZW0uYmFyQ29kZSwgaW5kZXgsIGJhck9iaik7CiAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgIH0pOwogICAgfSwKCiAgICAvLyDovoXliqnljZXkvY3liIfmjaIKICAgIGJyYW5jaFVuaXRDaGFuZ2UodmFsKSB7CiAgICAgIHRoaXMuYXNzaXN0X2Zvcm0udW5pdE5hbWUgPSB0aGlzLnVuaXRfb3B0aW9ucy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gdmFsKS51bml0TmFtZTsKICAgIH0sCgogICAgLy8g6I635Y+W6K+m5oOFCiAgICBhc3luYyBnZXRHb29kc0Jhc2ljSW5mb0J5SWQoKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhCiAgICAgIH0gPSBhd2FpdCBnZXRHb29kc0Jhc2ljSW5mb0J5SWQodGhpcy5iYXNlX2dvb2RzX2lkKTsKICAgICAgdGhpcy5pc0VkaXRTcGVjID0gZGF0YS5pc0VkaXRTcGVjOwogICAgICBjb25zdCB1bml0RGF0YSA9IHRoaXMuJF9jb21tb24uZGVlcENsb25lKGRhdGEudW5pdERhdGEpOwogICAgICBjb25zdCBtYXN0ZXJVbml0ID0gdW5pdERhdGEuZmluZChpdGVtID0+IGl0ZW0uaXNNYXN0ZXIgPT09IDUpIHx8IHt9OwogICAgICBjb25zdCBicmFuY2hVbml0ID0gdW5pdERhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pc01hc3RlciA9PT0gNCk7CiAgICAgIHRoaXMuaXNOZXcgPSBtYXN0ZXJVbml0LmlzTmV3IHx8IDQ7CiAgICAgIHRoaXMuYmFzZV9mb3JtID0geyAuLi5kYXRhLAogICAgICAgIG5vU2FsZXNTaG9wOiBkYXRhLm5vU2FsZXNTaG9wID8gZGF0YS5ub1NhbGVzU2hvcC5zcGxpdCgiLCIpLm1hcChpdGVtID0+IHBhcnNlSW50KGl0ZW0pKSA6IFtdLAogICAgICAgIG1hc3RlclVuaXQ6IG1hc3RlclVuaXQsCiAgICAgICAgZGVsVW5pdElkczogW10sCiAgICAgICAgZGVsU3BlY1NrdUlkczogW10sCiAgICAgICAgc3BlY1R5cGU6IGRhdGEuc3BlY1R5cGUsCiAgICAgICAgYnJhbmNoVW5pdDogYnJhbmNoVW5pdCwKICAgICAgICBjYXRlZ29yeVBhdGg6IGRhdGEuY2F0ZWdvcnlQYXRoID8gZGF0YS5jYXRlZ29yeVBhdGguc3BsaXQoIiwiKS5tYXAoaXRlbSA9PiB7CiAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaXRlbSk7CiAgICAgICAgfSkgOiBbXSwKICAgICAgICBhc3Npc3RDYXRlZ29yeVBhdGg6IGRhdGEuYXNzaXN0Q2F0ZWdvcnlQYXRoIHx8IFtdCiAgICAgIH07CgogICAgICBpZiAoZGF0YS5hc3Npc3RDYXRlZ29yeVBhdGggJiYgZGF0YS5hc3Npc3RDYXRlZ29yeVBhdGgubGVuZ3RoKSB7CiAgICAgICAgdGhpcy5hc3Npc3RfY2F0ZSA9IGRhdGEuYXNzaXN0Q2F0ZWdvcnlQYXRoLm1hcChpdGVtID0+IHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGFzc2lzdENhdGVnb3J5UGF0aDogaXRlbS5zcGxpdCgiLCIpLm1hcChpdGVtZSA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGl0ZW1lKTsKICAgICAgICAgICAgfSkKICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5hc3Npc3RfY2F0ZSA9IFt7CiAgICAgICAgICBhc3Npc3RDYXRlZ29yeVBhdGg6IFtdCiAgICAgICAgfV07CiAgICAgIH0KCiAgICAgIHRoaXMuaW1nX2xpc3QgPSBkYXRhLmltYWdlcy5tYXAoaXRlbSA9PiB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG5hbWU6ICIiLAogICAgICAgICAgdXJsOiBpdGVtCiAgICAgICAgfTsKICAgICAgfSk7CiAgICAgIHRoaXMuZHluYW1pY1RhZ3MgPSBkYXRhLnRhZyA/IGRhdGEudGFnLnNwbGl0KCIsIikgOiBbXTsKICAgICAgdGhpcy5iYXNlX2Zvcm0uYnJhbmROYW1lID0gZGF0YS5icmFuZFRpdGxlOyAvLyDlpJrop4TmoLzmlbDmja4KCiAgICAgIGlmIChwYXJzZUludCh0aGlzLmJhc2VfZm9ybS5zcGVjVHlwZSkgPT09IDIpIHsKICAgICAgICB0aGlzLnNrdV9saXN0ID0gZGF0YS5zcGVjR3JvdXAubWFwKGl0ZW0gPT4gewogICAgICAgICAgY29uc3Qgc3BlY0RhdGEgPSB0aGlzLnNwZWNfZGF0YS5maW5kKGl0ZW1GID0+IGl0ZW1GLmlkID09PSBpdGVtLmdyb3VwU3BlYy5zcGVjSWQpOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgc3BlY19kYXRhX2NoaWxkOiBzcGVjRGF0YSA/IHNwZWNEYXRhLmNoaWxkIDogW10sCiAgICAgICAgICAgIGdyb3VwU3BlY0lkOiBpdGVtLmdyb3VwU3BlYy5zcGVjSWQsCiAgICAgICAgICAgIGdyb3VwU3BlY05hbWU6IGl0ZW0uZ3JvdXBTcGVjLnNwZWNOYW1lLAogICAgICAgICAgICBzZWxmX3NwZWNfdmFsOiAiIiwKICAgICAgICAgICAgc2VsZl9zcGVjX2lucHV0OiBmYWxzZSwKICAgICAgICAgICAgcGFyYW1zOiBpdGVtLnBhcmFtcy5tYXAoaXRlbUMgPT4gewogICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBpZDogaXRlbUMuc3BlY1ZhbHVlSWQsCiAgICAgICAgICAgICAgICBzcGVjTmFtZTogaXRlbUMuc3BlY1ZhbHVlTmFtZSwKICAgICAgICAgICAgICAgIGdyb3VwU3BlY0lkOiBpdGVtLmdyb3VwU3BlYy5zcGVjSWQKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KQogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLnNwZWNfdGFibGVfRGF0YSA9IGRhdGEuc3BlY011bHRpcGxlLm1hcChpdGVtID0+IHsKICAgICAgICAgIGxldCBiYXJDb2RlQSA9IFtdOwoKICAgICAgICAgIGZvciAobGV0IGIgaW4gaXRlbS5iYXJDb2RlKSB7CiAgICAgICAgICAgIGxldCB1bml0QiA9IGRhdGEudW5pdERhdGEuZmluZChpdGVtRiA9PiBwYXJzZUludChpdGVtRi51bml0SWQpID09PSBwYXJzZUludChiKSk7CgogICAgICAgICAgICBpZiAodW5pdEIpIHsKICAgICAgICAgICAgICBiYXJDb2RlQS5wdXNoKHsgLi4udW5pdEIsCiAgICAgICAgICAgICAgICBiYXJDb2RlOiBpdGVtLmJhckNvZGVbYl0sCiAgICAgICAgICAgICAgICB3ZWlnaHQ6IGl0ZW0ud2VpZ2h0W2JdLAogICAgICAgICAgICAgICAgaXNEZWZhdWx0OiBpdGVtLmlzRGVmYXVsdFtiXQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYmFyQ29kZTogYmFyQ29kZUEsCiAgICAgICAgICAgIGlzRWRpdFNwZWM6IGl0ZW0uaXNFZGl0U3BlYywKICAgICAgICAgICAgaW52ZW50b3J5OiBpdGVtLmludmVudG9yeSAtIDAsCiAgICAgICAgICAgIHNwZWNHcm91cEhhc2g6IGl0ZW0uc3BlY0dyb3VwSGFzaCwKICAgICAgICAgICAgaWRfRDogaXRlbS5pZCwKICAgICAgICAgICAgdW5pdElkOiBpdGVtLnVuaXRJZCwKICAgICAgICAgICAgc3BlY05hbWU6IGl0ZW0uc3BlY0dyb3VwLm1hcChpdGVtUCA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1QLnNwZWNWYWx1ZU5hbWU7CiAgICAgICAgICAgIH0pLmpvaW4oIl8iKSwKICAgICAgICAgICAgaWQ6IGl0ZW0uc3BlY0dyb3VwLm1hcChpdGVtUCA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1QLnNwZWNWYWx1ZUlkOwogICAgICAgICAgICB9KS5qb2luKCJfIiksCiAgICAgICAgICAgIGdyb3VwU3BlY0lkOiBpdGVtLnNwZWNHcm91cC5tYXAoaXRlbVAgPT4gewogICAgICAgICAgICAgIHJldHVybiBpdGVtUC5zcGVjSWQ7CiAgICAgICAgICAgIH0pLmpvaW4oIl8iKSwKICAgICAgICAgICAgZ3JvdXBTcGVjTmFtZTogaXRlbS5zcGVjR3JvdXAubWFwKGl0ZW1QID0+IHsKICAgICAgICAgICAgICByZXR1cm4gaXRlbVAuc3BlY05hbWU7CiAgICAgICAgICAgIH0pLmpvaW4oIl8iKSwKICAgICAgICAgICAgc3BlY0ltYWdlOiB7CiAgICAgICAgICAgICAgbmFtZTogIiIsCiAgICAgICAgICAgICAgdXJsOiBpdGVtLnNwZWNJbWFnZQogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICB9CiAgICB9LAoKICAgIC8vIOWPkeW4g+WVhuWTgQogICAgYXN5bmMgc3VibWl0R29vZHMoKSB7CiAgICAgIGlmICghdGhpcy5iYXNlX2Zvcm0udGl0bGUudHJpbSgpKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLllYblk4HlkI3np7DkuI3og73kuLrnqboiKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlmICghdGhpcy5iYXNlX2Zvcm0uY2F0ZWdvcnlQYXRoLmxlbmd0aCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygi5ZWG5ZOB5YiG57G75LiN6IO95Li656m6Iik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBpZiAoIXRoaXMuYmFzZV9mb3JtLm1hc3RlclVuaXQudW5pdElkKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fpgInmi6nln7rmnKzljZXkvY0iKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIHRoaXMuJHJlZnNbImJhc2VfZm9ybSJdLnZhbGlkYXRlKGFzeW5jIHZhbGlkID0+IHsKICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgIGxldCBzcGVjR3JvdXAgPSBbXTsKICAgICAgICAgIGxldCBzcGVjTXVsdGlwbGUgPSBbXTsKCiAgICAgICAgICBpZiAoIXRoaXMuYmFzZV9mb3JtLmltYWdlcy5sZW5ndGgpIHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fkuIrkvKDllYblk4Hlm77niYciKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICh0aGlzLmJhc2VfZm9ybS5tYXN0ZXJVbml0LndlaWdodCA8IDApIHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLllYblk4Hph43ph4/kuI3og73kuLrotJ/mlbAiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICh0aGlzLnNwZWNfdGFibGVfRGF0YS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIC8vIOWkmuinhOagvAogICAgICAgICAgICB0aGlzLmJhc2VfZm9ybS5zcGVjVHlwZSA9IDI7CiAgICAgICAgICAgIHNwZWNHcm91cCA9IHRoaXMuc2t1X2xpc3QubWFwKGl0ZW0gPT4gewogICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBncm91cFNwZWM6IHsKICAgICAgICAgICAgICAgICAgc3BlY05hbWU6IGl0ZW0uZ3JvdXBTcGVjTmFtZSwKICAgICAgICAgICAgICAgICAgc3BlY0lkOiBpdGVtLmdyb3VwU3BlY0lkCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcGFyYW1zOiBpdGVtLnBhcmFtcy5tYXAoaXRlbSA9PiB7CiAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgc3BlY1ZhbHVlSWQ6IGl0ZW0uaWQsCiAgICAgICAgICAgICAgICAgICAgc3BlY1ZhbHVlTmFtZTogaXRlbS5zcGVjTmFtZQogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgc3BlY011bHRpcGxlID0gdGhpcy5zcGVjX3RhYmxlX0RhdGEubWFwKChpdGVtLCBpbmRleCkgPT4gewogICAgICAgICAgICAgIGxldCBzcGVjVmFsID0gW107IC8vIOWxnuaAp2lkCgogICAgICAgICAgICAgIGxldCBzcGVjSWQgPSBbXTsgLy8g5bGe5oCn57uEaWQKCiAgICAgICAgICAgICAgbGV0IHNwZWNOYW1lID0gW107IC8vIOWxnuaAp+e7hOWQjQoKICAgICAgICAgICAgICBsZXQgc3BlY1ZhbHVlTmFtZSA9IFtdOyAvLyDlsZ7mgKflkI0KCiAgICAgICAgICAgICAgaWYgKChpdGVtLmlkICsgIiIpLmluZGV4T2YoIl8iKSA+IC0xKSB7CiAgICAgICAgICAgICAgICBzcGVjVmFsID0gaXRlbS5pZC5zcGxpdCgiXyIpOwogICAgICAgICAgICAgICAgc3BlY0lkID0gaXRlbS5ncm91cFNwZWNJZC5zcGxpdCgiXyIpOwogICAgICAgICAgICAgICAgc3BlY1ZhbHVlTmFtZSA9IGl0ZW0uc3BlY05hbWUuc3BsaXQoIl8iKTsKICAgICAgICAgICAgICAgIHNwZWNOYW1lID0gaXRlbS5ncm91cFNwZWNOYW1lLnNwbGl0KCJfIik7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNwZWNWYWwgPSBbaXRlbS5pZF07CiAgICAgICAgICAgICAgICBzcGVjSWQgPSBbaXRlbS5ncm91cFNwZWNJZF07CiAgICAgICAgICAgICAgICBzcGVjTmFtZSA9IFtpdGVtLmdyb3VwU3BlY05hbWVdOwogICAgICAgICAgICAgICAgc3BlY1ZhbHVlTmFtZSA9IFtpdGVtLnNwZWNOYW1lXTsKICAgICAgICAgICAgICB9IC8vIOadoeeggQoKCiAgICAgICAgICAgICAgbGV0IGJhckNvZGVPID0ge307CiAgICAgICAgICAgICAgbGV0IGlzRGVmYXVsdE8gPSB7fTsKICAgICAgICAgICAgICBsZXQgd2VpZ2h0TyA9IHt9OwogICAgICAgICAgICAgIGl0ZW0uYmFyQ29kZS5mb3JFYWNoKGl0ZW1CID0+IHsKICAgICAgICAgICAgICAgIGJhckNvZGVPW2l0ZW1CLnVuaXRJZF0gPSBpdGVtQi5iYXJDb2RlOwogICAgICAgICAgICAgICAgaXNEZWZhdWx0T1tpdGVtQi51bml0SWRdID0gaXRlbUIuaXNEZWZhdWx0OwogICAgICAgICAgICAgICAgd2VpZ2h0T1tpdGVtQi51bml0SWRdID0gaXRlbUIud2VpZ2h0OwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGxldCByZXR1cm5QYXJhbXMgPSB7CiAgICAgICAgICAgICAgICBzcGVjSW1hZ2U6IGl0ZW0uc3BlY0ltYWdlLnVybCwKICAgICAgICAgICAgICAgIHNwZWNHcm91cDogc3BlY1ZhbC5tYXAoKGl0ZW1WLCBpbmRleFYpID0+IHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICBzcGVjSWQ6IHNwZWNJZFtpbmRleFZdLAogICAgICAgICAgICAgICAgICAgIHNwZWNOYW1lOiBzcGVjTmFtZVtpbmRleFZdLAogICAgICAgICAgICAgICAgICAgIHNwZWNWYWx1ZU5hbWU6IHNwZWNWYWx1ZU5hbWVbaW5kZXhWXSwKICAgICAgICAgICAgICAgICAgICBzcGVjVmFsdWVJZDogaXRlbVYKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgYmFyQ29kZTogYmFyQ29kZU8sCiAgICAgICAgICAgICAgICBpc0RlZmF1bHQ6IGlzRGVmYXVsdE8sCiAgICAgICAgICAgICAgICB3ZWlnaHQ6IHdlaWdodE8KICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGFyYW1zLmlkKSB7CiAgICAgICAgICAgICAgICByZXR1cm5QYXJhbXMuc3BlY0dyb3VwSGFzaCA9IGl0ZW0uc3BlY0dyb3VwSGFzaDsKICAgICAgICAgICAgICAgIHJldHVyblBhcmFtcy5pZCA9IGl0ZW0uaWRfRDsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIHJldHVybiByZXR1cm5QYXJhbXM7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5iYXNlX2Zvcm0uc3BlY1R5cGUgPSAxOwogICAgICAgICAgfQoKICAgICAgICAgIGxldCB1bml0RGF0YUQgPSB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLmJhc2VfZm9ybS5icmFuY2hVbml0KTsKICAgICAgICAgIHVuaXREYXRhRC51bnNoaWZ0KHRoaXMuYmFzZV9mb3JtLm1hc3RlclVuaXQpOwogICAgICAgICAgY29uc3QgdW5pdERhdGFBID0gdW5pdERhdGFELm1hcChpdGVtID0+IHsKICAgICAgICAgICAgaWYgKHRoaXMuYmFzZV9mb3JtLnNwZWNUeXBlID09PSAyKSB7CiAgICAgICAgICAgICAgaXRlbS5iYXJDb2RlID0gIiI7CiAgICAgICAgICAgICAgaXRlbS5pc0RlZmF1bHQgPSA0OwogICAgICAgICAgICAgIGl0ZW0ud2VpZ2h0ID0gIiI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VfZm9ybS5kZWxTcGVjU2t1SWRzLmluZGV4T2YoaXRlbS5zcGVjR3JvdXBIYXNoKSAhPT0gLTEgJiYgdGhpcy5iYXNlX2Zvcm0uc3BlY1R5cGUgPT09IDEpIHsKICAgICAgICAgICAgICBkZWxldGUgaXRlbS5pZDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgICAgICB9KTsgLy8g5Ymv5YiG57G75pWw5o2u57uE6KOFCgogICAgICAgICAgbGV0IGFzc2lzdENhdGVnb3J5UGF0aCA9IFtdOwogICAgICAgICAgbGV0IGFzc2lzdENhdGVnb3J5SWQgPSBbXTsgLy8g6L+H5ruk5Y+q5pyJ6YCJ5oup5YiG57G755qE5pWw5o2uCgogICAgICAgICAgY29uc3QgYXNzaXN0Q2F0ZSA9IHRoaXMuYXNzaXN0X2NhdGUuZmlsdGVyKGl0ZW0gPT4gISFpdGVtLmFzc2lzdENhdGVnb3J5UGF0aC5sZW5ndGgpOwogICAgICAgICAgYXNzaXN0Q2F0ZS5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgICAgICBhc3Npc3RDYXRlZ29yeVBhdGgucHVzaChpdGVtLmFzc2lzdENhdGVnb3J5UGF0aC5qb2luKCIsIikpOwogICAgICAgICAgICBhc3Npc3RDYXRlZ29yeUlkLnB1c2goaXRlbS5hc3Npc3RDYXRlZ29yeVBhdGhbaXRlbS5hc3Npc3RDYXRlZ29yeVBhdGgubGVuZ3RoIC0gMV0pOwogICAgICAgICAgfSk7CiAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7CiAgICAgICAgICAgIG1lcmNoYW50SWQ6IHRoaXMuYmFzZV9mb3JtLm1lcmNoYW50SWQsCiAgICAgICAgICAgIGNhdGVnb3J5UGF0aDogdGhpcy5iYXNlX2Zvcm0uY2F0ZWdvcnlQYXRoLmpvaW4oIiwiKSwKICAgICAgICAgICAgYXNzaXN0Q2F0ZWdvcnlQYXRoOiBhc3Npc3RDYXRlZ29yeVBhdGgsCiAgICAgICAgICAgIGNhdGVnb3J5SWQ6IHRoaXMuYmFzZV9mb3JtLmNhdGVnb3J5SWQsCiAgICAgICAgICAgIGFzc2lzdENhdGVnb3J5SWQ6IGFzc2lzdENhdGVnb3J5SWQuam9pbigiLCIpLAogICAgICAgICAgICB0aXRsZTogdGhpcy5iYXNlX2Zvcm0udGl0bGUsCiAgICAgICAgICAgIHN0b3JhZ2U6IHRoaXMuYmFzZV9mb3JtLnN0b3JhZ2UsCiAgICAgICAgICAgIGRlbFVuaXRJZHM6IHRoaXMuYmFzZV9mb3JtLmRlbFVuaXRJZHMsCiAgICAgICAgICAgIGRlbFNwZWNTa3VJZHM6IHRoaXMuYmFzZV9mb3JtLmRlbFNwZWNTa3VJZHMsCiAgICAgICAgICAgIHNwZWNUeXBlOiB0aGlzLmJhc2VfZm9ybS5zcGVjVHlwZSwKICAgICAgICAgICAgc3BlY0dyb3VwOiBzcGVjR3JvdXAsCiAgICAgICAgICAgIHNwZWNNdWx0aXBsZTogc3BlY011bHRpcGxlLAogICAgICAgICAgICB1bml0RGF0YTogdW5pdERhdGFBLAogICAgICAgICAgICBkZXNjcmliZTogdGhpcy5iYXNlX2Zvcm0uZGVzY3JpYmUsCiAgICAgICAgICAgIGNvZGU6IHRoaXMuYmFzZV9mb3JtLmNvZGUsCiAgICAgICAgICAgIGJhckNvZGU6IHRoaXMuYmFzZV9mb3JtLmJhckNvZGUsCiAgICAgICAgICAgIGV4cGlyZVRpbWU6IHRoaXMuYmFzZV9mb3JtLmV4cGlyZVRpbWUsCiAgICAgICAgICAgIGlzRXE6IHRoaXMuYmFzZV9mb3JtLmlzRXEsCiAgICAgICAgICAgIGJyYW5kSWQ6IHRoaXMuYmFzZV9mb3JtLmJyYW5kSWQsCiAgICAgICAgICAgIHRhZzogdGhpcy5keW5hbWljVGFncy5qb2luKCIsIiksCiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmJhc2VfZm9ybS5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgbm9TYWxlc1Nob3A6IHRoaXMuYmFzZV9mb3JtLm5vU2FsZXNTaG9wLmpvaW4oIiwiKSwKICAgICAgICAgICAgaW1hZ2VzOiB0aGlzLmJhc2VfZm9ybS5pbWFnZXMKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgbGV0IHRhcmdldCA9IHt9OwoKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICh0aGlzLiRyb3V0ZS5wYXJhbXMuaWQpIHsKICAgICAgICAgICAgICB0YXJnZXQgPSBhd2FpdCBlZGl0R29vZHNCYXNpYyh0aGlzLmJhc2VfZ29vZHNfaWQsIHBhcmFtcyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGFyZ2V0ID0gYXdhaXQgYWRkR29vZHNCYXNpYyhwYXJhbXMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb25zdCBkYXRhID0gdGFyZ2V0OwogICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgdHlwZTogInN1Y2Nlc3MiLAogICAgICAgICAgICAgIG1lc3NhZ2U6ICLmj5DkuqTmiJDlip8iCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBhd2FpdCB0aGlzLmRlbFBhdXNlU2F2ZSgpOwogICAgICAgICAgICB0aGlzLiRjbG9zZUN1cnJlbnRHb0VkaXQoYC9nb29kcy9tYW5hZ2VHL0Jhc2VEYXRhTGlzdGApOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAoKICAgIC8vIOWVhuWTgeWIhuexu+mAieaLqQogICAgY2F0ZWdvcnlDaGFuZ2UodmFsLCByb3cpIHsKICAgICAgLy8gdGhpcy5iYXNlX2Zvcm0uY2F0ZWdvcnlQYXRoID0gcm93OwogICAgICB0aGlzLmJhc2VfZm9ybS5jYXRlZ29yeUlkID0gdmFsW3ZhbC5sZW5ndGggLSAxXTsgLy8gdGhpcy5iYXNlX2Zvcm0uY2F0ZWdvcnlQYXRoLnB1c2godGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUoZ29vZHNJdGVtKSk7CiAgICB9LAoKICAgIC8vIOWTgeeJjOmAieaLqQogICAgYnJhbmRDb25maXJtKHZhbCkgewogICAgICBpZiAodmFsLmxlbmd0aCA+IDEpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICJlcnJvciIsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup5LiA5Liq5ZOB54mM77yBIgogICAgICAgIH0pOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgdGhpcy5iYXNlX2Zvcm0uYnJhbmROYW1lID0gdmFsWzBdLnRpdGxlOwogICAgICB0aGlzLmJhc2VfZm9ybS5icmFuZElkID0gdmFsWzBdLmlkOwogICAgfSwKCiAgICBhc3luYyBnZXRBbGxNZXJjaGFudExpc3QoKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhCiAgICAgIH0gPSBhd2FpdCBnZXRBbGxNZXJjaGFudExpc3QoKTsKICAgICAgdGhpcy5zZWxfY2l0aWVzID0gZGF0YTsKICAgIH0sCgogICAgLy8g5ZWG5ZOB5YiG57G75YiX6KGoCiAgICBhc3luYyBnZXRBbGxDYXRlZ29yeVBvc3QoKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhCiAgICAgIH0gPSBhd2FpdCBnZXRBbGxDYXRlZ29yeVBvc3QoewogICAgICAgIGVuYWJsZVN0YXR1czogNQogICAgICB9KTsKCiAgICAgIGlmIChKU09OLnN0cmluZ2lmeShkYXRhKSA9PT0gInt9IikgewogICAgICAgIHRoaXMuY2F0ZWdvcnlfZGF0YSA9IFtdOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuY2F0ZWdvcnlfZGF0YSA9IGRhdGE7CiAgICAgIH0KICAgIH0sCgogICAgLy8g6Ieq5a6a5LmJ6YCJ5oup5Y2z5pS55Y+YCiAgICBjbGlja0NoYW5nZShldmVudCkgewogICAgICBldmVudC50YXJnZXQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmZpcnN0Q2hpbGQuY2xpY2soKTsKICAgIH0sCgogICAgZGVsQXNzaXN0Q2F0ZShpbmRleCkgewogICAgICB0aGlzLmFzc2lzdF9jYXRlLnNwbGljZShpbmRleCwgMSk7CiAgICB9LAoKICAgIGFkZEFzc2lzdENhdGUoKSB7CiAgICAgIHRoaXMuYXNzaXN0X2NhdGUucHVzaCh7CiAgICAgICAgYXNzaXN0Q2F0ZWdvcnlQYXRoOiBbXQogICAgICB9KTsKICAgIH0sCgogICAgLy8g5LiL5LiA5q2lCiAgICB0YWdOZXh0KCkgewogICAgICBpZiAodGhpcy5wYWdlX3RhYnMgPT09ICIxIikgewogICAgICAgIHRoaXMuJHJlZnNbImJhc2VfZm9ybSJdLnZhbGlkYXRlKHZhbGlkID0+IHsKICAgICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgICBpZiAoIXRoaXMuYmFzZV9mb3JtLm1hc3RlclVuaXQudW5pdElkKSB7CiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fpgInmi6nln7rmnKzljZXkvY0iKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRoaXMucGFnZV90YWJzID0gIjIiOwogICAgICAgICAgICB0aGlzLnN0ZXBfYWN0aXZlID0gMjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2VfdGFicyA9PT0gIjIiKSB7CiAgICAgICAgaWYgKCF0aGlzLmJhc2VfZm9ybS5pbWFnZXMubGVuZ3RoKSB7CiAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIuivt+S4iuS8oOWVhuWTgeWbvueJhyIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5wYWdlX3RhYnMgPSAiMyI7CiAgICAgICAgdGhpcy5zdGVwX2FjdGl2ZSA9IDM7CiAgICAgIH0KICAgIH0sCgogICAgLy8g5LiK5LiA5q2lCiAgICB0YWdMYXN0KCkgewogICAgICBpZiAodGhpcy5wYWdlX3RhYnMgPT09ICIzIikgewogICAgICAgIHRoaXMuc3RlcF9hY3RpdmUgPSAyOwogICAgICAgIHRoaXMucGFnZV90YWJzID0gIjIiOwogICAgICB9IGVsc2UgaWYgKHRoaXMucGFnZV90YWJzID09PSAiMiIpIHsKICAgICAgICB0aGlzLnBhZ2VfdGFicyA9ICIxIjsKICAgICAgICB0aGlzLnN0ZXBfYWN0aXZlID0gMTsKICAgICAgfQogICAgfSwKCiAgICB0YWJDbGljaygpIHsKICAgICAgaWYgKHRoaXMucGFnZV90YWJzID09PSAiMSIpIHsKICAgICAgICB0aGlzLnN0ZXBfYWN0aXZlID0gMTsKICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2VfdGFicyA9PT0gIjIiKSB7CiAgICAgICAgdGhpcy5zdGVwX2FjdGl2ZSA9IDI7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWdlX3RhYnMgPT09ICIzIikgewogICAgICAgIHRoaXMuc3RlcF9hY3RpdmUgPSAzOwogICAgICB9CiAgICB9LAoKICAgIC8vIOaKhOeggeWVhuWTgeWIh+aNogogICAgaXNFcUNoYW5nZSh2YWwpIHsKICAgICAgaWYgKHRoaXMuaXNFZGl0U3BlYyAhPT0gNCAmJiB2YWwgPT09IDUpIHsKICAgICAgICB0aGlzLmJhc2VfZm9ybS5tYXN0ZXJVbml0ID0gewogICAgICAgICAgaXNEZWZhdWx0OiA1LAogICAgICAgICAgaXNNYXN0ZXI6IDUsCiAgICAgICAgICB3ZWlnaHQ6ICIiLAogICAgICAgICAgdW5pdE5hbWU6ICIiLAogICAgICAgICAgdW5pdElkOiAiIiwKICAgICAgICAgIGJhckNvZGU6ICIiCiAgICAgICAgfTsKICAgICAgICB0aGlzLmJhc2VfZm9ybS5icmFuY2hVbml0ID0gW107CiAgICAgIH0KICAgIH0KCiAgfQp9Ow=="},null]}
|