ZGlmZiAtLWdpdCBhL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvQ29udGVudFdpZGdldC5qYXZhIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9Db250ZW50V2lkZ2V0LmphdmEKaW5kZXggMmIyMDFhMi4uOWUxM2E4MCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9Db250ZW50V2lkZ2V0LmphdmEKKysrIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9Db250ZW50V2lkZ2V0LmphdmEKQEAgLTM1LDYgKzM1LDggQEAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQuY2VsbC5Dd0NlbGxUYWJsZTsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQuY2VsbC5Dd0NlbGxUcmVlOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5zaG93Y2FzZS5jbGllbnQuY29udGVudC5jZWxsLkN3Q2VsbFZhbGlkYXRpb247CitpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LmkxOG4uQ3dCaWRpRm9ybWF0dGluZzsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQuaTE4bi5Dd0JpZGlJbnB1dDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQuaTE4bi5Dd0NvbnN0YW50c0V4YW1wbGU7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LmkxOG4uQ3dDb25zdGFudHNXaXRoTG9va3VwRXhhbXBsZTsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQuaTE4bi5Dd0RhdGVUaW1lRm9ybWF0OwpAQCAtNDUyLDcgKzQ1NCw5IEBACiAgICAgICAgIHJ1bkFzeW5jQ29kZShDd1BsdXJhbEZvcm1zRXhhbXBsZS5jbGFzcyksCiAgICAgICAgIHJ1bkFzeW5jQ29kZShDd0NvbnN0YW50c0V4YW1wbGUuY2xhc3MpLAogICAgICAgICBydW5Bc3luY0NvZGUoQ3dDb25zdGFudHNXaXRoTG9va3VwRXhhbXBsZS5jbGFzcyksCi0gICAgICAgIHJ1bkFzeW5jQ29kZShDd0RpY3Rpb25hcnlFeGFtcGxlLmNsYXNzKSkpOworICAgICAgICBydW5Bc3luY0NvZGUoQ3dEaWN0aW9uYXJ5RXhhbXBsZS5jbGFzcyksCisgICAgICAgIHJ1bkFzeW5jQ29kZShDd0JpZGlGb3JtYXR0aW5nLmNsYXNzKSwKKyAgICAgICAgcnVuQXN5bmNDb2RlKEN3QmlkaUlucHV0LmNsYXNzKSkpOwogICB9CiAKICAgcHJvdGVjdGVkIHZvaWQgcHJlZmV0Y2hMaXN0c0FuZE1lbnVzKCkgewpAQCAtNjE4LDMgKzYyMiw0IEBACiAgICAgfQogICB9CiB9CisKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2UuamF2YSBiL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2UuamF2YQppbmRleCAyM2U4ZDUyLi40NDU0MGU4IDEwMDY0NAotLS0gYS9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L1Nob3djYXNlLmphdmEKKysrIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZS5qYXZhCkBAIC0zOSw2ICszOSw4IEBACiBpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LmNlbGwuQ3dDZWxsVGFibGU7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LmNlbGwuQ3dDZWxsVHJlZTsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQuY2VsbC5Dd0NlbGxWYWxpZGF0aW9uOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5zaG93Y2FzZS5jbGllbnQuY29udGVudC5pMThuLkN3QmlkaUZvcm1hdHRpbmc7CitpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LmkxOG4uQ3dCaWRpSW5wdXQ7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LmkxOG4uQ3dDb25zdGFudHNFeGFtcGxlOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5zaG93Y2FzZS5jbGllbnQuY29udGVudC5pMThuLkN3Q29uc3RhbnRzV2l0aExvb2t1cEV4YW1wbGU7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LmkxOG4uQ3dEYXRlVGltZUZvcm1hdDsKQEAgLTM5Nyw2ICszOTksMTAgQEAKICAgICAgICAgaW1hZ2VzLmNhdEkxOE4oKSk7CiAgICAgc2V0dXBNYWluTWVudU9wdGlvbihjYXRJMThOLCBuZXcgQ3dNZXNzYWdlc0V4YW1wbGUoY29uc3RhbnRzKSwKICAgICAgICAgaW1hZ2VzLmNhdEkxOE4oKSk7CisgICAgc2V0dXBNYWluTWVudU9wdGlvbihjYXRJMThOLCBuZXcgQ3dCaWRpSW5wdXQoY29uc3RhbnRzKSwKKyAgICAgICAgaW1hZ2VzLmNhdEkxOE4oKSk7CisgICAgc2V0dXBNYWluTWVudU9wdGlvbihjYXRJMThOLCBuZXcgQ3dCaWRpRm9ybWF0dGluZyhjb25zdGFudHMpLAorICAgICAgICBpbWFnZXMuY2F0STE4TigpKTsKICAgICBzZXR1cE1haW5NZW51T3B0aW9uKGNhdEkxOE4sIG5ldyBDd1BsdXJhbEZvcm1zRXhhbXBsZShjb25zdGFudHMpLAogICAgICAgICBpbWFnZXMuY2F0STE4TigpKTsKICAgICBzZXR1cE1haW5NZW51T3B0aW9uKGNhdEkxOE4sIG5ldyBDd0NvbnN0YW50c0V4YW1wbGUoY29uc3RhbnRzKSwKQEAgLTU5NywzICs2MDMsNCBAQAogICAgICAgICBnZXRDdXJyZW50UmVmZXJlbmNlU3R5bGVOYW1lKCJBcHBsaWNhdGlvbiIpLCBjYWxsYmFjayk7CiAgIH0KIH0KKwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZUNvbnN0YW50cy5qYXZhIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZUNvbnN0YW50cy5qYXZhCmluZGV4IGJiYTliODQuLjAwNDgwZTcgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHMuamF2YQorKysgYi9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L1Nob3djYXNlQ29uc3RhbnRzLmphdmEKQEAgLTIyLDYgKzIyLDggQEAKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQuY2VsbC5Dd0NlbGxUYWJsZTsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQuY2VsbC5Dd0NlbGxUcmVlOwogaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5zaG93Y2FzZS5jbGllbnQuY29udGVudC5jZWxsLkN3Q2VsbFZhbGlkYXRpb247CitpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LmkxOG4uQ3dCaWRpRm9ybWF0dGluZzsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQuaTE4bi5Dd0JpZGlJbnB1dDsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQuaTE4bi5Dd0NvbnN0YW50c0V4YW1wbGU7CiBpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LmkxOG4uQ3dDb25zdGFudHNXaXRoTG9va3VwRXhhbXBsZTsKIGltcG9ydCBjb20uZ29vZ2xlLmd3dC5zYW1wbGUuc2hvd2Nhc2UuY2xpZW50LmNvbnRlbnQuaTE4bi5Dd0RhdGVUaW1lRm9ybWF0OwpAQCAtNzcsMTQgKzc5LDE1IEBACiAgICAgQ3dGbGV4VGFibGUuQ3dDb25zdGFudHMsIEN3QmFzaWNUZXh0LkN3Q29uc3RhbnRzLCBDd1JpY2hUZXh0LkN3Q29uc3RhbnRzLAogICAgIEN3RmlsZVVwbG9hZC5Dd0NvbnN0YW50cywgQ3dBYnNvbHV0ZVBhbmVsLkN3Q29uc3RhbnRzLAogICAgIEN3SHlwZXJsaW5rLkN3Q29uc3RhbnRzLCBDd0ZyYW1lLkN3Q29uc3RhbnRzLCBDd1N0YWNrUGFuZWwuQ3dDb25zdGFudHMsCi0gICAgQ3dDb29raWVzLkN3Q29uc3RhbnRzLCBDd051bWJlckZvcm1hdC5Dd0NvbnN0YW50cywKLSAgICBDd0RhdGVUaW1lRm9ybWF0LkN3Q29uc3RhbnRzLCBDd01lc3NhZ2VzRXhhbXBsZS5Dd0NvbnN0YW50cywKLSAgICBDd0NvbnN0YW50c0V4YW1wbGUuQ3dDb25zdGFudHMsIEN3Q29uc3RhbnRzV2l0aExvb2t1cEV4YW1wbGUuQ3dDb25zdGFudHMsCi0gICAgQ3dEaWN0aW9uYXJ5RXhhbXBsZS5Dd0NvbnN0YW50cywgQ3dEZWNvcmF0b3JQYW5lbC5Dd0NvbnN0YW50cywKLSAgICBDd0FuaW1hdGlvbi5Dd0NvbnN0YW50cywgQ3dEYXRlUGlja2VyLkN3Q29uc3RhbnRzLAotICAgIEN3UGx1cmFsRm9ybXNFeGFtcGxlLkN3Q29uc3RhbnRzLCBDd0NlbGxMaXN0LkN3Q29uc3RhbnRzLAotICAgIEN3Q2VsbFRhYmxlLkN3Q29uc3RhbnRzLCBDd0NlbGxUcmVlLkN3Q29uc3RhbnRzLCBDd0NlbGxCcm93c2VyLkN3Q29uc3RhbnRzLAotICAgIEN3Q2VsbFZhbGlkYXRpb24uQ3dDb25zdGFudHMsIEN3Q2VsbFNhbXBsZXIuQ3dDb25zdGFudHMgeworICAgIEN3Q29va2llcy5Dd0NvbnN0YW50cywgQ3dOdW1iZXJGb3JtYXQuQ3dDb25zdGFudHMsIEN3QmlkaUlucHV0LkN3Q29uc3RhbnRzLAorICAgIEN3QmlkaUZvcm1hdHRpbmcuQ3dDb25zdGFudHMsIEN3RGF0ZVRpbWVGb3JtYXQuQ3dDb25zdGFudHMsCisgICAgQ3dNZXNzYWdlc0V4YW1wbGUuQ3dDb25zdGFudHMsIEN3Q29uc3RhbnRzRXhhbXBsZS5Dd0NvbnN0YW50cywKKyAgICBDd0NvbnN0YW50c1dpdGhMb29rdXBFeGFtcGxlLkN3Q29uc3RhbnRzLCBDd0RpY3Rpb25hcnlFeGFtcGxlLkN3Q29uc3RhbnRzLAorICAgIEN3RGVjb3JhdG9yUGFuZWwuQ3dDb25zdGFudHMsIEN3QW5pbWF0aW9uLkN3Q29uc3RhbnRzLAorICAgIEN3RGF0ZVBpY2tlci5Dd0NvbnN0YW50cywgQ3dQbHVyYWxGb3Jtc0V4YW1wbGUuQ3dDb25zdGFudHMsCisgICAgQ3dDZWxsTGlzdC5Dd0NvbnN0YW50cywgQ3dDZWxsVGFibGUuQ3dDb25zdGFudHMsIEN3Q2VsbFRyZWUuQ3dDb25zdGFudHMsCisgICAgQ3dDZWxsQnJvd3Nlci5Dd0NvbnN0YW50cywgQ3dDZWxsVmFsaWRhdGlvbi5Dd0NvbnN0YW50cywKKyAgICBDd0NlbGxTYW1wbGVyLkN3Q29uc3RhbnRzIHsKIAogICAvKioKICAgICogVGhlIHBhdGggdG8gc291cmNlIGNvZGUgZm9yIGV4YW1wbGVzLCByYXcgZmlsZXMsIGFuZCBzdHlsZSBkZWZpbml0aW9ucy4KQEAgLTE2NCwzICsxNjcsNCBAQAogICAgKi8KICAgU3RyaW5nIG1haW5UaXRsZSgpOwogfQorCmRpZmYgLS1naXQgYS9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L1Nob3djYXNlQ29uc3RhbnRzLnByb3BlcnRpZXMgYi9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L1Nob3djYXNlQ29uc3RhbnRzLnByb3BlcnRpZXMKaW5kZXggMjNjMWFiNC4uZmE1NjI4ZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZUNvbnN0YW50cy5wcm9wZXJ0aWVzCisrKyBiL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHMucHJvcGVydGllcwpAQCAtMjQsNyArMjQsNyBAQAogY3dBYnNvbHV0ZVBhbmVsTGVmdCA9IDxiPkxlZnQ6PC9iPgogY3dBYnNvbHV0ZVBhbmVsSXRlbXNUb01vdmUgPSA8Yj5JdGVtcyB0byBtb3ZlOjwvYj4KIGN3QWJzb2x1dGVQYW5lbFRvcCA9IDxiPlRvcDo8L2I+Ci1jd0Fic29sdXRlUGFuZWxXaWRnZXROYW1lcyA9IEhlbGxvIFdvcmxkLCBCdXR0b24sIEdyaWQgCitjd0Fic29sdXRlUGFuZWxXaWRnZXROYW1lcyA9IEhlbGxvIFdvcmxkLCBCdXR0b24sIEdyaWQKIGN3QW5pbWF0aW9uTmFtZSA9IEFuaW1hdGlvbnMKIGN3QW5pbWF0aW9uRGVzY3JpcHRpb24gPSBBbmltYXRlIHlvdXIgYXBwbGljYXRpb24gd2l0aCB0aW1lZCBlZmZlY3RzLgogY3dBbmltYXRpb25TdGFydCA9IFN0YXJ0CkBAIC00NywxNSArNDcsMjggQEAKIGN3QmFzaWNUZXh0UGFzc3dvcmRMYWJlbCA9IDxiPlBhc3N3b3JkIHRleHQgYm94OjwvYj4KIGN3QmFzaWNUZXh0UmVhZE9ubHkgPSByZWFkIG9ubHkKIGN3QmFzaWNUZXh0U2VsZWN0ZWQgPSBTZWxlY3RlZAorY3dCaWRpRm9ybWF0dGluZ05hbWUgPSBCaWRpcmVjdGlvbmFsIFRleHQgRm9ybWF0dGluZworY3dCaWRpRm9ybWF0dGluZ0Rlc2NyaXB0aW9uID0gQ2xhc3MgQmlkaUZvcm1hdHRlciBjb250YWlucyBtZXRob2RzIHRvIHByb3RlY3QgYSBzdHJpbmcgKGZvciBleGFtcGxlLCBhIEhlYnJldyB0b3BpYyBuYW1lKSBmcm9tIGJlaW5nIGdhcmJsZWQgYW5kL29yIGdhcmJsaW5nIHdoYXQgZm9sbG93cyBpdCB3aGVuIGRpc3BsYXllZCBpbiB0aGUgb3Bwb3NpdGUtZGlyZWN0aW9uIGNvbnRleHQgKGZvciBleGFtcGxlLCBhbiBFbmdsaXNoIFVJKS4KK2N3QmlkaUZvcm1hdHRpbmdBcmcwTGFiZWwgPSA8Yj5Bcmd1bWVudCB7MH06PC9iPgorY3dCaWRpRm9ybWF0dGluZ0FyZzFMYWJlbCA9IDxiPkFyZ3VtZW50IHsxfTo8L2I+Citjd0JpZGlGb3JtYXR0aW5nQXJnMkxhYmVsID0gPGI+QXJndW1lbnQgezJ9OjwvYj4KK2N3QmlkaUZvcm1hdHRpbmdOb25iaWRpRm9ybWF0dGVkTGFiZWwgPSA8Yj5NZXNzYWdlIGZvcm1hdHRlZCB3aXRob3V0IEJpZGlGb3JtYXR0ZXI6PC9iPgorY3dCaWRpRm9ybWF0dGluZ0JpZGlGb3JtYXR0ZWRMYWJlbCA9IDxiPk1lc3NhZ2UgZm9ybWF0dGVkIHdpdGggQmlkaUZvcm1hdHRlcjo8L2I+Citjd0JpZGlGb3JtYXR0aW5nTGlua1RleHQgPSBUaGlzIGV4YW1wbGUgaW50ZXJhY3RzIHdpdGggdGhlIHNhbXBsZSBpbnRlcmZhY2U6Citjd0JpZGlGb3JtYXR0aW5nVGVtcGxhdGVMYWJlbCA9IDxiPk1lc3NhZ2UgdGVtcGxhdGU6PC9iPgorY3dCaWRpSW5wdXROYW1lID0gQmlkaXJlY3Rpb25hbCBUZXh0IElucHV0Citjd0JpZGlJbnB1dERlc2NyaXB0aW9uID0gVGhlIFRleHRCb3ggYW5kIFRleHRBcmVhIHdpZGdldHMgaW1wbGVtZW50IHRoZSBIYXNEaXJlY3Rpb25Fc3RpbWF0b3IgaW50ZXJmYWNlLiBXaXRoIGEgZGlyZWN0aW9uIGVzdGltYXRvciBkZWZpbmVkLCB0aGVzZSB3aWRnZXRzIGFkanVzdCB0aGVpciBkaXJlY3Rpb24gYXV0b21hdGljYWxseSBhY2NvcmRpbmcgdG8gdGhlIHRleHQgZW50ZXJlZCBzbyBmYXIuIEEgZGlyZWN0aW9uIGVzdGltYXRvciBpcyBkZWZpbmVkIGJ5IGRlZmF1bHQgd2hlbiBhdCBsZWFzdCBvbmUgb2YgdGhlIGFwcGxpY2F0aW9uJ3MgbG9jYWxlcyBpcyByaWdodC10by1sZWZ0LgorY3dCaWRpSW5wdXRCaWRpQXJlYUxhYmVsID0gPGI+VGhlIGZvbGxvd2luZyBUZXh0QXJlYSBoYXMgdGhlIGRlZmF1bHQgZGlyZWN0aW9uIGVzdGltYXRvciBpbiBlZmZlY3QsIGFuZCBpcyB0aHVzIGJpZGktYXdhcmUuIENoZWNrIGl0IGJ5IHJlcGxhY2luZyB0aGUgcmlnaHQtdG8tbGVmdCB0ZXh0IHdpdGggc29tZSBFbmdsaXNoLCBlLmcuIHRoZSBzYW1wbGUgc3RyaW5ncyBhYm92ZTo8L2I+Citjd0JpZGlJbnB1dFJ0bEFyZWFMYWJlbCA9IFdpdGhvdXQgYSBkaXJlY3Rpb24gZXN0aW1hdG9yLCB0aGUgd2lkZ2V0J3MgZGlyZWN0aW9uIGlzIHVuYWZmZWN0ZWQgYnkgdGhlIHZhbHVlIHRoZSB1c2VyIHR5cGVzIGluLiBUaGlzIG1ha2VzIHRoZSBlbnRyeSBvZiBvcHBvc2l0ZS1kaXJlY3Rpb24gdGV4dCBjb25mdXNpbmcgYW5kIGluY29udmVuaWVudC48YnI+PGI+VHJ5IHR5cGluZyAiKDIxMikgNzY1IDQzMjEiIG9yICJIaSwgaG93IGFyZSB5b3U/IiBpbnRvIHRoZSBmb2xsb3dpbmcgcmlnaHQtdG8tbGVmdCBUZXh0QXJlYSAod2hpY2ggaGFkIHRoZSBkaXJlY3Rpb24gZXN0aW1hdG9yIHR1cm5lZCBvZmYpOjwvYj4KIGN3Q2hlY2tCb3hOYW1lID0gQ2hlY2tib3gKIGN3Q2hlY2tCb3hEZXNjcmlwdGlvbiA9IEJhc2ljIENoZWNrYm94IFdpZGdldHMKIGN3Q2hlY2tCb3hDaGVja0FsbCA9IDxiPkNoZWNrIGFsbCBkYXlzIHRoYXQgeW91IGFyZSBhdmFpbGFibGU6PC9iPgogY3dDaGVja0JveERheXMgPSBNb25kYXksIFR1ZXNkYXksIFdlZG5lc2RheSwgVGh1cnNkYXksIEZyaWRheSwgU2F0dXJkYXksIFN1bmRheQogY3dDb25zdGFudHNFeGFtcGxlRGVzY3JpcHRpb24gPSBJbnRlcmZhY2UgQ29uc3RhbnRzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGxvY2FsaXplIHN0cmluZ3MsIG51bWJlcnMsIGFuZCBtYXBzIG9mIHN0cmluZ3Mgb250byBzdHJpbmdzLiBUaGlzIGV4YW1wbGUgaXNuJ3QgdGVycmlibHkgZXhjaXRpbmcsIGJ1dCBpdCBkb2VzIGRlbW9uc3RyYXRlIGhvdyB0byBsb2NhbGl6ZSBjb25zdGFudHMuIFRoZSBsYWJlbHMgYW5kIGNvbG9yIGNob2ljZXMgYmVsb3cgYXJlIHByb3ZpZGVkIGJ5IHRoZSBsb2NhbGl6ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNhbXBsZSBpbnRlcmZhY2UgRXhhbXBsZUNvbnN0YW50cy4KIGN3Q29uc3RhbnRzRXhhbXBsZU5hbWUgPSBDb25zdGFudHMKLWN3Q29uc3RhbnRzRXhhbXBsZUxpbmtUZXh0ID0gVGhpcyBleGFtcGxlIGludGVyYWN0cyB3aXRoIHRoZSBzYW1wbGUgaW50ZXJmYWNlOiAKK2N3Q29uc3RhbnRzRXhhbXBsZUxpbmtUZXh0ID0gVGhpcyBleGFtcGxlIGludGVyYWN0cyB3aXRoIHRoZSBzYW1wbGUgaW50ZXJmYWNlOgogY3dDb25zdGFudHNXaXRoTG9va3VwRXhhbXBsZURlc2NyaXB0aW9uID0gSW50ZXJmYWNlIENvbnN0YW50c1dpdGhMb29rdXAgbWFrZXMgaXQgcG9zc2libGUgdG8gZHluYW1pY2FsbHkgbG9vayB1cCBsb2NhbGl6ZWQgdmFsdWVzIHVzaW5nIG1ldGhvZCBuYW1lcyBhcyBzdHJpbmcga2V5cy4KLWN3Q29uc3RhbnRzV2l0aExvb2t1cEV4YW1wbGVMaW5rVGV4dCA9IFRoaXMgZXhhbXBsZSBpbnRlcmFjdHMgd2l0aCB0aGUgc2FtcGxlIGludGVyZmFjZTogCitjd0NvbnN0YW50c1dpdGhMb29rdXBFeGFtcGxlTGlua1RleHQgPSBUaGlzIGV4YW1wbGUgaW50ZXJhY3RzIHdpdGggdGhlIHNhbXBsZSBpbnRlcmZhY2U6CiBjd0NvbnN0YW50c1dpdGhMb29rdXBFeGFtcGxlTWV0aG9kTmFtZSA9IDxiPk5hbWUgb2YgbWV0aG9kOjwvYj4KIGN3Q29uc3RhbnRzV2l0aExvb2t1cEV4YW1wbGVOYW1lID0gQ29uc3RhbnRzIFdpdGggTG9va3VwCiBjd0NvbnN0YW50c1dpdGhMb29rdXBFeGFtcGxlUmVzdWx0cyA9IDxiPkxvb2t1cCByZXN1bHRzOjwvYj4KQEAgLTE3Myw3ICsxODYsNyBAQAogY3dNZXNzYWdlc0V4YW1wbGVBcmcxTGFiZWwgPSA8Yj5Bcmd1bWVudCB7MX06PC9iPgogY3dNZXNzYWdlc0V4YW1wbGVBcmcyTGFiZWwgPSA8Yj5Bcmd1bWVudCB7Mn06PC9iPgogY3dNZXNzYWdlc0V4YW1wbGVGb3JtYXR0ZWRMYWJlbCA9IDxiPkZvcm1hdHRlZCBtZXNzYWdlOjwvYj4KLWN3TWVzc2FnZXNFeGFtcGxlTGlua1RleHQgPSBUaGlzIGV4YW1wbGUgaW50ZXJhY3RzIHdpdGggdGhlIHNhbXBsZSBpbnRlcmZhY2U6IAorY3dNZXNzYWdlc0V4YW1wbGVMaW5rVGV4dCA9IFRoaXMgZXhhbXBsZSBpbnRlcmFjdHMgd2l0aCB0aGUgc2FtcGxlIGludGVyZmFjZToKIGN3TWVzc2FnZXNFeGFtcGxlVGVtcGxhdGVMYWJlbCA9IDxiPk1lc3NhZ2UgdGVtcGxhdGU6PC9iPgogY3dOdW1iZXJGb3JtYXROYW1lID0gTnVtYmVyIEZvcm1hdAogY3dOdW1iZXJGb3JtYXREZXNjcmlwdGlvbiA9IENsYXNzIE51bWJlckZvcm1hdCBzdXBwb3J0cyBsb2NhbGUtc2Vuc2l0aXZlIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcgb2YgbnVtYmVycyB1c2luZyBhIGZsZXhpYmxlIHBhdHRlcm4tYmFzZWQgc3ludGF4LiBJbiBhZGRpdGlvbiB0byBjdXN0b20gcGF0dGVybnMsIHNldmVyYWwgc3RhbmRhcmQgcGF0dGVybnMgYXJlIGFsc28gYXZhaWxhYmxlIGZvciBjb252ZW5pZW5jZS4KQEAgLTE4Nyw3ICsyMDAsNyBAQAogY3dQbHVyYWxGb3Jtc0V4YW1wbGVEZXNjcmlwdGlvbiA9IFBsdXJhbCBGb3JtcyBwcm92aWRlIGEgd2F5IHRvIGNyZWF0ZSBtZXNzYWdlIHRyYW5zbGF0aW9ucyB0aGF0IGRlcGVuZCBvbiB0aGUgY291bnQgb2Ygc29tZXRoaW5nLgogY3dQbHVyYWxGb3Jtc0V4YW1wbGVBcmcwTGFiZWwgPSA8Yj5Bcmd1bWVudCB7MH06PC9iPgogY3dQbHVyYWxGb3Jtc0V4YW1wbGVGb3JtYXR0ZWRMYWJlbCA9IDxiPkZvcm1hdHRlZCBtZXNzYWdlOjwvYj4KLWN3UGx1cmFsRm9ybXNFeGFtcGxlTGlua1RleHQgPSBUaGlzIGV4YW1wbGUgaW50ZXJhY3RzIHdpdGggdGhlIHNhbXBsZSBpbnRlcmZhY2U6IAorY3dQbHVyYWxGb3Jtc0V4YW1wbGVMaW5rVGV4dCA9IFRoaXMgZXhhbXBsZSBpbnRlcmFjdHMgd2l0aCB0aGUgc2FtcGxlIGludGVyZmFjZToKIGN3UmFkaW9CdXR0b25OYW1lID0gUmFkaW8gQnV0dG9uCiBjd1JhZGlvQnV0dG9uRGVzY3JpcHRpb24gPSBCYXNpYyBSYWRpb0J1dHRvbiBXaWRnZXQKIGN3UmFkaW9CdXR0b25Db2xvcnMgPSBibHVlLCByZWQsIHllbGxvdywgZ3JlZW4KQEAgLTI0MywyMSArMjU2LDIyIEBACiAjIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIG5lZWQgdG8gYmUgdHJhbnNsYXRlZCBpbiBhbGwgbGFuZ3VhZ2VzLgogY2F0ZWdvcnlDZWxscyA9IENlbGwgV2lkZ2V0cwogY3dDZWxsQnJvd3Nlck5hbWUgPSBDZWxsIEJyb3dzZXIKLWN3Q2VsbEJyb3dzZXJEZXNjcmlwdGlvbiA9IEJyb3dzZXIgdGhyb3VnaCBkeW5hbWljIGRhdGEgdXNpbmcgdGhlIENlbGxCcm93c2VyLiAKK2N3Q2VsbEJyb3dzZXJEZXNjcmlwdGlvbiA9IEJyb3dzZXIgdGhyb3VnaCBkeW5hbWljIGRhdGEgdXNpbmcgdGhlIENlbGxCcm93c2VyLgogY3dDZWxsTGlzdE5hbWUgPSBDZWxsIExpc3QKIGN3Q2VsbExpc3REZXNjcmlwdGlvbiA9IFJlbmRlciBhIGxhcmdlLCBjdXN0b20gbGlzdCBxdWlja2x5IHVzaW5nIENlbGxMaXN0LgogY3dDZWxsU2FtcGxlck5hbWUgPSBDZWxsIFNhbXBsZXIKLWN3Q2VsbFNhbXBsZXJEZXNjcmlwdGlvbiA9IFRoZSB0YWJsZSBiZWxvdyBjb250YWlucyBhbiBleGFtcGxlIG9mIG1vc3QgQ2VsbHMgcHJvdmlkZWQgaW4gdGhlIEFQSS4gRWRpdGFibGUgY2VsbHMgcmVtZW1iZXIgY2hhbmdlcyBiZXR3ZWVuIHRhYmxlIHJlZHJhd3MgdW50aWwgdGhlIGNoYW5nZXMgYXJlIGNvbW1pdHRlZC4gIAorY3dDZWxsU2FtcGxlckRlc2NyaXB0aW9uID0gVGhlIHRhYmxlIGJlbG93IGNvbnRhaW5zIGFuIGV4YW1wbGUgb2YgbW9zdCBDZWxscyBwcm92aWRlZCBpbiB0aGUgQVBJLiBFZGl0YWJsZSBjZWxscyByZW1lbWJlciBjaGFuZ2VzIGJldHdlZW4gdGFibGUgcmVkcmF3cyB1bnRpbCB0aGUgY2hhbmdlcyBhcmUgY29tbWl0dGVkLgogY3dDZWxsVGFibGVOYW1lID0gQ2VsbCBUYWJsZQotY3dDZWxsVGFibGVEZXNjcmlwdGlvbiA9IERvIHlvdSB3YW50IHRvIGRpc3BsYXkgbGFyZ2UgYW1vdW50cyBvZiBkYXRhIGluIHlvdXIgYXBwbGljYXRpb24/IFVzZSBDZWxsVGFibGUgdG8gcmVuZGVyIGxhcmdlIHRhYmxlcyBxdWlja2x5LiAKK2N3Q2VsbFRhYmxlRGVzY3JpcHRpb24gPSBEbyB5b3Ugd2FudCB0byBkaXNwbGF5IGxhcmdlIGFtb3VudHMgb2YgZGF0YSBpbiB5b3VyIGFwcGxpY2F0aW9uPyBVc2UgQ2VsbFRhYmxlIHRvIHJlbmRlciBsYXJnZSB0YWJsZXMgcXVpY2tseS4KIGN3Q2VsbFRhYmxlQ29sdW1uQWRkcmVzcyA9IEFkZHJlc3MKIGN3Q2VsbFRhYmxlQ29sdW1uQ2F0ZWdvcnkgPSBDYXRlZ29yeQogY3dDZWxsVGFibGVDb2x1bW5GaXJzdE5hbWUgPSBGaXJzdCBOYW1lCiBjd0NlbGxUYWJsZUNvbHVtbkxhc3ROYW1lID0gTGFzdCBOYW1lCiBjd0NlbGxUcmVlTmFtZSA9IENlbGwgVHJlZQotY3dDZWxsVHJlZURlc2NyaXB0aW9uID0gUmVuZGVyIGxhcmdlIHRyZWVzIGR5bmFtaWNhbGx5IHVzaW5nIENlbGxUcmVlLiAgCitjd0NlbGxUcmVlRGVzY3JpcHRpb24gPSBSZW5kZXIgbGFyZ2UgdHJlZXMgZHluYW1pY2FsbHkgdXNpbmcgQ2VsbFRyZWUuCiBjd0NlbGxWYWxpZGF0aW9uTmFtZSA9IENlbGwgVmFsaWRhdGlvbgotY3dDZWxsVmFsaWRhdGlvbkRlc2NyaXB0aW9uID0gVmFsaWRhdGUgdXNlciBkYXRhIGFzIHRoZXkgZW50ZXIgaXQgdXNpbmcgY2VsbCB2YWxpZGF0aW9uIHRlY2huaXF1ZXMuIENlbGxzIHdpbGwgbWFpbnRhaW4gdGhlaXIgZWRpdGVkIHN0YXRlIHVudGlsIHlvdSBjb25maXJtIHRoZSBjaGFuZ2UuIFRoZSBmaWVsZHMgYmVsb3cgdHVybiBibHVlIHdoaWxlIHRoZSBhZGRyZXNzIGlzIHZhbGlkYXRlZCwgdGhlbiB0dXJuIHJlZCBpZiB0aGUgYWRkcmVzcyBpcyBpbnZhbGlkLiAgIAorY3dDZWxsVmFsaWRhdGlvbkRlc2NyaXB0aW9uID0gVmFsaWRhdGUgdXNlciBkYXRhIGFzIHRoZXkgZW50ZXIgaXQgdXNpbmcgY2VsbCB2YWxpZGF0aW9uIHRlY2huaXF1ZXMuIENlbGxzIHdpbGwgbWFpbnRhaW4gdGhlaXIgZWRpdGVkIHN0YXRlIHVudGlsIHlvdSBjb25maXJtIHRoZSBjaGFuZ2UuIFRoZSBmaWVsZHMgYmVsb3cgdHVybiBibHVlIHdoaWxlIHRoZSBhZGRyZXNzIGlzIHZhbGlkYXRlZCwgdGhlbiB0dXJuIHJlZCBpZiB0aGUgYWRkcmVzcyBpcyBpbnZhbGlkLgogY3dDZWxsVmFsaWRhdGlvbkNvbHVtbkFkZHJlc3MgPSBBZGRyZXNzCiBjd0NlbGxWYWxpZGF0aW9uQ29sdW1uTmFtZSA9IE5hbWUKIGN3Q2VsbFZhbGlkYXRpb25FcnJvciA9IEVSUk9SOiBBZGRyZXNzIG11c3QgYmUgb2YgdGhlIGZvcm06ICMjIyAmbHQ7c3RyZWV0IG5hbWUmZ3Q7CisKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHNfYXIucHJvcGVydGllcyBiL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHNfYXIucHJvcGVydGllcwppbmRleCAwM2ZjYmQ0Li4yZWU1NGMxIDEwMDY0NAotLS0gYS9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L1Nob3djYXNlQ29uc3RhbnRzX2FyLnByb3BlcnRpZXMKKysrIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZUNvbnN0YW50c19hci5wcm9wZXJ0aWVzCkBAIC0xMjEsNyArMTIxLDcgQEAKIGN3RG9ja1BhbmVsU291dGgyID0g2YfYsNinINmH2Ygg2KfZhNi52YbYtdixINin2YTYrNmG2YjYqNmKINin2YTYq9in2YbZigogY3dEb2NrUGFuZWxXZXN0ID0g2YfYsNinINmH2Ygg2KfZhNi52YbYtdixINin2YTYutix2KjZigogY3dGaWxlVXBsb2FkTmFtZSA9INiq2LXYudmK2K8g2YXZhNmBCi1jd0ZpbGVVcGxvYWREZXNjcmlwdGlvbiA9INiq2LXYudmK2K8g2KfZhNmF2YTZgSDYqNi02YPZhCDYutmK2LEg2YXYqtiy2KfZhdmGINio2KfYs9iq2K7Yr9in2YUg2KfZhdmD2KfZhtmK2Kkg2KfYrNin2YPYsyDZhNiq2LXYudmK2K8g2KfZhNmF2YTZgdin2KogCitjd0ZpbGVVcGxvYWREZXNjcmlwdGlvbiA9INiq2LXYudmK2K8g2KfZhNmF2YTZgSDYqNi02YPZhCDYutmK2LEg2YXYqtiy2KfZhdmGINio2KfYs9iq2K7Yr9in2YUg2KfZhdmD2KfZhtmK2Kkg2KfYrNin2YPYsyDZhNiq2LXYudmK2K8g2KfZhNmF2YTZgdin2KoKIGN3RmlsZVVwbG9hZE5vRmlsZUVycm9yID0g2YrYrNioINi52YTZitmDINin2K7YqtmK2KfYsSDZhdmE2YEg2YTZhNiq2LXYudmK2K8KIGN3RmlsZVVwbG9hZFNlbGVjdEZpbGUgPSA8Yj7ZgtmFINio2KfYrtiq2YrYp9ixINmF2YTZgTo8L2I+CiBjd0ZpbGVVcGxvYWRTdWNjZXNzZnVsID0g2KrZhSDYqti12LnZitivINin2YTZhdmE2YEhCkBAIC0xNjgsNyArMTY4LDcgQEAKIGN3TWVudUJhckhlbHBPcHRpb25zID0g2KfZhNmF2K3YqtmI2YrYp9iqICwg2YPYudmD2Ycg2KfZhNit2LggLCDYudmGIGd3dAogY3dNZW51QmFyUHJvbXB0cyA9INi02YPYsdinINmE2KfYrtiq2YrYp9ix2YMg2LnZhti12LEg2YXZhiDYp9mE2YLYp9im2YXYqS4g2KfYrtiq2YrYp9ixINis2YrYryDZgdi52YTYpy4g2KfZhNinINmK2YjYrNivINi02YrYoSDYp9mB2LbZhCDYqtmC2YjZhSDYqNmHINio2K/ZhNinINmF2YYg2KfYrtiq2YrYp9ix2YMg2LnZhti12LHYpyDZhdmGINin2YTZgtin2KbZhdip2J8KIGN3TWVzc2FnZXNFeGFtcGxlTmFtZSA9INix2LPYp9im2YQKLWN3TWVzc2FnZXNFeGFtcGxlRGVzY3JpcHRpb24gPSDYp9mGINmI2KfYrNmH2Kkg2KfZhNix2LPYp9im2YQg2KrZhdmD2YYg2YXZhiDYqtmI2YTZitivINix2LPYp9im2YQg2KjZhdiq2LrZitix2KfYqiDZhdit2K/Yr9ipINin2YTYp9mG2YjYp9i5INmI2KfZhNiq2Yog2YrZhdmD2YYg2KfZhNiq2K3ZgtmCINmF2YYg2LXYrdiq2YfYpyDYrtmE2KfZhCDYp9mE2KrYrNmF2YrYuSAKK2N3TWVzc2FnZXNFeGFtcGxlRGVzY3JpcHRpb24gPSDYp9mGINmI2KfYrNmH2Kkg2KfZhNix2LPYp9im2YQg2KrZhdmD2YYg2YXZhiDYqtmI2YTZitivINix2LPYp9im2YQg2KjZhdiq2LrZitix2KfYqiDZhdit2K/Yr9ipINin2YTYp9mG2YjYp9i5INmI2KfZhNiq2Yog2YrZhdmD2YYg2KfZhNiq2K3ZgtmCINmF2YYg2LXYrdiq2YfYpyDYrtmE2KfZhCDYp9mE2KrYrNmF2YrYuQogY3dNZXNzYWdlc0V4YW1wbGVBcmcwTGFiZWwgPSA8Yj7Zhdiq2LrZitixIHswfTo8L2I+CiBjd01lc3NhZ2VzRXhhbXBsZUFyZzFMYWJlbCA9IDxiPtmF2KrYutmK2LEgezF9OjwvYj4KIGN3TWVzc2FnZXNFeGFtcGxlQXJnMkxhYmVsID0gPGI+2YXYqti62YrYsSB7Mn06PC9iPgpAQCAtMjYyLDMgKzI2MiwxNyBAQAogY3dDZWxsVmFsaWRhdGlvbkNvbHVtbk5hbWUgPSDYp9izCiBjd0NlbGxWYWxpZGF0aW9uRXJyb3IgPSDZitis2Kgg2KPZhiDYrti32KMgOiDYp9mE2LnZhtmI2KfZhiDZitmD2YjZhiDZhdmGINin2YTZhtmF2YjYsNisIDogIyMjICZsdDvYp9iz2YUg2KfZhNi02KfYsSZndDsKIAorIyBUaGUgZm9sbG93aW5nIHBocmFzZXMgbmVlZCBvZmZpY2lhbCB0cmFuc2xhdGlvbnMuCitjd0JpZGlGb3JtYXR0aW5nTmFtZSA9INiq2YbYs9mK2YIg2KfZhNmG2LXZiNi1INir2YbYp9im2YrYqSDYp9mE2KfYqtis2KcKK2N3QmlkaUZvcm1hdHRpbmdEZXNjcmlwdGlvbiA9INmB2KbYqSBCaWRpRm9ybWF0dGVyINmK2K3YqtmI2Yog2LnZhNmJINi32LHZgiDZhNit2YXYp9mK2Kkg2LPZhNiz2YTYqSAo2LnZhNmJINiz2KjZitmEINin2YTZhdir2KfZhCDYjCDYp9iz2YUg2KfZhNmF2YjYttmI2Lkg2KjYp9mE2YTYutipINin2YTYp9mG2KzZhNmK2LLZitipKSDZitiq2YUg2YXYtNmI2Ycg2YggLyDYo9mIINin2YTYutix2KjZhNipINmF2Kcg2KjYudiv2YfYpyDYjCDYudmG2K/ZhdinINi52LHYtiDZgdmKINiz2YrYp9mCINin2YTYp9iq2KzYp9mHINin2YTZhdi52KfZg9izINiMICjYudmE2YnYs9io2YrZhCDYp9mE2YXYq9in2YQg2Iwg2KfZhNmE2LrYqSDYp9mE2LnYsdio2YrYqSDZiNin2KzZh9ipINin2YTZhdiz2KrYrtiv2YUpCitjd0JpZGlGb3JtYXR0aW5nQXJnMExhYmVsID0gPGI+2YXYqti62YrYsSB7MH06PC9iPgorY3dCaWRpRm9ybWF0dGluZ0FyZzFMYWJlbCA9IDxiPtmF2KrYutmK2LEgezF9OjwvYj4KK2N3QmlkaUZvcm1hdHRpbmdBcmcyTGFiZWwgPSA8Yj7Zhdiq2LrZitixIHsyfTo8L2I+Citjd0JpZGlGb3JtYXR0aW5nTm9uYmlkaUZvcm1hdHRlZExhYmVsID0gPGI+2KrZhtiz2YrZgiDYp9mE2LHYs9in2YTYqSDYr9mI2YYgQmlkaUZvcm1hdHRlciA6PC9iPgorY3dCaWRpRm9ybWF0dGluZ0JpZGlGb3JtYXR0ZWRMYWJlbCA9IDxiPtix2LPYp9mE2Kkg2YXZhtiz2YLYqSDZhdi5IEJpZGlGb3JtYXR0ZXIgOjwvYj4KK2N3QmlkaUZvcm1hdHRpbmdMaW5rVGV4dCA9INmH2LDYpyDYp9mE2YXYq9in2YQg2YrYqtmB2KfYudmEINmF2Lkg2YjYp9is2YfYqSDYp9mE2LnZitmG2KkgOgorY3dCaWRpRm9ybWF0dGluZ1RlbXBsYXRlTGFiZWwgPSA8Yj7Ysdiz2KfZhNipINmC2KfZhNioIDo8L2I+Citjd0JpZGlJbnB1dE5hbWUgPSDYpdiv2K7Yp9mEINin2YTZhti1INir2YbYp9im2Yog2KfZhNin2KrYrNinCitjd0JpZGlJbnB1dERlc2NyaXB0aW9uID0g2LXZhtiv2YjZgiDYp9mE2YbYtSDZiNin2YTYrdin2KzZitin2Kog2YbYp9it2YrYqSDYp9mE2YbYtSDYqti32KjZitmCINin2YTZiNin2KzZh9ipIEhhc0RpcmVjdGlvbkVzdGltYXRvci4g2YXYuSDZhdmC2K/YsSDYp9iq2KzYp9mHINmF2K3Yr9ivINiMINmH2LDZhyDYp9mE2K3Yp9is2YrYp9iqINi22KjYtyDYp9iq2KzYp9mH2YfYpyDYqtmE2YLYp9im2YrYpyDZiNmB2YLYpyDZhNmE2YbYtSDYr9iu2YTYqiDYrdiq2Ykg2KfZhNii2YYuINmK2KrZhSDYqti52LHZitmBINmF2YLYr9ixINin2YTYp9iq2KzYp9mHINio2LTZg9mE2KfZgdiq2LHYp9i22Yog2LnZhtivINmI2KfYrdivINi52YTZiSDYp9mE2KPZgtmEINmF2YYg2YTYutin2Kog2YTZhNiq2LfYqNmK2YIg2YXZhiDYp9mE2YrZhdmK2YYg2KXZhNmJINin2YTZitiz2KfYsQorY3dCaWRpSW5wdXRCaWRpQXJlYUxhYmVsID0gPGI+2YjZgdmK2YXYpyDZitmE2Yog2YbYp9it2YrYqSDYp9mE2YbYtSDZhNiv2YrZhyDZhdmC2K/YsSDYp9mE2KfYqtis2KfZhyDZgdmKINin2YTZiNin2YLYuSDYp9mE2KfZgdiq2LHYp9i22Yog2Iwg2YjYqNin2YTYqtin2YTZiiDYqNmK2K/ZiSDYudmE2Ykg2LnZhNmFINio2YfYpy4g2KfZhNiq2K3ZgtmCINmF2YYg2LDZhNmDINi52YYg2LfYsdmK2YIg2KfYs9iq2KjYr9in2YQg2KfZhNmG2LUg2YXZhiDYp9mE2YrZhdmK2YYg2KXZhNmJINin2YTZitiz2KfYsSDZhdi5INio2LnYtiDYp9mE2KXZhtis2YTZitiy2YrYqSDYjCDYudmE2Ykg2LPYqNmK2YTYp9mE2YXYq9in2YQg2KfZhNiz2YTYp9iz2YQg2LnZitmG2Kkg2KPYudmE2KfZhzwvYj4KK2N3QmlkaUlucHV0UnRsQXJlYUxhYmVsID0g2KjYr9mI2YYg2YXZgtiv2LEg2KfZhNin2KrYrNin2Ycg2Iwg2KfYqtis2KfZhyDYp9mE2YLYt9i52Kkg2YfZiiDYp9mE2KrZiiDZhNmFINiq2KrYo9ir2LEg2YLZitmF2Kkg2KPZhtmI2KfYuSDYp9mE2YXYs9iq2K7Yr9mFINmB2YrZh9inINmI2YfYsNinINmK2KzYudmEINiv2K7ZiNmEINin2YTZhti1INi52YPYsyDYp9mE2KfYqtis2KfZhyDYjCDZhdix2KjZg9ipINmI2LrZitixINmF2LHZititPGJyPjxiPtit2KfZiNmEINmD2KrYp9io2KkgPHNwYW4gZGlyPWx0cj4iKDIxMikgNzY1IDQzMjEiPC9zcGFuPiDYo9mIIDxzcGFuIGRpcj1sdHI+IkhpLCBob3cgYXJlIHlvdT8iPC9zcGFuPiDZgdmKINmG2KfYrdmK2Kkg2KfZhNmG2LUg2KfZhNiq2KfZhNmKINmF2YYg2KfZhNmK2YXZitmGINil2YTZiSDYp9mE2YrYs9in2LEgKNin2YTYsNmKINmD2KfZhiDZhdmC2K/YsSDYp9iq2KzYp9mHINil2YrZgtin2YEpPC9iPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZUNvbnN0YW50c19mci5wcm9wZXJ0aWVzIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZUNvbnN0YW50c19mci5wcm9wZXJ0aWVzCmluZGV4IDE2YzBiZTkuLmEwYzg1MDQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHNfZnIucHJvcGVydGllcworKysgYi9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L1Nob3djYXNlQ29uc3RhbnRzX2ZyLnByb3BlcnRpZXMKQEAgLTI2MiwzICsyNjIsMTcgQEAKIGN3Q2VsbFZhbGlkYXRpb25Db2x1bW5OYW1lID0gTm9tCiBjd0NlbGxWYWxpZGF0aW9uRXJyb3IgPSBFcnJldXI6IGwnYWRyZXNzZSBkb2l0IMOqdHJlIGRlIGxhIGZvcm1lOiAjIyMgJmx0O25vbSBkZSBsYSBydWUmZ3Q7CiAKKyMgVGhlIGZvbGxvd2luZyBwaHJhc2VzIG5lZWQgb2ZmaWNpYWwgdHJhbnNsYXRpb25zLgorY3dCaWRpRm9ybWF0dGluZ05hbWUgPSBGb3JtYXRhZ2UgZHUgdGV4dGUgYmlkaXJlY3Rpb25uZWwKK2N3QmlkaUZvcm1hdHRpbmdEZXNjcmlwdGlvbiA9IENsYXNzZSBCaWRpRm9ybWF0dGVyIGNvbnRpZW50IGRlcyBt6XRob2RlcyBwb3VyIHByb3TpZ2VyIHVuZSBjaGHubmUgKHBhciBleGVtcGxlLCB1biBub20gZGUgc3VqZXQgZW4gaOlicmV1KSBkJ+p0cmUgZOlmb3Jt6SBldCAvIG91IGdhcmJsaW5nIGNlIHF1aSBzdWl0IGMnZXN0IGxvcnNxdSdlbGxlIGVzdCBhZmZpY2jpZSBkYW5zIGxlIGNhZHJlIGRlIGRpcmVjdGlvbiBvcHBvc+llIChwYXIgZXhlbXBsZSwgdW5lIGludGVyZmFjZSBlbiBhbmdsYWlzKS4KK2N3QmlkaUZvcm1hdHRpbmdBcmcwTGFiZWwgPSA8Yj5Bcmd1bWVudCB7MH06PC9iPgorY3dCaWRpRm9ybWF0dGluZ0FyZzFMYWJlbCA9IDxiPkFyZ3VtZW50IHsxfTo8L2I+Citjd0JpZGlGb3JtYXR0aW5nQXJnMkxhYmVsID0gPGI+QXJndW1lbnQgezJ9OjwvYj4KK2N3QmlkaUZvcm1hdHRpbmdOb25iaWRpRm9ybWF0dGVkTGFiZWwgPSA8Yj5NZXNzYWdlIG1pcyBlbiBmb3JtZSBzYW5zIEJpZGlGb3JtYXR0ZXI6PC9iPgorY3dCaWRpRm9ybWF0dGluZ0JpZGlGb3JtYXR0ZWRMYWJlbCA9IDxiPk1lc3NhZ2UgbWlzIGVuIGZvcm1lIGF2ZWMgQmlkaUZvcm1hdHRlcjo8L2I+Citjd0JpZGlGb3JtYXR0aW5nTGlua1RleHQgPSBDZXQgZXhlbXBsZSBpbnRlcmFnaXQgYXZlYyBsJ2ludGVyZmFjZSDpY2hhbnRpbGxvbjoKK2N3QmlkaUZvcm1hdHRpbmdUZW1wbGF0ZUxhYmVsID0gPGI+TW9k6GxlIGRlIG1lc3NhZ2U6PC9iPgorY3dCaWRpSW5wdXROYW1lID0gU2Fpc2llIGRlIHRleHRlIGJpZGlyZWN0aW9ubmVsCitjd0JpZGlJbnB1dERlc2NyaXB0aW9uID0gTGEgem9uZSBkZSB0ZXh0ZSBldCBkZXMgd2lkZ2V0cyB0ZXh0ZSBpbXBs6W1lbnRlciBsJ2ludGVyZmFjZSBIYXNEaXJlY3Rpb25Fc3RpbWF0b3IuIEF2ZWMgdW4gZXN0aW1hdGV1ciBkZSBkaXJlY3Rpb24gZOlmaW5pZSwgY2VzIHdpZGdldHMgYWp1c3RlciBsZXVyIGRpcmVjdGlvbiBhdXRvbWF0aXF1ZW1lbnQgZW4gZm9uY3Rpb24gZHUgdGV4dGUgc2Fpc2kg4CBjZSBqb3VyLiBVbiBlc3RpbWF0ZXVyIGRlIGRpcmVjdGlvbiBlc3QgZOlmaW5pZSBwYXIgZOlmYXV0IGxvcnNxdWUgYXUgbW9pbnMgbCd1biBkZXMgbGlldXggZGUgbCdhcHBsaWNhdGlvbiBlc3QgZGUgZHJvaXRlIOAgZ2F1Y2hlLgorY3dCaWRpSW5wdXRCaWRpQXJlYUxhYmVsID0gPGI+TGUgdGV4dGUgc3VpdmFudCBhIFRleHRBcmVhIGwnZXN0aW1hdGV1ciBkaXJlY3Rpb24gcGFyIGTpZmF1dCBlbiB2aWd1ZXVyLCBldCBlc3QgZG9uYyBiaWRpLUF3YXJlLiBW6XJpZmllei1lbiByZW1wbGHnYW50IGxlIHRleHRlIGRlIGRyb2l0ZSDgIGdhdWNoZSBhdmVjIHVuIHBldSBkJ2FuZ2xhaXMsIHBhciBleGVtcGxlLCBsZXMgY29yZGVzIGV4ZW1wbGUgY2ktZGVzc3VzOjwvYj4KK2N3QmlkaUlucHV0UnRsQXJlYUxhYmVsID0gU2FucyB1biBlc3RpbWF0ZXVyIGRlIGxhIGRpcmVjdGlvbiwgbGEgZGlyZWN0aW9uIGR1IHdpZGdldCBuJ2VzdCBwYXMgYWZmZWN06WUgcGFyIGxhIHZhbGV1ciBxdWUgbCd1dGlsaXNhdGV1ciB0YXBlIHBvIGNlIHF1aSByZW5kIGwnZW50cullIGRlIHRleHRlIGVuIGRpcmVjdGlvbiBvcHBvc+llIOAgY29uZnVzaW9uIGV0IGluY29tbW9kZS4gPGJyPiA8Yj4gRXNzYXlleiBkZSB0YXBlciAiKDIxMikgNzY1IDQzMjEiIG91ICJTYWx1dCwgY29tbWVudCDqdGVzLXZvdXM/ICIgZGFucyBsZSB0ZXh0ZSBzdWl2YW50IFRleHRBcmVhIGRlIGRyb2l0ZSDgIGdhdWNoZSAocXVpIGF2YWl0IGwnZXN0aW1hdGV1ciBkaXJlY3Rpb24g6XRlaW50KTogPC9iPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZUNvbnN0YW50c196aC5wcm9wZXJ0aWVzIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9TaG93Y2FzZUNvbnN0YW50c196aC5wcm9wZXJ0aWVzCmluZGV4IGYwZjI4ZmMuLjhmM2MyMTMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvU2hvd2Nhc2VDb25zdGFudHNfemgucHJvcGVydGllcworKysgYi9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L1Nob3djYXNlQ29uc3RhbnRzX3poLnByb3BlcnRpZXMKQEAgLTI2MiwzICsyNjIsMTcgQEAKIGN3Q2VsbFZhbGlkYXRpb25Db2x1bW5OYW1lID3lkI3np7AKIGN3Q2VsbFZhbGlkYXRpb25FcnJvciA96ZSZ6K+v77ya5Zyw5Z2A5b+F6aG75piv5b2i5byP77yaIyMjICZsdDvooZfpgZPlkI3np7AmZ3Q7CiAKKyMgVGhlIGZvbGxvd2luZyBwaHJhc2VzIG5lZWQgb2ZmaWNpYWwgdHJhbnNsYXRpb25zLgorY3dCaWRpRm9ybWF0dGluZ05hbWUgPSDlj4zlkJHmlofmnKzmoLzlvI8KK2N3QmlkaUZvcm1hdHRpbmdEZXNjcmlwdGlvbiA9IOexu0JpZGlGb3JtYXR0ZXLljIXlkKvnmoTmlrnms5XmnaXkv53miqTkuIDkuKrlrZfnrKbkuLLvvIjlr7nkuo7kvovlpoLvvIzluIzkvK/mnaV0b3BpYyBuYW1l77yJ5LuO5q2j5Zyo5Ye6546w5Lmx56CB5ZKML+aIlmdhcmJsaW5nIHdoYXTlpoLkuIvmmL7npLrlroN3aGVuIGlu55u45Y+NLSBkaXJlY3Rpb27kuIrkuIvmlofvvIjkvovlpoLvvIzkuIDoi7HmlodVSe+8ieOAggorY3dCaWRpRm9ybWF0dGluZ0FyZzBMYWJlbCA9IDxiPuiuuuaNriB7MH06PC9iPgorY3dCaWRpRm9ybWF0dGluZ0FyZzFMYWJlbCA9IDxiPuiuuuaNriB7MX06PC9iPgorY3dCaWRpRm9ybWF0dGluZ0FyZzJMYWJlbCA9IDxiPuiuuuaNriB7Mn06PC9iPgorY3dCaWRpRm9ybWF0dGluZ05vbmJpZGlGb3JtYXR0ZWRMYWJlbCA9IDxiPua2iOaBr+agvOW8j+S4jUJpZGlGb3JtYXR0ZXLvvJo8L2I+Citjd0JpZGlGb3JtYXR0aW5nQmlkaUZvcm1hdHRlZExhYmVsID0gPGI+5raI5oGv5qC85byP5LiOQmlkaUZvcm1hdHRlcu+8mjwvYj4KK2N3QmlkaUZvcm1hdHRpbmdMaW5rVGV4dCA9IOi/meS4quS+i+WtkOS4juagt+WTgeS6pOS6kueVjOmdou+8mgorY3dCaWRpRm9ybWF0dGluZ1RlbXBsYXRlTGFiZWwgPSA8Yj7mtojmga/mqKHmnb/vvJo8L2I+Citjd0JpZGlJbnB1dE5hbWUgPSDlj4zlkJHmloflrZfovpPlhaUKK2N3QmlkaUlucHV0RGVzY3JpcHRpb24gPSDmlofmnKzmoYblkoxUZXh0QXJlYeaOp+S7tuWunueOsEhhc0RpcmVjdGlvbkVzdGltYXRvcuaOpeWPo+OAguacieS6huaYjuehrueahOaWueWQkeS8sOiuoe+8jOi/meS6m+Wwj+mDqOS7tuiHquWKqOiwg+aVtOiHquW3seeahOaWueWQke+8jOagueaNrui+k+WFpeeahOaWh+Wtl+iHs+S7iuOAguS8sOiuoeaYr+aMh+S4gOS4quaWueWQkeaXtu+8jOm7mOiupOaDheWGteS4i++8jOiHs+WwkeWcqOW6lOeUqOeoi+W6j+eahOWMuuWfn+iuvue9ruS5i+S4gOaYr+S7juWPs+WIsOW3puOAggorY3dCaWRpSW5wdXRCaWRpQXJlYUxhYmVsID0gPGI+5LiL6Z2i55qE5paH5pys5Yy65YW35pyJ5pyJ5pWI55qE6buY6K6k5pa55ZCR5Lyw6K6h77yM5Zug6ICM5piv5q+U6L+q54Of5oSf55+l44CC5qOA5p+l5Y+W5Luj5LiA5Lqb6Iux5paH5L6L5aaC77yM5LuO5Y+z5Yiw5bem55qE5paH5pys5Lit5LiK6Z2i55qE56S65L6L5a2X56ym5Liy77yaPC9iPgorY3dCaWRpSW5wdXRSdGxBcmVhTGFiZWwgPSDlpoLmnpzmsqHmnInkuIDkuKrmlrnlkJHkvLDorqHvvIzor6VXaWRnZXTnmoTmlrnlkJHmmK/nlLHlgLzkuI3lj5flvbHlk43vvIzlj6rmnInov5nkvb/lvpfnm7jlj43mlrnlkJHnmoTmlofmnKzovpPlhaXmt7fkubHlkozkuI3kvr/nmoTnlKjmiLfnsbvlnovjgII8YnI+PGI+5bCd6K+V6ZSu5YWl4oCc77yIMjEy77yJNzY1NDMyMeKAneaIluKAnOWXqO+8jOS9oOWlveWQl++8n+KAnOWIsOS4i+mdouS7juWPs+WIsOW3pueahOaWh+acrOWMuu+8iOWFtuS4reacieaWueWQkeS8sOiuoeWFs+mXre+8ie+8mjwvYj4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvY29udGVudC9pMThuL0Jsb2dNZXNzYWdlcy5qYXZhIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9jb250ZW50L2kxOG4vQmxvZ01lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY1NzE4ZAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvY29udGVudC9pMThuL0Jsb2dNZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LmkxOG47CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudC5NZXNzYWdlczsKKworLyoqCisgKiBJbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcy4KKyAqLworcHVibGljIGludGVyZmFjZSBCbG9nTWVzc2FnZXMgZXh0ZW5kcyBNZXNzYWdlcyB7CisgIFN0cmluZyB1c2VyQ29tbWVudChTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBudW1iZXJPZlBvc3RzLAorICAgICAgU3RyaW5nIGNvbW1lbnRlZFBvc3ROYW1lKTsKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvY29udGVudC9pMThuL0Jsb2dNZXNzYWdlcy5wcm9wZXJ0aWVzIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9jb250ZW50L2kxOG4vQmxvZ01lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjZjAxNgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvY29udGVudC9pMThuL0Jsb2dNZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTcgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMTAgR29vZ2xlIEluYy4KKyMgCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorIyB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorIyB0aGUgTGljZW5zZSBhdAorIworIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisjIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorIyBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorIyB0aGUgTGljZW5zZS4KKyMKKwordXNlckNvbW1lbnQgPSBVc2VyIHswfSAoezF9IHBvc3RzKSBhZGRlZCBhIGNvbW1lbnQgb24gJyd7Mn0nJwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9jb250ZW50L2kxOG4vQmxvZ01lc3NhZ2VzX2FyLnByb3BlcnRpZXMgYi9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L2NvbnRlbnQvaTE4bi9CbG9nTWVzc2FnZXNfYXIucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODQ5MDNlCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9jb250ZW50L2kxOG4vQmxvZ01lc3NhZ2VzX2FyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOCBAQAorIworIyBDb3B5cmlnaHQgMjAxMCBHb29nbGUgSW5jLgorIyAKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisjIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisjIHRoZSBMaWNlbnNlIGF0CisjCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyMgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisjIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisjIHRoZSBMaWNlbnNlLgorIworCisjIFRoZSBmb2xsb3dpbmcgcGhyYXNlcyBuZWVkIG9mZmljaWFsIHRyYW5zbGF0aW9ucy4KK3VzZXJDb21tZW50ID0g2YjYo9i22KfZgSDYp9mE2YXYs9iq2K7YryB7MH0gKHsxfSDZiNi42YrZgdipKSDZiNiq2LnZhNmK2YLYpyDYudmE2YkgJyd7Mn0nJwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9jb250ZW50L2kxOG4vQmxvZ01lc3NhZ2VzX2ZyLnByb3BlcnRpZXMgYi9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L2NvbnRlbnQvaTE4bi9CbG9nTWVzc2FnZXNfZnIucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YThlNjQzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9jb250ZW50L2kxOG4vQmxvZ01lc3NhZ2VzX2ZyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOCBAQAorIworIyBDb3B5cmlnaHQgMjAxMCBHb29nbGUgSW5jLgorIyAKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisjIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisjIHRoZSBMaWNlbnNlIGF0CisjCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyMgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisjIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisjIHRoZSBMaWNlbnNlLgorIworCisjIFRoZSBmb2xsb3dpbmcgcGhyYXNlcyBuZWVkIG9mZmljaWFsIHRyYW5zbGF0aW9ucy4KK3VzZXJDb21tZW50ID0gVXRpbGlzYXRldXIgezB9ICh7MX0gIHBvc3RlcykgYSBham91dMOpIHVuIGNvbW1lbnRhaXJlIHN1ciAnJ3syfScnCmRpZmYgLS1naXQgYS9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L2NvbnRlbnQvaTE4bi9CbG9nTWVzc2FnZXNfemgucHJvcGVydGllcyBiL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvY29udGVudC9pMThuL0Jsb2dNZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYzI0NGIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L2NvbnRlbnQvaTE4bi9CbG9nTWVzc2FnZXNfemgucHJvcGVydGllcwpAQCAtMCwwICsxLDE4IEBACisjCisjIENvcHlyaWdodCAyMDEwIEdvb2dsZSBJbmMuCisjIAorIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyMgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyMgdGhlIExpY2Vuc2UgYXQKKyMKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorIyBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyMgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyMgdGhlIExpY2Vuc2UuCisjCisKKyMgVGhlIGZvbGxvd2luZyBwaHJhc2VzIG5lZWQgb2ZmaWNpYWwgdHJhbnNsYXRpb25zLgordXNlckNvbW1lbnQgPSDnlKjmiLcgezB9ICh7MX0g5LiqKSDlop7liqDkuobor4TorrogJyd7Mn0nJwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9jb250ZW50L2kxOG4vQ3dCaWRpRm9ybWF0dGluZy5qYXZhIGIvc2FtcGxlcy9zaG93Y2FzZS9zcmMvY29tL2dvb2dsZS9nd3Qvc2FtcGxlL3Nob3djYXNlL2NsaWVudC9jb250ZW50L2kxOG4vQ3dCaWRpRm9ybWF0dGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMDk4ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L2NvbnRlbnQvaTE4bi9Dd0JpZGlGb3JtYXR0aW5nLmphdmEKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBHb29nbGUgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5jb250ZW50LmkxOG47CisKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5HV1Q7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5jbGllbnQuUnVuQXN5bmNDYWxsYmFjazsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20uY2xpZW50LkNsaWNrRXZlbnQ7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5DbGlja0hhbmRsZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuZG9tLmNsaWVudC5LZXlVcEV2ZW50OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmRvbS5jbGllbnQuS2V5VXBIYW5kbGVyOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmkxOG4uY2xpZW50LkNvbnN0YW50czsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudC5Mb2NhbGVJbmZvOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmkxOG4uc2hhcmVkLkJpZGlGb3JtYXR0ZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5Db250ZW50V2lkZ2V0OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5zaG93Y2FzZS5jbGllbnQuU2hvd2Nhc2VBbm5vdGF0aW9ucy5TaG93Y2FzZURhdGE7CitpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5TaG93Y2FzZUFubm90YXRpb25zLlNob3djYXNlUmF3OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5zaG93Y2FzZS5jbGllbnQuU2hvd2Nhc2VBbm5vdGF0aW9ucy5TaG93Y2FzZVNvdXJjZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC5ycGMuQXN5bmNDYWxsYmFjazsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5BbmNob3I7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuRmxleFRhYmxlOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkZsZXhUYWJsZS5GbGV4Q2VsbEZvcm1hdHRlcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5IVE1MOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkhhc1ZlcnRpY2FsQWxpZ25tZW50OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkhvcml6b250YWxQYW5lbDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5UZXh0Qm94OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLldpZGdldDsKKworLyoqCisgKiBFeGFtcGxlIGZpbGUuCisgKi8KK0BTaG93Y2FzZVJhdyggeyJCbG9nTWVzc2FnZXMuamF2YSIsICJCbG9nTWVzc2FnZXMucHJvcGVydGllcyJ9KQorcHVibGljIGNsYXNzIEN3QmlkaUZvcm1hdHRpbmcgZXh0ZW5kcyBDb250ZW50V2lkZ2V0IHsKKyAgLyoqCisgICAqIFRoZSBjb25zdGFudHMgdXNlZCBpbiB0aGlzIENvbnRlbnQgV2lkZ2V0LgorICAgKi8KKyAgQFNob3djYXNlU291cmNlCisgIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIEN3Q29uc3RhbnRzIGV4dGVuZHMgQ29uc3RhbnRzLAorICAgICAgQ29udGVudFdpZGdldC5Dd0NvbnN0YW50cyB7CisgICAgU3RyaW5nIGN3QmlkaUZvcm1hdHRpbmdBcmcwTGFiZWwoKTsKKworICAgIFN0cmluZyBjd0JpZGlGb3JtYXR0aW5nQXJnMUxhYmVsKCk7CisKKyAgICBTdHJpbmcgY3dCaWRpRm9ybWF0dGluZ0FyZzJMYWJlbCgpOworCisgICAgU3RyaW5nIGN3QmlkaUZvcm1hdHRpbmdCaWRpRm9ybWF0dGVkTGFiZWwoKTsKKworICAgIFN0cmluZyBjd0JpZGlGb3JtYXR0aW5nRGVzY3JpcHRpb24oKTsKKworICAgIFN0cmluZyBjd0JpZGlGb3JtYXR0aW5nTGlua1RleHQoKTsKKworICAgIFN0cmluZyBjd0JpZGlGb3JtYXR0aW5nTmFtZSgpOworCisgICAgU3RyaW5nIGN3QmlkaUZvcm1hdHRpbmdOb25iaWRpRm9ybWF0dGVkTGFiZWwoKTsKKworICAgIFN0cmluZyBjd0JpZGlGb3JtYXR0aW5nVGVtcGxhdGVMYWJlbCgpOworICB9CisKKyAgLyoqCisgICAqIFRoZSB7QGxpbmsgVGV4dEJveH0gd2hlcmUgdGhlIHVzZXIgZW50ZXJzIGFyZ3VtZW50IDAuCisgICAqLworICBAU2hvd2Nhc2VEYXRhCisgIHByaXZhdGUgVGV4dEJveCBhcmcwQm94ID0gbnVsbDsKKworICAvKioKKyAgICogVGhlIHtAbGluayBUZXh0Qm94fSB3aGVyZSB0aGUgdXNlciBlbnRlcnMgYXJndW1lbnQgMS4KKyAgICovCisgIEBTaG93Y2FzZURhdGEKKyAgcHJpdmF0ZSBUZXh0Qm94IGFyZzFCb3ggPSBudWxsOworCisgIC8qKgorICAgKiBUaGUge0BsaW5rIFRleHRCb3h9IHdoZXJlIHRoZSB1c2VyIGVudGVycyBhcmd1bWVudCAyLgorICAgKi8KKyAgQFNob3djYXNlRGF0YQorICBwcml2YXRlIFRleHRCb3ggYXJnMkJveCA9IG51bGw7CisKKyAgLyoqCisgICAqIEEge0BsaW5rIGNvbS5nb29nbGUuZ3d0LmkxOG4uc2hhcmVkLkJpZGlGb3JtYXR0ZXJ9IGluc3RhbmNlIHVzZWQgZm9yCisgICAqIGJpZGktZm9ybWF0dGluZyBvZiB1c2VyIGlucHV0LgorICAgKi8KKyAgQFNob3djYXNlRGF0YQorICBwcml2YXRlIEJpZGlGb3JtYXR0ZXIgYmlkaUZvcm1hdHRlciA9CisgICAgICBCaWRpRm9ybWF0dGVyLmdldEluc3RhbmNlRm9yQ3VycmVudExvY2FsZSgpOworCisgIC8qKgorICAgKiBBbiBpbnN0YW5jZSBvZiB0aGUgY29uc3RhbnRzLgorICAgKi8KKyAgQFNob3djYXNlRGF0YQorICBwcml2YXRlIEN3Q29uc3RhbnRzIGNvbnN0YW50czsKKworICAvKioKKyAgICogVGhlIGJsb2cgbWVzc2FnZXMgdXNlZCBpbiB0aGlzIGV4YW1wbGUuCisgICAqLworICBAU2hvd2Nhc2VEYXRhCisgIHByaXZhdGUgQmxvZ01lc3NhZ2VzIGJsb2dNZXNzYWdlcyA9IG51bGw7CisKKyAgLyoqCisgICAqIFRoZSB7QGxpbmsgSFRNTH0gdXNlZCB0byBkaXNwbGF5IHRoZSBtZXNzYWdlLgorICAgKi8KKyAgQFNob3djYXNlRGF0YQorICBwcml2YXRlIEhUTUwgbWVzc2FnZSA9IG51bGw7CisKKyAgLyoqCisgICAqIFRoZSB7QGxpbmsgSFRNTH0gdXNlZCB0byBkaXNwbGF5IHRoZSBiaWRpIGZvcm1hdHRlZCBtZXNzYWdlLgorICAgKi8KKyAgQFNob3djYXNlRGF0YQorICBwcml2YXRlIEhUTUwgYmlkaUZvcm1hdHRlZE1lc3NhZ2UgPSBudWxsOworCisgIC8qKgorICAgKiBDb25zdHJ1Y3Rvci4KKyAgICoKKyAgICogQHBhcmFtIGNvbnN0YW50cyB0aGUgY29uc3RhbnRzCisgICAqLworICBwdWJsaWMgQ3dCaWRpRm9ybWF0dGluZyhDd0NvbnN0YW50cyBjb25zdGFudHMpIHsKKyAgICBzdXBlcihjb25zdGFudHMpOworICAgIHRoaXMuY29uc3RhbnRzID0gY29uc3RhbnRzOworICAgIHJlZ2lzdGVyU291cmNlKCJCbG9nTWVzc2FnZXMuamF2YSIpOworICAgIHJlZ2lzdGVyU291cmNlKCJCbG9nTWVzc2FnZXMucHJvcGVydGllcyIpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisgICAgcmV0dXJuIGNvbnN0YW50cy5jd0JpZGlGb3JtYXR0aW5nRGVzY3JpcHRpb24oKTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgcmV0dXJuIGNvbnN0YW50cy5jd0JpZGlGb3JtYXR0aW5nTmFtZSgpOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBib29sZWFuIGhhc1N0eWxlKCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIC8qKgorICAgKiBJbml0aWFsaXplIHRoaXMgZXhhbXBsZS4KKyAgICovCisgIEBTaG93Y2FzZVNvdXJjZQorICBAT3ZlcnJpZGUKKyAgcHVibGljIFdpZGdldCBvbkluaXRpYWxpemUoKSB7CisgICAgLy8gQ3JlYXRlIHRoZSBpbnRlcm5hdGlvbmFsaXplZCBibG9nIG1lc3NhZ2VzCisgICAgYmxvZ01lc3NhZ2VzID0gR1dULmNyZWF0ZShCbG9nTWVzc2FnZXMuY2xhc3MpOworCisgICAgLy8gVXNlIGEgRmxleFRhYmxlIHRvIGxheW91dCB0aGUgY29udGVudAorICAgIEZsZXhUYWJsZSBsYXlvdXQgPSBuZXcgRmxleFRhYmxlKCk7CisgICAgRmxleENlbGxGb3JtYXR0ZXIgZm9ybWF0dGVyID0gbGF5b3V0LmdldEZsZXhDZWxsRm9ybWF0dGVyKCk7CisgICAgbGF5b3V0LnNldENlbGxTcGFjaW5nKDUpOworCisgICAgLy8gQWRkIGEgbGluayB0byB0aGUgc291cmNlIGNvZGUgb2YgdGhlIEludGVyZmFjZQorICAgIEFuY2hvciBsaW5rID0gbmV3IEFuY2hvcigiQmxvZ01lc3NhZ2VzIik7CisgICAgbGluay5hZGRDbGlja0hhbmRsZXIobmV3IENsaWNrSGFuZGxlcigpIHsKKyAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soQ2xpY2tFdmVudCBldmVudCkgeworICAgICAgICBzZWxlY3RUYWIoMik7CisgICAgICB9CisgICAgfSk7CisgICAgSG9yaXpvbnRhbFBhbmVsIGxpbmtQYW5lbCA9IG5ldyBIb3Jpem9udGFsUGFuZWwoKTsKKyAgICBsaW5rUGFuZWwuc2V0U3BhY2luZygzKTsKKyAgICBsaW5rUGFuZWwuYWRkKG5ldyBIVE1MKGNvbnN0YW50cy5jd0JpZGlGb3JtYXR0aW5nTGlua1RleHQoKSkpOworICAgIGxpbmtQYW5lbC5hZGQobGluayk7CisgICAgbGF5b3V0LnNldFdpZGdldCgwLCAwLCBsaW5rUGFuZWwpOworICAgIGZvcm1hdHRlci5zZXRDb2xTcGFuKDAsIDAsIDIpOworCisgICAgLy8gU2hvdyB0aGUgdGVtcGxhdGUgZm9yIHJlZmVyZW5jZQorICAgIFN0cmluZyB0ZW1wbGF0ZSA9IGJsb2dNZXNzYWdlcy51c2VyQ29tbWVudCgiezB9IiwgInsxfSIsICJ7Mn0iKTsKKyAgICBsYXlvdXQuc2V0SFRNTCgxLCAwLCBjb25zdGFudHMuY3dCaWRpRm9ybWF0dGluZ1RlbXBsYXRlTGFiZWwoKSk7CisgICAgbGF5b3V0LnNldEhUTUwoMSwgMSwgdGVtcGxhdGUpOworCisgICAgLy8gQWRkIGFyZ3VtZW50IDAKKyAgICBhcmcwQm94ID0gbmV3IFRleHRCb3goKTsKKyAgICAvLyBVc2luZyBhbiBpbml0aWFsIHZhbHVlIHdob3NlIGRpcmVjdGlvbiBpcyBvcHBvc2l0ZSB0aGUgbG9jYWxlJ3MgZGlyZWN0aW9uCisgICAgLy8gZGVtb25zdHJhdGVzIHRoZSBuZWVkIGZvciBhbmQgZWZmZWN0IG9mIGJpZGkgZm9ybWF0dGluZy4KKyAgICBhcmcwQm94LnNldFRleHQoTG9jYWxlSW5mby5nZXRDdXJyZW50TG9jYWxlKCkuaXNSVEwoKSA/ICJUb20gQm9tYmFkaWwiIDoKKyAgICAgICLXqteV157XqCDXkteo15nXnyIpOworICAgIGxheW91dC5zZXRIVE1MKDIsIDAsIGNvbnN0YW50cy5jd0JpZGlGb3JtYXR0aW5nQXJnMExhYmVsKCkpOworICAgIGxheW91dC5zZXRXaWRnZXQoMiwgMSwgYXJnMEJveCk7CisKKyAgICAvLyBBZGQgYXJndW1lbnQgMQorICAgIGFyZzFCb3ggPSBuZXcgVGV4dEJveCgpOworICAgIGFyZzFCb3guc2V0VGV4dCgiMTYiKTsKKyAgICBsYXlvdXQuc2V0SFRNTCgzLCAwLCBjb25zdGFudHMuY3dCaWRpRm9ybWF0dGluZ0FyZzFMYWJlbCgpKTsKKyAgICBsYXlvdXQuc2V0V2lkZ2V0KDMsIDEsIGFyZzFCb3gpOworCisgICAgLy8gQWRkIGFyZ3VtZW50IDIKKyAgICBhcmcyQm94ID0gbmV3IFRleHRCb3goKTsKKyAgICAvLyBVc2luZyBhbiBpbml0aWFsIHZhbHVlIHdob3NlIGRpcmVjdGlvbiBpcyBvcHBvc2l0ZSB0aGUgbG9jYWxlJ3MgZGlyZWN0aW9uCisgICAgLy8gZGVtb25zdHJhdGVzIHRoZSBuZWVkIGZvciBhbmQgZWZmZWN0IG9mIGJpZGkgZm9ybWF0dGluZy4KKyAgICBhcmcyQm94LnNldFRleHQoTG9jYWxlSW5mby5nZXRDdXJyZW50TG9jYWxlKCkuaXNSVEwoKSA/CisgICAgICAgICJIb3cgZGVlcCBpcyB5b3VyIGxvdmU/IiA6ICLXm9ee15Qg15fXldecINeZ16kg15HXl9eV16M/Iik7CisgICAgbGF5b3V0LnNldEhUTUwoNCwgMCwgY29uc3RhbnRzLmN3QmlkaUZvcm1hdHRpbmdBcmcyTGFiZWwoKSk7CisgICAgbGF5b3V0LnNldFdpZGdldCg0LCAxLCBhcmcyQm94KTsKKworICAgIC8vIEFkZCB0aGUgdW5mb3JtYXR0ZWQgbWVzc2FnZQorICAgIG1lc3NhZ2UgPSBuZXcgSFRNTCgpOworICAgIGxheW91dC5zZXRIVE1MKDUsIDAsIGNvbnN0YW50cy5jd0JpZGlGb3JtYXR0aW5nTm9uYmlkaUZvcm1hdHRlZExhYmVsKCkpOworICAgIGxheW91dC5zZXRXaWRnZXQoNSwgMSwgbWVzc2FnZSk7CisgICAgZm9ybWF0dGVyLnNldFZlcnRpY2FsQWxpZ25tZW50KDUsIDAsIEhhc1ZlcnRpY2FsQWxpZ25tZW50LkFMSUdOX1RPUCk7CisKKyAgICAvLyBBZGQgdGhlIGJpZGkgZm9ybWF0dGVkIG1lc3NhZ2UKKyAgICBiaWRpRm9ybWF0dGVkTWVzc2FnZSA9IG5ldyBIVE1MKCk7CisgICAgbGF5b3V0LnNldEhUTUwoNiwgMCwgY29uc3RhbnRzLmN3QmlkaUZvcm1hdHRpbmdCaWRpRm9ybWF0dGVkTGFiZWwoKSk7CisgICAgbGF5b3V0LnNldFdpZGdldCg2LCAxLCBiaWRpRm9ybWF0dGVkTWVzc2FnZSk7CisgICAgZm9ybWF0dGVyLnNldFZlcnRpY2FsQWxpZ25tZW50KDYsIDAsIEhhc1ZlcnRpY2FsQWxpZ25tZW50LkFMSUdOX1RPUCk7CisKKyAgICAvLyBBZGQgaGFuZGxlcnMgdG8gYWxsIG9mIHRoZSBhcmd1bWVudCBib3hlcworICAgIEtleVVwSGFuZGxlciBrZXlVcEhhbmRsZXIgPSBuZXcgS2V5VXBIYW5kbGVyKCkgeworICAgICAgcHVibGljIHZvaWQgb25LZXlVcChLZXlVcEV2ZW50IGV2ZW50KSB7CisgICAgICAgIHVwZGF0ZU1lc3NhZ2VzKCk7CisgICAgICB9CisgICAgfTsKKyAgICBhcmcwQm94LmFkZEtleVVwSGFuZGxlcihrZXlVcEhhbmRsZXIpOworICAgIGFyZzFCb3guYWRkS2V5VXBIYW5kbGVyKGtleVVwSGFuZGxlcik7CisgICAgYXJnMkJveC5hZGRLZXlVcEhhbmRsZXIoa2V5VXBIYW5kbGVyKTsKKworICAgIC8vIFJldHVybiB0aGUgbGF5b3V0IFdpZGdldAorICAgIHVwZGF0ZU1lc3NhZ2VzKCk7CisKKyAgICByZXR1cm4gbGF5b3V0OworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIGFzeW5jT25Jbml0aWFsaXplKGZpbmFsIEFzeW5jQ2FsbGJhY2s8V2lkZ2V0PiBjYWxsYmFjaykgeworICAgIEdXVC5ydW5Bc3luYyhDd0JpZGlGb3JtYXR0aW5nLmNsYXNzLCBuZXcgUnVuQXN5bmNDYWxsYmFjaygpIHsKKworICAgICAgcHVibGljIHZvaWQgb25GYWlsdXJlKFRocm93YWJsZSBjYXVnaHQpIHsKKyAgICAgICAgY2FsbGJhY2sub25GYWlsdXJlKGNhdWdodCk7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyB2b2lkIG9uU3VjY2VzcygpIHsKKyAgICAgICAgY2FsbGJhY2sub25TdWNjZXNzKG9uSW5pdGlhbGl6ZSgpKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRSdW5Bc3luY1ByZWZldGNoZXMoKSB7CisgICAgcHJlZmV0Y2hJbnRlcm5hdGlvbmFsaXphdGlvbigpOworICB9CisKKyAgLyoqCisgICAqIEh0bWwtZXNjYXBlIHRoZSBpbnB1dCBTdHJpbmcuCisgICAqIFRPRE8odG9tZXJpZ28pOiBVc2UgU2FmZUh0bWwgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZS4KKyAgICovCisgIEBTaG93Y2FzZVNvdXJjZQorICBwcml2YXRlIFN0cmluZyBodG1sRXNjYXBlKFN0cmluZyBzdHIpIHsKKyAgICAgIHJldHVybiBzdHIucmVwbGFjZSgiJiIsICImYW1wOyIpLnJlcGxhY2UoIjwiLCAiJmx0OyIpOworICB9CisKKyAgLyoqCisgICAqIFVwZGF0ZSB0aGUgZm9ybWF0dGVkIG1lc3NhZ2UuCisgICAqLworICBAU2hvd2Nhc2VTb3VyY2UKKyAgcHJpdmF0ZSB2b2lkIHVwZGF0ZU1lc3NhZ2VzKCkgeworICAgIFN0cmluZyBhcmcwID0gYXJnMEJveC5nZXRUZXh0KCkudHJpbSgpOworICAgIFN0cmluZyBhcmcxID0gYXJnMUJveC5nZXRUZXh0KCkudHJpbSgpOworICAgIFN0cmluZyBhcmcyID0gYXJnMkJveC5nZXRUZXh0KCkudHJpbSgpOworICAgIG1lc3NhZ2Uuc2V0VGV4dChibG9nTWVzc2FnZXMudXNlckNvbW1lbnQoYXJnMCwgYXJnMSwgYXJnMikpOworCisgICAgYmlkaUZvcm1hdHRlZE1lc3NhZ2Uuc2V0SFRNTChibG9nTWVzc2FnZXMudXNlckNvbW1lbnQoCisgICAgICAgIGJpZGlGb3JtYXR0ZXIuc3BhbldyYXAoYXJnMCksCisgICAgICAgIC8vIGFyZzEgaXMgaW50ZW5kZWQgdG8gYmUgYW4gdW5zaWduZWQgbnVtYmVyLCBzbyBiaWRpIGZvcm1hdHRpbmcgaXMgbm90CisgICAgICAgIC8vIG5lZWRlZC4gSG93ZXZlciwgSFRNTCBlc2NhcGluZyBpcyBhIG11c3QgdG8gYXZvaWQgYW4gWFNTIGF0dGFjayBob2xlIQorICAgICAgICBodG1sRXNjYXBlKGFyZzEpLAorICAgICAgICBiaWRpRm9ybWF0dGVyLnNwYW5XcmFwKGFyZzIpKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc2hvd2Nhc2Uvc3JjL2NvbS9nb29nbGUvZ3d0L3NhbXBsZS9zaG93Y2FzZS9jbGllbnQvY29udGVudC9pMThuL0N3QmlkaUlucHV0LmphdmEgYi9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L2NvbnRlbnQvaTE4bi9Dd0JpZGlJbnB1dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MzRhZjAKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3Nob3djYXNlL3NyYy9jb20vZ29vZ2xlL2d3dC9zYW1wbGUvc2hvd2Nhc2UvY2xpZW50L2NvbnRlbnQvaTE4bi9Dd0JpZGlJbnB1dC5qYXZhCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgR29vZ2xlIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5zaG93Y2FzZS5jbGllbnQuY29udGVudC5pMThuOworCitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5jbGllbnQuR1dUOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuY2xpZW50LlJ1bkFzeW5jQ2FsbGJhY2s7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuaTE4bi5jbGllbnQuQ29uc3RhbnRzOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmkxOG4uY2xpZW50Lkhhc0RpcmVjdGlvbi5EaXJlY3Rpb247CitpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5Db250ZW50V2lkZ2V0OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5zaG93Y2FzZS5jbGllbnQuU2hvd2Nhc2VBbm5vdGF0aW9ucy5TaG93Y2FzZURhdGE7CitpbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FtcGxlLnNob3djYXNlLmNsaWVudC5TaG93Y2FzZUFubm90YXRpb25zLlNob3djYXNlU291cmNlOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnNhbXBsZS5zaG93Y2FzZS5jbGllbnQuU2hvd2Nhc2VBbm5vdGF0aW9ucy5TaG93Y2FzZVN0eWxlOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnJwYy5Bc3luY0NhbGxiYWNrOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkhUTUw7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuVGV4dEFyZWE7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuVmVydGljYWxQYW5lbDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5XaWRnZXQ7CisKKy8qKgorICogRXhhbXBsZSBmaWxlLgorICovCitAU2hvd2Nhc2VTdHlsZSgvKiBjc3Mgc3R5bGUgbmFtZXMgKi97Ii5nd3QtVGV4dEFyZWEifSkKK3B1YmxpYyBjbGFzcyBDd0JpZGlJbnB1dCBleHRlbmRzIENvbnRlbnRXaWRnZXQgeworICAvKioKKyAgICogVGhlIGNvbnN0YW50cyB1c2VkIGluIHRoaXMgQ29udGVudCBXaWRnZXQuCisgICAqLworICBAU2hvd2Nhc2VTb3VyY2UKKyAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgQ3dDb25zdGFudHMgZXh0ZW5kcyBDb25zdGFudHMsCisgICAgICBDb250ZW50V2lkZ2V0LkN3Q29uc3RhbnRzIHsKKyAgICBTdHJpbmcgY3dCaWRpSW5wdXRSdGxBcmVhTGFiZWwoKTsKKworICAgIFN0cmluZyBjd0JpZGlJbnB1dEJpZGlBcmVhTGFiZWwoKTsKKworICAgIFN0cmluZyBjd0JpZGlJbnB1dERlc2NyaXB0aW9uKCk7CisKKyAgICBTdHJpbmcgY3dCaWRpSW5wdXROYW1lKCk7CisgIH0KKworICAvKioKKyAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnN0YW50cy4KKyAgICovCisgIEBTaG93Y2FzZURhdGEKKyAgcHJpdmF0ZSBDd0NvbnN0YW50cyBjb25zdGFudHM7CisKKyAgLyoqCisgICAqIENvbnN0cnVjdG9yLgorICAgKgorICAgKiBAcGFyYW0gY29uc3RhbnRzIHRoZSBjb25zdGFudHMKKyAgICovCisgIHB1YmxpYyBDd0JpZGlJbnB1dChDd0NvbnN0YW50cyBjb25zdGFudHMpIHsKKyAgICBzdXBlcihjb25zdGFudHMpOworICAgIHRoaXMuY29uc3RhbnRzID0gY29uc3RhbnRzOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisgICAgcmV0dXJuIGNvbnN0YW50cy5jd0JpZGlJbnB1dERlc2NyaXB0aW9uKCk7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworICAgIHJldHVybiBjb25zdGFudHMuY3dCaWRpSW5wdXROYW1lKCk7CisgIH0KKworICAvKioKKyAgICogSW5pdGlhbGl6ZSB0aGlzIGV4YW1wbGUuCisgICAqLworICBAU2hvd2Nhc2VTb3VyY2UKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBXaWRnZXQgb25Jbml0aWFsaXplKCkgeworICAgIC8vIENyZWF0ZSBhIHBhbmVsIHRvIGxheW91dCB0aGUgd2lkZ2V0cworICAgIFZlcnRpY2FsUGFuZWwgdnBhbmVsID0gbmV3IFZlcnRpY2FsUGFuZWwoKTsKKyAgICB2cGFuZWwuc2V0U3BhY2luZygxMCk7CisKKyAgICAvLyBBZGQgYSBiaWRpLWRpc2FibGVkIFRleHRBcmVhCisgICAgdnBhbmVsLmFkZChuZXcgSFRNTChjb25zdGFudHMuY3dCaWRpSW5wdXRSdGxBcmVhTGFiZWwoKSkpOworICAgIFRleHRBcmVhIGRpc2FibGVkID0gbmV3IFRleHRBcmVhKCk7CisgICAgZGlzYWJsZWQuc2V0RGlyZWN0aW9uRXN0aW1hdG9yKGZhbHNlKTsKKyAgICBkaXNhYmxlZC5zZXREaXJlY3Rpb24oRGlyZWN0aW9uLlJUTCk7CisgICAgdnBhbmVsLmFkZChkaXNhYmxlZCk7CisKKyAgICAvLyBBZGQgYSBiaWRpLWVuYWJsZWQgVGV4dEFyZWEKKyAgICB2cGFuZWwuYWRkKG5ldyBIVE1MKGNvbnN0YW50cy5jd0JpZGlJbnB1dEJpZGlBcmVhTGFiZWwoKSkpOworICAgIFRleHRBcmVhIGVuYWJsZWQgPSBuZXcgVGV4dEFyZWEoKTsKKyAgICAvLyBTaW5jZSB0aGlzIGFwcGxpY2F0aW9uIGluY2x1ZGVzIGF0IGxlYXN0IG9uZSBSVEwgbG9jYWxlLCB0aGlzIFRleHRBcmVhCisgICAgLy8gaGFzIGF1dG9tYXRpYyBkaXJlY3Rpb24gaGFuZGxpbmcgb24gYnkgZGVmYXVsdC4KKyAgICBhc3NlcnQgZW5hYmxlZC5nZXREaXJlY3Rpb25Fc3RpbWF0b3IoKSAhPSBudWxsOworICAgIGVuYWJsZWQuc2V0VGV4dCgi2YPZhSDYudiv2K8g2K3YqNin2Kog2KfZhNix2YXZhCDZgdmKINin2YTYtNin2LfYpj8iKTsKKyAgICB2cGFuZWwuYWRkKGVuYWJsZWQpOworCisgICAgLy8gUmV0dXJuIHRoZSBwYW5lbAorICAgIHJldHVybiB2cGFuZWw7CisgIH0KKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIHZvaWQgYXN5bmNPbkluaXRpYWxpemUoZmluYWwgQXN5bmNDYWxsYmFjazxXaWRnZXQ+IGNhbGxiYWNrKSB7CisgICAgR1dULnJ1bkFzeW5jKEN3QmlkaUlucHV0LmNsYXNzLCBuZXcgUnVuQXN5bmNDYWxsYmFjaygpIHsKKworICAgICAgcHVibGljIHZvaWQgb25GYWlsdXJlKFRocm93YWJsZSBjYXVnaHQpIHsKKyAgICAgICAgY2FsbGJhY2sub25GYWlsdXJlKGNhdWdodCk7CisgICAgICB9CisKKyAgICAgIHB1YmxpYyB2b2lkIG9uU3VjY2VzcygpIHsKKyAgICAgICAgY2FsbGJhY2sub25TdWNjZXNzKG9uSW5pdGlhbGl6ZSgpKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgdm9pZCBzZXRSdW5Bc3luY1ByZWZldGNoZXMoKSB7CisgICAgcHJlZmV0Y2hUZXh0SW5wdXQoKTsKKyAgfQorfQo=