c78f25791df25694e41d1f5d4e056215.json 46 KB

1
  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\\order\\manageO\\OrderAdd.vue?vue&type=script&lang=js&","dependencies":[{"path":"E:\\item\\千鸟\\千鸟云商前端源代码\\源点计划\\jindouyunNewFront\\src\\views\\order\\manageO\\OrderAdd.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:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KaW1wb3J0IFJlZ2lvblNlbGVjdCBmcm9tICJAL2NvbXBvbmVudC9jb21tb24vUmVnaW9uU2VsZWN0SlNPTiI7CmltcG9ydCBDb25kaXRpb25TZWxHb29kcyBmcm9tICJAL2NvbXBvbmVudC9jb21tb24vQ29uZGl0aW9uU2VsR29vZHMiOwppbXBvcnQgeyBnZXRPcmRlckluZm9CeUlkLCBuZXdPcmRlckVkaXQsIG5ld0FkZE9yZGVyIH0gZnJvbSAiQC9hcGkvT3JkZXIiOwppbXBvcnQgeyBhZGRTaGlwcGluZ0FkZHJlc3MsIGdldEFsbFNoaXBwaW5nQWRkcmVzcyB9IGZyb20gIkAvYXBpL0N1c3RvbWVyIjsKaW1wb3J0IHsgZ2V0QWxsRGVsaXZlcnksIGdldEFsbFNlbGZFeHByZXNzUnVsZSB9IGZyb20gIkAvYXBpL1N5c3RlbSI7CmltcG9ydCB7IGFkZFBhdXNlU2F2ZSwgZ2V0UGF1c2VTYXZlLCBkZWxQYXVzZVNhdmUgfSBmcm9tICJAL2FwaS9jb21tb24iOwppbXBvcnQgQWNjb3VudFR5cGUgZnJvbSAiQC92aWV3cy9GaW5hbmNlL0FjY291bnRUeXBlIjsKaW1wb3J0IFNlbGVjdEN1c3RvbWVyIGZyb20gIkAvY29tcG9uZW50L2NvbW1vbi9TZWxlY3RDdXN0b21lci52dWUiOwpjb25zdCBnb29kc0l0ZW0gPSB7CiAgc2t1SWQ6IDAsCiAgY29kZTogIiIsCiAgZ29vZHNJZDogMCwKICBidXlOdW06IDEsCiAgc2hvcElkOiAwLAogIGJhc2ljR29vZHNJZDogMCwKICBnb29kc05hbWU6ICIiLAogIHVuaXROYW1lOiAiIiwKICBzcGVjR3JvdXA6ICIiLAogIGludmVudG9yeTogMCwKICBzYWxlUHJpY2U6IDAsCiAgc3ViTW9uZXk6IDAsCiAgc2hvcE5hbWU6ICIiLAogIGdvb2RzSW1hZ2VzOiAiIiwKICBicmFuZElkOiAwLAogIGJyYW5kTmFtZTogIiIsCiAgY2F0ZWdvcnlQYXRoOiAiIiwKICBjYXRlZ29yeU5hbWU6ICIiLAogIGNvbnZlcnNpb246ICIiLAogIGJhckNvZGU6ICIiLAogIHN0b3JhZ2VDb2RlOiAiIiwKICB3YXJlaG91c2VJZDogMCwKICBvcmlnaW5QcmljZTogIiIsCiAgc3BlY1R5cGU6ICIiCn07CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAiT3JkZXJBZGQiLAogIGNvbXBvbmVudHM6IHsKICAgIFNlbGVjdEN1c3RvbWVyLAogICAgUmVnaW9uU2VsZWN0LAogICAgQ29uZGl0aW9uU2VsR29vZHMsCiAgICBBY2NvdW50VHlwZQogIH0sCgogIGRhdGEoKSB7CiAgICBjb25zdCB2YWxpZGF0ZU1vYmlsZSA9IChydWxlLCB2YWx1ZSwgY2FsbGJhY2spID0+IHsKICAgICAgY29uc3QgcmUgPSAvXjFbMzQ1Njc4OV1cZHs5fSQvOyAvLyDmraPliJnooajovr7lvI8KCiAgICAgIGlmICh2YWx1ZSA9PT0gIiIpIHsKICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoKSk7CiAgICAgIH0gZWxzZSBpZiAoIXJlLnRlc3QodmFsdWUpKSB7CiAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCLmiYvmnLrlj7fmoLzlvI/mnInor6/vvIzor7fph43mlrDovpPlhaUhIikpOwogICAgICB9IGVsc2UgewogICAgICAgIGNhbGxiYWNrKCk7CiAgICAgIH0KICAgIH07CgogICAgY29uc3QgdmFsaWRhdGVBZGRyZXNzSWQgPSAocnVsZSwgdmFsdWUsIGNhbGxiYWNrKSA9PiB7CiAgICAgIGlmICh0aGlzLmFkZF9mb3JtLmRlbGl2ZXJ5VHlwZSAhPT0gMikgewogICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcigi6K+36YCJ5oup5pS26LSn5L+h5oGvIikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9OwoKICAgIHJldHVybiB7CiAgICAgIGFkZHJlc3NfbmFtZTogIiIsCiAgICAgIHdhcmVob3VzZTogIiIsCiAgICAgIHdhcmVob3VzZV9zaG93OiBmYWxzZSwKICAgICAgYWNjb3VudF9zaG9wSWQ6IDAsCiAgICAgIGFjY291bnRfc2hvdzogZmFsc2UsCiAgICAgIC8vIOe7k+eul+i0puaItwogICAgICAvLyDmlrDlop7lnLDlnYAKICAgICAgQWRkQWRkcmVzczogZmFsc2UsCiAgICAgIGxvYWRpbmc6IGZhbHNlLAogICAgICB1c2VyQ2VudGVySWQ6ICIiLAogICAgICBkZWxpdmVyeVR5cGVfbGlzdDogW10sCiAgICAgIHNhbGVPcmRlckdvb2RzOiBbXSwKICAgICAgLy/llYblk4HmuIXljZUKICAgICAgZ2l2ZWF3YXlHb29kczogW10sCiAgICAgIC8v6LWg5ZOB5ZOB5riF5Y2VCiAgICAgIGFkZF9ydWxlczogewogICAgICAgIGN1c3RvbWVySWQ6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICLor7fpgInmi6notK3kubDlrqLmiLciLAogICAgICAgICAgdHJpZ2dlcjogImNoYW5nZSIKICAgICAgICB9XSwKICAgICAgICBhZGRyZXNzSWQ6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIHZhbGlkYXRvcjogdmFsaWRhdGVBZGRyZXNzSWQsCiAgICAgICAgICB0cmlnZ2VyOiAiY2hhbmdlIgogICAgICAgIH1dLAogICAgICAgIGRlbGl2ZXJ5VHlwZTogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogIuivt+mAieaLqemFjemAgeaWueW8jyIsCiAgICAgICAgICB0cmlnZ2VyOiAiY2hhbmdlIgogICAgICAgIH1dCiAgICAgIH0sCiAgICAgIGZvcm1fcnVsZXM6IHsKICAgICAgICBuYW1lOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6K+35aGr5YaZ5pS26LSn5Lq6IiwKICAgICAgICAgIHRyaWdnZXI6ICJjaGFuZ2UiCiAgICAgICAgfV0sCiAgICAgICAgYWRkcmVzczogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogIuivt+i+k+WFpeivpue7huWcsOWdgCIsCiAgICAgICAgICB0cmlnZ2VyOiAiYmx1ciIKICAgICAgICB9XSwKICAgICAgICBtb2JpbGU6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICLor7floavlhpnogZTns7vmlrnlvI8iLAogICAgICAgICAgdHJpZ2dlcjogImJsdXIiCiAgICAgICAgfSwgewogICAgICAgICAgdmFsaWRhdG9yOiB2YWxpZGF0ZU1vYmlsZSwKICAgICAgICAgIHRyaWdnZXI6ICJibHVyIgogICAgICAgIH1dLAogICAgICAgIHByb3ZpbmNlQ29kZTogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogIuivt+mAieaLqeaUtui0p+WcsOWdgCIsCiAgICAgICAgICB0cmlnZ2VyOiAiY2hhbmdlIgogICAgICAgIH1dCiAgICAgIH0sCiAgICAgIG1vYmlsZTogIiIsCiAgICAgIGFkZHJlc3M6ICIiLAoKICAgICAgLyoKICAgICAgKgogICAgICAqICdpb3MnICAgICAgICAgPT4gMSwgLy9pb3MKICAgICAgICAnYW5kcm9pZCcgICAgID0+IDIsLy/lronljZMKICAgICAgICAnbWluaVByb2dyYW0nID0+IDMsLy/lsI/nqIvluo8KICAgICAgICAnbWFuYWdlJyAgICAgID0+IDQsIC8v5ZCO5Y+w5Yib5bu6CiAgICAgICAgJ0g1JyAgICAgICAgICA9PiA1LCAvL0g16aG16Z2iCiAgICAgICAgJ1BjJyAgICAgICAgICA9PiA2LCAvL1Bj6aG16Z2iCiAgICAgICogKi8KICAgICAgYWRkcmVzc19saXN0OiBbXSwKICAgICAgLy/mlLbotKflnLDlnYDliJfooagKICAgICAgYWNjb3VudE5hbWU6ICIiLAogICAgICBhZGRfZm9ybTogewogICAgICAgIGN1cnJlbnRBY2NvdW50TmFtZTogIiIsCiAgICAgICAgcmVjZWl2ZWRNb25leTogMCwKICAgICAgICBhY2NvdW50TGlzdDogW10sCiAgICAgICAgZGVsaXZlcnlUeXBlOiAiIiwKICAgICAgICAvL+mFjemAgeaWueW8jwogICAgICAgIGN1c3RvbWVyTmFtZTogIiIsCiAgICAgICAgLy/lrqLmiLflkI3np7AKICAgICAgICBjdXN0b21lcklkOiAiIiwKICAgICAgICByZW1hcms6ICIiLAogICAgICAgIC8vIOWkh+azqAogICAgICAgIGFkZHJlc3NJZDogIiIsCiAgICAgICAgLy8g5pS26LSn5Zyw5Z2ACiAgICAgICAgc2VsZlJ1bGVJZDogW10sCiAgICAgICAgc2VsZlJ1bGVEYXRhOiB7fSwKICAgICAgICBwYXlUeXBlOiAzLAogICAgICAgIC8v5pSv5LuY5pa55byPCiAgICAgICAgcGFydGljdWxhcnNUeXBlOiAiIiAvL+eJqea1geivpuaDhQoKICAgICAgfSwKICAgICAgdG90YWxSZWR1Y2VNb25leTogMCwKICAgICAgLy8g5LyY5oOg6YeR6aKdCiAgICAgIC8vIOaWsOWinuWcsOWdgAogICAgICByZWdpb25OYW1lOiBbXSwKICAgICAgLy/mlrDlop7mlLbotKflnLDlnYAKICAgICAgZm9ybTogewogICAgICAgIG5hbWU6ICIiLAogICAgICAgIHByb3ZpbmNlQ29kZTogIiIsCiAgICAgICAgY2l0eUNvZGU6ICIiLAogICAgICAgIGRpc3RyaWN0Q29kZTogIiIsCiAgICAgICAgYWRkcmVzczogIiIsCiAgICAgICAgbW9iaWxlOiAiIiwKICAgICAgICBkZWZhdWx0U3RhdHVzOiA1CiAgICAgIH0sCiAgICAgIHBhZ2VOYW1lOiAiIiwKICAgICAgb3JkZXJJZDogIiIsCiAgICAgIGdvb2RzX2luZGV4OiAwLAogICAgICBnaXZlX2dvb2RzX2luZGV4OiAwLAogICAgICAvLyDotaDlk4HkuIvmoIcKICAgICAgc3BlY19jaGVjazogW10sCiAgICAgIC8vIOWxnuaApwogICAgICBzZWxmX2V4cHJlc3NfbGlzdDogW10sCiAgICAgIC8v6Ieq5o+Q54K5CiAgICAgIG9yZGVyX2RldGFpbDoge30sCiAgICAgIC8v6K6i5Y2V6K+m5oOFCiAgICAgIGNoYW5nZV9udW06IDAsCiAgICAgIHBheVdheTogMywKICAgICAgLy/mlK/ku5jmlrnlvI8KICAgICAgb3BlcmF0b3JOYW1lOiAiIiwKICAgICAgc2hvcF9pZDogIiIsCiAgICAgIHBheVR5cGVfbGlzdDogW3sKICAgICAgICBsYWJlbDogIui0p+WIsOS7mOasviIsCiAgICAgICAgdmFsdWU6IDMKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAi5YWI5qy+5ZCO6LSnIiwKICAgICAgICB2YWx1ZTogOQogICAgICB9XSwKICAgICAgcGFydGljdWxhcnNUeXBlX2xpc3Q6IFt7CiAgICAgICAgbGFiZWw6ICLnianmtYHkuJPnur8iLAogICAgICAgIHZhbHVlOiA0CiAgICAgIH0sIHsKICAgICAgICBsYWJlbDogIueJqea1geS4k+i9piIsCiAgICAgICAgdmFsdWU6IDUKICAgICAgfV0KICAgIH07CiAgfSwKCiAgY29tcHV0ZWQ6IHsKICAgIC8vIOWVhuWTgeaAu+minQogICAgb3JkZXJBbW91bnQoKSB7CiAgICAgIGlmICghdGhpcy5zYWxlT3JkZXJHb29kcy5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gMDsKICAgICAgfSBlbHNlIGlmICh0aGlzLnNhbGVPcmRlckdvb2RzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHJldHVybiBOdW1iZXIodGhpcy5zYWxlT3JkZXJHb29kc1swXS5zdWJNb25leSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGV0IHN1bSA9IDA7CiAgICAgICAgdGhpcy5zYWxlT3JkZXJHb29kcy5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgICAgc3VtID0gdGhpcy4kTlAucGx1cyhzdW0sIE51bWJlcihpdGVtLnN1Yk1vbmV5KSB8fCAwKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gc3VtOwogICAgICB9CiAgICB9LAoKICAgIHBheU1vbmV5KCkgewogICAgICByZXR1cm4gdGhpcy4kTlAubWludXModGhpcy5vcmRlckFtb3VudCB8fCAwLCB0aGlzLnRvdGFsUmVkdWNlTW9uZXkgfHwgMCk7CiAgICB9CgogIH0sCgogIGFzeW5jIGNyZWF0ZWQoKSB7CiAgICAvLyDphY3pgIHmlrnlvI8KICAgIGF3YWl0IHRoaXMuZ2V0QWxsRGVsaXZlcnkoKTsgLy8g6I635Y+W6Ieq5o+Q54K5CgogICAgYXdhaXQgdGhpcy5nZXRBbGxTZWxmRXhwcmVzc1J1bGUoKTsKICAgIHRoaXMucGFnZU5hbWUgPSB0aGlzLiRyb3V0ZS5uYW1lOwogICAgdGhpcy5vcmRlcklkID0gdGhpcy4kcm91dGUucGFyYW1zLmlkOwogICAgdGhpcy51c2VyQ2VudGVySWQgPSB0aGlzLiRyb3V0ZS5wYXJhbXMudXNlckNlbnRlcklkOwogICAgdGhpcy5hZGRfZm9ybS5jdXJyZW50QWNjb3VudE5hbWUgPSB0aGlzLnVzZXJOYW1lOwoKICAgIGlmICh0aGlzLm9yZGVySWQpIHsKICAgICAgLy8g6I635Y+W6K6i5Y2V6K+m5oOFCiAgICAgIGF3YWl0IHRoaXMuZ2V0T3JkZXJJbmZvQnlJZCgpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5wdXNoR29vZHMoKTsgLy8g6I635Y+W5pqC5a2Y5L+h5oGvCgogICAgICBhd2FpdCB0aGlzLmdldFBhdXNlU2F2ZSgpOwogICAgfQogIH0sCgogIG1ldGhvZHM6IHsKICAgIHB1c2hHb29kcygpIHsKICAgICAgdGhpcy5zYWxlT3JkZXJHb29kcyA9IFtdOwoKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxOyBpKyspIHsKICAgICAgICB0aGlzLnNhbGVPcmRlckdvb2RzLnB1c2godGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUoZ29vZHNJdGVtKSk7CiAgICAgIH0KICAgIH0sCgogICAgLy8g5ou86Z+z5ZWG5ZOB5ZCN56ewCiAgICBnb29kc1Zpc2libGVDaGFuZ2UodmlzaWJsZSwgaW5kZXgpIHsKICAgICAgaWYgKHZpc2libGUpIHsKICAgICAgICB0aGlzLmdvb2RzX2luZGV4ID0gaW5kZXg7CiAgICAgIH0KICAgIH0sCgogICAgZ2l2ZWF3YXlWaXNpYmxlQ2hhbmdlKHZpc2libGUsIGluZGV4KSB7CiAgICAgIGlmICh2aXNpYmxlKSB7CiAgICAgICAgdGhpcy5naXZlX2dvb2RzX2luZGV4ID0gaW5kZXg7CiAgICAgIH0KICAgIH0sCgogICAgc3BlY1NlbENvbmZpcm0ocGFyYW1zKSB7CiAgICAgIGNvbnNvbGUubG9nKHBhcmFtcy5nb29kc0QpOwoKICAgICAgaWYgKHBhcmFtcy5ub3dfZ29vZHNfZGF0YS5pc0VxID09PSA1KSB7CiAgICAgICAgY29uc3QgZ29vZHMgPSB0aGlzLnNhbGVPcmRlckdvb2RzLmZpbmQoaXRlbSA9PiB7CiAgICAgICAgICByZXR1cm4gaXRlbS5nb29kc0lkID09PSBwYXJhbXMubm93X2dvb2RzX2RhdGEuaWQ7CiAgICAgICAgfSk7CgogICAgICAgIGlmIChnb29kcykgewogICAgICAgICAgY29uc3QgcmVwZWF0R29vZHMgPSBwYXJhbXMuZ29vZHNELmZpbmQoZ2YgPT4gZ2Yuc3BlYy51bml0TmFtZSAhPT0gZ29vZHMudW5pdE5hbWUpOwoKICAgICAgICAgIGlmIChyZXBlYXRHb29kcykgewogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoYOOAkCR7cGFyYW1zLm5vd19nb29kc19kYXRhLnRpdGxlfeOAkeS4uuaKhOeggeWVhuWTge+8jOWPquiDvemAieaLqeS4gOS4quWNleS9jei/m+ihjOS4i+WNlWApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxldCB1bml0SWQgPSBwYXJhbXMuZ29vZHNEWzBdLnNwZWMudW5pdElkOwogICAgICAgICAgbGV0IGlzUmVwZWF0ID0gcGFyYW1zLmdvb2RzRC5ldmVyeShpdGVtID0+IGl0ZW0uc3BlYy51bml0SWQgPT09IHVuaXRJZCk7CgogICAgICAgICAgaWYgKCFpc1JlcGVhdCkgewogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoYOOAkCR7cGFyYW1zLm5vd19nb29kc19kYXRhLnRpdGxlfeOAkeS4uuaKhOeggeWVhuWTge+8jOWPquiDvemAieaLqeS4gOS4quWNleS9jei/m+ihjOS4i+WNlWApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBjb25zdCBnb29kc0RhdGEgPSBwYXJhbXMuZ29vZHNELm1hcChpdGVtID0+IHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgc2t1SWQ6IGl0ZW0uc2t1SWQsCiAgICAgICAgICBjb2RlOiBwYXJhbXMubm93X2dvb2RzX2RhdGEuY29kZSwKICAgICAgICAgIGdvb2RzSWQ6IHBhcmFtcy5ub3dfZ29vZHNfZGF0YS5pZCwKICAgICAgICAgIGJ1eU51bTogMSwKICAgICAgICAgIHNob3BJZDogcGFyYW1zLm5vd19nb29kc19kYXRhLnNob3BJZCwKICAgICAgICAgIGJhc2ljR29vZHNJZDogcGFyYW1zLm5vd19nb29kc19kYXRhLmJhc2ljR29vZHNJZCwKICAgICAgICAgIGdvb2RzTmFtZTogcGFyYW1zLm5vd19nb29kc19kYXRhLnRpdGxlLAogICAgICAgICAgdW5pdE5hbWU6IGl0ZW0uc3BlYy51bml0TmFtZSwKICAgICAgICAgIHNwZWNHcm91cDogaXRlbS5zcGVjLnNwZWNHcm91cCwKICAgICAgICAgIGludmVudG9yeTogaXRlbS5zcGVjLmludmVudG9yeSwKICAgICAgICAgIHNhbGVQcmljZTogaXRlbS5zcGVjLnNhbGVQcmljZSwKICAgICAgICAgIHN1Yk1vbmV5OiBpdGVtLnNwZWMuc2FsZVByaWNlLAogICAgICAgICAgc2hvcE5hbWU6IHBhcmFtcy5ub3dfZ29vZHNfZGF0YS5zaG9wTmFtZSwKICAgICAgICAgIGdvb2RzSW1hZ2VzOiBpdGVtLnNwZWMuc3BlY0ltYWdlIHx8IHBhcmFtcy5ub3dfZ29vZHNfZGF0YS5pbWFnZXNbMF0sCiAgICAgICAgICBicmFuZElkOiBwYXJhbXMubm93X2dvb2RzX2RhdGEuYnJhbmRJZCwKICAgICAgICAgIGJyYW5kTmFtZTogcGFyYW1zLm5vd19nb29kc19kYXRhLmJyYW5kTmFtZSwKICAgICAgICAgIGNhdGVnb3J5UGF0aDogcGFyYW1zLm5vd19nb29kc19kYXRhLmNhdGVnb3J5UGF0aCwKICAgICAgICAgIGNhdGVnb3J5TmFtZTogcGFyYW1zLm5vd19nb29kc19kYXRhLmNhdGVnb3J5TmFtZSwKICAgICAgICAgIGNvbnZlcnNpb246IGl0ZW0uc3BlYy5jb252ZXJzaW9uLAogICAgICAgICAgYmFyQ29kZTogaXRlbS5zcGVjLmJhckNvZGUsCiAgICAgICAgICBzdG9yYWdlQ29kZTogcGFyYW1zLm5vd19nb29kc19kYXRhLnN0b3JhZ2UsCiAgICAgICAgICB3YXJlaG91c2VJZDogcGFyYW1zLm5vd19nb29kc19kYXRhLndhcmVob3VzZUlkLAogICAgICAgICAgb3JpZ2luUHJpY2U6IGl0ZW0uc3BlYy5vcmlnaW5QcmljZSwKICAgICAgICAgIHNwZWNUeXBlOiBpdGVtLnNwZWMuc3BlY1R5cGUsCiAgICAgICAgICBzdXBwbGllcklkOiBpdGVtLnN1cHBsaWVySWQsCiAgICAgICAgICBzdXBwbGllck5hbWU6IGl0ZW0uc3VwcGxpZXJOYW1lLAogICAgICAgICAgaXNFcTogaXRlbS5pc0VxLAogICAgICAgICAgaXNNYXN0ZXI6IGl0ZW0uc3BlYy5pc01hc3RlciwKICAgICAgICAgIGlzRGlzdHJpYnV0aW9uOiBpdGVtLmlzRGlzdHJpYnV0aW9uLAogICAgICAgICAgbWVyY2hhbnRJZDogaXRlbS5tZXJjaGFudElkCiAgICAgICAgfTsKICAgICAgfSk7IC8vIHRoaXMuc2FsZU9yZGVyR29vZHMgPSB0aGlzLiRfY29tbW9uLnVuaXF1ZSgKICAgICAgLy8gICBnb29kc0RhdGEuY29uY2F0KHRoaXMuc2FsZU9yZGVyR29vZHMpLAogICAgICAvLyAgIFsiZ29vZHNJZCIsICJza3VJZCJdCiAgICAgIC8vICk7CgogICAgICB0aGlzLnNhbGVPcmRlckdvb2RzID0gZ29vZHNEYXRhLmNvbmNhdCh0aGlzLnNhbGVPcmRlckdvb2RzKTsKICAgIH0sCgogICAgLy8g6LWg5ZOBCiAgICBnaXZlYXdheVNwZWNTZWxDb25maXJtKHBhcmFtcykgewogICAgICBjb25zdCBnb29kc0RhdGEgPSBwYXJhbXMuZ29vZHNELm1hcChpdGVtID0+IHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgc2t1SWQ6IGl0ZW0uc2t1SWQsCiAgICAgICAgICBjb2RlOiBwYXJhbXMubm93X2dvb2RzX2RhdGEuY29kZSwKICAgICAgICAgIGdvb2RzSWQ6IHBhcmFtcy5ub3dfZ29vZHNfZGF0YS5pZCwKICAgICAgICAgIGJ1eU51bTogMSwKICAgICAgICAgIHNob3BJZDogcGFyYW1zLm5vd19nb29kc19kYXRhLnNob3BJZCwKICAgICAgICAgIGJhc2ljR29vZHNJZDogcGFyYW1zLm5vd19nb29kc19kYXRhLmJhc2ljR29vZHNJZCwKICAgICAgICAgIGdvb2RzTmFtZTogcGFyYW1zLm5vd19nb29kc19kYXRhLnRpdGxlLAogICAgICAgICAgdW5pdE5hbWU6IGl0ZW0uc3BlYy51bml0TmFtZSwKICAgICAgICAgIHNwZWNHcm91cDogaXRlbS5zcGVjLnNwZWNHcm91cCwKICAgICAgICAgIGludmVudG9yeTogaXRlbS5zcGVjLmludmVudG9yeSwKICAgICAgICAgIHNhbGVQcmljZTogaXRlbS5zcGVjLnNhbGVQcmljZSwKICAgICAgICAgIHN1Yk1vbmV5OiBpdGVtLnNwZWMuc2FsZVByaWNlLAogICAgICAgICAgc2hvcE5hbWU6IHBhcmFtcy5ub3dfZ29vZHNfZGF0YS5zaG9wTmFtZSwKICAgICAgICAgIGdvb2RzSW1hZ2VzOiBpdGVtLnNwZWMuc3BlY0ltYWdlIHx8IHBhcmFtcy5ub3dfZ29vZHNfZGF0YS5pbWFnZXNbMF0sCiAgICAgICAgICBicmFuZElkOiBwYXJhbXMubm93X2dvb2RzX2RhdGEuYnJhbmRJZCwKICAgICAgICAgIGJyYW5kTmFtZTogcGFyYW1zLm5vd19nb29kc19kYXRhLmJyYW5kTmFtZSwKICAgICAgICAgIGNhdGVnb3J5UGF0aDogcGFyYW1zLm5vd19nb29kc19kYXRhLmNhdGVnb3J5UGF0aCwKICAgICAgICAgIGNhdGVnb3J5TmFtZTogcGFyYW1zLm5vd19nb29kc19kYXRhLmNhdGVnb3J5TmFtZSwKICAgICAgICAgIGNvbnZlcnNpb246IGl0ZW0uc3BlYy5jb252ZXJzaW9uLAogICAgICAgICAgYmFyQ29kZTogaXRlbS5zcGVjLmJhckNvZGUsCiAgICAgICAgICBzdG9yYWdlQ29kZTogcGFyYW1zLm5vd19nb29kc19kYXRhLnN0b3JhZ2UsCiAgICAgICAgICB3YXJlaG91c2VJZDogcGFyYW1zLm5vd19nb29kc19kYXRhLndhcmVob3VzZUlkLAogICAgICAgICAgb3JpZ2luUHJpY2U6IGl0ZW0uc3BlYy5vcmlnaW5QcmljZSwKICAgICAgICAgIHNwZWNUeXBlOiBpdGVtLnNwZWMuc3BlY1R5cGUsCiAgICAgICAgICBzdXBwbGllcklkOiBpdGVtLnN1cHBsaWVySWQsCiAgICAgICAgICBzdXBwbGllck5hbWU6IGl0ZW0uc3VwcGxpZXJOYW1lLAogICAgICAgICAgaXNFcTogaXRlbS5pc0VxLAogICAgICAgICAgaXNNYXN0ZXI6IGl0ZW0uc3BlYy5pc01hc3RlciwKICAgICAgICAgIGlzRGlzdHJpYnV0aW9uOiBpdGVtLmlzRGlzdHJpYnV0aW9uLAogICAgICAgICAgbWVyY2hhbnRJZDogaXRlbS5tZXJjaGFudElkCiAgICAgICAgfTsKICAgICAgfSk7CiAgICAgIHRoaXMuZ2l2ZWF3YXlHb29kcyA9IGdvb2RzRGF0YS5jb25jYXQodGhpcy5naXZlYXdheUdvb2RzKTsKICAgIH0sCgogICAgc2VsZWN0U2VsR29vZHMoaWQpIHsKICAgICAgdGhpcy5zcGVjX2NoZWNrID0gdGhpcy5zYWxlT3JkZXJHb29kcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmdvb2RzSWQgPT09IGlkKS5tYXAoaXRlbSA9PiB7CiAgICAgICAgcmV0dXJuIGl0ZW0uc2t1SWQ7CiAgICAgIH0pOwogICAgfSwKCiAgICBnaXZlYXdheVNlbGVjdFNlbEdvb2RzKGlkKSB7CiAgICAgIHRoaXMuc3BlY19jaGVjayA9IHRoaXMuZ2l2ZWF3YXlHb29kcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmdvb2RzSWQgPT09IGlkKS5tYXAoaXRlbSA9PiB7CiAgICAgICAgcmV0dXJuIGl0ZW0uc2t1SWQ7CiAgICAgIH0pOwogICAgfSwKCiAgICAvLyDmlrDlop7kuIDmnaHllYblk4EKICAgIGFkZExpc3RHb29kcygpIHsKICAgICAgdGhpcy5zYWxlT3JkZXJHb29kcy5wdXNoKHRoaXMuJF9jb21tb24uZGVlcENsb25lKGdvb2RzSXRlbSkpOwogICAgfSwKCiAgICAvLyDmlrDlop7kuIDmnaHotaDlk4EKICAgIGdpdmVhd2F5QWRkTGlzdEdvb2RzKCkgewogICAgICB0aGlzLmdpdmVhd2F5R29vZHMucHVzaCh0aGlzLiRfY29tbW9uLmRlZXBDbG9uZShnb29kc0l0ZW0pKTsKICAgIH0sCgogICAgLy8g5paw5aKe5Zyw5Z2ACiAgICBhc3luYyBhZGRTaGlwcGluZ0FkZHJlc3MoKSB7CiAgICAgIGlmICghdGhpcy5mb3JtLm5hbWUudHJpbSgpIHx8ICF0aGlzLnJlZ2lvbk5hbWUgfHwgIXRoaXMuZm9ybS5tb2JpbGUudHJpbSgpIHx8ICF0aGlzLmZvcm0uYWRkcmVzcy50cmltKCkpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIumDveaYr+W/heWhq+mhueS4jeiDveS4uuepuiIpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGFkZFNoaXBwaW5nQWRkcmVzcyh7IC4uLnRoaXMuZm9ybSwKICAgICAgICBjdXN0b21lcklkOiB0aGlzLmFkZF9mb3JtLmN1c3RvbWVySWQKICAgICAgfSk7CiAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICBtZXNzYWdlOiAi5re75Yqg5oiQ5YqfIgogICAgICB9KTsKICAgICAgdGhpcy5BZGRBZGRyZXNzID0gZmFsc2U7CiAgICAgIGF3YWl0IHRoaXMuZ2V0QWxsU2hpcHBpbmdBZGRyZXNzKHRoaXMuYWRkX2Zvcm0uY3VzdG9tZXJJZCk7CiAgICB9LAoKICAgIHJlZ2lvbkNoYW5nZSh2YWwsIHBhcmFtcykgewogICAgICB0aGlzLmZvcm0ucHJvdmluY2VDb2RlID0gdmFsWzBdOwogICAgICB0aGlzLmZvcm0uY2l0eUNvZGUgPSB2YWxbMV07CiAgICAgIHRoaXMuZm9ybS5kaXN0cmljdENvZGUgPSB2YWxbMl07CiAgICB9LAoKICAgIC8vIOWFs+mXreW8ueeqlwogICAgaGFuZGxlQ2xvc2UoKSB7CiAgICAgIHRoaXMuZm9ybSA9IHt9OwogICAgfSwKCiAgICAvLyDojrflj5borqLljZXor6bmg4UKICAgIGFzeW5jIGdldE9yZGVySW5mb0J5SWQoKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhCiAgICAgIH0gPSBhd2FpdCBnZXRPcmRlckluZm9CeUlkKHRoaXMuJHJvdXRlLnBhcmFtcy51c2VyQ2VudGVySWQsIHsKICAgICAgICBvcmRlcklkOiB0aGlzLm9yZGVySWQKICAgICAgfSk7CiAgICAgIHRoaXMub3JkZXJfZGV0YWlsID0gZGF0YTsKICAgICAgdGhpcy5hZGRfZm9ybSA9IHsKICAgICAgICBhY2NvdW50TGlzdDogZGF0YS5hY2NvdW50TGlzdCB8fCBbXSwKICAgICAgICBkZWxpdmVyeVR5cGU6IGRhdGEuZGVsaXZlcnlUeXBlLAogICAgICAgIC8v6YWN6YCB5pa55byPCiAgICAgICAgY3VzdG9tZXJOYW1lOiBkYXRhLmN1c3RvbWVyTmFtZSwKICAgICAgICAvL+WuouaIt+WQjeensAogICAgICAgIGN1c3RvbWVySWQ6IGRhdGEuY3VzdG9tZXJJZCwKICAgICAgICByZW1hcms6IGRhdGEucmVtYXJrLAogICAgICAgIC8vIOWkh+azqAogICAgICAgIGFkZHJlc3NJZDogZGF0YS5yZWNlaXZlRGF0YS5pZCwKICAgICAgICAvLyDmlLbotKflnLDlnYAKICAgICAgICBzZWxmUnVsZUlkOiBkYXRhLnNlbGZSdWxlSWQsCiAgICAgICAgc2VsZlJ1bGVEYXRhOiBkYXRhLnNlbGZSdWxlRGF0YSwKICAgICAgICByZWNlaXZlZE1vbmV5OiBkYXRhLnJlY2VpdmVkTW9uZXksCiAgICAgICAgcGF5VHlwZTogTnVtYmVyKGRhdGEucGF5VHlwZSkKICAgICAgfTsKCiAgICAgIGlmICh0aGlzLmFkZF9mb3JtLmRlbGl2ZXJ5VHlwZSA9PT0gNCkgewogICAgICAgIHRoaXMuYWRkX2Zvcm0uZGVsaXZlcnlUeXBlID0gMzsKICAgICAgICB0aGlzLmFkZF9mb3JtLnBhcnRpY3VsYXJzVHlwZSA9IDQ7CiAgICAgIH0KCiAgICAgIGlmICh0aGlzLmFkZF9mb3JtLmRlbGl2ZXJ5VHlwZSA9PT0gNSkgewogICAgICAgIHRoaXMuYWRkX2Zvcm0uZGVsaXZlcnlUeXBlID0gMzsKICAgICAgICB0aGlzLmFkZF9mb3JtLnBhcnRpY3VsYXJzVHlwZSA9IDU7CiAgICAgIH0KCiAgICAgIGlmIChkYXRhLnJlY2VpdmVEYXRhLmFyZWEpIHsKICAgICAgICB0aGlzLmFkZHJlc3NfbmFtZSA9IGRhdGEucmVjZWl2ZURhdGEucmVhbE5hbWUgKyAiICIgKyBkYXRhLnJlY2VpdmVEYXRhLm1vYmlsZSArICIgIiArIGRhdGEucmVjZWl2ZURhdGEuYXJlYS5wcm92aW5jZU5hbWUgKyAiLSIgKyBkYXRhLnJlY2VpdmVEYXRhLmFyZWEuY2l0eU5hbWUgKyAiLSIgKyBkYXRhLnJlY2VpdmVEYXRhLmFyZWEuZGlzdHJpY3ROYW1lICsgIi0iICsgZGF0YS5yZWNlaXZlRGF0YS5hZGRyZXNzOwogICAgICB9CgogICAgICBpZiAoZGF0YS5hY2NvdW50TGlzdCAmJiBkYXRhLmFjY291bnRMaXN0Lmxlbmd0aCkgewogICAgICAgIHRoaXMuYWNjb3VudE5hbWUgPSBkYXRhLmFjY291bnRMaXN0WzBdLmFjY291bnROYW1lOwogICAgICB9CgogICAgICB0aGlzLmFkZF9mb3JtLmN1cnJlbnRBY2NvdW50TmFtZSA9IGRhdGEuY3VycmVudEFjY291bnROYW1lOwogICAgICB0aGlzLnRvdGFsUmVkdWNlTW9uZXkgPSBkYXRhLnRvdGFsUmVkdWNlTW9uZXkgfHwgMDsKICAgICAgdGhpcy51c2VyQ2VudGVySWQgPSBkYXRhLnVzZXJDZW50ZXJJZDsKICAgICAgdGhpcy5zYWxlT3JkZXJHb29kcyA9IGRhdGEuZ29vZHNEYXRhLm1hcChpdGVtID0+IHsKICAgICAgICByZXR1cm4geyAuLi5pdGVtLAogICAgICAgICAgc3ViTW9uZXk6IGl0ZW0udG90YWxNb25leSwKICAgICAgICAgIHNhbGVQcmljZTogaXRlbS5wcmljZSwKICAgICAgICAgIGNvZGU6IGl0ZW0uZ29vZHNDb2RlLAogICAgICAgICAgZ29vZHNJbWFnZXM6IGl0ZW0uaW1hZ2VzWzBdCiAgICAgICAgfTsKICAgICAgfSk7CgogICAgICBpZiAoZGF0YS5jdXN0b21lcklkKSB7CiAgICAgICAgLy8g6I635Y+W5a6i5oi35pS26LSn5Zyw5Z2A5YiX6KGoCiAgICAgICAgYXdhaXQgdGhpcy5nZXRBbGxTaGlwcGluZ0FkZHJlc3MoZGF0YS5jdXN0b21lcklkKTsKICAgICAgfSAvL+eUseS6juiuouWNleaYr+aMieeFp+W6l+mTuuaLhuWNleeahAogICAgICAvLyDmiYDku6XlnKjnvJbovpHorqLljZXml7bvvIzlop7liqDmraTorqLljZXnmoTllYblk4Hml7blupTor6Xlj6rog73pgInmi6nmnKzlupfpk7rkuIvnmoTllYblk4EKCgogICAgICB0aGlzLnNob3BfaWQgPSBkYXRhLnNob3BJZDsKICAgICAgdGhpcy5hY2NvdW50X3Nob3BJZCA9IGRhdGEuc2hvcElkOwoKICAgICAgaWYgKHRoaXMuYWRkX2Zvcm0uZGVsaXZlcnlUeXBlID09PSAyKSB7CiAgICAgICAgY29uc3Qgc2VsZlJ1bGVEYXRhID0gSlNPTi5wYXJzZShkYXRhLnNlbGZSdWxlRGF0YSk7CiAgICAgICAgdGhpcy5tb2JpbGUgPSBzZWxmUnVsZURhdGEubW9iaWxlOwogICAgICAgIHRoaXMuYWRkcmVzcyA9IHNlbGZSdWxlRGF0YS5wcm92aW5jZU5hbWUgKyAiICIgKyBzZWxmUnVsZURhdGEuY2l0eU5hbWUgKyAiICIgKyBzZWxmUnVsZURhdGEuZGlzdHJpY3ROYW1lICsgIiAiICsgc2VsZlJ1bGVEYXRhLmFkZHJlc3M7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgcmVjZWl2ZURhdGEgPSBkYXRhLnJlY2VpdmVEYXRhOwogICAgICAgIHRoaXMubW9iaWxlID0gcmVjZWl2ZURhdGEubW9iaWxlOwogICAgICAgIHRoaXMuYWRkcmVzcyA9IHJlY2VpdmVEYXRhLmFyZWEucHJvdmluY2VOYW1lICsgIiAiICsgcmVjZWl2ZURhdGEuYXJlYS5jaXR5TmFtZSArICIgIiArIHJlY2VpdmVEYXRhLmFyZWEuZGlzdHJpY3ROYW1lICsgIiAiICsgcmVjZWl2ZURhdGEuYWRkcmVzczsKICAgICAgfQogICAgfSwKCiAgICAvLyDmt7vliqDmmoLlrZgKICAgIGFzeW5jIGFkZFBhdXNlU2F2ZSgpIHsKICAgICAgY29uc3QgcGFyYW1zID0gewogICAgICAgIGFkZF9mb3JtOiB0aGlzLmFkZF9mb3JtLAogICAgICAgIHRvdGFsUmVkdWNlTW9uZXk6IHRoaXMudG90YWxSZWR1Y2VNb25leSwKICAgICAgICBzYWxlT3JkZXJHb29kczogdGhpcy5zYWxlT3JkZXJHb29kcywKICAgICAgICB1c2VyQ2VudGVySWQ6IHRoaXMudXNlckNlbnRlcklkCiAgICAgIH07CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBhZGRQYXVzZVNhdmUoewogICAgICAgIGtleTogdGhpcy5wYWdlTmFtZSwKICAgICAgICBkYXRhOiBwYXJhbXMKICAgICAgfSk7CiAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICBtZXNzYWdlOiAi5pqC5a2Y5oiQ5YqfIgogICAgICB9KTsKCiAgICAgIGlmICh0aGlzLnN5c3RlbVR5cGUgPT09IDIpIHsKICAgICAgICB0aGlzLiRjbG9zZUN1cnJlbnRHb0VkaXQoIi9TaW5nbGVTdG9yZS9vcmRlci9PcmRlckxpc3Qvd2FpdEF1ZGl0Iik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4kY2xvc2VDdXJyZW50R29FZGl0KCIvb3JkZXIvbWFuYWdlTy9vcmRlclF1ZXJ5Iik7CiAgICAgIH0KICAgIH0sCgogICAgLy8g6I635Y+W5pqC5a2Y5L+h5oGvCiAgICBhc3luYyBnZXRQYXVzZVNhdmUoKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhCiAgICAgIH0gPSBhd2FpdCBnZXRQYXVzZVNhdmUoewogICAgICAgIGtleTogdGhpcy5wYWdlTmFtZQogICAgICB9KTsKICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGRhdGEpID09PSAie30iKSByZXR1cm47CgogICAgICBpZiAoZGF0YS5hZGRfZm9ybSkgewogICAgICAgIHRoaXMuYWRkX2Zvcm0gPSBkYXRhLmFkZF9mb3JtOwoKICAgICAgICBpZiAoZGF0YS5hZGRfZm9ybS5jdXN0b21lcklkKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmdldEFsbFNoaXBwaW5nQWRkcmVzcyhkYXRhLmFkZF9mb3JtLmN1c3RvbWVySWQpOwogICAgICAgIH0KCiAgICAgICAgdGhpcy50b3RhbFJlZHVjZU1vbmV5ID0gZGF0YS50b3RhbFJlZHVjZU1vbmV5IHx8IDA7CiAgICAgICAgdGhpcy5zYWxlT3JkZXJHb29kcyA9IGRhdGEuc2FsZU9yZGVyR29vZHMgfHwgW2dvb2RzSXRlbV07CiAgICAgICAgdGhpcy51c2VyQ2VudGVySWQgPSBkYXRhLnVzZXJDZW50ZXJJZCB8fCAwOwogICAgICB9CiAgICB9LAoKICAgIC8vIOiOt+WPlumFjemAgeaWueW8jwogICAgYXN5bmMgZ2V0QWxsRGVsaXZlcnkoKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhCiAgICAgIH0gPSBhd2FpdCBnZXRBbGxEZWxpdmVyeSh7CiAgICAgICAgcGFnZTogMSwKICAgICAgICBwYWdlU2l6ZTogMTAwCiAgICAgIH0pOwogICAgICB0aGlzLmRlbGl2ZXJ5VHlwZV9saXN0ID0gZGF0YTsKICAgICAgY29uc3QgZGVmYXVsdFR5cGUgPSBkYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmRlZmF1bHRTdGF0dXMgPT09IDUpOwoKICAgICAgaWYgKGRlZmF1bHRUeXBlICYmICF0aGlzLmFkZF9mb3JtLmRlbGl2ZXJ5VHlwZSkgewogICAgICAgIHRoaXMuYWRkX2Zvcm0uZGVsaXZlcnlUeXBlID0gZGVmYXVsdFR5cGUuZGVsaXZlcnlUeXBlOwogICAgICB9CiAgICB9LAoKICAgIC8vIOWIoOmZpOaaguWtmOS/oeaBrwogICAgYXN5bmMgZGVsUGF1c2VTYXZlKHR5cGUpIHsKICAgICAgY29uc3QgZGF0YSA9IGRlbFBhdXNlU2F2ZSh7CiAgICAgICAga2V5OiB0aGlzLnBhZ2VOYW1lCiAgICAgIH0pOwoKICAgICAgaWYgKHR5cGUpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICAgIG1lc3NhZ2U6ICLmuIXpmaTmmoLlrZjmiJDlip8iCiAgICAgICAgfSk7CgogICAgICAgIGlmICh0aGlzLnN5c3RlbVR5cGUgPT09IDIpIHsKICAgICAgICAgIHRoaXMuJGNsb3NlQ3VycmVudEdvRWRpdCgiL1NpbmdsZVN0b3JlL29yZGVyL09yZGVyTGlzdC93YWl0QXVkaXQiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy4kY2xvc2VDdXJyZW50R29FZGl0KCIvb3JkZXIvbWFuYWdlTy9vcmRlclF1ZXJ5Iik7CiAgICAgICAgfQogICAgICB9CiAgICB9LAoKICAgIC8vIOaPkOS6pAogICAgc3ViRGF0YSgpIHsKICAgICAgaWYgKHRoaXMuYWRkX2Zvcm0uZGVsaXZlcnlUeXBlID09PSAyICYmICF0aGlzLmFkZF9mb3JtLnNlbGZSdWxlSWQpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIuivt+mAieaLqeiHquaPkOeCuSIpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgdGhpcy4kcmVmcy5hZGRfZm9ybS52YWxpZGF0ZShhc3luYyB2YWxpZCA9PiB7CiAgICAgICAgaWYgKHZhbGlkKSB7CiAgICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5zYWxlT3JkZXJHb29kcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnNrdUlkKTsgLy8g6aqM6K+B5oqE56CB5ZWG5ZOB5pWw6YePCgogICAgICAgICAgY29uc3QgaXNFcU51bSA9IGxpc3QuZXZlcnkoaXRlbSA9PiB7CiAgICAgICAgICAgIGlmIChpdGVtLmlzRXEgPT09IDUgJiYgaXRlbS5pc01hc3RlciA9PT0gNSkgewogICAgICAgICAgICAgIHJldHVybiBpdGVtLm90aGVyTnVtID4gMDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CgogICAgICAgICAgaWYgKCFpc0VxTnVtKSB7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygi5oqE56CB5ZWG5ZOB5YW25LuW5Y2V5L2N5pWw6YeP5LiN6IO95Li6MCIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IC8vIOmqjOivgeWVhuWTgeaVsOmHjwoKCiAgICAgICAgICBjb25zdCBpc0J1eU51bSA9IGxpc3QuZXZlcnkoaXRlbSA9PiBpdGVtLmJ1eU51bSA+IDApOwoKICAgICAgICAgIGlmICghaXNCdXlOdW0pIHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fovpPlhaXlpKfkuo4w55qE5ZWG5ZOB5pWw6YePIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gLy8g6aqM6K+B5ZWG5ZOB5Y2V5Lu3CgoKICAgICAgICAgIGNvbnN0IGlzU2FsZVByaWNlID0gbGlzdC5ldmVyeShpdGVtID0+IGl0ZW0uc2FsZVByaWNlID4gMCk7IC8vIGlmICghaXNTYWxlUHJpY2UpIHsKICAgICAgICAgIC8vICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLllYblk4HljZXku7fkuI3og73kuLowIik7CiAgICAgICAgICAvLyAgIHJldHVybjsKICAgICAgICAgIC8vIH0KICAgICAgICAgIC8vIOmqjOivgeWVhuWTgemHkeminQoKICAgICAgICAgIGNvbnN0IGlzU3ViTW9uZXkgPSBsaXN0LmV2ZXJ5KGl0ZW0gPT4gaXRlbS5zdWJNb25leSA+IDApOyAvLyBpZiAoIWlzU3ViTW9uZXkpIHsKICAgICAgICAgIC8vICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLllYblk4Hph5Hpop3kuI3og73kuLowIik7CiAgICAgICAgICAvLyAgIHJldHVybjsKICAgICAgICAgIC8vIH0KCiAgICAgICAgICBjb25zdCBzYWxlT3JkZXJHb29kcyA9IGxpc3QubWFwKGl0ZW0gPT4gewogICAgICAgICAgICBpZiAoIXRoaXMub3JkZXJJZCkgewogICAgICAgICAgICAgIGRlbGV0ZSBpdGVtLmludmVudG9yeTsKICAgICAgICAgICAgICBkZWxldGUgaXRlbS5lbmFibGVkTGFkZGVyOwogICAgICAgICAgICAgIGRlbGV0ZSBpdGVtLmxhZGRlclByaWNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gaXRlbTsKICAgICAgICAgIH0pOwoKICAgICAgICAgIGlmICghc2FsZU9yZGVyR29vZHMubGVuZ3RoKSB7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygi6K+36YCJ5oup5ZWG5ZOBIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAodGhpcy5hZGRfZm9ybS5yZWNlaXZlZE1vbmV5ID4gMCAmJiAhdGhpcy5hZGRfZm9ybS5hY2NvdW50TGlzdC5sZW5ndGgpIHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fpgInmi6nnu5PnrpfotKbmiLciKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICh0aGlzLm9yZGVySWQpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5lZGl0T3JkZXIoc2FsZU9yZGVyR29vZHMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRPcmRlcihzYWxlT3JkZXJHb29kcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCgogICAgLy8g57yW6L6R6K6i5Y2VCiAgICBhc3luYyBlZGl0T3JkZXIoc2FsZU9yZGVyR29vZHMpIHsKICAgICAgaWYgKHRoaXMuYWRkX2Zvcm0ucGFydGljdWxhcnNUeXBlKSB7CiAgICAgICAgdGhpcy5hZGRfZm9ybS5kZWxpdmVyeVR5cGUgPSB0aGlzLmFkZF9mb3JtLnBhcnRpY3VsYXJzVHlwZTsKICAgICAgfQoKICAgICAgY29uc3QgZ29vZHNEYXRhID0gc2FsZU9yZGVyR29vZHMubWFwKGl0ZW0gPT4gewogICAgICAgIHJldHVybiB7IC4uLml0ZW0sCiAgICAgICAgICB0b3RhbE1vbmV5OiBpdGVtLnN1Yk1vbmV5LAogICAgICAgICAgcHJpY2U6IGl0ZW0uc2FsZVByaWNlLAogICAgICAgICAgZ29vZHNDb2RlOiBpdGVtLmNvZGUsCiAgICAgICAgICBpbWFnZXM6IFtpdGVtLmdvb2RzSW1hZ2VzXQogICAgICAgIH07CiAgICAgIH0pOyAvLyBjb25zb2xlLmxvZyhnb29kc0RhdGEpOwogICAgICAvLyByZXR1cm47CgogICAgICB0aGlzLnN1Yl9sb2FkaW5nID0gdHJ1ZTsKCiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IG5ld09yZGVyRWRpdCh0aGlzLm9yZGVySWQsIHsgLi4udGhpcy5vcmRlcl9kZXRhaWwsCiAgICAgICAgICBkZWxpdmVyeVR5cGU6IHRoaXMuYWRkX2Zvcm0uZGVsaXZlcnlUeXBlLAogICAgICAgICAgY3VzdG9tZXJOYW1lOiB0aGlzLmFkZF9mb3JtLmN1c3RvbWVyTmFtZSwKICAgICAgICAgIGFkZHJlc3NJZDogdGhpcy5hZGRfZm9ybS5hZGRyZXNzSWQsCiAgICAgICAgICByZW1hcms6IHRoaXMuYWRkX2Zvcm0ucmVtYXJrLAogICAgICAgICAgYWNjb3VudExpc3Q6IHRoaXMuYWRkX2Zvcm0uYWNjb3VudExpc3QsCiAgICAgICAgICB0b3RhbE1vbmV5OiB0aGlzLm9yZGVyQW1vdW50LAogICAgICAgICAgcGF5TW9uZXk6IHRoaXMucGF5TW9uZXksCiAgICAgICAgICB0b3RhbFJlZHVjZU1vbmV5OiB0aGlzLnRvdGFsUmVkdWNlTW9uZXkgfHwgMCwKICAgICAgICAgIHJlY2VpdmVkTW9uZXk6IHRoaXMuYWRkX2Zvcm0ucmVjZWl2ZWRNb25leSwKICAgICAgICAgIGN1cnJlbnRBY2NvdW50TmFtZTogdGhpcy5hZGRfZm9ybS5jdXJyZW50QWNjb3VudE5hbWUsCiAgICAgICAgICB1c2VyQ2VudGVySWQ6IHRoaXMudXNlckNlbnRlcklkLAogICAgICAgICAgY3VzdG9tZXJJZDogdGhpcy5hZGRfZm9ybS5jdXN0b21lcklkLAogICAgICAgICAgc2VsZlJ1bGVJZDogdGhpcy5hZGRfZm9ybS5zZWxmUnVsZUlkLAogICAgICAgICAgc2VsZlJ1bGVEYXRhOiB0aGlzLmFkZF9mb3JtLnNlbGZSdWxlRGF0YSwKICAgICAgICAgIGdvb2RzRGF0YTogZ29vZHNEYXRhLAogICAgICAgICAgcGF5VHlwZTogdGhpcy5hZGRfZm9ybS5wYXlUeXBlCiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5zdWJfbG9hZGluZyA9IGZhbHNlOwogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogInN1Y2Nlc3MiLAogICAgICAgICAgbWVzc2FnZTogIuaPkOS6pOaIkOWKnyIKICAgICAgICB9KTsKCiAgICAgICAgaWYgKHRoaXMuc3lzdGVtVHlwZSA9PT0gMikgewogICAgICAgICAgdGhpcy4kY2xvc2VDdXJyZW50R29FZGl0KCIvU2luZ2xlU3RvcmUvb3JkZXIvT3JkZXJMaXN0L3dhaXRBdWRpdCIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLiRjbG9zZUN1cnJlbnRHb0VkaXQoIi9vcmRlci9tYW5hZ2VPL29yZGVyUXVlcnkiKTsKICAgICAgICB9CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdGhpcy5zdWJfbG9hZGluZyA9IGZhbHNlOwogICAgICB9CiAgICB9LAoKICAgIC8vIOaWsOWinuiuouWNlQogICAgYXN5bmMgYWRkT3JkZXIoc2FsZU9yZGVyR29vZHMpIHsKICAgICAgaWYgKHRoaXMudG90YWxSZWR1Y2VNb25leSA9PT0gIiIpIHsKICAgICAgICB0aGlzLnRvdGFsUmVkdWNlTW9uZXkgPSAwOwogICAgICB9CgogICAgICBpZiAodGhpcy5hZGRfZm9ybS5wYXJ0aWN1bGFyc1R5cGUpIHsKICAgICAgICB0aGlzLmFkZF9mb3JtLmRlbGl2ZXJ5VHlwZSA9IHRoaXMuYWRkX2Zvcm0ucGFydGljdWxhcnNUeXBlOwogICAgICB9CgogICAgICBsZXQgcGFyYW1zID0gewogICAgICAgIGRlbGl2ZXJ5VHlwZTogdGhpcy5hZGRfZm9ybS5kZWxpdmVyeVR5cGUsCiAgICAgICAgY3VzdG9tZXJOYW1lOiB0aGlzLmFkZF9mb3JtLmN1c3RvbWVyTmFtZSwKICAgICAgICBhZGRyZXNzSWQ6IHRoaXMuYWRkX2Zvcm0uYWRkcmVzc0lkLAogICAgICAgIHJlbWFyazogdGhpcy5hZGRfZm9ybS5yZW1hcmssCiAgICAgICAgYWNjb3VudExpc3Q6IHRoaXMuYWRkX2Zvcm0uYWNjb3VudExpc3QsCiAgICAgICAgY3VycmVudEFjY291bnROYW1lOiB0aGlzLmFkZF9mb3JtLmN1cnJlbnRBY2NvdW50TmFtZSwKICAgICAgICByZWNlaXZlZE1vbmV5OiB0aGlzLmFkZF9mb3JtLnJlY2VpdmVkTW9uZXksCiAgICAgICAgbGlzdHM6IHNhbGVPcmRlckdvb2RzLAogICAgICAgIHRvdGFsTW9uZXk6IHRoaXMub3JkZXJBbW91bnQsCiAgICAgICAgcGF5TW9uZXk6IHRoaXMucGF5TW9uZXksCiAgICAgICAgdG90YWxSZWR1Y2VNb25leTogdGhpcy50b3RhbFJlZHVjZU1vbmV5IHx8IDAsCiAgICAgICAgdXNlckNlbnRlcklkOiB0aGlzLnVzZXJDZW50ZXJJZCwKICAgICAgICBjdXN0b21lcklkOiB0aGlzLmFkZF9mb3JtLmN1c3RvbWVySWQsCiAgICAgICAgc2VsZlJ1bGVJZDogdGhpcy5hZGRfZm9ybS5zZWxmUnVsZUlkLAogICAgICAgIHNlbGZSdWxlRGF0YTogdGhpcy5hZGRfZm9ybS5zZWxmUnVsZURhdGEsCiAgICAgICAgb3BlcmF0b3JOYW1lOiB0aGlzLnVzZXJOYW1lLAogICAgICAgIHBheVR5cGU6IHRoaXMuYWRkX2Zvcm0ucGF5VHlwZQogICAgICB9OwogICAgICB0aGlzLnN1Yl9sb2FkaW5nID0gdHJ1ZTsKCiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IG5ld0FkZE9yZGVyKHBhcmFtcyk7CiAgICAgICAgdGhpcy5zdWJfbG9hZGluZyA9IGZhbHNlOwogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogInN1Y2Nlc3MiLAogICAgICAgICAgbWVzc2FnZTogIuaPkOS6pOaIkOWKnyIKICAgICAgICB9KTsKICAgICAgICBhd2FpdCB0aGlzLmRlbFBhdXNlU2F2ZSgpOwoKICAgICAgICBpZiAodGhpcy5zeXN0ZW1UeXBlID09PSAyKSB7CiAgICAgICAgICB0aGlzLiRjbG9zZUN1cnJlbnRHb0VkaXQoIi9TaW5nbGVTdG9yZS9vcmRlci9PcmRlckxpc3Qvd2FpdEF1ZGl0Iik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuJGNsb3NlQ3VycmVudEdvRWRpdCgiL29yZGVyL21hbmFnZU8vb3JkZXJRdWVyeSIpOwogICAgICAgIH0KICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0aGlzLnN1Yl9sb2FkaW5nID0gZmFsc2U7CiAgICAgIH0KICAgIH0sCgogICAgLy8g6YCJ5oup5ZWG5ZOBCiAgICBhc3luYyBzZWxHb29kcyh2YWwpIHsKICAgICAgaWYgKHZhbC5sZW5ndGgpIHsKICAgICAgICAvL+aKhOeggeWVhuWTgeWPquiDvemAieaLqeS4gOS4quWNleS9jei/m+ihjOS4i+WNlQogICAgICAgIGxldCBhcnIgPSBbXTsKICAgICAgICBsZXQgaXNFcU1vcmUgPSBmYWxzZTsKCiAgICAgICAgZm9yIChsZXQgaSBpbiB2YWwpIHsKICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2YWxbaV07CgogICAgICAgICAgaWYgKGl0ZW0uaXNFcSA9PT0gNSkgewogICAgICAgICAgICBpZiAoYXJyLmZpbmQoZmluID0+IGZpbi5pZCA9PT0gaXRlbS5pZCAmJiBmaW4udW5pdElkICE9PSBpdGVtLnVuaXRJZCkpIHsKICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIuaKhOeggeWVhuWTgeWPquiDvemAieaLqeS4gOS4quWNleS9jei/m+ihjOS4i+WNle+8jOivt+mHjeaWsOWLvumAiSIpOwogICAgICAgICAgICAgIGlzRXFNb3JlID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBhcnIucHVzaChpdGVtKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzRXFNb3JlKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBsZXQgZ29vZHNEYXRhID0gdmFsLm1hcChpdGVtID0+IHsKICAgICAgICAgIGxldCBzYWxlUHJpY2UgPSAwOwoKICAgICAgICAgIGlmIChpdGVtLmVuYWJsZWRMYWRkZXIpIHsKICAgICAgICAgICAgc2FsZVByaWNlID0gaXRlbS5sYWRkZXJQcmljZVswXS5wcmljZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNhbGVQcmljZSA9IGl0ZW0uc2FsZVByaWNlOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGdvb2RzTmFtZTogaXRlbS50aXRsZSwKICAgICAgICAgICAgc2t1SWQ6IGl0ZW0uc2t1SWQsCiAgICAgICAgICAgIGNvZGU6IGl0ZW0uY29kZSwKICAgICAgICAgICAgZ29vZHNJZDogaXRlbS5pZCwKICAgICAgICAgICAgYnV5TnVtOiAxLAogICAgICAgICAgICBvdGhlck51bTogIiIsCiAgICAgICAgICAgIHNob3BJZDogaXRlbS5zaG9wSWQsCiAgICAgICAgICAgIGJhc2ljR29vZHNJZDogaXRlbS5iYXNpY0dvb2RzSWQsCiAgICAgICAgICAgIHVuaXROYW1lOiBpdGVtLnVuaXROYW1lLAogICAgICAgICAgICB1bml0SWQ6IGl0ZW0udW5pdElkLAogICAgICAgICAgICBzcGVjR3JvdXA6IGl0ZW0uc3BlY0dyb3VwLAogICAgICAgICAgICBpbnZlbnRvcnk6IGl0ZW0uaW52ZW50b3J5LAogICAgICAgICAgICBzYWxlUHJpY2U6IHNhbGVQcmljZSwKICAgICAgICAgICAgc3ViTW9uZXk6IGl0ZW0uc2FsZVByaWNlLAogICAgICAgICAgICBzaG9wTmFtZTogaXRlbS5zaG9wTmFtZSwKICAgICAgICAgICAgZ29vZHNJbWFnZXM6IGl0ZW0uaW1hZ2VzWzBdLAogICAgICAgICAgICBicmFuZElkOiBpdGVtLmJyYW5kSWQsCiAgICAgICAgICAgIGJyYW5kTmFtZTogIiIsCiAgICAgICAgICAgIGNhdGVnb3J5UGF0aDogaXRlbS5jYXRlZ29yeVBhdGgsCiAgICAgICAgICAgIGNhdGVnb3J5TmFtZTogaXRlbS5jYXRlZ29yeU5hbWUsCiAgICAgICAgICAgIGNvbnZlcnNpb246IGl0ZW0uY29udmVyc2lvbiwKICAgICAgICAgICAgYmFyQ29kZTogIiIsCiAgICAgICAgICAgIHN0b3JhZ2VDb2RlOiAiIiwKICAgICAgICAgICAgd2FyZWhvdXNlSWQ6IGl0ZW0ud2FyZWhvdXNlSWQsCiAgICAgICAgICAgIG9yaWdpblByaWNlOiBpdGVtLm9yaWdpblByaWNlLAogICAgICAgICAgICBzcGVjVHlwZTogaXRlbS5zcGVjVHlwZSwKICAgICAgICAgICAgZW5hYmxlZExhZGRlcjogaXRlbS5lbmFibGVkTGFkZGVyLAogICAgICAgICAgICBsYWRkZXJQcmljZTogaXRlbS5sYWRkZXJQcmljZSwKICAgICAgICAgICAgc3VwcGxpZXJJZDogaXRlbS5zdXBwbGllcklkLAogICAgICAgICAgICBzdXBwbGllck5hbWU6IGl0ZW0uc3VwcGxpZXJOYW1lLAogICAgICAgICAgICBpc0VxOiBpdGVtLmlzRXEsCiAgICAgICAgICAgIGlzTWFzdGVyOiBpdGVtLmlzTWFzdGVyLAogICAgICAgICAgICBpc0Rpc3RyaWJ1dGlvbjogaXRlbS5pc0Rpc3RyaWJ1dGlvbiwKICAgICAgICAgICAgbWVyY2hhbnRJZDogaXRlbS5tZXJjaGFudElkCiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHNhbGVPcmRlckdvb2RzID0gdGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUodGhpcy5zYWxlT3JkZXJHb29kcyk7CiAgICAgICAgZ29vZHNEYXRhID0gZ29vZHNEYXRhLmZpbHRlcihpdGVtID0+IHsKICAgICAgICAgIC8vIOaKhOeggeWVhuWTgeWPquiDvemAieaLqeS4gOS4quWNleS9jei/m+ihjOS4i+WNlQogICAgICAgICAgbGV0IGluZGV4RiA9IC0xOwoKICAgICAgICAgIGlmIChpdGVtLmlzRXEgPT09IDUpIHsKICAgICAgICAgICAgaW5kZXhGID0gc2FsZU9yZGVyR29vZHMuZmluZEluZGV4KGl0ZW1GID0+IGl0ZW1GLmdvb2RzSWQgPT09IGl0ZW0uZ29vZHNJZCAmJiBpdGVtRi51bml0SWQgIT09IGl0ZW0udW5pdElkKTsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gaW5kZXhGID09PSAtMTsKICAgICAgICB9KTsKICAgICAgICBjb25zdCBnb29kc0FyciA9IHNhbGVPcmRlckdvb2RzLmZpbHRlcihpdGVtID0+IGl0ZW0uc2t1SWQpOwogICAgICAgIGNvbnN0IG5vU2t1QXJyID0gc2FsZU9yZGVyR29vZHMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uc2t1SWQpOwogICAgICAgIHRoaXMuc2FsZU9yZGVyR29vZHMgPSBbLi4uZ29vZHNBcnIsIC4uLmdvb2RzRGF0YV0uY29uY2F0KG5vU2t1QXJyKTsKICAgICAgfQogICAgfSwKCiAgICAvLyDpgInmi6notaDlk4HllYblk4EKICAgIGFzeW5jIGdpdmVhd2F5U2VsR29vZHModmFsKSB7CiAgICAgIGlmICh2YWwubGVuZ3RoKSB7CiAgICAgICAgY29uc3QgZ29vZHNEYXRhID0gdmFsLm1hcChpdGVtID0+IHsKICAgICAgICAgIGxldCBzYWxlUHJpY2UgPSAwOwoKICAgICAgICAgIGlmIChpdGVtLmVuYWJsZWRMYWRkZXIpIHsKICAgICAgICAgICAgc2FsZVByaWNlID0gaXRlbS5sYWRkZXJQcmljZVswXS5wcmljZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNhbGVQcmljZSA9IGl0ZW0uc2FsZVByaWNlOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGdvb2RzTmFtZTogaXRlbS50aXRsZSwKICAgICAgICAgICAgc2t1SWQ6IGl0ZW0uc2t1SWQsCiAgICAgICAgICAgIGNvZGU6IGl0ZW0uY29kZSwKICAgICAgICAgICAgZ29vZHNJZDogaXRlbS5pZCwKICAgICAgICAgICAgYnV5TnVtOiAxLAogICAgICAgICAgICBvdGhlck51bTogIiIsCiAgICAgICAgICAgIHNob3BJZDogaXRlbS5zaG9wSWQsCiAgICAgICAgICAgIGJhc2ljR29vZHNJZDogaXRlbS5iYXNpY0dvb2RzSWQsCiAgICAgICAgICAgIHVuaXROYW1lOiBpdGVtLnVuaXROYW1lLAogICAgICAgICAgICBzcGVjR3JvdXA6IGl0ZW0uc3BlY0dyb3VwLAogICAgICAgICAgICBpbnZlbnRvcnk6IGl0ZW0uaW52ZW50b3J5LAogICAgICAgICAgICBzYWxlUHJpY2U6IHNhbGVQcmljZSwKICAgICAgICAgICAgc3ViTW9uZXk6IGl0ZW0uc2FsZVByaWNlLAogICAgICAgICAgICBzaG9wTmFtZTogaXRlbS5zaG9wTmFtZSwKICAgICAgICAgICAgZ29vZHNJbWFnZXM6IGl0ZW0uaW1hZ2VzWzBdLAogICAgICAgICAgICBicmFuZElkOiBpdGVtLmJyYW5kSWQsCiAgICAgICAgICAgIGJyYW5kTmFtZTogIiIsCiAgICAgICAgICAgIGNhdGVnb3J5UGF0aDogaXRlbS5jYXRlZ29yeVBhdGgsCiAgICAgICAgICAgIGNhdGVnb3J5TmFtZTogaXRlbS5jYXRlZ29yeU5hbWUsCiAgICAgICAgICAgIGNvbnZlcnNpb246IGl0ZW0uY29udmVyc2lvbiwKICAgICAgICAgICAgYmFyQ29kZTogIiIsCiAgICAgICAgICAgIHN0b3JhZ2VDb2RlOiAiIiwKICAgICAgICAgICAgd2FyZWhvdXNlSWQ6IGl0ZW0ud2FyZWhvdXNlSWQsCiAgICAgICAgICAgIG9yaWdpblByaWNlOiBpdGVtLm9yaWdpblByaWNlLAogICAgICAgICAgICBzcGVjVHlwZTogaXRlbS5zcGVjVHlwZSwKICAgICAgICAgICAgZW5hYmxlZExhZGRlcjogaXRlbS5lbmFibGVkTGFkZGVyLAogICAgICAgICAgICBsYWRkZXJQcmljZTogaXRlbS5sYWRkZXJQcmljZSwKICAgICAgICAgICAgc3VwcGxpZXJJZDogaXRlbS5zdXBwbGllcklkLAogICAgICAgICAgICBzdXBwbGllck5hbWU6IGl0ZW0uc3VwcGxpZXJOYW1lLAogICAgICAgICAgICBpc0VxOiBpdGVtLmlzRXEsCiAgICAgICAgICAgIGlzRGlzdHJpYnV0aW9uOiBpdGVtLmlzRGlzdHJpYnV0aW9uLAogICAgICAgICAgICBtZXJjaGFudElkOiBpdGVtLm1lcmNoYW50SWQKICAgICAgICAgIH07CiAgICAgICAgfSk7IC8vIHRoaXMuc2FsZU9yZGVyR29vZHMgPSB0aGlzLiRfY29tbW9uLnVuaXF1ZSgKICAgICAgICAvLyAgIGdvb2RzRGF0YS5jb25jYXQodGhpcy5zYWxlT3JkZXJHb29kcyksCiAgICAgICAgLy8gICBbImdvb2RzSWQiLCAic2t1SWQiXQogICAgICAgIC8vICk7CgogICAgICAgIGNvbnN0IGdvb2RzQXJyID0gdGhpcy5naXZlYXdheUdvb2RzLmZpbHRlcihpdGVtID0+IGl0ZW0uc2t1SWQpOwogICAgICAgIGNvbnN0IG5vU2t1QXJyID0gdGhpcy5naXZlYXdheUdvb2RzLmZpbHRlcihpdGVtID0+ICFpdGVtLnNrdUlkKTsgLy8gdGhpcy5zYWxlT3JkZXJHb29kcyA9IHRoaXMuJF9jb21tb24KICAgICAgICAvLyAgIC51bmlxdWUoWy4uLmdvb2RzQXJyLCAuLi5nb29kc0RhdGFdLCBbImdvb2RzSWQiLCAic2t1SWQiXSkKICAgICAgICAvLyAgIC5jb25jYXQobm9Ta3VBcnIpOwoKICAgICAgICB0aGlzLmdpdmVhd2F5R29vZHMgPSBbLi4uZ29vZHNBcnIsIC4uLmdvb2RzRGF0YV0uY29uY2F0KG5vU2t1QXJyKTsKICAgICAgfQogICAgfSwKCiAgICAvLyDkv67mlLnotK3nianovabmlbDph48KICAgIGFzeW5jIHVwZGF0ZUJ1eU51bShpbmRleCkgewogICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRfY29tbW9uLmRlZXBDbG9uZSh0aGlzLnNhbGVPcmRlckdvb2RzKTsKICAgICAgbGV0IHNhbGVQcmljZSA9IHRhcmdldFtpbmRleF0uc2FsZVByaWNlOwogICAgICBsZXQgaW52ZW50b3J5ID0gdGFyZ2V0W2luZGV4XS5pbnZlbnRvcnk7CiAgICAgIGxldCBpc0Rpc3RyaWJ1dGlvbiA9IHRhcmdldFtpbmRleF0uaXNEaXN0cmlidXRpb247CgogICAgICBpZiAoaXNEaXN0cmlidXRpb24gPT09IDQpIHsKICAgICAgICBpZiAodGFyZ2V0W2luZGV4XS5idXlOdW0gPiBpbnZlbnRvcnkpIHsKICAgICAgICAgIHRhcmdldFtpbmRleF0uYnV5TnVtID0gdGFyZ2V0W2luZGV4XS5pbnZlbnRvcnk7CiAgICAgICAgfQogICAgICB9IC8vIOagueaNrumYtuair+S7t+WIpOaWremUgOWUruS7twoKCiAgICAgIGlmICh0YXJnZXRbaW5kZXhdLmVuYWJsZWRMYWRkZXIpIHsKICAgICAgICBsZXQgcHJpY2VPYmogPSB0YXJnZXRbaW5kZXhdLmxhZGRlclByaWNlLmZpbmQoaXRlbSA9PiB0YXJnZXRbaW5kZXhdLmJ1eU51bSA+PSBpdGVtLmZyb20gJiYgdGFyZ2V0W2luZGV4XS5idXlOdW0gPD0gaXRlbS50byk7CiAgICAgICAgc2FsZVByaWNlID0gcHJpY2VPYmogPyBwcmljZU9iai5wcmljZSA6IHRhcmdldFtpbmRleF0uc2FsZVByaWNlOwogICAgICB9CgogICAgICB0YXJnZXRbaW5kZXhdLnN1Yk1vbmV5ID0gdGhpcy4kTlAudGltZXMoc2FsZVByaWNlLCB0YXJnZXRbaW5kZXhdLmJ1eU51bSk7CiAgICAgIHRhcmdldFtpbmRleF0uc2FsZVByaWNlID0gc2FsZVByaWNlOwogICAgICBjb25zb2xlLmxvZyh0YXJnZXQpOwogICAgICB0aGlzLnNhbGVPcmRlckdvb2RzID0gdGFyZ2V0OwogICAgfSwKCiAgICAvLyDkv67mlLnotK3nianovabmlbDph48KICAgIGFzeW5jIGdpdmVhd2F5VXBkYXRlQnV5TnVtKGluZGV4KSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJF9jb21tb24uZGVlcENsb25lKHRoaXMuZ2l2ZWF3YXlHb29kcyk7CiAgICAgIGxldCBzYWxlUHJpY2UgPSB0YXJnZXRbaW5kZXhdLnNhbGVQcmljZTsKICAgICAgbGV0IGJ1eU51bSA9IHRhcmdldFtpbmRleF0uYnV5TnVtOwogICAgICBsZXQgaW52ZW50b3J5ID0gdGFyZ2V0W2luZGV4XS5pbnZlbnRvcnk7CiAgICAgIGxldCBpc0Rpc3RyaWJ1dGlvbiA9IHRhcmdldFtpbmRleF0uaXNEaXN0cmlidXRpb247CgogICAgICBpZiAoaXNEaXN0cmlidXRpb24gPT09IDQpIHsKICAgICAgICBpZiAoYnV5TnVtID4gaW52ZW50b3J5KSB7CiAgICAgICAgICB0YXJnZXRbaW5kZXhdLmJ1eU51bSA9IHRhcmdldFtpbmRleF0uaW52ZW50b3J5OwogICAgICAgIH0KICAgICAgfSAvLyDmoLnmja7pmLbmoq/ku7fliKTmlq3plIDllK7ku7cKCgogICAgICBpZiAodGFyZ2V0W2luZGV4XS5lbmFibGVkTGFkZGVyKSB7CiAgICAgICAgbGV0IHByaWNlT2JqID0gdGFyZ2V0W2luZGV4XS5sYWRkZXJQcmljZS5maW5kKGl0ZW0gPT4gYnV5TnVtID49IGl0ZW0uZnJvbSAmJiBidXlOdW0gPD0gaXRlbS50byk7CiAgICAgICAgc2FsZVByaWNlID0gcHJpY2VPYmogPyBwcmljZU9iai5wcmljZSA6IHRhcmdldFtpbmRleF0uc2FsZVByaWNlOwogICAgICB9CgogICAgICB0YXJnZXRbaW5kZXhdLnN1Yk1vbmV5ID0gdGhpcy4kTlAudGltZXMoc2FsZVByaWNlLCBidXlOdW0pOwogICAgICB0YXJnZXRbaW5kZXhdLnNhbGVQcmljZSA9IHNhbGVQcmljZTsKICAgICAgdGhpcy5naXZlYXdheUdvb2RzID0gdGFyZ2V0OwogICAgfSwKCiAgICAvLyDpgInmi6nlrqLmiLcKICAgIGN1c3RvbWVyU2VsKHZhbCwgbGlzdCkgewogICAgICBjb25zdCByb3cgPSBsaXN0WzBdOwogICAgICB0aGlzLmFkZF9mb3JtLmN1c3RvbWVySWQgPSByb3cuaWQ7CiAgICAgIHRoaXMuYWNjb3VudF9zaG9wSWQgPSByb3cuc2hvcElkOwogICAgICB0aGlzLnVzZXJDZW50ZXJJZCA9IHJvdy51c2VyQ2VudGVySWQ7CiAgICAgIHRoaXMuYWRkX2Zvcm0uYWRkcmVzc0lkID0gIiI7CiAgICAgIHRoaXMuYWRkcmVzc19uYW1lID0gIiI7CiAgICAgIHRoaXMuc2FsZU9yZGVyR29vZHMgPSBbdGhpcy4kX2NvbW1vbi5kZWVwQ2xvbmUoZ29vZHNJdGVtKV07CgogICAgICBpZiAodGhpcy5hZGRfZm9ybS5kZWxpdmVyeVR5cGUgIT09IDIpIHsKICAgICAgICB0aGlzLmdldEFsbFNoaXBwaW5nQWRkcmVzcyh0aGlzLmFkZF9mb3JtLmN1c3RvbWVySWQpOwogICAgICB9CiAgICB9LAoKICAgIC8vIOmAieaLqee7k+eul+i0puaItwogICAgYWNjb3VudHNlbChyb3cpIHsKICAgICAgdGhpcy5hY2NvdW50TmFtZSA9IHJvd1swXS5uYW1lOwogICAgICB0aGlzLmFkZF9mb3JtLmFjY291bnRMaXN0ID0gW3sKICAgICAgICBhY2NvdW50SWQ6IHJvd1swXS5pZCwKICAgICAgICBhY2NvdW50TnVtYmVyOiByb3dbMF0uYWNjb3VudE51bWJlciwKICAgICAgICBhY2NvdW50TmFtZTogcm93WzBdLm5hbWUsCiAgICAgICAgbW9uZXk6IHRoaXMuYWRkX2Zvcm0ucmVjZWl2ZWRNb25leSwKICAgICAgICBkaXNjb3VudE1vbmV5OiAwLAogICAgICAgIGZpbmFsTW9uZXk6IHRoaXMuYWRkX2Zvcm0ucmVjZWl2ZWRNb25leSwKICAgICAgICBwYXlXYXk6IHRoaXMucGF5V2F5LAogICAgICAgIHJlbWFyazogcm93WzBdLnJlbWFyawogICAgICB9XTsKICAgIH0sCgogICAgLy8g6I635Y+W5a6i5oi35pS26LSn5Zyw5Z2A5YiX6KGoCiAgICBhc3luYyBnZXRBbGxTaGlwcGluZ0FkZHJlc3MoaWQpIHsKICAgICAgY29uc3QgewogICAgICAgIGRhdGEKICAgICAgfSA9IGF3YWl0IGdldEFsbFNoaXBwaW5nQWRkcmVzcyhpZCk7CgogICAgICBpZiAoZGF0YS5sZW5ndGgpIHsKICAgICAgICB0aGlzLmFkZF9mb3JtLmFkZHJlc3NJZCA9IGRhdGFbMF0uaWQ7CiAgICAgICAgdGhpcy5hZGRyZXNzX2xpc3QgPSBkYXRhLm1hcChpdGVtID0+IHsKICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0sCiAgICAgICAgICAgIGFkZHJlc3NOYW1lOiBpdGVtLm5hbWUgKyAiICIgKyBpdGVtLm1vYmlsZSArICIgIiArIGl0ZW0uYXJlYS5wcm92aW5jZU5hbWUgKyAiLSIgKyBpdGVtLmFyZWEuY2l0eU5hbWUgKyAiLSIgKyBpdGVtLmFyZWEuZGlzdHJpY3ROYW1lICsgIi0iICsgaXRlbS5hZGRyZXNzCiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICAgIHRoaXMuYWRkcmVzc19uYW1lID0gdGhpcy5hZGRyZXNzX2xpc3RbMF0uYWRkcmVzc05hbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5hZGRyZXNzX2xpc3QgPSBbXTsKICAgICAgfQogICAgfSwKCiAgICAvLyDnp7vlh7rotK3nianovaYKICAgIGFzeW5jIGRlbGV0ZVJvd0dvb2RzKGluZGV4KSB7CiAgICAgIGlmICh0aGlzLnNhbGVPcmRlckdvb2RzLmxlbmd0aCA+IDEpIHsKICAgICAgICB0aGlzLnNhbGVPcmRlckdvb2RzLnNwbGljZShpbmRleCwgMSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLoh7PlsJHkv53nlZnkuIDmnaHllYblk4EiKTsKICAgICAgfQogICAgfSwKCiAgICAvLyDnp7vlh7rotaDlk4HotK3nianovaYKICAgIGFzeW5jIGdpdmVhd2F5RGVsZXRlUm93R29vZHMoaW5kZXgpIHsKICAgICAgdGhpcy5naXZlYXdheUdvb2RzLnNwbGljZShpbmRleCwgMSk7CiAgICB9LAoKICAgIC8vIOiOt+WPluiHquaPkOeCuQogICAgYXN5bmMgZ2V0QWxsU2VsZkV4cHJlc3NSdWxlKCkgewogICAgICBjb25zdCB7CiAgICAgICAgZGF0YQogICAgICB9ID0gYXdhaXQgZ2V0QWxsU2VsZkV4cHJlc3NSdWxlKCk7CiAgICAgIHRoaXMuc2VsZl9leHByZXNzX2xpc3QgPSBkYXRhLm1hcChpdGVtID0+IHsKICAgICAgICByZXR1cm4geyAuLi5pdGVtLAogICAgICAgICAgYWRkcmVzc05hbWU6IGl0ZW0uc2V0RGF0YS5uYW1lICsgIiAiICsgaXRlbS5zZXREYXRhLm1vYmlsZSArICIgIiArIGl0ZW0uc2V0RGF0YS5wcm92aW5jZU5hbWUgKyAiLSIgKyBpdGVtLnNldERhdGEuY2l0eU5hbWUgKyAiLSIgKyBpdGVtLnNldERhdGEuZGlzdHJpY3ROYW1lICsgIi0iICsgaXRlbS5zZXREYXRhLmFkZHJlc3MKICAgICAgICB9OwogICAgICB9KTsKCiAgICAgIGlmIChkYXRhLmxlbmd0aCkgewogICAgICAgIHRoaXMuYWRkX2Zvcm0uc2VsZlJ1bGVJZCA9IGRhdGFbMF0uaWQ7CiAgICAgICAgdGhpcy5hZGRfZm9ybS5zZWxmUnVsZURhdGEgPSBkYXRhWzBdLnNldERhdGE7CiAgICAgIH0KICAgIH0sCgogICAgLy8g6YWN6YCB5pa55byPCiAgICBkZWxpdmVyeVR5cGVDaGFuZ2UodmFsKSB7CiAgICAgIHRoaXMucGF5VHlwZV9saXN0LmZvckVhY2goaXRlbSA9PiB7CiAgICAgICAgaWYgKHZhbCA9PT0gaXRlbS52YWx1ZSkgewogICAgICAgICAgdGhpcy5vcmRlcl9kZXRhaWwucGF5VHlwZU1zZyA9IGl0ZW0ubGFiZWw7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIGlmICh2YWwgPT09IDEpIHsKICAgICAgICAvLyBjb25zdCB0YXJnZXQgPSB0aGlzLmFkZHJlc3NfbGlzdFswXTsKICAgICAgICAvLyB0aGlzLmFkZF9mb3JtLmFkZHJlc3NJZCA9IHRhcmdldC5pZDsKICAgICAgICB0aGlzLmdldEFsbFNoaXBwaW5nQWRkcmVzcyh0aGlzLmFkZF9mb3JtLmN1c3RvbWVySWQpOwogICAgICB9IGVsc2UgaWYgKHZhbCA9PT0gMikgewogICAgICAgIGlmICh0aGlzLnNlbGZfZXhwcmVzc19saXN0Lmxlbmd0aCkgewogICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5zZWxmX2V4cHJlc3NfbGlzdFswXTsKICAgICAgICAgIHRoaXMuYWRkX2Zvcm0uc2VsZlJ1bGVJZCA9IHRhcmdldC5pZDsKICAgICAgICAgIHRoaXMuYWRkX2Zvcm0uc2VsZlJ1bGVEYXRhID0gdGFyZ2V0LnNldERhdGE7CiAgICAgICAgfQogICAgICB9CiAgICB9LAoKICAgIGFkZHJlc3NDaGFuZ2UoY29tbWFuZCkgewogICAgICB0aGlzLmFkZF9mb3JtLmFkZHJlc3NJZCA9IGNvbW1hbmQ7CiAgICAgIHRoaXMuYWRkcmVzc19uYW1lID0gdGhpcy5hZGRyZXNzX2xpc3QuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGNvbW1hbmQpLmFkZHJlc3NOYW1lOwogICAgfSwKCiAgICBjbG9zZURpYWxvZyhmb3JtTmFtZSkgewogICAgICB0aGlzLnJlZ2lvbk5hbWUgPSBbXTsKICAgICAgdGhpcy4kcmVmc1tmb3JtTmFtZV0ucmVzZXRGaWVsZHMoKTsKICAgIH0sCgogICAgLy8g6YCJ5oup6Ieq5o+Q54K5CiAgICBzZWxmUnVsZUlkQ2hhbmdlKHZhbCkgewogICAgICBjb25zdCBkYXRhID0gdGhpcy5zZWxmX2V4cHJlc3NfbGlzdC5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gdmFsKTsKICAgICAgdGhpcy5hZGRfZm9ybS5zZWxmUnVsZURhdGEgPSBkYXRhID8gZGF0YS5zZXREYXRhIDoge307CiAgICB9CgogIH0KfTs="},null]}