{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\mindMap\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\mindMap\\index.vue","mtime":1739300167374},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\babel.config.js","mtime":1733906004399},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9kYXRhU2hhcmUtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiOwppbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9kYXRhU2hhcmUtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qcyI7CmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvZGF0YVNoYXJlLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIjsKaW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvZGF0YVNoYXJlLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3JlZ2VuZXJhdG9yUnVudGltZS5qcyI7CmltcG9ydCBfYXN5bmNUb0dlbmVyYXRvciBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9kYXRhU2hhcmUtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyI7CnZhciBfbWV0aG9kczsKdmFyIF9leGNsdWRlZCA9IFsiaWQiLCAibmFtZSIsICJwYXJlbnRJZCIsICJsZXZlbCIsICJyZWxhdGlvbkNvbnRlbnQiLCAiY29udGVudCIsICJiYWNrZ3JvdW5kIiwgImZvbnRDb2xvciIsICJmb250U2l6ZSIsICJmb250U3R5bGUiLCAiZm9udFdldGlnaHQiXTsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnZhbHVlcy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7Ci8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCgppbXBvcnQgZG9tdG9pbWFnZSBmcm9tICdkb20tdG8taW1hZ2UnOwppbXBvcnQgdXRpbHMgZnJvbSAnQC91dGlscy5qcyc7CmltcG9ydCAnanNtaW5kL3N0eWxlL2pzbWluZC5jc3MnOwppbXBvcnQgJ2pzbWluZC9lczYvanNtaW5kLmRyYWdnYWJsZS1ub2RlLmpzJzsKaW1wb3J0ICdqc21pbmQvZXM2L2pzbWluZC5zY3JlZW5zaG90LmpzJzsKaW1wb3J0IGpzTWluZCBmcm9tICdqc21pbmQnOwppbXBvcnQgQVBJIGZyb20gJ0AvYXBpL2J1c2luZXNzL2FyaXRobWV0aWNUYXNrLmpzJzsKaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJ2NvZGVtaXJyb3InOwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ21pbmRNYXAnLAogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICAvLyDku7vliqHkv6Hmga8KICAgICAgdGFza0RhdGE6IHsKICAgICAgICBpZDogJycsCiAgICAgICAgbmFtZTogJycsCiAgICAgICAgY29kZTogJycKICAgICAgfSwKICAgICAgbmV3VmVyc2lvbjogJycsCiAgICAgIC8vIOmFjee9ruS/oeaBrwogICAgICBzaG93U2lkZUVkaXRvcjogZmFsc2UsCiAgICAgIHBhZ2luYXRpb246IHsKICAgICAgICAvLyDliIbpobXliJ3lp4vljJbmlbDmja4KICAgICAgICBwYWdlOiAxLAogICAgICAgIHRvdGFsOiAwLAogICAgICAgIHBhZ2VTaXplOiAyMAogICAgICB9LAogICAgICBzZWFyY2hUYXJnZXQ6IHsKICAgICAgICB0eXBlOiAxLAogICAgICAgIG5hbWU6ICcnCiAgICAgIH0sCiAgICAgIGFkZFRhcmdldDogewogICAgICAgIHRvcGljOiAnJywKICAgICAgICBjb2RlOiAnJywKICAgICAgICB0eXBlOiAxLAogICAgICAgIGRlc2M6ICcnLAogICAgICAgIHNvdXJjZTogMQogICAgICB9LAogICAgICBhY3RpdmVOYW1lOiAnZmlyc3QnLAogICAgICB0YWJsZUxpc3Q6IFt7CiAgICAgICAgaWQ6ICcxLjInLAogICAgICAgIG5hbWU6ICd0YWJsZTAxJywKICAgICAgICBuYW1lQ246ICfooajkuK3mloflkI0wMScKICAgICAgfSwgewogICAgICAgIGlkOiAnMS4zJywKICAgICAgICBuYW1lOiAndGFibGUwMicsCiAgICAgICAgbmFtZUNuOiAn6KGo5Lit5paH5ZCNMDInCiAgICAgIH0sIHsKICAgICAgICBpZDogJzEuNCcsCiAgICAgICAgbmFtZTogJ3RhYmxlMDMnLAogICAgICAgIG5hbWVDbjogJ+ihqOS4reaWh+WQjTAzJwogICAgICB9XSwKICAgICAgZmllbGRMaXN0OiBbewogICAgICAgIGlkOiAnMS4yJywKICAgICAgICBuYW1lOiAnbmFtZScsCiAgICAgICAgbmFtZUNuOiAn5aeT5ZCNJywKICAgICAgICB0eXBlOiAn5pmu6YCa5a2X5q61JwogICAgICB9LCB7CiAgICAgICAgaWQ6ICcxLjMnLAogICAgICAgIG5hbWU6ICdzZXgnLAogICAgICAgIG5hbWVDbjogJ+aAp+WIqycsCiAgICAgICAgdHlwZTogJ+aemuS4vuWtl+WFuCcsCiAgICAgICAgZGljdE5hbWU6ICdzZXhEaWN0JywKICAgICAgICBkaWN0OiBbewogICAgICAgICAgbmFtZTogJ+eUtycsCiAgICAgICAgICBpZDogJzEnCiAgICAgICAgfSwgewogICAgICAgICAgbmFtZTogJ+WlsycsCiAgICAgICAgICBpZDogJzInCiAgICAgICAgfV0KICAgICAgfSwgewogICAgICAgIGlkOiAnMS40JywKICAgICAgICBuYW1lOiAndHlwZScsCiAgICAgICAgbmFtZUNuOiAn57G75Z6LJywKICAgICAgICB0eXBlOiAn5aSa57u05a2X5YW4JywKICAgICAgICBkaWN0TmFtZTogJ3Nwb3J0c0RpY3QnLAogICAgICAgIGRpY3Q6IFt7CiAgICAgICAgICBuYW1lOiAn6L+Q5YqoJywKICAgICAgICAgIGlkOiAnMScsCiAgICAgICAgICBjaGlsZHJlbjogW3sKICAgICAgICAgICAgbmFtZTogJ+awtOS4iui/kOWKqOawtOS4iui/kOWKqOawtOS4iui/kOWKqOawtOS4iui/kOWKqOawtOS4iui/kOWKqOawtOS4iui/kOWKqOawtOS4iui/kOWKqOawtOS4iui/kOWKqOawtOS4iui/kOWKqOawtOS4iui/kOWKqOawtOS4iui/kOWKqOawtOS4iui/kOWKqCcsCiAgICAgICAgICAgIGlkOiAnMTEnLAogICAgICAgICAgICBjaGlsZHJlbjogW3sKICAgICAgICAgICAgICBuYW1lOiAn6LWb6ImHJywKICAgICAgICAgICAgICBpZDogJzExMScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgIG5hbWU6ICfnv7vmnb8nLAogICAgICAgICAgICAgIGlkOiAnMTEyJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgbmFtZTogJ+earuWIkuiJhycsCiAgICAgICAgICAgICAgaWQ6ICcxMTMnCiAgICAgICAgICAgIH1dCiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIG5hbWU6ICflhqzlraPov5DliqgnLAogICAgICAgICAgICBpZDogJzEyJywKICAgICAgICAgICAgY2hpbGRyZW46IFt7CiAgICAgICAgICAgICAgbmFtZTogJ+WGsOWjticsCiAgICAgICAgICAgICAgaWQ6ICcxMjEnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICBuYW1lOiAn6Iqx5qC35ruR5YawJywKICAgICAgICAgICAgICBpZDogJzEyMicKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgIG5hbWU6ICfnn63pgZPpgJ/mu5EnLAogICAgICAgICAgICAgIGlkOiAnMTIzJwogICAgICAgICAgICB9XQogICAgICAgICAgfSwgewogICAgICAgICAgICBuYW1lOiAn55CD57G76L+Q5YqoJywKICAgICAgICAgICAgaWQ6ICcxMycsCiAgICAgICAgICAgIGNoaWxkcmVuOiBbewogICAgICAgICAgICAgIG5hbWU6ICfnr67nkIMnLAogICAgICAgICAgICAgIGlkOiAnMTMxJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgbmFtZTogJ+i2s+eQgycsCiAgICAgICAgICAgICAgaWQ6ICcxMzInCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICBuYW1lOiAn5puy5qON55CDJywKICAgICAgICAgICAgICBpZDogJzEzMycKICAgICAgICAgICAgfV0KICAgICAgICAgIH1dCiAgICAgICAgfV0KICAgICAgfV0sCiAgICAgIGRlZmF1bHRQcm9wczogewogICAgICAgIHZhbHVlOiAnaWQnLAogICAgICAgIGxhYmVsOiAnbmFtZScKICAgICAgfSwKICAgICAgdmVyc2lvbkRhdGE6IFtdLAogICAgICBtYXBUeXBlOiAnbXVsdGlUb1NpbmdsZScsCiAgICAgIC8vbXVsdGlUb1NpbmdsZSBvciBzaW5nbGVUb011bHRpCiAgICAgIHRhcmdldERhdGE6IFtdLAogICAgICAvLyDohJHlm77kv6Hmga8KICAgICAgLy8g6ISR5Zu+5pWw5o2uCiAgICAgIGptOiBudWxsLAogICAgICBlZGl0b3I6IG51bGwsCiAgICAgIG1pbmREYXRhOiB7CiAgICAgICAgbWV0YTogewogICAgICAgICAgbmFtZTogJycsCiAgICAgICAgICBhdXRob3I6ICdhcnRmZXNzJywKICAgICAgICAgIHZlcnNpb246ICcwLjAuMScKICAgICAgICB9LAogICAgICAgIGZvcm1hdDogJ25vZGVfYXJyYXknLAogICAgICAgIGRhdGE6IFt7CiAgICAgICAgICBpc3Jvb3Q6IHRydWUsCiAgICAgICAgICBpZDogdXRpbHMudXVpZCgpLAogICAgICAgICAgdG9waWM6ICcnLAogICAgICAgICAgbGV2ZWw6IDAsCiAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICcjNDA5ZWZmJywKICAgICAgICAgICdmb250LXNpemUnOiAyNCAvLyDlrZfkvZPlpKflsI8KICAgICAgICB9XQogICAgICB9LAogICAgICAvLyDohJHlm77phY3nva4KICAgICAgb3B0aW9uczogewogICAgICAgIGNvbnRhaW5lcjogJ2pzbWluZF9jb250YWluZXInLAogICAgICAgIC8vIFvlv4XpgIldIOWuueWZqOeahElECiAgICAgICAgZWRpdGFibGU6IHRydWUsCiAgICAgICAgLy8gW+WPr+mAiV0g5piv5ZCm5ZCv55So57yW6L6RCiAgICAgICAgdGhlbWU6ICdwcmltYXJ5JywKICAgICAgICAvLyBb5Y+v6YCJXSDkuLvpopgKICAgICAgICBzdXBwb3J0X2h0bWw6IHRydWUsCiAgICAgICAgbG9nX2xldmVsOiAnZGVidWcnLAogICAgICAgIC8vIOiuvue9ruaXpeW/l+e6p+WIq+S4uiBkZWJ1ZwogICAgICAgIHZpZXc6IHsKICAgICAgICAgIGVuZ2luZTogJ2NhbnZhcycsCiAgICAgICAgICAvLyDmgJ3nu7Tlr7zlm77lkIToioLngrnkuYvpl7Tnur/mnaHnmoTnu5jliLblvJXmk44KICAgICAgICAgIGVuYWJsZV9kZXZpY2VfcGl4ZWxfcmF0aW86IHRydWUsCiAgICAgICAgICAvLyDmjInorr7lpIflg4/ntKDmr5Tkvovnu5jliLbpq5jmuIXmgJ3nu7Tlr7zlm74KICAgICAgICAgIGhtYXJnaW46IDEwMCwKICAgICAgICAgIC8vIOaAnee7tOWvvOWbvui3neWuueWZqOWkluahhueahOacgOWwj+awtOW5s+i3neemuwogICAgICAgICAgdm1hcmdpbjogNTAsCiAgICAgICAgICAvLyDmgJ3nu7Tlr7zlm77ot53lrrnlmajlpJbmoYbnmoTmnIDlsI/lnoLnm7Tot53nprsKICAgICAgICAgIGxpbmVfd2lkdGg6IDIsCiAgICAgICAgICAvLyDmgJ3nu7Tlr7zlm77nur/mnaHnmoTnspfnu4YKICAgICAgICAgIGxpbmVfY29sb3I6ICcjNjY2JywKICAgICAgICAgIC8vIOaAnee7tOWvvOWbvue6v+adoeeahOminOiJsgogICAgICAgICAgZHJhZ2dhYmxlOiB0cnVlLAogICAgICAgICAgLy8g5piv5ZCm5YWB6K645ouW5Yqo55S75biDCiAgICAgICAgICBoaWRlX3Njcm9sbGJhcnNfd2hlbl9kcmFnZ2FibGU6IHRydWUsCiAgICAgICAgICBub2RlX292ZXJmbG93OiAnaGlkZGVuJywKICAgICAgICAgIHpvb206IHsKICAgICAgICAgICAgLy8g57yp5pS+6YWN572uCiAgICAgICAgICAgIG1pbjogMC4xLAogICAgICAgICAgICAvLyDmnIDlsI/nvKnmlL7mr5TkvosKICAgICAgICAgICAgbWF4OiAyLjEsCiAgICAgICAgICAgIC8vIOacgOWkp+e8qeaUvuavlOS+iwogICAgICAgICAgICBzdGVwOiAwLjEgLy8g57yp5pS+5q+U5L6L5q2l6ZW/CiAgICAgICAgICB9LAogICAgICAgICAgZXhwYW5kZXJfc3R5bGU6ICdudW1iZXInLAogICAgICAgICAgbGluZV9zdHlsZTogJ2N1cnZlZCcsCiAgICAgICAgICBjdXN0b21fbGluZV9yZW5kZXI6IGZ1bmN0aW9uIGN1c3RvbV9saW5lX3JlbmRlcihfcmVmKSB7CiAgICAgICAgICAgIHZhciBjdHggPSBfcmVmLmN0eCwKICAgICAgICAgICAgICBzdGFydF9wb2ludCA9IF9yZWYuc3RhcnRfcG9pbnQsCiAgICAgICAgICAgICAgZW5kX3BvaW50ID0gX3JlZi5lbmRfcG9pbnQ7CiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgY3R4Lm1vdmVUbyhzdGFydF9wb2ludC54LCBzdGFydF9wb2ludC55KTsKICAgICAgICAgICAgLy8gY3R4LmxpbmVUbyh0b1gsIHRvWSk7CiAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKHN0YXJ0X3BvaW50LnggKyAoZW5kX3BvaW50LnggLSBzdGFydF9wb2ludC54KSAqIDIgLyAzLCBzdGFydF9wb2ludC55LCBzdGFydF9wb2ludC54LCBlbmRfcG9pbnQueSwgZW5kX3BvaW50LngsIGVuZF9wb2ludC55KTsKICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gJyM2NjYnOwogICAgICAgICAgICBjdHgubGluZVdpZHRoID0gMjsKICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgfSwKICAgICAgICAgIGN1c3RvbV9ub2RlX3JlbmRlcjogZnVuY3Rpb24gY3VzdG9tX25vZGVfcmVuZGVyKGptLCBlbGVtZW50LCBub2RlKSB7CiAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gIiIuY29uY2F0KG5vZGUudG9waWMsICI8ZGl2IGNsYXNzPSd0aXAtaWNvbiIpLmNvbmNhdChub2RlLmRhdGEuY29udGVudCA/ICcgc2hvd1RpcCcgOiAnJywgIicgZGF0YS1jb250ZW50PSciKS5jb25jYXQobm9kZS5kYXRhLmNvbnRlbnQgfHwgJycsICInPjxpIGNsYXNzPVwiZWwtaWNvbi1zLWZsYWdcIj48L2k+PC9kaXY+Iik7CiAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyDooajnpLrlt7Lnu4/muLLmn5PmraToioLngrkKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxheW91dDogewogICAgICAgICAgaHNwYWNlOiAxMDAsCiAgICAgICAgICAvLyDoioLngrnkuYvpl7TnmoTmsLTlubPpl7Tot50KICAgICAgICAgIHZzcGFjZTogMjAgLy8g6IqC54K55LmL6Ze055qE5Z6C55u06Ze06LedCiAgICAgICAgfSwKICAgICAgICBzaG9ydGN1dDogewogICAgICAgICAgLy8g56aB55So5b+r5o236ZSuCiAgICAgICAgICBlbmFibGU6IGZhbHNlCiAgICAgICAgfQogICAgICB9LAogICAgICBwcmVkZWZpbmVDb2xvcnM6IFsnIzFlOTBmZicsICcjNjdjMjNhJywgJyNlNmEyM2MnLCAnI2Y1NmM2YycsICcjZmY0NTAwJywgJyNmZjhjMDAnLCAnI2ZmZDcwMCcsICcjOTBlZTkwJywgJyMwMGNlZDEnLCAnIzQwOWVmZicsICcjYzcxNTg1J10sCiAgICAgIC8vIOmihOWumuS5ieminOiJsgoKICAgICAgc3RydWN0dXJlOiB7CiAgICAgICAgYWN0aXZlOiAncmlnaHQnCiAgICAgIH0sCiAgICAgIGNyZWF0ZVR5cGU6ICcnLAogICAgICAvLyDmt7vliqDlubPnuqdvcuWtkOe6pwogICAgICBjdXJyZW50Tm9kZTogbnVsbCwKICAgICAgLy8g6YCJ5Lit6IqC54K55L+h5oGvCiAgICAgIHNob3dNZW51OiBmYWxzZSwKICAgICAgLy8g5piv5ZCm5pi+56S65Y+z6ZSu6I+c5Y2V5qCPCiAgICAgIGlzcm9vdDogZmFsc2UsCiAgICAgIG1lbnVTdHlsZTogewogICAgICAgIHRvcDogJycsCiAgICAgICAgYm90dG9tOiAnJywKICAgICAgICBsZWZ0OiAnJywKICAgICAgICByaWdodDogJycKICAgICAgfSwKICAgICAgdGlwU3R5bGU6IHsKICAgICAgICB0b3A6ICcnLAogICAgICAgIGJvdHRvbTogJycsCiAgICAgICAgbGVmdDogJycsCiAgICAgICAgcmlnaHQ6ICcnCiAgICAgIH0sCiAgICAgIHNob3dQb3BvdmVyOiBmYWxzZSwKICAgICAgY3VycmVudE1lbW86ICcnLAogICAgICBzaG93TWFwOiB0cnVlLAogICAgICBmaXJzdEFkZDogZmFsc2UsCiAgICAgIGN1clZlcnNpb246ICcnCiAgICB9OwogIH0sCiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHsKICAgIHRoaXMuZ2V0VGFza0RhdGEoKTsKICAgIHZhciB0aGF0ID0gdGhpczsKICAgIHRoaXMubWFwVHlwZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ21hcFR5cGUnKSB8fCAnbXVsdGlUb1NpbmdsZSc7CiAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID0gImpzbWluZF9jb250YWluZXJfIi5jb25jYXQodGhpcy5tYXBUeXBlKTsKICAgIC8vIGlmICh0aGlzLm1hcFR5cGUgPT09ICdzaW5nbGVUb011bHRpJykgewogICAgLy8gICBjb25zb2xlLmxvZygnc2luZ2xlVG9NdWx0aScpOwogICAgLy8gICB0aGlzLm9wdGlvbnMudmlldy5jdXN0b21fbGluZV9yZW5kZXIgPSBmdW5jdGlvbiAoeyBjdHgsIHN0YXJ0X3BvaW50LCBlbmRfcG9pbnQgfSkgewogICAgLy8gICAgIHRoYXQuZHJhd0N1cnZlQXJyb3coY3R4LCBlbmRfcG9pbnQsIHN0YXJ0X3BvaW50LCAwLjkpOwogICAgLy8gICAgIC8vIHRoYXQuZHJhd0Fycm93KGN0eCwgc3RhcnRfcG9pbnQsIGVuZF9wb2ludCk7CiAgICAvLyAgIH07CiAgICAvLyB9IGVsc2UgewogICAgLy8gICBjb25zb2xlLmxvZygnbXVsdGlUb1NpbmdsZScpOwogICAgLy8gICB0aGlzLm9wdGlvbnMudmlldy5jdXN0b21fbGluZV9yZW5kZXIgPSBmdW5jdGlvbiAoeyBjdHgsIHN0YXJ0X3BvaW50LCBlbmRfcG9pbnQgfSkgewogICAgLy8gICAgIHRoYXQuZHJhd0N1cnZlQXJyb3coY3R4LCBlbmRfcG9pbnQsIHN0YXJ0X3BvaW50LCAwLjUpOwogICAgLy8gICAgIC8vIHRoYXQuZHJhd0Fycm93KGN0eCwgZW5kX3BvaW50LCBzdGFydF9wb2ludCk7CiAgICAvLyAgIH07CiAgICAvLyB9CiAgfSwKICBtZXRob2RzOiAoX21ldGhvZHMgPSB7CiAgICBpbml0TWFwOiBmdW5jdGlvbiBpbml0TWFwKCkgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgY29uc29sZS5sb2coX3RoaXMubWluZERhdGEsICdjb250YWluZXInKTsKICAgICAgICBfdGhpcy5sb2FkTWluZCgpOwogICAgICB9KTsKICAgIH0sCiAgICAvLy0tLS0tLS0tLS0tLeaOpeWPoy0tLS0tLS0tLS0tLS0tCiAgICAvLyDojrflj5bku7vliqHkv6Hmga8KICAgIGdldFRhc2tEYXRhOiBmdW5jdGlvbiBnZXRUYXNrRGF0YSgpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHsKICAgICAgICB2YXIgX3RoaXMyJCRyb3V0ZSRxdWVyeSwgaWQsIG5hbWUsIGNvZGUsIHZlcnNpb247CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX3RoaXMyJCRyb3V0ZSRxdWVyeSA9IF90aGlzMi4kcm91dGUucXVlcnksIGlkID0gX3RoaXMyJCRyb3V0ZSRxdWVyeS5pZCwgbmFtZSA9IF90aGlzMiQkcm91dGUkcXVlcnkubmFtZSwgY29kZSA9IF90aGlzMiQkcm91dGUkcXVlcnkuY29kZSwgdmVyc2lvbiA9IF90aGlzMiQkcm91dGUkcXVlcnkudmVyc2lvbjsKICAgICAgICAgICAgICBfdGhpczIudGFza0RhdGEgPSB7CiAgICAgICAgICAgICAgICBpZDogaWQsCiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLAogICAgICAgICAgICAgICAgY29kZTogY29kZSwKICAgICAgICAgICAgICAgIHZlcnNpb246IHZlcnNpb24KICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA0OwogICAgICAgICAgICAgIHJldHVybiBfdGhpczIuZ2V0TWFwRGF0YSh2ZXJzaW9uKTsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgIF90aGlzMi5pbml0TWFwKCk7CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUpOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDojrflj5bohJHlm77mlbDmja4KICAgIGdldE1hcERhdGE6IGZ1bmN0aW9uIGdldE1hcERhdGEoKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICB2YXIgdmVyc2lvbklkID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJzsKICAgICAgdGhpcy5pbml0TWluZERhdGEoKTsKICAgICAgdmFyIGRhdGEgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgLy8g5pyJ54mI5pys5Y+355qE5pe25YCZ5LiN5Lyg5Lu75YqhaWQKICAgICAgZGF0YS5hcHBlbmQoJ3Rhc2tJZCcsIHZlcnNpb25JZCA/ICcnIDogdGhpcy50YXNrRGF0YS5pZCk7CiAgICAgIGRhdGEuYXBwZW5kKCd2ZXJzaW9uSWQnLCB2ZXJzaW9uSWQpOwogICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgIEFQSS5nZXRCcmFpbk1hcEluZm8oZGF0YSkudGhlbigvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIF9yZWYyID0gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKHJlcykgewogICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0MikgewogICAgICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHsKICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgaWYgKCFyZXMpIHsKICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDE0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICghKHJlcy5sZW5ndGggPT09IDApKSB7CiAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA4OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF90aGlzMy5maXJzdEFkZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5nZXROZXdWZXJzaW9uKCk7CiAgICAgICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAgIF90aGlzMy5jdXJWZXJzaW9uID0gX2NvbnRleHQyLnNlbnQ7CiAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgICAgICBfdGhpczMubWluZERhdGEuZGF0YSA9IF90aGlzMy5mb3JtYXREYXRhKHJlcyk7CiAgICAgICAgICAgICAgICAgIF90aGlzMy5jdXJWZXJzaW9uID0gX3RoaXMzLmdldFZlcnNpb25Db2RlKF90aGlzMy5taW5kRGF0YS5kYXRhWzBdKTsKICAgICAgICAgICAgICAgICAgX3RoaXMzLmZpcnN0QWRkID0gZmFsc2U7CiAgICAgICAgICAgICAgICBjYXNlIDExOgogICAgICAgICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTU7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAxNDoKICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcy5tZXNzYWdlKTsKICAgICAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIF9jYWxsZWUyKTsKICAgICAgICAgIH0pKTsKICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gpIHsKICAgICAgICAgICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICB9OwogICAgICAgIH0oKSkuY2F0Y2goZnVuY3Rpb24gKGVycikgewogICAgICAgICAgcmVqZWN0KGVycik7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSwKICAgIGdldFZlcnNpb25Db2RlOiBmdW5jdGlvbiBnZXRWZXJzaW9uQ29kZShkYXRhKSB7CiAgICAgIGlmIChkYXRhLnRhc2tWZXJzaW9uTmFtZSkgewogICAgICAgIHJldHVybiBkYXRhLnRhc2tWZXJzaW9uTmFtZS5zcGxpdCgnLScpWzFdOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAnJzsKICAgICAgfQogICAgfSwKICAgIGluaXRNaW5kRGF0YTogZnVuY3Rpb24gaW5pdE1pbmREYXRhKCkgewogICAgICB0aGlzLm1pbmREYXRhLm1ldGEubmFtZSA9IHRoaXMudGFza0RhdGEubmFtZTsKICAgICAgdGhpcy5taW5kRGF0YS5kYXRhWzBdLnRvcGljID0gdGhpcy50YXNrRGF0YS5uYW1lOwogICAgICB0aGlzLm1pbmREYXRhLmRhdGFbMF0uaWQgPSB1dGlscy51dWlkKCk7CiAgICB9LAogICAgZm9ybWF0RGF0YTogZnVuY3Rpb24gZm9ybWF0RGF0YShkYXRhKSB7CiAgICAgIHZhciBuZXdEYXRhID0gW107CiAgICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIHZhciBpZCA9IGl0ZW0uaWQsCiAgICAgICAgICB0b3BpYyA9IGl0ZW0ubmFtZSwKICAgICAgICAgIHBhcmVudElkID0gaXRlbS5wYXJlbnRJZCwKICAgICAgICAgIGxldmVsID0gaXRlbS5sZXZlbCwKICAgICAgICAgIHJlbGF0aW9uQ29udGVudCA9IGl0ZW0ucmVsYXRpb25Db250ZW50LAogICAgICAgICAgY29udGVudCA9IGl0ZW0uY29udGVudCwKICAgICAgICAgIGJhY2tncm91bmQgPSBpdGVtLmJhY2tncm91bmQsCiAgICAgICAgICBmb250Q29sb3IgPSBpdGVtLmZvbnRDb2xvciwKICAgICAgICAgIGZvbnRTaXplID0gaXRlbS5mb250U2l6ZSwKICAgICAgICAgIGZvbnRTdHlsZSA9IGl0ZW0uZm9udFN0eWxlLAogICAgICAgICAgZm9udFdldGlnaHQgPSBpdGVtLmZvbnRXZXRpZ2h0LAogICAgICAgICAgZmllbGRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGl0ZW0sIF9leGNsdWRlZCk7CiAgICAgICAgdmFyIG5ld0l0ZW0gPSBfb2JqZWN0U3ByZWFkKHsKICAgICAgICAgIGlkOiBpZCwKICAgICAgICAgIHBhcmVudGlkOiBwYXJlbnRJZCwKICAgICAgICAgIHRvcGljOiB0b3BpYywKICAgICAgICAgIGxldmVsOiBsZXZlbCwKICAgICAgICAgIHJlbGF0aW9uQ29udGVudDogcmVsYXRpb25Db250ZW50LAogICAgICAgICAgY29udGVudDogY29udGVudCwKICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogYmFja2dyb3VuZCwKICAgICAgICAgICdmb3JlZ3JvdW5kLWNvbG9yJzogZm9udENvbG9yLAogICAgICAgICAgJ2ZvbnQtd2VpZ2h0JzogZm9udFdldGlnaHQsCiAgICAgICAgICAnZm9udC1zdHlsZSc6IGZvbnRTdHlsZSwKICAgICAgICAgICdmb250LXNpemUnOiBmb250U2l6ZQogICAgICAgIH0sIGZpZWxkcyk7CiAgICAgICAgbGV2ZWwgPT09IDAgPyBuZXdJdGVtLmlzcm9vdCA9IHRydWUgOiBudWxsOwogICAgICAgIG5ld0RhdGEucHVzaChuZXdJdGVtKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXdEYXRhOwogICAgfSwKICAgIC8vIOS/neWtmAogICAgaGFuZGxlU2F2ZTogZnVuY3Rpb24gaGFuZGxlU2F2ZShjb21tYW5kKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUzKCkgewogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDI7CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5nZXROZXdWZXJzaW9uKCk7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBfdGhpczQubmV3VmVyc2lvbiA9IF9jb250ZXh0My5zZW50OwogICAgICAgICAgICAgIF90aGlzNC5zYXZlTWFwRGF0YShjb21tYW5kKTsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUzKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgc2F2ZU1hcERhdGE6IGZ1bmN0aW9uIHNhdmVNYXBEYXRhKGNvbW1hbmQpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIGRlYnVnZ2VyOwogICAgICB0aGlzLmdldE1pbmREYXRhKCk7CiAgICAgIHZhciByZWFzb25MaXN0ID0gdGhpcy5taW5kRGF0YS5kYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBpZDogaXRlbS5pZCwKICAgICAgICAgIG5hbWU6IGl0ZW0udG9waWMsCiAgICAgICAgICBsZXZlbDogaXRlbS5sZXZlbCwKICAgICAgICAgIHJlbGF0aW9uQ29udGVudDogaXRlbS5yZWxhdGlvbkNvbnRlbnQsCiAgICAgICAgICBjb250ZW50OiBpdGVtLmNvbnRlbnQsCiAgICAgICAgICBiYWNrZ3JvdW5kOiBpdGVtWydiYWNrZ3JvdW5kLWNvbG9yJ10sCiAgICAgICAgICBmb250Q29sb3I6IGl0ZW1bJ2ZvcmVncm91bmQtY29sb3InXSwKICAgICAgICAgIGZvbnRTaXplOiBpdGVtWydmb250LXNpemUnXSwKICAgICAgICAgIGZvbnRXZXRpZ2h0OiBpdGVtWydmb250LXdlaWdodCddLAogICAgICAgICAgZm9udFN0eWxlOiBpdGVtWydmb250LXN0eWxlJ10sCiAgICAgICAgICB0YXNrSWQ6IF90aGlzNS50YXNrRGF0YS5pZCwKICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudGlkLAogICAgICAgICAgc246IGl0ZW0uc24KICAgICAgICB9OwogICAgICB9KTsKICAgICAgdmFyIG5ld0RhdGEgPSB7CiAgICAgICAgcmVhc29uTGlzdDogcmVhc29uTGlzdCwKICAgICAgICBzYXZlQVM6IGNvbW1hbmQgPT09ICdzYXZlQXMnID8gMSA6IDAsCiAgICAgICAgdmVyc2lvbjogdGhpcy5maXJzdEFkZCB8fCBjb21tYW5kID09PSAnc2F2ZUFzJyA/IHsKICAgICAgICAgIHR5cGU6IHRoaXMubWFwVHlwZSA9PT0gJ211bHRpVG9TaW5nbGUnID8gMiA6IDEsCiAgICAgICAgICB2ZXJzaW9uQ29kZTogdGhpcy5uZXdWZXJzaW9uLAogICAgICAgICAgdmVyc2lvbk5hbWU6IHRoaXMudGFza0RhdGEuY29kZSArICctJyArIHRoaXMubmV3VmVyc2lvbiwKICAgICAgICAgIHRhc2tJZDogdGhpcy50YXNrRGF0YS5pZCwKICAgICAgICAgIHRhc2tOYW1lOiB0aGlzLnRhc2tEYXRhLm5hbWUsCiAgICAgICAgICB0YXNrQ29kZTogdGhpcy50YXNrRGF0YS5jb2RlCiAgICAgICAgfSA6IHVuZGVmaW5lZAogICAgICB9OwogICAgICBBUEkuc2F2ZUJyYWluTWFwSW5mbyhuZXdEYXRhKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBpZiAocmVzLnN0YXRlKSB7CiAgICAgICAgICBfdGhpczUuJG1lc3NhZ2Uuc3VjY2Vzcygn5L+d5a2Y5oiQ5YqfJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzNS4kbWVzc2FnZS5lcnJvcign5L+d5a2Y5aSx6LSlJyk7CiAgICAgICAgfQogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgY29uc29sZS5sb2coZXJyIHx8ICfkv53lrZjlpLHotKUnKTsKICAgICAgfSk7CiAgICB9LAogICAgLy8g6I635Y+W5paw54mI5pys5Y+3CiAgICBnZXROZXdWZXJzaW9uOiBmdW5jdGlvbiBnZXROZXdWZXJzaW9uKCkgewogICAgICB2YXIgaWQgPSB0aGlzLnRhc2tEYXRhLmlkOwogICAgICB2YXIgZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwogICAgICBkYXRhLmFwcGVuZCgndGFza0lkJywgaWQpOwogICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgIEFQSS5nZXROZXdWZXJzaW9uKGRhdGEpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgaWYgKHJlcy52YWx1ZSAmJiByZXMuc3RhdGUpIHsKICAgICAgICAgICAgcmVzb2x2ZShyZXMudmFsdWUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVqZWN0KHJlcy5tZXNzYWdlKTsKICAgICAgICAgIH0KICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgLy8g6I635Y+W54mI5pys5YiX6KGoCiAgICBnZXRWZXJzaW9uTGlzdDogZnVuY3Rpb24gZ2V0VmVyc2lvbkxpc3QoKSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwogICAgICB2YXIgaWQgPSB0aGlzLnRhc2tEYXRhLmlkOwogICAgICB2YXIgcXVlcnkgPSB7CiAgICAgICAgcGFnZUJlYW46IHsKICAgICAgICAgIHBhZ2VTaXplOiAtMQogICAgICAgIH0sCiAgICAgICAgcXVlcnlzOiBbewogICAgICAgICAgZ3JvdXA6ICdtYWluJywKICAgICAgICAgIG9wZXJhdGlvbjogJ0VRVUFMJywKICAgICAgICAgIHByb3BlcnR5OiAndGFza0lkJywKICAgICAgICAgIHJlbGF0aW9uOiAnQU5EJywKICAgICAgICAgIHZhbHVlOiBpZAogICAgICAgIH1dCiAgICAgIH07CiAgICAgIEFQSS5nZXRJbmZlcmVuY2VWZXJzaW9uKHF1ZXJ5KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBfdGhpczYudmVyc2lvbkRhdGEgPSByZXMucm93cyB8fCBbXTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7CiAgICAgICAgX3RoaXM2LiRtZXNzYWdlLmVycm9yKGVycm9yIHx8ICfojrflj5bniYjmnKzkv6Hmga/lpLHotKXvvIEnKTsKICAgICAgfSk7CiAgICB9LAogICAgLy8g6I635Y+W5oyH5qCH5YiX6KGoCiAgICBnZXRUYXJnZXRMaXN0OiBmdW5jdGlvbiBnZXRUYXJnZXRMaXN0KHBhZ2UpIHsKICAgICAgdmFyIF90aGlzNyA9IHRoaXM7CiAgICAgIHBhZ2UgPyB0aGlzLnBhZ2luYXRpb24ucGFnZSA9IHBhZ2UgOiBudWxsOwogICAgICB2YXIgcXVlcnkgPSB7CiAgICAgICAgcGFnZUJlYW46IHRoaXMucGFnaW5hdGlvbiwKICAgICAgICBxdWVyeXM6IFt7CiAgICAgICAgICBncm91cDogJ21haW4nLAogICAgICAgICAgb3BlcmF0aW9uOiAnRVFVQUwnLAogICAgICAgICAgcGFyZW50R3JvdXA6ICcnLAogICAgICAgICAgcHJvcGVydHk6ICdsZXZlbCcsCiAgICAgICAgICByZWxhdGlvbjogJ0FORCcsCiAgICAgICAgICB2YWx1ZTogdGhpcy5zZWFyY2hUYXJnZXQudHlwZQogICAgICAgIH0sIHsKICAgICAgICAgIGdyb3VwOiAnbWFpbicsCiAgICAgICAgICBvcGVyYXRpb246ICdMSUtFJywKICAgICAgICAgIHBhcmVudEdyb3VwOiAnJywKICAgICAgICAgIHByb3BlcnR5OiAnbmFtZScsCiAgICAgICAgICByZWxhdGlvbjogJ0FORCcsCiAgICAgICAgICB2YWx1ZTogdGhpcy5zZWFyY2hUYXJnZXQubmFtZQogICAgICAgIH1dLAogICAgICAgIHNvcnRlcjogW3sKICAgICAgICAgIGRpcmVjdGlvbjogJ0FTQycsCiAgICAgICAgICBwcm9wZXJ0eTogJ2NvZGUnCiAgICAgICAgfV0KICAgICAgfTsKICAgICAgQVBJLmdldFRhcmdldExpc3QocXVlcnkpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzNy50YXJnZXREYXRhID0gcmVzLnJvd3MgfHwgW107CiAgICAgICAgX3RoaXM3LnBhZ2luYXRpb24udG90YWwgPSByZXMudG90YWwgfHwgMDsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7CiAgICAgICAgX3RoaXM3LiRtZXNzYWdlLmVycm9yKGVycm9yIHx8ICfojrflj5bmjIfmoIfkv6Hmga/lpLHotKXvvIEnKTsKICAgICAgfSk7CiAgICB9LAogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgbG9hZE1pbmQ6IGZ1bmN0aW9uIGxvYWRNaW5kKCkgewogICAgICB0aGlzLmdldE1pbmREYXRhKCk7CiAgICAgIHRoaXMudG9nZ2xlU3R1Y3R1cmUodGhpcy5tYXBUeXBlKTsKICAgICAgdGhpcy5qbSA9IG51bGw7CiAgICAgIHRoaXMuam0gPSBuZXcganNNaW5kKHRoaXMub3B0aW9ucyk7CiAgICAgIGNvbnNvbGUubG9nKHRoaXMub3B0aW9ucy5jb250YWluZXIsIHRoaXMubWluZERhdGEsICdjb250YWluZXInKTsKICAgICAgdGhpcy5qbS5zaG93KHRoaXMubWluZERhdGEpOwogICAgICB0aGlzLmVkaXRvciA9IG51bGw7CiAgICAgIHRoaXMuZWRpdG9yID0gdGhpcy5qbS52aWV3LmVfZWRpdG9yOwogICAgICB0aGlzLmluaXQoKTsKICAgICAgdGhpcy5tb3VzZVdoZWVsKCk7CiAgICAgIHRoaXMubW91c2VEcmFnKCk7CiAgICB9LAogICAgaGFuZGxlVGFibGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVRhYmxlQ2hhbmdlKHZhbCkgewogICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YWJsZUxpc3QuZmlsdGVyKGZ1bmN0aW9uIChpKSB7CiAgICAgICAgcmV0dXJuIGkuaWQgPT09IHZhbDsKICAgICAgfSlbMF07CiAgICAgIHRoaXMuYWRkVGFyZ2V0LnRhYmxlTmFtZUNuID0gKHRhcmdldCA9PT0gbnVsbCB8fCB0YXJnZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRhcmdldC5uYW1lQ24pIHx8ICcnOwogICAgfSwKICAgIGhhbmRsZUZpZWxkQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVGaWVsZENoYW5nZSh2YWwpIHsKICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZmllbGRMaXN0LmZpbHRlcihmdW5jdGlvbiAoaSkgewogICAgICAgIHJldHVybiBpLmlkID09PSB2YWw7CiAgICAgIH0pWzBdOwogICAgICB0aGlzLmFkZFRhcmdldC5maWVsZE5hbWVDbiA9ICh0YXJnZXQgPT09IG51bGwgfHwgdGFyZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0YXJnZXQubmFtZUNuKSB8fCAnJzsKICAgICAgdGhpcy5hZGRUYXJnZXQuZmllbGRUeXBlID0gKHRhcmdldCA9PT0gbnVsbCB8fCB0YXJnZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRhcmdldC50eXBlKSB8fCAnJzsKICAgICAgdGhpcy5hZGRUYXJnZXQuZmllbGREaWN0ID0gKHRhcmdldCA9PT0gbnVsbCB8fCB0YXJnZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRhcmdldC5kaWN0KSB8fCBbXTsKICAgICAgdGhpcy5hZGRUYXJnZXQuZmllbGREaWN0TmFtZSA9ICh0YXJnZXQgPT09IG51bGwgfHwgdGFyZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0YXJnZXQuZGljdE5hbWUpIHx8IFtdOwogICAgfSwKICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUN1cnJlbnRDaGFuZ2UodmFsKSB7CiAgICAgIHRoaXMucGFnaW5hdGlvbi5wYWdlID0gdmFsOwogICAgICB0aGlzLmdldFRhcmdldExpc3QoKTsKICAgIH0sCiAgICAvLyDnsbvlnovliIfmjaIKICAgIGNoYW5nZU1hcFR5cGU6IGZ1bmN0aW9uIGNoYW5nZU1hcFR5cGUodHlwZSkgewogICAgICB0aGlzLm1hcFR5cGUgPSB0eXBlOwogICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdtYXBUeXBlJywgdHlwZSk7CiAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgfSwKICAgIGhhbmRsZUNoYW5nZU1hcFR5cGU6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZU1hcFR5cGUodHlwZSkgewogICAgICB2YXIgX3RoaXM4ID0gdGhpczsKICAgICAgaWYgKHRoaXMubWFwVHlwZSAhPT0gdHlwZSkgewogICAgICAgIHRoaXMuJGNvbmZpcm0oJ+WIh+aNouaOqOeQhuexu+Wei+WQjumcgOimgeWIt+aWsOmhtemdou+8jOivt+WFiOS/neWtmOaVsOaNru+8jOaYr+WQpuehruiupOWIh+aNouaOqOeQhuexu+Wei++8nycpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgX3RoaXM4LmNoYW5nZU1hcFR5cGVGbih0eXBlKTsKICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHR5cGVOYW1lID0gdGhpcy5tYXBUeXBlID09PSAnc2luZ2xlVG9NdWx0aScgPyAn5LiA5o6o5aSaJyA6ICflpJrmjqjkuIAnOwogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn5b2T5YmN5o6o55CG57G75Z6L5bey5pivIOOAkCcgKyB0eXBlTmFtZSArICfjgJHvvIzml6DpnIDliIfmjaInKTsKICAgICAgfQogICAgfSwKICAgIGNoYW5nZU1hcFR5cGVGbjogZnVuY3Rpb24gY2hhbmdlTWFwVHlwZUZuKHR5cGUpIHsKICAgICAgdGhpcy5tYXBUeXBlID0gdHlwZTsKICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnbWFwVHlwZScsIHR5cGUpOwogICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgIH0sCiAgICBkcmF3QXJyb3c6IGZ1bmN0aW9uIGRyYXdBcnJvdyhjdHgsIHN0YXJ0X3BvaW50LCBlbmRfcG9pbnQpIHsKICAgICAgdmFyIGZyb21YLCBmcm9tWSwgdG9YLCB0b1k7CiAgICAgIGZyb21YID0gZW5kX3BvaW50Lng7CiAgICAgIGZyb21ZID0gZW5kX3BvaW50Lnk7CiAgICAgIHRvWCA9IHN0YXJ0X3BvaW50Lng7CiAgICAgIHRvWSA9IHN0YXJ0X3BvaW50Lnk7CiAgICAgIHZhciB0aGV0YSA9IDMwLAogICAgICAgIGhlYWRsZW4gPSAxMiwKICAgICAgICB3aWR0aCA9IDIsCiAgICAgICAgY29sb3IgPSAnIzY2Nic7CiAgICAgIC8vIOiuoeeul+ebtOe6v+S4reeCueWdkOaghwoKICAgICAgdmFyIG1pZFggPSAoZnJvbVggKyB0b1gpIC8gMjsKICAgICAgdmFyIG1pZFkgPSAoZnJvbVkgKyB0b1kpIC8gMjsKCiAgICAgIC8vIOiuoeeul+eureWktOi1t+eCueWSjOe7iOeCueeahOWdkOaghwogICAgICB2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKGZyb21ZIC0gdG9ZLCBmcm9tWCAtIHRvWCkgKiAxODAgLyBNYXRoLlBJOwogICAgICB2YXIgYW5nbGUxID0gKGFuZ2xlICsgdGhldGEpICogTWF0aC5QSSAvIDE4MDsKICAgICAgdmFyIGFuZ2xlMiA9IChhbmdsZSAtIHRoZXRhKSAqIE1hdGguUEkgLyAxODA7CiAgICAgIHZhciB0b3BYID0gaGVhZGxlbiAqIE1hdGguY29zKGFuZ2xlMSk7CiAgICAgIHZhciB0b3BZID0gaGVhZGxlbiAqIE1hdGguc2luKGFuZ2xlMSk7CiAgICAgIHZhciBib3RYID0gaGVhZGxlbiAqIE1hdGguY29zKGFuZ2xlMik7CiAgICAgIHZhciBib3RZID0gaGVhZGxlbiAqIE1hdGguc2luKGFuZ2xlMik7CiAgICAgIHZhciBhcnJvd1gsIGFycm93WTsKICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICBjdHgubW92ZVRvKGZyb21YLCBmcm9tWSk7CiAgICAgIGN0eC5saW5lVG8odG9YLCB0b1kpOwogICAgICAvL2N0eC5iZXppZXJDdXJ2ZVRvKHN0YXJ0X3BvaW50LnggKyAoKGVuZF9wb2ludC54IC0gc3RhcnRfcG9pbnQueCkgKiAyKSAvIDMsIHN0YXJ0X3BvaW50LnksIHN0YXJ0X3BvaW50LngsIGVuZF9wb2ludC55LCBlbmRfcG9pbnQueCwgZW5kX3BvaW50LnkpOwoKICAgICAgYXJyb3dYID0gbWlkWCArIHRvcFg7CiAgICAgIGFycm93WSA9IG1pZFkgKyB0b3BZOwogICAgICBjdHgubW92ZVRvKGFycm93WCwgYXJyb3dZKTsKICAgICAgY3R4LmxpbmVUbyhtaWRYLCBtaWRZKTsKICAgICAgYXJyb3dYID0gbWlkWCArIGJvdFg7CiAgICAgIGFycm93WSA9IG1pZFkgKyBib3RZOwogICAgICBjdHgubGluZVRvKGFycm93WCwgYXJyb3dZKTsKICAgICAgY3R4LnN0cm9rZVN0eWxlID0gY29sb3I7CiAgICAgIGN0eC5saW5lV2lkdGggPSB3aWR0aDsKICAgICAgY3R4LnN0cm9rZSgpOwogICAgfSwKICAgIGRyYXdDdXJ2ZUFycm93OiBmdW5jdGlvbiBkcmF3Q3VydmVBcnJvdyhjdHgsIHN0YXJ0UG9pbnQsIGVuZFBvaW50LCB0KSB7CiAgICAgIHZhciBmcm9tWCA9IHN0YXJ0UG9pbnQueDsKICAgICAgdmFyIGZyb21ZID0gc3RhcnRQb2ludC55OwogICAgICB2YXIgdG9YID0gZW5kUG9pbnQueDsKICAgICAgdmFyIHRvWSA9IGVuZFBvaW50Lnk7CiAgICAgIHZhciBjb250cm9sUG9pbnQxWCA9IGZyb21YICsgKHRvWCAtIGZyb21YKSAqIDIgLyAzOwogICAgICB2YXIgY29udHJvbFBvaW50MVkgPSBmcm9tWTsKICAgICAgdmFyIGNvbnRyb2xQb2ludDJYID0gZnJvbVg7CiAgICAgIHZhciBjb250cm9sUG9pbnQyWSA9IHRvWTsKICAgICAgdmFyIGFycm93VGhldGEgPSA0NTsgLy8g566t5aS06KeS5bqm77yI5bqm77yJCiAgICAgIHZhciBhcnJvd0hlYWRMZW5ndGggPSAxMjsgLy8g566t5aS06ZW/5bqmCiAgICAgIHZhciBsaW5lV2lkdGggPSAyOyAvLyDnur/mnaHlrr3luqYKICAgICAgdmFyIHN0cm9rZUNvbG9yID0gJyM2NjYnOyAvLyDnur/mnaHpopzoibIKCiAgICAgIC8vIOiuoeeul+i0neWhnuWwlOabsue6v+eahDQvMeWkhOeahOeCue+8iHQgPSAwLjc177yJCiAgICAgIC8vICAgY29uc3QgdCA9IDAuNTsKICAgICAgdmFyIGN1cnZlUG9pbnRYID0gTWF0aC5wb3coMSAtIHQsIDMpICogZnJvbVggKyAzICogTWF0aC5wb3coMSAtIHQsIDIpICogdCAqIGNvbnRyb2xQb2ludDFYICsgMyAqICgxIC0gdCkgKiBNYXRoLnBvdyh0LCAyKSAqIGNvbnRyb2xQb2ludDJYICsgTWF0aC5wb3codCwgMykgKiB0b1g7CiAgICAgIHZhciBjdXJ2ZVBvaW50WSA9IE1hdGgucG93KDEgLSB0LCAzKSAqIGZyb21ZICsgMyAqIE1hdGgucG93KDEgLSB0LCAyKSAqIHQgKiBjb250cm9sUG9pbnQxWSArIDMgKiAoMSAtIHQpICogTWF0aC5wb3codCwgMikgKiBjb250cm9sUG9pbnQyWSArIE1hdGgucG93KHQsIDMpICogdG9ZOwoKICAgICAgLy8g6K6h566X5puy57q/5ZyoY3VydmVQb2ludOWkhOeahOaWueWQke+8iOWvvOaVsO+8iQogICAgICB2YXIgZGVyaXZhdGl2ZVggPSAtMyAqIE1hdGgucG93KDEgLSB0LCAyKSAqIGZyb21YICsgMyAqICgzICogTWF0aC5wb3coMSAtIHQsIDIpIC0gNiAqICgxIC0gdCkgKiB0KSAqIGNvbnRyb2xQb2ludDFYICsgMyAqICgtMyAqICgxIC0gdCkgKiB0ICsgMiAqIHQgKiB0KSAqIGNvbnRyb2xQb2ludDJYICsgMyAqIE1hdGgucG93KHQsIDIpICogdG9YOwogICAgICB2YXIgZGVyaXZhdGl2ZVkgPSAtMyAqIE1hdGgucG93KDEgLSB0LCAyKSAqIGZyb21ZICsgMyAqICgzICogTWF0aC5wb3coMSAtIHQsIDIpIC0gNiAqICgxIC0gdCkgKiB0KSAqIGNvbnRyb2xQb2ludDFZICsgMyAqICgtMyAqICgxIC0gdCkgKiB0ICsgMiAqIHQgKiB0KSAqIGNvbnRyb2xQb2ludDJZICsgMyAqIE1hdGgucG93KHQsIDIpICogdG9ZOwoKICAgICAgLy8g6K6h566X566t5aS055qE6KeS5bqmCiAgICAgIHZhciBhbmdsZSA9IE1hdGguYXRhbjIoZGVyaXZhdGl2ZVksIGRlcml2YXRpdmVYKTsKICAgICAgdmFyIGFuZ2xlMSA9IChhbmdsZSArIGFycm93VGhldGEpICogTWF0aC5QSSAvIDE4MDsKICAgICAgdmFyIGFuZ2xlMiA9IChhbmdsZSAtIGFycm93VGhldGEpICogTWF0aC5QSSAvIDE4MDsKICAgICAgLy8gICBjb25zdCBhbmdsZTEgPSBhbmdsZSArIChhcnJvd1RoZXRhICogTWF0aC5QSSkgLyAxODA7CiAgICAgIC8vICAgY29uc3QgYW5nbGUyID0gYW5nbGUgLSAoYXJyb3dUaGV0YSAqIE1hdGguUEkpIC8gMTgwOwogICAgICAvLyAgIGNvbnNvbGUubG9nKGFuZ2xlLCBhbmdsZTEsIGFuZ2xlMiwgJ2FuZ2xlJyk7CgogICAgICAvLyDorqHnrpfnrq3lpLTkuKTkuKrliIbmlK/nmoTnu4jngrnlnZDmoIcKICAgICAgdmFyIHRvcFggPSB0b1ggKyBhcnJvd0hlYWRMZW5ndGggKiBNYXRoLmNvcyhhbmdsZTEpOwogICAgICB2YXIgdG9wWSA9IHRvWSArIGFycm93SGVhZExlbmd0aCAqIE1hdGguc2luKGFuZ2xlMSk7CiAgICAgIHZhciBib3RYID0gdG9YICsgYXJyb3dIZWFkTGVuZ3RoICogTWF0aC5jb3MoYW5nbGUyKTsKICAgICAgdmFyIGJvdFkgPSB0b1kgKyBhcnJvd0hlYWRMZW5ndGggKiBNYXRoLnNpbihhbmdsZTIpOwogICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgIGN0eC5tb3ZlVG8oZnJvbVgsIGZyb21ZKTsKICAgICAgY3R4LmJlemllckN1cnZlVG8oY29udHJvbFBvaW50MVgsIGNvbnRyb2xQb2ludDFZLCBjb250cm9sUG9pbnQyWCwgY29udHJvbFBvaW50MlksIHRvWCwgdG9ZKTsKICAgICAgY3R4LmxpbmVUbyh0b3BYLCB0b3BZKTsKICAgICAgY3R4Lm1vdmVUbyh0b1gsIHRvWSk7CiAgICAgIGN0eC5saW5lVG8oYm90WCwgYm90WSk7CiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZUNvbG9yOwogICAgICBjdHgubGluZVdpZHRoID0gbGluZVdpZHRoOwogICAgICBjdHguc3Ryb2tlKCk7CiAgICB9CiAgfSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9tZXRob2RzLCAiZHJhd0N1cnZlQXJyb3ciLCBmdW5jdGlvbiBkcmF3Q3VydmVBcnJvdyhjdHgsIHN0YXJ0UG9pbnQsIGVuZFBvaW50KSB7CiAgICB2YXIgZnJvbVggPSBzdGFydFBvaW50Lng7CiAgICB2YXIgZnJvbVkgPSBzdGFydFBvaW50Lnk7CiAgICB2YXIgdG9YID0gZW5kUG9pbnQueDsKICAgIHZhciB0b1kgPSBlbmRQb2ludC55OwogICAgdmFyIGNvbnRyb2xQb2ludDFYID0gZnJvbVggKyAodG9YIC0gZnJvbVgpICogMiAvIDM7CiAgICB2YXIgY29udHJvbFBvaW50MVkgPSBmcm9tWTsKICAgIHZhciBjb250cm9sUG9pbnQyWCA9IGZyb21YOwogICAgdmFyIGNvbnRyb2xQb2ludDJZID0gdG9ZOwogICAgdmFyIGFycm93VGhldGEgPSAzMDsgLy8g566t5aS06KeS5bqm77yI5bqm77yJCiAgICB2YXIgYXJyb3dIZWFkTGVuZ3RoID0gMTI7IC8vIOeureWktOmVv+W6pgogICAgdmFyIGxpbmVXaWR0aCA9IDI7IC8vIOe6v+adoeWuveW6pgogICAgdmFyIHN0cm9rZUNvbG9yID0gJyM2NjYnOyAvLyDnur/mnaHpopzoibIKCiAgICAvLyDorqHnrpfotJ3loZ7lsJTmm7Lnur/nmoTnu5PmnZ/ngrnvvIh0ID0gMe+8iQogICAgdmFyIGN1cnZlUG9pbnRYID0gdG9YOwogICAgdmFyIGN1cnZlUG9pbnRZID0gdG9ZOwoKICAgIC8vIOiuoeeul+absue6v+WcqOe7k+adn+eCueWkhOeahOaWueWQke+8iOWvvOaVsO+8jHQgPSAx77yJCiAgICB2YXIgZGVyaXZhdGl2ZVggPSAyICogKHRvWCAtIGNvbnRyb2xQb2ludDJYKTsKICAgIHZhciBkZXJpdmF0aXZlWSA9IDIgKiAodG9ZIC0gY29udHJvbFBvaW50MlkpOwoKICAgIC8vIOiuoeeul+eureWktOeahOinkuW6pgogICAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuMihkZXJpdmF0aXZlWSwgZGVyaXZhdGl2ZVgpOwogICAgdmFyIGFuZ2xlMSA9IGFuZ2xlICsgYXJyb3dUaGV0YSAqIE1hdGguUEkgLyAxODA7CiAgICB2YXIgYW5nbGUyID0gYW5nbGUgLSBhcnJvd1RoZXRhICogTWF0aC5QSSAvIDE4MDsKCiAgICAvLyDorqHnrpfnrq3lpLTkuKTkuKrliIbmlK/nmoTnu4jngrnlnZDmoIcKICAgIHZhciB0b3BYID0gdG9YIC0gYXJyb3dIZWFkTGVuZ3RoICogTWF0aC5jb3MoYW5nbGUxKTsKICAgIHZhciB0b3BZID0gdG9ZIC0gYXJyb3dIZWFkTGVuZ3RoICogTWF0aC5zaW4oYW5nbGUxKTsKICAgIHZhciBib3RYID0gdG9YIC0gYXJyb3dIZWFkTGVuZ3RoICogTWF0aC5jb3MoYW5nbGUyKTsKICAgIHZhciBib3RZID0gdG9ZIC0gYXJyb3dIZWFkTGVuZ3RoICogTWF0aC5zaW4oYW5nbGUyKTsKICAgIGN0eC5iZWdpblBhdGgoKTsKICAgIGN0eC5tb3ZlVG8oZnJvbVgsIGZyb21ZKTsKICAgIGN0eC5iZXppZXJDdXJ2ZVRvKGNvbnRyb2xQb2ludDFYLCBjb250cm9sUG9pbnQxWSwgY29udHJvbFBvaW50MlgsIGNvbnRyb2xQb2ludDJZLCB0b1gsIHRvWSk7CiAgICBjdHgubGluZVRvKHRvcFgsIHRvcFkpOwogICAgY3R4Lm1vdmVUbyh0b1gsIHRvWSk7CiAgICBjdHgubGluZVRvKGJvdFgsIGJvdFkpOwogICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlQ29sb3I7CiAgICBjdHgubGluZVdpZHRoID0gbGluZVdpZHRoOwogICAgY3R4LnN0cm9rZSgpOwogIH0pLCAiaGFuZGxlQ2xpY2tUYWIiLCBmdW5jdGlvbiBoYW5kbGVDbGlja1RhYih0YWIpIHsKICAgIGlmICh0YWIubmFtZSA9PT0gJ2ZpZnRoJykgewogICAgICB0aGlzLmdldFZlcnNpb25MaXN0KCk7CiAgICB9IGVsc2UgaWYgKHRhYi5uYW1lID09PSAnc2Vjb25kJykgewogICAgICB0aGlzLmdldFRhcmdldExpc3QoMSk7CiAgICB9CiAgfSksICJ0b2dnbGVTaWRlRWRpdG9yIiwgZnVuY3Rpb24gdG9nZ2xlU2lkZUVkaXRvcih0eXBlKSB7CiAgICB2YXIgX3RoaXM5ID0gdGhpczsKICAgIHRoaXMuc2hvd1NpZGVFZGl0b3IgPSB0eXBlID09PSB1bmRlZmluZWQgPyAhdGhpcy5zaG93U2lkZUVkaXRvciA6IHR5cGU7CiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgX3RoaXM5LnJlc2V0KCk7CiAgICB9LCAyMDApOwogIH0pLCAiem9vbU91dCIsIGZ1bmN0aW9uIHpvb21PdXQoKSB7CiAgICB0aGlzLmptLnZpZXcuem9vbV9vdXQoKTsKICB9KSwgInpvb21JbiIsIGZ1bmN0aW9uIHpvb21JbigpIHsKICAgIHRoaXMuam0udmlldy56b29tX2luKCk7CiAgfSksICJyZXNldCIsIGZ1bmN0aW9uIHJlc2V0KCkgewogICAgdGhpcy5qbS5yZXNpemUoKTsKICB9KSwgImV4cG9ydEltYWdlIiwgZnVuY3Rpb24gZXhwb3J0SW1hZ2UoKSB7CiAgICB2YXIgam0gPSBqc01pbmQuY3VycmVudDsKICAgIGptLnNob290KCk7CiAgfSksICJsb29wQXJyYXlEYXRhIiwgZnVuY3Rpb24gbG9vcEFycmF5RGF0YShsaXN0LCBjYWxsYmFjaykgewogICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpKSB7CiAgICAgIGNhbGxiYWNrKGl0ZW0sIGkpOwogICAgfSk7CiAgfSksICJsb29wVHJlZURhdGEiLCBmdW5jdGlvbiBsb29wVHJlZURhdGEobGlzdCwgY2FsbGJhY2spIHsKICAgIChmdW5jdGlvbiBkb09uZUZsb29yKGxpc3QpIHsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBpdGVtID0gbGlzdFtpXTsKICAgICAgICAgIGNhbGxiYWNrKGl0ZW0sIGkpOwogICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGRvT25lRmxvb3IoaXRlbS5jaGlsZHJlbik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KShsaXN0KTsKICB9KSwgInN0b3BEQmNsaWNrIiwgZnVuY3Rpb24gc3RvcERCY2xpY2soKSB7CiAgICB2YXIgam1ub2RlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdqbW5vZGUnKTsKICAgIE9iamVjdC52YWx1ZXMoam1ub2RlcykuZm9yRWFjaChmdW5jdGlvbiAoam1ub2RlKSB7CiAgICAgIGptbm9kZS5vbmRibGNsaWNrID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgfTsKICAgIH0pOwogIH0pLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX21ldGhvZHMsICJzaG93VGlwIiwgZnVuY3Rpb24gc2hvd1RpcChldmVudCkgewogICAgdmFyIF9ldmVudCRmcm9tRWxlbWVudDsKICAgIGlmICh0aGlzLnNob3dQb3BvdmVyKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuY3VycmVudE1lbW8gPSAoZXZlbnQgPT09IG51bGwgfHwgZXZlbnQgPT09IHZvaWQgMCB8fCAoX2V2ZW50JGZyb21FbGVtZW50ID0gZXZlbnQuZnJvbUVsZW1lbnQpID09PSBudWxsIHx8IF9ldmVudCRmcm9tRWxlbWVudCA9PT0gdm9pZCAwIHx8IChfZXZlbnQkZnJvbUVsZW1lbnQgPSBfZXZlbnQkZnJvbUVsZW1lbnQuY2hpbGRyZW5bMF0pID09PSBudWxsIHx8IF9ldmVudCRmcm9tRWxlbWVudCA9PT0gdm9pZCAwIHx8IChfZXZlbnQkZnJvbUVsZW1lbnQgPSBfZXZlbnQkZnJvbUVsZW1lbnQuZGF0YXNldCkgPT09IG51bGwgfHwgX2V2ZW50JGZyb21FbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZXZlbnQkZnJvbUVsZW1lbnQuY29udGVudCkgfHwgJyc7CiAgICB2YXIgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29tbW9uLXRpcCcpOwogICAgdmFyIHdpZHRoID0gcGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkud2lkdGgpOwogICAgdmFyIGhlaWdodCA9IHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLmhlaWdodCkgKiAzICsgMTI7CiAgICB2YXIgd2luZG93SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0OwogICAgdmFyIHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7CiAgICAvLyDmnoHpmZDkvY3nva4g6YG/5YWN6LaK55WMCiAgICBpZiAoZXZlbnQuY2xpZW50WSArIGhlaWdodCA+IHdpbmRvd0hlaWdodCkgewogICAgICB0aGlzLnRpcFN0eWxlLmxlZnQgPSBldmVudC5jbGllbnRYICsgJ3B4JzsKICAgICAgdGhpcy50aXBTdHlsZS50b3AgPSAndW5zZXQnOwogICAgICB0aGlzLnRpcFN0eWxlLmJvdHRvbSA9IDA7CiAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggKyB3aWR0aCA+IHdpbmRvd1dpZHRoKSB7CiAgICAgIHRoaXMudGlwU3R5bGUudG9wID0gZXZlbnQuY2xpZW50WSArICdweCc7CiAgICAgIHRoaXMudGlwU3R5bGUubGVmdCA9ICd1bnNldCc7CiAgICAgIHRoaXMudGlwU3R5bGUucmlnaHQgPSAwOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy50aXBTdHlsZS5sZWZ0ID0gZXZlbnQuY2xpZW50WCArICdweCc7CiAgICAgIHRoaXMudGlwU3R5bGUudG9wID0gZXZlbnQuY2xpZW50WSArICdweCc7CiAgICAgIHRoaXMudGlwU3R5bGUuYm90dG9tID0gJ3Vuc2V0JzsKICAgIH0KICAgIGlmICh0aGlzLmN1cnJlbnRNZW1vKSB7CiAgICAgIHRoaXMuc2hvd1BvcG92ZXIgPSB0cnVlOwogICAgfQogIH0pLCAiaGlkZVRpcCIsIGZ1bmN0aW9uIGhpZGVUaXAoKSB7CiAgICB0aGlzLmN1cnJlbnRNZW1vID0gJyc7CiAgICB0aGlzLnNob3dQb3BvdmVyID0gZmFsc2U7CiAgfSksICJ0aXBzQ2xpY2siLCBmdW5jdGlvbiB0aXBzQ2xpY2soKSB7CiAgICB2YXIgX3RoaXMxMCA9IHRoaXM7CiAgICB2YXIgdGlwcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RpcC1pY29uIHNob3dUaXAnKTsKICAgIE9iamVjdC52YWx1ZXModGlwcykuZm9yRWFjaChmdW5jdGlvbiAodGlwKSB7CiAgICAgIHRpcC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBfdGhpczEwLnNob3dUaXApOwogICAgICB0aXAuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgX3RoaXMxMC5zaG93VGlwKTsKICAgIH0pOwogICAgT2JqZWN0LnZhbHVlcyh0aXBzKS5mb3JFYWNoKGZ1bmN0aW9uICh0aXApIHsKICAgICAgdGlwLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBfdGhpczEwLmhpZGVUaXApOwogICAgICB0aXAuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIF90aGlzMTAuaGlkZVRpcCk7CiAgICB9KTsKICB9KSwgInJpZ2h0Q2xpY2tNZW51IiwgZnVuY3Rpb24gcmlnaHRDbGlja01lbnUoKSB7CiAgICB2YXIgX3RoaXMxMSA9IHRoaXM7CiAgICAvLyDlj7PplK7oj5zljZUKICAgIHRoaXMuam0udmlldy5hZGRfZXZlbnQodGhpcy5lZGl0b3IsICdjb250ZXh0bWVudScsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBzZWxlY3RlZE5vZGUgPSBfdGhpczExLmptLmdldF9zZWxlY3RlZF9ub2RlKCk7CiAgICAgIGlmIChzZWxlY3RlZE5vZGUpIHsKICAgICAgICBfdGhpczExLmlzcm9vdCA9IHNlbGVjdGVkTm9kZS5pZCA9PT0gJ3Jvb3QnOwogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29udGV4dC1tZW51IC5lbC1tZW51LWl0ZW0nKTsKICAgICAgICB2YXIgbWVudSA9IF90aGlzMTEuJHJlZnMuY29udGV4dC4kZWw7CgogICAgICAgIC8vICAgY29uc3Qgd2lkdGggPSBwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS53aWR0aCk7CiAgICAgICAgLy8gICBjb25zdCBoZWlnaHQgPSBwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS5oZWlnaHQpICogMyArIDEyOwogICAgICAgIHZhciB3aWR0aCA9IHBhcnNlRmxvYXQobWVudS5vZmZzZXRXaWR0aCk7CiAgICAgICAgdmFyIGhlaWdodCA9IHBhcnNlRmxvYXQobWVudS5vZmZzZXRIZWlnaHQpICogMiArIDEyOwogICAgICAgIHZhciB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7CiAgICAgICAgdmFyIHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7CgogICAgICAgIC8vIOaegemZkOS9jee9riDpgb/lhY3otornlYwKICAgICAgICBpZiAoZS5jbGllbnRZICsgaGVpZ2h0ID4gd2luZG93SGVpZ2h0KSB7CiAgICAgICAgICBfdGhpczExLm1lbnVTdHlsZS5sZWZ0ID0gZS5jbGllbnRYICsgJ3B4JzsKICAgICAgICAgIF90aGlzMTEubWVudVN0eWxlLnRvcCA9ICd1bnNldCc7CiAgICAgICAgICBfdGhpczExLm1lbnVTdHlsZS5ib3R0b20gPSAwOwogICAgICAgIH0gZWxzZSBpZiAoZS5jbGllbnRYICsgd2lkdGggPiB3aW5kb3dXaWR0aCkgewogICAgICAgICAgX3RoaXMxMS5tZW51U3R5bGUudG9wID0gZS5jbGllbnRZICsgJ3B4JzsKICAgICAgICAgIF90aGlzMTEubWVudVN0eWxlLmxlZnQgPSAndW5zZXQnOwogICAgICAgICAgX3RoaXMxMS5tZW51U3R5bGUucmlnaHQgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfdGhpczExLm1lbnVTdHlsZS5sZWZ0ID0gZS5jbGllbnRYICsgMjAgKyAncHgnOwogICAgICAgICAgX3RoaXMxMS5tZW51U3R5bGUudG9wID0gZS5jbGllbnRZICsgMjAgKyAncHgnOwogICAgICAgICAgX3RoaXMxMS5tZW51U3R5bGUuYm90dG9tID0gJ3Vuc2V0JzsKICAgICAgICB9CiAgICAgICAgX3RoaXMxMS5zaG93TWVudSA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3RoaXMxMS5zaG93TWVudSA9IGZhbHNlOwogICAgICB9CiAgICB9KTsKICB9KSwgImluaXQiLCBmdW5jdGlvbiBpbml0KCkgewogICAgdGhpcy5qbS5leHBhbmRfYWxsKCk7CiAgICB0aGlzLnN0b3BEQmNsaWNrKCk7CiAgICB0aGlzLnRpcHNDbGljaygpOwogICAgdGhpcy5yaWdodENsaWNrTWVudSgpOwogIH0pLCAiZ2V0X3NlbGVjdGVkX25vZGVpZCIsIGZ1bmN0aW9uIGdldF9zZWxlY3RlZF9ub2RlaWQoKSB7CiAgICB2YXIgc2VsZWN0ZWROb2RlID0gdGhpcy5qbS5nZXRfc2VsZWN0ZWRfbm9kZSgpOwogICAgaWYgKHNlbGVjdGVkTm9kZSkgewogICAgICByZXR1cm4gc2VsZWN0ZWROb2RlLmlkOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfSksICJ0b2dnbGVTdHVjdHVyZSIsIGZ1bmN0aW9uIHRvZ2dsZVN0dWN0dXJlKHR5cGUpIHsKICAgIGlmICh0aGlzLnN0cnVjdHVyZS5hY3RpdmUgPT09IHR5cGUpIHJldHVybjsKICAgIHRoaXMuc3RydWN0dXJlLmFjdGl2ZSA9IHR5cGU7CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSAnc2lkZSc6CiAgICAgICAgLy8g5Lik6L655YiG5biDCiAgICAgICAgdGhpcy5sb29wQXJyYXlEYXRhKHRoaXMubWluZERhdGEuZGF0YSwgZnVuY3Rpb24gKGl0ZW0sIGkpIHsKICAgICAgICAgIGl0ZW0uZGlyZWN0aW9uID0gaSAlIDIgPyAnbGVmdCcgOiAncmlnaHQnOwogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdtdWx0aVRvU2luZ2xlJzoKICAgICAgICAvLyDlkJHlt6bliIbluIMKICAgICAgICB0aGlzLmxvb3BBcnJheURhdGEodGhpcy5taW5kRGF0YS5kYXRhLCBmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgaXRlbS5kaXJlY3Rpb24gPSAnbGVmdCc7CiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ3NpbmdsZVRvTXVsdGknOgogICAgICAgIC8vIOWQkeWPs+WIhuW4gwogICAgICAgIHRoaXMubG9vcEFycmF5RGF0YSh0aGlzLm1pbmREYXRhLmRhdGEsIGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICBpdGVtLmRpcmVjdGlvbiA9ICdyaWdodCc7CiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfSksICJoYW5kbGVEcm9wIiwgZnVuY3Rpb24gaGFuZGxlRHJvcChkcmFnZ2luZ05vZGUsIGRyb3BOb2RlKSB7CiAgICAvLyDliY3kuIDkuKrlhYTlvJ/oioLngrkKICAgIHZhciBwcmV2Tm9kZSA9IHRoaXMuam0uZmluZF9ub2RlX2JlZm9yZShkcm9wTm9kZSk7CiAgICAvLyDojrflj5bnp7vliqjlkI7nmoRub2RlCiAgICB2YXIgZHJhZ0Zvcm0gPSB7CiAgICAgIG1vZGVsSWQ6ICcnLAogICAgICB0cmVlTnVtOiAhcHJldk5vZGUgPyBkcmFnZ2luZ05vZGUgOiBwcmV2Tm9kZS5pZCwKICAgICAgdGhpc1RyZWVOdW06IGRyb3BOb2RlCiAgICB9OwogICAgY29uc29sZS5sb2coJ2RyYWdGb3JtJywgZHJhZ0Zvcm0pOwoKICAgIC8vIFRPRE8g6LCD5o6l5Y+jCiAgfSksICJub2RlQ2xpY2siLCBmdW5jdGlvbiBub2RlQ2xpY2soKSB7CiAgICB0aGlzLnNob3dNZW51ID0gZmFsc2U7CiAgICB2YXIgc2VsZWN0ZWROb2RlID0gdGhpcy5qbS5nZXRfc2VsZWN0ZWRfbm9kZSgpOwogICAgaWYgKHNlbGVjdGVkTm9kZSkgewogICAgICBjb25zb2xlLmxvZygnc2VsZWN0ZWROb2RlJywgc2VsZWN0ZWROb2RlKTsKICAgICAgdGhpcy5jdXJyZW50Tm9kZSA9IHNlbGVjdGVkTm9kZTsKICAgICAgdGhpcy5hZGRUYXJnZXQudG9waWMgPSB0aGlzLmN1cnJlbnROb2RlLnRvcGljIHx8ICcnOwogICAgICB0aGlzLnRvZ2dsZVNpZGVFZGl0b3IodHJ1ZSk7CiAgICB9CiAgfSksICJub2RlUHJldmVudENsaWNrIiwgZnVuY3Rpb24gbm9kZVByZXZlbnRDbGljaygpIHt9KSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9tZXRob2RzLCAiY2hhbmdlTm9kZVRvcGljIiwgZnVuY3Rpb24gY2hhbmdlTm9kZVRvcGljKHZhbCkgewogICAgaWYgKHZhbCkgewogICAgICB0aGlzLmptLnVwZGF0ZV9ub2RlKHRoaXMuY3VycmVudE5vZGUuaWQsIHZhbCk7CiAgICAgIHRoaXMudGlwc0NsaWNrKCk7CiAgICAgIHRoaXMuc3RvcERCY2xpY2soKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+ivt+i+k+WFpeiKgueCueagh+mimCcpOwogICAgfQogIH0pLCAiY2hhbmdlRm9udFdlaWdodCIsIGZ1bmN0aW9uIGNoYW5nZUZvbnRXZWlnaHQoKSB7CiAgICB2YXIgX3RoaXMkY3VycmVudE5vZGU7CiAgICB2YXIgZm9udFdlaWdodCA9ICgoX3RoaXMkY3VycmVudE5vZGUgPSB0aGlzLmN1cnJlbnROb2RlKSA9PT0gbnVsbCB8fCBfdGhpcyRjdXJyZW50Tm9kZSA9PT0gdm9pZCAwIHx8IChfdGhpcyRjdXJyZW50Tm9kZSA9IF90aGlzJGN1cnJlbnROb2RlLmRhdGEpID09PSBudWxsIHx8IF90aGlzJGN1cnJlbnROb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRjdXJyZW50Tm9kZVsnZm9udC13ZWlnaHQnXSkgPT09ICdib2xkJyA/ICdub3JtYWwnIDogJ2JvbGQnOwogICAgdGhpcy5qbS5zZXRfbm9kZV9mb250X3N0eWxlKHRoaXMuY3VycmVudE5vZGUuaWQsIG51bGwsIGZvbnRXZWlnaHQsIG51bGwpOwogICAgdmFyIGRhdGEgPSB0aGlzLmN1cnJlbnROb2RlLmRhdGEgfHwge307CiAgICBkYXRhWydmb250LXdlaWdodCddID0gZm9udFdlaWdodDsKICAgIHRoaXMuJHNldCh0aGlzLmN1cnJlbnROb2RlLCAnZGF0YScsIGRhdGEpOwogICAgY29uc29sZS5sb2codGhpcy5jdXJyZW50Tm9kZSk7CiAgICB0aGlzLiRmb3JjZVVwZGF0ZSgpOwogIH0pLCAiY2hhbmdlRm9udFN0eWxlIiwgZnVuY3Rpb24gY2hhbmdlRm9udFN0eWxlKCkgewogICAgdmFyIF90aGlzJGN1cnJlbnROb2RlMjsKICAgIHZhciBmb250U3R5bGUgPSAoKF90aGlzJGN1cnJlbnROb2RlMiA9IHRoaXMuY3VycmVudE5vZGUpID09PSBudWxsIHx8IF90aGlzJGN1cnJlbnROb2RlMiA9PT0gdm9pZCAwIHx8IChfdGhpcyRjdXJyZW50Tm9kZTIgPSBfdGhpcyRjdXJyZW50Tm9kZTIuZGF0YSkgPT09IG51bGwgfHwgX3RoaXMkY3VycmVudE5vZGUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRjdXJyZW50Tm9kZTJbJ2ZvbnQtc3R5bGUnXSkgPT09ICdpdGFsaWMnID8gJ25vcm1hbCcgOiAnaXRhbGljJzsKICAgIHRoaXMuam0uc2V0X25vZGVfZm9udF9zdHlsZSh0aGlzLmN1cnJlbnROb2RlLmlkLCBudWxsLCBudWxsLCBmb250U3R5bGUpOwogICAgdmFyIGRhdGEgPSB0aGlzLmN1cnJlbnROb2RlLmRhdGEgfHwge307CiAgICBkYXRhWydmb250LXN0eWxlJ10gPSBmb250U3R5bGU7CiAgICB0aGlzLiRzZXQodGhpcy5jdXJyZW50Tm9kZSwgJ2RhdGEnLCBkYXRhKTsKICAgIHRoaXMuJGZvcmNlVXBkYXRlKCk7CiAgfSksICJjaGFuZ2VUZXh0U2l6ZSIsIGZ1bmN0aW9uIGNoYW5nZVRleHRTaXplKHZhbCkgewogICAgaWYgKHZhbCkgewogICAgICB0aGlzLmptLnNldF9ub2RlX2ZvbnRfc3R5bGUodGhpcy5jdXJyZW50Tm9kZS5pZCwgdmFsLCBudWxsLCBudWxsKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+ivt+mAieaLqeWtl+S9k+Wkp+WwjycpOwogICAgfQogIH0pLCAiY2hhbmdlVGV4dENvbG9yIiwgZnVuY3Rpb24gY2hhbmdlVGV4dENvbG9yKHZhbCkgewogICAgaWYgKHZhbCkgewogICAgICB0aGlzLmptLnNldF9ub2RlX2NvbG9yKHRoaXMuY3VycmVudE5vZGUuaWQsIG51bGwsIHZhbCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKCfor7fpgInmi6nmloflrZfpopzoibInKTsKICAgIH0KICB9KSwgImNoYW5nZU5vZGVDb2xvciIsIGZ1bmN0aW9uIGNoYW5nZU5vZGVDb2xvcih2YWwpIHsKICAgIGlmICh2YWwpIHsKICAgICAgdGhpcy5qbS5zZXRfbm9kZV9jb2xvcih0aGlzLmN1cnJlbnROb2RlLmlkLCB2YWwsIG51bGwpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcign6K+36YCJ5oup6IOM5pmv6aKc6ImyJyk7CiAgICB9CiAgfSksICJjaGFuZ2VOb2RlTWVtbyIsIGZ1bmN0aW9uIGNoYW5nZU5vZGVNZW1vKHZhbCwgaWQpIHsKICAgIGlmICh2YWwpIHsKICAgICAgdGhpcy5sb29wQXJyYXlEYXRhKHRoaXMubWluZERhdGEuZGF0YSwgZnVuY3Rpb24gKGl0ZW0sIGkpIHsKICAgICAgICBpZiAoaXRlbS5pZCA9PT0gaWQpIHsKICAgICAgICAgIGl0ZW0uY29udGVudCA9IHZhbDsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLmptLnNob3codGhpcy5taW5kRGF0YSk7CiAgICAgIHRoaXMuc3RvcERCY2xpY2soKTsKICAgICAgdGhpcy50aXBzQ2xpY2soKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+ivt+i+k+WFpeiKgueCueiuoeeul+WFrOW8jycpOwogICAgfQogIH0pLCAiY2hhbmdlTm9kZVJlbGF0aW9uIiwgZnVuY3Rpb24gY2hhbmdlTm9kZVJlbGF0aW9uKHZhbCwgaWQpIHsKICAgIGlmICh2YWwpIHsKICAgICAgdGhpcy5sb29wQXJyYXlEYXRhKHRoaXMubWluZERhdGEuZGF0YSwgZnVuY3Rpb24gKGl0ZW0sIGkpIHsKICAgICAgICBpZiAoaXRlbS5pZCA9PT0gaWQpIHsKICAgICAgICAgIGl0ZW0ucmVsYXRpb25Db250ZW50ID0gdmFsOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuam0uc2hvdyh0aGlzLm1pbmREYXRhKTsKICAgICAgdGhpcy5zdG9wREJjbGljaygpOwogICAgICB0aGlzLnRpcHNDbGljaygpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcign6K+36L6T5YWl5YWz57O75o+P6L+wJyk7CiAgICB9CiAgfSksICJpbXBvcnRDaGlsZCIsIGZ1bmN0aW9uIGltcG9ydENoaWxkKCkge30pLCAiYWRkQ2hpbGQiLCBmdW5jdGlvbiBhZGRDaGlsZCgpIHsKICAgIHZhciBzZWxlY3RlZE5vZGUgPSB0aGlzLmptLmdldF9zZWxlY3RlZF9ub2RlKCk7CiAgICBpZiAoc2VsZWN0ZWROb2RlKSB7CiAgICAgIHZhciBpZCA9IHV0aWxzLnV1aWQoKTsKICAgICAgdGhpcy5qbS5hZGRfbm9kZShzZWxlY3RlZE5vZGUsIGlkLCAn5paw5aKe6IqC54K5JywgewogICAgICAgIGxldmVsOiBzZWxlY3RlZE5vZGUuZGF0YS5sZXZlbCArIDEsCiAgICAgICAgJ2ZvbnQtc2l6ZSc6IDE2LAogICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogc2VsZWN0ZWROb2RlLmRhdGEubGV2ZWwgKyAxID4gdGhpcy5wcmVkZWZpbmVDb2xvcnMubGVuZ3RoID8gdGhpcy5wcmVkZWZpbmVDb2xvcnNbMV0gOiB0aGlzLnByZWRlZmluZUNvbG9yc1tzZWxlY3RlZE5vZGUuZGF0YS5sZXZlbCArIDFdCiAgICAgIH0pOwogICAgICB0aGlzLmdldE1pbmREYXRhKCk7CiAgICAgIHRoaXMuam0uc2VsZWN0X25vZGUoaWQpOwogICAgICB0aGlzLnN0b3BEQmNsaWNrKCk7CiAgICAgIHRoaXMubm9kZUNsaWNrKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKCfor7fpgInmi6nniLboioLngrknKTsKICAgIH0KICAgIHRoaXMuc2hvd01lbnUgPSBmYWxzZTsKICB9KSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9tZXRob2RzLCAiYWRkQ2hpbGRCeVRhcmdldCIsIGZ1bmN0aW9uIGFkZENoaWxkQnlUYXJnZXQocm93KSB7CiAgICB2YXIgc2VsZWN0ZWROb2RlID0gdGhpcy5qbS5nZXRfc2VsZWN0ZWRfbm9kZSgpOwogICAgaWYgKHNlbGVjdGVkTm9kZSkgewogICAgICB2YXIgaWQgPSB1dGlscy51dWlkKCk7CiAgICAgIHRoaXMuam0uYWRkX25vZGUoc2VsZWN0ZWROb2RlLCBpZCwgcm93Lm5hbWUsIHsKICAgICAgICBsZXZlbDogc2VsZWN0ZWROb2RlLmRhdGEubGV2ZWwgKyAxLAogICAgICAgIGNvZGU6IHJvdy5jb2RlLAogICAgICAgIGluZGV4VHlwZTogcm93LmxldmVsLAogICAgICAgICdmb250LXNpemUnOiAxNiwKICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IHNlbGVjdGVkTm9kZS5kYXRhLmxldmVsICsgMSA+IHRoaXMucHJlZGVmaW5lQ29sb3JzLmxlbmd0aCA/IHRoaXMucHJlZGVmaW5lQ29sb3JzWzFdIDogdGhpcy5wcmVkZWZpbmVDb2xvcnNbc2VsZWN0ZWROb2RlLmRhdGEubGV2ZWwgKyAxXQogICAgICB9KTsKICAgICAgdGhpcy5nZXRNaW5kRGF0YSgpOwogICAgICB0aGlzLmptLnNlbGVjdF9ub2RlKGlkKTsKICAgICAgdGhpcy5zdG9wREJjbGljaygpOwogICAgICB0aGlzLm5vZGVDbGljaygpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcign6K+36YCJ5oup54i26IqC54K5Jyk7CiAgICB9CiAgfSksICJkZWxDYXJkIiwgZnVuY3Rpb24gZGVsQ2FyZCgpIHsKICAgIHZhciBzZWxlY3RlZE5vZGUgPSB0aGlzLmptLmdldF9zZWxlY3RlZF9ub2RlKCk7CiAgICBpZiAoc2VsZWN0ZWROb2RlLmRhdGEpIHsKICAgICAgdGhpcy5qbS5yZW1vdmVfbm9kZShzZWxlY3RlZE5vZGUuaWQpOwogICAgICB0aGlzLmdldE1pbmREYXRhKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKCfor7fpgInmi6noioLngrknKTsKICAgIH0KICAgIHRoaXMuc2hvd01lbnUgPSBmYWxzZTsKICB9KSwgImdldE1pbmREYXRhIiwgZnVuY3Rpb24gZ2V0TWluZERhdGEoKSB7CiAgICBpZiAodGhpcy5qbSkgewogICAgICB0aGlzLm1pbmREYXRhID0gdGhpcy5qbS5nZXRfZGF0YSgnbm9kZV9hcnJheScpOwogICAgICBjb25zb2xlLmxvZyh0aGlzLm1pbmREYXRhLCAndGhpcy5kYXRhVXBkYXRhJyk7CiAgICB9CiAgfSksICJtb3VzZVdoZWVsIiwgZnVuY3Rpb24gbW91c2VXaGVlbCgpIHsKICAgIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RvbU1vdXNlU2Nyb2xsJywgdGhpcy5zY3JvbGxGdW5jLCBmYWxzZSk7CiAgICB9CiAgICB0aGlzLiRyZWZzLmNvbnRhaW5lci5vbm1vdXNld2hlZWwgPSB0aGlzLnNjcm9sbEZ1bmM7CiAgfSksICJzY3JvbGxGdW5jIiwgZnVuY3Rpb24gc2Nyb2xsRnVuYyhlKSB7CiAgICB0aGlzLnNob3dNZW51ID0gZmFsc2U7CiAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7CiAgICBpZiAoZS53aGVlbERlbHRhKSB7CiAgICAgIGlmIChlLndoZWVsRGVsdGEgPiAwKSB7CiAgICAgICAgdGhpcy56b29tSW4oKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnpvb21PdXQoKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChlLmRldGFpbCkgewogICAgICBpZiAoZS5kZXRhaWwgPiAwKSB7CiAgICAgICAgdGhpcy56b29tSW4oKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnpvb21PdXQoKTsKICAgICAgfQogICAgfQogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgdGhpcy5qbS5yZXNpemUoKTsKICB9KSwgIm1vdXNlRHJhZyIsIGZ1bmN0aW9uIG1vdXNlRHJhZygpIHsKICAgIHZhciBfdGhpczEyID0gdGhpczsKICAgIC8vIOmHjOWxggogICAgdmFyIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzbWluZC1pbm5lcicpOwogICAgLy8g6YCJ5Lit6IqC54K5CiAgICB2YXIgc2VsZWN0ZWQ7CiAgICBlbC5vbm1vdXNlZG93biA9IGZ1bmN0aW9uIChldikgewogICAgICAvLyDpgInkuK3oioLngrkKICAgICAgc2VsZWN0ZWQgPSBfdGhpczEyLmptLmdldF9zZWxlY3RlZF9ub2RlKCk7CiAgICAgIC8vIOagh+ivhiDmmK/lkKbmi5bmi73oioLngrkg6YG/5YWN5Yay56qBCiAgICAgIF90aGlzMTIuZHJhZ05vZGVGbGFnID0gISFzZWxlY3RlZDsKICAgICAgdmFyIGRpc1ggPSBldi5jbGllbnRYOwogICAgICB2YXIgZGlzWSA9IGV2LmNsaWVudFk7CiAgICAgIHZhciBvcmlnaW5hbFNjcm9sbExlZnQgPSBlbC5zY3JvbGxMZWZ0OwogICAgICB2YXIgb3JpZ2luYWxTY3JvbGxUb3AgPSBlbC5zY3JvbGxUb3A7CiAgICAgIHZhciBvcmlnaW5hbFNjcm9sbEJlaGF2aW9yID0gZWwuc3R5bGVbJ3Njcm9sbC1iZWhhdmlvciddOwogICAgICB2YXIgb3JpZ2luYWxQb2ludGVyRXZlbnRzID0gZWwuc3R5bGVbJ3BvaW50ZXItZXZlbnRzJ107CiAgICAgIC8vIGF1dG86IOm7mOiupOWAvO+8jOihqOekuua7muWKqOahhueri+WNs+a7muWKqOWIsOaMh+WumuS9jee9ruOAggogICAgICBlbC5zdHlsZVsnc2Nyb2xsLWJlaGF2aW9yJ10gPSAnYXV0byc7CiAgICAgIC8vIOm8oOagh+enu+WKqOS6i+S7tuaYr+ebkeWQrOeahOaVtOS4qmRvY3VtZW5077yM6L+Z5qC35Y+v5Lul5L2/6byg5qCH6IO95aSf5Zyo5YWD57Sg5aSW6YOo56e75Yqo55qE5pe25YCZ5Lmf6IO95a6e546w5ouW5YqoCiAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZnVuY3Rpb24gKGV2KSB7CiAgICAgICAgaWYgKF90aGlzMTIuZHJhZ05vZGVGbGFnKSByZXR1cm47CiAgICAgICAgX3RoaXMxMi5kcmFnID0gZmFsc2U7CiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTsKICAgICAgICAvLyDorqHnrpfmi5bmi73nmoTlgY/np7vot53nprsKICAgICAgICB2YXIgZGlzdGFuY2VYID0gZXYuY2xpZW50WCAtIGRpc1g7CiAgICAgICAgdmFyIGRpc3RhbmNlWSA9IGV2LmNsaWVudFkgLSBkaXNZOwogICAgICAgIGVsLnNjcm9sbFRvKG9yaWdpbmFsU2Nyb2xsTGVmdCAtIGRpc3RhbmNlWCwgb3JpZ2luYWxTY3JvbGxUb3AgLSBkaXN0YW5jZVkpOwoKICAgICAgICAvLyDlnKjpvKDmoIfmi5bliqjnmoTml7blgJnlsIbngrnlh7vkuovku7blsY/olL3mjokKICAgICAgICBlbC5zdHlsZVsncG9pbnRlci1ldmVudHMnXSA9ICdub25lJzsKICAgICAgICBlbC5zdHlsZS5jdXJzb3IgPSAnZ3JhYmJpbmcnOwogICAgICB9OwogICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKCFfdGhpczEyLmRyYWdOb2RlRmxhZykgewogICAgICAgICAgZWwuc3R5bGVbJ3Njcm9sbC1iZWhhdmlvciddID0gb3JpZ2luYWxTY3JvbGxCZWhhdmlvcjsKICAgICAgICAgIGVsLnN0eWxlWydwb2ludGVyLWV2ZW50cyddID0gb3JpZ2luYWxQb2ludGVyRXZlbnRzOwogICAgICAgICAgZWwuc3R5bGUuY3Vyc29yID0gJ2dyYWInOwogICAgICAgIH0KICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7CiAgICAgIH07CiAgICB9OwogIH0pLCAic2F2ZSIsIGZ1bmN0aW9uIHNhdmUoKSB7fSksICJoYW5kbGVWZXJzaW9uQ2hhbmdlIiwgZnVuY3Rpb24gaGFuZGxlVmVyc2lvbkNoYW5nZShyb3cpIHsKICAgIHZhciBfdGhpcyR0YXNrRGF0YSA9IHRoaXMudGFza0RhdGEsCiAgICAgIGlkID0gX3RoaXMkdGFza0RhdGEuaWQsCiAgICAgIG5hbWUgPSBfdGhpcyR0YXNrRGF0YS5uYW1lLAogICAgICBjb2RlID0gX3RoaXMkdGFza0RhdGEuY29kZTsKICAgIC8vIOaJk+W8gOaWsOeahOmhtemdoiDliLAgaHJlZiDov5nkuKrpobXpnaIKICAgIHZhciBocmVmID0gdGhpcy4kcm91dGVyLnJlc29sdmUoewogICAgICBwYXRoOiAnL2FyaXRobWV0aWNNYW5hZ2UvYXJpdGhtZXRpY1Rhc2svbWluZE1hcFBhZ2UnLAogICAgICBxdWVyeTogewogICAgICAgIGlkOiBpZCwKICAgICAgICBuYW1lOiBuYW1lLAogICAgICAgIGNvZGU6IGNvZGUsCiAgICAgICAgdmVyc2lvbjogcm93LmlkCiAgICAgIH0KICAgIH0pLmhyZWY7CiAgICB3aW5kb3cub3BlbihocmVmLCAnX2JsYW5rJyk7CiAgfSksICJ0YWJsZVJvd0NsYXNzTmFtZSIsIGZ1bmN0aW9uIHRhYmxlUm93Q2xhc3NOYW1lKF9yZWYzKSB7CiAgICB2YXIgcm93ID0gX3JlZjMucm93LAogICAgICByb3dJbmRleCA9IF9yZWYzLnJvd0luZGV4OwogICAgaWYgKHJvdy52ZXJzaW9uQ29kZSA9PT0gdGhpcy5jdXJWZXJzaW9uKSB7CiAgICAgIHJldHVybiAnY3VycmVudC1yb3cnOwogICAgfQogICAgcmV0dXJuICcnOwogIH0pLCAicmVsYXRpb25TZWFyY2giLCBmdW5jdGlvbiByZWxhdGlvblNlYXJjaCgpIHsKICAgIC8vIOmAieS4reiKgueCuQogICAgdmFyIF90aGlzJGptJGdldF9zZWxlY3RlZCA9IHRoaXMuam0uZ2V0X3NlbGVjdGVkX25vZGUoKSwKICAgICAgaWQgPSBfdGhpcyRqbSRnZXRfc2VsZWN0ZWQuaWQ7CiAgICAvLyDmiZPlvIDmlrDnmoTpobXpnaIg5YiwIGhyZWYg6L+Z5Liq6aG16Z2iCiAgICB2YXIgaHJlZiA9IHRoaXMuJHJvdXRlci5yZXNvbHZlKHsKICAgICAgcGF0aDogJy9hcml0aG1ldGljTWFuYWdlL2FyaXRobWV0aWNUYXNrL3RhcmdldFJlbGF0aW9uJywKICAgICAgcXVlcnk6IHsKICAgICAgICBpZDogaWQKICAgICAgfQogICAgfSkuaHJlZjsKICAgIHdpbmRvdy5vcGVuKGhyZWYsICdfYmxhbmsnKTsKICB9KSksCiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHsKICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RvbU1vdXNlU2Nyb2xsJywgdGhpcy5zY3JvbGxGdW5jLCBmYWxzZSk7CiAgfQp9Ow=="},null]}