ZGlmZiAtLWdpdCBhL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vcG9tLnhtbCBiL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vcG9tLnhtbAppbmRleCBmMWU1NjQ0Li4wMjI3MzJlIDEwMDY0NAotLS0gYS93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3BvbS54bWwKKysrIGIvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9wb20ueG1sCkBAIC0xLDEwOSArMSwxMzAgQEAKLTwhLS0gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlIGNvbnRyaWJ1dG9yIAotICAgIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCAKLSAgICBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gCi0gICAgeW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgCi0gICAgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiAKLSAgICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgVW5sZXNzIHJlcXVpcmVkIAotICAgIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgCi0gICAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyAKLSAgICBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgCi0gICAgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gLS0+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKzwhLS0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgogCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPmZlbGl4LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+Mi4xPC92ZXJzaW9uPgotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uLy4uL3BvbS9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCTxwYXJlbnQ+CisJCTxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPmZlbGl4LXBhcmVudDwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+Mi4xPC92ZXJzaW9uPgorCQk8cmVsYXRpdmVQYXRoPi4uLy4uLy4uL3BvbS9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisJPC9wYXJlbnQ+CiAKLSAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLmZlbGl4LndlYmNvbnNvbGUucGx1Z2lucy51c2VyYWRtaW48L2FydGlmYWN0SWQ+Ci0gICAgPHBhY2thZ2luZz5idW5kbGU8L3BhY2thZ2luZz4KLSAgICA8dmVyc2lvbj4wLjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLmZlbGl4LndlYmNvbnNvbGUucGx1Z2lucy51c2VyYWRtaW48L2FydGlmYWN0SWQ+CisJPHBhY2thZ2luZz5idW5kbGU8L3BhY2thZ2luZz4KKwk8dmVyc2lvbj4wLjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KIAotICAgIDxuYW1lPkFwYWNoZSBGZWxpeCBXZWIgQ29uc29sZSBVc2VyIEFkbWluIFBsdWdpbjwvbmFtZT4KLSAgICA8ZGVzY3JpcHRpb24+CisJPG5hbWU+QXBhY2hlIEZlbGl4IFdlYiBDb25zb2xlIFVzZXIgQWRtaW4gUGx1Z2luPC9uYW1lPgorCTxkZXNjcmlwdGlvbj4KICAgICAgICAgVGhpcyBpcyBhIHBsdWdpbiBmb3IgdGhlIEFwYWNoZSBGZWxpeCBPU0dpIHdlYiBjb25zb2xlIGZvciBkaXNwbGF5aW5nL21hbmFnaW5nIE9TR2kgVXNlcnMgYW5kIEdyb3Vwcy4KICAgICA8L2Rlc2NyaXB0aW9uPgogCi0gICAgPHNjbT4KLSAgICAgICAgPGNvbm5lY3Rpb24+c2NtOnN2bjpodHRwOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2ZlbGl4L3RydW5rL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW48L2Nvbm5lY3Rpb24+Ci0gICAgICAgIDxkZXZlbG9wZXJDb25uZWN0aW9uPnNjbTpzdm46aHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvZmVsaXgvdHJ1bmsvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbjwvZGV2ZWxvcGVyQ29ubmVjdGlvbj4KLSAgICAgICAgPHVybD5odHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld3ZjL2ZlbGl4L3RydW5rL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW48L3VybD4KLSAgICA8L3NjbT4KKwk8c2NtPgorCQk8Y29ubmVjdGlvbj5zY206c3ZuOmh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvZmVsaXgvdHJ1bmsvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbjwvY29ubmVjdGlvbj4KKwkJPGRldmVsb3BlckNvbm5lY3Rpb24+c2NtOnN2bjpodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9mZWxpeC90cnVuay93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluPC9kZXZlbG9wZXJDb25uZWN0aW9uPgorCQk8dXJsPmh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3dmMvZmVsaXgvdHJ1bmsvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbjwvdXJsPgorCTwvc2NtPgogCi0gICAgPGJ1aWxkPgotICAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICAgIDwhLS0gdHJhbnNsYXRlIFVURi04IGVuY29kZWQgcHJvcGVydGllcyBmaWxlcyB0byBJU08tODg1OS0xIC0tPgotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5uYXRpdmUyYXNjaWktbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC1iZXRhLTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+Ci0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+bmF0aXZlMmFzY2lpPC9nb2FsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbmNvZGluZz5VVEYtODwvZW5jb2Rpbmc+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgICAgICAgIDwvcGx1Z2luPgorCTxidWlsZD4KKwkJPHBsdWdpbnM+CisJCQk8IS0tIHRyYW5zbGF0ZSBVVEYtOCBlbmNvZGVkIHByb3BlcnRpZXMgZmlsZXMgdG8gSVNPLTg4NTktMSAtLT4KKwkJCTxwbHVnaW4+CisJCQkJPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisJCQkJPGFydGlmYWN0SWQ+bmF0aXZlMmFzY2lpLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKwkJCQk8dmVyc2lvbj4xLjAtYmV0YS0xPC92ZXJzaW9uPgorCQkJCTxleGVjdXRpb25zPgorCQkJCQk8ZXhlY3V0aW9uPgorCQkJCQkJPGdvYWxzPgorCQkJCQkJCTxnb2FsPm5hdGl2ZTJhc2NpaTwvZ29hbD4KKwkJCQkJCTwvZ29hbHM+CisJCQkJCQk8Y29uZmlndXJhdGlvbj4KKwkJCQkJCQk8ZW5jb2Rpbmc+VVRGLTg8L2VuY29kaW5nPgorCQkJCQkJPC9jb25maWd1cmF0aW9uPgorCQkJCQk8L2V4ZWN1dGlvbj4KKwkJCQk8L2V4ZWN1dGlvbnM+CisJCQk8L3BsdWdpbj4KIAotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4zLjQ8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPGluc3RydWN0aW9ucz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtU3ltYm9saWNOYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cHJvamVjdC5hcnRpZmFjdElkfQotICAgICAgICAgICAgICAgICAgICAgICAgPC9CdW5kbGUtU3ltYm9saWNOYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1BY3RpdmF0b3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5mZWxpeC53ZWJjb25zb2xlLnBsdWdpbnMudXNlcmFkbWluLmludGVybmFsLkFjdGl2YXRvcgotICAgICAgICAgICAgICAgICAgICAgICAgPC9CdW5kbGUtQWN0aXZhdG9yPgotICAgICAgICAgICAgICAgICAgICAgICAgPEluY2x1ZGUtUmVzb3VyY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAge21hdmVuLXJlc291cmNlc30sT1NHSS1JTkY9dGFyZ2V0L2NsYXNzZXMvT1NHSS1JTkYKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvSW5jbHVkZS1SZXNvdXJjZT4KLSAgICAgICAgICAgICAgICAgICAgPC9pbnN0cnVjdGlvbnM+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgIDwvcGx1Z2lucz4KLSAgICA8L2J1aWxkPgorCQkJPHBsdWdpbj4KKwkJCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+CisJCQkJPHZlcnNpb24+Mi4zLjQ8L3ZlcnNpb24+CisJCQkJPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKwkJCQk8Y29uZmlndXJhdGlvbj4KKwkJCQkJPGluc3RydWN0aW9ucz4KKwkJCQkJCTxCdW5kbGUtU3ltYm9saWNOYW1lPgorCQkJCQkJCSR7cHJvamVjdC5hcnRpZmFjdElkfQorCQkJCQkJPC9CdW5kbGUtU3ltYm9saWNOYW1lPgorCQkJCQkJPEJ1bmRsZS1BY3RpdmF0b3I+CisJCQkJCQkJb3JnLmFwYWNoZS5mZWxpeC53ZWJjb25zb2xlLnBsdWdpbnMudXNlcmFkbWluLmludGVybmFsLkFjdGl2YXRvcgorCQkJCQkJPC9CdW5kbGUtQWN0aXZhdG9yPgorCQkJCQkJPEluY2x1ZGUtUmVzb3VyY2U+CisJCQkJCQkJe21hdmVuLXJlc291cmNlc30sT1NHSS1JTkY9dGFyZ2V0L2NsYXNzZXMvT1NHSS1JTkYKKwkJCQkJCTwvSW5jbHVkZS1SZXNvdXJjZT4KKwkJCQkJPC9pbnN0cnVjdGlvbnM+CisJCQkJPC9jb25maWd1cmF0aW9uPgorCQkJPC9wbHVnaW4+CiAKLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2bGV0LWFwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuNDwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3NnaTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5vc2dpLmNvcmU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj40LjAuMDwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3NnaTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5vc2dpLmNvbXBlbmRpdW08L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj40LjEuMDwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5mZWxpeC53ZWJjb25zb2xlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+NC4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmpzb248L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qc29uPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MjAwNzA4Mjk8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPC9kZXBlbmRlbmNpZXM+CisJCQk8cGx1Z2luPgorCQkJCTxncm91cElkPm9yZy5hcGFjaGUucmF0PC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPmFwYWNoZS1yYXQtcGx1Z2luPC9hcnRpZmFjdElkPgorCQkJCTxjb25maWd1cmF0aW9uPgorCQkJCQk8ZXhjbHVkZXM+CisJCQkJCQk8ZXhjbHVkZT5zcmMvbWFpbi9hcHBlbmRlZC1yZXNvdXJjZXMvKio8L2V4Y2x1ZGU+CisJCQkJCQk8ZXhjbHVkZT5zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL2pzVHJlZS52LjAuOS45YS8qKjwvZXhjbHVkZT4KKwkJCQkJCTxleGNsdWRlPnNyYy9tYWluL3Jlc291cmNlcy9yZXMvKi5odG1sPC9leGNsdWRlPgorCQkJCQk8L2V4Y2x1ZGVzPgorCQkJCTwvY29uZmlndXJhdGlvbj4KKwkJCTwvcGx1Z2luPgorCQk8L3BsdWdpbnM+CisJPC9idWlsZD4KKworCTxkZXBlbmRlbmNpZXM+CisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+amF2YXguc2VydmxldDwvZ3JvdXBJZD4KKwkJCTxhcnRpZmFjdElkPnNlcnZsZXQtYXBpPC9hcnRpZmFjdElkPgorCQkJPHZlcnNpb24+Mi40PC92ZXJzaW9uPgorCQkJPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKwkJPC9kZXBlbmRlbmN5PgorCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPm9yZy5vc2dpPC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+b3JnLm9zZ2kuY29yZTwvYXJ0aWZhY3RJZD4KKwkJCTx2ZXJzaW9uPjQuMC4wPC92ZXJzaW9uPgorCQkJPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKwkJPC9kZXBlbmRlbmN5PgorCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPm9yZy5vc2dpPC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+b3JnLm9zZ2kuY29tcGVuZGl1bTwvYXJ0aWZhY3RJZD4KKwkJCTx2ZXJzaW9uPjQuMS4wPC92ZXJzaW9uPgorCQkJPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKwkJPC9kZXBlbmRlbmN5PgorCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+CisJCQk8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLmZlbGl4LndlYmNvbnNvbGU8L2FydGlmYWN0SWQ+CisJCQk8dmVyc2lvbj40LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKwkJCTxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisJCTwvZGVwZW5kZW5jeT4KKwkJPGRlcGVuZGVuY3k+CisJCQk8Z3JvdXBJZD5vcmcuanNvbjwvZ3JvdXBJZD4KKwkJCTxhcnRpZmFjdElkPmpzb248L2FydGlmYWN0SWQ+CisJCQk8dmVyc2lvbj4yMDA3MDgyOTwvdmVyc2lvbj4KKwkJCTxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisJCTwvZGVwZW5kZW5jeT4KKwk8L2RlcGVuZGVuY2llcz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vYXBwZW5kZWQtcmVzb3VyY2VzL01FVEEtSU5GL0RFUEVOREVOQ0lFUyBiL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vYXBwZW5kZWQtcmVzb3VyY2VzL01FVEEtSU5GL0RFUEVOREVOQ0lFUwppbmRleCA3MTczYzhkLi40OGM3MDQyIDEwMDY0NAotLS0gYS93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL2FwcGVuZGVkLXJlc291cmNlcy9NRVRBLUlORi9ERVBFTkRFTkNJRVMKKysrIGIvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9hcHBlbmRlZC1yZXNvdXJjZXMvTUVUQS1JTkYvREVQRU5ERU5DSUVTCkBAIC0xMywxNyArMTMsNiBAQAogQ29weXJpZ2h0IChjKSAyMDA5IEl2YW4gQm96aGFub3YgKHZha2F0YS5jb20pCiBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKQogCi1UaGlzIHByb2R1Y3QgdXNlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYXQKLUNyeXB0b0pTIChodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzLykuCi1Db3B5cmlnaHQgqSAyMDA5ljIwMTIgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotTGljZW5zZWQgdW5kZXIgTmV3IEJTRCBMaWNlbnNlCi0KLVRoaXMgcHJvZHVjdCB1c2VzIHNvZnR3YXJlIGRldmVsb3BlZCBhdAotSlNPTi5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2RvdWdsYXNjcm9ja2ZvcmQvSlNPTi1qcykuCi1BdmFpbGFibGUgYXMgUHVibGljIERvbWFpbiBjb2RlCi0KIElJSS4gTGljZW5zZSBTdW1tYXJ5CiAtIEFwYWNoZSBMaWNlbnNlIDIuMAogLSBUaGUgTUlUIExpY2Vuc2UKLS0gTmV3IEJTRCBMaWNlbnNlCi0tIFB1YmxpYyBEb21haW4KZGlmZiAtLWdpdCBhL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L3dlYmNvbnNvbGUvcGx1Z2lucy91c2VyYWRtaW4vaW50ZXJuYWwvQWN0aXZhdG9yLmphdmEgYi93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC93ZWJjb25zb2xlL3BsdWdpbnMvdXNlcmFkbWluL2ludGVybmFsL0FjdGl2YXRvci5qYXZhCmluZGV4IDQ0Mjg0MjguLjQ4YmRkYjAgMTAwNjQ0Ci0tLSBhL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L3dlYmNvbnNvbGUvcGx1Z2lucy91c2VyYWRtaW4vaW50ZXJuYWwvQWN0aXZhdG9yLmphdmEKKysrIGIvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvd2ViY29uc29sZS9wbHVnaW5zL3VzZXJhZG1pbi9pbnRlcm5hbC9BY3RpdmF0b3IuamF2YQpAQCAtMjAsNyArMjAsNiBAQAogaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3I7DQogaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0Ow0KIGltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuU2VydmljZVJlZmVyZW5jZTsNCi1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLlNlcnZpY2VSZWdpc3RyYXRpb247DQogaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UudXNlcmFkbWluLlVzZXJBZG1pbjsNCiBpbXBvcnQgb3JnLm9zZ2kudXRpbC50cmFja2VyLlNlcnZpY2VUcmFja2VyOw0KIGltcG9ydCBvcmcub3NnaS51dGlsLnRyYWNrZXIuU2VydmljZVRyYWNrZXJDdXN0b21pemVyOw0KQEAgLTM1LDcgKzM0LDYgQEAKICAgICBwcml2YXRlIEJ1bmRsZUNvbnRleHQgY29udGV4dDsNCiANCiAgICAgcHJpdmF0ZSBTaW1wbGVXZWJDb25zb2xlUGx1Z2luIHBsdWdpbjsNCi0gICAgcHJpdmF0ZSBTZXJ2aWNlUmVnaXN0cmF0aW9uIHByaW50ZXJSZWdpc3RyYXRpb247DQogDQogICAgIC8qKg0KICAgICAgKiBAc2VlIG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3Ijc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpDQpAQCAtOTIsMjAgKzkwLDEyIEBACiAgICAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlZFNlcnZpY2UoU2VydmljZVJlZmVyZW5jZSByZWZlcmVuY2UsIE9iamVjdCBzZXJ2aWNlKQ0KICAgICB7DQogICAgICAgICBTaW1wbGVXZWJDb25zb2xlUGx1Z2luIHBsdWdpbiA9IHRoaXMucGx1Z2luOw0KKyAgICAgICAgdGhpcy5wbHVnaW4gPSBudWxsOw0KIA0KLSAgICAgICAgaWYgKHRyYWNrZXIuc2l6ZSgpIDw9IDEgJiYgcGx1Z2luICE9IG51bGwpDQorICAgICAgICBpZiAocGx1Z2luICE9IG51bGwpDQogICAgICAgICB7DQogICAgICAgICAgICAgLy8gcmVtb3ZlIHNlcnZpY2UNCiAgICAgICAgICAgICBwbHVnaW4udW5yZWdpc3RlcigpOw0KLSAgICAgICAgICAgIHRoaXMucGx1Z2luID0gbnVsbDsNCi0gICAgICAgICAgICAvLyB1bnJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gcHJpbnRlciB0b28NCi0gICAgICAgICAgICBTZXJ2aWNlUmVnaXN0cmF0aW9uIHJlZyA9IHByaW50ZXJSZWdpc3RyYXRpb247DQotICAgICAgICAgICAgaWYgKHJlZyAhPSBudWxsKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmVnLnVucmVnaXN0ZXIoKTsNCi0gICAgICAgICAgICAgICAgcHJpbnRlclJlZ2lzdHJhdGlvbiA9IG51bGw7DQotICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KLQ0KICAgICB9DQogfQ0KZGlmZiAtLWdpdCBhL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L3dlYmNvbnNvbGUvcGx1Z2lucy91c2VyYWRtaW4vaW50ZXJuYWwvV2ViQ29uc29sZVBsdWdpbi5qYXZhIGIvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvd2ViY29uc29sZS9wbHVnaW5zL3VzZXJhZG1pbi9pbnRlcm5hbC9XZWJDb25zb2xlUGx1Z2luLmphdmEKaW5kZXggMzYxNjkyYi4uYjZmYTcwZSAxMDA2NDQKLS0tIGEvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvd2ViY29uc29sZS9wbHVnaW5zL3VzZXJhZG1pbi9pbnRlcm5hbC9XZWJDb25zb2xlUGx1Z2luLmphdmEKKysrIGIvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvd2ViY29uc29sZS9wbHVnaW5zL3VzZXJhZG1pbi9pbnRlcm5hbC9XZWJDb25zb2xlUGx1Z2luLmphdmEKQEAgLTE4LDYgKzE4LDkgQEAKIA0KIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOw0KK2ltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7DQoraW1wb3J0IGphdmEuc2VjdXJpdHkuUHJvdmlkZXI7DQoraW1wb3J0IGphdmEuc2VjdXJpdHkuU2VjdXJpdHk7DQogaW1wb3J0IGphdmEudXRpbC5EaWN0aW9uYXJ5Ow0KIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247DQogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsNCkBAIC02MCw3ICs2Myw2IEBACiAgICAgICAgIFRFTVBMQVRFID0gcmVhZFRlbXBsYXRlRmlsZSgiL3Jlcy9wbHVnaW4uaHRtbCIpOyAvLyROT04tTkxTLTEkDQogICAgIH0NCiANCi0NCiAgICAgcHVibGljIFN0cmluZyBnZXRDYXRlZ29yeSgpDQogICAgIHsNCiAgICAgICAgIHJldHVybiBDQVRFR09SWTsNCkBAIC05MCw2ICs5Miw3IEBACiANCiAgICAgICAgIHRyeQ0KICAgICAgICAgew0KKw0KICAgICAgICAgICAgIGlmICgiYWRkTWVtYmVyIi5lcXVhbHMoYWN0aW9uKSkgeyAvLyROT04tTkxTLTEkDQogICAgICAgICAgICAgICAgIGZpbmFsIFJvbGUgeHJvbGUgPSB1c2VyQWRtaW4uZ2V0Um9sZShyb2xlKTsNCiAgICAgICAgICAgICAgICAgZmluYWwgR3JvdXAgeGdyb3VwID0gKEdyb3VwKSB1c2VyQWRtaW4uZ2V0Um9sZShncm91cCk7DQpAQCAtMTA4LDYgKzExMSwxOSBAQAogICAgICAgICAgICAgICAgIHhncm91cC5yZW1vdmVNZW1iZXIoeHJvbGUpOw0KICAgICAgICAgICAgICAgICB0b0pTT04oancsIHhncm91cCwgZmFsc2UpOw0KICAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlIGlmICgiZ2V0RGlnZXN0QWxnb3JpdGhtcyIuZXF1YWxzKGFjdGlvbikpIHsgLy8kTk9OLU5MUy0xJA0KKyAgICAgICAgICAgICAgICBnZXRNZXNzYWdlRGlnZXN0QWxnb3JpdGhtcyhqdyk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UgaWYgKCJkaWdlc3QiLmVxdWFscyhhY3Rpb24pKSB7IC8vJE5PTi1OTFMtMSQNCisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRhdGFSYXcgPSByZXEuZ2V0UGFyYW1ldGVyKCJkYXRhIik7IC8vJE5PTi1OTFMtMSQNCisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFsZ29yaXRobSA9IHJlcS5nZXRQYXJhbWV0ZXIoImFsZ29yaXRobSIpOyAvLyROT04tTkxTLTEkDQorICAgICAgICAgICAgICAgIGZpbmFsIE1lc3NhZ2VEaWdlc3QgZGlnZXN0ID0gTWVzc2FnZURpZ2VzdC5nZXRJbnN0YW5jZShhbGdvcml0aG0pOw0KKyAgICAgICAgICAgICAgICBmaW5hbCBieXRlW10gZW5jb2RlZCA9IGRpZ2VzdC5kaWdlc3QoZGF0YVJhdy5nZXRCeXRlcygpKTsNCisgICAgICAgICAgICAgICAgancub2JqZWN0KCk7DQorICAgICAgICAgICAgICAgIGp3LmtleSgiZW5jb2RlZCIpOyAvLyROT04tTkxTLTEkDQorICAgICAgICAgICAgICAgIGp3LnZhbHVlKGVuY29kZWQpOw0KKyAgICAgICAgICAgICAgICBqdy5lbmRPYmplY3QoKTsNCisgICAgICAgICAgICB9DQogICAgICAgICAgICAgZWxzZSBpZiAoImRlbCIuZXF1YWxzKGFjdGlvbikpIHsgLy8kTk9OLU5MUy0xJA0KICAgICAgICAgICAgICAgICBvdXQucHJpbnQodXNlckFkbWluLnJlbW92ZVJvbGUocm9sZSkpOw0KICAgICAgICAgICAgIH0NCkBAIC0yNjcsNCArMjgzLDI1IEBACiAgICAgICAgIH0NCiAgICAgICAgIGp3LmVuZEFycmF5KCk7DQogICAgIH0NCisNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERJR0VTVF9LRVlfUFJFRklYID0gIk1lc3NhZ2VEaWdlc3QuIjsgLy8kTk9OLU5MUy0xJA0KKw0KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdldE1lc3NhZ2VEaWdlc3RBbGdvcml0aG1zKGZpbmFsIEpTT05Xcml0ZXIgancpDQorICAgICAgICB0aHJvd3MgSlNPTkV4Y2VwdGlvbg0KKyAgICB7DQorICAgICAgICBQcm92aWRlcltdIHByb3ZpZGVycyA9IFNlY3VyaXR5LmdldFByb3ZpZGVycygpOw0KKyAgICAgICAgancuYXJyYXkoKTsNCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBwcm92aWRlcnMgIT0gbnVsbCAmJiBpIDwgcHJvdmlkZXJzLmxlbmd0aDsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAoSXRlcmF0b3Iga2V5cyA9IHByb3ZpZGVyc1tpXS5rZXlTZXQoKS5pdGVyYXRvcigpOyBrZXlzLmhhc05leHQoKTspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcga2V5ID0gKFN0cmluZykga2V5cy5uZXh0KCk7DQorICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChESUdFU1RfS0VZX1BSRUZJWCkgJiYga2V5LmluZGV4T2YoJyAnKSA9PSAtMSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgancudmFsdWUoa2V5LnN1YnN0cmluZyhESUdFU1RfS0VZX1BSRUZJWC5sZW5ndGgoKSkpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgancuZW5kQXJyYXkoKTsNCisgICAgfQ0KIH0NCmRpZmYgLS1naXQgYS93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9PU0dJLUlORi9sMTBuL2J1bmRsZS5wcm9wZXJ0aWVzIGIvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvT1NHSS1JTkYvbDEwbi9idW5kbGUucHJvcGVydGllcwppbmRleCA2MmZlMDA4Li44ZmFkMDI0IDEwMDY0NAotLS0gYS93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9PU0dJLUlORi9sMTBuL2J1bmRsZS5wcm9wZXJ0aWVzCisrKyBiL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL09TR0ktSU5GL2wxMG4vYnVuZGxlLnByb3BlcnRpZXMKQEAgLTM5LDEwICszOSw3IEBACiByb2xlLnR5cGUuMj1Hcm91cA0KIHR5cGUuc3RyaW5nPVN0cmluZw0KIHR5cGUuYnl0ZXM9Qnl0ZVtdDQotdHlwZS5wYXNzd29yZC1NRDU9UGFzc3dvcmQgSGFzaCAoTUQ1KQ0KLXR5cGUucGFzc3dvcmQtU0hBMT1QYXNzd29yZCBIYXNoIChTSEEtMSkNCi10eXBlLnBhc3N3b3JkLVNIQTI1Nj1QYXNzd29yZCBIYXNoIChTSEEyNTYpDQotdHlwZS5wYXNzd29yZC1TSEE1MTI9UGFzc3dvcmQgSGFzaCAoU0hBNTEyKQ0KK3R5cGUucGFzc3dvcmQ9UGFzc3dvcmQgSGFzaA0KIHJvbGUuc3RhdGxpbmU9VGhlcmUgYXJlIHsxfSB1c2VyKHMpIGFuZCB7Mn0gcm9sZShzKSBhcnJhbmdlZCBpbiB7MH0gZ3JvdXBzLg0KIHJvbGUuaGVscC5pbml0aWFsPVwNCiAtIFNlbGVjdCBhIHJvbGUgb24gdGhlIGxlZnQgc2lkZSB0byBvcGVuIGl0IGFuZCBlZGl0IGl0J3MgcHJvcGVydGllcyBhbmQgY3JlZGVudGlhbHM8YnIvPlwNCmRpZmYgLS1naXQgYS93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9PU0dJLUlORi9sMTBuL2J1bmRsZV9iZy5wcm9wZXJ0aWVzIGIvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvT1NHSS1JTkYvbDEwbi9idW5kbGVfYmcucHJvcGVydGllcwppbmRleCA3NDY4ODdiLi5lZjM5N2FlIDEwMDY0NAotLS0gYS93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9PU0dJLUlORi9sMTBuL2J1bmRsZV9iZy5wcm9wZXJ0aWVzCisrKyBiL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL09TR0ktSU5GL2wxMG4vYnVuZGxlX2JnLnByb3BlcnRpZXMKQEAgLTM5LDEwICszOSw3IEBACiByb2xlLnR5cGUuMj3Qk9GA0YPQv9CwDQogdHlwZS5zdHJpbmc90J3QuNC3DQogdHlwZS5ieXRlcz3QlNCw0L3QvdC4DQotdHlwZS5wYXNzd29yZC1NRDU90J/QsNGA0L7Qu9CwIChNRDUpDQotdHlwZS5wYXNzd29yZC1TSEExPdCf0LDRgNC+0LvQsCAoU0hBLTEpDQotdHlwZS5wYXNzd29yZC1TSEEyNTY90J/QsNGA0L7Qu9CwIChTSEEyNTYpDQotdHlwZS5wYXNzd29yZC1TSEE1MTI90J/QsNGA0L7Qu9CwIChTSEE1MTIpDQordHlwZS5wYXNzd29yZD3Qn9Cw0YDQvtC70LANCiByb2xlLnN0YXRsaW5lPdCY0LzQsCB7MX0g0L/QvtGC0YDQtdCx0LjRgtC10Lso0Y8pINC4IHsyfSDRgNC+0LvQuCDQvtGA0LPQsNC90LjQt9C40YDQsNC90Lgg0LIgezB9INCz0YDRg9C/0LguDQogcm9sZS5oZWxwLmluaXRpYWw9XA0KIC0g0JjQt9Cx0LXRgNC10YLQtSDRgNC+0LvRjyDQvtGCINC70Y/QstC+LCDQt9CwINC00LAg0Y8g0L7RgtCy0L7RgNC40YLQtSDQuCDQv9GA0L7QvNC10L3QuNGC0LUg0L3QtdC50L3QuNGC0LUg0LDRgtGA0LjQsdGD0YLQuDxici8+XA0KZGlmZiAtLWdpdCBhL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9jcnlwdG8tanMtMy4wLjIvY29yZS1taW4uanMgYi93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9yZXMvY3J5cHRvLWpzLTMuMC4yL2NvcmUtbWluLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWU1N2NjLi4wMDAwMDAwCi0tLSBhL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9jcnlwdG8tanMtMy4wLjIvY29yZS1taW4uanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0vKgotQ3J5cHRvSlMgdjMuMC4yCi1jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMKLShjKSAyMDA5LTIwMTIgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZQotKi8KLXZhciBDcnlwdG9KUz1DcnlwdG9KU3x8ZnVuY3Rpb24oaCxvKXt2YXIgZj17fSxqPWYubGliPXt9LGs9ai5CYXNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe31yZXR1cm57ZXh0ZW5kOmZ1bmN0aW9uKGIpe2EucHJvdG90eXBlPXRoaXM7dmFyIGM9bmV3IGE7YiYmYy5taXhJbihiKTtjLiRzdXBlcj10aGlzO3JldHVybiBjfSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmV4dGVuZCgpO2EuaW5pdC5hcHBseShhLGFyZ3VtZW50cyk7cmV0dXJuIGF9LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYyBpbiBhKWEuaGFzT3duUHJvcGVydHkoYykmJih0aGlzW2NdPWFbY10pO2EuaGFzT3duUHJvcGVydHkoInRvU3RyaW5nIikmJih0aGlzLnRvU3RyaW5nPWEudG9TdHJpbmcpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRzdXBlci5leHRlbmQodGhpcyl9fX0oKSxpPWouV29yZEFycmF5PWsuZXh0ZW5kKHtpbml0OmZ1bmN0aW9uKGEsYil7YT0KLXRoaXMud29yZHM9YXx8W107dGhpcy5zaWdCeXRlcz1iIT1vP2I6NCphLmxlbmd0aH0sdG9TdHJpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fHApLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMud29yZHMsYz1hLndvcmRzLGQ9dGhpcy5zaWdCeXRlcyxhPWEuc2lnQnl0ZXM7dGhpcy5jbGFtcCgpO2lmKGQlNClmb3IodmFyIGU9MDtlPGE7ZSsrKWJbZCtlPj4+Ml18PShjW2U+Pj4yXT4+PjI0LTgqKGUlNCkmMjU1KTw8MjQtOCooKGQrZSklNCk7ZWxzZSBpZig2NTUzNTxjLmxlbmd0aClmb3IoZT0wO2U8YTtlKz00KWJbZCtlPj4+Ml09Y1tlPj4+Ml07ZWxzZSBiLnB1c2guYXBwbHkoYixjKTt0aGlzLnNpZ0J5dGVzKz1hO3JldHVybiB0aGlzfSxjbGFtcDpmdW5jdGlvbigpe3ZhciBhPXRoaXMud29yZHMsYj10aGlzLnNpZ0J5dGVzO2FbYj4+PjJdJj00Mjk0OTY3Mjk1PDwzMi04KihiJTQpO2EubGVuZ3RoPWguY2VpbChiLzQpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBhPQotay5jbG9uZS5jYWxsKHRoaXMpO2Eud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKTtyZXR1cm4gYX0scmFuZG9tOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhO2MrPTQpYi5wdXNoKDQyOTQ5NjcyOTYqaC5yYW5kb20oKXwwKTtyZXR1cm4gaS5jcmVhdGUoYixhKX19KSxsPWYuZW5jPXt9LHA9bC5IZXg9e3N0cmluZ2lmeTpmdW5jdGlvbihhKXtmb3IodmFyIGI9YS53b3JkcyxhPWEuc2lnQnl0ZXMsYz1bXSxkPTA7ZDxhO2QrKyl7dmFyIGU9YltkPj4+Ml0+Pj4yNC04KihkJTQpJjI1NTtjLnB1c2goKGU+Pj40KS50b1N0cmluZygxNikpO2MucHVzaCgoZSYxNSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gYy5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEubGVuZ3RoLGM9W10sZD0wO2Q8YjtkKz0yKWNbZD4+PjNdfD1wYXJzZUludChhLnN1YnN0cihkLDIpLDE2KTw8MjQtNCooZCU4KTtyZXR1cm4gaS5jcmVhdGUoYyxiLzIpfX0sbj1sLkxhdGluMT17c3RyaW5naWZ5OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0KLWEud29yZHMsYT1hLnNpZ0J5dGVzLGM9W10sZD0wO2Q8YTtkKyspYy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYltkPj4+Ml0+Pj4yNC04KihkJTQpJjI1NSkpO3JldHVybiBjLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9YS5sZW5ndGgsYz1bXSxkPTA7ZDxiO2QrKyljW2Q+Pj4yXXw9KGEuY2hhckNvZGVBdChkKSYyNTUpPDwyNC04KihkJTQpO3JldHVybiBpLmNyZWF0ZShjLGIpfX0scT1sLlV0Zjg9e3N0cmluZ2lmeTpmdW5jdGlvbihhKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUobi5zdHJpbmdpZnkoYSkpKX1jYXRjaChiKXt0aHJvdyBFcnJvcigiTWFsZm9ybWVkIFVURi04IGRhdGEiKTt9fSxwYXJzZTpmdW5jdGlvbihhKXtyZXR1cm4gbi5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYSkpKX19LG09ai5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtPWsuZXh0ZW5kKHtyZXNldDpmdW5jdGlvbigpe3RoaXMuX2RhdGE9aS5jcmVhdGUoKTsKLXRoaXMuX25EYXRhQnl0ZXM9MH0sX2FwcGVuZDpmdW5jdGlvbihhKXsic3RyaW5nIj09dHlwZW9mIGEmJihhPXEucGFyc2UoYSkpO3RoaXMuX2RhdGEuY29uY2F0KGEpO3RoaXMuX25EYXRhQnl0ZXMrPWEuc2lnQnl0ZXN9LF9wcm9jZXNzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2RhdGEsYz1iLndvcmRzLGQ9Yi5zaWdCeXRlcyxlPXRoaXMuYmxvY2tTaXplLGY9ZC8oNCplKSxmPWE/aC5jZWlsKGYpOmgubWF4KChmfDApLXRoaXMuX21pbkJ1ZmZlclNpemUsMCksYT1mKmUsZD1oLm1pbig0KmEsZCk7aWYoYSl7Zm9yKHZhciBnPTA7ZzxhO2crPWUpdGhpcy5fZG9Qcm9jZXNzQmxvY2soYyxnKTtnPWMuc3BsaWNlKDAsYSk7Yi5zaWdCeXRlcy09ZH1yZXR1cm4gaS5jcmVhdGUoZyxkKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgYT1rLmNsb25lLmNhbGwodGhpcyk7YS5fZGF0YT10aGlzLl9kYXRhLmNsb25lKCk7cmV0dXJuIGF9LF9taW5CdWZmZXJTaXplOjB9KTtqLkhhc2hlcj1tLmV4dGVuZCh7aW5pdDpmdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sCi1yZXNldDpmdW5jdGlvbigpe20ucmVzZXQuY2FsbCh0aGlzKTt0aGlzLl9kb1Jlc2V0KCl9LHVwZGF0ZTpmdW5jdGlvbihhKXt0aGlzLl9hcHBlbmQoYSk7dGhpcy5fcHJvY2VzcygpO3JldHVybiB0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbihhKXthJiZ0aGlzLl9hcHBlbmQoYSk7dGhpcy5fZG9GaW5hbGl6ZSgpO3JldHVybiB0aGlzLl9oYXNofSxjbG9uZTpmdW5jdGlvbigpe3ZhciBhPW0uY2xvbmUuY2FsbCh0aGlzKTthLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKTtyZXR1cm4gYX0sYmxvY2tTaXplOjE2LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY3JlYXRlKGMpLmZpbmFsaXplKGIpfX0sX2NyZWF0ZUhtYWNIZWxwZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7cmV0dXJuIHIuSE1BQy5jcmVhdGUoYSxjKS5maW5hbGl6ZShiKX19fSk7dmFyIHI9Zi5hbGdvPXt9O3JldHVybiBmfShNYXRoKTsKZGlmZiAtLWdpdCBhL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9jcnlwdG8tanMtMy4wLjIvbGljZW5zZS50eHQgYi93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9yZXMvY3J5cHRvLWpzLTMuMC4yL2xpY2Vuc2UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjRlYWE2Li4wMDAwMDAwCi0tLSBhL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9jcnlwdG8tanMtMy4wLjIvbGljZW5zZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLakgMjAwOZYyMDEyIGJ5IEplZmYgTW90dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotCi0gICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIG9yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gICAgTmVpdGhlciB0aGUgbmFtZSBDcnlwdG9KUyBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMsIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL2NyeXB0by1qcy0zLjAuMi9tZDUtbWluLmpzIGIvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL2NyeXB0by1qcy0zLjAuMi9tZDUtbWluLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWJhNzdjLi4wMDAwMDAwCi0tLSBhL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9jcnlwdG8tanMtMy4wLjIvbWQ1LW1pbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLS8qCi1DcnlwdG9KUyB2My4wLjIKLWNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcwotKGMpIDIwMDktMjAxMiBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlCi0qLwotKGZ1bmN0aW9uKHEpe2Z1bmN0aW9uIGsoYixjLGEsZixkLGUsZyl7Yj1iKyhjJmF8fmMmZikrZCtnO3JldHVybihiPDxlfGI+Pj4zMi1lKStjfWZ1bmN0aW9uIGwoYixjLGEsZixkLGUsZyl7Yj1iKyhjJmZ8YSZ+ZikrZCtnO3JldHVybihiPDxlfGI+Pj4zMi1lKStjfWZ1bmN0aW9uIG0oYixjLGEsZixkLGUsZyl7Yj1iKyhjXmFeZikrZCtnO3JldHVybihiPDxlfGI+Pj4zMi1lKStjfWZ1bmN0aW9uIG4oYixjLGEsZixkLGUsZyl7Yj1iKyhhXihjfH5mKSkrZCtnO3JldHVybihiPDxlfGI+Pj4zMi1lKStjfXZhciBvPUNyeXB0b0pTLGo9by5saWIscj1qLldvcmRBcnJheSxqPWouSGFzaGVyLHA9by5hbGdvLGk9W107KGZ1bmN0aW9uKCl7Zm9yKHZhciBiPTA7NjQ+YjtiKyspaVtiXT00Mjk0OTY3Mjk2KnEuYWJzKHEuc2luKGIrMSkpfDB9KSgpO3A9cC5NRDU9ai5leHRlbmQoe19kb1Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5faGFzaD1yLmNyZWF0ZShbMTczMjU4NDE5Myw0MDIzMjMzNDE3LAotMjU2MjM4MzEwMiwyNzE3MzM4NzhdKX0sX2RvUHJvY2Vzc0Jsb2NrOmZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBhPTA7MTY+YTthKyspe3ZhciBmPWMrYSxkPWJbZl07YltmXT0oZDw8OHxkPj4+MjQpJjE2NzExOTM1fChkPDwyNHxkPj4+OCkmNDI3ODI1NTM2MH1mb3IodmFyIGY9dGhpcy5faGFzaC53b3JkcyxkPWZbMF0sZT1mWzFdLGc9ZlsyXSxoPWZbM10sYT0wOzY0PmE7YSs9NCkxNj5hPyhkPWsoZCxlLGcsaCxiW2MrYV0sNyxpW2FdKSxoPWsoaCxkLGUsZyxiW2MrYSsxXSwxMixpW2ErMV0pLGc9ayhnLGgsZCxlLGJbYythKzJdLDE3LGlbYSsyXSksZT1rKGUsZyxoLGQsYltjK2ErM10sMjIsaVthKzNdKSk6MzI+YT8oZD1sKGQsZSxnLGgsYltjKyhhKzEpJTE2XSw1LGlbYV0pLGg9bChoLGQsZSxnLGJbYysoYSs2KSUxNl0sOSxpW2ErMV0pLGc9bChnLGgsZCxlLGJbYysoYSsxMSklMTZdLDE0LGlbYSsyXSksZT1sKGUsZyxoLGQsYltjK2ElMTZdLDIwLGlbYSszXSkpOjQ4PmE/KGQ9Ci1tKGQsZSxnLGgsYltjKygzKmErNSklMTZdLDQsaVthXSksaD1tKGgsZCxlLGcsYltjKygzKmErOCklMTZdLDExLGlbYSsxXSksZz1tKGcsaCxkLGUsYltjKygzKmErMTEpJTE2XSwxNixpW2ErMl0pLGU9bShlLGcsaCxkLGJbYysoMyphKzE0KSUxNl0sMjMsaVthKzNdKSk6KGQ9bihkLGUsZyxoLGJbYyszKmElMTZdLDYsaVthXSksaD1uKGgsZCxlLGcsYltjKygzKmErNyklMTZdLDEwLGlbYSsxXSksZz1uKGcsaCxkLGUsYltjKygzKmErMTQpJTE2XSwxNSxpW2ErMl0pLGU9bihlLGcsaCxkLGJbYysoMyphKzUpJTE2XSwyMSxpW2ErM10pKTtmWzBdPWZbMF0rZHwwO2ZbMV09ZlsxXStlfDA7ZlsyXT1mWzJdK2d8MDtmWzNdPWZbM10raHwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuX2RhdGEsYz1iLndvcmRzLGE9OCp0aGlzLl9uRGF0YUJ5dGVzLGY9OCpiLnNpZ0J5dGVzO2NbZj4+PjVdfD0xMjg8PDI0LWYlMzI7Y1soZis2ND4+Pjk8PDQpKzE0XT0oYTw8OHxhPj4+Ci0yNCkmMTY3MTE5MzV8KGE8PDI0fGE+Pj44KSY0Mjc4MjU1MzYwO2Iuc2lnQnl0ZXM9NCooYy5sZW5ndGgrMSk7dGhpcy5fcHJvY2VzcygpO2I9dGhpcy5faGFzaC53b3Jkcztmb3IoYz0wOzQ+YztjKyspYT1iW2NdLGJbY109KGE8PDh8YT4+PjI0KSYxNjcxMTkzNXwoYTw8MjR8YT4+PjgpJjQyNzgyNTUzNjB9fSk7by5NRDU9ai5fY3JlYXRlSGVscGVyKHApO28uSG1hY01ENT1qLl9jcmVhdGVIbWFjSGVscGVyKHApfSkoTWF0aCk7CmRpZmYgLS1naXQgYS93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9yZXMvY3J5cHRvLWpzLTMuMC4yL3NoYTEtbWluLmpzIGIvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL2NyeXB0by1qcy0zLjAuMi9zaGExLW1pbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFhYzU2Mi4uMDAwMDAwMAotLS0gYS93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9yZXMvY3J5cHRvLWpzLTMuMC4yL3NoYTEtbWluLmpzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0vKgotQ3J5cHRvSlMgdjMuMC4yCi1jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMKLShjKSAyMDA5LTIwMTIgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZQotKi8KLShmdW5jdGlvbigpe3ZhciBkPUNyeXB0b0pTLGM9ZC5saWIsbD1jLldvcmRBcnJheSxjPWMuSGFzaGVyLGo9W10saz1kLmFsZ28uU0hBMT1jLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPWwuY3JlYXRlKFsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oYyxtKXtmb3IodmFyIGE9dGhpcy5faGFzaC53b3JkcyxlPWFbMF0sZj1hWzFdLGg9YVsyXSxpPWFbM10sZD1hWzRdLGI9MDs4MD5iO2IrKyl7aWYoMTY+YilqW2JdPWNbbStiXXwwO2Vsc2V7dmFyIGc9altiLTNdXmpbYi04XV5qW2ItMTRdXmpbYi0xNl07altiXT1nPDwxfGc+Pj4zMX1nPShlPDw1fGU+Pj4yNykrZCtqW2JdO2c9MjA+Yj9nKygoZiZofH5mJmkpKzE1MTg1MDAyNDkpOjQwPmI/ZysoKGZeaF5pKSsxODU5Nzc1MzkzKTo2MD5iP2crKChmJmh8ZiZpfGgmaSktMTg5NDAwNzU4OCk6ZysoKGZeaF5pKS0KLTg5OTQ5NzUxNCk7ZD1pO2k9aDtoPWY8PDMwfGY+Pj4yO2Y9ZTtlPWd9YVswXT1hWzBdK2V8MDthWzFdPWFbMV0rZnwwO2FbMl09YVsyXStofDA7YVszXT1hWzNdK2l8MDthWzRdPWFbNF0rZHwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuX2RhdGEsYz1kLndvcmRzLGE9OCp0aGlzLl9uRGF0YUJ5dGVzLGU9OCpkLnNpZ0J5dGVzO2NbZT4+PjVdfD0xMjg8PDI0LWUlMzI7Y1soZSs2ND4+Pjk8PDQpKzE1XT1hO2Quc2lnQnl0ZXM9NCpjLmxlbmd0aDt0aGlzLl9wcm9jZXNzKCl9fSk7ZC5TSEExPWMuX2NyZWF0ZUhlbHBlcihrKTtkLkhtYWNTSEExPWMuX2NyZWF0ZUhtYWNIZWxwZXIoayl9KSgpOwpkaWZmIC0tZ2l0IGEvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL2NyeXB0by1qcy0zLjAuMi9zaGEyNTYtbWluLmpzIGIvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL2NyeXB0by1qcy0zLjAuMi9zaGEyNTYtbWluLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDlkYzQyLi4wMDAwMDAwCi0tLSBhL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9jcnlwdG8tanMtMy4wLjIvc2hhMjU2LW1pbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotLyoKLUNyeXB0b0pTIHYzLjAuMgotY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzCi0oYykgMjAwOS0yMDEyIGJ5IEplZmYgTW90dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLWNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2UKLSovCi0oZnVuY3Rpb24oayl7dmFyIGg9Q3J5cHRvSlMsaT1oLmxpYixyPWkuV29yZEFycmF5LGk9aS5IYXNoZXIsYz1oLmFsZ28scD1bXSxxPVtdOyhmdW5jdGlvbigpe2Z1bmN0aW9uIGcoYSl7Zm9yKHZhciBiPWsuc3FydChhKSxkPTI7ZDw9YjtkKyspaWYoIShhJWQpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGQoYSl7cmV0dXJuIDQyOTQ5NjcyOTYqKGEtKGF8MCkpfDB9Zm9yKHZhciBhPTIsYj0wOzY0PmI7KWcoYSkmJig4PmImJihwW2JdPWQoay5wb3coYSwwLjUpKSkscVtiXT1kKGsucG93KGEsMS8zKSksYisrKSxhKyt9KSgpO3ZhciBnPVtdLGM9Yy5TSEEyNTY9aS5leHRlbmQoe19kb1Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5faGFzaD1yLmNyZWF0ZShwLnNsaWNlKDApKX0sX2RvUHJvY2Vzc0Jsb2NrOmZ1bmN0aW9uKGksZCl7Zm9yKHZhciBhPXRoaXMuX2hhc2gud29yZHMsYj1hWzBdLG09YVsxXSxuPWFbMl0saD1hWzNdLGY9YVs0XSxjPWFbNV0sbz1hWzZdLGs9YVs3XSxlPTA7NjQ+Ci1lO2UrKyl7aWYoMTY+ZSlnW2VdPWlbZCtlXXwwO2Vsc2V7dmFyIGo9Z1tlLTE1XSxsPWdbZS0yXTtnW2VdPSgoajw8MjV8aj4+PjcpXihqPDwxNHxqPj4+MTgpXmo+Pj4zKStnW2UtN10rKChsPDwxNXxsPj4+MTcpXihsPDwxM3xsPj4+MTkpXmw+Pj4xMCkrZ1tlLTE2XX1qPWsrKChmPDwyNnxmPj4+NileKGY8PDIxfGY+Pj4xMSleKGY8PDd8Zj4+PjI1KSkrKGYmY15+ZiZvKStxW2VdK2dbZV07bD0oKGI8PDMwfGI+Pj4yKV4oYjw8MTl8Yj4+PjEzKV4oYjw8MTB8Yj4+PjIyKSkrKGImbV5iJm5ebSZuKTtrPW87bz1jO2M9ZjtmPWgranwwO2g9bjtuPW07bT1iO2I9aitsfDB9YVswXT1hWzBdK2J8MDthWzFdPWFbMV0rbXwwO2FbMl09YVsyXStufDA7YVszXT1hWzNdK2h8MDthWzRdPWFbNF0rZnwwO2FbNV09YVs1XStjfDA7YVs2XT1hWzZdK298MDthWzddPWFbN10ra3wwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuX2RhdGEsZD1jLndvcmRzLGE9OCp0aGlzLl9uRGF0YUJ5dGVzLAotYj04KmMuc2lnQnl0ZXM7ZFtiPj4+NV18PTEyODw8MjQtYiUzMjtkWyhiKzY0Pj4+OTw8NCkrMTVdPWE7Yy5zaWdCeXRlcz00KmQubGVuZ3RoO3RoaXMuX3Byb2Nlc3MoKX19KTtoLlNIQTI1Nj1pLl9jcmVhdGVIZWxwZXIoYyk7aC5IbWFjU0hBMjU2PWkuX2NyZWF0ZUhtYWNIZWxwZXIoYyl9KShNYXRoKTsKZGlmZiAtLWdpdCBhL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9jcnlwdG8tanMtMy4wLjIvc2hhNTEyLW1pbi5qcyBiL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9jcnlwdG8tanMtMy4wLjIvc2hhNTEyLW1pbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNiOGFkOC4uMDAwMDAwMAotLS0gYS93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9yZXMvY3J5cHRvLWpzLTMuMC4yL3NoYTUxMi1taW4uanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKgotQ3J5cHRvSlMgdjMuMC4yCi1jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMKLShjKSAyMDA5LTIwMTIgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZQotKi8KLShmdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtyZXR1cm4gdi5jcmVhdGUuYXBwbHkodixhcmd1bWVudHMpfXZhciBkPUNyeXB0b0pTLHI9ZC5saWIuSGFzaGVyLGU9ZC54NjQsdj1lLldvcmQsUz1lLldvcmRBcnJheSxlPWQuYWxnbyxkYT1bYSgxMTE2MzUyNDA4LDM2MDk3Njc0NTgpLGEoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLGEoMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5KSxhKDM5MjEwMDk1NzMsMjE3MzI5NTU0OCksYSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksYSgxNTA4OTcwOTkzLDMwNTM4MzQyNjUpLGEoMjQ1MzYzNTc0OCwyOTM3NjcxNTc5KSxhKDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksYSgzNjI0MzgxMDgwLDI3MzQ4ODMzOTQpLGEoMzEwNTk4NDAxLDExNjQ5OTY1NDIpLGEoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLGEoMTQyNjg4MTk4NywzNTkwMzA0OTk0KSxhKDE5MjUwNzgzODgsNDA2ODE4MjM4MyksYSgyMTYyMDc4MjA2LDk5MTMzNjExMyksYSgyNjE0ODg4MTAzLDYzMzgwMzMxNyksCi1hKDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCksYSgzODM1MzkwNDAxLDI2NjY2MTM0NTgpLGEoNDAyMjIyNDc3NCw5NDQ3MTExMzkpLGEoMjY0MzQ3MDc4LDIzNDEyNjI3NzMpLGEoNjA0ODA3NjI4LDIwMDc4MDA5MzMpLGEoNzcwMjU1OTgzLDE0OTU5OTA5MDEpLGEoMTI0OTE1MDEyMiwxODU2NDMxMjM1KSxhKDE1NTUwODE2OTIsMzE3NTIxODEzMiksYSgxOTk2MDY0OTg2LDIxOTg5NTA4MzcpLGEoMjU1NDIyMDg4MiwzOTk5NzE5MzM5KSxhKDI4MjE4MzQzNDksNzY2Nzg0MDE2KSxhKDI5NTI5OTY4MDgsMjU2NjU5NDg3OSksYSgzMjEwMzEzNjcxLDMyMDMzMzc5NTYpLGEoMzMzNjU3MTg5MSwxMDM0NDU3MDI2KSxhKDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSksYSgxMTM5MjY5OTMsMzc1ODMyNjM4MyksYSgzMzgyNDE4OTUsMTY4NzE3OTM2KSxhKDY2NjMwNzIwNSwxMTg4MTc5OTY0KSxhKDc3MzUyOTkxMiwxNTQ2MDQ1NzM0KSxhKDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSksYSgxMzk2MTgyMjkxLAotMjY0MzgzMzgyMyksYSgxNjk1MTgzNzAwLDIzNDM1MjczOTApLGEoMTk4NjY2MTA1MSwxMDE0NDc3NDgwKSxhKDIxNzcwMjYzNTAsMTIwNjc1OTE0MiksYSgyNDU2OTU2MDM3LDM0NDA3NzYyNyksYSgyNzMwNDg1OTIxLDEyOTA4NjM0NjApLGEoMjgyMDMwMjQxMSwzMTU4NDU0MjczKSxhKDMyNTk3MzA4MDAsMzUwNTk1MjY1NyksYSgzMzQ1NzY0NzcxLDEwNjIxNzAwOCksYSgzNTE2MDY1ODE3LDM2MDYwMDgzNDQpLGEoMzYwMDM1MjgwNCwxNDMyNzI1Nzc2KSxhKDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCksYSgyNzU0MjMzNDQsODUxMTY5NzIwKSxhKDQzMDIyNzczNCwzMTAwODIzNzUyKSxhKDUwNjk0ODYxNiwxMzYzMjU4MTk1KSxhKDY1OTA2MDU1NiwzNzUwNjg1NTkzKSxhKDg4Mzk5Nzg3NywzNzg1MDUwMjgwKSxhKDk1ODEzOTU3MSwzMzE4MzA3NDI3KSxhKDEzMjI4MjIyMTgsMzgxMjcyMzQwMyksYSgxNTM3MDAyMDYzLDIwMDMwMzQ5OTUpLGEoMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5KSwKLWEoMTk1NTU2MjIyMiwxNTc1OTkwMDEyKSxhKDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCksYSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLGEoMjM2MTg1MjQyNCw0NDI3NzYwNDQpLGEoMjQyODQzNjQ3NCw1OTM2OTgzNDQpLGEoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxhKDMyMDQwMzE0NzksMjk5OTM1MTU3MyksYSgzMzI5MzI1Mjk4LDM4MTU5MjA0MjcpLGEoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxhKDM1MTUyNjcyNzEsNTY2MjgwNzExKSxhKDM5NDAxODc2MDYsMzQ1NDA2OTUzNCksYSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLGEoMTE2NDE4NDc0LDE5MTQxMzg1NTQpLGEoMTc0MjkyNDIxLDI3MzEwNTUyNzApLGEoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLGEoNDYwMzkzMjY5LDMyMDYyMDMxNSksYSg2ODU0NzE3MzMsNTg3NDk2ODM2KSxhKDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxhKDEwMTcwMzYyOTgsMzY1NTQzMTAwKSxhKDExMjYwMDA1ODAsMjYxODI5NzY3NiksYSgxMjg4MDMzNDcwLAotMzQwOTg1NTE1OCksYSgxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYpLGEoMTYwNzE2NzkxNSw5ODcxNjc0NjgpLGEoMTgxNjQwMjMxNiwxMjQ2MTg5NTkxKV0scz1bXTsoZnVuY3Rpb24oKXtmb3IodmFyIFQ9MDs4MD5UO1QrKylzW1RdPWEoKX0pKCk7ZT1lLlNIQTUxMj1yLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPVMuY3JlYXRlKFthKDE3NzkwMzM3MDMsNDA4OTIzNTcyMCksYSgzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUpLGEoMTAxMzkwNDI0Miw0MjcxMTc1NzIzKSxhKDI3NzM0ODA3NjIsMTU5NTc1MDEyOSksYSgxMzU5ODkzMTE5LDI5MTc1NjUxMzcpLGEoMjYwMDgyMjkyNCw3MjU1MTExOTkpLGEoNTI4NzM0NjM1LDQyMTUzODk1NDcpLGEoMTU0MTQ1OTIyNSwzMjcwMzMyMDkpXSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbihhLGUpe2Zvcih2YXIgZj10aGlzLl9oYXNoLndvcmRzLEM9ZlswXSxkPWZbMV0sRD1mWzJdLEU9ZlszXSxGPWZbNF0sRz1mWzVdLEg9Ci1mWzZdLGY9Zls3XSxyPUMuaGlnaCxJPUMubG93LHY9ZC5oaWdoLEo9ZC5sb3csWD1ELmhpZ2gsSz1ELmxvdyxZPUUuaGlnaCxMPUUubG93LFo9Ri5oaWdoLE09Ri5sb3csJD1HLmhpZ2gsTj1HLmxvdyxhYT1ILmhpZ2gsTz1ILmxvdyxiYT1mLmhpZ2gsUD1mLmxvdyxqPXIsZz1JLHc9dix0PUoseD1YLHU9SyxVPVkseT1MLGs9WixoPU0sUT0kLHo9TixSPWFhLEE9TyxWPWJhLEI9UCxsPTA7ODA+bDtsKyspe3ZhciBvPXNbbF07aWYoMTY+bCl2YXIgaT1vLmhpZ2g9YVtlKzIqbF18MCxiPW8ubG93PWFbZSsyKmwrMV18MDtlbHNle3ZhciBpPXNbbC0xNV0sYj1pLmhpZ2gsbT1pLmxvdyxpPShtPDwzMXxiPj4+MSleKG08PDI0fGI+Pj44KV5iPj4+NyxtPShiPDwzMXxtPj4+MSleKGI8PDI0fG0+Pj44KV4oYjw8MjV8bT4+PjcpLHE9c1tsLTJdLGI9cS5oaWdoLGM9cS5sb3cscT0oYzw8MTN8Yj4+PjE5KV4oYjw8M3xjPj4+MjkpXmI+Pj42LGM9KGI8PDEzfGM+Pj4xOSleKGM8PDN8Yj4+PjI5KV4KLShiPDwyNnxjPj4+NiksYj1zW2wtN10sVz1iLmhpZ2gscD1zW2wtMTZdLG49cC5oaWdoLHA9cC5sb3csYj1tK2IubG93LGk9aStXKyhiPj4+MDxtPj4+MD8xOjApLGI9YitjLGk9aStxKyhiPj4+MDxjPj4+MD8xOjApLGI9YitwLGk9aStuKyhiPj4+MDxwPj4+MD8xOjApO28uaGlnaD1pO28ubG93PWJ9dmFyIFc9ayZRXn5rJlIscD1oJnpefmgmQSxvPWomd15qJnhedyZ4LFM9ZyZ0XmcmdV50JnUsbT0oZzw8NHxqPj4+MjgpXihqPDwzMHxnPj4+MileKGo8PDI1fGc+Pj43KSxxPShqPDw0fGc+Pj4yOCleKGc8PDMwfGo+Pj4yKV4oZzw8MjV8aj4+PjcpLGM9ZGFbbF0sZWE9Yy5oaWdoLGNhPWMubG93LGM9QisoKGs8PDE4fGg+Pj4xNCleKGs8PDE0fGg+Pj4xOCleKGg8PDIzfGs+Pj45KSksbj1WKygoaDw8MTh8az4+PjE0KV4oaDw8MTR8az4+PjE4KV4oazw8MjN8aD4+PjkpKSsoYz4+PjA8Qj4+PjA/MTowKSxjPWMrcCxuPW4rVysoYz4+PjA8cD4+PjA/MTowKSxjPWMrY2Esbj1uK2VhKwotKGM+Pj4wPGNhPj4+MD8xOjApLGM9YytiLG49bitpKyhjPj4+MDxiPj4+MD8xOjApLGI9cStTLG89bStvKyhiPj4+MDxxPj4+MD8xOjApLFY9UixCPUEsUj1RLEE9eixRPWssej1oLGg9eStjfDAsaz1VK24rKGg+Pj4wPHk+Pj4wPzE6MCl8MCxVPXgseT11LHg9dyx1PXQsdz1qLHQ9ZyxnPWMrYnwwLGo9bitvKyhnPj4+MDxjPj4+MD8xOjApfDB9ST1DLmxvdz1JK2d8MDtDLmhpZ2g9citqKyhJPj4+MDxnPj4+MD8xOjApfDA7Sj1kLmxvdz1KK3R8MDtkLmhpZ2g9dit3KyhKPj4+MDx0Pj4+MD8xOjApfDA7Sz1ELmxvdz1LK3V8MDtELmhpZ2g9WCt4KyhLPj4+MDx1Pj4+MD8xOjApfDA7TD1FLmxvdz1MK3l8MDtFLmhpZ2g9WStVKyhMPj4+MDx5Pj4+MD8xOjApfDA7TT1GLmxvdz1NK2h8MDtGLmhpZ2g9WitrKyhNPj4+MDxoPj4+MD8xOjApfDA7Tj1HLmxvdz1OK3p8MDtHLmhpZ2g9JCtRKyhOPj4+MDx6Pj4+MD8xOjApfDA7Tz1ILmxvdz1PK0F8MDtILmhpZ2g9YWErUisoTz4+PjA8QT4+PgotMD8xOjApfDA7UD1mLmxvdz1QK0J8MDtmLmhpZ2g9YmErVisoUD4+PjA8Qj4+PjA/MTowKXwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2RhdGEsZD1hLndvcmRzLGY9OCp0aGlzLl9uRGF0YUJ5dGVzLGU9OCphLnNpZ0J5dGVzO2RbZT4+PjVdfD0xMjg8PDI0LWUlMzI7ZFsoZSsxMjg+Pj4xMDw8NSkrMzFdPWY7YS5zaWdCeXRlcz00KmQubGVuZ3RoO3RoaXMuX3Byb2Nlc3MoKTt0aGlzLl9oYXNoPXRoaXMuX2hhc2gudG9YMzIoKX0sYmxvY2tTaXplOjMyfSk7ZC5TSEE1MTI9ci5fY3JlYXRlSGVscGVyKGUpO2QuSG1hY1NIQTUxMj1yLl9jcmVhdGVIbWFjSGVscGVyKGUpfSkoKTsKZGlmZiAtLWdpdCBhL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9jcnlwdG8tanMtMy4wLjIveDY0LWNvcmUtbWluLmpzIGIvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL2NyeXB0by1qcy0zLjAuMi94NjQtY29yZS1taW4uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NTRiZmUuLjAwMDAwMDAKLS0tIGEvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL2NyeXB0by1qcy0zLjAuMi94NjQtY29yZS1taW4uanMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLS8qCi1DcnlwdG9KUyB2My4wLjIKLWNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcwotKGMpIDIwMDktMjAxMiBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlCi0qLwotKGZ1bmN0aW9uKGcpe3ZhciBhPUNyeXB0b0pTLGY9YS5saWIsZT1mLkJhc2UsaD1mLldvcmRBcnJheSxhPWEueDY0PXt9O2EuV29yZD1lLmV4dGVuZCh7aW5pdDpmdW5jdGlvbihiLGMpe3RoaXMuaGlnaD1iO3RoaXMubG93PWN9fSk7YS5Xb3JkQXJyYXk9ZS5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oYixjKXtiPXRoaXMud29yZHM9Ynx8W107dGhpcy5zaWdCeXRlcz1jIT1nP2M6OCpiLmxlbmd0aH0sdG9YMzI6ZnVuY3Rpb24oKXtmb3IodmFyIGI9dGhpcy53b3JkcyxjPWIubGVuZ3RoLGE9W10sZD0wO2Q8YztkKyspe3ZhciBlPWJbZF07YS5wdXNoKGUuaGlnaCk7YS5wdXNoKGUubG93KX1yZXR1cm4gaC5jcmVhdGUoYSx0aGlzLnNpZ0J5dGVzKX0sY2xvbmU6ZnVuY3Rpb24oKXtmb3IodmFyIGI9ZS5jbG9uZS5jYWxsKHRoaXMpLGM9Yi53b3Jkcz10aGlzLndvcmRzLnNsaWNlKDApLGE9Yy5sZW5ndGgsZD0wO2Q8YTtkKyspY1tkXT1jW2RdLmNsb25lKCk7cmV0dXJuIGJ9fSl9KSgpOwpkaWZmIC0tZ2l0IGEvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL2pzb24yLm1pbi5qcyBiL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9qc29uMi5taW4uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNjBjMzQuLjAwMDAwMDAKLS0tIGEvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL2pzb24yLm1pbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qIGh0dHA6Ly93d3cuSlNPTi5vcmcvanNvbjIuanMgKi8NCi1pZighdGhpcy5KU09OKXt0aGlzLkpTT049e307fQ0KLShmdW5jdGlvbigpe2Z1bmN0aW9uIGYobil7cmV0dXJuIG48MTA/JzAnK246bjt9DQotaWYodHlwZW9mIERhdGUucHJvdG90eXBlLnRvSlNPTiE9PSdmdW5jdGlvbicpe0RhdGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbihrZXkpe3JldHVybiBpc0Zpbml0ZSh0aGlzLnZhbHVlT2YoKSk/dGhpcy5nZXRVVENGdWxsWWVhcigpKyctJysNCi1mKHRoaXMuZ2V0VVRDTW9udGgoKSsxKSsnLScrDQotZih0aGlzLmdldFVUQ0RhdGUoKSkrJ1QnKw0KLWYodGhpcy5nZXRVVENIb3VycygpKSsnOicrDQotZih0aGlzLmdldFVUQ01pbnV0ZXMoKSkrJzonKw0KLWYodGhpcy5nZXRVVENTZWNvbmRzKCkpKydaJzpudWxsO307U3RyaW5nLnByb3RvdHlwZS50b0pTT049TnVtYmVyLnByb3RvdHlwZS50b0pTT049Qm9vbGVhbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGtleSl7cmV0dXJuIHRoaXMudmFsdWVPZigpO307fQ0KLXZhciBjeD0vW1x1MDAwMFx1MDBhZFx1MDYwMC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZmXS9nLGVzY2FwYWJsZT0vW1xcXCJceDAwLVx4MWZceDdmLVx4OWZcdTAwYWRcdTA2MDAtXHUwNjA0XHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBjLVx1MjAwZlx1MjAyOC1cdTIwMmZcdTIwNjAtXHUyMDZmXHVmZWZmXHVmZmYwLVx1ZmZmZl0vZyxnYXAsaW5kZW50LG1ldGE9eydcYic6J1xcYicsJ1x0JzonXFx0JywnXG4nOidcXG4nLCdcZic6J1xcZicsJ1xyJzonXFxyJywnIic6J1xcIicsJ1xcJzonXFxcXCd9LHJlcDtmdW5jdGlvbiBxdW90ZShzdHJpbmcpe2VzY2FwYWJsZS5sYXN0SW5kZXg9MDtyZXR1cm4gZXNjYXBhYmxlLnRlc3Qoc3RyaW5nKT8nIicrc3RyaW5nLnJlcGxhY2UoZXNjYXBhYmxlLGZ1bmN0aW9uKGEpe3ZhciBjPW1ldGFbYV07cmV0dXJuIHR5cGVvZiBjPT09J3N0cmluZyc/YzonXFx1JysoJzAwMDAnK2EuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTt9KSsnIic6JyInK3N0cmluZysnIic7fQ0KLWZ1bmN0aW9uIHN0cihrZXksaG9sZGVyKXt2YXIgaSxrLHYsbGVuZ3RoLG1pbmQ9Z2FwLHBhcnRpYWwsdmFsdWU9aG9sZGVyW2tleV07aWYodmFsdWUmJnR5cGVvZiB2YWx1ZT09PSdvYmplY3QnJiZ0eXBlb2YgdmFsdWUudG9KU09OPT09J2Z1bmN0aW9uJyl7dmFsdWU9dmFsdWUudG9KU09OKGtleSk7fQ0KLWlmKHR5cGVvZiByZXA9PT0nZnVuY3Rpb24nKXt2YWx1ZT1yZXAuY2FsbChob2xkZXIsa2V5LHZhbHVlKTt9DQotc3dpdGNoKHR5cGVvZiB2YWx1ZSl7Y2FzZSdzdHJpbmcnOnJldHVybiBxdW90ZSh2YWx1ZSk7Y2FzZSdudW1iZXInOnJldHVybiBpc0Zpbml0ZSh2YWx1ZSk/U3RyaW5nKHZhbHVlKTonbnVsbCc7Y2FzZSdib29sZWFuJzpjYXNlJ251bGwnOnJldHVybiBTdHJpbmcodmFsdWUpO2Nhc2Unb2JqZWN0JzppZighdmFsdWUpe3JldHVybidudWxsJzt9DQotZ2FwKz1pbmRlbnQ7cGFydGlhbD1bXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKT09PSdbb2JqZWN0IEFycmF5XScpe2xlbmd0aD12YWx1ZS5sZW5ndGg7Zm9yKGk9MDtpPGxlbmd0aDtpKz0xKXtwYXJ0aWFsW2ldPXN0cihpLHZhbHVlKXx8J251bGwnO30NCi12PXBhcnRpYWwubGVuZ3RoPT09MD8nW10nOmdhcD8nW1xuJytnYXArDQotcGFydGlhbC5qb2luKCcsXG4nK2dhcCkrJ1xuJysNCi1taW5kKyddJzonWycrcGFydGlhbC5qb2luKCcsJykrJ10nO2dhcD1taW5kO3JldHVybiB2O30NCi1pZihyZXAmJnR5cGVvZiByZXA9PT0nb2JqZWN0Jyl7bGVuZ3RoPXJlcC5sZW5ndGg7Zm9yKGk9MDtpPGxlbmd0aDtpKz0xKXtrPXJlcFtpXTtpZih0eXBlb2Ygaz09PSdzdHJpbmcnKXt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8nOiAnOic6Jykrdik7fX19fWVsc2V7Zm9yKGsgaW4gdmFsdWUpe2lmKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLGspKXt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8nOiAnOic6Jykrdik7fX19fQ0KLXY9cGFydGlhbC5sZW5ndGg9PT0wPyd7fSc6Z2FwPyd7XG4nK2dhcCtwYXJ0aWFsLmpvaW4oJyxcbicrZ2FwKSsnXG4nKw0KLW1pbmQrJ30nOid7JytwYXJ0aWFsLmpvaW4oJywnKSsnfSc7Z2FwPW1pbmQ7cmV0dXJuIHY7fX0NCi1pZih0eXBlb2YgSlNPTi5zdHJpbmdpZnkhPT0nZnVuY3Rpb24nKXtKU09OLnN0cmluZ2lmeT1mdW5jdGlvbih2YWx1ZSxyZXBsYWNlcixzcGFjZSl7dmFyIGk7Z2FwPScnO2luZGVudD0nJztpZih0eXBlb2Ygc3BhY2U9PT0nbnVtYmVyJyl7Zm9yKGk9MDtpPHNwYWNlO2krPTEpe2luZGVudCs9JyAnO319ZWxzZSBpZih0eXBlb2Ygc3BhY2U9PT0nc3RyaW5nJyl7aW5kZW50PXNwYWNlO30NCi1yZXA9cmVwbGFjZXI7aWYocmVwbGFjZXImJnR5cGVvZiByZXBsYWNlciE9PSdmdW5jdGlvbicmJih0eXBlb2YgcmVwbGFjZXIhPT0nb2JqZWN0J3x8dHlwZW9mIHJlcGxhY2VyLmxlbmd0aCE9PSdudW1iZXInKSl7dGhyb3cgbmV3IEVycm9yKCdKU09OLnN0cmluZ2lmeScpO30NCi1yZXR1cm4gc3RyKCcnLHsnJzp2YWx1ZX0pO307fQ0KLWlmKHR5cGVvZiBKU09OLnBhcnNlIT09J2Z1bmN0aW9uJyl7SlNPTi5wYXJzZT1mdW5jdGlvbih0ZXh0LHJldml2ZXIpe3ZhciBqO2Z1bmN0aW9uIHdhbGsoaG9sZGVyLGtleSl7dmFyIGssdix2YWx1ZT1ob2xkZXJba2V5XTtpZih2YWx1ZSYmdHlwZW9mIHZhbHVlPT09J29iamVjdCcpe2ZvcihrIGluIHZhbHVlKXtpZihPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSxrKSl7dj13YWxrKHZhbHVlLGspO2lmKHYhPT11bmRlZmluZWQpe3ZhbHVlW2tdPXY7fWVsc2V7ZGVsZXRlIHZhbHVlW2tdO319fX0NCi1yZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRlcixrZXksdmFsdWUpO30NCi10ZXh0PVN0cmluZyh0ZXh0KTtjeC5sYXN0SW5kZXg9MDtpZihjeC50ZXN0KHRleHQpKXt0ZXh0PXRleHQucmVwbGFjZShjeCxmdW5jdGlvbihhKXtyZXR1cm4nXFx1JysNCi0oJzAwMDAnK2EuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTt9KTt9DQotaWYoL15bXF0sOnt9XHNdKiQvLnRlc3QodGV4dC5yZXBsYWNlKC9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csJ0AnKS5yZXBsYWNlKC8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vZywnXScpLnJlcGxhY2UoLyg/Ol58OnwsKSg/OlxzKlxbKSsvZywnJykpKXtqPWV2YWwoJygnK3RleHQrJyknKTtyZXR1cm4gdHlwZW9mIHJldml2ZXI9PT0nZnVuY3Rpb24nP3dhbGsoeycnOmp9LCcnKTpqO30NCi10aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0pTT04ucGFyc2UnKTt9O319KCkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9wbHVnaW4uY3NzIGIvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL3BsdWdpbi5jc3MKaW5kZXggOWVjNWQ5NC4uMmFiOGYyNyAxMDA2NDQKLS0tIGEvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL3BsdWdpbi5jc3MKKysrIGIvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL3BsdWdpbi5jc3MKQEAgLTEsNCArMSwxOSBAQAotLyogeW91ciBjc3MgZGVmaW5pdGlvbnMgaGVyZSAqLw0KKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCiAjdXNlclRyZWUgeyB3aWR0aDogMjAlIH0NCiAjdXNlclRyZWUgbGkgYSB7IHBhZGRpbmctbGVmdDogMTJweCAhIGltcG9ydGFudH0NCiAuaGVhZGVyIHVsIHsgZmxvYXQ6IHJpZ2h0IH0NCmRpZmYgLS1naXQgYS93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9yZXMvcGx1Z2luLmh0bWwgYi93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9yZXMvcGx1Z2luLmh0bWwKaW5kZXggZjA1NjNhNi4uZWVlOTEwMCAxMDA2NDQKLS0tIGEvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL3BsdWdpbi5odG1sCisrKyBiL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9wbHVnaW4uaHRtbApAQCAtMSwxMSArMSw0IEBACiDvu788c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIke3BsdWdpblJvb3R9L3Jlcy9qc1RyZWUudi4wLjkuOWEvanF1ZXJ5LnRyZWUubWluLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IiR7cGx1Z2luUm9vdH0vcmVzL2NyeXB0by1qcy0zLjAuMi9jb3JlLW1pbi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIke3BsdWdpblJvb3R9L3Jlcy9jcnlwdG8tanMtMy4wLjIveDY0LWNvcmUtbWluLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IiR7cGx1Z2luUm9vdH0vcmVzL2NyeXB0by1qcy0zLjAuMi9tZDUtbWluLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IiR7cGx1Z2luUm9vdH0vcmVzL2NyeXB0by1qcy0zLjAuMi9zaGExLW1pbi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIke3BsdWdpblJvb3R9L3Jlcy9jcnlwdG8tanMtMy4wLjIvc2hhMjU2LW1pbi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIke3BsdWdpblJvb3R9L3Jlcy9jcnlwdG8tanMtMy4wLjIvc2hhNTEyLW1pbi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIke3BsdWdpblJvb3R9L3Jlcy9qc29uMi5taW4uanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJHtwbHVnaW5Sb290fS9yZXMvcGx1Z2luLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KIC8vIDwhW0NEQVRBWwpAQCAtMTQsNyArNyw4IEBACiAJY2xvc2UgOiAnJHthYm9ydH0nLAogCWFkZCAgIDogJyR7c2F2ZX0nLAogCXJvb3QgIDogJyR7cm9sZS50cmVlLnJvb3R9JywKLQlzdGF0dXM6ICcke3JvbGUuc3RhdGxpbmV9JworCXN0YXR1czogJyR7cm9sZS5zdGF0bGluZX0nLAorCXBhc3dkIDogJyR7dHlwZS5wYXNzd29yZH0nCiB9CiAvLyBdXT4KIDwvc2NyaXB0PgpAQCAtNzYsMTMgKzcwLDE1IEBACiAJCQkJCQk8dGQ+PGlucHV0IGNsYXNzPSJrIiAvPjwvdGQ+CiAJCQkJCQk8dGQ+PGlucHV0IGNsYXNzPSJ2IiAvPjwvdGQ+CiAJCQkJCQk8dGQ+Ci0JCQkJCQkJPHNlbGVjdCBjbGFzcz0iZHluaG92ZXIiPgorCQkJCQkJCTxzZWxlY3QgY2xhc3M9ImR5bmhvdmVyIHByb3BlcnR5VHlwZSI+CiAJCQkJCQkJCTxvcHRpb24gdmFsdWU9InN0cmluZyI+JHt0eXBlLnN0cmluZ308L29wdGlvbj4KIAkJCQkJCQkJPG9wdGlvbiB2YWx1ZT0iYnl0ZVtdIj4ke3R5cGUuYnl0ZXN9PC9vcHRpb24+CisJCQkJCQkJCTwhLS0KIAkJCQkJCQkJPG9wdGlvbiB2YWx1ZT0icGFzc3dvcmQtTUQ1Ij4ke3R5cGUucGFzc3dvcmQtTUQ1fTwvb3B0aW9uPgogCQkJCQkJCQk8b3B0aW9uIHZhbHVlPSJwYXNzd29yZC1TSEExIj4ke3R5cGUucGFzc3dvcmQtU0hBMX08L29wdGlvbj4KIAkJCQkJCQkJPG9wdGlvbiB2YWx1ZT0icGFzc3dvcmQtU0hBMjU2Ij4ke3R5cGUucGFzc3dvcmQtU0hBMjU2fTwvb3B0aW9uPgogCQkJCQkJCQk8b3B0aW9uIHZhbHVlPSJwYXNzd29yZC1TSEE1MTIiPiR7dHlwZS5wYXNzd29yZC1TSEE1MTJ9PC9vcHRpb24+CisJCQkJCQkJCS0tPgogCQkJCQkJCTwvc2VsZWN0PgogCQkJCQkJPC90ZD4KIAkJCQkJCTx0ZCBjbGFzcz0iYWN0aW9ucyI+CmRpZmYgLS1naXQgYS93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9yZXMvcGx1Z2luLmpzIGIvd2ViY29uc29sZS1wbHVnaW5zL3VzZXJhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL3BsdWdpbi5qcwppbmRleCBkNDc0NDgyLi4yMTRiNWRhIDEwMDY0NAotLS0gYS93ZWJjb25zb2xlLXBsdWdpbnMvdXNlcmFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9yZXMvcGx1Z2luLmpzCisrKyBiL3dlYmNvbnNvbGUtcGx1Z2lucy91c2VyYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9wbHVnaW4uanMKQEAgLTEsNCArMSwyMSBAQAotLyogeW91ciBqYXZhIHNjcmlwdCBjb2RlIGhlcmUgKi8NCisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorLy8gZml4IGZvciBqUXVlcnkgdHJlZSB0byB3b3JrIHdpdGggdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeQ0KK2pRdWVyeS5jdXJDU1MgPSBqUXVlcnkuY3NzOw0KIA0KIHZhciB1c2VyVHJlZSA9IGZhbHNlOw0KIHZhciBzZWxlY3RlZFJvbGUgPSBmYWxzZTsNCkBAIC05NCw2ICsxMTEsMjEgQEAKIH0NCiANCiAkKGZ1bmN0aW9uKCkgew0KKwkvLyByZWFkIHRoZSBhdmFpbGFibGUgZGlnZXN0IGFsZ29yaXRobXMNCisJJC5hamF4KHsNCisJCXR5cGUgICAgOiAiUE9TVCIsDQorCQl1cmwgICAgIDogcGx1Z2luUm9vdCwNCisJCWFzeW5jICAgOiBmYWxzZSwNCisJCWRhdGEgICAgOiB7J2FjdGlvbic6ICdnZXREaWdlc3RBbGdvcml0aG1zJyB9LA0KKwkJZGF0YVR5cGU6ICdqc29uJywNCisJCXN1Y2Nlc3MgOiBmdW5jdGlvbihkYXRhKSB7DQorCQkJdmFyIF9zZWxlY3QgID0gJCgnc2VsZWN0LnByb3BlcnR5VHlwZScpOw0KKwkJCSQuZWFjaChkYXRhLCBmdW5jdGlvbihpZCwgYWxnKSB7DQorCQkJCV9zZWxlY3QuYXBwZW5kKCc8b3B0aW9uIHZhbHVlPSJwYXNzd29yZC17MH0iPnsxfSB7Mn08L29wdGlvbj4nLm1zZ0Zvcm1hdChhbGcsIGkxOG4ucGFzd2QsIGFsZykpOw0KKwkJCX0pOw0KKwkJfQ0KKwl9KTsNCisNCiAJdXNlclRyZWUgPSAkKCcjdXNlclRyZWUnKTsNCiAJcm9sZURldGFpbHMgPSAkKCcjcm9sZURldGFpbHMnKTsNCiAJcm9sZURldGFpbHNUYWJsZSA9IHJvbGVEZXRhaWxzLmZpbmQoJ3RhYmxlJyk7DQpAQCAtMTYzLDYgKzE5NSwyNCBAQAogCX0pLmNsaWNrKCk7DQogfSk7DQogDQorZnVuY3Rpb24gZGlnZXN0KHZhbCwgYWxnKSB7DQorCXZhciBfcmV0ID0gZmFsc2U7DQorCSQuYWpheCh7DQorCQl0eXBlICAgIDogIlBPU1QiLA0KKwkJdXJsICAgICA6IHBsdWdpblJvb3QsDQorCQlhc3luYyAgIDogZmFsc2UsDQorCQlkYXRhICAgIDogew0KKwkJCSdhY3Rpb24nOiAnZGlnZXN0JywgDQorCQkJJ2RhdGEnIDogdmFsLCANCisJCQknYWxnb3JpdGhtJyA6IGFsZw0KKwkJfSwNCisJCWRhdGFUeXBlOiAnanNvbicsDQorCQlzdWNjZXNzIDogZnVuY3Rpb24oZGF0YSkgew0KKwkJCV9yZXQgPSBkYXRhWydlbmNvZGVkJ107DQorCQl9DQorCX0pOw0KKwlyZXR1cm4gX3JldDsNCit9DQogZnVuY3Rpb24gbmV3UHJvcCgpIHsNCiAJdmFyIHRyID0gcm9sZURldGFpbHNUZW1wbGF0ZS5jbG9uZSgpDQogCQkuZmluZCgnbGknKS5jbGljayggZnVuY3Rpb24oKSB7DQpAQCAtMjA3LDggKzI1NywxMCBAQAogCQkJdmFyIHQgPSBfLmZpbmQoJ3NlbGVjdCcpLnZhbCgpOw0KIAkJCQ0KIAkJCWlmICh0LmluZGV4T2YoJ3Bhc3N3b3JkLScpID09IDApIHsNCi0JCQkJdmFyIGhhc2ggPSAgQ3J5cHRvSlNbdC5zdWJzdHJpbmcoOSldKHYpLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpOw0KLQkJCQl2ID0gaGFzaFRvQXJyYXkoaGFzaCk7DQorCQkJCXZhciBoYXNoID0gZGlnZXN0KHYsIHQuc3Vic3RyaW5nKDkpKTsNCisJCQkJLy9DcnlwdG9KU1t0LnN1YnN0cmluZyg5KV0odikudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7DQorCQkJCS8vdiA9IGhhc2hUb0FycmF5KGhhc2gpOw0KKwkJCQl2ID0gaGFzaDsNCiAJCQl9IGVsc2UgaWYgKHQgPT0gJ2J5dGVbXScpIHsNCiAJCQkJdiA9IHN0clRvQXJyYXkodik7DQogCQkJfQ0K