{"remainingRequest":"D:\\jenkins\\workspace\\tj_zsj_web\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\tj_zsj_web\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\tj_zsj_web\\node_modules\\eslint-loader\\index.js??ref--13-0!D:\\jenkins\\workspace\\tj_zsj_web\\src\\store\\menu.js","dependencies":[{"path":"D:\\jenkins\\workspace\\tj_zsj_web\\src\\store\\menu.js","mtime":1741330432358},{"path":"D:\\jenkins\\workspace\\tj_zsj_web\\babel.config.js","mtime":1741330404271},{"path":"D:\\jenkins\\workspace\\tj_zsj_web\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\tj_zsj_web\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\tj_zsj_web\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\tj_zsj_web\\node_modules\\eslint-loader\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvdGpfenNqX3dlYi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcmVnZW5lcmF0b3JSdW50aW1lLmpzIjsKaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS90al96c2pfd2ViL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyI7CmltcG9ydCBfYXN5bmNUb0dlbmVyYXRvciBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS90al96c2pfd2ViL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIjsKaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvdGpfenNqX3dlYi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qcyI7CnZhciBfZXhjbHVkZWQgPSBbImNoaWxkcmVuIiwgImFsaWFzIl0sCiAgX2V4Y2x1ZGVkMiA9IFsiY2hpbGRyZW4iLCAiYWxpYXMiXSwKICBfZXhjbHVkZWQzID0gWyJjaGlsZHJlbiIsICJhbGlhcyJdOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNvcnQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLnNvbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiOwppbXBvcnQgcG9ydGFsIGZyb20gJ0AvYXBpL3BvcnRhbC5qcyc7CmltcG9ydCBwcm9jZXNzIGZyb20gJ0AvYXBpL3Byb2Nlc3MuanMnOwp2YXIgc3RhdGUgPSB7CiAgYWxsOiBbXSwKICAvL+iPnOWNleaVsOaNrgogIHJlc2lkdWFsOiBmYWxzZSwKICAvL+aJi+WKqOS/ruaUueS6huiPnOWNleeahOagh+iusAogIHN0YXRlbWVudDogW10sCiAgLy/miqXooajkuK3lv4Poj5zljZUKICBwYWdpbmF0aW9uOiB7fSwKICAvL+WIhumhteWPguaVsAogIHJvd3M6IFtdLAogIC8v5paw6Ze75Yqo5oCB5YiX6KGo5pWw5o2uCiAgbm90aWNlOiBbXSwKICAvL+WPkeaWh+WFrOWRiuWIl+ihqOaVsOaNrgogIHRvdGFsOiAwLAogIC8v5YiX6KGo5pWw5o2u5oC75p2h5pWwCiAgZmlsZXNEYXRhOiB7fSwKICAvL+aWsOmXu+WFrOWRiuivpuaDhQogIG1lZXRpbmc6IFtdLAogIC8v5Lya6K6u5YiX6KGoCiAgbWVudU1hcHM6IHt9LAogIC8v5Yqo5oCB6I+c5Y2V5pWw5o2uCiAgY3VycmVudE1lbnU6IHt9LAogIC8v5b2T5YmN5LiA57qn6I+c5Y2VCiAgY29sdW1uQWxpYXNBcnk6IFtdLAogIC8v5b2T5YmN6KaB6K+35rGC5qCP55uu5pWw5o2u55qE5Yir5ZCN5pWw57uECiAgY29sdW1uUXVlcnlNZXJnaW5nOiBudWxsLAogIC8v6I635Y+W5qCP55uu5pWw5o2u55qE6K+35rGC5ZCI5bm25qCH6K6w5Y+Y6YePCiAgY29sdW1uRGF0YToge30sCiAgLy/lkITmoI/nm67nmoTmlbDmja4KICBjb2x1bW5EYXRhTG9hZGVkQWxpYXNlczogbnVsbCwKICBzeXNNZW51czogW10sCiAgLy/ns7vnu5/lkI7lj7Doj5zljZUKICByb2xlTWVudXM6IFtdLAogIC8vIOinkuiJsuiPnOWNlQoKICBmcm9udE1lbnVzOiBbXSwKICAvLyDkuLvmlbDmja7liY3lj7DkuJrliqHoj5zljZUKICBnYXRld2F5TWVudXM6IFtdLAogIC8vIOe7n+S4gOmXqOaIt+iPnOWNlQogIHBsYXRTeXN0ZW1NZW51czogW10sCiAgLy8g5bmz5Y+w5Lia5Yqh57O757uf6I+c5Y2VCiAgY29ja3BpdE1lbnVzOiBbXSAvLyDpqb7pqbboiLHoj5zljZUKfTsKdmFyIGdldHRlcnMgPSB7CiAgZ2V0Q29sdW1uRGF0YVdpdGhBbGlhczogZnVuY3Rpb24gZ2V0Q29sdW1uRGF0YVdpdGhBbGlhcyhzdGF0ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uIChhbGlhcykgewogICAgICByZXR1cm4gc3RhdGUuY29sdW1uRGF0YVthbGlhc107CiAgICB9OwogIH0sCiAgaGFzQ29sdW1uRGF0YVdpdGhBbGlhczogZnVuY3Rpb24gaGFzQ29sdW1uRGF0YVdpdGhBbGlhcyhzdGF0ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uIChhbGlhcykgewogICAgICByZXR1cm4gc3RhdGUuY29sdW1uRGF0YS5oYXNPd25Qcm9wZXJ0eShhbGlhcyk7CiAgICB9OwogIH0sCiAgZnJvbnRNZW51czogZnVuY3Rpb24gZnJvbnRNZW51cyhzdGF0ZSkgewogICAgcmV0dXJuIHN0YXRlLmZyb250TWVudXM7CiAgfSwKICBnYXRld2F5TWVudXM6IGZ1bmN0aW9uIGdhdGV3YXlNZW51cyhzdGF0ZSkgewogICAgcmV0dXJuIHN0YXRlLmdhdGV3YXlNZW51czsKICB9LAogIHBsYXRTeXN0ZW1NZW51czogZnVuY3Rpb24gcGxhdFN5c3RlbU1lbnVzKHN0YXRlKSB7CiAgICByZXR1cm4gc3RhdGUucGxhdFN5c3RlbU1lbnVzOwogIH0sCiAgY29ja3BpdE1lbnVzOiBmdW5jdGlvbiBjb2NrcGl0TWVudXMoc3RhdGUpIHsKICAgIHJldHVybiBzdGF0ZS5jb2NrcGl0TWVudXM7CiAgfSwKICBzeXNNZW51czogZnVuY3Rpb24gc3lzTWVudXMoc3RhdGUpIHsKICAgIHJldHVybiBzdGF0ZS5zeXNNZW51czsKICB9LAogIHJvbGVNZW51OiBmdW5jdGlvbiByb2xlTWVudShzdGF0ZSkgewogICAgcmV0dXJuIHN0YXRlLnJvbGVNZW51OwogIH0KfTsKdmFyIGFjdGlvbnMgPSB7CiAgYWN0aW9uc1JvbGVNZW51OiBmdW5jdGlvbiBhY3Rpb25zUm9sZU1lbnUoX3JlZiwgcm9sZUNvZGVzKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZi5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIC8vIOinkuiJsuiPnOWNleavj+asoemDveivt+axguaOpeWPo++8jOS4jeWBmue8k+WtmAogICAgICBwb3J0YWwuZ2V0Um9sZU1lbnVzKHJvbGVDb2RlcykudGhlbihmdW5jdGlvbiAoZGF0YSkgewogICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2N1cnJlbnRSb2xlTWVudXMnLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgICAgICAgY29tbWl0KCdtdXRhdGlvblJvbGVNZW51cycsIGRhdGEpOwogICAgICAgIHJlc29sdmUoZGF0YSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICBhY3Rpb25TeXNNZW51czogZnVuY3Rpb24gYWN0aW9uU3lzTWVudXMoX3JlZjIpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMi5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjIuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBpZiAoc3RhdGUubWVudXMgJiYgc3RhdGUubWVudXMubGVuZ3RoID49IDEpIHsKICAgICAgICByZXNvbHZlKCk7CiAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnY3VycmVudFN5c01lbnVzJykpIHsKICAgICAgICB2YXIgbWVudXMgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW50U3lzTWVudXMnKTsKICAgICAgICBjb21taXQoJ211dGF0aW9uU3lzTWVudXMnLCBKU09OLnBhcnNlKG1lbnVzKSk7CiAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKG1lbnVzKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcG9ydGFsLmdldFN5c01lbnVzKCkudGhlbihmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnY3VycmVudFN5c01lbnVzJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogICAgICAgICAgY29tbWl0KCdtdXRhdGlvblN5c01lbnVzJywgZGF0YSk7CiAgICAgICAgICByZXNvbHZlKGRhdGEpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICB9LAogIC8vIOe7n+S4gOmXqOaIt+mhtemdouiPnOWNlQogIGFjdGlvbkRlZmF1bHRNZW51czogZnVuY3Rpb24gYWN0aW9uRGVmYXVsdE1lbnVzKF9yZWYzKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjMuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYzLnN0YXRlOwogICAgLy8g6YCS5b2S6KGl5YWF5YWo6Lev55Sx6Lev5b6E5pa55rOVCiAgICB2YXIgX3Byb2Nlc3NSb3V0aW5nID0gZnVuY3Rpb24gcHJvY2Vzc1JvdXRpbmcodHJlZURhdGEpIHsKICAgICAgdmFyIHBhcmVudFBhdGhBcnIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdOwogICAgICByZXR1cm4gdHJlZURhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgLy8g5bCG5b2T5YmN6IqC54K555qEYWxpYXPmt7vliqDliLDot6/lvoTmlbDnu4TkuK0KICAgICAgICB2YXIgY3VycmVudFBhdGggPSBwYXJlbnRQYXRoQXJyLmNvbmNhdChpdGVtLmFsaWFzKTsKICAgICAgICB2YXIgY2hpbGRyZW4gPSBbXTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtLmNoaWxkcmVuKSAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCkgewogICAgICAgICAgY2hpbGRyZW4gPSBfcHJvY2Vzc1JvdXRpbmcoaXRlbS5jaGlsZHJlbiwgY3VycmVudFBhdGgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBpdGVtKSwge30sIHsKICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbiwKICAgICAgICAgIHJvdXRlclBhdGg6ICcvJyArIGN1cnJlbnRQYXRoLmpvaW4oJy8nKSwKICAgICAgICAgIHBhdGhBcnI6IGN1cnJlbnRQYXRoCiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfTsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICB2YXIgX3JlZjQgPSBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZShyZXNvbHZlKSB7CiAgICAgICAgdmFyIG1lbnVzLCBtZW51OwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIGlmICghKHN0YXRlLmdhdGV3YXlNZW51cyAmJiBzdGF0ZS5nYXRld2F5TWVudXMubGVuZ3RoID49IDEpKSB7CiAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXNvbHZlKHN0YXRlLmdhdGV3YXlNZW51cyk7CiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE5OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW50R2F0ZXdheU1lbnVzJykpIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxMDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBtZW51cyA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnY3VycmVudEdhdGV3YXlNZW51cycpKTsKICAgICAgICAgICAgICBjb21taXQoJ211dGF0aW9uR2F0ZXdheU1lbnVzJywgbWVudXMpOwogICAgICAgICAgICAgIHJlc29sdmUobWVudXMpOwogICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxOTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxMDoKICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTI7CiAgICAgICAgICAgICAgcmV0dXJuIHBvcnRhbC5nZXRGcm9udE1lbnVzQnlBbGlhcygnZGVmYXVsdCcpOwogICAgICAgICAgICBjYXNlIDEyOgogICAgICAgICAgICAgIF9jb250ZXh0LnQwID0gX2NvbnRleHQuc2VudDsKICAgICAgICAgICAgICBpZiAoX2NvbnRleHQudDApIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxNTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfY29udGV4dC50MCA9IFtdOwogICAgICAgICAgICBjYXNlIDE1OgogICAgICAgICAgICAgIG1lbnUgPSBfY29udGV4dC50MC5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW4sCiAgICAgICAgICAgICAgICAgIGFsaWFzID0gaXRlbS5hbGlhcywKICAgICAgICAgICAgICAgICAgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhpdGVtLCBfZXhjbHVkZWQpOwogICAgICAgICAgICAgICAgdmFyIHJvdXRlclBhdGggPSBhbGlhcyA9PT0gJ2hvbWVQYWdlJyA/ICdwbGF0TGF5b3V0LycgKyBhbGlhcyA6IGFsaWFzOwogICAgICAgICAgICAgICAgLy8g5Yid5aeL5YyW56ys5LiA57qn5Yir55qEcGF0aEFycgogICAgICAgICAgICAgICAgdmFyIHBhdGhBcnIgPSBbcm91dGVyUGF0aF07CiAgICAgICAgICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBpKSwge30sIHsKICAgICAgICAgICAgICAgICAgYWxpYXM6IGFsaWFzLAogICAgICAgICAgICAgICAgICByb3V0ZXJQYXRoOiAiLyIuY29uY2F0KHJvdXRlclBhdGgpLAogICAgICAgICAgICAgICAgICBwYXRoQXJyOiBwYXRoQXJyLAogICAgICAgICAgICAgICAgICBjaGlsZHJlbjogX3Byb2Nlc3NSb3V0aW5nKGNoaWxkcmVuLCBwYXRoQXJyKQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnY3VycmVudEdhdGV3YXlNZW51cycsIEpTT04uc3RyaW5naWZ5KG1lbnUpKTsKICAgICAgICAgICAgICBjb21taXQoJ211dGF0aW9uR2F0ZXdheU1lbnVzJywgbWVudSk7CiAgICAgICAgICAgICAgcmVzb2x2ZShtZW51KTsKICAgICAgICAgICAgY2FzZSAxOToKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUpOwogICAgICB9KSk7CiAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gpIHsKICAgICAgICByZXR1cm4gX3JlZjQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgfTsKICAgIH0oKSk7CiAgfSwKICAvLyDkuLvmlbDmja7kuJrliqHoj5zljZUKICBhY3Rpb25Gcm9udE1lbnVzOiBmdW5jdGlvbiBhY3Rpb25Gcm9udE1lbnVzKF9yZWY1KSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjUuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWY1LnN0YXRlOwogICAgLy8g6YCS5b2S6KGl5YWF5YWo6Lev55Sx6Lev5b6E5pa55rOVCiAgICB2YXIgX3Byb2Nlc3NSb3V0aW5nMiA9IGZ1bmN0aW9uIHByb2Nlc3NSb3V0aW5nKHRyZWVEYXRhKSB7CiAgICAgIHZhciBwYXJlbnRQYXRoQXJyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTsKICAgICAgcmV0dXJuIHRyZWVEYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIC8vIOWwhuW9k+WJjeiKgueCueeahGFsaWFz5re75Yqg5Yiw6Lev5b6E5pWw57uE5LitCiAgICAgICAgdmFyIGN1cnJlbnRQYXRoID0gcGFyZW50UGF0aEFyci5jb25jYXQoaXRlbS5hbGlhcyk7CiAgICAgICAgdmFyIGNoaWxkcmVuID0gW107CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbS5jaGlsZHJlbikgJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgICAgIGNoaWxkcmVuID0gX3Byb2Nlc3NSb3V0aW5nMihpdGVtLmNoaWxkcmVuLCBjdXJyZW50UGF0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGl0ZW0pLCB7fSwgewogICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLAogICAgICAgICAgcm91dGVyUGF0aDogJy8nICsgY3VycmVudFBhdGguam9pbignLycpLAogICAgICAgICAgcGF0aEFycjogY3VycmVudFBhdGgKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9OwogICAgcmV0dXJuIG5ldyBQcm9taXNlKC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgIHZhciBfcmVmNiA9IF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMihyZXNvbHZlKSB7CiAgICAgICAgdmFyIG1lbnVzLCBhbGxTeXMsIE1hc3RlckRhdGFTeXN0ZW0sIG1lbnU7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIGlmICghKHN0YXRlLmZyb250TWVudXMgJiYgc3RhdGUuZnJvbnRNZW51cy5sZW5ndGggPj0gMSkpIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXNvbHZlKHN0YXRlLmZyb250TWVudXMpOwogICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMjE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICBpZiAoIXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2N1cnJlbnRGcm9udE1lbnVzJykpIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTA7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgbWVudXMgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2N1cnJlbnRGcm9udE1lbnVzJykpOwogICAgICAgICAgICAgIGNvbW1pdCgnbXV0YXRpb25Gcm9udE1lbnVzJywgbWVudXMpOwogICAgICAgICAgICAgIHJlc29sdmUobWVudXMpOwogICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMjE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxMjsKICAgICAgICAgICAgICByZXR1cm4gcG9ydGFsLmdldEZyb250TWVudXNCeUFsaWFzKCdidXNpbmVzc19zeXN0ZW0nKTsKICAgICAgICAgICAgY2FzZSAxMjoKICAgICAgICAgICAgICBfY29udGV4dDIudDAgPSBfY29udGV4dDIuc2VudDsKICAgICAgICAgICAgICBpZiAoX2NvbnRleHQyLnQwKSB7CiAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDE1OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jb250ZXh0Mi50MCA9IFtdOwogICAgICAgICAgICBjYXNlIDE1OgogICAgICAgICAgICAgIGFsbFN5cyA9IF9jb250ZXh0Mi50MDsKICAgICAgICAgICAgICBNYXN0ZXJEYXRhU3lzdGVtID0gYWxsU3lzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uYWxpYXMgPT09ICdNYXN0ZXJEYXRhU3lzdGVtJzsKICAgICAgICAgICAgICB9KSB8fCBbXTsKICAgICAgICAgICAgICBtZW51ID0gTWFzdGVyRGF0YVN5c3RlbS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW4sCiAgICAgICAgICAgICAgICAgIGFsaWFzID0gaXRlbS5hbGlhcywKICAgICAgICAgICAgICAgICAgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhpdGVtLCBfZXhjbHVkZWQyKTsKICAgICAgICAgICAgICAgIHZhciByb3V0ZXJQYXRoID0gYWxpYXMgPT09ICdNYXN0ZXJEYXRhU3lzdGVtJyA/ICdwbGF0TGF5b3V0LycgKyBhbGlhcyA6IGFsaWFzOwogICAgICAgICAgICAgICAgLy8g5Yid5aeL5YyW56ys5LiA57qn5Yir55qEcGF0aEFycgogICAgICAgICAgICAgICAgdmFyIHBhdGhBcnIgPSBbcm91dGVyUGF0aF07CiAgICAgICAgICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBpKSwge30sIHsKICAgICAgICAgICAgICAgICAgYWxpYXM6IGFsaWFzLAogICAgICAgICAgICAgICAgICByb3V0ZXJQYXRoOiAiLyIuY29uY2F0KHJvdXRlclBhdGgpLAogICAgICAgICAgICAgICAgICBwYXRoQXJyOiBwYXRoQXJyLAogICAgICAgICAgICAgICAgICBjaGlsZHJlbjogX3Byb2Nlc3NSb3V0aW5nMihjaGlsZHJlbiwgcGF0aEFycikKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2N1cnJlbnRGcm9udE1lbnVzJywgSlNPTi5zdHJpbmdpZnkobWVudSkpOwogICAgICAgICAgICAgIGNvbW1pdCgnbXV0YXRpb25Gcm9udE1lbnVzJywgbWVudSk7CiAgICAgICAgICAgICAgcmVzb2x2ZShtZW51KTsKICAgICAgICAgICAgY2FzZSAyMToKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlMik7CiAgICAgIH0pKTsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDIpIHsKICAgICAgICByZXR1cm4gX3JlZjYuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgfTsKICAgIH0oKSk7CiAgfSwKICAvLyDlubPlj7DkuJrliqHns7vnu5/oj5zljZUKICBhY3Rpb25QbGF0U3lzdGVtTWVudXM6IGZ1bmN0aW9uIGFjdGlvblBsYXRTeXN0ZW1NZW51cyhfcmVmNykgewogICAgdmFyIGNvbW1pdCA9IF9yZWY3LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmNy5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICB2YXIgX3JlZjggPSBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMocmVzb2x2ZSkgewogICAgICAgIHZhciBtZW51cywgbWVudTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTMkKF9jb250ZXh0MykgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQzLnByZXYgPSBfY29udGV4dDMubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgaWYgKCEoc3RhdGUucGxhdFN5c3RlbU1lbnVzICYmIHN0YXRlLnBsYXRTeXN0ZW1NZW51cy5sZW5ndGggPj0gMSkpIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gNDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXNvbHZlKHN0YXRlLnBsYXRTeXN0ZW1NZW51cyk7CiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxOTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgIGlmICghc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnY3VycmVudFBsYXRTeXN0ZW1NZW51cycpKSB7CiAgICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDEwOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIG1lbnVzID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW50UGxhdFN5c3RlbU1lbnVzJykpOwogICAgICAgICAgICAgIGNvbW1pdCgnbXV0YXRpb25QbGF0U3lzdGVtTWVudXMnLCBtZW51cyk7CiAgICAgICAgICAgICAgcmVzb2x2ZShtZW51cyk7CiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxOTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxMDoKICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDEyOwogICAgICAgICAgICAgIHJldHVybiBwb3J0YWwuZ2V0RnJvbnRNZW51c0J5QWxpYXMoJ2J1c2luZXNzX3N5c3RlbScpOwogICAgICAgICAgICBjYXNlIDEyOgogICAgICAgICAgICAgIF9jb250ZXh0My50MCA9IF9jb250ZXh0My5zZW50OwogICAgICAgICAgICAgIGlmIChfY29udGV4dDMudDApIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMTU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQzLnQwID0gW107CiAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgbWVudSA9IF9jb250ZXh0My50MC5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW4sCiAgICAgICAgICAgICAgICAgIGFsaWFzID0gaXRlbS5hbGlhcywKICAgICAgICAgICAgICAgICAgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhpdGVtLCBfZXhjbHVkZWQzKTsKICAgICAgICAgICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGkpLCB7fSwgewogICAgICAgICAgICAgICAgICBhbGlhczogYWxpYXMKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2N1cnJlbnRQbGF0U3lzdGVtTWVudXMnLCBKU09OLnN0cmluZ2lmeShtZW51KSk7CiAgICAgICAgICAgICAgY29tbWl0KCdtdXRhdGlvblBsYXRTeXN0ZW1NZW51cycsIG1lbnUpOwogICAgICAgICAgICAgIHJlc29sdmUobWVudSk7CiAgICAgICAgICAgIGNhc2UgMTk6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTMpOwogICAgICB9KSk7CiAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gzKSB7CiAgICAgICAgcmV0dXJuIF9yZWY4LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH07CiAgICB9KCkpOwogIH0sCiAgLy8g6am+6am26Iix6I+c5Y2VCiAgYWN0aW9uQ29ja3BpdE1lbnVzOiBmdW5jdGlvbiBhY3Rpb25Db2NrcGl0TWVudXMoX3JlZjkpIHsKICAgIHZhciBjb21taXQgPSBfcmVmOS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjkuc3RhdGU7CiAgICByZXR1cm4gbmV3IFByb21pc2UoLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgdmFyIF9yZWYxMCA9IF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNChyZXNvbHZlKSB7CiAgICAgICAgdmFyIG1lbnVzLCBtZW51OwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlNCQoX2NvbnRleHQ0KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDQucHJldiA9IF9jb250ZXh0NC5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBpZiAoIShzdGF0ZS5jb2NrcGl0TWVudXMgJiYgc3RhdGUuY29ja3BpdE1lbnVzLmxlbmd0aCA+PSAxKSkgewogICAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSA0OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJlc29sdmUoc3RhdGUuY29ja3BpdE1lbnVzKTsKICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDE5OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW50Q29ja3BpdE1lbnVzJykpIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gMTA7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgbWVudXMgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2N1cnJlbnRDb2NrcGl0TWVudXMnKSk7CiAgICAgICAgICAgICAgY29tbWl0KCdtdXRhdGlvbkNvY2twaXRNZW51cycsIG1lbnVzKTsKICAgICAgICAgICAgICByZXNvbHZlKG1lbnVzKTsKICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDE5OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDEwOgogICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gMTI7CiAgICAgICAgICAgICAgcmV0dXJuIHBvcnRhbC5nZXRGcm9udE1lbnVzQnlBbGlhcygnY29ja3BpdCcpOwogICAgICAgICAgICBjYXNlIDEyOgogICAgICAgICAgICAgIF9jb250ZXh0NC50MCA9IF9jb250ZXh0NC5zZW50OwogICAgICAgICAgICAgIGlmIChfY29udGV4dDQudDApIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gMTU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQ0LnQwID0gW107CiAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgbWVudSA9IF9jb250ZXh0NC50MDsKICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdjdXJyZW50Q29ja3BpdE1lbnVzJywgSlNPTi5zdHJpbmdpZnkobWVudSkpOwogICAgICAgICAgICAgIGNvbW1pdCgnbXV0YXRpb25Db2NrcGl0TWVudXMnLCBtZW51KTsKICAgICAgICAgICAgICByZXNvbHZlKG1lbnUpOwogICAgICAgICAgICBjYXNlIDE5OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU0KTsKICAgICAgfSkpOwogICAgICByZXR1cm4gZnVuY3Rpb24gKF94NCkgewogICAgICAgIHJldHVybiBfcmVmMTAuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgfTsKICAgIH0oKSk7CiAgfSwKICAvLyDmn6Xor6LpnZnmgIHotYTmupDnm67lvZUKICBnZXRTdGF0aWNNZW51czogZnVuY3Rpb24gZ2V0U3RhdGljTWVudXMoX3JlZjExKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjExLmNvbW1pdDsKICAgIHBvcnRhbC5nZXRNZW51cyhmdW5jdGlvbiAobWVudXMpIHsKICAgICAgY29tbWl0KCdhcHBlbmRNZW51cycsIG1lbnVzKTsKICAgIH0pOwogIH0sCiAgLy8g5p+l6K+i5rWB56iL5Lit5b+D5LiL55qE6LWE5rqQ55uu5b2VCiAgZ2V0U3luY01lbnVzOiBmdW5jdGlvbiBnZXRTeW5jTWVudXMoX3JlZjEyLCBpc0xlYWRlcikgewogICAgdmFyIGNvbW1pdCA9IF9yZWYxMi5jb21taXQ7CiAgICBwb3J0YWwuZ2V0U3ViTWVudXMoJ2Zyb250X21lbnUnLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgcHJvY2Vzcy5nZXRTZWNyZXRhcnlCeVVzZXJJZChmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgdmFyIGlzTGVhZGVyID0gZmFsc2U7CiAgICAgICAgaWYgKHJlcyAmJiByZXMubGVuZ3RoID09IDApIHsKICAgICAgICAgIC8v5rKh5pyJ6aKG5a+8CiAgICAgICAgICBpc0xlYWRlciA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHJlc3BvbnNlLmlzTGVhZGVyID0gaXNMZWFkZXI7CiAgICAgICAgY29tbWl0KCdzZXRTeW5jTWVudXMnLCByZXNwb25zZSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+iOt+WPlua1geeoi+S4reW/g+S4i+eahOi1hOa6kOebruW9lQogIGdldERlZmF1bHRNZW51czogZnVuY3Rpb24gZ2V0RGVmYXVsdE1lbnVzKF9yZWYxMykgewogICAgdmFyIGNvbW1pdCA9IF9yZWYxMy5jb21taXQ7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICBwb3J0YWwuZ2V0U3ViTWVudXMoJ2Zyb250X21lbnUnLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBwcm9jZXNzLmdldFNlY3JldGFyeUJ5VXNlcklkKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgIHZhciBpc0xlYWRlciA9IGZhbHNlOwogICAgICAgICAgaWYgKHJlcyAmJiByZXMubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgLy/msqHmnInpooblr7wKICAgICAgICAgICAgaXNMZWFkZXIgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmVzcG9uc2UuaXNMZWFkZXIgPSBpc0xlYWRlcjsKICAgICAgICAgIGNvbW1pdCgnc2V0U3luY01lbnVzJywgcmVzcG9uc2UpOwogICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy8g5b2T5YmN55So5oi35o6l5Y+j5p2D6ZmQCiAgZ2V0Q3VycmVudFVzZXJNZXRob2RBdXRoOiBmdW5jdGlvbiBnZXRDdXJyZW50VXNlck1ldGhvZEF1dGgoX3JlZjE0KSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjE0LmNvbW1pdDsKICAgIHBvcnRhbC5nZXRDdXJyZW50VXNlck1ldGhvZEF1dGgoZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5hbGxNZXRob2QgPSByZXNwb25zZS5kYXRhLmFsbE1ldGhvZDsKICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLm1ldGhvZEF1dGggPSByZXNwb25zZS5kYXRhLmN1clVzZXJNZXRob2Q7CiAgICB9KTsKICB9LAogIC8vIOW9k+WJjeiPnOWNlQogIGdldEFsbG1lbnVzOiBmdW5jdGlvbiBnZXRBbGxtZW51cyhfcmVmMTUsIG1lbnUpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMTUuY29tbWl0OwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcmVzb2x2ZShzdGF0ZS5hbGwpOwogICAgfSk7CiAgfSwKICAvLyDlvZPliY3oj5zljZUKICBnZXRDdXJyZW50TWVudTogZnVuY3Rpb24gZ2V0Q3VycmVudE1lbnUoX3JlZjE2LCBtZW51KSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjE2LmNvbW1pdDsKICAgIGNvbW1pdCgnc2V0Q3VycmVudE1lbnUnLCBtZW51KTsKICB9LAogIC8vIOi/veWKoOS4gOS4quebruW9leWIsOebruW9leiPnOWNleS4rQogIGFwcGVuZDJtZW51czogZnVuY3Rpb24gYXBwZW5kMm1lbnVzKF9yZWYxNywgbWVudSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYxNy5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjE3LnN0YXRlOwogICAgY29tbWl0KCdhcHBlbmRNZW51cycsIFttZW51XSk7CiAgfSwKICAvLyDkuLTml7borr7nva7kuIDkuKrkv67mlLnov4fnmoTnm67lvZXoj5zljZUKICBzZXRUZW1wbGF0ZU1lbnVzOiBmdW5jdGlvbiBzZXRUZW1wbGF0ZU1lbnVzKF9yZWYxOCwgbWVudSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYxOC5jb21taXQ7CiAgICBjb21taXQoJ3NldE1lbnVzJywgbWVudSk7CiAgICBjb21taXQoJ3NldFJlc2lkdWFsJywgdHJ1ZSk7CiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgLy8gMC4156eS5ZCO6YeN572u5omL5Yqo5L+u5pS555uu5b2V5pWw5o2u55qE5qCH6K6wCiAgICAgIGNvbW1pdCgnc2V0UmVzaWR1YWwnLCBmYWxzZSk7CiAgICB9LCA1MDApOwogIH0sCiAgLy8g5Li05pe26K6+572u5LiA5Liq5L+u5pS56L+H55qE55uu5b2V6I+c5Y2VCiAgc2V0Q29weU1lbnVzOiBmdW5jdGlvbiBzZXRDb3B5TWVudXMoX3JlZjE5LCBtZW51KSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjE5LmNvbW1pdDsKICAgIGNvbW1pdCgnc2V0TWVudXMnLCBtZW51KTsKICB9LAogIC8v5pu05paw5q+P6aG15LiL5ouJ5pi+56S65pWw5o2uCiAgc2V0UGFnaW5hdGlvblNpemU6IGZ1bmN0aW9uIHNldFBhZ2luYXRpb25TaXplKF9yZWYyMCwgc2l6ZSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYyMC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjIwLnN0YXRlOwogICAgY29tbWl0KCdzZXRQYWdpbmF0aW9uU2l6ZScsIHNpemUpOwogIH0sCiAgLy/mm7TmlrDnrKzlh6DpobUKICBzZXRQYWdpbmF0aW9uUGFnZU51bTogZnVuY3Rpb24gc2V0UGFnaW5hdGlvblBhZ2VOdW0oX3JlZjIxLCBjdXJyZW50UGFnZSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYyMS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjIxLnN0YXRlOwogICAgY29tbWl0KCdzZXRQYWdpbmF0aW9uUGFnZU51bScsIGN1cnJlbnRQYWdlKTsKICB9LAogIGdldE5ld3NQYWdpbmF0aW9uTGlzdDogZnVuY3Rpb24gZ2V0TmV3c1BhZ2luYXRpb25MaXN0KF9yZWYyMiwgcGFnaW5hdGlvbikgewogICAgdmFyIGNvbW1pdCA9IF9yZWYyMi5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjIyLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcG9ydGFsLmdldE5ld3NQYWdpbmF0aW9uTGlzdChwYWdpbmF0aW9uLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBjb21taXQoJ3NldFJvd3MnLCByZXNwb25zZS5kYXRhLnJvd3MpOwogICAgICAgIGNvbW1pdCgnc2V0VG90YWwnLCByZXNwb25zZS5kYXRhLnRvdGFsKTsKICAgICAgICB2YXIgcGFnZUJlYW4gPSB7CiAgICAgICAgICAncGFnZSc6IHJlc3BvbnNlLmRhdGEucGFnZSwKICAgICAgICAgICdwYWdlU2l6ZSc6IHJlc3BvbnNlLmRhdGEucGFnZVNpemUsCiAgICAgICAgICAnc2hvd1RvdGFsJzogJ3RydWUnCiAgICAgICAgfTsKICAgICAgICBjb21taXQoJ3NldFBhZ2luYXRpb24nLCBwYWdlQmVhbik7CiAgICAgICAgcmVzb2x2ZSgpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/pmYTku7blnKjnur/pooTop4gKICBvbmxpbmVQcmV2aWV3OiBmdW5jdGlvbiBvbmxpbmVQcmV2aWV3KF9yZWYyMywgaWQpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMjMuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYyMy5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHBvcnRhbC5vbmxpbmVQcmV2aWV3KGlkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/pmYTku7bkuIvovb0KICBkb3dubG9hZEZpbGU6IGZ1bmN0aW9uIGRvd25sb2FkRmlsZShfcmVmMjQsIGlkKSB7CiAgICB2YXIgY29tbWl0ID0gX3JlZjI0LmNvbW1pdCwKICAgICAgc3RhdGUgPSBfcmVmMjQuc3RhdGU7CiAgICBwb3J0YWwuZG93bmxvYWRGaWxlKGlkKTsKICB9LAogIGRvd25sb2FkSW1nOiBmdW5jdGlvbiBkb3dubG9hZEltZyhfcmVmMjUsIHVybCkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYyNS5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjI1LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcG9ydGFsLmRvd25sb2FkSW1nKHVybCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+iOt+WPluimgeWPguWKoOeahOS8muiuruWIl+ihqAogIGdldE1lZXRpbmdQYWdpbmF0aW9uOiBmdW5jdGlvbiBnZXRNZWV0aW5nUGFnaW5hdGlvbihfcmVmMjYsIHBhZ2luYXRpb24pIHsKICAgIHZhciBjb21taXQgPSBfcmVmMjYuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYyNi5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHBvcnRhbC5nZXRNZWV0aW5nUGFnaW5hdGlvbihwYWdpbmF0aW9uLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBjb21taXQoJ3NldE1lZXRpbmcnLCByZXNwb25zZS5kYXRhLnJvd3MpOyAvL+S8muiuruaVsOaNrgogICAgICAgIGNvbW1pdCgnc2V0VG90YWwnLCByZXNwb25zZS5kYXRhLnRvdGFsKTsgLy/mgLvmlbDmja7mnaHmlbAKICAgICAgICB2YXIgcGFnZUJlYW4gPSB7CiAgICAgICAgICAncGFnZSc6IHJlc3BvbnNlLmRhdGEucGFnZSwKICAgICAgICAgICdwYWdlU2l6ZSc6IHJlc3BvbnNlLmRhdGEucGFnZVNpemUsCiAgICAgICAgICAnc2hvd1RvdGFsJzogJ3RydWUnCiAgICAgICAgfTsgLy/mjqXlj6Pmlrnms5Xov5Tlm57nmoRwYWdlQmVhbgogICAgICAgIGNvbW1pdCgnc2V0UGFnaW5hdGlvbicsIHBhZ2VCZWFuKTsgLy/mmL7npLrnrKzlh6DpobXvvIzmr4/pobXmmL7npLrlpJrlsJHmnaEKICAgICAgICByZXNvbHZlKCk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+iOt+WPluaVsOaNruWtl+WFuAogIGdldEJ5VHlwZUtleUZvckNvbUJvOiBmdW5jdGlvbiBnZXRCeVR5cGVLZXlGb3JDb21CbyhfcmVmMjcsIGRpY0tleSkgewogICAgdmFyIGNvbW1pdCA9IF9yZWYyNy5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjI3LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcG9ydGFsLmdldEJ5VHlwZUtleUZvckNvbUJvKGRpY0tleSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+iOt+WPluS4i+S4gOS4qua1geawtOWPtwogIGdldE5leHRJZEJ5QWxpYXM6IGZ1bmN0aW9uIGdldE5leHRJZEJ5QWxpYXMoX3JlZjI4LCBhbGlhcykgewogICAgdmFyIGNvbW1pdCA9IF9yZWYyOC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjI4LnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcG9ydGFsLmdldE5leHRJZEJ5QWxpYXMoYWxpYXMsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHJlc29sdmUocmVzcG9uc2UpOwogICAgICB9KTsKICAgIH0pOwogIH0sCiAgLy/ojrflj5bpppbpobXluIPlsYAKICB2dWVGcm9udEhvbWU6IGZ1bmN0aW9uIHZ1ZUZyb250SG9tZShfcmVmMjkpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMjkuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYyOS5zdGF0ZTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgIHBvcnRhbC52dWVGcm9udEhvbWUoZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSwKICAvL+iOt+WPlummlumhteW4g+WxgAogIGdldENvbHVtbkJ5QWxpYXM6IGZ1bmN0aW9uIGdldENvbHVtbkJ5QWxpYXMoX3JlZjMwLCBhbGlhcykgewogICAgdmFyIGNvbW1pdCA9IF9yZWYzMC5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjMwLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcG9ydGFsLmdldENvbHVtbkJ5QWxpYXMoYWxpYXMsIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHJlc29sdmUocmVzcG9uc2UpOwogICAgICAgIGNvbW1pdCgndXBkYXRlQ29sdW1uRGF0YScsIHJlc3BvbnNlKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8vIOaJuemHj+iOt+WPlummlumhteW4g+WxgO+8iOivt+axguWPguaVsOi/mOaYr+mAkOS4quagj+ebru+8jOS9huaYr+S4gOWumuaXtumXtOmXtOmalOeahOivt+axguS8muWQiOW5tuS4uuS4gOasoe+8iQogIGdldENvbHVtbkJ5QWxpYXNCYXRjaDogZnVuY3Rpb24gZ2V0Q29sdW1uQnlBbGlhc0JhdGNoKF9yZWYzMSwgYWxpYXMpIHsKICAgIHZhciBjb21taXQgPSBfcmVmMzEuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYzMS5zdGF0ZSwKICAgICAgZ2V0dGVycyA9IF9yZWYzMS5nZXR0ZXJzOwogICAgLy8gMS7lpoLmnpzlvZPliY3moI/nm67mlbDmja7kuK3lt7Lnu4/mnInlr7nlupTnmoTlgLzkuobvvIznm7TmjqXov5Tlm57jgIIKICAgIGlmIChnZXR0ZXJzLmhhc0NvbHVtbkRhdGFXaXRoQWxpYXMoYWxpYXMpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIDIu5piv5ZCm5q2j5Zyo6L+b6KGM6K+35rGC5ZCI5bm277ybCiAgICBpZiAoc3RhdGUuY29sdW1uUXVlcnlNZXJnaW5nKSB7CiAgICAgIC8vICgxKS7lj5bmtojlvZPliY3lgJLorqHml7bvvJsKICAgICAgY2xlYXJUaW1lb3V0KHN0YXRlLmNvbHVtblF1ZXJ5TWVyZ2luZyk7CiAgICAgIC8vICgyKS7ph43nva7lvZPliY3lgJLorqHml7blj5bmtojmoIforrDkvY3vvJsKICAgICAgY29tbWl0KCdzZXRDb2x1bW5RdWVyeU1lcmdpbmcnLCBudWxsKTsKICAgIH0KICAgIC8vIDMu5p6E5bu65LiA5Liq6K+35rGC5YCS6K6h5pe277yI6buY6K6k5Lik5Liq6K+35rGC55u45beuNTDmr6vnp5LlhoXkvJrlkIjlubbkuLrkuIDkuKror7fmsYLvvInvvJsKICAgIHZhciB0aW1lb3V0Q2FuY2VsID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgIC8vIDQu5YCS6K6h5pe257uT5p2f77yM55yf5q2j5Y+R6YCB6K+35rGC77ybCiAgICAgIHBvcnRhbC5iYXRjaEdldENvbHVtbkJ5QWxpYXNlcyhzdGF0ZS5jb2x1bW5BbGlhc0FyeS5qb2luKCcsJyksIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIC8vIDUu5pu05paw5qCP55uu5pWw5o2u5YiwdnVleOeahHN0YXRl5Lit44CCCiAgICAgICAgY29tbWl0KCdzZXRDb2x1bW5EYXRhJywgcmVzcG9uc2UpOwogICAgICB9KTsKICAgICAgLy8g5riF56m65qCP55uu6K+35rGC5p+l6K+i5Yir5ZCN5pWw57uECiAgICAgIGNvbW1pdCgnY2xlYXJDb2x1bW5BbGlhc0FyeScpOwogICAgICAvLyDph43nva7lgJLorqHml7blj5bmtojmoIforrDkvY0KICAgICAgY29tbWl0KCdzZXRDb2x1bW5RdWVyeU1lcmdpbmcnLCBudWxsKTsKICAgIH0sIDUwKTsKICAgIC8vIOa3u+WKoOagj+ebruivt+axguafpeivouWIq+WQjeWIsOaVsOe7hAogICAgY29tbWl0KCdhZGRDb2x1bW5BbGlhcycsIGFsaWFzKTsKICAgIC8vIOabtOaWsOWAkuiuoeaXtuWPlua2iOagh+iusOS9jQogICAgY29tbWl0KCdzZXRDb2x1bW5RdWVyeU1lcmdpbmcnLCB0aW1lb3V0Q2FuY2VsKTsKICB9LAogIC8v6I635Y+W5qCP55uu5pWw5o2uCiAgZ2V0Q29sdW1uRGF0YTogZnVuY3Rpb24gZ2V0Q29sdW1uRGF0YShfcmVmMzIsIGNvbHVtbikgewogICAgdmFyIGNvbW1pdCA9IF9yZWYzMi5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjMyLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcG9ydGFsLmdldENvbHVtbkRhdGEoY29sdW1uLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8v5pu05paw6ZmE5Lu255qE5omp5bGV5bGe5oCnCiAgdXBkYXRlRmlsZUV4dHJhUHJvcDogZnVuY3Rpb24gdXBkYXRlRmlsZUV4dHJhUHJvcChfcmVmMzMsIGNvbHVtbikgewogICAgdmFyIGNvbW1pdCA9IF9yZWYzMy5jb21taXQsCiAgICAgIHN0YXRlID0gX3JlZjMzLnN0YXRlOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgcG9ydGFsLnVwZGF0ZUZpbGVFeHRyYVByb3AoY29sdW1uLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIGNsZWFyTWVudXM6IGZ1bmN0aW9uIGNsZWFyTWVudXMoX3JlZjM0LCBjb2x1bW4pIHsKICAgIHZhciBjb21taXQgPSBfcmVmMzQuY29tbWl0LAogICAgICBzdGF0ZSA9IF9yZWYzNC5zdGF0ZTsKICAgIGNvbW1pdCgnY2xlYXJNZW51cycpOwogICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRGcm9udE1lbnVzJyk7CiAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnY3VycmVudEdhdGV3YXlNZW51cycpOwogICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRQbGF0U3lzdGVtTWVudXMnKTsKICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdjdXJyZW50Q29ja3BpdE1lbnVzJyk7CiAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZGljdF9kYXRhJyk7CiAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnYWxsTWV0aG9kJyk7CiAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnbWV0aG9kQXV0aCcpOwogIH0KfTsKdmFyIG11dGF0aW9ucyA9IHsKICBzZXRNZW51czogZnVuY3Rpb24gc2V0TWVudXMoc3RhdGUsIG1lbnVzKSB7CiAgICBzdGF0ZS5hbGwgPSBtZW51czsKICB9LAogIGNsZWFyTWVudXM6IGZ1bmN0aW9uIGNsZWFyTWVudXMoKSB7CiAgICBzdGF0ZS5mcm9udE1lbnVzID0gW107CiAgICBzdGF0ZS5zeXNNZW51cyA9IFtdOwogIH0sCiAgc2V0UmVzaWR1YWw6IGZ1bmN0aW9uIHNldFJlc2lkdWFsKHN0YXRlLCB2YWwpIHsKICAgIHN0YXRlLnJlc2lkdWFsID0gdmFsOwogIH0sCiAgYXBwZW5kTWVudXM6IGZ1bmN0aW9uIGFwcGVuZE1lbnVzKHN0YXRlLCBtZW51cykgewogICAgbWVudXMuZm9yRWFjaChmdW5jdGlvbiAobWVudSkgewogICAgICBpZiAoIXN0YXRlLmFsbC5zb21lKGZ1bmN0aW9uIChtKSB7CiAgICAgICAgcmV0dXJuIG0uYWxpYXMgPT09IG1lbnUuYWxpYXM7CiAgICAgIH0pKSB7CiAgICAgICAgc3RhdGUuYWxsLnB1c2gobWVudSk7CiAgICAgIH0KICAgIH0pOwogICAgc3RhdGUuYWxsLnNvcnQoZnVuY3Rpb24gKG0sIG4pIHsKICAgICAgcmV0dXJuIG0uaWQgLSBuLmlkOwogICAgfSk7CiAgfSwKICBzZXRTeW5jTWVudXM6IGZ1bmN0aW9uIHNldFN5bmNNZW51cyhzdGF0ZSwgcmVzcG9uc2UpIHsKICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEudmFsdWUgJiYgcmVzcG9uc2UuZGF0YS52YWx1ZS5sZW5ndGggPiAwKSB7CiAgICAgIHZhciBtZW51cyA9IHJlc3BvbnNlLmRhdGEudmFsdWU7CiAgICAgIG1lbnVzLmZvckVhY2goZnVuY3Rpb24gKG1lbnUpIHsKICAgICAgICBpZiAoIXN0YXRlLmFsbC5zb21lKGZ1bmN0aW9uIChtKSB7CiAgICAgICAgICByZXR1cm4gbS5jb2RlID09PSBtZW51LmFsaWFzOwogICAgICAgIH0pKSB7CiAgICAgICAgICBzdGF0ZS5hbGwucHVzaCh7CiAgICAgICAgICAgIGlkOiBtZW51LmlkLAogICAgICAgICAgICBjb2RlOiBtZW51LmFsaWFzLAogICAgICAgICAgICBhbGlhczogbWVudS5hbGlhcywKICAgICAgICAgICAgcGF0aDogbWVudS5tZW51VXJsLAogICAgICAgICAgICBuYW1lOiBtZW51Lm5hbWUsCiAgICAgICAgICAgIHNuOiBtZW51LnNuCiAgICAgICAgICB9KTsKICAgICAgICAgIC8v5Yik5pat5piv5ZCm5piv5rWB56iL5Lit5b+DCiAgICAgICAgICBpZiAobWVudS5hbGlhcyA9PSAndi1mbG93JykgewogICAgICAgICAgICBpZiAocmVzcG9uc2UuaXNMZWFkZXIpIHsKICAgICAgICAgICAgICAvL+ayoeaciemihuWvvAogICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVudS5jaGlsZHJlbi5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKG1lbnUuY2hpbGRyZW5baV0uYWxpYXMgPT0gJ3YtbGVhZGVyJykgewogICAgICAgICAgICAgICAgICBtZW51LmNoaWxkcmVuLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHN0YXRlLm1lbnVNYXBzW21lbnUuYWxpYXNdID0gbWVudS5jaGlsZHJlbjsKICAgICAgICAgICAgfSBlbHNlIGlmICghcmVzcG9uc2UuaXNMZWFkZXIpIHsKICAgICAgICAgICAgICAvL+aciemihuWvvAogICAgICAgICAgICAgIHN0YXRlLm1lbnVNYXBzW21lbnUuYWxpYXNdID0gbWVudS5jaGlsZHJlbjsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUubWVudU1hcHNbbWVudS5hbGlhc10gPSBtZW51LmNoaWxkcmVuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyB9CiAgICAgIH0pOwogICAgfQogIH0sCiAgc2V0Q3VycmVudE1lbnU6IGZ1bmN0aW9uIHNldEN1cnJlbnRNZW51KHN0YXRlLCByZXNwb25zZSkgewogICAgc3RhdGUuY3VycmVudE1lbnUgPSByZXNwb25zZTsKICB9LAogIGdldEFsbG1lbnVzOiBmdW5jdGlvbiBnZXRBbGxtZW51cyhzdGF0ZSwgcmVzcG9uc2UpIHsKICAgIHJldHVybiBzdGF0ZS5hbGw7CiAgfSwKICBzZXRQYWdpbmF0aW9uOiBmdW5jdGlvbiBzZXRQYWdpbmF0aW9uKHN0YXRlLCBwYWdpbmF0aW9uKSB7CiAgICBzdGF0ZS5wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjsKICB9LAogIHNldFBhZ2luYXRpb25TaXplOiBmdW5jdGlvbiBzZXRQYWdpbmF0aW9uU2l6ZShzdGF0ZSwgc2l6ZSkgewogICAgc3RhdGUucGFnaW5hdGlvbi5wYWdlU2l6ZSA9IHNpemU7CiAgfSwKICBzZXRQYWdpbmF0aW9uUGFnZU51bTogZnVuY3Rpb24gc2V0UGFnaW5hdGlvblBhZ2VOdW0oc3RhdGUsIGN1cnJlbnRQYWdlKSB7CiAgICBzdGF0ZS5wYWdpbmF0aW9uLnBhZ2UgPSBjdXJyZW50UGFnZTsKICB9LAogIHNldFJvd3M6IGZ1bmN0aW9uIHNldFJvd3Moc3RhdGUsIHJvd3MpIHsKICAgIHN0YXRlLnJvd3MgPSByb3dzOwogIH0sCiAgc2V0Tm90aWNlOiBmdW5jdGlvbiBzZXROb3RpY2Uoc3RhdGUsIG5vdGljZSkgewogICAgc3RhdGUubm90aWNlID0gbm90aWNlOwogIH0sCiAgc2V0VG90YWw6IGZ1bmN0aW9uIHNldFRvdGFsKHN0YXRlLCB0b3RhbCkgewogICAgc3RhdGUudG90YWwgPSB0b3RhbDsKICB9LAogIHNldEZpbGVzRGF0YTogZnVuY3Rpb24gc2V0RmlsZXNEYXRhKHN0YXRlLCBmaWxlc0RhdGEpIHsKICAgIHN0YXRlLmZpbGVzRGF0YSA9IGZpbGVzRGF0YTsKICB9LAogIHNldE1lZXRpbmc6IGZ1bmN0aW9uIHNldE1lZXRpbmcoc3RhdGUsIG1lZXRpbmcpIHsKICAgIHN0YXRlLm1lZXRpbmcgPSBtZWV0aW5nOwogIH0sCiAgYWRkQ29sdW1uQWxpYXM6IGZ1bmN0aW9uIGFkZENvbHVtbkFsaWFzKHN0YXRlLCBhbGlhcykgewogICAgc3RhdGUuY29sdW1uQWxpYXNBcnkucHVzaChhbGlhcyk7CiAgfSwKICBjbGVhckNvbHVtbkFsaWFzQXJ5OiBmdW5jdGlvbiBjbGVhckNvbHVtbkFsaWFzQXJ5KHN0YXRlKSB7CiAgICBzdGF0ZS5jb2x1bW5BbGlhc0FyeSA9IFtdOwogIH0sCiAgc2V0Q29sdW1uUXVlcnlNZXJnaW5nOiBmdW5jdGlvbiBzZXRDb2x1bW5RdWVyeU1lcmdpbmcoc3RhdGUsIHZhbCkgewogICAgc3RhdGUuY29sdW1uUXVlcnlNZXJnaW5nID0gdmFsOwogIH0sCiAgc2V0Q29sdW1uRGF0YTogZnVuY3Rpb24gc2V0Q29sdW1uRGF0YShzdGF0ZSwgZGF0YSkgewogICAgdmFyIF9jb2xEYXRhID0gc3RhdGUuY29sdW1uRGF0YSB8fCB7fSwKICAgICAgYWxpYXNBcnkgPSBzdGF0ZS5jb2x1bW5EYXRhTG9hZGVkQWxpYXNlcyA/IHN0YXRlLmNvbHVtbkRhdGFMb2FkZWRBbGlhc2VzLnNwbGl0KCcsJykgOiBbXTsKICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkgewogICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGQpIHsKICAgICAgICBhbGlhc0FyeS5wdXNoKGQuYWxpYXMpOwogICAgICAgIF9jb2xEYXRhW2QuYWxpYXNdID0gZDsKICAgICAgfSk7CiAgICB9CiAgICBzdGF0ZS5jb2x1bW5EYXRhID0gX2NvbERhdGE7CiAgICBzdGF0ZS5jb2x1bW5EYXRhTG9hZGVkQWxpYXNlcyA9IGFsaWFzQXJ5LmpvaW4oJywnKTsKICB9LAogIHVwZGF0ZUNvbHVtbkRhdGE6IGZ1bmN0aW9uIHVwZGF0ZUNvbHVtbkRhdGEoc3RhdGUsIGRhdGEpIHsKICAgIGlmIChkYXRhICYmIGRhdGEuYWxpYXMpIHsKICAgICAgc3RhdGUuY29sdW1uRGF0YVtkYXRhLmFsaWFzXSA9IGRhdGE7CiAgICB9CiAgfSwKICAvLyDkuJrliqHns7vnu5/oj5zljZXotYvlgLwKICBtdXRhdGlvblBsYXRTeXN0ZW1NZW51czogZnVuY3Rpb24gbXV0YXRpb25QbGF0U3lzdGVtTWVudXMoc3RhdGUsIHBsYXRTeXN0ZW1NZW51cykgewogICAgc3RhdGUucGxhdFN5c3RlbU1lbnVzID0gcGxhdFN5c3RlbU1lbnVzOwogIH0sCiAgLy8g6Zeo5oi36I+c5Y2V6LWL5YC8CiAgbXV0YXRpb25HYXRld2F5TWVudXM6IGZ1bmN0aW9uIG11dGF0aW9uR2F0ZXdheU1lbnVzKHN0YXRlLCBnYXRld2F5TWVudXMpIHsKICAgIHN0YXRlLmdhdGV3YXlNZW51cyA9IGdhdGV3YXlNZW51czsKICB9LAogIC8vIOWJjeWPsOiPnOWNlei1i+WAvAogIG11dGF0aW9uRnJvbnRNZW51czogZnVuY3Rpb24gbXV0YXRpb25Gcm9udE1lbnVzKHN0YXRlLCBmcm9udE1lbnVzKSB7CiAgICBzdGF0ZS5mcm9udE1lbnVzID0gZnJvbnRNZW51czsKICB9LAogIC8vIOmpvumptuiIsQogIG11dGF0aW9uQ29ja3BpdE1lbnVzOiBmdW5jdGlvbiBtdXRhdGlvbkNvY2twaXRNZW51cyhzdGF0ZSwgY29ja3BpdE1lbnVzKSB7CiAgICBzdGF0ZS5jb2NrcGl0TWVudXMgPSBjb2NrcGl0TWVudXM7CiAgfSwKICAvLyDlkI7lj7Doj5zljZXotYvlgLwKICBtdXRhdGlvblN5c01lbnVzOiBmdW5jdGlvbiBtdXRhdGlvblN5c01lbnVzKHN0YXRlLCBzeXNNZW51cykgewogICAgc3RhdGUuc3lzTWVudXMgPSBzeXNNZW51czsKICB9LAogIC8vIOWQjuWPsOinkuiJsuiPnOWNlei1i+WAvAogIG11dGF0aW9uUm9sZU1lbnVzOiBmdW5jdGlvbiBtdXRhdGlvblJvbGVNZW51cyhzdGF0ZSwgcm9sZU1lbnVzKSB7CiAgICBzdGF0ZS5yb2xlTWVudXMgPSByb2xlTWVudXM7CiAgfQp9OwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZXNwYWNlZDogdHJ1ZSwKICBzdGF0ZTogc3RhdGUsCiAgZ2V0dGVyczogZ2V0dGVycywKICBhY3Rpb25zOiBhY3Rpb25zLAogIG11dGF0aW9uczogbXV0YXRpb25zCn07"},null]}