ZGlmZiAtLWdpdCBhL01hYy9zY3JpcHRzL2Z1bGxidWlsZC5weSBiL01hYy9zY3JpcHRzL2Z1bGxidWlsZC5weQppbmRleCBlNDllYWJiLi4yMjRhYWJhIDEwMDY0NAotLS0gYS9NYWMvc2NyaXB0cy9mdWxsYnVpbGQucHkKKysrIGIvTWFjL3NjcmlwdHMvZnVsbGJ1aWxkLnB5CkBAIC0xOSw5ICsxOSwzNiBAQAogaW1wb3J0IGFldG9vbHMKIGltcG9ydCBBcHBsZUV2ZW50cwogZnJvbSBNZXRyb3dlcmtzX1NoZWxsX1N1aXRlIGltcG9ydCBNZXRyb3dlcmtzX1NoZWxsX1N1aXRlCi1mcm9tIFJlcXVpcmVkX1N1aXRlIGltcG9ydCBSZXF1aXJlZF9TdWl0ZSAKK2Zyb20gUmVxdWlyZWRfU3VpdGUgaW1wb3J0IFJlcXVpcmVkX1N1aXRlCisKK2ltcG9ydCBSZXMKK2ltcG9ydCBEbGcKIAogaW1wb3J0IG1rYXBwbGV0CitpbXBvcnQgY2ZtZmlsZQorCisjIERpYWxvZyByZXNvdXJjZS4gTm90ZSB0aGF0IHRoZSBpdGVtIG51bWJlcnMgc2hvdWxkIGNvcnJlc3BvbmQKKyMgdG8gdGhvc2UgaW4gdGhlIERJVEwgcmVzb3VyY2UuIEFsc28gbm90ZSB0aGF0IHRoZSBvcmRlciBpcyBpbXBvcnRhbnQ6CisjIHRoaW5ncyBhcmUgYnVpbHQgaW4gdGhpcyBvcmRlciwgc28gdGhlcmUgc2hvdWxkIGJlIG5vIGZvcndhcmQgZGVwZW5kZW5jaWVzLgorRElBTE9HX0lEID0gNTEyCisKK0lfT0s9MQorSV9DQU5DRUw9MgorCitJX1BQQ19DT1JFPTMKK0lfUFBDX1BMVUdJTlM9NAorSV9QUENfRVhURU5TSU9OUz01CitJXzY4S19DT1JFPTYKK0lfNjhLX1BMVUdJTlM9NworSV82OEtfRVhURU5TSU9OUz04CitJX1BQQ19GVUxMPTkKK0lfUFBDX1NNQUxMPTEwCitJXzY4S19GVUxMPTExCitJXzY4S19TTUFMTD0xMgorSV9GQVQ9MTMKK0lfQVBQTEVUUz0xNAorCitOX0JVVFRPTlM9MTUKIAogY2xhc3MgTXdTaGVsbChhZXRvb2xzLlRhbGtUbywgTWV0cm93ZXJrc19TaGVsbF9TdWl0ZSwgUmVxdWlyZWRfU3VpdGUpOgogCXBhc3MKQEAgLTQ2LDcgKzczLDcgQEAKICMjCW1nci5xdWl0KCkKIAkKIGRlZiBidWlsZGFwcGxldCh0b3AsIGR1bW15LCBsaXN0KToKLQkiIiJDcmVhdGUgYSBQUEMgcHl0aG9uIGFwcGxldCIiIgorCSIiIkNyZWF0ZSBweXRob24gYXBwbGV0cyIiIgogCXRlbXBsYXRlID0gbWthcHBsZXQuZmluZHRlbXBsYXRlKCkKIAlmb3Igc3JjIGluIGxpc3Q6CiAJCWlmIHNyY1stMzpdICE9ICcucHknOgpAQCAtNjAsMzIgKzg3LDU1IEBACiAJCQlwYXNzCiAJCXByaW50ICdCdWlsZGluZyBhcHBsZXQnLCBkc3QKIAkJbWthcHBsZXQucHJvY2Vzcyh0ZW1wbGF0ZSwgc3JjLCBkc3QpCisJCQorZGVmIGJ1aWxkZmF0KHRvcCwgZHVtbXksIGxpc3QpOgorCSIiIkJ1aWxkIGZhdCBiaW5hcmllcyIiIgorCWZvciBkc3QsIHNyYzEsIHNyYzIgaW4gbGlzdDoKKwkJZHN0ID0gb3MucGF0aC5qb2luKHRvcCwgZHN0KQorCQlzcmMxID0gb3MucGF0aC5qb2luKHRvcCwgc3JjMSkKKwkJc3JjMiA9IG9zLnBhdGguam9pbih0b3AsIHNyYzIpCisJCXByaW50ICdCdWlsZGluZyBmYXQgYmluYXJ5JywgZHN0CisJCWNmbWZpbGUubWVyZ2VjZm1maWxlcygoc3JjMSwgc3JjMiksIGRzdCkKKwkJCitkZWYgaGFuZGxlX2RpYWxvZygpOgorCSIiIkhhbmRsZSBzZWxlY3Rpb24gZGlhbG9nLCByZXR1cm4gbGlzdCBvZiBzZWxlY3RlZCBpdGVtcyIiIgorCWQgPSBEbGcuR2V0TmV3RGlhbG9nKERJQUxPR19JRCwgLTEpCisJZC5TZXREaWFsb2dEZWZhdWx0SXRlbShJX09LKQorCWQuU2V0RGlhbG9nQ2FuY2VsSXRlbShJX0NBTkNFTCkKKwlyZXN1bHRzID0gWzBdKk5fQlVUVE9OUworCXdoaWxlIDE6CisJCW4gPSBEbGcuTW9kYWxEaWFsb2coTm9uZSkKKwkJaWYgbiA9PSBJX09LOgorCQkJYnJlYWsKKwkJaWYgbiA9PSBJX0NBTkNFTDoKKwkJCXJldHVybiBbXQorCQlpZiBuIDwgbGVuKHJlc3VsdHMpOgorCQkJcmVzdWx0c1tuXSA9IChub3QgcmVzdWx0c1tuXSkKKwkJCXRwLCBoLCByZWN0ID0gZC5HZXREaWFsb2dJdGVtKG4pCisJCQloLmFzX0NvbnRyb2woKS5TZXRDb250cm9sVmFsdWUocmVzdWx0c1tuXSkKKwlydiA9IFtdCisJZm9yIGkgaW4gcmFuZ2UobGVuKHJlc3VsdHMpKToKKwkJaWYgcmVzdWx0c1tpXToKKwkJCXJ2LmFwcGVuZChpKQorCXJldHVybiBydgogCiAjCiAjIFRoZSBidWlsZCBpbnN0cnVjdGlvbnMuIEVudHJpZXMgYXJlIChyb3V0aW5lLCBhcmcsIGxpc3Qtb2YtZmlsZXMpCiAjIFhYWFggV2UgY291bGQgYWxzbyBpbmNsdWRlIHRoZSBidWlsZHMgZm9yIHN0ZHdpbiBhbmQgc3VjaCBoZXJlLi4uCi1QUENfSU5TVFJVQ1RJT05TPVsKLQkoYnVpbGRtd3Byb2plY3QsICJDV0lFIiwgWworQlVJTERfRElDVCA9IHsKK0lfUFBDX0NPUkUgOiAoYnVpbGRtd3Byb2plY3QsICJDV0lFIiwgWwogCQkiOmJ1aWxkLm1hY3BwYy5zaGFyZWQ6UHl0aG9uQ29yZVBQQy61IiwKIAkJIjpidWlsZC5tYWNwcGMuc2hhcmVkOlB5dGhvblBQQy61IiwKIAkJIjpidWlsZC5tYWNwcGMuc2hhcmVkOlB5dGhvbkFwcGxldFBQQy61IiwKLQldKQotXQotQ0ZNNjhLX0lOU1RSVUNUSU9OUz1bCi0JKGJ1aWxkbXdwcm9qZWN0LCAiQ1dJRSIsIFsKKwldKSwKKworSV82OEtfQ09SRSA6IChidWlsZG13cHJvamVjdCwgIkNXSUUiLCBbCiAJCSI6YnVpbGQubWFjNjhrLnNoYXJlZDpQeXRob25Db3JlQ0ZNNjhLLrUiLAogCQkiOmJ1aWxkLm1hYzY4ay5zaGFyZWQ6UHl0aG9uQ0ZNNjhLLrUiLAogCQkiOmJ1aWxkLm1hYzY4ay5zaGFyZWQ6UHl0aG9uQXBwbGV0Q0ZNNjhLLrUiLAotCV0pCi1dCi1GQVRfSU5TVFJVQ1RJT05TPVsKLQkoYnVpbGRtd3Byb2plY3QsICJDV0lFIiwgWwotCQkiOmJ1aWxkLm1hY3BwYy5zaGFyZWQ6UHl0aG9uLrUiLAotCQkiOmJ1aWxkLm1hY3BwYy5zaGFyZWQ6UHl0aG9uQXBwbGV0LrUiLAotCV0pCi1dCi1QTFVHSU5fSU5TVFJVQ1RJT05TPVsKLQkoYnVpbGRtd3Byb2plY3QsICJDV0lFIiwgWworCV0pLAorCitJX1BQQ19QTFVHSU5TIDogKGJ1aWxkbXdwcm9qZWN0LCAiQ1dJRSIsIFsKIAkJIjpQbHVnSW5zOmN0Yi5wcGMutSIsCiAJCSI6UGx1Z0luczpnZGJtLnBwYy61IiwKIAkJIjpQbHVnSW5zOmljZ2x1ZS5wcGMutSIsCkBAIC05NiwxMCArMTQ2LDkgQEAKIAkJIjpQbHVnSW5zOndhc3RlLnBwYy61IiwKIAkJIjpQbHVnSW5zOl90a2ludGVyLnBwYy61IiwKIAkJIjpQbHVnSW5zOmNhbGxkbGwucHBjLrUiLAotCV0pCi1dCi1DRk02OEtQTFVHSU5fSU5TVFJVQ1RJT05TPVsKLQkoYnVpbGRtd3Byb2plY3QsICJDV0lFIiwgWworCV0pLAorCitJXzY4S19QTFVHSU5TIDogKGJ1aWxkbXdwcm9qZWN0LCAiQ1dJRSIsIFsKIAkJIjpQbHVnSW5zOmN0Yi5DRk02OEsutSIsCiAJCSI6UGx1Z0luczpnZGJtLkNGTTY4Sy61IiwKIAkJIjpQbHVnSW5zOmljZ2x1ZS5DRk02OEsutSIsCkBAIC0xMDgsNjIgKzE1Nyw3MSBAQAogCQkiOlBsdWdJbnM6cXRtb2R1bGVzLkNGTTY4Sy61IiwKIAkJIjpQbHVnSW5zOndhc3RlLkNGTTY4Sy61IiwKIAkJIjpQbHVnSW5zOl90a2ludGVyLkNGTTY4Sy61IiwKLQldKQotXQotTTY4S19JTlNUUlVDVElPTlM9WwotCShidWlsZG13cHJvamVjdCwgIkNXSUUiLCBbCisJXSksCisKK0lfNjhLX0ZVTEwgOiAoYnVpbGRtd3Byb2plY3QsICJDV0lFIiwgWwogCQkiOmJ1aWxkLm1hYzY4ay5zdGFuZDpQeXRob242OEsutSIsCi0JXSkKLV0KLVBQQ1NUQU5EX0lOU1RSVUNUSU9OUz1bCi0JKGJ1aWxkbXdwcm9qZWN0LCAiQ1dJRSIsIFsKKwldKSwKKwkKK0lfNjhLX1NNQUxMIDogKGJ1aWxkbXdwcm9qZWN0LCAiQ1dJRSIsIFsKKwkJIjpidWlsZC5tYWM2OGsuc3RhbmQ6UHl0aG9uNjhLc21hbGwutSIsCisJXSksCisKK0lfUFBDX0ZVTEwgOiAoYnVpbGRtd3Byb2plY3QsICJDV0lFIiwgWwogCQkiOmJ1aWxkLm1hY3BwYy5zdGFuZDpQeXRob25TdGFuZGFsb25lLrUiLAotCV0pCi1dCi1FWFRFTlNJT05fSU5TVFJVQ1RJT05TPVsKLQkoYnVpbGRtd3Byb2plY3QsICJDV0lFIiwgWworCV0pLAorCitJX1BQQ19TTUFMTCA6IChidWlsZG13cHJvamVjdCwgIkNXSUUiLCBbCisJCSI6YnVpbGQubWFjcHBjLnN0YW5kOlB5dGhvblN0YW5kU21hbGwutSIsCisJXSksCisKK0lfUFBDX0VYVEVOU0lPTlMgOiAoYnVpbGRtd3Byb2plY3QsICJDV0lFIiwgWwogCQkiOkV4dGVuc2lvbnM6SW1hZ2luZzpfaW1hZ2luZy5wcGMutSIsCi0JCSI6RXh0ZW5zaW9uczpJbWFnaW5nOl9pbWFnaW5nLkNGTTY4Sy61IiwKIAkJIjpFeHRlbnNpb25zOkltYWdpbmc6X3RraW50ZXIucHBjLrUiLAotCQkiOkV4dGVuc2lvbnM6SW1hZ2luZzpfdGtpbnRlci5DRk02OEsutSIsCiAJCSI6RXh0ZW5zaW9uczpOdW1QeTpudW1weW1vZHVsZXMucHBjLrUiLAorCV0pLAorCitJXzY4S19FWFRFTlNJT05TIDogKGJ1aWxkbXdwcm9qZWN0LCAiQ1dJRSIsIFsKKwkJIjpFeHRlbnNpb25zOkltYWdpbmc6X2ltYWdpbmcuQ0ZNNjhLLrUiLAorCQkiOkV4dGVuc2lvbnM6SW1hZ2luZzpfdGtpbnRlci5DRk02OEsutSIsCiAJCSI6RXh0ZW5zaW9uczpOdW1QeTpudW1weW1vZHVsZXMuQ0ZNNjhLLrUiLAotCV0pCi1dCi1BUFBMRVRfSU5TVFJVQ1RJT05TPVsKLQkoYnVpbGRhcHBsZXQsIE5vbmUsIFsKKwldKSwKKworSV9BUFBMRVRTIDogKGJ1aWxkYXBwbGV0LCBOb25lLCBbCiAJCSI6TWFjOnNjcmlwdHM6RWRpdFB5dGhvblByZWZzLnB5IiwKIAkJIjpNYWM6c2NyaXB0czpta2FwcGxldC5weSIsCiAJCSI6TWFjOnNjcmlwdHM6TWtQbHVnaW5BbGlhc2VzLnB5IgotCV0pCi1dCisJXSksCiAKLUFMTElOU1Q9WwotCSgiUFBDIHNoYXJlZCBleGVjdXRhYmxlIiwgUFBDX0lOU1RSVUNUSU9OUyksCi0JKCJQUEMgcGx1Z2luIG1vZHVsZXMiLCBQTFVHSU5fSU5TVFJVQ1RJT05TKSwKLQkoIkNGTTY4SyBzaGFyZWQgZXhlY3V0YWJsZSIsIENGTTY4S19JTlNUUlVDVElPTlMpLAotCSgiQ0ZNNjhLIHBsdWdpbiBtb2R1bGVzIiwgQ0ZNNjhLUExVR0lOX0lOU1RSVUNUSU9OUyksCi0JKCJGQVQgc2hhcmVkIGV4ZWN1dGFibGVzIiwgRkFUX0lOU1RSVUNUSU9OUyksCi0JKCI2OEsgc3RhbmRhbG9uZSBleGVjdXRhYmxlIiwgTTY4S19JTlNUUlVDVElPTlMpLAotCSgiUFBDIHN0YW5kYWxvbmUgZXhlY3V0YWJsZSIsIFBQQ1NUQU5EX0lOU1RSVUNUSU9OUyksCi0JKCJFeHRlbnNpb25zIiwgRVhURU5TSU9OX0lOU1RSVUNUSU9OUyksCi0JKCJBcHBsZXRzIiwgQVBQTEVUX0lOU1RSVUNUSU9OUykKLV0KK0lfRkFUIDogKGJ1aWxkZmF0LCBOb25lLCBbCisJCQkoIjpQeXRob24iLCAiOmJ1aWxkLm1hY3BwYy5zaGFyZWQ6UHl0aG9uUFBDIiwgCisJCQkJCQkiOmJ1aWxkLm1hYzY4ay5zaGFyZWQ6UHl0aG9uQ0ZNNjhLIiksCisJCQkoIjpQeXRob25BcHBsZXQiLCAiOmJ1aWxkLm1hY3BwYy5zaGFyZWQ6UHl0aG9uQXBwbGV0UFBDIiwKKwkJCQkJCQkgICI6YnVpbGQubWFjNjhrLnNoYXJlZDpQeXRob25BcHBsZXRDRk02OEsiKQorCV0pCit9CiAJCQkJCiBkZWYgbWFpbigpOgorCXRyeToKKwkJaCA9IFJlcy5PcGVuUmVzRmlsZSgnZnVsbGJ1aWxkLnJzcmMnKQorCWV4Y2VwdCBSZXMuRXJyb3I6CisJCXBhc3MJIyBBc3N1bWUgd2UgYWxyZWFkeSBoYXZlIGFjY2VzIHRvIG91ciBvd24gcmVzb3VyY2UKKwogCWRpciwgb2sgPSBtYWNmcy5HZXREaXJlY3RvcnkoJ1B5dGhvbiBzb3VyY2UgZm9sZGVyOicpCiAJaWYgbm90IG9rOgogCQlzeXMuZXhpdCgwKQogCWRpciA9IGRpci5hc19wYXRobmFtZSgpCi0JSU5TVFJVQ1RJT05TID0gW10KLQlmb3Igc3RyaW5nLCBpbnN0IGluIEFMTElOU1Q6Ci0JCWFuc3dlciA9IEVhc3lEaWFsb2dzLkFza1llc05vQ2FuY2VsKCJCdWlsZCAlcz8iJXN0cmluZywgMSkKLQkJaWYgYW5zd2VyIDwgMDoKLQkJCXN5cy5leGl0KDApCi0JCWlmIGFuc3dlcjoKLQkJCUlOU1RSVUNUSU9OUyA9IElOU1RSVUNUSU9OUyArIGluc3QKLQlmb3Igcm91dGluZSwgYXJnLCBsaXN0IGluIElOU1RSVUNUSU9OUzoKLQkJcm91dGluZShkaXIsIGFyZywgbGlzdCkKKwkKKwl0b2RvID0gaGFuZGxlX2RpYWxvZygpCisJCisJaW5zdHJ1Y3Rpb25zID0gW10KKwlmb3IgaSBpbiB0b2RvOgorCQlpbnN0cnVjdGlvbnMuYXBwZW5kKEJVSUxEX0RJQ1RbaV0pCisJCQorCWZvciByb3V0aW5lLCBhcmcsIGxpc3QgaW4gaW5zdHJ1Y3Rpb25zOgorCQkjcm91dGluZShkaXIsIGFyZywgbGlzdCkKKwkJcHJpbnQgcm91dGluZSwgZGlyLCBhcmcsIGxpc3QgIyBEQkcKKwkJCiAJcHJpbnQgIkFsbCBkb25lISIKIAlzeXMuZXhpdCgxKQkKIAkKZGlmZiAtLWdpdCBhL01hYy9zY3JpcHRzL2Z1bGxidWlsZC5yc3JjLmhxeCBiL01hYy9zY3JpcHRzL2Z1bGxidWlsZC5yc3JjLmhxeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDY5MWI3Ci0tLSAvZGV2L251bGwKKysrIGIvTWFjL3NjcmlwdHMvZnVsbGJ1aWxkLnJzcmMuaHF4CkBAIC0wLDAgKzEsMTcgQEAKKyhUaGlzIGZpbGUgbXVzdCBiZSBjb252ZXJ0ZWQgd2l0aCBCaW5IZXggNC4wKQorCis6JFFDZUUnYUxHQFBYQyNqYkZoKk0hKCpjRlEwNThkOSUhMyMzImAtMFQlWCFOITMiISEhISFYRiEhISgoISEhCishNEohITRkSi04ZjBiQ0A5WiklOUtGZkBVKSEpISEhIjQ1ZjlpOGYwJkI1JSEkUUNlRSdhTEdAUFhDI2piRmgqCitNRkopISEhImJGaCpNOFAwJjQhJSFOITliRmgqTThQMCY0ISUhISEhIjMhIzMlVXE5JSZtIU4hQiQkMyMzI0ppCishISEiKDUhSzZFZkNkNWY5akZmQiMhISkhODhZUEgmJmk4ZlhLISEhZCElISFOITQoTCEjMyRSTmYhISJxIStLCisiRiEjVEdVQUQhKiFMTVQlISJgIzMkIjMhTiEzOSEjSiErISRsIUlGISEzJSEhMyMzIjMpIU4hMyJVSiE2ISohCismWSEnJyEtSiJgITMjNmRYIU4hQGQhIVMhYiEiJSIhQyRCQGpNQ0BgIU4hOE4hJ0YhMEokNCIzNCRFaCpQISohCismKiEkSSEkQiI1MzgoOCdhZUNmUFpGcCUhTiE4TiE5RiEwSigiIjNUJkgoNFBFUjBURWZqYyEqISYyISJSISVpCishZDM4JTNmcGJDMyMzIjZgIWhgIjEhOE4mImUiWEdAR1RFUjI0ISohJjIhJkEhJWkiYDM4KzRBS2RDQGpjREBwCitaRmAjMyI5YCFDYCJaITAlJiIlQ2VFJ2AhTiE5RiEwbSFFSiYqIjM5NkVAJlhFJ2AhTiE5ZCEnRiFLSiQ0IjM0CisnR0BhWCEqISZHISRJISlCIjUzOCY4ZmVLRSdhKiEqISZQISJSIStCIWQzOCo0USZkKSgiYkVmR2MhYCMzIkMzCishaGAjUSE4TiYiZCZgRidhUEcoMDghKiEmKiEhMCEkMyFAKUokOCYiJEchIzMiNmAhJDMiLSEmTCkhY0JpNWVKCishTiE5RiEhZCFFISJCTCFUNkcnJmREQC1KOCYiJCEqISZHISEwISkzIUApSis4aDRLRydQTSkkQmk1YCMzIkMzCishJDMjTiEmTCkiJWVURmYtIU4hOCkhKW0hJyElSkwiOTZDQGFQQmgzSkdmS0tHIyJkRWIiTEdAUFhDJFRYISEhCisiISEhISFYRiEhISgoISEhITRKKVlDKzM0NCEhISEiYCE0SiEiNCVhMjRgISEhIiolNTk0LSEhISEoSikhcnJtCishTiEzIyxAMG0hSiRycmAhISEiTiMsQCpCOTMtOgo=