{"remainingRequest":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\eslint-loader\\index.js??ref--13-0!D:\\jenkins\\workspace\\ljzc-fvue\\src\\directive.js","dependencies":[{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\src\\directive.js","mtime":1705040076977},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\babel.config.js","mtime":1701311296006},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\eslint-loader\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9sanpjLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50ZXN0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiOwppbXBvcnQgVnVlIGZyb20gInZ1ZSI7CmltcG9ydCB1dGlscyBmcm9tICJAL2hvdGVudC11aS11dGlsLmpzIjsKaW1wb3J0IEZvcm1NYXRoIGZyb20gIkAvbWF0aC5qcyI7CmltcG9ydCBkaWFsb2cgZnJvbSAiQC9hcGkvZGlhbG9nQXBpLmpzIjsKLy8gaW1wb3J0IEN1c3RvbVF1ZXJ5IGZyb20gIkAvY29tcG9uZW50cy9laXBDb250cm9sL2J1cy9DdXN0b21RdWVyeS5qcyI7CmltcG9ydCBfIGZyb20gImxvZGFzaCI7CmltcG9ydCByZXEgZnJvbSAiQC9yZXF1ZXN0LmpzIjsKaW1wb3J0IGFwcCBmcm9tICJAL21haW4uanMiOwppbXBvcnQgJCBmcm9tICdqcXVlcnknOwoKLy8g6KGo5Y2VdHLkuK3moLnmja7pmpDol4/lrZfmrrXliqjmgIHlkIjlubbljZXlhYPmoLznmoTmjIfku6QKVnVlLmRpcmVjdGl2ZSgncGlueWluJywgewogIC8vIOaMh+S7pOeahOWumuS5iQogIGNvbXBvbmVudFVwZGF0ZWQ6IGZ1bmN0aW9uIGNvbXBvbmVudFVwZGF0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICB2YXIgY29udGV4dCA9IHZub2RlLmNvbnRleHQ7CiAgICAvLyDpmLLmipYKICAgIHZhciBkZWJvdW5jZUdldFBpbnlpbiA9IF8uZGVib3VuY2UoZnVuY3Rpb24gKG5ld1ZhbCkgewogICAgICAvLyBkaXNhYmxlZCDmiJbogIUgcmVhZG9ubHkg5pe2IOS4jemcgOimgeivt+axggogICAgICBpZiAoZWwuX192dWVfXy5kaXNhYmxlZCB8fCBlbC5fX3Z1ZV9fLnJlYWRvbmx5KSByZXR1cm47CiAgICAgIHJlcS5yZXF1ZXN0KHsKICAgICAgICB1cmw6ICIiLmNvbmNhdCh3aW5kb3cuY29udGV4dC51YywgIi9iYXNlL3Rvb2xzL3YxL2dldFBpbnlpbiIpLAogICAgICAgIG1ldGhvZDogIkdFVCIsCiAgICAgICAgcGFyYW1zOiB7CiAgICAgICAgICBjaGluZXNlOiBuZXdWYWwsCiAgICAgICAgICB0eXBlOiAiIi5jb25jYXQoYmluZGluZy5tb2RpZmllcnMuZnVsbCA/IDEgOiAwKQogICAgICAgIH0KICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXRlKSB7CiAgICAgICAgICB2YXIgbW9kZWxFeHAgPSB2bm9kZS5kYXRhLm1vZGVsLmV4cHJlc3Npb24ucmVwbGFjZSgvXFtcdysuP1wkXHcrXF0vZywgIlsiICsgYmluZGluZy5hcmcgKyAiXSIpOwogICAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgoY29udGV4dCwgbW9kZWxFeHAsIHJlcy5kYXRhLnZhbHVlKTsKICAgICAgICAgIGFwcC4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICBhcHAuJHZhbGlkYXRvci52YWxpZGF0ZSgpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHt9KTsKICAgIH0sIDMwMCk7CiAgICBpZiAoYmluZGluZy52YWx1ZSAmJiBiaW5kaW5nLnZhbHVlICE9IGJpbmRpbmcub2xkVmFsdWUpIHsKICAgICAgZGVib3VuY2VHZXRQaW55aW4oYmluZGluZy52YWx1ZSk7CiAgICB9CgogICAgLy8gY29udGV4dC4kd2F0Y2god2F0Y2hFeHAoKSwgZnVuY3Rpb24gKG5ld1ZhbCwgb2xkVmFsKSB7CiAgICAvLyAJaWYgKG5ld1ZhbCAmJiBuZXdWYWwgIT0gb2xkVmFsKSB7CiAgICAvLyAJCWRlYm91bmNlR2V0UGlueWluKG5ld1ZhbCk7CiAgICAvLyAJfQogICAgLy8gfSwgewogICAgLy8gCWRlZXA6IHRydWUsCiAgICAvLyAJaW1tZWRpYXRlOiBmYWxzZQogICAgLy8gfSk7CiAgfQp9KTsKVnVlLmRpcmVjdGl2ZSgncGVybWl0JywgewogIGNvbXBvbmVudFVwZGF0ZWQ6IGZ1bmN0aW9uIGNvbXBvbmVudFVwZGF0ZWQoZWwsIGJpbmRpbmcpIHsKICAgIGlmIChlbC50YWdOYW1lICE9PSAiVFIiKSB7CiAgICAgIHRocm93ICJ2LXBlcm1pdOaMh+S7pOWPquiDveeUqOWcqHRy5YWD57Sg5LiKLiI7CiAgICB9CiAgICBpZiAoIWJpbmRpbmcudmFsdWUgfHwgYmluZGluZy52YWx1ZS5jb25zdHJ1Y3RvciAhPT0gTnVtYmVyKSB7CiAgICAgIHRocm93ICJ2LXBlcm1pdOaMh+S7pOeahOWAvOWPquiDveaYr+Wkp+S6jjDnmoTmlbDlrZcuIjsKICAgIH0KICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIik7CgogICAgLy8gdHLkuK3msqHmnInlrZDlhYPntKDml7bvvIzliKDpmaR0cuiHqui6qwogICAgaWYgKGVsLmNlbGxzLmxlbmd0aCA9PSAwKSB7CiAgICAgIGVsLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwgImhpZGRlbiIpOwogICAgfSBlbHNlIGlmIChlbC5jZWxscy5sZW5ndGggPCBiaW5kaW5nLnZhbHVlKSB7CiAgICAgIHZhciBjb2xzcGFuID0gYmluZGluZy52YWx1ZSAtIGVsLmNlbGxzLmxlbmd0aCArIDE7CiAgICAgIC8vIOiuvue9rmNvbHNwYW7lrp7njrDljZXlhYPmoLzlkIjlubYKICAgICAgZWwuY2VsbHNbZWwuY2VsbHMubGVuZ3RoIC0gMV0uc2V0QXR0cmlidXRlKCJjb2xzcGFuIiwgY29sc3Bhbik7CiAgICB9IGVsc2UgaWYgKGVsLmNlbGxzLmxlbmd0aCA9PT0gYmluZGluZy52YWx1ZSkgewogICAgICBmb3IgKHZhciBpID0gMCwgYzsgYyA9IGVsLmNlbGxzW2krK107KSB7CiAgICAgICAgYy5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKTsKICAgICAgfQogICAgfQogIH0KfSk7CgovLyDooajljZXmjIfku6TvvIzkvJrlnKjooajljZXnmoR2dWXlrp7kvovkuIrmt7vliqDkuIDkuKptYXDvvIznlKjku6XlrZjmlL7mlbDlrabov5DnrpfnmoTooajovr7lvI8KVnVlLmRpcmVjdGl2ZSgnZm9ybScsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgdmFyIGluc3QgPSB2bm9kZS5jb250ZXh0OwogICAgaWYgKGluc3QgJiYgIWluc3QuaGFzT3duUHJvcGVydHkoIndhdGNoTWFwIikpIHsKICAgICAgaW5zdFsid2F0Y2hNYXAiXSA9IG5ldyBNYXAoKTsKICAgIH0KICB9Cn0pOwoKLy8g5Yik5pat6L6T5YWl5qGG5piv5ZCm5L2c5Li66K6h566X5a2X5q6177yM5piv5YiZ5re75Yqg55uR5ZCsClZ1ZS5kaXJlY3RpdmUoJ2V4cHJlc3MnLCB7CiAgY29tcG9uZW50VXBkYXRlZDogZnVuY3Rpb24gY29tcG9uZW50VXBkYXRlZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgIGlmICghaW5zdC4kdm5vZGUuZGF0YS5tb2RlbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgZWxBdHRyID0gaW5zdC4kdm5vZGUuY29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGEubW9kZWxFeHByZXNzaW9uOwogICAgaWYgKGVsQXR0ciAmJiAhaW5zdC5fZXhwcmVzc0luaXQpIHsKICAgICAgaW5zdC5fZXhwcmVzc0luaXQgPSB0cnVlOwogICAgICAvLyDlrZDooajmr4/kuIDooYzmlbDmja7kvZznlKjln5/miYDlnKjnmoRkb23lhYPntKAKICAgICAgdmFyIF91dGlscyRnZXRTdWJTY29wZUVsQSA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChlbCksCiAgICAgICAgc3ViU2NvcGVFbCA9IF91dGlscyRnZXRTdWJTY29wZUVsQS5zdWJTY29wZUVsOwogICAgICB2YXIgc3VibmFtZSA9IG51bGw7CiAgICAgIHZhciBhbGlhc0VsQXR0ciA9IG51bGw7CiAgICAgIC8vIOWtkOihqOaVsOaNru+8jOmcgOimgeaJvuWIsOmFjee9ruS6hmRhdGEtc3VibmFtZeeahOWFg+e0oAogICAgICBpZiAoc3ViU2NvcGVFbCkgewogICAgICAgIHN1Ym5hbWUgPSBzdWJTY29wZUVsLmRhdGFzZXRbInN1Ym5hbWUiXTsKICAgICAgICBpZiAoIXN1Ym5hbWUpIHsKICAgICAgICAgIHRocm93ICLml6Dms5Xojrflj5bliLDlvZPliY3lrZDooajliY3nvIAiOwogICAgICAgIH0KICAgICAgICB2YXIgZWxBdHRyQXJ5ID0gZWxBdHRyLnNwbGl0KCIuIiksCiAgICAgICAgICBlbEF0dHJBcnlTaXplID0gZWxBdHRyQXJ5Lmxlbmd0aDsKICAgICAgICBpZiAoZWxBdHRyQXJ5U2l6ZSA8IDEpIHsKICAgICAgICAgIHRocm93ICJcdTVCNTBcdTg4NjhcdTRFMkRcdTc2ODRcdTY1NzBcdTYzNkVcdTdFRDFcdTVCOUFcdTg4NjhcdThGQkVcdTVGMEYiLmNvbmNhdChlbEF0dHIsICJcdTk1MTlcdThCRUYiKTsKICAgICAgICB9CiAgICAgICAgYWxpYXNFbEF0dHIgPSAiIi5jb25jYXQoc3VibmFtZSwgIi4iKS5jb25jYXQoZWxBdHRyQXJ5W2VsQXR0ckFyeVNpemUgLSAxXSk7CiAgICAgIH0KICAgICAgdmFyIHAgPSB1dGlscy5nZXRPbmxpbmVGb3JtSW5zdGFuY2UoaW5zdCk7CiAgICAgIGlmIChwLndhdGNoTWFwICYmIChwLndhdGNoTWFwLmhhcyhlbEF0dHIpIHx8IHAud2F0Y2hNYXAuaGFzKGFsaWFzRWxBdHRyKSkpIHsKICAgICAgICBpZiAoIWluc3QuX3dhdGNoZXJzLnNvbWUoZnVuY3Rpb24gKG0pIHsKICAgICAgICAgIHJldHVybiBtLmV4cHJlc3Npb24gPT09ICdpbnB1dFZhbCc7CiAgICAgICAgfSkpIHsKICAgICAgICAgIGluc3QuJHdhdGNoKCJpbnB1dFZhbCIsIGZ1bmN0aW9uIChuZXdWYWwsIG9sZFZhbCwgZmFyZXdlbGwpIHsKICAgICAgICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7CiAgICAgICAgICAgICAgdmFyIGV4cExpc3QgPSBwLndhdGNoTWFwLmdldChlbEF0dHIpIHx8IHAud2F0Y2hNYXAuZ2V0KGFsaWFzRWxBdHRyKTsKICAgICAgICAgICAgICBleHBMaXN0LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAwOwogICAgICAgICAgICAgICAgdmFyIHQgPSBpdGVtLnRhcmdldDsKICAgICAgICAgICAgICAgIC8vIOW9k+WcqOWtkOihqOWNleihjOS4reaXtu+8jOiAjOS4lOS4jeaYr+WvueWtkOihqOi/m+ihjOWIl+i/kOeul+aXtu+8jOWIpOWumuS4uuWtkOihqOW9k+WJjeihjOWGhei/kOeulwogICAgICAgICAgICAgICAgaWYgKHN1YlNjb3BlRWwgJiYgIS8uKj9cW1x7Lio/XH1cXS4qPy8udGVzdChpdGVtLmV4cCkpIHsKICAgICAgICAgICAgICAgICAgLy8g57uE5Lu26ZSA5q+B5pe277yM5LiN5YaN6K6h566X5a2Q6KGo5Y2V6KGM55qE5YWs5byPCiAgICAgICAgICAgICAgICAgIGlmIChmYXJld2VsbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzdWJTY29wZUVsLmRhdGFzZXRbImluZGV4Il07CiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgIuiOt+WPluS4jeWIsOW9k+WJjeWtkOihqOihjOeahOe0ouW8le+8jOaXoOazleWujOaIkOiuoeeuly4iOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZvcm1NYXRoLmNhbGNTdWJFeHBWYWx1ZShpdGVtLmV4cCwgcCwgc3VibmFtZSwgaW5kZXgpOwogICAgICAgICAgICAgICAgICBwLiRlbWl0KHQsIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICByZXN1bHQgPSBGb3JtTWF0aC5jYWxjRXhwVmFsdWUoaXRlbS5leHAsIHApOwogICAgICAgICAgICAgICAgICBwLiRlbWl0KHQsIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdAogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgewogICAgICAgICAgICBpbW1lZGlhdGU6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfSk7CgovLyDoh6rlrprkuYnlr7nor53moYYgdi1hdXRoLXNldC1ldmVudApWdWUuZGlyZWN0aXZlKCdhdXRoLXNldC1ldmVudCcsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5ncywgdm5vZGUpIHsKICAgIHZhciBodEF1dGhTZXRFdmVudCA9IGVsLmdldEF0dHJpYnV0ZSgiYXR0ciIpOwogICAgaWYgKCFodEF1dGhTZXRFdmVudCkgcmV0dXJuOwogICAgdmFyIGRlZmF1bHRQZXJtaXNzaW9uTGlzdCA9IFtdOwogICAgZGlhbG9nLmdldFBlcm1pc3Npb25MaXN0KGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgZGVmYXVsdFBlcm1pc3Npb25MaXN0ID0gcmVzdWx0OwogICAgfSk7CiAgICAvKioNCiAgICAgKiDorr7nva7orr7nva7mnYPpmZDjgIINCiAgICAgKiBvd25lck5hbWVKc29uIOagvOW8j+OAgg0KICAgICAqIFt7dHlwZToiZXZlcnlvbmUiLHRpdGxlOiLmiYDmnInkuroifSx7dHlwZToidXNlciIsdGl0bGU6IueUqOaItyIsaWQ6IjEsMiIsbmFtZToicmF5LHRvbSJ9XQ0KICAgICAqLwogICAgdmFyIHNldEF1dGggPSBmdW5jdGlvbiBzZXRBdXRoKCkgewogICAgICB2YXIgY29uZiA9IHsKICAgICAgICByaWdodDogb3duZXJOYW1lSnNvbiwKICAgICAgICBwZXJtaXNzaW9uTGlzdDogZGVmYXVsdFBlcm1pc3Npb25MaXN0CiAgICAgIH07CiAgICAgIC8v5o6I5p2D6YCJ5oup5ZmoCiAgICAgIHZub2RlLmNoaWxkLkF1dGhTZXR0aW5nU2hvdyhjb25mKTsKICAgIH07CiAgICB2YXIgb3duZXJOYW1lSnNvbiA9IFtdOwogICAgdmFyIGluaXREYXRhID0gYmluZGluZ3MudmFsdWU7CiAgICBpZiAoaW5pdERhdGEpIHsKICAgICAgb3duZXJOYW1lSnNvbiA9IEpTT04ucGFyc2UoaW5pdERhdGEpOwogICAgICA7CiAgICAgIC8vIHNob3dMYWJsZShvd25lck5hbWVKc29uKTsKICAgIH0KICAgIC8v5a+56K+d5qGG5Yid5aeL5YyW55uR5ZCsCiAgICBlbC5jaGlsZE5vZGVzWzJdLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIHNldEF1dGgoKTsKICAgIH07CiAgfQp9KTsKVnVlLmRpcmVjdGl2ZSgncGFyc2VUZW1wbGV0ZScsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgdmFyIHMgPSBKU09OLnN0cmluZ2lmeTsKICAgIGVsLmlubmVySFRNTCA9ICduYW1lOiAnICsgcyhiaW5kaW5nLm5hbWUpICsgJzxicj4nICsgJ3ZhbHVlOiAnICsgcyhiaW5kaW5nLnZhbHVlKSArICc8YnI+JyArICdleHByZXNzaW9uOiAnICsgcyhiaW5kaW5nLmV4cHJlc3Npb24pICsgJzxicj4nICsgJ2FyZ3VtZW50OiAnICsgcyhiaW5kaW5nLmFyZykgKyAnPGJyPicgKyAnbW9kaWZpZXJzOiAnICsgcyhiaW5kaW5nLm1vZGlmaWVycykgKyAnPGJyPicgKyAndm5vZGUga2V5czogJyArIE9iamVjdC5rZXlzKHZub2RlKS5qb2luKCcsICcpOwogIH0KfSk7ClZ1ZS5kaXJlY3RpdmUoJ2Fsc0NoYXJ0cycsIHsKICBpbnNlcnRlZDogZnVuY3Rpb24gaW5zZXJ0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICB2YXIgaW5zdCA9IGJpbmRpbmcuY29udGV4dDsKICAgIGZ1bmN0aW9uIGluaXQoZGF0YSkgewogICAgICBpZiAoIShkYXRhLnZhbHVlICYmIGRhdGEudmFsdWUgIT09IHRydWUgJiYgZGF0YS52YWx1ZS5jb25zdHJ1Y3RvciA9PSBBcnJheSAmJiBkYXRhLnZhbHVlWzBdLmxlZ2VuZCkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdmFyIG9wdGlvbnMgPSBkYXRhLnZhbHVlWzBdOwogICAgICB2YXIgaGVpZ2h0ID0gZ2V0RGl2SGVpZ2h0KGVsKSAtIDM1OwogICAgICB2YXIgd3JhcCA9ICQoJzxkaXY+PC9kaXY+JykuY3NzKHsKICAgICAgICB3aWR0aDogJzEwMCUnLAogICAgICAgIGhlaWdodDogaGVpZ2h0CiAgICAgIH0pOwogICAgICAkKGVsKS5jc3MoewogICAgICAgIGRpc3BsYXk6ICdibG9jaycsCiAgICAgICAgd2lkdGg6ICcxMDAlJywKICAgICAgICBoZWlnaHQ6IGhlaWdodAogICAgICB9KTsKICAgICAgLy8gY29uc3QgZWNoYXJ0cyA9IHJlcXVpcmUoJ2VjaGFydHMnKTsKICAgICAgLy8gdmFyIG15Q2hhcnQgPSBlY2hhcnRzLmluaXQoZWwpOwogICAgICAvLyBpbnN0LiRyb290LiRvbigicmVzaXplIiwgKCkgPT4gewogICAgICAvLyAgICAgbXlDaGFydC5yZXNpemUoKTsvL+ebkea1i+WbvuihqOiHqumAguW6lAogICAgICAvLyB9KTsKICAgICAgdmFyIG9wdGlvbiA9IF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoewogICAgICAgIHRpdGxlOiB7CiAgICAgICAgICB0ZXh0OiBvcHRpb25zLm5hbWUsCiAgICAgICAgICBzdWJ0ZXh0OiBvcHRpb25zLnN1YnRleHQsCiAgICAgICAgICB0b3A6IDEyCiAgICAgICAgfSwKICAgICAgICB0b29sdGlwOiB7CiAgICAgICAgICB0cmlnZ2VyOiAnYXhpcycsCiAgICAgICAgICBheGlzUG9pbnRlcjogewogICAgICAgICAgICB0eXBlOiAnc2hhZG93JwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY2FsY3VsYWJsZTogdHJ1ZSwKICAgICAgICBsZWdlbmQ6IHsKICAgICAgICAgIHg6ICdyaWdodCcsCiAgICAgICAgICBkYXRhOiBvcHRpb25zLmxlZ2VuZAogICAgICAgIH0sCiAgICAgICAgdG9vbGJveDogewogICAgICAgICAgc2hvdzogdHJ1ZSwKICAgICAgICAgIG9yaWVudDogJ3ZlcnRpY2FsJywKICAgICAgICAgIHk6ICdjZW50ZXInLAogICAgICAgICAgcmlnaHQ6IDIwLAogICAgICAgICAgaXRlbUdhcDogMTMsCiAgICAgICAgICBmZWF0dXJlOiBfZGVmaW5lUHJvcGVydHkoewogICAgICAgICAgICBtYXJrOiB7CiAgICAgICAgICAgICAgc2hvdzogdHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICBkYXRhVmlldzogewogICAgICAgICAgICAgIHNob3c6IHRydWUsCiAgICAgICAgICAgICAgcmVhZE9ubHk6IGZhbHNlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG1hZ2ljVHlwZTogewogICAgICAgICAgICAgIHNob3c6IHRydWUsCiAgICAgICAgICAgICAgdHlwZTogWydsaW5lJywgJ2JhcicsICdzdGFjaycsICd0aWxlZCddCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlc3RvcmU6IHsKICAgICAgICAgICAgICBzaG93OiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNhdmVBc0ltYWdlOiB7CiAgICAgICAgICAgICAgc2hvdzogdHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICBkYXRhWm9vbTogewogICAgICAgICAgICAgIHlBeGlzSW5kZXg6ICdub25lJwogICAgICAgICAgICB9CiAgICAgICAgICB9LCAiZGF0YVZpZXciLCB7CiAgICAgICAgICAgIHNob3c6IHRydWUsCiAgICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLAogICAgICAgICAgICBvcHRpb25Ub0NvbnRlbnQ6IGZ1bmN0aW9uIG9wdGlvblRvQ29udGVudChvcHQpIHsKICAgICAgICAgICAgICAvL2NvbnNvbGUuaW5mbyhvcHQpOwogICAgICAgICAgICAgIHZhciBheGlzRGF0YSA9IG9wdC54QXhpc1swXS5kYXRhOwogICAgICAgICAgICAgIHZhciBzZXJpZXMgPSBvcHQuc2VyaWVzOwogICAgICAgICAgICAgIHZhciB0ZEhlYWRlcnMgPSAnPHRoPjwvdGg+JzsgLy/ooajlpLQKICAgICAgICAgICAgICBzZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgdGRIZWFkZXJzICs9ICc8dGggc3R5bGU9InBhZGRpbmc6IDhweCAxMHB4O2JhY2tncm91bmQtY29sb3I6I0Y1RjVGNTsiPicgKyBpdGVtLm5hbWUgKyAnPC90aD4nOyAvL+e7hOijheihqOWktAogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHZhciB0YWJsZSA9ICc8ZGl2Pjx0YWJsZSBjZWxsc3BhY2luZz0iMjAiIGNlbGxzcGFjaW5nPSIwIiAgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO2JvcmRlcjoxcHggc29saWQgYmxhY2s7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyIgcnVsZXM9ImFsbCI+PHRib2R5Pjx0cj4nICsgdGRIZWFkZXJzICsgJzwvdHI+JzsKICAgICAgICAgICAgICB2YXIgdGRCb2R5cyA9ICcnOyAvL+aVsOaNrgogICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBbJyNGRkZGRkYnLCAnI0Y1RjVGNSddOwogICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXhpc0RhdGEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlcmllcy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgICB0ZEJvZHlzICs9ICc8dGQ+JyArIHNlcmllc1tqXS5kYXRhW2ldICsgJzwvdGQ+JzsgLy/nu4Too4XooajmlbDmja4KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBjdXJDb2xvciA9IGNvbG9yc1tpICUgMl07CiAgICAgICAgICAgICAgICB0YWJsZSArPSAnPHRyIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOicgKyBjdXJDb2xvciArICciPjx0ZCBzdHlsZT0icGFkZGluZzogOHB4IDEwcHg7Ij4nICsgYXhpc0RhdGFbaV0gKyAnPC90ZD4nICsgdGRCb2R5cyArICc8L3RyPic7CiAgICAgICAgICAgICAgICB0ZEJvZHlzID0gJyc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRhYmxlICs9ICc8L3Rib2R5PjwvdGFibGU+PC9kaXY+JzsKICAgICAgICAgICAgICByZXR1cm4gdGFibGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pCiAgICAgICAgfQogICAgICB9LCAiY2FsY3VsYWJsZSIsIHRydWUpLCAiZ3JpZCIsIHsKICAgICAgICB5OiA4MCwKICAgICAgICB5MjogNDAsCiAgICAgICAgeDI6IDQwCiAgICAgIH0pLCAieEF4aXMiLCBbewogICAgICAgIHR5cGU6ICdjYXRlZ29yeScsCiAgICAgICAgZGF0YTogb3B0aW9ucy54QXhpcwogICAgICB9XSksICJ5QXhpcyIsIFt7CiAgICAgICAgdHlwZTogJ3ZhbHVlJywKICAgICAgICBzY2FsZTogdHJ1ZQogICAgICB9XSksICJzZXJpZXMiLCBvcHRpb25zLnNlcmllcyk7CiAgICAgIC8vIG15Q2hhcnQuc2V0T3B0aW9uKG9wdGlvbiwgdHJ1ZSk7CiAgICB9CgogICAgLy/ojrflj5blvZPliY3moI/nm67nmoTpq5jluqYKICAgIGZ1bmN0aW9uIGdldERpdkhlaWdodChlbCkgewogICAgICBpZiAoZWwpIHsKICAgICAgICB2YXIgcEhlaWdodCA9ICQoZWwpLnBhcmVudCgpLmhlaWdodCgpOwogICAgICAgIGlmIChwSGVpZ2h0IDwgMSkgewogICAgICAgICAgcmV0dXJuIGdldERpdkhlaWdodCgkKGVsKS5wYXJlbnQoKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAzNDA7CiAgICAgIH0KICAgICAgcmV0dXJuIHBIZWlnaHQ7CiAgICB9CiAgICBpbml0KGJpbmRpbmcpOwogIH0KfSk7ClZ1ZS5kaXJlY3RpdmUoJ29waW5pb24nLCB7CiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLnZhbHVlKSB7CiAgICAgIHdoaWxlIChiaW5kaW5nLnZhbHVlLmluZGV4T2YoIlxuIikgIT0gLTEpIHsKICAgICAgICBiaW5kaW5nLnZhbHVlID0gYmluZGluZy52YWx1ZS5yZXBsYWNlKCJcbiIsICI8YnI+Iik7CiAgICAgIH0KICAgICAgZWwuaW5uZXJIVE1MID0gYmluZGluZy52YWx1ZTsKICAgIH0KICB9Cn0pOwpWdWUuZGlyZWN0aXZlKCdpZnJhbWV0cmlnZ2VyJywgewogIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICBlbC5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICQoImJvZHkiKS50cmlnZ2VyKCJmb3JtTG9hZGVkIik7CiAgICB9OwogICAgJCgiYm9keSIpLmJpbmQoImZvcm1Mb2FkZWQiLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgZnJtID0gJCgiI2ZybUZyYW1lIilbMF07CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICBpZiAoZS5kYXRhICYmIGUuZGF0YS5jb25zdHJ1Y3RvciA9PSBPYmplY3QgJiYgZS5kYXRhLnR5cGUgPT0gJ2hlaWdodCcpIHsKICAgICAgICAgIGZybS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7CiAgICAgICAgICAvLyDmj5DliY3ov5jljp/pq5jluqYKICAgICAgICAgIGZybS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICdhdXRvJyk7CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgZnJtLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgZS5kYXRhLmhlaWdodCk7CiAgICAgICAgICAgIGZybS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnOwogICAgICAgICAgICAkKGZybSkudHJpZ2dlcigibW91c2VvdmVyIik7CiAgICAgICAgICB9LCAwKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfQp9KTsKVnVlLmRpcmVjdGl2ZSgnbWV0aG9kYXV0aCcsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgdmFyIGFsbE1ldGhvZCA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5hbGxNZXRob2Q7CiAgICB2YXIgbWV0aG9kQXV0aCA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5tZXRob2RBdXRoOwogICAgdmFyIGVsQXV0aCA9IGJpbmRpbmcuZXhwcmVzc2lvbjsKICAgIHZhciBhbGxNZXRob2RBcnJheSA9IGFsbE1ldGhvZC5zcGxpdCgnLCcpOwogICAgdmFyIG1ldGhvZEF1dGhBcnJheSA9IG1ldGhvZEF1dGguc3BsaXQoJywnKTsKICAgIC8vIOaXoOadg+mZkOWImemakOiXj+aMiemSrgogICAgaWYgKCQuaW5BcnJheShlbEF1dGgsIG1ldGhvZEF1dGhBcnJheSkgPT0gLTEgJiYgJC5pbkFycmF5KGVsQXV0aCwgYWxsTWV0aG9kQXJyYXkpKSB7CiAgICAgICQoZWwpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICB9CiAgfQp9KTsKCi8vIOazqOWGjOWFqOWxgOWFrOW8j+iuoeeul+e7hOS7tgpWdWUuZGlyZWN0aXZlKCJmb3JtdWxhIiwgewogIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICB2YXIgcHJvcHNEYXRhID0gdm5vZGUuY29udGV4dC4kb3B0aW9ucy5wcm9wc0RhdGE7CiAgICAvL+WIneWni+WMlueahOaXtuWAme+8jOWmguaenOayoeacieWAvO+8jOWImeeUqOWFrOW8j+eahOiuoeeul+e7k+aenOadpei1i+WAvOe7meW9k+WJjeWtl+autQogICAgdmFyIG9sZFZhbCA9IHV0aWxzLmdldFZhbHVlQnlQYXRoKHByb3BzRGF0YSwgYmluZGluZy52YWx1ZS5iaW5kUGF0aCk7CiAgICBpZiAocHJvcHNEYXRhICYmICFvbGRWYWwpIHsKICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgocHJvcHNEYXRhLCBiaW5kaW5nLnZhbHVlLmJpbmRQYXRoLCBiaW5kaW5nLnZhbHVlLnZhbHVlKTsKICAgICAgdm5vZGUuY29udGV4dC4kZm9yY2VVcGRhdGUoKTsKICAgIH0KICB9LAogIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLm9sZFZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgewogICAgICBpZiAoYmluZGluZy5vbGRWYWx1ZS52YWx1ZS5nZXRUaW1lKCkgIT09IGJpbmRpbmcudmFsdWUudmFsdWUuZ2V0VGltZSgpKSB7CiAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgodm5vZGUuY29udGV4dC4kb3B0aW9ucy5wcm9wc0RhdGEsIGJpbmRpbmcudmFsdWUuYmluZFBhdGgsIGJpbmRpbmcudmFsdWUudmFsdWUpOwogICAgICAgIHZub2RlLmNvbnRleHQuJGZvcmNlVXBkYXRlKCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChiaW5kaW5nLm9sZFZhbHVlLnZhbHVlICE9IGJpbmRpbmcudmFsdWUudmFsdWUpIHsKICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aCh2bm9kZS5jb250ZXh0LiRvcHRpb25zLnByb3BzRGF0YSwgYmluZGluZy52YWx1ZS5iaW5kUGF0aCwgYmluZGluZy52YWx1ZS52YWx1ZSk7CiAgICAgICAgdm5vZGUuY29udGV4dC4kZm9yY2VVcGRhdGUoKTsKICAgICAgfQogICAgfQogIH0KfSk7ClZ1ZS5kaXJlY3RpdmUoIm1hcHBpbmciLCB7CiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoZWwsIGJpbmRpbmcsIHZub2RlLCBvbGRWbm9kZSkgewogICAgaWYgKGJpbmRpbmcub2xkVmFsdWUgIT09IGJpbmRpbmcudmFsdWUpIHsKICAgICAgVnVlLnNldChlbC5fX3Z1ZV9fLCAiaW5wdXRWYWwiLCBiaW5kaW5nLnZhbHVlKTsKICAgIH0KICB9Cn0pOwoKLy8gVnVlLmRpcmVjdGl2ZSgiZHluYW1pYy1vcHRpb25zIiwgewovLyAgICAgYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKLy8gICAgICAgICBsZXQgZXhwID0gbnVsbDsKLy8gICAgICAgICBpZiAoYmluZGluZy5leHByZXNzaW9uKSB7Ci8vICAgICAgICAgICAgIGV4cCA9IHV0aWxzLnBhcnNlVG9Kc29uKGJpbmRpbmcuZXhwcmVzc2lvbik7Ci8vICAgICAgICAgfQovLyAgICAgICAgIGNvbnN0IGluc3QgPSB2bm9kZS5jb250ZXh0OwovLyAgICAgICAgIGlmIChpbnN0KSB7Ci8vICAgICAgICAgICAgIC8vIOS4iuS4gOasoeWKqOaAgemAiemhueafpeivouadoeS7tgovLyAgICAgICAgICAgICBpbnN0LnByZUR5bmFtaWNMb2FkUGFyYW1zID0gbnVsbDsKLy8gICAgICAgICAgICAgaW5zdC4kb24oImR5bmFtaWMtb3B0aW9uczpsb2FkIiwgKGFsaWFzLCBwYXJhbXMpID0+IHsKLy8gICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTsKLy8gICAgICAgICAgICAgICAgIC8vIOaYr+WQpuaJp+ihjOafpeivogovLyAgICAgICAgICAgICAgICAgbGV0IGRvTG9hZCA9IHRydWU7Ci8vICAgICAgICAgICAgICAgICBpZiAoZXhwICYmIGV4cC5jYWNoZSkgewovLyAgICAgICAgICAgICAgICAgICAgIC8vIOebuOavlOS4iuS4gOasoe+8jOafpeivouWPguaVsOaYr+WQpuacieWPmOWMlgovLyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSAhdXRpbHMub2JqZWN0RXF1YWxzKGluc3QucHJlRHluYW1pY0xvYWRQYXJhbXMsIHBhcmFtcyk7Ci8vICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHsKLy8gICAgICAgICAgICAgICAgICAgICAgICAgZG9Mb2FkID0gdHJ1ZTsKLy8gICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC5wcmVEeW5hbWljTG9hZFBhcmFtcyA9IHBhcmFtczsKLy8gICAgICAgICAgICAgICAgICAgICB9Ci8vICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgIGRvTG9hZCA9IGZhbHNlOwovLyAgICAgICAgICAgICAgICAgICAgIH0KLy8gICAgICAgICAgICAgICAgIH0KLy8gICAgICAgICAgICAgICAgIGRvTG9hZCAmJiBDdXN0b21RdWVyeS5sb2FkKGFsaWFzLCBwYXJhbXMpLnRoZW4oKGRhdGEpID0+IHsKLy8gICAgICAgICAgICAgICAgICAgICBpbnN0LiRlbWl0KCJkeW5hbWljLW9wdGlvbnM6dXBkYXRlIiwgYWxpYXMsIGRhdGEpOwovLyAgICAgICAgICAgICAgICAgfSk7Ci8vICAgICAgICAgICAgIH0pOwovLyAgICAgICAgIH0KLy8gICAgIH0KLy8gfSk7Ci8v55So5LqO5LiK57qn5YC85Y+Y5YyW5ZCO77yM5LiL57qn5YaF5a656ZyA6KaB5riF56m6ClZ1ZS5kaXJlY3RpdmUoIndhdGNoLXBhcmVudCIsIHsKICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLnZhbHVlICYmIGJpbmRpbmcudmFsdWUucGlkKSB7CiAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkgewogICAgICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgICAgICB2YXIgaW5zdFBhcmVudCA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZShpbnN0KTsKICAgICAgICBpbnN0UGFyZW50LiR3YXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gdXRpbHMuZ2V0VmFsdWVCeVBhdGgoaW5zdFBhcmVudCwgYmluZGluZy52YWx1ZS5waWRba2V5XSwgYmluZGluZy52YWx1ZS5pbmRleCk7CiAgICAgICAgfSwgZnVuY3Rpb24gKG5ld1ZhbCwgb2xkVmFsLCBmYXJld2VsbCkgewogICAgICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7CiAgICAgICAgICAgIGluc3QuaW5wdXRWYWwgPSAiIjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKICAgICAgZm9yICh2YXIga2V5IGluIGJpbmRpbmcudmFsdWUucGlkKSB7CiAgICAgICAgX2xvb3AoKTsKICAgICAgfQogICAgfQogIH0KfSk7Ci8vIFZ1ZS5kaXJlY3RpdmUoInJlbGF0ZWQtcXVlcnkiLCB7Ci8vICAgICBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkgewovLyAgICAgICAgIGNvbnN0IGluc3QgPSB2bm9kZS5jb250ZXh0OwovLyAgICAgICAgIGxldCBleHAgPSBudWxsOwovLyAgICAgICAgIGlmIChiaW5kaW5nLmV4cHJlc3Npb24pIHsKLy8gICAgICAgICAgICAgZXhwID0gdXRpbHMucGFyc2VUb0pzb24oYmluZGluZy5leHByZXNzaW9uKTsKLy8gICAgICAgICB9Ci8vICAgICAgICAgaWYgKGluc3QpIHsKLy8gICAgICAgICAgICAgLy8g5LiK5LiA5qyh5YWz6IGU5p+l6K+i5p2h5Lu277yI5LiA5Liq57uE5Lu25Y+v5Lul57uR5a6a5aSa5Liq5YWz6IGU5p+l6K+i77yM77yJCi8vICAgICAgICAgICAgIGluc3QucHJlUmVsYXRlZFF1ZXJ5UGFyYW1zID0ge307Ci8vICAgICAgICAgICAgIGluc3QuJG9uKCJyZWxhdGVkLXF1ZXJ5OmxvYWQiLCAoYWxpYXMsIHBhcmFtcywgcmVzdWx0QmluZCkgPT4gewovLyAgICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9OwovLyAgICAgICAgICAgICAgICAgLy8g5piv5ZCm5omn6KGM5p+l6K+iCi8vICAgICAgICAgICAgICAgICBsZXQgZG9Mb2FkID0gdHJ1ZTsKLy8gICAgICAgICAgICAgICAgIGlmIChleHAgJiYgZXhwLmNhY2hlKSB7Ci8vICAgICAgICAgICAgICAgICAgICAgLy8g55u45q+U5LiK5LiA5qyh77yM5p+l6K+i5Y+C5pWw5piv5ZCm5pyJ5Y+Y5YyWCi8vICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhbmdlZCA9ICF1dGlscy5vYmplY3RFcXVhbHMoaW5zdC5wcmVSZWxhdGVkUXVlcnlQYXJhbXNbYWxpYXNdLCBwYXJhbXMpOwovLyAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VkKSB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgIGRvTG9hZCA9IHRydWU7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QucHJlUmVsYXRlZFF1ZXJ5UGFyYW1zW2FsaWFzXSA9IHBhcmFtczsKLy8gICAgICAgICAgICAgICAgICAgICB9Ci8vICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgIGRvTG9hZCA9IGZhbHNlOwovLyAgICAgICAgICAgICAgICAgICAgIH0KLy8gICAgICAgICAgICAgICAgIH0KLy8gICAgICAgICAgICAgICAgIGRvTG9hZCAmJiBDdXN0b21RdWVyeS5sb2FkKGFsaWFzLCBwYXJhbXMpLnRoZW4oKGRhdGEpID0+IHsKLy8gICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmNvbnN0cnVjdG9yID09IEFycmF5ICYmIGRhdGEubGVuZ3RoID4gMCAmJiByZXN1bHRCaW5kICYmIHJlc3VsdEJpbmQuY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOiOt+WPluW9k+WJjeaOp+S7tuaYr+WQpuWcqOWtkOihqOafkOihjOS4rQovLyAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgeyBpbmRleCB9ID0gdXRpbHMuZ2V0U3ViU2NvcGVFbEFuZEluZGV4KGVsKTsKCi8vICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBJbnN0ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKGluc3QpOwovLyAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlhbPogZTmn6Xor6LlgLzlm57nu5Hml7bvvIzpu5jorqTojrflj5bov5Tlm57nmoTnrKzkuIDmnaHorrDlvZUKLy8gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2luZ2xlRGF0YSA9IGRhdGFbMF07Ci8vICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlc3VsdEJpbmQpLmZvckVhY2goayA9PiB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gcmVzdWx0QmluZFtrXTsKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS4u+ihqAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IG51bGwpIHsKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aChwSW5zdCwgcGF0aCwgc2luZ2xlRGF0YVtrXSk7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlrZDooagKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKHBJbnN0LCBwYXRoLCBzaW5nbGVEYXRhW2tdLCBpbmRleCk7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci8vICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwovLyAgICAgICAgICAgICAgICAgICAgIH0KLy8gICAgICAgICAgICAgICAgIH0pOwovLyAgICAgICAgICAgICB9KTsKLy8gICAgICAgICB9Ci8vICAgICB9Ci8vIH0pOwovL+ihqOagvOaoquWQkeaLluaLvQpWdWUuZGlyZWN0aXZlKCd0YWJsZURyYWcnLCB7CiAgaW5zZXJ0ZWQ6IGZ1bmN0aW9uIGluc2VydGVkKGVsKSB7CiAgICB2YXIgY3VycmVudEVsZW1lbnQgPSBlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdlbC10YWJsZV9fYm9keS13cmFwcGVyJylbMF0gfHwgZWw7CiAgICB2YXIgdGFnTmFtZXMgPSBbJ3NwYW4nLCAnaW5wdXQnLCAndGV4dGFyZWEnLCAnYXNpZGUnXTsKICAgIGlmIChjdXJyZW50RWxlbWVudCkgewogICAgICBjdXJyZW50RWxlbWVudC5vbm1vdXNlZG93biA9IGZ1bmN0aW9uIChldmVudCkgewogICAgICAgIHZhciBjdXJyZW50VGFnTmFtZXMgPSBldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmICh0YWdOYW1lcy5pbmNsdWRlcyhjdXJyZW50VGFnTmFtZXMpKSByZXR1cm47CiAgICAgICAgY3VycmVudEVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2dyYWInOwogICAgICAgIHZhciBnYXBYID0gZXZlbnQuY2xpZW50WDsKICAgICAgICB2YXIgc3RhcnRYID0gZWwuc2Nyb2xsTGVmdDsKICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICB2YXIgeCA9IGUuY2xpZW50WCAtIGdhcFg7CiAgICAgICAgICBjdXJyZW50RWxlbWVudC5zY3JvbGxMZWZ0ID0gc3RhcnRYIC0geDsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9OwogICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGw7CiAgICAgICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsOwogICAgICAgIH07CiAgICAgIH07CiAgICB9CiAgfQp9KTsKCi8v55So5LqO5o6n5Yi25a2Q6KGo5oiW5a2Z6KGo5Y2V6KGMcGVybWlzc2lvbgpWdWUuZGlyZWN0aXZlKCJwZXJtaXNzaW9uLWxpbmUiLCB7CiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLnZhbHVlKSB7CiAgICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgICAgdmFyIGlkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChlbCk7CiAgICAgIHZhciBwYXRocyA9IGJpbmRpbmcudmFsdWUuc3BsaXQoJ18nKTsKICAgICAgdmFyIGJvVHlwZSA9IHBhdGhzWzBdOwogICAgICB2YXIgaWRTdHIgPSBiaW5kaW5nLnZhbHVlICsgJ18nICsgaWR4T2JqLmluZGV4OwogICAgICAvL+WtmeihqOaXtu+8jOiOt+WPluWtmeihqOaJgOWxnuWtkOihqOW6j+WPtwogICAgICBpZiAoYm9UeXBlID09ICdzdW4nICYmIGlkeE9iai5zdWJTY29wZUVsKSB7CiAgICAgICAgdmFyIHN1YklkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChpZHhPYmouc3ViU2NvcGVFbC5wYXJlbnRFbGVtZW50KTsKICAgICAgICBpZFN0ciA9IGJpbmRpbmcudmFsdWUgKyAnXycgKyBzdWJJZHhPYmouaW5kZXggKyAnXycgKyBpZHhPYmouaW5kZXg7CiAgICAgIH0KICAgICAgaWYgKGluc3QucGVybWlzc2lvbiAmJiBpbnN0LnBlcm1pc3Npb25bJ3N1YkZpZWxkcyddICYmIGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ11baWRTdHJdKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoZWwuX192dWVfXykgewogICAgICAgICAgICBlbC5fX3Z1ZV9fLnBlcm1pc3Npb25fc3ViID0gaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXVtpZFN0cl07CiAgICAgICAgICAgIGVsLl9fdnVlX18uc3ViX3dvcmsgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0sIDApOwogICAgICB9CiAgICB9CiAgfSwKICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLnZhbHVlKSB7CiAgICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgICAgdmFyIGlkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChlbCk7CiAgICAgIHZhciBwYXRocyA9IGJpbmRpbmcudmFsdWUuc3BsaXQoJ18nKTsKICAgICAgdmFyIGJvVHlwZSA9IHBhdGhzWzBdOwogICAgICB2YXIgaWRTdHIgPSBiaW5kaW5nLnZhbHVlICsgJ18nICsgaWR4T2JqLmluZGV4OwogICAgICAvL+WtmeihqOaXtu+8jOiOt+WPluWtmeihqOaJgOWxnuWtkOihqOW6j+WPtwogICAgICBpZiAoYm9UeXBlID09ICdzdW4nICYmIGlkeE9iai5zdWJTY29wZUVsKSB7CiAgICAgICAgdmFyIHN1YklkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChpZHhPYmouc3ViU2NvcGVFbC5wYXJlbnRFbGVtZW50KTsKICAgICAgICBpZFN0ciA9IGJpbmRpbmcudmFsdWUgKyAnXycgKyBzdWJJZHhPYmouaW5kZXggKyAnXycgKyBpZHhPYmouaW5kZXg7CiAgICAgIH0KICAgICAgaWYgKGluc3QucGVybWlzc2lvbiAmJiBpbnN0LnBlcm1pc3Npb25bJ3N1YkZpZWxkcyddICYmIGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ11baWRTdHJdKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoZWwuX192dWVfXykgewogICAgICAgICAgICBlbC5fX3Z1ZV9fLnBlcm1pc3Npb25fc3ViID0gaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXVtpZFN0cl07CiAgICAgICAgICB9CiAgICAgICAgfSwgMCk7CiAgICAgIH0KICAgIH0KICB9Cn0pOwovL+eUqOS6juaOp+WItuWtkOihqOaIluWtmeihqOWNleihjHBlcm1pc3Npb24gbGFibGXmoIfnrb4KVnVlLmRpcmVjdGl2ZSgicGVybWlzc2lvbi1saW5lLWxhYmxlIiwgewogIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICBpZiAoYmluZGluZy52YWx1ZSkgewogICAgICB2YXIgaW5zdCA9IHZub2RlLmNvbnRleHQ7CiAgICAgIHZhciBpZHhPYmogPSB1dGlscy5nZXRTdWJTY29wZUVsQW5kSW5kZXgoZWwpOwogICAgICB2YXIgcGF0aHMgPSBiaW5kaW5nLnZhbHVlLnNwbGl0KCdfJyk7CiAgICAgIHZhciBib1R5cGUgPSBwYXRoc1swXTsKICAgICAgdmFyIGlkU3RyID0gYmluZGluZy52YWx1ZSArICdfJyArIGlkeE9iai5pbmRleDsKICAgICAgLy/lrZnooajml7bvvIzojrflj5blrZnooajmiYDlsZ7lrZDooajluo/lj7cKICAgICAgaWYgKGJvVHlwZSA9PSAnc3VuJyAmJiBpZHhPYmouc3ViU2NvcGVFbCkgewogICAgICAgIHZhciBzdWJJZHhPYmogPSB1dGlscy5nZXRTdWJTY29wZUVsQW5kSW5kZXgoaWR4T2JqLnN1YlNjb3BlRWwucGFyZW50RWxlbWVudCk7CiAgICAgICAgaWRTdHIgPSBiaW5kaW5nLnZhbHVlICsgJ18nICsgc3ViSWR4T2JqLmluZGV4ICsgJ18nICsgaWR4T2JqLmluZGV4OwogICAgICB9CiAgICAgIGlmIChpbnN0LnBlcm1pc3Npb24gJiYgaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXSAmJiBpbnN0LnBlcm1pc3Npb25bJ3N1YkZpZWxkcyddW2lkU3RyXSkgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgZWwucGFyZW50RWxlbWVudC5oaWRkZW4gPSBpbnN0LnBlcm1pc3Npb25bJ3N1YkZpZWxkcyddW2lkU3RyXSA9PSAnbicgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgfSwgMCk7CiAgICAgIH0KICAgIH0KICB9LAogIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgaWYgKGJpbmRpbmcudmFsdWUpIHsKICAgICAgdmFyIGluc3QgPSB2bm9kZS5jb250ZXh0OwogICAgICB2YXIgaWR4T2JqID0gdXRpbHMuZ2V0U3ViU2NvcGVFbEFuZEluZGV4KGVsKTsKICAgICAgdmFyIHBhdGhzID0gYmluZGluZy52YWx1ZS5zcGxpdCgnXycpOwogICAgICB2YXIgYm9UeXBlID0gcGF0aHNbMF07CiAgICAgIHZhciBpZFN0ciA9IGJpbmRpbmcudmFsdWUgKyAnXycgKyBpZHhPYmouaW5kZXg7CiAgICAgIC8v5a2Z6KGo5pe277yM6I635Y+W5a2Z6KGo5omA5bGe5a2Q6KGo5bqP5Y+3CiAgICAgIGlmIChib1R5cGUgPT0gJ3N1bicgJiYgaWR4T2JqLnN1YlNjb3BlRWwpIHsKICAgICAgICB2YXIgc3ViSWR4T2JqID0gdXRpbHMuZ2V0U3ViU2NvcGVFbEFuZEluZGV4KGlkeE9iai5zdWJTY29wZUVsLnBhcmVudEVsZW1lbnQpOwogICAgICAgIGlkU3RyID0gYmluZGluZy52YWx1ZSArICdfJyArIHN1YklkeE9iai5pbmRleCArICdfJyArIGlkeE9iai5pbmRleDsKICAgICAgfQogICAgICBpZiAoaW5zdC5wZXJtaXNzaW9uICYmIGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ10gJiYgaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXVtpZFN0cl0pIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGVsLnBhcmVudEVsZW1lbnQuaGlkZGVuID0gaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXVtpZFN0cl0gPT0gJ24nID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgIH0sIDApOwogICAgICB9CiAgICB9CiAgfQp9KTsKCi8vIOeUqOS6jueCueWHu+aMh+WumuWMuuWfn+WkluaJp+ihjOafkOWKn+iDvSAKVnVlLmRpcmVjdGl2ZSgiY2xpY2stb3V0c2lkZSIsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5ncywgdm5vZGUpIHsKICAgIGVsLmhhbmRsZXIgPSBmdW5jdGlvbiAoZSkgewogICAgICBpZiAoIWVsLmNvbnRhaW5zKGUudGFyZ2V0KSkgewogICAgICAgIHZhciBtZXRob2QgPSBiaW5kaW5ncy5leHByZXNzaW9uOwogICAgICAgIHZub2RlLmNvbnRleHRbbWV0aG9kXSgpOwogICAgICB9CiAgICB9OwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlbC5oYW5kbGVyKTsKICB9LAogIHVuYmluZDogZnVuY3Rpb24gdW5iaW5kKGVsKSB7CiAgICAvLyDlj6/nlKjkuo7op6PpmaTkuovku7bnu5HlrpoKICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZWwuaGFuZGxlcik7CiAgfQp9KTsKdmFyIGRpcmVjdGl2ZSA9IHt9OwpleHBvcnQgZGVmYXVsdCBkaXJlY3RpdmU7"},null]}