ZGlmZiAtLWdpdCBhL01hYy9MaWIvdG9vbGJveC9BcHBsZUV2ZW50cy5weSBiL01hYy9MaWIvdG9vbGJveC9BcHBsZUV2ZW50cy5weQppbmRleCA1MTE0YzcyLi4yNzJjNDQ2IDEwMDY0NAotLS0gYS9NYWMvTGliL3Rvb2xib3gvQXBwbGVFdmVudHMucHkKKysrIGIvTWFjL0xpYi90b29sYm94L0FwcGxlRXZlbnRzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBHZW5lcmF0ZWQgZnJvbSAnTW9lczpDVzUgR09MRCBcMzA0Ok1ldHJvd2Vya3MgQy9DKysgXDMwNDpIZWFkZXJzIFwzMDQ6VW5pdmVyc2FsIEhlYWRlcnMgMi4wYTMgXDMwNDpBcHBsZUV2ZW50cy5oJworIyBHZW5lcmF0ZWQgZnJvbSAnTW9lczpDb2RlV2FycmlvcjY6TWV0cm93ZXJrcyBDL0MrKzpIZWFkZXJzOlVuaXZlcnNhbCBIZWFkZXJzIDIuMC4xZjpBcHBsZUV2ZW50cy5oJwogCiB0eXBlQm9vbGVhbiA9ICdib29sJwogdHlwZUNoYXIgPSAnVEVYVCcKZGlmZiAtLWdpdCBhL01hYy9MaWIvdG9vbGJveC9Db250cm9scy5weSBiL01hYy9MaWIvdG9vbGJveC9Db250cm9scy5weQppbmRleCBhZjE3NDdmLi41ZWJlOWM0IDEwMDY0NAotLS0gYS9NYWMvTGliL3Rvb2xib3gvQ29udHJvbHMucHkKKysrIGIvTWFjL0xpYi90b29sYm94L0NvbnRyb2xzLnB5CkBAIC0xLDExICsxLDI2IEBACi0jIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNXNSBHT0xEIFwzMDQ6TWV0cm93ZXJrcyBDL0MrKyBcMzA0OkhlYWRlcnMgXDMwNDpVbml2ZXJzYWwgSGVhZGVycyAyLjBhMyBcMzA0OkNvbnRyb2xzLmgnCisjIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNvZGVXYXJyaW9yNjpNZXRyb3dlcmtzIEMvQysrOkhlYWRlcnM6VW5pdmVyc2FsIEhlYWRlcnMgMi4wLjFmOkNvbnRyb2xzLmgnCiAKIHB1c2hCdXRQcm9jID0gMAogY2hlY2tCb3hQcm9jID0gMQogcmFkaW9CdXRQcm9jID0gMgogc2Nyb2xsQmFyUHJvYyA9IDE2CiBwb3B1cE1lbnVQcm9jID0gMTAwOAora0NvbnRyb2xVc2VzT3duaW5nV2luZG93c0ZvbnRWYXJpYW50ID0gMSA8PCAzCiB1c2VXRm9udCA9IDgKK2tDb250cm9sTm9QYXJ0ID0gMAora0NvbnRyb2xMYWJlbFBhcnQgPSAxCitrQ29udHJvbE1lbnVQYXJ0ID0gMgora0NvbnRyb2xUcmlhbmdsZVBhcnQgPSA0CitrQ29udHJvbEJ1dHRvblBhcnQgPSAxMAora0NvbnRyb2xDaGVja0JveFBhcnQgPSAxMQora0NvbnRyb2xSYWRpb0J1dHRvblBhcnQgPSAxMQora0NvbnRyb2xVcEJ1dHRvblBhcnQgPSAyMAora0NvbnRyb2xEb3duQnV0dG9uUGFydCA9IDIxCitrQ29udHJvbFBhZ2VVcFBhcnQgPSAyMgora0NvbnRyb2xQYWdlRG93blBhcnQgPSAyMwora0NvbnRyb2xJbmRpY2F0b3JQYXJ0ID0gMTI5CitrQ29udHJvbERpc2FibGVkUGFydCA9IDI1NAora0NvbnRyb2xJbmFjdGl2ZVBhcnQgPSAyNTUKIGluTGFiZWwgPSAxCiBpbk1lbnUgPSAyCiBpblRyaWFuZ2xlID0gNApAQCAtMTYsMTkgKzMxLDEyIEBACiBpblBhZ2VVcCA9IDIyCiBpblBhZ2VEb3duID0gMjMKIGluVGh1bWIgPSAxMjkKLWtOb0hpbGl0ZUNvbnRyb2xQYXJ0ID0gMAota0luTGFiZWxDb250cm9sUGFydCA9IDEKLWtJbk1lbnVDb250cm9sUGFydCA9IDIKLWtJblRyaWFuZ2xlQ29udHJvbFBhcnQgPSA0Ci1rSW5CdXR0b25Db250cm9sUGFydCA9IDEwCi1rSW5DaGVja0JveENvbnRyb2xQYXJ0ID0gMTEKLWtJblVwQnV0dG9uQ29udHJvbFBhcnQgPSAyMAota0luRG93bkJ1dHRvbkNvbnRyb2xQYXJ0ID0gMjEKLWtJblBhZ2VVcENvbnRyb2xQYXJ0ID0gMjIKLWtJblBhZ2VEb3duQ29udHJvbFBhcnQgPSAyMwota0luSW5kaWNhdG9yQ29udHJvbFBhcnQgPSAxMjkKLWtSZXNlcnZlZENvbnRyb2xQYXJ0ID0gMjU0Ci1rQ29udHJvbEluYWN0aXZlQ29udHJvbFBhcnQgPSAyNTUKK2tDb250cm9sQ2hlY2tib3hVbmNoZWNrZWRWYWx1ZSA9IDAKK2tDb250cm9sQ2hlY2tib3hDaGVja2VkVmFsdWUgPSAxCitrQ29udHJvbENoZWNrYm94TWl4ZWRWYWx1ZSA9IDIKK2tDb250cm9sUmFkaW9CdXR0b25VbmNoZWNrZWRWYWx1ZSA9IDAKK2tDb250cm9sUmFkaW9CdXR0b25DaGVja2VkVmFsdWUgPSAxCitrQ29udHJvbFJhZGlvQnV0dG9uTWl4ZWRWYWx1ZSA9IDIKIHBvcHVwRml4ZWRXaWR0aCA9IDEgPDwgMAogcG9wdXBWYXJpYWJsZVdpZHRoID0gMSA8PCAxCiBwb3B1cFVzZUFkZFJlc01lbnUgPSAxIDw8IDIKQEAgLTQ2LDYgKzU0LDEwIEBACiBwb3B1cFRpdGxlUmlnaHRKdXN0ID0gMHgwMDAwMDBGRgogaEF4aXNPbmx5ID0gMQogdkF4aXNPbmx5ID0gMgorY0ZyYW1lQ29sb3IgPSAwCitjQm9keUNvbG9yID0gMQorY1RleHRDb2xvciA9IDIKK2NUaHVtYkNvbG9yID0gMwogZHJhd0NudGwgPSAwCiB0ZXN0Q250bCA9IDEKIGNhbGNDUmducyA9IDIKQEAgLTU4LDcgKzcwLDE5IEBACiBjYWxjQ250bFJnbiA9IDEwCiBjYWxjVGh1bWJSZ24gPSAxMQogZHJhd1RodW1iT3V0bGluZSA9IDEyCi1jRnJhbWVDb2xvciA9IDAKLWNCb2R5Q29sb3IgPSAxCi1jVGV4dENvbG9yID0gMgotY1RodW1iQ29sb3IgPSAzCitrRHJhd0NvbnRyb2xFbnRpcmVDb250cm9sID0gMAora0RyYXdDb250cm9sSW5kaWNhdG9yT25seSA9IDEyOQora0RyYWdDb250cm9sRW50aXJlQ29udHJvbCA9IDAKK2tOb0hpbGl0ZUNvbnRyb2xQYXJ0ID0gMAora0luTGFiZWxDb250cm9sUGFydCA9IDEKK2tJbk1lbnVDb250cm9sUGFydCA9IDIKK2tJblRyaWFuZ2xlQ29udHJvbFBhcnQgPSA0CitrSW5CdXR0b25Db250cm9sUGFydCA9IDEwCitrSW5DaGVja0JveENvbnRyb2xQYXJ0ID0gMTEKK2tJblVwQnV0dG9uQ29udHJvbFBhcnQgPSAyMAora0luRG93bkJ1dHRvbkNvbnRyb2xQYXJ0ID0gMjEKK2tJblBhZ2VVcENvbnRyb2xQYXJ0ID0gMjIKK2tJblBhZ2VEb3duQ29udHJvbFBhcnQgPSAyMwora0luSW5kaWNhdG9yQ29udHJvbFBhcnQgPSAxMjkKK2tSZXNlcnZlZENvbnRyb2xQYXJ0ID0gMjU0CitrQ29udHJvbEluYWN0aXZlQ29udHJvbFBhcnQgPSAyNTUKZGlmZiAtLWdpdCBhL01hYy9MaWIvdG9vbGJveC9EaWFsb2dzLnB5IGIvTWFjL0xpYi90b29sYm94L0RpYWxvZ3MucHkKaW5kZXggNjZmZWE2Yi4uNTcyYzYwOSAxMDA2NDQKLS0tIGEvTWFjL0xpYi90b29sYm94L0RpYWxvZ3MucHkKKysrIGIvTWFjL0xpYi90b29sYm94L0RpYWxvZ3MucHkKQEAgLTEsNCArMSw0IEBACi0jIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNXNSBHT0xEIFwzMDQ6TWV0cm93ZXJrcyBDL0MrKyBcMzA0OkhlYWRlcnMgXDMwNDpVbml2ZXJzYWwgSGVhZGVycyAyLjBhMyBcMzA0OkRpYWxvZ3MuaCcKKyMgR2VuZXJhdGVkIGZyb20gJ01vZXM6Q29kZVdhcnJpb3I2Ok1ldHJvd2Vya3MgQy9DKys6SGVhZGVyczpVbml2ZXJzYWwgSGVhZGVycyAyLjAuMWY6RGlhbG9ncy5oJwogCiBjdHJsSXRlbSA9IDQKIGJ0bkN0cmwgPSAwCkBAIC0xNiw3ICsxNiw2IEBACiBzdG9wSWNvbiA9IDAKIG5vdGVJY29uID0gMQogY2F1dGlvbkljb24gPSAyCi1rSURPRGlhbG9nSXRlbSA9IDI0CiBvdmVybGF5RElUTCA9IDAKIGFwcGVuZERJVExSaWdodCA9IDEKIGFwcGVuZERJVExCb3R0b20gPSAyCmRpZmYgLS1naXQgYS9NYWMvTGliL3Rvb2xib3gvRXZlbnRzLnB5IGIvTWFjL0xpYi90b29sYm94L0V2ZW50cy5weQppbmRleCAzZDRmZjk0Li4wZmYwOTVhIDEwMDY0NAotLS0gYS9NYWMvTGliL3Rvb2xib3gvRXZlbnRzLnB5CisrKyBiL01hYy9MaWIvdG9vbGJveC9FdmVudHMucHkKQEAgLTEsNCArMSw0IEBACi0jIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNXNSBHT0xEIFwzMDQ6TWV0cm93ZXJrcyBDL0MrKyBcMzA0OkhlYWRlcnMgXDMwNDpVbml2ZXJzYWwgSGVhZGVycyAyLjBhMyBcMzA0OkV2ZW50cy5oJworIyBHZW5lcmF0ZWQgZnJvbSAnTW9lczpDb2RlV2FycmlvcjY6TWV0cm93ZXJrcyBDL0MrKzpIZWFkZXJzOlVuaXZlcnNhbCBIZWFkZXJzIDIuMC4xZjpFdmVudHMuaCcKIAogbnVsbEV2ZW50ID0gMAogbW91c2VEb3duID0gMQpAQCAtMzYsNiArMzYsOSBAQAogYWxwaGFMb2NrID0gMHgwNDAwCiBvcHRpb25LZXkgPSAweDA4MDAKIGNvbnRyb2xLZXkgPSAweDEwMDAKK3JpZ2h0U2hpZnRLZXkgPSAweDIwMDAKK3JpZ2h0T3B0aW9uS2V5ID0gMHg0MDAwCityaWdodENvbnRyb2xLZXkgPSAweDgwMDAKIG5ldHdvcmtFdnQgPSAxMAogZHJpdmVyRXZ0ID0gMTEKIGFwcDFFdnQgPSAxMgpkaWZmIC0tZ2l0IGEvTWFjL0xpYi90b29sYm94L01lbnVzLnB5IGIvTWFjL0xpYi90b29sYm94L01lbnVzLnB5CmluZGV4IDM3Mjk4MTAuLmMwNjNhYjUgMTAwNjQ0Ci0tLSBhL01hYy9MaWIvdG9vbGJveC9NZW51cy5weQorKysgYi9NYWMvTGliL3Rvb2xib3gvTWVudXMucHkKQEAgLTEsNCArMSw0IEBACi0jIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNXNSBHT0xEIFwzMDQ6TWV0cm93ZXJrcyBDL0MrKyBcMzA0OkhlYWRlcnMgXDMwNDpVbml2ZXJzYWwgSGVhZGVycyAyLjBhMyBcMzA0Ok1lbnVzLmgnCisjIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNvZGVXYXJyaW9yNjpNZXRyb3dlcmtzIEMvQysrOkhlYWRlcnM6VW5pdmVyc2FsIEhlYWRlcnMgMi4wLjFmOk1lbnVzLmgnCiAKIG5vTWFyayA9IDAKIG1EcmF3TXNnID0gMApkaWZmIC0tZ2l0IGEvTWFjL0xpYi90b29sYm94L1F1aWNrRHJhdy5weSBiL01hYy9MaWIvdG9vbGJveC9RdWlja0RyYXcucHkKaW5kZXggZTBhOGZmMS4uZjlhNmI4YyAxMDA2NDQKLS0tIGEvTWFjL0xpYi90b29sYm94L1F1aWNrRHJhdy5weQorKysgYi9NYWMvTGliL3Rvb2xib3gvUXVpY2tEcmF3LnB5CkBAIC0xLDQgKzEsNCBAQAotIyBHZW5lcmF0ZWQgZnJvbSAnTW9lczpDVzUgR09MRCBcMzA0Ok1ldHJvd2Vya3MgQy9DKysgXDMwNDpIZWFkZXJzIFwzMDQ6VW5pdmVyc2FsIEhlYWRlcnMgMi4wYTMgXDMwNDpRdWlja0RyYXcuaCcKKyMgR2VuZXJhdGVkIGZyb20gJ01vZXM6Q29kZVdhcnJpb3I2Ok1ldHJvd2Vya3MgQy9DKys6SGVhZGVyczpVbml2ZXJzYWwgSGVhZGVycyAyLjAuMWY6UXVpY2tEcmF3LmgnCiAKIGludmFsQ29sUmVxID0gLTEKIHNyY0NvcHkgPSAwCkBAIC0xOCw2ICsxOCw3IEBACiBub3RQYXRYb3IgPSAxNAogbm90UGF0QmljID0gMTUKIGdyYXlpc2hUZXh0T3IgPSA0OQoraGlsaXRldHJhbnNmZXJtb2RlID0gNTAKIGJsZW5kID0gMzIKIGFkZFBpbiA9IDMzCiBhZGRPdmVyID0gMzQKQEAgLTI4LDYgKzI5LDEyIEBACiBhZE1pbiA9IDM5CiBkaXRoZXJDb3B5ID0gNjQKIHRyYW5zcGFyZW50ID0gMzYKK2l0YWxpY0JpdCA9IDEKK3VsaW5lQml0ID0gMgorb3V0bGluZUJpdCA9IDMKK3NoYWRvd0JpdCA9IDQKK2NvbmRlbnNlQml0ID0gNQorZXh0ZW5kQml0ID0gNgogbm9ybWFsQml0ID0gMAogaW52ZXJzZUJpdCA9IDEKIHJlZEJpdCA9IDQKQEAgLTc1LDcgKzgyLDcgQEAKIGtOb0NvbnN0cmFpbnQgPSAwCiBrVmVydGljYWxDb25zdHJhaW50ID0gMQoga0hvcml6b250YWxDb25zdHJhaW50ID0gMgotIyBHZW5lcmF0ZWQgZnJvbSAnTW9lczpDVzUgR09MRCBcMzA0Ok1ldHJvd2Vya3MgQy9DKysgXDMwNDpIZWFkZXJzIFwzMDQ6VW5pdmVyc2FsIEhlYWRlcnMgMi4wYTMgXDMwNDpRdWlja0RyYXdUZXh0LmgnCisjIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNvZGVXYXJyaW9yNjpNZXRyb3dlcmtzIEMvQysrOkhlYWRlcnM6VW5pdmVyc2FsIEhlYWRlcnMgMi4wLjFmOlF1aWNrRHJhd1RleHQuaCcKIAogbGVmdENhcmV0ID0gMAogcmlnaHRDYXJldCA9IC0xCmRpZmYgLS1naXQgYS9NYWMvTGliL3Rvb2xib3gvUmVzb3VyY2VzLnB5IGIvTWFjL0xpYi90b29sYm94L1Jlc291cmNlcy5weQppbmRleCA3ZDUxZDZkLi4xYzRkODkwIDEwMDY0NAotLS0gYS9NYWMvTGliL3Rvb2xib3gvUmVzb3VyY2VzLnB5CisrKyBiL01hYy9MaWIvdG9vbGJveC9SZXNvdXJjZXMucHkKQEAgLTEsNCArMSw0IEBACi0jIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNXNSBHT0xEIFwzMDQ6TWV0cm93ZXJrcyBDL0MrKyBcMzA0OkhlYWRlcnMgXDMwNDpVbml2ZXJzYWwgSGVhZGVycyAyLjBhMyBcMzA0OlJlc291cmNlcy5oJworIyBHZW5lcmF0ZWQgZnJvbSAnTW9lczpDb2RlV2FycmlvcjY6TWV0cm93ZXJrcyBDL0MrKzpIZWFkZXJzOlVuaXZlcnNhbCBIZWFkZXJzIDIuMC4xZjpSZXNvdXJjZXMuaCcKIAogcmVzU3lzSGVhcCA9IDY0CiByZXNQdXJnZWFibGUgPSAzMgpkaWZmIC0tZ2l0IGEvTWFjL0xpYi90b29sYm94L1NvdW5kLnB5IGIvTWFjL0xpYi90b29sYm94L1NvdW5kLnB5CmluZGV4IDUxNWQwMjQuLmY3MjE2YzUgMTAwNjQ0Ci0tLSBhL01hYy9MaWIvdG9vbGJveC9Tb3VuZC5weQorKysgYi9NYWMvTGliL3Rvb2xib3gvU291bmQucHkKQEAgLTEsNCArMSw0IEBACi0jIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNXNSBHT0xEIFwzMDQ6TWV0cm93ZXJrcyBDL0MrKyBcMzA0OkhlYWRlcnMgXDMwNDpVbml2ZXJzYWwgSGVhZGVycyAyLjBhMyBcMzA0OlNvdW5kLmgnCisjIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNvZGVXYXJyaW9yNjpNZXRyb3dlcmtzIEMvQysrOkhlYWRlcnM6VW5pdmVyc2FsIEhlYWRlcnMgMi4wLjFmOlNvdW5kLmgnCiAKIHNvdW5kTGlzdFJzcmMgPSAnc25kICcKIHJhdGU0NGtoeiA9IDB4QUM0NDAwMDBMCmRpZmYgLS1naXQgYS9NYWMvTGliL3Rvb2xib3gvV2luZG93cy5weSBiL01hYy9MaWIvdG9vbGJveC9XaW5kb3dzLnB5CmluZGV4IDlhNjE1Y2QuLmNhNmY2MDIgMTAwNjQ0Ci0tLSBhL01hYy9MaWIvdG9vbGJveC9XaW5kb3dzLnB5CisrKyBiL01hYy9MaWIvdG9vbGJveC9XaW5kb3dzLnB5CkBAIC0xLDUgKzEsMTEgQEAKLSMgR2VuZXJhdGVkIGZyb20gJ01vZXM6Q1c1IEdPTEQgXDMwNDpNZXRyb3dlcmtzIEMvQysrIFwzMDQ6SGVhZGVycyBcMzA0OlVuaXZlcnNhbCBIZWFkZXJzIDIuMGEzIFwzMDQ6V2luZG93cy5oJworIyBHZW5lcmF0ZWQgZnJvbSAnTW9lczpDb2RlV2FycmlvcjY6TWV0cm93ZXJrcyBDL0MrKzpIZWFkZXJzOlVuaXZlcnNhbCBIZWFkZXJzIDIuMC4xZjpXaW5kb3dzLmgnCiAKK2tTdGFuZGFyZFdpbmRvd0RlZmluaXRpb24gPSAwCitrUm91bmRXaW5kb3dEZWZpbml0aW9uID0gMQora0Zsb2F0aW5nV2luZG93RGVmaW5pdGlvbiA9IDEyNAora01vZGFsRGlhbG9nVmFyaWFudENvZGUgPSAxCitrTW92YWJsZU1vZGFsRGlhbG9nVmFyaWFudENvZGUgPSA1CitrU2lkZUZsb2F0ZXJWYXJpYW50Q29kZSA9IDgKIGRvY3VtZW50UHJvYyA9IDAKIGRCb3hQcm9jID0gMQogcGxhaW5EQm94ID0gMgpAQCAtMTksNiArMjUsOCBAQAogZmxvYXRTaWRlWm9vbUdyb3dQcm9jID0gMTk5OQogZGlhbG9nS2luZCA9IDIKIHVzZXJLaW5kID0gOAora0RpYWxvZ1dpbmRvd0tpbmQgPSAyCitrQXBwbGljYXRpb25XaW5kb3dLaW5kID0gOAogaW5EZXNrID0gMAogaW5NZW51QmFyID0gMQogaW5TeXNXaW5kb3cgPSAyCkBAIC0zNiwxMSArNDQsNiBAQAogd0dyb3cgPSA1CiB3RHJhd0dJY29uID0gNgogZGVza1BhdElEID0gMTYKLXdDb250ZW50Q29sb3IgPSAwCi13RnJhbWVDb2xvciA9IDEKLXdUZXh0Q29sb3IgPSAyCi13SGlsaXRlQ29sb3IgPSAzCi13VGl0bGVCYXJDb2xvciA9IDQKIHdOb0hpdCA9IDAKIHdJbkNvbnRlbnQgPSAxCiB3SW5EcmFnID0gMgpAQCAtNDgsMyArNTEsOCBAQAogd0luR29Bd2F5ID0gNAogd0luWm9vbUluID0gNQogd0luWm9vbU91dCA9IDYKK3dDb250ZW50Q29sb3IgPSAwCit3RnJhbWVDb2xvciA9IDEKK3dUZXh0Q29sb3IgPSAyCit3SGlsaXRlQ29sb3IgPSAzCit3VGl0bGVCYXJDb2xvciA9IDQKZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL2FlL2FlZ2VuLnB5IGIvTWFjL01vZHVsZXMvYWUvYWVnZW4ucHkKaW5kZXggNDlmODkxZS4uMDcwZjhhMCAxMDA2NDQKLS0tIGEvTWFjL01vZHVsZXMvYWUvYWVnZW4ucHkKKysrIGIvTWFjL01vZHVsZXMvYWUvYWVnZW4ucHkKQEAgLTEsNCArMSw0IEBACi0jIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNXNSBHT0xEIFwzMDQ6TWV0cm93ZXJrcyBDL0MrKyBcMzA0OkhlYWRlcnMgXDMwNDpVbml2ZXJzYWwgSGVhZGVycyAyLjBhMyBcMzA0OkFwcGxlRXZlbnRzLmgnCisjIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNvZGVXYXJyaW9yNjpNZXRyb3dlcmtzIEMvQysrOkhlYWRlcnM6VW5pdmVyc2FsIEhlYWRlcnMgMi4wLjFmOkFwcGxlRXZlbnRzLmgnCiAKIGYgPSBBRUZ1bmN0aW9uKE9TRXJyLCAnQUVDcmVhdGVEZXNjJywKICAgICAoRGVzY1R5cGUsICd0eXBlQ29kZScsIEluTW9kZSksCmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9jdGwvQ3RsbW9kdWxlLmMgYi9NYWMvTW9kdWxlcy9jdGwvQ3RsbW9kdWxlLmMKaW5kZXggNmFmNzZhNS4uZWQzN2RlMCAxMDA2NDQKLS0tIGEvTWFjL01vZHVsZXMvY3RsL0N0bG1vZHVsZS5jCisrKyBiL01hYy9Nb2R1bGVzL2N0bC9DdGxtb2R1bGUuYwpAQCAtODYsNiArODYsMTcyIEBACiAJUHlNZW1fREVMKHNlbGYpOwogfQogCitzdGF0aWMgUHlPYmplY3QgKkN0bE9ial9EaXNwb3NlQ29udHJvbChfc2VsZiwgX2FyZ3MpCisJQ29udHJvbE9iamVjdCAqX3NlbGY7CisJUHlPYmplY3QgKl9hcmdzOworeworCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICIiKSkKKwkJcmV0dXJuIE5VTEw7CisJRGlzcG9zZUNvbnRyb2woX3NlbGYtPm9iX2l0c2VsZik7CisJUHlfSU5DUkVGKFB5X05vbmUpOworCV9yZXMgPSBQeV9Ob25lOworCXJldHVybiBfcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKkN0bE9ial9TaG93Q29udHJvbChfc2VsZiwgX2FyZ3MpCisJQ29udHJvbE9iamVjdCAqX3NlbGY7CisJUHlPYmplY3QgKl9hcmdzOworeworCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICIiKSkKKwkJcmV0dXJuIE5VTEw7CisJU2hvd0NvbnRyb2woX3NlbGYtPm9iX2l0c2VsZik7CisJUHlfSU5DUkVGKFB5X05vbmUpOworCV9yZXMgPSBQeV9Ob25lOworCXJldHVybiBfcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKkN0bE9ial9IaWRlQ29udHJvbChfc2VsZiwgX2FyZ3MpCisJQ29udHJvbE9iamVjdCAqX3NlbGY7CisJUHlPYmplY3QgKl9hcmdzOworeworCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICIiKSkKKwkJcmV0dXJuIE5VTEw7CisJSGlkZUNvbnRyb2woX3NlbGYtPm9iX2l0c2VsZik7CisJUHlfSU5DUkVGKFB5X05vbmUpOworCV9yZXMgPSBQeV9Ob25lOworCXJldHVybiBfcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKkN0bE9ial9EcmF3MUNvbnRyb2woX3NlbGYsIF9hcmdzKQorCUNvbnRyb2xPYmplY3QgKl9zZWxmOworCVB5T2JqZWN0ICpfYXJnczsKK3sKKwlQeU9iamVjdCAqX3JlcyA9IE5VTEw7CisJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKF9hcmdzLCAiIikpCisJCXJldHVybiBOVUxMOworCURyYXcxQ29udHJvbChfc2VsZi0+b2JfaXRzZWxmKTsKKwlQeV9JTkNSRUYoUHlfTm9uZSk7CisJX3JlcyA9IFB5X05vbmU7CisJcmV0dXJuIF9yZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqQ3RsT2JqX0hpbGl0ZUNvbnRyb2woX3NlbGYsIF9hcmdzKQorCUNvbnRyb2xPYmplY3QgKl9zZWxmOworCVB5T2JqZWN0ICpfYXJnczsKK3sKKwlQeU9iamVjdCAqX3JlcyA9IE5VTEw7CisJQ29udHJvbFBhcnRDb2RlIGhpbGl0ZVN0YXRlOworCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgImgiLAorCSAgICAgICAgICAgICAgICAgICAgICAmaGlsaXRlU3RhdGUpKQorCQlyZXR1cm4gTlVMTDsKKwlIaWxpdGVDb250cm9sKF9zZWxmLT5vYl9pdHNlbGYsCisJICAgICAgICAgICAgICBoaWxpdGVTdGF0ZSk7CisJUHlfSU5DUkVGKFB5X05vbmUpOworCV9yZXMgPSBQeV9Ob25lOworCXJldHVybiBfcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKkN0bE9ial9UcmFja0NvbnRyb2woX3NlbGYsIF9hcmdzKQorCUNvbnRyb2xPYmplY3QgKl9zZWxmOworCVB5T2JqZWN0ICpfYXJnczsKK3sKKwlQeU9iamVjdCAqX3JlcyA9IE5VTEw7CisJQ29udHJvbFBhcnRDb2RlIF9ydjsKKwlQb2ludCB0aGVQb2ludDsKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICJPJiIsCisJICAgICAgICAgICAgICAgICAgICAgIFB5TWFjX0dldFBvaW50LCAmdGhlUG9pbnQpKQorCQlyZXR1cm4gTlVMTDsKKwlfcnYgPSBUcmFja0NvbnRyb2woX3NlbGYtPm9iX2l0c2VsZiwKKwkgICAgICAgICAgICAgICAgICAgdGhlUG9pbnQsCisJICAgICAgICAgICAgICAgICAgIChDb250cm9sQWN0aW9uVVBQKTApOworCV9yZXMgPSBQeV9CdWlsZFZhbHVlKCJoIiwKKwkgICAgICAgICAgICAgICAgICAgICBfcnYpOworCXJldHVybiBfcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKkN0bE9ial9EcmFnQ29udHJvbChfc2VsZiwgX2FyZ3MpCisJQ29udHJvbE9iamVjdCAqX3NlbGY7CisJUHlPYmplY3QgKl9hcmdzOworeworCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKKwlQb2ludCBzdGFydFB0OworCVJlY3QgbGltaXRSZWN0OworCVJlY3Qgc2xvcFJlY3Q7CisJRHJhZ0NvbnN0cmFpbnQgYXhpczsKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICJPJk8mTyZoIiwKKwkgICAgICAgICAgICAgICAgICAgICAgUHlNYWNfR2V0UG9pbnQsICZzdGFydFB0LAorCSAgICAgICAgICAgICAgICAgICAgICBQeU1hY19HZXRSZWN0LCAmbGltaXRSZWN0LAorCSAgICAgICAgICAgICAgICAgICAgICBQeU1hY19HZXRSZWN0LCAmc2xvcFJlY3QsCisJICAgICAgICAgICAgICAgICAgICAgICZheGlzKSkKKwkJcmV0dXJuIE5VTEw7CisJRHJhZ0NvbnRyb2woX3NlbGYtPm9iX2l0c2VsZiwKKwkgICAgICAgICAgICBzdGFydFB0LAorCSAgICAgICAgICAgICZsaW1pdFJlY3QsCisJICAgICAgICAgICAgJnNsb3BSZWN0LAorCSAgICAgICAgICAgIGF4aXMpOworCVB5X0lOQ1JFRihQeV9Ob25lKTsKKwlfcmVzID0gUHlfTm9uZTsKKwlyZXR1cm4gX3JlczsKK30KKworc3RhdGljIFB5T2JqZWN0ICpDdGxPYmpfVGVzdENvbnRyb2woX3NlbGYsIF9hcmdzKQorCUNvbnRyb2xPYmplY3QgKl9zZWxmOworCVB5T2JqZWN0ICpfYXJnczsKK3sKKwlQeU9iamVjdCAqX3JlcyA9IE5VTEw7CisJQ29udHJvbFBhcnRDb2RlIF9ydjsKKwlQb2ludCB0aGVQdDsKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICJPJiIsCisJICAgICAgICAgICAgICAgICAgICAgIFB5TWFjX0dldFBvaW50LCAmdGhlUHQpKQorCQlyZXR1cm4gTlVMTDsKKwlfcnYgPSBUZXN0Q29udHJvbChfc2VsZi0+b2JfaXRzZWxmLAorCSAgICAgICAgICAgICAgICAgIHRoZVB0KTsKKwlfcmVzID0gUHlfQnVpbGRWYWx1ZSgiaCIsCisJICAgICAgICAgICAgICAgICAgICAgX3J2KTsKKwlyZXR1cm4gX3JlczsKK30KKworc3RhdGljIFB5T2JqZWN0ICpDdGxPYmpfTW92ZUNvbnRyb2woX3NlbGYsIF9hcmdzKQorCUNvbnRyb2xPYmplY3QgKl9zZWxmOworCVB5T2JqZWN0ICpfYXJnczsKK3sKKwlQeU9iamVjdCAqX3JlcyA9IE5VTEw7CisJU0ludDE2IGg7CisJU0ludDE2IHY7CisJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKF9hcmdzLCAiaGgiLAorCSAgICAgICAgICAgICAgICAgICAgICAmaCwKKwkgICAgICAgICAgICAgICAgICAgICAgJnYpKQorCQlyZXR1cm4gTlVMTDsKKwlNb3ZlQ29udHJvbChfc2VsZi0+b2JfaXRzZWxmLAorCSAgICAgICAgICAgIGgsCisJICAgICAgICAgICAgdik7CisJUHlfSU5DUkVGKFB5X05vbmUpOworCV9yZXMgPSBQeV9Ob25lOworCXJldHVybiBfcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKkN0bE9ial9TaXplQ29udHJvbChfc2VsZiwgX2FyZ3MpCisJQ29udHJvbE9iamVjdCAqX3NlbGY7CisJUHlPYmplY3QgKl9hcmdzOworeworCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKKwlTSW50MTYgdzsKKwlTSW50MTYgaDsKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICJoaCIsCisJICAgICAgICAgICAgICAgICAgICAgICZ3LAorCSAgICAgICAgICAgICAgICAgICAgICAmaCkpCisJCXJldHVybiBOVUxMOworCVNpemVDb250cm9sKF9zZWxmLT5vYl9pdHNlbGYsCisJICAgICAgICAgICAgdywKKwkgICAgICAgICAgICBoKTsKKwlQeV9JTkNSRUYoUHlfTm9uZSk7CisJX3JlcyA9IFB5X05vbmU7CisJcmV0dXJuIF9yZXM7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqQ3RsT2JqX1NldENvbnRyb2xUaXRsZShfc2VsZiwgX2FyZ3MpCiAJQ29udHJvbE9iamVjdCAqX3NlbGY7CiAJUHlPYmplY3QgKl9hcmdzOwpAQCAtMTE4LDEzNCArMjg0LDEyIEBACiAJcmV0dXJuIF9yZXM7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqQ3RsT2JqX0Rpc3Bvc2VDb250cm9sKF9zZWxmLCBfYXJncykKLQlDb250cm9sT2JqZWN0ICpfc2VsZjsKLQlQeU9iamVjdCAqX2FyZ3M7Ci17Ci0JUHlPYmplY3QgKl9yZXMgPSBOVUxMOwotCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgIiIpKQotCQlyZXR1cm4gTlVMTDsKLQlEaXNwb3NlQ29udHJvbChfc2VsZi0+b2JfaXRzZWxmKTsKLQlQeV9JTkNSRUYoUHlfTm9uZSk7Ci0JX3JlcyA9IFB5X05vbmU7Ci0JcmV0dXJuIF9yZXM7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqQ3RsT2JqX0hpZGVDb250cm9sKF9zZWxmLCBfYXJncykKLQlDb250cm9sT2JqZWN0ICpfc2VsZjsKLQlQeU9iamVjdCAqX2FyZ3M7Ci17Ci0JUHlPYmplY3QgKl9yZXMgPSBOVUxMOwotCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgIiIpKQotCQlyZXR1cm4gTlVMTDsKLQlIaWRlQ29udHJvbChfc2VsZi0+b2JfaXRzZWxmKTsKLQlQeV9JTkNSRUYoUHlfTm9uZSk7Ci0JX3JlcyA9IFB5X05vbmU7Ci0JcmV0dXJuIF9yZXM7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqQ3RsT2JqX1Nob3dDb250cm9sKF9zZWxmLCBfYXJncykKLQlDb250cm9sT2JqZWN0ICpfc2VsZjsKLQlQeU9iamVjdCAqX2FyZ3M7Ci17Ci0JUHlPYmplY3QgKl9yZXMgPSBOVUxMOwotCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgIiIpKQotCQlyZXR1cm4gTlVMTDsKLQlTaG93Q29udHJvbChfc2VsZi0+b2JfaXRzZWxmKTsKLQlQeV9JTkNSRUYoUHlfTm9uZSk7Ci0JX3JlcyA9IFB5X05vbmU7Ci0JcmV0dXJuIF9yZXM7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqQ3RsT2JqX0RyYXcxQ29udHJvbChfc2VsZiwgX2FyZ3MpCi0JQ29udHJvbE9iamVjdCAqX3NlbGY7Ci0JUHlPYmplY3QgKl9hcmdzOwotewotCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKLQlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICIiKSkKLQkJcmV0dXJuIE5VTEw7Ci0JRHJhdzFDb250cm9sKF9zZWxmLT5vYl9pdHNlbGYpOwotCVB5X0lOQ1JFRihQeV9Ob25lKTsKLQlfcmVzID0gUHlfTm9uZTsKLQlyZXR1cm4gX3JlczsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICpDdGxPYmpfSGlsaXRlQ29udHJvbChfc2VsZiwgX2FyZ3MpCi0JQ29udHJvbE9iamVjdCAqX3NlbGY7Ci0JUHlPYmplY3QgKl9hcmdzOwotewotCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKLQlzaG9ydCBoaWxpdGVTdGF0ZTsKLQlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICJoIiwKLQkgICAgICAgICAgICAgICAgICAgICAgJmhpbGl0ZVN0YXRlKSkKLQkJcmV0dXJuIE5VTEw7Ci0JSGlsaXRlQ29udHJvbChfc2VsZi0+b2JfaXRzZWxmLAotCSAgICAgICAgICAgICAgaGlsaXRlU3RhdGUpOwotCVB5X0lOQ1JFRihQeV9Ob25lKTsKLQlfcmVzID0gUHlfTm9uZTsKLQlyZXR1cm4gX3JlczsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICpDdGxPYmpfTW92ZUNvbnRyb2woX3NlbGYsIF9hcmdzKQotCUNvbnRyb2xPYmplY3QgKl9zZWxmOwotCVB5T2JqZWN0ICpfYXJnczsKLXsKLQlQeU9iamVjdCAqX3JlcyA9IE5VTEw7Ci0Jc2hvcnQgaDsKLQlzaG9ydCB2OwotCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgImhoIiwKLQkgICAgICAgICAgICAgICAgICAgICAgJmgsCi0JICAgICAgICAgICAgICAgICAgICAgICZ2KSkKLQkJcmV0dXJuIE5VTEw7Ci0JTW92ZUNvbnRyb2woX3NlbGYtPm9iX2l0c2VsZiwKLQkgICAgICAgICAgICBoLAotCSAgICAgICAgICAgIHYpOwotCVB5X0lOQ1JFRihQeV9Ob25lKTsKLQlfcmVzID0gUHlfTm9uZTsKLQlyZXR1cm4gX3JlczsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICpDdGxPYmpfU2l6ZUNvbnRyb2woX3NlbGYsIF9hcmdzKQotCUNvbnRyb2xPYmplY3QgKl9zZWxmOwotCVB5T2JqZWN0ICpfYXJnczsKLXsKLQlQeU9iamVjdCAqX3JlcyA9IE5VTEw7Ci0Jc2hvcnQgdzsKLQlzaG9ydCBoOwotCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgImhoIiwKLQkgICAgICAgICAgICAgICAgICAgICAgJncsCi0JICAgICAgICAgICAgICAgICAgICAgICZoKSkKLQkJcmV0dXJuIE5VTEw7Ci0JU2l6ZUNvbnRyb2woX3NlbGYtPm9iX2l0c2VsZiwKLQkgICAgICAgICAgICB3LAotCSAgICAgICAgICAgIGgpOwotCVB5X0lOQ1JFRihQeV9Ob25lKTsKLQlfcmVzID0gUHlfTm9uZTsKLQlyZXR1cm4gX3JlczsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICpDdGxPYmpfU2V0Q29udHJvbFZhbHVlKF9zZWxmLCBfYXJncykKLQlDb250cm9sT2JqZWN0ICpfc2VsZjsKLQlQeU9iamVjdCAqX2FyZ3M7Ci17Ci0JUHlPYmplY3QgKl9yZXMgPSBOVUxMOwotCXNob3J0IHRoZVZhbHVlOwotCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgImgiLAotCSAgICAgICAgICAgICAgICAgICAgICAmdGhlVmFsdWUpKQotCQlyZXR1cm4gTlVMTDsKLQlTZXRDb250cm9sVmFsdWUoX3NlbGYtPm9iX2l0c2VsZiwKLQkgICAgICAgICAgICAgICAgdGhlVmFsdWUpOwotCVB5X0lOQ1JFRihQeV9Ob25lKTsKLQlfcmVzID0gUHlfTm9uZTsKLQlyZXR1cm4gX3JlczsKLX0KLQogc3RhdGljIFB5T2JqZWN0ICpDdGxPYmpfR2V0Q29udHJvbFZhbHVlKF9zZWxmLCBfYXJncykKIAlDb250cm9sT2JqZWN0ICpfc2VsZjsKIAlQeU9iamVjdCAqX2FyZ3M7CiB7CiAJUHlPYmplY3QgKl9yZXMgPSBOVUxMOwotCXNob3J0IF9ydjsKKwlTSW50MTYgX3J2OwogCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgIiIpKQogCQlyZXR1cm4gTlVMTDsKIAlfcnYgPSBHZXRDb250cm9sVmFsdWUoX3NlbGYtPm9iX2l0c2VsZik7CkBAIC0yNTQsMTcgKzI5OCwxNyBAQAogCXJldHVybiBfcmVzOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKkN0bE9ial9TZXRDb250cm9sTWluaW11bShfc2VsZiwgX2FyZ3MpCitzdGF0aWMgUHlPYmplY3QgKkN0bE9ial9TZXRDb250cm9sVmFsdWUoX3NlbGYsIF9hcmdzKQogCUNvbnRyb2xPYmplY3QgKl9zZWxmOwogCVB5T2JqZWN0ICpfYXJnczsKIHsKIAlQeU9iamVjdCAqX3JlcyA9IE5VTEw7Ci0Jc2hvcnQgbWluVmFsdWU7CisJU0ludDE2IG5ld1ZhbHVlOwogCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgImgiLAotCSAgICAgICAgICAgICAgICAgICAgICAmbWluVmFsdWUpKQorCSAgICAgICAgICAgICAgICAgICAgICAmbmV3VmFsdWUpKQogCQlyZXR1cm4gTlVMTDsKLQlTZXRDb250cm9sTWluaW11bShfc2VsZi0+b2JfaXRzZWxmLAotCSAgICAgICAgICAgICAgICAgIG1pblZhbHVlKTsKKwlTZXRDb250cm9sVmFsdWUoX3NlbGYtPm9iX2l0c2VsZiwKKwkgICAgICAgICAgICAgICAgbmV3VmFsdWUpOwogCVB5X0lOQ1JFRihQeV9Ob25lKTsKIAlfcmVzID0gUHlfTm9uZTsKIAlyZXR1cm4gX3JlczsKQEAgLTI3NSw3ICszMTksNyBAQAogCVB5T2JqZWN0ICpfYXJnczsKIHsKIAlQeU9iamVjdCAqX3JlcyA9IE5VTEw7Ci0Jc2hvcnQgX3J2OworCVNJbnQxNiBfcnY7CiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKF9hcmdzLCAiIikpCiAJCXJldHVybiBOVUxMOwogCV9ydiA9IEdldENvbnRyb2xNaW5pbXVtKF9zZWxmLT5vYl9pdHNlbGYpOwpAQCAtMjg0LDE3ICszMjgsMTcgQEAKIAlyZXR1cm4gX3JlczsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICpDdGxPYmpfU2V0Q29udHJvbE1heGltdW0oX3NlbGYsIF9hcmdzKQorc3RhdGljIFB5T2JqZWN0ICpDdGxPYmpfU2V0Q29udHJvbE1pbmltdW0oX3NlbGYsIF9hcmdzKQogCUNvbnRyb2xPYmplY3QgKl9zZWxmOwogCVB5T2JqZWN0ICpfYXJnczsKIHsKIAlQeU9iamVjdCAqX3JlcyA9IE5VTEw7Ci0Jc2hvcnQgbWF4VmFsdWU7CisJU0ludDE2IG5ld01pbmltdW07CiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKF9hcmdzLCAiaCIsCi0JICAgICAgICAgICAgICAgICAgICAgICZtYXhWYWx1ZSkpCisJICAgICAgICAgICAgICAgICAgICAgICZuZXdNaW5pbXVtKSkKIAkJcmV0dXJuIE5VTEw7Ci0JU2V0Q29udHJvbE1heGltdW0oX3NlbGYtPm9iX2l0c2VsZiwKLQkgICAgICAgICAgICAgICAgICBtYXhWYWx1ZSk7CisJU2V0Q29udHJvbE1pbmltdW0oX3NlbGYtPm9iX2l0c2VsZiwKKwkgICAgICAgICAgICAgICAgICBuZXdNaW5pbXVtKTsKIAlQeV9JTkNSRUYoUHlfTm9uZSk7CiAJX3JlcyA9IFB5X05vbmU7CiAJcmV0dXJuIF9yZXM7CkBAIC0zMDUsNyArMzQ5LDcgQEAKIAlQeU9iamVjdCAqX2FyZ3M7CiB7CiAJUHlPYmplY3QgKl9yZXMgPSBOVUxMOwotCXNob3J0IF9ydjsKKwlTSW50MTYgX3J2OwogCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgIiIpKQogCQlyZXR1cm4gTlVMTDsKIAlfcnYgPSBHZXRDb250cm9sTWF4aW11bShfc2VsZi0+b2JfaXRzZWxmKTsKQEAgLTMxNCwzMiArMzU4LDMyIEBACiAJcmV0dXJuIF9yZXM7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqQ3RsT2JqX1NldENvbnRyb2xSZWZlcmVuY2UoX3NlbGYsIF9hcmdzKQorc3RhdGljIFB5T2JqZWN0ICpDdGxPYmpfU2V0Q29udHJvbE1heGltdW0oX3NlbGYsIF9hcmdzKQogCUNvbnRyb2xPYmplY3QgKl9zZWxmOwogCVB5T2JqZWN0ICpfYXJnczsKIHsKIAlQeU9iamVjdCAqX3JlcyA9IE5VTEw7Ci0JbG9uZyBkYXRhOwotCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgImwiLAotCSAgICAgICAgICAgICAgICAgICAgICAmZGF0YSkpCisJU0ludDE2IG5ld01heGltdW07CisJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKF9hcmdzLCAiaCIsCisJICAgICAgICAgICAgICAgICAgICAgICZuZXdNYXhpbXVtKSkKIAkJcmV0dXJuIE5VTEw7Ci0JU2V0Q29udHJvbFJlZmVyZW5jZShfc2VsZi0+b2JfaXRzZWxmLAotCSAgICAgICAgICAgICAgICAgICAgZGF0YSk7CisJU2V0Q29udHJvbE1heGltdW0oX3NlbGYtPm9iX2l0c2VsZiwKKwkgICAgICAgICAgICAgICAgICBuZXdNYXhpbXVtKTsKIAlQeV9JTkNSRUYoUHlfTm9uZSk7CiAJX3JlcyA9IFB5X05vbmU7CiAJcmV0dXJuIF9yZXM7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqQ3RsT2JqX0dldENvbnRyb2xSZWZlcmVuY2UoX3NlbGYsIF9hcmdzKQorc3RhdGljIFB5T2JqZWN0ICpDdGxPYmpfR2V0Q29udHJvbFZhcmlhbnQoX3NlbGYsIF9hcmdzKQogCUNvbnRyb2xPYmplY3QgKl9zZWxmOwogCVB5T2JqZWN0ICpfYXJnczsKIHsKIAlQeU9iamVjdCAqX3JlcyA9IE5VTEw7Ci0JbG9uZyBfcnY7CisJU0ludDE2IF9ydjsKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICIiKSkKIAkJcmV0dXJuIE5VTEw7Ci0JX3J2ID0gR2V0Q29udHJvbFJlZmVyZW5jZShfc2VsZi0+b2JfaXRzZWxmKTsKLQlfcmVzID0gUHlfQnVpbGRWYWx1ZSgibCIsCisJX3J2ID0gR2V0Q29udHJvbFZhcmlhbnQoX3NlbGYtPm9iX2l0c2VsZik7CisJX3JlcyA9IFB5X0J1aWxkVmFsdWUoImgiLAogCSAgICAgICAgICAgICAgICAgICAgIF9ydik7CiAJcmV0dXJuIF9yZXM7CiB9CkBAIC0zNTgsMTI1ICs0MDIsODEgQEAKIAlyZXR1cm4gX3JlczsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICpDdGxPYmpfRHJhZ0NvbnRyb2woX3NlbGYsIF9hcmdzKQorc3RhdGljIFB5T2JqZWN0ICpDdGxPYmpfU2V0Q29udHJvbFJlZmVyZW5jZShfc2VsZiwgX2FyZ3MpCiAJQ29udHJvbE9iamVjdCAqX3NlbGY7CiAJUHlPYmplY3QgKl9hcmdzOwogewogCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKLQlQb2ludCBzdGFydFB0OwotCVJlY3QgbGltaXRSZWN0OwotCVJlY3Qgc2xvcFJlY3Q7Ci0Jc2hvcnQgYXhpczsKLQlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICJPJk8mTyZoIiwKLQkgICAgICAgICAgICAgICAgICAgICAgUHlNYWNfR2V0UG9pbnQsICZzdGFydFB0LAotCSAgICAgICAgICAgICAgICAgICAgICBQeU1hY19HZXRSZWN0LCAmbGltaXRSZWN0LAotCSAgICAgICAgICAgICAgICAgICAgICBQeU1hY19HZXRSZWN0LCAmc2xvcFJlY3QsCi0JICAgICAgICAgICAgICAgICAgICAgICZheGlzKSkKKwlTSW50MzIgZGF0YTsKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICJsIiwKKwkgICAgICAgICAgICAgICAgICAgICAgJmRhdGEpKQogCQlyZXR1cm4gTlVMTDsKLQlEcmFnQ29udHJvbChfc2VsZi0+b2JfaXRzZWxmLAotCSAgICAgICAgICAgIHN0YXJ0UHQsCi0JICAgICAgICAgICAgJmxpbWl0UmVjdCwKLQkgICAgICAgICAgICAmc2xvcFJlY3QsCi0JICAgICAgICAgICAgYXhpcyk7CisJU2V0Q29udHJvbFJlZmVyZW5jZShfc2VsZi0+b2JfaXRzZWxmLAorCSAgICAgICAgICAgICAgICAgICAgZGF0YSk7CiAJUHlfSU5DUkVGKFB5X05vbmUpOwogCV9yZXMgPSBQeV9Ob25lOwogCXJldHVybiBfcmVzOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKkN0bE9ial9UZXN0Q29udHJvbChfc2VsZiwgX2FyZ3MpCitzdGF0aWMgUHlPYmplY3QgKkN0bE9ial9HZXRDb250cm9sUmVmZXJlbmNlKF9zZWxmLCBfYXJncykKIAlDb250cm9sT2JqZWN0ICpfc2VsZjsKIAlQeU9iamVjdCAqX2FyZ3M7CiB7CiAJUHlPYmplY3QgKl9yZXMgPSBOVUxMOwotCXNob3J0IF9ydjsKLQlQb2ludCB0aGVQdDsKLQlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICJPJiIsCi0JICAgICAgICAgICAgICAgICAgICAgIFB5TWFjX0dldFBvaW50LCAmdGhlUHQpKQotCQlyZXR1cm4gTlVMTDsKLQlfcnYgPSBUZXN0Q29udHJvbChfc2VsZi0+b2JfaXRzZWxmLAotCSAgICAgICAgICAgICAgICAgIHRoZVB0KTsKLQlfcmVzID0gUHlfQnVpbGRWYWx1ZSgiaCIsCi0JICAgICAgICAgICAgICAgICAgICAgX3J2KTsKLQlyZXR1cm4gX3JlczsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICpDdGxPYmpfR2V0Q29udHJvbFZhcmlhbnQoX3NlbGYsIF9hcmdzKQotCUNvbnRyb2xPYmplY3QgKl9zZWxmOwotCVB5T2JqZWN0ICpfYXJnczsKLXsKLQlQeU9iamVjdCAqX3JlcyA9IE5VTEw7Ci0Jc2hvcnQgX3J2OworCVNJbnQzMiBfcnY7CiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKF9hcmdzLCAiIikpCiAJCXJldHVybiBOVUxMOwotCV9ydiA9IEdldENvbnRyb2xWYXJpYW50KF9zZWxmLT5vYl9pdHNlbGYpOwotCV9yZXMgPSBQeV9CdWlsZFZhbHVlKCJoIiwKLQkgICAgICAgICAgICAgICAgICAgICBfcnYpOwotCXJldHVybiBfcmVzOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKkN0bE9ial9UcmFja0NvbnRyb2woX3NlbGYsIF9hcmdzKQotCUNvbnRyb2xPYmplY3QgKl9zZWxmOwotCVB5T2JqZWN0ICpfYXJnczsKLXsKLQlQeU9iamVjdCAqX3JlcyA9IE5VTEw7Ci0Jc2hvcnQgX3J2OwotCVBvaW50IHRoZVBvaW50OwotCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgIk8mIiwKLQkgICAgICAgICAgICAgICAgICAgICAgUHlNYWNfR2V0UG9pbnQsICZ0aGVQb2ludCkpCi0JCXJldHVybiBOVUxMOwotCV9ydiA9IFRyYWNrQ29udHJvbChfc2VsZi0+b2JfaXRzZWxmLAotCSAgICAgICAgICAgICAgICAgICB0aGVQb2ludCwKLQkgICAgICAgICAgICAgICAgICAgKENvbnRyb2xBY3Rpb25VUFApMCk7Ci0JX3JlcyA9IFB5X0J1aWxkVmFsdWUoImgiLAorCV9ydiA9IEdldENvbnRyb2xSZWZlcmVuY2UoX3NlbGYtPm9iX2l0c2VsZik7CisJX3JlcyA9IFB5X0J1aWxkVmFsdWUoImwiLAogCSAgICAgICAgICAgICAgICAgICAgIF9ydik7CiAJcmV0dXJuIF9yZXM7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBDdGxPYmpfbWV0aG9kc1tdID0gewotCXsiU2V0Q29udHJvbFRpdGxlIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9TZXRDb250cm9sVGl0bGUsIDEsCi0JICIoU3RyMjU1IHRpdGxlKSAtPiBOb25lIn0sCi0JeyJHZXRDb250cm9sVGl0bGUiLCAoUHlDRnVuY3Rpb24pQ3RsT2JqX0dldENvbnRyb2xUaXRsZSwgMSwKLQkgIihTdHIyNTUgdGl0bGUpIC0+IE5vbmUifSwKIAl7IkRpc3Bvc2VDb250cm9sIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9EaXNwb3NlQ29udHJvbCwgMSwKIAkgIigpIC0+IE5vbmUifSwKLQl7IkhpZGVDb250cm9sIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9IaWRlQ29udHJvbCwgMSwKLQkgIigpIC0+IE5vbmUifSwKIAl7IlNob3dDb250cm9sIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9TaG93Q29udHJvbCwgMSwKIAkgIigpIC0+IE5vbmUifSwKKwl7IkhpZGVDb250cm9sIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9IaWRlQ29udHJvbCwgMSwKKwkgIigpIC0+IE5vbmUifSwKIAl7IkRyYXcxQ29udHJvbCIsIChQeUNGdW5jdGlvbilDdGxPYmpfRHJhdzFDb250cm9sLCAxLAogCSAiKCkgLT4gTm9uZSJ9LAogCXsiSGlsaXRlQ29udHJvbCIsIChQeUNGdW5jdGlvbilDdGxPYmpfSGlsaXRlQ29udHJvbCwgMSwKLQkgIihzaG9ydCBoaWxpdGVTdGF0ZSkgLT4gTm9uZSJ9LAorCSAiKENvbnRyb2xQYXJ0Q29kZSBoaWxpdGVTdGF0ZSkgLT4gTm9uZSJ9LAorCXsiVHJhY2tDb250cm9sIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9UcmFja0NvbnRyb2wsIDEsCisJICIoUG9pbnQgdGhlUG9pbnQpIC0+IChDb250cm9sUGFydENvZGUgX3J2KSJ9LAorCXsiRHJhZ0NvbnRyb2wiLCAoUHlDRnVuY3Rpb24pQ3RsT2JqX0RyYWdDb250cm9sLCAxLAorCSAiKFBvaW50IHN0YXJ0UHQsIFJlY3QgbGltaXRSZWN0LCBSZWN0IHNsb3BSZWN0LCBEcmFnQ29uc3RyYWludCBheGlzKSAtPiBOb25lIn0sCisJeyJUZXN0Q29udHJvbCIsIChQeUNGdW5jdGlvbilDdGxPYmpfVGVzdENvbnRyb2wsIDEsCisJICIoUG9pbnQgdGhlUHQpIC0+IChDb250cm9sUGFydENvZGUgX3J2KSJ9LAogCXsiTW92ZUNvbnRyb2wiLCAoUHlDRnVuY3Rpb24pQ3RsT2JqX01vdmVDb250cm9sLCAxLAotCSAiKHNob3J0IGgsIHNob3J0IHYpIC0+IE5vbmUifSwKKwkgIihTSW50MTYgaCwgU0ludDE2IHYpIC0+IE5vbmUifSwKIAl7IlNpemVDb250cm9sIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9TaXplQ29udHJvbCwgMSwKLQkgIihzaG9ydCB3LCBzaG9ydCBoKSAtPiBOb25lIn0sCi0JeyJTZXRDb250cm9sVmFsdWUiLCAoUHlDRnVuY3Rpb24pQ3RsT2JqX1NldENvbnRyb2xWYWx1ZSwgMSwKLQkgIihzaG9ydCB0aGVWYWx1ZSkgLT4gTm9uZSJ9LAorCSAiKFNJbnQxNiB3LCBTSW50MTYgaCkgLT4gTm9uZSJ9LAorCXsiU2V0Q29udHJvbFRpdGxlIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9TZXRDb250cm9sVGl0bGUsIDEsCisJICIoU3RyMjU1IHRpdGxlKSAtPiBOb25lIn0sCisJeyJHZXRDb250cm9sVGl0bGUiLCAoUHlDRnVuY3Rpb24pQ3RsT2JqX0dldENvbnRyb2xUaXRsZSwgMSwKKwkgIihTdHIyNTUgdGl0bGUpIC0+IE5vbmUifSwKIAl7IkdldENvbnRyb2xWYWx1ZSIsIChQeUNGdW5jdGlvbilDdGxPYmpfR2V0Q29udHJvbFZhbHVlLCAxLAotCSAiKCkgLT4gKHNob3J0IF9ydikifSwKLQl7IlNldENvbnRyb2xNaW5pbXVtIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9TZXRDb250cm9sTWluaW11bSwgMSwKLQkgIihzaG9ydCBtaW5WYWx1ZSkgLT4gTm9uZSJ9LAorCSAiKCkgLT4gKFNJbnQxNiBfcnYpIn0sCisJeyJTZXRDb250cm9sVmFsdWUiLCAoUHlDRnVuY3Rpb24pQ3RsT2JqX1NldENvbnRyb2xWYWx1ZSwgMSwKKwkgIihTSW50MTYgbmV3VmFsdWUpIC0+IE5vbmUifSwKIAl7IkdldENvbnRyb2xNaW5pbXVtIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9HZXRDb250cm9sTWluaW11bSwgMSwKLQkgIigpIC0+IChzaG9ydCBfcnYpIn0sCi0JeyJTZXRDb250cm9sTWF4aW11bSIsIChQeUNGdW5jdGlvbilDdGxPYmpfU2V0Q29udHJvbE1heGltdW0sIDEsCi0JICIoc2hvcnQgbWF4VmFsdWUpIC0+IE5vbmUifSwKKwkgIigpIC0+IChTSW50MTYgX3J2KSJ9LAorCXsiU2V0Q29udHJvbE1pbmltdW0iLCAoUHlDRnVuY3Rpb24pQ3RsT2JqX1NldENvbnRyb2xNaW5pbXVtLCAxLAorCSAiKFNJbnQxNiBuZXdNaW5pbXVtKSAtPiBOb25lIn0sCiAJeyJHZXRDb250cm9sTWF4aW11bSIsIChQeUNGdW5jdGlvbilDdGxPYmpfR2V0Q29udHJvbE1heGltdW0sIDEsCi0JICIoKSAtPiAoc2hvcnQgX3J2KSJ9LAotCXsiU2V0Q29udHJvbFJlZmVyZW5jZSIsIChQeUNGdW5jdGlvbilDdGxPYmpfU2V0Q29udHJvbFJlZmVyZW5jZSwgMSwKLQkgIihsb25nIGRhdGEpIC0+IE5vbmUifSwKLQl7IkdldENvbnRyb2xSZWZlcmVuY2UiLCAoUHlDRnVuY3Rpb24pQ3RsT2JqX0dldENvbnRyb2xSZWZlcmVuY2UsIDEsCi0JICIoKSAtPiAobG9uZyBfcnYpIn0sCisJICIoKSAtPiAoU0ludDE2IF9ydikifSwKKwl7IlNldENvbnRyb2xNYXhpbXVtIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9TZXRDb250cm9sTWF4aW11bSwgMSwKKwkgIihTSW50MTYgbmV3TWF4aW11bSkgLT4gTm9uZSJ9LAorCXsiR2V0Q29udHJvbFZhcmlhbnQiLCAoUHlDRnVuY3Rpb24pQ3RsT2JqX0dldENvbnRyb2xWYXJpYW50LCAxLAorCSAiKCkgLT4gKFNJbnQxNiBfcnYpIn0sCiAJeyJTZXRDb250cm9sQWN0aW9uIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9TZXRDb250cm9sQWN0aW9uLCAxLAogCSAiKCkgLT4gTm9uZSJ9LAotCXsiRHJhZ0NvbnRyb2wiLCAoUHlDRnVuY3Rpb24pQ3RsT2JqX0RyYWdDb250cm9sLCAxLAotCSAiKFBvaW50IHN0YXJ0UHQsIFJlY3QgbGltaXRSZWN0LCBSZWN0IHNsb3BSZWN0LCBzaG9ydCBheGlzKSAtPiBOb25lIn0sCi0JeyJUZXN0Q29udHJvbCIsIChQeUNGdW5jdGlvbilDdGxPYmpfVGVzdENvbnRyb2wsIDEsCi0JICIoUG9pbnQgdGhlUHQpIC0+IChzaG9ydCBfcnYpIn0sCi0JeyJHZXRDb250cm9sVmFyaWFudCIsIChQeUNGdW5jdGlvbilDdGxPYmpfR2V0Q29udHJvbFZhcmlhbnQsIDEsCi0JICIoKSAtPiAoc2hvcnQgX3J2KSJ9LAotCXsiVHJhY2tDb250cm9sIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9UcmFja0NvbnRyb2wsIDEsCi0JICIoUG9pbnQgdGhlUG9pbnQpIC0+IChzaG9ydCBfcnYpIn0sCisJeyJTZXRDb250cm9sUmVmZXJlbmNlIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9TZXRDb250cm9sUmVmZXJlbmNlLCAxLAorCSAiKFNJbnQzMiBkYXRhKSAtPiBOb25lIn0sCisJeyJHZXRDb250cm9sUmVmZXJlbmNlIiwgKFB5Q0Z1bmN0aW9uKUN0bE9ial9HZXRDb250cm9sUmVmZXJlbmNlLCAxLAorCSAiKCkgLT4gKFNJbnQzMiBfcnYpIn0sCiAJe05VTEwsIE5VTEwsIDB9CiB9OwogCkBAIC01MTcsMTEgKzUxNywxMSBAQAogCVJlY3QgYm91bmRzUmVjdDsKIAlTdHIyNTUgdGl0bGU7CiAJQm9vbGVhbiB2aXNpYmxlOwotCXNob3J0IHZhbHVlOwotCXNob3J0IG1pbjsKLQlzaG9ydCBtYXg7Ci0Jc2hvcnQgcHJvY0lEOwotCWxvbmcgcmVmQ29uOworCVNJbnQxNiB2YWx1ZTsKKwlTSW50MTYgbWluOworCVNJbnQxNiBtYXg7CisJU0ludDE2IHByb2NJRDsKKwlTSW50MzIgcmVmQ29uOwogCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgIk8mTyZPJmJoaGhobCIsCiAJICAgICAgICAgICAgICAgICAgICAgIFdpbk9ial9Db252ZXJ0LCAmdGhlV2luZG93LAogCSAgICAgICAgICAgICAgICAgICAgICBQeU1hY19HZXRSZWN0LCAmYm91bmRzUmVjdCwKQEAgLTU1Myw3ICs1NTMsNyBAQAogewogCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKIAlDb250cm9sSGFuZGxlIF9ydjsKLQlzaG9ydCBjb250cm9sSUQ7CisJU0ludDE2IGNvbnRyb2xJRDsKIAlXaW5kb3dQdHIgb3duZXI7CiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKF9hcmdzLCAiaE8mIiwKIAkgICAgICAgICAgICAgICAgICAgICAgJmNvbnRyb2xJRCwKQEAgLTYxNyw3ICs2MTcsNyBAQAogCVB5T2JqZWN0ICpfYXJnczsKIHsKIAlQeU9iamVjdCAqX3JlcyA9IE5VTEw7Ci0Jc2hvcnQgX3J2OworCUNvbnRyb2xQYXJ0Q29kZSBfcnY7CiAJUG9pbnQgdGhlUG9pbnQ7CiAJV2luZG93UHRyIHRoZVdpbmRvdzsKIAlDb250cm9sSGFuZGxlIHRoZUNvbnRyb2w7CkBAIC02MzYsOSArNjM2LDkgQEAKIAogc3RhdGljIFB5TWV0aG9kRGVmIEN0bF9tZXRob2RzW10gPSB7CiAJeyJOZXdDb250cm9sIiwgKFB5Q0Z1bmN0aW9uKUN0bF9OZXdDb250cm9sLCAxLAotCSAiKFdpbmRvd1B0ciB0aGVXaW5kb3csIFJlY3QgYm91bmRzUmVjdCwgU3RyMjU1IHRpdGxlLCBCb29sZWFuIHZpc2libGUsIHNob3J0IHZhbHVlLCBzaG9ydCBtaW4sIHNob3J0IG1heCwgc2hvcnQgcHJvY0lELCBsb25nIHJlZkNvbikgLT4gKENvbnRyb2xIYW5kbGUgX3J2KSJ9LAorCSAiKFdpbmRvd1B0ciB0aGVXaW5kb3csIFJlY3QgYm91bmRzUmVjdCwgU3RyMjU1IHRpdGxlLCBCb29sZWFuIHZpc2libGUsIFNJbnQxNiB2YWx1ZSwgU0ludDE2IG1pbiwgU0ludDE2IG1heCwgU0ludDE2IHByb2NJRCwgU0ludDMyIHJlZkNvbikgLT4gKENvbnRyb2xIYW5kbGUgX3J2KSJ9LAogCXsiR2V0TmV3Q29udHJvbCIsIChQeUNGdW5jdGlvbilDdGxfR2V0TmV3Q29udHJvbCwgMSwKLQkgIihzaG9ydCBjb250cm9sSUQsIFdpbmRvd1B0ciBvd25lcikgLT4gKENvbnRyb2xIYW5kbGUgX3J2KSJ9LAorCSAiKFNJbnQxNiBjb250cm9sSUQsIFdpbmRvd1B0ciBvd25lcikgLT4gKENvbnRyb2xIYW5kbGUgX3J2KSJ9LAogCXsiS2lsbENvbnRyb2xzIiwgKFB5Q0Z1bmN0aW9uKUN0bF9LaWxsQ29udHJvbHMsIDEsCiAJICIoV2luZG93UHRyIHRoZVdpbmRvdykgLT4gTm9uZSJ9LAogCXsiRHJhd0NvbnRyb2xzIiwgKFB5Q0Z1bmN0aW9uKUN0bF9EcmF3Q29udHJvbHMsIDEsCkBAIC02NDYsNyArNjQ2LDcgQEAKIAl7IlVwZGF0ZUNvbnRyb2xzIiwgKFB5Q0Z1bmN0aW9uKUN0bF9VcGRhdGVDb250cm9scywgMSwKIAkgIihXaW5kb3dQdHIgdGhlV2luZG93KSAtPiBOb25lIn0sCiAJeyJGaW5kQ29udHJvbCIsIChQeUNGdW5jdGlvbilDdGxfRmluZENvbnRyb2wsIDEsCi0JICIoUG9pbnQgdGhlUG9pbnQsIFdpbmRvd1B0ciB0aGVXaW5kb3cpIC0+IChzaG9ydCBfcnYsIENvbnRyb2xIYW5kbGUgdGhlQ29udHJvbCkifSwKKwkgIihQb2ludCB0aGVQb2ludCwgV2luZG93UHRyIHRoZVdpbmRvdykgLT4gKENvbnRyb2xQYXJ0Q29kZSBfcnYsIENvbnRyb2xIYW5kbGUgdGhlQ29udHJvbCkifSwKIAl7TlVMTCwgTlVMTCwgMH0KIH07CiAKZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL2N0bC9jdGxnZW4ucHkgYi9NYWMvTW9kdWxlcy9jdGwvY3RsZ2VuLnB5CmluZGV4IDg1ZmM2YzcuLjY4M2UyNmIgMTAwNjQ0Ci0tLSBhL01hYy9Nb2R1bGVzL2N0bC9jdGxnZW4ucHkKKysrIGIvTWFjL01vZHVsZXMvY3RsL2N0bGdlbi5weQpAQCAtMSwzMiArMSwyMCBAQAotIyBHZW5lcmF0ZWQgZnJvbSAnTW9lczpDVzUgR09MRCBcMzA0Ok1ldHJvd2Vya3MgQy9DKysgXDMwNDpIZWFkZXJzIFwzMDQ6VW5pdmVyc2FsIEhlYWRlcnMgMi4wYTMgXDMwNDpDb250cm9scy5oJworIyBHZW5lcmF0ZWQgZnJvbSAnTW9lczpDb2RlV2FycmlvcjY6TWV0cm93ZXJrcyBDL0MrKzpIZWFkZXJzOlVuaXZlcnNhbCBIZWFkZXJzIDIuMC4xZjpDb250cm9scy5oJwogCiBmID0gRnVuY3Rpb24oQ29udHJvbFJlZiwgJ05ld0NvbnRyb2wnLAogICAgIChXaW5kb3dSZWYsICd0aGVXaW5kb3cnLCBJbk1vZGUpLAogICAgIChSZWN0X3B0ciwgJ2JvdW5kc1JlY3QnLCBJbk1vZGUpLAogICAgIChDb25zdFN0cjI1NVBhcmFtLCAndGl0bGUnLCBJbk1vZGUpLAogICAgIChCb29sZWFuLCAndmlzaWJsZScsIEluTW9kZSksCi0gICAgKHNob3J0LCAndmFsdWUnLCBJbk1vZGUpLAotICAgIChzaG9ydCwgJ21pbicsIEluTW9kZSksCi0gICAgKHNob3J0LCAnbWF4JywgSW5Nb2RlKSwKLSAgICAoc2hvcnQsICdwcm9jSUQnLCBJbk1vZGUpLAotICAgIChsb25nLCAncmVmQ29uJywgSW5Nb2RlKSwKKyAgICAoU0ludDE2LCAndmFsdWUnLCBJbk1vZGUpLAorICAgIChTSW50MTYsICdtaW4nLCBJbk1vZGUpLAorICAgIChTSW50MTYsICdtYXgnLCBJbk1vZGUpLAorICAgIChTSW50MTYsICdwcm9jSUQnLCBJbk1vZGUpLAorICAgIChTSW50MzIsICdyZWZDb24nLCBJbk1vZGUpLAogKQogZnVuY3Rpb25zLmFwcGVuZChmKQogCi1mID0gTWV0aG9kKHZvaWQsICdTZXRDb250cm9sVGl0bGUnLAotICAgIChDb250cm9sUmVmLCAndGhlQ29udHJvbCcsIEluTW9kZSksCi0gICAgKENvbnN0U3RyMjU1UGFyYW0sICd0aXRsZScsIEluTW9kZSksCi0pCi1tZXRob2RzLmFwcGVuZChmKQotCi1mID0gTWV0aG9kKHZvaWQsICdHZXRDb250cm9sVGl0bGUnLAotICAgIChDb250cm9sUmVmLCAndGhlQ29udHJvbCcsIEluTW9kZSksCi0gICAgKFN0cjI1NSwgJ3RpdGxlJywgSW5Nb2RlKSwKLSkKLW1ldGhvZHMuYXBwZW5kKGYpCi0KIGYgPSBGdW5jdGlvbihDb250cm9sUmVmLCAnR2V0TmV3Q29udHJvbCcsCi0gICAgKHNob3J0LCAnY29udHJvbElEJywgSW5Nb2RlKSwKKyAgICAoU0ludDE2LCAnY29udHJvbElEJywgSW5Nb2RlKSwKICAgICAoV2luZG93UmVmLCAnb3duZXInLCBJbk1vZGUpLAogKQogZnVuY3Rpb25zLmFwcGVuZChmKQpAQCAtNDEsMTIgKzI5LDEyIEBACiApCiBmdW5jdGlvbnMuYXBwZW5kKGYpCiAKLWYgPSBNZXRob2Qodm9pZCwgJ0hpZGVDb250cm9sJywKK2YgPSBNZXRob2Qodm9pZCwgJ1Nob3dDb250cm9sJywKICAgICAoQ29udHJvbFJlZiwgJ3RoZUNvbnRyb2wnLCBJbk1vZGUpLAogKQogbWV0aG9kcy5hcHBlbmQoZikKIAotZiA9IE1ldGhvZCh2b2lkLCAnU2hvd0NvbnRyb2wnLAorZiA9IE1ldGhvZCh2b2lkLCAnSGlkZUNvbnRyb2wnLAogICAgIChDb250cm9sUmVmLCAndGhlQ29udHJvbCcsIEluTW9kZSksCiApCiBtZXRob2RzLmFwcGVuZChmKQpAQCAtNjEsNzIgKzQ5LDEwNyBAQAogKQogbWV0aG9kcy5hcHBlbmQoZikKIAotZiA9IE1ldGhvZCh2b2lkLCAnSGlsaXRlQ29udHJvbCcsCi0gICAgKENvbnRyb2xSZWYsICd0aGVDb250cm9sJywgSW5Nb2RlKSwKLSAgICAoc2hvcnQsICdoaWxpdGVTdGF0ZScsIEluTW9kZSksCi0pCi1tZXRob2RzLmFwcGVuZChmKQotCiBmID0gRnVuY3Rpb24odm9pZCwgJ1VwZGF0ZUNvbnRyb2xzJywKICAgICAoV2luZG93UmVmLCAndGhlV2luZG93JywgSW5Nb2RlKSwKICAgICAoUmduSGFuZGxlLCAndXBkYXRlUmduJywgSW5Nb2RlKSwKICkKIGZ1bmN0aW9ucy5hcHBlbmQoZikKIAorZiA9IE1ldGhvZCh2b2lkLCAnSGlsaXRlQ29udHJvbCcsCisgICAgKENvbnRyb2xSZWYsICd0aGVDb250cm9sJywgSW5Nb2RlKSwKKyAgICAoQ29udHJvbFBhcnRDb2RlLCAnaGlsaXRlU3RhdGUnLCBJbk1vZGUpLAorKQorbWV0aG9kcy5hcHBlbmQoZikKKworZiA9IE1ldGhvZChDb250cm9sUGFydENvZGUsICdUcmFja0NvbnRyb2wnLAorICAgIChDb250cm9sUmVmLCAndGhlQ29udHJvbCcsIEluTW9kZSksCisgICAgKFBvaW50LCAndGhlUG9pbnQnLCBJbk1vZGUpLAorICAgIChGYWtlVHlwZSgnKENvbnRyb2xBY3Rpb25VUFApMCcpLCAnYWN0aW9uUHJvYycsIEluTW9kZSksCispCittZXRob2RzLmFwcGVuZChmKQorCitmID0gTWV0aG9kKHZvaWQsICdEcmFnQ29udHJvbCcsCisgICAgKENvbnRyb2xSZWYsICd0aGVDb250cm9sJywgSW5Nb2RlKSwKKyAgICAoUG9pbnQsICdzdGFydFB0JywgSW5Nb2RlKSwKKyAgICAoUmVjdF9wdHIsICdsaW1pdFJlY3QnLCBJbk1vZGUpLAorICAgIChSZWN0X3B0ciwgJ3Nsb3BSZWN0JywgSW5Nb2RlKSwKKyAgICAoRHJhZ0NvbnN0cmFpbnQsICdheGlzJywgSW5Nb2RlKSwKKykKK21ldGhvZHMuYXBwZW5kKGYpCisKK2YgPSBNZXRob2QoQ29udHJvbFBhcnRDb2RlLCAnVGVzdENvbnRyb2wnLAorICAgIChDb250cm9sUmVmLCAndGhlQ29udHJvbCcsIEluTW9kZSksCisgICAgKFBvaW50LCAndGhlUHQnLCBJbk1vZGUpLAorKQorbWV0aG9kcy5hcHBlbmQoZikKKworZiA9IEZ1bmN0aW9uKENvbnRyb2xQYXJ0Q29kZSwgJ0ZpbmRDb250cm9sJywKKyAgICAoUG9pbnQsICd0aGVQb2ludCcsIEluTW9kZSksCisgICAgKFdpbmRvd1JlZiwgJ3RoZVdpbmRvdycsIEluTW9kZSksCisgICAgKEV4aXN0aW5nQ29udHJvbEhhbmRsZSwgJ3RoZUNvbnRyb2wnLCBPdXRNb2RlKSwKKykKK2Z1bmN0aW9ucy5hcHBlbmQoZikKKwogZiA9IE1ldGhvZCh2b2lkLCAnTW92ZUNvbnRyb2wnLAogICAgIChDb250cm9sUmVmLCAndGhlQ29udHJvbCcsIEluTW9kZSksCi0gICAgKHNob3J0LCAnaCcsIEluTW9kZSksCi0gICAgKHNob3J0LCAndicsIEluTW9kZSksCisgICAgKFNJbnQxNiwgJ2gnLCBJbk1vZGUpLAorICAgIChTSW50MTYsICd2JywgSW5Nb2RlKSwKICkKIG1ldGhvZHMuYXBwZW5kKGYpCiAKIGYgPSBNZXRob2Qodm9pZCwgJ1NpemVDb250cm9sJywKICAgICAoQ29udHJvbFJlZiwgJ3RoZUNvbnRyb2wnLCBJbk1vZGUpLAotICAgIChzaG9ydCwgJ3cnLCBJbk1vZGUpLAotICAgIChzaG9ydCwgJ2gnLCBJbk1vZGUpLAorICAgIChTSW50MTYsICd3JywgSW5Nb2RlKSwKKyAgICAoU0ludDE2LCAnaCcsIEluTW9kZSksCispCittZXRob2RzLmFwcGVuZChmKQorCitmID0gTWV0aG9kKHZvaWQsICdTZXRDb250cm9sVGl0bGUnLAorICAgIChDb250cm9sUmVmLCAndGhlQ29udHJvbCcsIEluTW9kZSksCisgICAgKENvbnN0U3RyMjU1UGFyYW0sICd0aXRsZScsIEluTW9kZSksCispCittZXRob2RzLmFwcGVuZChmKQorCitmID0gTWV0aG9kKHZvaWQsICdHZXRDb250cm9sVGl0bGUnLAorICAgIChDb250cm9sUmVmLCAndGhlQ29udHJvbCcsIEluTW9kZSksCisgICAgKFN0cjI1NSwgJ3RpdGxlJywgSW5Nb2RlKSwKKykKK21ldGhvZHMuYXBwZW5kKGYpCisKK2YgPSBNZXRob2QoU0ludDE2LCAnR2V0Q29udHJvbFZhbHVlJywKKyAgICAoQ29udHJvbFJlZiwgJ3RoZUNvbnRyb2wnLCBJbk1vZGUpLAogKQogbWV0aG9kcy5hcHBlbmQoZikKIAogZiA9IE1ldGhvZCh2b2lkLCAnU2V0Q29udHJvbFZhbHVlJywKICAgICAoQ29udHJvbFJlZiwgJ3RoZUNvbnRyb2wnLCBJbk1vZGUpLAotICAgIChzaG9ydCwgJ3RoZVZhbHVlJywgSW5Nb2RlKSwKKyAgICAoU0ludDE2LCAnbmV3VmFsdWUnLCBJbk1vZGUpLAogKQogbWV0aG9kcy5hcHBlbmQoZikKIAotZiA9IE1ldGhvZChzaG9ydCwgJ0dldENvbnRyb2xWYWx1ZScsCitmID0gTWV0aG9kKFNJbnQxNiwgJ0dldENvbnRyb2xNaW5pbXVtJywKICAgICAoQ29udHJvbFJlZiwgJ3RoZUNvbnRyb2wnLCBJbk1vZGUpLAogKQogbWV0aG9kcy5hcHBlbmQoZikKIAogZiA9IE1ldGhvZCh2b2lkLCAnU2V0Q29udHJvbE1pbmltdW0nLAogICAgIChDb250cm9sUmVmLCAndGhlQ29udHJvbCcsIEluTW9kZSksCi0gICAgKHNob3J0LCAnbWluVmFsdWUnLCBJbk1vZGUpLAorICAgIChTSW50MTYsICduZXdNaW5pbXVtJywgSW5Nb2RlKSwKICkKIG1ldGhvZHMuYXBwZW5kKGYpCiAKLWYgPSBNZXRob2Qoc2hvcnQsICdHZXRDb250cm9sTWluaW11bScsCitmID0gTWV0aG9kKFNJbnQxNiwgJ0dldENvbnRyb2xNYXhpbXVtJywKICAgICAoQ29udHJvbFJlZiwgJ3RoZUNvbnRyb2wnLCBJbk1vZGUpLAogKQogbWV0aG9kcy5hcHBlbmQoZikKIAogZiA9IE1ldGhvZCh2b2lkLCAnU2V0Q29udHJvbE1heGltdW0nLAogICAgIChDb250cm9sUmVmLCAndGhlQ29udHJvbCcsIEluTW9kZSksCi0gICAgKHNob3J0LCAnbWF4VmFsdWUnLCBJbk1vZGUpLAorICAgIChTSW50MTYsICduZXdNYXhpbXVtJywgSW5Nb2RlKSwKICkKIG1ldGhvZHMuYXBwZW5kKGYpCiAKLWYgPSBNZXRob2Qoc2hvcnQsICdHZXRDb250cm9sTWF4aW11bScsCi0gICAgKENvbnRyb2xSZWYsICd0aGVDb250cm9sJywgSW5Nb2RlKSwKLSkKLW1ldGhvZHMuYXBwZW5kKGYpCi0KLWYgPSBNZXRob2Qodm9pZCwgJ1NldENvbnRyb2xSZWZlcmVuY2UnLAotICAgIChDb250cm9sUmVmLCAndGhlQ29udHJvbCcsIEluTW9kZSksCi0gICAgKGxvbmcsICdkYXRhJywgSW5Nb2RlKSwKLSkKLW1ldGhvZHMuYXBwZW5kKGYpCi0KLWYgPSBNZXRob2QobG9uZywgJ0dldENvbnRyb2xSZWZlcmVuY2UnLAorZiA9IE1ldGhvZChTSW50MTYsICdHZXRDb250cm9sVmFyaWFudCcsCiAgICAgKENvbnRyb2xSZWYsICd0aGVDb250cm9sJywgSW5Nb2RlKSwKICkKIG1ldGhvZHMuYXBwZW5kKGYpCkBAIC0xMzcsMzcgKzE2MCwxNCBAQAogKQogbWV0aG9kcy5hcHBlbmQoZikKIAotZiA9IE1ldGhvZCh2b2lkLCAnRHJhZ0NvbnRyb2wnLAorZiA9IE1ldGhvZCh2b2lkLCAnU2V0Q29udHJvbFJlZmVyZW5jZScsCiAgICAgKENvbnRyb2xSZWYsICd0aGVDb250cm9sJywgSW5Nb2RlKSwKLSAgICAoUG9pbnQsICdzdGFydFB0JywgSW5Nb2RlKSwKLSAgICAoUmVjdF9wdHIsICdsaW1pdFJlY3QnLCBJbk1vZGUpLAotICAgIChSZWN0X3B0ciwgJ3Nsb3BSZWN0JywgSW5Nb2RlKSwKLSAgICAoc2hvcnQsICdheGlzJywgSW5Nb2RlKSwKKyAgICAoU0ludDMyLCAnZGF0YScsIEluTW9kZSksCiApCiBtZXRob2RzLmFwcGVuZChmKQogCi1mID0gTWV0aG9kKHNob3J0LCAnVGVzdENvbnRyb2wnLAorZiA9IE1ldGhvZChTSW50MzIsICdHZXRDb250cm9sUmVmZXJlbmNlJywKICAgICAoQ29udHJvbFJlZiwgJ3RoZUNvbnRyb2wnLCBJbk1vZGUpLAotICAgIChQb2ludCwgJ3RoZVB0JywgSW5Nb2RlKSwKLSkKLW1ldGhvZHMuYXBwZW5kKGYpCi0KLWYgPSBGdW5jdGlvbihzaG9ydCwgJ0ZpbmRDb250cm9sJywKLSAgICAoUG9pbnQsICd0aGVQb2ludCcsIEluTW9kZSksCi0gICAgKFdpbmRvd1JlZiwgJ3RoZVdpbmRvdycsIEluTW9kZSksCi0gICAgKEV4aXN0aW5nQ29udHJvbEhhbmRsZSwgJ3RoZUNvbnRyb2wnLCBPdXRNb2RlKSwKLSkKLWZ1bmN0aW9ucy5hcHBlbmQoZikKLQotZiA9IE1ldGhvZChzaG9ydCwgJ0dldENvbnRyb2xWYXJpYW50JywKLSAgICAoQ29udHJvbFJlZiwgJ3RoZUNvbnRyb2wnLCBJbk1vZGUpLAotKQotbWV0aG9kcy5hcHBlbmQoZikKLQotZiA9IE1ldGhvZChzaG9ydCwgJ1RyYWNrQ29udHJvbCcsCi0gICAgKENvbnRyb2xSZWYsICd0aGVDb250cm9sJywgSW5Nb2RlKSwKLSAgICAoUG9pbnQsICd0aGVQb2ludCcsIEluTW9kZSksCi0gICAgKEZha2VUeXBlKCcoQ29udHJvbEFjdGlvblVQUCkwJyksICdhY3Rpb25Qcm9jJywgSW5Nb2RlKSwKICkKIG1ldGhvZHMuYXBwZW5kKGYpCiAKZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL2N0bC9jdGxzdXBwb3J0LnB5IGIvTWFjL01vZHVsZXMvY3RsL2N0bHN1cHBvcnQucHkKaW5kZXggOTg0NjYzMS4uMjQ1YTcyNSAxMDA2NDQKLS0tIGEvTWFjL01vZHVsZXMvY3RsL2N0bHN1cHBvcnQucHkKKysrIGIvTWFjL01vZHVsZXMvY3RsL2N0bHN1cHBvcnQucHkKQEAgLTI5LDYgKzI5LDggQEAKIEV4aXN0aW5nQ29udHJvbEhhbmRsZSA9IE9wYXF1ZUJ5VmFsdWVUeXBlKE9CSkVDVFRZUEUsICJDdGxPYmpfV2hpY2hDb250cm9sIiwgIkJVRyIpCiAKIFJnbkhhbmRsZSA9IEZha2VUeXBlKCJ0aGVXaW5kb3ctPnZpc1JnbiIpICMgWFhYCitDb250cm9sUGFydENvZGUgPSBUeXBlKCJDb250cm9sUGFydENvZGUiLCAiaCIpCitEcmFnQ29uc3RyYWludCA9IFR5cGUoIkRyYWdDb25zdHJhaW50IiwgImgiKQogCiBpbmNsdWRlc3R1ZmYgPSBpbmNsdWRlc3R1ZmYgKyAiIiIKICNpbmNsdWRlIDwlcz4iIiIgJSBNQUNIRUFERVJGSUxFICsgIiIiCmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9kbGcvZGxnZ2VuLnB5IGIvTWFjL01vZHVsZXMvZGxnL2RsZ2dlbi5weQppbmRleCBjNmFlMzYyLi44MDY1MGZkIDEwMDY0NAotLS0gYS9NYWMvTW9kdWxlcy9kbGcvZGxnZ2VuLnB5CisrKyBiL01hYy9Nb2R1bGVzL2RsZy9kbGdnZW4ucHkKQEAgLTEsNCArMSw0IEBACi0jIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNXNSBHT0xEIFwzMDQ6TWV0cm93ZXJrcyBDL0MrKyBcMzA0OkhlYWRlcnMgXDMwNDpVbml2ZXJzYWwgSGVhZGVycyAyLjBhMyBcMzA0OkRpYWxvZ3MuaCcKKyMgR2VuZXJhdGVkIGZyb20gJ01vZXM6Q29kZVdhcnJpb3I2Ok1ldHJvd2Vya3MgQy9DKys6SGVhZGVyczpVbml2ZXJzYWwgSGVhZGVycyAyLjAuMWY6RGlhbG9ncy5oJwogCiBmID0gRnVuY3Rpb24oRGlhbG9nUmVmLCAnTmV3RGlhbG9nJywKICAgICAoTnVsbFN0b3JhZ2UsICd3U3RvcmFnZScsIEluTW9kZSksCmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9ldnQvRXZ0bW9kdWxlLmMgYi9NYWMvTW9kdWxlcy9ldnQvRXZ0bW9kdWxlLmMKaW5kZXggNzE2OWI1OS4uNzczMmQwOSAxMDA2NDQKLS0tIGEvTWFjL01vZHVsZXMvZXZ0L0V2dG1vZHVsZS5jCisrKyBiL01hYy9Nb2R1bGVzL2V2dC9FdnRtb2R1bGUuYwpAQCAtMzksMjYgKzM5LDEyIEBACiAKIHN0YXRpYyBQeU9iamVjdCAqRXZ0X0Vycm9yOwogCi1zdGF0aWMgUHlPYmplY3QgKkV2dF9HZXREYmxUaW1lKF9zZWxmLCBfYXJncykKLQlQeU9iamVjdCAqX3NlbGY7Ci0JUHlPYmplY3QgKl9hcmdzOwotewotCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKLQlsb25nIF9ydjsKLQlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICIiKSkKLQkJcmV0dXJuIE5VTEw7Ci0JX3J2ID0gR2V0RGJsVGltZSgpOwotCV9yZXMgPSBQeV9CdWlsZFZhbHVlKCJsIiwKLQkgICAgICAgICAgICAgICAgICAgICBfcnYpOwotCXJldHVybiBfcmVzOwotfQotCiBzdGF0aWMgUHlPYmplY3QgKkV2dF9HZXRDYXJldFRpbWUoX3NlbGYsIF9hcmdzKQogCVB5T2JqZWN0ICpfc2VsZjsKIAlQeU9iamVjdCAqX2FyZ3M7CiB7CiAJUHlPYmplY3QgKl9yZXMgPSBOVUxMOwotCWxvbmcgX3J2OworCVVJbnQzMiBfcnY7CiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKF9hcmdzLCAiIikpCiAJCXJldHVybiBOVUxMOwogCV9ydiA9IEdldENhcmV0VGltZSgpOwpAQCAtNzIsNyArNTgsNyBAQAogCVB5T2JqZWN0ICpfYXJnczsKIHsKIAlQeU9iamVjdCAqX3JlcyA9IE5VTEw7Ci0Jc2hvcnQgdmFsdWU7CisJTWFjT1NFdmVudE1hc2sgdmFsdWU7CiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKF9hcmdzLCAiaCIsCiAJICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZSkpCiAJCXJldHVybiBOVUxMOwpAQCAtODIsMTMgKzY4LDI3IEBACiAJcmV0dXJuIF9yZXM7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqRXZ0X0dldERibFRpbWUoX3NlbGYsIF9hcmdzKQorCVB5T2JqZWN0ICpfc2VsZjsKKwlQeU9iamVjdCAqX2FyZ3M7Cit7CisJUHlPYmplY3QgKl9yZXMgPSBOVUxMOworCVVJbnQzMiBfcnY7CisJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKF9hcmdzLCAiIikpCisJCXJldHVybiBOVUxMOworCV9ydiA9IEdldERibFRpbWUoKTsKKwlfcmVzID0gUHlfQnVpbGRWYWx1ZSgibCIsCisJICAgICAgICAgICAgICAgICAgICAgX3J2KTsKKwlyZXR1cm4gX3JlczsKK30KKwogc3RhdGljIFB5T2JqZWN0ICpFdnRfR2V0TmV4dEV2ZW50KF9zZWxmLCBfYXJncykKIAlQeU9iamVjdCAqX3NlbGY7CiAJUHlPYmplY3QgKl9hcmdzOwogewogCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKIAlCb29sZWFuIF9ydjsKLQlzaG9ydCBldmVudE1hc2s7CisJTWFjT1NFdmVudE1hc2sgZXZlbnRNYXNrOwogCUV2ZW50UmVjb3JkIHRoZUV2ZW50OwogCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgImgiLAogCSAgICAgICAgICAgICAgICAgICAgICAmZXZlbnRNYXNrKSkKQEAgLTEwNyw5ICsxMDcsOSBAQAogewogCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKIAlCb29sZWFuIF9ydjsKLQlzaG9ydCBldmVudE1hc2s7CisJTWFjT1NFdmVudE1hc2sgZXZlbnRNYXNrOwogCUV2ZW50UmVjb3JkIHRoZUV2ZW50OwotCXVuc2lnbmVkIGxvbmcgc2xlZXA7CisJVUludDMyIHNsZWVwOwogCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgImhsIiwKIAkgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50TWFzaywKIAkgICAgICAgICAgICAgICAgICAgICAgJnNsZWVwKSkKQEAgLTEzMCw3ICsxMzAsNyBAQAogewogCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKIAlCb29sZWFuIF9ydjsKLQlzaG9ydCBldmVudE1hc2s7CisJTWFjT1NFdmVudE1hc2sgZXZlbnRNYXNrOwogCUV2ZW50UmVjb3JkIHRoZUV2ZW50OwogCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgImgiLAogCSAgICAgICAgICAgICAgICAgICAgICAmZXZlbnRNYXNrKSkKQEAgLTIxOSw3ICsyMTksNyBAQAogCVB5T2JqZWN0ICpfYXJnczsKIHsKIAlQeU9iamVjdCAqX3JlcyA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBfcnY7CisJVUludDMyIF9ydjsKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICIiKSkKIAkJcmV0dXJuIE5VTEw7CiAJX3J2ID0gVGlja0NvdW50KCk7CkBAIC0yMzQsOCArMjM0LDggQEAKIHsKIAlQeU9iamVjdCAqX3JlcyA9IE5VTEw7CiAJT1NFcnIgX2VycjsKLQlzaG9ydCBldmVudE51bTsKLQlsb25nIGV2ZW50TXNnOworCU1hY09TRXZlbnRLaW5kIGV2ZW50TnVtOworCVVJbnQzMiBldmVudE1zZzsKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICJobCIsCiAJICAgICAgICAgICAgICAgICAgICAgICZldmVudE51bSwKIAkgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50TXNnKSkKQEAgLTI1NCw3ICsyNTQsNyBAQAogewogCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKIAlCb29sZWFuIF9ydjsKLQlzaG9ydCBtYXNrOworCU1hY09TRXZlbnRNYXNrIG1hc2s7CiAJRXZlbnRSZWNvcmQgdGhlRXZlbnQ7CiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKF9hcmdzLCAiaCIsCiAJICAgICAgICAgICAgICAgICAgICAgICZtYXNrKSkKQEAgLTI3Myw3ICsyNzMsNyBAQAogewogCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKIAlCb29sZWFuIF9ydjsKLQlzaG9ydCBtYXNrOworCU1hY09TRXZlbnRNYXNrIG1hc2s7CiAJRXZlbnRSZWNvcmQgdGhlRXZlbnQ7CiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKF9hcmdzLCAiaCIsCiAJICAgICAgICAgICAgICAgICAgICAgICZtYXNrKSkKQEAgLTI5MSw4ICsyOTEsOCBAQAogCVB5T2JqZWN0ICpfYXJnczsKIHsKIAlQeU9iamVjdCAqX3JlcyA9IE5VTEw7Ci0Jc2hvcnQgd2hpY2hNYXNrOwotCXNob3J0IHN0b3BNYXNrOworCU1hY09TRXZlbnRNYXNrIHdoaWNoTWFzazsKKwlNYWNPU0V2ZW50TWFzayBzdG9wTWFzazsKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICJoaCIsCiAJICAgICAgICAgICAgICAgICAgICAgICZ3aGljaE1hc2ssCiAJICAgICAgICAgICAgICAgICAgICAgICZzdG9wTWFzaykpCkBAIC0zNTIsMTggKzM1MiwxOCBAQAogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgRXZ0X21ldGhvZHNbXSA9IHsKLQl7IkdldERibFRpbWUiLCAoUHlDRnVuY3Rpb24pRXZ0X0dldERibFRpbWUsIDEsCi0JICIoKSAtPiAobG9uZyBfcnYpIn0sCiAJeyJHZXRDYXJldFRpbWUiLCAoUHlDRnVuY3Rpb24pRXZ0X0dldENhcmV0VGltZSwgMSwKLQkgIigpIC0+IChsb25nIF9ydikifSwKKwkgIigpIC0+IChVSW50MzIgX3J2KSJ9LAogCXsiU2V0RXZlbnRNYXNrIiwgKFB5Q0Z1bmN0aW9uKUV2dF9TZXRFdmVudE1hc2ssIDEsCi0JICIoc2hvcnQgdmFsdWUpIC0+IE5vbmUifSwKKwkgIihNYWNPU0V2ZW50TWFzayB2YWx1ZSkgLT4gTm9uZSJ9LAorCXsiR2V0RGJsVGltZSIsIChQeUNGdW5jdGlvbilFdnRfR2V0RGJsVGltZSwgMSwKKwkgIigpIC0+IChVSW50MzIgX3J2KSJ9LAogCXsiR2V0TmV4dEV2ZW50IiwgKFB5Q0Z1bmN0aW9uKUV2dF9HZXROZXh0RXZlbnQsIDEsCi0JICIoc2hvcnQgZXZlbnRNYXNrKSAtPiAoQm9vbGVhbiBfcnYsIEV2ZW50UmVjb3JkIHRoZUV2ZW50KSJ9LAorCSAiKE1hY09TRXZlbnRNYXNrIGV2ZW50TWFzaykgLT4gKEJvb2xlYW4gX3J2LCBFdmVudFJlY29yZCB0aGVFdmVudCkifSwKIAl7IldhaXROZXh0RXZlbnQiLCAoUHlDRnVuY3Rpb24pRXZ0X1dhaXROZXh0RXZlbnQsIDEsCi0JICIoc2hvcnQgZXZlbnRNYXNrLCB1bnNpZ25lZCBsb25nIHNsZWVwKSAtPiAoQm9vbGVhbiBfcnYsIEV2ZW50UmVjb3JkIHRoZUV2ZW50KSJ9LAorCSAiKE1hY09TRXZlbnRNYXNrIGV2ZW50TWFzaywgVUludDMyIHNsZWVwKSAtPiAoQm9vbGVhbiBfcnYsIEV2ZW50UmVjb3JkIHRoZUV2ZW50KSJ9LAogCXsiRXZlbnRBdmFpbCIsIChQeUNGdW5jdGlvbilFdnRfRXZlbnRBdmFpbCwgMSwKLQkgIihzaG9ydCBldmVudE1hc2spIC0+IChCb29sZWFuIF9ydiwgRXZlbnRSZWNvcmQgdGhlRXZlbnQpIn0sCisJICIoTWFjT1NFdmVudE1hc2sgZXZlbnRNYXNrKSAtPiAoQm9vbGVhbiBfcnYsIEV2ZW50UmVjb3JkIHRoZUV2ZW50KSJ9LAogCXsiR2V0TW91c2UiLCAoUHlDRnVuY3Rpb24pRXZ0X0dldE1vdXNlLCAxLAogCSAiKCkgLT4gKFBvaW50IG1vdXNlTG9jKSJ9LAogCXsiQnV0dG9uIiwgKFB5Q0Z1bmN0aW9uKUV2dF9CdXR0b24sIDEsCkBAIC0zNzUsMTUgKzM3NSwxNSBAQAogCXsiR2V0S2V5cyIsIChQeUNGdW5jdGlvbilFdnRfR2V0S2V5cywgMSwKIAkgIigpIC0+IChLZXlNYXAgdGhlS2V5cykifSwKIAl7IlRpY2tDb3VudCIsIChQeUNGdW5jdGlvbilFdnRfVGlja0NvdW50LCAxLAotCSAiKCkgLT4gKHVuc2lnbmVkIGxvbmcgX3J2KSJ9LAorCSAiKCkgLT4gKFVJbnQzMiBfcnYpIn0sCiAJeyJQb3N0RXZlbnQiLCAoUHlDRnVuY3Rpb24pRXZ0X1Bvc3RFdmVudCwgMSwKLQkgIihzaG9ydCBldmVudE51bSwgbG9uZyBldmVudE1zZykgLT4gTm9uZSJ9LAorCSAiKE1hY09TRXZlbnRLaW5kIGV2ZW50TnVtLCBVSW50MzIgZXZlbnRNc2cpIC0+IE5vbmUifSwKIAl7Ik9TRXZlbnRBdmFpbCIsIChQeUNGdW5jdGlvbilFdnRfT1NFdmVudEF2YWlsLCAxLAotCSAiKHNob3J0IG1hc2spIC0+IChCb29sZWFuIF9ydiwgRXZlbnRSZWNvcmQgdGhlRXZlbnQpIn0sCisJICIoTWFjT1NFdmVudE1hc2sgbWFzaykgLT4gKEJvb2xlYW4gX3J2LCBFdmVudFJlY29yZCB0aGVFdmVudCkifSwKIAl7IkdldE9TRXZlbnQiLCAoUHlDRnVuY3Rpb24pRXZ0X0dldE9TRXZlbnQsIDEsCi0JICIoc2hvcnQgbWFzaykgLT4gKEJvb2xlYW4gX3J2LCBFdmVudFJlY29yZCB0aGVFdmVudCkifSwKKwkgIihNYWNPU0V2ZW50TWFzayBtYXNrKSAtPiAoQm9vbGVhbiBfcnYsIEV2ZW50UmVjb3JkIHRoZUV2ZW50KSJ9LAogCXsiRmx1c2hFdmVudHMiLCAoUHlDRnVuY3Rpb24pRXZ0X0ZsdXNoRXZlbnRzLCAxLAotCSAiKHNob3J0IHdoaWNoTWFzaywgc2hvcnQgc3RvcE1hc2spIC0+IE5vbmUifSwKKwkgIihNYWNPU0V2ZW50TWFzayB3aGljaE1hc2ssIE1hY09TRXZlbnRNYXNrIHN0b3BNYXNrKSAtPiBOb25lIn0sCiAJeyJTeXN0ZW1DbGljayIsIChQeUNGdW5jdGlvbilFdnRfU3lzdGVtQ2xpY2ssIDEsCiAJICIoRXZlbnRSZWNvcmQgdGhlRXZlbnQsIFdpbmRvd1B0ciB0aGVXaW5kb3cpIC0+IE5vbmUifSwKIAl7IlN5c3RlbVRhc2siLCAoUHlDRnVuY3Rpb24pRXZ0X1N5c3RlbVRhc2ssIDEsCmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9ldnQvZXZ0Z2VuLnB5IGIvTWFjL01vZHVsZXMvZXZ0L2V2dGdlbi5weQppbmRleCBkZWFjNjRlLi4xY2EyOTYyIDEwMDY0NAotLS0gYS9NYWMvTW9kdWxlcy9ldnQvZXZ0Z2VuLnB5CisrKyBiL01hYy9Nb2R1bGVzL2V2dC9ldnRnZW4ucHkKQEAgLTEsMzQgKzEsMzQgQEAKLSMgR2VuZXJhdGVkIGZyb20gJ01vZXM6Q1c1IEdPTEQgXDMwNDpNZXRyb3dlcmtzIEMvQysrIFwzMDQ6SGVhZGVycyBcMzA0OlVuaXZlcnNhbCBIZWFkZXJzIDIuMGEzIFwzMDQ6RXZlbnRzLmgnCisjIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNvZGVXYXJyaW9yNjpNZXRyb3dlcmtzIEMvQysrOkhlYWRlcnM6VW5pdmVyc2FsIEhlYWRlcnMgMi4wLjFmOkV2ZW50cy5oJwogCi1mID0gRnVuY3Rpb24obG9uZywgJ0dldERibFRpbWUnLAotKQotZnVuY3Rpb25zLmFwcGVuZChmKQotCi1mID0gRnVuY3Rpb24obG9uZywgJ0dldENhcmV0VGltZScsCitmID0gRnVuY3Rpb24oVUludDMyLCAnR2V0Q2FyZXRUaW1lJywKICkKIGZ1bmN0aW9ucy5hcHBlbmQoZikKIAogZiA9IEZ1bmN0aW9uKHZvaWQsICdTZXRFdmVudE1hc2snLAotICAgIChzaG9ydCwgJ3ZhbHVlJywgSW5Nb2RlKSwKKyAgICAoTWFjT1NFdmVudE1hc2ssICd2YWx1ZScsIEluTW9kZSksCispCitmdW5jdGlvbnMuYXBwZW5kKGYpCisKK2YgPSBGdW5jdGlvbihVSW50MzIsICdHZXREYmxUaW1lJywKICkKIGZ1bmN0aW9ucy5hcHBlbmQoZikKIAogZiA9IEZ1bmN0aW9uKEJvb2xlYW4sICdHZXROZXh0RXZlbnQnLAotICAgIChzaG9ydCwgJ2V2ZW50TWFzaycsIEluTW9kZSksCisgICAgKE1hY09TRXZlbnRNYXNrLCAnZXZlbnRNYXNrJywgSW5Nb2RlKSwKICAgICAoRXZlbnRSZWNvcmQsICd0aGVFdmVudCcsIE91dE1vZGUpLAogKQogZnVuY3Rpb25zLmFwcGVuZChmKQogCiBmID0gRnVuY3Rpb24oQm9vbGVhbiwgJ1dhaXROZXh0RXZlbnQnLAotICAgIChzaG9ydCwgJ2V2ZW50TWFzaycsIEluTW9kZSksCisgICAgKE1hY09TRXZlbnRNYXNrLCAnZXZlbnRNYXNrJywgSW5Nb2RlKSwKICAgICAoRXZlbnRSZWNvcmQsICd0aGVFdmVudCcsIE91dE1vZGUpLAotICAgICh1bnNpZ25lZF9sb25nLCAnc2xlZXAnLCBJbk1vZGUpLAorICAgIChVSW50MzIsICdzbGVlcCcsIEluTW9kZSksCiAgICAgKFJnbkhhbmRsZSwgJ21vdXNlUmduJywgSW5Nb2RlKSwKICkKIGZ1bmN0aW9ucy5hcHBlbmQoZikKIAogZiA9IEZ1bmN0aW9uKEJvb2xlYW4sICdFdmVudEF2YWlsJywKLSAgICAoc2hvcnQsICdldmVudE1hc2snLCBJbk1vZGUpLAorICAgIChNYWNPU0V2ZW50TWFzaywgJ2V2ZW50TWFzaycsIEluTW9kZSksCiAgICAgKEV2ZW50UmVjb3JkLCAndGhlRXZlbnQnLCBPdXRNb2RlKSwKICkKIGZ1bmN0aW9ucy5hcHBlbmQoZikKQEAgLTU1LDMxICs1NSwzMSBAQAogKQogZnVuY3Rpb25zLmFwcGVuZChmKQogCi1mID0gRnVuY3Rpb24odW5zaWduZWRfbG9uZywgJ1RpY2tDb3VudCcsCitmID0gRnVuY3Rpb24oVUludDMyLCAnVGlja0NvdW50JywKICkKIGZ1bmN0aW9ucy5hcHBlbmQoZikKIAogZiA9IEZ1bmN0aW9uKE9TRXJyLCAnUG9zdEV2ZW50JywKLSAgICAoc2hvcnQsICdldmVudE51bScsIEluTW9kZSksCi0gICAgKGxvbmcsICdldmVudE1zZycsIEluTW9kZSksCisgICAgKE1hY09TRXZlbnRLaW5kLCAnZXZlbnROdW0nLCBJbk1vZGUpLAorICAgIChVSW50MzIsICdldmVudE1zZycsIEluTW9kZSksCiApCiBmdW5jdGlvbnMuYXBwZW5kKGYpCiAKIGYgPSBGdW5jdGlvbihCb29sZWFuLCAnT1NFdmVudEF2YWlsJywKLSAgICAoc2hvcnQsICdtYXNrJywgSW5Nb2RlKSwKKyAgICAoTWFjT1NFdmVudE1hc2ssICdtYXNrJywgSW5Nb2RlKSwKICAgICAoRXZlbnRSZWNvcmQsICd0aGVFdmVudCcsIE91dE1vZGUpLAogKQogZnVuY3Rpb25zLmFwcGVuZChmKQogCiBmID0gRnVuY3Rpb24oQm9vbGVhbiwgJ0dldE9TRXZlbnQnLAotICAgIChzaG9ydCwgJ21hc2snLCBJbk1vZGUpLAorICAgIChNYWNPU0V2ZW50TWFzaywgJ21hc2snLCBJbk1vZGUpLAogICAgIChFdmVudFJlY29yZCwgJ3RoZUV2ZW50JywgT3V0TW9kZSksCiApCiBmdW5jdGlvbnMuYXBwZW5kKGYpCiAKIGYgPSBGdW5jdGlvbih2b2lkLCAnRmx1c2hFdmVudHMnLAotICAgIChzaG9ydCwgJ3doaWNoTWFzaycsIEluTW9kZSksCi0gICAgKHNob3J0LCAnc3RvcE1hc2snLCBJbk1vZGUpLAorICAgIChNYWNPU0V2ZW50TWFzaywgJ3doaWNoTWFzaycsIEluTW9kZSksCisgICAgKE1hY09TRXZlbnRNYXNrLCAnc3RvcE1hc2snLCBJbk1vZGUpLAogKQogZnVuY3Rpb25zLmFwcGVuZChmKQogCmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9ldnQvZXZ0c2Nhbi5weSBiL01hYy9Nb2R1bGVzL2V2dC9ldnRzY2FuLnB5CmluZGV4IDcwYTlkZjkuLmRjM2I2Y2UgMTAwNjQ0Ci0tLSBhL01hYy9Nb2R1bGVzL2V2dC9ldnRzY2FuLnB5CisrKyBiL01hYy9Nb2R1bGVzL2V2dC9ldnRzY2FuLnB5CkBAIC0zNCw3ICszNCw4IEBACiAKIAlkZWYgbWFrZWJsYWNrbGlzdG5hbWVzKHNlbGYpOgogCQlyZXR1cm4gWwotCQkJIktleVRyYW5zbGF0ZSIKKwkJCSJLZXlUcmFuc2xhdGUiLAorCQkJIkdldEV2ZW50TWFzayIsCQkjIEkgY2Fubm90IHNlZW0gdG8gZmluZCB0aGlzIHJvdXRpbmUuLi4KIAkJCV0KIAogCWRlZiBtYWtlYmxhY2tsaXN0dHlwZXMoc2VsZik6CmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9ldnQvZXZ0c3VwcG9ydC5weSBiL01hYy9Nb2R1bGVzL2V2dC9ldnRzdXBwb3J0LnB5CmluZGV4IDBhNjk1MGIuLjM5ZGRhYTkgMTAwNjQ0Ci0tLSBhL01hYy9Nb2R1bGVzL2V2dC9ldnRzdXBwb3J0LnB5CisrKyBiL01hYy9Nb2R1bGVzL2V2dC9ldnRzdXBwb3J0LnB5CkBAIC0yNyw2ICsyNyw4IEBACiBSZ25IYW5kbGUgPSBGYWtlVHlwZSgiKFJnbkhhbmRsZSkwIikgIyBYWFgKIAogS2V5TWFwID0gQXJyYXlPdXRwdXRCdWZmZXJUeXBlKCJLZXlNYXAiKQorTWFjT1NFdmVudEtpbmQgPSBUeXBlKCJNYWNPU0V2ZW50S2luZCIsICJoIikKK01hY09TRXZlbnRNYXNrID0gVHlwZSgiTWFjT1NFdmVudE1hc2siLCAiaCIpCiAKIGluY2x1ZGVzdHVmZiA9IGluY2x1ZGVzdHVmZiArICIiIgogI2luY2x1ZGUgPCVzPiIiIiAlIE1BQ0hFQURFUkZJTEUgKyAiIiIKZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL21lbnUvTWVudW1vZHVsZS5jIGIvTWFjL01vZHVsZXMvbWVudS9NZW51bW9kdWxlLmMKaW5kZXggYmIxY2I3OS4uMzcxMjY5MSAxMDA2NDQKLS0tIGEvTWFjL01vZHVsZXMvbWVudS9NZW51bW9kdWxlLmMKKysrIGIvTWFjL01vZHVsZXMvbWVudS9NZW51bW9kdWxlLmMKQEAgLTM4Miw3ICszODIsNyBAQAogewogCVB5T2JqZWN0ICpfcmVzID0gTlVMTDsKIAlzaG9ydCBpdGVtOwotCXVuc2lnbmVkIGNoYXIgY2hTdHlsZTsKKwlTdHlsZSBjaFN0eWxlOwogCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgImgiLAogCSAgICAgICAgICAgICAgICAgICAgICAmaXRlbSkpCiAJCXJldHVybiBOVUxMOwpAQCAtNTU4LDcgKzU1OCw3IEBACiAJeyJTZXRJdGVtU3R5bGUiLCAoUHlDRnVuY3Rpb24pTWVudU9ial9TZXRJdGVtU3R5bGUsIDEsCiAJICIoc2hvcnQgaXRlbSwgc2hvcnQgY2hTdHlsZSkgLT4gTm9uZSJ9LAogCXsiR2V0SXRlbVN0eWxlIiwgKFB5Q0Z1bmN0aW9uKU1lbnVPYmpfR2V0SXRlbVN0eWxlLCAxLAotCSAiKHNob3J0IGl0ZW0pIC0+ICh1bnNpZ25lZCBjaGFyIGNoU3R5bGUpIn0sCisJICIoc2hvcnQgaXRlbSkgLT4gKFN0eWxlIGNoU3R5bGUpIn0sCiAJeyJDYWxjTWVudVNpemUiLCAoUHlDRnVuY3Rpb24pTWVudU9ial9DYWxjTWVudVNpemUsIDEsCiAJICIoKSAtPiBOb25lIn0sCiAJeyJDb3VudE1JdGVtcyIsIChQeUNGdW5jdGlvbilNZW51T2JqX0NvdW50TUl0ZW1zLCAxLApkaWZmIC0tZ2l0IGEvTWFjL01vZHVsZXMvbWVudS9tZW51Z2VuLnB5IGIvTWFjL01vZHVsZXMvbWVudS9tZW51Z2VuLnB5CmluZGV4IGMzZjk2MzYuLjI0NDVkMWUgMTAwNjQ0Ci0tLSBhL01hYy9Nb2R1bGVzL21lbnUvbWVudWdlbi5weQorKysgYi9NYWMvTW9kdWxlcy9tZW51L21lbnVnZW4ucHkKQEAgLTEsNCArMSw0IEBACi0jIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNXNSBHT0xEIFwzMDQ6TWV0cm93ZXJrcyBDL0MrKyBcMzA0OkhlYWRlcnMgXDMwNDpVbml2ZXJzYWwgSGVhZGVycyAyLjBhMyBcMzA0Ok1lbnVzLmgnCisjIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNvZGVXYXJyaW9yNjpNZXRyb3dlcmtzIEMvQysrOkhlYWRlcnM6VW5pdmVyc2FsIEhlYWRlcnMgMi4wLjFmOk1lbnVzLmgnCiAKIGYgPSBGdW5jdGlvbihzaG9ydCwgJ0dldE1CYXJIZWlnaHQnLAogKQpAQCAtMTc0LDcgKzE3NCw3IEBACiBmID0gTWV0aG9kKHZvaWQsICdHZXRJdGVtU3R5bGUnLAogICAgIChNZW51UmVmLCAndGhlTWVudScsIEluTW9kZSksCiAgICAgKHNob3J0LCAnaXRlbScsIEluTW9kZSksCi0gICAgKHVuc2lnbmVkX2NoYXIsICdjaFN0eWxlJywgT3V0TW9kZSksCisgICAgKFN0eWxlLCAnY2hTdHlsZScsIE91dE1vZGUpLAogKQogbWV0aG9kcy5hcHBlbmQoZikKIApkaWZmIC0tZ2l0IGEvTWFjL01vZHVsZXMvcWQvcWRnZW4ucHkgYi9NYWMvTW9kdWxlcy9xZC9xZGdlbi5weQppbmRleCA2MTJiOWU3Li5jYzEyZGU0IDEwMDY0NAotLS0gYS9NYWMvTW9kdWxlcy9xZC9xZGdlbi5weQorKysgYi9NYWMvTW9kdWxlcy9xZC9xZGdlbi5weQpAQCAtMSw0ICsxLDQgQEAKLSMgR2VuZXJhdGVkIGZyb20gJ01vZXM6Q1c1IEdPTEQgXDMwNDpNZXRyb3dlcmtzIEMvQysrIFwzMDQ6SGVhZGVycyBcMzA0OlVuaXZlcnNhbCBIZWFkZXJzIDIuMGEzIFwzMDQ6UXVpY2tEcmF3LmgnCisjIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNvZGVXYXJyaW9yNjpNZXRyb3dlcmtzIEMvQysrOkhlYWRlcnM6VW5pdmVyc2FsIEhlYWRlcnMgMi4wLjFmOlF1aWNrRHJhdy5oJwogCiBmID0gRnVuY3Rpb24odm9pZCwgJ09wZW5Qb3J0JywKICAgICAoR3JhZlB0ciwgJ3BvcnQnLCBJbk1vZGUpLApAQCAtNzEzLDcgKzcxMyw3IEBACiApCiBmdW5jdGlvbnMuYXBwZW5kKGYpCiAKLSMgR2VuZXJhdGVkIGZyb20gJ01vZXM6Q1c1IEdPTEQgXDMwNDpNZXRyb3dlcmtzIEMvQysrIFwzMDQ6SGVhZGVycyBcMzA0OlVuaXZlcnNhbCBIZWFkZXJzIDIuMGEzIFwzMDQ6UXVpY2tEcmF3VGV4dC5oJworIyBHZW5lcmF0ZWQgZnJvbSAnTW9lczpDb2RlV2FycmlvcjY6TWV0cm93ZXJrcyBDL0MrKzpIZWFkZXJzOlVuaXZlcnNhbCBIZWFkZXJzIDIuMC4xZjpRdWlja0RyYXdUZXh0LmgnCiAKIGYgPSBGdW5jdGlvbih2b2lkLCAnVGV4dEZvbnQnLAogICAgIChzaG9ydCwgJ2ZvbnQnLCBJbk1vZGUpLApkaWZmIC0tZ2l0IGEvTWFjL01vZHVsZXMvcWQvcWRzY2FuLnB5IGIvTWFjL01vZHVsZXMvcWQvcWRzY2FuLnB5CmluZGV4IDQ4NzY2ZjIuLjBlMDNkNzcgMTAwNjQ0Ci0tLSBhL01hYy9Nb2R1bGVzL3FkL3Fkc2Nhbi5weQorKysgYi9NYWMvTW9kdWxlcy9xZC9xZHNjYW4ucHkKQEAgLTc4LDYgKzc4LDcgQEAKIAkJCSdDb2xvclNlYXJjaFByb2NQdHInLAogCQkJJ0NvbG9yU2VhcmNoVVBQJywKIAkJCSdDb25zdFBhdHRlcm5QYXJhbScsCisJCQknUGF0dGVybl9wdHInLAogCQkJJ0N1cnNvcl9wdHInLAogCQkJJ0RldmljZUxvb3BEcmF3aW5nUHJvY1B0cicsCiAJCQknRGV2aWNlTG9vcEZsYWdzJywKZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL3Jlcy9SZXNtb2R1bGUuYyBiL01hYy9Nb2R1bGVzL3Jlcy9SZXNtb2R1bGUuYwppbmRleCAwMjRkNGQyLi4zYzViMjNkIDEwMDY0NAotLS0gYS9NYWMvTW9kdWxlcy9yZXMvUmVzbW9kdWxlLmMKKysrIGIvTWFjL01vZHVsZXMvcmVzL1Jlc21vZHVsZS5jCkBAIC0xMTgzLDI1ICsxMTgzLDYgQEAKIAlyZXR1cm4gX3JlczsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICpSZXNfVGVtcEluc2VydFJPTU1hcChfc2VsZiwgX2FyZ3MpCi0JUHlPYmplY3QgKl9zZWxmOwotCVB5T2JqZWN0ICpfYXJnczsKLXsKLQlQeU9iamVjdCAqX3JlcyA9IE5VTEw7Ci0JQm9vbGVhbiB0ZW1wUmVzTG9hZDsKLQlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICJiIiwKLQkgICAgICAgICAgICAgICAgICAgICAgJnRlbXBSZXNMb2FkKSkKLQkJcmV0dXJuIE5VTEw7Ci0JVGVtcEluc2VydFJPTU1hcCh0ZW1wUmVzTG9hZCk7Ci0JewotCQlPU0VyciBfZXJyID0gUmVzRXJyb3IoKTsKLQkJaWYgKF9lcnIgIT0gbm9FcnIpIHJldHVybiBQeU1hY19FcnJvcihfZXJyKTsKLQl9Ci0JUHlfSU5DUkVGKFB5X05vbmUpOwotCV9yZXMgPSBQeV9Ob25lOwotCXJldHVybiBfcmVzOwotfQotCiBzdGF0aWMgUHlPYmplY3QgKlJlc19SZXNvdXJjZShfc2VsZiwgX2FyZ3MpCiAJUHlPYmplY3QgKl9zZWxmOwogCVB5T2JqZWN0ICpfYXJnczsKQEAgLTEyOTMsOCArMTI3NCw2IEBACiAJICIoRlNTcGVjIHNwZWMsIFNpZ25lZEJ5dGUgcGVybWlzc2lvbikgLT4gKHNob3J0IF9ydikifSwKIAl7IkZTcENyZWF0ZVJlc0ZpbGUiLCAoUHlDRnVuY3Rpb24pUmVzX0ZTcENyZWF0ZVJlc0ZpbGUsIDEsCiAJICIoRlNTcGVjIHNwZWMsIE9TVHlwZSBjcmVhdG9yLCBPU1R5cGUgZmlsZVR5cGUsIFNjcmlwdENvZGUgc2NyaXB0VGFnKSAtPiBOb25lIn0sCi0JeyJUZW1wSW5zZXJ0Uk9NTWFwIiwgKFB5Q0Z1bmN0aW9uKVJlc19UZW1wSW5zZXJ0Uk9NTWFwLCAxLAotCSAiKEJvb2xlYW4gdGVtcFJlc0xvYWQpIC0+IE5vbmUifSwKIAl7IlJlc291cmNlIiwgKFB5Q0Z1bmN0aW9uKVJlc19SZXNvdXJjZSwgMSwKIAkgIkNvbnZlcnQgYSBzdHJpbmcgdG8gYSByZXNvdXJjZSBvYmplY3QuXG5cblRoZSBjcmVhdGVkIHJlc291cmNlIG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IGEgaGFuZGxlLlxuQXBwbHkgQWRkUmVzb3VyY2UoKSB0byB3cml0ZSBpdCB0byBhIHJlc291cmNlIGZpbGUuXG4ifSwKIAl7TlVMTCwgTlVMTCwgMH0KZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL3Jlcy9yZXNnZW4ucHkgYi9NYWMvTW9kdWxlcy9yZXMvcmVzZ2VuLnB5CmluZGV4IGI1ZTE1ZGUuLjI4YjkwMTUgMTAwNjQ0Ci0tLSBhL01hYy9Nb2R1bGVzL3Jlcy9yZXNnZW4ucHkKKysrIGIvTWFjL01vZHVsZXMvcmVzL3Jlc2dlbi5weQpAQCAtMSw0ICsxLDQgQEAKLSMgR2VuZXJhdGVkIGZyb20gJ01vZXM6Q1c1IEdPTEQgXDMwNDpNZXRyb3dlcmtzIEMvQysrIFwzMDQ6SGVhZGVycyBcMzA0OlVuaXZlcnNhbCBIZWFkZXJzIDIuMGEzIFwzMDQ6UmVzb3VyY2VzLmgnCisjIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNvZGVXYXJyaW9yNjpNZXRyb3dlcmtzIEMvQysrOkhlYWRlcnM6VW5pdmVyc2FsIEhlYWRlcnMgMi4wLjFmOlJlc291cmNlcy5oJwogCiBmID0gUmVzRnVuY3Rpb24oc2hvcnQsICdJbml0UmVzb3VyY2VzJywKICkKQEAgLTI3NSw4ICsyNzUsMyBAQAogKQogcmVzbWV0aG9kcy5hcHBlbmQoZikKIAotZiA9IFJlc0Z1bmN0aW9uKHZvaWQsICdUZW1wSW5zZXJ0Uk9NTWFwJywKLSAgICAoQm9vbGVhbiwgJ3RlbXBSZXNMb2FkJywgSW5Nb2RlKSwKLSkKLWZ1bmN0aW9ucy5hcHBlbmQoZikKLQpkaWZmIC0tZ2l0IGEvTWFjL01vZHVsZXMvcmVzL3Jlc3NjYW4ucHkgYi9NYWMvTW9kdWxlcy9yZXMvcmVzc2Nhbi5weQppbmRleCBiYTg2MGI0Li45NDIwYTAzIDEwMDY0NAotLS0gYS9NYWMvTW9kdWxlcy9yZXMvcmVzc2Nhbi5weQorKysgYi9NYWMvTW9kdWxlcy9yZXMvcmVzc2Nhbi5weQpAQCAtNDAsNiArNDAsNyBAQAogCQlyZXR1cm4gWwogCQkJIlJlYWRQYXJ0aWFsUmVzb3VyY2UiLAogCQkJIldyaXRlUGFydGlhbFJlc291cmNlIiwKKwkJCSJUZW1wSW5zZXJ0Uk9NTWFwIiwKICMjCQkJIlJtdmVSZXNvdXJjZSIsCQkjIFJlbW92ZVJlc291cmNlCiAjIwkJCSJTaXplUmVzb3VyY2UiLAkJIyBHZXRSZXNvdXJjZVNpemVPbkRpc2sKICMjCQkJIk1heFNpemVSc3JjIiwJCSMgR2V0TWF4UmVzb3VyY2VTaXplCmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9zbmQvU25kbW9kdWxlLmMgYi9NYWMvTW9kdWxlcy9zbmQvU25kbW9kdWxlLmMKaW5kZXggNjJlOWQ4NS4uZmJjOGZmMiAxMDA2NDQKLS0tIGEvTWFjL01vZHVsZXMvc25kL1NuZG1vZHVsZS5jCisrKyBiL01hYy9Nb2R1bGVzL3NuZC9TbmRtb2R1bGUuYwpAQCAtNDk2LDE1ICs0OTYsMTQgQEAKIAljaGFyICpidWZmZXJfX291dF9fOwogCWxvbmcgYnVmZmVyX19sZW5fXzsKIAlpbnQgYnVmZmVyX19pbl9sZW5fXzsKLQljaGFyICpzdGF0ZV9faW5fXzsKLQljaGFyIHN0YXRlX19vdXRfX1sxMjhdOwotCWludCBzdGF0ZV9fbGVuX187CisJU3RhdGVCbG9jayAqc3RhdGVfX2luX187CisJU3RhdGVCbG9jayBzdGF0ZV9fb3V0X187CiAJaW50IHN0YXRlX19pbl9sZW5fXzsKIAl1bnNpZ25lZCBsb25nIG51bUNoYW5uZWxzOwogCXVuc2lnbmVkIGxvbmcgd2hpY2hDaGFubmVsOwogCWlmICghUHlBcmdfUGFyc2VUdXBsZShfYXJncywgInMjcyNsbCIsCiAJICAgICAgICAgICAgICAgICAgICAgICZidWZmZXJfX2luX18sICZidWZmZXJfX2luX2xlbl9fLAotCSAgICAgICAgICAgICAgICAgICAgICAmc3RhdGVfX2luX18sICZzdGF0ZV9faW5fbGVuX18sCisJICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSZzdGF0ZV9faW5fXywgJnN0YXRlX19pbl9sZW5fXywKIAkgICAgICAgICAgICAgICAgICAgICAgJm51bUNoYW5uZWxzLAogCSAgICAgICAgICAgICAgICAgICAgICAmd2hpY2hDaGFubmVsKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC01MTQsMTkgKzUxMywxOCBAQAogCQlnb3RvIGJ1ZmZlcl9fZXJyb3JfXzsKIAl9CiAJYnVmZmVyX19sZW5fXyA9IGJ1ZmZlcl9faW5fbGVuX187Ci0JaWYgKHN0YXRlX19pbl9sZW5fXyAhPSAxMjgpCisJaWYgKHN0YXRlX19pbl9sZW5fXyAhPSBzaXplb2YoU3RhdGVCbG9jaykpCiAJewotCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYnVmZmVyIGxlbmd0aCBzaG91bGQgYmUgMTI4Iik7CisJCVB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJidWZmZXIgbGVuZ3RoIHNob3VsZCBiZSBzaXplb2YoU3RhdGVCbG9jaykiKTsKIAkJZ290byBzdGF0ZV9fZXJyb3JfXzsKIAl9Ci0Jc3RhdGVfX2xlbl9fID0gc3RhdGVfX2luX2xlbl9fOwogCUNvbXAzdG8xKGJ1ZmZlcl9faW5fXywgYnVmZmVyX19vdXRfXywgKGxvbmcpYnVmZmVyX19sZW5fXywKLQkgICAgICAgICBzdGF0ZV9faW5fXywgc3RhdGVfX291dF9fLAorCSAgICAgICAgIHN0YXRlX19pbl9fLCAmc3RhdGVfX291dF9fLAogCSAgICAgICAgIG51bUNoYW5uZWxzLAogCSAgICAgICAgIHdoaWNoQ2hhbm5lbCk7CiAJX3JlcyA9IFB5X0J1aWxkVmFsdWUoInMjcyMiLAogCSAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9fb3V0X18sIChpbnQpYnVmZmVyX19sZW5fXywKLQkgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9fb3V0X18sIChpbnQpMTI4KTsKKwkgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZzdGF0ZV9fb3V0X18sIChpbnQpc2l6ZW9mKFN0YXRlQmxvY2spKTsKICBzdGF0ZV9fZXJyb3JfXzogOwogCWZyZWUoYnVmZmVyX19vdXRfXyk7CiAgYnVmZmVyX19lcnJvcl9fOiA7CkBAIC01NDIsMTUgKzU0MCwxNCBAQAogCWNoYXIgKmJ1ZmZlcl9fb3V0X187CiAJbG9uZyBidWZmZXJfX2xlbl9fOwogCWludCBidWZmZXJfX2luX2xlbl9fOwotCWNoYXIgKnN0YXRlX19pbl9fOwotCWNoYXIgc3RhdGVfX291dF9fWzEyOF07Ci0JaW50IHN0YXRlX19sZW5fXzsKKwlTdGF0ZUJsb2NrICpzdGF0ZV9faW5fXzsKKwlTdGF0ZUJsb2NrIHN0YXRlX19vdXRfXzsKIAlpbnQgc3RhdGVfX2luX2xlbl9fOwogCXVuc2lnbmVkIGxvbmcgbnVtQ2hhbm5lbHM7CiAJdW5zaWduZWQgbG9uZyB3aGljaENoYW5uZWw7CiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKF9hcmdzLCAicyNzI2xsIiwKIAkgICAgICAgICAgICAgICAgICAgICAgJmJ1ZmZlcl9faW5fXywgJmJ1ZmZlcl9faW5fbGVuX18sCi0JICAgICAgICAgICAgICAgICAgICAgICZzdGF0ZV9faW5fXywgJnN0YXRlX19pbl9sZW5fXywKKwkgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopJnN0YXRlX19pbl9fLCAmc3RhdGVfX2luX2xlbl9fLAogCSAgICAgICAgICAgICAgICAgICAgICAmbnVtQ2hhbm5lbHMsCiAJICAgICAgICAgICAgICAgICAgICAgICZ3aGljaENoYW5uZWwpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTU2MCwxOSArNTU3LDE4IEBACiAJCWdvdG8gYnVmZmVyX19lcnJvcl9fOwogCX0KIAlidWZmZXJfX2xlbl9fID0gYnVmZmVyX19pbl9sZW5fXzsKLQlpZiAoc3RhdGVfX2luX2xlbl9fICE9IDEyOCkKKwlpZiAoc3RhdGVfX2luX2xlbl9fICE9IHNpemVvZihTdGF0ZUJsb2NrKSkKIAl7Ci0JCVB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJidWZmZXIgbGVuZ3RoIHNob3VsZCBiZSAxMjgiKTsKKwkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImJ1ZmZlciBsZW5ndGggc2hvdWxkIGJlIHNpemVvZihTdGF0ZUJsb2NrKSIpOwogCQlnb3RvIHN0YXRlX19lcnJvcl9fOwogCX0KLQlzdGF0ZV9fbGVuX18gPSBzdGF0ZV9faW5fbGVuX187CiAJRXhwMXRvMyhidWZmZXJfX2luX18sIGJ1ZmZlcl9fb3V0X18sIChsb25nKWJ1ZmZlcl9fbGVuX18sCi0JICAgICAgICBzdGF0ZV9faW5fXywgc3RhdGVfX291dF9fLAorCSAgICAgICAgc3RhdGVfX2luX18sICZzdGF0ZV9fb3V0X18sCiAJICAgICAgICBudW1DaGFubmVscywKIAkgICAgICAgIHdoaWNoQ2hhbm5lbCk7CiAJX3JlcyA9IFB5X0J1aWxkVmFsdWUoInMjcyMiLAogCSAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9fb3V0X18sIChpbnQpYnVmZmVyX19sZW5fXywKLQkgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9fb3V0X18sIChpbnQpMTI4KTsKKwkgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZzdGF0ZV9fb3V0X18sIChpbnQpc2l6ZW9mKFN0YXRlQmxvY2spKTsKICBzdGF0ZV9fZXJyb3JfXzogOwogCWZyZWUoYnVmZmVyX19vdXRfXyk7CiAgYnVmZmVyX19lcnJvcl9fOiA7CkBAIC01ODgsMTUgKzU4NCwxNCBAQAogCWNoYXIgKmJ1ZmZlcl9fb3V0X187CiAJbG9uZyBidWZmZXJfX2xlbl9fOwogCWludCBidWZmZXJfX2luX2xlbl9fOwotCWNoYXIgKnN0YXRlX19pbl9fOwotCWNoYXIgc3RhdGVfX291dF9fWzEyOF07Ci0JaW50IHN0YXRlX19sZW5fXzsKKwlTdGF0ZUJsb2NrICpzdGF0ZV9faW5fXzsKKwlTdGF0ZUJsb2NrIHN0YXRlX19vdXRfXzsKIAlpbnQgc3RhdGVfX2luX2xlbl9fOwogCXVuc2lnbmVkIGxvbmcgbnVtQ2hhbm5lbHM7CiAJdW5zaWduZWQgbG9uZyB3aGljaENoYW5uZWw7CiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKF9hcmdzLCAicyNzI2xsIiwKIAkgICAgICAgICAgICAgICAgICAgICAgJmJ1ZmZlcl9faW5fXywgJmJ1ZmZlcl9faW5fbGVuX18sCi0JICAgICAgICAgICAgICAgICAgICAgICZzdGF0ZV9faW5fXywgJnN0YXRlX19pbl9sZW5fXywKKwkgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopJnN0YXRlX19pbl9fLCAmc3RhdGVfX2luX2xlbl9fLAogCSAgICAgICAgICAgICAgICAgICAgICAmbnVtQ2hhbm5lbHMsCiAJICAgICAgICAgICAgICAgICAgICAgICZ3aGljaENoYW5uZWwpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTYwNiwxOSArNjAxLDE4IEBACiAJCWdvdG8gYnVmZmVyX19lcnJvcl9fOwogCX0KIAlidWZmZXJfX2xlbl9fID0gYnVmZmVyX19pbl9sZW5fXzsKLQlpZiAoc3RhdGVfX2luX2xlbl9fICE9IDEyOCkKKwlpZiAoc3RhdGVfX2luX2xlbl9fICE9IHNpemVvZihTdGF0ZUJsb2NrKSkKIAl7Ci0JCVB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJidWZmZXIgbGVuZ3RoIHNob3VsZCBiZSAxMjgiKTsKKwkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImJ1ZmZlciBsZW5ndGggc2hvdWxkIGJlIHNpemVvZihTdGF0ZUJsb2NrKSIpOwogCQlnb3RvIHN0YXRlX19lcnJvcl9fOwogCX0KLQlzdGF0ZV9fbGVuX18gPSBzdGF0ZV9faW5fbGVuX187CiAJQ29tcDZ0bzEoYnVmZmVyX19pbl9fLCBidWZmZXJfX291dF9fLCAobG9uZylidWZmZXJfX2xlbl9fLAotCSAgICAgICAgIHN0YXRlX19pbl9fLCBzdGF0ZV9fb3V0X18sCisJICAgICAgICAgc3RhdGVfX2luX18sICZzdGF0ZV9fb3V0X18sCiAJICAgICAgICAgbnVtQ2hhbm5lbHMsCiAJICAgICAgICAgd2hpY2hDaGFubmVsKTsKIAlfcmVzID0gUHlfQnVpbGRWYWx1ZSgicyNzIyIsCiAJICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX19vdXRfXywgKGludClidWZmZXJfX2xlbl9fLAotCSAgICAgICAgICAgICAgICAgICAgIHN0YXRlX19vdXRfXywgKGludCkxMjgpOworCSAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJnN0YXRlX19vdXRfXywgKGludClzaXplb2YoU3RhdGVCbG9jaykpOwogIHN0YXRlX19lcnJvcl9fOiA7CiAJZnJlZShidWZmZXJfX291dF9fKTsKICBidWZmZXJfX2Vycm9yX186IDsKQEAgLTYzNCwxNSArNjI4LDE0IEBACiAJY2hhciAqYnVmZmVyX19vdXRfXzsKIAlsb25nIGJ1ZmZlcl9fbGVuX187CiAJaW50IGJ1ZmZlcl9faW5fbGVuX187Ci0JY2hhciAqc3RhdGVfX2luX187Ci0JY2hhciBzdGF0ZV9fb3V0X19bMTI4XTsKLQlpbnQgc3RhdGVfX2xlbl9fOworCVN0YXRlQmxvY2sgKnN0YXRlX19pbl9fOworCVN0YXRlQmxvY2sgc3RhdGVfX291dF9fOwogCWludCBzdGF0ZV9faW5fbGVuX187CiAJdW5zaWduZWQgbG9uZyBudW1DaGFubmVsczsKIAl1bnNpZ25lZCBsb25nIHdoaWNoQ2hhbm5lbDsKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoX2FyZ3MsICJzI3MjbGwiLAogCSAgICAgICAgICAgICAgICAgICAgICAmYnVmZmVyX19pbl9fLCAmYnVmZmVyX19pbl9sZW5fXywKLQkgICAgICAgICAgICAgICAgICAgICAgJnN0YXRlX19pbl9fLCAmc3RhdGVfX2luX2xlbl9fLAorCSAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikmc3RhdGVfX2luX18sICZzdGF0ZV9faW5fbGVuX18sCiAJICAgICAgICAgICAgICAgICAgICAgICZudW1DaGFubmVscywKIAkgICAgICAgICAgICAgICAgICAgICAgJndoaWNoQ2hhbm5lbCkpCiAJCXJldHVybiBOVUxMOwpAQCAtNjUyLDE5ICs2NDUsMTggQEAKIAkJZ290byBidWZmZXJfX2Vycm9yX187CiAJfQogCWJ1ZmZlcl9fbGVuX18gPSBidWZmZXJfX2luX2xlbl9fOwotCWlmIChzdGF0ZV9faW5fbGVuX18gIT0gMTI4KQorCWlmIChzdGF0ZV9faW5fbGVuX18gIT0gc2l6ZW9mKFN0YXRlQmxvY2spKQogCXsKLQkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImJ1ZmZlciBsZW5ndGggc2hvdWxkIGJlIDEyOCIpOworCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYnVmZmVyIGxlbmd0aCBzaG91bGQgYmUgc2l6ZW9mKFN0YXRlQmxvY2spIik7CiAJCWdvdG8gc3RhdGVfX2Vycm9yX187CiAJfQotCXN0YXRlX19sZW5fXyA9IHN0YXRlX19pbl9sZW5fXzsKIAlFeHAxdG82KGJ1ZmZlcl9faW5fXywgYnVmZmVyX19vdXRfXywgKGxvbmcpYnVmZmVyX19sZW5fXywKLQkgICAgICAgIHN0YXRlX19pbl9fLCBzdGF0ZV9fb3V0X18sCisJICAgICAgICBzdGF0ZV9faW5fXywgJnN0YXRlX19vdXRfXywKIAkgICAgICAgIG51bUNoYW5uZWxzLAogCSAgICAgICAgd2hpY2hDaGFubmVsKTsKIAlfcmVzID0gUHlfQnVpbGRWYWx1ZSgicyNzIyIsCiAJICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX19vdXRfXywgKGludClidWZmZXJfX2xlbl9fLAotCSAgICAgICAgICAgICAgICAgICAgIHN0YXRlX19vdXRfXywgKGludCkxMjgpOworCSAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJnN0YXRlX19vdXRfXywgKGludClzaXplb2YoU3RhdGVCbG9jaykpOwogIHN0YXRlX19lcnJvcl9fOiA7CiAJZnJlZShidWZmZXJfX291dF9fKTsKICBidWZmZXJfX2Vycm9yX186IDsKQEAgLTc3NiwxMyArNzY4LDEzIEBACiAJeyJNQUNFVmVyc2lvbiIsIChQeUNGdW5jdGlvbilTbmRfTUFDRVZlcnNpb24sIDEsCiAJICIoKSAtPiAoTnVtVmVyc2lvbiBfcnYpIn0sCiAJeyJDb21wM3RvMSIsIChQeUNGdW5jdGlvbilTbmRfQ29tcDN0bzEsIDEsCi0JICIoQnVmZmVyIGJ1ZmZlciwgQnVmZmVyIHN0YXRlLCB1bnNpZ25lZCBsb25nIG51bUNoYW5uZWxzLCB1bnNpZ25lZCBsb25nIHdoaWNoQ2hhbm5lbCkgLT4gKEJ1ZmZlciBidWZmZXIsIEJ1ZmZlciBzdGF0ZSkifSwKKwkgIihCdWZmZXIgYnVmZmVyLCBTdGF0ZUJsb2NrIHN0YXRlLCB1bnNpZ25lZCBsb25nIG51bUNoYW5uZWxzLCB1bnNpZ25lZCBsb25nIHdoaWNoQ2hhbm5lbCkgLT4gKEJ1ZmZlciBidWZmZXIsIFN0YXRlQmxvY2sgc3RhdGUpIn0sCiAJeyJFeHAxdG8zIiwgKFB5Q0Z1bmN0aW9uKVNuZF9FeHAxdG8zLCAxLAotCSAiKEJ1ZmZlciBidWZmZXIsIEJ1ZmZlciBzdGF0ZSwgdW5zaWduZWQgbG9uZyBudW1DaGFubmVscywgdW5zaWduZWQgbG9uZyB3aGljaENoYW5uZWwpIC0+IChCdWZmZXIgYnVmZmVyLCBCdWZmZXIgc3RhdGUpIn0sCisJICIoQnVmZmVyIGJ1ZmZlciwgU3RhdGVCbG9jayBzdGF0ZSwgdW5zaWduZWQgbG9uZyBudW1DaGFubmVscywgdW5zaWduZWQgbG9uZyB3aGljaENoYW5uZWwpIC0+IChCdWZmZXIgYnVmZmVyLCBTdGF0ZUJsb2NrIHN0YXRlKSJ9LAogCXsiQ29tcDZ0bzEiLCAoUHlDRnVuY3Rpb24pU25kX0NvbXA2dG8xLCAxLAotCSAiKEJ1ZmZlciBidWZmZXIsIEJ1ZmZlciBzdGF0ZSwgdW5zaWduZWQgbG9uZyBudW1DaGFubmVscywgdW5zaWduZWQgbG9uZyB3aGljaENoYW5uZWwpIC0+IChCdWZmZXIgYnVmZmVyLCBCdWZmZXIgc3RhdGUpIn0sCisJICIoQnVmZmVyIGJ1ZmZlciwgU3RhdGVCbG9jayBzdGF0ZSwgdW5zaWduZWQgbG9uZyBudW1DaGFubmVscywgdW5zaWduZWQgbG9uZyB3aGljaENoYW5uZWwpIC0+IChCdWZmZXIgYnVmZmVyLCBTdGF0ZUJsb2NrIHN0YXRlKSJ9LAogCXsiRXhwMXRvNiIsIChQeUNGdW5jdGlvbilTbmRfRXhwMXRvNiwgMSwKLQkgIihCdWZmZXIgYnVmZmVyLCBCdWZmZXIgc3RhdGUsIHVuc2lnbmVkIGxvbmcgbnVtQ2hhbm5lbHMsIHVuc2lnbmVkIGxvbmcgd2hpY2hDaGFubmVsKSAtPiAoQnVmZmVyIGJ1ZmZlciwgQnVmZmVyIHN0YXRlKSJ9LAorCSAiKEJ1ZmZlciBidWZmZXIsIFN0YXRlQmxvY2sgc3RhdGUsIHVuc2lnbmVkIGxvbmcgbnVtQ2hhbm5lbHMsIHVuc2lnbmVkIGxvbmcgd2hpY2hDaGFubmVsKSAtPiAoQnVmZmVyIGJ1ZmZlciwgU3RhdGVCbG9jayBzdGF0ZSkifSwKIAl7IkdldFN5c0JlZXBWb2x1bWUiLCAoUHlDRnVuY3Rpb24pU25kX0dldFN5c0JlZXBWb2x1bWUsIDEsCiAJICIoKSAtPiAobG9uZyBsZXZlbCkifSwKIAl7IlNldFN5c0JlZXBWb2x1bWUiLCAoUHlDRnVuY3Rpb24pU25kX1NldFN5c0JlZXBWb2x1bWUsIDEsCmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9zbmQvc25kZ2VuLnB5IGIvTWFjL01vZHVsZXMvc25kL3NuZGdlbi5weQppbmRleCBhOTgwMzM4Li44MjdiMjYzIDEwMDY0NAotLS0gYS9NYWMvTW9kdWxlcy9zbmQvc25kZ2VuLnB5CisrKyBiL01hYy9Nb2R1bGVzL3NuZC9zbmRnZW4ucHkKQEAgLTEsNCArMSw0IEBACi0jIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNXNSBHT0xEIFwzMDQ6TWV0cm93ZXJrcyBDL0MrKyBcMzA0OkhlYWRlcnMgXDMwNDpVbml2ZXJzYWwgSGVhZGVycyAyLjBhMyBcMzA0OlNvdW5kLmgnCisjIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNvZGVXYXJyaW9yNjpNZXRyb3dlcmtzIEMvQysrOkhlYWRlcnM6VW5pdmVyc2FsIEhlYWRlcnMgMi4wLjFmOlNvdW5kLmgnCiAKIGYgPSBTbmRGdW5jdGlvbih2b2lkLCAnU2V0U291bmRWb2wnLAogICAgIChzaG9ydCwgJ2xldmVsJywgSW5Nb2RlKSwKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiBmID0gU25kRnVuY3Rpb24odm9pZCwgJ0NvbXAzdG8xJywKICAgICAoSW5PdXRCdWZmZXIsICdidWZmZXInLCBJbk91dE1vZGUpLAotICAgIChJbk91dEJ1ZjEyOCwgJ3N0YXRlJywgSW5PdXRNb2RlKSwKKyAgICAoU3RhdGVCbG9jaywgJ3N0YXRlJywgSW5PdXRNb2RlKSwKICAgICAodW5zaWduZWRfbG9uZywgJ251bUNoYW5uZWxzJywgSW5Nb2RlKSwKICAgICAodW5zaWduZWRfbG9uZywgJ3doaWNoQ2hhbm5lbCcsIEluTW9kZSksCiApCkBAIC0xMDgsNyArMTA4LDcgQEAKIAogZiA9IFNuZEZ1bmN0aW9uKHZvaWQsICdFeHAxdG8zJywKICAgICAoSW5PdXRCdWZmZXIsICdidWZmZXInLCBJbk91dE1vZGUpLAotICAgIChJbk91dEJ1ZjEyOCwgJ3N0YXRlJywgSW5PdXRNb2RlKSwKKyAgICAoU3RhdGVCbG9jaywgJ3N0YXRlJywgSW5PdXRNb2RlKSwKICAgICAodW5zaWduZWRfbG9uZywgJ251bUNoYW5uZWxzJywgSW5Nb2RlKSwKICAgICAodW5zaWduZWRfbG9uZywgJ3doaWNoQ2hhbm5lbCcsIEluTW9kZSksCiApCkBAIC0xMTYsNyArMTE2LDcgQEAKIAogZiA9IFNuZEZ1bmN0aW9uKHZvaWQsICdDb21wNnRvMScsCiAgICAgKEluT3V0QnVmZmVyLCAnYnVmZmVyJywgSW5PdXRNb2RlKSwKLSAgICAoSW5PdXRCdWYxMjgsICdzdGF0ZScsIEluT3V0TW9kZSksCisgICAgKFN0YXRlQmxvY2ssICdzdGF0ZScsIEluT3V0TW9kZSksCiAgICAgKHVuc2lnbmVkX2xvbmcsICdudW1DaGFubmVscycsIEluTW9kZSksCiAgICAgKHVuc2lnbmVkX2xvbmcsICd3aGljaENoYW5uZWwnLCBJbk1vZGUpLAogKQpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIGYgPSBTbmRGdW5jdGlvbih2b2lkLCAnRXhwMXRvNicsCiAgICAgKEluT3V0QnVmZmVyLCAnYnVmZmVyJywgSW5PdXRNb2RlKSwKLSAgICAoSW5PdXRCdWYxMjgsICdzdGF0ZScsIEluT3V0TW9kZSksCisgICAgKFN0YXRlQmxvY2ssICdzdGF0ZScsIEluT3V0TW9kZSksCiAgICAgKHVuc2lnbmVkX2xvbmcsICdudW1DaGFubmVscycsIEluTW9kZSksCiAgICAgKHVuc2lnbmVkX2xvbmcsICd3aGljaENoYW5uZWwnLCBJbk1vZGUpLAogKQpkaWZmIC0tZ2l0IGEvTWFjL01vZHVsZXMvc25kL3NuZHNjYW4ucHkgYi9NYWMvTW9kdWxlcy9zbmQvc25kc2Nhbi5weQppbmRleCA4MjAxYjJjLi5hZTUyNTkzIDEwMDY0NAotLS0gYS9NYWMvTW9kdWxlcy9zbmQvc25kc2Nhbi5weQorKysgYi9NYWMvTW9kdWxlcy9zbmQvc25kc2Nhbi5weQpAQCAtNDMsNiArNDMsOSBAQAogCQkJJ0dldFNvdW5kUHJlZmVyZW5jZScsCiAJCQknU2V0U291bmRQcmVmZXJlbmNlJywKIAkJCSdHZXRDb21wcmVzc2lvbkluZm8nLAorCQkJIyBBbmQgMy4xIGNhbGxzLCBkaXR0by4uLgorCQkJJ1NuZEdldEluZm8nLAorCQkJJ1NuZFNldEluZm8nLAogCiAJCQldCiAKQEAgLTg5LDggKzkyLDExIEBACiAJCQkgWygiSW5PdXRCdWZmZXIiLCAiYnVmZmVyIiwgIkluT3V0TW9kZSIpXSksCiAJCQkKIAkJCSMgRGl0dG8KLQkJCShbKCJ2b2lkX3B0ciIsICJpblN0YXRlIiwgIkluTW9kZSIpLCAoInZvaWQiLCAib3V0U3RhdGUiLCAiT3V0TW9kZSIpXSwKLQkJCSBbKCJJbk91dEJ1ZjEyOCIsICJzdGF0ZSIsICJJbk91dE1vZGUiKV0pLAorIyMJCQkoWygidm9pZF9wdHIiLCAiaW5TdGF0ZSIsICJJbk1vZGUiKSwgKCJ2b2lkIiwgIm91dFN0YXRlIiwgIk91dE1vZGUiKV0sCisjIwkJCSBbKCJJbk91dEJ1ZjEyOCIsICJzdGF0ZSIsICJJbk91dE1vZGUiKV0pLAorCQkJKFsoIlN0YXRlQmxvY2tQdHIiLCAiaW5TdGF0ZSIsICJJbk1vZGUiKSwgKCJTdGF0ZUJsb2NrUHRyIiwgIm91dFN0YXRlIiwgIkluTW9kZSIpXSwKKwkJCSBbKCJTdGF0ZUJsb2NrIiwgInN0YXRlIiwgIkluT3V0TW9kZSIpXSksCisKIAkJCV0KIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL3NuZC9zbmRzdXBwb3J0LnB5IGIvTWFjL01vZHVsZXMvc25kL3NuZHN1cHBvcnQucHkKaW5kZXggYWYxOTA4YS4uOTdhMjNhZCAxMDA2NDQKLS0tIGEvTWFjL01vZHVsZXMvc25kL3NuZHN1cHBvcnQucHkKKysrIGIvTWFjL01vZHVsZXMvc25kL3NuZHN1cHBvcnQucHkKQEAgLTgxLDcgKzgxLDggQEAKIAogTnVtVmVyc2lvbiA9IE9wYXF1ZUJ5VmFsdWVUeXBlKCdOdW1WZXJzaW9uJywgJ051bVZlcicpCiAKLUluT3V0QnVmMTI4ID0gRml4ZWRJbnB1dE91dHB1dEJ1ZmZlclR5cGUoMTI4KQorIyNJbk91dEJ1ZjEyOCA9IEZpeGVkSW5wdXRPdXRwdXRCdWZmZXJUeXBlKDEyOCkKK1N0YXRlQmxvY2sgPSBTdHJ1Y3RJbnB1dE91dHB1dEJ1ZmZlclR5cGUoJ1N0YXRlQmxvY2snKQogCiBBdWRpb1NlbGVjdGlvblB0ciA9IEZha2VUeXBlKCcwJykgIyBYWFgKIApkaWZmIC0tZ2l0IGEvTWFjL01vZHVsZXMvd2luL3dpbmdlbi5weSBiL01hYy9Nb2R1bGVzL3dpbi93aW5nZW4ucHkKaW5kZXggZjBmNzYzMy4uMjU5MzFlOCAxMDA2NDQKLS0tIGEvTWFjL01vZHVsZXMvd2luL3dpbmdlbi5weQorKysgYi9NYWMvTW9kdWxlcy93aW4vd2luZ2VuLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBHZW5lcmF0ZWQgZnJvbSAnTW9lczpDVzUgR09MRCBcMzA0Ok1ldHJvd2Vya3MgQy9DKysgXDMwNDpIZWFkZXJzIFwzMDQ6VW5pdmVyc2FsIEhlYWRlcnMgMi4wYTMgXDMwNDpXaW5kb3dzLmgnCisjIEdlbmVyYXRlZCBmcm9tICdNb2VzOkNvZGVXYXJyaW9yNjpNZXRyb3dlcmtzIEMvQysrOkhlYWRlcnM6VW5pdmVyc2FsIEhlYWRlcnMgMi4wLjFmOldpbmRvd3MuaCcKIAogZiA9IEZ1bmN0aW9uKHZvaWQsICdJbml0V2luZG93cycsCiApCmRpZmYgLS1naXQgYS9Ub29scy9iZ2VuL2JnZW4vbWFjc3VwcG9ydC5weSBiL1Rvb2xzL2JnZW4vYmdlbi9tYWNzdXBwb3J0LnB5CmluZGV4IGYxN2JiOTYuLjZkMjI2ZDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2JnZW4vYmdlbi9tYWNzdXBwb3J0LnB5CisrKyBiL1Rvb2xzL2JnZW4vYmdlbi9tYWNzdXBwb3J0LnB5CkBAIC0xNiw2ICsxNiwxMSBAQAogU2l6ZSA9IFR5cGUoIlNpemUiLCAibCIpCiBTdHlsZSA9IFR5cGUoIlN0eWxlIiwgImIiKQogCitVSW50MTYgPSBUeXBlKCJVSW50MTYiLCAiaCIpCitTSW50MTYgPSBUeXBlKCJTSW50MTYiLCAiaCIpCitVSW50MzIgPSBUeXBlKCJVSW50MzIiLCAibCIpCitTSW50MzIgPSBUeXBlKCJTSW50MzIiLCAibCIpCisKICMgUGFzY2FsIHN0cmluZ3MKIENvbnN0U3RyMjU1UGFyYW0gPSBPcGFxdWVBcnJheVR5cGUoIlN0cjI1NSIsICJQeU1hY19CdWlsZFN0cjI1NSIsICJQeU1hY19HZXRTdHIyNTUiKQogU3RyMjU1ID0gT3BhcXVlQXJyYXlUeXBlKCJTdHIyNTUiLCAiUHlNYWNfQnVpbGRTdHIyNTUiLCAiUHlNYWNfR2V0U3RyMjU1IikKZGlmZiAtLWdpdCBhL1Rvb2xzL2JnZW4vYmdlbi9zY2FudG9vbHMucHkgYi9Ub29scy9iZ2VuL2JnZW4vc2NhbnRvb2xzLnB5CmluZGV4IDNkNTQ2ZDguLjA5ZDZmMzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2JnZW4vYmdlbi9zY2FudG9vbHMucHkKKysrIGIvVG9vbHMvYmdlbi9iZ2VuL3NjYW50b29scy5weQpAQCAtMzAsNyArMzAsNyBAQAogI0NSRUFUT1IgPSAnS0FITCcJCSMgR3VpZG8ncyBmYXZvcml0ZSB0ZXh0IGVkaXRvciBvbiB0aGUgTWFjCiAjSU5DTFVERURJUiA9ICJEOkRldmVsb3BtZW50OlRISU5LIEM6TWFjICNpbmNsdWRlczpBcHBsZSAjaW5jbHVkZXM6IgogQ1JFQVRPUiA9ICdNUENDJwkJIyBKYWNrJ3MgZmF2b3JpdGUgdGV4dCBlZGl0b3Igb24gdGhlIE1hYwotSU5DTFVERURJUiA9ICJNb2VzOkNXNSBHT0xEIMQ6TWV0cm93ZXJrcyBDL0MrKyDEOkhlYWRlcnMgxDpVbml2ZXJzYWwgSGVhZGVycyAyLjBhMyDEOiIKK0lOQ0xVREVESVIgPSAiTW9lczpDb2RlV2FycmlvcjY6TWV0cm93ZXJrcyBDL0MrKzpIZWFkZXJzOlVuaXZlcnNhbCBIZWFkZXJzIDIuMC4xZjoiCiAKIAogRXJyb3IgPSAic2NhbnRvb2xzLkVycm9yIgpAQCAtMzA5LDcgKzMwOSwxMCBAQAogCQkJCWV4Y2VwdCBJT0Vycm9yOgogCQkJCQlwYXNzCiAJCSMgSWYgbm90IG9uIHRoZSBwYXRoLCBvciBhYnNvbHV0ZSwgdHJ5IGRlZmF1bHQgb3BlbigpCi0JCXJldHVybiBvcGVuKGZpbGVuYW1lLCAncicpCisJCXRyeToKKwkJCXJldHVybiBvcGVuKGZpbGVuYW1lLCAncicpCisJCWV4Y2VwdCBJT0Vycm9yLCBhcmc6CisJCQlyYWlzZSBJT0Vycm9yLCAoYXJnLCBmaWxlbmFtZSkKIAogCWRlZiBnZXRsaW5lKHNlbGYpOgogCQlpZiBub3Qgc2VsZi5zY2FuZmlsZToK