ZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1Vuc3VwcG9ydGVkL0ludFZDNi9OTFNYbGF0L05MU1hsYXQuZHNwIGIvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L05MU1hsYXQvTkxTWGxhdC5kc3AKaW5kZXggN2QzZWQ1MC4uZTJiODg4OCAxMDA2NDQKLS0tIGEvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L05MU1hsYXQvTkxTWGxhdC5kc3AKKysrIGIvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L05MU1hsYXQvTkxTWGxhdC5kc3AKQEAgLTQyLDcgKzQyLDcgQEAKICMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCiAjIFBST1AgVGFyZ2V0X0RpciAiIgogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCi0jIEFERCBDUFAgL25vbG9nbyAvRzYgL01EIC9aYSAvVzMgL0dYIC9PMiAvT2IyIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9JICJcSUNVXEluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTUQgL1phIC9XMyAvR1ggL08yIC9PYjIgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0kgIlxpY3VfMV8zXzFcSW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9GRCAvYwogIyBTVUJUUkFDVCBDUFAgL1lYCiAjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgogIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCkBAIC01MSw3ICs1MSw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvCiBMSU5LMzI9bGluay5leGUKICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBJWERvbS5saWIgSVhVdGlsLmxpYiBJWFBhci5saWIgSVhTQVgubGliIGljdXVjLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjMuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NiAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiIC9saWJwYXRoOiJcSUNVXExpYlxSZWxlYXNlIgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYRG9tLmxpYiBJWFV0aWwubGliIElYUGFyLmxpYiBJWFNBWC5saWIgaWN1dWMubGliIC9ub2xvZ28gL3ZlcnNpb246My4wIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIgL2xpYnBhdGg6IlxpY3VfMV8zXzFcTGliXFJlbGVhc2UiCiAKICFFTFNFSUYgICIkKENGRykiID09ICJOTFNYbGF0IC0gV2luMzIgRGVidWciCiAKQEAgLTY3LDcgKzY3LDcgQEAKICMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCiAjIFBST1AgVGFyZ2V0X0RpciAiIgogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jCi0jIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvWmEgL1czIC9HWCAvWmkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9JICJcSUNVXEluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvWmEgL1czIC9HWCAvWmkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9JICJcaWN1XzFfM18xXEluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRkQgL0daIC9jCiAjIFNVQlRSQUNUIENQUCAvWVgKICMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCiAjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKQEAgLTc2LDcgKzc2LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28KIExJTkszMj1saW5rLmV4ZQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYRG9tLmxpYiBJWFV0aWwubGliIElYUGFyLmxpYiBJWFNBWC5saWIgaWN1dWMubGliIC9ub2xvZ28gL3ZlcnNpb246My4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciIC9saWJwYXRoOiJcSUNVXExpYlxEZWJ1ZyIKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBJWERvbS5saWIgSVhVdGlsLmxpYiBJWFBhci5saWIgSVhTQVgubGliIGljdXVjLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjMuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIiAvbGlicGF0aDoiXGljdV8xXzNfMVxMaWJcRGVidWciCiAKICFFTkRJRiAKIApkaWZmIC0tZ2l0IGEvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L1ZhbGlkYXRvcnMvVmFsaWRhdG9ycy5kc3AgYi9Qcm9qZWN0cy9XaW4zMi9VbnN1cHBvcnRlZC9JbnRWQzYvVmFsaWRhdG9ycy9WYWxpZGF0b3JzLmRzcAppbmRleCA0ZjczYjM3Li5jYWRlZjA3IDEwMDY0NAotLS0gYS9Qcm9qZWN0cy9XaW4zMi9VbnN1cHBvcnRlZC9JbnRWQzYvVmFsaWRhdG9ycy9WYWxpZGF0b3JzLmRzcAorKysgYi9Qcm9qZWN0cy9XaW4zMi9VbnN1cHBvcnRlZC9JbnRWQzYvVmFsaWRhdG9ycy9WYWxpZGF0b3JzLmRzcApAQCAtODIsNyArODIsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbwogTElOSzMyPWxpbmsuZXhlCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYVXRpbC5MaWIgSVhDb3JlLkxpYiBJWFNBWC5MaWIgL25vbG9nbyAvYmFzZToiMHgxMjAwMDAwMCIgL3ZlcnNpb246My4wIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnXElYVmFsLmRsbCIgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIgL2xpYnBhdGg6IlxJQ1VcTGliXERlYnVnIgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYVXRpbC5MaWIgSVhDb3JlLkxpYiBJWFNBWC5MaWIgL25vbG9nbyAvYmFzZToiMHgxMjAwMDAwMCIgL3ZlcnNpb246My4wIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnXElYVmFsLmRsbCIgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKICMgU1VCVFJBQ1QgTElOSzMyIC9wcm9maWxlCiAKICFFTkRJRiAKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1Vuc3VwcG9ydGVkL0ludFZDNi9YTUw0Q1BhcnNlci9YTUw0Q1BhcnNlci5kc3AgYi9Qcm9qZWN0cy9XaW4zMi9VbnN1cHBvcnRlZC9JbnRWQzYvWE1MNENQYXJzZXIvWE1MNENQYXJzZXIuZHNwCmluZGV4IDAwNzYwOWMuLjlmNjc0OTAgMTAwNjQ0Ci0tLSBhL1Byb2plY3RzL1dpbjMyL1Vuc3VwcG9ydGVkL0ludFZDNi9YTUw0Q1BhcnNlci9YTUw0Q1BhcnNlci5kc3AKKysrIGIvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L1hNTDRDUGFyc2VyL1hNTDRDUGFyc2VyLmRzcApAQCAtNTQsNyArNTQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbwogTElOSzMyPWxpbmsuZXhlCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4NgotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYVXRpbC5MaWIgL25vbG9nbyAvYmFzZToiMHgxMTAwMDAwMCIgL3ZlcnNpb246My4wIC9kbGwgL21hcCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlL0lYQ29yZS5kbGwiIC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIgL2xpYnBhdGg6IlxJQ1VcTGliXFJlbGVhc2UiCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgSVhVdGlsLkxpYiAvbm9sb2dvIC9iYXNlOiIweDExMDAwMDAwIiAvdmVyc2lvbjozLjAgL2RsbCAvbWFwIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UvSVhDb3JlLmRsbCIgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgogIyBTVUJUUkFDVCBMSU5LMzIgL3Byb2ZpbGUKIAogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlhNTDRDUGFyc2VyIC0gV2luMzIgRGVidWciCkBAIC04Miw3ICs4Miw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvCiBMSU5LMzI9bGluay5leGUKICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0Ci0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgSVhVdGlsLkxpYiAvbm9sb2dvIC9iYXNlOiIweDExMDAwMDAwIiAvdmVyc2lvbjozLjAgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWcvSVhDb3JlLmRsbCIgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIgL2xpYnBhdGg6IlxJQ1VcTGliXERlYnVnIgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYVXRpbC5MaWIgL25vbG9nbyAvYmFzZToiMHgxMTAwMDAwMCIgL3ZlcnNpb246My4wIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnL0lYQ29yZS5kbGwiIC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCiAjIFNVQlRSQUNUIExJTkszMiAvcHJvZmlsZSAvbWFwCiAKICFFTkRJRiAKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1Vuc3VwcG9ydGVkL0ludFZDNi9YTUxVdGlsL1hNTFV0aWwuZHNwIGIvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L1hNTFV0aWwvWE1MVXRpbC5kc3AKaW5kZXggYjA1MDFlZi4uZmMwMTgyZCAxMDA2NDQKLS0tIGEvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L1hNTFV0aWwvWE1MVXRpbC5kc3AKKysrIGIvUHJvamVjdHMvV2luMzIvVW5zdXBwb3J0ZWQvSW50VkM2L1hNTFV0aWwvWE1MVXRpbC5kc3AKQEAgLTQzLDcgKzQzLDcgQEAKICMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCiAjIFBST1AgVGFyZ2V0X0RpciAiIgogIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJYTUxVVElMX0VYUE9SVFMiIC9ZWCAvRkQgL2MKLSMgQUREIENQUCAvbm9sb2dvIC9HNiAvTUQgL1phIC9XMyAvR1ggL08yIC9PYjIgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0kgIlxpY3VcaW5jbHVkZSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJQUk9KX1hNTFVUSUwiIC9EICJYTUxfVVNFX0lDVV9UUkFOU0NPREVSIiAvRCAiWE1MX1VTRV9XSU4zMl9NU0dMT0FERVIiIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRCAvWmEgL1czIC9HWCAvTzIgL09iMiAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvSSAiXGljdV8xXzNfMVxpbmNsdWRlIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlBST0pfWE1MVVRJTCIgL0QgIlhNTF9VU0VfSUNVX1RSQU5TQ09ERVIiIC9EICJYTUxfVVNFX1dJTjMyX01TR0xPQURFUiIgL0ZEIC9jCiAjIFNVQlRSQUNUIENQUCAvWVgKICMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgogIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgpAQCAtNTQsNyArNTQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbwogTElOSzMyPWxpbmsuZXhlCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4NgotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGljdXVjLmxpYiAvbm9sb2dvIC9iYXNlOiIweDEwMDAwMDAwIiAvdmVyc2lvbjozLjAgL2RsbCAvbWFwIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UvSVhVdGlsLmRsbCIgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIiAvbGlicGF0aDoiXElDVVxMaWJcUmVsZWFzZSIKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBpY3V1Yy5saWIgL25vbG9nbyAvYmFzZToiMHgxMDAwMDAwMCIgL3ZlcnNpb246My4wIC9kbGwgL21hcCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlL0lYVXRpbC5kbGwiIC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIgL2xpYnBhdGg6IlxpY3VfMV8zXzFcTGliXFJlbGVhc2UiCiAjIFNVQlRSQUNUIExJTkszMiAvcHJvZmlsZQogCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiWE1MVXRpbCAtIFdpbjMyIERlYnVnIgpAQCAtNzEsNyArNzEsNyBAQAogIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKICMgUFJPUCBUYXJnZXRfRGlyICIiCiAjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIlhNTFVUSUxfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MKLSMgQUREIENQUCAvbm9sb2dvIC9HNiAvTURkIC9aYSAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9JICJcaWN1XGluY2x1ZGUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiUFJPSl9YTUxVVElMIiAvRCAiWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUiIgL0QgIlhNTF9VU0VfSU5NRU1PUllfTVNHTE9BREVSIiAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvWmEgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvSSAiXGljdV8xXzNfMVxpbmNsdWRlIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlBST0pfWE1MVVRJTCIgL0QgIlhNTF9VU0VfSUNVX1RSQU5TQ09ERVIiIC9EICJYTUxfVVNFX0lOTUVNT1JZX01TR0xPQURFUiIgL0ZEIC9HWiAvYwogIyBTVUJUUkFDVCBDUFAgL1lYCiAjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKICMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKQEAgLTgyLDcgKzgyLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28KIExJTkszMj1saW5rLmV4ZQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBpY3V1Yy5saWIgL25vbG9nbyAvYmFzZToiMHgxMDAwMDAwMCIgL3ZlcnNpb246My4wIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnL0lYVXRpbC5kbGwiIC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciIC9saWJwYXRoOiJcSUNVXExpYlxEZWJ1ZyIKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBpY3V1Yy5saWIgL25vbG9nbyAvYmFzZToiMHgxMDAwMDAwMCIgL3ZlcnNpb246My4wIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnL0lYVXRpbC5kbGwiIC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciIC9saWJwYXRoOiJcaWN1XzFfM18xXExpYlxEZWJ1ZyIKICMgU1VCVFJBQ1QgTElOSzMyIC9wcm9maWxlCiAKICFFTkRJRiAKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0RPTUNvdW50L0RPTUNvdW50LmRzcCBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0RPTUNvdW50L0RPTUNvdW50LmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTI1MDIyCi0tLSAvZGV2L251bGwKKysrIGIvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvRE9NQ291bnQvRE9NQ291bnQuZHNwCkBAIC0wLDAgKzEsOTYgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iRE9NQ291bnQiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKK0NGRz1ET01Db3VudCAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIkRPTUNvdW50Lm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiRE9NQ291bnQubWFrIiBDRkc9IkRPTUNvdW50IC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiRE9NQ291bnQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgIkRPTUNvdW50IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiRE9NQ291bnQgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2Vcb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTUQgL1czIC9HWCAvTzIgL09iMiAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6eWVzIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiRE9NQ291bnQgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1Z1xvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIkRPTUNvdW50IC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiRE9NQ291bnQgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcRE9NQ291bnRcRE9NQ291bnQuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xET01Db3VudFxET01Db3VudC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0RPTU1lbVRlc3QvRE9NTWVtVGVzdC5kc3AgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9ET01NZW1UZXN0L0RPTU1lbVRlc3QuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZWEyNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9ET01NZW1UZXN0L0RPTU1lbVRlc3QuZHNwCkBAIC0wLDAgKzEsMTAyIEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9IkRPTU1lbVRlc3QiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKK0NGRz1ET01NZW1UZXN0IC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiRE9NTWVtVGVzdC5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIkRPTU1lbVRlc3QubWFrIiBDRkc9IkRPTU1lbVRlc3QgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJET01NZW1UZXN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFICJET01NZW1UZXN0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiRE9NTWVtVGVzdCAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliICBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIkRPTU1lbVRlc3QgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1Z1xvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTURkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0QgIl9DT05TT0xFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIkRFVkVOVl9WQ1BQIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvR1ogIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJET01NZW1UZXN0IC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiRE9NTWVtVGVzdCAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlx0ZXN0c1xET01cRE9NTWVtVGVzdFxET01NZW1UZXN0LmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaDtocHA7aHh4O2htO2lubCIKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiCisjIEVuZCBHcm91cAorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9ET01QcmludC9ET01QcmludC5kc3AgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9ET01QcmludC9ET01QcmludC5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkxY2MwOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0RPTVByaW50L0RPTVByaW50LmRzcApAQCAtMCwwICsxLDEwNCBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJET01QcmludCIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKKworQ0ZHPURPTVByaW50IC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiRE9NUHJpbnQubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJET01QcmludC5tYWsiIENGRz0iRE9NUHJpbnQgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJET01QcmludCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAiRE9NUHJpbnQgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJET01QcmludCAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZVxvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRCAvVzMgL0dYIC9PMiAvT2IyIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDp5ZXMgL21hY2hpbmU6STM4NiAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisKKyFFTFNFSUYgICIkKENGRykiID09ICJET01QcmludCAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTURkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0QgIl9DT05TT0xFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIkRFVkVOVl9WQ1BQIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvYworIyBTVUJUUkFDVCBDUFAgL1lYCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjMuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiRE9NUHJpbnQgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJET01QcmludCAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xET01QcmludFxET01QcmludC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXERPTVByaW50XERPTVByaW50LmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcRE9NUHJpbnRcRG9tVHJlZUVycm9yUmVwb3J0ZXIuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xET01QcmludFxEb21UcmVlRXJyb3JSZXBvcnRlci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0RPTVRlc3QvRE9NVGVzdC5kc3AgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9ET01UZXN0L0RPTVRlc3QuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMmQ1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9ET01UZXN0L0RPTVRlc3QuZHNwCkBAIC0wLDAgKzEsMTA1IEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9IkRPTVRlc3QiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKK0NGRz1ET01UZXN0IC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiRE9NVGVzdC5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIkRPTVRlc3QubWFrIiBDRkc9IkRPTVRlc3QgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJET01UZXN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFICJET01UZXN0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiRE9NVGVzdCAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliICBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIkRPTVRlc3QgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1Z1xvYmoiCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daICAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9HWiAgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIkRPTVRlc3QgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJET01UZXN0IC0gV2luMzIgRGVidWciCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHRlc3RzXERPTVxET01UZXN0XERUZXN0LmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaDtocHA7aHh4O2htO2lubCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHRlc3RzXERPTVxET01UZXN0XERUZXN0LmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiUmVzb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlIgorIyBFbmQgR3JvdXAKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvRW51bVZhbC9FbnVtVmFsLmRzcCBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0VudW1WYWwvRW51bVZhbC5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFiYjczYQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0VudW1WYWwvRW51bVZhbC5kc3AKQEAgLTAsMCArMSw5MiBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJFbnVtVmFsIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMworCitDRkc9RW51bVZhbCAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIkVudW1WYWwubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJFbnVtVmFsLm1hayIgQ0ZHPSJFbnVtVmFsIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiRW51bVZhbCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAiRW51bVZhbCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCitDUFA9Y2wuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIkVudW1WYWwgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2Vcb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTUQgL1czIC9HWCAvTzIgL09iMiAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6eWVzIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiRW51bVZhbCAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTURkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0QgIl9DT05TT0xFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIkRFVkVOVl9WQ1BQIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvYworIyBTVUJUUkFDVCBDUFAgL1lYCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiRW51bVZhbCAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIkVudW1WYWwgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcRW51bVZhbFxFbnVtVmFsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvTWVtUGFyc2UvTWVtUGFyc2UuZHNwIGIvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvTWVtUGFyc2UvTWVtUGFyc2UuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YzdiODkKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9NZW1QYXJzZS9NZW1QYXJzZS5kc3AKQEAgLTAsMCArMSwxMDQgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iTWVtUGFyc2UiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKK0NGRz1NZW1QYXJzZSAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIk1lbVBhcnNlLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiTWVtUGFyc2UubWFrIiBDRkc9Ik1lbVBhcnNlIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiTWVtUGFyc2UgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgIk1lbVBhcnNlIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiTWVtUGFyc2UgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2Vcb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTUQgL1czIC9HWCAvTzIgL09iMiAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6eWVzIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiTWVtUGFyc2UgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1Z1xvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1ZyIKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIk1lbVBhcnNlIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiTWVtUGFyc2UgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcTWVtUGFyc2VcTWVtUGFyc2UuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xNZW1QYXJzZVxNZW1QYXJzZS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXE1lbVBhcnNlXE1lbVBhcnNlSGFuZGxlcnMuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xNZW1QYXJzZVxNZW1QYXJzZUhhbmRsZXJzLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvUFBhcnNlL1BQYXJzZS5kc3AgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9QUGFyc2UvUFBhcnNlLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2FmOTEzCi0tLSAvZGV2L251bGwKKysrIGIvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvUFBhcnNlL1BQYXJzZS5kc3AKQEAgLTAsMCArMSwxMTYgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iUFBhcnNlIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMworCitDRkc9UFBhcnNlIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiUFBhcnNlLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiUFBhcnNlLm1hayIgQ0ZHPSJQUGFyc2UgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJQUGFyc2UgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgIlBQYXJzZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCitDUFA9Y2wuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIlBQYXJzZSAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZVxvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRCAvVzMgL0dYIC9PMiAvT2IyIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDp5ZXMgL21hY2hpbmU6STM4NiAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisKKyFFTFNFSUYgICIkKENGRykiID09ICJQUGFyc2UgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxEZWJ1Z1xvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9HWiAvYworIyBTVUJUUkFDVCBDUFAgL1lYCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiUFBhcnNlIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiUFBhcnNlIC0gV2luMzIgRGVidWciCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcUFBhcnNlXFBQYXJzZS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFBQYXJzZVxQUGFyc2VIYW5kbGVycy5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmwiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFBQYXJzZVxQUGFyc2UuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xQUGFyc2VcUFBhcnNlSGFuZGxlcnMuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIlJlc291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSIKKyMgRW5kIEdyb3VwCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1JlZGlyZWN0L1JlZGlyZWN0LmRzcCBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1JlZGlyZWN0L1JlZGlyZWN0LmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTVlZDZiCi0tLSAvZGV2L251bGwKKysrIGIvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvUmVkaXJlY3QvUmVkaXJlY3QuZHNwCkBAIC0wLDAgKzEsMTA0IEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9IlJlZGlyZWN0IiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMworCitDRkc9UmVkaXJlY3QgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJSZWRpcmVjdC5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIlJlZGlyZWN0Lm1hayIgQ0ZHPSJSZWRpcmVjdCAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIlJlZGlyZWN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFICJSZWRpcmVjdCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCitDUFA9Y2wuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIlJlZGlyZWN0IC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDp5ZXMgL21hY2hpbmU6STM4NiAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisKKyFFTFNFSUYgICIkKENGRykiID09ICJSZWRpcmVjdCAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTURkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0QgIl9DT05TT0xFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIkRFVkVOVl9WQ1BQIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvYworIyBTVUJUUkFDVCBDUFAgL1lYCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiUmVkaXJlY3QgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJSZWRpcmVjdCAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xSZWRpcmVjdFxSZWRpcmVjdC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFJlZGlyZWN0XFJlZGlyZWN0LmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcUmVkaXJlY3RcUmVkaXJlY3RIYW5kbGVycy5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFJlZGlyZWN0XFJlZGlyZWN0SGFuZGxlcnMuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9TQVhDb3VudC9TQVhDb3VudC5kc3AgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9TQVhDb3VudC9TQVhDb3VudC5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyMWMyOQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1NBWENvdW50L1NBWENvdW50LmRzcApAQCAtMCwwICsxLDEwNCBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJTQVhDb3VudCIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKKworQ0ZHPVNBWENvdW50IC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiU0FYQ291bnQubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJTQVhDb3VudC5tYWsiIENGRz0iU0FYQ291bnQgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJTQVhDb3VudCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAiU0FYQ291bnQgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJTQVhDb3VudCAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZVxvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRCAvVzMgL0dYIC9PMiAvT2IyIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDp5ZXMgL21hY2hpbmU6STM4NiAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisKKyFFTFNFSUYgICIkKENGRykiID09ICJTQVhDb3VudCAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTURkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0QgIl9DT05TT0xFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIkRFVkVOVl9WQ1BQIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvYworIyBTVUJUUkFDVCBDUFAgL1lYCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiU0FYQ291bnQgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJTQVhDb3VudCAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xTQVhDb3VudFxTQVhDb3VudC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFNBWENvdW50XFNBWENvdW50LmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcU0FYQ291bnRcU0FYQ291bnRIYW5kbGVycy5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFNBWENvdW50XFNBWENvdW50SGFuZGxlcnMuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9TQVhQcmludC9TQVhQcmludC5kc3AgYi9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9TQVhQcmludC9TQVhQcmludC5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1M2FmNQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1NBWFByaW50L1NBWFByaW50LmRzcApAQCAtMCwwICsxLDEwNCBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJTQVhQcmludCIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKKworQ0ZHPVNBWFByaW50IC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiU0FYUHJpbnQubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJTQVhQcmludC5tYWsiIENGRz0iU0FYUHJpbnQgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJTQVhQcmludCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAiU0FYUHJpbnQgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJTQVhQcmludCAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZSIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcUmVsZWFzZVxvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRCAvVzMgL0dYIC9PMiAvT2IyIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDp5ZXMgL21hY2hpbmU6STM4NiAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisKKyFFTFNFSUYgICIkKENGRykiID09ICJTQVhQcmludCAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTURkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0QgIl9DT05TT0xFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIkRFVkVOVl9WQ1BQIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvYworIyBTVUJUUkFDVCBDUFAgL1lYCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnIgorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiU0FYUHJpbnQgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJTQVhQcmludCAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc2FtcGxlc1xTQVhQcmludFxTQVhQcmludC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFNBWFByaW50XFNBWFByaW50LmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcU0FYUHJpbnRcU0FYUHJpbnRIYW5kbGVycy5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFNBWFByaW50XFNBWFByaW50SGFuZGxlcnMuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9TdGRJblBhcnNlL1N0ZEluUGFyc2UuZHNwIGIvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvU3RkSW5QYXJzZS9TdGRJblBhcnNlLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWMzNzIxCi0tLSAvZGV2L251bGwKKysrIGIvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvU3RkSW5QYXJzZS9TdGRJblBhcnNlLmRzcApAQCAtMCwwICsxLDExNiBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJTdGRJblBhcnNlIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMworCitDRkc9U3RkSW5QYXJzZSAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIlN0ZEluUGFyc2UubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJTdGRJblBhcnNlLm1hayIgQ0ZHPSJTdGRJblBhcnNlIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiU3RkSW5QYXJzZSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAiU3RkSW5QYXJzZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCitDUFA9Y2wuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIlN0ZEluUGFyc2UgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2Vcb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTUQgL1czIC9HWCAvTzIgL09iMiAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiX0NPTlNPTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6eWVzIC9tYWNoaW5lOkkzODYgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXEJ1aWxkXFdpbjMyXFZDNlxSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiU3RkSW5QYXJzZSAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvRzYgL01EZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLlwuLlwuLlwuLlwuLlxzcmMiIC9EICJfQ09OU09MRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRkQgL0daIC9jCisjIFNVQlRSQUNUIENQUCAvWVgKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246My4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJTdGRJblBhcnNlIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiU3RkSW5QYXJzZSAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFN0ZEluUGFyc2VcU3RkSW5QYXJzZS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzYW1wbGVzXFN0ZEluUGFyc2VcU3RkSW5QYXJzZUhhbmRsZXJzLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaDtocHA7aHh4O2htO2lubCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcU3RkSW5QYXJzZVxTdGRJblBhcnNlLkhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNhbXBsZXNcU3RkSW5QYXJzZVxTdGRJblBhcnNlSGFuZGxlcnMuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIlJlc291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSIKKyMgRW5kIEdyb3VwCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1hlcmNlc0xpYi9YZXJjZXNMaWIuZHNwIGIvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvWGVyY2VzTGliL1hlcmNlc0xpYi5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA0NzlmZQotLS0gL2Rldi9udWxsCisrKyBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1hlcmNlc0xpYi9YZXJjZXNMaWIuZHNwCkBAIC0wLDAgKzEsMTE1MyBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJYZXJjZXNMaWIiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMgorCitDRkc9WGVyY2VzTGliIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiWGVyY2VzTGliLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiWGVyY2VzTGliLm1hayIgQ0ZHPSJYZXJjZXNMaWIgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJYZXJjZXNMaWIgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJYZXJjZXNMaWIgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK0NQUD1jbC5leGUKK01UTD1taWRsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJYZXJjZXNMaWIgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2Vcb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NRCAvWmEgL1czIC9HWCAvTzIgL09iMiAvSSAiLi5cLi5cc3JjIiAvSSAiLi5cLi5cc3JjXGRvbSIgL0kgIi4uXC4uXC4uXC4uXC4uXHNyYyIgL0QgIlBST0pfWE1MUEFSU0VSIiAvRCAiUFJPSl9YTUxVVElMIiAvRCAiUFJPSl9QQVJTRVJTIiAvRCAiUFJPSl9TQVg0QyIgL0QgIlBST0pfRE9NIiAvRCAiUFJPSl9WQUxJREFUT1JTIiAvRCAiWE1MX1NJTkdMRURMTCIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBMQVRGT1JNX1dJTjMyIiAvRCAiWE1MX1VTRV9XSU4zMl9UUkFOU0NPREVSIiAvRCAiWE1MX1VTRV9XSU4zMl9NU0dMT0FERVIiIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MTAwMDAwMDAiIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvaW5jcmVtZW50YWw6eWVzIC9tYWNoaW5lOkkzODYgL291dDoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2VceGVyY2VzLWNfMV8wLmRsbCIgL2ltcGxpYjoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XFJlbGVhc2UveGVyY2VzLWNfMS5saWIiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIlhlcmNlc0xpYiAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWciCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnXG9iaiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNiAvTURkIC9aYSAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLlwuLlxzcmMiIC9JICIuLlwuLlxzcmNcZG9tIiAvSSAiLi5cLi5cLi5cLi5cLi5cc3JjIiAvRCAiUFJPSl9YTUxQQVJTRVIiIC9EICJQUk9KX1hNTFVUSUwiIC9EICJQUk9KX1BBUlNFUlMiIC9EICJQUk9KX1NBWDRDIiAvRCAiUFJPSl9ET00iIC9EICJQUk9KX1ZBTElEQVRPUlMiIC9EICJYTUxfU0lOR0xFRExMIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIlhNTF9VU0VfV0lOMzJfVFJBTlNDT0RFUiIgL0QgIlhNTF9VU0VfV0lOMzJfTVNHTE9BREVSIiAvRkQgL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MTAwMDAwMDAiIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLlwuLlwuLlwuLlwuLlxCdWlsZFxXaW4zMlxWQzZcRGVidWcveGVyY2VzLWNfMV8wLmRsbCIgL2ltcGxpYjoiLi5cLi5cLi5cLi5cLi5cQnVpbGRcV2luMzJcVkM2XERlYnVnL3hlcmNlcy1jXzEubGliIiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIlhlcmNlc0xpYiAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIlhlcmNlc0xpYiAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBHcm91cCAidXRpbCIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICIuY3BwLC5ocHAiCisjIEJlZ2luIEdyb3VwICJXaW4zMiIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICIuY3BwLC5ocHAiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxQbGF0Zm9ybXNcV2luMzJccmVzb3VyY2UuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFBsYXRmb3Jtc1xXaW4zMlxXaW4zMkRlZnMuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcUGxhdGZvcm1zXFdpbjMyXFdpbjMyUGxhdGZvcm1VdGlscy5jcHAKKyMgQUREIENQUCAvWmUKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiTXNnTG9hZGVycyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICIuY3BwLC5ocHAiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxNc2dMb2FkZXJzXEluTWVtb3J5XENwcEVyck1zZ3NfRU5fVVMuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcTXNnTG9hZGVyc1xXaW4zMlxXaW4zMk1zZ0xvYWRlci5DcHAKKyMgQUREIENQUCAvWmUKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiVHJhbnNjb2RlcnMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiLmNwcCwuaHBwIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcVHJhbnNjb2RlcnNcV2luMzJcV2luMzJUcmFuc1NlcnZpY2UuY3BwCisjIEFERCBDUFAgL1plCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcVHJhbnNjb2RlcnNcV2luMzJcV2luMzJUcmFuc1NlcnZpY2UuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxBdXRvU2Vuc2UuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcQmluRmlsZUlucHV0U3RyZWFtLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXEJpbkZpbGVJbnB1dFN0cmVhbS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxCaW5JbnB1dFN0cmVhbS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxCaW5JbnB1dFN0cmVhbS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxCaW5NZW1JbnB1dFN0cmVhbS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxCaW5NZW1JbnB1dFN0cmVhbS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxCaXRPcHMuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcQml0U2V0LmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXEJpdFNldC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxDb3VudGVkUG9pbnRlci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxFbXB0eVN0YWNrRXhjZXB0aW9uLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXEZsYWdKYW5pdG9yLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXEhlYWRlckR1bW15LmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxJbnZhbGlkQ2FzdEV4Y2VwdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxJT0V4Y2VwdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxKYW5pdG9yLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXEtleVZhbHVlUGFpci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxLVlN0cmluZ1BhaXIuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcS1ZTdHJpbmdQYWlyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXE11dGV4ZXMuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcTXV0ZXhlcy5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxOYW1lSWRQb29sLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXE5vRGVmVHJhbnNjb2RlckV4Y2VwdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXE51bGxQb2ludGVyRXhjZXB0aW9uLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFBsYXRmb3JtVXRpbHMuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcUGxhdGZvcm1VdGlscy5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxSZWZBcnJheU9mLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFJlZkhhc2hUYWJsZU9mLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFJlZlN0YWNrT2YuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcUmVmVmVjdG9yT2YuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcUnVudGltZUV4Y2VwdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxTdGRPdXQuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcU3RkT3V0LmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFN0cmluZ1Bvb2wuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcU3RyaW5nUG9vbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxUZXh0T3V0cHV0U3RyZWFtLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFRleHRPdXRwdXRTdHJlYW0uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcVHJhbnNjb2RpbmdFeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcVHJhbnNTZXJ2aWNlLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFVuZXhwZWN0ZWRFT0ZFeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxVUkwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcVVJMLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFVURkRhdGFGb3JtYXRFeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcVmFsdWVBcnJheU9mLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFZhbHVlU3RhY2tPZi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxWYWx1ZVZlY3Rvck9mLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFhNTDRDRGVmcy5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxYTUxFbnVtZXJhdG9yLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFhNTEV4Y2VwdGlvbi5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxYTUxFeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcWE1MRXhjZXB0TXNncy5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxYTUxNc2dMb2FkZXIuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcWE1MU3RyaW5nLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x1dGlsXFhNTFN0cmluZy5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdXRpbFxYTUxVbmkuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcWE1MVW5pLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJmcmFtZXdvcmsiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxBdHREZWYuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxBdHREZWYuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxBdHREZWZMaXN0LmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MQXR0ci5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZnJhbWV3b3JrXFhNTEF0dHIuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxCdWZmZXIuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxCdWZmZXIuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxCdWZmZXJNZ3IuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxCdWZmZXJNZ3IuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxDb250ZW50TW9kZWwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxDb250ZW50TW9kZWwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxEb2N1bWVudEhhbmRsZXIuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxFbGVtZW50RGVjbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZnJhbWV3b3JrXFhNTEVsZW1lbnREZWNsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MRW50aXR5RGVjbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZnJhbWV3b3JrXFhNTEVudGl0eURlY2wuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxFbnRpdHlIYW5kbGVyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MRXJyb3JDb2Rlcy5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZnJhbWV3b3JrXFhNTE5vdGF0aW9uRGVjbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZnJhbWV3b3JrXFhNTE5vdGF0aW9uRGVjbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZnJhbWV3b3JrXFhNTFJlY29nbml6ZXIuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGZyYW1ld29ya1xYTUxSZWNvZ25pemVyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xmcmFtZXdvcmtcWE1MUmVmSW5mby5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZnJhbWV3b3JrXFhNTFZhbGlkYXRvci5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZnJhbWV3b3JrXFhNTFZhbGlkYXRvci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiaW50ZXJuYWwiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiLmNwcCwuaHBwIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGludGVybmFsXENoYXJUeXBlVGFibGVzLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxFbGVtU3RhY2suY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGludGVybmFsXEVsZW1TdGFjay5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcaW50ZXJuYWxcRW5kT2ZFbnRpdHlFeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGludGVybmFsXE1lbUJ1ZklucHV0U291cmNlLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxNZW1CdWZJbnB1dFNvdXJjZS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcaW50ZXJuYWxcUmVhZGVyTWdyLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxSZWFkZXJNZ3IuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGludGVybmFsXFN0ZEluSW5wdXRTb3VyY2UuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGludGVybmFsXFN0ZEluSW5wdXRTb3VyY2UuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGludGVybmFsXFVSTElucHV0U291cmNlLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxVUkxJbnB1dFNvdXJjZS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcaW50ZXJuYWxcVmVjQXR0ckxpc3RJbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxWZWNBdHRyTGlzdEltcGwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGludGVybmFsXFhNTFJlYWRlci5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcaW50ZXJuYWxcWE1MUmVhZGVyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxYTUxTY2FubmVyLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxYTUxTY2FubmVyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xpbnRlcm5hbFxYTUxTY2FubmVyMi5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAic2F4IgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIi5jcHAsLmhwcCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xzYXhcQXR0cmlidXRlTGlzdC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcc2F4XERvY3VtZW50SGFuZGxlci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcc2F4XERUREhhbmRsZXIuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHNheFxEdW1teS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcc2F4XEVudGl0eVJlc29sdmVyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xzYXhcRXJyb3JIYW5kbGVyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xzYXhcSGFuZGxlckJhc2UuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHNheFxJbnB1dFNvdXJjZS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcc2F4XElucHV0U291cmNlLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xzYXhcTG9jYXRvci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcc2F4XFBhcnNlci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcc2F4XFNBWEV4Y2VwdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcc2F4XFNBWFBhcnNlRXhjZXB0aW9uLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xzYXhcU0FYUGFyc2VFeGNlcHRpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgInBhcnNlcnMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiLmNwcCwuaHBwIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHBhcnNlcnNcRE9NUGFyc2VyLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xwYXJzZXJzXERPTVBhcnNlci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNccGFyc2Vyc1xTQVhQYXJzZXIuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHBhcnNlcnNcU0FYUGFyc2VyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJkb20iCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiLmNwcCwuaHBwIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxBdHRySW1wbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXEF0dHJJbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cQ0RBVEFTZWN0aW9uSW1wbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXENEQVRBU2VjdGlvbkltcGwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxDaGFyYWN0ZXJEYXRhSW1wbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXENoYXJhY3RlckRhdGFJbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cQ29tbWVudEltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxDb21tZW50SW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERlZXBOb2RlTGlzdEltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxEZWVwTm9kZUxpc3RJbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRG9jdW1lbnRGcmFnbWVudEltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxEb2N1bWVudEZyYWdtZW50SW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERvY3VtZW50SW1wbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERvY3VtZW50SW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERvY3VtZW50VHlwZUltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxEb2N1bWVudFR5cGVJbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0F0dHIuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fQXR0ci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9DREFUQVNlY3Rpb24uY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fQ0RBVEFTZWN0aW9uLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0NoYXJhY3RlckRhdGEuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fQ2hhcmFjdGVyRGF0YS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9Db21tZW50LmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0NvbW1lbnQuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fRG9jdW1lbnQuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fRG9jdW1lbnQuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fRG9jdW1lbnRGcmFnbWVudC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9Eb2N1bWVudEZyYWdtZW50LmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0RvY3VtZW50VHlwZS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9Eb2N1bWVudFR5cGUuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fRE9NRXhjZXB0aW9uLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0RPTUV4Y2VwdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9ET01JbXBsZW1lbnRhdGlvbi5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9ET01JbXBsZW1lbnRhdGlvbi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9FbGVtZW50LmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0VsZW1lbnQuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fRW50aXR5LmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX0VudGl0eS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9FbnRpdHlSZWZlcmVuY2UuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fRW50aXR5UmVmZXJlbmNlLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX05hbWVkTm9kZU1hcC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9OYW1lZE5vZGVNYXAuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fTm9kZS5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9Ob2RlLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX05vZGVGaWx0ZXIuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fTm9kZUZpbHRlci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9Ob2RlSXRlcmF0b3IuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fTm9kZUl0ZXJhdG9yLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX05vZGVMaXN0LmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX05vZGVMaXN0LmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX05vdGF0aW9uLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX05vdGF0aW9uLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fVGV4dC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERPTV9UZXh0LmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRE9NX1RyZWVXYWxrZXIuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01fVHJlZVdhbGtlci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERvbU1lbURlYnVnLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRG9tTWVtRGVidWcuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01TdHJpbmcuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxET01TdHJpbmcuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxEU3RyaW5nUG9vbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXERTdHJpbmdQb29sLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRWxlbWVudERlZmluaXRpb25JbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRWxlbWVudERlZmluaXRpb25JbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRWxlbWVudEltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxFbGVtZW50SW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXEVudGl0eUltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxFbnRpdHlJbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cRW50aXR5UmVmZXJlbmNlSW1wbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXEVudGl0eVJlZmVyZW5jZUltcGwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxNZW1EZWJ1Zy5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXE5hbWVkTm9kZU1hcEltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxOYW1lZE5vZGVNYXBJbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cTmFtZU5vZGVGaWx0ZXIuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxOb2RlRmlsdGVySW1wbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXE5vZGVGaWx0ZXJJbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cTm9kZUltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxOb2RlSW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXE5vZGVJdGVyYXRvckltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxOb2RlSXRlcmF0b3JJbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cTm9kZUxpc3RJbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cTm9kZUxpc3RJbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cTm9kZVZlY3Rvci5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXE5vZGVWZWN0b3IuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxOb3RhdGlvbkltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxOb3RhdGlvbkltcGwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXFJlZkNvdW50ZWRJbXBsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cUmVmQ291bnRlZEltcGwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxUZXh0SW1wbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcZG9tXFRleHRJbXBsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1xkb21cVHJlZVdhbGtlckltcGwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXGRvbVxUcmVlV2Fsa2VySW1wbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAidmFsaWRhdG9ycyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICIuY3BwLC5ocHAiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcQ01CaW5hcnlPcC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcQ01CaW5hcnlPcC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcQ01MZWFmLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxDTU5vZGUuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXENNU3RhdGVTZXQuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXENNVW5hcnlPcC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcQ01VbmFyeU9wLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxDb250ZW50U3BlY05vZGUuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXENvbnRlbnRTcGVjTm9kZS5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcREZBQ29udGVudE1vZGVsLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxERkFDb250ZW50TW9kZWwuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXERvY1R5cGVIYW5kbGVyLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxEVERBdHREZWYuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXERUREF0dERlZi5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcRFREQXR0RGVmTGlzdC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcRFREQXR0RGVmTGlzdC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcRFRERWxlbWVudERlY2wuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXERUREVsZW1lbnREZWNsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxEVERFbnRpdHlEZWNsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxEVERWYWxpZGF0b3IuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXERURFZhbGlkYXRvci5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcRFREVmFsaWRhdG9yMi5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlwuLlxzcmNcdmFsaWRhdG9yc1xEVERcTWl4ZWRDb250ZW50TW9kZWwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXE1peGVkQ29udGVudE1vZGVsLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXC4uXHNyY1x2YWxpZGF0b3JzXERURFxTaW1wbGVDb250ZW50TW9kZWwuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHZhbGlkYXRvcnNcRFREXFNpbXBsZUNvbnRlbnRNb2RlbC5ocHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cLi5cc3JjXHV0aWxcUGxhdGZvcm1zXFdpbjMyXFZlcnNpb24ucmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL3hlcmNlcy1hbGwuZHN3IGIvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwveGVyY2VzLWFsbC5kc3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczZTUyOAotLS0gL2Rldi9udWxsCisrKyBiL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL3hlcmNlcy1hbGwuZHN3CkBAIC0wLDAgKzEsMTk0IEBACitNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBXb3Jrc3BhY2UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSEKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAiRE9NQ291bnQiPSIuXERPTUNvdW50XERPTUNvdW50LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgWGVyY2VzTGliCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIkRPTU1lbVRlc3QiPSIuXERPTU1lbVRlc3RcRE9NTWVtVGVzdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIFhlcmNlc0xpYgorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJET01QcmludCI9Ii5cRE9NUHJpbnRcRE9NUHJpbnQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBYZXJjZXNMaWIKKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAiRE9NVGVzdCI9Ii5cRE9NVGVzdFxET01UZXN0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgWGVyY2VzTGliCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIkVudW1WYWwiPSIuXEVudW1WYWxcRW51bVZhbC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIFhlcmNlc0xpYgorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJNZW1QYXJzZSI9Ii5cTWVtUGFyc2VcTWVtUGFyc2UuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBYZXJjZXNMaWIKKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAiUFBhcnNlIj0iLlxQUGFyc2VcUFBhcnNlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgWGVyY2VzTGliCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIlJlZGlyZWN0Ij0iLlxSZWRpcmVjdFxSZWRpcmVjdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIFhlcmNlc0xpYgorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJTQVhDb3VudCI9Ii5cU0FYQ291bnRcU0FYQ291bnQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBYZXJjZXNMaWIKKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAiU0FYUHJpbnQiPSIuXFNBWFByaW50XFNBWFByaW50LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgWGVyY2VzTGliCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIlN0ZEluUGFyc2UiPSIuXFN0ZEluUGFyc2VcU3RkSW5QYXJzZS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIFhlcmNlc0xpYgorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJYZXJjZXNMaWIiPSIuXFhlcmNlc0xpYlxYZXJjZXNMaWIuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitHbG9iYWw6CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTwzPgore3t7Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCmRpZmYgLS1naXQgYS9vYmovTWFrZWZpbGUuaW4gYi9vYmovTWFrZWZpbGUuaW4KaW5kZXggNjdkOWY2Ny4uZmJiMzgwYyAxMDA2NDQKLS0tIGEvb2JqL01ha2VmaWxlLmluCisrKyBiL29iai9NYWtlZmlsZS5pbgpAQCAtNTUsOCArNTUsMjAgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMToxMDo0OSAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS40ICAxOTk5LzExLzI0IDIzOjIxOjQyICByYWh1bGoKKyMgTm93IHdvcmtzIHVuZGVyIEhQVVggMTAuMjAgd2l0aCBDQyBhbmQgYUNDLCB3aXRoIElDVSBhbmQgbmF0aXZlCitkaXN0Y2xlYW4gdGFyZ2V0IG5vdyByZW1vdmUgYW5kIHJlbWFpbmluZyBNYWtlZmlsZShzKQorY2xlYW4gdGFyZ2V0IG5vdyByZW1vdmVzIHRoZSB0ZW1wbGF0ZSByZXBvc2l0b3J5IGRpcmVjdG9yeQorIworIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMjMgMDE6NTk6MTYgIHJhaHVsagorIyBDb2RlIG5vdyB3b3JrcyB1bmRlciBIUFVYIDExLiBUZXN0ZWQgaW5tZW1vcnkgbWVzc2FnZSBsb2FkZXIuCitSZXZhbXBlZCBtYWtlZmlsZXMuIEJ1aWxkcyB3aXRoIGJvdGggRENFIHRocmVhZHMgYXMgd2VsbCBhcyBwdGhyZWFkIGxpYnJhcmllcy4KKyMKKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzEyIDIwOjM4OjQzICByYWh1bGoKKyMgUmVwbGFjZWQgWE1MNENST09UIHdpdGggWEVSQ0VTQ1JPT1QuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MTA6NDkgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQzOjE0ICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC03NCwyMSArODYsMjUgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogUExBVEZPUk0gPSBAcGxhdGZvcm1ACi1DT01QSUxFUiA9IEBjb21waWxlckAKK0NDICA9IEBjY0AKK0NYWCA9IEBjeHhACiBQUkVGSVggPSBAcHJlZml4QAorTERGTEFHUyA9IEBsZGZsYWdzQAorTElCUyA9IEBsaWJzQAorT1NWRVIgPSBAb3N2ZXJACiAKIGluY2x1ZGUgLi4vc3JjL01ha2VmaWxlLmluY2wKIAotTElCPSR7WE1MNENST09UfS9saWIKK0xJQj0ke1hFUkNFU0NST09UfS9saWIKICMjIE9TMzkwQkFUQ0gKIGlmZXEgKCR7T1MzOTBCQVRDSH0sMSkKIEJBVENIX1RBUkdFVCA9ICIvLycke0xPQURNT0R9KFhNTDRDMzApJyIKIGVuZGlmCi1MSUJOQU1FPWxpYklYWE1MNEMKK0xJQk5BTUU9bGlieGVyY2VzLWMKIFRISVNMSUI9JHtMSUJ9LyR7TElCTkFNRX0KLVZFUj0zXzAKK1ZFUj0xXzAKIAotQUxMX09CSkVDVFNfRElSPSR7WE1MNENST09UfS9vYmoKK0FMTF9PQkpFQ1RTX0RJUj0ke1hFUkNFU0NST09UfS9vYmoKIEFMTF9PQkpFQ1RTPSQod2lsZGNhcmQgJChBTExfT0JKRUNUU19ESVIpLyoubykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMTAzLDcgKzExOSw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIGlmZXEgKCR7UExBVEZPUk19LEhQVVgpCi0gIGlmZXEgKCR7Q09NUElMRVJ9LENDKQorICBpZmVxICgke0NYWH0sQ0MpCiAgICAgIyMjIyMjICBTdGFydCBIUC1VWCAgQ0MgY29tcGlsZXIgc3BlY2lmaWMgc3R1ZmYgIyMjIyMjIwogICAgIERVTU1ZRVhFPSQoWE1MX0xJQl9ESVIpL2R1bW15RXhlCiAgICAgVEVNUExBVEVTT0JKUz0kKHdpbGRjYXJkICQoVEVNUExBVEVTUkVQT1NJVE9SWSkvKi5vKQpAQCAtMTEyLDcgKzEyOCw3IEBACiAJXHJtIC1mICQoRFVNTVlFWEUpCiAKICAgICAkKERVTU1ZRVhFKTogJChBTExfT0JKRUNUUykKLQkke01BS0VfU0hBUkVEfSAtbyAke0B9ICQoUExBVEZPUk1fTElCUkFSSUVTKSAkXiAkKEFMTExJQlMpCisJJHtNQUtFX1NIQVJFRH0gLW8gJHtAfSAkXiAkKFBMQVRGT1JNX0xJQlJBUklFUykgJChBTExMSUJTKQogCiAgICAgIyMjIyMjICBFbmQgSFAtVVggIENDIGNvbXBpbGVyIHNwZWNpZmljIHN0dWZmICMjIyMjIyMKICAgZWxzZQpAQCAtMTQxLDI1ICsxNTcsMzcgQEAKIAogJHtUSElTTElCfSR7VkVSfSR7U0hMSUJTVUZGSVh9OgkkKEFMTF9PQkpFQ1RTKQogCUBlY2hvIEJ1aWxkaW5nICR7VEhJU0xJQn0ke1ZFUn0ke1NITElCU1VGRklYfQotCSR7TUFLRV9TSEFSRUR9IC1vICR7QH0gJChQTEFURk9STV9MSUJSQVJJRVMpICQoRVhUUkFfTElOS19PUFRJT05TKSAkXiAkKFRFTVBMQVRFU09CSlMpICQoQUxMTElCUykKKwkke01BS0VfU0hBUkVEfSAtbyAke0B9ICReICQoVEVNUExBVEVTT0JKUykgJChQTEFURk9STV9MSUJSQVJJRVMpICQoRVhUUkFfTElOS19PUFRJT05TKSAkKEFMTExJQlMpCiAjIyBPUzM5MAogaWZlcSAoJHtQTEFURk9STX0sT1MzOTApCiAjIyBPUzM5MEJBVENICiBpZmVxICgke09TMzkwQkFUQ0h9LDEpCiAke0JBVENIX1RBUkdFVH06ICAgICAgICAkKEFMTF9PQkpFQ1RTKQogCUBlY2hvIEJ1aWxkaW5nICR7QkFUQ0hfVEFSR0VUfQotCSR7TUFLRV9TSEFSRUR9IC1vICR7QH0gJChQTEFURk9STV9MSUJSQVJJRVMpICQoRVhUUkFfTElOS19PUFRJT05TKSAkXiAkKFRFTVBMQVRFU09CSlMpICQoQUxMTElCUykKKwkke01BS0VfU0hBUkVEfSAtbyAke0B9ICReICQoVEVNUExBVEVTT0JKUykgJChQTEFURk9STV9MSUJSQVJJRVMpICQoRVhUUkFfTElOS19PUFRJT05TKSAkKEFMTExJQlMpCiBlbHNlCiAJJChDUCkgJHtMSUJOQU1FfSR7VkVSfSR7T1MzOTBTSURFREVDS30gJHtMSUJ9CiBlbmRpZgogZW5kaWYKIAorCiBjbGVhbjoKIAlAZWNobyAiTWFraW5nIGNsZWFuIGluIG9iaiAuLi4iCiAJLXJtIC1mICQoQUxMX09CSkVDVFMpICR7VEhJU0xJQn0ke1ZFUn0ke1NITElCU1VGRklYfQoraWZuZXEgKCRzdHJpcCAkKFRFTVBMQVRFU1JFUE9TSVRPUlkpKSwpCisJLXJtIC1mICQoVEVNUExBVEVTUkVQT1NJVE9SWSkvKi5vCisJLXJtIC1mICQoVEVNUExBVEVTUkVQT1NJVE9SWSkvKi5jCisJLXJtIC1mICQoVEVNUExBVEVTUkVQT1NJVE9SWSkvKi5jcworCS1ybSAtZiAkKFRFTVBMQVRFU1JFUE9TSVRPUlkpLyouaGUKK2VuZGlmCisKIAogZGlzdGNsZWFuOgljbGVhbgogCXJtIC1mIE1ha2VmaWxlCitpZm5lcSAoJHN0cmlwICQoVEVNUExBVEVTUkVQT1NJVE9SWSkpLCkKKwktcm0gLXJmICQoVEVNUExBVEVTUkVQT1NJVE9SWSkKK2VuZGlmCisKIAogaW5zdGFsbDoKIGlmZXEgKCR7T1MzOTBCQVRDSH0sMSkKZGlmZiAtLWdpdCBhL3NhbXBsZXMvRE9NQ291bnQvRE9NQ291bnQuY3BwIGIvc2FtcGxlcy9ET01Db3VudC9ET01Db3VudC5jcHAKaW5kZXggYjM5ZDM2NS4uZGYyYzg5NiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9ET01Db3VudC9ET01Db3VudC5jcHAKKysrIGIvc2FtcGxlcy9ET01Db3VudC9ET01Db3VudC5jcHAKQEAgLTU2LDggKzU2LDExIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOTo1MiAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMTIgMDI6MTM6NDAgIHJhaHVsagorICogSXQgbm93IHZhbGlkYXRlcyB3aGVuIHRoZSAtdiBvcHRpb24gaXMgc3BlY2lmaWVkLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6NTIgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS44ICAxOTk5LzExLzA4IDIwOjQzOjM0ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTQzLDYgKzE0Niw3IEBACiAKICAgICAvLyBJbnN0YW50aWF0ZSB0aGUgRE9NIHBhcnNlci4KICAgICBET01QYXJzZXIgcGFyc2VyOworICAgIHBhcnNlci5zZXREb1ZhbGlkYXRpb24oZG9WYWxpZGF0aW9uKTsKIAogICAgIC8vIEFuZCBjcmVhdGUgb3VyIGVycm9yIGhhbmRsZXIgYW5kIGluc3RhbGwgaXQKICAgICBET01Db3VudCBlbGVtZW50Q291bnRlcjsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvRE9NQ291bnQvTWFrZWZpbGUuaW4gYi9zYW1wbGVzL0RPTUNvdW50L01ha2VmaWxlLmluCmluZGV4IDMzMGQ0NTYuLmI2ZWZhMTIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvRE9NQ291bnQvTWFrZWZpbGUuaW4KKysrIGIvc2FtcGxlcy9ET01Db3VudC9NYWtlZmlsZS5pbgpAQCAtNTUsOCArNTUsMTEgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOTo1MyAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzEyIDIwOjM0OjMxICByYWh1bGoKKyMgUmVwbGFjZWQgWE1MNENST09UIHdpdGggWEVSQ0VTQ1JPT1QuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6NTMgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQzOjM1ICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC04MywxMCArODYsMTAgQEAKIAogQVBQX05BTUU9RE9NQ291bnQKIAotT1VURElSPSAke1hNTDRDUk9PVH0vYmluL29iai8ke0FQUF9OQU1FfQotRVhFQz0JJHtYTUw0Q1JPT1R9L2JpbgorT1VURElSPSAke1hFUkNFU0NST09UfS9iaW4vb2JqLyR7QVBQX05BTUV9CitFWEVDPQkke1hFUkNFU0NST09UfS9iaW4KIE9CSlM9CSR7T1VURElSfS9ET01Db3VudC5vCi1TUkM9CSR7WE1MNENST09UfS9zYW1wbGVzLyR7QVBQX05BTUV9CitTUkM9CSR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvJHtBUFBfTkFNRX0KIAogIyMgT1MzOTBCQVRDSAogaWZlcSAoJHtPUzM5MEJBVENIfSwxKQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ET01QcmludC9ET01QcmludC5jcHAgYi9zYW1wbGVzL0RPTVByaW50L0RPTVByaW50LmNwcAppbmRleCBjOWU5OGZjLi4xNWRjYjk1IDEwMDY0NAotLS0gYS9zYW1wbGVzL0RPTVByaW50L0RPTVByaW50LmNwcAorKysgYi9zYW1wbGVzL0RPTVByaW50L0RPTVByaW50LmNwcApAQCAtNTYsOCArNTYsMTcgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjUxICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMi8wMyAwMDoxNDo1MiAgYW5keWgKKyAqIFJlbW92ZWQgdHJhbnNjb2Rpbmcgc3R1ZmYsIHJlcGxhY2VkIHdpdGggRE9NU3RyaW5nOjp0cmFuc2NvZGUuCisgKgorICogVHdlYWtlZCB4bWwgZW5jb2Rpbmc9IGRlY2xhcmF0aW9uIHRvIHNheSBJU08tODg1OS0xLiAgU3RpbGwgd3JvbmcsCisgKiBidXQgbm90IGFzIHdyb25nIGFzIHV0Zi04CisgKgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzEyIDAyOjE0OjA1ICByYWh1bGoKKyAqIEl0IG5vdyB2YWxpZGF0ZXMgd2hlbiB0aGUgLXYgb3B0aW9uIGlzIHNwZWNpZmllZC4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjUxICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuNyAgMTk5OS8xMS8wOCAyMDo0MzozNSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTc4LDYgKzg3LDEzIEBACiAvLyAgICAgIGZpbGVuYW1lICAgICAgICAtIFRoZSBwYXRoIHRvIHRoZSBYTUwgZmlsZSB0byBwYXJzZQogLy8KIC8vICBUaGVzZSBhcmUgbm9uLWNhc2Ugc2Vuc2l0aXZlCisvLworLy8gICBMaW1pdGF0aW9uczoKKy8vICAgICAxLiAgVGhlIGVuY29kaW5nPSJ4eHgiIGNsYXVzZSBpbiB0aGUgWE1MIGhlYWRlciBzaG91bGQgcmVmbGVjdAorLy8gICAgICAgICB0aGUgc3lzdGVtIGxvY2FsIGNvZGUgcGFnZSwgYnV0IGRvZXMgbm90LgorLy8gICAgIDIuICBDYXNlcyB3aGVyZSB0aGUgWE1MIGRhdGEgY29udGFpbnMgY2hhcmFjdGVycyB0aGF0IGNhbiBub3QKKy8vICAgICAgICAgYmUgcmVwcmVzZW50ZWQgaW4gdGhlIHN5c3RlbSBsb2NhbCBjb2RlIHBhZ2UgYXJlIG5vdCBoYW5kbGVkLgorLy8KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKQEAgLTEzOCw5ICsxNTQsOSBAQAogCiAgICAgY2F0Y2goY29uc3QgWE1MRXhjZXB0aW9uJiB0b0NhdGNoKQogICAgIHsKLSAgICAgICAgY2VyciA8PCAiRXJyb3IgZHVyaW5nIFhNTDRDMiBJbml0aWFsaXphdGlvbi5cbiIKKyAgICAgICAgY2VyciA8PCAiRXJyb3IgZHVyaW5nIFhlcmNlcy1jIEluaXRpYWxpemF0aW9uLlxuIgogICAgICAgICAgICAgIDw8ICIgIEV4Y2VwdGlvbiBtZXNzYWdlOiIKLSAgICAgICAgICAgICA8PCBTdHJYKHRvQ2F0Y2guZ2V0TWVzc2FnZSgpKSA8PCBlbmRsOworICAgICAgICAgICAgIDw8IERPTVN0cmluZyh0b0NhdGNoLmdldE1lc3NhZ2UoKSkgPDwgZW5kbDsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCkBAIC0xOTksNiArMjE1LDcgQEAKICAgICAvLyAgZGlzY292ZXJzIGVycm9ycyBkdXJpbmcgdGhlIGNvdXJzZSBvZiBwYXJzaW5nIHRoZSBYTUwgZG9jdW1lbnQuCiAgICAgLy8KICAgICBET01QYXJzZXIgcGFyc2VyOworICAgIHBhcnNlci5zZXREb1ZhbGlkYXRpb24oZG9WYWxpZGF0aW9uKTsKICAgICBFcnJvckhhbmRsZXIgKmVyclJlcG9ydGVyID0gbmV3IERPTVRyZWVFcnJvclJlcG9ydGVyKCk7CiAgICAgcGFyc2VyLnNldEVycm9ySGFuZGxlcihlcnJSZXBvcnRlcik7CiAKQEAgLTIxNSw3ICsyMzIsOCBAQAogICAgIGNhdGNoIChjb25zdCBYTUxFeGNlcHRpb24mIGUpCiAgICAgewogICAgICAgICBjZXJyIDw8ICJBbiBlcnJvciBvY2N1cmVkIGR1cmluZyBwYXJzaW5nXG4gICBNZXNzYWdlOiAiCi0gICAgICAgICAgICAgPDwgU3RyWChlLmdldE1lc3NhZ2UoKSkgPDwgZW5kbDsKKyAgICAgICAgICAgIDw8IERPTVN0cmluZyhlLmdldE1lc3NhZ2UoKSkgPDwgZW5kbDsKKyAvLyAgICAgICAgICAgPDwgU3RyWChlLmdldE1lc3NhZ2UoKSkgPDwgZW5kbDsKICAgICAgICAgZXJyb3JzT2NjdXJlZCA9IHRydWU7CiAgICAgfQogCkBAIC0yOTgsNyArMzE2LDExIEBACiAKICAgICAgICAgY2FzZSBET01fTm9kZTo6RE9DVU1FTlRfTk9ERSA6CiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldCA8PCAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnID8+XG4iOworICAgICAgICAgICAgLy8gQnVnIGhlcmU6ICB3ZSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gZ2V0IHRoZSBlbmNvZGluZyBuYW1lCisgICAgICAgICAgICAvLyAgIGZvciB0aGUgZGVmYXVsdCBjb2RlIHBhZ2Ugb24gdGhlIHN5c3RlbSB3aGVyZSB0aGUKKyAgICAgICAgICAgIC8vICAgcHJvZ3JhbSBpcyBydW5uaW5nLCBhbmQgcGx1ZyB0aGF0IGluIGZvciB0aGUgZW5jb2RpbmcKKyAgICAgICAgICAgIC8vICAgbmFtZS4gIAorICAgICAgICAgICAgdGFyZ2V0IDw8ICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdJU08tODg1OS0xJyA/PlxuIjsKICAgICAgICAgICAgIERPTV9Ob2RlIGNoaWxkID0gdG9Xcml0ZS5nZXRGaXJzdENoaWxkKCk7CiAgICAgICAgICAgICB3aGlsZSggY2hpbGQgIT0gMCkKICAgICAgICAgICAgIHsKQEAgLTQyNyw3ICs0NDksOCBAQAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAvLyBJZiBpdCBpcyBub25lIG9mIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMsIHByaW50IGl0IGFzIHN1Y2gKLSAgICAgICAgICAgICAgICB0YXJnZXQgPDwgU3RyWCgmY2hhcnNbaW5kZXhdLCAxKTsKKyAgICAgICAgICAgICAgICAvLyB0YXJnZXQgPDwgU3RyWCgmY2hhcnNbaW5kZXhdLCAxKTsKKyAgICAgICAgICAgICAgICB0YXJnZXQgPDwgdG9Xcml0ZS5zdWJzdHJpbmdEYXRhKGluZGV4LCAxKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDM5LDEyICs0NjIsMTggQEAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotLy8gIG9zdHJlYW0gPDwgRE9NU3RyaW5nICAgICAgU3RyZWFtIG91dCBhIERPTSBzdHJpbmcuCisvLyAgb3N0cmVhbSA8PCBET01TdHJpbmcgICAgU3RyZWFtIG91dCBhIERPTSBzdHJpbmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRG9pbmcgdGhpcyByZXF1aXJlcyB0aGF0IHdlIGZpcnN0IHRyYW5zY29kZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNoYXIgKiBmb3JtIGluIHRoZSBkZWZhdWx0IGNvZGUgcGFnZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgc3lzdGVtCiAvLwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIHRhcmdldCwgY29uc3QgRE9NU3RyaW5nJiBzKQogewotICAgIGlmIChzLmxlbmd0aCgpID4gMCkKLSAgICAgICAgdGFyZ2V0IDw8IFN0clgocy5yYXdCdWZmZXIoKSwgcy5sZW5ndGgoKSk7CisgICAgLy9pZiAocy5sZW5ndGgoKSA+IDApCisgICAgLy8gICAgdGFyZ2V0IDw8IFN0clgocy5yYXdCdWZmZXIoKSwgcy5sZW5ndGgoKSk7CisgICAgY2hhciAqcCA9IHMudHJhbnNjb2RlKCk7CisgICAgdGFyZ2V0IDw8IHA7CisgICAgZGVsZXRlIHA7CiAgICAgcmV0dXJuIHRhcmdldDsKIH0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvRE9NUHJpbnQvRE9NVHJlZUVycm9yUmVwb3J0ZXIuY3BwIGIvc2FtcGxlcy9ET01QcmludC9ET01UcmVlRXJyb3JSZXBvcnRlci5jcHAKaW5kZXggOGQ3NTM0Zi4uODBiYThjYSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9ET01QcmludC9ET01UcmVlRXJyb3JSZXBvcnRlci5jcHAKKysrIGIvc2FtcGxlcy9ET01QcmludC9ET01UcmVlRXJyb3JSZXBvcnRlci5jcHAKQEAgLTU2LDggKzU2LDE0IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOTo1MSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMDMgMDA6MTQ6NTMgIGFuZHloCisgKiBSZW1vdmVkIHRyYW5zY29kaW5nIHN0dWZmLCByZXBsYWNlZCB3aXRoIERPTVN0cmluZzo6dHJhbnNjb2RlLgorICoKKyAqIFR3ZWFrZWQgeG1sIGVuY29kaW5nPSBkZWNsYXJhdGlvbiB0byBzYXkgSVNPLTg4NTktMS4gIFN0aWxsIHdyb25nLAorICogYnV0IG5vdCBhcyB3cm9uZyBhcyB1dGYtOAorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6NTEgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS42ICAxOTk5LzExLzA4IDIwOjQzOjM1ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNzIsNiArNzgsMTAgQEAKICNpbmNsdWRlIDxpb3N0cmVhbS5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPG1lbW9yeS5oPgorI2luY2x1ZGUgPGRvbS9ET01TdHJpbmcuaHBwPgorCisvLyBHbG9iYWwgc3RyZWFtaW5nIG9wZXJhdG9yIGZvciBET01TdHJpbmcgaXMgZGVmaW5lZCBpbiBET01QcmludC5jcHAKK2V4dGVybiBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIHRhcmdldCwgY29uc3QgRE9NU3RyaW5nJiBzKTsKIAogCiB2b2lkIERPTVRyZWVFcnJvclJlcG9ydGVyOjp3YXJuaW5nKGNvbnN0IFNBWFBhcnNlRXhjZXB0aW9uJikKQEAgLTgzLDE4ICs5MywxOCBAQAogCiB2b2lkIERPTVRyZWVFcnJvclJlcG9ydGVyOjplcnJvcihjb25zdCBTQVhQYXJzZUV4Y2VwdGlvbiYgdG9DYXRjaCkKIHsKLSAgICBjZXJyIDw8ICJFcnJvciBhdCBmaWxlIFwiIiA8PCBTdHJYKHRvQ2F0Y2guZ2V0U3lzdGVtSWQoKSkKKyAgICBjZXJyIDw8ICJFcnJvciBhdCBmaWxlIFwiIiA8PCBET01TdHJpbmcodG9DYXRjaC5nZXRTeXN0ZW1JZCgpKQogCQkgPDwgIlwiLCBsaW5lICIgPDwgdG9DYXRjaC5nZXRMaW5lTnVtYmVyKCkKIAkJIDw8ICIsIGNvbHVtbiAiIDw8IHRvQ2F0Y2guZ2V0Q29sdW1uTnVtYmVyKCkKLSAgICAgICAgIDw8ICJcbiAgIE1lc3NhZ2U6ICIgPDwgU3RyWCh0b0NhdGNoLmdldE1lc3NhZ2UoKSkgPDwgZW5kbDsKKyAgICAgICAgIDw8ICJcbiAgIE1lc3NhZ2U6ICIgPDwgRE9NU3RyaW5nKHRvQ2F0Y2guZ2V0TWVzc2FnZSgpKSA8PCBlbmRsOwogfQogCiB2b2lkIERPTVRyZWVFcnJvclJlcG9ydGVyOjpmYXRhbEVycm9yKGNvbnN0IFNBWFBhcnNlRXhjZXB0aW9uJiB0b0NhdGNoKQogewotICAgIGNlcnIgPDwgIkZhdGFsIEVycm9yIGF0IGZpbGUgXCIiIDw8IFN0clgodG9DYXRjaC5nZXRTeXN0ZW1JZCgpKQorICAgIGNlcnIgPDwgIkZhdGFsIEVycm9yIGF0IGZpbGUgXCIiIDw8IERPTVN0cmluZyh0b0NhdGNoLmdldFN5c3RlbUlkKCkpCiAJCSA8PCAiXCIsIGxpbmUgIiA8PCB0b0NhdGNoLmdldExpbmVOdW1iZXIoKQogCQkgPDwgIiwgY29sdW1uICIgPDwgdG9DYXRjaC5nZXRDb2x1bW5OdW1iZXIoKQotICAgICAgICAgPDwgIlxuICAgTWVzc2FnZTogIiA8PCBTdHJYKHRvQ2F0Y2guZ2V0TWVzc2FnZSgpKSA8PCBlbmRsOworICAgICAgICAgPDwgIlxuICAgTWVzc2FnZTogIiA8PCBET01TdHJpbmcodG9DYXRjaC5nZXRNZXNzYWdlKCkpIDw8IGVuZGw7CiB9CiAKIHZvaWQgRE9NVHJlZUVycm9yUmVwb3J0ZXI6OnJlc2V0RXJyb3JzKCkKQEAgLTEwMyw3MCArMTEzLDMgQEAKIH0KIAogCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFN0clg6IFByaXZhdGUgaGVscGVyIG1ldGhvZHMKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdm9pZCBTdHJYOjp0cmFuc2NvZGUoY29uc3QgWE1MQ2gqIGNvbnN0IHRvVHJhbnNjb2RlLCBjb25zdCB1bnNpZ25lZCBpbnQgbGVuKQotewotICAgIC8vIFNob3J0IGNpcmN1aXQgaWYgaXRzIGEgbnVsbCBwb2ludGVyCi0gICAgaWYgKCF0b1RyYW5zY29kZSB8fCAoIXRvVHJhbnNjb2RlWzBdKSkKLSAgICB7Ci0gICAgICAgIGZMb2NhbEZvcm0gPSBuZXcgY2hhclsxXTsKLSAgICAgICAgZkxvY2FsRm9ybVswXSA9IDA7Ci0gICAgICAgIHJldHVybjsKLQl9Ci0KLSAgICAvLyBTZWUgaWYgb3VyIFhNTENoIGFuZCB3Y2hhcl90IGFzIHRoZSBzYW1lIG9uIHRoaXMgcGxhdGZvcm0KLSAgICBjb25zdCBib29sIGlzU2FtZVNpemUgPSAoc2l6ZW9mKFhNTENoKSA9PSBzaXplb2Yod2NoYXJfdCkpOwotCi0gICAgLy8KLSAgICAvLyAgR2V0IHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNoYXJzLiBJZiB0aGUgcGFzc2VkIGxlbiBpcyB6ZXJvLCBpdHMgbnVsbAotICAgIC8vICB0ZXJtaW5hdGVkLiBFbHNlIHdlIGhhdmUgdG8gdXNlIHRoZSBsZW4uCi0gICAgLy8KLSAgICB3Y2hhcl90IHJlYWxMZW4gPSAod2NoYXJfdClsZW47Ci0gICAgaWYgKCFyZWFsTGVuKQotICAgIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gIFdlIGNhbm5vdCBqdXN0IGFzc3VtZSB3ZSBjYW4gdXNlIHdjc2xlbigpIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdwotICAgICAgICAvLyAgaWYgb3VyIFhNTENoIGlzIHRoZSBzYW1lIGFzIHdjaGFyX3Qgb24gdGhpcyBwbGF0Zm9ybS4KLSAgICAgICAgLy8KLSAgICAgICAgY29uc3QgWE1MQ2gqIHRtcFB0ciA9IHRvVHJhbnNjb2RlOwotICAgICAgICB3aGlsZSAoKih0bXBQdHIrKykpCi0gICAgICAgICAgICByZWFsTGVuKys7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyAgSWYgZWl0aGVyIHRoZSBwYXNzZWQgbGVuZ3RoIHdhcyBub24temVybyBvciBvdXIgY2hhciBzaXplcyBhcmUgbm90IAotICAgIC8vICBzYW1lLCB3ZSBoYXZlIHRvIHVzZSBhIHRlbXAgYnVmZmVyLiBTaW5jZSB0aGlzIGlzIGNvbW1vbiBpbiB0aGVzZQotICAgIC8vICBzYW1wbGVzLCB3ZSBqdXN0IGRvIGl0IGFueXdheS4KLSAgICAvLwotICAgIHdjaGFyX3QqIHRtcFNvdXJjZSA9IG5ldyB3Y2hhcl90W3JlYWxMZW4gKyAxXTsKLSAgICBpZiAoaXNTYW1lU2l6ZSkKLSAgICB7Ci0gICAgICAgIG1lbWNweSh0bXBTb3VyY2UsIHRvVHJhbnNjb2RlLCByZWFsTGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKLSAgICB9Ci0gICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCByZWFsTGVuOyBpbmRleCsrKQotICAgICAgICAgICAgdG1wU291cmNlW2luZGV4XSA9ICh3Y2hhcl90KXRvVHJhbnNjb2RlW2luZGV4XTsKLSAgICB9Ci0gICAgdG1wU291cmNlW3JlYWxMZW5dID0gMDsKLQotICAgIC8vIFNlZSBub3cgbWFueSBjaGFycyB3ZSBuZWVkIHRvIHRyYW5zY29kZSB0aGlzIGd1eQotICAgIGNvbnN0IHVuc2lnbmVkIGludCB0YXJnZXRMZW4gPSA6Ondjc3RvbWJzKDAsIHRtcFNvdXJjZSwgMCk7Ci0KLSAgICAvLyBBbGxvY2F0ZSBvdXQgc3RvcmFnZSBtZW1iZXIKLSAgICBmTG9jYWxGb3JtID0gbmV3IGNoYXJbdGFyZ2V0TGVuICsgMV07Ci0KLSAgICAvLwotICAgIC8vICBBbmQgdHJhbnNjb2RlIG91ciB0ZW1wIHNvdXJjZSBidWZmZXIgdG8gdGhlIGxvY2FsIGJ1ZmZlci4gQ2FwIGl0Ci0gICAgLy8gIG9mZiBzaW5jZSB0aGUgY29udmVydGVyIHdvbid0IGRvIGl0IChiZWNhdXNlIHRoZSBudWxsIGlzIGJleW9uZAotICAgIC8vICB3aGVyZSB0aGUgdGFyZ2V0IHdpbGwgZmlsbCB1cC4pCi0gICAgLy8KLSAgICA6Ondjc3RvbWJzKGZMb2NhbEZvcm0sIHRtcFNvdXJjZSwgdGFyZ2V0TGVuKTsKLSAgICBmTG9jYWxGb3JtW3RhcmdldExlbl0gPSAwOwotCi0gICAgLy8gRG9uJ3QgZm9yZ2V0IHRvIGRlbGV0ZSBvdXIgdGVtcCBidWZmZXIKLSAgICBkZWxldGUgW10gdG1wU291cmNlOwotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ET01QcmludC9ET01UcmVlRXJyb3JSZXBvcnRlci5ocHAgYi9zYW1wbGVzL0RPTVByaW50L0RPTVRyZWVFcnJvclJlcG9ydGVyLmhwcAppbmRleCA3MDg2OTEyLi5lMzE1MWQyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0RPTVByaW50L0RPTVRyZWVFcnJvclJlcG9ydGVyLmhwcAorKysgYi9zYW1wbGVzL0RPTVByaW50L0RPTVRyZWVFcnJvclJlcG9ydGVyLmhwcApAQCAtNTYsOCArNTYsMTQgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjUxICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMyAwMDoxNDo1MyAgYW5keWgKKyAqIFJlbW92ZWQgdHJhbnNjb2Rpbmcgc3R1ZmYsIHJlcGxhY2VkIHdpdGggRE9NU3RyaW5nOjp0cmFuc2NvZGUuCisgKgorICogVHdlYWtlZCB4bWwgZW5jb2Rpbmc9IGRlY2xhcmF0aW9uIHRvIHNheSBJU08tODg1OS0xLiAgU3RpbGwgd3JvbmcsCisgKiBidXQgbm90IGFzIHdyb25nIGFzIHV0Zi04CisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowOTo1MSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMDggMjA6NDM6MzYgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC05Miw1OCArOTgsMyBAQAogICAgIHZvaWQgcmVzZXRFcnJvcnMoKTsKIH07CiAKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgVGhpcyBpcyBhIHNpbXBsZSBjbGFzcyB0aGF0IGxldHMgdXMgZG8gZWFzeSAodGhvdWdoIG5vdCB0ZXJyaWJseSBlZmZpY2llbnQpCi0vLyAgdHJhbmNvZGluZyBvZiBYTUxDaCBkYXRhIHRvIGxvY2FsIGNvZGUgcGFnZSBmb3IgZGlzcGxheS4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY2xhc3MgU3RyWAotewotcHVibGljIDoKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vICBDb25zdHJ1Y3RvcnMgYW5kIERlc3RydWN0b3IKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVN0clgoY29uc3QgWE1MQ2gqIGNvbnN0IHRvVHJhbnNjb2RlLCBjb25zdCB1bnNpZ25lZCBpbnQgbGVuID0gMCkgOgotCi0gICAgICAgIGZMb2NhbEZvcm0oMCkKLSAgICB7Ci0gICAgICAgIC8vIENhbGwgdGhlIHByaXZhdGUgdHJhbnNjb2RpbmcgbWV0aG9kCi0gICAgICAgIHRyYW5zY29kZSh0b1RyYW5zY29kZSwgbGVuKTsKLSAgICB9Ci0KLSAgICB+U3RyWCgpCi0gICAgewotICAgICAgICBkZWxldGUgW10gZkxvY2FsRm9ybTsKLSAgICB9Ci0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gIEdldHRlciBtZXRob2RzCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBjb25zdCBjaGFyKiBsb2NhbEZvcm0oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZMb2NhbEZvcm07Ci0gICAgfQotCi0KLXByaXZhdGUgOgotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gIFByaXZhdGUgaGVscGVyIG1ldGhvZHMKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCXZvaWQgdHJhbnNjb2RlIChjb25zdCBYTUxDaCogY29uc3QgdG9UcmFuc2NvZGUsIGNvbnN0IHVuc2lnbmVkIGludCBsZW4pOwotCi0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vICBQcml2YXRlIGRhdGEgbWVtYmVycwotICAgIC8vCi0gICAgLy8gIGZMb2NhbEZvcm0KLSAgICAvLyAgICAgIFRoaXMgaXMgdGhlIGxvY2FsIGNvZGUgcGFnZSBmb3JtIG9mIHRoZSBzdHJpbmcuCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBjaGFyKiAgIGZMb2NhbEZvcm07Ci19OwotCi1pbmxpbmUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiB0YXJnZXQsIGNvbnN0IFN0clgmIHRvRHVtcCkKLXsKLSAgICB0YXJnZXQgPDwgdG9EdW1wLmxvY2FsRm9ybSgpOwotICAgIHJldHVybiB0YXJnZXQ7Ci19CmRpZmYgLS1naXQgYS9zYW1wbGVzL0RPTVByaW50L01ha2VmaWxlLmluIGIvc2FtcGxlcy9ET01QcmludC9NYWtlZmlsZS5pbgppbmRleCA0ZjlmYmVlLi4yZjBiMDBjIDEwMDY0NAotLS0gYS9zYW1wbGVzL0RPTVByaW50L01ha2VmaWxlLmluCisrKyBiL3NhbXBsZXMvRE9NUHJpbnQvTWFrZWZpbGUuaW4KQEAgLTU1LDggKzU1LDExIEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6NTIgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xMiAyMDozNDozNSAgcmFodWxqCisjIFJlcGxhY2VkIFhNTDRDUk9PVCB3aXRoIFhFUkNFU0NST09ULgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjUyICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0MzozNiAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtODMsMTAgKzg2LDEwIEBACiAKIEFQUF9OQU1FPURPTVByaW50CiAKLU9VVERJUj0gJHtYTUw0Q1JPT1R9L2Jpbi9vYmovJHtBUFBfTkFNRX0KLUVYRUM9CSR7WE1MNENST09UfS9iaW4KK09VVERJUj0gJHtYRVJDRVNDUk9PVH0vYmluL29iai8ke0FQUF9OQU1FfQorRVhFQz0JJHtYRVJDRVNDUk9PVH0vYmluCiBPQkpTPQkke09VVERJUn0vRE9NUHJpbnQubyAke09VVERJUn0vRE9NVHJlZUVycm9yUmVwb3J0ZXIubwotU1JDPQkke1hNTDRDUk9PVH0vc2FtcGxlcy8ke0FQUF9OQU1FfQorU1JDPQkke1hFUkNFU0NST09UfS9zYW1wbGVzLyR7QVBQX05BTUV9CiBIRUFERVJfRklMRVM9JHtTUkN9L0RPTVRyZWVFcnJvclJlcG9ydGVyLmhwcAogCiAjIyBPUzM5MEJBVENICmRpZmYgLS1naXQgYS9zYW1wbGVzL0VudW1WYWwvRW51bVZhbC5jcHAgYi9zYW1wbGVzL0VudW1WYWwvRW51bVZhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkYzA1MAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvRW51bVZhbC9FbnVtVmFsLmNwcApAQCAtMCwwICsxLDMzMSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTkgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyBVc2UsIGR1cGxpY2F0aW9uIG9yCisgKiBkaXNjbG9zdXJlIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLgorICoKKyAqIFRoZSBwcm9ncmFtIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyBvcgorICogaW1wbGllZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50eSBvZiBub24taW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZAorICogd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgorICogSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYnkgeW91IGFzIGEgcmVzdWx0CisgKiBvZiB1c2luZyB0aGUgUHJvZ3JhbS4gSW4gbm8gZXZlbnQgd2lsbCBJQk0gYmUgbGlhYmxlIGZvciBhbnkKKyAqIHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBsb3N0IHByb2ZpdHMgZXZlbiBpZgorICogSUJNIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZWlyIG9jY3VycmVuY2UuIElCTQorICogd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgeW91LgorICovCisKKy8qKgorICogQHZlcnNpb24gUmV2aXNpb246ICVNJSAlSSUgJVclICVRJQorICovCisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgSW5jbHVkZXMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgPHV0aWwvTmFtZUlkUG9vbC5ocHA+CisjaW5jbHVkZSA8dXRpbC9QbGF0Zm9ybVV0aWxzLmhwcD4KKyNpbmNsdWRlIDxmcmFtZXdvcmsvWE1MVmFsaWRhdG9yLmhwcD4KKyNpbmNsdWRlIDxwYXJzZXJzL1NBWFBhcnNlci5ocHA+CisjaW5jbHVkZSA8dmFsaWRhdG9ycy9EVEQvRFREVmFsaWRhdG9yLmhwcD4KKyNpbmNsdWRlIDxpb3N0cmVhbS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIEZvcndhcmQgcmVmZXJlbmNlcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgdm9pZCB1c2FnZSgpOworCisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgVGhpcyBpcyBhIHNpbXBsZSBjbGFzcyB0aGF0IGxldHMgdXMgZG8gZWFzeSAodGhvdWdoIG5vdCB0ZXJyaWJseSBlZmZpY2llbnQpCisvLyAgdHJhbmNvZGluZyBvZiBYTUxDaCBkYXRhIHRvIGxvY2FsIGNvZGUgcGFnZSBmb3IgZGlzcGxheS4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY2xhc3MgU3RyWAoreworcHVibGljIDoKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vICBDb25zdHJ1Y3RvcnMgYW5kIERlc3RydWN0b3IKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVN0clgoY29uc3QgWE1MQ2gqIGNvbnN0IHRvVHJhbnNjb2RlLCBjb25zdCB1bnNpZ25lZCBpbnQgbGVuID0gMCkgOgorCisgICAgICAgIGZMb2NhbEZvcm0oMCkKKyAgICB7CisgICAgICAgIC8vIENhbGwgdGhlIHByaXZhdGUgdHJhbnNjb2RpbmcgbWV0aG9kCisgICAgICAgIHRyYW5zY29kZSh0b1RyYW5zY29kZSwgbGVuKTsKKyAgICB9CisKKyAgICB+U3RyWCgpCisgICAgeworICAgICAgICBkZWxldGUgW10gZkxvY2FsRm9ybTsKKyAgICB9CisKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gIEdldHRlciBtZXRob2RzCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBjb25zdCBjaGFyKiBsb2NhbEZvcm0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZMb2NhbEZvcm07CisgICAgfQorCisKK3ByaXZhdGUgOgorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gIFByaXZhdGUgaGVscGVyIG1ldGhvZHMKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXZvaWQgdHJhbnNjb2RlIChjb25zdCBYTUxDaCogY29uc3QgdG9UcmFuc2NvZGUsIGNvbnN0IHVuc2lnbmVkIGludCBsZW4pOworCisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vICBQcml2YXRlIGRhdGEgbWVtYmVycworICAgIC8vCisgICAgLy8gIGZMb2NhbEZvcm0KKyAgICAvLyAgICAgIFRoaXMgaXMgdGhlIGxvY2FsIGNvZGUgcGFnZSBmb3JtIG9mIHRoZSBzdHJpbmcuCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBjaGFyKiAgIGZMb2NhbEZvcm07Cit9OworCitpbmxpbmUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiB0YXJnZXQsIGNvbnN0IFN0clgmIHRvRHVtcCkKK3sKKyAgICB0YXJnZXQgPDwgdG9EdW1wLmxvY2FsRm9ybSgpOworICAgIHJldHVybiB0YXJnZXQ7Cit9CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgUHJvZ3JhbSBlbnRyeSBwb2ludAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJnc1tdKQoreworICAgIC8vIEluaXRpYWxpemUgdGhlIFhNTDRDIHN5c3RlbQorICAgIHRyeQorICAgIHsKKyAgICAgICAgIFhNTFBsYXRmb3JtVXRpbHM6OkluaXRpYWxpemUoKTsKKyAgICB9CisKKyAgICBjYXRjaCAoY29uc3QgWE1MRXhjZXB0aW9uJiB0b0NhdGNoKQorICAgIHsKKyAgICAgICAgIGNlcnIgICA8PCAiRXJyb3IgZHVyaW5nIGluaXRpYWxpemF0aW9uISBNZXNzYWdlOlxuIgorICAgICAgICAgICAgICAgIDw8IFN0clgodG9DYXRjaC5nZXRNZXNzYWdlKCkpIDw8IGVuZGw7CisgICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvLyBXZSBvbmx5IGhhdmUgb25lIHJlcXVpcmVkIHBhcmFtZXRlciwgd2hpY2ggaXMgdGhlIGZpbGUgdG8gcHJvY2VzcworICAgIGlmIChhcmdjIDwgMikKKyAgICB7CisgICAgICAgIHVzYWdlKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgY29uc3QgY2hhciogeG1sRmlsZSA9IGFyZ3NbMV07CisgICAgYm9vbCAgZG9WYWxpZGF0aW9uID0gZmFsc2U7CisKKyAgICAvLyBDaGVjayBmb3Igc29tZSBzcGVjaWFsIGNhc2VzIHZhbHVlcyBvZiB0aGUgcGFyYW1ldGVyCisgICAgaWYgKCFzdHJuY21wKHhtbEZpbGUsICItPyIsIDIpKQorICAgIHsKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICBlbHNlIGlmICghc3RybmNtcCh4bWxGaWxlLCAiLXYiLCAyKSkKKyAgICB7CisgICAgICAgIGRvVmFsaWRhdGlvbiA9IHRydWU7CisgICAgICAgIGlmIChhcmdjIDwgMykKKyAgICAgICAgeworICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICB4bWxGaWxlID0gYXJnc1syXTsKKyAgICB9CisgICAgIGVsc2UgaWYgKHhtbEZpbGVbMF0gPT0gJy0nKQorICAgIHsKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8vCisgICAgLy8gIENyZWF0ZSBhIERURCB2YWxpZGF0b3IgdG8gYmUgdXNlZCBmb3Igb3VyIHZhbGlkYXRpb24gd29yay4gVGhlbiBjcmVhdGUKKyAgICAvLyAgYSBTQVggcGFyc2VyIG9iamVjdCBhbmQgcGFzcyBpdCBvdXIgdmFsaWRhdG9yLiBUaGVuLCBhY2NvcmRpbmcgdG8gd2hhdAorICAgIC8vICB3ZSB3ZXJlIHRvbGQgb24gdGhlIGNvbW1hbmQgbGluZSwgc2V0IGl0IHRvIHZhbGlkYXRlIG9yIG5vdC4gSGUgb3ducworICAgIC8vICB0aGUgdmFsaWRhdG9yLCBzbyB3ZSBoYXZlIHRvIGFsbG9jYXRlIGl0LgorICAgIC8vCisgICAgRFREVmFsaWRhdG9yKiB2YWxUb1VzZSA9IG5ldyBEVERWYWxpZGF0b3I7CisgICAgU0FYUGFyc2VyIHBhcnNlcih2YWxUb1VzZSk7CisgICAgcGFyc2VyLnNldERvVmFsaWRhdGlvbihkb1ZhbGlkYXRpb24pOworCisgICAgLy8KKyAgICAvLyAgR2V0IHRoZSBzdGFydGluZyB0aW1lIGFuZCBraWNrIG9mZiB0aGUgcGFyc2Ugb2YgdGhlIGluZGljYXRlZAorICAgIC8vICBmaWxlLiBDYXRjaCBhbnkgZXhjZXB0aW9ucyB0aGF0IG1pZ2h0IHByb3BvZ2F0ZSBvdXQgb2YgaXQuCisgICAgLy8KKyAgICB0cnkKKyAgICB7CisgICAgICAgIHBhcnNlci5wYXJzZSh4bWxGaWxlKTsKKyAgICB9CisKKyAgICBjYXRjaCAoY29uc3QgWE1MRXhjZXB0aW9uJiBlKQorICAgIHsKKyAgICAgICAgY2VyciA8PCAiXG5FcnJvciBkdXJpbmcgcGFyc2luZzogJyIgPDwgeG1sRmlsZSA8PCAiJ1xuIgorICAgICAgICAgICAgIDw8ICJFeGNlcHRpb24gbWVzc2FnZSBpczogIFxuIgorICAgICAgICAgICAgIDw8IFN0clgoZS5nZXRNZXNzYWdlKCkpIDw8ICJcbiIgPDwgZW5kbDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8vCisgICAgLy8gIE5vdyB3ZSB3aWxsIGdldCBhbiBlbnVtZXJhdG9yIGZvciB0aGUgZWxlbWVudCBwb29sIGZyb20gdGhlIHZhbGlkYXRvcgorICAgIC8vICBhbmQgZW51bWVyYXRlIHRoZSBlbGVtZW50cywgcHJpbnRpbmcgdGhlbSBhcyB3ZSBnby4gRm9yIGVhY2ggZWxlbWVudAorICAgIC8vICB3ZSBnZXQgYW4gZW51bWVyYXRvciBmb3IgaXRzIGF0dHJpYnV0ZXMgYW5kIHByaW50IHRoZW0gYWxzby4KKyAgICAvLworICAgIE5hbWVJZFBvb2xFbnVtZXJhdG9yPERUREVsZW1lbnREZWNsPiBlbGVtRW51bSA9IHZhbFRvVXNlLT5nZXRFbGVtRW51bWVyYXRvcigpOworICAgIGlmIChlbGVtRW51bS5oYXNNb3JlRWxlbWVudHMoKSkKKyAgICB7CisgICAgICAgIGNvdXQgPDwgIlxuRUxFTUVOVFM6XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOworICAgICAgICB3aGlsZShlbGVtRW51bS5oYXNNb3JlRWxlbWVudHMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRFRERWxlbWVudERlY2wmIGN1ckVsZW0gPSBlbGVtRW51bS5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgY291dCA8PCAiICBOYW1lOiAiIDw8IFN0clgoY3VyRWxlbS5nZXRGdWxsTmFtZSgpKSA8PCAiXG4iOworCisgICAgICAgICAgICBjb3V0IDw8ICIgIENvbnRlbnQgTW9kZWw6ICIKKyAgICAgICAgICAgICAgICAgPDwgU3RyWChjdXJFbGVtLmdldEZvcm1hdHRlZENvbnRlbnRNb2RlbCgqdmFsVG9Vc2UpKQorICAgICAgICAgICAgICAgICA8PCAiXG4iOworCisgICAgICAgICAgICAvLyBHZXQgYW4gZW51bWVyYXRvciBmb3IgdGhpcyBndXkncyBhdHRyaWJ1dGVzIGlmIGFueQorICAgICAgICAgICAgaWYgKGN1ckVsZW0uaGFzQXR0RGVmcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvdXQgPDwgIiAgQXR0cmlidXRlczpcbiI7CisgICAgICAgICAgICAgICAgWE1MQXR0RGVmTGlzdCYgYXR0TGlzdCA9IGN1ckVsZW0uZ2V0QXR0RGVmTGlzdCgpOworICAgICAgICAgICAgICAgIHdoaWxlIChhdHRMaXN0Lmhhc01vcmVFbGVtZW50cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MQXR0RGVmJiBjdXJBdHREZWYgPSBhdHRMaXN0Lm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIiAgICBOYW1lOiIgPDwgU3RyWChjdXJBdHREZWYuZ2V0RnVsbE5hbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiLCBUeXBlOiAiOworCisgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgdHlwZSBhbmQgZGlzcGxheSBpdAorICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxBdHREZWY6OkF0dFR5cGVzIHR5cGUgPSBjdXJBdHREZWYuZ2V0VHlwZSgpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2godHlwZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxBdHREZWY6OkNEYXRhIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICJDREFUQSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MQXR0RGVmOjpJRCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291dCA8PCAiSUQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhNTEF0dERlZjo6SURSZWYgOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxBdHREZWY6OklEUmVmcyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291dCA8PCAiSURSRUYoUykiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhNTEF0dERlZjo6RW50aXR5IDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MQXR0RGVmOjpFbnRpdGllcyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291dCA8PCAiRU5USVRZKElFUykiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhNTEF0dERlZjo6Tm1Ub2tlbiA6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhNTEF0dERlZjo6Tm1Ub2tlbnMgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIk5NVE9LRU4oUykiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhNTEF0dERlZjo6Tm90YXRpb24gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIk5PVEFUSU9OIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxBdHREZWY6OkVudW1lcmF0aW9uIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICJFTlVNRVJBVElPTiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICJcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY291dCA8PCBlbmRsOworICAgICAgICB9CisgICAgfQorICAgICBlbHNlCisgICAgeworICAgICAgICBjb3V0IDw8ICJUaGUgdmFsaWRhdG9yIGhhcyBubyBlbGVtZW50cyB0byBkaXNwbGF5XG4iIDw8IGVuZGw7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIExvY2FsIGhlbHBlciBtZXRob2RzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXRpYyB2b2lkIHVzYWdlKCkKK3sKKyAgICBjb3V0IDw8ICJcblVzYWdlOlxuIgorICAgICAgICAgIiAgICBFbnVtVmFsIFstdl0gPFhNTCBmaWxlPlxuIgorICAgICAgICAgIiAgICAtdiAgRG8gYSB2YWxpZGF0aW5nIHBhcnNlLiBEZWZhdWx0cyB0byBub24tdmFsaWRhdGluZy5cbiIKKyAgICAgICAgICJUaGlzIHByb2dyYW0gcGFyc2VzIGEgZmlsZSwgdGhlbiBzaG93cyBob3cgdG8gZW51bWVyYXRlIHRoZSIKKyAgICAgICAgICJjb250ZW50cyBvZiB0aGUgdmFsaWRhdG9yIHBvb2xzXG4iIDw8IGVuZGw7Cit9CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgU3RyWDogUHJpdmF0ZSBoZWxwZXIgbWV0aG9kcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIFN0clg6OnRyYW5zY29kZShjb25zdCBYTUxDaCogY29uc3QgdG9UcmFuc2NvZGUsIGNvbnN0IHVuc2lnbmVkIGludCBsZW4pCit7CisgICAgLy8gU2hvcnQgY2lyY3VpdCBpZiBpdHMgYSBudWxsIHBvaW50ZXIKKyAgICBpZiAoIXRvVHJhbnNjb2RlKQorICAgIHsKKyAgICAgICAgZkxvY2FsRm9ybSA9IG5ldyBjaGFyWzFdOworICAgICAgICBmTG9jYWxGb3JtWzBdID0gMDsKKyAgICAgICAgcmV0dXJuOworCX0KKworICAgIC8vIFNlZSBpZiBvdXIgWE1MQ2ggYW5kIHdjaGFyX3QgYXMgdGhlIHNhbWUgb24gdGhpcyBwbGF0Zm9ybQorICAgIGNvbnN0IGJvb2wgaXNTYW1lU2l6ZSA9IChzaXplb2YoWE1MQ2gpID09IHNpemVvZih3Y2hhcl90KSk7CisKKyAgICAvLworICAgIC8vICBHZXQgdGhlIGFjdHVhbCBudW1iZXIgb2YgY2hhcnMuIElmIHRoZSBwYXNzZWQgbGVuIGlzIHplcm8sIGl0cyBudWxsCisgICAgLy8gIHRlcm1pbmF0ZWQuIEVsc2Ugd2UgaGF2ZSB0byB1c2UgdGhlIGxlbi4KKyAgICAvLworICAgIHdjaGFyX3QgcmVhbExlbiA9ICh3Y2hhcl90KWxlbjsKKyAgICBpZiAoIXJlYWxMZW4pCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyAgV2UgY2Fubm90IGp1c3QgYXNzdW1lIHdlIGNhbiB1c2Ugd2NzbGVuKCkgYmVjYXVzZSB3ZSBkb24ndCBrbm93CisgICAgICAgIC8vICBpZiBvdXIgWE1MQ2ggaXMgdGhlIHNhbWUgYXMgd2NoYXJfdCBvbiB0aGlzIHBsYXRmb3JtLgorICAgICAgICAvLworICAgICAgICBjb25zdCBYTUxDaCogdG1wUHRyID0gdG9UcmFuc2NvZGU7CisgICAgICAgIHdoaWxlICgqKHRtcFB0cisrKSkKKyAgICAgICAgICAgIHJlYWxMZW4rKzsKKyAgICB9CisKKyAgICAvLworICAgIC8vICBJZiBlaXRoZXIgdGhlIHBhc3NlZCBsZW5ndGggd2FzIG5vbi16ZXJvIG9yIG91ciBjaGFyIHNpemVzIGFyZSBub3QgCisgICAgLy8gIHNhbWUsIHdlIGhhdmUgdG8gdXNlIGEgdGVtcCBidWZmZXIuIFNpbmNlIHRoaXMgaXMgY29tbW9uIGluIHRoZXNlCisgICAgLy8gIHNhbXBsZXMsIHdlIGp1c3QgZG8gaXQgYW55d2F5LgorICAgIC8vCisgICAgd2NoYXJfdCogdG1wU291cmNlID0gbmV3IHdjaGFyX3RbcmVhbExlbiArIDFdOworICAgIGlmIChpc1NhbWVTaXplKQorICAgIHsKKyAgICAgICAgbWVtY3B5KHRtcFNvdXJjZSwgdG9UcmFuc2NvZGUsIHJlYWxMZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICAgIH0KKyAgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHJlYWxMZW47IGluZGV4KyspCisgICAgICAgICAgICB0bXBTb3VyY2VbaW5kZXhdID0gKHdjaGFyX3QpdG9UcmFuc2NvZGVbaW5kZXhdOworICAgIH0KKyAgICB0bXBTb3VyY2VbcmVhbExlbl0gPSAwOworCisgICAgLy8gU2VlIG5vdyBtYW55IGNoYXJzIHdlIG5lZWQgdG8gdHJhbnNjb2RlIHRoaXMgZ3V5CisgICAgY29uc3QgdW5zaWduZWQgaW50IHRhcmdldExlbiA9IDo6d2NzdG9tYnMoMCwgdG1wU291cmNlLCAwKTsKKworICAgIC8vIEFsbG9jYXRlIG91dCBzdG9yYWdlIG1lbWJlcgorICAgIGZMb2NhbEZvcm0gPSBuZXcgY2hhclt0YXJnZXRMZW4gKyAxXTsKKworICAgIC8vCisgICAgLy8gIEFuZCB0cmFuc2NvZGUgb3VyIHRlbXAgc291cmNlIGJ1ZmZlciB0byB0aGUgbG9jYWwgYnVmZmVyLiBDYXAgaXQKKyAgICAvLyAgb2ZmIHNpbmNlIHRoZSBjb252ZXJ0ZXIgd29uJ3QgZG8gaXQgKGJlY2F1c2UgdGhlIG51bGwgaXMgYmV5b25kCisgICAgLy8gIHdoZXJlIHRoZSB0YXJnZXQgd2lsbCBmaWxsIHVwLikKKyAgICAvLworICAgIDo6d2NzdG9tYnMoZkxvY2FsRm9ybSwgdG1wU291cmNlLCB0YXJnZXRMZW4pOworICAgIGZMb2NhbEZvcm1bdGFyZ2V0TGVuXSA9IDA7CisKKyAgICAvLyBEb24ndCBmb3JnZXQgdG8gZGVsZXRlIG91ciB0ZW1wIGJ1ZmZlcgorICAgIGRlbGV0ZSBbXSB0bXBTb3VyY2U7Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0VudW1WYWwvTWFrZWZpbGUuaW4gYi9zYW1wbGVzL0VudW1WYWwvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNkZTVjOQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvRW51bVZhbC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDEwNyBAQAorIworIyBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCisjIAorIyBDb3B5cmlnaHQgKGMpIDE5OTkgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKKyMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIAorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorIyAKKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisjICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgICAgZGlzdHJpYnV0aW9uLgorIyAKKyMgMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCisjICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKKyMgICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCisjICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgorIyAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCisjICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCisjIAorIyA0LiBUaGUgbmFtZXMgIlhlcmNlcyIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAorIyAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyMgICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAorIyAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVcQGFwYWNoZS5vcmcuCisjIAorIyA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIiwKKyMgICAgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuCisjICAgIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAorIyBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworIyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCisjIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisjIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorIyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIAorIyBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQorIyBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQgd2FzCisjIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAxOTk5LCBJbnRlcm5hdGlvbmFsCisjIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuLCBodHRwOi8vd3d3LmlibS5jb20gLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgb24gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlCisjIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KKyMgCisjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgICAgICAgICAgICAgICAgICAgIElNUE9SVEFOVCBOT1RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSWYgeW91IGFyZSBnb2luZyB0byBkbyB0aGUgT1MzOTBCQVRDSCBidWlsZCwgbWFrZSBzdXJlIHlvdSBoYXZlICMKKyMgdGhlIE9TMzkwQkFUQ0ggZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICBleHBvcnQgT1MzOTBCQVRDSD0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUExBVEZPUk0gPSBAcGxhdGZvcm1ACitDT01QSUxFUiA9IEBjb21waWxlckAKK0NYWEZMQUdTID0gQGN4eGZsYWdzQAorQ0ZMQUdTID0gQGNmbGFnc0AKK1BSRUZJWCA9IEBwcmVmaXhACisKK2luY2x1ZGUgLi4vTWFrZWZpbGUuaW5jbAorCitBUFBfTkFNRT1FbnVtVmFsCisKK09VVERJUj0gJHtYRVJDRVNDUk9PVH0vYmluL29iai8ke0FQUF9OQU1FfQorRVhFQz0JJHtYRVJDRVNDUk9PVH0vYmluCitPQkpTPQkke09VVERJUn0vRW51bVZhbC5vCitTUkM9CSR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvJHtBUFBfTkFNRX0KK0hFQURFUl9GSUxFUz0KKworIyMgT1MzOTBCQVRDSAoraWZlcSAoJHtPUzM5MEJBVENIfSwxKQorQkFUQ0hfVEFSR0VUPSAiLy8nJHtMT0FETU9EfSgke0FQUF9OQU1FfSknIgorYWxsOiBtYWtlZGlyICR7QkFUQ0hfVEFSR0VUfQorZWxzZQorYWxsOiBtYWtlZGlyICR7RVhFQ30vJHtBUFBfTkFNRX0KK2VuZGlmCisKK21ha2VkaXI6CisJLW1rZGlyIC1wICQoT1VURElSKQorCiske0VYRUN9LyR7QVBQX05BTUV9OiAke09CSlN9CisJJHtMSU5LfSAke1BMQVRGT1JNX0xJQl9MSU5LX09QVElPTlN9ICR7T0JKU30gLW8gJEAgJHtMSUJSQVJZX1NFQVJDSF9QQVRIU30gJHtMSUJSQVJZX05BTUVTfSAke0VYVFJBX0xJTktfT1BUSU9OU30gCiske0JBVENIX1RBUkdFVH06ICR7T0JKU30KKwkke0xJTkt9ICR7UExBVEZPUk1fTElCX0xJTktfT1BUSU9OU30gJHtPQkpTfSAtbyAkQCAke0xJQlJBUllfU0VBUkNIX1BBVEhTfSAke0xJQlJBUllfTkFNRVN9ICR7RVhUUkFfTElOS19PUFRJT05TfSAKKworJChPVVRESVIpL0VudW1WYWwubzogJHtTUkN9L0VudW1WYWwuY3BwICR7SEVBREVSX0ZJTEVTfQorCSR7Q0N9ICR7Q01QfSAkKElOQ0xVREVTKSAtbyAkKE9VVERJUikvRW51bVZhbC5vICR7U1JDfS9FbnVtVmFsLmNwcAorCitjbGVhbjoKKwlybSAtZiAke09CSlN9ICR7RVhFQ30vJHtBUFBfTkFNRX0KKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mIE1ha2VmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL01ha2VmaWxlLmluIGIvc2FtcGxlcy9NYWtlZmlsZS5pbgppbmRleCA2MWNiMWMxLi5kNzQ2MTU2IDEwMDY0NAotLS0gYS9zYW1wbGVzL01ha2VmaWxlLmluCisrKyBiL3NhbXBsZXMvTWFrZWZpbGUuaW4KQEAgLTU1LDggKzU1LDE0IEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6MjUgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuNCAgMTk5OS8xMS8zMCAyMTozNToyMSAgYWJhZ2NoaQorIyBJbmNsdWRlZCBFbnVtVmFsIGluIHRoZSBsaXN0IG9mIHNhbXBsZXMKKyMKKyMgUmV2aXNpb24gMS4zICAxOTk5LzExLzEyIDIwOjMxOjIyICByYWh1bGoKKyMgUmVwbGFjZWQgWE1MNENST09UIHdpdGggWEVSQ0VTQ1JPT1QuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MjUgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS40ICAxOTk5LzExLzA4IDIwOjQzOjMzICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC03MSw3ICs3Nyw4IEBACiBNZW1QYXJzZV9ESVI9TWVtUGFyc2UKIFBQYXJzZV9ESVI9UFBhcnNlCiBTdGRJblBhcnNlX0RJUj1TdGRJblBhcnNlCi1MSUJfRElSPSR7WE1MNENST09UfS9saWIKK0VudW1WYWxfRElSPUVudW1WYWwKK0xJQl9ESVI9JHtYRVJDRVNDUk9PVH0vbGliCiAKIFBMQVRGT1JNID0gQHBsYXRmb3JtQAogQ09NUElMRVIgPSBAY29tcGlsZXJACkBAIC03OSw3ICs4Niw3IEBACiBDRkxBR1MgPSBAY2ZsYWdzQAogUFJFRklYID0gQHByZWZpeEAKIAotYWxsOglzYXhwcmludCBzYXhjb3VudCBkb21wcmludCBkb21jb3VudCByZWRpcmVjdCBtZW1wYXJzZSBwcGFyc2Ugc3RkaW5wYXJzZQorYWxsOglzYXhwcmludCBzYXhjb3VudCBkb21wcmludCBkb21jb3VudCByZWRpcmVjdCBtZW1wYXJzZSBwcGFyc2Ugc3RkaW5wYXJzZSBlbnVtdmFsCiAKIHNheHByaW50OgogCUBlY2hvIEJ1aWxkaW5nICJTQVhQcmludCIKQEAgLTExMyw2ICsxMjAsMTAgQEAKIAlAZWNobyBCdWlsZGluZyAiU3RkSW5QYXJzZSIKIAljZCAkKFN0ZEluUGFyc2VfRElSKSA7ICQoTUFLRSkgJChNQUtFX0ZMQUdTKSA7IGNkIC4uCiAKK2VudW12YWw6CisJQGVjaG8gQnVpbGRpbmcgIkVudW1WYWwiCisJY2QgJChFbnVtVmFsX0RJUikgOyAkKE1BS0UpICQoTUFLRV9GTEFHUykgOyBjZCAuLgorCiBjbGVhbjoKIAljZCAkKFNBWFByaW50X0RJUikgJiYgJChNQUtFKSAkQCAmJiBjZCAuLgogCWNkICQoU0FYQ291bnRfRElSKSAmJiAkKE1BS0UpICRAICYmIGNkIC4uCkBAIC0xMjIsNiArMTMzLDcgQEAKIAljZCAkKFJlZGlyZWN0X0RJUikgJiYgJChNQUtFKSAkQCAmJiBjZCAuLgogCWNkICQoUFBhcnNlX0RJUikgJiYgJChNQUtFKSAkQCAmJiBjZCAuLgogCWNkICQoU3RkSW5QYXJzZV9ESVIpICYmICQoTUFLRSkgJEAgJiYgY2QgLi4KKwljZCAkKEVudW1WYWxfRElSKSAmJiAkKE1BS0UpICRAICYmIGNkIC4uCiAKIGRpc3RjbGVhbjoKIAljZCAkKFNBWFByaW50X0RJUikgJiYgJChNQUtFKSAkQCAmJiBjZCAuLgpAQCAtMTMyLDYgKzE0NCw3IEBACiAJY2QgJChSZWRpcmVjdF9ESVIpICYmICQoTUFLRSkgJEAgJiYgY2QgLi4KIAljZCAkKFBQYXJzZV9ESVIpICYmICQoTUFLRSkgJEAgJiYgY2QgLi4KIAljZCAkKFN0ZEluUGFyc2VfRElSKSAmJiAkKE1BS0UpICRAICYmIGNkIC4uCisJY2QgJChFbnVtVmFsX0RJUikgJiYgJChNQUtFKSAkQCAmJiBjZCAuLgogCXJtIC1mIE1ha2VmaWxlIGNvbmZpZy5jYWNoZSBjb25maWcubG9nIGNvbmZpZy5zdGF0dXMKIAlybSAtZiAqfiBjb3JlCiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvTWFrZWZpbGUuaW5jbCBiL3NhbXBsZXMvTWFrZWZpbGUuaW5jbAppbmRleCBjOWE2YzUwLi44YTRhZDAxIDEwMDY0NAotLS0gYS9zYW1wbGVzL01ha2VmaWxlLmluY2wKKysrIGIvc2FtcGxlcy9NYWtlZmlsZS5pbmNsCkBAIC01NSw4ICs1NSwxNCBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjI1ICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjQgIDE5OTkvMTIvMDEgMDE6MDg6MjAgIGFydW5hMQorIyBBZGRlZCBub3RlbXBpbmMgZm9yIEFJWAorIworIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMTIgMjA6MzE6MjMgIHJhaHVsagorIyBSZXBsYWNlZCBYTUw0Q1JPT1Qgd2l0aCBYRVJDRVNDUk9PVC4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowOToyNSAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDM6MzQgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTY1LDExICs3MSwxMSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMgTElCUkFSWSBOQU1FUyBBTkQgRElSRUNUT1JJRVMgIyMjIyMjIyMjIyMjIyMjIyMjCiAKLUlOQ0xVREVTPSAtSS4gLUkke1hNTDRDUk9PVH0vaW5jbHVkZQotTElCX0RJUj0ke1hNTDRDUk9PVH0vbGliCi1MSUJOQU1FPUlYWE1MNEMKK0lOQ0xVREVTPSAtSS4gLUkke1hFUkNFU0NST09UfS9pbmNsdWRlCitMSUJfRElSPSR7WEVSQ0VTQ1JPT1R9L2xpYgorTElCTkFNRT14ZXJjZXMtYwogVEhJU0xJQj0ke0xJQl9ESVJ9LyR7TElCTkFNRX0KLVZFUj0zXzAKK1ZFUj0xXzAKIGlmZGVmIElDVVJPT1QKICAgIElDVV9MSUJfRElSPSR7SUNVUk9PVH0vbGliCiAgICBJQ1VfTElCTkFNRT1pY3UtdWMKQEAgLTEwMiw3ICsxMDgsNyBAQAogCiAjPT09PT09PT09PT09PT09PT0gQUlYIFNQRUNJRklDIE9QVElPTlMgPT09PT09PT09PT09PT09PT09PT09PT09PT09CiBpZmVxICgke1BMQVRGT1JNfSwgQUlYKQotQ01QPSAtYyAke0NYWEZMQUdTfQorQ01QPSAtYyAke0NYWEZMQUdTfSAtcW5vdGVtcGluYwogQ0M9eGxDX3IgLUQke1BMQVRGT1JNfQogTElOSyA9ICAke0NDfQogUExBVEZPUk1fTElCX0xJTktfT1BUSU9OUz0tTC91c3IvbHBwL3hsQy9saWIKQEAgLTEzMyw3ICsxMzksNyBAQAogICAgICAgQ1hYRkxBR1MgPSAtdyArTzEKICAgICBlbmRpZgogICAgIEFQUExfTkFNRSA9ICQobm90ZGlyICQoc2hlbGwgcHdkKSkKLSAgICBURU1QTEFURVNESVIgPSAkKFhNTDRDUk9PVCkvYmluL29iai8kKEFQUExfTkFNRSkvcHRyZXBvc2l0b3J5CisgICAgVEVNUExBVEVTRElSID0gJChYRVJDRVNDUk9PVCkvYmluL29iai8kKEFQUExfTkFNRSkvcHRyZXBvc2l0b3J5CiAgICAgQ09NTU9OX0NNUCA9ICQoQ1hYRkxBR1MpIC1EX0hQX1VYIC1ESFBDQyArREFwb3J0YWJsZSAtdyArZWggK3ogLXogXAogICAgICAgICAtcHRyJChURU1QTEFURVNESVIpCiAgICAgQ01QID0gLWMgJChDT01NT05fQ01QKQpAQCAtMTUxLDE5ICsxNTcsNyBAQAogIyBCZWZvcmUgeW91IHRyeSB0byBydW4gdGhlIE1ha2VmaWxlLCBtYWtlIHN1cmUgeW91IGhhdmUgdHdvICAgICAgIwogIyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwogIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwotIyAgIGV4cG9ydCBYTUw0Q1JPT1Q9PHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91IGluc3RhbGxlZCBYTUw0Qz4gICAgIwotIyBYTUw0QyBjYW4gYmUgYnVpbHQgaW4gdHdvIHdheXMgKDEpIHVzaW5nIElDVSBhbmQgICAgICAgICAgICAgICAgIwotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIpIHVzaW5nIEljb252IChub3QgSUNVKSAgICAgICAgIwotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwotIyBUbyB1c2UgSUNVLCB5b3UgbXVzdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwotIyAgIGV4cG9ydCBJQ1VST09UPTx0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSBpbnN0YWxsZWQgSUNVPiAgICAgICAgIwotIyBUbyBkaXNhYmxlIElDVSBhbmQgdXNlIEljb252IGluc3RlYWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIwotIyAgIHVuc2V0IElDVVJPT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwotIyBBbHNvLCB0byBlbmFibGUgZGVidWdnaW5nLCB5b3UgbXVzdCB0eXBlOiAgICAgICAgICAgICAgICAgICAgICAgIwotIyAgIGV4cG9ydCBERUJVRz0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwotIyBUbyBkaXNhYmxlIGRlYnVnZ2luZywgeW91IG11c3QgdHlwZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIwotIyAgIHVuc2V0IERFQlVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBleHBvcnQgWEVSQ0VTQ1JPT1Q9PHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91IGluc3RhbGxlZCBYRVJDRVMtQz4gIwogIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwogIyBJZiB5b3UgYXJlIGdvaW5nIHRvIGRvIHRoZSBPUzM5MEJBVENIIGJ1aWxkLCBtYWtlIHN1cmUgeW91IGhhdmUgIwogIyB0aGUgT1MzOTBCQVRDSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXQuICAgICAgICAgICAgICAgICAgICAgICAgIwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9NZW1QYXJzZS9NYWtlZmlsZS5pbiBiL3NhbXBsZXMvTWVtUGFyc2UvTWFrZWZpbGUuaW4KaW5kZXggODZiMTBkNi4uNDhjYWU5OCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9NZW1QYXJzZS9NYWtlZmlsZS5pbgorKysgYi9zYW1wbGVzL01lbVBhcnNlL01ha2VmaWxlLmluCkBAIC01NSw4ICs1NSwxMSBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjQ5ICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMTIgMjA6MzQ6MzkgIHJhaHVsagorIyBSZXBsYWNlZCBYTUw0Q1JPT1Qgd2l0aCBYRVJDRVNDUk9PVC4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowOTo0OSAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDM6MzYgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTgzLDEwICs4NiwxMCBAQAogCiBBUFBfTkFNRT1NZW1QYXJzZQogCi1PVVRESVI9ICR7WE1MNENST09UfS9iaW4vb2JqLyR7QVBQX05BTUV9Ci1FWEVDPQkke1hNTDRDUk9PVH0vYmluCitPVVRESVI9ICR7WEVSQ0VTQ1JPT1R9L2Jpbi9vYmovJHtBUFBfTkFNRX0KK0VYRUM9CSR7WEVSQ0VTQ1JPT1R9L2JpbgogT0JKUz0JJHtPVVRESVJ9L01lbVBhcnNlLm8gJHtPVVRESVJ9L01lbVBhcnNlSGFuZGxlcnMubwotU1JDPQkke1hNTDRDUk9PVH0vc2FtcGxlcy8ke0FQUF9OQU1FfQorU1JDPQkke1hFUkNFU0NST09UfS9zYW1wbGVzLyR7QVBQX05BTUV9CiBIRUFERVJfRklMRVM9ICR7U1JDfS9NZW1QYXJzZS5ocHAgJHtTUkN9L01lbVBhcnNlSGFuZGxlcnMuaHBwCiAKICMjIE9TMzkwQkFUQ0gKZGlmZiAtLWdpdCBhL3NhbXBsZXMvTWVtUGFyc2UvTWVtUGFyc2UuY3BwIGIvc2FtcGxlcy9NZW1QYXJzZS9NZW1QYXJzZS5jcHAKaW5kZXggODE1ZThmNy4uMWQ3NzBmNCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9NZW1QYXJzZS9NZW1QYXJzZS5jcHAKKysrIGIvc2FtcGxlcy9NZW1QYXJzZS9NZW1QYXJzZS5jcHAKQEAgLTY0LDggKzY0LDExIEBACiAgKiBvbiBwYXJhbWV0ZXJzIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjQ5ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMCAwMTowOTo1NSAgcmFodWxqCisgKiBGaXhlZCB1c2FnZSBtZXNzYWdlLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6NDkgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS43ICAxOTk5LzExLzA4IDIwOjQzOjM2ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTI2LDcgKzEyOSw3IEBACiB2b2lkIHVzYWdlKCkKIHsKICAgICBjb3V0IDw8ICJcblVzYWdlOlxuIgotICAgICAgICAgPDwgIiAgICBNZW1QYXJzZSBbLW52XVxuIgorICAgICAgICAgPDwgIiAgICBNZW1QYXJzZSBbLXZdXG4iCiAgICAgICAgICA8PCAiVGhpcyBwcm9ncmFtIHVzZXMgdGhlIFNBWCBQYXJzZXIgdG8gcGFyc2UgYSBtZW1vcnkgYnVmZmVyXG4iCiAgICAgICAgICA8PCAiY29udGFpbmluZyBYTUwgc3RhdGVtZW50cywgYW5kIHJlcG9ydHMgdGhlIG51bWJlciBvZlxuIgogICAgICAgICAgPDwgImVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGZvdW5kLlxuIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9QUGFyc2UvTWFrZWZpbGUuaW4gYi9zYW1wbGVzL1BQYXJzZS9NYWtlZmlsZS5pbgppbmRleCA3M2ZlZWZmLi40ZjQ0N2ViIDEwMDY0NAotLS0gYS9zYW1wbGVzL1BQYXJzZS9NYWtlZmlsZS5pbgorKysgYi9zYW1wbGVzL1BQYXJzZS9NYWtlZmlsZS5pbgpAQCAtNTUsOCArNTUsMTEgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOTo0NSAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzEyIDIwOjM0OjQyICByYWh1bGoKKyMgUmVwbGFjZWQgWE1MNENST09UIHdpdGggWEVSQ0VTQ1JPT1QuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6NDUgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQzOjM3ICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC04MywxMCArODYsMTAgQEAKIAogQVBQX05BTUU9UFBhcnNlCiAKLU9VVERJUj0gJHtYTUw0Q1JPT1R9L2Jpbi9vYmovJHtBUFBfTkFNRX0KLUVYRUM9CSR7WE1MNENST09UfS9iaW4KK09VVERJUj0gJHtYRVJDRVNDUk9PVH0vYmluL29iai8ke0FQUF9OQU1FfQorRVhFQz0JJHtYRVJDRVNDUk9PVH0vYmluCiBPQkpTPQkke09VVERJUn0vUFBhcnNlLm8gJHtPVVRESVJ9L1BQYXJzZUhhbmRsZXJzLm8KLVNSQz0JJHtYTUw0Q1JPT1R9L3NhbXBsZXMvJHtBUFBfTkFNRX0KK1NSQz0JJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy8ke0FQUF9OQU1FfQogSEVBREVSX0ZJTEVTPSR7U1JDfS9QUGFyc2UuaHBwICR7U1JDfS9QUGFyc2VIYW5kbGVycy5ocHAKIAogIyMgT1MzOTBCQVRDSApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvRE9NQ291bnQvRE9NQ291bnQuZHNwIGIvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvRE9NQ291bnQvRE9NQ291bnQuZHNwCmluZGV4IGIwMjYzNGUuLjZmM2I4MWIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L0RPTUNvdW50L0RPTUNvdW50LmRzcAorKysgYi9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9ET01Db3VudC9ET01Db3VudC5kc3AKQEAgLTQ3LDcgKzQ3LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28KIExJTkszMj1saW5rLmV4ZQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYWE1MNEMzLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjIuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cbGliIgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxsaWIiCiAjIEJlZ2luIFRhcmdldAogCiAjIE5hbWUgIkRPTUNvdW50IC0gV2luMzIgRGVidWciCmRpZmYgLS1naXQgYS9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9ET01QcmludC9ET01QcmludC5kc3AgYi9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9ET01QcmludC9ET01QcmludC5kc3AKaW5kZXggMDY2MWNjZC4uYmI2MjJlZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvRE9NUHJpbnQvRE9NUHJpbnQuZHNwCisrKyBiL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L0RPTVByaW50L0RPTVByaW50LmRzcApAQCAtNDcsNyArNDcsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbwogTElOSzMyPWxpbmsuZXhlCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0Ci0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgSVhYTUw0QzMubGliIC9ub2xvZ28gL3ZlcnNpb246Mi4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxsaWIiCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXGxpYiIKICMgQmVnaW4gVGFyZ2V0CiAKICMgTmFtZSAiRE9NUHJpbnQgLSBXaW4zMiBEZWJ1ZyIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L0VudW1WYWwvRW51bVZhbC5kc3AgYi9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9FbnVtVmFsL0VudW1WYWwuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MWMyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9FbnVtVmFsL0VudW1WYWwuZHNwCkBAIC0wLDAgKzEsNjcgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iRW51bVZhbCIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKKworQ0ZHPUVudW1WYWwgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJFbnVtVmFsLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiRW51bVZhbC5tYWsiIENGRz0iRW51bVZhbCAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIkVudW1WYWwgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cLi5cLi5cYmluIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXC4uXC4uXGJpblxvYmoiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQ1BQIC9ub2xvZ28gL0c1IC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cLi5cLi5cLi5caW5jbHVkZSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX0NPTlNPTEUiIC9EICJERVZFTlZfVkNQUCIgL0QgIlBST0pfU0FYQ09VTlQiIC9EICJQTEFURk9STV9XSU4zMiIgL0ZEIC9HWiAvYworIyBTVUJUUkFDVCBDUFAgL1lYCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cbGliIgorIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJFbnVtVmFsIC0gV2luMzIgRGVidWciCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXEVudW1WYWxcRW51bVZhbC5jcHAKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiUmVzb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlIgorIyBFbmQgR3JvdXAKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvTWVtUGFyc2UvTWVtUGFyc2UuZHNwIGIvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvTWVtUGFyc2UvTWVtUGFyc2UuZHNwCmluZGV4IGU0OWY5NTAuLmMyNTQ0YzkgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L01lbVBhcnNlL01lbVBhcnNlLmRzcAorKysgYi9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9NZW1QYXJzZS9NZW1QYXJzZS5kc3AKQEAgLTQ3LDcgKzQ3LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28KIExJTkszMj1saW5rLmV4ZQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYWE1MNEMzLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjIuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cbGliIgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxsaWIiCiAjIEJlZ2luIFRhcmdldAogCiAjIE5hbWUgIk1lbVBhcnNlIC0gV2luMzIgRGVidWciCmRpZmYgLS1naXQgYS9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9QUGFyc2UvUFBhcnNlLmRzcCBiL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L1BQYXJzZS9QUGFyc2UuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZDRhNjIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9QUGFyc2UvUFBhcnNlLmRzcApAQCAtMCwwICsxLDgzIEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9IlBQYXJzZSIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKKworQ0ZHPVBQYXJzZSAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIlBQYXJzZS5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIlBQYXJzZS5tYWsiIENGRz0iUFBhcnNlIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiUFBhcnNlIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXC4uXC4uXGJpbiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlwuLlwuLlxiaW5cb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNSAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXC4uXC4uXC4uXGluY2x1ZGUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9DT05TT0xFIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQUk9KX1NBWENPVU5UIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvR1ogL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXGxpYiIKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiUFBhcnNlIC0gV2luMzIgRGVidWciCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXFBQYXJzZVxQUGFyc2UuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cUFBhcnNlXFBQYXJzZUhhbmRsZXJzLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaDtocHA7aHh4O2htO2lubCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXFBQYXJzZVxQUGFyc2UuaHBwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cUFBhcnNlXFBQYXJzZUhhbmRsZXJzLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiCisjIEVuZCBHcm91cAorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9SZWRpcmVjdC9SZWRpcmVjdC5kc3AgYi9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9SZWRpcmVjdC9SZWRpcmVjdC5kc3AKaW5kZXggYjYxODA5ZC4uOTY4NjBhZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvUmVkaXJlY3QvUmVkaXJlY3QuZHNwCisrKyBiL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L1JlZGlyZWN0L1JlZGlyZWN0LmRzcApAQCAtNDcsNyArNDcsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbwogTElOSzMyPWxpbmsuZXhlCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0Ci0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgSVhYTUw0QzMubGliIC9ub2xvZ28gL3ZlcnNpb246Mi4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxsaWIiCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXGxpYiIKICMgQmVnaW4gVGFyZ2V0CiAKICMgTmFtZSAiUmVkaXJlY3QgLSBXaW4zMiBEZWJ1ZyIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L1NBWENvdW50L1NBWENvdW50LmRzcCBiL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L1NBWENvdW50L1NBWENvdW50LmRzcAppbmRleCBlMDJkODJmLi5kMmJmMDc4IDEwMDY0NAotLS0gYS9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9TQVhDb3VudC9TQVhDb3VudC5kc3AKKysrIGIvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvU0FYQ291bnQvU0FYQ291bnQuZHNwCkBAIC00Nyw3ICs0Nyw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvCiBMSU5LMzI9bGluay5leGUKICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBJWFhNTDRDMy5saWIgL25vbG9nbyAvdmVyc2lvbjoyLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXGxpYiIKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiB4ZXJjZXMtY18xLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjEuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cbGliIgogIyBCZWdpbiBUYXJnZXQKIAogIyBOYW1lICJTQVhDb3VudCAtIFdpbjMyIERlYnVnIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvU0FYUHJpbnQvU0FYUHJpbnQuZHNwIGIvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvU0FYUHJpbnQvU0FYUHJpbnQuZHNwCmluZGV4IDgxZDJlNTAuLmU0ZDQ0OGQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L1NBWFByaW50L1NBWFByaW50LmRzcAorKysgYi9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9TQVhQcmludC9TQVhQcmludC5kc3AKQEAgLTQ3LDcgKzQ3LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28KIExJTkszMj1saW5rLmV4ZQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIElYWE1MNEMzLmxpYiAvbm9sb2dvIC92ZXJzaW9uOjIuMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cLi5cLi5cLi5cLi5cbGliIgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIHhlcmNlcy1jXzEubGliIC9ub2xvZ28gL3ZlcnNpb246MS4wIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlwuLlwuLlwuLlwuLlxsaWIiCiAjIEJlZ2luIFRhcmdldAogCiAjIE5hbWUgIlNBWFByaW50IC0gV2luMzIgRGVidWciCmRpZmYgLS1naXQgYS9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9TdGRJblBhcnNlL1N0ZEluUGFyc2UuZHNwIGIvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvU3RkSW5QYXJzZS9TdGRJblBhcnNlLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmQ4NmIzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9Qcm9qZWN0cy9XaW4zMi9WQzYvU3RkSW5QYXJzZS9TdGRJblBhcnNlLmRzcApAQCAtMCwwICsxLDgzIEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9IlN0ZEluUGFyc2UiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCisKK0NGRz1TdGRJblBhcnNlIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiU3RkSW5QYXJzZS5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIlN0ZEluUGFyc2UubWFrIiBDRkc9IlN0ZEluUGFyc2UgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJTdGRJblBhcnNlIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKK0NQUD1jbC5leGUKK1JTQz1yYy5leGUKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXC4uXC4uXGJpbiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlwuLlwuLlxiaW5cb2JqIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MKKyMgQUREIENQUCAvbm9sb2dvIC9HNSAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXC4uXC4uXC4uXGluY2x1ZGUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9DT05TT0xFIiAvRCAiREVWRU5WX1ZDUFAiIC9EICJQUk9KX1NBWENPVU5UIiAvRCAiUExBVEZPUk1fV0lOMzIiIC9GRCAvR1ogL2MKKyMgU1VCVFJBQ1QgQ1BQIC9ZWAorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgeGVyY2VzLWNfMS5saWIgL25vbG9nbyAvdmVyc2lvbjoxLjAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXC4uXC4uXC4uXC4uXGxpYiIKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiU3RkSW5QYXJzZSAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlwuLlwuLlxTdGRJblBhcnNlXFN0ZEluUGFyc2UuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cU3RkSW5QYXJzZVxTdGRJblBhcnNlSGFuZGxlcnMuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cLi5cLi5cU3RkSW5QYXJzZVxTdGRJblBhcnNlLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXC4uXC4uXFN0ZEluUGFyc2VcU3RkSW5QYXJzZUhhbmRsZXJzLmhwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiCisjIEVuZCBHcm91cAorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9zYW1wbGVzL1Byb2plY3RzL1dpbjMyL1ZDNi9zYW1wbGVzLmRzdyBiL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L3NhbXBsZXMuZHN3CmluZGV4IDI3MGIyNzcuLjc0NDIwNGUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L3NhbXBsZXMuZHN3CisrKyBiL3NhbXBsZXMvUHJvamVjdHMvV2luMzIvVkM2L3NhbXBsZXMuZHN3CkBAIC03NSw2ICs3NSw0MiBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKK1Byb2plY3Q6ICJQUGFyc2UiPS5cUFBhcnNlXFBQYXJzZS5kc3AgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIlN0ZEluUGFyc2UiPS5cU3RkSW5QYXJzZVxTdGRJblBhcnNlLmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAiRW51bVZhbCI9LlxFbnVtVmFsXEVudW1WYWwuZHNwIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKIEdsb2JhbDoKIAogUGFja2FnZT08NT4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvUmVkaXJlY3QvTWFrZWZpbGUuaW4gYi9zYW1wbGVzL1JlZGlyZWN0L01ha2VmaWxlLmluCmluZGV4IDc5NDBlYzUuLmU2M2NiZmQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvUmVkaXJlY3QvTWFrZWZpbGUuaW4KKysrIGIvc2FtcGxlcy9SZWRpcmVjdC9NYWtlZmlsZS5pbgpAQCAtNTUsOCArNTUsMTEgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOTozNiAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzEyIDIwOjM0OjQ2ICByYWh1bGoKKyMgUmVwbGFjZWQgWE1MNENST09UIHdpdGggWEVSQ0VTQ1JPT1QuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MzYgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQzOjM4ICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC04MywxMCArODYsMTAgQEAKIAogQVBQX05BTUU9UmVkaXJlY3QKIAotT1VURElSPSAke1hNTDRDUk9PVH0vYmluL29iai8ke0FQUF9OQU1FfQotRVhFQz0JJHtYTUw0Q1JPT1R9L2JpbgorT1VURElSPSAke1hFUkNFU0NST09UfS9iaW4vb2JqLyR7QVBQX05BTUV9CitFWEVDPQkke1hFUkNFU0NST09UfS9iaW4KIE9CSlM9CSR7T1VURElSfS9SZWRpcmVjdC5vICR7T1VURElSfS9SZWRpcmVjdEhhbmRsZXJzLm8KLVNSQz0JJHtYTUw0Q1JPT1R9L3NhbXBsZXMvJHtBUFBfTkFNRX0KK1NSQz0JJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy8ke0FQUF9OQU1FfQogSEVBREVSX0ZJTEVTPSR7U1JDfS9SZWRpcmVjdC5ocHAgJHtTUkN9L1JlZGlyZWN0SGFuZGxlcnMuaHBwCiAKICMjIE9TMzkwQkFUQ0gKZGlmZiAtLWdpdCBhL3NhbXBsZXMvU0FYQ291bnQvTWFrZWZpbGUuaW4gYi9zYW1wbGVzL1NBWENvdW50L01ha2VmaWxlLmluCmluZGV4IGZlNWVmNWEuLjk5MzViZGEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvU0FYQ291bnQvTWFrZWZpbGUuaW4KKysrIGIvc2FtcGxlcy9TQVhDb3VudC9NYWtlZmlsZS5pbgpAQCAtNTUsOCArNTUsMTEgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOTozMCAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzEyIDIwOjM0OjUxICByYWh1bGoKKyMgUmVwbGFjZWQgWE1MNENST09UIHdpdGggWEVSQ0VTQ1JPT1QuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MzAgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQzOjQwICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC04MywxMCArODYsMTAgQEAKIAogQVBQX05BTUU9U0FYQ291bnQKIAotT1VURElSPSAke1hNTDRDUk9PVH0vYmluL29iai8ke0FQUF9OQU1FfQotRVhFQz0JJHtYTUw0Q1JPT1R9L2JpbgorT1VURElSPSAke1hFUkNFU0NST09UfS9iaW4vb2JqLyR7QVBQX05BTUV9CitFWEVDPQkke1hFUkNFU0NST09UfS9iaW4KIE9CSlM9CSR7T1VURElSfS9TQVhDb3VudC5vICR7T1VURElSfS9TQVhDb3VudEhhbmRsZXJzLm8KLVNSQz0JJHtYTUw0Q1JPT1R9L3NhbXBsZXMvJHtBUFBfTkFNRX0KK1NSQz0JJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy8ke0FQUF9OQU1FfQogSEVBREVSX0ZJTEVTPSR7U1JDfS9TQVhDb3VudC5ocHAgJHtTUkN9L1NBWENvdW50SGFuZGxlcnMuaHBwCiAKICMjIE9TMzkwQkFUQ0gKZGlmZiAtLWdpdCBhL3NhbXBsZXMvU0FYUHJpbnQvTWFrZWZpbGUuaW4gYi9zYW1wbGVzL1NBWFByaW50L01ha2VmaWxlLmluCmluZGV4IGVhMDgyOTIuLjdhY2Q2YjEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvU0FYUHJpbnQvTWFrZWZpbGUuaW4KKysrIGIvc2FtcGxlcy9TQVhQcmludC9NYWtlZmlsZS5pbgpAQCAtNTUsOCArNTUsMTEgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOToyOCAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzEyIDIwOjM0OjU1ICByYWh1bGoKKyMgUmVwbGFjZWQgWE1MNENST09UIHdpdGggWEVSQ0VTQ1JPT1QuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MjggIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQzOjQxICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC04MywxMCArODYsMTAgQEAKIAogQVBQX05BTUU9U0FYUHJpbnQKIAotT1VURElSPSAke1hNTDRDUk9PVH0vYmluL29iai8ke0FQUF9OQU1FfQotRVhFQz0JJHtYTUw0Q1JPT1R9L2JpbgorT1VURElSPSAke1hFUkNFU0NST09UfS9iaW4vb2JqLyR7QVBQX05BTUV9CitFWEVDPQkke1hFUkNFU0NST09UfS9iaW4KIE9CSlM9CSR7T1VURElSfS9TQVhQcmludC5vICR7T1VURElSfS9TQVhQcmludEhhbmRsZXJzLm8KLVNSQz0JJHtYTUw0Q1JPT1R9L3NhbXBsZXMvJHtBUFBfTkFNRX0KK1NSQz0JJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy8ke0FQUF9OQU1FfQogSEVBREVSX0ZJTEVTPSR7U1JDfS9TQVhQcmludC5ocHAgJHtTUkN9L1NBWFByaW50SGFuZGxlcnMuaHBwCiAKICMjIE9TMzkwQkFUQ0gKZGlmZiAtLWdpdCBhL3NhbXBsZXMvU3RkSW5QYXJzZS9NYWtlZmlsZS5pbiBiL3NhbXBsZXMvU3RkSW5QYXJzZS9NYWtlZmlsZS5pbgppbmRleCBmYmQyMjE1Li45OTkxNTQ1IDEwMDY0NAotLS0gYS9zYW1wbGVzL1N0ZEluUGFyc2UvTWFrZWZpbGUuaW4KKysrIGIvc2FtcGxlcy9TdGRJblBhcnNlL01ha2VmaWxlLmluCkBAIC01NSw4ICs1NSwxMSBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjI2ICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMTIgMjA6MzU6MDIgIHJhaHVsagorIyBSZXBsYWNlZCBYTUw0Q1JPT1Qgd2l0aCBYRVJDRVNDUk9PVC4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowOToyNiAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDM6NDIgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTgzLDEwICs4NiwxMCBAQAogCiBBUFBfTkFNRT1TdGRJblBhcnNlCiAKLU9VVERJUj0gJHtYTUw0Q1JPT1R9L2Jpbi9vYmovJHtBUFBfTkFNRX0KLUVYRUM9CSR7WE1MNENST09UfS9iaW4KK09VVERJUj0gJHtYRVJDRVNDUk9PVH0vYmluL29iai8ke0FQUF9OQU1FfQorRVhFQz0JJHtYRVJDRVNDUk9PVH0vYmluCiBPQkpTPQkke09VVERJUn0vU3RkSW5QYXJzZS5vICR7T1VURElSfS9TdGRJblBhcnNlSGFuZGxlcnMubwotU1JDPQkke1hNTDRDUk9PVH0vc2FtcGxlcy8ke0FQUF9OQU1FfQorU1JDPQkke1hFUkNFU0NST09UfS9zYW1wbGVzLyR7QVBQX05BTUV9CiBIRUFERVJfRklMRVM9JHtTUkN9L1N0ZEluUGFyc2UuaHBwICR7U1JDfS9TdGRJblBhcnNlSGFuZGxlcnMuaHBwCiAKICMjIE9TMzkwQkFUQ0gKZGlmZiAtLWdpdCBhL3NhbXBsZXMvY29uZmlndXJlIGIvc2FtcGxlcy9jb25maWd1cmUKaW5kZXggNzQzNjE4MC4uMmUwMTI3ZSAxMDA3NTUKLS0tIGEvc2FtcGxlcy9jb25maWd1cmUKKysrIGIvc2FtcGxlcy9jb25maWd1cmUKQEAgLTEzMTQsNiArMTMxNCwxNSBAQAogY29tcGlsZXI9JHtDWFh9CiAKIAorIyBwcmVmaXg9JHtwcmVmaXh9CisKKworY3h4ZmxhZ3M9JHtDWFhGTEFHU30KKworCitjZmxhZ3M9JHtDRkxBR1N9CisKKwogdHJhcCAnJyAxIDIgMTUKIGNhdCA+IGNvbmZjYWNoZSA8PFxFT0YKICMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQpAQCAtMTQzMyw3ICsxNDQyLDEwIEBACiBTQVhQcmludC9NYWtlZmlsZSBcCiBET01QcmludC9NYWtlZmlsZSBcCiBNZW1QYXJzZS9NYWtlZmlsZSBcCi1SZWRpcmVjdC9NYWtlZmlsZSIgfCBzZWQgInMvOlteIF0qLy9nImAgY29uZnRlc3QqOyBleGl0IDEnIDEgMiAxNQorUmVkaXJlY3QvTWFrZWZpbGUgXAorUFBhcnNlL01ha2VmaWxlIFwKK1N0ZEluUGFyc2UvTWFrZWZpbGUgXAorRW51bVZhbC9NYWtlZmlsZSIgfCBzZWQgInMvOlteIF0qLy9nImAgY29uZnRlc3QqOyBleGl0IDEnIDEgMiAxNQogRU9GCiBjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YKIApAQCAtMTQ4MCw2ICsxNDkyLDggQEAKIHMlQGhvc3Rfb3NAJSRob3N0X29zJWcKIHMlQHBsYXRmb3JtQCUkcGxhdGZvcm0lZwogcyVAY29tcGlsZXJAJSRjb21waWxlciVnCitzJUBjeHhmbGFnc0AlJGN4eGZsYWdzJWcKK3MlQGNmbGFnc0AlJGNmbGFncyVnCiAKIENFT0YKIEVPRgpAQCAtMTUyNyw3ICsxNTQxLDEwIEBACiBTQVhQcmludC9NYWtlZmlsZSBcCiBET01QcmludC9NYWtlZmlsZSBcCiBNZW1QYXJzZS9NYWtlZmlsZSBcCi1SZWRpcmVjdC9NYWtlZmlsZSJ9CitSZWRpcmVjdC9NYWtlZmlsZSBcCitQUGFyc2UvTWFrZWZpbGUgXAorU3RkSW5QYXJzZS9NYWtlZmlsZSBcCitFbnVtVmFsL01ha2VmaWxlIn0KIEVPRgogY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8XEVPRgogZm9yIGFjX2ZpbGUgaW4gLi4gJENPTkZJR19GSUxFUzsgZG8gaWYgdGVzdCAieCRhY19maWxlIiAhPSB4Li47IHRoZW4KQEAgLTE1OTgsMyArMTYxNSw0IEBACiBybSAtZnIgY29uZmRlZnMqICRhY19jbGVhbl9maWxlcwogdGVzdCAiJG5vX2NyZWF0ZSIgPSB5ZXMgfHwgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJENPTkZJR19TVEFUVVMgfHwgZXhpdCAxCiAKKwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb25maWd1cmUuaW4gYi9zYW1wbGVzL2NvbmZpZ3VyZS5pbgppbmRleCA4Y2E4NjAyLi5kZDk5ZjU1IDEwMDY0NAotLS0gYS9zYW1wbGVzL2NvbmZpZ3VyZS5pbgorKysgYi9zYW1wbGVzL2NvbmZpZ3VyZS5pbgpAQCAtNjAsNSArNjAsNiBAQAogTWVtUGFyc2UvTWFrZWZpbGUgXAogUmVkaXJlY3QvTWFrZWZpbGUgXAogUFBhcnNlL01ha2VmaWxlIFwKLVN0ZEluUGFyc2UvTWFrZWZpbGVdKQorU3RkSW5QYXJzZS9NYWtlZmlsZSBcCitFbnVtVmFsL01ha2VmaWxlXSkKIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5Db25maWd1cmUgYi9zYW1wbGVzL3J1bkNvbmZpZ3VyZQppbmRleCBkNzAzMTY1Li5jOGE5NmFmIDEwMDc1NQotLS0gYS9zYW1wbGVzL3J1bkNvbmZpZ3VyZQorKysgYi9zYW1wbGVzL3J1bkNvbmZpZ3VyZQpAQCAtNTgsOCArNTgsNDQgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOToyNiAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4zICAxOTk5LzEyLzAyIDE4OjEwOjUxICBkaXJreAorIyBDaGFuZ2VkIGV4aXQgY29kZXMgZnJvbSAtMSB0byAnMScuIEFkZGVkIGluZGlyZWN0aW9uLgorIworIyBEYXRlOiBUaHUsIDIgRGVjIDE5OTkgMTc6NDc6MzkgKzAwMDAKKyMgRnJvbTogSm9uYXRoYW4gTWNEb3dlbGwgPG5vb2RsZXNAZWFydGgubGk+CisjIFJlcGx5LVRvOiB4ZXJjZXMtZGV2QHhtbC5hcGFjaGUub3JnCisjIFRvOiB4ZXJjZXMtZGV2QHhtbC5hcGFjaGUub3JnLCByYWh1bGpAYXBhY2hlLm9yZworIyBTdWJqZWN0OiBSZTogcnVuQ29uZmlndXJlIHNjcmlwdCAmIGJhc2gKKyMKKyMKKyMgT24gTW9uLCBOb3YgMjksIDE5OTkgYXQgMTA6Mjk6MTNBTSAtMDgwMCwgUmFodWwgSmFpbiB3cm90ZToKKyMKKyMgPiA+IEknbSBxdWl0ZSBoYXBweSB0byBwcm9kdWNlIGEgcGF0Y2ggdGhhdCBtYWtlcyBpdCB3b3JrIHVuZGVyIGJvdGgKKyMgPiA+IEZyZWVCU0QncyBzaCBhbmQgYmFzaCAtIEkgd291bGQgYXNzdW1lIHRoaXMgd291bGQgd29yayB1bmRlciBtb3N0IHNoCisjID4gPiBsaWtlIHNoZWxscy4KKyMgPiBQbGVhc2UgcG9zdCB0aGUgY2hhbmdlcyBmb3IgRnJlZUJTRCBhbmQgSSB3aWxsIHRlc3QgdGhlIGNoYW5nZXMgb24KKyMgPiBvdGhlciB1bml4J3MgYW5kIGRvIHRoZSBpbnRlZ3JhdGlvbi4KKyMKKyMgSSBzYXQgZG93biB0byBkbyB0aGlzIHRvZGF5IGFuZCBmb3VuZCB0aGF0IGl0IGNhbiBiZSB0cml2aWFsbHkgZml4ZWQgYnkKKyMgY2hhbmdpbmcgYWxsIHRoZSAiZXhpdCAtMSIgaW5zdGFuY2VzIHRvICJleGl0IDEiIC0gaXQgc2VlbXMgdGhlIC9iaW4vc2gKKyMgd2l0aCBGcmVlQlNEIGRvZXNuJ3QgbGlrZSBuZWdhdGl2ZSByZXN1bHQgY29kZXMuIEl0IHNlZW1zIGEgYml0CisjIHBvaW50bGVzcyB0byBzdWJtaXQgYSBwYXRjaCBmb3IgdGhpcywgc28gY2FuIHNvbWVvbmUgd2l0aCBDVlMgYWNjZXNzCisjIGNoYW5nZSB0aGlzIHBsZWFzZT8KKyMKKyMgSi4KKyMKKyMgLS0KKyMKKyMgUFI6CisjIE9idGFpbmVkIGZyb206CisjIFN1Ym1pdHRlZCBieToKKyMgUmV2aWV3ZWQgYnk6CisjCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xMiAxOToxMjo0MCAgYWJhZ2NoaQorIyBDaGFuZ2VkIGluc3RhbmNlcyBvZiBYTUw0Q1JPT1QgdG8gWEVSQ0VTQ1JPT1QKKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowOToyNiAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMDggMjA6NDM6MzQgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTgyLDI0ICsxMTgsMjYgQEAKICAgICBlY2hvICIgICAgICAgLWggKGdldCBoZWxwIG9uIHRoZSBhYm92ZSBjb21tYW5kcykiCiB9CiAKK0VSUk9SX0VYSVRfQ09ERT0xCisKIGlmIHRlc3QgJHsxfW8gPSAibyI7IHRoZW4KICAgIHVzYWdlCi0gICBleGl0IC0xCisgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfQogZmkKIAotaWYgdGVzdCAke1hNTDRDUk9PVH1vID0gIm8iOyB0aGVuCi0gICBlY2hvIEVSUk9SIDogWW91IGhhdmUgbm90IHNldCB5b3VyIFhNTDRDUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZQoraWYgdGVzdCAke1hFUkNFU0NST09UfW8gPSAibyI7IHRoZW4KKyAgIGVjaG8gRVJST1IgOiBZb3UgaGF2ZSBub3Qgc2V0IHlvdXIgWEVSQ0VTQ1JPT1QgZW52aXJvbm1lbnQgdmFyaWFibGUKICAgIGVjaG8gVGhvdWdoIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBjcmVhdGluZyBtYWtlZmlsZXMsCiAgICBlY2hvIHRoaXMgaXMganVzdCBhIGdlbmVyYWwgd2FybmluZyB0byBwcmV2ZW50IHlvdSBmcm9tIHBpdGZhbGxzIGluIGZ1dHVyZS4gUGxlYXNlCi0gICBlY2hvIHNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxsZWQgWE1MNENST09UIHRvIGluZGljYXRlIHdoZXJlIHlvdSBpbnN0YWxsZWQKLSAgIGVjaG8gdGhlIFhNTDRDIGZpbGVzLCBhbmQgcnVuIHRoaXMgY29tbWFuZCBhZ2FpbiB0byBwcm9jZWVkLiBTZWUgdGhlIGRvY3VtZW50YXRpb24KKyAgIGVjaG8gc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbGxlZCBYRVJDRVNDUk9PVCB0byBpbmRpY2F0ZSB3aGVyZSB5b3UgaW5zdGFsbGVkCisgICBlY2hvIHRoZSBYRVJDRVMtQyBmaWxlcywgYW5kIHJ1biB0aGlzIGNvbW1hbmQgYWdhaW4gdG8gcHJvY2VlZC4gU2VlIHRoZSBkb2N1bWVudGF0aW9uCiAgICBlY2hvIGZvciBhbiBleGFtcGxlIGlmIHlvdSBhcmUgc3RpbGwgY29uZnVzZWQuCi0gICBleGl0IC0xCisgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfQogZmkKIAogaWYgdGVzdCAkMSA9ICItaCI7IHRoZW4KICAgIHVzYWdlCi0gICBleGl0IC0xCisgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfQogZmkKIAogIyBHZXQgdGhlIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCkBAIC0xMDcsNyArMTQ1LDcgQEAKIGlmIFsgJD8gIT0gMCBdCiAgICB0aGVuCiAgICB1c2FnZQotICAgZXhpdCAtMQorICAgZXhpdCAke0VSUk9SX0VYSVRfQ09ERX0KIGZpCiAKICMgU2V0IHVwIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgZWFjaCBwYXJhbWV0ZXIKQEAgLTEzMyw3ICsxNzEsNyBAQAogCiAgICAtaCkKICAgICAgICAgdXNhZ2UKLSAgICAgICAgZXhpdCAtMTs7CisgICAgICAgIGV4aXQgJHtFUlJPUl9FWElUX0NPREV9OzsKIAogICAgLS0pCiAgICAgICAgIHNoaWZ0OyBicmVhazs7CkBAIC0xNTksNyArMTk3LDcgQEAKICAgICAgICA7OwogICAgKikKICAgICAgIGVjaG8gIkkgZG8gbm90IHJlY29nbml6ZSB0aGUgcGxhdGZvcm0gJyRwbGF0Zm9ybScuIFBsZWFzZSB0eXBlICckezB9IC1oJyBmb3IgaGVscC4iCi0gICAgICBleGl0IC0xOzsKKyAgICAgIGV4aXQgJHtFUlJPUl9FWElUX0NPREV9OzsKIGVzYWMKIAogIyBTZXQgdGhlIEMgY29tcGlsZXIgYW5kIEMrKyBjb21waWxlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMKQEAgLTIwMCw3ICsyMzgsNyBAQAogCiBlY2hvCiBlY2hvIElmIHRoZSByZXN1bHQgb2YgdGhlIGFib3ZlIGNvbW1hbmRzIGxvb2sgT0sgdG8geW91LCBnbyB0byB0aGUgZGlyZWN0b3J5Ci1lY2hvICR7WE1MNENST09UfS9zcmMgYW5kIHR5cGUgXCJtYWtlXCIgdG8gbWFrZSB0aGUgWE1MNEMgc3lzdGVtLgorZWNobyAke1hFUkNFU0NST09UfS9zcmMgYW5kIHR5cGUgXCJtYWtlXCIgdG8gbWFrZSB0aGUgWEVSQ0VTLUMgc3lzdGVtLgogCiBleGl0IDA7CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvV2luMzIvY2NkLmNtZCBiL3NjcmlwdHMvV2luMzIvY2NkLmNtZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMDI5ODY2Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9XaW4zMi9jY2QuY21kCkBAIC0wLDAgKzEsODAgQEAKK0BFQ0hPIE9GRgorCislRGV2RHJpdmUlCisKK0lGICIlMSI9PSJidWlsZCIgR09UTyBDRF9CVUlMRAorSUYgIiUxIj09ImRhdGEiIEdPVE8gQ0RfREFUQQorSUYgIiUxIj09ImRvbSIgR09UTyBDRF9ET00KK0lGICIlMSI9PSJmcmFtZXdvcmsiIEdPVE8gQ0RfRlJBTUVXT1JLCitJRiAiJTEiPT0iaW50ZXJuYWwiIEdPVE8gQ0RfSU5URVJOQUwKK0lGICIlMSI9PSJpbnRsIiBHT1RPIENEX0lOVEwKK0lGICIlMSI9PSJwYXJzZXJzIiBHT1RPIENEX1BBUlNFUlMKK0lGICIlMSI9PSJzYW1wbGVzIiBHT1RPIENEX1NBTVBMRVMKK0lGICIlMSI9PSJzYXgiIEdPVE8gQ0RfU0FYCitJRiAiJTEiPT0ic2NyaXB0cyIgR09UTyBDRF9TQ1JJUFRTCitJRiAiJTEiPT0ic3JjIiBHT1RPIENEX1NSQworSUYgIiUxIj09InRlc3RzIiBHT1RPIENEX1RFU1RTCitJRiAiJTEiPT0idG9vbHMiIEdPVE8gQ0RfVE9PTFMKK0lGICIlMSI9PSJ1dGlsIiBHT1RPIENEX1VUSUwKKworCitFQ0hPIFVua25vd24gdGFyZ2V0IGRpcmVjdG9yeQorR09UTyA6RVhJVAorCis6Q0RfQlVJTEQKK0NEICVYTUw0Q1Jvb3QlXEJ1aWxkXFdpbjMyXFZDNgorR09UTyBFWElUCisKKzpDRF9EQVRBCitDRCAlWE1MNENSb290JVxzYW1wbGVzXGRhdGEKK0dPVE8gRVhJVAorCis6Q0RfRE9NCitDRCAlWE1MNENSb290JVxzcmNcZG9tCitHT1RPIEVYSVQKKworOkNEX0ZSQU1FV09SSworQ0QgJVhNTDRDUm9vdCVcc3JjXGZyYW1ld29yaworR09UTyBFWElUCisKKzpDRF9JTlRFUk5BTAorQ0QgJVhNTDRDUm9vdCVcc3JjXGludGVybmFsCitHT1RPIEVYSVQKKworOkNEX0lOVEwKK0NEICVYTUw0Q1Jvb3QlXGludGxGaWxlcworR09UTyBFWElUCisKKzpDRF9QQVJTRVJTCitDRCAlWE1MNENSb290JVxzcmNccGFyc2VycworR09UTyBFWElUCisKKzpDRF9TQU1QTEVTCitDRCAlWE1MNENSb290JVxzYW1wbGVzCitHT1RPIEVYSVQKKworOkNEX1NBWAorQ0QgJVhNTDRDUm9vdCVcc3JjXHNheAorR09UTyBFWElUCisKKzpDRF9TQ1JJUFRTCitDRCAlWE1MNENSb290JVxzY3JpcHRzXFdpbjMyCitHT1RPIEVYSVQKKworOkNEX1NSQworQ0QgJVhNTDRDUm9vdCVcc3JjCitHT1RPIEVYSVQKKworOkNEX1RFU1RTCitDRCAlWE1MNENSb290JVx0ZXN0cworR09UTyBFWElUCisKKzpDRF9UT09MUworQ0QgJVhNTDRDUm9vdCVcdG9vbHMKK0dPVE8gRVhJVAorCis6Q0RfVVRJTAorQ0QgJVhNTDRDUm9vdCVcc3JjXHV0aWwKK0dPVE8gRVhJVAorCis6RVhJVApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlQmluYXJpZXMucGwgYi9zY3JpcHRzL3BhY2thZ2VCaW5hcmllcy5wbAppbmRleCA5NzBlZjNlLi5lOGE2Mjg5IDEwMDY0NAotLS0gYS9zY3JpcHRzL3BhY2thZ2VCaW5hcmllcy5wbAorKysgYi9zY3JpcHRzL3BhY2thZ2VCaW5hcmllcy5wbApAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9sb2NhbC9iaW4vcGVybDUKIAotcHVzaChASU5DLCAiL2hvbWUveG1sNGMvYmluIiwgIi9ob21lL3htbDRjL2Jpbi9wZXJsL3BlcmwtUlVOL29wdC9wZXJsNS9saWIiLCAiL0RldmVsb3BtZW50Mi9jdXBlcnQvYmluL3BlcmwvcGVybC1SVU4vb3B0L3Blcmw1L2xpYiIsICIvRGV2ZWxvcG1lbnQvY3VwZXJ0L3Vzci9sb2NhbC9wZXJsL3BlcmwtUlVOL29wdC9wZXJsNS9saWIiKTsKK3B1c2goQElOQywgIi9ob21lL3hlcmNlcy1jL2JpbiIsICIvaG9tZS94ZXJjZXMtYy9iaW4vcGVybC9wZXJsLVJVTi9vcHQvcGVybDUvbGliIiwgIi9EZXZlbG9wbWVudDIvY3VwZXJ0L2Jpbi9wZXJsL3BlcmwtUlVOL29wdC9wZXJsNS9saWIiLCAiL0RldmVsb3BtZW50L2N1cGVydC91c3IvbG9jYWwvcGVybC9wZXJsLVJVTi9vcHQvcGVybDUvbGliIik7CiAKIHJlcXVpcmUgImdldG9wdC5wbCI7CiAKQEAgLTksMTcgKzksMTEgQEAKIAogIyBFeHRyYWN0IHRoZSBzb3VyY2UgYW5kIHRhcmdldCBkaXJlY3RvcmllcwogJkdldG9wdCgnc29wY3htbnRyJyk7Ci0kWE1MNENST09UID0gJG9wdF9zOworJFhFUkNFU0NST09UID0gJG9wdF9zOwogJHRhcmdldGRpciA9ICRvcHRfbzsKLSRjY29tcGlsZXIgPSAkb3B0X2M7Ci0kY3BwY29tcGlsZXIgPSAkb3B0X3g7Ci0kbXNnbG9hZGVyID0gJG9wdF9tOwotJG5ldGFjY2Vzc29yID0gJG9wdF9uOwotJHRyYW5zY29kZXIgPSAkb3B0X3Q7Ci0kdGhyZWFkID0gJG9wdF9yOwogCiAjIENoZWNrIGZvciB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBleGl0IGlmIGVycm9yCi1pZiAoIWxlbmd0aCgkWE1MNENST09UKSB8fCAhbGVuZ3RoKCR0YXJnZXRkaXIpIHx8IChsZW5ndGgoJG9wdF9oKSA+IDApICkgeworaWYgKCFsZW5ndGgoJFhFUkNFU0NST09UKSB8fCAhbGVuZ3RoKCR0YXJnZXRkaXIpIHx8IChsZW5ndGgoJG9wdF9oKSA+IDApICkgewogICAgICAgICBwcmludCAoIlVzYWdlIGlzOiBwYWNrYWdlQmluYXJpZXMgPG9wdGlvbnM+XG4iKTsKIAkJcHJpbnQgKCIgICAgICAgICAgb3B0aW9ucyBhcmU6ICAtcyA8c291cmNlX2RpcmVjdG9yeT5cbiIpOwogCQlwcmludCAoIiAgICAgICAgICAgICAgICAgICAgICAgIC1vIDx0YXJnZXRfZGlyZWN0b3J5PlxuIik7CkBAIC0zMCwyMiArMjQsMjIgQEAKICAgICAgICAgcHJpbnQgKCIgICAgICAgICAgICAgICAgICAgICAgICAtdCA8dHJhbnNjb2Rlcj4gY2FuIGJlICdpY3UnIG9yICduYXRpdmUnXG4iKTsKICAgICAgICAgcHJpbnQgKCIgICAgICAgICAgICAgICAgICAgICAgICAtciA8dGhyZWFkIG9wdGlvbj4gY2FuIGJlICdwdGhyZWFkJyBvciAnZGNlJyAob25seSB1c2VkIG9uIEhQLTExKVxuIik7CiAgICAgICAgIHByaW50ICgiICAgICAgICAgICAgICAgICAgICAgICAgLWggdG8gZ2V0IGhlbHAgb24gdGhlc2UgY29tbWFuZHNcbiIpOwotICAgICAgICBwcmludCAoIkV4YW1wbGU6IHBlcmwgcGFja2FnZUJpbmFyaWVzLnBsIC1zXCRIT01FL3htbDRjc3JjM18wXzAgLW9cJEhPTUUveG1sNGMzXzBfMCAtY2djYyAteGcrKyAtbWlubWVtIC1uZmlsZW9ubHkgLXRuYXRpdmVcbiIpOworICAgICAgICBwcmludCAoIkV4YW1wbGU6IHBlcmwgcGFja2FnZUJpbmFyaWVzLnBsIC1zXCRIT01FL3hlcmNlcy1jXzFfMF8wZDAxIC1vXCRIT01FL3hlcmNlcy1jXzFfMF8wZDAxYmluIC1jZ2NjIC14ZysrIC1taW5tZW0gLW5maWxlb25seSAtdG5hdGl2ZVxuIik7CiAgICAgICAgIGV4aXQoLTEpOwogfQogCiAjIFNldCB1cCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBJQ1UKLSMgQXMgb2YgVmVyc2lvbiAzLCBJQ1UgaXMgbm90IGEgcmVxdWlyZWQgY29tcG9uZW50IG9mIFhNTDRDCisjIEFzIG9mIFZlcnNpb24gMywgSUNVIGlzIG5vdCBhIHJlcXVpcmVkIGNvbXBvbmVudCBvZiBYRVJDRVMtQwogJElDVVJPT1QgPSAkRU5WeydJQ1VST09UJ307CiBpZiAoIWxlbmd0aCgkSUNVUk9PVCkpIHsKICAgICAgICBwcmludCAiWW91IGhhdmUgbm90IGRlZmluZWQgeW91ciBJQ1UgaW5zdGFsbCBkaXJlY3RvcnkuXG4iOwotCSAgIHByaW50ICJZb3UgbXVzdCBzZXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgY2FsbGVkIElDVVJPT1QgdG8gcGFja2FnZSBJQ1Ugd2l0aCBYTUw0Qy5cbiI7Ci0JICAgcHJpbnQgIlByb2NlZWRpbmcgdG8gYnVpbGQgWE1MNEMgd2l0aG91dCBJQ1UuLi5cbiI7CisJICAgcHJpbnQgIllvdSBtdXN0IHNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxsZWQgSUNVUk9PVCB0byBwYWNrYWdlIElDVSB3aXRoIFhFUkNFUy1DLlxuIjsKKwkgICBwcmludCAiUHJvY2VlZGluZyB0byBidWlsZCBYRVJDRVMtQyB3aXRob3V0IElDVS4uLlxuIjsKIH0KIAogIyBDaGVjayBpZiB0aGUgc291cmNlIGRpcmVjdG9yeSBleGlzdHMgb3Igbm90Ci1pZiAoISgtZSAkWE1MNENST09UKSkgewotICAgICAgICBwcmludCAoIlRoZSBkaXJlY3RvcnkgJFhNTDRDUk9PVCBkb2VzIG5vdCBleGlzdC4gQ2Fubm90IHByb2NlZWQgYW55IGZ1cnRoZXIuXG4iKTsKK2lmICghKC1lICRYRVJDRVNDUk9PVCkpIHsKKyAgICAgICAgcHJpbnQgKCJUaGUgZGlyZWN0b3J5ICRYRVJDRVNDUk9PVCBkb2VzIG5vdCBleGlzdC4gQ2Fubm90IHByb2NlZWQgYW55IGZ1cnRoZXIuXG4iKTsKICAgICAgICAgZXhpdCgtMSk7CiB9CiAKQEAgLTU3LDcgKzUxLDcgQEAKIH0KIAogI0ZpeCB0aGUgYmFja3NsYXNoZXMgb24gdGhlIFdpbmRvd3MgcGxhdGZvcm0KLSRYTUw0Q1JPT1QgPX4gcy9cXC9cLy9nOworJFhFUkNFU0NST09UID1+IHMvXFwvXC8vZzsKICRJQ1VST09UID1+IHMvXFwvXC8vZzsKICR0YXJnZXRkaXIgPX4gcy9cXC9cLy9nOwogCkBAIC02NSwxNiArNTksMTQgQEAKIG9wZW4oUExBVEZPUk0sICJ1bmFtZSAtc3wiKTsKICRwbGF0Zm9ybSA9IDxQTEFURk9STT47CiBjaG9tcCgkcGxhdGZvcm0pOwotIyRwbGF0Zm9ybSA9fiBtLyheXHcqKVxzLzsKLSMkcGxhdGZvcm0gPSAkMTsKIGNsb3NlIChQTEFURk9STSk7CiAKIHByaW50ICJQYWNrYWdpbmcgYmluYXJpZXMgZm9yIFxgIiAuICRwbGF0Zm9ybSAuICJcYCBpbiAiIC4gJHRhcmdldGRpciAuICIgLi4uXG4iOwogCiAjQ29uc3RydWN0IHRoZSBuYW1lIG9mIHRoZSB6aXAgZmlsZSBieSBleHRyYWN0aW5nIHRoZSBsYXN0IGRpcmVjdG9yeSBuYW1lCiAkemlwZmlsZXMgPSAkdGFyZ2V0ZGlyOwotJHppcGZpbGVzID1+IG0vXC8oXHcqJCkvOwotJHppcGZpbGVzID0gJDEgLiAiLyoiOworJHppcGZpbGVzID1+IHMvLipcLyhbXHd8LV0qKSQvJDEvZzsKKyR6aXBmaWxlcyA9ICR6aXBmaWxlcyAuICIvKiI7CiAKICRidWlsZG1vZGUgPSAiUmVsZWFzZSI7ICAgICMgVW5pdmVyc2FsbHksIHdoeSBkbyB5b3Ugd2FudCB0byBwYWNrYWdlIERlYnVnIGJ1aWxkcyBhbnl3YXk/CiAKQEAgLTExMiw2ICsxMDQsNyBAQAogICAgICAgICBta2RpciAoJHRhcmdldGRpciAuICIvc2FtcGxlcy9NZW1QYXJzZSIsICIwNjQ0Iik7CiAgICAgICAgIG1rZGlyICgkdGFyZ2V0ZGlyIC4gIi9zYW1wbGVzL1BQYXJzZSIsICIwNjQ0Iik7CiAgICAgICAgIG1rZGlyICgkdGFyZ2V0ZGlyIC4gIi9zYW1wbGVzL1N0ZEluUGFyc2UiLCAiMDY0NCIpOworICAgICAgICBta2RpciAoJHRhcmdldGRpciAuICIvc2FtcGxlcy9FbnVtVmFsIiwgIjA2NDQiKTsKICAgICAgICAgbWtkaXIgKCR0YXJnZXRkaXIgLiAiL2RvYyIsICIwNjQ0Iik7CiAgICAgICAgIG1rZGlyICgkdGFyZ2V0ZGlyIC4gIi9kb2MvYXBpRG9jcyIsICIwNjQ0Iik7CiAgICAgICAgIG1rZGlyICgkdGFyZ2V0ZGlyIC4gIi9iaW4vaWN1IiwgIjA2NDQiKTsKQEAgLTEzOCw2NSArMTMxLDcxIEBACiAJCX0KIAogICAgICAgICAjQ2xlYW4gdXAgYWxsIHRoZSBkZXBlbmRlbmN5IGZpbGVzLCBjYXVzZXMgcHJvYmxlbXMgZm9yIG5tYWtlCi0gICAgICAgIGNoZGlyICgiJFhNTDRDUk9PVCIpOworICAgICAgICBjaGRpciAoIiRYRVJDRVNDUk9PVCIpOwogICAgICAgICBzeXN0ZW0gKCJkZWwgL3MgL2YgKi5kZXAiKTsKIAotICAgICAgICAjIE1ha2UgdGhlIFhNTDRDIGRsbAotICAgICAgICBjaGRpciAoIiRYTUw0Q1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L0lYWE1MNEMzL0lYWE1MNEMzIik7Ci0gICAgICAgIHByaW50ICJFeGVjdXRpbmc6IG5tYWtlIC1mIFhYTUw0QzMubWFrIGNsZWFuIENGRz1cIklYWE1MNEMzIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOwotICAgICAgICBzeXN0ZW0oIm5tYWtlIC1mIElYWE1MNEMzLm1hayBjbGVhbiBDRkc9XCJJWFhNTDRDMyAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7Ci0gICAgICAgIHByaW50ICJFeGVjdXRpbmc6IG5tYWtlIC1mIElYWE1MNEMzLm1hayBhbGwgQ0ZHPVwiSVhYTUw0QzMgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7Ci0gICAgICAgIHN5c3RlbSgibm1ha2UgLWYgSVhYTUw0QzMubWFrIGFsbCBDRkc9XCJJWFhNTDRDMyAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7CisgICAgICAgICMgTWFrZSB0aGUgWEVSQ0VTLUMgZGxsCisgICAgICAgIGNoZGlyICgiJFhFUkNFU0NST09UL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1hlcmNlc0xpYiIpOworICAgICAgICBwcmludCAiRXhlY3V0aW5nOiBubWFrZSAtZiBYZXJjZXNMaWIubWFrIGNsZWFuIENGRz1cIlhlcmNlc0xpYiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKKyAgICAgICAgc3lzdGVtKCJubWFrZSAtZiBYZXJjZXNMaWIubWFrIGNsZWFuIENGRz1cIlhlcmNlc0xpYiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7CisgICAgICAgIHByaW50ICJFeGVjdXRpbmc6IG5tYWtlIC1mIFhlcmNlc0xpYi5tYWsgYWxsIENGRz1cIlhlcmNlc0xpYiAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKKyAgICAgICAgc3lzdGVtKCJubWFrZSAtZiBYZXJjZXNMaWIubWFrIGFsbCBDRkc9XCJYZXJjZXNMaWIgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiIpOwogCiAgICAgICAgICMgTWFrZSB0aGUgU0FYQ291bnQgc2FtcGxlCi0gICAgICAgIGNoZGlyICgiJFhNTDRDUk9PVC9Qcm9qZWN0cy9XaW4zMi9WQzYvSVhYTUw0QzMvU0FYQ291bnQiKTsKKyAgICAgICAgY2hkaXIgKCIkWEVSQ0VTQ1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvU0FYQ291bnQiKTsKICAgICAgICAgc3lzdGVtICJubWFrZSAtZiBTQVhDb3VudC5tYWsgY2xlYW4gQ0ZHPVwiU0FYQ291bnQgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CiAgICAgICAgIHByaW50ICJFeGVjdXRpbmc6IG5tYWtlIC1mIFNBWENvdW50Lm1hayBhbGwgQ0ZHPVwiU0FYQ291bnQgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CiAgICAgICAgIHN5c3RlbSgibm1ha2UgLWYgU0FYQ291bnQubWFrIGFsbCBDRkc9XCJTQVhDb3VudCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7CiAKICAgICAgICAgIyBNYWtlIHRoZSBTQVhQcmludCBzYW1wbGUKLSAgICAgICAgY2hkaXIgKCIkWE1MNENST09UL1Byb2plY3RzL1dpbjMyL1ZDNi9JWFhNTDRDMy9TQVhQcmludCIpOworICAgICAgICBjaGRpciAoIiRYRVJDRVNDUk9PVC9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9TQVhQcmludCIpOwogICAgICAgICBzeXN0ZW0gIm5tYWtlIC1mIFNBWFByaW50Lm1hayBjbGVhbiBDRkc9XCJTQVhQcmludCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKICAgICAgICAgcHJpbnQgIkV4ZWN1dGluZzogbm1ha2UgLWYgU0FYUHJpbnQubWFrIGFsbCBDRkc9XCJTQVhQcmludCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKICAgICAgICAgc3lzdGVtKCJubWFrZSAtZiBTQVhQcmludC5tYWsgYWxsIENGRz1cIlNBWFByaW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiKTsKIAogICAgICAgICAjIE1ha2UgdGhlIERPTUNvdW50IHNhbXBsZQotICAgICAgICBjaGRpciAoIiRYTUw0Q1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L0lYWE1MNEMzL0RPTUNvdW50Iik7CisgICAgICAgIGNoZGlyICgiJFhFUkNFU0NST09UL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL0RPTUNvdW50Iik7CiAgICAgICAgIHN5c3RlbSAibm1ha2UgLWYgRE9NQ291bnQubWFrIGNsZWFuIENGRz1cIkRPTUNvdW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOwogICAgICAgICBwcmludCAiRXhlY3V0aW5nOiBubWFrZSAtZiBET01Db3VudC5tYWsgYWxsIENGRz1cIkRPTUNvdW50IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOwogICAgICAgICBzeXN0ZW0oIm5tYWtlIC1mIERPTUNvdW50Lm1hayBhbGwgQ0ZHPVwiRE9NQ291bnQgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiIpOwogCiAgICAgICAgICMgTWFrZSB0aGUgRE9NUHJpbnQgc2FtcGxlCi0gICAgICAgIGNoZGlyICgiJFhNTDRDUk9PVC9Qcm9qZWN0cy9XaW4zMi9WQzYvSVhYTUw0QzMvRE9NUHJpbnQiKTsKKyAgICAgICAgY2hkaXIgKCIkWEVSQ0VTQ1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvRE9NUHJpbnQiKTsKICAgICAgICAgc3lzdGVtICJubWFrZSAtZiBET01QcmludC5tYWsgY2xlYW4gQ0ZHPVwiRE9NUHJpbnQgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CiAgICAgICAgIHByaW50ICJFeGVjdXRpbmc6IG5tYWtlIC1mIERPTVByaW50Lm1hayBhbGwgQ0ZHPVwiRE9NUHJpbnQgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CiAgICAgICAgIHN5c3RlbSgibm1ha2UgLWYgRE9NUHJpbnQubWFrIGFsbCBDRkc9XCJET01QcmludCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7CiAKICAgICAgICAgIyBNYWtlIHRoZSBSZWRpcmVjdCBzYW1wbGUKLSAgICAgICAgY2hkaXIgKCIkWE1MNENST09UL1Byb2plY3RzL1dpbjMyL1ZDNi9JWFhNTDRDMy9SZWRpcmVjdCIpOworICAgICAgICBjaGRpciAoIiRYRVJDRVNDUk9PVC9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9SZWRpcmVjdCIpOwogICAgICAgICBzeXN0ZW0gIm5tYWtlIC1mIFJlZGlyZWN0Lm1hayBjbGVhbiBDRkc9XCJSZWRpcmVjdCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKICAgICAgICAgcHJpbnQgIkV4ZWN1dGluZzogbm1ha2UgLWYgUmVkaXJlY3QubWFrIGFsbCBDRkc9XCJSZWRpcmVjdCAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKICAgICAgICAgc3lzdGVtKCJubWFrZSAtZiBSZWRpcmVjdC5tYWsgYWxsIENGRz1cIlJlZGlyZWN0IC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiKTsKIAogCiAgICAgICAgICMgTWFrZSB0aGUgTWVtUGFyc2Ugc2FtcGxlCi0gICAgICAgIGNoZGlyICgiJFhNTDRDUk9PVC9Qcm9qZWN0cy9XaW4zMi9WQzYvSVhYTUw0QzMvTWVtUGFyc2UiKTsKKyAgICAgICAgY2hkaXIgKCIkWEVSQ0VTQ1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvTWVtUGFyc2UiKTsKICAgICAgICAgc3lzdGVtICJubWFrZSAtZiBNZW1QYXJzZS5tYWsgY2xlYW4gQ0ZHPVwiTWVtUGFyc2UgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CiAgICAgICAgIHByaW50ICJFeGVjdXRpbmc6IG5tYWtlIC1mIE1lbVBhcnNlLm1hayBhbGwgQ0ZHPVwiTWVtUGFyc2UgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CiAgICAgICAgIHN5c3RlbSgibm1ha2UgLWYgTWVtUGFyc2UubWFrIGFsbCBDRkc9XCJNZW1QYXJzZSAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIik7CiAKICAgICAgICAgIyBNYWtlIHRoZSBQUGFyc2Ugc2FtcGxlCi0gICAgICAgIGNoZGlyICgiJFhNTDRDUk9PVC9Qcm9qZWN0cy9XaW4zMi9WQzYvSVhYTUw0QzMvUFBhcnNlIik7CisgICAgICAgIGNoZGlyICgiJFhFUkNFU0NST09UL1Byb2plY3RzL1dpbjMyL1ZDNi94ZXJjZXMtYWxsL1BQYXJzZSIpOwogICAgICAgICBzeXN0ZW0gIm5tYWtlIC1mIFBQYXJzZS5tYWsgY2xlYW4gQ0ZHPVwiUFBhcnNlIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOwogICAgICAgICBwcmludCAiRXhlY3V0aW5nOiBubWFrZSAtZiBQUGFyc2UubWFrIGFsbCBDRkc9XCJQUGFyc2UgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CiAgICAgICAgIHN5c3RlbSgibm1ha2UgLWYgUFBhcnNlLm1hayBhbGwgQ0ZHPVwiUFBhcnNlIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiKTsKIAogICAgICAgICAjIE1ha2UgdGhlIFN0ZEluUGFyc2Ugc2FtcGxlCi0gICAgICAgIGNoZGlyICgiJFhNTDRDUk9PVC9Qcm9qZWN0cy9XaW4zMi9WQzYvSVhYTUw0QzMvU3RkSW5QYXJzZSIpOworICAgICAgICBjaGRpciAoIiRYRVJDRVNDUk9PVC9Qcm9qZWN0cy9XaW4zMi9WQzYveGVyY2VzLWFsbC9TdGRJblBhcnNlIik7CiAgICAgICAgIHN5c3RlbSAibm1ha2UgLWYgU3RkSW5QYXJzZS5tYWsgY2xlYW4gQ0ZHPVwiU3RkSW5QYXJzZSAtICRwbGF0Zm9ybW5hbWUgJGJ1aWxkbW9kZVwiIjsKICAgICAgICAgcHJpbnQgIkV4ZWN1dGluZzogbm1ha2UgLWYgU3RkSW5QYXJzZS5tYWsgYWxsIENGRz1cIlN0ZEluUGFyc2UgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CiAgICAgICAgIHN5c3RlbSgibm1ha2UgLWYgU3RkSW5QYXJzZS5tYWsgYWxsIENGRz1cIlN0ZEluUGFyc2UgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiIpOwogCisgICAgICAgICMgTWFrZSB0aGUgRW51bVZhbCBzYW1wbGUKKyAgICAgICAgY2hkaXIgKCIkWEVSQ0VTQ1JPT1QvUHJvamVjdHMvV2luMzIvVkM2L3hlcmNlcy1hbGwvRW51bVZhbCIpOworICAgICAgICBzeXN0ZW0gIm5tYWtlIC1mIEVudW1WYWwubWFrIGNsZWFuIENGRz1cIkVudW1WYWwgLSAkcGxhdGZvcm1uYW1lICRidWlsZG1vZGVcIiI7CisgICAgICAgIHByaW50ICJFeGVjdXRpbmc6IG5tYWtlIC1mIEVudW1WYWwubWFrIGFsbCBDRkc9XCJFbnVtVmFsIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiOworICAgICAgICBzeXN0ZW0oIm5tYWtlIC1mIEVudW1WYWwubWFrIGFsbCBDRkc9XCJFbnVtVmFsIC0gJHBsYXRmb3JtbmFtZSAkYnVpbGRtb2RlXCIiKTsKKwogCQlpZiAobGVuZ3RoKCRJQ1VST09UKSA+IDApIHsKIAkJCSMgcnVuIG1ha2Vjb252IG5vdwogCQkJY2hkaXIgKCIkSUNVUk9PVC9kYXRhIik7CkBAIC0yMTEsMTUgKzIxMCwxNSBAQAogCiAgICAgICAgICMgRGVjaWRlIHdoZXJlIHlvdSB3YW50IHRoZSBidWlsZCBjb3BpZWQgZnJvbQogICAgICAgICBjaGRpciAoJHRhcmdldGRpcik7Ci0gICAgICAgICRCVUlMRERJUiA9ICRYTUw0Q1JPT1QgLiAiL0J1aWxkL1dpbjMyL1ZDNi8iIC4gJGJ1aWxkbW9kZTsKKyAgICAgICAgJEJVSUxERElSID0gJFhFUkNFU0NST09UIC4gIi9CdWlsZC9XaW4zMi9WQzYvIiAuICRidWlsZG1vZGU7CiAgICAgICAgIHByaW50ICJcbkJ1aWxkIGlzIGJlaW5nIGNvcGllZCBmcm9tIFwnIiAuICRCVUlMRERJUiAuICJcJyI7CiAKICAgICAgICAgIyBQb3B1bGF0ZSB0aGUgaW5jbHVkZSBvdXRwdXQgZGlyZWN0b3J5CiAgICAgICAgIHByaW50ICgiXG5cbkNvcHlpbmcgaGVhZGVycyBmaWxlcyAuLi5cbiIpOwotICAgICAgICAkeGNvcHljb21tYW5kID0gInhjb3B5ICRYTUw0Q1JPT1RcXHNyY1xcKi5ocHAgJHRhcmdldGRpclxcaW5jbHVkZSI7CisgICAgICAgICR4Y29weWNvbW1hbmQgPSAieGNvcHkgJFhFUkNFU0NST09UXFxzcmNcXCouaHBwICR0YXJnZXRkaXJcXGluY2x1ZGUiOwogICAgICAgICAkeGNvcHljb21tYW5kID1+IHMvXC8vXFwvZzsKICAgICAgICAgc3lzdGVtICgiJHhjb3B5Y29tbWFuZCAvUyAvQyAvSSAvUiIpOwotICAgICAgICAkeGNvcHljb21tYW5kID0gInhjb3B5ICRYTUw0Q1JPT1RcXHNyY1xcKi5jICR0YXJnZXRkaXJcXGluY2x1ZGUiOworICAgICAgICAkeGNvcHljb21tYW5kID0gInhjb3B5ICRYRVJDRVNDUk9PVFxcc3JjXFwqLmMgJHRhcmdldGRpclxcaW5jbHVkZSI7CiAgICAgICAgICR4Y29weWNvbW1hbmQgPX4gcy9cLy9cXC9nOwogICAgICAgICBzeXN0ZW0gKCIkeGNvcHljb21tYW5kIC9TIC9DIC9JIC9SIik7CiAKQEAgLTIzNiw3ICsyMzUsNyBAQAogCQkJc3lzdGVtKCJjcCAtZnYgJElDVVJPT1QvbGliLyRidWlsZG1vZGUvaWN1dWMubGliICR0YXJnZXRkaXIvbGliIik7CiAJCQlzeXN0ZW0oImNwIC1mdiAkSUNVUk9PVC9zb3VyY2UvdG9vbHMvbWFrZWNvbnYvJGJ1aWxkbW9kZS9tYWtlY29udi5leGUgJHRhcmdldGRpci9iaW4iKTsKIAkJfQotICAgICAgICBzeXN0ZW0oImNwIC1mdiAkQlVJTERESVIvSVhYTUw0QzMubGliICR0YXJnZXRkaXIvbGliIik7CisgICAgICAgIHN5c3RlbSgiY3AgLWZ2ICRCVUlMRERJUi94ZXJjZXMtY18xLmxpYiAkdGFyZ2V0ZGlyL2xpYiIpOwogCiAgICAgICAgICMgQ29weSB0aGUgbG9jYWxlIGZpbGVzCiAJCWlmIChsZW5ndGgoJElDVVJPT1QpID4gMCkgewpAQCAtMjQ2LDIzICsyNDUsMjQgQEAKIAogICAgICAgICAjIFBvcHVsYXRlIHRoZSBzYW1wbGVzIGRpcmVjdG9yeQogICAgICAgICBwcmludCAoIlxuXG5Db3B5aW5nIHNhbXBsZSBmaWxlcyAuLi5cbiIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhNTDRDUk9PVC9zYW1wbGVzL1Byb2plY3RzLyogJHRhcmdldGRpci9zYW1wbGVzL1Byb2plY3RzIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWE1MNENST09UL3NhbXBsZXMvU0FYQ291bnQvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvU0FYQ291bnQiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYTUw0Q1JPT1Qvc2FtcGxlcy9TQVhQcmludC8qICR0YXJnZXRkaXIvc2FtcGxlcy9TQVhQcmludCIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhNTDRDUk9PVC9zYW1wbGVzL0RPTUNvdW50LyogJHRhcmdldGRpci9zYW1wbGVzL0RPTUNvdW50Iik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWE1MNENST09UL3NhbXBsZXMvRE9NUHJpbnQvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvRE9NUHJpbnQiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYTUw0Q1JPT1Qvc2FtcGxlcy9SZWRpcmVjdC8qICR0YXJnZXRkaXIvc2FtcGxlcy9SZWRpcmVjdCIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhNTDRDUk9PVC9zYW1wbGVzL01lbVBhcnNlLyogJHRhcmdldGRpci9zYW1wbGVzL01lbVBhcnNlIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWE1MNENST09UL3NhbXBsZXMvUFBhcnNlLyogJHRhcmdldGRpci9zYW1wbGVzL1BQYXJzZSIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhNTDRDUk9PVC9zYW1wbGVzL1N0ZEluUGFyc2UvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvU3RkSW5QYXJzZSIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhNTDRDUk9PVC9zYW1wbGVzL2RhdGEvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvZGF0YSIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhFUkNFU0NST09UL3NhbXBsZXMvUHJvamVjdHMvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvUHJvamVjdHMiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYRVJDRVNDUk9PVC9zYW1wbGVzL1NBWENvdW50LyogJHRhcmdldGRpci9zYW1wbGVzL1NBWENvdW50Iik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9TQVhQcmludC8qICR0YXJnZXRkaXIvc2FtcGxlcy9TQVhQcmludCIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhFUkNFU0NST09UL3NhbXBsZXMvRE9NQ291bnQvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvRE9NQ291bnQiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYRVJDRVNDUk9PVC9zYW1wbGVzL0RPTVByaW50LyogJHRhcmdldGRpci9zYW1wbGVzL0RPTVByaW50Iik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9SZWRpcmVjdC8qICR0YXJnZXRkaXIvc2FtcGxlcy9SZWRpcmVjdCIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhFUkNFU0NST09UL3NhbXBsZXMvTWVtUGFyc2UvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvTWVtUGFyc2UiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYRVJDRVNDUk9PVC9zYW1wbGVzL1BQYXJzZS8qICR0YXJnZXRkaXIvc2FtcGxlcy9QUGFyc2UiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYRVJDRVNDUk9PVC9zYW1wbGVzL1N0ZEluUGFyc2UvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvU3RkSW5QYXJzZSIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhFUkNFU0NST09UL3NhbXBsZXMvRW51bVZhbC8qICR0YXJnZXRkaXIvc2FtcGxlcy9FbnVtVmFsIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmdiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9kYXRhLyogJHRhcmdldGRpci9zYW1wbGVzL2RhdGEiKTsKIAogICAgICAgICAjIFBvcHVsYXRlIHRoZSBkb2NzIGRpcmVjdG9yeQogICAgICAgICBwcmludCAoIlxuXG5Db3B5aW5nIGRvY3VtZW50YXRpb24gLi4uXG4iKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYTUw0Q1JPT1QvZG9jLyogJHRhcmdldGRpci9kb2MiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYTUw0Q1JPT1QvZG9jL2FwaURvY3MvKiAkdGFyZ2V0ZGlyL2RvYy9hcGlEb2NzIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgJFhNTDRDUk9PVC9SZWFkbWUuaHRtbCAkdGFyZ2V0ZGlyIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgJFhNTDRDUk9PVC9kb2MvbGljZW5zZS5odG1sICR0YXJnZXRkaXIiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmZ2ICRYRVJDRVNDUk9PVC9kb2MvKiAkdGFyZ2V0ZGlyL2RvYyIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZnYgJFhFUkNFU0NST09UL2RvYy9hcGlEb2NzLyogJHRhcmdldGRpci9kb2MvYXBpRG9jcyIpOworICAgICAgICBzeXN0ZW0oImNwICRYRVJDRVNDUk9PVC9SZWFkbWUuaHRtbCAkdGFyZ2V0ZGlyIik7CisgICAgICAgIHN5c3RlbSgiY3AgJFhFUkNFU0NST09UL2RvYy9saWNlbnNlLmh0bWwgJHRhcmdldGRpciIpOwogCiAgICAgICAgICMgTm93IHBhY2thZ2UgaXQgYWxsIHVwIHVzaW5nIFpJUAogICAgICAgICBjaGRpciAoIiR0YXJnZXRkaXIvLi4iKTsKQEAgLTI4MSw3ICsyODEsNyBAQAogICAgICAgICAgICAkaWN1Q29tcGlsZUZsYWdzID0gJ0NYWD0ieGxDX3IgLUwvdXNyL2xwcC94bEMvbGliIiBDQz0ieGxjX3IgLUwvdXNyL2xwcC94bEMvbGliIiBDX0ZMQUdTPSItdyAtTyIgQ1hYX0ZMQUdTPSItdyAtTyInOyAKICAgICAgICAgfQogICAgICAgICBpZiAoJHBsYXRmb3JtIGVxICdIUC1VWCcpIHsKLSAgICAgICAgICAgIGlmICgkY2NvbXBpbGVyIGVxICdDQycpIHsKKyAgICAgICAgICAgIGlmICgkb3B0X2MgZXEgJ0NDJykgewogICAgICAgICAgICAgICAgICRpY3VDb21waWxlRmxhZ3MgPSAnQ0M9Y2MgQ1hYPUNDIENYWEZMQUdTPSIrZWggK0RBcG9ydGFibGUgLXcgLU8iIENGTEFHUz0iK0RBcG9ydGFibGUgLXcgLU8iJzsgCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTI5MCw2ICsyOTAsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmICgkcGxhdGZvcm0gPX4gbS9MaW51eC8pIHsKICAgICAgICAgICAgJGljdUNvbXBpbGVGbGFncyA9ICdDQz1nY2MgQ1hYPWcrKyBDWFhGTEFHUz0iLXcgLU8iIENGTEFHUz0iLXcgLU8iJzsgCisJICAgJHBsYXRmb3JtID1+IHRyL0EtWi9hLXovOwogICAgICAgICB9CiAgICAgICAgIGlmICgkcGxhdGZvcm0gPX4gbS9TdW5PUy8pIHsKICAgICAgICAgICAgJGljdUNvbXBpbGVGbGFncyA9ICdDQz1jYyBDWFg9Q0MgQ1hYRkxBR1M9Ii13IC1PIiBDRkxBR1M9Ii13IC1PIic7IApAQCAtMzAyLDMyICszMDMsNTIgQEAKICAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICB9CiAKLSAgICAgICAgJHNyY3ppcGZpbGVzID0gJHNyY3RhcmdldGRpciAuICIvKiI7Ci0KLSAgICAgICAgJHNyY3RhcmdldGRpciA9ICRPVVRQVVRESVIgLiAkc3JjdGFyZ2V0ZGlyOwogICAgICAgICBpZiAoLWUgJHNyY3RhcmdldGRpci4iLnRhciIpIHsKICAgICAgICAgICAgICAgICBwcmludCAoIkVycm9yOiBUaGUgdGFyZ2V0IGZpbGUgXCckc3JjdGFyZ2V0ZGlyLnRhclwnIGFscmVhZHkgZXhpc3RzLlxuIik7CiAgICAgICAgICAgICAgICAgcHJpbnQgKCIgICAgICAgWW91IG11c3QgZGVsZXRlIHRoZSBmaWxlIFwnJHNyY3RhcmdldGRpci50YXJcJyB0byBwYWNrYWdlIHlvdXIgcHJvZHVjdC5cbiIpOwogICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0KIAorICAgICAgICAkcGxhdGZvcm0gPX4gdHIvQS1aL2Etei87CiAKICAgICAgICAgIyBNYWtlIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFuZCBpdHMgbWFpbiBzdWJkaXJlY3RvcmllcwogICAgICAgICBzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyIik7CiAgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvYmluIik7CiAgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvbGliIik7Ci0JCWlmIChsZW5ndGgoJElDVVJPT1QpID4gMCkgewotICAgICAgICAJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9saWIvaWN1Iik7Ci0gICAgICAgIAlzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2xpYi9pY3UvZGF0YSIpOwotICAgICAgICAJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL2ljdSIpOwotCQl9CiAgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZSIpOworCWlmIChsZW5ndGgoJElDVVJPT1QpID4gMCkgeworCQlzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2xpYi9pY3UiKTsKKwkJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9saWIvaWN1L2RhdGEiKTsKKwkJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL2ljdSIpOworCX0KICAgICAgICAgc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3NheCIpOwogICAgICAgICBzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvZnJhbWV3b3JrIik7CiAgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS9pbnRlcm5hbCIpOwogICAgICAgICBzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvcGFyc2VycyIpOwogICAgICAgICBzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbCIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL0NvbXBpbGVycyIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL01zZ0xvYWRlcnMiKTsKKwlzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9Nc2dMb2FkZXJzL0lDVSIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL01zZ0xvYWRlcnMvSW5NZW1vcnkiKTsKKwlzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9Nc2dMb2FkZXJzL01zZ0NhdGFsb2ciKTsKKwlzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9Nc2dMb2FkZXJzL1dpbjMyIik7CisJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvUGxhdGZvcm1zIik7CisJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvUGxhdGZvcm1zL0FJWCIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9IUFVYIik7CisJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvUGxhdGZvcm1zL0xpbnV4Iik7CisJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvUGxhdGZvcm1zL01hY09TIik7CisJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvUGxhdGZvcm1zL09TMiIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9PUzM5MCIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9Tb2xhcmlzIik7CisJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvUGxhdGZvcm1zL1RhbmRlbSIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9XaW4zMiIpOworCXN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1RyYW5zY29kZXJzIik7CisJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvVHJhbnNjb2RlcnMvSUNVIik7CisJc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvVHJhbnNjb2RlcnMvSWNvbnYiKTsKKwlzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9UcmFuc2NvZGVycy9XaW4zMiIpOwogICAgICAgICBzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL2luY2x1ZGUvZG9tIik7CisgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS92YWxpZGF0b3JzIik7CisgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvaW5jbHVkZS92YWxpZGF0b3JzL0RURCIpOwogICAgICAgICBzeXN0ZW0gKCJta2RpciAkdGFyZ2V0ZGlyL3NhbXBsZXMiKTsKICAgICAgICAgc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9zYW1wbGVzL2RhdGEiKTsKICAgICAgICAgc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9zYW1wbGVzL1NBWENvdW50Iik7CkBAIC0zMzgsNiArMzU5LDcgQEAKICAgICAgICAgc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9zYW1wbGVzL01lbVBhcnNlIik7CiAgICAgICAgIHN5c3RlbSAoIm1rZGlyICR0YXJnZXRkaXIvc2FtcGxlcy9QUGFyc2UiKTsKICAgICAgICAgc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9zYW1wbGVzL1N0ZEluUGFyc2UiKTsKKyAgICAgICAgc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9zYW1wbGVzL0VudW1WYWwiKTsKICAgICAgICAgc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9kb2MiKTsKICAgICAgICAgc3lzdGVtICgibWtkaXIgJHRhcmdldGRpci9kb2MvYXBpRG9jcyIpOwogCkBAIC0zNTMsMTkgKzM3NSwxOSBAQAogCQkJc3lzdGVtICgiZ21ha2UiKTsKIAkJCSMgRm9yIHRoZSBhbnRpcXVhdGVkIENDIGNvbXBpbGVyIHVuZGVyIEhQVVgsIHdlIG5lZWQgdG8gaW52b2tlCiAJCQkjIGdtYWtlIG9uZSBleHRyYSB0aW1lIHRvIGdlbmVyYXRlIHRoZSAuY252IGZpbGVzLgotCQkJaWYgKCAoJHBsYXRmb3JtIGVxICdIUC1VWCcpICYmICgkY29tcGlsZXIgZXEgJ0NDJykgKSB7CisJCQlpZiAoICgkcGxhdGZvcm0gZXEgJ0hQLVVYJykgJiYgKCRvcHRfYyBlcSAnQ0MnKSApIHsKIAkJCQlzeXN0ZW0gKCJnbWFrZSIpOwogCQkJfQogCQl9CiAKICAgICAgICAgIyBtYWtlIHRoZSBzb3VyY2UgZmlsZXMKLSAgICAgICAgY2hkaXIgKCIkWE1MNENST09UL3NyYyIpOworICAgICAgICBjaGRpciAoIiRYRVJDRVNDUk9PVC9zcmMiKTsKIAogICAgICAgICBzeXN0ZW0gKCJydW5Db25maWd1cmUgLXAkcGxhdGZvcm0gLWMkb3B0X2MgLXgkb3B0X3ggLW0kb3B0X20gLW4kb3B0X24gLXQkb3B0X3QgLXIkb3B0X3IiKTsKICAgICAgICAgc3lzdGVtICgiZ21ha2UiKTsKIAogICAgICAgICAjIE5vdyBidWlsZCB0aGUgc2FtcGxlcwotICAgICAgICBjaGRpciAoIiRYTUw0Q1JPT1Qvc2FtcGxlcyIpOworICAgICAgICBjaGRpciAoIiRYRVJDRVNDUk9PVC9zYW1wbGVzIik7CiAgICAgICAgIHN5c3RlbSAoInJ1bkNvbmZpZ3VyZSAtcCRwbGF0Zm9ybSAtYyRvcHRfYyAteCRvcHRfeCIpOwogICAgICAgICBzeXN0ZW0gKCJnbWFrZSIpOwogCkBAIC0zNzMsMTQgKzM5NSwzNSBAQAogCiAgICAgICAgICMgUG9wdWxhdGUgdGhlIGluY2x1ZGUgb3V0cHV0IGRpcmVjdG9yeQogICAgICAgICBwcmludCAoIlxuXG5Db3B5aW5nIGhlYWRlcnMgZmlsZXMgLi4uXG4iKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zcmMvc2F4LyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS9zYXgiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zcmMvZnJhbWV3b3JrLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS9mcmFtZXdvcmsiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zcmMvZG9tL0RPTSouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS9kb20iKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zcmMvaW50ZXJuYWwvKi5ocHAgJHRhcmdldGRpci9pbmNsdWRlL2ludGVybmFsIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmICRYTUw0Q1JPT1Qvc3JjL2ludGVybmFsLyouYyAkdGFyZ2V0ZGlyL2luY2x1ZGUvaW50ZXJuYWwiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zcmMvcGFyc2Vycy8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvcGFyc2VycyIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWE1MNENST09UL3NyYy91dGlsLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmICRYTUw0Q1JPT1Qvc3JjL3V0aWwvKi5jICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvc2F4LyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS9zYXgiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy9mcmFtZXdvcmsvKi5ocHAgJHRhcmdldGRpci9pbmNsdWRlL2ZyYW1ld29yayIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL2RvbS9ET00qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvZG9tIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvaW50ZXJuYWwvKi5ocHAgJHRhcmdldGRpci9pbmNsdWRlL2ludGVybmFsIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvaW50ZXJuYWwvKi5jICR0YXJnZXRkaXIvaW5jbHVkZS9pbnRlcm5hbCIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3BhcnNlcnMvKi5ocHAgJHRhcmdldGRpci9pbmNsdWRlL3BhcnNlcnMiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy91dGlsLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvdXRpbC8qLmMgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwiKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvQ29tcGlsZXJzLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL0NvbXBpbGVycyIpOworCXN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvdXRpbC9Nc2dMb2FkZXJzLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL01zZ0xvYWRlcnMiKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvTXNnTG9hZGVycy9JQ1UvKi5ocHAgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvTXNnTG9hZGVycy9JQ1UiKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvTXNnTG9hZGVycy9Jbk1lbW9yeS8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9Nc2dMb2FkZXJzL0luTWVtb3J5Iik7CisJc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy91dGlsL01zZ0xvYWRlcnMvTXNnQ2F0YWxvZy8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9Nc2dMb2FkZXJzL01zZ0NhdGFsb2ciKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvTXNnTG9hZGVycy9XaW4zMi8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9Nc2dMb2FkZXJzL1dpbjMyIik7CisJc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy91dGlsL1BsYXRmb3Jtcy8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9QbGF0Zm9ybXMiKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvUGxhdGZvcm1zL0FJWC8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9QbGF0Zm9ybXMvQUlYIik7CisJc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy91dGlsL1BsYXRmb3Jtcy9IUFVYLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9IUFVYIik7CisJc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy91dGlsL1BsYXRmb3Jtcy9MaW51eC8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9QbGF0Zm9ybXMvTGludXgiKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvUGxhdGZvcm1zL01hY09TLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9NYWNPUyIpOworCXN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvdXRpbC9QbGF0Zm9ybXMvT1MyLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9PUzIiKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvUGxhdGZvcm1zL09TMzkwLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9PUzM5MCIpOworCXN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvdXRpbC9QbGF0Zm9ybXMvU29sYXJpcy8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9QbGF0Zm9ybXMvU29sYXJpcyIpOworCXN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvdXRpbC9QbGF0Zm9ybXMvVGFuZGVtLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9UYW5kZW0iKTsKKwlzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvUGxhdGZvcm1zL1dpbjMyLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1BsYXRmb3Jtcy9XaW4zMiIpOworCXN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvdXRpbC9UcmFuc2NvZGVycy8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdXRpbC9UcmFuc2NvZGVycyIpOworCXN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zcmMvdXRpbC9UcmFuc2NvZGVycy9JQ1UvKi5ocHAgJHRhcmdldGRpci9pbmNsdWRlL3V0aWwvVHJhbnNjb2RlcnMvSUNVIik7CisJc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy91dGlsL1RyYW5zY29kZXJzL0ljb252LyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1RyYW5zY29kZXJzL0ljb252Iik7CisJc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy91dGlsL1RyYW5zY29kZXJzL1dpbjMyLyouaHBwICR0YXJnZXRkaXIvaW5jbHVkZS91dGlsL1RyYW5zY29kZXJzL1dpbjMyIik7CisJc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL3NyYy92YWxpZGF0b3JzL0RURC8qLmhwcCAkdGFyZ2V0ZGlyL2luY2x1ZGUvdmFsaWRhdG9ycy9EVEQiKTsKIAkJCiAJCWlmIChsZW5ndGgoJElDVVJPT1QpID4gMCkgewogCQkJcHJpbnQgIlxuSW50ZXJuYXRpb25hbCBmaWxlcyBhcmUgYmVpbmcgY29waWVkIGZyb20gXCciIC4gJElDVVJPT1QgLiAiXCciOwpAQCAtMzg5LDE0ICs0MzIsMTQgQEAKIAogICAgICAgICAjIFBvcHVsYXRlIHRoZSBiaW5hcnkgb3V0cHV0IGRpcmVjdG9yeQogICAgICAgICBwcmludCAoIlxuXG5Db3B5aW5nIGJpbmFyeSBvdXRwdXRzIC4uLlxuIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmICRYTUw0Q1JPT1QvYmluLyogJHRhcmdldGRpci9iaW4iKTsKKyAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09UL2Jpbi8qICR0YXJnZXRkaXIvYmluIik7CiAJCWlmIChsZW5ndGgoJElDVVJPT1QpID4gMCkgewogCQkJc3lzdGVtKCJjcCAtZiAkSUNVUk9PVC9zb3VyY2UvdG9vbHMvbWFrZWNvbnYvbWFrZWNvbnYgJHRhcmdldGRpci9iaW4iKTsKIAkJCXN5c3RlbSgiY3AgLWYgJElDVVJPT1QvbGliL2xpYmljdS11Yy4qICR0YXJnZXRkaXIvbGliIik7CiAJCX0KLSAgICAgICAgc3lzdGVtKCJjcCAtZiAkWE1MNENST09UL2xpYi8qLmEgJHRhcmdldGRpci9saWIiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtZiAkWE1MNENST09UL2xpYi8qLnNvICR0YXJnZXRkaXIvbGliIik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLWYgJFhNTDRDUk9PVC9saWIvKi5zbCAkdGFyZ2V0ZGlyL2xpYiIpOworICAgICAgICBzeXN0ZW0oImNwIC1mICRYRVJDRVNDUk9PVC9saWIvKi5hICR0YXJnZXRkaXIvbGliIik7CisgICAgICAgIHN5c3RlbSgiY3AgLWYgJFhFUkNFU0NST09UL2xpYi8qLnNvICR0YXJnZXRkaXIvbGliIik7CisgICAgICAgIHN5c3RlbSgiY3AgLWYgJFhFUkNFU0NST09UL2xpYi8qLnNsICR0YXJnZXRkaXIvbGliIik7CiAKICAgICAgICAgc3lzdGVtKCJybSAtcmYgJHRhcmdldGRpci9iaW4vb2JqIik7CiAKQEAgLTQxMCwyNSArNDUzLDI2IEBACiAgICAgICAgIHByaW50ICgiXG5cbkNvcHlpbmcgc2FtcGxlIGZpbGVzIC4uLlxuIik7CiAgICAgICAgIGZvcmVhY2ggJGlpaSAoJ2NvbmZpZy5ndWVzcycsICdjb25maWcuaC5pbicsICdjb25maWcuc3ViJywgJ2NvbmZpZ3VyZScsICdjb25maWd1cmUuaW4nLAogICAgICAgICAgICAgICAgICdpbnN0YWxsLXNoJywgJ3J1bkNvbmZpZ3VyZScsICdNYWtlZmlsZS5pbicsICdNYWtlZmlsZS5pbmNsJywgJ01ha2VmaWxlJykgewotICAgICAgICAgICAgICAgIHN5c3RlbSgiY3AgLWYgJFhNTDRDUk9PVC9zYW1wbGVzLyRpaWkgJHRhcmdldGRpci9zYW1wbGVzIik7CisgICAgICAgICAgICAgICAgc3lzdGVtKCJjcCAtZiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy8kaWlpICR0YXJnZXRkaXIvc2FtcGxlcyIpOwogICAgICAgICB9CiAKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zYW1wbGVzL2RhdGEvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvZGF0YSIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWE1MNENST09UL3NhbXBsZXMvU0FYQ291bnQvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvU0FYQ291bnQiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zYW1wbGVzL1NBWFByaW50LyogJHRhcmdldGRpci9zYW1wbGVzL1NBWFByaW50Iik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmICRYTUw0Q1JPT1Qvc2FtcGxlcy9ET01Db3VudC8qICR0YXJnZXRkaXIvc2FtcGxlcy9ET01Db3VudCIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWE1MNENST09UL3NhbXBsZXMvRE9NUHJpbnQvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvRE9NUHJpbnQiKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9zYW1wbGVzL1JlZGlyZWN0LyogJHRhcmdldGRpci9zYW1wbGVzL1JlZGlyZWN0Iik7Ci0gICAgICAgIHN5c3RlbSgiY3AgLVJmICRYTUw0Q1JPT1Qvc2FtcGxlcy9NZW1QYXJzZS8qICR0YXJnZXRkaXIvc2FtcGxlcy9NZW1QYXJzZSIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWE1MNENST09UL3NhbXBsZXMvUFBhcnNlLyogJHRhcmdldGRpci9zYW1wbGVzL1BQYXJzZSIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWE1MNENST09UL3NhbXBsZXMvU3RkSW5QYXJzZS8qICR0YXJnZXRkaXIvc2FtcGxlcy9TdGRJblBhcnNlIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zYW1wbGVzL2RhdGEvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvZGF0YSIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9TQVhDb3VudC8qICR0YXJnZXRkaXIvc2FtcGxlcy9TQVhDb3VudCIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9TQVhQcmludC8qICR0YXJnZXRkaXIvc2FtcGxlcy9TQVhQcmludCIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9ET01Db3VudC8qICR0YXJnZXRkaXIvc2FtcGxlcy9ET01Db3VudCIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9ET01QcmludC8qICR0YXJnZXRkaXIvc2FtcGxlcy9ET01QcmludCIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9SZWRpcmVjdC8qICR0YXJnZXRkaXIvc2FtcGxlcy9SZWRpcmVjdCIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9NZW1QYXJzZS8qICR0YXJnZXRkaXIvc2FtcGxlcy9NZW1QYXJzZSIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9QUGFyc2UvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvUFBhcnNlIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9zYW1wbGVzL1N0ZEluUGFyc2UvKiAkdGFyZ2V0ZGlyL3NhbXBsZXMvU3RkSW5QYXJzZSIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1Qvc2FtcGxlcy9FbnVtVmFsLyogJHRhcmdldGRpci9zYW1wbGVzL0VudW1WYWwiKTsKIAogICAgICAgICAjIFBvcHVsYXRlIHRoZSBkb2NzIGRpcmVjdG9yeQogICAgICAgICBwcmludCAoIlxuXG5Db3B5aW5nIGRvY3VtZW50YXRpb24gLi4uXG4iKTsKLSAgICAgICAgc3lzdGVtKCJjcCAtUmYgJFhNTDRDUk9PVC9kb2MvKiAkdGFyZ2V0ZGlyL2RvYyIpOwotICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWE1MNENST09UL2RvYy9hcGlEb2NzLyogJHRhcmdldGRpci9kb2MvYXBpRG9jcyIpOwotICAgICAgICBzeXN0ZW0oImNwICRYTUw0Q1JPT1QvUmVhZG1lLmh0bWwgJHRhcmdldGRpciIpOwotICAgICAgICBzeXN0ZW0oImNwICRYTUw0Q1JPT1QvZG9jL2xpY2Vuc2UuaHRtbCAkdGFyZ2V0ZGlyIik7CisgICAgICAgIHN5c3RlbSgiY3AgLVJmICRYRVJDRVNDUk9PVC9kb2MvKiAkdGFyZ2V0ZGlyL2RvYyIpOworICAgICAgICBzeXN0ZW0oImNwIC1SZiAkWEVSQ0VTQ1JPT1QvZG9jL2FwaURvY3MvKiAkdGFyZ2V0ZGlyL2RvYy9hcGlEb2NzIik7CisgICAgICAgIHN5c3RlbSgiY3AgJFhFUkNFU0NST09UL1JlYWRtZS5odG1sICR0YXJnZXRkaXIiKTsKKyAgICAgICAgc3lzdGVtKCJjcCAkWEVSQ0VTQ1JPT1QvZG9jL2xpY2Vuc2UuaHRtbCAkdGFyZ2V0ZGlyIik7CiAKICAgICAgICAgIyBDaGFuZ2UgdGhlIGRpcmVjdG9yeSBwZXJtaXNzaW9ucwogICAgICAgICBzeXN0ZW0gKCJjaG1vZCA2NDQgYGZpbmQgJHRhcmdldGRpciAtdHlwZSBmYCIpOwpAQCAtNDQyLDE0ICs0ODYsMTMgQEAKICAgICAgICAgY2hkaXIgKCIkdGFyZ2V0ZGlyLy4uIik7CiAgICAgICAgICR6aXBuYW1lID0gJHRhcmdldGRpciAuICIudGFyIjsKICAgICAgICAgJHBsYXRmb3JtemlwbmFtZSA9ICR6aXBuYW1lOwotICAgICAgICAkcGxhdGZvcm16aXBuYW1lID1+IHMvXC50YXIvJHBsYXRmb3JtZXh0ZW5zaW9uXC50YXIvZzsKIAotICAgICAgICBwcmludCAoInRhciAtY3ZmICRwbGF0ZnJvbXppcG5hbWUgJHppcGZpbGVzXG4iKTsKKyAgICAgICAgcHJpbnQgKCJ0YXIgLWN2ZiAkcGxhdGZvcm16aXBuYW1lICR6aXBmaWxlc1xuIik7CiAgICAgICAgIHN5c3RlbSAoInRhciAtY3ZmICRwbGF0Zm9ybXppcG5hbWUgJHppcGZpbGVzIik7CiAKICAgICAgICAgIyBGaW5hbGx5IGNvbXByZXNzIHRoZSBmaWxlcwogICAgICAgICBwcmludCAoIkNvbXByZXNzaW5nICRwbGF0Zm9ybXppcG5hbWUgLi4uXG4iKTsKLSAgICAgICAgc3lzdGVtICgiY29tcHJlc3MgJHBsYXRmb3JtemlwbmFtZSIpOworICAgICAgICBzeXN0ZW0gKCJnemlwICRwbGF0Zm9ybXppcG5hbWUiKTsKIAogfQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL3BhY2thZ2VTb3VyY2VzLnBsIGIvc2NyaXB0cy9wYWNrYWdlU291cmNlcy5wbAppbmRleCA0ODZhNDdhLi4yYzA3NmY3IDEwMDY0NAotLS0gYS9zY3JpcHRzL3BhY2thZ2VTb3VyY2VzLnBsCisrKyBiL3NjcmlwdHMvcGFja2FnZVNvdXJjZXMucGwKQEAgLTEsMTcgKzEsMTcgQEAKICMhL3Vzci9iaW4vcGVybAogCi1wdXNoKEBJTkMsICIvaG9tZS94bWw0Yy9iaW4iLCAiL2hvbWUveG1sNGMvYmluL3BlcmwvcGVybC1SVU4vb3B0L3Blcmw1L2xpYiIsICIvRGV2ZWxvcG1lbnQyL2N1cGVydC9iaW4vcGVybC9wZXJsLVJVTi9vcHQvcGVybDUvbGliIiwgIi9EZXZlbG9wbWVudC9jdXBlcnQvdXNyL2xvY2FsL3BlcmwvcGVybC1SVU4vb3B0L3Blcmw1L2xpYiIpOworcHVzaChASU5DLCAiL2hvbWUveGVyY2VzLWMvYmluIiwgIi9ob21lL3hlcmNlcy1jL2Jpbi9wZXJsL3BlcmwtUlVOL29wdC9wZXJsNS9saWIiLCAiL0RldmVsb3BtZW50Mi9jdXBlcnQvYmluL3BlcmwvcGVybC1SVU4vb3B0L3Blcmw1L2xpYiIsICIvRGV2ZWxvcG1lbnQvY3VwZXJ0L3Vzci9sb2NhbC9wZXJsL3BlcmwtUlVOL29wdC9wZXJsNS9saWIiKTsKIHJlcXVpcmUgImdldG9wdC5wbCI7CiAKICR8PTE7ICAgIyBGb3JjZSBhIGZsdXNoIGFmdGVyIGV2ZXJ5IHByaW50CiAKLSMgU2V0IHVwIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIFhNTDRDIGFuZCBJQ1UKLSRYTUw0Q1JPT1QgPSAkRU5WeydYTUw0Q1JPT1QnfTsKKyMgU2V0IHVwIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIFhFUkNFUy1DIGFuZCBJQ1UKKyRYRVJDRVNDUk9PVCA9ICRFTlZ7J1hFUkNFU0NST09UJ307CiAkSUNVUk9PVCA9ICRFTlZ7J0lDVVJPT1QnfTsKIAogIyBDaGVjayBmb3IgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgZXhpdCBpZiBlcnJvcgotaWYgKCFsZW5ndGgoJFhNTDRDUk9PVCkpIHsKLSAgICAgICAgcHJpbnQgIllvdSBtdXN0IHNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxsZWQgWE1MNENST09UIHRvIHdvcmsgd2l0aCB0aGlzIHNjcmlwdC5cbiI7CitpZiAoIWxlbmd0aCgkWEVSQ0VTQ1JPT1QpKSB7CisgICAgICAgIHByaW50ICJZb3UgbXVzdCBzZXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgY2FsbGVkIFhFUkNFU0NST09UIHRvIHdvcmsgd2l0aCB0aGlzIHNjcmlwdC5cbiI7CiAgICAgICAgIGV4aXQoLTEpOwogfQogCkBAIC0xOSwxMCArMTksMTAgQEAKICRPVVRQVVRESVIgPSAkb3B0X287CiAKICMgQ2hlY2sgZm9yIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIGV4aXQgaWYgZXJyb3IKLWlmICghbGVuZ3RoKCRYTUw0Q1JPT1QpIHx8ICFsZW5ndGgoJE9VVFBVVERJUikpIHsKLSAgICAgICAgcHJpbnQgKCJVc2FnZSBpczogcGFja2FnZVNvdXJjZXMgLXM8b3V0cHV0X2RpcmVjdG9yeT5cbiIpOwotICAgICAgICBwcmludCAoIkV4YW1wbGU6IHBlcmwgcGFja2FnZVNvdXJjZXMucGwgLW9kOlxceG1sNGNzcmMzXzBfMFxuIik7Ci0gICAgICAgIHByaW50ICgiICAgICAgICAgcGVybCBwYWNrYWdlU291cmNlcy5wbCAtb1wkSE9NRS94bWw0Y3NyYzNfMF8wIik7CitpZiAoIWxlbmd0aCgkWEVSQ0VTQ1JPT1QpIHx8ICFsZW5ndGgoJE9VVFBVVERJUikpIHsKKyAgICAgICAgcHJpbnQgKCJVc2FnZSBpczogcGFja2FnZVNvdXJjZXMgLW88b3V0cHV0X2RpcmVjdG9yeT5cbiIpOworICAgICAgICBwcmludCAoIkV4YW1wbGU6IHBlcmwgcGFja2FnZVNvdXJjZXMucGwgLW9kOlxceGVyY2VzLWNfMV8wXzBkMDFcbiIpOworICAgICAgICBwcmludCAoIiAgICAgICAgIHBlcmwgcGFja2FnZVNvdXJjZXMucGwgLW9cJEhPTUUveGVyY2VzLWNfMV8wXzBkMDFcbiIpOwogICAgICAgICBleGl0KC0xKTsKIH0KIApAQCAtMzQsMTEgKzM0LDExIEBACiAjIH0KIAogI0ZpeCB0aGUgYmFja3NsYXNoZXMgb24gdGhlIFdpbmRvd3MgcGxhdGZvcm0KLSRYTUw0Q1JPT1QgPX4gcy9cXC9cLy9nOworJFhFUkNFU0NST09UID1+IHMvXFwvXC8vZzsKICRJQ1VST09UID1+IHMvXFwvXC8vZzsKIAotIyBSZWFkIHRoZSB0YXJnZXQgdmVyc2lvbiBmcm9tIHRoZSBmaWxlICRYTUw0Q1JPT1Qvc3JjL3V0aWwvWE1MNENEZWZzLmhwcAotJHZlcnNpb25maWxlID0gIiRYTUw0Q1JPT1Qvc3JjL3V0aWwvWE1MNENEZWZzLmhwcCI7CisjIFJlYWQgdGhlIHRhcmdldCB2ZXJzaW9uIGZyb20gdGhlIGZpbGUgJFhFUkNFU0NST09UL3NyYy91dGlsL1hNTDRDRGVmcy5ocHAKKyR2ZXJzaW9uZmlsZSA9ICIkWEVSQ0VTQ1JPT1Qvc3JjL3V0aWwvWE1MNENEZWZzLmhwcCI7CiAkb3BlbnJlc3VsdCA9IG9wZW4gKFZFUlNJT05GSUxFLCAiPCR2ZXJzaW9uZmlsZSIpOwogCiBpZiAoJG9wZW5yZXN1bHQgPT0gMCkgewpAQCAtNTAsMTUgKzUwLDExIEBACiAgICBpZiAoJGZpbGVsaW5lID1+IC9nWE1MNENGdWxsVmVyc2lvblN0ciA9IFwiKC4qKVwiLykgewogICAgICAkYmluYXJ5dGFyZ2V0ZGlyID0gJDE7ICAjIFdlIGZvdW5kIHRoZSB2ZXJzaW9uIHN0cmluZyBpbnNpZGUgdGhpcyBmaWxlCiAgICB9Ci0gICBpZiAoJGZpbGVsaW5lID1+IC9nWE1MNENWZXJzaW9uU3RyID0gXCIoLiopXCIvKSB7Ci0gICAgICAkbGlicmFyeXZlcnNpb24gPSAkMTsKLSAgIH0KIH0KIGNsb3NlKFZFUlNJT05GSUxFKTsKIAogJGJpbmFyeXRhcmdldGRpciA9fiBzL1wuL18vZzsgICAgIyBTdWJzdGl0dXRlIHRoZSBkb3RzCiAkYmluYXJ5dGFyZ2V0ZGlyID1+IHMvXHMvXy9nOyAgICAjIFN1YnN0aXR1dGUgdGhlIGJsYW5rcwotJGJpbmFyeWRpcmVjdG9yeW5hbWUgPSAieG1sNGMiIC4gJGJpbmFyeXRhcmdldGRpcjsgICMgSXMgdGhlIG5hbWUgb2YgdGhlIGJpbmFyeSBkaXJlY3RvcnkKICRiaW5hcnl0YXJnZXRkaXIgPX4gcy9cXC9cLy9nOyAgICMgRml4IHRoZSBiYWNrc2xhc2hlcywgaWYgdGhleSBleGlzdCwgcHJvYmFibHkgZG9lc24ndAogCiAjIE5vdyBjaGVjayBpZiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMsIGV4aXQgaWYgaXQgZG9lcwpAQCAtNjgsOCArNjQsMTAgQEAKICAgICAgICAgZXhpdCgxKTsKIH0KIAotCi0kc3JjemlwZmlsZXMgPSAkT1VUUFVURElSIC4gIi8qIjsKKyNDb25zdHJ1Y3QgdGhlIG5hbWUgb2YgdGhlIHppcCBmaWxlIGJ5IGV4dHJhY3RpbmcgdGhlIGxhc3QgZGlyZWN0b3J5IG5hbWUKKyRzcmN6aXBmaWxlcyA9ICRPVVRQVVRESVI7Ciskc3JjemlwZmlsZXMgPX4gcy8uKlwvKFtcd3wtXSopJC8kMS9nOworJHNyY3ppcGZpbGVzID0gJHNyY3ppcGZpbGVzIC4gIi8qIjsKICRzcmN0YXJnZXRkaXIgPSAkT1VUUFVURElSOwogCiAjIEZpbmQgb3V0IHRoZSBwbGF0Zm9ybSBmcm9tICd1bmFtZSAtYScKQEAgLTc5LDEyICs3NywxMiBAQAogJHBsYXRmb3JtID0gJDE7CiBjbG9zZSAoUExBVEZPUk0pOwogCi1wcmludCAiXG5QYWNrYWdpbmcgWE1MNEMgc291cmNlcyBpbiAiIC4gJHNyY3RhcmdldGRpciAuICIgb24gcGxhdGZvcm0gIiAuICRwbGF0Zm9ybSAuICIuLi5cbiI7CitwcmludCAiXG5QYWNrYWdpbmcgWEVSQ0VTLUMgc291cmNlcyBpbiAiIC4gJHNyY3RhcmdldGRpciAuICIgb24gcGxhdGZvcm0gIiAuICRwbGF0Zm9ybSAuICIuLi5cbiI7CiAKICMgQnVpbGQgdGhlIEFQSSBkb2NzCiAkZG9jcHBmaWxlbGlzdCA9ICIiOwogCi0kaHBwZGlyID0gIiRYTUw0Q1JPT1Qvc3JjL3NheCI7CiskaHBwZGlyID0gIiRYRVJDRVNDUk9PVC9zcmMvc2F4IjsKIGNoZGlyICgkaHBwZGlyKTsKIG9wZW5kaXIgKFRISVNESVIsICRocHBkaXIpOwogQGFsbGZpbGVzID0gZ3JlcCghL15cLlwuPyQvLCByZWFkZGlyKFRISVNESVIpKTsKQEAgLTk0LDcgKzkyLDcgQEAKICAgICAgICAkZG9jcHBmaWxlbGlzdCA9ICRkb2NwcGZpbGVsaXN0IC4gIiAiIC4gJGhwcGRpciAuICIvIiAuICRocHBmaWxlOwogfQogCi0kaHBwZGlyID0gIiRYTUw0Q1JPT1Qvc3JjL2RvbSI7CiskaHBwZGlyID0gIiRYRVJDRVNDUk9PVC9zcmMvZG9tIjsKIGNoZGlyICgkaHBwZGlyKTsKIG9wZW5kaXIgKFRISVNESVIsICRocHBkaXIpOwogQGFsbGZpbGVzID0gZ3JlcCghL15cLlwuPyQvLCByZWFkZGlyKFRISVNESVIpKTsKQEAgLTEwNSwxMSArMTAzLDExIEBACiAgICAgICAgJGRvY3BwZmlsZWxpc3QgPSAkZG9jcHBmaWxlbGlzdCAuICIgIiAuICRocHBkaXIgLiAiLyIgLiAkaHBwZmlsZTsKIH0KIAotJGRvY3BwZmlsZWxpc3QgPSAkZG9jcHBmaWxlbGlzdCAuICIgJFhNTDRDUk9PVC9zcmMvZG9tL0RPTVN0cmluZy5ocHAiOwotJGRvY3BwZmlsZWxpc3QgPSAkZG9jcHBmaWxlbGlzdCAuICIgJFhNTDRDUk9PVC9zcmMvZnJhbWV3b3JrL1hNTERvY3VtZW50SGFuZGxlci5ocHAiOwotJGRvY3BwZmlsZWxpc3QgPSAkZG9jcHBmaWxlbGlzdCAuICIgJFhNTDRDUk9PVC9zcmMvZnJhbWV3b3JrL1hNTEVudGl0eUhhbmRsZXIuaHBwIjsKKyRkb2NwcGZpbGVsaXN0ID0gJGRvY3BwZmlsZWxpc3QgLiAiICRYRVJDRVNDUk9PVC9zcmMvZG9tL0RPTVN0cmluZy5ocHAiOworJGRvY3BwZmlsZWxpc3QgPSAkZG9jcHBmaWxlbGlzdCAuICIgJFhFUkNFU0NST09UL3NyYy9mcmFtZXdvcmsvWE1MRG9jdW1lbnRIYW5kbGVyLmhwcCI7CiskZG9jcHBmaWxlbGlzdCA9ICRkb2NwcGZpbGVsaXN0IC4gIiAkWEVSQ0VTQ1JPT1Qvc3JjL2ZyYW1ld29yay9YTUxFbnRpdHlIYW5kbGVyLmhwcCI7CiAKLXN5c3RlbSAoImRvYysrIC1kICRYTUw0Q1JPT1QvZG9jL2FwaURvY3MgLUIgJFhNTDRDUk9PVC9kb2MvdGFpbC5odG1sIC1hIC1HIC1rIC1IIC1TICRkb2NwcGZpbGVsaXN0Iik7CitzeXN0ZW0gKCJkb2MrKyAtZCAkWEVSQ0VTQ1JPT1QvZG9jL2FwaURvY3MgLUIgJFhFUkNFU0NST09UL2RvYy90YWlsLmh0bWwgLWEgLUcgLWsgLUggLVMgJGRvY3BwZmlsZWxpc3QiKTsKIAogJnBhY2thZ2Vfc291cmNlcygpOwogCkBAIC0xMjUsOCArMTIzLDggQEAKICAgIHByaW50ICgiXG5Db3B5aW5nIHNvdXJjZSB0cmVlIC4uLlxuIik7CiAgICBzeXN0ZW0gKCJta2RpciAkc3JjdGFyZ2V0ZGlyIik7CiAgICBwcmludCAoIlRhcmdldGRpciBpcyA6ICIgLiAkc3JjdGFyZ2V0ZGlyIC4gIlxuIik7Ci0gICBzeXN0ZW0oImNwIC1SZiAkWE1MNENST09ULyogJHNyY3RhcmdldGRpciIpOwotICAgc3lzdGVtKCJjcCAkWE1MNENST09UL2RvYy9saWNlbnNlLmh0bWwgJHNyY3RhcmdldGRpciIpOworICAgc3lzdGVtKCJjcCAtUmYgJFhFUkNFU0NST09ULyogJHNyY3RhcmdldGRpciIpOworICAgc3lzdGVtKCJjcCAkWEVSQ0VTQ1JPT1QvZG9jL2xpY2Vuc2UuaHRtbCAkc3JjdGFyZ2V0ZGlyIik7CiAKICAgIGlmICgkcGxhdGZvcm0gPX4gbS9XaW5kb3dzLykgewogICAgICAgJFJNID0gInJtIjsKQEAgLTE5NSwxMSArMTkzLDYgQEAKICAgICMgV2FsayB0aHJvdWdoIHRoZSBzb3VyY2UgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgZGVsZXRlIGFsbCBDVlMgZGlyZWN0b3JpZXMKICAgICZkZWxldGVDVlNkaXJzKCRzcmN0YXJnZXRkaXIpOwogCi0gICAjQ2hhbmdlIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB0aGUgdXNlciBkb2N1bWVudGF0aW9uCi0gICAmY2hhbmdlX3ZlcnNpb25fbnVtYmVyKCRzcmN0YXJnZXRkaXIgLiAiL2RvYy9pbnN0YWxsYXRpb24uaHRtbCIsICRiaW5hcnlkaXJlY3RvcnluYW1lKTsKLSAgICZjaGFuZ2VfdmVyc2lvbl9udW1iZXIoJHNyY3RhcmdldGRpciAuICIvZG9jL3Byb2dyYW1taW5nLmh0bWwiLCAkYmluYXJ5ZGlyZWN0b3J5bmFtZSk7Ci0gICAmY2hhbmdlX3ZlcnNpb25fbnVtYmVyKCRzcmN0YXJnZXRkaXIgLiAiL2RvYy9kaXN0cmlidXRpb24uaHRtbCIsICRiaW5hcnlkaXJlY3RvcnluYW1lKTsKLQogICAgIyByZW1vdmUgdGhlIGV4cG9ydCBjbGF1c2VzCiAgICBjaGRpciAoIiRzcmN0YXJnZXRkaXIvZG9jL2FwaURvY3MiKTsKICAgIG9wZW5kaXIgKFRISVNESVIsICIkc3JjdGFyZ2V0ZGlyL2RvYy9hcGlEb2NzIik7CkBAIC0yMjYsMzYgKzIxOSwxMSBAQAogICAgICAgcHJpbnQgKCJ0YXIgLWN2ZiAkc3JjemlwbmFtZSAkc3JjemlwZmlsZXMiKTsKICAgICAgIHN5c3RlbSAoInRhciAtY3ZmICRzcmN6aXBuYW1lICRzcmN6aXBmaWxlcyIpOwogCi0gICAgICBzeXN0ZW0gKCJjb21wcmVzcyAkc3JjemlwbmFtZSIpOworICAgICAgc3lzdGVtICgiZ3ppcCAkc3JjemlwbmFtZSIpOwogICAgfQogICAgcHJpbnQgKCJEb25lIHdpdGggcGFja2FnaW5nIHNvdXJjZXMuXG4iKTsKIH0KIAotc3ViIGNoYW5nZV92ZXJzaW9uX251bWJlcigpCi17Ci0gICAgICAgIG15ICgkdGhlZmlsZSwgJHZlcnNpb25fbnVtKSA9IEBfOwotICAgICAgICBwcmludCAiXG5DaGFuZ2luZyBhbGwgdmVyc2lvbiBudW1iZXJzIGluIGZpbGUgJHRoZWZpbGUgdG8gJHZlcnNpb25fbnVtIjsKLSAgICAgICAgbXkgJHRoZWZpbGVkb3RiYWsgPSAkdGhlZmlsZSAuICIuYmFrIjsKLSAgICAgICAgcmVuYW1lICgkdGhlZmlsZSwgJHRoZWZpbGVkb3RiYWspOwotCi0gICAgICAgICRkbGxfbmFtZSA9ICJ4bWw0YyIgLiAkbGlicmFyeXZlcnNpb247Ci0gICAgICAgICRkbGxfbmFtZSA9fiB0ci9hLXovQS1aLzsKLSAgICAgICAgbXkgJHNyY3ZlcnNpb25fbnVtID0gJHZlcnNpb25fbnVtOwotICAgICAgICAkc3JjdmVyc2lvbl9udW0gPX4gcy94bWw0YzIveG1sNGNzcmMyL2lnOwotICAgICAgICBvcGVuIChGSVpaTEUsICR0aGVmaWxlZG90YmFrKTsKLSAgICAgICAgb3BlbiAoRklaWkxFT1VULCAiPiR0aGVmaWxlIik7Ci0gICAgICAgIHdoaWxlICgkbGluZSA9IDxGSVpaTEU+KSB7Ci0gICAgICAgICAgICAgICAgJGxpbmUgPX4gcy94bWw0YzJzcmNyZWxlYXNlbnVtLyRzcmN2ZXJzaW9uX251bS9pZzsKLSAgICAgICAgICAgICAgICAkbGluZSA9fiBzL3htbDRjMnJlbGVhc2VudW0vJHZlcnNpb25fbnVtL2lnOwotICAgICAgICAgICAgICAgICRsaW5lID1+IHMvWE1MNEMyZGxsbmFtZS8kZGxsX25hbWUvaWc7Ci0gICAgICAgICAgICAgICAgcHJpbnQgRklaWkxFT1VUICRsaW5lOwotICAgICAgICB9Ci0gICAgICAgIGNsb3NlIChGSVpaTEVPVVQpOwotICAgICAgICBjbG9zZSAoRklaWkxFKTsKLSAgICAgICAgdW5saW5rICgkdGhlZmlsZWRvdGJhayk7Ci19Ci0KLQogc3ViIHJlbW92ZV9leHBvcnRfY2xhdXNlcygpCiB7CiAgICAgICAgIG15ICgkdGhlZmlsZSkgPSBAXzsKZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5pbiBiL3NyYy9NYWtlZmlsZS5pbgppbmRleCBmZmQyNTQ1Li41YWRjYTRiIDEwMDY0NAotLS0gYS9zcmMvTWFrZWZpbGUuaW4KKysrIGIvc3JjL01ha2VmaWxlLmluCkBAIC01NSw4ICs1NSwyMyBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjAyOjU0ICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjYgIDE5OTkvMTEvMjQgMjM6MjE6NDIgIHJhaHVsagorIyBOb3cgd29ya3MgdW5kZXIgSFBVWCAxMC4yMCB3aXRoIENDIGFuZCBhQ0MsIHdpdGggSUNVIGFuZCBuYXRpdmUKK2Rpc3RjbGVhbiB0YXJnZXQgbm93IHJlbW92ZSBhbmQgcmVtYWluaW5nIE1ha2VmaWxlKHMpCitjbGVhbiB0YXJnZXQgbm93IHJlbW92ZXMgdGhlIHRlbXBsYXRlIHJlcG9zaXRvcnkgZGlyZWN0b3J5CisjCisjIFJldmlzaW9uIDEuNSAgMTk5OS8xMS8yMyAwMTo1OToyNSAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KK1JldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMTIgMjE6MTQ6MzIgIHJhaHVsagorIyBmaXhlZCB2ZXIgbnVtYmVyLgorIworIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMTIgMjA6Mzg6NDggIHJhaHVsagorIyBSZXBsYWNlZCBYTUw0Q1JPT1Qgd2l0aCBYRVJDRVNDUk9PVC4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowMjo1NCAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMDggMjI6MzY6MzkgIGFudXBhbQogIyBSZW1vdmVkIHRoZSBvdmVycmlkZWQgZGVmaW5pdGlvbiBvZiBYTUw0Q1JPT1QKQEAgLTcyLDEzICs4Nyw5IEBACiAjIEJlZm9yZSB5b3UgdHJ5IHRvIHJ1biB0aGUgTWFrZWZpbGUsIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0d28gICAgICAjCiAjIGVudmlyb25tZW50IHZhcmlhYmxlcyBzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCi0jICAgZXhwb3J0IFhNTDRDUk9PVD08dGhlIGRpcmVjdG9yeSB3aGVyZSB5b3UgaW5zdGFsbGVkIFhNTDRDPiAgICAjCi0jICAgZXhwb3J0IElDVVJPT1Q9PHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91IGluc3RhbGxlZCBJQ1U+ICAgICAgICAjCisjIGV4cG9ydCBYRVJDRVNDUk9PVD08dGhlIGRpcmVjdG9yeSB3aGVyZSB5b3UgaW5zdGFsbGVkIFhFUkNFUy1DPiAjCisjICAgICBleHBvcnQgSUNVUk9PVD08dGhlIGRpcmVjdG9yeSB3aGVyZSB5b3UgaW5zdGFsbGVkIElDVT4gICAgICAjCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCi0jIEFsc28sIHRvIGVuYWJsZSBkZWJ1Z2dpbmcsIHlvdSBtdXN0IHR5cGU6ICAgICAgICAgICAgICAgICAgICAgICAjCi0jICAgZXhwb3J0IERFQlVHPTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCi0jIFRvIGRpc2FibGUgZGVidWdnaW5nLCB5b3UgbXVzdCB0eXBlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCi0jICAgdW5zZXQgREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjTUFDUk9TIGRlZmluaW5nIGNvbW1hbmRzCiBNS0RJUj1ta2RpcgpAQCAtOTQsMjYgKzEwNSwyNyBAQAogRE9NX0RJUiA9IGRvbQogUEFSU0VSU19ESVIgPSBwYXJzZXJzCiBWQUxJREFUT1JTX0RURF9ESVIgPSB2YWxpZGF0b3JzL0RURAotQUxMX09CSkVDVFNfRElSID0gJHtYTUw0Q1JPT1R9L29iagotTElCX0RJUiA9ICR7WE1MNENST09UfS9saWIKK0FMTF9PQkpFQ1RTX0RJUiA9ICR7WEVSQ0VTQ1JPT1R9L29iagorTElCX0RJUiA9ICR7WEVSQ0VTQ1JPT1R9L2xpYgogCi1MSUIgPSAke1hNTDRDUk9PVH0vbGliCi1MSUJOQU1FID0gbGliSVhYTUw0QworTElCID0gJHtYRVJDRVNDUk9PVH0vbGliCitMSUJOQU1FID0gbGlieGVyY2VzLWMKIFRISVNMSUIgPSAke0xJQn0vJHtMSUJOQU1FfQotVkVSID0gM18wCitWRVIgPSAxXzAKIAogQUxMX09CSkVDVFMgPSAkKHdpbGRjYXJkICR7QUxMX09CSkVDVFNfRElSfS8qLm8pCiAKICNhbGwgdGhlc2Ugc2V0dGluZyBjb21lIGZyb20gdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW4gdG8gcnVuQ29uZmlndXJlLgogUExBVEZPUk0gPSBAcGxhdGZvcm1ACi1DT01QSUxFUiA9IEBjb21waWxlckAKK0NDICA9IEBjY0AKK0NYWCA9IEBjeHhACiBQUkVGSVggPSBAcHJlZml4QAogTUVTU0FHRUxPQURFUj1AbWVzc2FnZWxvYWRlckAKIFRSQU5TQ09ERVI9QHRyYW5zY29kZXJACiAKIFBST0RVQ1ROQU1FPXhlcmNlcwogUFJPRFVDVFZFUlNJT049JHtWRVJ9Ci1CSU5UQVJHRVRESVI9JHtIT01FfS8ke1BST0RVQ1ROQU1FfS1jLSR7UExBVEZPUk19LSR7Q09NUElMRVJ9LSR7UFJPRFVDVFZFUlNJT059CitCSU5UQVJHRVRESVI9JHtIT01FfS8ke1BST0RVQ1ROQU1FfS1jLSR7UExBVEZPUk19LSR7Q1hYfS0ke1BST0RVQ1RWRVJTSU9OfQogCiBhbGw6IFByZXBhcmUgVXRpbCBTYXggSW50ZXJuYWwgRnJhbWV3b3JrIFBhcnNlcnMgRG9tIFZhbGlkYXRvcnMgJHtUSElTTElCfSR7VkVSfSR7U0hMSUJTVUZGSVh9CiAKQEAgLTE5NSw2ICsyMDcsNyBAQAogCSR7Q0R9ICQoVkFMSURBVE9SU19EVERfRElSKSAmJiAkKE1BS0UpICRAICYmICR7Q0R9IC4uLy4uCiAJJHtDRH0gJChBTExfT0JKRUNUU19ESVIpICYmICQoTUFLRSkgJEAgJiYgJHtDRH0gLi4KIAlybSAtZiBNYWtlZmlsZSBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBjb25maWcuc3RhdHVzCisJZmluZCAuIC1uYW1lIE1ha2VmaWxlIC1wcmludCAtZXhlYyBybSAtZiB7fSBcOwogCXJtIC1mICp+IGNvcmUKIAogI2RvY3M6IApAQCAtMjM2LDI0ICsyNDksMjQgQEAKIAogCUBlY2hvIFBvcHVsYXRlIHRoZSBpbmNsdWRlIG91dHB1dCBkaXJlY3RvcnkKIAlAZWNobyBDb3B5aW5nIGhlYWRlcnMgZmlsZXMgLi4uCi0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc3JjL3NheC8qLmhwcCAke0JJTlRBUkdFVERJUn0vaW5jbHVkZS9zYXgKLQktJHtDUH0gLVJmICR7WE1MNENST09UfS9zcmMvZnJhbWV3b3JrLyouaHBwICR7QklOVEFSR0VURElSfS9pbmNsdWRlL2ZyYW1ld29yawotCS0ke0NQfSAtUmYgJHtYTUw0Q1JPT1R9L3NyYy9kb20vRE9NKi5ocHAgJHtCSU5UQVJHRVRESVJ9L2luY2x1ZGUvZG9tCi0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc3JjL2ludGVybmFsLyouaHBwICR7QklOVEFSR0VURElSfS9pbmNsdWRlL2ludGVybmFsCi0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc3JjL2ludGVybmFsLyouYyAke0JJTlRBUkdFVERJUn0vaW5jbHVkZS9pbnRlcm5hbAotCS0ke0NQfSAtUmYgJHtYTUw0Q1JPT1R9L3NyYy9wYXJzZXJzLyouaHBwICR7QklOVEFSR0VURElSfS9pbmNsdWRlL3BhcnNlcnMKLQktJHtDUH0gLVJmICR7WE1MNENST09UfS9zcmMvdXRpbC8qLmhwcCAke0JJTlRBUkdFVERJUn0vaW5jbHVkZS91dGlsCi0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc3JjL3V0aWwvKi5jICR7QklOVEFSR0VURElSfS9pbmNsdWRlL3V0aWwKKwktJHtDUH0gLVJmICR7WEVSQ0VTQ1JPT1R9L3NyYy9zYXgvKi5ocHAgJHtCSU5UQVJHRVRESVJ9L2luY2x1ZGUvc2F4CisJLSR7Q1B9IC1SZiAke1hFUkNFU0NST09UfS9zcmMvZnJhbWV3b3JrLyouaHBwICR7QklOVEFSR0VURElSfS9pbmNsdWRlL2ZyYW1ld29yaworCS0ke0NQfSAtUmYgJHtYRVJDRVNDUk9PVH0vc3JjL2RvbS9ET00qLmhwcCAke0JJTlRBUkdFVERJUn0vaW5jbHVkZS9kb20KKwktJHtDUH0gLVJmICR7WEVSQ0VTQ1JPT1R9L3NyYy9pbnRlcm5hbC8qLmhwcCAke0JJTlRBUkdFVERJUn0vaW5jbHVkZS9pbnRlcm5hbAorCS0ke0NQfSAtUmYgJHtYRVJDRVNDUk9PVH0vc3JjL2ludGVybmFsLyouYyAke0JJTlRBUkdFVERJUn0vaW5jbHVkZS9pbnRlcm5hbAorCS0ke0NQfSAtUmYgJHtYRVJDRVNDUk9PVH0vc3JjL3BhcnNlcnMvKi5ocHAgJHtCSU5UQVJHRVRESVJ9L2luY2x1ZGUvcGFyc2VycworCS0ke0NQfSAtUmYgJHtYRVJDRVNDUk9PVH0vc3JjL3V0aWwvKi5ocHAgJHtCSU5UQVJHRVRESVJ9L2luY2x1ZGUvdXRpbAorCS0ke0NQfSAtUmYgJHtYRVJDRVNDUk9PVH0vc3JjL3V0aWwvKi5jICR7QklOVEFSR0VURElSfS9pbmNsdWRlL3V0aWwKIAktJHtDUH0gLVJmICR7SUNVUk9PVH0vaW5jbHVkZS8qICR7QklOVEFSR0VURElSfS9pbmNsdWRlL2ljdQogCiAJQGVjaG8gUG9wdWxhdGUgdGhlIGJpbmFyeSBvdXRwdXQgZGlyZWN0b3J5CiAJQGVjaG8gQ29weWluZyBiaW5hcnkgb3V0cHV0cyAuLi4KLQktJHtDUH0gLVJmICR7WE1MNENST09UfS9iaW4vKiAke0JJTlRBUkdFVERJUn0vYmluCisJLSR7Q1B9IC1SZiAke1hFUkNFU0NST09UfS9iaW4vKiAke0JJTlRBUkdFVERJUn0vYmluCiAJLSR7Q1B9IC1mICR7SUNVUk9PVH0vc291cmNlL3Rvb2xzL21ha2Vjb252L21ha2Vjb252ICR7QklOVEFSR0VURElSfS9iaW4KIAktJHtDUH0gLWYgJHtJQ1VST09UfS9saWIvbGliaWN1LXVjLiogJHtCSU5UQVJHRVRESVJ9L2xpYgotCS0ke0NQfSAtZiAke1hNTDRDUk9PVH0vbGliLyouYSAke0JJTlRBUkdFVERJUn0vbGliCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9saWIvKi5zbyAke0JJTlRBUkdFVERJUn0vbGliCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9saWIvKi5zbCAke0JJTlRBUkdFVERJUn0vbGliCisJLSR7Q1B9IC1mICR7WEVSQ0VTQ1JPT1R9L2xpYi8qLmEgJHtCSU5UQVJHRVRESVJ9L2xpYgorCS0ke0NQfSAtZiAke1hFUkNFU0NST09UfS9saWIvKi5zbyAke0JJTlRBUkdFVERJUn0vbGliCisJLSR7Q1B9IC1mICR7WEVSQ0VTQ1JPT1R9L2xpYi8qLnNsICR7QklOVEFSR0VURElSfS9saWIKIAogCS17Uk19IC1yZiAke0JJTlRBUkdFVERJUn0vYmluL29iagogCkBAIC0yNjMsMzEgKzI3NiwzMSBAQAogCiAJQGVjaG8gUG9wdWxhdGUgdGhlIHNhbXBsZXMgZGlyZWN0b3J5CiAJQGVjaG8gQ29weWluZyBzYW1wbGUgZmlsZXMgLi4uCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9zYW1wbGVzL2NvbmZpZy5ndWVzcyAJJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMKLQktJHtDUH0gLWYgJHtYTUw0Q1JPT1R9L3NhbXBsZXMvY29uZmlnLmguaW4gCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9zYW1wbGVzL2NvbmZpZy5zdWIgCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9zYW1wbGVzL2NvbmZpZ3VyZQkke0JJTlRBUkdFVERJUn0vc2FtcGxlcwotCS0ke0NQfSAtZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9jb25maWd1cmUuaW4JJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMKLQktJHtDUH0gLWYgJHtYTUw0Q1JPT1R9L3NhbXBsZXMvaW5zdGFsbC1zaAkke0JJTlRBUkdFVERJUn0vc2FtcGxlcwotCS0ke0NQfSAtZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9ydW5Db25maWd1cmUgCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9zYW1wbGVzL01ha2VmaWxlLmluCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9zYW1wbGVzL01ha2VmaWxlLmluY2wgCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCi0JLSR7Q1B9IC1mICR7WE1MNENST09UfS9zYW1wbGVzL01hZWZpbGUJJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMKKwktJHtDUH0gLWYgJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy9jb25maWcuZ3Vlc3MgCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCisJLSR7Q1B9IC1mICR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvY29uZmlnLmguaW4gCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCisJLSR7Q1B9IC1mICR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvY29uZmlnLnN1YiAJJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMKKwktJHtDUH0gLWYgJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy9jb25maWd1cmUJJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMKKwktJHtDUH0gLWYgJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy9jb25maWd1cmUuaW4JJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMKKwktJHtDUH0gLWYgJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy9pbnN0YWxsLXNoCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCisJLSR7Q1B9IC1mICR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvcnVuQ29uZmlndXJlIAkke0JJTlRBUkdFVERJUn0vc2FtcGxlcworCS0ke0NQfSAtZiAke1hFUkNFU0NST09UfS9zYW1wbGVzL01ha2VmaWxlLmluCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCisJLSR7Q1B9IC1mICR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvTWFrZWZpbGUuaW5jbCAJJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMKKwktJHtDUH0gLWYgJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy9NYWVmaWxlCSR7QklOVEFSR0VURElSfS9zYW1wbGVzCiAKLQktJHtDUH0gLVJmICR7WE1MNENST09UfS9zYW1wbGVzL2RhdGEvKiAke0JJTlRBUkdFVERJUn0vc2FtcGxlcy9kYXRhCi0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9TQVhDb3VudC8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL1NBWENvdW50Ci0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9TQVhQcmludC8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL1NBWFByaW50Ci0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9ET01Db3VudC8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL0RPTUNvdW50Ci0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9ET01QcmludC8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL0RPTVByaW50Ci0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9SZWRpcmVjdC8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL1JlZGlyZWN0Ci0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vc2FtcGxlcy9NZW1QYXJzZS8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL01lbVBhcnNlCisJLSR7Q1B9IC1SZiAke1hFUkNFU0NST09UfS9zYW1wbGVzL2RhdGEvKiAke0JJTlRBUkdFVERJUn0vc2FtcGxlcy9kYXRhCisJLSR7Q1B9IC1SZiAke1hFUkNFU0NST09UfS9zYW1wbGVzL1NBWENvdW50LyogJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMvU0FYQ291bnQKKwktJHtDUH0gLVJmICR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvU0FYUHJpbnQvKiAke0JJTlRBUkdFVERJUn0vc2FtcGxlcy9TQVhQcmludAorCS0ke0NQfSAtUmYgJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy9ET01Db3VudC8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL0RPTUNvdW50CisJLSR7Q1B9IC1SZiAke1hFUkNFU0NST09UfS9zYW1wbGVzL0RPTVByaW50LyogJHtCSU5UQVJHRVRESVJ9L3NhbXBsZXMvRE9NUHJpbnQKKwktJHtDUH0gLVJmICR7WEVSQ0VTQ1JPT1R9L3NhbXBsZXMvUmVkaXJlY3QvKiAke0JJTlRBUkdFVERJUn0vc2FtcGxlcy9SZWRpcmVjdAorCS0ke0NQfSAtUmYgJHtYRVJDRVNDUk9PVH0vc2FtcGxlcy9NZW1QYXJzZS8qICR7QklOVEFSR0VURElSfS9zYW1wbGVzL01lbVBhcnNlCiAKIAlAZWNobyBQb3B1bGF0ZSB0aGUgZG9jcyBkaXJlY3RvcnkKIAlAZWNobyBDb3B5aW5nIGRvY3VtZW50YXRpb24gLi4KLQktJHtDUH0gLVJmICR7WE1MNENST09UfS9kb2MvKiAke0JJTlRBUkdFVERJUn0vZG9jCi0JLSR7Q1B9IC1SZiAke1hNTDRDUk9PVH0vZG9jL2FwaURvY3MvKiAke0JJTlRBUkdFVERJUn0vZG9jL2FwaURvY3MKLQktJHtDUH0gJHtYTUw0Q1JPT1R9L1JlYWRtZS5odG1sICR7QklOVEFSR0VURElSfQotCS0ke0NQfSAke1hNTDRDUk9PVH0vZG9jL2xpY2Vuc2UuaHRtbCAke0JJTlRBUkdFVERJUn0KKwktJHtDUH0gLVJmICR7WEVSQ0VTQ1JPT1R9L2RvYy8qICR7QklOVEFSR0VURElSfS9kb2MKKwktJHtDUH0gLVJmICR7WEVSQ0VTQ1JPT1R9L2RvYy9hcGlEb2NzLyogJHtCSU5UQVJHRVRESVJ9L2RvYy9hcGlEb2NzCisJLSR7Q1B9ICR7WEVSQ0VTQ1JPT1R9L1JlYWRtZS5odG1sICR7QklOVEFSR0VURElSfQorCS0ke0NQfSAke1hFUkNFU0NST09UfS9kb2MvbGljZW5zZS5odG1sICR7QklOVEFSR0VURElSfQogCiAJQGVjaG8gQ2hhbmdlIHRoZSBkaXJlY3RvcnkgcGVybWlzc2lvbnMKIAkte0NITU9ERX0gNjQ0IGBmaW5kICR7QklOVEFSR0VURElSfSAtdHlwZSBmYApkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmluY2wgYi9zcmMvTWFrZWZpbGUuaW5jbAppbmRleCBiNDQ2M2U1Li44Y2IxNmY0IDEwMDY0NAotLS0gYS9zcmMvTWFrZWZpbGUuaW5jbAorKysgYi9zcmMvTWFrZWZpbGUuaW5jbApAQCAtNTUsOCArNTUsMjEgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowMjo1NSAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS42ICAxOTk5LzEyLzAxIDE3OjE2OjE1ICByYWh1bGoKKyMgQWRkZWQgc3VwcG9ydCBmb3IgSVJJWCA2LjUuNSB1c2luZyBTR0kgTUlQU3BybyBDKysgNy4zIGFuZCA3LjIxIGdlbmVyYXRpbmcgMzIgYml0IG9iamVjdHMuIENoYW5nZXMgc3VibWl0dGVkIGJ5IE1hcmMgU3R1ZXNzZWwKKyMKKyMgUmV2aXNpb24gMS41ICAxOTk5LzExLzIzIDAxOjU5OjI4ICByYWh1bGoKKyMgQ29kZSBub3cgd29ya3MgdW5kZXIgSFBVWCAxMS4gVGVzdGVkIGlubWVtb3J5IG1lc3NhZ2UgbG9hZGVyLgorUmV2YW1wZWQgbWFrZWZpbGVzLiBCdWlsZHMgd2l0aCBib3RoIERDRSB0aHJlYWRzIGFzIHdlbGwgYXMgcHRocmVhZCBsaWJyYXJpZXMuCisjCisjIFJldmlzaW9uIDEuNCAgMTk5OS8xMS8xNyAyMjozNjozMSAgcmFodWxqCisjIENvZGUgd29ya3Mgd2l0aCBJQ1UgdHJhbnNjb2Rpbmcgc2VydmljZQorIworIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMTIgMjA6Mzg6NDkgIHJhaHVsagorIyBSZXBsYWNlZCBYTUw0Q1JPT1Qgd2l0aCBYRVJDRVNDUk9PVC4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowMjo1NSAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMDggMjA6NDQ6MDkgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTY5LDcgKzgyLDcgQEAKICMgQmVmb3JlIHlvdSB0cnkgdG8gcnVuIHRoZSBNYWtlZmlsZSwgbWFrZSBzdXJlIHlvdSBoYXZlIHNldCAgICAgICMKICMgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcHJvcGVybHkuICAgICAgICAgICAgICAgICAgICMKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMgZXhwb3J0IFhNTDRDUk9PVD08dGhlIGRpcmVjdG9yeSB3aGVyZSB5b3UgaW5zdGFsbGVkIFhNTDRDPiAgICAgICMKKyMgZXhwb3J0IFhFUkNFU0NST09UPTx0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSBpbnN0YWxsZWQgWFJFQ0VTLUM+ICMKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICMgSW4gY2FzZSB5b3UgaW50ZW5kIHRvIHVzZSBlaXRoZXIgdGhlIElDVSB0cmFuc2NvZGVyIG9yIHRoZSAgICAgICMKICMgSUNVIG1lc3NhZ2UgbG9hZGVyLCB5b3UgbXVzdCBzZXQgSUNVUk9PVCBjb3JyZWN0bHkuICAgICAgICAgICAgICMKQEAgLTk1LDQ1ICsxMDgsNDQgQEAKIAogQUxMOiAgICBhbGwKIAotQUxMX09CSkVDVFNfRElSID0gJHtYTUw0Q1JPT1R9L29iagorQUxMX09CSkVDVFNfRElSICAgPSAke1hFUkNFU0NST09UfS9vYmoKIAogWE1MX0JVSUxEX09QVElPTlMgPSAke0NYWEZMQUdTfQogCitYTUxfTElCX0RJUiA9ICQoWEVSQ0VTQ1JPT1QpL2xpYgorWE1MX0lOQ19ESVIgPSAkKFhFUkNFU0NST09UKS9pbmNsdWRlCitYTUxfSU5DTCAgICA9IC1JJChYTUxfSU5DX0RJUikKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUExBVEZPUk0gREVQRU5ERU5DSUVTICMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAjPT09PT09PT09PT09PT09IFNPTEFSSVMgU1BFQ0lGSUMgT1BUSU9OUyA9PT09PT09PT09PT09PT09PT09PT09PT09CiBpZmVxICgke1BMQVRGT1JNfSwgU09MQVJJUykKLSAgaWZlcSAoJHtDT01QSUxFUn0sIGcrKykKLQlQTEFURk9STV9DUFBfQ09NUElMRVIgPSBnKysKLQlQTEFURk9STV9DX0NPTVBJTEVSID0gZ2NjCi0JUExBVEZPUk1fTElCUkFSSUVTPS1ML3Vzci9saWIgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvY2NzL2xpYgorICBpZmVxICgke0NYWH0sIGcrKykKIAlQTEFURk9STV9DT01QSUxFX09QVElPTlMgPSAtZlBJQyAtaW5zdGFuY2VzPXN0YXRpYyAtRCR7UExBVEZPUk19IC1EX1JFRU5UUkFOVAotCU1BS0VfU0hBUkVEID0gJHtQTEFURk9STV9DUFBfQ09NUElMRVJ9IC1EJHtQTEFURk9STX0gLXNoYXJlZAotCU1BS0VfU0hBUkVEX0MgPSAke1BMQVRGT1JNX0NfQ09NUElMRVJ9IC1EJHtQTEFURk9STX0gLXNoYXJlZAotCUVYVFJBX0xJTktfT1BUSU9OUyA9IC1sbSAtbHcgLWxnZW4KKwlNQUtFX1NIQVJFRCA9ICR7Q1hYfSAtRCR7UExBVEZPUk19IC1zaGFyZWQKKwlNQUtFX1NIQVJFRF9DID0gJHtDQ30gLUQke1BMQVRGT1JNfSAtc2hhcmVkCisJQUxMSUJTID0gJHtMSUJTfSAtTC91c3IvbGliIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2Njcy9saWIgLWxtIC1sdyAtbGdlbgogICBlbHNlCi0JUExBVEZPUk1fQ1BQX0NPTVBJTEVSID0gQ0MKLQlQTEFURk9STV9DX0NPTVBJTEVSID0gY2MKLQlQTEFURk9STV9MSUJSQVJJRVM9LUwvdXNyL2xvY2FsL1NVTldzcHJvL2xpYiAtTC91c3IvY2NzL2xpYgogCVBMQVRGT1JNX0NPTVBJTEVfT1BUSU9OUyA9IC1LUElDIC1tdCAteHMgLWluc3RhbmNlcz1zdGF0aWMgLWZlYXR1cmVzPXJ0dGkgLUQke1BMQVRGT1JNfSAtRF9SRUVOVFJBTlQKLQlNQUtFX1NIQVJFRCA9ICR7UExBVEZPUk1fQ1BQX0NPTVBJTEVSfSAtRCR7UExBVEZPUk19IC1HCi0JTUFLRV9TSEFSRURfQyA9ICR7UExBVEZPUk1fQ19DT01QSUxFUn0gLUQke1BMQVRGT1JNfSAtRwotCUVYVFJBX0xJTktfT1BUSU9OUyA9IC1sbSAtbHcgLWxDIC1sYyAtbGdlbgorCU1BS0VfU0hBUkVEID0gJHtDWFh9IC1EJHtQTEFURk9STX0gLUcKKwlNQUtFX1NIQVJFRF9DID0gJHtDQ30gLUQke1BMQVRGT1JNfSAtRworCUVYVFJBX0xJTktfT1BUSU9OUyA9ICR7TElCU30gLUwvdXNyL2xvY2FsL1NVTldzcHJvL2xpYiAtTC91c3IvY2NzL2xpYiAtbG0gLWx3IC1sQyAtbGMgLWxnZW4KICAgZW5kaWYKICAgU0hMSUJTVUZGSVg9LnNvCiBlbmRpZgogCiAjPT09PT09PT09PT09PT09PT0gQUlYIFNQRUNJRklDIE9QVElPTlMgPT09PT09PT09PT09PT09PT09PT09PT09PT09CiBpZmVxICgke1BMQVRGT1JNfSwgQUlYKQotUExBVEZPUk1fQ1BQX0NPTVBJTEVSID0geGxDX3IKLVBMQVRGT1JNX0NfQ09NUElMRVIgPSB4bGNfcgotaWZkZWYgSUNVUk9PVAotICBQTEFURk9STV9MSUJSQVJJRVM9LUwvdXNyL2xwcC94bEMvbGliIC1MJHtJQ1VST09UfS9saWIKLSAgRVhUUkFfTElOS19PUFRJT05TID0gLWxpY3UtdWMgLWxic2QKLWVsc2UKLSAgUExBVEZPUk1fTElCUkFSSUVTPS1ML3Vzci9scHAveGxDL2xpYgotICBFWFRSQV9MSU5LX09QVElPTlMgPSAtbGJzZAotZW5kaWYKKworI1BMQVRGT1JNX0NQUF9DT01QSUxFUiA9IHhsQ19yCisjUExBVEZPUk1fQ19DT01QSUxFUiA9IHhsY19yCisjaWZkZWYgSUNVUk9PVAorIyAgQUxMTElCUyA9ICR7TElCU30gLUwvdXNyL2xwcC94bEMvbGliIC1MJHtJQ1VST09UfS9saWIgLWxpY3UtdWMgLWxic2QKKyNlbHNlCisjICBBTExMSUJTID0gLUwvdXNyL2xwcC94bEMvbGliIC1sYnNkCisjZW5kaWYKKworQUxMTElCUyA9ICR7TElCU30gLUwvdXNyL2xwcC94bEMvbGliIC1sYnNkCiBQTEFURk9STV9DT01QSUxFX09QVElPTlMgPSAtcW5vdGVtcGluYyAtRF9USFJFQURfU0FGRQogTUFLRV9TSEFSRUQgPSBtYWtlQysrU2hhcmVkTGliX3IgLXAgNTAwMAogTUFLRV9TSEFSRURfQyA9IG1ha2VDKytTaGFyZWRMaWJfciAtcCA1MDAwCkBAIC0xNDIsMjAgKzE1NCwzMCBAQAogCiAjPT09PT09PT09PT09PT09IExJTlVYIFNQRUNJRklDIE9QVElPTlMgPT09PT09PT09PT09PT09PT09PT09PT09PQogaWZlcSAoJHtQTEFURk9STX0sIExJTlVYKQotUExBVEZPUk1fQ1BQX0NPTVBJTEVSID0gZysrCi1QTEFURk9STV9DX0NPTVBJTEVSID0gZ2NjCi1QTEFURk9STV9MSUJSQVJJRVM9LUwvdXNyL2xpYiAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9jY3MvbGliCiBQTEFURk9STV9DT01QSUxFX09QVElPTlMgPSAtZnBpYyAtaW5zdGFuY2VzPXN0YXRpYyAtRCR7UExBVEZPUk19IC1EX1JFRU5UUkFOVAotTUFLRV9TSEFSRUQgPSAke1BMQVRGT1JNX0NQUF9DT01QSUxFUn0gLUQke1BMQVRGT1JNfSAtc2hhcmVkIC1mcGljCi1NQUtFX1NIQVJFRF9DID0gJHtQTEFURk9STV9DX0NPTVBJTEVSfSAtRCR7UExBVEZPUk19IC1zaGFyZWQgLWZwaWMKLUVYVFJBX0xJTktfT1BUSU9OUyA9IC1sYworTUFLRV9TSEFSRUQgPSAke0NYWH0gLUQke1BMQVRGT1JNfSAtc2hhcmVkIC1mcGljCitNQUtFX1NIQVJFRF9DID0gJHtDQ30gLUQke1BMQVRGT1JNfSAtc2hhcmVkIC1mcGljCitBTExMSUJTID0gJHtMSUJTfSAtTC91c3IvbGliIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2Njcy9saWIgLWxjCiBTSExJQlNVRkZJWD0uc28KIGVuZGlmCiAKKyM9PT09PT09PT09PT09PT0gSVJJWCBTUEVDSUZJQyBPUFRJT05TID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2lmZXEgKCR7UExBVEZPUk19LCBJUklYKQorUExBVEZPUk1fQ09NUElMRV9PUFRJT05TID0gLW1pcHM0IC1MQU5HOnBjaCAtTEFORzpzdGQgLU8yIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EJHtQTEFURk9STX0gLURfUkVFTlRSQU5UIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JL3Vzci9sb2NhbC9pbmNsdWRlCitPQkpfT1VUPSR7WE1MNENST09UfS9vYmovCitNQUtFX1NIQVJFRCA9ICR7Q1hYfSAtRCR7UExBVEZPUk19IC1zaGFyZWQKK01BS0VfU0hBUkVEX0MgPSAke0NDfSAtRCR7UExBVEZPUk19IC1zaGFyZWQKK0FMTExJQlMgPSAtTC91c3IvbGliMzIgLWxDCitTSExJQlNVRkZJWD0uc28KK2VuZGlmCisKKwogIz09PT09PT09PT09PT09PSBPUzIgU1BFQ0lGSUMgT1BUSU9OUyA9PT09PT09PT09PT09PT09PT09PT09PT09CiBpZmVxICgke1BMQVRGT1JNfSwgT1MvMikKLVBMQVRGT1JNX0NQUF9DT01QSUxFUiA9IGljYwotUExBVEZPUk1fQ19DT01QSUxFUiA9IGljYworI1BMQVRGT1JNX0NQUF9DT01QSUxFUiA9IGljYworI1BMQVRGT1JNX0NfQ09NUElMRVIgPSBpY2MKIFBMQVRGT1JNX0xJQlJBUklFUz0gQ1BQT00zMC5MSUIgb3MyMzg2LmxpYiBtbXBtMi5saWIKIFBMQVRGT1JNX0NPTVBJTEVfT1BUSU9OUyA9IC9DKyAvR2QtIC9HZS0gL0dtKyAvR3MtIC9SZSAvSisgIC9NcyAvU20gL1NuIC9TcysKIE1BS0VfU0hBUkVEID0gaWxpbmsgL25vZnJlZQpAQCAtMTY4LDQwICsxOTAsNiBAQAogZW5kaWYKIAogIz09PT09PT09PT09PT09PT09IEhQIFNQRUNJRklDIE9QVElPTlMgPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jaWZlcSAoJHtQTEFURk9STX0sIEhQVVgpCi0jICBpZmVxICgke0NPTVBJTEVSfSwgYUNDKQotIyAgICBQTEFURk9STV9DUFBfQ09NUElMRVIgPSBhQ0MKLSMgICAgUExBVEZPUk1fQ19DT01QSUxFUiA9IGFDQwotIyAgICBQTEFURk9STV9MSUJSQVJJRVM9LUwvb3B0L2FDQy9saWIgLUwvdXNyL2Njcy9saWIKLSMgICAgUExBVEZPUk1fQ09NUElMRV9PUFRJT05TID0gJChDT01QSUxFU1dJVENIKSAtRF9IUF9VWCAtREhQYUNDIC1EX1BUSFJFQURTX0RSQUZUNCBcCi0jICAgICAgICArREFwb3J0YWJsZSAtdyAreiAraW5zdF9jb21waWxldGltZQotIyAgICBNQUtFX1NIQVJFRCA9ICR7UExBVEZPUk1fQ1BQX0NPTVBJTEVSfSAtRCR7UExBVEZPUk19IC1iCi0jICAgIE1BS0VfU0hBUkVEX0MgPSAke1BMQVRGT1JNX0NfQ09NUElMRVJ9IC1EJHtQTEFURk9STX0gLWIKLSMgICAgRVhUUkFfTElOS19PUFRJT05TID0gLWxjbWEgLWxDc3VwIC1sc3RyZWFtCi0jICAgIFNITElCU1VGRklYPS5zbAotIyAgZWxzZQotIyAgICBpZm5lcSAoJHtERUJVR30sIDEpCi0jICAgICAgWE1MX0JVSUxEX09QVElPTlMgPSAtdyArTzEKLSMgICAgZW5kaWYKLSMgICAgUExBVEZPUk1fQ1BQX0NPTVBJTEVSID0gQ0MKLSMgICAgUExBVEZPUk1fQ19DT01QSUxFUiA9IGNjCi0jICAgIFBMQVRGT1JNX0xJQlJBUklFUz0gLUwke0lDVVJPT1R9L2xpYiAtTC9vcHQvQ0MvbGliIC1ML3Vzci9saWIKLSMgICAgVEVNUExBVEVTUkVQT1NJVE9SWSA9ICR7QUxMX09CSkVDVFNfRElSfS9wdHJlcG9zaXRvcnkKLSMgICAgQ09NTU9OX0NPTVBJTEVfT1BUSU9OUyA9ICQoQ09NUElMRVNXSVRDSCkgLURfSFBfVVggLURYTUw0Q19UTVBMU0lOQyBcCi0jICAgICAgICAtRF9QVEhSRUFEU19EUkFGVDQgK0RBcG9ydGFibGUgLXcgK2VoICt6IC16ICthMQotIyAgICBpZmVxICgkKE1PRFVMRSksIGRvbSkKLSMgICAgICBQTEFURk9STV9DT01QSUxFX09QVElPTlMgID0gLURET01fUFJPSiAkKENPTU1PTl9DT01QSUxFX09QVElPTlMpCi0jICAgIGVsc2UKLSMgICAgICBQTEFURk9STV9DT01QSUxFX09QVElPTlMgID0gJChDT01NT05fQ09NUElMRV9PUFRJT05TKSAtcHRyJHtURU1QTEFURVNSRVBPU0lUT1JZfQotIyAgICBlbmRpZgotIyAgICBBTExJTkNMVURFUz0gLUkkKFhNTDRDUk9PVCkvc3JjIC1JJChJQ1VST09UKS9pbmNsdWRlCi0jICAgIE1BS0VfU0hBUkVEID0gJChQTEFURk9STV9DUFBfQ09NUElMRVIpICQoUExBVEZPUk1fQ09NUElMRV9PUFRJT05TKSAkKEFMTElOQ0xVREVTKQotIyAgICBNQUtFX1NIQVJFRF9DID0gJChQTEFURk9STV9DX0NPTVBJTEVSKSAkKFBMQVRGT1JNX0NPTVBJTEVfT1BUSU9OUykgJChBTExJTkNMVURFUykKLSMgICAgQUxMTElCUyA9IC1saWN1LXVjIC1sY21hIC1sbQotIyAgICBFWFRSQV9MSU5LX09QVElPTlMgPSAtYiAtV2wsK3MgLVdsLC1hLHNoYXJlZAotIyAgICBTSExJQlNVRkZJWD0uc2wKLSMgIGVuZGlmCi0jZW5kaWYKIAogaWZlcSAoJHtQTEFURk9STX0sIEhQVVgpCiAKQEAgLTIxMCw0MSArMTk4LDI1IEBACiAgICAgT1NWRVJERUZJTkU9SFBVWDEwCiAgIGVuZGlmCiAKLSAgaWZlcSAoJHtDT01QSUxFUn0sIGFDQykKLSAgICBQTEFURk9STV9DUFBfQ09NUElMRVIgPSBhQ0MKLSAgICBQTEFURk9STV9DX0NPTVBJTEVSID0gYUNDCi0gICAgUExBVEZPUk1fQ09NUElMRV9PUFRJT05TID0gJChDT01QSUxFU1dJVENIKSAtRF9IUF9VWCAtREhQYUNDIFwKLSAgICAgICAgLURfUFRIUkVBRFNfRFJBRlQ0IC1EJHtPU1ZFUkRFRklORX0gK0RBcG9ydGFibGUgLXcgK3ogXAotICAgICAgICAraW5zdF9jb21waWxldGltZQotICAgIE1BS0VfU0hBUkVEID0gJHtQTEFURk9STV9DUFBfQ09NUElMRVJ9IC1EJHtQTEFURk9STX0gLWIKLSAgICBNQUtFX1NIQVJFRF9DID0gJHtQTEFURk9STV9DX0NPTVBJTEVSfSAtRCR7UExBVEZPUk19IC1iCi0gICAgQUxMTElCUyA9IC1sY21hIC1sQ3N1cCAtbHN0cmVhbQorICBpZmVxICgke0NYWH0sIGFDQykKKyAgICBQTEFURk9STV9DT01QSUxFX09QVElPTlMgPSAtRF9IUF9VWCAtREhQYUNDIFwKKyAgICAgICAgLUQke09TVkVSREVGSU5FfSArREFwb3J0YWJsZSAreiAraW5zdF9jb21waWxldGltZQorICAgIE1BS0VfU0hBUkVEID0gJHtDWFh9IC1EJHtQTEFURk9STX0gLWIKKyAgICBNQUtFX1NIQVJFRF9DID0gJHtDQ30gLUQke1BMQVRGT1JNfSAtYgorICAgIEFMTExJQlMgPSAke0xJQlN9IC1sQ3N1cCAtbHN0cmVhbQogICAgIFNITElCU1VGRklYPS5zbAogICBlbHNlCi0gICAgaWZuZXEgKCR7REVCVUd9LCAxKQotICAgICAgWE1MX0JVSUxEX09QVElPTlMgPSAtdyArTzEKLSAgICBlbmRpZgotICAgIFBMQVRGT1JNX0NQUF9DT01QSUxFUiA9IENDCi0gICAgUExBVEZPUk1fQ19DT01QSUxFUiA9IGNjCi1pZmRlZiBJQ1VST09UCi0gICAgUExBVEZPUk1fTElCUkFSSUVTPSAtTCR7SUNVUk9PVH0vbGliCi1lbmRpZgogICAgIFRFTVBMQVRFU1JFUE9TSVRPUlkgPSAke0FMTF9PQkpFQ1RTX0RJUn0vcHRyZXBvc2l0b3J5Ci0gICAgQ09NTU9OX0NPTVBJTEVfT1BUSU9OUyA9ICQoQ09NUElMRVNXSVRDSCkgLURfSFBfVVggLURYTUw0QzJfVE1QTFNJTkMgXAotICAgICAgICAtRF9QVEhSRUFEU19EUkFGVDQgLUQke09TVkVSREVGSU5FfSArREFwb3J0YWJsZSAtdyArZWggK3ogLXogK2ExCisgICAgQ09NTU9OX0NPTVBJTEVfT1BUSU9OUyA9IC1EX0hQX1VYIC1EWE1MNENfVE1QTFNJTkMgXAorICAgICAgICAtRCR7T1NWRVJERUZJTkV9ICtEQXBvcnRhYmxlICtlaCAreiAteiArYTEKICAgICBpZmVxICgkKE1PRFVMRSksIGRvbSkKICAgICAgIFBMQVRGT1JNX0NPTVBJTEVfT1BUSU9OUyAgPSAtRERPTV9QUk9KICQoQ09NTU9OX0NPTVBJTEVfT1BUSU9OUykKICAgICBlbHNlCiAgICAgICBQTEFURk9STV9DT01QSUxFX09QVElPTlMgID0gJChDT01NT05fQ09NUElMRV9PUFRJT05TKSAtcHRyJHtURU1QTEFURVNSRVBPU0lUT1JZfQogICAgIGVuZGlmCi1pZmRlZiBJQ1VST09UCi0gICAgQUxMSU5DTFVERVM9LUkkKFhNTDRDUk9PVCkvc3JjL2NvbS9pYm0veG1sIC1JJChYTUw0Q1JPT1QpL3NyYyAtSSQoSUNVUk9PVCkvaW5jbHVkZQotZWxzZQotICAgIEFMTElOQ0xVREVTPS1JJChYTUw0Q1JPT1QpL3NyYy9jb20vaWJtL3htbCAtSSQoWE1MNENST09UKS9zcmMKLWVuZGlmCi0gICAgTUFLRV9TSEFSRUQgPSAkKFBMQVRGT1JNX0NQUF9DT01QSUxFUikgJChQTEFURk9STV9DT01QSUxFX09QVElPTlMpICQoQUxMSU5DTFVERVMpCi0gICAgTUFLRV9TSEFSRURfQyA9ICQoUExBVEZPUk1fQ19DT01QSUxFUikgJChQTEFURk9STV9DT01QSUxFX09QVElPTlMpICQoQUxMSU5DTFVERVMpCi0gICAgQUxMTElCUyA9IC1saWN1LXVjIC1sY21hIC1sbQorICAgIE1BS0VfU0hBUkVEID0gJChDWFgpICQoUExBVEZPUk1fQ09NUElMRV9PUFRJT05TKSAkKFhNTF9JTkNMKQorICAgIE1BS0VfU0hBUkVEX0MgPSAkKENDKSAkKFBMQVRGT1JNX0NPTVBJTEVfT1BUSU9OUykgJChYTUxfSU5DTCkKKyAgICBBTExMSUJTID0gJHtMSUJTfQogICAgIEVYVFJBX0xJTktfT1BUSU9OUyA9IC1iIC1XbCwrcyAtV2wsLWEsc2hhcmVkCiAgICAgU0hMSUJTVUZGSVg9LnNsCiAgIGVuZGlmCkBAIC0yODYsMzIgKzI1OCwxMiBAQAogQ0FUID0gY2F0CiBBUiA9IGFyIC1jcXYKIENEID0gY2QKLUNDMSA9ICR7UExBVEZPUk1fQ1BQX0NPTVBJTEVSfSAke1BMQVRGT1JNX0NPTVBJTEVfT1BUSU9OU30KLUpVU1RfQ0MgPSAke1BMQVRGT1JNX0NfQ09NUElMRVJ9IC1EJHtQTEFURk9STX0KK0NDMSAgICAgPSAke0NYWH0gJHtQTEFURk9STV9DT01QSUxFX09QVElPTlN9CitKVVNUX0NDID0gJHtDQ30gLUQke1BMQVRGT1JNfQogRUNITyA9IGVjaG8KIENSRUFURV9ERVBFTkRTX0ZJTEUgPSBlY2hvICIiID4gZGVwZW5kcwogTUFLRV9ERVBFTkQgPSAke0NDMX0gLUUgLXhNCiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIERJUkVDVE9SSUVTICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLVhNTF9MSUJfRElSID0gJChYTUw0Q1JPT1QpL2xpYgotWE1MX0lOQ19ESVIgPSAkKFhNTDRDUk9PVCkvaW5jbHVkZQotaWZlcSAoJHtNRVNTQUdFTE9BREVSfSwgSUNVKQotICAgIElOVExfSU5DX0RJUjEgPSAkKElDVVJPT1QpL2luY2x1ZGUKLWVuZGlmCi1pZmVxICgke1RSQU5TQ09ERVJ9LCBJQ1UpCi0gICAgSU5UTF9JTkNfRElSMSA9ICQoSUNVUk9PVCkvaW5jbHVkZQotZW5kaWYKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMgQ09NUElMRS9MSU5LIEZMQUdTICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotaWZlcSAoJHtNRVNTQUdFTE9BREVSfSwgSUNVKQotICAgIFhNTF9JTkNMID0gLUkuIC1JJChYTUxfSU5DX0RJUikgLUkkKElOVExfSU5DX0RJUjEpCi1lbHNlCi0gICAgaWZlcSAoJHtUUkFOU0NPREVSfSwgSUNVKQotICAgICAgICBYTUxfSU5DTCA9IC1JLiAtSSQoWE1MX0lOQ19ESVIpIC1JJChJTlRMX0lOQ19ESVIxKQotICAgIGVsc2UKLSAgICAgICAgWE1MX0lOQ0wgPSAtSS4gLUkkKFhNTF9JTkNfRElSKQotICAgIGVuZGlmCi1lbmRpZgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMgSEVMUEVSIE1BQ1JPUyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBERVBGSUxFID0gZGVwZW5kcwpAQCAtMzIzLDYgKzI3NSw5IEBACiAKIC5jcHAubzoKIAkkKENDMSkgLWMgJChYTUxfQlVJTERfT1BUSU9OUykgJChYTUxfREVGKSAkKFhNTF9JTkNMKSAkKEVYVFJBX0NPTVBJTEVfT1BUSU9OUykgLW8gJChAKSAkKDwpCitpZmVxICgke1BMQVRGT1JNfSwgSVJJWCkKKwkkKENDMSkgLWMgJChYTUxfQlVJTERfT1BUSU9OUykgJChYTUxfREVGKSAkKFhNTF9JTkNMKSAkKEVYVFJBX0NPTVBJTEVfT1BUSU9OUykgLW8gJChPQkpfT1VUKSQoQCkgJCg8KQorZW5kaWYKIAogLmMubzoKIAkkKEpVU1RfQ0MpIC1jICQoWE1MX0JVSUxEX09QVElPTlMpICQoWE1MX0RFRikgJChYTUxfSU5DTCkgJChFWFRSQV9DT01QSUxFX09QVElPTlMpIC1vICQoQCkgJCg8KQpkaWZmIC0tZ2l0IGEvc3JjL2NvbmZpZ3VyZSBiL3NyYy9jb25maWd1cmUKaW5kZXggMWMwYjQwYi4uYTcyODc3YSAxMDA3NTUKLS0tIGEvc3JjL2NvbmZpZ3VyZQorKysgYi9zcmMvY29uZmlndXJlCkBAIC0xMDQ5LDEwNSArMTA0OSw5IEBACiBmaQogCiAKLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBwdGhyZWFkX2NyZWF0ZSBpbiAtbHB0aHJlYWQiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjEwNTQ6IGNoZWNraW5nIGZvciBwdGhyZWFkX2NyZWF0ZSBpbiAtbHB0aHJlYWQiID4mNQotYWNfbGliX3Zhcj1gZWNobyBwdGhyZWFkJ18ncHRocmVhZF9jcmVhdGUgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKLWVsc2UKLSAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKLUxJQlM9Ii1scHRocmVhZCAgJExJQlMiCi1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMDYyICJjb25maWd1cmUiCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgcHRocmVhZF9jcmVhdGUoKTsKLQotaW50IG1haW4oKSB7Ci1wdGhyZWFkX2NyZWF0ZSgpCi07IHJldHVybiAwOyB9Ci1FT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTA3MzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0gIHJtIC1yZiBjb25mdGVzdCoKLSAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0KgotTElCUz0iJGFjX3NhdmVfTElCUyIKLQotZmkKLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCi0gIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKLSAgICBhY190cl9saWI9SEFWRV9MSUJgZWNobyBwdGhyZWFkIHwgc2VkIC1lICdzL1teYS16QS1aMC05X10vXy9nJyBcCi0gICAgLWUgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJ2AKLSAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKLSNkZWZpbmUgJGFjX3RyX2xpYiAxCi1FT0YKLQotICBMSUJTPSItbHB0aHJlYWQgJExJQlMiCi0KLWVsc2UKLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2Ci1maQotCi1pZiB0ZXN0ICRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2NyZWF0ZSA9IG5vOyB0aGVuCi1lY2hvICRhY19uICJjaGVja2luZyBmb3IgcHRocmVhZF9jcmVhdGUgaW4gLWxwdGhyZWFkcyIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MTEwMjogY2hlY2tpbmcgZm9yIHB0aHJlYWRfY3JlYXRlIGluIC1scHRocmVhZHMiID4mNQotYWNfbGliX3Zhcj1gZWNobyBwdGhyZWFkcydfJ3B0aHJlYWRfY3JlYXRlIHwgc2VkICd5JS4vKy0lX19wXyUnYAotaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Ci1lbHNlCi0gIGFjX3NhdmVfTElCUz0iJExJQlMiCi1MSUJTPSItbHB0aHJlYWRzICAkTElCUyIKLWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDExMTAgImNvbmZpZ3VyZSIKLSNpbmNsdWRlICJjb25mZGVmcy5oIgotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBwdGhyZWFkX2NyZWF0ZSgpOwotCi1pbnQgbWFpbigpIHsKLXB0aHJlYWRfY3JlYXRlKCkKLTsgcmV0dXJuIDA7IH0KLUVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMTIxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgotZWxzZQotICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QqCi1MSUJTPSIkYWNfc2F2ZV9MSUJTIgotCi1maQotaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgotICAgIGFjX3RyX2xpYj1IQVZFX0xJQmBlY2hvIHB0aHJlYWRzIHwgc2VkIC1lICdzL1teYS16QS1aMC05X10vXy9nJyBcCi0gICAgLWUgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJ2AKLSAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKLSNkZWZpbmUgJGFjX3RyX2xpYiAxCi1FT0YKLQotICBMSUJTPSItbHB0aHJlYWRzICRMSUJTIgotCi1lbHNlCi0gIGVjaG8gIiRhY190IiJubyIgMT4mNgotZmkKLQotZmkKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjExNTE6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToxMDU1OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CiAjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgogaWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KICAgQ1BQPQpAQCAtMTE2MiwxMyArMTA2NiwxMyBAQAogICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAogICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLgogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMTY2ICJjb25maWd1cmUiCisjbGluZSAxMDcwICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxhc3NlcnQuaD4KIFN5bnRheCBFcnJvcgogRU9GCiBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoteyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMTcyOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMDc2OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQogYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAogaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KICAgOgpAQCAtMTE3OSwxMyArMTA4MywxMyBAQAogICBybSAtcmYgY29uZnRlc3QqCiAgIENQUD0iJHtDQy1jY30gLUUgLXRyYWRpdGlvbmFsLWNwcCIKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTE4MyAiY29uZmlndXJlIgorI2xpbmUgMTA4NyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiBTeW50YXggRXJyb3IKIEVPRgogYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKLXsgKGV2YWwgZWNobyBjb25maWd1cmU6MTE4OTogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK3sgKGV2YWwgZWNobyBjb25maWd1cmU6MTA5MzogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KIGFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKIGlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCiAgIDoKQEAgLTExOTYsMTMgKzExMDAsMTMgQEAKICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBDUFA9IiR7Q0MtY2N9IC1ub2xvZ28gLUUiCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDEyMDAgImNvbmZpZ3VyZSIKKyNsaW5lIDExMDQgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgogU3ludGF4IEVycm9yCiBFT0YKIGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCi17IChldmFsIGVjaG8gY29uZmlndXJlOjEyMDY6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9Cit7IChldmFsIGVjaG8gY29uZmlndXJlOjExMTA6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CiBhY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCiBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgogICA6CkBAIC0xMjI2LDYwICsxMTMwLDEzIEBACiBmaQogZWNobyAiJGFjX3QiIiRDUFAiIDE+JjYKIAotZm9yIGFjX2hkciBpbiBpbnR0eXBlcy5oCi1kbwotYWNfc2FmZT1gZWNobyAiJGFjX2hkciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1lY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2hkciIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MTIzNDogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQotaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Ci1lbHNlCi0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDEyMzkgImNvbmZpZ3VyZSIKLSNpbmNsdWRlICJjb25mZGVmcy5oIgotI2luY2x1ZGUgPCRhY19oZHI+Ci1FT0YKLWFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCi17IChldmFsIGVjaG8gY29uZmlndXJlOjEyNDQ6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9Ci1hY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCi1pZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgotICBybSAtcmYgY29uZnRlc3QqCi0gIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhY19lcnIiID4mNQotICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9bm8iCi1maQotcm0gLWYgY29uZnRlc3QqCi1maQotaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfaGVhZGVyXyckYWNfc2FmZWBcIiA9IHllcyI7IHRoZW4KLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgotICAgIGFjX3RyX2hkcj1IQVZFX2BlY2hvICRhY19oZHIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLSAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKLSNkZWZpbmUgJGFjX3RyX2hkciAxCi1FT0YKLSAKLWVsc2UKLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2Ci1maQotZG9uZQotCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IG5vOyB0aGVuCi1IQVZFX0lOVFRZUEVTX0g9MAotZWxzZQotSEFWRV9JTlRUWVBFU19IPTEKLWZpCi0KLQogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjEyNzg6IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToxMTM1OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyX3N0ZGMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMjgzICJjb25maWd1cmUiCisjbGluZSAxMTQwICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTEyODcsNyArMTE0NCw3IEBACiAjaW5jbHVkZSA8ZmxvYXQuaD4KIEVPRgogYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKLXsgKGV2YWwgZWNobyBjb25maWd1cmU6MTI5MTogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK3sgKGV2YWwgZWNobyBjb25maWd1cmU6MTE0ODogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KIGFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKIGlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKQEAgLTEzMDQsNyArMTE2MSw3IEBACiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMzA4ICJjb25maWd1cmUiCisjbGluZSAxMTY1ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzdHJpbmcuaD4KIEVPRgpAQCAtMTMyMiw3ICsxMTc5LDcgQEAKIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCiAgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDEzMjYgImNvbmZpZ3VyZSIKKyNsaW5lIDExODMgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogRU9GCkBAIC0xMzQzLDcgKzEyMDAsNyBAQAogICA6CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDEzNDcgImNvbmZpZ3VyZSIKKyNsaW5lIDEyMDQgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKQEAgLTEzNTQsNyArMTIxMSw3IEBACiBleGl0ICgwKTsgfQogCiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTM1ODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMjE1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCiB0aGVuCiAgIDoKIGVsc2UKQEAgLTEzNzgsMTIgKzEyMzUsMTIgQEAKIGZpCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBYTUxCeXRlIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxMzgyOiBjaGVja2luZyBmb3IgWE1MQnl0ZSIgPiY1CitlY2hvICJjb25maWd1cmU6MTIzOTogY2hlY2tpbmcgZm9yIFhNTEJ5dGUiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfWE1MQnl0ZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDEzODcgImNvbmZpZ3VyZSIKKyNsaW5lIDEyNDQgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIFNURENfSEVBREVSUwpAQCAtMTQxOCw3ICsxMjc1LDcgQEAKIGZpCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjE0MjI6IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorZWNobyAiY29uZmlndXJlOjEyNzk6IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQogCiBob3N0X2FsaWFzPSRob3N0CiBjYXNlICIkaG9zdF9hbGlhcyIgaW4KQEAgLTE0NDIsMTcgKzEyOTksNTAgQEAKIGNhc2UgIiR7aG9zdH0iIGluCiAgICAgICAgICotKi1zb2xhcmlzKikgICBwbGF0Zm9ybT1TT0xBUklTIDs7CiAgICAgICAgICotKi1saW51eCopICAgICBwbGF0Zm9ybT1MSU5VWCA7OworICAgICAgICAqLSotaXJpeCopICAgICAgcGxhdGZvcm09SVJJWCA7OwogICAgICAgICAqLSotYWl4KikgICAgICAgcGxhdGZvcm09QUlYIDs7Ci0gICAgICAgICotKi1ocCopICAgICAgICBwbGF0Zm9ybT1IUFVYIDs7CisgICAgICAgICotKi1ocCopICAgICAgICBwbGF0Zm9ybT1IUFVYIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi0qLWhwdXgxMSopICBvc3Zlcj1IUFVYMTE7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICotKi1ocHV4MTAqKSAgb3N2ZXI9SFBVWDEwOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKSAgICAgICAgICAgIG9zdmVyPUhQVVgxMTs7CisgICAgICAgICAgICAgICAgICAgICAgICBlc2FjOzsKICAgICAgICAgKi0qLW12cyopICAgICAgIHBsYXRmb3JtPU9TMzkwIDs7CiAgICAgICAgICopICAgICAgICAgICAgICBwbGF0Zm9ybT1VTktOT1dOIDs7CiBlc2FjCiAKIAotY29tcGlsZXI9JHtDWFh9CitjeHg9JHtDWFh9CiAKIAotcHJlZml4PSR7cHJlZml4fQorY2M9JHtDQ30KKworCisKKworCitjeHhmbGFncz0ke0NYWEZMQUdTfQorCisKK2NwcGZsYWdzPSR7Q1BQRkxBR1N9CisKKworY2ZsYWdzPSR7Q0ZMQUdTfQorCisKK2xkZmxhZ3M9JHtMRENGTEFHU30KKworCitsaWJzPSR7TElCU30KKworCit1c2VsaWJ3d3c9JHtVU0VMSUJXV1d9CisKKworbWVzc2FnZWxvYWRlcj0ke01FU1NBR0VMT0FERVJ9CisKKwordHJhbnNjb2Rlcj0ke1RSQU5TQ09ERVJ9CiAKIAogdHJhcCAnJyAxIDIgMTUKQEAgLTE2MjIsMTQgKzE1MTIsMjMgQEAKIHMlQElOU1RBTExfREFUQUAlJElOU1RBTExfREFUQSVnCiBzJUBBVVRPQ09ORkAlJEFVVE9DT05GJWcKIHMlQENQUEAlJENQUCVnCi1zJUBIQVZFX0lOVFRZUEVTX0hAJSRIQVZFX0lOVFRZUEVTX0glZwogcyVAaG9zdEAlJGhvc3QlZwogcyVAaG9zdF9hbGlhc0AlJGhvc3RfYWxpYXMlZwogcyVAaG9zdF9jcHVAJSRob3N0X2NwdSVnCiBzJUBob3N0X3ZlbmRvckAlJGhvc3RfdmVuZG9yJWcKIHMlQGhvc3Rfb3NAJSRob3N0X29zJWcKIHMlQHBsYXRmb3JtQCUkcGxhdGZvcm0lZwotcyVAY29tcGlsZXJAJSRjb21waWxlciVnCitzJUBjeHhAJSRjeHglZworcyVAY2NAJSRjYyVnCitzJUBvc3ZlckAlJG9zdmVyJWcKK3MlQGN4eGZsYWdzQCUkY3h4ZmxhZ3MlZworcyVAY3BwZmxhZ3NAJSRjcHBmbGFncyVnCitzJUBjZmxhZ3NAJSRjZmxhZ3MlZworcyVAbGRmbGFnc0AlJGxkZmxhZ3MlZworcyVAbGlic0AlJGxpYnMlZworcyVAdXNlbGlid3d3QCUkdXNlbGlid3d3JWcKK3MlQG1lc3NhZ2Vsb2FkZXJAJSRtZXNzYWdlbG9hZGVyJWcKK3MlQHRyYW5zY29kZXJAJSR0cmFuc2NvZGVyJWcKIAogQ0VPRgogRU9GCmRpZmYgLS1naXQgYS9zcmMvY29uZmlndXJlLmluIGIvc3JjL2NvbmZpZ3VyZS5pbgppbmRleCA3ZmJjMDFkLi41ODkxYjQ0IDEwMDY0NAotLS0gYS9zcmMvY29uZmlndXJlLmluCisrKyBiL3NyYy9jb25maWd1cmUuaW4KQEAgLTExLDIwICsxMSwxNSBAQAogZG5sIENoZWNrcyBmb3IgbGlicmFyaWVzCiBBQ19DSEVDS19MSUIobSwgZmxvb3IpCiAKK2RubAorZG5sIERvIG5vdCBrbm93IGhvdyB0byB1c2UgdGhpcyBtYWNybywgc28gY29tbWVudCBpdCBvdXQuCitkbmwKIGRubCBzcGVjaWFsIHB0aHJlYWQgaGFuZGxpbmcgKEFJWCB1c2VzIHB0aHJlYWRzIGluc3RlYWQgb2YgcHRocmVhZCkKLUFDX0NIRUNLX0xJQihwdGhyZWFkLCBwdGhyZWFkX2NyZWF0ZSkKLWlmIHRlc3QgJGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfY3JlYXRlID0gbm87IHRoZW4KLUFDX0NIRUNLX0xJQihwdGhyZWFkcywgcHRocmVhZF9jcmVhdGUpCi1maQotCi1kbmwgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMKLUFDX0NIRUNLX0hFQURFUlMoaW50dHlwZXMuaCkKLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0gbm87IHRoZW4KLUhBVkVfSU5UVFlQRVNfSD0wCi1lbHNlCi1IQVZFX0lOVFRZUEVTX0g9MQotZmkKLUFDX1NVQlNUKEhBVkVfSU5UVFlQRVNfSCkKK2RubCBBQ19DSEVDS19MSUIocHRocmVhZCwgcHRocmVhZF9jcmVhdGUpCitkbmwgaWYgdGVzdCAkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9jcmVhdGUgPSBubzsgdGhlbgorZG5sIEFDX0NIRUNLX0xJQihwdGhyZWFkcywgcHRocmVhZF9jcmVhdGUpCitkbmwgZmkKK2RubAogCiBkbmwgQ2hlY2tzIGZvciB0eXBlZGVmcwogQUNfQ0hFQ0tfVFlQRShYTUxCeXRlLHVuc2lnbmVkIGNoYXIpCkBAIC0zNiw2ICszMSw3IEBACiBjYXNlICIke2hvc3R9IiBpbgogICAgICAgICAqLSotc29sYXJpcyopICAgcGxhdGZvcm09U09MQVJJUyA7OwogICAgICAgICAqLSotbGludXgqKSAgICAgcGxhdGZvcm09TElOVVggOzsKKyAgICAgICAgKi0qLWlyaXgqKSAgICAgIHBsYXRmb3JtPUlSSVggOzsKICAgICAgICAgKi0qLWFpeCopICAgICAgIHBsYXRmb3JtPUFJWCA7OwogICAgICAgICAqLSotaHAqKSAgICAgICAgcGxhdGZvcm09SFBVWCA7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIke2hvc3R9IiBpbgpAQCAtNDgsMTIgKzQ0LDEzIEBACiBlc2FjCiBBQ19TVUJTVChwbGF0Zm9ybSkKIAotY29tcGlsZXI9JHtDWFh9Ci1BQ19TVUJTVChjb21waWxlcikKK2N4eD0ke0NYWH0KK0FDX1NVQlNUKGN4eCkKIAotIyBwcmVmaXg9JHtwcmVmaXh9CitjYz0ke0NDfQorQUNfU1VCU1QoY2MpCisKIEFDX1NVQlNUKHByZWZpeCkKLQogQUNfU1VCU1Qob3N2ZXIpCiAKIGN4eGZsYWdzPSR7Q1hYRkxBR1N9CmRpZmYgLS1naXQgYS9zcmMvZG9tL0F0dHJJbXBsLmNwcCBiL3NyYy9kb20vQXR0ckltcGwuY3BwCmluZGV4IDhjNjU1NzMuLmMwNWE2YWMgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vQXR0ckltcGwuY3BwCisrKyBiL3NyYy9kb20vQXR0ckltcGwuY3BwCkBAIC01Nyw4ICs1NywxMyBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6MzkgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIxOjE2OjI0ICByb2RkZXkKKyAqIENoYW5nZXMgdG8gYWRkIHRoZSB0cmFuc2NvZGUoKSBtZXRob2QgdG8gRE9NU3RyaW5nLCB3aGljaCByZXR1cm5zIGEgdHJhbnNjb2RlZAorICogdmVyc2lvbiAodG8gbG9jYWwgY29kZSBwYWdlKSBvZiB0aGUgRE9NIHN0cmluZyBjb250ZW50cy4gQW5kIEkgY2hhbmdlZCBhbGwgb2YgdGhlCisgKiBleGNlcHRpb24gJ3Rocm93IGJ5IHBvaW50ZXInIHRvICd0aHJvdyBieSB2YWx1ZScgc3R5bGUuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODozOSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDQ6MTAgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xNzEsOCArMTc2LDEyIEBACiB2b2lkIEF0dHJJbXBsOjpzZXRWYWx1ZShjb25zdCBET01TdHJpbmcgJnZhbCkKIHsKICAgICBpZiAocmVhZE9ubHkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKAotICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOworICAgIHsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbgorICAgICAgICAoCisgICAgICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwKKyAgICAgICAgKTsKKyAgICB9CiAgICAgCiAgICAgTm9kZUltcGwgKmtpZDsKICAgICB3aGlsZSAoKGtpZCA9IGdldEZpcnN0Q2hpbGQoKSkgIT0gbnVsbCkgICAgICAgICAvLyBSZW1vdmUgZXhpc3Rpbmcga2lkcwpkaWZmIC0tZ2l0IGEvc3JjL2RvbS9DaGFyYWN0ZXJEYXRhSW1wbC5jcHAgYi9zcmMvZG9tL0NoYXJhY3RlckRhdGFJbXBsLmNwcAppbmRleCBmZDMwOWVlLi4wYWJlZWYyIDEwMDY0NAotLS0gYS9zcmMvZG9tL0NoYXJhY3RlckRhdGFJbXBsLmNwcAorKysgYi9zcmMvZG9tL0NoYXJhY3RlckRhdGFJbXBsLmNwcApAQCAtNTYsOCArNTYsMjAgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA4OjQxICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMi8wMyAwMDoxMToyMiAgYW5keWgKKyAqIEFkZGVkIERPTVN0cmluZy5jbG9uZSgpIHRvIG5vZGUgcGFyYW1ldGVycyBpbiBhbmQgb3V0IG9mIHRoZSBET00sCisgKiB3aGVyZSB0aGV5IGhhZCBiZWVuIG1pc3NlZC4KKyAqCisgKiBET01TdHJpbmc6OnJhd0J1ZmZlciwgcmVtb3ZlZCBpbmNvcnJlY3QgYXNzdW1wdGlvbnMgYWJvdXQgaXQKKyAqIGJlaW5nIG51bGwgdGVybWluYXRlZC4KKyAqCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMzAgMjE6MTY6MjQgIHJvZGRleQorICogQ2hhbmdlcyB0byBhZGQgdGhlIHRyYW5zY29kZSgpIG1ldGhvZCB0byBET01TdHJpbmcsIHdoaWNoIHJldHVybnMgYSB0cmFuc2NvZGVkCisgKiB2ZXJzaW9uICh0byBsb2NhbCBjb2RlIHBhZ2UpIG9mIHRoZSBET00gc3RyaW5nIGNvbnRlbnRzLiBBbmQgSSBjaGFuZ2VkIGFsbCBvZiB0aGUKKyAqIGV4Y2VwdGlvbiAndGhyb3cgYnkgcG9pbnRlcicgdG8gJ3Rocm93IGJ5IHZhbHVlJyBzdHlsZS4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA4OjQxICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NDoxMSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTg4LDcgKzEwMCw3IEBACiB2b2lkIENoYXJhY3RlckRhdGFJbXBsOjphcHBlbmREYXRhKGNvbnN0IERPTVN0cmluZyAmZGF0YSkKIHsKICAgICBpZihyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAgICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgCiAgICAgdmFsdWUuYXBwZW5kRGF0YShkYXRhKTsKQEAgLTEwNCwxMCArMTE2LDEwIEBACiB2b2lkIENoYXJhY3RlckRhdGFJbXBsOjpkZWxldGVEYXRhKGludCBvZmZzZXQsIGludCBjb3VudCkKIHsKICAgICBpZiAocmVhZE9ubHkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKAorICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOREVYX1NJWkVfRVJSLCBudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTkRFWF9TSVpFX0VSUiwgbnVsbCk7CiAgICAgCiAgICAgCiAgICAgLy9pbnQgdGFpbExlbmd0aCA9IE1hdGgubWF4KHZhbHVlLmxlbmd0aCgpIC0gY291bnQgLSBvZmZzZXQsIDApOwpAQCAtMTE3LDIxICsxMjksMjAgQEAKICAgICAvL30KICAgICAvL2NhdGNoIChTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpCiAgICAgLy97Ci0gICAgLy8gICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIsIG51bGwpOworICAgIC8vICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIsIG51bGwpOwogICAgIAogICAgIGludCBsZW4gPSB2YWx1ZS5sZW5ndGgoKTsKICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPj0gbGVuKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTkRFWF9TSVpFX0VSUiwgbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5ERVhfU0laRV9FUlIsIG51bGwpOwogICAgIAogICAgIHZhbHVlLmRlbGV0ZURhdGEob2Zmc2V0LCBjb3VudCk7CiB9OwogCiAKIAotRE9NU3RyaW5nIENoYXJhY3RlckRhdGFJbXBsOjpnZXREYXRhKCkKK0RPTVN0cmluZyAmQ2hhcmFjdGVyRGF0YUltcGw6OmdldERhdGEoKQogewotICAgIHJldHVybiB2YWx1ZS5jbG9uZSgpOyAgICAgICAgLy8gY2xvbmUgaGVyZSBzbyB0aGF0IHN1YnNlcXVlbnQgY2hhbmdlcyB0bwotICAgIC8vICBvdXIgdmFsdWUgd2lsbCBub3QgY2hhbmdlIHRoZSByZXR1cm5lZCBzdHJpbmcuCisgICAgcmV0dXJuIHZhbHVlOyAKIH07CiAKIApAQCAtMTU2LDExICsxNjcsMTEgQEAKIHsKICAgICAKICAgICBpZiAocmVhZE9ubHkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKAorICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogICAgIAogICAgIGlmIChvZmZzZXQ8MCB8fCBvZmZzZXQ+dmFsdWUubGVuZ3RoKCkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOREVYX1NJWkVfRVJSLCBudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTkRFWF9TSVpFX0VSUiwgbnVsbCk7CiAgICAgCiAgICAgdmFsdWUuaW5zZXJ0RGF0YShvZmZzZXQsIGRhdGEpOwogfQpAQCAtMTcwLDcgKzE4MSw3IEBACiB2b2lkIENoYXJhY3RlckRhdGFJbXBsOjpyZXBsYWNlRGF0YShpbnQgb2Zmc2V0LCBpbnQgY291bnQsIGNvbnN0IERPTVN0cmluZyAmZGF0YSkKIHsKICAgICBpZiAocmVhZE9ubHkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKAorICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogICAgIGRlbGV0ZURhdGEob2Zmc2V0LCBjb3VudCk7CiAgICAgaW5zZXJ0RGF0YShvZmZzZXQsIGRhdGEpOwpAQCAtMTgyLDcgKzE5Myw3IEBACiB2b2lkIENoYXJhY3RlckRhdGFJbXBsOjpzZXREYXRhKGNvbnN0IERPTVN0cmluZyAmYXJnKQogewogICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogICAgIHZhbHVlID0gYXJnLmNsb25lKCk7CiB9OwogCkBAIC0xOTQsNyArMjA1LDcgQEAKIHsKICAgICAKICAgICBpZihjb3VudCA8IDAgfHwgb2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiB2YWx1ZS5sZW5ndGgoKS0xKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTkRFWF9TSVpFX0VSUixudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTkRFWF9TSVpFX0VSUixudWxsKTsKICAgICAKICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nRGF0YShvZmZzZXQsIGNvdW50KTsKIH07CmRpZmYgLS1naXQgYS9zcmMvZG9tL0NoYXJhY3RlckRhdGFJbXBsLmhwcCBiL3NyYy9kb20vQ2hhcmFjdGVyRGF0YUltcGwuaHBwCmluZGV4IDM5ZGJkOTAuLjgxYTllNmMgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vQ2hhcmFjdGVyRGF0YUltcGwuaHBwCisrKyBiL3NyYy9kb20vQ2hhcmFjdGVyRGF0YUltcGwuaHBwCkBAIC01OSw4ICs1OSwxNSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDEgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzEyLzAzIDAwOjExOjIyICBhbmR5aAorICogQWRkZWQgRE9NU3RyaW5nLmNsb25lKCkgdG8gbm9kZSBwYXJhbWV0ZXJzIGluIGFuZCBvdXQgb2YgdGhlIERPTSwKKyAqIHdoZXJlIHRoZXkgaGFkIGJlZW4gbWlzc2VkLgorICoKKyAqIERPTVN0cmluZzo6cmF3QnVmZmVyLCByZW1vdmVkIGluY29ycmVjdCBhc3N1bXB0aW9ucyBhYm91dCBpdAorICogYmVpbmcgbnVsbCB0ZXJtaW5hdGVkLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDEgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjExICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtOTEsNyArOTgsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmREYXRhKGNvbnN0IERPTVN0cmluZyAmZGF0YSk7CiAgICAgdmlydHVhbCBOb2RlSW1wbCAqY2xvbmVOb2RlKGJvb2wgZGVlcCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGEoaW50IG9mZnNldCwgaW50IGNvdW50KTsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBnZXREYXRhKCk7CisgICAgdmlydHVhbCBET01TdHJpbmcgJmdldERhdGEoKTsKICAgICB2aXJ0dWFsIGludCBnZXRDaGFyRGF0YUxlbmd0aCgpOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnREYXRhKGludCBvZmZzZXQsIGNvbnN0IERPTVN0cmluZyAmZGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIHJlcGxhY2VEYXRhKGludCBvZmZzZXQsIGludCBjb3VudCwgY29uc3QgRE9NU3RyaW5nICZkYXRhKTsKZGlmZiAtLWdpdCBhL3NyYy9kb20vRE9NU3RyaW5nLmNwcCBiL3NyYy9kb20vRE9NU3RyaW5nLmNwcAppbmRleCA3MzI1NDM2Li43ZWViNDkwIDEwMDY0NAotLS0gYS9zcmMvZG9tL0RPTVN0cmluZy5jcHAKKysrIGIvc3JjL2RvbS9ET01TdHJpbmcuY3BwCkBAIC01Niw4ICs1NiwyMCBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDcgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzEyLzAzIDAwOjExOjIyICBhbmR5aAorICogQWRkZWQgRE9NU3RyaW5nLmNsb25lKCkgdG8gbm9kZSBwYXJhbWV0ZXJzIGluIGFuZCBvdXQgb2YgdGhlIERPTSwKKyAqIHdoZXJlIHRoZXkgaGFkIGJlZW4gbWlzc2VkLgorICoKKyAqIERPTVN0cmluZzo6cmF3QnVmZmVyLCByZW1vdmVkIGluY29ycmVjdCBhc3N1bXB0aW9ucyBhYm91dCBpdAorICogYmVpbmcgbnVsbCB0ZXJtaW5hdGVkLgorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8zMCAyMToxNjoyNSAgcm9kZGV5CisgKiBDaGFuZ2VzIHRvIGFkZCB0aGUgdHJhbnNjb2RlKCkgbWV0aG9kIHRvIERPTVN0cmluZywgd2hpY2ggcmV0dXJucyBhIHRyYW5zY29kZWQKKyAqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorICogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDcgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ0OjEyICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNzk3LDEzICs4MDksNzUgQEAKICAgICBpZiAoZkhhbmRsZSkKICAgICB7CiAgICAgICAgIHJldFAgPSBmSGFuZGxlLT5mRFNEYXRhLT5mRGF0YTsKLSAgICAgICAgcmV0UFtmSGFuZGxlLT5mTGVuZ3RoXSA9IDA7CiAgICAgfQogICAgIHJldHVybiByZXRQOwogfTsKIAogCi1pbnQgRE9NU3RyaW5nOjpzdHJjbXAoY29uc3QgRE9NU3RyaW5nICZvdGhlcikgY29uc3QKK2NoYXIgKkRPTVN0cmluZzo6dHJhbnNjb2RlKCkgY29uc3QKK3sKKyAgICBpZiAoIWZIYW5kbGUgfHwgZkhhbmRsZS0+Zkxlbmd0aCA9PSAwKQorICAgIHsKKyAgICAgICAgY2hhciogcmV0UCA9IG5ldyBjaGFyWzFdOworICAgICAgICAqcmV0UCA9IDA7CisgICAgICAgIHJldHVybiByZXRQOworICAgIH0KKworICAgIC8vIFdlJ3ZlIGdvdCBzb21lIGRhdGEKKyAgICAvLyBET01TdHJpbmdzIGFyZSBub3QgYWx3YXlzIG51bGwgdGVybWluYXRlZCwgc28gd2UgbWF5IG5lZWQgdG8KKyAgICAvLyBjb3B5IHRvIGFub3RoZXIgYnVmZmVyIGZpcnN0IGluIG9yZGVyIHRvIG51bGwgdGVybWluYXRlIGl0IGZvcgorICAgIC8vIHVzZSBhcyBpbnB1dCB0byB0aGUgdHJhbnNjb2Rpbmcgcm91dGluZXMuLgorICAgIC8vCisgICAgWE1MQ2gqIERPTVN0ckRhdGEgPSBmSGFuZGxlLT5mRFNEYXRhLT5mRGF0YTsKKworICAgIGNvbnN0IGludCBsb2NhbEJ1ZkxlbiA9IDEwMDA7CisgICAgWE1MQ2ggbG9jYWxCdWZbbG9jYWxCdWZMZW5dOworICAgIFhNTENoICphbGxvY2F0ZWRCdWYgPSAwOworICAgIFhNTENoICpzcmNQOworCisgICAgaWYgKERPTVN0ckRhdGFbZkhhbmRsZS0+Zkxlbmd0aF0gPT0gMCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBkYXRhIGluIHRoZSBET01TdHJpbmcgaXRzZWxmIGhhcHBlbnMgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgICAvLyAgSnVzdCB1c2UgaXQgaW4gcGxhY2UuCisgICAgICAgIHNyY1AgPSBET01TdHJEYXRhOworICAgIH0gCisgICAgZWxzZSBpZiAoZkhhbmRsZS0+Zkxlbmd0aCA8IGxvY2FsQnVmTGVuLTEpCisgICAgeworICAgICAgICAvLyBUaGUgZGF0YSBpcyBub3QgbnVsbCB0ZXJtaW5hdGVkLCBidXQgZG9lcyBmaXQgaW4gdGhlCisgICAgICAgIC8vICBsb2NhbCBidWZmZXIgKGZhc3QgYWxsb2NhdGlvbikuICBDb3B5IGl0IG92ZXIsIGFuZCBhZGQgCisgICAgICAgIC8vICB0aGUgbnVsbCB0ZXJtaW5hdGlvbiwKKyAgICAgICAgbWVtY3B5KGxvY2FsQnVmLCBET01TdHJEYXRhLCBmSGFuZGxlLT5mTGVuZ3RoICogc2l6ZW9mKFhNTENoKSk7CisgICAgICAgIHNyY1AgPSBsb2NhbEJ1ZjsKKyAgICAgICAgc3JjUFtmSGFuZGxlLT5mTGVuZ3RoXSA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFRoZSBkYXRhIGlzIHRvbyBiaWcgZm9yIHRoZSBsb2NhbCBidWZmZXIuICBIZWFwIGFsbG9jYXRlIG9uZS4KKyAgICAgICAgYWxsb2NhdGVkQnVmID0gc3JjUCA9IG5ldyBYTUxDaFtmSGFuZGxlLT5mTGVuZ3RoICsgMV07CisgICAgICAgIG1lbWNweShhbGxvY2F0ZWRCdWYsIERPTVN0ckRhdGEsIGZIYW5kbGUtPmZMZW5ndGggKiBzaXplb2YoWE1MQ2gpKTsKKyAgICAgICAgc3JjUFtmSGFuZGxlLT5mTGVuZ3RoXSA9IDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyAgRmluZCBvdXQgaG93IG1hbnkgb3V0cHV0IGNoYXJzIHdlIG5lZWQgYW5kIGFsbG9jYXRlIGEgYnVmZmVyIGJpZyBlbm91Z2gKKyAgICAvLyAgZm9yIHRoYXQgcGx1cyBhIG51bGwuCisgICAgLy8KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgY2hhcnNOZWVkZWQgPSBnZXREb21Db252ZXJ0ZXIoKS0+Y2FsY1JlcXVpcmVkU2l6ZShzcmNQKTsKKyAgICBjaGFyKiByZXRQID0gbmV3IGNoYXJbY2hhcnNOZWVkZWQgKyAxXTsKKworICAgIGlmICghZ2V0RG9tQ29udmVydGVyKCktPnRyYW5zY29kZShzcmNQLCByZXRQLCBjaGFyc05lZWRlZCkpCisgICAgeworICAgICAgICAvLyA8VEJEPiBXZSBzaG91bGQgdGhyb3cgc29tZXRoaW5nIGhlcmU/CisgICAgfQorICAgIGRlbGV0ZSBbXSBhbGxvY2F0ZWRCdWY7ICAgLy8gd2hpY2ggd2lsbCBiZSBudWxsIGlmIHdlIGRpZG4ndCBhbGxvY2F0ZSBvbmUuCisKKyAgICAvLyBDYXAgaXQgb2ZmIGFuZCByZXR1cm4gaXQKKyAgICByZXRQW2NoYXJzTmVlZGVkXSA9IDA7CisgICAgcmV0dXJuIHJldFA7Cit9CisKKworaW50IERPTVN0cmluZzo6Y29tcGFyZVN0cmluZyhjb25zdCBET01TdHJpbmcgJm90aGVyKSBjb25zdAogewogICAgIC8vIE5vdGU6IHRoaXMgc3RyY21wIGRvZXMgbm90IG1hdGNoIHRoZSBzZW1hbnRpY3MKICAgICAvLyAgICAgICBvZiB0aGUgc3RhbmRhcmQgQyBzdHJjbXAuICBBbGwgaXQgbmVlZHMgdG8gZG8gaXMKZGlmZiAtLWdpdCBhL3NyYy9kb20vRE9NU3RyaW5nLmhwcCBiL3NyYy9kb20vRE9NU3RyaW5nLmhwcAppbmRleCA1YzQ2NDEzLi42ZjU2Y2Q0IDEwMDY0NAotLS0gYS9zcmMvZG9tL0RPTVN0cmluZy5ocHAKKysrIGIvc3JjL2RvbS9ET01TdHJpbmcuaHBwCkBAIC01Niw4ICs1NiwyMCBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDggIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzEyLzAzIDAwOjExOjIyICBhbmR5aAorICogQWRkZWQgRE9NU3RyaW5nLmNsb25lKCkgdG8gbm9kZSBwYXJhbWV0ZXJzIGluIGFuZCBvdXQgb2YgdGhlIERPTSwKKyAqIHdoZXJlIHRoZXkgaGFkIGJlZW4gbWlzc2VkLgorICoKKyAqIERPTVN0cmluZzo6cmF3QnVmZmVyLCByZW1vdmVkIGluY29ycmVjdCBhc3N1bXB0aW9ucyBhYm91dCBpdAorICogYmVpbmcgbnVsbCB0ZXJtaW5hdGVkLgorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8zMCAyMToxNjoyNSAgcm9kZGV5CisgKiBDaGFuZ2VzIHRvIGFkZCB0aGUgdHJhbnNjb2RlKCkgbWV0aG9kIHRvIERPTVN0cmluZywgd2hpY2ggcmV0dXJucyBhIHRyYW5zY29kZWQKKyAqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorICogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDggIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjEyICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMjYwLDEwICsyNzIsMjIgQEAKICAgICAgICogUmV0dXJucyBhIGhhbmRsZSB0byB0aGUgcmF3IGJ1ZmZlciBpbiB0aGUgPGNvZGU+RE9NU3RyaW5nPC9jb2RlPi4KICAgICAgICoKICAgICAgICogQHJldHVybiBUaGUgcG9pbnRlciBpbnNpZGUgdGhlIDxjb2RlPkRPTVN0cmluZzwvY29kZT4gY29udGFpbmcgdGhlIHN0cmluZyBkYXRhLgorICAgICAgKiAgICAgICAgIE5vdGU6IHRoZSBkYXRhIGlzIG5vdCBhbHdheXMgbnVsbCB0ZXJtaW5hdGVkLiAgRG8gbm90IHJlbHkgb24KKyAgICAgICogICAgICAgICBhIG51bGwgYmVpbmcgdGhlcmUsIGFuZCBkbyBub3QgYWRkIG9uZSwgYXMgc2V2ZXJhbCBET01TdHJpbmdzCisgICAgICAqICAgICAgICAgd2l0aCBkaWZmZXJlbnQgbGVuZ3RocyBtYXkgc2hhcmUgdGhlIHNhbWUgcmF3IGJ1ZmZlci4KICAgICAgICovCiAgICAgWE1MQ2ggICAgICAgKnJhd0J1ZmZlcigpIGNvbnN0OwogCiAgICAgLyoqCisgICAgICAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSBzdHJpbmcsIHRyYW5zY29kZWQgdG8gdGhlIGxvY2FsIGNvZGUgcGFnZS4gVGhlCisgICAgICAqIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAgdGhpcyBidWZmZXIuCisgICAgICAqCisgICAgICAqIEByZXR1cm4gQSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBvZiBjaGFyIGVsZW1lbnRzLCB3aGljaAorICAgICAgKiAgICAgICAgIHJlcHJlc2VudHMgdGhlIG9yaWdpbmFsIHN0cmluZywgYnV0IGluIHRoZSBsb2NhbCBlbmNvZGluZy4KKyAgICAgICovCisgICAgY2hhciAgICAgICAgKnRyYW5zY29kZSgpIGNvbnN0OworCisgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBzdWItc3RyaW5nIG9mIHRoZSA8Y29kZT5ET01TdHJpbmc8L2NvZGU+IHN0YXJ0aW5nIGF0IGEgc3BlY2lmaWVkIHBvc2l0aW9uLgogICAgICAgKgogICAgICAgKiBAcGFyYW0gb2Zmc2V0IFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIGZyb20gd2hpY2ggdGhlIHN1Yi1zdHJpbmcgaXMgYmVpbmcgcmVxdWVzdGVkLgpAQCAtMzEzLDcgKzMzNyw3IEBACiAgICAgLyoqCiAgICAgICAqIENvbXBhcmVzIGEgRE9NU3RyaW5nIHdpdGggYW5vdGhlci4KICAgICAgICoKLSAgICAgICogVGhpcyBzdHJjbXAgZG9lcyBub3QgbWF0Y2ggdGhlIHNlbWFudGljcyBvZiB0aGUgc3RhbmRhcmQgQyBzdHJjbXAuICAKKyAgICAgICogVGhpcyBjb21wYXJlU3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIHN0YW5kYXJkIEMgc3RyY21wLiAgCiAgICAgICAqIEFsbCBpdCBuZWVkcyB0byBkbyBpcyBkZWZpbmUgc29tZSBsZXNzIHRoYW4gLSBlcXVhbHMgLSBncmVhdGVyIHRoYW4gCiAgICAgICAqIG9yZGVyaW5nIG9mIHN0cmluZ3MuICBIb3cgZG9lc24ndCBtYXR0ZXIuCiAgICAgICAqCkBAIC0zMjEsNyArMzQ1LDcgQEAKICAgICAgICogQHBhcmFtIG90aGVyIFRoZSBvYmplY3QgdG8gYmUgY29tcGFyZWQgd2l0aAogICAgICAgKiBAcmV0dXJuIEVpdGhlciAtMSwgMCwgb3IgMSBiYXNlZCBvbiB0aGUgY29tcGFyaXNvbi4gCiAgICAgICAqLwotICAgIGludCAgICAgICAgIHN0cmNtcChjb25zdCBET01TdHJpbmcgJm90aGVyKSBjb25zdDsKKyAgICBpbnQgICAgICAgICBjb21wYXJlU3RyaW5nKGNvbnN0IERPTVN0cmluZyAmb3RoZXIpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICAqIFRlbGxzIGlmIGEgPGNvZGU+RE9NU3RyaW5nPC9jb2RlPiBjb250YWlucyB0aGUgc2FtZSBjaGFyYWN0ZXIgZGF0YQpkaWZmIC0tZ2l0IGEvc3JjL2RvbS9ET01fQXR0ci5jcHAgYi9zcmMvZG9tL0RPTV9BdHRyLmNwcAppbmRleCA2NjU1MWRjLi5lYTNjNGQ3IDEwMDY0NAotLS0gYS9zcmMvZG9tL0RPTV9BdHRyLmNwcAorKysgYi9zcmMvZG9tL0RPTV9BdHRyLmNwcApAQCAtNTYsOCArNTYsMTUgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA4OjQ4ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMyAwMDoxMToyMiAgYW5keWgKKyAqIEFkZGVkIERPTVN0cmluZy5jbG9uZSgpIHRvIG5vZGUgcGFyYW1ldGVycyBpbiBhbmQgb3V0IG9mIHRoZSBET00sCisgKiB3aGVyZSB0aGV5IGhhZCBiZWVuIG1pc3NlZC4KKyAqCisgKiBET01TdHJpbmc6OnJhd0J1ZmZlciwgcmVtb3ZlZCBpbmNvcnJlY3QgYXNzdW1wdGlvbnMgYWJvdXQgaXQKKyAqIGJlaW5nIG51bGwgdGVybWluYXRlZC4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA4OjQ4ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NDoxMiAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTEwNiwzMCArMTEzLDM0IEBACiAKIERPTVN0cmluZyAgICAgICBET01fQXR0cjo6Z2V0TmFtZSgpIGNvbnN0CiB7Ci0gICAgICAgIHJldHVybiAoKEF0dHJJbXBsICopZkltcGwpLT5nZXROYW1lKCk7CisgICAgcmV0dXJuICgoQXR0ckltcGwgKilmSW1wbCktPmdldE5hbWUoKS5jbG9uZSgpOwogfTsKIAogCi1ib29sICAgICAgICAgICAgRE9NX0F0dHI6OmdldFNwZWNpZmllZCgpIGNvbnN0Citib29sICAgICAgIERPTV9BdHRyOjpnZXRTcGVjaWZpZWQoKSBjb25zdAogewotICAgICAgICByZXR1cm4gKChBdHRySW1wbCAqKWZJbXBsKS0+Z2V0U3BlY2lmaWVkKCk7CisgICAgcmV0dXJuICgoQXR0ckltcGwgKilmSW1wbCktPmdldFNwZWNpZmllZCgpOwogfTsKIAogCi1ET01TdHJpbmcgICAgICAgRE9NX0F0dHI6OmdldFZhbHVlKCkgY29uc3QKK0RPTVN0cmluZyAgIERPTV9BdHRyOjpnZXRWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgICAgIHJldHVybiAoKEF0dHJJbXBsICopZkltcGwpLT5nZXRWYWx1ZSgpOworICAgIC8vIFRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZG9lcyBub3QgbmVlZCB0byBiZSBjbG9uZWQgYmVmb3JlCisgICAgLy8gIHJldHVybmluZywgYmVjYXVzZSBpdCBpcyBjb21wdXRlZCBkeW5hbWljYWxseSBmcm9tIHRoZQorICAgIC8vICBjaGlsZHJlbiBvZiB0aGUgYXR0cmlidXRlLgorICAgIC8vCisgICAgcmV0dXJuICgoQXR0ckltcGwgKilmSW1wbCktPmdldFZhbHVlKCk7CiB9OwogCiAKLXZvaWQgICAgICAgICAgICAgICAgICAgIERPTV9BdHRyOjpzZXRTcGVjaWZpZWQoYm9vbCBzcGVjaWZpZWQpCit2b2lkICAgICAgRE9NX0F0dHI6OnNldFNwZWNpZmllZChib29sIHNwZWNpZmllZCkKIHsKLSAgICAgICAgKChBdHRySW1wbCAqKWZJbXBsKS0+c2V0U3BlY2lmaWVkKHNwZWNpZmllZCk7CisgICAgKChBdHRySW1wbCAqKWZJbXBsKS0+c2V0U3BlY2lmaWVkKHNwZWNpZmllZCk7CiB9OwogCiAKLXZvaWQgICAgICAgICAgICBET01fQXR0cjo6c2V0VmFsdWUoY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkgewotICAgICAgICAoKEF0dHJJbXBsICopZkltcGwpLT5zZXRWYWx1ZSh2YWx1ZSk7Cit2b2lkICAgICBET01fQXR0cjo6c2V0VmFsdWUoY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkgeworICAgICgoQXR0ckltcGwgKilmSW1wbCktPnNldFZhbHVlKHZhbHVlKTsKIH07CiAKIApAQCAtMTM3LDUgKzE0OCw1IEBACiAKIERPTV9FbGVtZW50ICAgICBET01fQXR0cjo6Z2V0T3duZXJFbGVtZW50KCkgY29uc3QKIHsKLSAgICAgICAgcmV0dXJuIERPTV9FbGVtZW50KCgoQXR0ckltcGwgKilmSW1wbCktPmdldE93bmVyRWxlbWVudCgpKTsKKyAgICByZXR1cm4gRE9NX0VsZW1lbnQoKChBdHRySW1wbCAqKWZJbXBsKS0+Z2V0T3duZXJFbGVtZW50KCkpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2RvbS9ET01fQ2hhcmFjdGVyRGF0YS5jcHAgYi9zcmMvZG9tL0RPTV9DaGFyYWN0ZXJEYXRhLmNwcAppbmRleCA2ZjNlOGEyLi4zMTgwN2IzIDEwMDY0NAotLS0gYS9zcmMvZG9tL0RPTV9DaGFyYWN0ZXJEYXRhLmNwcAorKysgYi9zcmMvZG9tL0RPTV9DaGFyYWN0ZXJEYXRhLmNwcApAQCAtNTYsOCArNTYsMTUgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA4OjQ5ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMyAwMDoxMToyMiAgYW5keWgKKyAqIEFkZGVkIERPTVN0cmluZy5jbG9uZSgpIHRvIG5vZGUgcGFyYW1ldGVycyBpbiBhbmQgb3V0IG9mIHRoZSBET00sCisgKiB3aGVyZSB0aGV5IGhhZCBiZWVuIG1pc3NlZC4KKyAqCisgKiBET01TdHJpbmc6OnJhd0J1ZmZlciwgcmVtb3ZlZCBpbmNvcnJlY3QgYXNzdW1wdGlvbnMgYWJvdXQgaXQKKyAqIGJlaW5nIG51bGwgdGVybWluYXRlZC4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA4OjQ5ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NDoxMyAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTEwMSw3ICsxMDgsNyBAQAogCiBET01TdHJpbmcgRE9NX0NoYXJhY3RlckRhdGE6OmdldERhdGEoKSBjb25zdAogewotICAgIHJldHVybiAoKENoYXJhY3RlckRhdGFJbXBsICopZkltcGwpLT5nZXREYXRhKCk7CisgICAgcmV0dXJuICgoQ2hhcmFjdGVyRGF0YUltcGwgKilmSW1wbCktPmdldERhdGEoKS5jbG9uZSgpOwogfTsKIAogCmRpZmYgLS1naXQgYS9zcmMvZG9tL0RPTV9ET01JbXBsZW1lbnRhdGlvbi5jcHAgYi9zcmMvZG9tL0RPTV9ET01JbXBsZW1lbnRhdGlvbi5jcHAKaW5kZXggZTNhMzk4OC4uZDI5NWRlNCAxMDA2NDQKLS0tIGEvc3JjL2RvbS9ET01fRE9NSW1wbGVtZW50YXRpb24uY3BwCisrKyBiL3NyYy9kb20vRE9NX0RPTUltcGxlbWVudGF0aW9uLmNwcApAQCAtNTYsOCArNTYsMTMgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA4OjU2ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8zMCAyMToxNjoyNSAgcm9kZGV5CisgKiBDaGFuZ2VzIHRvIGFkZCB0aGUgdHJhbnNjb2RlKCkgbWV0aG9kIHRvIERPTVN0cmluZywgd2hpY2ggcmV0dXJucyBhIHRyYW5zY29kZWQKKyAqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorICogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6NTYgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ0OjE1ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTU1LDcgKzE2MCw3IEBACiAJY29uc3QgRE9NU3RyaW5nICZpbnRlcm5hbFN1YnNldCkKIHsKICAgICBpZiAoIURvY3VtZW50SW1wbDo6aXNYTUxOYW1lKHF1YWxpZmllZE5hbWUpKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSLCBudWxsKTsKICAgICAKICAgICByZXR1cm4gRE9NX0RvY3VtZW50VHlwZShuZXcgRG9jdW1lbnRUeXBlSW1wbChxdWFsaWZpZWROYW1lLCBwdWJsaWNJRCwgc3lzdGVtSUQsIGludGVybmFsU3Vic2V0KSk7CmRpZmYgLS1naXQgYS9zcmMvZG9tL0RPTV9Eb2N1bWVudC5jcHAgYi9zcmMvZG9tL0RPTV9Eb2N1bWVudC5jcHAKaW5kZXggMDM3MDdlMi4uZmMwMGY1MSAxMDA2NDQKLS0tIGEvc3JjL2RvbS9ET01fRG9jdW1lbnQuY3BwCisrKyBiL3NyYy9kb20vRE9NX0RvY3VtZW50LmNwcApAQCAtNTYsOCArNTYsMTEgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA4OjUwICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMTo0ODoxNCAgcmFodWxqCisgKiBDaGFuZ2VkIDBMIHRvIDAuIENDIHVuZGVyIEhQVVggaXMgaGFwcHkgbm93LgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6NTAgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS40ICAxOTk5LzExLzA4IDIwOjQ0OjE1ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMjAzLDMyICsyMDYsMzIgQEAKIH07CiAKIAotRE9NX1RyZWVXYWxrZXIgICAgICAgICBET01fRG9jdW1lbnQ6OmNyZWF0ZVRyZWVXYWxrZXIoRE9NX05vZGUgcm9vdCwgc2hvcnQgd2hhdFRvU2hvdywgRE9NX05vZGVGaWx0ZXIgZmlsdGVyKSB7Ci0gICAgICAgIHJldHVybiBET01fVHJlZVdhbGtlcihEb2N1bWVudEltcGw6OmNyZWF0ZVRyZWVXYWxrZXIocm9vdCwgd2hhdFRvU2hvdywgZmlsdGVyLCAwTCkpOworRE9NX1RyZWVXYWxrZXIgRE9NX0RvY3VtZW50OjpjcmVhdGVUcmVlV2Fsa2VyKERPTV9Ob2RlIHJvb3QsIHNob3J0IHdoYXRUb1Nob3csIERPTV9Ob2RlRmlsdGVyIGZpbHRlcikgeworCXJldHVybiBET01fVHJlZVdhbGtlcihEb2N1bWVudEltcGw6OmNyZWF0ZVRyZWVXYWxrZXIocm9vdCwgd2hhdFRvU2hvdywgZmlsdGVyLCAwTCkpOwogfTsKIAogCi1ET01fTm9kZUl0ZXJhdG9yICAgICAgIERPTV9Eb2N1bWVudDo6Y3JlYXRlTm9kZUl0ZXJhdG9yKERPTV9Ob2RlIHJvb3QsIHNob3J0IHdoYXRUb1Nob3csIE5vZGVGaWx0ZXJJbXBsKiBmaWx0ZXJUaGF0V2lsbEJlQWRvcHRlZCkgewotICAgICAgICByZXR1cm4gRE9NX05vZGVJdGVyYXRvcihEb2N1bWVudEltcGw6OmNyZWF0ZU5vZGVJdGVyYXRvcihyb290LCB3aGF0VG9TaG93LCAwTCwgZmlsdGVyVGhhdFdpbGxCZUFkb3B0ZWQpKTsKK0RPTV9Ob2RlSXRlcmF0b3IgRE9NX0RvY3VtZW50OjpjcmVhdGVOb2RlSXRlcmF0b3IoRE9NX05vZGUgcm9vdCwgc2hvcnQgd2hhdFRvU2hvdywgTm9kZUZpbHRlckltcGwqIGZpbHRlclRoYXRXaWxsQmVBZG9wdGVkKSB7CisJcmV0dXJuIERPTV9Ob2RlSXRlcmF0b3IoRG9jdW1lbnRJbXBsOjpjcmVhdGVOb2RlSXRlcmF0b3Iocm9vdCwgd2hhdFRvU2hvdywgMCwgZmlsdGVyVGhhdFdpbGxCZUFkb3B0ZWQpKTsKIH07CiAKIAotRE9NX1RyZWVXYWxrZXIgICAgICAgICBET01fRG9jdW1lbnQ6OmNyZWF0ZVRyZWVXYWxrZXIoRE9NX05vZGUgcm9vdCwgc2hvcnQgd2hhdFRvU2hvdywgTm9kZUZpbHRlckltcGwqIGZpbHRlclRoYXRXaWxsQmVBZG9wdGVkKSB7Ci0gICAgICAgIHJldHVybiBET01fVHJlZVdhbGtlcihEb2N1bWVudEltcGw6OmNyZWF0ZVRyZWVXYWxrZXIocm9vdCwgd2hhdFRvU2hvdywgMEwsIGZpbHRlclRoYXRXaWxsQmVBZG9wdGVkKSk7CitET01fVHJlZVdhbGtlciBET01fRG9jdW1lbnQ6OmNyZWF0ZVRyZWVXYWxrZXIoRE9NX05vZGUgcm9vdCwgc2hvcnQgd2hhdFRvU2hvdywgTm9kZUZpbHRlckltcGwqIGZpbHRlclRoYXRXaWxsQmVBZG9wdGVkKSB7CisJcmV0dXJuIERPTV9UcmVlV2Fsa2VyKERvY3VtZW50SW1wbDo6Y3JlYXRlVHJlZVdhbGtlcihyb290LCB3aGF0VG9TaG93LCAwLCBmaWx0ZXJUaGF0V2lsbEJlQWRvcHRlZCkpOwogfTsKIAogCiAKLURPTV9Ob2RlTGlzdCAgICAgICAgICAgRE9NX0RvY3VtZW50OjpnZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBET01TdHJpbmcgJnRhZ25hbWUpIGNvbnN0ICB7Ci0gICAgICAgIHJldHVybiBET01fTm9kZUxpc3QoKChEb2N1bWVudEltcGwgKilmSW1wbCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ25hbWUpKTsKK0RPTV9Ob2RlTGlzdCBET01fRG9jdW1lbnQ6OmdldEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0IERPTVN0cmluZyAmdGFnbmFtZSkgY29uc3QgIHsKKwlyZXR1cm4gRE9NX05vZGVMaXN0KCgoRG9jdW1lbnRJbXBsICopZkltcGwpLT5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWduYW1lKSk7CiB9OwogCiAKIC8vSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgogCi1ET01fTm9kZSAgICAgICAgICAgICAgIERPTV9Eb2N1bWVudDo6aW1wb3J0Tm9kZShjb25zdCBET01fTm9kZSAmc291cmNlLCBib29sIGRlZXApCitET01fTm9kZSBET01fRG9jdW1lbnQ6OmltcG9ydE5vZGUoY29uc3QgRE9NX05vZGUgJnNvdXJjZSwgYm9vbCBkZWVwKQogewotICAgICAgICByZXR1cm4gRE9NX05vZGUoKChEb2N1bWVudEltcGwgKilmSW1wbCktPmltcG9ydE5vZGUoc291cmNlLmZJbXBsLCBkZWVwKSk7CisJcmV0dXJuIERPTV9Ob2RlKCgoRG9jdW1lbnRJbXBsICopZkltcGwpLT5pbXBvcnROb2RlKHNvdXJjZS5mSW1wbCwgZGVlcCkpOwogfTsKIAogCmRpZmYgLS1naXQgYS9zcmMvZG9tL0RPTV9Eb2N1bWVudFR5cGUuY3BwIGIvc3JjL2RvbS9ET01fRG9jdW1lbnRUeXBlLmNwcAppbmRleCA2M2U0ODY4Li5kYTE1YTk3IDEwMDY0NAotLS0gYS9zcmMvZG9tL0RPTV9Eb2N1bWVudFR5cGUuY3BwCisrKyBiL3NyYy9kb20vRE9NX0RvY3VtZW50VHlwZS5jcHAKQEAgLTU2LDggKzU2LDE1IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODo1MiAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMDMgMDA6MTE6MjMgIGFuZHloCisgKiBBZGRlZCBET01TdHJpbmcuY2xvbmUoKSB0byBub2RlIHBhcmFtZXRlcnMgaW4gYW5kIG91dCBvZiB0aGUgRE9NLAorICogd2hlcmUgdGhleSBoYWQgYmVlbiBtaXNzZWQuCisgKgorICogRE9NU3RyaW5nOjpyYXdCdWZmZXIsIHJlbW92ZWQgaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IGl0CisgKiBiZWluZyBudWxsIHRlcm1pbmF0ZWQuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODo1MiAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDQ6MTYgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMDcsNyArMTE0LDcgQEAKIAogRE9NU3RyaW5nICAgICAgIERPTV9Eb2N1bWVudFR5cGU6OmdldE5hbWUoKSBjb25zdAogewotICAgICAgICByZXR1cm4gKChEb2N1bWVudFR5cGVJbXBsICopZkltcGwpLT5nZXROYW1lKCk7CisgICAgICAgIHJldHVybiAoKERvY3VtZW50VHlwZUltcGwgKilmSW1wbCktPmdldE5hbWUoKS5jbG9uZSgpOwogfTsKIAogCkBAIC0xMjksMTcgKzEzNiwxNyBAQAogCiBET01TdHJpbmcgICAgIERPTV9Eb2N1bWVudFR5cGU6OmdldFB1YmxpY0lEKCkgY29uc3QKIHsKLSAgICAgICAgcmV0dXJuICgoRG9jdW1lbnRUeXBlSW1wbCAqKWZJbXBsKS0+Z2V0UHVibGljSUQoKTsKKyAgICAgICAgcmV0dXJuICgoRG9jdW1lbnRUeXBlSW1wbCAqKWZJbXBsKS0+Z2V0UHVibGljSUQoKS5jbG9uZSgpOwogfQogCiAKIERPTVN0cmluZyAgICAgRE9NX0RvY3VtZW50VHlwZTo6Z2V0U3lzdGVtSUQoKSBjb25zdAogewotICAgICAgICByZXR1cm4gKChEb2N1bWVudFR5cGVJbXBsICopZkltcGwpLT5nZXRTeXN0ZW1JRCgpOworICAgICAgICByZXR1cm4gKChEb2N1bWVudFR5cGVJbXBsICopZkltcGwpLT5nZXRTeXN0ZW1JRCgpLmNsb25lKCk7CiB9CiAKIAogRE9NU3RyaW5nICAgICBET01fRG9jdW1lbnRUeXBlOjpnZXRJbnRlcm5hbFN1YnNldCgpIGNvbnN0CiB7Ci0gICAgICAgIHJldHVybiAoKERvY3VtZW50VHlwZUltcGwgKilmSW1wbCktPmdldEludGVybmFsU3Vic2V0KCk7CisgICAgICAgIHJldHVybiAoKERvY3VtZW50VHlwZUltcGwgKilmSW1wbCktPmdldEludGVybmFsU3Vic2V0KCkuY2xvbmUoKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9kb20vRE9NX0VsZW1lbnQuY3BwIGIvc3JjL2RvbS9ET01fRWxlbWVudC5jcHAKaW5kZXggOWI5NTJmNy4uNzhmZTY0ZCAxMDA2NDQKLS0tIGEvc3JjL2RvbS9ET01fRWxlbWVudC5jcHAKKysrIGIvc3JjL2RvbS9ET01fRWxlbWVudC5jcHAKQEAgLTU2LDggKzU2LDE1IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODo1NyAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMDMgMDA6MTE6MjMgIGFuZHloCisgKiBBZGRlZCBET01TdHJpbmcuY2xvbmUoKSB0byBub2RlIHBhcmFtZXRlcnMgaW4gYW5kIG91dCBvZiB0aGUgRE9NLAorICogd2hlcmUgdGhleSBoYWQgYmVlbiBtaXNzZWQuCisgKgorICogRE9NU3RyaW5nOjpyYXdCdWZmZXIsIHJlbW92ZWQgaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IGl0CisgKiBiZWluZyBudWxsIHRlcm1pbmF0ZWQuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODo1NyAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDQ6MTcgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMDgsMTMgKzExNSwxMyBAQAogCiBET01TdHJpbmcgRE9NX0VsZW1lbnQ6OmdldFRhZ05hbWUoKSBjb25zdAogewotICAgICAgICByZXR1cm4gKChFbGVtZW50SW1wbCAqKWZJbXBsKS0+Z2V0VGFnTmFtZSgpOworICAgICAgICByZXR1cm4gKChFbGVtZW50SW1wbCAqKWZJbXBsKS0+Z2V0VGFnTmFtZSgpLmNsb25lKCk7CiB9OwogCiAKIERPTVN0cmluZyBET01fRWxlbWVudDo6Z2V0QXR0cmlidXRlKGNvbnN0IERPTVN0cmluZyAmbmFtZSkgY29uc3QKIHsKLSAgICAgICAgcmV0dXJuICgoRWxlbWVudEltcGwgKilmSW1wbCktPmdldEF0dHJpYnV0ZShuYW1lKTsKKyAgICAgICAgcmV0dXJuICgoRWxlbWVudEltcGwgKilmSW1wbCktPmdldEF0dHJpYnV0ZShuYW1lKS5jbG9uZSgpOwogfTsKIAogCkBAIC0xNzAsNyArMTc3LDcgQEAKIERPTVN0cmluZyBET01fRWxlbWVudDo6Z2V0QXR0cmlidXRlTlMoY29uc3QgRE9NU3RyaW5nICZuYW1lc3BhY2VVUkksCiAJY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICgoRWxlbWVudEltcGwgKilmSW1wbCktPmdldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKKyAgICByZXR1cm4gKChFbGVtZW50SW1wbCAqKWZJbXBsKS0+Z2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpLmNsb25lKCk7CiB9CiAKIHZvaWQgRE9NX0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKGNvbnN0IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJLApkaWZmIC0tZ2l0IGEvc3JjL2RvbS9ET01fRW50aXR5LmNwcCBiL3NyYy9kb20vRE9NX0VudGl0eS5jcHAKaW5kZXggNDA3MjFiNi4uM2IwZDY5OSAxMDA2NDQKLS0tIGEvc3JjL2RvbS9ET01fRW50aXR5LmNwcAorKysgYi9zcmMvZG9tL0RPTV9FbnRpdHkuY3BwCkBAIC01Niw4ICs1NiwxNSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6NTcgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzEyLzAzIDAwOjExOjIzICBhbmR5aAorICogQWRkZWQgRE9NU3RyaW5nLmNsb25lKCkgdG8gbm9kZSBwYXJhbWV0ZXJzIGluIGFuZCBvdXQgb2YgdGhlIERPTSwKKyAqIHdoZXJlIHRoZXkgaGFkIGJlZW4gbWlzc2VkLgorICoKKyAqIERPTVN0cmluZzo6cmF3QnVmZmVyLCByZW1vdmVkIGluY29ycmVjdCBhc3N1bXB0aW9ucyBhYm91dCBpdAorICogYmVpbmcgbnVsbCB0ZXJtaW5hdGVkLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6NTcgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjE3ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTA3LDE4ICsxMTQsMTggQEAKIAogRE9NU3RyaW5nICBET01fRW50aXR5OjpnZXRQdWJsaWNJZCgpIGNvbnN0CiB7Ci0gICAgICAgIHJldHVybiAoKEVudGl0eUltcGwgKilmSW1wbCktPmdldFB1YmxpY0lkKCk7CisgICAgICAgIHJldHVybiAoKEVudGl0eUltcGwgKilmSW1wbCktPmdldFB1YmxpY0lkKCkuY2xvbmUoKTsKIH07CiAKIERPTVN0cmluZyAgRE9NX0VudGl0eTo6Z2V0U3lzdGVtSWQoKSBjb25zdAogewotICAgICAgICByZXR1cm4gKChFbnRpdHlJbXBsICopZkltcGwpLT5nZXRTeXN0ZW1JZCgpOworICAgICAgICByZXR1cm4gKChFbnRpdHlJbXBsICopZkltcGwpLT5nZXRTeXN0ZW1JZCgpLmNsb25lKCk7CiB9OwogCiAKIERPTVN0cmluZyAgRE9NX0VudGl0eTo6Z2V0Tm90YXRpb25OYW1lKCkgY29uc3QKIHsKLSAgICAgICAgcmV0dXJuICgoRW50aXR5SW1wbCAqKWZJbXBsKS0+Z2V0Tm90YXRpb25OYW1lKCk7CisgICAgICAgIHJldHVybiAoKEVudGl0eUltcGwgKilmSW1wbCktPmdldE5vdGF0aW9uTmFtZSgpLmNsb25lKCk7CiB9OwogCiAKZGlmZiAtLWdpdCBhL3NyYy9kb20vRE9NX05vZGUuY3BwIGIvc3JjL2RvbS9ET01fTm9kZS5jcHAKaW5kZXggYTUyZGUyNy4uN2E5MjkwNSAxMDA2NDQKLS0tIGEvc3JjL2RvbS9ET01fTm9kZS5jcHAKKysrIGIvc3JjL2RvbS9ET01fTm9kZS5jcHAKQEAgLTU2LDggKzU2LDE1IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODo1OSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMDMgMDA6MTE6MjMgIGFuZHloCisgKiBBZGRlZCBET01TdHJpbmcuY2xvbmUoKSB0byBub2RlIHBhcmFtZXRlcnMgaW4gYW5kIG91dCBvZiB0aGUgRE9NLAorICogd2hlcmUgdGhleSBoYWQgYmVlbiBtaXNzZWQuCisgKgorICogRE9NU3RyaW5nOjpyYXdCdWZmZXIsIHJlbW92ZWQgaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IGl0CisgKiBiZWluZyBudWxsIHRlcm1pbmF0ZWQuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODo1OSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDQ6MTkgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xNjIsMTMgKzE2OSwxMyBAQAogCiBET01TdHJpbmcgIERPTV9Ob2RlOjpnZXROb2RlTmFtZSgpICBjb25zdCAKIHsKLSAgICByZXR1cm4gZkltcGwtPmdldE5vZGVOYW1lKCk7CisgICAgcmV0dXJuIGZJbXBsLT5nZXROb2RlTmFtZSgpLmNsb25lKCk7CiB9OwogCiAgIAogRE9NU3RyaW5nICBET01fTm9kZTo6Z2V0Tm9kZVZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZkltcGwtPmdldE5vZGVWYWx1ZSgpOworICAgIHJldHVybiBmSW1wbC0+Z2V0Tm9kZVZhbHVlKCkuY2xvbmUoKTsKIH07CiAKICAgCkBAIC0yODAsMTcgKzI4NywxNyBAQAogCiBET01TdHJpbmcgICAgICAgICBET01fTm9kZTo6Z2V0TmFtZXNwYWNlVVJJKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZkltcGwtPmdldE5hbWVzcGFjZVVSSSgpOworICAgIHJldHVybiBmSW1wbC0+Z2V0TmFtZXNwYWNlVVJJKCkuY2xvbmUoKTsKIH0KIAogRE9NU3RyaW5nICAgICAgICAgRE9NX05vZGU6OmdldFByZWZpeCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZJbXBsLT5nZXRQcmVmaXgoKTsKKyAgICByZXR1cm4gZkltcGwtPmdldFByZWZpeCgpLmNsb25lKCk7CiB9CiAKIERPTVN0cmluZyAgICAgICAgIERPTV9Ob2RlOjpnZXRMb2NhbE5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBmSW1wbC0+Z2V0TG9jYWxOYW1lKCk7CisgICAgcmV0dXJuIGZJbXBsLT5nZXRMb2NhbE5hbWUoKS5jbG9uZSgpOwogfQogCiB2b2lkICAgICAgICAgICAgICBET01fTm9kZTo6c2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmcHJlZml4KQpkaWZmIC0tZ2l0IGEvc3JjL2RvbS9ET01fUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcCBiL3NyYy9kb20vRE9NX1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKaW5kZXggOTQ1YzBmYy4uOTgxYzM2MCAxMDA2NDQKLS0tIGEvc3JjL2RvbS9ET01fUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAorKysgYi9zcmMvZG9tL0RPTV9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCkBAIC01Niw4ICs1NiwxNSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6MDMgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzEyLzAzIDAwOjExOjIzICBhbmR5aAorICogQWRkZWQgRE9NU3RyaW5nLmNsb25lKCkgdG8gbm9kZSBwYXJhbWV0ZXJzIGluIGFuZCBvdXQgb2YgdGhlIERPTSwKKyAqIHdoZXJlIHRoZXkgaGFkIGJlZW4gbWlzc2VkLgorICoKKyAqIERPTVN0cmluZzo6cmF3QnVmZmVyLCByZW1vdmVkIGluY29ycmVjdCBhc3N1bXB0aW9ucyBhYm91dCBpdAorICogYmVpbmcgbnVsbCB0ZXJtaW5hdGVkLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MDMgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjIxICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTExLDE5ICsxMTgsMTkgQEAKIAogRE9NU3RyaW5nIERPTV9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmdldFRhcmdldCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICgoUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbCAqKWZJbXBsKS0+Z2V0VGFyZ2V0KCk7CisgICAgcmV0dXJuICgoUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbCAqKWZJbXBsKS0+Z2V0VGFyZ2V0KCkuY2xvbmUoKTsKIH07CiAKIAogRE9NU3RyaW5nIERPTV9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmdldERhdGEoKSBjb25zdAogewotICAgIHJldHVybiAoKFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwgKilmSW1wbCktPmdldERhdGEoKTsKKyAgICByZXR1cm4gKChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsICopZkltcGwpLT5nZXREYXRhKCkuY2xvbmUoKTsKIH07CiAKIAogdm9pZCAgICAgIERPTV9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnNldERhdGEoY29uc3QgRE9NU3RyaW5nICZkYXRhKQogewotICAgICgoUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbCAqKWZJbXBsKS0+c2V0RGF0YShkYXRhKTsKKyAgICAoKFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwgKilmSW1wbCktPnNldERhdGEoZGF0YS5jbG9uZSgpKTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2RvbS9Eb2N1bWVudEZyYWdtZW50SW1wbC5jcHAgYi9zcmMvZG9tL0RvY3VtZW50RnJhZ21lbnRJbXBsLmNwcAppbmRleCAxZmIxNmIyLi4xYjBkMWE0IDEwMDY0NAotLS0gYS9zcmMvZG9tL0RvY3VtZW50RnJhZ21lbnRJbXBsLmNwcAorKysgYi9zcmMvZG9tL0RvY3VtZW50RnJhZ21lbnRJbXBsLmNwcApAQCAtNTYsOCArNTYsMTMgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA4OjQzICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8zMCAyMToxNjoyNSAgcm9kZGV5CisgKiBDaGFuZ2VzIHRvIGFkZCB0aGUgdHJhbnNjb2RlKCkgbWV0aG9kIHRvIERPTVN0cmluZywgd2hpY2ggcmV0dXJucyBhIHRyYW5zY29kZWQKKyAqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorICogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDMgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjIzICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTA3LDUgKzExMiw1IEBACiAKIHZvaWQgRG9jdW1lbnRGcmFnbWVudEltcGw6OnNldE5vZGVWYWx1ZShjb25zdCBET01TdHJpbmcgJngpCiB7Ci0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKIH07CmRpZmYgLS1naXQgYS9zcmMvZG9tL0RvY3VtZW50SW1wbC5jcHAgYi9zcmMvZG9tL0RvY3VtZW50SW1wbC5jcHAKaW5kZXggMTYyYTU0Yi4uZmIzNjgyNCAxMDA2NDQKLS0tIGEvc3JjL2RvbS9Eb2N1bWVudEltcGwuY3BwCisrKyBiL3NyYy9kb20vRG9jdW1lbnRJbXBsLmNwcApAQCAtNTYsOCArNTYsMTMgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA4OjQzICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8zMCAyMToxNjoyNSAgcm9kZGV5CisgKiBDaGFuZ2VzIHRvIGFkZCB0aGUgdHJhbnNjb2RlKCkgbWV0aG9kIHRvIERPTVN0cmluZywgd2hpY2ggcmV0dXJucyBhIHRyYW5zY29kZWQKKyAqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorICogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDMgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS41ICAxOTk5LzExLzA4IDIwOjQ0OjI0ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTE0LDcgKzExOSw3IEBACiA6IE5vZGVJbXBsKG51bGwsIG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSwgRE9NX05vZGU6OkRPQ1VNRU5UX05PREUsIGZhbHNlLCBudWxsKQogewogICAgIGlmIChkb2N0eXBlICE9IG51bGwgJiYgZG9jdHlwZS0+Z2V0T3duZXJEb2N1bWVudCgpICE9IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKAorICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogCSAgICBET01fRE9NRXhjZXB0aW9uOjpXUk9OR19ET0NVTUVOVF9FUlIsIG51bGwpOwogICAgIGRvY1R5cGU9ZG9jdHlwZTsKICAgICBpZiAoZG9jdHlwZSAhPSBudWxsKQpAQCAtMTU5LDcgKzE2NCw3IEBACiBBdHRySW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVBdHRyaWJ1dGUoY29uc3QgRE9NU3RyaW5nICZuYW0pCiB7CiAgICAgaWYoIWlzWE1MTmFtZShuYW0pKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlIsbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSLG51bGwpOwogICAgIHJldHVybiBuZXcgQXR0ckltcGwodGhpcyxuYW0pOwogfTsKIApAQCAtMTg4LDcgKzE5Myw3IEBACiBEb2N1bWVudFR5cGVJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZURvY3VtZW50VHlwZShjb25zdCBET01TdHJpbmcgJm5hbSkKIHsKICAgICBpZiAoIWlzWE1MTmFtZShuYW0pKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSLCBudWxsKTsKIAogICAgIHJldHVybiBuZXcgRG9jdW1lbnRUeXBlSW1wbCh0aGlzLCBuYW0pOwpAQCAtMTk5LDcgKzIwNCw3IEBACiBFbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVFbGVtZW50KGNvbnN0IERPTVN0cmluZyAmdGFnTmFtZSkKIHsKICAgICBpZighaXNYTUxOYW1lKHRhZ05hbWUpKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlIsbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSLG51bGwpOwogICAgIERPTVN0cmluZyBwb29sZWRUYWdOYW1lID0gdGhpcy0+bmFtZVBvb2wtPmdldFBvb2xlZFN0cmluZyh0YWdOYW1lKTsKICAgICByZXR1cm4gbmV3IEVsZW1lbnRJbXBsKHRoaXMscG9vbGVkVGFnTmFtZSk7CiB9OwpAQCAtMjE3LDcgKzIyMiw3IEBACiBFbnRpdHlJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUVudGl0eShjb25zdCBET01TdHJpbmcgJm5hbSkKIHsKICAgICBpZiAoIWlzWE1MTmFtZShuYW0pKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSLCBudWxsKTsKIAogICAgIHJldHVybiBuZXcgRW50aXR5SW1wbCh0aGlzLCBuYW0pOwpAQCAtMjI4LDcgKzIzMyw3IEBACiBFbnRpdHlSZWZlcmVuY2VJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUVudGl0eVJlZmVyZW5jZShjb25zdCBET01TdHJpbmcgJm5hbSkKIHsKICAgICBpZiAoIWlzWE1MTmFtZShuYW0pKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSLCBudWxsKTsKIAogICAgIHJldHVybiBuZXcgRW50aXR5UmVmZXJlbmNlSW1wbCh0aGlzLCBuYW0pOwpAQCAtMjM5LDcgKzI0NCw3IEBACiBOb3RhdGlvbkltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlTm90YXRpb24oY29uc3QgRE9NU3RyaW5nICZuYW0pCiB7CiAgICAgaWYgKCFpc1hNTE5hbWUobmFtKSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAgICAgICAgIERPTV9ET01FeGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUiwgbnVsbCk7CiAKICAgICByZXR1cm4gbmV3IE5vdGF0aW9uSW1wbCh0aGlzLCBuYW0pOwpAQCAtMjUxLDcgKzI1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBET01TdHJpbmcgJnRhcmdldCwgY29uc3QgRE9NU3RyaW5nICZkYXRhKQogewogICAgIGlmKCFpc1hNTE5hbWUodGFyZ2V0KSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSLG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUixudWxsKTsKICAgICByZXR1cm4gbmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwodGhpcyx0YXJnZXQsZGF0YSk7CiB9OwogCkBAIC00MjksNyArNDM0LDcgQEAKIAogICAgIGNhc2UgRE9NX05vZGU6OkRPQ1VNRU5UX05PREUgOiAvLyBEb2N1bWVudCBjYW4ndCBiZSBjaGlsZCBvZiBEb2N1bWVudAogICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5rbm93biBub2RlIHR5cGUKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SElFUkFSQ0hZX1JFUVVFU1RfRVJSLG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OkhJRVJBUkNIWV9SRVFVRVNUX0VSUixudWxsKTsKICAgICB9CiAKICAgICAvLyBJZiBkZWVwLCByZXBsaWNhdGUgYW5kIGF0dGFjaCB0aGUga2lkcy4KQEAgLTQ1Miw3ICs0NTcsNyBAQAogICAgICAgICB8fAogICAgICAgICAobmV3Q2hpbGQtPmlzRG9jdW1lbnRUeXBlSW1wbCgpICYmIGRvY1R5cGUhPW51bGwpCiAgICAgICAgICkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SElFUkFSQ0hZX1JFUVVFU1RfRVJSLG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OkhJRVJBUkNIWV9SRVFVRVNUX0VSUixudWxsKTsKIAogICAgIE5vZGVJbXBsOjppbnNlcnRCZWZvcmUobmV3Q2hpbGQscmVmQ2hpbGQpOwogCkBAIC01MTgsNyArNTIzLDcgQEAKIAogdm9pZCBEb2N1bWVudEltcGw6OnNldE5vZGVWYWx1ZShjb25zdCBET01TdHJpbmcgJngpCiB7Ci0gICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKKyAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiB9OwogCiAKQEAgLTU0Nyw3ICs1NTIsNyBAQAogICAgIGlmIChuYW1lc3BhY2VVUkkgPT0gbnVsbCB8fCBuYW1lc3BhY2VVUkkubGVuZ3RoKCkgPT0gMCkKIAlyZXR1cm4gY3JlYXRlRWxlbWVudChxdWFsaWZpZWROYW1lKTsKICAgICBpZighaXNYTUxOYW1lKHF1YWxpZmllZE5hbWUpKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlIsbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSLG51bGwpOwogICAgIC8vRE9NU3RyaW5nIHBvb2xlZFRhZ05hbWUgPSB0aGlzLT5uYW1lUG9vbC0+Z2V0UG9vbGVkU3RyaW5nKHF1YWxpZmllZE5hbWUpOwogICAgIHJldHVybiBuZXcgRWxlbWVudEltcGwodGhpcywgbmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lKTsKIH0KQEAgLTU1OSw3ICs1NjQsNyBAQAogICAgIGlmIChuYW1lc3BhY2VVUkkgPT0gbnVsbCB8fCBuYW1lc3BhY2VVUkkubGVuZ3RoKCkgPT0gMCkKIAlyZXR1cm4gY3JlYXRlQXR0cmlidXRlKHF1YWxpZmllZE5hbWUpOwogICAgIGlmKCFpc1hNTE5hbWUocXVhbGlmaWVkTmFtZSkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUixudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlIsbnVsbCk7CiAgICAgcmV0dXJuIG5ldyBBdHRySW1wbCh0aGlzLCBuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpOyAKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2RvbS9Eb2N1bWVudFR5cGVJbXBsLmNwcCBiL3NyYy9kb20vRG9jdW1lbnRUeXBlSW1wbC5jcHAKaW5kZXggNWM0NzYyMC4uNjExYTI5NiAxMDA2NDQKLS0tIGEvc3JjL2RvbS9Eb2N1bWVudFR5cGVJbXBsLmNwcAorKysgYi9zcmMvZG9tL0RvY3VtZW50VHlwZUltcGwuY3BwCkBAIC01Niw4ICs1NiwxMyBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6NDQgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIxOjE2OjI1ICByb2RkZXkKKyAqIENoYW5nZXMgdG8gYWRkIHRoZSB0cmFuc2NvZGUoKSBtZXRob2QgdG8gRE9NU3RyaW5nLCB3aGljaCByZXR1cm5zIGEgdHJhbnNjb2RlZAorICogdmVyc2lvbiAodG8gbG9jYWwgY29kZSBwYWdlKSBvZiB0aGUgRE9NIHN0cmluZyBjb250ZW50cy4gQW5kIEkgY2hhbmdlZCBhbGwgb2YgdGhlCisgKiBleGNlcHRpb24gJ3Rocm93IGJ5IHBvaW50ZXInIHRvICd0aHJvdyBieSB2YWx1ZScgc3R5bGUuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODo0NCAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDQ6MjQgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xNzgsNyArMTgzLDcgQEAKIAogdm9pZCBEb2N1bWVudFR5cGVJbXBsOjpzZXROb2RlVmFsdWUoY29uc3QgRE9NU3RyaW5nICZ2YWwpCiB7Ci0gICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKIH07CiAKZGlmZiAtLWdpdCBhL3NyYy9kb20vRWxlbWVudEltcGwuY3BwIGIvc3JjL2RvbS9FbGVtZW50SW1wbC5jcHAKaW5kZXggZWE2MmMxNy4uYzkxMzY5NiAxMDA2NDQKLS0tIGEvc3JjL2RvbS9FbGVtZW50SW1wbC5jcHAKKysrIGIvc3JjL2RvbS9FbGVtZW50SW1wbC5jcHAKQEAgLTU2LDggKzU2LDEzIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOTowOCAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMzAgMjE6MTY6MjUgIHJvZGRleQorICogQ2hhbmdlcyB0byBhZGQgdGhlIHRyYW5zY29kZSgpIG1ldGhvZCB0byBET01TdHJpbmcsIHdoaWNoIHJldHVybnMgYSB0cmFuc2NvZGVkCisgKiB2ZXJzaW9uICh0byBsb2NhbCBjb2RlIHBhZ2UpIG9mIHRoZSBET00gc3RyaW5nIGNvbnRlbnRzLiBBbmQgSSBjaGFuZ2VkIGFsbCBvZiB0aGUKKyAqIGV4Y2VwdGlvbiAndGhyb3cgYnkgcG9pbnRlcicgdG8gJ3Rocm93IGJ5IHZhbHVlJyBzdHlsZS4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjA4ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NDoyNiAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTIxMiw3ICsyMTcsNyBAQAogdm9pZCBFbGVtZW50SW1wbDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IERPTVN0cmluZyAmbmFtKQogewogICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAgICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgCiAgICAgQXR0ckltcGwgKmF0dCA9IChBdHRySW1wbCAqKSBhdHRyaWJ1dGVzLT5nZXROYW1lZEl0ZW0obmFtKTsKQEAgLTIzMSw3ICsyMzYsNyBAQAogQXR0ckltcGwgKkVsZW1lbnRJbXBsOjpyZW1vdmVBdHRyaWJ1dGVOb2RlKEF0dHJJbXBsICpvbGRBdHRyKQogewogICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAgICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgCiAgICAgQXR0ckltcGwgKmZvdW5kID0gKEF0dHJJbXBsICopIGF0dHJpYnV0ZXMtPmdldE5hbWVkSXRlbShvbGRBdHRyLT5nZXROYW1lKCkpOwpAQCAtMjQ2LDcgKzI1MSw3IEBACiAgICAgICAgIHJldHVybiBmb3VuZDsKICAgICB9CiAgICAgZWxzZQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCBudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCBudWxsKTsKIAlyZXR1cm4gbnVsbDsJLy8ganVzdCB0byBrZWVwIHRoZSBjb21waWxlciBoYXBweQogfTsKIApAQCAtMjU1LDcgKzI2MCw3IEBACiB2b2lkIEVsZW1lbnRJbXBsOjpzZXRBdHRyaWJ1dGUoY29uc3QgRE9NU3RyaW5nICZuYW0sIGNvbnN0IERPTVN0cmluZyAmdmFsKQogewogICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAgICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgCiAgICAgQXR0ckltcGwgKm5ld0F0dHIgPSAoQXR0ckltcGwgKikgb3duZXJEb2N1bWVudC0+Y3JlYXRlQXR0cmlidXRlKG5hbSk7CkBAIC0yNzUsMTEgKzI4MCwxMSBAQAogQXR0ckltcGwgKiBFbGVtZW50SW1wbDo6c2V0QXR0cmlidXRlTm9kZShBdHRySW1wbCAqbmV3QXR0cikKIHsKICAgICBpZiAocmVhZE9ubHkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKAorICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogICAgIAogICAgIGlmICghKG5ld0F0dHItPmlzQXR0ckltcGwoKSkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OldST05HX0RPQ1VNRU5UX0VSUiwgbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6V1JPTkdfRE9DVU1FTlRfRVJSLCBudWxsKTsKICAgICBBdHRySW1wbCAqb2xkQXR0ciA9IChBdHRySW1wbCAqKSBhdHRyaWJ1dGVzLT5nZXROYW1lZEl0ZW0obmV3QXR0ci0+Z2V0TmFtZSgpKTsKICAgICBpZiAob2xkQXR0cikKIAlvbGRBdHRyLT5zZXRPd25lckVsZW1lbnQobnVsbCk7CSAgICAvL0RPTSBMZXZlbCAyCkBAIC0zMDIsNyArMzA3LDcgQEAKIAogdm9pZCBFbGVtZW50SW1wbDo6c2V0Tm9kZVZhbHVlKGNvbnN0IERPTVN0cmluZyAmeCkKIHsKLSAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOworICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKIH07CiAKIApAQCAtMzM0LDcgKzMzOSw3IEBACiAJcmV0dXJuOwogICAgIH0KICAgICBpZiAocmVhZE9ubHkpCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKAorICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogCSAgICBET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogICAgIAogICAgIEF0dHJJbXBsICpuZXdBdHRyID0gKEF0dHJJbXBsICopIG93bmVyRG9jdW1lbnQtPmNyZWF0ZUF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSk7CkBAIC0zNTgsNyArMzYzLDcgQEAKIAlyZXR1cm47CiAgICAgfQogICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAJICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgCiAgICAgQXR0ckltcGwgKmF0dCA9IChBdHRySW1wbCAqKSBhdHRyaWJ1dGVzLT5nZXROYW1lZEl0ZW1OUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSk7CkBAIC0zODYsMTEgKzM5MSwxMSBAQAogICAgIGlmIChuZXdBdHRyICYmIG5ld0F0dHIgLT5nZXROYW1lc3BhY2VVUkkoKSA9PSBudWxsKQogCXJldHVybiBzZXRBdHRyaWJ1dGVOb2RlKG5ld0F0dHIpOwogICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAJICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgCiAgICAgaWYgKG5ld0F0dHIgLT4gZ2V0T3duZXJEb2N1bWVudCgpICE9IHRoaXMgLT4gZ2V0T3duZXJEb2N1bWVudCgpKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpXUk9OR19ET0NVTUVOVF9FUlIsIG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OldST05HX0RPQ1VNRU5UX0VSUiwgbnVsbCk7CiAgICAgQXR0ckltcGwgKm9sZEF0dHIgPSAoQXR0ckltcGwgKikgYXR0cmlidXRlcy0+Z2V0TmFtZWRJdGVtTlMoCiAJbmV3QXR0ci0+Z2V0TmFtZXNwYWNlVVJJKCksIG5ld0F0dHItPmdldExvY2FsTmFtZSgpKTsKICAgICBpZiAob2xkQXR0cikKZGlmZiAtLWdpdCBhL3NyYy9kb20vRW50aXR5SW1wbC5jcHAgYi9zcmMvZG9tL0VudGl0eUltcGwuY3BwCmluZGV4IDRhYjA1NDguLmNmNTFhMWMgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vRW50aXR5SW1wbC5jcHAKKysrIGIvc3JjL2RvbS9FbnRpdHlJbXBsLmNwcApAQCAtNTYsOCArNTYsMTMgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjA4ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8zMCAyMToxNjoyNSAgcm9kZGV5CisgKiBDaGFuZ2VzIHRvIGFkZCB0aGUgdHJhbnNjb2RlKCkgbWV0aG9kIHRvIERPTVN0cmluZywgd2hpY2ggcmV0dXJucyBhIHRyYW5zY29kZWQKKyAqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorICogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MDggIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjI2ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTE0LDcgKzExOSw3IEBACiAKIHZvaWQgRW50aXR5SW1wbDo6c2V0Tm9kZVZhbHVlKGNvbnN0IERPTVN0cmluZyAmYXJnKQogewotICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CisgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogfTsKIAogCmRpZmYgLS1naXQgYS9zcmMvZG9tL0VudGl0eVJlZmVyZW5jZUltcGwuY3BwIGIvc3JjL2RvbS9FbnRpdHlSZWZlcmVuY2VJbXBsLmNwcAppbmRleCBkNmE0NjkxLi4xOGQ2NzY1IDEwMDY0NAotLS0gYS9zcmMvZG9tL0VudGl0eVJlZmVyZW5jZUltcGwuY3BwCisrKyBiL3NyYy9kb20vRW50aXR5UmVmZXJlbmNlSW1wbC5jcHAKQEAgLTU2LDggKzU2LDEzIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOTowOSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMzAgMjE6MTY6MjUgIHJvZGRleQorICogQ2hhbmdlcyB0byBhZGQgdGhlIHRyYW5zY29kZSgpIG1ldGhvZCB0byBET01TdHJpbmcsIHdoaWNoIHJldHVybnMgYSB0cmFuc2NvZGVkCisgKiB2ZXJzaW9uICh0byBsb2NhbCBjb2RlIHBhZ2UpIG9mIHRoZSBET00gc3RyaW5nIGNvbnRlbnRzLiBBbmQgSSBjaGFuZ2VkIGFsbCBvZiB0aGUKKyAqIGV4Y2VwdGlvbiAndGhyb3cgYnkgcG9pbnRlcicgdG8gJ3Rocm93IGJ5IHZhbHVlJyBzdHlsZS4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjA5ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NDoyNyAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTI3NCw3ICsyNzksNyBAQAogKi8KIHZvaWQgRW50aXR5UmVmZXJlbmNlSW1wbDo6c2V0Tm9kZVZhbHVlKGNvbnN0IERPTVN0cmluZyAmeCkKIHsKLSAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOworICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKIH0KIAogCkBAIC0yODksNyArMjk0LDcgQEAKIHZvaWQgRW50aXR5UmVmZXJlbmNlSW1wbDo6c2V0UmVhZE9ubHkoYm9vbCByZWFkT25sLGJvb2wgZGVlcCkKIHsKICAgICBpZihyZWFkT25sPT1mYWxzZSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUixudWxsKTsKICAgICBOb2RlSW1wbDo6c2V0UmVhZE9ubHkocmVhZE9ubCxkZWVwKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2RvbS9NYWtlZmlsZS5pbiBiL3NyYy9kb20vTWFrZWZpbGUuaW4KaW5kZXggYzFkNjQ2MC4uNTJlNjE1ZiAxMDA2NDQKLS0tIGEvc3JjL2RvbS9NYWtlZmlsZS5pbgorKysgYi9zcmMvZG9tL01ha2VmaWxlLmluCkBAIC01NSw4ICs1NSwxMiBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjExICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDE6NTk6NDMgIHJhaHVsagorIyBDb2RlIG5vdyB3b3JrcyB1bmRlciBIUFVYIDExLiBUZXN0ZWQgaW5tZW1vcnkgbWVzc2FnZSBsb2FkZXIuCitSZXZhbXBlZCBtYWtlZmlsZXMuIEJ1aWxkcyB3aXRoIGJvdGggRENFIHRocmVhZHMgYXMgd2VsbCBhcyBwdGhyZWFkIGxpYnJhcmllcy4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowOToxMSAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMDggMjA6NDQ6MjggIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTY0LDcgKzY4LDggQEAKICMKIAogUExBVEZPUk0gPSBAcGxhdGZvcm1ACi1DT01QSUxFUiA9IEBjb21waWxlckAKK0NDICA9IEBjY0AKK0NYWCA9IEBjeHhACiBDWFhGTEFHUyA9IEBjeHhmbGFnc0AKIENGTEFHUyA9IEBjZmxhZ3NACiBQUkVGSVggPSBAcHJlZml4QApAQCAtMjExLDkgKzIxNiw2IEBACiAJQGZvciBmaWxlIGluICQoRE9NX0NQUF9QVUJIRUFERVJTKTsgZG8gXAogCXJtIC1mICQoWE1MX0lOQ19ESVIpLyQoTU9EVUxFKS8kJGZpbGU7IFwKIAlkb25lCi0JQGZvciBmaWxlIGluICQoRE9NX0NfRklMRVMpOyBkbyBcCi0Jcm0gLWYgJChYTUxfSU5DX0RJUikvJChNT0RVTEUpLyQkZmlsZTsgXAotCWRvbmUKIAlAZWNobyAiUmVtb3ZpbmcgYWxsICQoTU9EVUxFKSBvYmplY3QgZmlsZXMgLi4uIgogCUBmb3IgZmlsZSBpbiAkKERPTV9DUFBfT0JKRUNUUyk7IGRvIFwKIAlybSAtZiAkKEFMTF9PQkpFQ1RTX0RJUikvJCRmaWxlOyBcCmRpZmYgLS1naXQgYS9zcmMvZG9tL05hbWVkTm9kZU1hcEltcGwuY3BwIGIvc3JjL2RvbS9OYW1lZE5vZGVNYXBJbXBsLmNwcAppbmRleCBkNmQ1ZTdiLi43ZDk2ZWY0IDEwMDY0NAotLS0gYS9zcmMvZG9tL05hbWVkTm9kZU1hcEltcGwuY3BwCisrKyBiL3NyYy9kb20vTmFtZWROb2RlTWFwSW1wbC5jcHAKQEAgLTU2LDggKzU2LDEzIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOToxMSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMzAgMjE6MTY6MjUgIHJvZGRleQorICogQ2hhbmdlcyB0byBhZGQgdGhlIHRyYW5zY29kZSgpIG1ldGhvZCB0byBET01TdHJpbmcsIHdoaWNoIHJldHVybnMgYSB0cmFuc2NvZGVkCisgKiB2ZXJzaW9uICh0byBsb2NhbCBjb2RlIHBhZ2UpIG9mIHRoZSBET00gc3RyaW5nIGNvbnRlbnRzLiBBbmQgSSBjaGFuZ2VkIGFsbCBvZiB0aGUKKyAqIGV4Y2VwdGlvbiAndGhyb3cgYnkgcG9pbnRlcicgdG8gJ3Rocm93IGJ5IHZhbHVlJyBzdHlsZS4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjExICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NDoyOSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTE3NSw3ICsxODAsNyBAQAogICAgICAgICB3aGlsZShmaXJzdDw9bGFzdCkKICAgICAgICAgewogICAgICAgICAgICAgaT0oZmlyc3QrbGFzdCkvMjsKLSAgICAgICAgICAgIGludCB0ZXN0ID0gbmFtZS5zdHJjbXAobm9kZXMtPmVsZW1lbnRBdChpKS0+Z2V0Tm9kZU5hbWUoKSk7CisgICAgICAgICAgICBpbnQgdGVzdCA9IG5hbWUuY29tcGFyZVN0cmluZyhub2Rlcy0+ZWxlbWVudEF0KGkpLT5nZXROb2RlTmFtZSgpKTsKICAgICAgICAgICAgIGlmKHRlc3Q9PTApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGk7IC8vIE5hbWUgZm91bmQKICAgICAgICAgICAgIGVsc2UgaWYodGVzdDwwKQpAQCAtMjU5LDcgKzI2NCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIG5ub2RlID0gKEF0dHJJbXBsICopIG5vZGVzLT5lbGVtZW50QXQobik7CiAgICAgICAgICAgICBkbm9kZSA9IChBdHRySW1wbCAqKSBkZWZhdWx0cy0+bm9kZXMtPmVsZW1lbnRBdChkKTsKLSAgICAgICAgICAgIGludCB0ZXN0ID0gbm5vZGUtPmdldE5vZGVOYW1lKCkuc3RyY21wKCBkbm9kZS0+Z2V0Tm9kZU5hbWUoKSk7CisgICAgICAgICAgICBpbnQgdGVzdCA9IG5ub2RlLT5nZXROb2RlTmFtZSgpLmNvbXBhcmVTdHJpbmcoIGRub2RlLT5nZXROb2RlTmFtZSgpKTsKICAgICAgICAgICAgIC8vIG5ub2RlLT5nZXROb2RlTmFtZSgpLT5jb21wYXJlVG8oZG5vZGUtPmdldE5vZGVOYW1lKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBTYW1lIG5hbWUgYW5kIGEgZGVmYXVsdCAtLSBtYWtlIHN1cmUgc2FtZSB2YWx1ZQpAQCAtMzEzLDcgKzMxOCw3IEBACiB7CiAgICAgaW50IGk9ZmluZE5hbWVQb2ludChuYW1lKTsKICAgICBpZihpPDApCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PVF9GT1VORF9FUlIsIG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PVF9GT1VORF9FUlIsIG51bGwpOwogICAgIGVsc2UKICAgICB7CiAgICAgICAgIE5vZGVJbXBsICogbiA9IChOb2RlSW1wbCAqKSAobm9kZXMtPmVsZW1lbnRBdChpKSk7CkBAIC0zNTQsNyArMzU5LDcgQEAKICAgICAgIHJldHVybiBuOwogICAgICAgfQogICAgICAgfQotICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbkltcGwoRE9NRXhjZXB0aW9uLk5PVF9GT1VORF9FUlIsIG51bGwpOworICAgICAgdGhyb3cgRE9NRXhjZXB0aW9uSW1wbChET01FeGNlcHRpb24uTk9UX0ZPVU5EX0VSUiwgbnVsbCk7CiAgICAgKioqKioqKioqKioqKiovIAogCXJldHVybiBudWxsOwkvLyBqdXN0IHRvIGtlZXAgdGhlIGNvbXBpbGVyIGhhcHB5CiB9OwpAQCAtMzc5LDEwICszODQsMTAgQEAKIE5vZGVJbXBsICogTmFtZWROb2RlTWFwSW1wbDo6c2V0TmFtZWRJdGVtKE5vZGVJbXBsICogYXJnKQogewogICAgIGlmKGFyZy0+Z2V0T3duZXJEb2N1bWVudCgpIT1vd25lckRvYykKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6V1JPTkdfRE9DVU1FTlRfRVJSLG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OldST05HX0RPQ1VNRU5UX0VSUixudWxsKTsKICAgICAKICAgICBpZiAoYXJnLT5vd25lZCkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5VU0VfQVRUUklCVVRFX0VSUixudWxsKTsKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlVTRV9BVFRSSUJVVEVfRVJSLG51bGwpOwogICAgIAogICAgIGFyZy0+b3duZWQgPSB0cnVlOwogICAgIGludCBpPWZpbmROYW1lUG9pbnQoYXJnLT5nZXROb2RlTmFtZSgpKTsKQEAgLTQ5NCwxMyArNDk5LDEzIEBACiAJY29uc3QgRE9NU3RyaW5nICZuYW1lKQogewogICAgIGlmIChyZWFkT25seSkKLQl0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKwl0aHJvdyBET01fRE9NRXhjZXB0aW9uKAogCSAgICBET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogICAgIGlmIChuYW1lc3BhY2VVUkkgPT0gbnVsbCB8fCBuYW1lc3BhY2VVUkkubGVuZ3RoKCkgPT0gMCkKIAlyZXR1cm4gcmVtb3ZlTmFtZWRJdGVtKG5hbWUpOwogICAgIGludCBpID0gZmluZE5hbWVQb2ludChuYW1lc3BhY2VVUkksIG5hbWUpOwogICAgIGlmIChpIDwgMCkKLQl0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCBudWxsKTsKKwl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PVF9GT1VORF9FUlIsIG51bGwpOwogICAgIE5vZGVJbXBsICogbiA9IG5vZGVzIC0+IGVsZW1lbnRBdChpKTsgICAvL25vZGUgdG8gYmUgcmVtb3ZlZCBvciByZXBsYWNlZAogICAgIC8vZmluZCBpZiBuIGhhcyBhIGRlZmF1bHQgdmFsdWUgZGVmaW5lZCBpbiBEVEQsIGlmIHNvIHJlcGxhY2UgbiBpbiBub2RlcwogICAgIC8vYnkgaXRzIGNvcnJlc3BvbmRpbmcgZGVmYXVsdCB2YWx1ZSBub2RlLCBvdGhlcndpc2UgcmVtb3ZlIG4gZnJvbSBub2RlcwpkaWZmIC0tZ2l0IGEvc3JjL2RvbS9Ob2RlRmlsdGVySW1wbC5jcHAgYi9zcmMvZG9tL05vZGVGaWx0ZXJJbXBsLmNwcAppbmRleCA4NTk5MTVjLi42YmRlMmIyIDEwMDY0NAotLS0gYS9zcmMvZG9tL05vZGVGaWx0ZXJJbXBsLmNwcAorKysgYi9zcmMvZG9tL05vZGVGaWx0ZXJJbXBsLmNwcApAQCAtNTYsOCArNTYsMTEgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjEyICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMCAwMDo1NjozOSAgcmFodWxqCisgKiBTb3VyY2UgZmlsZXMgbXVzdCBlbmQgd2l0aCBhbiB1bi1lc2NhcGVkIG5ld2xpbmUuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowOToxMiAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDQ6MjkgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC05Miw0ICs5NSw0IEBACiB2b2lkIE5vZGVGaWx0ZXJJbXBsOjp1bnJlZmVyZW5jZWQgKCkKIHsKICAgICBkZWxldGUgdGhpczsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9zcmMvZG9tL05vZGVJbXBsLmNwcCBiL3NyYy9kb20vTm9kZUltcGwuY3BwCmluZGV4IGUxYWQ0MGQuLjBjY2U1OGMgMTAwNjQ0Ci0tLSBhL3NyYy9kb20vTm9kZUltcGwuY3BwCisrKyBiL3NyYy9kb20vTm9kZUltcGwuY3BwCkBAIC0xLDY4ICsxLDgwIEBACiAvKgotICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotICogCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTkgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSAqIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIAotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0gKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0gKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSAqICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotICogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotICogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSAqIAotICogNC4gVGhlIG5hbWVzICJYZXJjZXMiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSAqICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotICogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlXEBhcGFjaGUub3JnLgotICogCi0gKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIiwKLSAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogCi0gKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotICogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kIHdhcwotICogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDE5OTksIEludGVybmF0aW9uYWwKLSAqIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuLCBodHRwOi8vd3d3LmlibS5jb20gLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24KLSAqIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQotICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotICovCisqIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKKyogCisqIENvcHlyaWdodCAoYykgMTk5OSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAorKiByZXNlcnZlZC4KKyogCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogCisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisqIAorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKiAgICBkaXN0cmlidXRpb24uCisqIAorKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKKyogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAorKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKKyogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisqICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKKyogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KKyogCisqIDQuIFRoZSBuYW1lcyAiWGVyY2VzIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0CisqICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCisqICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZVxAYXBhY2hlLm9yZy4KKyogCisqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiLAorKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyogICAgcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqIAorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECisqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKKyogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKiBTVUNIIERBTUFHRS4KKyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogCisqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZCB3YXMKKyogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDE5OTksIEludGVybmF0aW9uYWwKKyogQnVzaW5lc3MgTWFjaGluZXMsIEluYy4sIGh0dHA6Ly93d3cuaWJtLmNvbSAuICBGb3IgbW9yZSBpbmZvcm1hdGlvbgorKiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKKyogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgorKi8KIAogLyoqCi0gKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjEzICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KLSAqCi0gKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDQ6MjkgIHJhaHVsCi0gKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCi0gKgotICovCisqICRMb2ckCisqIFJldmlzaW9uIDEuMyAgMTk5OS8xMi8wMyAwMDoxMToyMyAgYW5keWgKKyogQWRkZWQgRE9NU3RyaW5nLmNsb25lKCkgdG8gbm9kZSBwYXJhbWV0ZXJzIGluIGFuZCBvdXQgb2YgdGhlIERPTSwKKyogd2hlcmUgdGhleSBoYWQgYmVlbiBtaXNzZWQuCisqCisqIERPTVN0cmluZzo6cmF3QnVmZmVyLCByZW1vdmVkIGluY29ycmVjdCBhc3N1bXB0aW9ucyBhYm91dCBpdAorKiBiZWluZyBudWxsIHRlcm1pbmF0ZWQuCisqCisqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8zMCAyMToxNjoyNSAgcm9kZGV5CisqIENoYW5nZXMgdG8gYWRkIHRoZSB0cmFuc2NvZGUoKSBtZXRob2QgdG8gRE9NU3RyaW5nLCB3aGljaCByZXR1cm5zIGEgdHJhbnNjb2RlZAorKiB2ZXJzaW9uICh0byBsb2NhbCBjb2RlIHBhZ2UpIG9mIHRoZSBET00gc3RyaW5nIGNvbnRlbnRzLiBBbmQgSSBjaGFuZ2VkIGFsbCBvZiB0aGUKKyogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorKgorKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjEzICB0d2wKKyogSW5pdGlhbCBjaGVja2luCisqCisqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NDoyOSAgcmFodWwKKyogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgorKgorKi8KIAogCiAjaW5jbHVkZSAiTm9kZUltcGwuaHBwIgpAQCAtODEsMTIgKzkzLDEyIEBACiAgICAgLy8gRG8gd2Ugd2FudCB0byBhZGQgaXNMZWFmTm9kZSB0byB0aGlzPyBIb3cgYWJvdXQgaW5pdGlhbCB2YWx1ZT8KICAgICB0aGlzLT5vd25lckRvY3VtZW50PW93bmVyRG9jOwogICAgIHRoaXMtPm5hbWVzcGFjZVVSST1udWxsOwkvL0RPTSBMZXZlbCAyCi0gICAgdGhpcy0+cHJlZml4PW51bGw7CQkvL0RPTSBMZXZlbCAyCi0gICAgdGhpcy0+bG9jYWxOYW1lPW5hbTsJLy9ET00gTGV2ZWwgMgotICAgIHRoaXMtPm5hbWU9bmFtOworICAgIHRoaXMtPnByZWZpeD1udWxsOwkJCS8vRE9NIExldmVsIDIKKyAgICB0aGlzLT5sb2NhbE5hbWU9bnVsbDsJCS8vRE9NIExldmVsIDIKKyAgICB0aGlzLT5uYW1lPW5hbS5jbG9uZSgpOwogICAgIHRoaXMtPm5UeXBlPW5UeXA7CiAgICAgdGhpcy0+aXNMZWFmTm9kZT1pc0xlYWZOb2Q7Ci0gICAgdGhpcy0+dmFsdWU9aW5pdFZhbHVlOworICAgIHRoaXMtPnZhbHVlPWluaXRWYWx1ZS5jbG9uZSgpOwogICAgIAogICAgIHRoaXMtPmNoYW5nZXMgPSAwOwogICAgIHRoaXMtPnVzZXJEYXRhID0gbnVsbDsKQEAgLTEwNiwyNSArMTE4LDQyIEBACiAKIC8vSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgogTm9kZUltcGw6Ok5vZGVJbXBsKERvY3VtZW50SW1wbCAqb3duZXJEb2MsCi0JY29uc3QgRE9NU3RyaW5nICZuYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmcXVhbGlmaWVkTmFtZSwgc2hvcnQgblR5cCwKLSAgICAgICAgYm9vbCBpc0xlYWZOb2QsIGNvbnN0IERPTVN0cmluZyAmaW5pdFZhbHVlKQorICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcgJnF1YWxpZmllZE5hbWUsIHNob3J0IG5UeXAsCisgICAgICAgICAgICAgICAgICAgYm9vbCBpc0xlYWZOb2QsIGNvbnN0IERPTVN0cmluZyAmaW5pdFZhbHVlKQogewogICAgIC8vIERvIHdlIHdhbnQgdG8gYWRkIGlzTGVhZk5vZGUgdG8gdGhpcz8gSG93IGFib3V0IGluaXRpYWwgdmFsdWU/CiAgICAgdGhpcy0+b3duZXJEb2N1bWVudD1vd25lckRvYzsKLSAgICB0aGlzLT5uYW1lc3BhY2VVUkk9bmFtZXNwYWNlVVJJOwotICAgIGludCBpbmRleCA9IFhNTFN0cmluZzo6aW5kZXhPZihxdWFsaWZpZWROYW1lLnJhd0J1ZmZlcigpLCBjaENvbG9uKTsKLSAgICBpZiAoaW5kZXggPj0gMCkgewotCXRoaXMtPnByZWZpeCA9IHF1YWxpZmllZE5hbWUuc3Vic3RyaW5nRGF0YSgwLCBpbmRleCk7Ci0JaW50IGxlbiA9IHF1YWxpZmllZE5hbWUubGVuZ3RoKCkgLSBpbmRleCAtIDE7Ci0JdGhpcy0+bG9jYWxOYW1lID0gcXVhbGlmaWVkTmFtZS5zdWJzdHJpbmdEYXRhKGluZGV4KzEsIGxlbik7Ci0gICAgfSBlbHNlIHsKLQl0aGlzLT5wcmVmaXggPSBudWxsOwotCXRoaXMtPmxvY2FsTmFtZSA9IHF1YWxpZmllZE5hbWU7CisgICAgdGhpcy0+bmFtZT1xdWFsaWZpZWROYW1lLmNsb25lKCk7CisgICAgCisgICAgdGhpcy0+bmFtZXNwYWNlVVJJPW5hbWVzcGFjZVVSSS5jbG9uZSgpOworCisgICAgLy8gTG9vayBpbiB0aGUgcXVhbGlmaWVkIG5hbWUgcGFyYW1ldGVyIGZvciBhIGNvbG9uLgorICAgIC8vICBJZiBmb3VuZCwgYnJlYWsgb3V0IHRoZSBwcmVmaXggYW5kIGxvY2FsIG5hbWUgcGFydHMuCisgICAgLy8gICAgKGJ1ZzogIGNoZWNrIGZvciB3ZWxsIGZvcm1lZCBuYW1lcy4pCisgICAgWE1MQ2ggICpxTmFtZVAgICA9IHRoaXMtPm5hbWUucmF3QnVmZmVyKCk7CisgICAgaW50ICAgIHFOYW1lTGVuID0gdGhpcy0+bmFtZS5sZW5ndGgoKTsKKyAgICBpbnQgaW5kZXg7CisgICAgZm9yIChpbmRleD0wOyBpbmRleDxxTmFtZUxlbjsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmIChxTmFtZVBbaW5kZXhdID09IGNoQ29sb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMtPnByZWZpeCA9IHRoaXMtPm5hbWUuc3Vic3RyaW5nRGF0YSgwLCBpbmRleCk7CisgICAgICAgICAgICBpbnQgbGVuID0gdGhpcy0+bmFtZS5sZW5ndGgoKSAtIGluZGV4IC0gMTsKKyAgICAgICAgICAgIHRoaXMtPmxvY2FsTmFtZSA9IHRoaXMtPm5hbWUuc3Vic3RyaW5nRGF0YShpbmRleCsxLCBsZW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9Ci0gICAgdGhpcy0+bmFtZT1xdWFsaWZpZWROYW1lOworCisgICAgaWYgKHRoaXMtPnByZWZpeCA9PSBudWxsKQorICAgIHsKKyAgICAgICAgLy8gVGhlIHNlYXJjaCBmb3IgYSBjb2xvbiwgYWJvdmUsIGluIHRoZSBxdWFsaWZpZWQgbmFtZSBmYWlsZWQuCisgICAgICAgIC8vIHRoZSBsb2NhbG5hbWUgaXMgdGhlIHdob2xlIG5hbWUsIGFuZCB0aGVyZSBpcyBubyBwcmVmaXggcGFydC4KKyAgICAgICAgdGhpcy0+bG9jYWxOYW1lID0gdGhpcy0+bmFtZTsKKyAgICB9CisKICAgICB0aGlzLT5uVHlwZT1uVHlwOwogICAgIHRoaXMtPmlzTGVhZk5vZGU9aXNMZWFmTm9kOwotICAgIHRoaXMtPnZhbHVlPWluaXRWYWx1ZTsKKyAgICB0aGlzLT52YWx1ZT1pbml0VmFsdWUuY2xvbmUoKTsKICAgICAKICAgICB0aGlzLT5jaGFuZ2VzID0gMDsKICAgICB0aGlzLT51c2VyRGF0YSA9IG51bGw7CkBAIC0xNDUsOCArMTc0LDggQEAKIE5vZGVJbXBsOjpOb2RlSW1wbChjb25zdCBOb2RlSW1wbCAmb3RoZXIsIGJvb2wgZGVlcCkgewogICAgIHRoaXMtPm5UeXBlID0gb3RoZXIublR5cGU7CiAgICAgdGhpcy0+bmFtZXNwYWNlVVJJID0gb3RoZXIubmFtZXNwYWNlVVJJLmNsb25lKCk7CS8vRE9NIExldmVsIDIKLSAgICB0aGlzLT5wcmVmaXggPSBvdGhlci5wcmVmaXguY2xvbmUoKTsJCS8vRE9NIExldmVsIDIKLSAgICB0aGlzLT5sb2NhbE5hbWUgPSBvdGhlci5sb2NhbE5hbWUuY2xvbmUoKTsJCS8vRE9NIExldmVsIDIKKyAgICB0aGlzLT5wcmVmaXggPSBvdGhlci5wcmVmaXguY2xvbmUoKTsgICAgICAgICAgICAgICAgLy9ET00gTGV2ZWwgMgorICAgIHRoaXMtPmxvY2FsTmFtZSA9IG90aGVyLmxvY2FsTmFtZS5jbG9uZSgpOyAgICAgICAgICAvL0RPTSBMZXZlbCAyCiAgICAgdGhpcy0+bmFtZSAgPSBvdGhlci5uYW1lLmNsb25lKCk7CiAgICAgdGhpcy0+dmFsdWUgPSBvdGhlci52YWx1ZS5jbG9uZSgpOwogICAgIHRoaXMtPmlzTGVhZk5vZGUgPSBvdGhlci5pc0xlYWZOb2RlOwpAQCAtMTU5LDcgKzE4OCw3IEBACiAgICAgdGhpcy0+bm9kZVJlZkNvdW50ID0gMDsKICAgICBOb2RlSW1wbDo6Z0xpdmVOb2RlSW1wbHMrKzsgCiAgICAgTm9kZUltcGw6OmdUb3RhbE5vZGVJbXBscysrOwotCisgICAgCiAgICAgCiAgICAgLy8gTmVlZCB0byBicmVhayB0aGUgYXNzb2NpYXRpb24gdy8gb3JpZ2luYWwga2lkcwogICAgIHRoaXMtPnByZXZpb3VzU2libGluZyA9IG51bGw7CkBAIC0xODIsMTEgKzIxMSwxMSBAQAogCiBpbnQgIE5vZGVJbXBsOjpnTGl2ZU5vZGVJbXBscyA9IDA7ICAgICAgICAgLy8gQ291bnRlcnMgZm9yIGRlYnVnICYgdHVuaW5nLgogaW50ICBOb2RlSW1wbDo6Z1RvdGFsTm9kZUltcGxzPSAwOwotICAgIAorCiAKIAogTm9kZUltcGw6On5Ob2RlSW1wbCgpIHsKLSAgICAgTm9kZUltcGw6OmdMaXZlTm9kZUltcGxzLS07CisgICAgTm9kZUltcGw6OmdMaXZlTm9kZUltcGxzLS07CiB9OwogCiAKQEAgLTM0Niw3ICszNzUsNyBAQAogCiBOb2RlSW1wbCAqTm9kZUltcGw6Omluc2VydEJlZm9yZShOb2RlSW1wbCAqbmV3Q2hpbGQsIE5vZGVJbXBsICpyZWZDaGlsZCkgewogICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAgICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7CiAgICAgCiAgICAgaWYoICAhKG5ld0NoaWxkLT5nZXRPd25lckRvY3VtZW50KCkgPT0gb3duZXJEb2N1bWVudCAgIHx8CkBAIC0zNTQsNyArMzgzLDcgQEAKICAgICAgICAgKCB0aGlzLT5pc0RvY3VtZW50SW1wbCgpICYmCiAgICAgICAgIG5ld0NoaWxkLT5nZXRPd25lckRvY3VtZW50KCkgPT0gKERvY3VtZW50SW1wbCAqKXRoaXMgKSAKICAgICAgICAgKSApCi0gICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OldST05HX0RPQ1VNRU5UX0VSUiwgbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6V1JPTkdfRE9DVU1FTlRfRVJSLCBudWxsKTsKICAgICAKICAgICAvLyBDb252ZXJ0IHRvIGludGVybmFsIHR5cGUsIHRvIGF2b2lkIHJlcGVhdGVkIGNhc3RpbmcgIAogICAgIC8vICAgKGxlZnQgb3ZlciBmcm9tIHRoZSBvcmlnaW5hbCBKYXZhLiAgTWVhbmluZ2xlc3MgaW4gdGhpcyB2ZXJzaW9uLikKQEAgLTM2NSwxMSArMzk0LDExIEBACiAgICAgZm9yKE5vZGVJbXBsICphPXRoaXMtPnBhcmVudE5vZGU7dHJlZVNhZmUgJiYgYSE9bnVsbDthPWEtPnBhcmVudE5vZGUpCiAgICAgICAgIHRyZWVTYWZlPShuZXdJbnRlcm5hbCE9YSk7CiAgICAgaWYoIXRyZWVTYWZlKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpISUVSQVJDSFlfUkVRVUVTVF9FUlIsbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SElFUkFSQ0hZX1JFUVVFU1RfRVJSLG51bGwpOwogICAgIAogICAgIC8vIHJlZkNoaWxkIG11c3QgaW4gZmFjdCBiZSBhIGNoaWxkIG9mIHRoaXMgbm9kZSAob3IgbnVsbCkKICAgICBpZihyZWZDaGlsZCE9bnVsbCAmJiByZWZDaGlsZC0+cGFyZW50Tm9kZSAhPSB0aGlzKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLG51bGwpOworICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PVF9GT1VORF9FUlIsbnVsbCk7CiAgICAgCiAgICAgaWYgKG5ld0ludGVybmFsLT5pc0RvY3VtZW50RnJhZ21lbnRJbXBsKCkpCiAgICAgewpAQCAtMzk1LDE0ICs0MjQsMTQgQEAKICAgICAgICAga2lkPWtpZC0+Z2V0TmV4dFNpYmxpbmcoKSkKICAgICAgICAgewogICAgICAgICAgICAgaWYoIWlzS2lkT0sodGhpcyxraWQpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OkhJRVJBUkNIWV9SRVFVRVNUX0VSUixudWxsKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OkhJRVJBUkNIWV9SRVFVRVNUX0VSUixudWxsKTsKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgIHdoaWxlKG5ld0ludGVybmFsLT5oYXNDaGlsZE5vZGVzKCkpICAgICAvLyBNb3ZlCiAgICAgICAgICAgICBpbnNlcnRCZWZvcmUobmV3SW50ZXJuYWwtPmdldEZpcnN0Q2hpbGQoKSxyZWZDaGlsZCk7CiAgICAgfQogICAgIAogICAgIGVsc2UgaWYoIWlzS2lkT0sodGhpcywgbmV3SW50ZXJuYWwpKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpISUVSQVJDSFlfUkVRVUVTVF9FUlIsbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SElFUkFSQ0hZX1JFUVVFU1RfRVJSLG51bGwpOwogICAgIAogICAgIGVsc2UKICAgICB7CkBAIC01MDMsMTcgKzUzMiwxNyBAQAogICB7CiAgICAgICBSZWZDb3VudGVkSW1wbDo6YWRkUmVmKHRoaXMtPm93bmVyRG9jdW1lbnQpOwogICB9OwotCi0KKyAgCisgIAogICAKICAgTm9kZUltcGwgKk5vZGVJbXBsOjpyZW1vdmVDaGlsZChOb2RlSW1wbCAqb2xkQ2hpbGQpIAogICB7CiAgICAgICBpZiAocmVhZE9ubHkpCi0gICAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogICAgICAgCiAgICAgICBpZiAob2xkQ2hpbGQgIT0gbnVsbCAmJiBvbGRDaGlsZC0+cGFyZW50Tm9kZSAhPSB0aGlzKQotICAgICAgICAgIHRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246Ok5PVF9GT1VORF9FUlIsIG51bGwpOworICAgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUiwgbnVsbCk7CiAgICAgICAKICAgICAgIC8vIFBhdGNoIHRyZWUgcGFzdCBvbGRDaGlsZAogICAgICAgTm9kZUltcGwgKnByZXYgPSBvbGRDaGlsZC0+cHJldmlvdXNTaWJsaW5nOwpAQCAtNTQ2LDggKzU3NSw4IEBACiAgIHsKICAgICAgIERvY3VtZW50SW1wbCAqZG9jID0gdGhpcy0+b3duZXJEb2N1bWVudDsKICAgICAgIGRlbGV0ZUlmKHRoaXMpOyAgICAgICAvLyBUaGlzIGdldHMgbm9kZXMgb3V0c2lkZSBvZiB0aGUgZG9jdW1lbnQgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGVsZXRlSWYoKSBkZWxldGVzIG9ubHkgaWYgdGhlIHBhcmVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgbm9kZSBpcyBudWxsLiAgCisgICAgICAvLyAgIGRlbGV0ZUlmKCkgZGVsZXRlcyBvbmx5IGlmIHRoZSBwYXJlbnQKKyAgICAgIC8vICAgbm9kZSBpcyBudWxsLiAgCiAgICAgICAKICAgICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IGV4dGVybmFsIHJlZmVyZW5jZSB3aXRoaW4gdGhlIGRvY3VtZW50LAogICAgICAgLy8gICAgdGhlIGVudGlyZSBkb2N1bWVudCB3aWxsIGJlIGRlbGV0ZWQgYXMgd2VsbC4KQEAgLTU2NSw3ICs1OTQsNyBAQAogICB0aGlzIGluc3RhbmNlb2YgRG9jdW1lbnQgJiYgCiAgIG5ld0NoaWxkLmdldE93bmVyRG9jdW1lbnQoKSAhPSAoRG9jdW1lbnQpIHRoaXMpCiAgIHsKLSAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbkltcGwoRE9NRXhjZXB0aW9uLldST05HX0RPQ1VNRU5UX0VSUiwgbnVsbCk7CisgIHRocm93IERPTUV4Y2VwdGlvbkltcGwoRE9NRXhjZXB0aW9uLldST05HX0RPQ1VNRU5UX0VSUiwgbnVsbCk7CiAgIH0KICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgIGluc2VydEJlZm9yZShuZXdDaGlsZCwgb2xkQ2hpbGQpOwpAQCAtNTc5LDExICs2MDgsMTEgQEAKICAgdm9pZCBOb2RlSW1wbDo6c2V0Tm9kZVZhbHVlKGNvbnN0IERPTVN0cmluZyAmdmFsKQogICB7CiAgICAgICBpZiAocmVhZE9ubHkpCi0gICAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgICBET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOwogICAgICAgCiAgICAgICAvLyBEZWZhdWx0IGJlaGF2aW9yLCBvdmVycmlkZGVuIGluIHNvbWUgc3ViY2xhc3NlcwotICAgICAgdGhpcy0+dmFsdWUgPSB2YWw7CisgICAgICB0aGlzLT52YWx1ZSA9IHZhbC5jbG9uZSgpOwogICB9OwogICAKICAgCkBAIC02MTcsMzcgKzY0NiwzNyBAQAogICAgICAgLy8gcmV0dXJuIGdldE5vZGVOYW1lKCk7CiAgIH07ICAgIAogICAKLS8vSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgotCi1ib29sIE5vZGVJbXBsOjpzdXBwb3J0cyhjb25zdCBET01TdHJpbmcgJmZlYXR1cmUsIGNvbnN0IERPTVN0cmluZyAmdmVyc2lvbikKLXsKLSAgICByZXR1cm4gZmFsc2U7ICAgLy9tdXN0IGJlIG92ZXJyaWRlbiBieSBlYWNoIHN1YmNsYXNzCi19Ci0KLURPTVN0cmluZyBOb2RlSW1wbDo6Z2V0TmFtZXNwYWNlVVJJKCkKLXsKLSAgICByZXR1cm4gbmFtZXNwYWNlVVJJOwotfQotCi1ET01TdHJpbmcgTm9kZUltcGw6OmdldFByZWZpeCgpCi17Ci0gICAgcmV0dXJuIHByZWZpeDsKLX0KLQotRE9NU3RyaW5nIE5vZGVJbXBsOjpnZXRMb2NhbE5hbWUoKQotewotICAgIHJldHVybiBsb2NhbE5hbWU7Ci19Ci0KLXZvaWQgTm9kZUltcGw6OnNldFByZWZpeChjb25zdCBET01TdHJpbmcgJnByZWZpeCkKLXsKLSAgICBpZiAocmVhZE9ubHkpCi0JdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCi0JICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgbnVsbCk7Ci0gICAgaWYgKGlzQXR0ckltcGwoKSB8fCBpc0VsZW1lbnRJbXBsKCkpIHsKLQluYW1lID0gdGhpcyAtPiBwcmVmaXggPSBwcmVmaXg7Ci0JbmFtZSA9IG5hbWUgKyBjaENvbG9uICsgbG9jYWxOYW1lOyAgICAvL25vZGVOYW1lIGlzIGNoYW5nZWQgdG9vCi0JLy93aGF0IHRvIGRvIGlmIG5hbWVzcGFjZVVSSSBpcyBudWxsPwotICAgIH0KLQotfQorICAvL0ludHJvZHVjZWQgaW4gRE9NIExldmVsIDIKKyAgCisgIGJvb2wgTm9kZUltcGw6OnN1cHBvcnRzKGNvbnN0IERPTVN0cmluZyAmZmVhdHVyZSwgY29uc3QgRE9NU3RyaW5nICZ2ZXJzaW9uKQorICB7CisgICAgICByZXR1cm4gZmFsc2U7ICAgLy9tdXN0IGJlIG92ZXJyaWRlbiBieSBlYWNoIHN1YmNsYXNzCisgIH0KKyAgCisgIERPTVN0cmluZyBOb2RlSW1wbDo6Z2V0TmFtZXNwYWNlVVJJKCkKKyAgeworICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSTsKKyAgfQorICAKKyAgRE9NU3RyaW5nIE5vZGVJbXBsOjpnZXRQcmVmaXgoKQorICB7CisgICAgICByZXR1cm4gcHJlZml4OworICB9CisgIAorICBET01TdHJpbmcgTm9kZUltcGw6OmdldExvY2FsTmFtZSgpCisgIHsKKyAgICAgIHJldHVybiBsb2NhbE5hbWU7CisgIH0KKyAgCisgIHZvaWQgTm9kZUltcGw6OnNldFByZWZpeChjb25zdCBET01TdHJpbmcgJnByZWZpeCkKKyAgeworICAgICAgaWYgKHJlYWRPbmx5KQorICAgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKKyAgICAgIGlmIChpc0F0dHJJbXBsKCkgfHwgaXNFbGVtZW50SW1wbCgpKSB7CisgICAgICAgICAgbmFtZSA9IHRoaXMgLT4gcHJlZml4ID0gcHJlZml4OworICAgICAgICAgIG5hbWUgPSBuYW1lICsgY2hDb2xvbiArIGxvY2FsTmFtZTsgICAgLy9ub2RlTmFtZSBpcyBjaGFuZ2VkIHRvbworICAgICAgICAgIC8vd2hhdCB0byBkbyBpZiBuYW1lc3BhY2VVUkkgaXMgbnVsbD8KKyAgICAgIH0KKyAgICAgIAorICB9CmRpZmYgLS1naXQgYS9zcmMvZG9tL05vZGVJdGVyYXRvckltcGwuY3BwIGIvc3JjL2RvbS9Ob2RlSXRlcmF0b3JJbXBsLmNwcAppbmRleCA5ZWI2NGY2Li5lZWMzMjRiIDEwMDY0NAotLS0gYS9zcmMvZG9tL05vZGVJdGVyYXRvckltcGwuY3BwCisrKyBiL3NyYy9kb20vTm9kZUl0ZXJhdG9ySW1wbC5jcHAKQEAgLTU2LDggKzU2LDE5IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOToxNSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMzAgMjE6MTY6MjUgIHJvZGRleQorICogQ2hhbmdlcyB0byBhZGQgdGhlIHRyYW5zY29kZSgpIG1ldGhvZCB0byBET01TdHJpbmcsIHdoaWNoIHJldHVybnMgYSB0cmFuc2NvZGVkCisgKiB2ZXJzaW9uICh0byBsb2NhbCBjb2RlIHBhZ2UpIG9mIHRoZSBET00gc3RyaW5nIGNvbnRlbnRzLiBBbmQgSSBjaGFuZ2VkIGFsbCBvZiB0aGUKKyAqIGV4Y2VwdGlvbiAndGhyb3cgYnkgcG9pbnRlcicgdG8gJ3Rocm93IGJ5IHZhbHVlJyBzdHlsZS4KKyAqCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMjMgMDE6NDg6MTYgIHJhaHVsagorICogQ2hhbmdlZCAwTCB0byAwLiBDQyB1bmRlciBIUFVYIGlzIGhhcHB5IG5vdy4KKyAqCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjAgMDA6NTY6MzkgIHJhaHVsagorICogU291cmNlIGZpbGVzIG11c3QgZW5kIHdpdGggYW4gdW4tZXNjYXBlZCBuZXdsaW5lLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MTUgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjMwICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtOTgsNyArMTA5LDcgQEAKIHsKIAlmRGV0YWNoZWQgPSBmYWxzZTsKICAgICBmUm9vdCA9IHJvb3Q7Ci0gICAgZkN1cnJlbnROb2RlID0gMEw7CisgICAgZkN1cnJlbnROb2RlID0gMDsKICAgICBmV2hhdFRvU2hvdyA9IHdoYXRUb1Nob3c7CiAgICAgZk5vZGVGaWx0ZXIgPSBub2RlRmlsdGVyOwogCkBAIC0xNTksNyArMTcwLDcgQEAKIAogRE9NX05vZGUgTm9kZUl0ZXJhdG9ySW1wbDo6bmV4dE5vZGUgKCkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAKIAlET01fTm9kZSByZXN1bHQ7CiAKQEAgLTIwOCw3ICsyMTksNyBAQAogCiBET01fTm9kZSBOb2RlSXRlcmF0b3JJbXBsOjpwcmV2aW91c05vZGUgKCkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAJCQogCURPTV9Ob2RlIHJlc3VsdDsKIApAQCAtMjUzLDcgKzI2NCw3IEBACiAvKiogVGhlIG5vZGUgaXMgYWNjZXB0ZWQgaWYgaXQgcGFzc2VzIHRoZSB3aGF0VG9TaG93IGFuZCB0aGUgZmlsdGVyLiAqLwogYm9vbCBOb2RlSXRlcmF0b3JJbXBsOjphY2NlcHROb2RlIChET01fTm9kZSBub2RlKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAogICAgIGlmIChmTm9kZUZpbHRlciA9PSAwKSB7CiAgICAgICAgIHJldHVybiAoKGZXaGF0VG9TaG93ICYgKCgxIDw8IG5vZGUuZ2V0Tm9kZVR5cGUoKSkgLSAxKSkgIT0gMCk7CkBAIC0yODUsNyArMjk2LDcgQEAKIAogRE9NX05vZGUgTm9kZUl0ZXJhdG9ySW1wbDo6bmV4dE5vZGUgKERPTV9Ob2RlIG5vZGUsIGJvb2wgdmlzaXRDaGlsZHJlbikgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAKICAgICBpZiAobm9kZS5pc051bGwoKSkgcmV0dXJuIGZSb290OwogCkBAIC0zMjgsNyArMzM5LDcgQEAKIAogRE9NX05vZGUgTm9kZUl0ZXJhdG9ySW1wbDo6cHJldmlvdXNOb2RlIChET01fTm9kZSBub2RlKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAogICAgIERPTV9Ob2RlIHJlc3VsdDsKIApAQCAtMzYxLDcgKzM3Miw3IEBACiAKIHZvaWQgTm9kZUl0ZXJhdG9ySW1wbDo6cmVtb3ZlTm9kZSAoRE9NX05vZGUgbm9kZSkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAKICAgICAvLyBJbXBsZW1lbnRhdGlvbiBub3RlOiBGaXgtdXAgbWVhbnMgc2V0dGluZyB0aGUgY3VycmVudCBub2RlIHByb3Blcmx5CiAgICAgLy8gYWZ0ZXIgYSByZW1vdmUuCkBAIC00MTYsNCArNDI3LDQgQEAKICAgICB9CiAKICAgICBkZWxldGUgdGhpczsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9zcmMvZG9tL05vdGF0aW9uSW1wbC5jcHAgYi9zcmMvZG9tL05vdGF0aW9uSW1wbC5jcHAKaW5kZXggNDUxMjUyZS4uYzk3MTM1OCAxMDA2NDQKLS0tIGEvc3JjL2RvbS9Ob3RhdGlvbkltcGwuY3BwCisrKyBiL3NyYy9kb20vTm90YXRpb25JbXBsLmNwcApAQCAtNTYsOCArNTYsMTMgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA5OjE3ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8zMCAyMToxNjoyNSAgcm9kZGV5CisgKiBDaGFuZ2VzIHRvIGFkZCB0aGUgdHJhbnNjb2RlKCkgbWV0aG9kIHRvIERPTVN0cmluZywgd2hpY2ggcmV0dXJucyBhIHRyYW5zY29kZWQKKyAqIHZlcnNpb24gKHRvIGxvY2FsIGNvZGUgcGFnZSkgb2YgdGhlIERPTSBzdHJpbmcgY29udGVudHMuIEFuZCBJIGNoYW5nZWQgYWxsIG9mIHRoZQorICogZXhjZXB0aW9uICd0aHJvdyBieSBwb2ludGVyJyB0byAndGhyb3cgYnkgdmFsdWUnIHN0eWxlLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDk6MTcgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ0OjMxICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTI4LDE0ICsxMzMsMTQgQEAKIAogdm9pZCBOb3RhdGlvbkltcGw6OnNldE5vZGVWYWx1ZShjb25zdCBET01TdHJpbmcgJmFyZykKIHsKLSAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIG51bGwpOworICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKIH07CiAKIAogdm9pZCBOb3RhdGlvbkltcGw6OnNldFB1YmxpY0lkKGNvbnN0IERPTVN0cmluZyAmYXJnKQogewogICAgIGlmKHJlYWRPbmx5KQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbigKKyAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLG51bGwpOwogICAgIAogICAgIHB1YmxpY0lkID0gYXJnLmNsb25lKCk7CkBAIC0xNDUsNyArMTUwLDcgQEAKIHZvaWQgTm90YXRpb25JbXBsOjpzZXRTeXN0ZW1JZChjb25zdCBET01TdHJpbmcgJmFyZykKIHsKICAgICBpZihyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAgICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUixudWxsKTsKICAgICAKICAgICBzeXN0ZW1JZCA9IGFyZy5jbG9uZSgpOwpkaWZmIC0tZ2l0IGEvc3JjL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsLmNwcCBiL3NyYy9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbC5jcHAKaW5kZXggNmUwZjZiMC4uMzdhNTk2MyAxMDA2NDQKLS0tIGEvc3JjL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsLmNwcAorKysgYi9zcmMvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwuY3BwCkBAIC01Niw4ICs1NiwxMyBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDk6MTggIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIxOjE2OjI2ICByb2RkZXkKKyAqIENoYW5nZXMgdG8gYWRkIHRoZSB0cmFuc2NvZGUoKSBtZXRob2QgdG8gRE9NU3RyaW5nLCB3aGljaCByZXR1cm5zIGEgdHJhbnNjb2RlZAorICogdmVyc2lvbiAodG8gbG9jYWwgY29kZSBwYWdlKSBvZiB0aGUgRE9NIHN0cmluZyBjb250ZW50cy4gQW5kIEkgY2hhbmdlZCBhbGwgb2YgdGhlCisgKiBleGNlcHRpb24gJ3Rocm93IGJ5IHBvaW50ZXInIHRvICd0aHJvdyBieSB2YWx1ZScgc3R5bGUuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowOToxOCAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDQ6MzIgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMjYsNyArMTMxLDcgQEAKIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbDo6c2V0RGF0YShjb25zdCBET01TdHJpbmcgJmFyZykKIHsKICAgICBpZihyZWFkT25seSkKLSAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oCiAgICAgICAgIERPTV9ET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUixudWxsKTsKICAgICAKICAgICB2YWx1ZSA9IGFyZzsKZGlmZiAtLWdpdCBhL3NyYy9kb20vVGV4dEltcGwuY3BwIGIvc3JjL2RvbS9UZXh0SW1wbC5jcHAKaW5kZXggYTNlNjdkZS4uMTY5ZjM3MyAxMDA2NDQKLS0tIGEvc3JjL2RvbS9UZXh0SW1wbC5jcHAKKysrIGIvc3JjL2RvbS9UZXh0SW1wbC5jcHAKQEAgLTU2LDggKzU2LDEzIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOToxOSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMzAgMjE6MTY6MjYgIHJvZGRleQorICogQ2hhbmdlcyB0byBhZGQgdGhlIHRyYW5zY29kZSgpIG1ldGhvZCB0byBET01TdHJpbmcsIHdoaWNoIHJldHVybnMgYSB0cmFuc2NvZGVkCisgKiB2ZXJzaW9uICh0byBsb2NhbCBjb2RlIHBhZ2UpIG9mIHRoZSBET00gc3RyaW5nIGNvbnRlbnRzLiBBbmQgSSBjaGFuZ2VkIGFsbCBvZiB0aGUKKyAqIGV4Y2VwdGlvbiAndGhyb3cgYnkgcG9pbnRlcicgdG8gJ3Rocm93IGJ5IHZhbHVlJyBzdHlsZS4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjE5ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NDozMyAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTEwNSwxMCArMTEwLDEwIEBACiBUZXh0SW1wbCAqVGV4dEltcGw6OnNwbGl0VGV4dChpbnQgb2Zmc2V0KQogewogICAgICAgICBpZiAocmVhZE9ubHkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbigKICAgICAgICAgRE9NX0RPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSLCBudWxsKTsKICAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gdmFsdWUubGVuZ3RoKCkgLSAxKQotICAgICAgICB0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTkRFWF9TSVpFX0VSUiwgbnVsbCk7CisgICAgICAgIHRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5ERVhfU0laRV9FUlIsIG51bGwpOwogICAgICAgICAgICAgICAgIAogICAgICAgICBUZXh0SW1wbCAqbmV3VGV4dCA9IAogICAgICAgICAgICAgICAgIChUZXh0SW1wbCAqKSBvd25lckRvY3VtZW50LT5jcmVhdGVUZXh0Tm9kZSgKZGlmZiAtLWdpdCBhL3NyYy9kb20vVHJlZVdhbGtlckltcGwuY3BwIGIvc3JjL2RvbS9UcmVlV2Fsa2VySW1wbC5jcHAKaW5kZXggNWMzNmM1YS4uNjdiOWE5MyAxMDA2NDQKLS0tIGEvc3JjL2RvbS9UcmVlV2Fsa2VySW1wbC5jcHAKKysrIGIvc3JjL2RvbS9UcmVlV2Fsa2VySW1wbC5jcHAKQEAgLTU2LDggKzU2LDE2IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowOToyMCAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMzAgMjE6MTY6MjYgIHJvZGRleQorICogQ2hhbmdlcyB0byBhZGQgdGhlIHRyYW5zY29kZSgpIG1ldGhvZCB0byBET01TdHJpbmcsIHdoaWNoIHJldHVybnMgYSB0cmFuc2NvZGVkCisgKiB2ZXJzaW9uICh0byBsb2NhbCBjb2RlIHBhZ2UpIG9mIHRoZSBET00gc3RyaW5nIGNvbnRlbnRzLiBBbmQgSSBjaGFuZ2VkIGFsbCBvZiB0aGUKKyAqIGV4Y2VwdGlvbiAndGhyb3cgYnkgcG9pbnRlcicgdG8gJ3Rocm93IGJ5IHZhbHVlJyBzdHlsZS4KKyAqCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDE6NDg6MTcgIHJhaHVsagorICogQ2hhbmdlZCAwTCB0byAwLiBDQyB1bmRlciBIUFVYIGlzIGhhcHB5IG5vdy4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA5OjIwICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NDozMyAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTE1Niw3ICsxNjQsNyBAQAogLyoqIFJldHVybiB0aGUgY3VycmVudCBOb2RlLiAqLwogRE9NX05vZGUgVHJlZVdhbGtlckltcGw6OmdldEN1cnJlbnROb2RlICgpIHsKIAlpZiAoZkRldGFjaGVkKQotCQl0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CisJCXRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOwogCiAgICAgcmV0dXJuIGZDdXJyZW50Tm9kZTsKIH0KQEAgLTE2NSw3ICsxNzMsNyBAQAogLyoqIFJldHVybiB0aGUgY3VycmVudCBOb2RlLiAqLwogdm9pZCBUcmVlV2Fsa2VySW1wbDo6c2V0Q3VycmVudE5vZGUgKERPTV9Ob2RlIG5vZGUpIHsKIAlpZiAoZkRldGFjaGVkKQotCQl0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CisJCXRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOwogCiAgICAgZkN1cnJlbnROb2RlID0gbm9kZTsKIH0KQEAgLTE3NywxNCArMTg1LDE0IEBACiAgKi8KIERPTV9Ob2RlIFRyZWVXYWxrZXJJbXBsOjpwYXJlbnROb2RlICgpIHsKIAlpZiAoZkRldGFjaGVkKQotCQl0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CisJCXRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOwogCiAJRE9NX05vZGUgcmVzdWx0OwogCiAgICAgaWYgKGZDdXJyZW50Tm9kZS5pc051bGwoKSkgcmV0dXJuIHJlc3VsdDsKIAogICAgIERPTV9Ob2RlIG5vZGUgPSBnZXRQYXJlbnROb2RlKGZDdXJyZW50Tm9kZSk7Ci0gICAgaWYgKG5vZGUgIT0gMEwpIHsKKyAgICBpZiAobm9kZSAhPSAwKSB7CiAgICAgICAgIGZDdXJyZW50Tm9kZSA9IG5vZGU7CiAgICAgfQogICAgIHJldHVybiBub2RlOwpAQCAtMTk4LDcgKzIwNiw3IEBACiAgKi8KIERPTV9Ob2RlIFRyZWVXYWxrZXJJbXBsOjpmaXJzdENoaWxkICgpIHsKIAlpZiAoZkRldGFjaGVkKQotCQl0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CisJCXRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOwogCiAJRE9NX05vZGUgcmVzdWx0OwogCkBAIC0yMTgsNyArMjI2LDcgQEAKICAqLwogRE9NX05vZGUgVHJlZVdhbGtlckltcGw6Omxhc3RDaGlsZCAoKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAkJCiAJRE9NX05vZGUgcmVzdWx0OwogCkBAIC0yMzksNyArMjQ3LDcgQEAKIAogRE9NX05vZGUgVHJlZVdhbGtlckltcGw6OnByZXZpb3VzU2libGluZyAoKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAkKIAlET01fTm9kZSByZXN1bHQ7CiAKQEAgLTI2MCw3ICsyNjgsNyBAQAogCiBET01fTm9kZSBUcmVlV2Fsa2VySW1wbDo6bmV4dFNpYmxpbmcgKCkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAJCQogCURPTV9Ob2RlIHJlc3VsdDsKIApAQCAtMjgxLDcgKzI4OSw3IEBACiAKIERPTV9Ob2RlIFRyZWVXYWxrZXJJbXBsOjpwcmV2aW91c05vZGUgKCkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAKICAgICBET01fTm9kZSByZXN1bHQ7CiAKQEAgLTMyNSw3ICszMzMsNyBAQAogCiBET01fTm9kZSBUcmVlV2Fsa2VySW1wbDo6bmV4dE5vZGUgKCkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAJCiAJRE9NX05vZGUgcmVzdWx0OwogCkBAIC0zNzAsNyArMzc4LDcgQEAKIAogRE9NX05vZGUgVHJlZVdhbGtlckltcGw6OmdldFBhcmVudE5vZGUgKERPTV9Ob2RlIG5vZGUpIHsKIAlpZiAoZkRldGFjaGVkKQotCQl0aHJvdyBuZXcgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CisJCXRocm93IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOwogCQogCURPTV9Ob2RlIHJlc3VsdDsKIApAQCAtNDAwLDcgKzQwOCw3IEBACiAKIERPTV9Ob2RlIFRyZWVXYWxrZXJJbXBsOjpnZXROZXh0U2libGluZyAoRE9NX05vZGUgbm9kZSkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAJCiAJRE9NX05vZGUgcmVzdWx0OwogCkBAIC00NTAsNyArNDU4LDcgQEAKIAogRE9NX05vZGUgVHJlZVdhbGtlckltcGw6OmdldFByZXZpb3VzU2libGluZyAoRE9NX05vZGUgbm9kZSkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAJCQogCURPTV9Ob2RlIHJlc3VsdDsKIApAQCAtNDk5LDcgKzUwNyw3IEBACiAKIERPTV9Ob2RlIFRyZWVXYWxrZXJJbXBsOjpnZXRGaXJzdENoaWxkIChET01fTm9kZSBub2RlKSB7CiAJaWYgKGZEZXRhY2hlZCkKLQkJdGhyb3cgbmV3IERPTV9ET01FeGNlcHRpb24oRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIsIG51bGwpOworCQl0aHJvdyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKIAkJCiAJRE9NX05vZGUgcmVzdWx0OwogCkBAIC01MzMsNyArNTQxLDcgQEAKIAogRE9NX05vZGUgVHJlZVdhbGtlckltcGw6OmdldExhc3RDaGlsZCAoRE9NX05vZGUgbm9kZSkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAKIAlET01fTm9kZSByZXN1bHQ7CiAKQEAgLTU2NSw5ICs1NzMsOSBAQAogCiBzaG9ydCBUcmVlV2Fsa2VySW1wbDo6YWNjZXB0Tm9kZSAoRE9NX05vZGUgbm9kZSkgewogCWlmIChmRGV0YWNoZWQpCi0JCXRocm93IG5ldyBET01fRE9NRXhjZXB0aW9uKERPTV9ET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSLCBudWxsKTsKKwkJdGhyb3cgRE9NX0RPTUV4Y2VwdGlvbihET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUiwgbnVsbCk7CiAKLSAgICBpZiAoZk5vZGVGaWx0ZXIgPT0gMEwpIHsKKyAgICBpZiAoZk5vZGVGaWx0ZXIgPT0gMCkgewogICAgICAgICBpZiAoICggZldoYXRUb1Nob3cgJiAoMSA8PCAobm9kZS5nZXROb2RlVHlwZSgpIC0gMSkpKSAhPSAwKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gRE9NX05vZGVGaWx0ZXI6OkFDQ0VQVDsKZGlmZiAtLWdpdCBhL3NyYy9mcmFtZXdvcmsvTWFrZWZpbGUuaW4gYi9zcmMvZnJhbWV3b3JrL01ha2VmaWxlLmluCmluZGV4IDc2NTI3ZGEuLmY2ZTQyNzkgMTAwNjQ0Ci0tLSBhL3NyYy9mcmFtZXdvcmsvTWFrZWZpbGUuaW4KKysrIGIvc3JjL2ZyYW1ld29yay9NYWtlZmlsZS5pbgpAQCAtNTUsOCArNTUsMTIgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODoyNiAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzIzIDAxOjU5OjQ3ICByYWh1bGoKKyMgQ29kZSBub3cgd29ya3MgdW5kZXIgSFBVWCAxMS4gVGVzdGVkIGlubWVtb3J5IG1lc3NhZ2UgbG9hZGVyLgorUmV2YW1wZWQgbWFrZWZpbGVzLiBCdWlsZHMgd2l0aCBib3RoIERDRSB0aHJlYWRzIGFzIHdlbGwgYXMgcHRocmVhZCBsaWJyYXJpZXMuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6MjYgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS41ICAxOTk5LzExLzA4IDIwOjQ0OjM0ICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC02NCw3ICs2OCw4IEBACiAjCiAKIFBMQVRGT1JNID0gQHBsYXRmb3JtQAotQ09NUElMRVIgPSBAY29tcGlsZXJACitDQyAgPSBAY2NACitDWFggPSBAY3h4QAogQ1hYRkxBR1MgPSBAY3h4ZmxhZ3NACiBDRkxBR1MgPSBAY2ZsYWdzQAogUFJFRklYID0gQHByZWZpeEAKQEAgLTE0MSw5ICsxNDYsNiBAQAogCUBmb3IgZmlsZSBpbiAkKEZSQU1FV09SS19DUFBfUFVCSEVBREVSUyk7IGRvIFwKIAlybSAtZiAkKFhNTF9JTkNfRElSKS8kKE1PRFVMRSkvJCRmaWxlOyBcCiAJZG9uZQotCUBmb3IgZmlsZSBpbiAkKEZSQU1FV09SS19DX0ZJTEVTKTsgZG8gXAotCXJtIC1mICQoWE1MX0lOQ19ESVIpLyQoTU9EVUxFKS8kJGZpbGU7IFwKLQlkb25lCiAJQGVjaG8gIlJlbW92aW5nIGFsbCAkKE1PRFVMRSkgb2JqZWN0IGZpbGVzIC4uLiIKIAlAZm9yIGZpbGUgaW4gJChGUkFNRVdPUktfQ1BQX09CSkVDVFMpOyBkbyBcCiAJcm0gLWYgJChBTExfT0JKRUNUU19ESVIpLyQkZmlsZTsgXApkaWZmIC0tZ2l0IGEvc3JjL2ZyYW1ld29yay9YTUxCdWZmZXIuY3BwIGIvc3JjL2ZyYW1ld29yay9YTUxCdWZmZXIuY3BwCmluZGV4IDFhNDEyMDAuLjQ2M2NjYWYgMTAwNjQ0Ci0tLSBhL3NyYy9mcmFtZXdvcmsvWE1MQnVmZmVyLmNwcAorKysgYi9zcmMvZnJhbWV3b3JrL1hNTEJ1ZmZlci5jcHAKQEAgLTU2LDggKzU2LDEyIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODoyOSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDE6MDQ6MTkgIHJvZGRleQorICogVXBkYXRlcyB0byBzb21lIG9mIHRoZSBpbnRlcm5hbCBWQysrIHByb2plY3QgZmlsZXMgYW5kIHNvbWUgc21hbGwKKyAqIGZpeGVzIHRvIG1ha2UgWE1MQnVmZmVyIGNvcnJlY3RseSBjaGFyYWN0ZXIgc2l6ZSBhZ25vc3RpYy4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA4OjI5ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NDozNSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTg0LDcgKzg4LDcgQEAKICAgICBpZiAoIWNvdW50KQogICAgICAgICBhY3R1YWxDb3VudCA9IFhNTFN0cmluZzo6c3RyaW5nTGVuKGNoYXJzKTsKICAgICBpbnN1cmVDYXBhY2l0eShhY3R1YWxDb3VudCk7Ci0gICAgbWVtY3B5KCZmQnVmZmVyW2ZJbmRleF0sIGNoYXJzLCBhY3R1YWxDb3VudCAqIDIpOworICAgIG1lbWNweSgmZkJ1ZmZlcltmSW5kZXhdLCBjaGFycywgYWN0dWFsQ291bnQgKiBzaXplb2YoWE1MQ2gpKTsKICAgICBmSW5kZXggKz0gYWN0dWFsQ291bnQ7CiB9CiAKQEAgLTk1LDcgKzk5LDcgQEAKICAgICAgICAgYWN0dWFsQ291bnQgPSBYTUxTdHJpbmc6OnN0cmluZ0xlbihjaGFycyk7CiAgICAgZkluZGV4ID0gMDsKICAgICBpbnN1cmVDYXBhY2l0eShhY3R1YWxDb3VudCk7Ci0gICAgbWVtY3B5KGZCdWZmZXIsIGNoYXJzLCBhY3R1YWxDb3VudCAqIDIpOworICAgIG1lbWNweShmQnVmZmVyLCBjaGFycywgYWN0dWFsQ291bnQgKiBzaXplb2YoWE1MQ2gpKTsKICAgICBmSW5kZXggPSBhY3R1YWxDb3VudDsKIH0KIApAQCAtMTA4LDEwICsxMTIsMTAgQEAKICAgICB1bnNpZ25lZCBpbnQgbmV3Q2FwID0gKHVuc2lnbmVkIGludCkoZkNhcGFjaXR5ICogMS41KTsKIAogICAgIC8vIEFsbG9jYXRlIHRoZSBuZXcgYnVmZmVyCi0gICAgWE1MQ2gqIG5ld0J1ZiA9IG5ldyBYTUxDaFtuZXdDYXArMV07CisgICAgWE1MQ2gqIG5ld0J1ZiA9IG5ldyBYTUxDaFtuZXdDYXAgKyAxXTsKIAogICAgIC8vIENvcHkgb3ZlciB0aGUgb2xkIHN0dWZmCi0gICAgbWVtY3B5KG5ld0J1ZiwgZkJ1ZmZlciwgZkNhcGFjaXR5ICogMik7CisgICAgbWVtY3B5KG5ld0J1ZiwgZkJ1ZmZlciwgZkNhcGFjaXR5ICogc2l6ZW9mKFhNTENoKSk7CiAKICAgICAvLyBDbGVhbiB1cCBvbGQgYnVmZmVyIGFuZCBzdG9yZSBuZXcgc3R1ZmYKICAgICBkZWxldGUgW10gZkJ1ZmZlcjsKQEAgLTEzMCw3ICsxMzQsNyBAQAogICAgIFhNTENoKiBuZXdCdWYgPSBuZXcgWE1MQ2hbbmV3Q2FwKzFdOwogCiAgICAgLy8gQ29weSBvdmVyIHRoZSBvbGQgc3R1ZmYKLSAgICBtZW1jcHkobmV3QnVmLCBmQnVmZmVyLCBmQ2FwYWNpdHkgKiAyKTsKKyAgICBtZW1jcHkobmV3QnVmLCBmQnVmZmVyLCBmQ2FwYWNpdHkgKiBzaXplb2YoWE1MQ2gpKTsKIAogICAgIC8vIENsZWFuIHVwIG9sZCBidWZmZXIgYW5kIHN0b3JlIG5ldyBzdHVmZgogICAgIGRlbGV0ZSBbXSBmQnVmZmVyOwpkaWZmIC0tZ2l0IGEvc3JjL2ZyYW1ld29yay9YTUxSZWNvZ25pemVyLmhwcCBiL3NyYy9mcmFtZXdvcmsvWE1MUmVjb2duaXplci5ocHAKaW5kZXggOTY4MzYxMy4uOTA5MjI1ZiAxMDA2NDQKLS0tIGEvc3JjL2ZyYW1ld29yay9YTUxSZWNvZ25pemVyLmhwcAorKysgYi9zcmMvZnJhbWV3b3JrL1hNTFJlY29nbml6ZXIuaHBwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICAkTG9nJAotICogIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODozNyAgdHdsCi0gKiAgSW5pdGlhbCByZXZpc2lvbgorICogIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMTo0OToyNyAgcmFodWxqCisgKiAgQ2Fubm90IHVzZSBjbGFzcyBxdWFsaWZpZXIgaW4gY2xhc3MgZGVmbi4gQ0MgdW5kZXIgSFBVWCBpcyBoYXBweS4KKyAqCisgKiAgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODozNyAgdHdsCisgKiAgSW5pdGlhbCBjaGVja2luCiAgKgogICogIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NDo0MCAgcmFodWwKICAqICBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMjUsMTMgKzEyOCwxMyBAQAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLy8gIEVuY29kaW5nIHJlY29nbml0aW9uIG1ldGhvZHMKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIHN0YXRpYyBYTUxSZWNvZ25pemVyOjpFbmNvZGluZ3MgYmFzaWNFbmNvZGluZ1Byb2JlCisgICAgc3RhdGljIEVuY29kaW5ncyBiYXNpY0VuY29kaW5nUHJvYmUKICAgICAoCiAgICAgICAgIGNvbnN0ICAgWE1MQnl0ZSogY29uc3QgICAgICByYXdCdWZmZXIKICAgICAgICAgLCBjb25zdCB1bnNpZ25lZCBpbnQgICAgICAgIHJhd0J5dGVDb3VudAogICAgICk7CiAKLSAgICBzdGF0aWMgWE1MUmVjb2duaXplcjo6RW5jb2RpbmdzIGVuY29kaW5nRm9yTmFtZQorICAgIHN0YXRpYyBFbmNvZGluZ3MgZW5jb2RpbmdGb3JOYW1lCiAgICAgKAogICAgICAgICBjb25zdCAgIFhNTENoKiBjb25zdCAgICB0aGVFbmNOYW1lCiAgICAgKTsKZGlmZiAtLWdpdCBhL3NyYy9mcmFtZXdvcmsvWE1MVmFsaWRhdG9yLmNwcCBiL3NyYy9mcmFtZXdvcmsvWE1MVmFsaWRhdG9yLmNwcAppbmRleCBmNGZiMWNlLi4yMjE1MjQ5IDEwMDY0NAotLS0gYS9zcmMvZnJhbWV3b3JrL1hNTFZhbGlkYXRvci5jcHAKKysrIGIvc3JjL2ZyYW1ld29yay9YTUxWYWxpZGF0b3IuY3BwCkBAIC01Niw4ICs1NiwxMyBAQAogCiAvKioKICAgKiAkTG9nJAotICAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowODozNyAgdHdsCi0gICogSW5pdGlhbCByZXZpc2lvbgorICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMiAxOTowMjo1NiAgcm9kZGV5CisgICogR2V0IHJpZCBvZiBhIGZldyBzdGF0aWNhbGx5IGRlZmluZWQgWE1MTXV0ZXggb2JqZWN0cywgYW5kIGxhenkgZXZhbCB0aGVtCisgICogdXNpbmcgYXRvbWljIGNvbXBhcmUgYW5kIHN3YXAuIEkgc29tZWhvdyBsZXQgaXQgZ2V0IGJ5IG1lIHRoYXQgd2UgZG9uJ3QKKyAgKiB3YW50IGFueSBzdGF0aWMvZ2xvYmFsIG9iamVjdHMgYXQgYWxsLgorICAqCisgICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowODozNyAgdHdsCisgICogSW5pdGlhbCBjaGVja2luCiAgICoKICAgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDQ6NDAgIHJhaHVsCiAgICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNzksMTYgKzg0LDM1IEBACiAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgTG9jYWwgc3RhdGljIGRhdGEKKy8vICBMb2NhbCBzdGF0aWMgZnVuY3Rpb25zCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyBYTUxNdXRleCAgICAgICAgIGdWYWxpZGF0b3JNdXRleDsKLXN0YXRpYyBYTUxNc2dMb2FkZXImICAgIGdldE1zZ0xvYWRlcigpCisKKy8vCisvLyAgV2UgbmVlZCB0byBmYXVsdCBpbiB0aGlzIG11dGV4LiBCdXQsIHNpbmNlIGl0cyB1c2VkIGZvciBzeW5jaHJvbml6YXRpb24KKy8vICBpdHNlbGYsIHdlIGhhdmUgdG8gZG8gdGhpcyB0aGUgbG93IGxldmVsIHdheSB1c2luZyBhIGNvbXBhcmUgYW5kIHN3YXAuCisvLworc3RhdGljIFhNTE11dGV4JiBnVmFsaWRhdG9yTXV0ZXgoKQoreworICAgIHN0YXRpYyBYTUxNdXRleCogdmFsaWRhdG9yTXV0ZXggPSAwOworICAgIGlmICghdmFsaWRhdG9yTXV0ZXgpCisgICAgeworICAgICAgICBYTUxNdXRleCogdG1wTXV0ZXggPSBuZXcgWE1MTXV0ZXg7CisgICAgICAgIGlmIChYTUxQbGF0Zm9ybVV0aWxzOjpjb21wYXJlQW5kU3dhcCgodm9pZCoqKSZ2YWxpZGF0b3JNdXRleCwgdG1wTXV0ZXgsIDApKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBTb21lb25lIGJlYXQgdXMgdG8gaXQsIHNvIGxldCdzIGNsZWFuIHVwIG91cnMKKyAgICAgICAgICAgIGRlbGV0ZSB0bXBNdXRleDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gKnZhbGlkYXRvck11dGV4OworfQorCitzdGF0aWMgWE1MTXNnTG9hZGVyJiBnZXRNc2dMb2FkZXIoKQogewogICAgIHN0YXRpYyBYTUxNc2dMb2FkZXIqIGdNc2dMb2FkZXIgPSAwOwogCiAgICAgaWYgKCFnTXNnTG9hZGVyKQogICAgIHsKLSAgICAgICAgWE1MTXV0ZXhMb2NrIGxvY2tJbml0KCZnVmFsaWRhdG9yTXV0ZXgpOworICAgICAgICBYTUxNdXRleExvY2sgbG9ja0luaXQoJmdWYWxpZGF0b3JNdXRleCgpKTsKICAgICAgICAgaWYgKCFnTXNnTG9hZGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBnTXNnTG9hZGVyID0gWE1MUGxhdGZvcm1VdGlsczo6bG9hZE1zZ1NldChYTUxVbmk6OmZnVmFsaWRpdHlEb21haW4pOwpAQCAtMTIwLDcgKzE0NCw3IEBACiAKICAgICAgICAgLy8gTG9jayB0aGUgbXV0ZXggYW5kIGxvYWQgdGhlIHRleHQKICAgICAgICAgewotICAgICAgICAgICAgWE1MTXV0ZXhMb2NrIGxvY2tJbml0KCZnVmFsaWRhdG9yTXV0ZXgpOworICAgICAgICAgICAgWE1MTXV0ZXhMb2NrIGxvY2tJbml0KCZnVmFsaWRhdG9yTXV0ZXgoKSk7CiAgICAgICAgICAgICBpZiAoIWdldE1zZ0xvYWRlcigpLmxvYWRNc2codG9FbWl0LCBlcnJUZXh0LCBtc2dTaXplKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyA8VEJEPiBQcm9iYWJseSBzaG91bGQgbG9hZCBhIGRlZmF1bHQgbXNnIGhlcmUKQEAgLTE3NSw3ICsxOTksNyBAQAogCiAgICAgICAgIC8vIExvY2sgdGhlIG11dGV4IGFuZCBsb2FkIHRoZSB0ZXh0CiAgICAgICAgIHsKLSAgICAgICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ1ZhbGlkYXRvck11dGV4KTsKKyAgICAgICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ1ZhbGlkYXRvck11dGV4KCkpOwogICAgICAgICAgICAgaWYgKCFnZXRNc2dMb2FkZXIoKS5sb2FkTXNnKHRvRW1pdCwgZXJyVGV4dCwgbWF4Q2hhcnMsIHRleHQxLCB0ZXh0MiwgdGV4dDMsIHRleHQ0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyA8VEJEPiBTaG91bGQgcHJvYmFibHkgbG9hZCBhIGRlZmF1bHQgbWVzc2FnZSBoZXJlCkBAIC0yMzAsNyArMjU0LDcgQEAKIAogICAgICAgICAvLyBMb2NrIHRoZSBtdXRleCBhbmQgbG9hZCB0aGUgdGV4dAogICAgICAgICB7Ci0gICAgICAgICAgICBYTUxNdXRleExvY2sgbG9ja0luaXQoJmdWYWxpZGF0b3JNdXRleCk7CisgICAgICAgICAgICBYTUxNdXRleExvY2sgbG9ja0luaXQoJmdWYWxpZGF0b3JNdXRleCgpKTsKICAgICAgICAgICAgIGlmICghZ2V0TXNnTG9hZGVyKCkubG9hZE1zZyh0b0VtaXQsIGVyclRleHQsIG1heENoYXJzLCB0ZXh0MSwgdGV4dDIsIHRleHQzLCB0ZXh0NCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gPFRCRD4gU2hvdWxkIHByb2JhYmx5IGxvYWQgYSBkZWZhdWx0IG1lc3NhZ2UgaGVyZQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVybmFsL01ha2VmaWxlLmluIGIvc3JjL2ludGVybmFsL01ha2VmaWxlLmluCmluZGV4IDkzNmJlOTQuLjViOWQwMjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcm5hbC9NYWtlZmlsZS5pbgorKysgYi9zcmMvaW50ZXJuYWwvTWFrZWZpbGUuaW4KQEAgLTU1LDggKzU1LDEyIEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6MDkgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMTo1OTo1MSAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KK1JldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA4OjA5ICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NDo0MiAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNjQsNyArNjgsOCBAQAogIwogCiBQTEFURk9STSA9IEBwbGF0Zm9ybUAKLUNPTVBJTEVSID0gQGNvbXBpbGVyQAorQ0MgID0gQGNjQAorQ1hYID0gQGN4eEAKIENYWEZMQUdTID0gQGN4eGZsYWdzQAogQ0ZMQUdTID0gQGNmbGFnc0AKIFBSRUZJWCA9IEBwcmVmaXhACkBAIC0xMzIsOSArMTM3LDYgQEAKIAlAZm9yIGZpbGUgaW4gJChJTlRFUk5BTF9DUFBfUFVCSEVBREVSUyk7IGRvIFwKIAlybSAtZiAkKFhNTF9JTkNfRElSKS8kKE1PRFVMRSkvJCRmaWxlOyBcCiAJZG9uZQotCUBmb3IgZmlsZSBpbiAkKElOVEVSTkFMX0NfRklMRVMpOyBkbyBcCi0Jcm0gLWYgJChYTUxfSU5DX0RJUikvJChNT0RVTEUpLyQkZmlsZTsgXAotCWRvbmUKIAlAZWNobyAiUmVtb3ZpbmcgYWxsICQoTU9EVUxFKSBvYmplY3QgZmlsZXMgLi4uIgogCUBmb3IgZmlsZSBpbiAkKElOVEVSTkFMX0NQUF9PQkpFQ1RTKTsgZG8gXAogCXJtIC1mICQoQUxMX09CSkVDVFNfRElSKS8kJGZpbGU7IFwKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcm5hbC9YTUxTY2FubmVyLmNwcCBiL3NyYy9pbnRlcm5hbC9YTUxTY2FubmVyLmNwcAppbmRleCA1YjI4YjY5Li40Y2VhMjczIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJuYWwvWE1MU2Nhbm5lci5jcHAKKysrIGIvc3JjL2ludGVybmFsL1hNTFNjYW5uZXIuY3BwCkBAIC01Niw4ICs1NiwxNyBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDg6MjIgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzEyLzAyIDE5OjAyOjU3ICByb2RkZXkKKyAqIEdldCByaWQgb2YgYSBmZXcgc3RhdGljYWxseSBkZWZpbmVkIFhNTE11dGV4IG9iamVjdHMsIGFuZCBsYXp5IGV2YWwgdGhlbQorICogdXNpbmcgYXRvbWljIGNvbXBhcmUgYW5kIHN3YXAuIEkgc29tZWhvdyBsZXQgaXQgZ2V0IGJ5IG1lIHRoYXQgd2UgZG9uJ3QKKyAqIHdhbnQgYW55IHN0YXRpYy9nbG9iYWwgb2JqZWN0cyBhdCBhbGwuCisgKgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIwOjIzOjEzICByb2RkZXkKKyAqIEFkZGVkIGNoYW5nZXMgdG8gaGFuZGxlIGV4Y2VwdGlvbnMgdGhyb3duIGZyb20gdGhlIHVzZXIncyBoYW5kbGVycyBmb3IKKyAqIGVtaXRFcnJvcigpLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDg6MjIgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS43ICAxOTk5LzExLzA4IDIwOjU2OjU0ICBkcm9kZGV5CiAgKiBJZiB0aGUgbWFpbiB4bWwgZW50aXR5IGRvZXMgbm90IGV4aXN0LCB3ZSBuZWVkIHRvIGdldCB0aGUgZXJyb3IgaGFuZGxpbmcgZm9yIHRoYXQKQEAgLTEwNSwxMSArMTE0LDM0IEBACiAvLyAgTG9jYWwgc3RhdGljIGRhdGEKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhdGljIFhNTFVJbnQzMiAgICAgICBnU2Nhbm5lcklkOwotc3RhdGljIFhNTE11dGV4ICAgICAgICBnU2Nhbm5lck11dGV4Owogc3RhdGljIFhNTE1zZ0xvYWRlciogICBnTXNnTG9hZGVyOwogCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIExvY2FsLCBzdGF0aWMgZnVuY3Rpb25zCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8KKy8vICBXZSBuZWVkIHRvIGZhdWx0IGluIHRoaXMgbXV0ZXguIEJ1dCwgc2luY2UgaXRzIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbgorLy8gIGl0c2VsZiwgd2UgaGF2ZSB0byBkbyB0aGlzIHRoZSBsb3cgbGV2ZWwgd2F5IHVzaW5nIGEgY29tcGFyZSBhbmQgc3dhcC4KKy8vCitzdGF0aWMgWE1MTXV0ZXgmIGdTY2FubmVyTXV0ZXgoKQoreworICAgIHN0YXRpYyBYTUxNdXRleCogc2Nhbm5lck11dGV4ID0gMDsKKyAgICBpZiAoIXNjYW5uZXJNdXRleCkKKyAgICB7CisgICAgICAgIFhNTE11dGV4KiB0bXBNdXRleCA9IG5ldyBYTUxNdXRleDsKKyAgICAgICAgaWYgKFhNTFBsYXRmb3JtVXRpbHM6OmNvbXBhcmVBbmRTd2FwKCh2b2lkKiopJnNjYW5uZXJNdXRleCwgdG1wTXV0ZXgsIDApKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBTb21lb25lIGJlYXQgdXMgdG8gaXQsIHNvIGxldCdzIGNsZWFuIHVwIG91cnMKKyAgICAgICAgICAgIGRlbGV0ZSB0bXBNdXRleDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gKnNjYW5uZXJNdXRleDsKK30KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBYTUxTY2FubmVyOiBDb25zdHJ1Y3RvcnMgYW5kIERlc3RydWN0b3IKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogWE1MU2Nhbm5lcjo6WE1MU2Nhbm5lcihYTUxWYWxpZGF0b3IqIGNvbnN0IHZhbGlkYXRvcikgOgpAQCAtMjQzLDIzICsyNzUsMzEgQEAKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIGRvY3VtZW50IGhhbmRsZXIsIHRoZW4gY2FsbCB0aGUgZW5kIGRvY3VtZW50CiAgICAgICAgIGlmIChmRG9jSGFuZGxlcikKICAgICAgICAgICAgIGZEb2NIYW5kbGVyLT5lbmREb2N1bWVudCgpOworCisgICAgICAgIC8vIFJlc2V0IHRoZSByZWFkZXIgbWFuYWdlciB0byBjbG9zZSBhbGwgZmlsZXMsIHNvY2tldHMsIGV0Yy4uLgorICAgICAgICBmUmVhZGVyTWdyLnJlc2V0KCk7CiAgICAgfQogCisgICAgLy8KKyAgICAvLyAgTk9URToKKyAgICAvLworICAgIC8vICBJbiBhbGwgb2YgdGhlIGVycm9yIHByb2Nlc3NpbmcgYmVsb3csIHRoZSBlbWl0RXJyb3IoKSBjYWxsIE1VU1QgY29tZQorICAgIC8vICBiZWZvcmUgdGhlIGZsdXNoIG9mIHRoZSByZWFkZXIgbWdyLCBvciBpdCB3aWxsIGZhaWwgYmVjYXVzZSBpdCB0cmllcworICAgIC8vICB0byBmaW5kIG91dCB0aGUgcG9zaXRpb24gaW4gdGhlIFhNTCBzb3VyY2Ugb2YgdGhlIGVycm9yLgorICAgIC8vCiAgICAgY2F0Y2goY29uc3QgWE1MNENFcnJzOjpDb2RlcykKICAgICB7Ci0gICAgICAgIC8vIFRoaXMgaXMgYSAnZmlyc3QgZmF0YWwgZXJyb3InIHR5cGUgZXhpdCwgc28ganVzdCBmYWxsIHRocm91Z2gKKyAgICAgICAgLy8gVGhpcyBpcyBhICdmaXJzdCBmYXRhbCBlcnJvcicgdHlwZSBleGl0LCBzbyByZXNldCBhbmQgZmFsbCB0aHJvdWdoCisgICAgICAgIGZSZWFkZXJNZ3IucmVzZXQoKTsKICAgICB9CiAKLSAgICAvLwotICAgIC8vICBXZSBoYXZlIHRvIHByb3BvZ2F0ZSBTQVggZXhjZXB0aW9ucy4gU2luY2UgdGhleSBhcmUgZGVyaXZlZCBmcm9tIG91cgotICAgIC8vICBYTUxFeGNlcHRpb24gY2xhc3MsIHdlIGhhdmUgdG8gZmlsdGVyIGl0IG91dCBmaXJzdCBoZXJlIHNvIHRoYXQgaXQKLSAgICAvLyAgZG9lcyBub3QgZ2V0IGNhdWdodCBhbmQgZWF0ZW4gYmVsb3cuCi0gICAgLy8KICAgICBjYXRjaChjb25zdCBTQVhFeGNlcHRpb24mKQogICAgIHsKICAgICAgICAgLy8KLSAgICAgICAgLy8gIE1ha2Ugc3VyZSB3ZSBkbyBhbnl0aGluZyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGRvbmUgb24gdGhlIHdheQotICAgICAgICAvLyAgb3V0IG9mIHRoaXMgbWV0aG9kLgorICAgICAgICAvLyAgV2UgaGF2ZSB0byBwcm9wb2dhdGUgU0FYIGV4Y2VwdGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIC8vICBNYWtlIHN1cmUgdGhhdCB0aGUgcmVhZGVyIG1hbmFnZXIgZ2V0cyByZXNldCwgdGhlbiByZXRocm93IHRoaXMKKyAgICAgICAgLy8gIGV4Y2VwdGlvbiBzaW5jZSBpdCBtZWFucyBub3RoaW5nIG11Y2ggdG8gdXMuCiAgICAgICAgIC8vCiAgICAgICAgIGZSZWFkZXJNZ3IucmVzZXQoKTsKICAgICAgICAgdGhyb3c7CkBAIC0yNjcsMzUgKzMwNywzOCBAQAogCiAgICAgY2F0Y2goY29uc3QgWE1MRXhjZXB0aW9uJiBleGNUb0NhdGNoKQogICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gIEVtaXQgdGhlIGVycm9yIGFuZCBjYXRjaCBhbnkgdXNlciBleGNlcHRpb24gdGhyb3duIGZyb20gaGVyZS4gTWFrZQorICAgICAgICAvLyAgc3VyZSBpbiBhbGwgY2FzZXMgd2UgZmx1c2ggdGhlIHJlYWRlciBtYW5hZ2VyLgorICAgICAgICAvLwogICAgICAgICBmSW5FeGNlcHRpb24gPSB0cnVlOwotICAgICAgICBlbWl0RXJyb3IKLSAgICAgICAgKAotICAgICAgICAgICAgWE1MNENFcnJzOjpYTUxFeGNlcHRpb24KLSAgICAgICAgICAgICwgZXhjVG9DYXRjaC5nZXRUeXBlKCkKLSAgICAgICAgICAgICwgZXhjVG9DYXRjaC5nZXRNZXNzYWdlKCkKLSAgICAgICAgKTsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRFcnJvcgorICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgIFhNTDRDRXJyczo6WE1MRXhjZXB0aW9uCisgICAgICAgICAgICAgICAgLCBleGNUb0NhdGNoLmdldFR5cGUoKQorICAgICAgICAgICAgICAgICwgZXhjVG9DYXRjaC5nZXRNZXNzYWdlKCkKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KIAotICAgICAgICAvLyBBbmQgZmFsbCB0aHJvdWdoCisgICAgICAgIGNhdGNoKC4uLikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmx1c2ggdGhlIHJlYWRlciBtYW5hZ2VyIGFuZCByZXRocm93IHVzZXIncyBlcnJvcgorICAgICAgICAgICAgZlJlYWRlck1nci5yZXNldCgpOworICAgICAgICAgICAgdGhyb3c7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBpdCByZXR1cm5lZCwgdGhlbiByZXNldCB0aGUgcmVhZGVyIG1hbmFnZXIgYW5kIGZhbGwgdGhyb3VnaAorICAgICAgICBmUmVhZGVyTWdyLnJlc2V0KCk7CiAgICAgfQogCiAgICAgY2F0Y2goLi4uKQogICAgIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gIFdlIGRvbid0IGtub3cgd2hhdCBoYXBwZW5lZC4gU28gaXNzdWUgYW4gZXJyb3IsIGZsdXNoIHRoZSByZWFkZXIKLSAgICAgICAgLy8gIG1hbmFnZXIgdG8gY2xvc2UgZG93biBmaWxlcywgc29ja2V0cywgZXRjLi4uIGFuZCByZXRocm93LgotICAgICAgICAvLwotICAgICAgICAvLyAgTk9URTogVGhlIGVycm9yIGVtaXQgTVVTVCBjb21lIGJlZm9yZSB0aGUgZmx1c2ggb2YgdGhlIHJlYWRlcgotICAgICAgICAvLyAgb3IgaXQgd2lsbCBmYWlsIGJlY2F1c2UgaXQgdHJpZXMgdG8gZmluZCBvdXQgdGhlIHBvc2l0aW9uIGluCi0gICAgICAgIC8vICB0aGUgWE1MIHNvdXJjZSBvZiB0aGUgZXJyb3IuCi0gICAgICAgIC8vCi0gICAgICAgIGZJbkV4Y2VwdGlvbiA9IHRydWU7Ci0gICAgICAgIGVtaXRFcnJvcihYTUw0Q0VycnM6OlN5c0V4Y2VwdGlvbik7CisgICAgICAgIC8vIFJlc2V0IGFuZCByZXRocm93CiAgICAgICAgIGZSZWFkZXJNZ3IucmVzZXQoKTsKICAgICAgICAgdGhyb3c7CiAgICAgfQotCi0gICAgLy8gUmVzZXQgdGhlIHJlYWRlciBtYW5hZ2VyIHRvIGNsb3NlIGFsbCBmaWxlcwotICAgIGZSZWFkZXJNZ3IucmVzZXQoKTsKIH0KIAogCkBAIC0zMzIsOSArMzc1LDE2IEBACiAgICAgICAgIHNjYW5Qcm9sb2coKTsKICAgICB9CiAKLSAgICAvLyBUaGlzIGlzIGEgJ2ZpcnN0IGZhaWx1cmUnIGV4Y2VwdGlvbiBzbyByZXNldCBhbmQgcmV0dXJuIGEgZmFpbHVyZQorICAgIC8vCisgICAgLy8gIE5PVEU6CisgICAgLy8KKyAgICAvLyAgSW4gYWxsIG9mIHRoZSBlcnJvciBwcm9jZXNzaW5nIGJlbG93LCB0aGUgZW1pdEVycm9yKCkgY2FsbCBNVVNUIGNvbWUKKyAgICAvLyAgYmVmb3JlIHRoZSBmbHVzaCBvZiB0aGUgcmVhZGVyIG1nciwgb3IgaXQgd2lsbCBmYWlsIGJlY2F1c2UgaXQgdHJpZXMKKyAgICAvLyAgdG8gZmluZCBvdXQgdGhlIHBvc2l0aW9uIGluIHRoZSBYTUwgc291cmNlIG9mIHRoZSBlcnJvci4KKyAgICAvLwogICAgIGNhdGNoKGNvbnN0IFhNTDRDRXJyczo6Q29kZXMpCiAgICAgeworICAgICAgICAvLyBUaGlzIGlzIGEgJ2ZpcnN0IGZhaWx1cmUnIGV4Y2VwdGlvbiBzbyByZXNldCBhbmQgcmV0dXJuIGEgZmFpbHVyZQogICAgICAgICBmUmVhZGVyTWdyLnJlc2V0KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0zNDYsMjQgKzM5NiwzOCBAQAogICAgICAgICB0aHJvdzsKICAgICB9CiAKLSAgICAvLyBUaGlzIG9uZSBpcyBqdXN0IGEgZmFpbHVyZQogICAgIGNhdGNoKGNvbnN0IFhNTEV4Y2VwdGlvbiYgZXhjVG9DYXRjaCkKICAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vICBFbWl0IHRoZSBlcnJvciBhbmQgY2F0Y2ggYW55IHVzZXIgZXhjZXB0aW9uIHRocm93biBmcm9tIGhlcmUuIE1ha2UKKyAgICAgICAgLy8gIHN1cmUgaW4gYWxsIGNhc2VzIHdlIGZsdXNoIHRoZSByZWFkZXIgbWFuYWdlci4KKyAgICAgICAgLy8KICAgICAgICAgZkluRXhjZXB0aW9uID0gdHJ1ZTsKLSAgICAgICAgZW1pdEVycm9yCi0gICAgICAgICgKLSAgICAgICAgICAgIFhNTDRDRXJyczo6WE1MRXhjZXB0aW9uCi0gICAgICAgICAgICAsIGV4Y1RvQ2F0Y2guZ2V0VHlwZSgpCi0gICAgICAgICAgICAsIGV4Y1RvQ2F0Y2guZ2V0TWVzc2FnZSgpCi0gICAgICAgICk7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0RXJyb3IKKyAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICBYTUw0Q0VycnM6OlhNTEV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICwgZXhjVG9DYXRjaC5nZXRUeXBlKCkKKyAgICAgICAgICAgICAgICAsIGV4Y1RvQ2F0Y2guZ2V0TWVzc2FnZSgpCisgICAgICAgICAgICApOworICAgICAgICB9ICAgIAorCisgICAgICAgIGNhdGNoKC4uLikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUmVzZXQgYW5kIHJldGhyb3cgdGhlIHVzZXIgZXJyb3IKKyAgICAgICAgICAgIGZSZWFkZXJNZ3IucmVzZXQoKTsKKyAgICAgICAgICAgIHRocm93OworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVzZXQgYW5kIHJldHVybiBhIGZhaWx1cmUKICAgICAgICAgZlJlYWRlck1nci5yZXNldCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgY2F0Y2goLi4uKQogICAgIHsKLSAgICAgICAgZkluRXhjZXB0aW9uID0gdHJ1ZTsKLSAgICAgICAgZW1pdEVycm9yKFhNTDRDRXJyczo6U3lzRXhjZXB0aW9uKTsKKyAgICAgICAgLy8gUmVzZXQgYW5kIHJldGhyb3cgb3JpZ2luYWwgZXJyb3IKICAgICAgICAgZlJlYWRlck1nci5yZXNldCgpOwogICAgICAgICB0aHJvdzsKICAgICB9CkBAIC00NTEsOSArNTE1LDE2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBUaGlzIGlzIGEgJ2ZpcnN0IGZhaWx1cmUnIGV4Y2VwdGlvbiwgc28gcmVzZXQgYW5kIHJldHVybiBmYWlsdXJlCisgICAgLy8KKyAgICAvLyAgTk9URToKKyAgICAvLworICAgIC8vICBJbiBhbGwgb2YgdGhlIGVycm9yIHByb2Nlc3NpbmcgYmVsb3csIHRoZSBlbWl0RXJyb3IoKSBjYWxsIE1VU1QgY29tZQorICAgIC8vICBiZWZvcmUgdGhlIGZsdXNoIG9mIHRoZSByZWFkZXIgbWdyLCBvciBpdCB3aWxsIGZhaWwgYmVjYXVzZSBpdCB0cmllcworICAgIC8vICB0byBmaW5kIG91dCB0aGUgcG9zaXRpb24gaW4gdGhlIFhNTCBzb3VyY2Ugb2YgdGhlIGVycm9yLgorICAgIC8vCiAgICAgY2F0Y2goY29uc3QgWE1MNENFcnJzOjpDb2RlcykKICAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgYSAnZmlyc3QgZmFpbHVyZScgZXhjZXB0aW9uLCBzbyByZXNldCBhbmQgcmV0dXJuIGZhaWx1cmUKICAgICAgICAgZlJlYWRlck1nci5yZXNldCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNDYxLDMzICs1MzIsNTEgQEAKICAgICAvLyBXZSBoYXZlIHRvIHByb3BvZ2F0ZSBTQVggZXhjZXB0aW9ucwogICAgIGNhdGNoKGNvbnN0IFNBWEV4Y2VwdGlvbiYpCiAgICAgeworICAgICAgICAvLyBKdXN0IHJlc2V0IG91ciByZWFkZXIgbWFuYWdlciBhbmQgcmV0aHJvdyBTQVggZXhjZXB0aW9uCiAgICAgICAgIGZSZWFkZXJNZ3IucmVzZXQoKTsKICAgICAgICAgdGhyb3c7CiAgICAgfQogCi0gICAgLy8gVGhpcyBvbmUgaXMganVzdCBhIGZhaWx1cmUKICAgICBjYXRjaChjb25zdCBYTUxFeGNlcHRpb24mIGV4Y1RvQ2F0Y2gpCiAgICAgeworICAgICAgICAvLworICAgICAgICAvLyAgRW1pdCB0aGUgZXJyb3IgYW5kIGNhdGNoIGFueSB1c2VyIGV4Y2VwdGlvbiB0aHJvd24gZnJvbSBoZXJlLiBNYWtlCisgICAgICAgIC8vICBzdXJlIGluIGFsbCBjYXNlcyB3ZSBmbHVzaCB0aGUgcmVhZGVyIG1hbmFnZXIuCisgICAgICAgIC8vCiAgICAgICAgIGZJbkV4Y2VwdGlvbiA9IHRydWU7Ci0gICAgICAgIGVtaXRFcnJvcgotICAgICAgICAoCi0gICAgICAgICAgICBYTUw0Q0VycnM6OlhNTEV4Y2VwdGlvbgotICAgICAgICAgICAgLCBleGNUb0NhdGNoLmdldFR5cGUoKQotICAgICAgICAgICAgLCBleGNUb0NhdGNoLmdldE1lc3NhZ2UoKQotICAgICAgICApOworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEVycm9yCisgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgWE1MNENFcnJzOjpYTUxFeGNlcHRpb24KKyAgICAgICAgICAgICAgICAsIGV4Y1RvQ2F0Y2guZ2V0VHlwZSgpCisgICAgICAgICAgICAgICAgLCBleGNUb0NhdGNoLmdldE1lc3NhZ2UoKQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQogCisgICAgICAgIGNhdGNoKC4uLikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUkVzZXQgYW5kIHJldGhyb3cgdXNlciBlcnJvcgorICAgICAgICAgICAgZlJlYWRlck1nci5yZXNldCgpOworICAgICAgICAgICAgdGhyb3c7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXNldCBhbmQgcmV0dXJuIGZhaWx1cmUKICAgICAgICAgZlJlYWRlck1nci5yZXNldCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgY2F0Y2goLi4uKQogICAgIHsKLSAgICAgICAgZkluRXhjZXB0aW9uID0gdHJ1ZTsKLSAgICAgICAgZW1pdEVycm9yKFhNTDRDRXJyczo6U3lzRXhjZXB0aW9uKTsKLQorICAgICAgICAvLyBSZXNldCBhbmQgcmV0aHJvdyBvcmlnaW5hbCBlcnJvcgogICAgICAgICBmUmVhZGVyTWdyLnJlc2V0KCk7CiAgICAgICAgIHRocm93OwogICAgIH0KKworICAgIC8vIElmIHdlIGhpdCB0aGUgZW5kLCB0aGVuIGZsdXNoIHRoZSByZWFkZXIgbWFuYWdlcgorICAgIGlmICghcmV0VmFsKQorICAgICAgICBmUmVhZGVyTWdyLnJlc2V0KCk7CisKICAgICByZXR1cm4gcmV0VmFsOwogfQogCkBAIC01MDksNyArNTk4LDcgQEAKICAgICAvLyAgdXNlIHRoZSBtdXRleCB0byBwcm90ZWN0IGl0LgogICAgIC8vCiAgICAgewotICAgICAgICBYTUxNdXRleExvY2sgbG9ja0luaXQoJmdTY2FubmVyTXV0ZXgpOworICAgICAgICBYTUxNdXRleExvY2sgbG9ja0luaXQoJmdTY2FubmVyTXV0ZXgoKSk7CiAKICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBsb2FkZWQgb3VyIG1lc3NhZ2UgeWV0LCB0aGVuIGRvIHRoYXQKICAgICAgICAgaWYgKCFnTXNnTG9hZGVyKQpAQCAtNTczLDcgKzY2Miw3IEBACiAKICAgICAgICAgLy8gTG9jayB0aGUgbXV0ZXggYW5kIGxvYWQgdGhlIHRleHQKICAgICAgICAgewotICAgICAgICAgICAgWE1MTXV0ZXhMb2NrIGxvY2tJbml0KCZnU2Nhbm5lck11dGV4KTsKKyAgICAgICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ1NjYW5uZXJNdXRleCgpKTsKICAgICAgICAgICAgIGlmICghZ01zZ0xvYWRlci0+bG9hZE1zZyh0b0VtaXQsIGVyclRleHQsIG1zZ1NpemUpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vIDxUQkQ+IFByb2JhYmx5IHNob3VsZCBsb2FkIGEgZGVmYXVsdCBtc2cgaGVyZQpAQCAtNjI0LDcgKzcxMyw3IEBACiAKICAgICAgICAgLy8gTG9jayB0aGUgbXV0ZXggYW5kIGxvYWQgdGhlIHRleHQKICAgICAgICAgewotICAgICAgICAgICAgWE1MTXV0ZXhMb2NrIGxvY2tJbml0KCZnU2Nhbm5lck11dGV4KTsKKyAgICAgICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ1NjYW5uZXJNdXRleCgpKTsKICAgICAgICAgICAgIGlmICghZ01zZ0xvYWRlci0+bG9hZE1zZyh0b0VtaXQsIGVyclRleHQsIG1heENoYXJzLCB0ZXh0MSwgdGV4dDIsIHRleHQzLCB0ZXh0NCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gPFRCRD4gU2hvdWxkIHByb2JhYmx5IGxvYWQgYSBkZWZhdWx0IG1lc3NhZ2UgaGVyZQpAQCAtNjc1LDcgKzc2NCw3IEBACiAKICAgICAgICAgLy8gTG9jayB0aGUgbXV0ZXggYW5kIGxvYWQgdGhlIHRleHQKICAgICAgICAgewotICAgICAgICAgICAgWE1MTXV0ZXhMb2NrIGxvY2tJbml0KCZnU2Nhbm5lck11dGV4KTsKKyAgICAgICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ1NjYW5uZXJNdXRleCgpKTsKICAgICAgICAgICAgIGlmICghZ01zZ0xvYWRlci0+bG9hZE1zZyh0b0VtaXQsIGVyclRleHQsIG1heENoYXJzLCB0ZXh0MSwgdGV4dDIsIHRleHQzLCB0ZXh0NCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gPFRCRD4gU2hvdWxkIHByb2JhYmx5IGxvYWQgYSBkZWZhdWx0IG1lc3NhZ2UgaGVyZQpkaWZmIC0tZ2l0IGEvc3JjL3BhcnNlcnMvTWFrZWZpbGUuaW4gYi9zcmMvcGFyc2Vycy9NYWtlZmlsZS5pbgppbmRleCA2Zjg0ZDFiLi4wYzBiYjA2IDEwMDY0NAotLS0gYS9zcmMvcGFyc2Vycy9NYWtlZmlsZS5pbgorKysgYi9zcmMvcGFyc2Vycy9NYWtlZmlsZS5pbgpAQCAtNTUsOCArNTUsMTIgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNzo1MCAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzIzIDAxOjU5OjU2ICByYWh1bGoKKyMgQ29kZSBub3cgd29ya3MgdW5kZXIgSFBVWCAxMS4gVGVzdGVkIGlubWVtb3J5IG1lc3NhZ2UgbG9hZGVyLgorUmV2YW1wZWQgbWFrZWZpbGVzLiBCdWlsZHMgd2l0aCBib3RoIERDRSB0aHJlYWRzIGFzIHdlbGwgYXMgcHRocmVhZCBsaWJyYXJpZXMuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6NTAgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ0OjUzICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC02NCw3ICs2OCw4IEBACiAjCiAKIFBMQVRGT1JNID0gQHBsYXRmb3JtQAotQ09NUElMRVIgPSBAY29tcGlsZXJACitDQyAgPSBAY2NACitDWFggPSBAY3h4QAogQ1hYRkxBR1MgPSBAY3h4ZmxhZ3NACiBDRkxBR1MgPSBAY2ZsYWdzQAogUFJFRklYID0gQHByZWZpeEAKQEAgLTExNyw5ICsxMjIsNiBAQAogCUBmb3IgZmlsZSBpbiAkKFBBUlNFUlNfQ1BQX1BVQkhFQURFUlMpOyBkbyBcCiAJcm0gLWYgJChYTUxfSU5DX0RJUikvJChNT0RVTEUpLyQkZmlsZTsgXAogCWRvbmUKLQlAZm9yIGZpbGUgaW4gJChQQVJTRVJTX0NfRklMRVMpOyBkbyBcCi0Jcm0gLWYgJChYTUxfSU5DX0RJUikvJChNT0RVTEUpLyQkZmlsZTsgXAotCWRvbmUKIAlAZWNobyAiUmVtb3ZpbmcgYWxsICQoTU9EVUxFKSBvYmplY3QgZmlsZXMgLi4uIgogCUBmb3IgZmlsZSBpbiAkKFBBUlNFUlNfQ1BQX09CSkVDVFMpOyBkbyBcCiAJcm0gLWYgJChBTExfT0JKRUNUU19ESVIpLyQkZmlsZTsgXApkaWZmIC0tZ2l0IGEvc3JjL3J1bkNvbmZpZ3VyZSBiL3NyYy9ydW5Db25maWd1cmUKaW5kZXggMzkxZDhkNC4uNGZmZmE2NSAxMDA3NTUKLS0tIGEvc3JjL3J1bkNvbmZpZ3VyZQorKysgYi9zcmMvcnVuQ29uZmlndXJlCkBAIC01OCw4ICs1OCw2MiBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjAyOjU3ICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjkgIDE5OTkvMTIvMDMgMDE6MTk6MTEgIHJhaHVsagorIyBTcGxpdCBleHBvcnQgc3RhdGVtZW50cyBpbnRvIHR3by4gYXNzaWdubWVudCBhbmQgdGhlbiBleHBvcnQuIFNvbGFyaXMgaXMgaGFwcHkgbm93CisjCisjIFJldmlzaW9uIDEuOCAgMTk5OS8xMi8wMiAxODoxMDo1MSAgZGlya3gKKyMgQ2hhbmdlZCBleGl0IGNvZGVzIGZyb20gLTEgdG8gJzEnLiBBZGRlZCBpbmRpcmVjdGlvbi4KKyMKKyMgRGF0ZTogVGh1LCAyIERlYyAxOTk5IDE3OjQ3OjM5ICswMDAwCisjIEZyb206IEpvbmF0aGFuIE1jRG93ZWxsIDxub29kbGVzQGVhcnRoLmxpPgorIyBSZXBseS1UbzogeGVyY2VzLWRldkB4bWwuYXBhY2hlLm9yZworIyBUbzogeGVyY2VzLWRldkB4bWwuYXBhY2hlLm9yZywgcmFodWxqQGFwYWNoZS5vcmcKKyMgU3ViamVjdDogUmU6IHJ1bkNvbmZpZ3VyZSBzY3JpcHQgJiBiYXNoCisjCisjCisjIE9uIE1vbiwgTm92IDI5LCAxOTk5IGF0IDEwOjI5OjEzQU0gLTA4MDAsIFJhaHVsIEphaW4gd3JvdGU6CisjCisjID4gPiBJJ20gcXVpdGUgaGFwcHkgdG8gcHJvZHVjZSBhIHBhdGNoIHRoYXQgbWFrZXMgaXQgd29yayB1bmRlciBib3RoCisjID4gPiBGcmVlQlNEJ3Mgc2ggYW5kIGJhc2ggLSBJIHdvdWxkIGFzc3VtZSB0aGlzIHdvdWxkIHdvcmsgdW5kZXIgbW9zdCBzaAorIyA+ID4gbGlrZSBzaGVsbHMuCisjID4gUGxlYXNlIHBvc3QgdGhlIGNoYW5nZXMgZm9yIEZyZWVCU0QgYW5kIEkgd2lsbCB0ZXN0IHRoZSBjaGFuZ2VzIG9uCisjID4gb3RoZXIgdW5peCdzIGFuZCBkbyB0aGUgaW50ZWdyYXRpb24uCisjCisjIEkgc2F0IGRvd24gdG8gZG8gdGhpcyB0b2RheSBhbmQgZm91bmQgdGhhdCBpdCBjYW4gYmUgdHJpdmlhbGx5IGZpeGVkIGJ5CisjIGNoYW5naW5nIGFsbCB0aGUgImV4aXQgLTEiIGluc3RhbmNlcyB0byAiZXhpdCAxIiAtIGl0IHNlZW1zIHRoZSAvYmluL3NoCisjIHdpdGggRnJlZUJTRCBkb2Vzbid0IGxpa2UgbmVnYXRpdmUgcmVzdWx0IGNvZGVzLiBJdCBzZWVtcyBhIGJpdAorIyBwb2ludGxlc3MgdG8gc3VibWl0IGEgcGF0Y2ggZm9yIHRoaXMsIHNvIGNhbiBzb21lb25lIHdpdGggQ1ZTIGFjY2VzcworIyBjaGFuZ2UgdGhpcyBwbGVhc2U/CisjCisjIEouCisjCisjIC0tCisjCisjIFBSOgorIyBPYnRhaW5lZCBmcm9tOgorIyBTdWJtaXR0ZWQgYnk6CisjIFJldmlld2VkIGJ5OgorIworIyBSZXZpc2lvbiAxLjcgIDE5OTkvMTIvMDEgMTc6MTY6MTYgIHJhaHVsagorIyBBZGRlZCBzdXBwb3J0IGZvciBJUklYIDYuNS41IHVzaW5nIFNHSSBNSVBTcHJvIEMrKyA3LjMgYW5kIDcuMjEgZ2VuZXJhdGluZyAzMiBiaXQgb2JqZWN0cy4gQ2hhbmdlcyBzdWJtaXR0ZWQgYnkgTWFyYyBTdHVlc3NlbAorIworIyBSZXZpc2lvbiAxLjYgIDE5OTkvMTEvMjQgMjM6MjE6NDIgIHJhaHVsagorIyBOb3cgd29ya3MgdW5kZXIgSFBVWCAxMC4yMCB3aXRoIENDIGFuZCBhQ0MsIHdpdGggSUNVIGFuZCBuYXRpdmUKK2Rpc3RjbGVhbiB0YXJnZXQgbm93IHJlbW92ZSBhbmQgcmVtYWluaW5nIE1ha2VmaWxlKHMpCitjbGVhbiB0YXJnZXQgbm93IHJlbW92ZXMgdGhlIHRlbXBsYXRlIHJlcG9zaXRvcnkgZGlyZWN0b3J5CisjCisjIFJldmlzaW9uIDEuNSAgMTk5OS8xMS8yMyAwMTo1OTozMyAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KK1JldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMTcgMjI6MzY6MzMgIHJhaHVsagorIyBDb2RlIHdvcmtzIHdpdGggSUNVIHRyYW5zY29kaW5nIHNlcnZpY2UKKyMKKyMgUmV2aXNpb24gMS4zICAxOTk5LzExLzEyIDIwOjM4OjUwICByYWh1bGoKKyMgUmVwbGFjZWQgWE1MNENST09UIHdpdGggWEVSQ0VTQ1JPT1QuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDI6NTcgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS40ICAxOTk5LzExLzA4IDIwOjQ0OjA5ICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC02NywyMCArMTIxLDMwIEBACiAjCiAKICMKLSMgcnVuQ29uZmlndXJlIDogVGhpcyBzY3JpcHQgd2lsbCBydW4gdGhlICJjb25maWd1cmUiIHNjcmlwdCBmb3IgdGhlIGFwcHJvcHJpYXRlIHBsYXRmb3JtCi0jIE9ubHkgc3VwcG9ydGVkIHBsYXRmb3JtcyBhcmUgcmVjb2duaXplZAorIyBydW5Db25maWd1cmU6CisjICAgIFRoaXMgc2NyaXB0IHdpbGwgcnVuIHRoZSAiY29uZmlndXJlIiBzY3JpcHQgZm9yIHRoZSBhcHByb3ByaWF0ZQorIyAgICBwbGF0Zm9ybS4gT25seSBzdXBwb3J0ZWQgcGxhdGZvcm1zIGFyZSByZWNvZ25pemVkLgorIworIyBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgZGVmaW5lZCBhbmQgZXhwb3J0ZWQgYXQgdGhlIGVuZCBvZiB0aGlzCisjIHNjcmlwdC4KKyMKKyMgTElCUworIyBMREZMQUdTCisjIENYWEZMQUdTCisjIFRSQU5TQ09ERVIKKyMKIAogdXNhZ2UoKQogewogICAgIGVjaG8gInJ1bkNvbmZpZ3VyZTogSGVscGVyIHNjcmlwdCB0byBydW4gXCJjb25maWd1cmVcIiBmb3Igb25lIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zIgogICAgIGVjaG8gIlVzYWdlOiBydW5Db25maWd1cmUgXCJvcHRpb25zXCIiCiAgICAgZWNobyAiICAgICAgIHdoZXJlIG9wdGlvbnMgbWF5IGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOiIKLSAgICBlY2hvICIgICAgICAgLXAgPHBsYXRmb3JtPiAoYWNjZXB0cyAnYWl4JywgJ2xpbnV4JywgJ3NvbGFyaXMnLCAnaHAtMTAnLCAnaHAtMTEnKSIKLSAgICBlY2hvICIgICAgICAgLWMgPEMgY29tcGlsZXIgbmFtZT4gKGUuZy4gZ2NjIG9yIHhsYykiCi0gICAgZWNobyAiICAgICAgIC14IDxDKysgY29tcGlsZXIgbmFtZT4gKGUuZy4gZysrIG9yIHhsQykiCisgICAgZWNobyAiICAgICAgIC1wIDxwbGF0Zm9ybT4gKGFjY2VwdHMgJ2FpeCcsICdsaW51eCcsICdzb2xhcmlzJywgJ2hwLTEwJywgJ2hwLTExJywgJ2lyaXgnKSIKKyAgICBlY2hvICIgICAgICAgLWMgPEMgY29tcGlsZXIgbmFtZT4gKGUuZy4gZ2NjLCBjYywgeGxjKSIKKyAgICBlY2hvICIgICAgICAgLXggPEMrKyBjb21waWxlciBuYW1lPiAoZS5nLiBnKyssIENDLCB4bEMpIgogICAgIGVjaG8gIiAgICAgICAtZCAoc3BlY2lmaWVzIHRoYXQgeW91IHdhbnQgdG8gYnVpbGQgZGVidWcgdmVyc2lvbikiCi0gICAgZWNobyAiICAgICAgIC1tIDxtZXNzYWdlIGxvYWRlcj4gY2FuIGJlICdpbm1lbScsICdpY3UnIG9yICdpY29udiciCi0gICAgZWNobyAiICAgICAgIC1uIDxuZXQgYWNjZXNzb3I+IGNhbiBiZSAnZmlsZW9ubHknIG9yICdsaWJ3d3cnIgorICAgIGVjaG8gIiAgICAgICAtbSA8bWVzc2FnZSBsb2FkZXI+IGNhbiBiZSAnaW5tZW0nLCAnaWN1JywgJ2ljb252JyIKKyAgICBlY2hvICIgICAgICAgLW4gPG5ldCBhY2Nlc3Nvcj4gY2FuIGJlICdmaWxlb25seScsICdsaWJ3d3cnIgogICAgIGVjaG8gIiAgICAgICAtdCA8dHJhbnNjb2Rlcj4gY2FuIGJlICdpY3UnIG9yICduYXRpdmUnIgogICAgIGVjaG8gIiAgICAgICAtciA8dGhyZWFkIG9wdGlvbj4gY2FuIGJlICdwdGhyZWFkJyBvciAnZGNlJyAob25seSB1c2VkIG9uIEhQLTExKSIKICAgICBlY2hvICIgICAgICAgLWwgPGV4dHJhIGxpbmtlciBvcHRpb25zPiIKQEAgLTg4LDI0ICsxNTIsMjYgQEAKICAgICBlY2hvICIgICAgICAgLWggKHRvIGdldCBoZWxwIG9uIHRoZSBhYm92ZSBjb21tYW5kcykiCiB9CiAKK0VSUk9SX0VYSVRfQ09ERT0xCisKIGlmIHRlc3QgJHsxfW8gPSAibyI7IHRoZW4KICAgIHVzYWdlCi0gICBleGl0IC0xCisgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfQogZmkKIAotaWYgdGVzdCAke1hNTDRDUk9PVH1vID0gIm8iOyB0aGVuCi0gICBlY2hvIEVSUk9SIDogWW91IGhhdmUgbm90IHNldCB5b3VyIFhNTDRDUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZQoraWYgdGVzdCAke1hFUkNFU0NST09UfW8gPSAibyI7IHRoZW4KKyAgIGVjaG8gRVJST1IgOiBZb3UgaGF2ZSBub3Qgc2V0IHlvdXIgWEVSQ0VTQ1JPT1QgZW52aXJvbm1lbnQgdmFyaWFibGUKICAgIGVjaG8gVGhvdWdoIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBjcmVhdGluZyBtYWtlZmlsZXMsCiAgICBlY2hvIHRoaXMgaXMganVzdCBhIGdlbmVyYWwgd2FybmluZyB0byBwcmV2ZW50IHlvdSBmcm9tIHBpdGZhbGxzIGluIGZ1dHVyZS4gUGxlYXNlCi0gICBlY2hvIHNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxsZWQgWE1MNENST09UIHRvIGluZGljYXRlIHdoZXJlIHlvdSBpbnN0YWxsZWQKLSAgIGVjaG8gdGhlIFhNTDRDIGZpbGVzLCBhbmQgcnVuIHRoaXMgY29tbWFuZCBhZ2FpbiB0byBwcm9jZWVkLiBTZWUgdGhlIGRvY3VtZW50YXRpb24KKyAgIGVjaG8gc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbGxlZCBYRVJDRVNDUk9PVCB0byBpbmRpY2F0ZSB3aGVyZSB5b3UgaW5zdGFsbGVkCisgICBlY2hvIHRoZSBYRVJDRVMtQyBmaWxlcywgYW5kIHJ1biB0aGlzIGNvbW1hbmQgYWdhaW4gdG8gcHJvY2VlZC4gU2VlIHRoZSBkb2N1bWVudGF0aW9uCiAgICBlY2hvIGZvciBhbiBleGFtcGxlIGlmIHlvdSBhcmUgc3RpbGwgY29uZnVzZWQuCi0gICBleGl0IC0xCisgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfQogZmkKIAogaWYgdGVzdCAkMSA9ICItaCI7IHRoZW4KICAgIHVzYWdlCi0gICBleGl0IC0xCisgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfQogZmkKIAogIyBHZXQgdGhlIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCkBAIC0xMTMsMTMgKzE3OSwxMyBAQAogaWYgWyAkPyAhPSAwIF0KICAgIHRoZW4KICAgIHVzYWdlCi0gICBleGl0IC0xCisgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfQogZmkKIAogIyBTZXQgdXAgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBlYWNoIHBhcmFtZXRlcgogZGVidWc9b2ZmICAgICAgICAgICAgICAgICMgYnkgZGVmYXVsdCBkZWJ1ZyBpcyBvZmYKIHRyYW5zY29kZXI9bmF0aXZlICAgICAgICAjIGJ5IGRlZmF1bHQgdXNlIG5hdGl2ZSB0cmFuc2NvZGVyCi1tc2dsb2FkZXI9aWNvbnYgICAgICAgICAgIyBieSBkZWZhdWx0IHVzZSBuYXRpdmUgdHJhbnNjb2RlcgorbXNnbG9hZGVyPWlubWVtICAgICAgICAgICMgYnkgZGVmYXVsdCB1c2UgbmF0aXZlIHRyYW5zY29kZXIKIG5ldGFjY2Vzc29yPWZpbGVvbmx5ICAgICAjIGJ5IGRlZmF1bHQgdXNlIGZpbGVvbmx5CiAKIGZvciBpIGluICQqCkBAIC0xNTcsNyArMjIzLDcgQEAKICAgIAogICAgLWgpIAogICAgICAgICB1c2FnZQotICAgICAgICBleGl0IC0xOzsgCisgICAgICAgIGV4aXQgJHtFUlJPUl9FWElUX0NPREV9OzsgCiAgICAKICAgIC0tKSAKICAgICAgICAgc2hpZnQ7IGJyZWFrOzsgCkBAIC0xNzAsMTQ5ICsyMzYsMTk1IEBACiBlY2hvICJDKysgQ29tcGlsZXI6ICRjcHBjb21waWxlciIKIGVjaG8gIkV4dHJhIGNvbXBpbGUgb3B0aW9uczogJGNvbXBpbGVyb3B0aW9uIgogZWNobyAiRXh0cmEgbGluayBvcHRpb25zOiAkbGlua2Vyb3B0aW9uIgotaWYgdGVzdCAkZGVidWcgPSAib2ZmIjsgdGhlbgotICAgIGVjaG8gIkRlYnVnIGlzIE9GRiIKLSAgICBkZWJ1Z2ZsYWc9Ii13IC1PIjsKLWVsc2UKLSAgICBlY2hvICJEZWJ1ZyBpcyBPTiIKLSAgICBkZWJ1Z2ZsYWc9Ii1nIjsKLWZpCiBlY2hvICJNZXNzYWdlIExvYWRlcjogJG1zZ2xvYWRlciIKIGVjaG8gIk5ldCBBY2Nlc3NvcjogJG5ldGFjY2Vzc29yIgogZWNobyAiVHJhbnNjb2RlcjogJHRyYW5zY29kZXIiCiBlY2hvICJUaHJlYWQgb3B0aW9uOiAkdGhyZWFkIgogCisKKyMKICMgTm93IGNoZWNrIGlmIHRoZSBvcHRpb25zIGFyZSBjb3JyZWN0IG9yIG5vdCwgYmFpbCBvdXQgaWYgaW5jb3JyZWN0CisjCisKIGNhc2UgJHBsYXRmb3JtIGluCi0gICBhaXggfCBsaW51eCB8IHNvbGFyaXMgfCBocC0xMCB8IGhwLTExKQorICAgYWl4IHwgbGludXggfCBzb2xhcmlzIHwgaHAtMTAgfCBocC0xMSB8IGlyaXgpCiAgICAgICAgIyBwbGF0Zm9ybSBoYXMgYmVlbiByZWNvZ25pemVkCiAgICAgICAgOzsKICAgICopCiAgICAgICBlY2hvICJJIGRvIG5vdCByZWNvZ25pemUgdGhlIHBsYXRmb3JtICckcGxhdGZvcm0nLiBQbGVhc2UgdHlwZSAnJHswfSAtaCcgZm9yIGhlbHAuIgotICAgICAgZXhpdCAtMTs7CisgICAgICBleGl0ICR7RVJST1JfRVhJVF9DT0RFfTs7CiBlc2FjCiAKLSMgTm93IGNoZWNrIGZvciB0aGUgdHJhbnNjb2RlcgotdHJhbnNjb2Rlcm9wdGlvbj0iLURYTUxfVVNFX05BVElWRV9UUkFOU0NPREVSIgorCisjCisjIEVuYWJsZSBkZWJ1Z2dpbmcgb3Igbm90Li4uCisjCisKK2lmIHRlc3QgJGRlYnVnID0gIm9mZiI7IHRoZW4KKyAgICBlY2hvICJEZWJ1ZyBpcyBPRkYiCisgICAgZGVidWdmbGFnPSItTyI7CitlbHNlCisgICAgZWNobyAiRGVidWcgaXMgT04iCisgICAgZGVidWdmbGFnPSItZyI7CitmaQorCisKKworIworIyBDaGVjayBmb3IgdGhlIHRocmVhZGluZyBvcHRpb24gb25seSBmb3IgaHAtMTEKKyMKKwordGhyZWFkaW5nTGlicz0iLWxwdGhyZWFkIgoraWYgdGVzdCAkcGxhdGZvcm0gPSAiaHAtMTEiOyB0aGVuCisgICAgaWYgdGVzdCAkdGhyZWFkOyB0aGVuCisgICAgY2FzZSAkdGhyZWFkIGluCisgICAgICAgcHRocmVhZCkKKyAgICAgICAgICAgOzsKKyAgICAKKyAgICAgICBkY2UpCisgICAgICAgICAgIHRocmVhZGluZ0xpYnM9Ii1sY21hIjsKKyAgICAgICAgICAgdGhyZWFkaW5nRGVmaW5lcz0iLURfUFRIUkVBRFNfRFJBRlQ0IC1EWE1MX1VTRV9EQ0UiIDs7CisgICAgCisgICAgICAgKikKKyAgICAgICAgICAgZWNobyAiSSBkbyBub3QgcmVjb2duaXplIHRoZSB0aHJlYWQgb3B0aW9uICckdGhyZWFkJy4gUGxlYXNlIHR5cGUgJyR7MH0gLWgnIGZvciBoZWxwLiIKKyAgICAgICAgICAgZXhpdCAke0VSUk9SX0VYSVRfQ09ERX07OworICAgIGVzYWMKKyAgICBmaQorZWxpZiB0ZXN0ICRwbGF0Zm9ybSA9ICJhaXgiOyB0aGVuCisgICAgdGhyZWFkaW5nTGlicz0iLWxwdGhyZWFkcyIKK2VsaWYgdGVzdCAkcGxhdGZvcm0gPSAiaHAtMTAiOyB0aGVuCisgICAgdGhyZWFkaW5nTGlicz0iLWxjbWEiCisgICAgdGhyZWFkaW5nRGVmaW5lcz0iLURYTUxfVVNFX0RDRSIKK2ZpCisKKworIworIyBOb3cgY2hlY2sgZm9yIHdoYXQga2luZCBvZiB0cmFuc2NvZGluZyBzZXJ2aWNlIGlzIGRlc2lyZWQuCisjCisKK3RyYW5zY29kaW5nRGVmaW5lcz0iLURYTUxfVVNFX05BVElWRV9UUkFOU0NPREVSIgogVFJBTlNDT0RFUj1OQVRJVkUKIAogaWYgdGVzdCAkdHJhbnNjb2RlcjsgdGhlbgogY2FzZSAkdHJhbnNjb2RlciBpbgogICAgaWN1KQotICAgICAgIHRyYW5zY29kZXJvcHRpb249Ii1EWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUiIgOwotICAgICAgIFRSQU5TQ09ERVI9SUNVIDs7CisgICAgICAgaWYgdGVzdCAteiAkSUNVUk9PVDsgdGhlbgorICAgICAgICAgICBlY2hvICcqKipFcnJvcioqKiBJQ1VST09UIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdCBkZWZpbmVkLiBFeGl0aW5nLi4uJzsKKyAgICAgICAgICAgZXhpdCAke0VSUk9SX0VYSVRfQ09ERX07CisgICAgICAgZmkKKyAgICAgICB0cmFuc2NvZGluZ0RlZmluZXM9Ii1EWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUiAtSSR7SUNVUk9PVH0vaW5jbHVkZSI7CisgICAgICAgdHJhbnNjb2RpbmdMaWJzPSItTCR7SUNVUk9PVH0vbGliIC1saWN1LXVjIjsKKyAgICAgICBUUkFOU0NPREVSPUlDVTs7CiAKICAgIG5hdGl2ZSkKLSAgICAgICB0cmFuc2NvZGVyb3B0aW9uPSItRFhNTF9VU0VfTkFUSVZFX1RSQU5TQ09ERVIiIDsKLSAgICAgICBUUkFOU0NPREVSPU5BVElWRSA7OworICAgICAgIDs7CiAKICAgICopCiAgICAgICBlY2hvICJJIGRvIG5vdCByZWNvZ25pemUgdGhlIHRyYW5zY29kZXIgb3B0aW9uICckdHJhbnNjb2RlcicuIFBsZWFzZSB0eXBlICckezB9IC1oJyBmb3IgaGVscC4iCi0gICAgICBleGl0IC0xOzsKKyAgICAgIGV4aXQgJHtFUlJPUl9FWElUX0NPREV9OzsKIGVzYWMKIGZpCiAKIGV4cG9ydCBUUkFOU0NPREVSCiAKKworIwogIyBOb3cgY2hlY2sgZm9yIHRoZSBtZXNzYWdlIGxvYWRlcgotTUVTU0FHRUxPQURFUj1JTk1FTTsgICAjIEJ5IGRlZmF1bHQgdXNlIGluLW1lbW9yeQotbXNnbG9hZGVyb3B0aW9uPSItRFhNTF9VU0VfSU5NRU1fTUVTU0FHRUxPQURFUiIKKyMKKworTUVTU0FHRUxPQURFUj1JTk1FTSAgICAgICAgICMgQnkgZGVmYXVsdCB1c2UgaW4tbWVtb3J5Cittc2dsb2FkZXJEZWZpbmVzPSItRFhNTF9VU0VfSU5NRU1fTUVTU0FHRUxPQURFUiIKIAogaWYgdGVzdCAkbXNnbG9hZGVyIDsgdGhlbgogY2FzZSAkbXNnbG9hZGVyIGluCiAgICBpY3UpCisgICAgICAgaWYgdGVzdCAteiAkSUNVUk9PVCA7IHRoZW4KKyAgICAgICAgICAgZWNobyAnKioqRXJyb3IqKiogSUNVUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3QgZGVmaW5lZC4gRXhpdGluZy4uLic7CisgICAgICAgICAgIGV4aXQgJHtFUlJPUl9FWElUX0NPREV9OworICAgICAgIGZpCiAgICAgICAgTUVTU0FHRUxPQURFUj1JQ1U7Ci0gICAgICAgbXNnbG9hZGVyb3B0aW9uPSItRFhNTF9VU0VfSUNVX01FU1NBR0VMT0FERVIiIDs7CisgICAgICAgbXNnbG9hZGVyRGVmaW5lcz0iLURYTUxfVVNFX0lDVV9NRVNTQUdFTE9BREVSIiA7OwogCiAgICBpbm1lbSkKLSAgICAgICBNRVNTQUdFTE9BREVSPUlOTUVNOwotICAgICAgIG1zZ2xvYWRlcm9wdGlvbj0iLURYTUxfVVNFX0lOTUVNX01FU1NBR0VMT0FERVIiIDs7CisgICAgICAgOzsKIAogICAgaWNvbnYpCiAgICAgICAgTUVTU0FHRUxPQURFUj1JQ09OVjsKLSAgICAgICBtc2dsb2FkZXJvcHRpb249Ii1EWE1MX1VTRV9JQ09OVl9NRVNTQUdFTE9BREVSIiA7OworICAgICAgIG1zZ2xvYWRlckRlZmluZXM9Ii1EWE1MX1VTRV9JQ09OVl9NRVNTQUdFTE9BREVSIiA7OwogCiAgICAqKQotICAgICAgZWNobyAiSSBkbyBub3QgcmVjb2duaXplIHRoZSBtZXNzYWdlIGxvYWRlciBvcHRpb24gJyRtc2dsb2FkZXInLiBQbGVhc2UgdHlwZSAnJHswfSAtaCcgZm9yIGhlbHAuIgotICAgICAgZXhpdCAtMTs7CisgICAgICBlY2hvICJJIGRvIG5vdCByZWNvZ25pemUgdGhlIG1lc3NhZ2UgbG9hZGVyIG9wdGlvbiAnJG1zZ2xvYWRlcicuIFBsZWFzZSB0eXBlICckezB9IC1oJyBmb3IgaGVscC4iOworICAgICAgZXhpdCAke0VSUk9SX0VYSVRfQ09ERX07OwogZXNhYwogZmkKIAogZXhwb3J0IE1FU1NBR0VMT0FERVIKIAotIyBDaGVjayBmb3IgdGhlIHRocmVhZGluZyBvcHRpb24gb25seSBmb3IgaHAtMTEKLWlmIHRlc3QgJHBsYXRmb3JtID0gImhwLTExIjsgdGhlbgotICAgIGlmIHRlc3QgJHRocmVhZDsgdGhlbgotICAgIGNhc2UgJHRocmVhZCBpbgotICAgICAgIHB0aHJlYWQpCi0gICAgICAgICAgIHRocmVhZGluZ29wdGlvbj0iLURYTUxfVVNFX1BUSFJFQUQiIDs7Ci0gICAgCi0gICAgICAgZGNlKQotICAgICAgICAgICB0aHJlYWRpbmdvcHRpb249Ii1EWE1MX1VTRV9EQ0UiIDs7Ci0gICAgCi0gICAgICAgKikKLSAgICAgICAgICBlY2hvICJJIGRvIG5vdCByZWNvZ25pemUgdGhlIHRocmVhZCBvcHRpb24gJyR0aHJlYWQnLiBQbGVhc2UgdHlwZSAnJHswfSAtaCcgZm9yIGhlbHAuIgotICAgICAgICAgIGV4aXQgLTE7OwotICAgIGVzYWMKLSAgICBlbHNlCi0gICAgICAgICAgZWNobyAiWW91IG11c3QgcHJvdmlkZSBhIHRocmVhZCBvcHRpb24gZm9yIEhQVVgtMTEiLiBDYW5ub3QgcHJvY2VlZCBhbnkgZnVydGhlci4KLSAgICAgICAgICBleGl0IC0xOwotICAgIGZpCisKKworCisjCisjIENoZWNrIGZvciB0aGUgdHlwZSBvZiBuZXQgYWNjZXNzb3IKKyMKKworVVNFTElCV1dXPTA7ICAgICAgICAgICAgICAgICAgICMgQnkgZGVmYXVsdCB1c2UgZmlsZS1vbmx5CitpZiB0ZXN0ICRuZXRhY2Nlc3NvciA7IHRoZW4KK2Nhc2UgJG5ldGFjY2Vzc29yIGluCisgICBmaWxlb25seSkKKyAgICAgICBuZXRhY2Nlc3NvckRlZmluZXM9IiIgOzsKKworICAgbGlid3d3KQorICAgICAgIGlmIHRlc3QgLXogJHtMSUJXV1dST09UfSA7IHRoZW4KKyAgICAgICAgICAgZWNobyAiWW91IGhhdmUgbm90IGRlZmluZWQgeW91ciBMSUJXV1dST09UIGVudmlyb25tZW50IHZhcmlhYmxlLiBDYW5ub3QgcHJvY2VlZCBmdXJ0aGVyIC4uLiIKKyAgICAgICAgICAgZXhpdCAke0VSUk9SX0VYSVRfQ09ERX07CisgICAgICAgZmkKKyAgICAgICBuZXRhY2Nlc3NvckRlZmluZXM9Ii1EWE1MX1VTRV9ORVRBQ0NFU1NPUl9MSUJXV1cgLUkke0xJQldXV1JPT1R9L2luY2x1ZGUiIDsKKyAgICAgICBuZXRhY2Nlc3NvckxpYnM9Ii1MJHtMSUJXV1dST09UfS9saWIgLWx3d3ciOworICAgICAgIFVTRUxJQldXVz0xOzsgCisKKyAgICopCisgICAgICBlY2hvICJJIGRvIG5vdCByZWNvZ25pemUgdGhlIG5ldGFjY2Vzc29yIG9wdGlvbiAnJG5ldGFjY2Vzc29yJy4gUGxlYXNlIHR5cGUgJyR7MH0gLWgnIGZvciBoZWxwLiIKKyAgICAgIGV4aXQgJHtFUlJPUl9FWElUX0NPREV9OzsKK2VzYWMKIGZpCiAKK2V4cG9ydCBVU0VMSUJXV1cKKworCisKKyMKICMgU2V0IHRoZSBDIGNvbXBpbGVyIGFuZCBDKysgY29tcGlsZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzCi1DQz0kY2NvbXBpbGVyOyBleHBvcnQgQ0MKLUNYWD0kY3BwY29tcGlsZXI7IGV4cG9ydCBDWFgKKyMKIAogY2FzZSAkY3BwY29tcGlsZXIgaW4KLSAgIHhsQyB8IHhsYyB8IHhsQ19yIHwgeGxjX3IpCi0gICAgICAgTERGTEFHUz0iLWxDIjsgZXhwb3J0IExERkxBR1MKLSAgICAgICBMSUJTPSItTC91c3IvbHBwL3hsQy9saWIiOyBleHBvcnQgTElCUyA7OwotCi0gICBnKysgfCBjKyspCi0gICAgICAgTERGTEFHUz0iLWxjIjsgZXhwb3J0IExERkxBR1MKLSAgICAgICBMSUJTPSItTC91c3IvbG9jYWwvbGliIjsgZXhwb3J0IExJQlMgOzsKLQotICAgY2MgfCBDQykKLSAgICAgICBMREZMQUdTPSItbEMiOyBleHBvcnQgTERGTEFHUwotICAgICAgIExJQlM9Ii1ML3Vzci9saWIgLUwvdXNyL2Njcy9saWIiOyBleHBvcnQgTElCUyA7OwotCi0gICBhY2MgfCBhQ0MpCi0gICAgICAgTERGTEFHUz0iLWxDIjsgZXhwb3J0IExERkxBR1MKLSAgICAgICBMSUJTPSItTC91c3IvbGliIC1ML29wdC9hQ0MvbGliIjsgZXhwb3J0IExJQlMgOzsKKyAgIHhsQyB8IHhsYyB8IHhsQ19yIHwgeGxjX3IgfCBnKysgfCBjKysgfCBjYyB8IENDIHwgYUNDKQorICAgICAgOzsKIAogICAgKikKICAgICAgIGVjaG8gIkkgZG8gbm90IHJlY29nbml6ZSB0aGUgQysrIGNvbXBpbGVyICckY3BwY29tcGlsZXInLiBDb250aW51aW5nIGFueXdheSAuLi4iIAogICAgICAgOzsKIGVzYWMKIAotVVNFTElCV1dXPTA7ICAgIyBCeSBkZWZhdWx0IHVzZSBmaWxlLW9ubHkKLSMgQ2hlY2sgZm9yIHRoZSB0eXBlIG9mIG5ldCBhY2Nlc3NvcgotaWYgdGVzdCAkbmV0YWNjZXNzb3IgOyB0aGVuCi1jYXNlICRuZXRhY2Nlc3NvciBpbgotICAgZmlsZW9ubHkpCi0gICAgICAgbmV0YWNjZXNzb3JvcHRpb249IiIgOzsKK0NDPSIkY2NvbXBpbGVyIgorZXhwb3J0IENDCiAKLSAgIGxpYnd3dykKLSAgICAgICBpZiB0ZXN0IC16ICR7TElCV1dXUk9PVH0gOyB0aGVuCi0gICAgICAgICAgIGVjaG8gIllvdSBoYXZlIG5vdCBkZWZpbmVkIHlvdXIgTElCV1dXUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQ2Fubm90IHByb2NlZWQgZnVydGhlciAuLi4iCi0gICAgICAgICAgIGV4aXQgLTE7Ci0gICAgICAgZmkKLSAgICAgICBuZXRhY2Nlc3Nvcm9wdGlvbj0iLURYTUxfVVNFX05FVEFDQ0VTU09SX0xJQldXVyAtSSR7TElCV1dXUk9PVH0vaW5jbHVkZSIgOwotICAgICAgIExJQlM9IiRMSUJTIC1MJHtMSUJXV1dST09UfS9saWIgLWx3d3ciOwotICAgICAgIFVTRUxJQldXVz0xOzsgCitDWFg9IiRjcHBjb21waWxlciIKK2V4cG9ydCBDWFgKIAotICAgKikKLSAgICAgIGVjaG8gIkkgZG8gbm90IHJlY29nbml6ZSB0aGUgbmV0YWNjZXNzb3Igb3B0aW9uICckbmV0YWNjZXNzb3InLiBQbGVhc2UgdHlwZSAnJHswfSAtaCcgZm9yIGhlbHAuIgotICAgICAgZXhpdCAtMTs7Ci1lc2FjCi1maQogCi1leHBvcnQgVVNFTElCV1dXOwotCisjCiAjIFNldCB0aGUgZXh0cmEgQyBhbmQgQysrIGNvbXBpbGVyIGZsYWdzCi1DWFhGTEFHUz0iJGRlYnVnZmxhZyAkY29tcGlsZXJvcHRpb24gJHRyYW5zY29kZXJvcHRpb24gJG1zZ2xvYWRlcm9wdGlvbiAkdGhyZWFkaW5nb3B0aW9uICRuZXRhY2Nlc3Nvcm9wdGlvbiI7IGV4cG9ydCBDWFhGTEFHUwotQ0ZMQUdTPSIkZGVidWdmbGFnICRjb21waWxlcm9wdGlvbiAkdHJhbnNjb2Rlcm9wdGlvbiAkbXNnbG9hZGVyb3B0aW9uICR0aHJlYWRpbmdvcHRpb24gJG5ldGFjY2Vzc29yb3B0aW9uIjsgZXhwb3J0IENGTEFHUworIworCitDWFhGTEFHUz0iJGRlYnVnZmxhZyAkdHJhbnNjb2RpbmdEZWZpbmVzICRtc2dsb2FkZXJEZWZpbmVzICR0aHJlYWRpbmdEZWZpbmVzICRuZXRhY2Nlc3NvckRlZmluZXMiCitleHBvcnQgQ1hYRkxBR1MKKworQ0ZMQUdTPSIkZGVidWdmbGFnICR0cmFuc2NvZGluZ0RlZmluZXMgJG1zZ2xvYWRlckRlZmluZXMgJHRocmVhZGluZ0RlZmluZXMgJG5ldGFjY2Vzc29yRGVmaW5lcyIKK2V4cG9ydCBDRkxBR1MKKworTElCUz0iJHRyYW5zY29kaW5nTGlicyAkdGhyZWFkaW5nTGlicyAkbmV0YWNjZXNzb3JMaWJzIgorZXhwb3J0IExJQlMKKwogCiBlY2hvCiBybSAtZiBjb25maWcuY2FjaGUKQEAgLTMyMiw3ICs0MzQsNyBAQAogCiBlY2hvCiBlY2hvIElmIHRoZSByZXN1bHQgb2YgdGhlIGFib3ZlIGNvbW1hbmRzIGxvb2sgT0sgdG8geW91LCBnbyB0byB0aGUgZGlyZWN0b3J5Ci1lY2hvICR7WE1MNENST09UfS9zcmMgYW5kIHR5cGUgXCJtYWtlXCIgdG8gbWFrZSB0aGUgWE1MNEMgc3lzdGVtLgorZWNobyAke1hFUkVDU0NST09UfS9zcmMgYW5kIHR5cGUgXCJtYWtlXCIgdG8gbWFrZSB0aGUgWEVSRUNTLUMgc3lzdGVtLgogCi1leGl0IDA7CitleGl0ICAwOwogCmRpZmYgLS1naXQgYS9zcmMvc2F4L01ha2VmaWxlLmluIGIvc3JjL3NheC9NYWtlZmlsZS5pbgppbmRleCBhMWVhM2FiLi40NThiOGRjIDEwMDY0NAotLS0gYS9zcmMvc2F4L01ha2VmaWxlLmluCisrKyBiL3NyYy9zYXgvTWFrZWZpbGUuaW4KQEAgLTU1LDggKzU1LDEyIEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6NDYgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMTo1OTo1OSAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KK1JldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjQ2ICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NTowMSAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNjQsNyArNjgsOCBAQAogIwogCiBQTEFURk9STSA9IEBwbGF0Zm9ybUAKLUNPTVBJTEVSID0gQGNvbXBpbGVyQAorQ0MgID0gQGNjQAorQ1hYID0gQGN4eEAKIENYWEZMQUdTID0gQGN4eGZsYWdzQAogQ0ZMQUdTID0gQGNmbGFnc0AKIFBSRUZJWCA9IEBwcmVmaXhACkBAIC0xMjcsOSArMTMyLDYgQEAKIAlAZm9yIGZpbGUgaW4gJChTQVhfQ1BQX1BVQkhFQURFUlMpOyBkbyBcCiAJcm0gLWYgJChYTUxfSU5DX0RJUikvJChNT0RVTEUpLyQkZmlsZTsgXAogCWRvbmUKLQlAZm9yIGZpbGUgaW4gJChTQVhfQ19GSUxFUyk7IGRvIFwKLQlybSAtZiAkKFhNTF9JTkNfRElSKS8kKE1PRFVMRSkvJCRmaWxlOyBcCi0JZG9uZQogCUBlY2hvICJSZW1vdmluZyBhbGwgJChNT0RVTEUpIG9iamVjdCBmaWxlcyAuLi4iCiAJQGZvciBmaWxlIGluICQoU0FYX0NQUF9PQkpFQ1RTKTsgZG8gXAogCXJtIC1mICQoQUxMX09CSkVDVFNfRElSKS8kJGZpbGU7IFwKZGlmZiAtLWdpdCBhL3NyYy91dGlsL0F1dG9TZW5zZS5ocHAgYi9zcmMvdXRpbC9BdXRvU2Vuc2UuaHBwCmluZGV4IDMyOTUwNjIuLjViMDg3ZDYgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL0F1dG9TZW5zZS5ocHAKKysrIGIvc3JjL3V0aWwvQXV0b1NlbnNlLmhwcApAQCAtNTYsOCArNTYsMTEgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjAzOjU1ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMSAxNzoxNjoxNiAgcmFodWxqCisgKiBBZGRlZCBzdXBwb3J0IGZvciBJUklYIDYuNS41IHVzaW5nIFNHSSBNSVBTcHJvIEMrKyA3LjMgYW5kIDcuMjEgZ2VuZXJhdGluZyAzMiBiaXQgb2JqZWN0cy4gQ2hhbmdlcyBzdWJtaXR0ZWQgYnkgTWFyYyBTdHVlc3NlbAorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDM6NTUgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ1OjAzICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNjksNyArNzIsNyBAQAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBUaGlzIHNlY3Rpb24gYXR0ZW1wdHMgdG8gYXV0byBkZXRlY3QgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIEl0IHdpbGwgc2V0Ci0vLyAgdXAgWE1MNEMgc3BlY2lmaWMgZGVmaW5lcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSByZXN0IG9mIHRoZSBjb2RlLgorLy8gIHVwIFhlcmNlc0Mgc3BlY2lmaWMgZGVmaW5lcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSByZXN0IG9mIHRoZSBjb2RlLgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgZGVmaW5lZChfQUlYKQogICAgICNkZWZpbmUgWE1MX0FJWApAQCAtODUsNiArODgsOSBAQAogI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pCiAgICAgI2RlZmluZSBYTUxfTElOVVgKICAgICAjZGVmaW5lIFhNTF9VTklYCisjZWxpZiBkZWZpbmVkKElSSVgpCisgICAgI2RlZmluZSBYTUxfSVJJWAorICAgICNkZWZpbmUgWE1MX1VOSVgKICNlbGlmIGRlZmluZWQoX19NVlNfXykKICAgICAjZGVmaW5lIFhNTF9PRTM5MAogICAgICNkZWZpbmUgWE1MX1VOSVgKQEAgLTE0OSw2ICsxNTUsOCBAQAogICAgICNlbGlmIChfX2NwbHVzcGx1cyA9PSAxOTk3MDcgfHwgX19jcGx1c3BsdXMgPT0gMTk5NzExKQogICAgICAgICAjZGVmaW5lIFhNTF9IUFVYX2FDQwogICAgICNlbmRpZgorI2VsaWYgZGVmaW5lZChYTUxfSVJJWCkKKyAgICAjZGVmaW5lIFhNTF9NSVBTUFJPX0NDCiAjZWxpZiBkZWZpbmVkKFhNTF9UQU5ERU0pCiAgICAgI2RlZmluZSBYTUxfVEFOREVNQ0MKICNlbGlmIGRlZmluZWQoX19saW51eF9fKQpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvQ29tcGlsZXJzL0JvcmxhbmRDRGVmcy5ocHAgYi9zcmMvdXRpbC9Db21waWxlcnMvQm9ybGFuZENEZWZzLmhwcAppbmRleCA3YzYwODI5Li4yMzE0YTY2IDEwMDY0NAotLS0gYS9zcmMvdXRpbC9Db21waWxlcnMvQm9ybGFuZENEZWZzLmhwcAorKysgYi9zcmMvdXRpbC9Db21waWxlcnMvQm9ybGFuZENEZWZzLmhwcApAQCAtNTYsOCArNTYsMTMgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjI4ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMiAxOTowMjo1NyAgcm9kZGV5CisgKiBHZXQgcmlkIG9mIGEgZmV3IHN0YXRpY2FsbHkgZGVmaW5lZCBYTUxNdXRleCBvYmplY3RzLCBhbmQgbGF6eSBldmFsIHRoZW0KKyAqIHVzaW5nIGF0b21pYyBjb21wYXJlIGFuZCBzd2FwLiBJIHNvbWVob3cgbGV0IGl0IGdldCBieSBtZSB0aGF0IHdlIGRvbid0CisgKiB3YW50IGFueSBzdGF0aWMvZ2xvYmFsIG9iamVjdHMgYXQgYWxsLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6MjggIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ1OjIyICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtOTUsMyArMTAwLDEwIEBACiAjaWZkZWYgX0RFQlVHCiAjZGVmaW5lIFhNTDRDX0RFQlVHCiAjZW5kaWYKKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBUaGUgbmFtZSBvZiB0aGUgRExMIGFzIGJ1aWx0IGJ5IHRoZSBCb3JsYW5kIHByb2plY3RzLiBBdCB0aGlzIHRpbWUsIGl0CisvLyAgZG9lcyBub3QgdXNlIHRoZSB2ZXJzaW9uaW5nIHN0dWZmLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjb25zdCBjaGFyKiBjb25zdCBYTUw0Q19ETExOYW1lID0gIlhlcmNlc0xpYjsKZGlmZiAtLWdpdCBhL3NyYy91dGlsL0NvbXBpbGVycy9DU2V0RGVmcy5ocHAgYi9zcmMvdXRpbC9Db21waWxlcnMvQ1NldERlZnMuaHBwCmluZGV4IGZmZGIzZjIuLmExNGZmNzIgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL0NvbXBpbGVycy9DU2V0RGVmcy5ocHAKKysrIGIvc3JjL3V0aWwvQ29tcGlsZXJzL0NTZXREZWZzLmhwcApAQCAtNTYsOCArNTYsMTEgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjMxICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8xMiAyMDozNjo1MSAgcmFodWxqCisgKiBDaGFuZ2VkIGxpYnJhcnkgbmFtZSB0byB4ZXJjZXMtYy5saWIuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNzozMSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDU6MjIgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMjMsNCArMTI2LDQgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFRoZSBuYW1lIG9mIHRoZSBETEwgdGhhdCBpcyBidWlsdCBieSB0aGUgQ1NldCBDKysgdmVyc2lvbiBvZiB0aGUgc3lzdGVtLgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb25zdCBjaGFyKiBjb25zdCBYTUw0Q19ETExOYW1lID0gImxpYklYWE1MNEMiOworY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJsaWJ4ZXJjZXMtYyI7CmRpZmYgLS1naXQgYS9zcmMvdXRpbC9Db21waWxlcnMvQ29kZVdhcnJpb3JEZWZzLmhwcCBiL3NyYy91dGlsL0NvbXBpbGVycy9Db2RlV2FycmlvckRlZnMuaHBwCmluZGV4IGMyYmJjYzMuLmFhZmVhMTIgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL0NvbXBpbGVycy9Db2RlV2FycmlvckRlZnMuaHBwCisrKyBiL3NyYy91dGlsL0NvbXBpbGVycy9Db2RlV2FycmlvckRlZnMuaHBwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6MjkgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzExLzEyIDIwOjM2OjUzICByYWh1bGoKKyAqIENoYW5nZWQgbGlicmFyeSBuYW1lIHRvIHhlcmNlcy1jLmxpYi4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjI5ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NToyMiAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTExMiw0ICsxMTUsNCBAQAogLy8gIHZlcnNpb25pbmcgc3RyaW5nLiBUaGlzIGlzIGRlZmluZWQgaW4gWE1MNENEZWZzLmhwcCB3aGljaCBpcyB3aGF0IHRoaXMKIC8vICBmaWxlIGlzIGluY2x1ZGVkIGludG8uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAiSVhYTUw0QyIgWE1MNENfRExMVmVyc2lvblN0cjsKK2NvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAieGVyY2VzLWMiIFhNTDRDX0RMTFZlcnNpb25TdHI7CmRpZmYgLS1naXQgYS9zcmMvdXRpbC9Db21waWxlcnMvR0NDRGVmcy5ocHAgYi9zcmMvdXRpbC9Db21waWxlcnMvR0NDRGVmcy5ocHAKaW5kZXggNzNjMGMzOC4uM2UyMGYyNyAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvQ29tcGlsZXJzL0dDQ0RlZnMuaHBwCisrKyBiL3NyYy91dGlsL0NvbXBpbGVycy9HQ0NEZWZzLmhwcApAQCAtNTYsOCArNTYsMTEgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjMyICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8xMiAyMDozNjo1NCAgcmFodWxqCisgKiBDaGFuZ2VkIGxpYnJhcnkgbmFtZSB0byB4ZXJjZXMtYy5saWIuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNzozMiAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDU6MjMgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMTcsNCArMTIwLDQgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFRoZSBuYW1lIG9mIHRoZSBETEwgdGhhdCBpcyBidWlsdCBieSB0aGUgR0NDIHZlcnNpb24gb2YgdGhlIHN5c3RlbS4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJsaWJJWFhNTDRDIjsKK2NvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAibGlieGVyY2VzLWMiOwpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvQ29tcGlsZXJzL0dOVUdEZWZzLmhwcCBiL3NyYy91dGlsL0NvbXBpbGVycy9HTlVHRGVmcy5ocHAKaW5kZXggMjI3YmNiMi4uYWM3MTU5MiAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvQ29tcGlsZXJzL0dOVUdEZWZzLmhwcAorKysgYi9zcmMvdXRpbC9Db21waWxlcnMvR05VR0RlZnMuaHBwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6MzMgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzExLzEyIDIwOjM2OjU1ICByYWh1bGoKKyAqIENoYW5nZWQgbGlicmFyeSBuYW1lIHRvIHhlcmNlcy1jLmxpYi4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjMzICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NToyMyAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTEwNiw0ICsxMDksNCBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgVGhlIG5hbWUgb2YgdGhlIERMTCB0aGF0IGlzIGJ1aWx0IGJ5IHRoZSBHTlVHIHZlcnNpb24gb2YgdGhlIHN5c3RlbS4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJsaWJJWFhNTDRDIjsKK2NvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAibGlieGVyY2VzLWMiOwpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvQ29tcGlsZXJzL0hQQ0NEZWZzLmhwcCBiL3NyYy91dGlsL0NvbXBpbGVycy9IUENDRGVmcy5ocHAKaW5kZXggNDJmN2E1NS4uYTQ3YjlhMCAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvQ29tcGlsZXJzL0hQQ0NEZWZzLmhwcAorKysgYi9zcmMvdXRpbC9Db21waWxlcnMvSFBDQ0RlZnMuaHBwCkBAIC01Niw4ICs1NiwxNSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6MzQgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS40ICAxOTk5LzExLzIzIDAyOjAwOjEyICByYWh1bGoKKyAqIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KK1JldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorICoKKyAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8xMiAyMDozNjo1NyAgcmFodWxqCisgKiBDaGFuZ2VkIGxpYnJhcnkgbmFtZSB0byB4ZXJjZXMtYy5saWIuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNzozNCAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDU6MjMgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC04NCw2ICs5MSwxNCBAQAogLy8gIERlZmluZSBvdXIgdmVyc2lvbiBvZiB0aGUgWE1MIGNoYXJhY3RlcgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFhNTENoOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVVEYxNkNoOworCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIERlZmluZSB1bnNpZ25lZCAxNiBhbmQgMzIgYml0cyBpbnRlZ2VycworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBYTUxVSW50MTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICBYTUxVSW50MzI7CiAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05NSwxNCArMTEwLDYgQEAKIAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBGb3JjZSBvbiB0aGUgWE1MNEMgZGVidWcgdG9rZW4gaWYgaXQgd2FzIG9uIGluIHRoZSBidWlsZCBlbnZpcm9ubWVudAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaWYgMAotI2RlZmluZSBYTUw0Q19ERUJVRwotI2VuZGlmCi0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgVGhlIG5hbWUgb2YgdGhlIERMTCB0aGF0IGlzIGJ1aWx0IGJ5IHRoZSBIUCBDQyB2ZXJzaW9uIG9mIHRoZSBzeXN0ZW0uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAibGliSVhYTUw0QyI7Citjb25zdCBjaGFyKiBjb25zdCBYTUw0Q19ETExOYW1lID0gImxpYnhlcmNlcy1jIjsKZGlmZiAtLWdpdCBhL3NyYy91dGlsL0NvbXBpbGVycy9JQk1WQU9TMkRlZnMuaHBwIGIvc3JjL3V0aWwvQ29tcGlsZXJzL0lCTVZBT1MyRGVmcy5ocHAKaW5kZXggYWU2YTMwOC4uNDE0ZWYxMCAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvQ29tcGlsZXJzL0lCTVZBT1MyRGVmcy5ocHAKKysrIGIvc3JjL3V0aWwvQ29tcGlsZXJzL0lCTVZBT1MyRGVmcy5ocHAKQEAgLTU2LDggKzU2LDExIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNzozNSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMTIgMjA6MzY6NTggIHJhaHVsagorICogQ2hhbmdlZCBsaWJyYXJ5IG5hbWUgdG8geGVyY2VzLWMubGliLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6MzUgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ1OjI0ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTAyLDcgKzEwNSw3IEBACiAvLyAgdmVyc2lvbmluZyBzdHJpbmcuIFRoaXMgaXMgZGVmaW5lZCBpbiBYTUw0Q0RlZnMuaHBwIHdoaWNoIGlzIHdoYXQgdGhpcwogLy8gIGZpbGUgaXMgaW5jbHVkZWQgaW50by4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJWQU9YTUw0QyIgWE1MNENfRExMVmVyc2lvblN0cjsKK2NvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAiVkFPWEVSQ0VTQyIgWE1MNENfRExMVmVyc2lvblN0cjsKIAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy91dGlsL0NvbXBpbGVycy9JQk1WQVczMkRlZnMuaHBwIGIvc3JjL3V0aWwvQ29tcGlsZXJzL0lCTVZBVzMyRGVmcy5ocHAKaW5kZXggNWQxZjRmZS4uZGRkYmVkOSAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvQ29tcGlsZXJzL0lCTVZBVzMyRGVmcy5ocHAKKysrIGIvc3JjL3V0aWwvQ29tcGlsZXJzL0lCTVZBVzMyRGVmcy5ocHAKQEAgLTU2LDggKzU2LDExIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNzozNiAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMTIgMjA6MzY6NTkgIHJhaHVsagorICogQ2hhbmdlZCBsaWJyYXJ5IG5hbWUgdG8geGVyY2VzLWMubGliLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6MzYgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ1OjI0ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTAzLDQgKzEwNiw0IEBACiAvLyAgdmVyc2lvbmluZyBzdHJpbmcuIFRoaXMgaXMgZGVmaW5lZCBpbiBYTUw0Q0RlZnMuaHBwIHdoaWNoIGlzIHdoYXQgdGhpcwogLy8gIGZpbGUgaXMgaW5jbHVkZWQgaW50by4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJWQVdYTUw0QyIgWE1MNENfRExMVmVyc2lvblN0cjsKK2NvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAiVkFXWEVSQ0VTQyIgWE1MNENfRExMVmVyc2lvblN0cjsKZGlmZiAtLWdpdCBhL3NyYy91dGlsL0NvbXBpbGVycy9NSVBTcHJvRGVmcy5jcHAgYi9zcmMvdXRpbC9Db21waWxlcnMvTUlQU3Byb0RlZnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTM3M2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdXRpbC9Db21waWxlcnMvTUlQU3Byb0RlZnMuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCisgKiAKKyAqIENvcHlyaWdodCAoYykgMTk5OSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAorICogcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIAorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogCisgKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKKyAqICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKKyAqICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorICogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisgKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCisgKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorICogCisgKiA0LiBUaGUgbmFtZXMgIlhlcmNlcyIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAorICogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCisgKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVcQGFwYWNoZS5vcmcuCisgKiAKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiLAorICogICAgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQgd2FzCisgKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMTk5OSwgSW50ZXJuYXRpb25hbAorICogQnVzaW5lc3MgTWFjaGluZXMsIEluYy4sIGh0dHA6Ly93d3cuaWJtLmNvbSAuICBGb3IgbW9yZSBpbmZvcm1hdGlvbgorICogb24gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlCisgKiA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCisgKi8KKworLyoqCisgKiAkTG9nJAorICogUmV2aXNpb24gMS4xICAxOTk5LzEyLzAxIDE3OjE2OjE3ICByYWh1bGoKKyAqIEFkZGVkIHN1cHBvcnQgZm9yIElSSVggNi41LjUgdXNpbmcgU0dJIE1JUFNwcm8gQysrIDcuMyBhbmQgNy4yMSBnZW5lcmF0aW5nIDMyIGJpdCBvYmplY3RzLiBDaGFuZ2VzIHN1Ym1pdHRlZCBieSBNYXJjIFN0dWVzc2VsCisgKgorICovCisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgSW5jbHVkZXMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgPHV0aWwvQ29tcGlsZXJzL01JUFNwcm9EZWZzLmhwcD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisKKworaW50IHN0cmljbXAoY29uc3QgY2hhciogY29uc3Qgc3RyMSwgY29uc3QgY2hhciogY29uc3QgIHN0cjIpIAoreworICAgIHJldHVybiBzdHJjYXNlY21wKHN0cjEsIHN0cjIpOworfQorCitpbnQgc3RybmljbXAoY29uc3QgY2hhciogY29uc3Qgc3RyMSwgY29uc3QgY2hhciogY29uc3QgIHN0cjIsIGNvbnN0IHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RybmNhc2VjbXAoIHN0cjEsIHN0cjIsIChzaXplX3QpY291bnQpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvQ29tcGlsZXJzL01JUFNwcm9EZWZzLmhwcCBiL3NyYy91dGlsL0NvbXBpbGVycy9NSVBTcHJvRGVmcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzYzk1MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy91dGlsL0NvbXBpbGVycy9NSVBTcHJvRGVmcy5ocHAKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKKyAqIAorICogQ29weXJpZ2h0IChjKSAxOTk5IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCisgKiByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAKKyAqIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAorICogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAorICogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCisgKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKKyAqICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKKyAqICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCisgKiAKKyAqIDQuIFRoZSBuYW1lcyAiWGVyY2VzIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0CisgKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKKyAqICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZVxAYXBhY2hlLm9yZy4KKyAqIAorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIsCisgKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZCB3YXMKKyAqIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAxOTk5LCBJbnRlcm5hdGlvbmFsCisgKiBCdXNpbmVzcyBNYWNoaW5lcywgSW5jLiwgaHR0cDovL3d3dy5pYm0uY29tIC4gIEZvciBtb3JlIGluZm9ybWF0aW9uCisgKiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKKyAqIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KKyAqLworCisvKioKKyAqICRMb2ckCisgKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTIvMDEgMTc6MTY6MTcgIHJhaHVsagorICogQWRkZWQgc3VwcG9ydCBmb3IgSVJJWCA2LjUuNSB1c2luZyBTR0kgTUlQU3BybyBDKysgNy4zIGFuZCA3LjIxIGdlbmVyYXRpbmcgMzIgYml0IG9iamVjdHMuIENoYW5nZXMgc3VibWl0dGVkIGJ5IE1hcmMgU3R1ZXNzZWwKKyAqCisgKi8KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERlZmluZSB0aGVzZSBhd2F5IGZvciB0aGlzIHBsYXRmb3JtCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNkZWZpbmUgUExBVEZPUk1fRVhQT1JUCisjZGVmaW5lIFBMQVRGT1JNX0lNUE9SVAorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIERlZmluZSBvdXIgdmVyc2lvbiBvZiB0aGUgWE1MIGNoYXJhY3RlcgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFhNTENoOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVVEYxNkNoOworCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIERlZmluZSB1bnNpZ25lZCAxNiBhbmQgMzIgYml0cyBpbnRlZ2VycworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBYTUxVSW50MTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICBYTUxVSW50MzI7CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgUHJvdmlkZSBwcm90b3R5cGVzIGZvciBzb21lIHN0cmluZyBtZXRob2RzIHRoYXQgYXJlIG5vdCBhbHdheXMgYXZhaWxhYmxlCisvLyAgb24gYWxsIHBsYXRmb3Jtcy4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IHN0cmljbXAoY29uc3QgY2hhciogY29uc3Qgc3RyMSwgY29uc3QgY2hhciogY29uc3QgIHN0cjIpOworaW50IHN0cm5pY21wKGNvbnN0IGNoYXIqIGNvbnN0IHN0cjEsIGNvbnN0IGNoYXIqIGNvbnN0ICBzdHIyLCBjb25zdCB1bnNpZ25lZCBpbnQgY291bnQpOworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBUaGUgbmFtZSBvZiB0aGUgRFNPIHRoYXQgaXMgYnVpbHQgYnkgdGhlIE1JUFNwcm8gQysrIHZlcnNpb24gb2YgdGhlCisvLyAgc3lzdGVtLiBXZSBhcHBlbmQgYSBwcmV2aW91c2x5IGRlZmluZWQgdG9rZW4gd2hpY2ggaG9sZHMgdGhlIERTTworLy8gIHZlcnNpb25pbmcgc3RyaW5nLiBUaGlzIGlzIGRlZmluZWQgaW4gWE1MNENEZWZzLmhwcCB3aGljaCBpcyB3aGF0IHRoaXMKKy8vICBmaWxlIGlzIGluY2x1ZGVkIGludG8uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAibGlieGVyY2VzLWMiOwpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvQ29tcGlsZXJzL01ha2VmaWxlLmluIGIvc3JjL3V0aWwvQ29tcGlsZXJzL01ha2VmaWxlLmluCmluZGV4IGZkNTAzYzkuLjc3YWM1NjggMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL0NvbXBpbGVycy9NYWtlZmlsZS5pbgorKysgYi9zcmMvdXRpbC9Db21waWxlcnMvTWFrZWZpbGUuaW4KQEAgLTU1LDggKzU1LDE1IEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6MzYgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMyAgMTk5OS8xMi8wMSAxNzoxNjoxNyAgcmFodWxqCisjIEFkZGVkIHN1cHBvcnQgZm9yIElSSVggNi41LjUgdXNpbmcgU0dJIE1JUFNwcm8gQysrIDcuMyBhbmQgNy4yMSBnZW5lcmF0aW5nIDMyIGJpdCBvYmplY3RzLiBDaGFuZ2VzIHN1Ym1pdHRlZCBieSBNYXJjIFN0dWVzc2VsCisjCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMjowMDoxMyAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KK1JldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjM2ICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NToyNCAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNjQsNyArNzEsOCBAQAogIwogCiBQTEFURk9STSA9IEBwbGF0Zm9ybUAKLUNPTVBJTEVSID0gQGNvbXBpbGVyQAorQ0MgID0gQGNjQAorQ1hYID0gQGN4eEAKIENYWEZMQUdTID0gQGN4eGZsYWdzQAogQ0ZMQUdTID0gQGNmbGFnc0AKIFBSRUZJWCA9IEBwcmVmaXhACkBAIC05MSwyOCArOTksMzIgQEAKIAlJQk1WQVczMkRlZnMuaHBwIFwKIAlTdW5DQ0RlZnMuaHBwIFwKIAlTdW5LYWlEZWZzLmhwcCBcCisgICAgTUlQU3Byb0RlZnMuaHBwIFwKIAlUYW5kZW1DQ0RlZnMuaHBwIFwKIAlWQ1BQRGVmcy5ocHAKIAogCi1pZmVxICgke0NPTVBJTEVSfSxDQykKK2lmZXEgKCR7Q1hYfSxDQykKICAgICBpZmVxICgke1BMQVRGT1JNfSxTT0xBUklTKQogICAgICAgICBDUFBfT0JKRUNUUyA9IFN1bkNDRGVmcy5vCiAgICAgZW5kaWYKICAgICBpZmVxICgke1BMQVRGT1JNfSxIUFVYKQogICAgICAgICBDUFBfT0JKRUNUUyA9IEhQQ0NEZWZzLm8KICAgICBlbmRpZgorICAgIGlmZXEgKCR7UExBVEZPUk19LElSSVgpCisgICAgICAgIENQUF9PQkpFQ1RTID0gTUlQU3Byb0RlZnMubworICAgIGVuZGlmCiBlbmRpZgotaWZlcSAoJHtDT01QSUxFUn0seGxDX3IpCitpZmVxICgke0NYWH0seGxDX3IpCiAgICAgQ1BQX09CSkVDVFMgPSBDU2V0RGVmcy5vCiBlbmRpZgotaWZlcSAoJHtDT01QSUxFUn0sZysrKQoraWZlcSAoJHtDWFh9LGcrKykKICAgICBDUFBfT0JKRUNUUyA9IEdDQ0RlZnMubwogZW5kaWYKLWlmZXEgKCR7Q09NUElMRVJ9LGFDQykKK2lmZXEgKCR7Q1hYfSxhQ0MpCiAJQ1BQX09CSkVDVFMgPSBIUENDRGVmcy5vCiBlbmRpZgotaWZlcSAoJHtDT01QSUxFUn0sYysrKQoraWZlcSAoJHtDWFh9LGMrKykKICAgICBpZmVxICgke1BMQVRGT1JNfSxPUzM5MCkKICAgICAgICAgQ1BQX09CSkVDVFMgPSBNVlNDUFBEZWZzLm8KICAgICBlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvQ29tcGlsZXJzL1N1bkNDRGVmcy5ocHAgYi9zcmMvdXRpbC9Db21waWxlcnMvU3VuQ0NEZWZzLmhwcAppbmRleCA1NzBiZTZiLi44YTE3OWU5IDEwMDY0NAotLS0gYS9zcmMvdXRpbC9Db21waWxlcnMvU3VuQ0NEZWZzLmhwcAorKysgYi9zcmMvdXRpbC9Db21waWxlcnMvU3VuQ0NEZWZzLmhwcApAQCAtNTYsOCArNTYsMTggQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjM5ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuNCAgMTk5OS8xMS8xNyAyMTo0OTo0MiAgYWJhZ2NoaQorICogQWRkZWQgdGhlIGRlZmluaXRpb25zIG9mIFhNTFVJbnQxNiBhbmQgWE1MVUludDMyCisgKiBQUjoKKyAqIE9idGFpbmVkIGZyb206CisgKiBTdWJtaXR0ZWQgYnk6CisgKiBSZXZpZXdlZCBieToKKyAqCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMTIgMjA6Mzc6MDAgIHJhaHVsagorICogQ2hhbmdlZCBsaWJyYXJ5IG5hbWUgdG8geGVyY2VzLWMubGliLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6MzkgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4yICAxOTk5LzExLzA4IDIwOjQ1OjI1ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtODMsNiArOTMsMTEgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBYTUxDaDsKIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgRGVmaW5lIHVuc2lnbmVkIDE2IGFuZCAzMiBiaXRzIGludGVnZXJzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgIFhNTFVJbnQxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgIFhNTFVJbnQzMjsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgRm9yY2Ugb24gdGhlIFhNTDRDIGRlYnVnIHRva2VuIGlmIGl0IHdhcyBvbiBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQKQEAgLTExNiw0ICsxMzEsNCBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgVGhlIG5hbWUgb2YgdGhlIERMTCB0aGF0IGlzIGJ1aWx0IGJ5IHRoZSBDQyB2ZXJzaW9uIG9mIHRoZSBzeXN0ZW0uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAibGliSVhYTUw0QyI7Citjb25zdCBjaGFyKiBjb25zdCBYTUw0Q19ETExOYW1lID0gImxpYnhlcmNlcy1jIjsKZGlmZiAtLWdpdCBhL3NyYy91dGlsL0NvbXBpbGVycy9TdW5LYWlEZWZzLmhwcCBiL3NyYy91dGlsL0NvbXBpbGVycy9TdW5LYWlEZWZzLmhwcAppbmRleCAxNThkMTgxLi5lYWRhNmUyIDEwMDY0NAotLS0gYS9zcmMvdXRpbC9Db21waWxlcnMvU3VuS2FpRGVmcy5ocHAKKysrIGIvc3JjL3V0aWwvQ29tcGlsZXJzL1N1bkthaURlZnMuaHBwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6NDAgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzExLzEyIDIwOjM3OjAxICByYWh1bGoKKyAqIENoYW5nZWQgbGlicmFyeSBuYW1lIHRvIHhlcmNlcy1jLmxpYi4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjQwICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NToyNSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTExMiw3ICsxMTUsNyBAQAogLy8gIHZlcnNpb25pbmcgc3RyaW5nLiBUaGlzIGlzIGRlZmluZWQgaW4gWE1MNENEZWZzLmhwcCB3aGljaCBpcyB3aGF0IHRoaXMKIC8vICBmaWxlIGlzIGluY2x1ZGVkIGludG8uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAiS0FJWE1MNEMiIFhNTDRDX0RMTFZlcnNpb25TdHI7Citjb25zdCBjaGFyKiBjb25zdCBYTUw0Q19ETExOYW1lID0gIktBSVhFUkNFU0MiIFhNTDRDX0RMTFZlcnNpb25TdHI7CiAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvdXRpbC9Db21waWxlcnMvVGFuZGVtQ0NEZWZzLmhwcCBiL3NyYy91dGlsL0NvbXBpbGVycy9UYW5kZW1DQ0RlZnMuaHBwCmluZGV4IDlmYmYzM2UuLjJmYjE3YmIgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL0NvbXBpbGVycy9UYW5kZW1DQ0RlZnMuaHBwCisrKyBiL3NyYy91dGlsL0NvbXBpbGVycy9UYW5kZW1DQ0RlZnMuaHBwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6NDAgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzExLzEyIDIwOjM3OjAzICByYWh1bGoKKyAqIENoYW5nZWQgbGlicmFyeSBuYW1lIHRvIHhlcmNlcy1jLmxpYi4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjQwICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NToyNSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTExNyw0ICsxMjAsNCBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgVGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgdGhhdCBpcyBidWlsdCBieSB0aGUgVGFuZGVtIHZlcnNpb24gb2YgdGhlIHN5c3RlbS4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJsaWJJWFhNTDRDIjsKK2NvbnN0IGNoYXIqIGNvbnN0IFhNTDRDX0RMTE5hbWUgPSAibGlieGVyY2VzLWMiOwpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvQ29tcGlsZXJzL1ZDUFBEZWZzLmhwcCBiL3NyYy91dGlsL0NvbXBpbGVycy9WQ1BQRGVmcy5ocHAKaW5kZXggYTA0MTFjNi4uYjlkZDUwZSAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvQ29tcGlsZXJzL1ZDUFBEZWZzLmhwcAorKysgYi9zcmMvdXRpbC9Db21waWxlcnMvVkNQUERlZnMuaHBwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6NDEgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzEwIDIxOjI2OjE0ICBhYmFnY2hpCisgKiBDaGFuZ2VkIHRoZSBETEwgbmFtZQorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6NDEgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ1OjI1ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtMTEzLDQgKzExNiw0IEBACiAvLyAgdmVyc2lvbmluZyBzdHJpbmcuIFRoaXMgaXMgZGVmaW5lZCBpbiBYTUw0Q0RlZnMuaHBwIHdoaWNoIGlzIHdoYXQgdGhpcwogLy8gIGZpbGUgaXMgaW5jbHVkZWQgaW50by4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJJWFhNTDRDIiBYTUw0Q19ETExWZXJzaW9uU3RyOworY29uc3QgY2hhciogY29uc3QgWE1MNENfRExMTmFtZSA9ICJ4ZXJjZXMtY18iIFhNTDRDX0RMTFZlcnNpb25TdHI7CmRpZmYgLS1naXQgYS9zcmMvdXRpbC9NYWtlZmlsZS5pbiBiL3NyYy91dGlsL01ha2VmaWxlLmluCmluZGV4IDQyNGM2MGEuLmUxMTg2YjQgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL01ha2VmaWxlLmluCisrKyBiL3NyYy91dGlsL01ha2VmaWxlLmluCkBAIC01NSw4ICs1NSwxMiBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA0OjQwICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDI6MDA6MDUgIHJhaHVsagorIyBDb2RlIG5vdyB3b3JrcyB1bmRlciBIUFVYIDExLiBUZXN0ZWQgaW5tZW1vcnkgbWVzc2FnZSBsb2FkZXIuCitSZXZhbXBlZCBtYWtlZmlsZXMuIEJ1aWxkcyB3aXRoIGJvdGggRENFIHRocmVhZHMgYXMgd2VsbCBhcyBwdGhyZWFkIGxpYnJhcmllcy4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNDo0MCAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMDggMjA6NDU6MDkgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTY0LDcgKzY4LDggQEAKICMKIAogUExBVEZPUk0gPSBAcGxhdGZvcm1ACi1DT01QSUxFUiA9IEBjb21waWxlckAKK0NDICA9IEBjY0AKK0NYWCA9IEBjeHhACiBDWFhGTEFHUyA9IEBjeHhmbGFnc0AKIENGTEFHUyA9IEBjZmxhZ3NACiBQUkVGSVggPSBAcHJlZml4QApkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvTXNnTG9hZGVycy9JQ1UvSUNVTXNnTG9hZGVyLmNwcCBiL3NyYy91dGlsL01zZ0xvYWRlcnMvSUNVL0lDVU1zZ0xvYWRlci5jcHAKaW5kZXggMDY2ZGY0YS4uYTU0Y2E2ZSAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvTXNnTG9hZGVycy9JQ1UvSUNVTXNnTG9hZGVyLmNwcAorKysgYi9zcmMvdXRpbC9Nc2dMb2FkZXJzL0lDVS9JQ1VNc2dMb2FkZXIuY3BwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6MjMgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzE5IDIxOjI0OjAzICBhcnVuYTEKKyAqIGluY29ycG9yYXRlZCBJQ1UgMS4zLjEgcmVsYXRlZCBjaGFuZ2VzIGludCBoZSBmaWxlCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNzoyMyAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMDggMjA6NDU6MjYgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMTcsOSArMTIwLDkgQEAKICAgICB9CiAKICAgICAvLyBPaywgbGV0cyB0cnkgdG8gY3JlYXRlIHRoZSBidW5kbGUgbm93Ci0gICAgVUVycm9yQ29kZSBlcnIgPSBaRVJPX0VSUk9SOworICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwogICAgIGZCdW5kbGUgPSBuZXcgUmVzb3VyY2VCdW5kbGUodG1wUGF0aCwgZXJyKTsKLSAgICBpZiAoIVNVQ0NFU1MoZXJyKSkKKyAgICBpZiAoIVVfU1VDQ0VTUyhlcnIpKQogICAgIHsKICAgICAgICAgLy8gPFRCRD4gTmVlZCB0byBwYW5pYyBhZ2FpbiBoZXJlPwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy91dGlsL01zZ0xvYWRlcnMvSUNVL01ha2VmaWxlLmluIGIvc3JjL3V0aWwvTXNnTG9hZGVycy9JQ1UvTWFrZWZpbGUuaW4KaW5kZXggNDlhNmE3Ny4uMzk3NWRmYyAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvTXNnTG9hZGVycy9JQ1UvTWFrZWZpbGUuaW4KKysrIGIvc3JjL3V0aWwvTXNnTG9hZGVycy9JQ1UvTWFrZWZpbGUuaW4KQEAgLTU1LDggKzU1LDEyIEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6MjUgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMjowMDoxOCAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KK1JldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjI1ICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NToyNiAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNjQsNyArNjgsOCBAQAogIwogCiBQTEFURk9STSA9IEBwbGF0Zm9ybUAKLUNPTVBJTEVSID0gQGNvbXBpbGVyQAorQ0MgID0gQGNjQAorQ1hYID0gQGN4eEAKIENYWEZMQUdTID0gQGN4eGZsYWdzQAogQ0ZMQUdTID0gQGNmbGFnc0AKIFBSRUZJWCA9IEBwcmVmaXhACmRpZmYgLS1naXQgYS9zcmMvdXRpbC9Nc2dMb2FkZXJzL0luTWVtb3J5L0luTWVtTXNnTG9hZGVyLmNwcCBiL3NyYy91dGlsL01zZ0xvYWRlcnMvSW5NZW1vcnkvSW5NZW1Nc2dMb2FkZXIuY3BwCmluZGV4IDRlYThlN2IuLjc3Y2Q5MGIgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL01zZ0xvYWRlcnMvSW5NZW1vcnkvSW5NZW1Nc2dMb2FkZXIuY3BwCisrKyBiL3NyYy91dGlsL01zZ0xvYWRlcnMvSW5NZW1vcnkvSW5NZW1Nc2dMb2FkZXIuY3BwCkBAIC01Niw4ICs1NiwxMSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6MTkgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzEyLzAzIDAwOjQ4OjQ3ICByYWh1bGoKKyAqIFJlbW92ZWQgYnl0ZXN3YXBwaW5nIGxvZ2ljIGFzIGl0cyBub3QgbmVlZGVkIGZvciBJbk1lbW9yeSBtZXNzYWdlIGxvYWRpbmcuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNzoxOSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMDggMjA6NDU6MjYgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC0xMjMsMTEgKzEyNiw3IEBACiAgICAgICAgIGNvbnN0IFhNTENoKiBzcmNQdHIgPSBnWE1MRXJyQXJyYXlbbXNnVG9Mb2FkIC0gMV07CiAgICAgICAgIHdoaWxlICgqc3JjUHRyICYmIChvdXRQdHIgPCBlbmRQdHIpKQogICAgICAgICB7Ci0gICAgICAgICAgICAjaWYgZGVmaW5lZChFTkRJQU5NT0RFX0xJVFRMRSkKICAgICAgICAgICAgICpvdXRQdHIrKyA9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICNlbHNlCi0gICAgICAgICAgICAqb3V0UHRyKysgPSBCaXRPcHM6OnN3YXBCeXRlcygqc3JjUHRyKyspOwotICAgICAgICAgICAgI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgKm91dFB0ciA9IDA7CiAgICAgfQpAQCAtMTM2LDExICsxMzUsNyBAQAogICAgICAgICBjb25zdCBYTUxDaCogc3JjUHRyID0gZ1hNTEV4Y2VwdEFycmF5W21zZ1RvTG9hZCAtIDFdOwogICAgICAgICB3aGlsZSAoKnNyY1B0ciAmJiAob3V0UHRyIDwgZW5kUHRyKSkKICAgICAgICAgewotICAgICAgICAgICAgI2lmIGRlZmluZWQoRU5ESUFOTU9ERV9MSVRUTEUpCiAgICAgICAgICAgICAqb3V0UHRyKysgPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAjZWxzZQotICAgICAgICAgICAgKm91dFB0cisrID0gQml0T3BzOjpzd2FwQnl0ZXMoKnNyY1B0cisrKTsKLSAgICAgICAgICAgICNlbmRpZgogICAgICAgICB9CiAgICAgICAgICpvdXRQdHIgPSAwOwogICAgIH0KQEAgLTE0OSwxMSArMTQ0LDcgQEAKICAgICAgICAgY29uc3QgWE1MQ2gqIHNyY1B0ciA9IGdYTUxWYWxpZGl0eUFycmF5W21zZ1RvTG9hZCAtIDFdOwogICAgICAgICB3aGlsZSAoKnNyY1B0ciAmJiAob3V0UHRyIDwgZW5kUHRyKSkKICAgICAgICAgewotICAgICAgICAgICAgI2lmIGRlZmluZWQoRU5ESUFOTU9ERV9MSVRUTEUpCiAgICAgICAgICAgICAqb3V0UHRyKysgPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAjZWxzZQotICAgICAgICAgICAgKm91dFB0cisrID0gQml0T3BzOjpzd2FwQnl0ZXMoKnNyY1B0cisrKTsKLSAgICAgICAgICAgICNlbmRpZgogICAgICAgICB9CiAgICAgICAgICpvdXRQdHIgPSAwOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy91dGlsL01zZ0xvYWRlcnMvSW5NZW1vcnkvTWFrZWZpbGUuaW4gYi9zcmMvdXRpbC9Nc2dMb2FkZXJzL0luTWVtb3J5L01ha2VmaWxlLmluCmluZGV4IGU3NGYwOTkuLmJkYzFhOGMgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL01zZ0xvYWRlcnMvSW5NZW1vcnkvTWFrZWZpbGUuaW4KKysrIGIvc3JjL3V0aWwvTXNnTG9hZGVycy9Jbk1lbW9yeS9NYWtlZmlsZS5pbgpAQCAtNTUsOCArNTUsMTIgQEAKICMgCiAjCiAjICRMb2ckCi0jIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNzoyMCAgdHdsCi0jIEluaXRpYWwgcmV2aXNpb24KKyMgUmV2aXNpb24gMS4yICAxOTk5LzExLzIzIDAyOjAwOjIyICByYWh1bGoKKyMgQ29kZSBub3cgd29ya3MgdW5kZXIgSFBVWCAxMS4gVGVzdGVkIGlubWVtb3J5IG1lc3NhZ2UgbG9hZGVyLgorUmV2YW1wZWQgbWFrZWZpbGVzLiBCdWlsZHMgd2l0aCBib3RoIERDRSB0aHJlYWRzIGFzIHdlbGwgYXMgcHRocmVhZCBsaWJyYXJpZXMuCisjCisjIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6MjAgIHR3bAorIyBJbml0aWFsIGNoZWNraW4KICMKICMgUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ1OjI3ICByYWh1bAogIyBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC02NCw3ICs2OCw4IEBACiAjCiAKIFBMQVRGT1JNID0gQHBsYXRmb3JtQAotQ09NUElMRVIgPSBAY29tcGlsZXJACitDQyAgPSBAY2NACitDWFggPSBAY3h4QAogQ1hYRkxBR1MgPSBAY3h4ZmxhZ3NACiBDRkxBR1MgPSBAY2ZsYWdzQAogUFJFRklYID0gQHByZWZpeEAKZGlmZiAtLWdpdCBhL3NyYy91dGlsL01zZ0xvYWRlcnMvTXNnQ2F0YWxvZy9NYWtlZmlsZS5pbiBiL3NyYy91dGlsL01zZ0xvYWRlcnMvTXNnQ2F0YWxvZy9NYWtlZmlsZS5pbgppbmRleCA3NGFhYmJlLi4zNWFhNDYxIDEwMDY0NAotLS0gYS9zcmMvdXRpbC9Nc2dMb2FkZXJzL01zZ0NhdGFsb2cvTWFrZWZpbGUuaW4KKysrIGIvc3JjL3V0aWwvTXNnTG9hZGVycy9Nc2dDYXRhbG9nL01ha2VmaWxlLmluCkBAIC01NSw4ICs1NSwxMiBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjE2ICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDI6MDA6MjUgIHJhaHVsagorIyBDb2RlIG5vdyB3b3JrcyB1bmRlciBIUFVYIDExLiBUZXN0ZWQgaW5tZW1vcnkgbWVzc2FnZSBsb2FkZXIuCitSZXZhbXBlZCBtYWtlZmlsZXMuIEJ1aWxkcyB3aXRoIGJvdGggRENFIHRocmVhZHMgYXMgd2VsbCBhcyBwdGhyZWFkIGxpYnJhcmllcy4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNzoxNiAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDU6MjcgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTY0LDcgKzY4LDggQEAKICMKIAogUExBVEZPUk0gPSBAcGxhdGZvcm1ACi1DT01QSUxFUiA9IEBjb21waWxlckAKK0NDICA9IEBjY0AKK0NYWCA9IEBjeHhACiBDWFhGTEFHUyA9IEBjeHhmbGFnc0AKIENGTEFHUyA9IEBjZmxhZ3NACiBQUkVGSVggPSBAcHJlZml4QApkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvTXV0ZXhlcy5jcHAgYi9zcmMvdXRpbC9NdXRleGVzLmNwcAppbmRleCA1NWQ5NzMyLi40MTQyZGU3IDEwMDY0NAotLS0gYS9zcmMvdXRpbC9NdXRleGVzLmNwcAorKysgYi9zcmMvdXRpbC9NdXRleGVzLmNwcApAQCAtNTYsOCArNTYsMTIgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA0OjQ1ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMiAxOTo0MjozNSAgcm9kZGV5CisgKiBHb3QgcmlkIG9mIGF0dGVtcHRzIHRvIGZhbmN5L3NjaG1hbnp5IGxhenkgZXZhbCBtdXRleCBpbXBsZW1lbnRhdGlvbiBhbmQganVzdAorICogZm9yY2UgYW55b25lIHdobyBuZWVkcyBhIGdsb2JhbC9zdGF0aWMgbXV0ZXggdG8gbGF6eSBldmFsIHRoYXQgdGhlbXNlbHZlcy4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA0OjQ1ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NTowOSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTgyLDYgKzg2LDggQEAKIAogICAgIGZIYW5kbGUoMCkKIHsKKyAgICAvLyBBc2sgdGhlIHBlci1wbGF0Zm9ybSBkcml2ZXIgdG8gbWFrZSB1cyBhIG11dGV4CisgICAgZkhhbmRsZSA9IFhNTFBsYXRmb3JtVXRpbHM6Om1ha2VNdXRleCgpOwogfQogCiAKQEAgLTEwMCwxMiArMTA2LDYgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdm9pZCBYTUxNdXRleDo6bG9jaygpCiB7Ci0gICAgaWYgKCFmSGFuZGxlKQotICAgIHsKLSAgICAgICAgdm9pZCogdG1wSGFuZGxlID0gWE1MUGxhdGZvcm1VdGlsczo6bWFrZU11dGV4KCk7Ci0gICAgICAgIGlmIChYTUxQbGF0Zm9ybVV0aWxzOjpjb21wYXJlQW5kU3dhcCgmZkhhbmRsZSwgdG1wSGFuZGxlLCAwKSAhPSAwKQotICAgICAgICAgICAgWE1MUGxhdGZvcm1VdGlsczo6Y2xvc2VNdXRleCh0bXBIYW5kbGUpOwotICAgIH0KICAgICBYTUxQbGF0Zm9ybVV0aWxzOjpsb2NrTXV0ZXgoZkhhbmRsZSk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy91dGlsL1BsYXRmb3Jtcy9BSVgvQUlYUGxhdGZvcm1VdGlscy5jcHAgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvQUlYL0FJWFBsYXRmb3JtVXRpbHMuY3BwCmluZGV4IDhmNDA4YWIuLmUwYjdkNjEgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL1BsYXRmb3Jtcy9BSVgvQUlYUGxhdGZvcm1VdGlscy5jcHAKKysrIGIvc3JjL3V0aWwvUGxhdGZvcm1zL0FJWC9BSVhQbGF0Zm9ybVV0aWxzLmNwcApAQCAtNTYsOCArNTYsMTcgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA3OjExICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuNCAgMTk5OS8xMi8wMyAwMjozNToyMiAgYXJ1bmExCisgKiBtdXRleCByZWN1cnNpdmUgYXR0cmlidXRlIGludHJvZHVjZWQgaW4gbWFrZU11dGV4CisgKgorICogUmV2aXNpb24gMS4zICAxOTk5LzEyLzAxIDAyOjU1OjQyICBhcnVuYTEKKyAqIEFkZGVkIHBhbmljIGNhbGxzIGFuZCBtb2RpZmllZCBtYWtlVHJhbnNTZXJ2aWNlIGZvciAgQUlYCisgKgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzIzIDAyOjAwOjM0ICByYWh1bGoKKyAqIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci5SZXZhbXBlZCBtYWtlZmlsZXMuIEJ1aWxkcyB3aXRoIGJvdGggRENFIHRocmVhZHMgYXMgd2VsbCBhcyBwdGhyZWFkIGxpYnJhcmllcy4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA3OjExICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuNiAgMTk5OS8xMS8wOCAyMDo0NToyOSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTczLDEwICs4Miw2IEBACiAjaW5jbHVkZSAgICA8c3lzL2F0b21pY19vcC5oPgogI2VuZGlmCiAKLSNpbmNsdWRlICAgIDx1dGlsL1BsYXRmb3JtVXRpbHMuaHBwPgotI2luY2x1ZGUgICAgPHV0aWwvUnVudGltZUV4Y2VwdGlvbi5ocHA+Ci0jaW5jbHVkZSAgICA8dXRpbC9KYW5pdG9yLmhwcD4KLSNpbmNsdWRlICAgIDx1dGlsL1hNTFN0cmluZy5ocHA+CiAjaW5jbHVkZSAgICA8c3RkaW8uaD4KICNpbmNsdWRlICAgIDxzdGRsaWIuaD4KICNpbmNsdWRlICAgIDxlcnJuby5oPgpAQCAtODYsNiArOTEsMTEgQEAKICNpbmNsdWRlICAgIDx1bmlzdGQuaD4KICNpbmNsdWRlIAk8c3lzL2xkci5oPgogCisjaW5jbHVkZSAgICA8dXRpbC9QbGF0Zm9ybVV0aWxzLmhwcD4KKyNpbmNsdWRlICAgIDx1dGlsL1J1bnRpbWVFeGNlcHRpb24uaHBwPgorI2luY2x1ZGUgICAgPHV0aWwvSmFuaXRvci5ocHA+CisjaW5jbHVkZSAgICA8dXRpbC9YTUxTdHJpbmcuaHBwPgorCiAjaWYgZGVmaW5lZCAoWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUikKICAgICAjaW5jbHVkZSA8dXRpbC9UcmFuc2NvZGVycy9JQ1UvSUNVVHJhbnNTZXJ2aWNlLmhwcD4KICNlbHNlICAgLy8gdXNlIG5hdGl2ZSB0cmFuc2NvZGVyCkBAIC0xNDUsNyArMTU1LDcgQEAKICAgICAvLyBIZXJlIHlvdSB3b3VsZCBhbHNvIHNldCB0aGUgZmdMaWJMb2NhdGlvbiBnbG9iYWwgdmFyaWFibGUKICAgICAvLyBYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uIGlzIHRoZSB2YXJpYWJsZSB0byBiZSBzZXQKIAotICAgIHN0YXRpYyBjb25zdCBjaGFyICogbGlicmFyeVBhdGggPSAwOworICAgIGNoYXIgKiBsaWJyYXJ5UGF0aCA9IDA7CiAKICAgICBjaGFyIGxpYk5hbWVbMjU2XTsKICAgICBzdHJjcHkobGliTmFtZSwgWE1MNENfRExMTmFtZSk7CkBAIC0xNTYsMTYgKzE2NiwxMiBAQAogICAgIGNoYXIgYnVmW2J1Zkxlbl07CQkgICAvLyBpdCdzIGluIHRoZSBzdGFjayBhbnl3YXkKIAogICAgIGlmIChsb2FkKGxpYk5hbWUsIExfTElCUEFUSF9FWEVDLCAiLiIpID09IE5VTEwpIHsKLQkJY2hhciBlcnJvckJ1ZmZlclsxMDI0XTsKLSAgICAgICAgc3ByaW50ZihlcnJvckJ1ZmZlciwgIkNvdWxkIG5vdCBsb2FkIGxpYnJhcnkgJyVzJyIsIGxpYk5hbWUpOwotCQlwZXJyb3IgKGVycm9yQnVmZmVyKTsKLSAgICAgICAgZXhpdCgtMSk7CisJCXBhbmljKCBYTUxQbGF0Zm9ybVV0aWxzOjpQYW5pY19DYW50RmluZExpYiApOwogICAgIH0KIAogICAgIGludCByZXR2YWwgPSBsb2FkcXVlcnkoTF9HRVRJTkZPLCBidWYsIGJ1Zkxlbik7CiAgICAgaWYgKHJldHZhbCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBsb2FkIGxpYnJhcnkgJyVzJy5cbiIsIGxpYk5hbWUpOwotICAgICAgICBleGl0KC0xKTsKKwkJcGFuaWMoIFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX0NhbnRGaW5kTGliICk7CiAgICAgfQogCiAgICAgc3RydWN0IGxkX2luZm8qIG9uZUJ1ZlB0ciA9IChzdHJ1Y3QgbGRfaW5mbyopYnVmOwpAQCAtMTk4LDcgKzIwNCw3IEBACiAKICAgICBpZiAoWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbiA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgcGFuaWMoIFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX05vVHJhbnNTZXJ2aWNlICk7CisgICAgICAgIHBhbmljKCBYTUxQbGF0Zm9ybVV0aWxzOjpQYW5pY19DYW50RmluZExpYiApOwogICAgIH0KIH0KIApAQCAtMjE3LDkgKzIyMyw4IEBACiAgICAgLy8gIGluIHRoZSAuXEludGwgc3ViZGlyZWN0b3J5IHVuZGVyIHRoaXMgRExMLgogICAgIC8vCiAKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqIHhtbDRjSW50bERpckVudlZhciA9ICJJQ1VfREFUQSI7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKiBzaGFyZWRMaWJFbnZWYXIgICAgPSAiTElCUEFUSCI7Ci0gICAgc3RhdGljIGNoYXIgKiBpbnRsUGF0aCA9IDA7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKiB4bWw0Y0ludGxEaXJFbnZWYXIJPSAiSUNVX0RBVEEiOworICAgIGNoYXIgKiAJCQkJaW50bFBhdGggCQkJPSAwOwogCiAgICAgY2hhciogZW52VmFsID0gZ2V0ZW52KHhtbDRjSW50bERpckVudlZhcik7CiAgICAgLy9jaGVjayBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQKQEAgLTIzNSw4OCArMjQwLDI3IEBACiAgICAgICAgICAgICBzdHJjYXQoKGNoYXIgKikgaW50bFBhdGgsICIvIik7CiAgICAgICAgIH0KIAkJSUNVVHJhbnNTZXJ2aWNlOjpzZXRJQ1VQYXRoKGludGxQYXRoKTsKLSAgICAgICAgaWYgKGludGxQYXRoICE9IE5VTEwpIGRlbGV0ZSBpbnRsUGF0aDsKKyAgICAgICAgZGVsZXRlIGludGxQYXRoOwogCiAgICAgICAgIHJldHVybiBuZXcgSUNVVHJhbnNTZXJ2aWNlOwogICAgIH0KIAotICAgIC8vCi0gICAgLy8gIElmIHdlIGRpZCBub3QgZmluZCB0aGUgZW52aXJvbm1lbnQgdmFyLCBzbyBsZXRzIHRyeSB0byBnbyB0aGUgYXV0bwotICAgIC8vICBzZWFyY2ggcm91dGUuCisgCS8vCisgICAgLy8gIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBJQ1VfREFUQSBpcyBub3Qgc2V0LCBhc3N1bWUgdGhhdCB0aGUKKyAgICAvLyAgY29udmVydGVyIGZpbGVzIGFyZSBzdG9yZWQgcmVsYXRpdmUgdG8gdGhlIFhlcmNlcy1DIGxpYnJhcnkuCiAgICAgLy8KIAotICAgIGNoYXIgbGliTmFtZVsyNTZdOwotICAgIHN0cmNweShsaWJOYW1lLCBYTUw0Q19ETExOYW1lKTsKLSAgICBzdHJjYXQobGliTmFtZSwgZ1hNTDRDVmVyc2lvblN0cik7Ci0gICAgc3RyY2F0KGxpYk5hbWUsICIuYSIpOworICAgIHVuc2lnbmVkIGludCAgbGVudCA9IHN0cmxlbihYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCIvaWN1L2RhdGEvIikgKyAxOworICAgIGludGxQYXRoID0gbmV3IGNoYXJbbGVudF07CisgICAgc3RyY3B5KGludGxQYXRoLCBYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uKTsKKyAgICBzdHJjYXQoaW50bFBhdGgsICIvaWN1L2RhdGEvIik7CiAKLSAgICBjaGFyKiBsaWJFbnZWYXIgPSBnZXRlbnYoc2hhcmVkTGliRW52VmFyKTsKLSAgICBjaGFyKiBsaWJQYXRoID0gTlVMTDsKLQotICAgIGlmIChsaWJFbnZWYXIgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICJFcnJvcjogQ291bGQgbm90IGxvY2F0ZSBpMThuIGNvbnZlcnRlciBmaWxlcy5cbiIpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAiRW52aXJvbm1lbnQgdmFyaWFibGUgJyVzJyBpcyBub3QgZGVmaW5lZC5cbiIsIHNoYXJlZExpYkVudlZhcik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICJFbnZpcm9ubWVudCB2YXJpYWJsZSAnSUNVX0RBVEEnIGlzIGFsc28gbm90IGRlZmluZWQuXG4iKTsKLSAgICAgICAgZXhpdCgtMSk7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBJdHMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIGNvcHkgYmVjYXVzZSBzdHJ0b2soKSBtb2RpZmllcyB0aGUKLSAgICAvLyBzdHJpbmcgYXMgaXQgcmV0dXJucyB0b2tlbnMuIFdlIGRvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZSBzdHJpbmcKLSAgICAvLyByZXR1cm5lZCB0byBieSBnZXRlbnYoKS4KLSAgICAvLwotCi0gICAgbGliUGF0aCA9IG5ldyBjaGFyW3N0cmxlbihsaWJFbnZWYXIpICsgMV07Ci0gICAgc3RyY3B5KGxpYlBhdGgsIGxpYkVudlZhcik7Ci0KLSAgICAvL0ZpcnN0IGRvIHRoZSBzZWFyY2hpbmcgcHJvY2VzcyBmb3IgdGhlIGZpcnN0IGRpcmVjdG9yeSBsaXN0aW5nCi0gICAgLy8KLSAgICBjaGFyKiAgYWxsUGF0aHMgPSBsaWJQYXRoOwotICAgIGNoYXIqICBsaWJQYXRoTmFtZTsKLQotICAgIHdoaWxlICgobGliUGF0aE5hbWUgPSBzdHJ0b2soYWxsUGF0aHMsICI6IikpICE9IE5VTEwpCi0gICAgewotICAgICAgICBGSUxFKiAgZHVtbXlGcHRyID0gMDsKLSAgICAgICAgYWxsUGF0aHMgPSAwOwotCi0gICAgICAgIGNoYXIqIGxpYmZpbGUgPSBuZXcgY2hhcltzdHJsZW4obGliUGF0aE5hbWUpICsgc3RybGVuKGxpYk5hbWUpICsgMl07Ci0gICAgICAgIHN0cmNweShsaWJmaWxlLCBsaWJQYXRoTmFtZSk7Ci0gICAgICAgIHN0cmNhdChsaWJmaWxlLCAiLyIpOwotICAgICAgICBzdHJjYXQobGliZmlsZSwgbGliTmFtZSk7Ci0KLSAgICAgICAgZHVtbXlGcHRyID0gKEZJTEUgKikgZm9wZW4obGliZmlsZSwgInJiIik7Ci0gICAgICAgIGRlbGV0ZSBbXSBsaWJmaWxlOwotICAgICAgICBpZiAoZHVtbXlGcHRyICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZjbG9zZShkdW1teUZwdHIpOwotICAgICAgICAgICAgaW50bFBhdGggPQotICAgICAgICAgICAgICBuZXcgY2hhcltzdHJsZW4obGliUGF0aE5hbWUpKyBzdHJsZW4oIi9pY3UvZGF0YS8iKSsxXTsKLSAgICAgICAgICAgIHN0cmNweSgoY2hhciAqKSBpbnRsUGF0aCwgbGliUGF0aE5hbWUpOwotICAgICAgICAgICAgc3RyY2F0KChjaGFyICopIGludGxQYXRoLCAiL2ljdS9kYXRhLyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIH0gLy8gd2hpbGUKLQotICAgIGRlbGV0ZSBsaWJQYXRoOwogCUlDVVRyYW5zU2VydmljZTo6c2V0SUNVUGF0aChpbnRsUGF0aCk7Ci0KLSAgICBpZiAoaW50bFBhdGggPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHBhbmljKCBYTUxQbGF0Zm9ybVV0aWxzOjpQYW5pY19Ob1RyYW5zU2VydmljZSApOwotICAgIH0KLSAgICBpZiAoaW50bFBhdGggIT0gTlVMTCkgZGVsZXRlIGludGxQYXRoOworICAgIGRlbGV0ZSBpbnRsUGF0aDsKIAogICAgIHJldHVybiBuZXcgSUNVVHJhbnNTZXJ2aWNlOwogfQotI2VsaWYgZGVmaW5lZCAoWE1MX1VTRV9JQ09OVl9UUkFOU0NPREVSKQotewotICAgIHJldHVybiBuZXcgSWNvbnZUcmFuc1NlcnZpY2U7Ci19CiAjZWxzZQogewogICAgIHJldHVybiBuZXcgSWNvbnZUcmFuc1NlcnZpY2U7CkBAIC0zNDQsNyArMjg4LDcgQEAKIAogICAgIGNhdGNoKC4uLikKICAgICB7Ci0gICAgICAgIHBhbmljKCBYTUxQbGF0Zm9ybVV0aWxzOjpQYW5pY19Ob0RlZlRyYW5zY29kZXIgKTsKKwkJIHBhbmljKFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX0NhbnRMb2FkTXNnRG9tYWluKTsKICAgICB9CiAgICAgcmV0dXJuIHJldFZhbDsKIH0KQEAgLTM1NCwxNyArMjk4LDI2IEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHZvaWQgWE1MUGxhdGZvcm1VdGlsczo6cGFuaWMoY29uc3QgUGFuaWNSZWFzb25zIHJlYXNvbikKIHsKLSAgICAvLworLy8KICAgICAvLyAgV2UganVzdCBwcmludCBhIG1lc3NhZ2UgYW5kIGV4aXQKICAgICAvLwotICAgIHByaW50ZigiVGhlIFhNTDRDIHN5c3RlbSBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuXG4iKTsKLSAgICBwcmludGYoIlRoZSBtb3N0IGxpa2VseSByZWFzb24gZm9yIHRoaXMgZmFpbHVyZSBpcyB0aGUgaW5hYmlsaXR5IHRvIGZpbmRcbiIpOwotICAgIHByaW50ZigidGhlIGludGVybmF0aW9uYWwgZW5jb2RpbmcgZmlsZXMuIEJ5IGRlZmF1bHQsIHRoZSBlbmNvZGluZyBmaWxlc1xuIik7Ci0gICAgcHJpbnRmKCJoYXZlIHRoZSBleHRlbnNpb24gLmNudiBhbmQgZXhpc3QgaW4gYSBkaXJlY3RvcnkgaWN1L2RhdGEgcmVsYXRpdmVcbiIpOwotICAgIHByaW50ZigidG8gdGhlIFhNTDRDIHNoYXJlZCBsaWJyYXJ5LiBJZiB5b3UgaGF2ZSBrZXB0IHRoZSBjb252ZXJ0ZXIgZmlsZXNcbiIpOwotICAgIHByaW50ZigiaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24sIHlvdSBuZWVkIHRvIHNldCB1cCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZVxuIik7Ci0gICAgcHJpbnRmKCJjYWxsZWQgSUNVX0RBVEEgd2hpY2ggZGlyZWN0bHkgcG9pbnRzIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlXG4iKTsKLSAgICBwcmludGYoImVuY29kaW5nIGZpbGVzIGFyZSBrZXB0LlxuIik7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgIlRoZSBYZXJjZXMtQyBzeXN0ZW0gY291bGQgbm90IGJlIGluaXRpYWxpemVkLlxuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJJZiB5b3UgYXJlIHVzaW5nIElDVSwgdGhlbiB0aGUgbW9zdCBsaWtlbHkgcmVhc29uIGZvciB0aGlzIGZhaWx1cmVcbiIpOworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAiaXMgdGhlIGluYWJpbGl0eSB0byBmaW5kIHRoZSBJQ1UgY292ZXJ0ZXIgZmlsZXMuIFRoZSBjb252ZXJ0ZXIgZmlsZXNcbiIpOworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAiaGF2ZSB0aGUgZXh0ZW5zaW9uIC5jbnYgYW5kIGV4aXN0IGluIGEgZGlyZWN0b3J5ICdpY3UvZGF0YScgcmVsYXRpdmVcbiIpOworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAidG8gdGhlIFhlcmNlcy1DIHNoYXJlZCBsaWJyYXJ5LiBJZiB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIGNvbnZlcnRlciBmaWxlc1xuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJpbiBhIGRpZmZlcmVudCBsb2NhdGlvbiwgeW91IG5lZWQgdG8gc2V0IHVwIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICInSUNVX0RBVEEnIHRvIHBvaW50IGRpcmVjdGx5IHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGVcbiIpOworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAiY29udmVydGVyIGZpbGVzLlxuIik7CiAKICAgICBleGl0KC0xKTsKIH0KQEAgLTU1NiwxNiArNTA5LDIxIEBACiB2b2lkKiBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlTXV0ZXgoKQogewogICAgIHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXggPSBuZXcgcHRocmVhZF9tdXRleF90OwotICAgIGlmIChtdXRleCA9PSBOVUxMKQorICAgIGlmIChtdXRleCA9PSAgTlVMTCkKICAgICB7Ci0JCVRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3RDcmVhdGUpOworICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90Q3JlYXRlKTsKICAgICB9Ci0KLSAgICBpZiAocHRocmVhZF9tdXRleF9pbml0KG11dGV4LCBOVUxMKSkKKyAgICBwdGhyZWFkX211dGV4YXR0cl90KiAgYXR0ciA9IG5ldyBwdGhyZWFkX211dGV4YXR0cl90OworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoYXR0cik7CisgICAgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucChhdHRyLCBNVVRFWF9SRUNVUlNJVkVfTlApOworICAgIGlmIChwdGhyZWFkX211dGV4X2luaXQobXV0ZXgsIGF0dHIpKQogICAgIHsKLQkJVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdENyZWF0ZSk7CisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3RDcmVhdGUpOwogICAgIH0KLQorICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koYXR0cik7CisgICAgZGVsZXRlIGF0dHI7CiAgICAgcmV0dXJuICh2b2lkKikobXV0ZXgpOwogfQogdm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjp1bmxvY2tNdXRleCh2b2lkKiBjb25zdCBtdHhIYW5kbGUpCmRpZmYgLS1naXQgYS9zcmMvdXRpbC9QbGF0Zm9ybXMvSFBVWC9IUFBsYXRmb3JtVXRpbHMuY3BwIGIvc3JjL3V0aWwvUGxhdGZvcm1zL0hQVVgvSFBQbGF0Zm9ybVV0aWxzLmNwcAppbmRleCA4MjM2ZDlhLi4yZGUyOTNlIDEwMDY0NAotLS0gYS9zcmMvdXRpbC9QbGF0Zm9ybXMvSFBVWC9IUFBsYXRmb3JtVXRpbHMuY3BwCisrKyBiL3NyYy91dGlsL1BsYXRmb3Jtcy9IUFVYL0hQUGxhdGZvcm1VdGlscy5jcHAKQEAgLTU2LDggKzU2LDEyIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNzowNSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDI6MDA6NDQgIHJhaHVsagorICogQ29kZSBub3cgd29ya3MgdW5kZXIgSFBVWCAxMS4gVGVzdGVkIGlubWVtb3J5IG1lc3NhZ2UgbG9hZGVyLgorUmV2YW1wZWQgbWFrZWZpbGVzLiBCdWlsZHMgd2l0aCBib3RoIERDRSB0aHJlYWRzIGFzIHdlbGwgYXMgcHRocmVhZCBsaWJyYXJpZXMuCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNzowNSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDU6MjkgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC04NCwyNSArODgsMjggQEAKICNpbmNsdWRlICAgIDxsaWJnZW4uaD4KICNpbmNsdWRlICAgIDxzdHJpbmcuaD4KICNpbmNsdWRlICAgIDx1bmlzdGQuaD4KLQogI2luY2x1ZGUgICAgPHV0aWwvWE1MU3RyaW5nLmhwcD4KICNpbmNsdWRlICAgIDx1dGlsL1hNTFVuaS5ocHA+CiAKLSNpZiBkZWZpbmVkIChYTUxfVVNFX0lDVV9UUkFOU0NPREVSKQorCisjaWYgZGVmaW5lZChYTUxfVVNFX0lDVV9UUkFOU0NPREVSKQogICAgICNpbmNsdWRlIDx1dGlsL1RyYW5zY29kZXJzL0lDVS9JQ1VUcmFuc1NlcnZpY2UuaHBwPgotI2Vsc2UgICAvLyB1c2UgbmF0aXZlIHRyYW5zY29kZXIKKyNlbHNlCisgICAgLy8gVXNlIG5hdGl2ZSB0cmFuc2NvZGVyLiBTYW1lIGFzIC1EWE1MX1VTRV9OQVRJVkVfVFJBTlNDT0RFUgogICAgICNpbmNsdWRlIDx1dGlsL1RyYW5zY29kZXJzL0ljb252L0ljb252VHJhbnNTZXJ2aWNlLmhwcD4KICNlbmRpZgogCi0jaWYgZGVmaW5lZCAoWE1MX1VTRV9JQ1VfTUVTU0FHRUxPQURFUikKKworI2lmIGRlZmluZWQoWE1MX1VTRV9JQ1VfTUVTU0FHRUxPQURFUikKICAgICAjaW5jbHVkZSA8dXRpbC9Nc2dMb2FkZXJzL0lDVS9JQ1VNc2dMb2FkZXIuaHBwPgotI2VsaWYgZGVmaW5lZCAoWE1MX1VTRV9JQ09OVl9NRVNTQUdFTE9BREVSKQotICAgICNpbmNsdWRlIDx1dGlsL01zZ0xvYWRlcnMvTXNnQ2F0YWxvZy9Nc2dDYXRhbG9nTG9hZGVyLmhwcD4KLSNlbHNlICAgLy8gdXNlIEluLW1lbW9yeSBtZXNzYWdlIGxvYWRlcgorCisjZWxzZQorICAgIC8vIFNhbWUgYXMgLURYTUxfVVNFX0lOTUVNX01FU1NBR0VMT0FERVIKICAgICAjaW5jbHVkZSA8dXRpbC9Nc2dMb2FkZXJzL0luTWVtb3J5L0luTWVtTXNnTG9hZGVyLmhwcD4KICNlbmRpZgogCiAKKwogI2lmICFkZWZpbmVkKFhNTF9IUFVYX0tBSUNDKQogI2luY2x1ZGUgICAgPHN5cy90aW1lYi5oPiAgICAgICAgICAgICAvLyBkb2VzIG5vdCB3b3JrIHdpdGggS0FJIGNvbXBpbGVyCiAjZW5kaWYKQEAgLTE5MSw2ICsxOTgsNDQgQEAKICAgICAvLyBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gY29tcGFyZUFuZEV4Y2hhbmdlKCkgYW5kCiAgICAgLy8gbXV0ZXggY3JlYXRpb24gdGhhdCBtdXN0IGJlIGJyb2tlbi4KICAgICBhdG9taWNPcHNNdXRleC5mSGFuZGxlID0gWE1MUGxhdGZvcm1VdGlsczo6bWFrZU11dGV4KCk7CisKKworICAgIC8vIEhlcmUgeW91IHdvdWxkIGFsc28gc2V0IHRoZSBmZ0xpYkxvY2F0aW9uIGdsb2JhbCB2YXJpYWJsZQorICAgIC8vIFhNTFBsYXRmb3JtVXRpbHM6OmZnTGliTG9jYXRpb24gaXMgdGhlIHZhcmlhYmxlIHRvIGJlIHNldAorCisgICAgY2hhciogICAgICAgICAgIGxpYnJhcnlQYXRoID0gMDsKKyAgICBjaGFyICAgICAgICAgICAgbGliTmFtZVsyNTZdOworICAgIHNobF9kZXNjcmlwdG9yKiBkZXNjID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgaW5kZXggPSAxOworCisgICAgc3RyY3B5KGxpYk5hbWUsIFhNTDRDX0RMTE5hbWUpOworICAgIHN0cmNhdChsaWJOYW1lLCBnWE1MNENWZXJzaW9uU3RyKTsKKyAgICBzdHJjYXQobGliTmFtZSwgIi5zbCIpOworCisgICAgcmV0ID0gc2hsX2dldChpbmRleCwgJmRlc2MpOworICAgIHdoaWxlIChyZXQgIT0gLTEpCisgICAgeworICAgICAgIGNoYXIqIGZpbGVOYW1lID0gZGVzYy0+ZmlsZW5hbWU7CisgICAgICAgaWYgKHN0cnN0cihmaWxlTmFtZSwgbGliTmFtZSkgIT0gTlVMTCkKKyAgICAgICB7CisgICAgICAgICAgIGNoYXIqIGxhc3RTbGFzaCA9IHN0cnJjaHIoZmlsZU5hbWUsICcvJyk7CisgICAgICAgICAgIHNpemVfdCBjaGFyc190b19leHRyYWN0ID0gbGFzdFNsYXNoIC0gZmlsZU5hbWU7CisgICAgICAgICAgIGxpYnJhcnlQYXRoID0gbmV3IGNoYXJbY2hhcnNfdG9fZXh0cmFjdCArIDFdOworICAgICAgICAgICBzdHJuY3B5KGxpYnJhcnlQYXRoLCBmaWxlTmFtZSwgY2hhcnNfdG9fZXh0cmFjdCk7CisgICAgICAgICAgIGxpYnJhcnlQYXRoW2NoYXJzX3RvX2V4dHJhY3RdID0gMDsKKyAgICAgICAgICAgYnJlYWs7CisgICAgICAgfQorICAgICAgIGluZGV4Kys7CisgICAgICAgcmV0ID0gc2hsX2dldChpbmRleCwgJmRlc2MpOworICAgIH0KKworICAgIFhNTFBsYXRmb3JtVXRpbHM6OmZnTGliTG9jYXRpb24gPSBsaWJyYXJ5UGF0aDsKKworICAgIGlmIChYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uID09IE5VTEwpCisgICAgeworICAgICAgICBwYW5pYyhYTUxQbGF0Zm9ybVV0aWxzOjpQYW5pY19DYW50RmluZExpYik7CisgICAgfQogfQogCiAKQEAgLTIxMSwxNSArMjU2LDE0IEBACiAgICAgewogI2lmIGRlZmluZWQgKFhNTF9VU0VfSUNVX01FU1NBR0VMT0FERVIpCiAgICAgICAgIHJldFZhbCA9IG5ldyBJQ1VNc2dMb2FkZXIobXNnRG9tYWluKTsKLSNlbGlmIGRlZmluZWQgKFhNTF9VU0VfSUNPTlZfTUVTU0FHRUxPQURFUikKLSAgICAgICAgcmV0VmFsID0gbmV3IE1zZ0NhdGFsb2dMb2FkZXIobXNnRG9tYWluKTsKICNlbHNlCisgICAgICAgIC8vIHNhbWUgYXMgLURYTUxfVVNFX0lOTUVNX01FU1NBR0VMT0FERVIKICAgICAgICAgcmV0VmFsID0gbmV3IEluTWVtTXNnTG9hZGVyKG1zZ0RvbWFpbik7CiAjZW5kaWYKICAgICB9CiAgICAgY2F0Y2goLi4uKQogICAgIHsKLSAgICAgICAgcGFuaWMoWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfTm9EZWZUcmFuc2NvZGVyKTsKKyAgICAgICAgcGFuaWMoWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfQ2FudExvYWRNc2dEb21haW4pOwogICAgIH0KICAgICByZXR1cm4gcmV0VmFsOwogfQpAQCAtMjQwLDYgKzI4NCw3IEBACiAgICAgLy8KIAogICAgIHN0YXRpYyBjb25zdCBjaGFyICogeG1sNGNJbnRsRGlyRW52VmFyID0gIklDVV9EQVRBIjsKKyAgICBjaGFyICogICAgICAgICAgICAgIGludGxQYXRoICAgICAgICA9IDA7CiAKICAgICAvLwogICAgIC8vIENoZWNrIGlmIGVudmlyb25tZW50IHZhcmlhYmxlICdJQ1VfREFUQScgaXMgc2V0LgpAQCAtMjUwLDcgKzI5NSw3IEBACiAgICAgaWYgKGVudlZhbCAhPSBOVUxMKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgaW50IHBhdGhMZW4gID0gc3RybGVuKGVudlZhbCk7Ci0gICAgICAgIGNoYXIqICAgICAgICBpbnRsUGF0aCA9IG5ldyBjaGFyW3BhdGhMZW4gKyAyXTsKKyAgICAgICAgaW50bFBhdGggPSBuZXcgY2hhcltwYXRoTGVuICsgMl07CiAKICAgICAgICAgc3RyY3B5KChjaGFyICopIGludGxQYXRoLCBlbnZWYWwpOwogICAgICAgICBpZiAoZW52VmFsW3BhdGhMZW4gLSAxXSAhPSAnLycpCkBAIC0yNjUsNjMgKzMxMCwzMSBAQAogICAgIH0KIAogICAgIC8vCi0gICAgLy8gIElmIHdlIGRpZCBub3QgZmluZCB0aGUgZW52aXJvbm1lbnQgdmFyLCBzbyBsZXRzIHRyeSB0byBnbyB0aGUgYXV0bwotICAgIC8vICBzZWFyY2ggcm91dGUuCisgICAgLy8gIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBJQ1VfREFUQSBpcyBub3Qgc2V0LCBhc3N1bWUgdGhhdCB0aGUKKyAgICAvLyAgY29udmVydGVyIGZpbGVzIGFyZSBzdG9yZWQgcmVsYXRpdmUgdG8gdGhlIFhlcmNlcy1DIGxpYnJhcnkuCiAgICAgLy8KIAotICAgIGNoYXIgbGliTmFtZVsyNTZdOwotICAgIHN0cmNweShsaWJOYW1lLCBYTUw0Q19ETExOYW1lKTsKLSAgICBzdHJjYXQobGliTmFtZSwgZ1hNTDRDVmVyc2lvblN0cik7Ci0gICAgc3RyY2F0KGxpYk5hbWUsICIuc2wiKTsKKyAgICB1bnNpZ25lZCBpbnQgIGxlbnQgPSBzdHJsZW4oWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbikgKworICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbigiL2ljdS9kYXRhLyIpICsgMTsKKyAgICBpbnRsUGF0aCA9IG5ldyBjaGFyW2xlbnRdOworICAgIHN0cmNweShpbnRsUGF0aCwgWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbik7CisgICAgc3RyY2F0KGludGxQYXRoLCAiL2ljdS9kYXRhLyIpOwogCi0gICAgc2hsX2Rlc2NyaXB0b3IqIGRlc2MgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICByZXQgPSAwOwotICAgIGludCAgICAgICAgICAgICBpbmRleCA9IDE7CisgICAgSUNVVHJhbnNTZXJ2aWNlOjpzZXRJQ1VQYXRoKGludGxQYXRoKTsKKyAgICBkZWxldGUgaW50bFBhdGg7CiAKLSAgICByZXQgPSBzaGxfZ2V0KGluZGV4LCAmZGVzYyk7Ci0gICAgd2hpbGUgKHJldCAhPSAtMSkKLSAgICB7Ci0gICAgICAgY2hhciogZmlsZU5hbWUgPSBkZXNjLT5maWxlbmFtZTsKLSAgICAgICBpZiAoc3Ryc3RyKGZpbGVOYW1lLCBsaWJOYW1lKSAhPSBOVUxMKQotICAgICAgIHsKLSAgICAgICAgICAgY2hhciogbGFzdFNsYXNoID0gc3RycmNocihmaWxlTmFtZSwgJy8nKTsKLSAgICAgICAgICAgc2l6ZV90IGNoYXJzX3RvX2V4dHJhY3QgPSBsYXN0U2xhc2ggLSBmaWxlTmFtZTsKLSAgICAgICAgICAgY2hhciAqbGliUGF0aE5hbWUgPSBuZXcgY2hhcltjaGFyc190b19leHRyYWN0ICsgMV07Ci0gICAgICAgICAgIHN0cm5jcHkobGliUGF0aE5hbWUsIGZpbGVOYW1lLCBjaGFyc190b19leHRyYWN0KTsKLSAgICAgICAgICAgbGliUGF0aE5hbWVbY2hhcnNfdG9fZXh0cmFjdF0gPSAwOwotICAgICAgICAgICBmZ0ludGxQYXRoID0gbmV3IGNoYXJbc3RybGVuKGxpYlBhdGhOYW1lKSsgc3RybGVuKCIvaWN1L2RhdGEvIikrMV07Ci0gICAgICAgICAgIHN0cmNweSgoY2hhciAqKSBmZ0ludGxQYXRoLCBsaWJQYXRoTmFtZSk7Ci0gICAgICAgICAgIHN0cmNhdCgoY2hhciAqKSBmZ0ludGxQYXRoLCAiL2ljdS9kYXRhLyIpOwotICAgICAgICAgICBkZWxldGUgbGliUGF0aE5hbWU7Ci0gICAgICAgICAgIGJyZWFrOwotICAgICAgIH0KLSAgICAgICBpbmRleCsrOwotICAgICAgIHJldCA9IHNobF9nZXQoaW5kZXgsICZkZXNjKTsKLSAgICB9Ci0KLSAgICBpZiAoZmdJbnRsUGF0aCA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgIkZhdGFsIGVycm9yOiBDb3VsZCBub3QgZmluZCAvaWN1L2RhdGEgcmVsYXRpdmUgdG8gJXMgXG4iLAotICAgICAgICAgICAgICAgIGxpYk5hbWUpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgCi0gICAgICAgICAgICAgICAgIiAgICAgICAgICAgICB3aGlsZSB0cnlpbmcgdG8gYXV0byBkZXRlY3QgdGhlIGxvY2F0aW9uICIpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9mIHRoZSBjb252ZXJ0ZXIgZmlsZXMuXG4iKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgIiAgICAgICAgICAgICBBbmQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICdJQ1VfREFUQScgaXMgIik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibm90IGRlZmluZWQuXG4iKTsKLSAgICAgICAgcGFuaWMoWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfTm9UcmFuc1NlcnZpY2UpOwotICAgIH0KLQotICAgIElDVVRyYW5zU2VydmljZTo6c2V0SUNVUGF0aChmZ0ludGxQYXRoKTsKICAgICByZXR1cm4gbmV3IElDVVRyYW5zU2VydmljZTsKIAotI2Vsc2UgLy8gVXNlIE5hdGl2ZSB0cmFuc2NvZGluZyBzZXJ2aWNlCisjZWxzZQogCisgICAgLy8gVXNlIG5hdGl2ZSB0cmFuc2NvZGluZyBzZXJ2aWNlcy4KKyAgICAvLyBzYW1lIGFzIC1EWE1MX1VTRV9JTk1FTV9NRVNTQUdFTE9BREVSCiAgICAgcmV0dXJuIG5ldyBJY29udlRyYW5zU2VydmljZTsKIAogI2VuZGlmCi19CisKK30gLy8gWE1MUGxhdGZvcm1VdGlsczo6bWFrZVRyYW5zU2VydmljZQorCiAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMzIsMjIgKzM0NSwyMyBAQAogICAgIC8vCiAgICAgLy8gIFdlIGp1c3QgcHJpbnQgYSBtZXNzYWdlIGFuZCBleGl0CiAgICAgLy8KKyAgICAKICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICJUaGUgWE1MNEMgc3lzdGVtIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC5cbiIpOworICAgICAgICAiVGhlIFhlcmNlcy1DIHN5c3RlbSBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICJUaGUgbW9zdCBsaWtlbHkgcmVhc29uIGZvciB0aGlzIGZhaWx1cmUgaXMgdGhlIGluYWJpbGl0eSB0byBmaW5kXG4iKTsKKyAgICAgICAgIklmIHlvdSBhcmUgdXNpbmcgSUNVLCB0aGVuIHRoZSBtb3N0IGxpa2VseSByZWFzb24gZm9yIHRoaXMgZmFpbHVyZVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAidGhlIElDVSBjb3ZlcnRlciBmaWxlcywgaWYgeW91IGFyZSB1c2luZyBJQ1UuIFRoZSBjb252ZXJ0ZXIgZmlsZXNcbiIpOworICAgICAgICAiaXMgdGhlIGluYWJpbGl0eSB0byBmaW5kIHRoZSBJQ1UgY292ZXJ0ZXIgZmlsZXMuIFRoZSBjb252ZXJ0ZXIgZmlsZXNcbiIpOwogICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgImhhdmUgdGhlIGV4dGVuc2lvbiAuY252IGFuZCBleGlzdCBpbiBhIGRpcmVjdG9yeSAnaWN1L2RhdGEnIHJlbGF0aXZlXG4iKTsKKyAgICAgICAgImhhdmUgdGhlIGV4dGVuc2lvbiAuY252IGFuZCBleGlzdCBpbiBhIGRpcmVjdG9yeSAnaWN1L2RhdGEnIHJlbGF0aXZlXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICJ0byB0aGUgWE1MNEMgc2hhcmVkIGxpYnJhcnkuIElmIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgY29udmVydGVyIGZpbGVzXG4iKTsKKyAgICAgICAgInRvIHRoZSBYZXJjZXMtQyBzaGFyZWQgbGlicmFyeS4gSWYgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBjb252ZXJ0ZXIgZmlsZXNcbiIpOwogICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgImluIGEgZGlmZmVyZW50IGxvY2F0aW9uLCB5b3UgbmVlZCB0byBzZXQgdXAgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlXG4iKTsKKyAgICAgICAgImluIGEgZGlmZmVyZW50IGxvY2F0aW9uLCB5b3UgbmVlZCB0byBzZXQgdXAgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICInSUNVX0RBVEEnIHRvIHBvaW50IGRpcmVjdGx5IHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGVcbiIpOworICAgICAgICAiJ0lDVV9EQVRBJyB0byBwb2ludCBkaXJlY3RseSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICJjb252ZXJ0ZXIgZmlsZXMuXG4iKTsKKyAgICAgICAgImNvbnZlcnRlciBmaWxlcy5cbiIpOwogICAgIAogICAgIGV4aXQoLTEpOwogfQpAQCAtNDc3LDEyICs0OTEsMTIgQEAKICAgICAvLyAgYXMgVW5pY29kZSBhbHdheXMKICAgICAvLwogICAgIGNoYXIqIG5ld1NyYyA9IFhNTFN0cmluZzo6dHJhbnNjb2RlKHNyY1BhdGgpOworICAgIEFycmF5SmFuaXRvcjxjaGFyPiAgamFuVGV4dChuZXdTcmMpOwogCiAgICAgLy8gVXNlIGEgbG9jYWwgYnVmZmVyIHRoYXQgaXMgYmlnIGVub3VnaCBmb3IgdGhlIGxhcmdlc3QgbGVnYWwgcGF0aC4KICAgICAvLyBOb3RlICMxMTg2OiBkaXJOYW1lKCkgaXMgbm90IHRocmVhZCBzYWZlLgogCiAgICAgY2hhciogdG1wUGF0aCA9IGRpcm5hbWUobmV3U3JjKTsgLy8gZGlybmFtZSgpIG5ldmVyIHJldHVybnMgTlVMTC4KLSAgICBkZWxldGUgW10gbmV3U3JjOwogCiAgICAgY2hhciogbmV3WE1MU3RyaW5nID0gbmV3IGNoYXJbc3RybGVuKHRtcFBhdGgpICsgMl07CiAgICAgQXJyYXlKYW5pdG9yPGNoYXI+IG5ld0phbml0b3IobmV3WE1MU3RyaW5nKTsKQEAgLTUxNiw4ICs1MzAsMzYgQEAKIC8vICBNdXRleCBtZXRob2RzIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotI2lmICFkZWZpbmVkIChBUFBfTk9fVEhSRUFEUykKKyNpZiAhZGVmaW5lZChBUFBfTk9fVEhSRUFEUykKIAordm9pZCogWE1MUGxhdGZvcm1VdGlsczo6bWFrZU11dGV4KCkKK3sKKyAgICBwdGhyZWFkX211dGV4X3QqIG11dGV4ID0gbmV3IHB0aHJlYWRfbXV0ZXhfdDsKKyAgICBwdGhyZWFkX211dGV4YXR0cl90KiAgYXR0ciA9IG5ldyBwdGhyZWFkX211dGV4YXR0cl90OworCisjaWYgZGVmaW5lZChYTUxfVVNFX0RDRSkKKyAgICBwdGhyZWFkX211dGV4YXR0cl9jcmVhdGUoYXR0cik7CisgICAgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucChhdHRyLCBNVVRFWF9SRUNVUlNJVkVfTlApOworICAgIGlmIChwdGhyZWFkX211dGV4X2luaXQobXV0ZXgsICphdHRyKSkKKyAgICB7CisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3RDcmVhdGUpOworICAgIH0KKyAgICBwdGhyZWFkX211dGV4YXR0cl9kZWxldGUoYXR0cik7CisjZWxzZQorICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoYXR0cik7CisgICAgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZShhdHRyLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7CisgICAgaWYgKHB0aHJlYWRfbXV0ZXhfaW5pdChtdXRleCwgYXR0cikpCisgICAgeworICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90Q3JlYXRlKTsKKyAgICB9CisgICAgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveShhdHRyKTsKKyNlbmRpZgorICAgIGRlbGV0ZSBhdHRyOworCisgICAgcmV0dXJuICh2b2lkKikgbXV0ZXg7Cit9CiAKIHZvaWQgWE1MUGxhdGZvcm1VdGlsczo6Y2xvc2VNdXRleCh2b2lkKiBjb25zdCBtdHhIYW5kbGUpCiB7CkBAIC01NDMsMTggKzU4NSw2IEBACiAgICAgfQogfQogCi12b2lkKiBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlTXV0ZXgoKQotewotICAgIHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXggPSBuZXcgcHRocmVhZF9tdXRleF90OwotCi0gICAgaWYgKHB0aHJlYWRfbXV0ZXhfaW5pdChtdXRleCwgcHRocmVhZF9tdXRleGF0dHJfZGVmYXVsdCkpCi0gICAgewotICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAotICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90Q3JlYXRlKTsKLSAgICB9Ci0gICAgcmV0dXJuICh2b2lkKikgbXV0ZXg7Ci19Ci0KIHZvaWQgWE1MUGxhdGZvcm1VdGlsczo6dW5sb2NrTXV0ZXgodm9pZCogY29uc3QgbXR4SGFuZGxlKQogewogICAgIGlmIChtdHhIYW5kbGUgIT0gTlVMTCkKZGlmZiAtLWdpdCBhL3NyYy91dGlsL1BsYXRmb3Jtcy9JUklYL0lSSVhEZWZzLmhwcCBiL3NyYy91dGlsL1BsYXRmb3Jtcy9JUklYL0lSSVhEZWZzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODkwYjM5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3V0aWwvUGxhdGZvcm1zL0lSSVgvSVJJWERlZnMuaHBwCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCisgKiAKKyAqIENvcHlyaWdodCAoYykgMTk5OSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAorICogcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIAorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogCisgKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKKyAqICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKKyAqICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorICogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisgKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCisgKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorICogCisgKiA0LiBUaGUgbmFtZXMgIlhlcmNlcyIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAorICogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCisgKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVcQGFwYWNoZS5vcmcuCisgKiAKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiLAorICogICAgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQgd2FzCisgKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMTk5OSwgSW50ZXJuYXRpb25hbAorICogQnVzaW5lc3MgTWFjaGluZXMsIEluYy4sIGh0dHA6Ly93d3cuaWJtLmNvbSAuICBGb3IgbW9yZSBpbmZvcm1hdGlvbgorICogb24gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlCisgKiA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCisgKi8KKworLyoqCisgKiAkTG9nJAorICogUmV2aXNpb24gMS4xICAxOTk5LzEyLzAxIDE3OjE2OjE3ICByYWh1bGoKKyAqIEFkZGVkIHN1cHBvcnQgZm9yIElSSVggNi41LjUgdXNpbmcgU0dJIE1JUFNwcm8gQysrIDcuMyBhbmQgNy4yMSBnZW5lcmF0aW5nIDMyIGJpdCBvYmplY3RzLiBDaGFuZ2VzIHN1Ym1pdHRlZCBieSBNYXJjIFN0dWVzc2VsCisgKgorICovCisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgSVJJWCBydW5zIGluIGJpZyBlbmRpYW4gbW9kZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgRU5ESUFOTU9ERV9CSUcKK3R5cGVkZWYgdm9pZCogRmlsZUhhbmRsZTsKKwpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvUGxhdGZvcm1zL0lSSVgvSVJJWFBsYXRmb3JtVXRpbHMuY3BwIGIvc3JjL3V0aWwvUGxhdGZvcm1zL0lSSVgvSVJJWFBsYXRmb3JtVXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZWE0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvSVJJWC9JUklYUGxhdGZvcm1VdGlscy5jcHAKQEAgLTAsMCArMSw2NzIgQEAKKy8qCisgKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCisgKiAKKyAqIENvcHlyaWdodCAoYykgMTk5OSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAorICogcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIAorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogCisgKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKKyAqICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKKyAqICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorICogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisgKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCisgKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorICogCisgKiA0LiBUaGUgbmFtZXMgIlhlcmNlcyIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAorICogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCisgKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVcQGFwYWNoZS5vcmcuCisgKiAKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiLAorICogICAgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQgd2FzCisgKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMTk5OSwgSW50ZXJuYXRpb25hbAorICogQnVzaW5lc3MgTWFjaGluZXMsIEluYy4sIGh0dHA6Ly93d3cuaWJtLmNvbSAuICBGb3IgbW9yZSBpbmZvcm1hdGlvbgorICogb24gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlCisgKiA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCisgKi8KKworLyoqCisgKiAkTG9nJAorICogUmV2aXNpb24gMS4xICAxOTk5LzEyLzAxIDE3OjE2OjE4ICByYWh1bGoKKyAqIEFkZGVkIHN1cHBvcnQgZm9yIElSSVggNi41LjUgdXNpbmcgU0dJIE1JUFNwcm8gQysrIDcuMyBhbmQgNy4yMSBnZW5lcmF0aW5nIDMyIGJpdCBvYmplY3RzLiBDaGFuZ2VzIHN1Ym1pdHRlZCBieSBNYXJjIFN0dWVzc2VsCisgKgorICovCisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgSW5jbHVkZXMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaWZuZGVmIEFQUF9OT19USFJFQURTCisjaW5jbHVkZSAgICA8cHRocmVhZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICAgIDx1bmlzdGQuaD4KKyNpbmNsdWRlICAgIDxzdGRpby5oPgorI2luY2x1ZGUgICAgPHN0ZGxpYi5oPgorI2luY2x1ZGUgICAgPGVycm5vLmg+CisjaW5jbHVkZSAgICA8bGliZ2VuLmg+CisjaW5jbHVkZSAgICA8c3lzL3RpbWViLmg+CisjaW5jbHVkZSAgICA8c3RyaW5nLmg+CisjaW5jbHVkZSAgICA8dXRpbC9QbGF0Zm9ybVV0aWxzLmhwcD4KKyNpbmNsdWRlICAgIDx1dGlsL1J1bnRpbWVFeGNlcHRpb24uaHBwPgorI2luY2x1ZGUgICAgPHV0aWwvSmFuaXRvci5ocHA+CisjaW5jbHVkZSAgICA8dXRpbC9NdXRleGVzLmhwcD4KKyNpbmNsdWRlICAgIDx1dGlsL1hNTFN0cmluZy5ocHA+CisjaW5jbHVkZSAgICA8dXRpbC9YTUxVbmkuaHBwPgorCisKKyNpZiBkZWZpbmVkKFhNTF9VU0VfSUNVX1RSQU5TQ09ERVIpCisgICAgI2luY2x1ZGUgPHV0aWwvVHJhbnNjb2RlcnMvSUNVL0lDVVRyYW5zU2VydmljZS5ocHA+CisjZWxzZQorICAgIC8vIFVzZSBuYXRpdmUgdHJhbnNjb2Rlci4gU2FtZSBhcyAtRFhNTF9VU0VfTkFUSVZFX1RSQU5TQ09ERVIKKyAgICAjaW5jbHVkZSA8dXRpbC9UcmFuc2NvZGVycy9JY29udi9JY29udlRyYW5zU2VydmljZS5ocHA+CisjZW5kaWYKKworCisjaWYgZGVmaW5lZChYTUxfVVNFX0lDVV9NRVNTQUdFTE9BREVSKQorICAgICNpbmNsdWRlIDx1dGlsL01zZ0xvYWRlcnMvSUNVL0lDVU1zZ0xvYWRlci5ocHA+CisKKyNlbHNlCisgICAgLy8gU2FtZSBhcyAtRFhNTF9VU0VfSU5NRU1fTUVTU0FHRUxPQURFUgorICAgICNpbmNsdWRlIDx1dGlsL01zZ0xvYWRlcnMvSW5NZW1vcnkvSW5NZW1Nc2dMb2FkZXIuaHBwPgorI2VuZGlmCisKKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBMb2NhbCBNZXRob2RzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGljIHZvaWQgV3JpdGVDaGFyU3RyKCBGSUxFKiBzdHJlYW0sIGNvbnN0IGNoYXIqIGNvbnN0IHRvV3JpdGUpCit7CisgICAgaWYgKGZwdXRzKHRvV3JpdGUsIHN0cmVhbSkgPT0gRU9GKQorICAgIHsKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpTdHJtX1N0ZEVycldyaXRlRmFpbHVyZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBXcml0ZVVTdHJTdGRFcnIoIGNvbnN0IFhNTENoKiBjb25zdCB0b1dyaXRlKQoreworICAgIGNoYXIqIHRtcFZhbCA9IFhNTFN0cmluZzo6dHJhbnNjb2RlKHRvV3JpdGUpOworICAgIEFycmF5SmFuaXRvcjxjaGFyPiBqYW5UZXh0KHRtcFZhbCk7CisgICAgaWYgKGZwdXRzKHRtcFZhbCwgc3RkZXJyKSA9PSBFT0YpCisgICAgeworICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpTdHJtX1N0ZEVycldyaXRlRmFpbHVyZSk7CisgICB9Cit9CisKK3N0YXRpYyB2b2lkIFdyaXRlVVN0clN0ZE91dCggY29uc3QgWE1MQ2gqIGNvbnN0IHRvV3JpdGUpCisgeworICAgIGNoYXIqIHRtcFZhbCA9IFhNTFN0cmluZzo6dHJhbnNjb2RlKHRvV3JpdGUpOworICAgIEFycmF5SmFuaXRvcjxjaGFyPiBqYW5UZXh0KHRtcFZhbCk7CisgICAgaWYgKGZwdXRzKHRtcFZhbCwgc3Rkb3V0KSA9PSBFT0YpCisgICAgeworICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OlN0cm1fU3RkT3V0V3JpdGVGYWlsdXJlKTsKKyAgICB9Cit9CisKK1hNTE5ldEFjY2Vzc29yKiBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlTmV0QWNjZXNzb3IoKQoreworICAgIHJldHVybiAwOworfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgU3RhbmRhcmQgb3V0L2Vycm9yIHN1cHBvcnQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6d3JpdGVUb1N0ZEVycihjb25zdCBjaGFyKiBjb25zdCB0b1dyaXRlKQoreworICAgIFdyaXRlQ2hhclN0cihzdGRlcnIsIHRvV3JpdGUpOworfQordm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjp3cml0ZVRvU3RkRXJyKGNvbnN0IFhNTENoKiBjb25zdCB0b1dyaXRlKQoreworICAgIFdyaXRlVVN0clN0ZEVycih0b1dyaXRlKTsKK30KK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6d3JpdGVUb1N0ZE91dChjb25zdCBYTUxDaCogY29uc3QgdG9Xcml0ZSkKK3sKKyAgICBXcml0ZVVTdHJTdGRPdXQodG9Xcml0ZSk7Cit9Cit2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OndyaXRlVG9TdGRPdXQoY29uc3QgY2hhciogY29uc3QgdG9Xcml0ZSkKK3sKKyAgICBXcml0ZUNoYXJTdHIoc3Rkb3V0LCB0b1dyaXRlKTsKK30KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBYTUxQbGF0Zm9ybVV0aWxzOiBQbGF0Zm9ybSBpbml0IG1ldGhvZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBYTUxNdXRleCBhdG9taWNPcHNNdXRleDsKKworCisKK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICAvLworICAgIC8vIFRoZSBhdG9taWNPcHMgbXV0ZXggbmVlZHMgdG8gYmUgY3JlYXRlZCBlYXJseS4KKyAgICAvLyBOb3JtYWxseSwgbXV0ZXhlcyBhcmUgY3JlYXRlZCBvbiBmaXJzdCB1c2UsIGJ1dCB0aGVyZSBpcyBhCisgICAgLy8gY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIGNvbXBhcmVBbmRFeGNoYW5nZSgpIGFuZAorICAgIC8vIG11dGV4IGNyZWF0aW9uIHRoYXQgbXVzdCBiZSBicm9rZW4uCisgICAgYXRvbWljT3BzTXV0ZXguZkhhbmRsZSA9IFhNTFBsYXRmb3JtVXRpbHM6Om1ha2VNdXRleCgpOworCisgICAgLy8gSGVyZSB5b3Ugd291bGQgYWxzbyBzZXQgdGhlIGZnTGliTG9jYXRpb24gZ2xvYmFsIHZhcmlhYmxlCisgICAgLy8gWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbiBpcyB0aGUgdmFyaWFibGUgdG8gYmUgc2V0CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogIGxpYkVudlZhciA9ICJMRF9MSUJSQVJZX1BBVEgiOworICAgIGNoYXIqICAgICAgICAgICAgICAgbGlicmFyeVBhdGggPSAwOworICAgIGNoYXIgICAgICAgICAgICAgICAgbGliTmFtZVsyNTZdOworCisgICAgLy8gQ29uc3RydWN0IHRoZSBsaWJyYXJ5IG5hbWUgZnJvbSB0aGUgZ2xvYmFsIHZhcmlhYmxlcworCisgICAgc3RyY3B5KGxpYk5hbWUsIFhNTDRDX0RMTE5hbWUpOworICAgIHN0cmNhdChsaWJOYW1lLCBnWE1MNENWZXJzaW9uU3RyKTsKKyAgICBzdHJjYXQobGliTmFtZSwgIi5zbyIpOworCisgICAgY2hhciogbGliRW52VmFyID0gZ2V0ZW52KHNoYXJlZExpYkVudlZhcik7CisgICAgY2hhciogbGliUGF0aCA9IE5VTEw7CisKKyAgICBpZiAobGliRW52VmFyID09IE5VTEwpCisgICAgeworICAgICAgICBwYW5pYyhYTUxQbGF0Zm9ybVV0aWxzOjpQYW5pY19DYW50RmluZExpYik7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBJdHMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIGNvcHkgYmVjYXVzZSBzdHJ0b2soKSBtb2RpZmllcyB0aGUKKyAgICAvLyBzdHJpbmcgYXMgaXQgcmV0dXJucyB0b2tlbnMuIFdlIGRvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZSBzdHJpbmcKKyAgICAvLyByZXR1cm5lZCB0byBieSBnZXRlbnYoKS4KKyAgICAvLworCisgICAgbGliUGF0aCA9IG5ldyBjaGFyW3N0cmxlbihsaWJFbnZWYXIpICsgMV07CisgICAgc3RyY3B5KGxpYlBhdGgsIGxpYkVudlZhcik7CisKKworICAgIC8vIEZpcnN0IGRvIHRoZSBzZWFyY2hpbmcgcHJvY2VzcyBmb3IgdGhlIGZpcnN0IGRpcmVjdG9yeSBsaXN0aW5nCisKKyAgICBjaGFyKiAgYWxsUGF0aHMgPSBsaWJQYXRoOworICAgIGNoYXIqICBsaWJQYXRoTmFtZTsKKworICAgIHdoaWxlICgobGliUGF0aE5hbWUgPSBzdHJ0b2soYWxsUGF0aHMsICI6IikpICE9IE5VTEwpCisgICAgeworICAgICAgICBGSUxFKiAgZHVtbXlGcHRyID0gMDsKKyAgICAgICAgYWxsUGF0aHMgPSAwOworCisgICAgICAgIGNoYXIqIGxpYmZpbGUgPSBuZXcgY2hhcltzdHJsZW4obGliUGF0aE5hbWUpICsgc3RybGVuKGxpYk5hbWUpICsgMl07CisgICAgICAgIHN0cmNweShsaWJmaWxlLCBsaWJQYXRoTmFtZSk7CisgICAgICAgIHN0cmNhdChsaWJmaWxlLCAiLyIpOworICAgICAgICBzdHJjYXQobGliZmlsZSwgbGliTmFtZSk7CisKKyAgICAgICAgZHVtbXlGcHRyID0gKEZJTEUgKikgZm9wZW4obGliZmlsZSwgInJiIik7CisgICAgICAgIGRlbGV0ZSBbXSBsaWJmaWxlOworICAgICAgICBpZiAoZHVtbXlGcHRyICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZjbG9zZShkdW1teUZwdHIpOworICAgICAgICAgICAgbGlicmFyeVBhdGggPSBuZXcgY2hhcltzdHJsZW4obGliUGF0aE5hbWUpKzFdOworICAgICAgICAgICAgc3RyY3B5KChjaGFyICopIGxpYnJhcnlQYXRoLCBsaWJQYXRoTmFtZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSAvLyB3aGlsZQorCisgICAgZGVsZXRlIGxpYlBhdGg7CisKKyAgICBYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uID0gbGlicmFyeVBhdGg7CisKKyAgICBpZiAoWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbiA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcGFuaWMoWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfQ2FudEZpbmRMaWIpOworICAgIH0KKworfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFhNTFBsYXRmb3JtVXRpbHM6IFByaXZhdGUgU3RhdGljIE1ldGhvZHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLworLy8gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgcGFydCBvZiB0aGlzIGNsYXNzCisvLyAgd2hlbiBjbGllbnQgY29kZSBhc2tzIHRvIGhhdmUgb25lIG9mIHRoZSBzdXBwb3J0ZWQgbWVzc2FnZSBzZXRzIGxvYWRlZC4KKy8vCisKK1hNTE1zZ0xvYWRlciogWE1MUGxhdGZvcm1VdGlsczo6bG9hZEFNc2dTZXQoY29uc3QgWE1MQ2gqIGNvbnN0IG1zZ0RvbWFpbikKK3sKKyAgICBYTUxNc2dMb2FkZXIqIHJldFZhbDsKKyAgICB0cnkKKyAgICB7CisjaWYgZGVmaW5lZCAoWE1MX1VTRV9JQ1VfTUVTU0FHRUxPQURFUikKKyAgICAgICAgcmV0VmFsID0gbmV3IElDVU1zZ0xvYWRlcihtc2dEb21haW4pOworI2Vsc2UKKyAgICAgICAgLy8gc2FtZSBhcyAtRFhNTF9VU0VfSU5NRU1fTUVTU0FHRUxPQURFUgorICAgICAgICByZXRWYWwgPSBuZXcgSW5NZW1Nc2dMb2FkZXIobXNnRG9tYWluKTsKKyNlbmRpZgorICAgIH0KKworICAgIGNhdGNoKC4uLikKKyAgICB7CisgICAgICAgIHBhbmljKFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX0NhbnRMb2FkTXNnRG9tYWluKTsKKyAgICB9CisgICAgcmV0dXJuIHJldFZhbDsKK30KKworCisvLworLy8gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB2ZXJ5IGVhcmx5IGluIHRoZSBib290c3RyYXBwaW5nIHByb2Nlc3MuIFRoaXMgZ3V5CisvLyAgbXVzdCBjcmVhdGUgYSB0cmFuc2NvZGluZyBzZXJ2aWNlIGFuZCByZXR1cm4gaXQuIEl0IGNhbm5vdCB1c2UgYW55IHN0cmluZworLy8gIG1ldGhvZHMsIGFueSB0cmFuc2NvZGluZyBzZXJ2aWNlcywgdGhyb3cgYW55IGV4Y2VwdGlvbnMsIGV0Yy4uLiBJdCBqdXN0CisvLyAgbWFrZXMgYSB0cmFuc2NvZGluZyBzZXJ2aWNlIGFuZCByZXR1cm5zIGl0LCBvciByZXR1cm5zIHplcm8gb24gZmFpbHVyZS4KKy8vCisKK1hNTFRyYW5zU2VydmljZSogWE1MUGxhdGZvcm1VdGlsczo6bWFrZVRyYW5zU2VydmljZSgpCit7CisjaWYgZGVmaW5lZCAoWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUikKKyAgICAvLworICAgIC8vICBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBhdGggdG8gdGhlIEludGwgY29udmVydGVyIGZpbGVzLgorICAgIC8vCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqIGljdURhdGFFbnZWYXIgICA9ICJJQ1VfREFUQSI7CisgICAgY2hhciAqICAgICAgICAgICAgICBpbnRsUGF0aCAgICAgICAgPSAwOworCisgICAgY2hhciogZW52VmFsID0gZ2V0ZW52KGljdURhdGFFbnZWYXIpOworCisgICAgLy8gQ2hlY2sgaWYgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0Li4uCisgICAgaWYgKGVudlZhbCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHBhdGhMZW4gPSBzdHJsZW4oZW52VmFsKTsKKyAgICAgICAgaW50bFBhdGggPSBuZXcgY2hhcltwYXRoTGVuICsgMl07CisKKyAgICAgICAgc3RyY3B5KChjaGFyICopIGludGxQYXRoLCBlbnZWYWwpOworICAgICAgICBpZiAoZW52VmFsW3BhdGhMZW4gLSAxXSAhPSAnLycpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmNhdCgoY2hhciAqKSBpbnRsUGF0aCwgIi8iKTsKKyAgICAgICAgfQorCisgICAgICAgIElDVVRyYW5zU2VydmljZTo6c2V0SUNVUGF0aChpbnRsUGF0aCk7CisgICAgICAgIGRlbGV0ZSBpbnRsUGF0aDsKKworICAgICAgICByZXR1cm4gbmV3IElDVVRyYW5zU2VydmljZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSUNVX0RBVEEgaXMgbm90IHNldCwgYXNzdW1lIHRoYXQgdGhlCisgICAgLy8gIGNvbnZlcnRlciBmaWxlcyBhcmUgc3RvcmVkIHJlbGF0aXZlIHRvIHRoZSBYZXJjZXMtQyBsaWJyYXJ5LgorICAgIC8vCisKKyAgICB1bnNpZ25lZCBpbnQgIGxlbnQgPSBzdHJsZW4oWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbikgKworICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbigiL2ljdS9kYXRhLyIpICsgMTsKKyAgICBpbnRsUGF0aCA9IG5ldyBjaGFyW2xlbnRdOworICAgIHN0cmNweShpbnRsUGF0aCwgWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbik7CisgICAgc3RyY2F0KGludGxQYXRoLCAiL2ljdS9kYXRhLyIpOworCisgICAgSUNVVHJhbnNTZXJ2aWNlOjpzZXRJQ1VQYXRoKGludGxQYXRoKTsKKyAgICBkZWxldGUgaW50bFBhdGg7CisKKyAgICByZXR1cm4gbmV3IElDVVRyYW5zU2VydmljZTsKKworCisjZWxzZQorCisgICAgLy8gVXNlIG5hdGl2ZSB0cmFuc2NvZGluZyBzZXJ2aWNlcy4KKyAgICAvLyBzYW1lIGFzIC1EWE1MX1VTRV9JTk1FTV9NRVNTQUdFTE9BREVSCisgICAgcmV0dXJuIG5ldyBJY29udlRyYW5zU2VydmljZTsKKworI2VuZGlmCisKK30gLy8gWE1MUGxhdGZvcm1VdGlsczo6bWFrZVRyYW5zU2VydmljZQorCisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgWE1MUGxhdGZvcm1VdGlsczogVGhlIHBhbmljIG1ldGhvZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OnBhbmljKGNvbnN0IFBhbmljUmVhc29ucyByZWFzb24pCit7CisgICAgLy8KKyAgICAvLyAgV2UganVzdCBwcmludCBhIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAvLworICAgIAorICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAiVGhlIFhlcmNlcy1DIHN5c3RlbSBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgIklmIHlvdSBhcmUgdXNpbmcgSUNVLCB0aGVuIHRoZSBtb3N0IGxpa2VseSByZWFzb24gZm9yIHRoaXMgZmFpbHVyZVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJpcyB0aGUgaW5hYmlsaXR5IHRvIGZpbmQgdGhlIElDVSBjb3ZlcnRlciBmaWxlcy4gVGhlIGNvbnZlcnRlciBmaWxlc1xuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJoYXZlIHRoZSBleHRlbnNpb24gLmNudiBhbmQgZXhpc3QgaW4gYSBkaXJlY3RvcnkgJ2ljdS9kYXRhJyByZWxhdGl2ZVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJ0byB0aGUgWGVyY2VzLUMgc2hhcmVkIGxpYnJhcnkuIElmIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgY29udmVydGVyIGZpbGVzXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgImluIGEgZGlmZmVyZW50IGxvY2F0aW9uLCB5b3UgbmVlZCB0byBzZXQgdXAgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgIidJQ1VfREFUQScgdG8gcG9pbnQgZGlyZWN0bHkgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJjb252ZXJ0ZXIgZmlsZXMuXG4iKTsKKyAgICAKKyAgICBleGl0KC0xKTsKK30KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBYTUxQbGF0Zm9ybVV0aWxzOiBGaWxlIE1ldGhvZHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordW5zaWduZWQgaW50IFhNTFBsYXRmb3JtVXRpbHM6OmN1ckZpbGVQb3MoRmlsZUhhbmRsZSB0aGVGaWxlKQoreworICAgIGludCBjdXJQb3MgPSBmdGVsbCggKEZJTEUqKXRoZUZpbGUpOworICAgIGlmIChjdXJQb3MgPT0gLTEpCisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdEdldFNpemUpOworCisgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpY3VyUG9zOworfQorCit2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OmNsb3NlRmlsZShGaWxlSGFuZGxlIHRoZUZpbGUpCit7CisgICAgaWYgKGZjbG9zZSgoRklMRSopdGhlRmlsZSkpCisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdENsb3NlRmlsZSk7Cit9CisKK3Vuc2lnbmVkIGludCBYTUxQbGF0Zm9ybVV0aWxzOjpmaWxlU2l6ZShGaWxlSGFuZGxlIHRoZUZpbGUpCit7CisgICAgLy8gR2V0IHRoZSBjdXJyZW50IHBvc2l0aW9uCisgICAgbG9uZyAgaW50IGN1clBvcyA9IGZ0ZWxsKChGSUxFKikgdGhlRmlsZSk7CisgICAgaWYgKGN1clBvcyA9PSAtMSkKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90R2V0Q3VyUG9zKTsKKworICAgIC8vIFNlZWsgdG8gdGhlIGVuZCBhbmQgc2F2ZSB0aGF0IHZhbHVlIGZvciByZXR1cm4KKyAgICAgaWYgKGZzZWVrKChGSUxFKikgdGhlRmlsZSwgMCwgU0VFS19FTkQpKQorICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RTZWVrVG9FbmQpOworCisgICAgbG9uZyBpbnQgcmV0VmFsID0gZnRlbGwoKEZJTEUqKXRoZUZpbGUpOworICAgIGlmIChyZXRWYWwgPT0gLTEpCisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdFNlZWtUb0VuZCk7CisKKyAgICAvLyBBbmQgcHV0IHRoZSBwb2ludGVyIGJhY2sKKworICAgIGlmIChmc2VlayggKEZJTEUqKXRoZUZpbGUsIGN1clBvcywgU0VFS19TRVQpICkKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90U2Vla1RvUG9zKTsKKworICAgIHJldHVybiAodW5zaWduZWQgaW50KXJldFZhbDsKK30KKworRmlsZUhhbmRsZSBYTUxQbGF0Zm9ybVV0aWxzOjpvcGVuRmlsZShjb25zdCB1bnNpZ25lZCBzaG9ydCogY29uc3QgZmlsZU5hbWUpCit7CisgICAgY29uc3QgY2hhciogdG1wRmlsZU5hbWUgPSBYTUxTdHJpbmc6OnRyYW5zY29kZShmaWxlTmFtZSk7CisgICAgQXJyYXlKYW5pdG9yPGNoYXI+IGphblRleHQoKGNoYXIqKXRtcEZpbGVOYW1lKTsKKyAgICBGaWxlSGFuZGxlIHJldFZhbCA9IChGSUxFKilmb3BlbiggdG1wRmlsZU5hbWUgLCAicmIiICk7CisKKyAgICBpZiAocmV0VmFsID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiByZXRWYWw7Cit9CisKKworCitGaWxlSGFuZGxlIFhNTFBsYXRmb3JtVXRpbHM6Om9wZW5TdGRJbkhhbmRsZSgpCit7CisgICAgcmV0dXJuIChGaWxlSGFuZGxlKSBmZG9wZW4oZHVwKDApLCAicmIiKTsKK30KKworCit1bnNpZ25lZCBpbnQKK1hNTFBsYXRmb3JtVXRpbHM6OnJlYWRGaWxlQnVmZmVyKCBGaWxlSGFuZGxlICAgICAgICAgIHRoZUZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBjb25zdCB1bnNpZ25lZCBpbnQgIHRvUmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIFhNTEJ5dGUqIGNvbnN0ICAgICAgdG9GaWxsKQoreworICAgIHNpemVfdCBub09mSXRlbXNSZWFkID0gZnJlYWQoKHZvaWQqKSB0b0ZpbGwsIDEsIHRvUmVhZCwgKEZJTEUqKXRoZUZpbGUpOworCisgICAgaWYoZmVycm9yKChGSUxFKil0aGVGaWxlKSkKKyAgICB7CisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdFJlYWRGcm9tRmlsZSk7CisgICAgfQorCisgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpbm9PZkl0ZW1zUmVhZDsKK30KKworCit2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OnJlc2V0RmlsZShGaWxlSGFuZGxlIHRoZUZpbGUpCit7CisgICAgLy8gU2VlayB0byB0aGUgc3RhcnQgb2YgdGhlIGZpbGUKKyAgICBpZiAoZnNlZWsoKEZJTEUqKXRoZUZpbGUsIDAsIFNFRUtfU0VUKSkKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90UmVzZXRGaWxlKTsKK30KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBYTUxQbGF0Zm9ybVV0aWxzOiBUaW1pbmcgTWV0aG9kcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Vuc2lnbmVkIGxvbmcgWE1MUGxhdGZvcm1VdGlsczo6Z2V0Q3VycmVudE1pbGxpcygpCit7CisgICAgdGltZWIgYVRpbWU7CisgICAgZnRpbWUoJmFUaW1lKTsKKyAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpKGFUaW1lLnRpbWUqMTAwMCArIGFUaW1lLm1pbGxpdG0pOworCit9CisKKworWE1MQ2gqIFhNTFBsYXRmb3JtVXRpbHM6OmdldEJhc2VQYXRoKGNvbnN0IFhNTENoKiBjb25zdCBzcmNQYXRoKQoreworCisgICAgLy8KKyAgICAvLyAgTk9URTogVEhlIHBhdGggcHJvdmlkZWQgaGFzIGFsd2F5cyBhbHJlYWR5IGJlZW4gb3BlbmVkIHN1Y2Nlc3NmdWxseSwKKyAgICAvLyAgc28gd2Uga25vdyB0aGF0IGl0cyBub3Qgc29tZSBwYXRob2xvZ2ljYWwgZnJlYWt5IHBhdGguIEl0IGNvbWVzIGluCisgICAgLy8gIGluIG5hdGl2ZSBmb3JtYXQsIGFuZCBnb2VzIG91dCBhcyBVbmljb2RlIGFsd2F5cworICAgIC8vCisgICAgY2hhciogbmV3U3JjID0gWE1MU3RyaW5nOjp0cmFuc2NvZGUoc3JjUGF0aCk7CisgICAgQXJyYXlKYW5pdG9yPGNoYXI+IGphblRleHQobmV3U3JjKTsKKworICAgIC8vIFVzZSBhIGxvY2FsIGJ1ZmZlciB0aGF0IGlzIGJpZyBlbm91Z2ggZm9yIHRoZSBsYXJnZXN0IGxlZ2FsIHBhdGgKKyAgICAvLyBOb3RlICMxMTg2OiBkaXJOYW1lKCkgaXMgbm90IHRocmVhZCBzYWZlLgorICAgIGNoYXIqIHRtcFBhdGggPSBkaXJuYW1lKG5ld1NyYyk7CisgICAgaWYgKCF0bXBQYXRoKQorICAgIHsKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90R2V0QmFzZVBhdGhOYW1lKTsKKyAgICB9CisKKyAgICBjaGFyKiBuZXdYTUxTdHJpbmcgPSBuZXcgY2hhciBbc3RybGVuKHRtcFBhdGgpICsyXTsKKyAgICBBcnJheUphbml0b3I8Y2hhcj4gbmV3SmFuaXRvcihuZXdYTUxTdHJpbmcpOworICAgIHN0cmNweShuZXdYTUxTdHJpbmcsIHRtcFBhdGgpOworICAgIHN0cmNhdChuZXdYTUxTdHJpbmcgLCAiLyIpOworCisgICAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgcGF0aCwgaW4gVW5pY29kZSBmb3JtYXQKKyAgICByZXR1cm4gWE1MU3RyaW5nOjp0cmFuc2NvZGUobmV3WE1MU3RyaW5nKTsKK30KKworCitib29sIFhNTFBsYXRmb3JtVXRpbHM6OmlzUmVsYXRpdmUoY29uc3QgWE1MQ2gqIGNvbnN0IHRvQ2hlY2spCit7CisgICAgLy8gQ2hlY2sgZm9yIHBhdGhvbG9naWNhbCBjYXNlIG9mIGVtcHR5IHBhdGgKKyAgICBpZiAoIXRvQ2hlY2tbMF0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vCisgICAgLy8gIElmIGl0IHN0YXJ0cyB3aXRoIGEgc2xhc2gsIHRoZW4gaXQgY2Fubm90IGJlIHJlbGF0aXZlLiBUaGlzIGNvdmVycworICAgIC8vICBib3RoIHNvbWV0aGluZyBsaWtlICJcVGVzdFxGaWxlLnhtbCIgYW5kIGFuIE5UIExhbiB0eXBlIHJlbW90ZSBwYXRoCisgICAgLy8gIHRoYXQgc3RhcnRzIHdpdGggYSBub2RlIGxpa2UgIlxcTXlOb2RlXFRlc3RcRmlsZS54bWwiLgorICAgIC8vCisgICAgaWYgKHRvQ2hlY2tbMF0gPT0gWE1MQ2goJy8nKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRWxzZSBhc3N1bWUgaXRzIGEgcmVsYXRpdmUgcGF0aAorICAgIHJldHVybiB0cnVlOworfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgTXV0ZXggbWV0aG9kcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmICFkZWZpbmVkKEFQUF9OT19USFJFQURTKQorCit2b2lkKiBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlTXV0ZXgoKQoreworICAgIHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXggPSBuZXcgcHRocmVhZF9tdXRleF90OworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QqICBhdHRyID0gbmV3IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CisgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdChhdHRyKTsKKyAgICBwdGhyZWFkX211dGV4YXR0cl9zZXRraW5kX25wKGF0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QKTsKKyAgICBpZiAocHRocmVhZF9tdXRleF9pbml0KG11dGV4LCBhdHRyKSkKKyAgICB7CisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3RDcmVhdGUpOworICAgIH0KKyAgICBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KGF0dHIpOworICAgIGRlbGV0ZSBhdHRyOworICAgIHJldHVybiAodm9pZCopKG11dGV4KTsKKworfQorCisKK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6Y2xvc2VNdXRleCh2b2lkKiBjb25zdCBtdHhIYW5kbGUpCit7CisgICAgaWYgKG10eEhhbmRsZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgocHRocmVhZF9tdXRleF90KikgbXR4SGFuZGxlKSkKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3REZXN0cm95KTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGUgbXR4SGFuZGxlOworICAgIH0KK30KKworCit2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OmxvY2tNdXRleCh2b2lkKiBjb25zdCBtdHhIYW5kbGUpCit7CisgICAgaWYgKG10eEhhbmRsZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKHB0aHJlYWRfbXV0ZXhfbG9jaygocHRocmVhZF9tdXRleF90KikgbXR4SGFuZGxlKSkKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3RMb2NrKTsKKyAgICAgICAgfQorICAgIH0KK30KKworCit2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OnVubG9ja011dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKK3sKKyAgICBpZiAobXR4SGFuZGxlICE9IE5VTEwpCisgICAgeworICAgICAgICBpZiAocHRocmVhZF9tdXRleF91bmxvY2soKHB0aHJlYWRfbXV0ZXhfdCopIG10eEhhbmRsZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90VW5sb2NrKTsKKyAgICAgICAgfQorICAgIH0KK30KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIE1pc2NlbGxhbmVvdXMgc3luY2hyb25pemF0aW9uIG1ldGhvZHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQqIFhNTFBsYXRmb3JtVXRpbHM6OmNvbXBhcmVBbmRTd2FwKHZvaWQqKiAgICAgICAgICAgIHRvRmlsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY29uc3Qgdm9pZCogY29uc3QgbmV3VmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGNvbnN0IHZvaWQqIGNvbnN0IHRvQ29tcGFyZSkKK3sKKyAgICBYTUxNdXRleExvY2sgbG9ja011dGV4KCZhdG9taWNPcHNNdXRleCk7CisKKyAgICB2b2lkICpyZXRWYWwgPSAqdG9GaWxsOworICAgIGlmICgqdG9GaWxsID09IHRvQ29tcGFyZSkKKyAgICAgICAgKnRvRmlsbCA9ICh2b2lkICopbmV3VmFsdWU7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorCitpbnQgWE1MUGxhdGZvcm1VdGlsczo6YXRvbWljSW5jcmVtZW50KGludCAmbG9jYXRpb24pCit7CisgICAgWE1MTXV0ZXhMb2NrIGxvY2FsTG9jaygmYXRvbWljT3BzTXV0ZXgpOworCisgICAgcmV0dXJuICsrbG9jYXRpb247Cit9CisKK2ludCBYTUxQbGF0Zm9ybVV0aWxzOjphdG9taWNEZWNyZW1lbnQoaW50ICZsb2NhdGlvbikKK3sKKyAgICBYTUxNdXRleExvY2sgbG9jYWxMb2NrKCZhdG9taWNPcHNNdXRleCk7CisKKyAgICByZXR1cm4gLS1sb2NhdGlvbjsKK30KKworI2Vsc2UgLy8gI2lmICFkZWZpbmVkIChBUFBfTk9fVEhSRUFEUykKKwordm9pZCogWE1MUGxhdGZvcm1VdGlsczo6bWFrZU11dGV4KCkKK3sKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6Y2xvc2VNdXRleCh2b2lkKiBjb25zdCBtdHhIYW5kbGUpCit7Cit9CisKK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6bG9ja011dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKK3sKK30KKwordm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjp1bmxvY2tNdXRleCh2b2lkKiBjb25zdCBtdHhIYW5kbGUpCit7Cit9CisKK3ZvaWQqIFhNTFBsYXRmb3JtVXRpbHM6OmNvbXBhcmVBbmRTd2FwICh2b2lkKiogICAgICAgICAgICAgdG9GaWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGNvbnN0ICBuZXdWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBjb25zdCAgdG9Db21wYXJlKQoreworICAgIHZvaWQgKnJldFZhbCA9ICp0b0ZpbGw7CisgICAgaWYgKCp0b0ZpbGwgPT0gdG9Db21wYXJlKQorICAgICAgICp0b0ZpbGwgPSAodm9pZCAqKW5ld1ZhbHVlOworICAgIHJldHVybiByZXRWYWw7Cit9CisKK2ludCBYTUxQbGF0Zm9ybVV0aWxzOjphdG9taWNJbmNyZW1lbnQoaW50ICZsb2NhdGlvbikKK3sKKyAgICByZXR1cm4gKytsb2NhdGlvbjsKK30KKworaW50IFhNTFBsYXRmb3JtVXRpbHM6OmF0b21pY0RlY3JlbWVudChpbnQgJmxvY2F0aW9uKQoreworICAgIHJldHVybiAtLWxvY2F0aW9uOworfQorCisjZW5kaWYgLy8gQVBQX05PX1RIUkVBRFMKKworCmRpZmYgLS1naXQgYS9zcmMvdXRpbC9QbGF0Zm9ybXMvTGludXgvTGludXhQbGF0Zm9ybVV0aWxzLmNwcCBiL3NyYy91dGlsL1BsYXRmb3Jtcy9MaW51eC9MaW51eFBsYXRmb3JtVXRpbHMuY3BwCmluZGV4IDdjYzYzNjQuLjgzZDkwODYgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL1BsYXRmb3Jtcy9MaW51eC9MaW51eFBsYXRmb3JtVXRpbHMuY3BwCisrKyBiL3NyYy91dGlsL1BsYXRmb3Jtcy9MaW51eC9MaW51eFBsYXRmb3JtVXRpbHMuY3BwCkBAIC01Niw4ICs1NiwxNSBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDc6MDEgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzExLzIzIDAyOjAwOjQ4ICByYWh1bGoKKyAqIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KK1JldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xNyAyMjozNTozMyAgcmFodWxqCisgKiBSZXBsYWNlZCBkZWZhdWx0IGF0dHIgbXV0ZXhlcyB3aXRoIHJlY3Vyc2l2ZSBtdXRleGVzLiBBbHNvIGNvZGUgd29ya3Mgd2l0aCBJQ1UgdHJhbnNjb2Rpbmcgc2VydmljZQorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDc6MDEgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS42ICAxOTk5LzExLzA4IDIwOjQ1OjMwICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNjksNyArNzYsNyBAQAogLy8gIEluY2x1ZGVzCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotI2lmbmRlZiBBUFBfTk9fVEhSRUFEUworI2lmICFkZWZpbmVkKEFQUF9OT19USFJFQURTKQogI2luY2x1ZGUgICAgPHB0aHJlYWQuaD4KICNlbmRpZgogCkBAIC04NywyMCArOTQsMjUgQEAKICNpbmNsdWRlICAgIDx1dGlsL1hNTFN0cmluZy5ocHA+CiAjaW5jbHVkZSAgICA8dXRpbC9YTUxVbmkuaHBwPgogCi0jaWYgZGVmaW5lZCAoWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUikKKworI2lmIGRlZmluZWQoWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUikKICAgICAjaW5jbHVkZSA8dXRpbC9UcmFuc2NvZGVycy9JQ1UvSUNVVHJhbnNTZXJ2aWNlLmhwcD4KLSNlbHNlCS8vIHVzZSBuYXRpdmUgdHJhbnNjb2RlcgorI2Vsc2UKKyAgICAvLyBVc2UgbmF0aXZlIHRyYW5zY29kZXIuIFNhbWUgYXMgLURYTUxfVVNFX05BVElWRV9UUkFOU0NPREVSCiAgICAgI2luY2x1ZGUgPHV0aWwvVHJhbnNjb2RlcnMvSWNvbnYvSWNvbnZUcmFuc1NlcnZpY2UuaHBwPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkIChYTUxfVVNFX0lDVV9NRVNTQUdFTE9BREVSKQorCisjaWYgZGVmaW5lZChYTUxfVVNFX0lDVV9NRVNTQUdFTE9BREVSKQogICAgICNpbmNsdWRlIDx1dGlsL01zZ0xvYWRlcnMvSUNVL0lDVU1zZ0xvYWRlci5ocHA+Ci0jZWxpZiBkZWZpbmVkIChYTUxfVVNFX0lDT05WX01FU1NBR0VMT0FERVIpCi0gICAgI2luY2x1ZGUgPHV0aWwvTXNnTG9hZGVycy9Nc2dDYXRhbG9nL01zZ0NhdGFsb2dMb2FkZXIuaHBwPgotI2Vsc2UJLy8gdXNlIEluLW1lbW9yeSBtZXNzYWdlIGxvYWRlcgotICAgICNpbmNsdWRlIDx1dGlsL01zZ0xvYWRlcnMvSW5NZW1vcnkvSW5NZW1Nc2dMb2FkZXIuaHBwPiAgIC8vaGludCBmb3IgdGhlIHVzZXIgdG8gaW5jbHVkZSB0aGlzIGZpbGUuCisKKyNlbHNlCisgICAgLy8gU2FtZSBhcyAtRFhNTF9VU0VfSU5NRU1fTUVTU0FHRUxPQURFUgorICAgICNpbmNsdWRlIDx1dGlsL01zZ0xvYWRlcnMvSW5NZW1vcnkvSW5NZW1Nc2dMb2FkZXIuaHBwPgogI2VuZGlmCiAKKworCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBMb2NhbCBNZXRob2RzCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExMCw3ICsxMjIsNyBAQAogICAgIGlmIChmcHV0cyh0b1dyaXRlLCBzdHJlYW0pID09IEVPRikKICAgICB7CiAgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCi0JCQkJIFhNTDRDRXhjZXB0czo6U3RybV9TdGRFcnJXcml0ZUZhaWx1cmUpOworICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OlN0cm1fU3RkRXJyV3JpdGVGYWlsdXJlKTsKICAgICB9CiB9CiAKQEAgLTEyMSw3ICsxMzMsNyBAQAogICAgIGlmIChmcHV0cyh0bXBWYWwsIHN0ZGVycikgPT0gRU9GKQogICAgIHsKICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAotCQkJCVhNTDRDRXhjZXB0czo6U3RybV9TdGRFcnJXcml0ZUZhaWx1cmUpOworICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6U3RybV9TdGRFcnJXcml0ZUZhaWx1cmUpOwogICAgfQogfQogCkBAIC0xMzIsNyArMTQ0LDcgQEAKICAgICBpZiAoZnB1dHModG1wVmFsLCBzdGRvdXQpID09IEVPRikKICAgICB7CiAgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCi0JCQkJIFhNTDRDRXhjZXB0czo6U3RybV9TdGRPdXRXcml0ZUZhaWx1cmUpOworICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OlN0cm1fU3RkT3V0V3JpdGVGYWlsdXJlKTsKICAgICB9CiB9CiAKQEAgLTE0MSwxMiArMTUzLDM3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBTdGFuZGFyZCBvdXQvZXJyb3Igc3VwcG9ydAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjp3cml0ZVRvU3RkRXJyKGNvbnN0IGNoYXIqIGNvbnN0IHRvV3JpdGUpCit7CisgICAgV3JpdGVDaGFyU3RyKHN0ZGVyciwgdG9Xcml0ZSk7Cit9Cit2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OndyaXRlVG9TdGRFcnIoY29uc3QgWE1MQ2gqIGNvbnN0IHRvV3JpdGUpCit7CisgICAgV3JpdGVVU3RyU3RkRXJyKHRvV3JpdGUpOworfQordm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjp3cml0ZVRvU3RkT3V0KGNvbnN0IFhNTENoKiBjb25zdCB0b1dyaXRlKQoreworICAgIFdyaXRlVVN0clN0ZE91dCh0b1dyaXRlKTsKK30KK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6d3JpdGVUb1N0ZE91dChjb25zdCBjaGFyKiBjb25zdCB0b1dyaXRlKQoreworICAgIFdyaXRlQ2hhclN0cihzdGRvdXQsIHRvV3JpdGUpOworfQorCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFhNTFBsYXRmb3JtVXRpbHM6IFBsYXRmb3JtIGluaXQgbWV0aG9kCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogc3RhdGljIFhNTE11dGV4IGF0b21pY09wc011dGV4OwogCiAKKwogdm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjpwbGF0Zm9ybUluaXQoKQogewogICAgIC8vCkBAIC0xNTQsMTcgKzE5MSwxOCBAQAogICAgIC8vIE5vcm1hbGx5LCBtdXRleGVzIGFyZSBjcmVhdGVkIG9uIGZpcnN0IHVzZSwgYnV0IHRoZXJlIGlzIGEKICAgICAvLyBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gY29tcGFyZUFuZEV4Y2hhbmdlKCkgYW5kCiAgICAgLy8gbXV0ZXggY3JlYXRpb24gdGhhdCBtdXN0IGJlIGJyb2tlbi4KKwogICAgIGF0b21pY09wc011dGV4LmZIYW5kbGUgPSBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlTXV0ZXgoKTsKIAogICAgIC8vIEhlcmUgeW91IHdvdWxkIGFsc28gc2V0IHRoZSBmZ0xpYkxvY2F0aW9uIGdsb2JhbCB2YXJpYWJsZQogICAgIC8vIFhNTFBsYXRmb3JtVXRpbHM6OmZnTGliTG9jYXRpb24gaXMgdGhlIHZhcmlhYmxlIHRvIGJlIHNldAogCi0gICAgc3RhdGljIGNvbnN0IGNoYXIgKnNoYXJlZExpYkVudlZhciA9ICJMRF9MSUJSQVJZX1BBVEgiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyICogbGlicmFyeVBhdGggPSAwOwotCi0gICAgY2hhciBsaWJOYW1lWzI1Nl07CisgICAgc3RhdGljIGNvbnN0IGNoYXIqICBzaGFyZWRMaWJFbnZWYXIgPSAiTERfTElCUkFSWV9QQVRIIjsKKyAgICBjaGFyKiAgICAgICAgICAgICAgIGxpYnJhcnlQYXRoID0gMDsKKyAgICBjaGFyICAgICAgICAgICAgICAgIGxpYk5hbWVbMjU2XTsKIAogICAgIC8vIENvbnN0cnVjdCB0aGUgbGlicmFyeSBuYW1lIGZyb20gdGhlIGdsb2JhbCB2YXJpYWJsZXMKKwogICAgIHN0cmNweShsaWJOYW1lLCBYTUw0Q19ETExOYW1lKTsKICAgICBzdHJjYXQobGliTmFtZSwgZ1hNTDRDVmVyc2lvblN0cik7CiAgICAgc3RyY2F0KGxpYk5hbWUsICIuc28iKTsKQEAgLTE3NCwxOCArMjEyLDIxIEBACiAKICAgICBpZiAobGliRW52VmFyID09IE5VTEwpCiAgICAgewotICAgICAgICBwYW5pYyggWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfTm9UcmFuc1NlcnZpY2UgKTsKKyAgICAgICAgcGFuaWMoWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfQ2FudEZpbmRMaWIpOwogICAgIH0KIAogICAgIC8vCiAgICAgLy8gSXRzIG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBjb3B5IGJlY2F1c2Ugc3RydG9rKCkgbW9kaWZpZXMgdGhlCiAgICAgLy8gc3RyaW5nIGFzIGl0IHJldHVybnMgdG9rZW5zLiBXZSBkb24ndCB3YW50IHRvIG1vZGlmeSB0aGUgc3RyaW5nCiAgICAgLy8gcmV0dXJuZWQgdG8gYnkgZ2V0ZW52KCkuCisgICAgLy8KIAogICAgIGxpYlBhdGggPSBuZXcgY2hhcltzdHJsZW4obGliRW52VmFyKSArIDFdOwogICAgIHN0cmNweShsaWJQYXRoLCBsaWJFbnZWYXIpOwogCisKICAgICAvLyBGaXJzdCBkbyB0aGUgc2VhcmNoaW5nIHByb2Nlc3MgZm9yIHRoZSBmaXJzdCBkaXJlY3RvcnkgbGlzdGluZworCiAgICAgY2hhciogIGFsbFBhdGhzID0gbGliUGF0aDsKICAgICBjaGFyKiAgbGliUGF0aE5hbWU7CiAKQEAgLTIwOSw3ICsyNTAsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgIH0KKyAgICB9IC8vIHdoaWxlCiAKICAgICBkZWxldGUgbGliUGF0aDsKIApAQCAtMjE3LDcgKzI1OCw3IEBACiAKICAgICBpZiAoWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbiA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgcGFuaWMoIFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX05vVHJhbnNTZXJ2aWNlICk7CisgICAgICAgIHBhbmljKFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX0NhbnRGaW5kTGliKTsKICAgICB9CiB9CiAKQEAgLTIyOSw4ICsyNzAsOCBAQAogLy8KIC8vICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIHBsYXRmb3JtIGluZGVwZW5kZW50IHBhcnQgb2YgdGhpcyBjbGFzcwogLy8gIHdoZW4gY2xpZW50IGNvZGUgYXNrcyB0byBoYXZlIG9uZSBvZiB0aGUgc3VwcG9ydGVkIG1lc3NhZ2Ugc2V0cyBsb2FkZWQuCi0vLyAgSW4gb3VyIGNhc2UsIHdlIHVzZSB0aGUgSUNVIGJhc2VkIG1lc3NhZ2UgbG9hZGVyIG1lY2hhbmlzbS4KIC8vCisKIFhNTE1zZ0xvYWRlciogWE1MUGxhdGZvcm1VdGlsczo6bG9hZEFNc2dTZXQoY29uc3QgWE1MQ2gqIGNvbnN0IG1zZ0RvbWFpbikKIHsKICAgICBYTUxNc2dMb2FkZXIqIHJldFZhbDsKQEAgLTIzOCw0MyArMjc5LDQyIEBACiAgICAgewogI2lmIGRlZmluZWQgKFhNTF9VU0VfSUNVX01FU1NBR0VMT0FERVIpCiAgICAgICAgIHJldFZhbCA9IG5ldyBJQ1VNc2dMb2FkZXIobXNnRG9tYWluKTsKLSNlbGlmIGRlZmluZWQgKFhNTF9VU0VfSUNPTlZfTUVTU0FHRUxPQURFUikKLSAgICAgICAgcmV0VmFsID0gbmV3IE1zZ0NhdGFsb2dMb2FkZXIobXNnRG9tYWluKTsKICNlbHNlCisgICAgICAgIC8vIHNhbWUgYXMgLURYTUxfVVNFX0lOTUVNX01FU1NBR0VMT0FERVIKICAgICAgICAgcmV0VmFsID0gbmV3IEluTWVtTXNnTG9hZGVyKG1zZ0RvbWFpbik7CiAjZW5kaWYKICAgICB9CiAKICAgICBjYXRjaCguLi4pCiAgICAgewotICAgICAgICBwYW5pYyggWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfTm9EZWZUcmFuc2NvZGVyICk7CisgICAgICAgIHBhbmljKFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX0NhbnRMb2FkTXNnRG9tYWluKTsKICAgICB9CiAgICAgcmV0dXJuIHJldFZhbDsKIH0KIAorCiAvLwogLy8gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB2ZXJ5IGVhcmx5IGluIHRoZSBib290c3RyYXBwaW5nIHByb2Nlc3MuIFRoaXMgZ3V5CiAvLyAgbXVzdCBjcmVhdGUgYSB0cmFuc2NvZGluZyBzZXJ2aWNlIGFuZCByZXR1cm4gaXQuIEl0IGNhbm5vdCB1c2UgYW55IHN0cmluZwogLy8gIG1ldGhvZHMsIGFueSB0cmFuc2NvZGluZyBzZXJ2aWNlcywgdGhyb3cgYW55IGV4Y2VwdGlvbnMsIGV0Yy4uLiBJdCBqdXN0CiAvLyAgbWFrZXMgYSB0cmFuc2NvZGluZyBzZXJ2aWNlIGFuZCByZXR1cm5zIGl0LCBvciByZXR1cm5zIHplcm8gb24gZmFpbHVyZS4KIC8vCi1YTUxUcmFuc1NlcnZpY2UqIFhNTFBsYXRmb3JtVXRpbHM6Om1ha2VUcmFuc1NlcnZpY2UoKQogCi0jaWYgZGVmaW5lZCAoWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUikKK1hNTFRyYW5zU2VydmljZSogWE1MUGxhdGZvcm1VdGlsczo6bWFrZVRyYW5zU2VydmljZSgpCiB7CisjaWYgZGVmaW5lZCAoWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUikKICAgICAvLwogICAgIC8vICBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBhdGggdG8gdGhlIEludGwgY29udmVydGVyIGZpbGVzLgogICAgIC8vCiAKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqIHhtbDRjSW50bERpckVudlZhciA9ICJJQ1VfREFUQSI7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKiBzaGFyZWRMaWJFbnZWYXIgICAgPSAiTERfTElCUkFSWV9QQVRIIjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqIGludGxQYXRoID0gMDsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqIGljdURhdGFFbnZWYXIgICA9ICJJQ1VfREFUQSI7CisgICAgY2hhciAqICAgICAgICAgICAgICBpbnRsUGF0aCAgICAgICAgPSAwOwogCi0gICAgY2hhciogZW52VmFsID0gZ2V0ZW52KHhtbDRjSW50bERpckVudlZhcik7Ci0gICAgLy9jaGVjayBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQKLSAgICBpZiAoZW52VmFsICE9IE5VTEwpIC8vIFdlIGhhdmUgZm91bmQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICBjaGFyKiBlbnZWYWwgPSBnZXRlbnYoaWN1RGF0YUVudlZhcik7CisKKyAgICAvLyBDaGVjayBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuLi4KKyAgICBpZiAoZW52VmFsICE9IE5VTEwpCiAgICAgewotICAgICAgICAvLyBTdG9yZSB0aGlzIHN0cmluZyBpbiB0aGUgc3RhdGljIG1lbWJlcgogICAgICAgICB1bnNpZ25lZCBpbnQgcGF0aExlbiA9IHN0cmxlbihlbnZWYWwpOwogICAgICAgICBpbnRsUGF0aCA9IG5ldyBjaGFyW3BhdGhMZW4gKyAyXTsKIApAQCAtMjg1LDg2ICszMjUsMzkgQEAKICAgICAgICAgfQogCiAgICAgICAgIElDVVRyYW5zU2VydmljZTo6c2V0SUNVUGF0aChpbnRsUGF0aCk7Ci0gICAgICAgIGlmIChpbnRsUGF0aCAhPSBOVUxMKSBkZWxldGUgaW50bFBhdGg7CisgICAgICAgIGRlbGV0ZSBpbnRsUGF0aDsKIAogICAgICAgICByZXR1cm4gbmV3IElDVVRyYW5zU2VydmljZTsKICAgICB9CiAKICAgICAvLwotICAgIC8vICBJZiB3ZSBkaWQgbm90IGZpbmQgdGhlIGVudmlyb25tZW50IHZhciwgc28gbGV0cyB0cnkgdG8gZ28gdGhlIGF1dG8KLSAgICAvLyAgc2VhcmNoIHJvdXRlLgotICAgIC8vCi0gICAgY2hhciBsaWJOYW1lWzI1Nl07Ci0gICAgc3RyY3B5KGxpYk5hbWUsIFhNTDRDX0RMTE5hbWUpOwotICAgIHN0cmNhdChsaWJOYW1lLCBnWE1MNENWZXJzaW9uU3RyKTsKLSAgICBzdHJjYXQobGliTmFtZSwgIi5zbyIpOwotCi0gICAgY2hhciogbGliRW52VmFyID0gZ2V0ZW52KHNoYXJlZExpYkVudlZhcik7Ci0gICAgY2hhciogbGliUGF0aCA9IE5VTEw7Ci0KLSAgICBpZiAobGliRW52VmFyID09IE5VTEwpCi0gICAgewotICAgICAgICBwYW5pYyggWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfTm9UcmFuc1NlcnZpY2UgKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIEl0cyBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgY29weSBiZWNhdXNlIHN0cnRvaygpIG1vZGlmaWVzIHRoZQotICAgIC8vIHN0cmluZyBhcyBpdCByZXR1cm5zIHRva2Vucy4gV2UgZG9uJ3Qgd2FudCB0byBtb2RpZnkgdGhlIHN0cmluZwotICAgIC8vIHJldHVybmVkIHRvIGJ5IGdldGVudigpLgorICAgIC8vICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgSUNVX0RBVEEgaXMgbm90IHNldCwgYXNzdW1lIHRoYXQgdGhlCisgICAgLy8gIGNvbnZlcnRlciBmaWxlcyBhcmUgc3RvcmVkIHJlbGF0aXZlIHRvIHRoZSBYZXJjZXMtQyBsaWJyYXJ5LgogICAgIC8vCiAKLSAgICBsaWJQYXRoID0gbmV3IGNoYXJbc3RybGVuKGxpYkVudlZhcikgKyAxXTsKLSAgICBzdHJjcHkobGliUGF0aCwgbGliRW52VmFyKTsKLQotICAgIC8vIEZpcnN0IGRvIHRoZSBzZWFyY2hpbmcgcHJvY2VzcyBmb3IgdGhlIGZpcnN0IGRpcmVjdG9yeSBsaXN0aW5nCi0gICAgY2hhciogIGFsbFBhdGhzID0gbGliUGF0aDsKLSAgICBjaGFyKiAgbGliUGF0aE5hbWU7Ci0KLSAgICB3aGlsZSAoKGxpYlBhdGhOYW1lID0gc3RydG9rKGFsbFBhdGhzLCAiOiIpKSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgRklMRSogIGR1bW15RnB0ciA9IDA7Ci0gICAgICAgIGFsbFBhdGhzID0gMDsKLQotICAgICAgICBjaGFyKiBsaWJmaWxlID0gbmV3IGNoYXJbc3RybGVuKGxpYlBhdGhOYW1lKSArIHN0cmxlbihsaWJOYW1lKSArIDJdOwotICAgICAgICBzdHJjcHkobGliZmlsZSwgbGliUGF0aE5hbWUpOwotICAgICAgICBzdHJjYXQobGliZmlsZSwgIi8iKTsKLSAgICAgICAgc3RyY2F0KGxpYmZpbGUsIGxpYk5hbWUpOwotCi0gICAgICAgIGR1bW15RnB0ciA9IChGSUxFICopIGZvcGVuKGxpYmZpbGUsICJyYiIpOwotICAgICAgICBkZWxldGUgW10gbGliZmlsZTsKLSAgICAgICAgaWYgKGR1bW15RnB0ciAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBmY2xvc2UoZHVtbXlGcHRyKTsKLSAgICAgICAgICAgIGludGxQYXRoID0gbmV3IGNoYXJbc3RybGVuKGxpYlBhdGhOYW1lKSsgc3RybGVuKCIvaWN1L2RhdGEvIikrMV07Ci0gICAgICAgICAgICBzdHJjcHkoKGNoYXIgKikgaW50bFBhdGgsIGxpYlBhdGhOYW1lKTsKLSAgICAgICAgICAgIHN0cmNhdCgoY2hhciAqKSBpbnRsUGF0aCwgIi9pY3UvZGF0YS8iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICB9IC8vIHdoaWxlCi0KLSAgICBkZWxldGUgbGliUGF0aDsKKyAgICB1bnNpZ25lZCBpbnQgIGxlbnQgPSBzdHJsZW4oWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbikgKworICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbigiL2ljdS9kYXRhLyIpICsgMTsKKyAgICBpbnRsUGF0aCA9IG5ldyBjaGFyW2xlbnRdOworICAgIHN0cmNweShpbnRsUGF0aCwgWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbik7CisgICAgc3RyY2F0KGludGxQYXRoLCAiL2ljdS9kYXRhLyIpOwogCiAgICAgSUNVVHJhbnNTZXJ2aWNlOjpzZXRJQ1VQYXRoKGludGxQYXRoKTsKLQotICAgIGlmIChpbnRsUGF0aCA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcGFuaWMoIFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX05vVHJhbnNTZXJ2aWNlICk7Ci0gICAgfQotICAgIGlmIChpbnRsUGF0aCAhPSBOVUxMKSBkZWxldGUgaW50bFBhdGg7CisgICAgZGVsZXRlIGludGxQYXRoOwogCiAgICAgcmV0dXJuIG5ldyBJQ1VUcmFuc1NlcnZpY2U7Ci19Ci0jZWxpZiBkZWZpbmVkIChYTUxfVVNFX0lDT05WX1RSQU5TQ09ERVIpCi17Ci0gICAgcmV0dXJuIG5ldyBJY29udlRyYW5zU2VydmljZTsKLX0KKworCiAjZWxzZQoteworCisgICAgLy8gVXNlIG5hdGl2ZSB0cmFuc2NvZGluZyBzZXJ2aWNlcy4KKyAgICAvLyBzYW1lIGFzIC1EWE1MX1VTRV9JTk1FTV9NRVNTQUdFTE9BREVSCiAgICAgcmV0dXJuIG5ldyBJY29udlRyYW5zU2VydmljZTsKLX0KKwogI2VuZGlmCiAKK30gLy8gWE1MUGxhdGZvcm1VdGlsczo6bWFrZVRyYW5zU2VydmljZQorCisKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgWE1MUGxhdGZvcm1VdGlsczogVGhlIHBhbmljIG1ldGhvZApAQCAtMzc0LDI3ICszNjcsMzggQEAKICAgICAvLwogICAgIC8vICBXZSBqdXN0IHByaW50IGEgbWVzc2FnZSBhbmQgZXhpdAogICAgIC8vCi0gICAgcHJpbnRmKCJUaGUgWE1MNEMgc3lzdGVtIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC5cbiIpOwotICAgIHByaW50ZigiVGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBmb3IgdGhpcyBmYWlsdXJlIGlzIHRoZSBpbmFiaWxpdHkgdG8gZmluZFxuIik7Ci0gICAgcHJpbnRmKCJ0aGUgaW50ZXJuYXRpb25hbCBlbmNvZGluZyBmaWxlcy4gQnkgZGVmYXVsdCwgdGhlIGVuY29kaW5nIGZpbGVzXG4iKTsKLSAgICBwcmludGYoImhhdmUgdGhlIGV4dGVuc2lvbiAuY252IGFuZCBleGlzdCBpbiBhIGRpcmVjdG9yeSBpY3UvZGF0YSByZWxhdGl2ZVxuIik7Ci0gICAgcHJpbnRmKCJ0byB0aGUgWE1MNEMgc2hhcmVkIGxpYnJhcnkuIElmIHlvdSBoYXZlIGtlcHQgdGhlIGNvbnZlcnRlciBmaWxlc1xuIik7Ci0gICAgcHJpbnRmKCJpbiBhIGRpZmZlcmVudCBsb2NhdGlvbiwgeW91IG5lZWQgdG8gc2V0IHVwIGFuIGVudmlyb25tZW50IHZhcmlhYmxlXG4iKTsKLSAgICBwcmludGYoImNhbGxlZCBJQ1VfREFUQSB3aGljaCBkaXJlY3RseSBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGVcbiIpOwotICAgIHByaW50ZigiZW5jb2RpbmcgZmlsZXMgYXJlIGtlcHQuXG4iKTsKLQorICAgIAorICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAiVGhlIFhlcmNlcy1DIHN5c3RlbSBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgIklmIHlvdSBhcmUgdXNpbmcgSUNVLCB0aGVuIHRoZSBtb3N0IGxpa2VseSByZWFzb24gZm9yIHRoaXMgZmFpbHVyZVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJpcyB0aGUgaW5hYmlsaXR5IHRvIGZpbmQgdGhlIElDVSBjb3ZlcnRlciBmaWxlcy4gVGhlIGNvbnZlcnRlciBmaWxlc1xuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJoYXZlIHRoZSBleHRlbnNpb24gLmNudiBhbmQgZXhpc3QgaW4gYSBkaXJlY3RvcnkgJ2ljdS9kYXRhJyByZWxhdGl2ZVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJ0byB0aGUgWGVyY2VzLUMgc2hhcmVkIGxpYnJhcnkuIElmIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgY29udmVydGVyIGZpbGVzXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgImluIGEgZGlmZmVyZW50IGxvY2F0aW9uLCB5b3UgbmVlZCB0byBzZXQgdXAgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgIidJQ1VfREFUQScgdG8gcG9pbnQgZGlyZWN0bHkgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICJjb252ZXJ0ZXIgZmlsZXMuXG4iKTsKKyAgICAKICAgICBleGl0KC0xKTsKIH0KIAorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBYTUxQbGF0Zm9ybVV0aWxzOiBGaWxlIE1ldGhvZHMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiB1bnNpZ25lZCBpbnQgWE1MUGxhdGZvcm1VdGlsczo6Y3VyRmlsZVBvcyhGaWxlSGFuZGxlIHRoZUZpbGUpCiB7Ci0gICAgLy8gR2V0IHRoZSBjdXJyZW50IHBvc2l0aW9uCiAgICAgaW50IGN1clBvcyA9IGZ0ZWxsKCAoRklMRSopdGhlRmlsZSk7CiAgICAgaWYgKGN1clBvcyA9PSAtMSkKLSAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90R2V0U2l6ZSk7CisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdEdldFNpemUpOwogCiAgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpY3VyUG9zOwogfQpAQCAtNDAyLDI3ICs0MDYsMzMgQEAKIHZvaWQgWE1MUGxhdGZvcm1VdGlsczo6Y2xvc2VGaWxlKEZpbGVIYW5kbGUgdGhlRmlsZSkKIHsKICAgICBpZiAoZmNsb3NlKChGSUxFKil0aGVGaWxlKSkKLSAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90Q2xvc2VGaWxlKTsKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90Q2xvc2VGaWxlKTsKIH0KIAogdW5zaWduZWQgaW50IFhNTFBsYXRmb3JtVXRpbHM6OmZpbGVTaXplKEZpbGVIYW5kbGUgdGhlRmlsZSkKIHsKICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcG9zaXRpb24KLSAgICBsb25nICBpbnQgY3VyUG9zID0gZnRlbGwoKEZJTEUqKXRoZUZpbGUpOworICAgIGxvbmcgIGludCBjdXJQb3MgPSBmdGVsbCgoRklMRSopIHRoZUZpbGUpOwogICAgIGlmIChjdXJQb3MgPT0gLTEpCi0gICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdEdldEN1clBvcyk7CisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdEdldEN1clBvcyk7CiAKICAgICAvLyBTZWVrIHRvIHRoZSBlbmQgYW5kIHNhdmUgdGhhdCB2YWx1ZSBmb3IgcmV0dXJuCi0gICAgIGlmIChmc2VlayggKEZJTEUqKXRoZUZpbGUsIDAsIFNFRUtfRU5EKSApCi0gICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdFNlZWtUb0VuZCk7CisgICAgIGlmIChmc2VlaygoRklMRSopIHRoZUZpbGUsIDAsIFNFRUtfRU5EKSkKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90U2Vla1RvRW5kKTsKIAotICAgIGxvbmcgaW50IHJldFZhbCA9IGZ0ZWxsKCAoRklMRSopdGhlRmlsZSk7CisgICAgbG9uZyBpbnQgcmV0VmFsID0gZnRlbGwoKEZJTEUqKXRoZUZpbGUpOwogICAgIGlmIChyZXRWYWwgPT0gLTEpCi0gICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdFNlZWtUb0VuZCk7CisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdFNlZWtUb0VuZCk7CiAKICAgICAvLyBBbmQgcHV0IHRoZSBwb2ludGVyIGJhY2sKKwogICAgIGlmIChmc2VlayggKEZJTEUqKXRoZUZpbGUsIGN1clBvcywgU0VFS19TRVQpICkKLSAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90U2Vla1RvUG9zKTsKKyAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgWE1MNENFeGNlcHRzOjpGaWxlX0NvdWxkTm90U2Vla1RvUG9zKTsKIAogICAgIHJldHVybiAodW5zaWduZWQgaW50KXJldFZhbDsKIH0KQEAgLTQzOCwxNiArNDQ4LDI2IEBACiAgICAgcmV0dXJuIHJldFZhbDsKIH0KIAotdW5zaWduZWQgaW50Ci1YTUxQbGF0Zm9ybVV0aWxzOjpyZWFkRmlsZUJ1ZmZlciggIEZpbGVIYW5kbGUgICAgICB0aGVGaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY29uc3QgdW5zaWduZWQgaW50ICAgIHRvUmVhZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIFhNTEJ5dGUqIGNvbnN0ICB0b0ZpbGwpCisKKworRmlsZUhhbmRsZSBYTUxQbGF0Zm9ybVV0aWxzOjpvcGVuU3RkSW5IYW5kbGUoKQogewotICAgIHNpemVfdCBub09mSXRlbXNSZWFkID0gZnJlYWQoICh2b2lkKikgdG9GaWxsLCAxLCB0b1JlYWQsIChGSUxFKil0aGVGaWxlKTsKKyAgICAgICAgcmV0dXJuIChGaWxlSGFuZGxlKWZkb3BlbihkdXAoMCksICJyYiIpOworfQorCisKKwordW5zaWduZWQgaW50CitYTUxQbGF0Zm9ybVV0aWxzOjpyZWFkRmlsZUJ1ZmZlciggRmlsZUhhbmRsZSAgICAgICAgICB0aGVGaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY29uc3QgdW5zaWduZWQgaW50ICB0b1JlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBYTUxCeXRlKiBjb25zdCAgICAgIHRvRmlsbCkKK3sKKyAgICBzaXplX3Qgbm9PZkl0ZW1zUmVhZCA9IGZyZWFkKCh2b2lkKikgdG9GaWxsLCAxLCB0b1JlYWQsIChGSUxFKil0aGVGaWxlKTsKIAogICAgIGlmKGZlcnJvcigoRklMRSopdGhlRmlsZSkpCiAgICAgewotICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RSZWFkRnJvbUZpbGUpOworICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RSZWFkRnJvbUZpbGUpOwogICAgIH0KIAogICAgIHJldHVybiAodW5zaWduZWQgaW50KW5vT2ZJdGVtc1JlYWQ7CkBAIC00NTcsMTAgKzQ3NywxMiBAQAogdm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjpyZXNldEZpbGUoRmlsZUhhbmRsZSB0aGVGaWxlKQogewogICAgIC8vIFNlZWsgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaWxlCi0gICAgaWYgKGZzZWVrKChGSUxFKil0aGVGaWxlLCAwLCBTRUVLX1NFVCkgKQotICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RSZXNldEZpbGUpOworICAgIGlmIChmc2VlaygoRklMRSopdGhlRmlsZSwgMCwgU0VFS19TRVQpKQorICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6OkZpbGVfQ291bGROb3RSZXNldEZpbGUpOwogfQogCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFhNTFBsYXRmb3JtVXRpbHM6IFRpbWluZyBNZXRob2RzCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ4NSwyMCArNTA3LDI0IEBACiAgICAgQXJyYXlKYW5pdG9yPGNoYXI+IGphblRleHQobmV3U3JjKTsKIAogICAgIC8vIFVzZSBhIGxvY2FsIGJ1ZmZlciB0aGF0IGlzIGJpZyBlbm91Z2ggZm9yIHRoZSBsYXJnZXN0IGxlZ2FsIHBhdGgKLSAgICAgY2hhciogdG1wUGF0aCA9IGRpcm5hbWUoKGNoYXIqKW5ld1NyYyk7CisgICAgLy8gTm90ZSAjMTE4NjogZGlyTmFtZSgpIGlzIG5vdCB0aHJlYWQgc2FmZS4KKyAgICBjaGFyKiB0bXBQYXRoID0gZGlybmFtZShuZXdTcmMpOwogICAgIGlmICghdG1wUGF0aCkKICAgICB7Ci0gICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdEdldEJhc2VQYXRoTmFtZSk7CisgICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6RmlsZV9Db3VsZE5vdEdldEJhc2VQYXRoTmFtZSk7CiAgICAgfQogCiAgICAgY2hhciogbmV3WE1MU3RyaW5nID0gbmV3IGNoYXIgW3N0cmxlbih0bXBQYXRoKSArMl07CiAgICAgQXJyYXlKYW5pdG9yPGNoYXI+IG5ld0phbml0b3IobmV3WE1MU3RyaW5nKTsKICAgICBzdHJjcHkobmV3WE1MU3RyaW5nLCB0bXBQYXRoKTsKLSAgICAgICAgc3RyY2F0KG5ld1hNTFN0cmluZyAsICIvIik7CisgICAgc3RyY2F0KG5ld1hNTFN0cmluZyAsICIvIik7CisKICAgICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBwYXRoLCBpbiBVbmljb2RlIGZvcm1hdAogICAgIHJldHVybiBYTUxTdHJpbmc6OnRyYW5zY29kZShuZXdYTUxTdHJpbmcpOwogfQogCisKIGJvb2wgWE1MUGxhdGZvcm1VdGlsczo6aXNSZWxhdGl2ZShjb25zdCBYTUxDaCogY29uc3QgdG9DaGVjaykKIHsKICAgICAvLyBDaGVjayBmb3IgcGF0aG9sb2dpY2FsIGNhc2Ugb2YgZW1wdHkgcGF0aApAQCAtNTE3LDEyNSArNTQzLDkwIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgU3RhbmRhcmQgb3V0L2Vycm9yIHN1cHBvcnQKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgWE1MUGxhdGZvcm1VdGlsczo6d3JpdGVUb1N0ZEVycihjb25zdCBjaGFyKiBjb25zdCB0b1dyaXRlKQotewotICAgIFdyaXRlQ2hhclN0cihzdGRlcnIsIHRvV3JpdGUpOwotfQotdm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjp3cml0ZVRvU3RkRXJyKGNvbnN0IFhNTENoKiBjb25zdCB0b1dyaXRlKQotewotICAgIFdyaXRlVVN0clN0ZEVycih0b1dyaXRlKTsKLX0KLXZvaWQgWE1MUGxhdGZvcm1VdGlsczo6d3JpdGVUb1N0ZE91dChjb25zdCBYTUxDaCogY29uc3QgdG9Xcml0ZSkKLXsKLSAgICBXcml0ZVVTdHJTdGRPdXQodG9Xcml0ZSk7Ci19Ci12b2lkIFhNTFBsYXRmb3JtVXRpbHM6OndyaXRlVG9TdGRPdXQoY29uc3QgY2hhciogY29uc3QgdG9Xcml0ZSkKLXsKLSAgICBXcml0ZUNoYXJTdHIoc3Rkb3V0LCB0b1dyaXRlKTsKLX0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBNdXRleCBtZXRob2RzCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jaWZuZGVmIEFQUF9OT19USFJFQURTCi12b2lkIFhNTFBsYXRmb3JtVXRpbHM6OmNsb3NlTXV0ZXgodm9pZCogY29uc3QgbXR4SGFuZGxlKQotewotICAgIGlmIChtdHhIYW5kbGUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChwdGhyZWFkX211dGV4X2Rlc3Ryb3koIChwdGhyZWFkX211dGV4X3QqKW10eEhhbmRsZSkpCi0gICAgewotICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLCBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90RGVzdHJveSk7Ci0gICAgfQotICAgIGlmICgocHRocmVhZF9tdXRleF90KiltdHhIYW5kbGUpCi0gICAgICAgIGRlbGV0ZSBtdHhIYW5kbGU7Ci19Ci0KLXZvaWQgWE1MUGxhdGZvcm1VdGlsczo6bG9ja011dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKLXsKLSAgICBpZiAobXR4SGFuZGxlID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAocHRocmVhZF9tdXRleF9sb2NrKCAocHRocmVhZF9tdXRleF90KiltdHhIYW5kbGUpKQotICAgIHsKLSAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdExvY2spOwotICAgIH0KLX0KKyNpZiAhZGVmaW5lZChBUFBfTk9fVEhSRUFEUykKIAogdm9pZCogWE1MUGxhdGZvcm1VdGlsczo6bWFrZU11dGV4KCkKIHsKICAgICBwdGhyZWFkX211dGV4X3QqIG11dGV4ID0gbmV3IHB0aHJlYWRfbXV0ZXhfdDsKLQotICAgIGlmIChwdGhyZWFkX211dGV4X2luaXQobXV0ZXgsIE5VTEwpKQorICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QqICBhdHRyID0gbmV3IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CisgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdChhdHRyKTsKKyAgICBwdGhyZWFkX211dGV4YXR0cl9zZXRraW5kX25wKGF0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QKTsKKyAgICBpZiAocHRocmVhZF9tdXRleF9pbml0KG11dGV4LCBhdHRyKSkKICAgICB7Ci0gICAgICAgIFRocm93WE1MKFhNTFBsYXRmb3JtVXRpbHNFeGNlcHRpb24sIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3RDcmVhdGUpOworICAgICAgICBUaHJvd1hNTChYTUxQbGF0Zm9ybVV0aWxzRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICBYTUw0Q0V4Y2VwdHM6Ok11dGV4X0NvdWxkTm90Q3JlYXRlKTsKICAgICB9CisgICAgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveShhdHRyKTsKKyAgICBkZWxldGUgYXR0cjsKICAgICByZXR1cm4gKHZvaWQqKShtdXRleCk7CisKIH0KIAotdm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjp1bmxvY2tNdXRleCh2b2lkKiBjb25zdCBtdHhIYW5kbGUpCi17Ci0gICAgaWYgKG10eEhhbmRsZSA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAocHRocmVhZF9tdXRleF90KiltdHhIYW5kbGUpKQotICAgIHsKLSAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwgWE1MNENFeGNlcHRzOjpNdXRleF9Db3VsZE5vdFVubG9jayk7Ci0gICAgfQotfQotCi0jZWxzZSAvLyAjaWZuZGVmIEFQUF9OT19USFJFQURTCiAKIHZvaWQgWE1MUGxhdGZvcm1VdGlsczo6Y2xvc2VNdXRleCh2b2lkKiBjb25zdCBtdHhIYW5kbGUpCiB7CisgICAgaWYgKG10eEhhbmRsZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgocHRocmVhZF9tdXRleF90KikgbXR4SGFuZGxlKSkKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3REZXN0cm95KTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGUgbXR4SGFuZGxlOworICAgIH0KIH0KIAorCiB2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OmxvY2tNdXRleCh2b2lkKiBjb25zdCBtdHhIYW5kbGUpCiB7CisgICAgaWYgKG10eEhhbmRsZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKHB0aHJlYWRfbXV0ZXhfbG9jaygocHRocmVhZF9tdXRleF90KikgbXR4SGFuZGxlKSkKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3RMb2NrKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAotdm9pZCogWE1MUGxhdGZvcm1VdGlsczo6bWFrZU11dGV4KCkKLXsKLSAgICAgICAgcmV0dXJuIDA7Ci19CiAKIHZvaWQgWE1MUGxhdGZvcm1VdGlsczo6dW5sb2NrTXV0ZXgodm9pZCogY29uc3QgbXR4SGFuZGxlKQogeworICAgIGlmIChtdHhIYW5kbGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChwdGhyZWFkX211dGV4X3VubG9jaygocHRocmVhZF9tdXRleF90KikgbXR4SGFuZGxlKSkKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3dYTUwoWE1MUGxhdGZvcm1VdGlsc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgIFhNTDRDRXhjZXB0czo6TXV0ZXhfQ291bGROb3RVbmxvY2spOworICAgICAgICB9CisgICAgfQogfQogCi0jZW5kaWYgLy8gQVBQX05PX1RIUkVBRFMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBNaXNjZWxsYW5lb3VzIHN5bmNocm9uaXphdGlvbiBtZXRob2RzCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy9hdG9taWMgc3lzdGVtIGNhbGxzIGluIFNvbGFyaXMgaXMgb25seSByZXN0cmljdGVkIHRvIGtlcm5lbCBsaWJyYXJpZXMKLS8vU28sIHRvIG1ha2Ugb3BlcmF0aW9ucyB0aHJlYWQgc2FmZSB3ZSBpbXBsZW1lbnQgc3RhdGljIG11dGV4IGFuZCBsb2NrCi0vL3RoZSBhdG9taWMgb3BlcmF0aW9ucy4gSXQgbWFrZXMgdGhlIHByb2Nlc3Mgc2xvdyBidXQgd2hhdCdzIHRoZSBhbHRlcm5hdGl2ZSEKIAotdm9pZCogWE1MUGxhdGZvcm1VdGlsczo6Y29tcGFyZUFuZFN3YXAgKCB2b2lkKiogICAgICB0b0ZpbGwgLAotICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBjb25zdCBuZXdWYWx1ZSAsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGNvbnN0IHRvQ29tcGFyZSkKK3ZvaWQqIFhNTFBsYXRmb3JtVXRpbHM6OmNvbXBhcmVBbmRTd2FwKHZvaWQqKiAgICAgICAgICAgIHRvRmlsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY29uc3Qgdm9pZCogY29uc3QgbmV3VmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGNvbnN0IHZvaWQqIGNvbnN0IHRvQ29tcGFyZSkKIHsKLSAgICAvL3JldHVybiAoKHZvaWQqKWNhczMyKCAodWludDMyX3QqKXRvRmlsbCwgICh1aW50MzJfdCl0b0NvbXBhcmUsICh1aW50MzJfdCluZXdWYWx1ZSkgKTsKLSAgICAvLyB0aGUgYmVsb3cgY2FsbHMgYXJlIHRlbXBvcmFyaWx5IG1hZGUgdGlsbCB0aGUgYWJvdmUgZnVuY3Rpb25zIGFyZSBwYXJ0IG9mIHVzZXIgbGlicmFyeQotICAgIC8vIEN1cnJlbnRseSBpdHMgc3VwcG9ydGVkIG9ubHkgaW4gdGhlIGtlcm5lbCBtb2RlCi0KLSAgICBsb2NrTXV0ZXgoJmF0b21pY09wc011dGV4KTsKKyAgICBYTUxNdXRleExvY2sgbG9ja011dGV4KCZhdG9taWNPcHNNdXRleCk7CiAKICAgICB2b2lkICpyZXRWYWwgPSAqdG9GaWxsOwogICAgIGlmICgqdG9GaWxsID09IHRvQ29tcGFyZSkKLSAgICAgICAgICAgICAgKnRvRmlsbCA9ICh2b2lkICopbmV3VmFsdWU7Ci0KLSAgICB1bmxvY2tNdXRleCgmYXRvbWljT3BzTXV0ZXgpOworICAgICAgICAqdG9GaWxsID0gKHZvaWQgKiluZXdWYWx1ZTsKIAogICAgIHJldHVybiByZXRWYWw7CiB9CiAKIGludCBYTUxQbGF0Zm9ybVV0aWxzOjphdG9taWNJbmNyZW1lbnQoaW50ICZsb2NhdGlvbikKIHsKLSAgICAvL3JldHVybiAoaW50KWF0b21pY19hZGRfMzJfbnYoICh1aW50MzJfdCopJmxvY2F0aW9uLCAxKTsKICAgICBYTUxNdXRleExvY2sgbG9jYWxMb2NrKCZhdG9taWNPcHNNdXRleCk7CiAKICAgICByZXR1cm4gKytsb2NhdGlvbjsKQEAgLTY0MywxNCArNjM0LDQ5IEBACiAKIGludCBYTUxQbGF0Zm9ybVV0aWxzOjphdG9taWNEZWNyZW1lbnQoaW50ICZsb2NhdGlvbikKIHsKLSAgICAvL3JldHVybiAoaW50KWF0b21pY19hZGRfMzJfbnYoICh1aW50MzJfdCopJmxvY2F0aW9uLCAtMSk7CiAgICAgWE1MTXV0ZXhMb2NrIGxvY2FsTG9jaygmYXRvbWljT3BzTXV0ZXgpOwogCiAgICAgcmV0dXJuIC0tbG9jYXRpb247CiB9CiAKLUZpbGVIYW5kbGUgWE1MUGxhdGZvcm1VdGlsczo6b3BlblN0ZEluSGFuZGxlKCkKKyNlbHNlIC8vICNpZiAhZGVmaW5lZCAoQVBQX05PX1RIUkVBRFMpCisKK3ZvaWQqIFhNTFBsYXRmb3JtVXRpbHM6Om1ha2VNdXRleCgpCiB7Ci0gICAgICAgIHJldHVybiAoRmlsZUhhbmRsZSlmZG9wZW4oZHVwKDApLCAicmIiKTsKKyAgICAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6Y2xvc2VNdXRleCh2b2lkKiBjb25zdCBtdHhIYW5kbGUpCit7Cit9CisKK3ZvaWQgWE1MUGxhdGZvcm1VdGlsczo6bG9ja011dGV4KHZvaWQqIGNvbnN0IG10eEhhbmRsZSkKK3sKK30KKwordm9pZCBYTUxQbGF0Zm9ybVV0aWxzOjp1bmxvY2tNdXRleCh2b2lkKiBjb25zdCBtdHhIYW5kbGUpCit7Cit9CisKK3ZvaWQqIFhNTFBsYXRmb3JtVXRpbHM6OmNvbXBhcmVBbmRTd2FwICh2b2lkKiogICAgICAgICAgICAgdG9GaWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGNvbnN0ICBuZXdWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBjb25zdCAgdG9Db21wYXJlKQoreworICAgIHZvaWQgKnJldFZhbCA9ICp0b0ZpbGw7CisgICAgaWYgKCp0b0ZpbGwgPT0gdG9Db21wYXJlKQorICAgICAgICp0b0ZpbGwgPSAodm9pZCAqKW5ld1ZhbHVlOworICAgIHJldHVybiByZXRWYWw7Cit9CisKK2ludCBYTUxQbGF0Zm9ybVV0aWxzOjphdG9taWNJbmNyZW1lbnQoaW50ICZsb2NhdGlvbikKK3sKKyAgICByZXR1cm4gKytsb2NhdGlvbjsKK30KKworaW50IFhNTFBsYXRmb3JtVXRpbHM6OmF0b21pY0RlY3JlbWVudChpbnQgJmxvY2F0aW9uKQoreworICAgIHJldHVybiAtLWxvY2F0aW9uOworfQorCisjZW5kaWYgLy8gQVBQX05PX1RIUkVBRFMKKwpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvUGxhdGZvcm1zL01ha2VmaWxlLmluIGIvc3JjL3V0aWwvUGxhdGZvcm1zL01ha2VmaWxlLmluCmluZGV4IGQ0MjRhZDkuLjIyNDY5MmUgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL1BsYXRmb3Jtcy9NYWtlZmlsZS5pbgorKysgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvTWFrZWZpbGUuaW4KQEAgLTU1LDggKzU1LDE4IEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDY6MTQgIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuNCAgMTk5OS8xMi8wMSAxNzoxNjoxNyAgcmFodWxqCisjIEFkZGVkIHN1cHBvcnQgZm9yIElSSVggNi41LjUgdXNpbmcgU0dJIE1JUFNwcm8gQysrIDcuMyBhbmQgNy4yMSBnZW5lcmF0aW5nIDMyIGJpdCBvYmplY3RzLiBDaGFuZ2VzIHN1Ym1pdHRlZCBieSBNYXJjIFN0dWVzc2VsCisjCisjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8yMyAwMjowMDoyOCAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KK1JldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMTcgMjI6MzY6MzcgIHJhaHVsagorIyBDb2RlIHdvcmtzIHdpdGggSUNVIHRyYW5zY29kaW5nIHNlcnZpY2UKKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNjoxNCAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDU6MjggIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTY0LDcgKzc0LDggQEAKICMKIAogUExBVEZPUk0gPSBAcGxhdGZvcm1ACi1DT01QSUxFUiA9IEBjb21waWxlckAKK0NDICA9IEBjY0AKK0NYWCA9IEBjeHhACiBDWFhGTEFHUyA9IEBjeHhmbGFnc0AKIENGTEFHUyA9IEBjZmxhZ3NACiBQUkVGSVggPSBAcHJlZml4QApAQCAtOTEsNiArMTAyLDcgQEAKIGVuZGlmCiBpZmVxICgke1BMQVRGT1JNfSwgTElOVVgpCiAgICAgU1VCTU9EVUxFID0gUGxhdGZvcm1zL0xpbnV4CisgICAgQ1hYRkxBR1MgKz0gLURfX1VTRV9VTklYOTggLURfX1VTRV9HTlUKICAgICBDUFBfUFVCSEVBREVSUyA9IExpbnV4L0xpbnV4RGVmcy5ocHAKICAgICBDUFBfT0JKRUNUUyA9IExpbnV4L0xpbnV4UGxhdGZvcm1VdGlscy5vCiBlbmRpZgpAQCAtMTA0LDYgKzExNiwxMSBAQAogICAgIENQUF9QVUJIRUFERVJTID0gT1MzOTAvT1MzOTBEZWZzLmhwcAogICAgIENQUF9PQkpFQ1RTID0gT1MzOTAvT1MzOTBQbGF0Zm9ybVV0aWxzLm8KIGVuZGlmCitpZmVxICgke1BMQVRGT1JNfSwgSVJJWCkKKyAgICBTVUJNT0RVTEUgPSBQbGF0Zm9ybXMvSVJJWAorICAgIENQUF9QVUJIRUFERVJTID0gSVJJWC9JUklYRGVmcy5ocHAKKyAgICBDUFBfT0JKRUNUUyA9IElSSVgvSVJJWFBsYXRmb3JtVXRpbHMubworZW5kaWYKIAogaW5jbHVkZSAuLi9NYWtlZmlsZS51dGlsLnN1Ym1vZHVsZQogCmRpZmYgLS1naXQgYS9zcmMvdXRpbC9QbGF0Zm9ybXMvU29sYXJpcy9Tb2xhcmlzUGxhdGZvcm1VdGlscy5jcHAgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvU29sYXJpcy9Tb2xhcmlzUGxhdGZvcm1VdGlscy5jcHAKaW5kZXggODUxZTg1ZC4uZGU3MGZhMyAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvUGxhdGZvcm1zL1NvbGFyaXMvU29sYXJpc1BsYXRmb3JtVXRpbHMuY3BwCisrKyBiL3NyYy91dGlsL1BsYXRmb3Jtcy9Tb2xhcmlzL1NvbGFyaXNQbGF0Zm9ybVV0aWxzLmNwcApAQCAtNTYsOCArNTYsMTggQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA2OjMxICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMi8wMiAyMzowNzoxMyAgYXJ1bmExCisgKiBTb2xhcmlzIEF0b21pYyBNdXRleCBpbml0YWlsaXphdGlvbiBjaGFuZ2VkIHRvIG5hdGl2ZSBjYWxscworICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xOSAyMzo1MDo1NiAgYXJ1bmExCisgKiBhZGRlZCBjaGFuZ2VzIGZvciBwbGF0Zm9ybUluaXQgYW5kIG1ha2VUcmFuc1NlcnZpY2UgZnVuY3Rpb25zCisgKiBQUjoKKyAqIE9idGFpbmVkIGZyb206CisgKiBTdWJtaXR0ZWQgYnk6CisgKiBSZXZpZXdlZCBieToKKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA2OjMxICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuNCAgMTk5OS8xMS8wOCAyMDo0NTozMiAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTE0Nyw3ICsxNTcsOCBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgWE1MUGxhdGZvcm1VdGlsczogUGxhdGZvcm0gaW5pdCBtZXRob2QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3RhdGljIFhNTE11dGV4IGF0b21pY09wc011dGV4OworCitzdGF0aWMgbXV0ZXhfdCogZ0F0b21pY09wTXV0ZXggPTAgOwogCiB2b2lkIFhNTFBsYXRmb3JtVXRpbHM6OnBsYXRmb3JtSW5pdCgpCiB7CkBAIC0xNTYsNyArMTY3LDc4IEBACiAgICAgLy8gTm9ybWFsbHksIG11dGV4ZXMgYXJlIGNyZWF0ZWQgb24gZmlyc3QgdXNlLCBidXQgdGhlcmUgaXMgYQogICAgIC8vIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBjb21wYXJlQW5kRXhjaGFuZ2UoKSBhbmQKICAgICAvLyBtdXRleCBjcmVhdGlvbiB0aGF0IG11c3QgYmUgYnJva2VuLgotICAgIGF0b21pY09wc011dGV4LmZIYW5kbGUgPSBYTUxQbGF0Zm9ybVV0aWxzOjptYWtlTXV0ZXgoKTsKKyAgICBnQXRvbWljT3BNdXRleCA9IG5ldyBtdXRleF90OwkKKyAgICBpZiAobXV0ZXhfaW5pdChnQXRvbWljT3BNdXRleCwgTlVMTCwgTlVMTCkpCisgICAgeworCXByaW50ZigiYXRvbWljT3BNdXRleCBub3QgY3JlYXRlZCBcbiIpOworCWV4aXQoMSk7CisgICAgICAgIC8vcGFuaWMoIFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX011dGV4SW5pdCApOyAvL3RvIGJlIGNoYW5nZWQgbGF0ZXIKKyAgICB9CisKKyAgICAvLyBIZXJlIHlvdSB3b3VsZCBhbHNvIHNldCB0aGUgZmdMaWJMb2NhdGlvbiBnbG9iYWwgdmFyaWFibGUKKyAgICAvLyBYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uIGlzIHRoZSB2YXJpYWJsZSB0byBiZSBzZXQKKworICAgIHN0YXRpYyBjb25zdCBjaGFyICpzaGFyZWRMaWJFbnZWYXIgPSAiTERfTElCUkFSWV9QQVRIIjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqIGxpYnJhcnlQYXRoID0gMDsKKworICAgIGNoYXIgbGliTmFtZVsyNTZdOworCisgICAgLy8gQ29uc3RydWN0IHRoZSBsaWJyYXJ5IG5hbWUgZnJvbSB0aGUgZ2xvYmFsIHZhcmlhYmxlcworICAgIHN0cmNweShsaWJOYW1lLCBYTUw0Q19ETExOYW1lKTsKKyAgICBzdHJjYXQobGliTmFtZSwgZ1hNTDRDVmVyc2lvblN0cik7CisgICAgc3RyY2F0KGxpYk5hbWUsICIuc28iKTsKKworICAgIGNoYXIqIGxpYkVudlZhciA9IGdldGVudihzaGFyZWRMaWJFbnZWYXIpOworICAgIGNoYXIqIGxpYlBhdGggPSBOVUxMOworCisgICAgaWYgKGxpYkVudlZhciA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcGFuaWMoIFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX05vVHJhbnNTZXJ2aWNlICk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBJdHMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIGNvcHkgYmVjYXVzZSBzdHJ0b2soKSBtb2RpZmllcyB0aGUKKyAgICAvLyBzdHJpbmcgYXMgaXQgcmV0dXJucyB0b2tlbnMuIFdlIGRvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZSBzdHJpbmcKKyAgICAvLyByZXR1cm5lZCB0byBieSBnZXRlbnYoKS4KKworICAgIGxpYlBhdGggPSBuZXcgY2hhcltzdHJsZW4obGliRW52VmFyKSArIDFdOworICAgIHN0cmNweShsaWJQYXRoLCBsaWJFbnZWYXIpOworCisgICAgLy8gRmlyc3QgZG8gdGhlIHNlYXJjaGluZyBwcm9jZXNzIGZvciB0aGUgZmlyc3QgZGlyZWN0b3J5IGxpc3RpbmcKKyAgICBjaGFyKiAgYWxsUGF0aHMgPSBsaWJQYXRoOworICAgIGNoYXIqICBsaWJQYXRoTmFtZTsKKworICAgIHdoaWxlICgobGliUGF0aE5hbWUgPSBzdHJ0b2soYWxsUGF0aHMsICI6IikpICE9IE5VTEwpCisgICAgeworICAgICAgICBGSUxFKiAgZHVtbXlGcHRyID0gMDsKKyAgICAgICAgYWxsUGF0aHMgPSAwOworCisgICAgICAgIGNoYXIqIGxpYmZpbGUgPSBuZXcgY2hhcltzdHJsZW4obGliUGF0aE5hbWUpICsgc3RybGVuKGxpYk5hbWUpICsgMl07CisgICAgICAgIHN0cmNweShsaWJmaWxlLCBsaWJQYXRoTmFtZSk7CisgICAgICAgIHN0cmNhdChsaWJmaWxlLCAiLyIpOworICAgICAgICBzdHJjYXQobGliZmlsZSwgbGliTmFtZSk7CisKKyAgICAgICAgZHVtbXlGcHRyID0gKEZJTEUgKikgZm9wZW4obGliZmlsZSwgInJiIik7CisgICAgICAgIGRlbGV0ZSBbXSBsaWJmaWxlOworICAgICAgICBpZiAoZHVtbXlGcHRyICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZjbG9zZShkdW1teUZwdHIpOworICAgICAgICAgICAgbGlicmFyeVBhdGggPSBuZXcgY2hhcltzdHJsZW4obGliUGF0aE5hbWUpKzFdOworICAgICAgICAgICAgc3RyY3B5KChjaGFyICopIGxpYnJhcnlQYXRoLCBsaWJQYXRoTmFtZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgZGVsZXRlIGxpYlBhdGg7CisKKyAgICBYTUxQbGF0Zm9ybVV0aWxzOjpmZ0xpYkxvY2F0aW9uID0gbGlicmFyeVBhdGg7CisKKyAgICBpZiAoWE1MUGxhdGZvcm1VdGlsczo6ZmdMaWJMb2NhdGlvbiA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcGFuaWMoIFhNTFBsYXRmb3JtVXRpbHM6OlBhbmljX05vVHJhbnNTZXJ2aWNlICk7CisgICAgIH0KKwogfQogCiAKQEAgLTE5NywyMyArMjc5LDIyIEBACiAvLwogCiBYTUxUcmFuc1NlcnZpY2UqIFhNTFBsYXRmb3JtVXRpbHM6Om1ha2VUcmFuc1NlcnZpY2UoKQotewogCiAjaWYgZGVmaW5lZCAoWE1MX1VTRV9JQ1VfVFJBTlNDT0RFUikKK3sKICAgICAvLwotICAgIC8vICBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBhdGggdG8gdGhlIEludGwgY2xhc3Nlcy4gVGhleSB3aWxsIGJlCi0gICAgLy8gIGluIHRoZSAuL0ludGwgc3ViZGlyZWN0b3J5IHVuZGVyIHRoaXMgRExMLgorICAgIC8vICBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBhdGggdG8gdGhlIEludGwgY29udmVydGVyIGZpbGVzLgogICAgIC8vCiAKICAgICBzdGF0aWMgY29uc3QgY2hhciAqIHhtbDRjSW50bERpckVudlZhciA9ICJJQ1VfREFUQSI7Ci0gICAgY2hhciAqIGludGxQYXRoID0gMDsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqIHNoYXJlZExpYkVudlZhciAgICA9ICJMRF9MSUJSQVJZX1BBVEgiOworICAgIHN0YXRpYyBjb25zdCBjaGFyICogaW50bFBhdGggPSAwOwogCiAgICAgY2hhciogZW52VmFsID0gZ2V0ZW52KHhtbDRjSW50bERpckVudlZhcik7Ci0gICAgLy8KLSAgICAvLyBDaGVjayBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQKLSAgICAvLwotICAgIGlmIChlbnZWYWwgIT0gTlVMTCkgICAgICAgICAvLyBXZSBoYXZlIGZvdW5kIGFuIGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgLy9jaGVjayBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQKKyAgICBpZiAoZW52VmFsICE9IE5VTEwpIC8vIFdlIGhhdmUgZm91bmQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUKICAgICB7CisgICAgICAgIC8vIFN0b3JlIHRoaXMgc3RyaW5nIGluIHRoZSBzdGF0aWMgbWVtYmVyCiAgICAgICAgIHVuc2lnbmVkIGludCBwYXRoTGVuID0gc3RybGVuKGVudlZhbCk7CiAgICAgICAgIGludGxQYXRoID0gbmV3IGNoYXJbcGF0aExlbiArIDJdOwogCkBAIC0yMjQsODEgKzMwNSw4NiBAQAogICAgICAgICB9CiAKICAgICAgICAgSUNVVHJhbnNTZXJ2aWNlOjpzZXRJQ1VQYXRoKGludGxQYXRoKTsKLSAgICAgICAgaWYgKGludGxQYXRoICE9IE5VTEwpIGRlbGV0ZSBpbnRsUGF0aDsKKyAgICAgICAgaWYgKGludGxQYXRoICE9IE5VTEwpIGRlbGV0ZSAoY2hhciopaW50bFBhdGg7CiAKICAgICAgICAgcmV0dXJuIG5ldyBJQ1VUcmFuc1NlcnZpY2U7CiAgICAgfQogCi0gICAgLy8KKwogICAgIC8vICBJZiB3ZSBkaWQgbm90IGZpbmQgdGhlIGVudmlyb25tZW50IHZhciwgc28gbGV0cyB0cnkgdG8gZ28gdGhlIGF1dG8KICAgICAvLyAgc2VhcmNoIHJvdXRlLgogICAgIC8vCi0KICAgICBjaGFyIGxpYk5hbWVbMjU2XTsKICAgICBzdHJjcHkobGliTmFtZSwgWE1MNENfRExMTmFtZSk7CiAgICAgc3RyY2F0KGxpYk5hbWUsIGdYTUw0Q1ZlcnNpb25TdHIpOwogICAgIHN0cmNhdChsaWJOYW1lLCAiLnNvIik7CiAKLSAgICB2b2lkKiBoYW5kbGUgPSBOVUxMOwotICAgIGhhbmRsZSA9IGRsb3BlbihsaWJOYW1lLCBSVExEX0xBWlkpOwotICAgIGlmICghaGFuZGxlKQorICAgIGNoYXIqIGxpYkVudlZhciA9IGdldGVudihzaGFyZWRMaWJFbnZWYXIpOworICAgIGNoYXIqIGxpYlBhdGggPSBOVUxMOworCisgICAgaWYgKGxpYkVudlZhciA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgY2hhciBlcnJvckJ1ZmZlclsxMDI0XTsKLSAgICAgICAgc3ByaW50ZihlcnJvckJ1ZmZlciwKLSAgICAgICAgICAgICAgICAiRmF0YWwgZXJyb3I6IENvdWxkIG5vdCBvcGVuIGxpYnJhcnkgJyVzJyIsIGxpYk5hbWUpOwotICAgICAgICBwZXJyb3IgKGVycm9yQnVmZmVyKTsKLSAgICAgICAgcGFuaWMoWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfTm9UcmFuc1NlcnZpY2UpOworICAgICAgICBwYW5pYyggWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfTm9UcmFuc1NlcnZpY2UgKTsKICAgICB9CiAKLSAgICBpbnQgICAgICAgcmV0ID0gMDsKLSAgICBMaW5rX21hcCAqZmlyc3RMaWIgICA9IE5VTEw7CisgICAgLy8KKyAgICAvLyBJdHMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIGNvcHkgYmVjYXVzZSBzdHJ0b2soKSBtb2RpZmllcyB0aGUKKyAgICAvLyBzdHJpbmcgYXMgaXQgcmV0dXJucyB0b2tlbnMuIFdlIGRvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZSBzdHJpbmcKKyAgICAvLyByZXR1cm5lZCB0byBieSBnZXRlbnYoKS4KKyAgICAvLwogCi0gICAgcmV0ID0gZGxpbmZvKGhhbmRsZSwgUlRMRF9ESV9MSU5LTUFQLCAodm9pZCopICZmaXJzdExpYik7Ci0gICAgTGlua19tYXAqIG5leHRMaWIgPSBOVUxMOwotICAgIG5leHRMaWIgPSBmaXJzdExpYjsKKyAgICBsaWJQYXRoID0gbmV3IGNoYXJbc3RybGVuKGxpYkVudlZhcikgKyAxXTsKKyAgICBzdHJjcHkobGliUGF0aCwgbGliRW52VmFyKTsKIAotICAgIHdoaWxlIChuZXh0TGliKQorICAgIC8vIEZpcnN0IGRvIHRoZSBzZWFyY2hpbmcgcHJvY2VzcyBmb3IgdGhlIGZpcnN0IGRpcmVjdG9yeSBsaXN0aW5nCisgICAgY2hhciogIGFsbFBhdGhzID0gbGliUGF0aDsKKyAgICBjaGFyKiAgbGliUGF0aE5hbWU7CisKKyAgICB3aGlsZSAoKGxpYlBhdGhOYW1lID0gc3RydG9rKGFsbFBhdGhzLCAiOiIpKSAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgY2hhciogZmlsZU5hbWUgPSBuZXh0TGliLT5sX25hbWU7Ci0gICAgICAgIGlmIChzdHJzdHIoZmlsZU5hbWUsIGxpYk5hbWUpICE9IE5VTEwpCisgICAgICAgIEZJTEUqICBkdW1teUZwdHIgPSAwOworICAgICAgICBhbGxQYXRocyA9IDA7CisKKyAgICAgICAgY2hhciogbGliZmlsZSA9IG5ldyBjaGFyW3N0cmxlbihsaWJQYXRoTmFtZSkgKyBzdHJsZW4obGliTmFtZSkgKyAyXTsKKyAgICAgICAgc3RyY3B5KGxpYmZpbGUsIGxpYlBhdGhOYW1lKTsKKyAgICAgICAgc3RyY2F0KGxpYmZpbGUsICIvIik7CisgICAgICAgIHN0cmNhdChsaWJmaWxlLCBsaWJOYW1lKTsKKworICAgICAgICBkdW1teUZwdHIgPSAoRklMRSAqKSBmb3BlbihsaWJmaWxlLCAicmIiKTsKKyAgICAgICAgZGVsZXRlIFtdIGxpYmZpbGU7CisgICAgICAgIGlmIChkdW1teUZwdHIgIT0gTlVMTCkKICAgICAgICAgewotICAgICAgICAgICAgY2hhciogY29weVRvID0gc3RycmNocihmaWxlTmFtZSwgJy8nKTsKLSAgICAgICAgICAgIHNpemVfdCBjaGFyc190b19leHRyYWN0ID0gY29weVRvIC0gZmlsZU5hbWU7Ci0gICAgICAgICAgICBjaGFyICpsaWJQYXRoTmFtZSA9IG5ldyBjaGFyW2NoYXJzX3RvX2V4dHJhY3QgKyAxXTsKLSAgICAgICAgICAgIHN0cm5jcHkobGliUGF0aE5hbWUsIGZpbGVOYW1lLCBjaGFyc190b19leHRyYWN0KTsKLSAgICAgICAgICAgIGxpYlBhdGhOYW1lW2NoYXJzX3RvX2V4dHJhY3RdID0gMDsKLSAgICAgICAgICAgIGZnSW50bFBhdGggPSBuZXcgY2hhcltzdHJsZW4obGliUGF0aE5hbWUpKyBzdHJsZW4oIi9pY3UvZGF0YS8iKSsxXTsKLSAgICAgICAgICAgIHN0cmNweSgoY2hhciAqKSBmZ0ludGxQYXRoLCBsaWJQYXRoTmFtZSk7Ci0gICAgICAgICAgICBzdHJjYXQoKGNoYXIgKikgZmdJbnRsUGF0aCwgIi9pY3UvZGF0YS8iKTsKLSAgICAgICAgICAgIGRlbGV0ZSBsaWJQYXRoTmFtZTsKKyAgICAgICAgICAgIGZjbG9zZShkdW1teUZwdHIpOworICAgICAgICAgICAgaW50bFBhdGggPSBuZXcgY2hhcltzdHJsZW4obGliUGF0aE5hbWUpKyBzdHJsZW4oIi9pY3UvZGF0YS8iKSsxXTsKKyAgICAgICAgICAgIHN0cmNweSgoY2hhciAqKSBpbnRsUGF0aCwgbGliUGF0aE5hbWUpOworICAgICAgICAgICAgc3RyY2F0KChjaGFyICopIGludGxQYXRoLCAiL2ljdS9kYXRhLyIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgbmV4dExpYiA9IG5leHRMaWItPmxfbmV4dDsKLSAgICB9CiAKLSAgICBpZiAoZmdJbnRsUGF0aCA9PSBOVUxMKQorICAgIH0gLy8gd2hpbGUKKworICAgIGRlbGV0ZSBsaWJQYXRoOworCisgICAgSUNVVHJhbnNTZXJ2aWNlOjpzZXRJQ1VQYXRoKGludGxQYXRoKTsKKworICAgIGlmIChpbnRsUGF0aCA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgIkZhdGFsIGVycm9yOiBDb3VsZCBub3QgZmluZCAvaWN1L2RhdGEgcmVsYXRpdmUgdG8gJXMgXG4iLAotICAgICAgICAgICAgICAgIGxpYk5hbWUpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgCi0gICAgICAgICAgICAgICAgIiAgICAgICAgICAgICB3aGlsZSB0cnlpbmcgdG8gYXV0byBkZXRlY3QgdGhlIGxvY2F0aW9uICIpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9mIHRoZSBjb252ZXJ0ZXIgZmlsZXMuXG4iKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgIiAgICAgICAgICAgICBBbmQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICdJQ1VfREFUQScgaXMgIik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibm90IGRlZmluZWQuXG4iKTsKLSAgICAgICAgcGFuaWMoWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfTm9UcmFuc1NlcnZpY2UpOworICAgICAgICBwYW5pYyggWE1MUGxhdGZvcm1VdGlsczo6UGFuaWNfTm9UcmFuc1NlcnZpY2UgKTsKICAgICB9CisgICAgaWYgKGludGxQYXRoICE9IE5VTEwpIGRlbGV0ZSAoY2hhciopaW50bFBhdGg7CiAKLSAgICBJQ1VUcmFuc1NlcnZpY2U6OnNldElDVVBhdGgoZmdJbnRsUGF0aCk7CiAgICAgcmV0dXJuIG5ldyBJQ1VUcmFuc1NlcnZpY2U7Ci0KK30KKyNlbGlmIGRlZmluZWQgKFhNTF9VU0VfSUNPTlZfVFJBTlNDT0RFUikKK3sKKyAgICByZXR1cm4gbmV3IEljb252VHJhbnNTZXJ2aWNlOworfQogI2Vsc2UgLy8gVXNlIE5hdGl2ZSB0cmFuc2NvZGluZyBzZXJ2aWNlCi0KK3sKICAgICByZXR1cm4gbmV3IEljb252VHJhbnNTZXJ2aWNlOwogCi0jZW5kaWYKIH0KKyNlbmRpZgogCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTY0LDEzICs2NTAsMjMgQEAKICAgICAvLyB0aGUgYmVsb3cgY2FsbHMgYXJlIHRlbXBvcmFyaWx5IG1hZGUgdGlsbCB0aGUgYWJvdmUgZnVuY3Rpb25zIGFyZSBwYXJ0IG9mIHVzZXIgbGlicmFyeQogICAgIC8vIEN1cnJlbnRseSBpdHMgc3VwcG9ydGVkIG9ubHkgaW4gdGhlIGtlcm5lbCBtb2RlCiAKLSAgICBsb2NrTXV0ZXgoJmF0b21pY09wc011dGV4KTsKKyAgICBpZiAobXV0ZXhfbG9jayggZ0F0b21pY09wTXV0ZXgpKQorICAgIHsKKwlwcmludGYoImNvdWxkIG5vdCBsb2NrIGF0b21pY09wTXV0ZXhcbiIpOworCWV4aXQoMSk7CisJLy9jYWxsIHBhbmljIGluc3RlYWQKKyAgICB9CiAKICAgICB2b2lkICpyZXRWYWwgPSAqdG9GaWxsOwogICAgIGlmICgqdG9GaWxsID09IHRvQ29tcGFyZSkKICAgICAgICAgICAgICAgKnRvRmlsbCA9ICh2b2lkICopbmV3VmFsdWU7CiAKLSAgICB1bmxvY2tNdXRleCgmYXRvbWljT3BzTXV0ZXgpOworICAgIGlmIChtdXRleF91bmxvY2soIGdBdG9taWNPcE11dGV4KSkKKyAgICB7CisJcHJpbnRmKCJjb3VsZCBub3QgdW5sb2NrIGF0b21pY09wTXV0ZXhcbiIpOworCWV4aXQoMSk7CisJLy9jYWxsIHBhbmljIGluc3RlYWQKKyAgICB9CiAKICAgICByZXR1cm4gcmV0VmFsOwogfQpAQCAtNTc4LDE2ICs2NzQsNDEgQEAKIGludCBYTUxQbGF0Zm9ybVV0aWxzOjphdG9taWNJbmNyZW1lbnQoaW50ICZsb2NhdGlvbikKIHsKICAgICAvL3JldHVybiAoaW50KWF0b21pY19hZGRfMzJfbnYoICh1aW50MzJfdCopJmxvY2F0aW9uLCAxKTsKLSAgICBYTUxNdXRleExvY2sgbG9jYWxMb2NrKCZhdG9taWNPcHNNdXRleCk7CiAKLSAgICByZXR1cm4gKytsb2NhdGlvbjsKKyAgICBpZiAobXV0ZXhfbG9jayggZ0F0b21pY09wTXV0ZXgpKQorICAgIHsKKwlwcmludGYoImNvdWxkIG5vdCBsb2NrIGF0b21pY09wTXV0ZXhcbiIpOworCWV4aXQoMSk7CisJLy9jYWxsIHBhbmljIGluc3RlYWQKKyAgICB9CisgICAgaW50IHRtcCA9ICsrbG9jYXRpb247CisgICAgaWYgKG11dGV4X3VubG9jayggZ0F0b21pY09wTXV0ZXgpKQorICAgIHsKKwlwcmludGYoImNvdWxkIG5vdCB1bmxvY2sgYXRvbWljT3BNdXRleFxuIik7CisJZXhpdCgxKTsKKwkvL2NhbGwgcGFuaWMgaW5zdGVhZAorICAgIH0KKyAgICByZXR1cm4gdG1wOwogfQogaW50IFhNTFBsYXRmb3JtVXRpbHM6OmF0b21pY0RlY3JlbWVudChpbnQgJmxvY2F0aW9uKQogewogICAgIC8vcmV0dXJuIChpbnQpYXRvbWljX2FkZF8zMl9udiggKHVpbnQzMl90KikmbG9jYXRpb24sIC0xKTsKLSAgICBYTUxNdXRleExvY2sgbG9jYWxMb2NrKCZhdG9taWNPcHNNdXRleCk7CiAKLSAgICByZXR1cm4gLS1sb2NhdGlvbjsKKyAgICBpZiAobXV0ZXhfbG9jayggZ0F0b21pY09wTXV0ZXgpKQorICAgIHsKKwlwcmludGYoImNvdWxkIG5vdCBsb2NrIGF0b21pY09wTXV0ZXhcbiIpOworCWV4aXQoMSk7CisJLy9jYWxsIHBhbmljIGluc3RlYWQKKyAgICB9CisJCisgICAgaW50IHRtcCA9IC0tbG9jYXRpb247CisgICAgaWYgKG11dGV4X3VubG9jayggZ0F0b21pY09wTXV0ZXgpKQorICAgIHsKKwlwcmludGYoImNvdWxkIG5vdCB1bmxvY2sgYXRvbWljT3BNdXRleFxuIik7CisJZXhpdCgxKTsKKwkvL2NhbGwgcGFuaWMgaW5zdGVhZAorICAgIH0KKyAgICByZXR1cm4gdG1wOwogfQogCiAjZWxzZSAvLyAjaWYgIWRlZmluZWQgKEFQUF9OT19USFJFQURTKQpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvUGxhdGZvcm1zL1dpbjMyL1ZlcnNpb24ucmMgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvV2luMzIvVmVyc2lvbi5yYwppbmRleCA2OTU5ZWExLi45OGE0ZjVkIDEwMDY0NAotLS0gYS9zcmMvdXRpbC9QbGF0Zm9ybXMvV2luMzIvVmVyc2lvbi5yYworKysgYi9zcmMvdXRpbC9QbGF0Zm9ybXMvV2luMzIvVmVyc2lvbi5yYwpAQCAtMjksOCArMjksOCBAQAogLy8KIAogVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCi0gRklMRVZFUlNJT04gMywwLDAsMAotIFBST0RVQ1RWRVJTSU9OIDMsMCwwLDAKKyBGSUxFVkVSU0lPTiAxLDAsMCwwCisgUFJPRFVDVFZFUlNJT04gMSwwLDAsMAogIEZJTEVGTEFHU01BU0sgMHgzZkwKICNpZmRlZiBfREVCVUcKICBGSUxFRkxBR1MgMHgxTApAQCAtNDUsMTcgKzQ1LDE3IEBACiAgICAgQkVHSU4KICAgICAgICAgQkxPQ0sgIjA0MDkwNGIwIgogICAgICAgICBCRUdJTgotICAgICAgICAgICAgVkFMVUUgIkNvbW1lbnRzIiwgIkR5bmFtaWMgbGlua2VkIGxpYnJhcnkgZm9yIFhNTDRDMlwwIgotICAgICAgICAgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgIkludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC5cMCIKLSAgICAgICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiU2hhcmVkIExpYnJhcnkgZm9yIFhNTDRDIFZlcnNpb24gMy4wLjBcMCIKLSAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICIzLCAwLCAwLCAwXDAiCi0gICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgIklYWE1MNEMzXzBfMFwwIgotICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCCpIElCTSBDb3JwLiAxOTk5IHN1YmplY3QgdG8gbGljZW5zaW5nIHRlcm1zXDAiCisgICAgICAgICAgICBWQUxVRSAiQ29tbWVudHMiLCAiRHluYW1pYyBsaW5rZWQgbGlicmFyeSBmb3IgWGVyY2VzLUNcMCIKKyAgICAgICAgICAgIFZBTFVFICJDb21wYW55TmFtZSIsICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvblwwIgorICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJTaGFyZWQgTGlicmFyeSBmb3IgWGVyY2VzLUMgVmVyc2lvbiAxLjAuMFwwIgorICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgIjEsIDAsIDAsIDBcMCIKKyAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAieGVyY2VzLWNfMV8wXzAuZGxsXDAiCisgICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IKkgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gMTk5OSBzdWJqZWN0IHRvIGxpY2Vuc2luZyB0ZXJtc1wwIgogICAgICAgICAgICAgVkFMVUUgIkxlZ2FsVHJhZGVtYXJrcyIsICJcMCIKLSAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgIklYWE1MNEMzXzAuZGxsXDAiCisgICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJ4ZXJjZXMtY18xXzAuZGxsXDAiCiAgICAgICAgICAgICBWQUxVRSAiUHJpdmF0ZUJ1aWxkIiwgIlwwIgotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlhNTDRDIFZlcnNpb24gMy4wLjBcMCIKLSAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsICIzLCAwLCAwLCAwXDAiCisgICAgICAgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAiWGVyY2VzLUMgVmVyc2lvbiAxLjAuMFwwIgorICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIjEsIDAsIDAsIDBcMCIKICAgICAgICAgICAgIFZBTFVFICJTcGVjaWFsQnVpbGQiLCAiXDAiCiAgICAgICAgIEVORAogICAgIEVORApAQCAtOTksMjQ5ICs5OSwzMjAgQEAKIC8vCiAvLyBTdHJpbmcgVGFibGUKIC8vCi1TVFJJTkdUQUJMRSBESVNDQVJEQUJMRQorCitTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSAKIEJFR0lOCi0gICAgMiAgICAgICAgICAgICAgICAgTCJceDAwNEVceDAwNkZceDAwNzRceDAwNjFceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwMjBceDAwNjhceDAwNjFceDAwNzNceDAwMjBceDAwNjFceDAwNkNceDAwNzJceDAwNjVceDAwNjFceDAwNjRceDAwNzlceDAwMjBceDAwNjJceDAwNjVceDAwNjVceDAwNkVceDAwMjBceDAwNjRceDAwNjVceDAwNjNceDAwNkNceDAwNjFceDAwNzJceDAwNjVceDAwNjRceDAwIgotICAgIDMgICAgICAgICAgICAgICAgIEwiXHgwMDQxXHgwMDc0XHgwMDc0XHgwMDcyXHgwMDY5XHgwMDYyXHgwMDc1XHgwMDc0XHgwMDY1XHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMwXHgwMDdEXHgwMDI3XHgwMDIwXHgwMDY4XHgwMDYxXHgwMDczXHgwMDIwXHgwMDYxXHgwMDZDXHgwMDcyXHgwMDY1XHgwMDYxXHgwMDY0XHgwMDc5XHgwMDIwXHgwMDYyXHgwMDY1XHgwMDY1XHgwMDZFXHgwMDIwXHgwMDY0XHgwMDY1XHgwMDYzXHgwMDZDXHgwMDYxXHgwMDcyXHgwMDY1XHgwMDY0XHgwMCIKLSAgICA0ICAgICAgICAgICAgICAgICBMIlx4MDA0NVx4MDA2RVx4MDA2M1x4MDA2Rlx4MDA2NFx4MDA2OVx4MDA2RVx4MDA2N1x4MDAyMFx4MDAyOFx4MDA3Qlx4MDAzMFx4MDA3RFx4MDAyQ1x4MDAyMFx4MDA2Nlx4MDA3Mlx4MDA2Rlx4MDA2RFx4MDAyMFx4MDA1OFx4MDA0RFx4MDA0Q1x4MDA0NFx4MDA2NVx4MDA2M1x4MDA2Q1x4MDAyMFx4MDA2Rlx4MDA3Mlx4MDAyMFx4MDA2RFx4MDA2MVx4MDA2RVx4MDA3NVx4MDA2MVx4MDA2Q1x4MDA2Q1x4MDA3OVx4MDAyMFx4MDA3M1x4MDA2NVx4MDA3NFx4MDAyOVx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RVx4MDA3NFx4MDA3Mlx4MDA2MVx4MDA2NFx4MDA2OVx4MDA2M1x4MDA3NFx4MDA3M1x4MDAyMFx4MDA3NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2MVx4MDA3NVx4MDA3NFx4MDA2Rlx4MDAyRFx4MDA3M1x4MDA2NVx4MDA2RVx4MDA3M1x4MDA2NVx4MDA2NFx4MDAyMFx4MDA2NVx4MDA2RVx4MDA2M1x4MDA2Rlx4MDA2NFx4MDA2OVx4MDA2RVx4MDA2N1x4MDAyQ1x4MDAyMFx4MDA2OVx4MDA2N1x4MDA2RVx4MDA2Rlx4MDA3Mlx4MDA2OVx4MDA2RVx4MDA2N1x4MDAyMFx4MDA2OVx4MDA3NFx4MDAiCi0gICAgNSAgICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNkNceDAwNjVceDAwNkRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwMjBceDAwNzdceDAwNjFceDAwNzNceDAwMjBceDAwNzJceDAwNjVceDAwNjZceDAwNjVceDAwNzJceDAwNjVceDAwNkVceDAwNjNceDAwNjVceDAwNjRceDAwMjBceDAwNjlceDAwNkVceDAwMjBceDAwNjFceDAwMjBceDAwNjNceDAwNkZceDAwNkVceDAwNzRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwNkRceDAwNkZceDAwNjRceDAwNjVceDAwNkNceDAwMjBceDAwNjJceDAwNzVceDAwNzRceDAwMjBceDAwNkVceDAwNjVceDAwNzZceDAwNjVceDAwNzJceDAwMjBceDAwNjRceDAwNjVceDAwNjNceDAwNkNceDAwNjFceDAwNzJceDAwNjVceDAwNjRceDAwIgotICAgIDYgICAgICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMwXHgwMDdEXHgwMDI3XHgwMDIwXHgwMDc3XHgwMDYxXHgwMDczXHgwMDIwXHgwMDcyXHgwMDY1XHgwMDY2XHgwMDY1XHgwMDcyXHgwMDY1XHgwMDZFXHgwMDYzXHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY5XHgwMDZFXHgwMDIwXHgwMDYxXHgwMDZFXHgwMDIwXHgwMDYxXHgwMDc0XHgwMDc0XHgwMDZDXHgwMDY5XHgwMDczXHgwMDc0XHgwMDIwXHgwMDYyXHgwMDc1XHgwMDc0XHgwMDIwXHgwMDZFXHgwMDY1XHgwMDc2XHgwMDY1XHgwMDcyXHgwMDIwXHgwMDY0XHgwMDY1XHgwMDYzXHgwMDZDXHgwMDYxXHgwMDcyXHgwMDY1XHgwMDY0XHgwMCIKLSAgICA5ICAgICAgICAgICAgICAgICBMIlx4MDA0NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RFx4MDA2RFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDA2Rlx4MDA3Mlx4MDAyMFx4MDA0M1x4MDA0NFx4MDA0MVx4MDA1NFx4MDA0MVx4MDAiCi0gICAgMTAgICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNjFceDAwNkVceDAwMjBceDAwNjFceDAwNzRceDAwNzRceDAwNzJceDAwNjlceDAwNjJceDAwNzVceDAwNzRceDAwNjVceDAwMjBceDAwNkVceDAwNjFceDAwNkRceDAwNjVceDAwIgotICAgIDExICAgICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDYxXHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDYxXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMDIwXHgwMDZFXHgwMDYxXHgwMDZEXHgwMDY1XHgwMCIKLSAgICAxMiAgICAgICAgICAgICAgICBMIlx4MDA1Mlx4MDA2NVx4MDA3MFx4MDA2NVx4MDA3NFx4MDA2OVx4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA2OVx4MDA2RVx4MDA2NFx4MDA2OVx4MDA3Nlx4MDA2OVx4MDA2NFx4MDA3NVx4MDA2MVx4MDA2Q1x4MDAyMFx4MDA2NVx4MDA2Q1x4MDA2NVx4MDA2RFx4MDA2NVx4MDA2RVx4MDA3NFx4MDA3M1x4MDAyMFx4MDA2OVx4MDA3M1x4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2Q1x4MDA2NVx4MDA2N1x4MDA2MVx4MDA2Q1x4MDAyMFx4MDA2Nlx4MDA2Rlx4MDA3Mlx4MDAyMFx4MDA2RFx4MDA2OVx4MDA3OFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RVx4MDA3NFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDA2RFx4MDA2Rlx4MDA2NFx4MDA2NVx4MDA2Q1x4MDA3M1x4MDAiCi0gICAgMTMgICAgICAgICAgICAgICAgTCJceDAwNDJceDAwNjFceDAwNjRceDAwMjBceDAwNjRceDAwNjVceDAwNjZceDAwNjFceDAwNzVceDAwNkNceDAwNzRceDAwMjBceDAwNjFceDAwNzRceDAwNzRceDAwNzJceDAwNjlceDAwNjJceDAwNzVceDAwNzRceDAwNjVceDAwMjBceDAwNjRceDAwNjVceDAwNjNceDAwNkNceDAwNjFceDAwNzJceDAwNjFceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwIgotICAgIDE0ICAgICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY0XHgwMDY1XHgwMDY2XHgwMDYxXHgwMDc1XHgwMDZDXHgwMDc0XHgwMDIwXHgwMDYxXHgwMDc0XHgwMDc0XHgwMDcyXHgwMDY5XHgwMDYyXHgwMDc1XHgwMDc0XHgwMDY1XHgwMDIwXHgwMDY0XHgwMDY1XHgwMDYzXHgwMDZDXHgwMDYxXHgwMDcyXHgwMDYxXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMDJDXHgwMDIwXHgwMDYxXHgwMDczXHgwMDczXHgwMDc1XHgwMDZEXHgwMDY5XHgwMDZFXHgwMDY3XHgwMDIwXHgwMDIzXHgwMDQ5XHgwMDREXHgwMDUwXHgwMDRDXHgwMDQ5XHgwMDQ1XHgwMDQ0XHgwMDIwXHgwMDIwXHgwMCIKLSAgICAxNSAgICAgICAgICAgICAgICBMIlx4MDA0MVx4MDA3NFx4MDA3NFx4MDA3Mlx4MDA2OVx4MDA2Mlx4MDA3NVx4MDA3NFx4MDA2NVx4MDAyMFx4MDA2Q1x4MDA2OVx4MDA3M1x4MDA3NFx4MDAyMFx4MDA3M1x4MDA3OVx4MDA2RVx4MDA3NFx4MDA2MVx4MDA3OFx4MDAyMFx4MDA2NVx4MDA3Mlx4MDA3Mlx4MDA2Rlx4MDA3Mlx4MDAiCi0gICAgMTYgICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNjVceDAwNzFceDAwNzVceDAwNjFceDAwNkNceDAwMjBceDAwNzNceDAwNjlceDAwNjdceDAwNkVceDAwIgotICAgIDE3ICAgICAgICAgICAgICAgIEwiXHgwMDQ0XHgwMDc1XHgwMDcwXHgwMDZDXHgwMDY5XHgwMDYzXHgwMDYxXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMDIwXHgwMDYxXHgwMDc0XHgwMDc0XHgwMDcyXHgwMDY5XHgwMDYyXHgwMDc1XHgwMDc0XHgwMDY1XHgwMDIwXHgwMDZFXHgwMDYxXHgwMDZEXHgwMDY1XHgwMCIKLSAgICAxOCAgICAgICAgICAgICAgICBMIlx4MDA0Mlx4MDA2MVx4MDA2NFx4MDAyMFx4MDA0OVx4MDA0NFx4MDAyMFx4MDA2Nlx4MDA2Rlx4MDA3Mlx4MDAyMFx4MDA3OFx4MDA2RFx4MDA2Q1x4MDAzQVx4MDA2Q1x4MDA2MVx4MDA2RVx4MDA2N1x4MDAyMFx4MDA2MVx4MDA3NFx4MDA3NFx4MDA3Mlx4MDA2OVx4MDA2Mlx4MDA3NVx4MDA3NFx4MDA2NVx4MDAiCi0gICAgMTkgICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNjFceDAwNkVceDAwMjBceDAwNjVceDAwNkNceDAwNjVceDAwNkRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwNkVceDAwNjFceDAwNkRceDAwNjVceDAwIgotICAgIDIwICAgICAgICAgICAgICAgIEwiXHgwMDREXHgwMDc1XHgwMDczXHgwMDc0XHgwMDIwXHgwMDczXHgwMDc0XHgwMDYxXHgwMDcyXHgwMDc0XHgwMDIwXHgwMDc3XHgwMDY5XHgwMDc0XHgwMDY4XHgwMDIwXHgwMDYxXHgwMDZFXHgwMDIwXHgwMDU4XHgwMDREXHgwMDRDXHgwMDQ0XHgwMDY1XHgwMDYzXHgwMDZDXHgwMCIKLSAgICAyMSAgICAgICAgICAgICAgICBMIlx4MDA0M1x4MDA2Rlx4MDA2RFx4MDA2RFx4MDA2NVx4MDA2RVx4MDA3NFx4MDA3M1x4MDAyMFx4MDA2RFx4MDA3NVx4MDA3M1x4MDA3NFx4MDAyMFx4MDA3M1x4MDA3NFx4MDA2MVx4MDA3Mlx4MDA3NFx4MDAyMFx4MDA3N1x4MDA2OVx4MDA3NFx4MDA2OFx4MDAyMFx4MDAzQ1x4MDAyMVx4MDAyRFx4MDAyRFx4MDAiCi0gICAgMjIgICAgICAgICAgICAgICAgTCJceDAwNDlceDAwNkVceDAwNzZceDAwNjFceDAwNkNceDAwNjlceDAwNjRceDAwMjBceDAwNjRceDAwNkZceDAwNjNceDAwNzVceDAwNkRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwNzNceDAwNzRceDAwNzJceDAwNzVceDAwNjNceDAwNzRceDAwNzVceDAwNzJceDAwNjVceDAwIgotICAgIDIzICAgICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDYxXHgwMDIwXHgwMDI3XHgwMDc2XHgwMDY1XHgwMDcyXHgwMDczXHgwMDY5XHgwMDZGXHgwMDZFXHgwMDNEXHgwMDI3XHgwMDJDXHgwMDIwXHgwMDI3XHgwMDY1XHgwMDZFXHgwMDYzXHgwMDZGXHgwMDY0XHgwMDY5XHgwMDZFXHgwMDY3XHgwMDNEXHgwMDI3XHgwMDJDXHgwMDIwXHgwMDZGXHgwMDcyXHgwMDIwXHgwMDI3XHgwMDczXHgwMDc0XHgwMDYxXHgwMDZFXHgwMDY0XHgwMDYxXHgwMDZDXHgwMDZGXHgwMDZFXHgwMDY1XHgwMDNEXHgwMDI3XHgwMCIKLSAgICAyNCAgICAgICAgICAgICAgICBMIlx4MDA0Mlx4MDA2MVx4MDA2NFx4MDAyMFx4MDA1OFx4MDA0RFx4MDA0Q1x4MDAyMFx4MDA3Nlx4MDA2NVx4MDA3Mlx4MDA3M1x4MDA2OVx4MDA2Rlx4MDA2RVx4MDAyMFx4MDA3M1x4MDA3NFx4MDA3Mlx4MDA2OVx4MDA2RVx4MDA2N1x4MDAiCi0gICAgMjUgICAgICAgICAgICAgICAgTCJceDAwNTVceDAwNkVceDAwNzNceDAwNzVceDAwNzBceDAwNzBceDAwNkZceDAwNzJceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNThceDAwNERceDAwNENceDAwMjBceDAwNzZceDAwNjVceDAwNzJceDAwNzNceDAwNjlceDAwNkZceDAwNkVceDAwIgotICAgIDI2ICAgICAgICAgICAgICAgIEwiXHgwMDU1XHgwMDZFXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDZEXHgwMDY5XHgwMDZFXHgwMDYxXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDU4XHgwMDREXHgwMDRDXHgwMDIwXHgwMDY0XHgwMDY1XHgwMDYzXHgwMDZDXHgwMCIKLSAgICAyNyAgICAgICAgICAgICAgICBMIlx4MDA0Mlx4MDA2MVx4MDA2NFx4MDAyMFx4MDA1OFx4MDA0RFx4MDA0Q1x4MDAyMFx4MDA2NVx4MDA2RVx4MDA2M1x4MDA2Rlx4MDA2NFx4MDA2OVx4MDA2RVx4MDA2N1x4MDAyMFx4MDA2NFx4MDA2NVx4MDA2M1x4MDA2Q1x4MDA2MVx4MDA3Mlx4MDA2MVx4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDAiCi0gICAgMjggICAgICAgICAgICAgICAgTCJceDAwNDJceDAwNjFceDAwNjRceDAwMjBceDAwNzNceDAwNzRceDAwNjFceDAwNkVceDAwNjRceDAwNjFceDAwNkNceDAwNkZceDAwNkVceDAwNjVceDAwMjBceDAwNjRceDAwNjVceDAwNjNceDAwNkNceDAwNjFceDAwNzJceDAwNjFceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwIgotICAgIDI5ICAgICAgICAgICAgICAgIEwiXHgwMDU1XHgwMDZFXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDZEXHgwMDY5XHgwMDZFXHgwMDYxXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDYzXHgwMDZGXHgwMDZEXHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMCIKLSAgICAzMCAgICAgICAgICAgICAgICBMIlx4MDA1MFx4MDA3Mlx4MDA2Rlx4MDA2M1x4MDA2NVx4MDA3M1x4MDA3M1x4MDA2OVx4MDA2RVx4MDA2N1x4MDAyMFx4MDA2OVx4MDA2RVx4MDA3M1x4MDA3NFx4MDA3Mlx4MDA3NVx4MDA2M1x4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDAyMFx4MDA2RVx4MDA2MVx4MDA2RFx4MDA2NVx4MDAyMFx4MDA2NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAiCi0gICAgMzEgICAgICAgICAgICAgICAgTCJceDAwNTVceDAwNkVceDAwNzRceDAwNjVceDAwNzJceDAwNkRceDAwNjlceDAwNkVceDAwNjFceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNzBceDAwNzJceDAwNkZceDAwNjNceDAwNjVceDAwNzNceDAwNzNceDAwNjlceDAwNkVceDAwNjdceDAwMjBceDAwNjlceDAwNkVceDAwNzNceDAwNzRceDAwNzJceDAwNzVceDAwNjNceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwIgotICAgIDMyICAgICAgICAgICAgICAgIEwiXHgwMDQ5XHgwMDZFXHgwMDc2XHgwMDYxXHgwMDZDXHgwMDY5XHgwMDY0XHgwMDIwXHgwMDYzXHgwMDY4XHgwMDYxXHgwMDcyXHgwMDYxXHgwMDYzXHgwMDc0XHgwMDY1XHgwMDcyXHgwMCIKLSAgICAzMyAgICAgICAgICAgICAgICBMIlx4MDA1NVx4MDA2RVx4MDA2NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA3NFx4MDA2NVx4MDA3OFx4MDA3NFx4MDAyMFx4MDA2Mlx4MDA2NVx4MDA2Nlx4MDA2Rlx4MDA3Mlx4MDA2NVx4MDAyMFx4MDA3Mlx4MDA2Rlx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2NVx4MDA2Q1x4MDA2NVx4MDA2RFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAiCi0gICAgMzQgICAgICAgICAgICAgICAgTCJceDAwNTVceDAwNkVceDAwNzRceDAwNjVceDAwNzJceDAwNkRceDAwNjlceDAwNkVceDAwNjFceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNzNceDAwNzRceDAwNjFceDAwNzJceDAwNzRceDAwMjBceDAwNzRceDAwNjFceDAwNjdceDAwIgotICAgIDM1ICAgICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDYxXHgwMDZFXHgwMDIwXHgwMDYxXHgwMDc0XHgwMDc0XHgwMDcyXHgwMDY5XHgwMDYyXHgwMDc1XHgwMDc0XHgwMDY1XHgwMDIwXHgwMDc2XHgwMDYxXHgwMDZDXHgwMDc1XHgwMDY1XHgwMCIKLSAgICAzNiAgICAgICAgICAgICAgICBMIlx4MDA1NVx4MDA2RVx4MDA3NFx4MDA2NVx4MDA3Mlx4MDA2RFx4MDA2OVx4MDA2RVx4MDA2MVx4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA2NVx4MDA2RVx4MDA2NFx4MDAyMFx4MDA3NFx4MDA2MVx4MDA2N1x4MDAiCi0gICAgMzcgICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNjFceDAwNzRceDAwNzRceDAwNzJceDAwNjlceDAwNjJceDAwNzVceDAwNzRceDAwNjVceDAwMjBceDAwNzRceDAwNzlceDAwNzBceDAwNjVceDAwMjBceDAwMjhceDAwNDNceDAwNDRceDAwNDFceDAwNTRceDAwNDFceDAwMkNceDAwMjBceDAwNDlceDAwNDRceDAwMkNceDAwMjBceDAwNEVceDAwNERceDAwNTRceDAwNEZceDAwNEJceDAwNDVceDAwNEVceDAwMkNceDAwMjBceDAwMkVceDAwMkVceDAwMjlceDAwMkNceDAwIgotICAgIDM4ICAgICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY1XHgwMDZFXHgwMDY0XHgwMDIwXHgwMDZGXHgwMDY2XHgwMDIwXHgwMDc0XHgwMDYxXHgwMDY3XHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMwXHgwMDdEXHgwMDI3XHgwMCIKLSAgICAzOSAgICAgICAgICAgICAgICBMIlx4MDA0NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA3NFx4MDA2MVx4MDA2N1x4MDAyMFx4MDA2RVx4MDA2MVx4MDA2RFx4MDA2NVx4MDAyQ1x4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RFx4MDA2RFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyQ1x4MDAyMFx4MDA1MFx4MDA0OVx4MDAyQ1x4MDAyMFx4MDA2Rlx4MDA3Mlx4MDAyMFx4MDA2Rlx4MDA3NFx4MDA2OFx4MDA2NVx4MDA3Mlx4MDAyMFx4MDA2RFx4MDA2MVx4MDA3Mlx4MDA2Qlx4MDA3NVx4MDA3MFx4MDAiCi0gICAgNDAgICAgICAgICAgICAgICAgTCJceDAwNEVceDAwNkZceDAwNzRceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNjlceDAwNjRceDAwMjBceDAwNjFceDAwNjZceDAwNzRceDAwNjVceDAwNzJceDAwMjBceDAwNjNceDAwNkZceDAwNkVceDAwNzRceDAwNjVceDAwNkVceDAwNzRceDAwIgotICAgIDQxICAgICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDYzXHgwMDZGXHgwMDZEXHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMCIKLSAgICA0MiAgICAgICAgICAgICAgICBMIlx4MDA0NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RFx4MDA2RFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDA2Rlx4MDA3Mlx4MDAyMFx4MDA3MFx4MDA3Mlx4MDA2Rlx4MDA2M1x4MDA2NVx4MDA3M1x4MDA3M1x4MDA2OVx4MDA2RVx4MDA2N1x4MDAyMFx4MDA2OVx4MDA2RVx4MDA3M1x4MDA3NFx4MDA3Mlx4MDA3NVx4MDA2M1x4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDAiCi0gICAgNDMgICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNzdceDAwNjhceDAwNjlceDAwNzRceDAwNjVceDAwNzNceDAwNzBceDAwNjFceDAwNjNceDAwNjVceDAwIgotICAgIDQ0ICAgICAgICAgICAgICAgIEwiXHgwMDRFXHgwMDZGXHgwMDIwXHgwMDcyXHgwMDZGXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDY1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDY5XHgwMDZFXHgwMDIwXHgwMDQ0XHgwMDRGXHgwMDQzXHgwMDU0XHgwMDU5XHgwMDUwXHgwMDQ1XHgwMCIKLSAgICA0NSAgICAgICAgICAgICAgICBMIlx4MDA0NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA3MVx4MDA3NVx4MDA2Rlx4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA3M1x4MDA3NFx4MDA3Mlx4MDA2OVx4MDA2RVx4MDA2N1x4MDAiCi0gICAgNDYgICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNzBceDAwNzVceDAwNjJceDAwNkNceDAwNjlceDAwNjNceDAwMjBceDAwNjlceDAwNjRceDAwIgotICAgIDQ3ICAgICAgICAgICAgICAgIEwiXHgwMDQ5XHgwMDZFXHgwMDc2XHgwMDYxXHgwMDZDXHgwMDY5XHgwMDY0XHgwMDIwXHgwMDYzXHgwMDY4XHgwMDYxXHgwMDcyXHgwMDYxXHgwMDYzXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDIwXHgwMDY5XHgwMDZFXHgwMDIwXHgwMDcwXHgwMDc1XHgwMDYyXHgwMDZDXHgwMDY5XHgwMDYzXHgwMDIwXHgwMDY5XHgwMDY0XHgwMCIKLSAgICA0OCAgICAgICAgICAgICAgICBMIlx4MDA1NVx4MDA2RVx4MDA3NFx4MDA2NVx4MDA3Mlx4MDA2RFx4MDA2OVx4MDA2RVx4MDA2MVx4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA0NFx4MDA0Rlx4MDA0M1x4MDA1NFx4MDA1OVx4MDA1MFx4MDA0NVx4MDAyMFx4MDA2NFx4MDA2NVx4MDA2M1x4MDA2Q1x4MDA2MVx4MDA3Mlx4MDA2MVx4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDAiCi0gICAgNDkgICAgICAgICAgICAgICAgTCJceDAwNDlceDAwNkVceDAwNzZceDAwNjFceDAwNkNceDAwNjlceDAwNjRceDAwMjBceDAwNjNceDAwNjhceDAwNjFceDAwNzJceDAwNjFceDAwNjNceDAwNzRceDAwNjVceDAwNzJceDAwMjBceDAwNjlceDAwNkVceDAwMjBceDAwNjlceDAwNkVceDAwNzRceDAwNjVceDAwNzJceDAwNkVceDAwNjFceDAwNkNceDAwMjBceDAwNzNceDAwNzVceDAwNjJceDAwNzNceDAwNjVceDAwNzRceDAwIgotICAgIDUwICAgICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDQzXHgwMDQ0XHgwMDQxXHgwMDU0XHgwMDQxXHgwMDIwXHgwMDczXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMCIKLSAgICA1MSAgICAgICAgICAgICAgICBMIlx4MDA0OVx4MDA2RVx4MDA3Nlx4MDA2MVx4MDA2Q1x4MDA2OVx4MDA2NFx4MDAyMFx4MDA2OVx4MDA2RVx4MDA2OVx4MDA3NFx4MDA2OVx4MDA2MVx4MDA2Q1x4MDAyMFx4MDA2RVx4MDA2MVx4MDA2RFx4MDA2NVx4MDAyMFx4MDA2M1x4MDA2OFx4MDA2MVx4MDA3Mlx4MDA2MVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA3Mlx4MDAiCi0gICAgNTIgICAgICAgICAgICAgICAgTCJceDAwNDlceDAwNkVceDAwNzZceDAwNjFceDAwNkNceDAwNjlceDAwNjRceDAwMjBceDAwNkVceDAwNjFceDAwNkRceDAwNjVceDAwMjBceDAwNjNceDAwNjhceDAwNjFceDAwNzJceDAwNjFceDAwNjNceDAwNzRceDAwNjVceDAwNzJceDAwIgotICAgIDUzICAgICAgICAgICAgICAgIEwiXHgwMDU1XHgwMDZFXHgwMDY1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDc3XHgwMDY4XHgwMDY5XHgwMDc0XHgwMDY1XHgwMDczXHgwMDcwXHgwMDYxXHgwMDYzXHgwMDY1XHgwMCIKLSAgICA1NCAgICAgICAgICAgICAgICBMIlx4MDA0OVx4MDA2RVx4MDA3Nlx4MDA2MVx4MDA2Q1x4MDA2OVx4MDA2NFx4MDAyMFx4MDA2M1x4MDA2OFx4MDA2MVx4MDA3Mlx4MDA2MVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA3Mlx4MDAyMFx4MDA2OVx4MDA2RVx4MDAyMFx4MDA2MVx4MDA3NFx4MDA3NFx4MDA3Mlx4MDA2OVx4MDA2Mlx4MDA3NVx4MDA3NFx4MDA2NVx4MDAyMFx4MDA3Nlx4MDA2MVx4MDA2Q1x4MDA3NVx4MDA2NVx4MDAiCi0gICAgNTUgICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNjFceDAwMjBceDAwNkRceDAwNjFceDAwNzJceDAwNkJceDAwNzVceDAwNzBceDAwMjBceDAwNjRceDAwNjVceDAwNjNceDAwNkNceDAwNjFceDAwNzJceDAwNjFceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwIgotICAgIDU2ICAgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY1XHgwMDc4XHgwMDc0XHgwMDIwXHgwMDY0XHgwMDY1XHgwMDYzXHgwMDZDXHgwMDYxXHgwMDcyXHgwMDYxXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDZDXHgwMDY1XHgwMDY3XHgwMDYxXHgwMDZDXHgwMDIwXHgwMDY4XHgwMDY1XHgwMDcyXHgwMDY1XHgwMCIKLSAgICA1NyAgICAgICAgICAgICAgICBMIlx4MDA0M1x4MDA2Rlx4MDA2RVx4MDA2NFx4MDA2OVx4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDA2MVx4MDA2Q1x4MDAyMFx4MDA3M1x4MDA2NVx4MDA2M1x4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDAyMFx4MDA2OVx4MDA2RVx4MDAyMFx4MDA2OVx4MDA2RVx4MDA3NFx4MDA2NVx4MDA3Mlx4MDA2RVx4MDA2MVx4MDA2Q1x4MDAyMFx4MDA3M1x4MDA3NVx4MDA2Mlx4MDA3M1x4MDA2NVx4MDA3NFx4MDAiCi0gICAgNTggICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNzBceDAwNjFceDAwNzJceDAwNjFceDAwNkRceDAwNjVceDAwNzRceDAwNjVceDAwNzJceDAwMjBceDAwNjVceDAwNkVceDAwNzRceDAwNjlceDAwNzRceDAwNzlceDAwMjBceDAwNkVceDAwNjFceDAwNkRceDAwNjVceDAwIgotICAgIDU5ICAgICAgICAgICAgICAgIEwiXHgwMDU1XHgwMDZFXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDZEXHgwMDY5XHgwMDZFXHgwMDYxXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDY5XHgwMDc0XHgwMDc5XHgwMDIwXHgwMDY0XHgwMDY1XHgwMDYzXHgwMDZDXHgwMDYxXHgwMDcyXHgwMDYxXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMCIKLSAgICA2MCAgICAgICAgICAgICAgICBMIlx4MDA0OVx4MDA2RVx4MDA3Nlx4MDA2MVx4MDA2Q1x4MDA2OVx4MDA2NFx4MDAyMFx4MDA2M1x4MDA2OFx4MDA2MVx4MDA3Mlx4MDA2MVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA3Mlx4MDAyMFx4MDA3Mlx4MDA2NVx4MDA2Nlx4MDA2NVx4MDA3Mlx4MDA2NVx4MDA2RVx4MDA2M1x4MDA2NVx4MDAiCi0gICAgNjEgICAgICAgICAgICAgICAgTCJceDAwNTVceDAwNkVceDAwNzRceDAwNjVceDAwNzJceDAwNkRceDAwNjlceDAwNkVceDAwNjFceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNjNceDAwNjhceDAwNjFceDAwNzJceDAwNjFceDAwNjNceDAwNzRceDAwNjVceDAwNzJceDAwMjBceDAwNzJceDAwNjVceDAwNjZceDAwNjVceDAwNzJceDAwNjVceDAwNkVceDAwNjNceDAwNjVceDAwIgotICAgIDYyICAgICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDY5XHgwMDc0XHgwMDc5XHgwMDIwXHgwMDZFXHgwMDYxXHgwMDZEXHgwMDY1XHgwMDIwXHgwMDY2XHgwMDZGXHgwMDcyXHgwMDIwXHgwMDcyXHgwMDY1XHgwMDY2XHgwMDY1XHgwMDcyXHgwMDY1XHgwMDZFXHgwMDYzXHgwMDY1XHgwMCIKLSAgICA2MyAgICAgICAgICAgICAgICBMIlx4MDA0NVx4MDA2RVx4MDA3NFx4MDA2OVx4MDA3NFx4MDA3OVx4MDAyMFx4MDAyN1x4MDA3Qlx4MDAzMFx4MDA3RFx4MDAyN1x4MDAyMFx4MDA3N1x4MDA2MVx4MDA3M1x4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2Nlx4MDA2Rlx4MDA3NVx4MDA2RVx4MDA2NFx4MDAiCi0gICAgNjQgICAgICAgICAgICAgICAgTCJceDAwNTVceDAwNkVceDAwNzBceDAwNjFceDAwNzJceDAwNzNceDAwNjVceDAwNjRceDAwMjBceDAwNjVceDAwNkVceDAwNzRceDAwNjlceDAwNzRceDAwNzRceDAwNzlceDAwMjBceDAwNzJceDAwNjVceDAwNjZceDAwNjVceDAwNzJceDAwNjVceDAwNkVceDAwNjNceDAwNjVceDAwNzNceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNjlceDAwNjRceDAwMjBceDAwNjhceDAwNjVceDAwNzJceDAwNjVceDAwIgotICAgIDY1ICAgICAgICAgICAgICAgIEwiXHgwMDU1XHgwMDZFXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDZEXHgwMDY5XHgwMDZFXHgwMDYxXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDY5XHgwMDc0XHgwMDc5XHgwMDIwXHgwMDcyXHgwMDY1XHgwMDY2XHgwMDY1XHgwMDcyXHgwMDY1XHgwMDZFXHgwMDYzXHgwMDY1XHgwMCIKLSAgICA2NiAgICAgICAgICAgICAgICBMIlx4MDA1Mlx4MDA2NVx4MDA2M1x4MDA3NVx4MDA3Mlx4MDA3M1x4MDA2OVx4MDA3Nlx4MDA2NVx4MDAyMFx4MDA2NVx4MDA2RVx4MDA3NFx4MDA2OVx4MDA3NFx4MDA3OVx4MDAyMFx4MDA2NVx4MDA3OFx4MDA3MFx4MDA2MVx4MDA2RVx4MDA3M1x4MDA2OVx4MDA2Rlx4MDA2RVx4MDAiCi0gICAgNjcgICAgICAgICAgICAgICAgTCJceDAwNTBceDAwNjFceDAwNzJceDAwNzRceDAwNjlceDAwNjFceDAwNkNceDAwMjBceDAwNkRceDAwNjFceDAwNzJceDAwNkJceDAwNzVceDAwNzBceDAwMjBceDAwNjlceDAwNkVceDAwMjBceDAwNjVceDAwNkVceDAwNzRceDAwNjlceDAwNzRceDAwNzlceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNzVceDAwNjVceDAwIgotICAgIDY4ICAgICAgICAgICAgICAgIEwiXHgwMDU1XHgwMDZFXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDZEXHgwMDY5XHgwMDZFXHgwMDYxXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDY0XHgwMDY1XHgwMDYzXHgwMDZDXHgwMDYxXHgwMDcyXHgwMDYxXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMCIKLSAgICA2OSAgICAgICAgICAgICAgICBMIlx4MDA0NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RVx4MDA3NFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDA3M1x4MDA3MFx4MDA2NVx4MDA2M1x4MDA2OVx4MDA2Nlx4MDA2OVx4MDA2M1x4MDA2MVx4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDAyMFx4MDA2NVx4MDA3OFx4MDA3MFx4MDA3Mlx4MDA2NVx4MDA3M1x4MDA3M1x4MDA2OVx4MDA2Rlx4MDA2RVx4MDAiCi0gICAgNzAgICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNjFceDAwNzNceDAwNzRceDAwNjVceDAwNzJceDAwNjlceDAwNzNceDAwNkJceDAwIgotICAgIDcxICAgICAgICAgICAgICAgIEwiXHgwMDU1XHgwMDZFXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDZEXHgwMDY5XHgwMDZFXHgwMDYxXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDQzXHgwMDZGXHgwMDZFXHgwMDc0XHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDZEXHgwMDZGXHgwMDY0XHgwMDY1XHgwMDZDXHgwMCIKLSAgICA3MiAgICAgICAgICAgICAgICBMIlx4MDA0NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA3M1x4MDA3OVx4MDA3M1x4MDA3NFx4MDA2NVx4MDA2RFx4MDAyMFx4MDA2OVx4MDA2NFx4MDAiCi0gICAgNzMgICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNzNceDAwNzlceDAwNzNceDAwNzRceDAwNjVceDAwNkRceDAwMjBceDAwNkZceDAwNzJceDAwMjBceDAwNzBceDAwNzVceDAwNjJceDAwNkNceDAwNjlceDAwNjNceDAwMjBceDAwNjlceDAwNjRceDAwIgotICAgIDc0ICAgICAgICAgICAgICAgIEwiXHgwMDU1XHgwMDZFXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDZEXHgwMDY5XHgwMDZFXHgwMDYxXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDYxXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMDIwXHgwMDY0XHgwMDY1XHgwMDYzXHgwMDZDXHgwMDYxXHgwMDcyXHgwMDYxXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMCIKLSAgICA3NSAgICAgICAgICAgICAgICBMIlx4MDA0NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDAyN1x4MDAyQ1x4MDAyN1x4MDAyQ1x4MDAyMFx4MDAyN1x4MDA3Q1x4MDAyN1x4MDAyQ1x4MDAyMFx4MDA2Rlx4MDA3Mlx4MDAyMFx4MDAyN1x4MDAyOVx4MDAyN1x4MDAyMFx4MDA2M1x4MDA2OFx4MDA2MVx4MDA3Mlx4MDA2MVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA3Mlx4MDA3M1x4MDAiCi0gICAgNzYgICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwMjdceDAwN0NceDAwMjdceDAwMjBceDAwNkZceDAwNzJceDAwMjBceDAwMjdceDAwMjlceDAwMjdceDAwMjBceDAwNjNceDAwNjhceDAwNjFceDAwNzJceDAwNjFceDAwNjNceDAwNzRceDAwNjVceDAwNzJceDAwNzNceDAwIgotICAgIDc3ICAgICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDI3XHgwMDJDXHgwMDI3XHgwMDIwXHgwMDZGXHgwMDcyXHgwMDIwXHgwMDI3XHgwMDI5XHgwMDI3XHgwMDIwXHgwMDYzXHgwMDY4XHgwMDYxXHgwMDcyXHgwMDYxXHgwMDYzXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDczXHgwMDIwXHgwMDZGXHgwMDcyXHgwMDIwXHgwMDYzXHgwMDZDXHgwMDZGXHgwMDczXHgwMDY1XHgwMDIwXHgwMDcwXHgwMDYxXHgwMDcyXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDczXHgwMDY5XHgwMDczXHgwMCIKLSAgICA3OCAgICAgICAgICAgICAgICBMIlx4MDA0NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA2NVx4MDA2RVx4MDA3NVx4MDA2RFx4MDA2NVx4MDA3Mlx4MDA2MVx4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDAyMFx4MDA3Nlx4MDA2MVx4MDA2Q1x4MDA3NVx4MDA2NVx4MDAiCi0gICAgNzkgICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwN0NceDAwMjBceDAwNjVceDAwNkVceDAwNzVceDAwNkRceDAwNjVceDAwNzJceDAwNjFceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwMjBceDAwNzNceDAwNjVceDAwNzBceDAwNjFceDAwNzJceDAwNjFceDAwNzRceDAwNkZceDAwNzJceDAwMkNceDAwMjBceDAwNkZceDAwNzJceDAwMjBceDAwNjNceDAwNkNceDAwNkZceDAwNzNceDAwNjlceDAwNkVceDAwNjdceDAwMjBceDAwNzBceDAwNjFceDAwNzJceDAwNjVceDAwNkVceDAwIgotICAgIDgwICAgICAgICAgICAgICAgIEwiXHgwMDU1XHgwMDZFXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDZEXHgwMDY5XHgwMDZFXHgwMDYxXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDY5XHgwMDc0XHgwMDc5XHgwMDIwXHgwMDZDXHgwMDY5XHgwMDc0XHgwMDY1XHgwMDcyXHgwMDYxXHgwMDZDXHgwMCIKLSAgICA4MSAgICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDA3Mlx4MDA2NVx4MDAyMFx4MDA2MVx4MDA3Mlx4MDA2NVx4MDAyMFx4MDA2RFx4MDA2Rlx4MDA3Mlx4MDA2NVx4MDAyMFx4MDA2NVx4MDA2RVx4MDA2NFx4MDAyMFx4MDA3NFx4MDA2MVx4MDA2N1x4MDA3M1x4MDAyMFx4MDA3NFx4MDA2OFx4MDA2MVx4MDA2RVx4MDAyMFx4MDA3M1x4MDA3NFx4MDA2MVx4MDA3Mlx4MDA3NFx4MDAyMFx4MDA3NFx4MDA2MVx4MDA2N1x4MDA3M1x4MDAiCi0gICAgODIgICAgICAgICAgICAgICAgTCJceDAwNTJceDAwNjVceDAwNjZceDAwNjVceDAwNzJceDAwNjVceDAwNkVceDAwNjNceDAwNjVceDAwMjBceDAwNzRceDAwNkZceDAwMjBceDAwNjVceDAwNzhceDAwNzRceDAwNjVceDAwNzJceDAwNkVceDAwNjFceDAwNkNceDAwMjBceDAwNjRceDAwNjVceDAwNjNceDAwNkNceDAwNjFceDAwNzJceDAwNjFceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwMjBceDAwNjlceDAwNkVceDAwMjBceDAwNzNceDAwNzRceDAwNjFceDAwNkVceDAwNjRceDAwNjFceDAwNkNceDAwNkZceDAwNkVceDAwNjVceDAwMjBceDAwNjRceDAwNkZceDAwNjNceDAwNzVceDAwNkRceDAwNjVceDAwNkVceDAwNzRceDAwMkVceDAwMjBceDAwNDVceDAwNkVceDAwNzRceDAwNjlceDAwNzRceDAwNzlceDAwM0RceDAwN0JceDAwMzBceDAwN0RceDAwIgotICAgIDgzICAgICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDYxXHgwMDZFXHgwMDIwXHgwMDZGXHgwMDcwXHgwMDY1XHgwMDZFXHgwMDIwXHgwMDcwXHgwMDYxXHgwMDcyXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDczXHgwMDY5XHgwMDczXHgwMCIKLSAgICA4NCAgICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2MVx4MDA3NFx4MDA3NFx4MDA3Mlx4MDA2OVx4MDA2Mlx4MDA3NVx4MDA3NFx4MDA2NVx4MDAyMFx4MDAyN1x4MDA3Qlx4MDAzMFx4MDA3RFx4MDAyN1x4MDAyMFx4MDA2OVx4MDA3M1x4MDAyMFx4MDA2MVx4MDA2Q1x4MDA3Mlx4MDA2NVx4MDA2MVx4MDA2NFx4MDA3OVx4MDAyMFx4MDA3NVx4MDA3M1x4MDA2NVx4MDA2NFx4MDAyMFx4MDA2OVx4MDA2RVx4MDAyMFx4MDA2NVx4MDA2Q1x4MDA2NVx4MDA2RFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDAyN1x4MDA3Qlx4MDAzMVx4MDA3RFx4MDAyN1x4MDAiCi0gICAgODUgICAgICAgICAgICAgICAgTCJceDAwNDFceDAwMjBceDAwMjdceDAwM0NceDAwMjdceDAwMjBceDAwNjNceDAwNjhceDAwNjFceDAwNzJceDAwNjFceDAwNjNceDAwNzRceDAwNjVceDAwNzJceDAwMjBceDAwNjNceDAwNjFceDAwNkVceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNjJceDAwNjVceDAwMjBceDAwNzVceDAwNzNceDAwNjVceDAwNjRceDAwMjBceDAwNjlceDAwNkVceDAwMjBceDAwNjFceDAwNkVceDAwMjBceDAwNjFceDAwNzRceDAwNzRceDAwNzJceDAwNjlceDAwNjJceDAwNzVceDAwNzRceDAwNjVceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNzVceDAwNjVceDAwMkNceDAwMjBceDAwNjVceDAwNzhceDAwNjNceDAwNjVceDAwNzBceDAwNzRceDAwMjBceDAwNzRceDAwNjhceDAwNzJceDAwNkZceDAwNzVceDAwNjdceDAwNjhceDAwMjBceDAwM0NceDAwIgotICAgIDg2ICAgICAgICAgICAgICAgIEwiXHgwMDQxXHgwMDIwXHgwMDZDXHgwMDY1XHgwMDYxXHgwMDY0XHgwMDY5XHgwMDZFXHgwMDY3XHgwMDIwXHgwMDczXHgwMDc1XHgwMDcyXHgwMDcyXHgwMDZGXHgwMDY3XHgwMDYxXHgwMDc0XHgwMDY1XHgwMDIwXHgwMDYzXHgwMDY4XHgwMDYxXHgwMDcyXHgwMDYxXHgwMDYzXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDIwXHgwMDc3XHgwMDYxXHgwMDczXHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDY2XHgwMDZGXHgwMDZDXHgwMDZDXHgwMDZGXHgwMDc3XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDYyXHgwMDc5XHgwMDIwXHgwMDYxXHgwMDIwXHgwMDZDXHgwMDY1XHgwMDY3XHgwMDYxXHgwMDZDXHgwMDIwXHgwMDczXHgwMDY1XHgwMDYzXHgwMDZGXHgwMDZFXHgwMDY0XHgwMDIwXHgwMDYzXHgwMDY4XHgwMDYxXHgwMDcyXHgwMDYxXHgwMDYzXHgwMDc0XHgwMDY1XHgwMDcyXHgwMCIKLSAgICA4NyAgICAgICAgICAgICAgICBMIlx4MDA0NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDAyN1x4MDA1RFx4MDA1RFx4MDAzRVx4MDAyN1x4MDAyMFx4MDA3NFx4MDA2Rlx4MDAyMFx4MDA2NVx4MDA2RVx4MDA2NFx4MDAyMFx4MDA2MVx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RVx4MDA2NFx4MDA2OVx4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDA2MVx4MDA2Q1x4MDAyMFx4MDA3M1x4MDA2NVx4MDA2M1x4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDAiCi0gICAgODggICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNDlceDAwNEVceDAwNDNceDAwNENceDAwNTVceDAwNDRceDAwNDVceDAwMjBceDAwNkZceDAwNzJceDAwMjBceDAwNDlceDAwNDdceDAwNEVceDAwNEZceDAwNTJceDAwNDVceDAwMjBceDAwNjhceDAwNjVceDAwNzJceDAwNjVceDAwIgotICAgIDg5ICAgICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDVCXHgwMDIwXHgwMDc0XHgwMDZGXHgwMDIwXHgwMDY2XHgwMDZGXHgwMDZDXHgwMDZDXHgwMDZGXHgwMDc3XHgwMDIwXHgwMDQ5XHgwMDRFXHgwMDQzXHgwMDRDXHgwMDU1XHgwMDQ0XHgwMDQ1XHgwMDIwXHgwMDZGXHgwMDcyXHgwMDIwXHgwMDQ5XHgwMDQ3XHgwMDRFXHgwMDRGXHgwMDUyXHgwMDQ1XHgwMCIKLSAgICA5MCAgICAgICAgICAgICAgICBMIlx4MDA0NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA2MVx4MDAyMFx4MDA1NFx4MDA2NVx4MDA3OFx4MDA3NFx4MDA0NFx4MDA2NVx4MDA2M1x4MDA2Q1x4MDAyMFx4MDA2OFx4MDA2NVx4MDA3Mlx4MDA2NVx4MDAzQVx4MDAyMFx4MDAzQ1x4MDAzRlx4MDA3OFx4MDA2RFx4MDA2Q1x4MDAyMFx4MDAyRVx4MDAyRVx4MDAyRVx4MDAyRVx4MDAiCi0gICAgOTEgICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNjFceDAwMjBceDAwNThceDAwNERceDAwNENceDAwNDRceDAwNjVceDAwNjNceDAwNkNceDAwMjBceDAwNjhceDAwNjVceDAwNzJceDAwNjVceDAwM0FceDAwMjBceDAwM0NceDAwM0ZceDAwNzhceDAwNkRceDAwNkNceDAwMjBceDAwMkVceDAwMkVceDAwMkVceDAwMkVceDAwIgotICAgIDkyICAgICAgICAgICAgICAgIEwiXHgwMDU1XHgwMDZFXHgwMDY1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY1XHgwMDZFXHgwMDY0XHgwMDIwXHgwMDZGXHgwMDY2XHgwMDIwXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDY5XHgwMDc0XHgwMDc5XHgwMDIwXHgwMDdCXHgwMDMwXHgwMDdEXHgwMCIKLSAgICA5MyAgICAgICAgICAgICAgICBMIlx4MDA0MVx4MDAyMFx4MDA1MFx4MDA0NVx4MDAyMFx4MDA3MFx4MDA3Mlx4MDA2Rlx4MDA3MFx4MDA2Rlx4MDA2N1x4MDA2MVx4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA2Rlx4MDA3NVx4MDA3NFx4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA3NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2OVx4MDA2RVx4MDA3NFx4MDAyRlx4MDA2NVx4MDA3OFx4MDA3NFx4MDAyMFx4MDA3M1x4MDA3NVx4MDA2Mlx4MDA3M1x4MDA2NVx4MDA3NFx4MDAyQ1x4MDAyMFx4MDA2NFx4MDA2OVx4MDA3M1x4MDA2M1x4MDA2MVx4MDA3Mlx4MDA2NFx4MDA2OVx4MDA2RVx4MDA2N1x4MDAyMFx4MDA2NVx4MDA3OFx4MDA3NFx4MDA3Mlx4MDA2MVx4MDAyMFx4MDA3NFx4MDA2NVx4MDA3OFx4MDA3NFx4MDAiCi0gICAgOTQgICAgICAgICAgICAgICAgTCJceDAwNDFceDAwNkVceDAwMjBceDAwNjVceDAwNzhceDAwNzRceDAwNzJceDAwNjFceDAwMjBceDAwNURceDAwMjBceDAwNjNceDAwNjhceDAwNjFceDAwNzJceDAwNjFceDAwNjNceDAwNzRceDAwNjVceDAwNzJceDAwMjBceDAwNzdceDAwNjFceDAwNzNceDAwMjBceDAwNjZceDAwNkZceDAwNzVceDAwNkVceDAwNjRceDAwMjBceDAwNjFceDAwNkVceDAwMjBceDAwNjlceDAwNjdceDAwNkVceDAwNkZceDAwNzJceDAwNjVceDAwNjRceDAwIgotICAgIDk1ICAgICAgICAgICAgICAgIEwiXHgwMDUwXHgwMDQ1XHgwMDIwXHgwMDcyXHgwMDY1XHgwMDY2XHgwMDczXHgwMDIwXHgwMDYxXHgwMDcyXHgwMDY1XHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYxXHgwMDZDXHgwMDZDXHgwMDZGXHgwMDc3XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY5XHgwMDZFXHgwMDczXHgwMDY5XHgwMDY0XHgwMDY1XHgwMDIwXHgwMDZEXHgwMDYxXHgwMDcyXHgwMDZCXHgwMDc1XHgwMDcwXHgwMDIwXHgwMDY5XHgwMDZFXHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDY5XHgwMDZFXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDZFXHgwMDYxXHgwMDZDXHgwMDIwXHgwMDczXHgwMDc1XHgwMDYyXHgwMDczXHgwMDY1XHgwMDc0XHgwMCIKLSAgICA5NiAgICAgICAgICAgICAgICBMIlx4MDA0MVx4MDA2RVx4MDAyMFx4MDA2NVx4MDA2RVx4MDA3NFx4MDA2OVx4MDA3NFx4MDA3OVx4MDAyMFx4MDA3MFx4MDA3Mlx4MDA2Rlx4MDA3MFx4MDA2Rlx4MDA2N1x4MDA2MVx4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA2Rlx4MDA3NVx4MDA3NFx4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA3NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RVx4MDA3NFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDA3M1x4MDA2NVx4MDA2M1x4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDAyMFx4MDA2OVx4MDA2RVx4MDA3NFx4MDA2Rlx4MDAyMFx4MDA0RFx4MDA2OVx4MDA3M1x4MDA2M1x4MDA2NVx4MDA2Q1x4MDA2Q1x4MDA2MVx4MDA2RVx4MDA2NVx4MDA2Rlx4MDA3NVx4MDA3M1x4MDAiCi0gICAgOTcgICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwMjZceDAwMjNceDAwMjBceDAwNzRceDAwNkZceDAwMjBceDAwNjJceDAwNjVceDAwMjBceDAwNjZceDAwNkZceDAwNkNceDAwNkNceDAwNkZceDAwNzdceDAwNjVceDAwNjRceDAwMjBceDAwNjJceDAwNzlceDAwMjBceDAwNjFceDAwMjBceDAwNkVceDAwNzVceDAwNkRceDAwNjVceDAwNzJceDAwNjlceDAwNjNceDAwMjBceDAwNjNceDAwNjhceDAwNjFceDAwNzJceDAwNjFceDAwNjNceDAwNzRceDAwNjVceDAwNzJceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNzVceDAwNjVceDAwIgotICAgIDk4ICAgICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDYxXHgwMDZFXHgwMDIwXHgwMDZGXHgwMDcwXHgwMDY1XHgwMDZFXHgwMDIwXHgwMDYyXHgwMDcyXHgwMDYxXHgwMDYzXHgwMDZCXHgwMDY1XHgwMDc0XHgwMDIwXHgwMDI4XHgwMDI3XHgwMDVCXHgwMDI3XHgwMDI5XHgwMDIwXHgwMDY4XHgwMDY1XHgwMDcyXHgwMDY1XHgwMCIKLSAgICA5OSAgICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA3M1x4MDA2NVx4MDA3MVx4MDA3NVx4MDA2NVx4MDA2RVx4MDA2M1x4MDA2NVx4MDAyMFx4MDAyN1x4MDA1RFx4MDA1RFx4MDAzRVx4MDAyN1x4MDAyMFx4MDA2OVx4MDA3M1x4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2MVx4MDA2Q1x4MDA2Q1x4MDA2Rlx4MDA3N1x4MDA2NVx4MDA2NFx4MDAyMFx4MDA2OVx4MDA2RVx4MDAyMFx4MDA2M1x4MDA2OFx4MDA2MVx4MDA3Mlx4MDA2MVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA3Mlx4MDAyMFx4MDA2NFx4MDA2MVx4MDA3NFx4MDA2MVx4MDAiCi0gICAgMTAwICAgICAgICAgICAgICAgTCJceDAwNDlceDAwNkNceDAwNkNceDAwNjVceDAwNjdceDAwNjFceDAwNkNceDAwMjBceDAwNzNceDAwNjVceDAwNzFceDAwNzVceDAwNjVceDAwNkVceDAwNjNceDAwNjVceDAwMjBceDAwMjdceDAwMkRceDAwMkRceDAwMjdceDAwMjBceDAwNjlceDAwNkVceDAwMjBceDAwNjNceDAwNkZceDAwNkRceDAwNkRceDAwNjVceDAwNkVceDAwNzRceDAwIgotICAgIDEwMSAgICAgICAgICAgICAgIEwiXHgwMDU1XHgwMDZFXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDZEXHgwMDY5XHgwMDZFXHgwMDYxXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDQzXHgwMDQ0XHgwMDQxXHgwMDU0XHgwMDQxXHgwMDIwXHgwMDczXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMCIKLSAgICAxMDIgICAgICAgICAgICAgICBMIlx4MDA0NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA0RVx4MDA0NFx4MDA0MVx4MDA1NFx4MDA0MVx4MDAiCi0gICAgMTAzICAgICAgICAgICAgICAgTCJceDAwNEVceDAwNDRceDAwNDFceDAwNTRceDAwNDFceDAwMjBceDAwNjlceDAwNzNceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNkNceDAwNjVceDAwNjdceDAwNjFceDAwNkNceDAwMjBceDAwNjZceDAwNkZceDAwNzJceDAwMjBceDAwNzBceDAwNjFceDAwNzJceDAwNjFceDAwNkRceDAwNjVceDAwNzRceDAwNjVceDAwNzJceDAwMjBceDAwNjVceDAwNkVceDAwNzRceDAwNjlceDAwNzRceDAwNjlceDAwNjVceDAwNzNceDAwIgotICAgIDEwNCAgICAgICAgICAgICAgIEwiXHgwMDQ4XHgwMDY1XHgwMDc4XHgwMDIwXHgwMDcyXHgwMDYxXHgwMDY0XHgwMDY5XHgwMDc4XHgwMDIwXHgwMDYzXHgwMDY4XHgwMDYxXHgwMDcyXHgwMDYxXHgwMDYzXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDIwXHgwMDcyXHgwMDY1XHgwMDY2XHgwMDczXHgwMDIwXHgwMDZEXHgwMDc1XHgwMDczXHgwMDc0XHgwMDIwXHgwMDc1XHgwMDczXHgwMDY1XHgwMDIwXHgwMDI3XHgwMDc4XHgwMDI3XHgwMDJDXHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDI3XHgwMDU4XHgwMDI3XHgwMCIKLSAgICAxMDUgICAgICAgICAgICAgICBMIlx4MDAyN1x4MDA3Qlx4MDAzMFx4MDA3RFx4MDAyN1x4MDAyMFx4MDA2OFx4MDA2MVx4MDA3M1x4MDAyMFx4MDA2MVx4MDA2Q1x4MDA3Mlx4MDA2NVx4MDA2MVx4MDA2NFx4MDA3OVx4MDAyMFx4MDA2Mlx4MDA2NVx4MDA2NVx4MDA2RVx4MDAyMFx4MDA3M1x4MDA2NVx4MDA3NFx4MDAyRVx4MDAyMFx4MDA0OVx4MDA2N1x4MDA2RVx4MDA2Rlx4MDA3Mlx4MDA2OVx4MDA2RVx4MDA2N1x4MDAyMFx4MDA3Mlx4MDA2NVx4MDA2NFx4MDA3NVx4MDA2RVx4MDA2NFx4MDA2MVx4MDA2RVx4MDA3NFx4MDAyMFx4MDA3M1x4MDA2NVx4MDA3NFx4MDA3NFx4MDA2OVx4MDA2RVx4MDA2N1x4MDAiCi0gICAgMTA2ICAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNThceDAwNERceDAwNENceDAwNDRceDAwNjVceDAwNjNceDAwNkNceDAwMjBceDAwNzNceDAwNzRceDAwNzJceDAwNjlceDAwNkVceDAwNjdceDAwNzNceDAwMjBceDAwNkRceDAwNzVceDAwNzNceDAwNzRceDAwMjBceDAwNjJceDAwNjVceDAwMjBceDAwNjlceDAwNkVceDAwMjBceDAwNzRceDAwNjhceDAwNjVceDAwMjBceDAwNkZceDAwNzJceDAwNjRceDAwNjVceDAwNzJceDAwM0FceDAwMjBceDAwNzZceDAwNjVceDAwNzJceDAwNzNceDAwNjlceDAwNkZceDAwNkVceDAwMkNceDAwMjBceDAwNjVceDAwNkVceDAwNjNceDAwNkZceDAwNjRceDAwNjlceDAwNkVceDAwNjdceDAwMkNceDAwMjBceDAwNzNceDAwNzRceDAwNjFceDAwNkVceDAwNjRceDAwNjFceDAwNkNceDAwNkZceDAwNkVceDAwNjVceDAwIgotICAgIDEwNyAgICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDc4XHgwMDc0XHgwMDY1XHgwMDcyXHgwMDZFXHgwMDYxXHgwMDZDXHgwMDIwXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDY5XHgwMDc0XHgwMDY5XHgwMDY1XHgwMDczXHgwMDIwXHgwMDYzXHgwMDYxXHgwMDZFXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYyXHgwMDY1XHgwMDIwXHgwMDcyXHgwMDY1XHgwMDY2XHgwMDY1XHgwMDcyXHgwMDcyXHgwMDY1XHgwMDY0XHgwMDIwXHgwMDc0XHgwMDZGXHgwMDIwXHgwMDY2XHgwMDcyXHgwMDZGXHgwMDZEXHgwMDIwXHgwMDYxXHgwMDc0XHgwMDc0XHgwMDcyXHgwMDY5XHgwMDYyXHgwMDc1XHgwMDc0XHgwMDY1XHgwMDIwXHgwMDc2XHgwMDYxXHgwMDZDXHgwMDc1XHgwMDY1XHgwMDczXHgwMCIKLSAgICAxMDggICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA1OFx4MDA0RFx4MDA0Q1x4MDAyMFx4MDA2Rlx4MDA3Mlx4MDAyMFx4MDA1NFx4MDA2NVx4MDA3OFx4MDA3NFx4MDAyMFx4MDA2NFx4MDA2NVx4MDA2M1x4MDA2Q1x4MDAyMFx4MDA2RFx4MDA3NVx4MDA3M1x4MDA3NFx4MDAyMFx4MDA3M1x4MDA3NFx4MDA2MVx4MDA3Mlx4MDA3NFx4MDAyMFx4MDA3N1x4MDA2OVx4MDA3NFx4MDA2OFx4MDAyMFx4MDAyN1x4MDAzQ1x4MDAzRlx4MDA3OFx4MDA2RFx4MDA2Q1x4MDAyMFx4MDAyN1x4MDAyQ1x4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDAyN1x4MDAzQ1x4MDAzRlx4MDA1OFx4MDA0RFx4MDA0Q1x4MDAyMFx4MDAyN1x4MDAiCi0gICAgMTA5ICAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNjFceDAwMjBceDAwNkNceDAwNjlceDAwNzRceDAwNjVceDAwNzJceDAwNjFceDAwNkNceDAwMjBceDAwNjVceDAwNkVceDAwNzRceDAwNjlceDAwNzRceDAwNzlceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNzVceDAwNjVceDAwMjBceDAwNkZceDAwNzJceDAwMjBceDAwNTBceDAwNTVceDAwNDJceDAwNENceDAwNDlceDAwNDNceDAwMkZceDAwNTNceDAwNTlceDAwNTNceDAwNTRceDAwNDVceDAwNERceDAwMjBceDAwNjlceDAwNjRceDAwIgotICAgIDExMCAgICAgICAgICAgICAgIEwiXHgwMDI3XHgwMDdCXHgwMDMwXHgwMDdEXHgwMDI3XHgwMDIwXHgwMDY5XHgwMDczXHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYxXHgwMDIwXHgwMDc2XHgwMDYxXHgwMDZDXHgwMDY5XHgwMDY0XHgwMDIwXHgwMDY0XHgwMDY5XHgwMDY3XHgwMDY5XHgwMDc0XHgwMDIwXHgwMDY2XHgwMDZGXHgwMDcyXHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDY5XHgwMDZFXHgwMDY0XHgwMDY5XHgwMDYzXHgwMDYxXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDcyXHgwMDYxXHgwMDY0XHgwMDY5XHgwMDc4XHgwMCIKLSAgICAxMTEgICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2OVx4MDA2RVx4MDA3MFx4MDA3NVx4MDA3NFx4MDAyMFx4MDA2NVx4MDA2RVx4MDA2NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA2Mlx4MDA2NVx4MDA2Nlx4MDA2Rlx4MDA3Mlx4MDA2NVx4MDAyMFx4MDA2MVx4MDA2Q1x4MDA2Q1x4MDAyMFx4MDA3M1x4MDA3NFx4MDA2MVx4MDA3Mlx4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA3NFx4MDA2MVx4MDA2N1x4MDA3M1x4MDAyMFx4MDA3N1x4MDA2NVx4MDA3Mlx4MDA2NVx4MDAyMFx4MDA2NVx4MDA2RVx4MDA2NFx4MDA2NVx4MDA2NFx4MDAyRVx4MDAyMFx4MDA0Q1x4MDA2MVx4MDA3M1x4MDA3NFx4MDAyMFx4MDA3NFx4MDA2MVx4MDA2N1x4MDAyMFx4MDA3M1x4MDA3NFx4MDA2MVx4MDA3Mlx4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA3N1x4MDA2MVx4MDA3M1x4MDAyMFx4MDAyN1x4MDA3Qlx4MDAzMFx4MDA3RFx4MDAyN1x4MDAiCi0gICAgMTEyICAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNjNceDAwNkZceDAwNkVceDAwNzRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwNkRceDAwNkZceDAwNjRceDAwNjVceDAwNkNceDAwMjBceDAwNjZceDAwNkZceDAwNzJceDAwMjBceDAwNjVceDAwNkNceDAwNjVceDAwNkRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwMjBceDAwNjlceDAwNzNceDAwMjBceDAwNjFceDAwNkRceDAwNjJceDAwNjlceDAwNjdceDAwNzVceDAwNkZceDAwNzVceDAwNzNceDAwIgotICAgIDExMyAgICAgICAgICAgICAgIEwiXHgwMDRFXHgwMDY1XHgwMDczXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDQzXHgwMDQ0XHgwMDQxXHgwMDU0XHgwMDQxXHgwMDIwXHgwMDczXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMDczXHgwMDIwXHgwMDYxXHgwMDcyXHgwMDY1XHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYxXHgwMDZDXHgwMDZDXHgwMDZGXHgwMDc3XHgwMDY1XHgwMDY0XHgwMCIKLSAgICAxMTQgICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA3MFx4MDA3Mlx4MDA2NVx4MDA2Nlx4MDA2OVx4MDA3OFx4MDAyMFx4MDAyN1x4MDA3Qlx4MDAzMFx4MDA3RFx4MDAyN1x4MDAyMFx4MDA2OFx4MDA2MVx4MDA3M1x4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2Mlx4MDA2NVx4MDA2NVx4MDA2RVx4MDAyMFx4MDA2RFx4MDA2MVx4MDA3MFx4MDA3MFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA3NFx4MDA2Rlx4MDAyMFx4MDA2MVx4MDA2RVx4MDA3OVx4MDAyMFx4MDA1NVx4MDA1Mlx4MDA0OVx4MDAiCi0gICAgMTE1ICAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNzNceDAwNzRceDAwNjFceDAwNzJceDAwNzRceDAwMjBceDAwNjFceDAwNkVceDAwNjRceDAwMjBceDAwNzRceDAwNjhceDAwNjVceDAwMjBceDAwNjVceDAwNkVceDAwNjRceDAwMjBceDAwNzRceDAwNjFceDAwNjdceDAwMjBceDAwNzdceDAwNjVceDAwNzJceDAwNjVceDAwMjBceDAwNjlceDAwNkVceDAwMjBceDAwNzRceDAwNjhceDAwNjVceDAwMjBceDAwNjRceDAwNjlceDAwNjZceDAwNjZceDAwNjVceDAwNzJceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwNjVceDAwNkVceDAwNzRceDAwNjlceDAwNzRceDAwNjlceDAwNjVceDAwNzNceDAwIgotICAgIDExNiAgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDZEXHgwMDYxXHgwMDY5XHgwMDZFXHgwMDIwXHgwMDU4XHgwMDREXHgwMDRDXHgwMDIwXHgwMDY0XHgwMDZGXHgwMDYzXHgwMDc1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDYzXHgwMDYxXHgwMDZFXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYyXHgwMDY1XHgwMDIwXHgwMDY1XHgwMDZEXHgwMDcwXHgwMDc0XHgwMDc5XHgwMCIKLSAgICAxMTcgICAgICAgICAgICAgICBMIlx4MDA0M1x4MDA0NFx4MDA0MVx4MDA1NFx4MDA0MVx4MDAyMFx4MDA2OVx4MDA3M1x4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2MVx4MDA2Q1x4MDA2Q1x4MDA2Rlx4MDA3N1x4MDA2NVx4MDA2NFx4MDAyMFx4MDA2Rlx4MDA3NVx4MDA3NFx4MDA3M1x4MDA2OVx4MDA2NFx4MDA2NVx4MDAyMFx4MDA3NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA3Mlx4MDA2Rlx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2NVx4MDA2Q1x4MDA2NVx4MDA2RFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAiCi0gICAgMTE4ICAgICAgICAgICAgICAgTCJceDAwNEZceDAwNkVceDAwNkNceDAwNzlceDAwMjBceDAwNkVceDAwNzVceDAwNkRceDAwNjVceDAwNzJceDAwNjlceDAwNjNceDAwMjBceDAwNjNceDAwNjhceDAwNjFceDAwNzJceDAwNjFceDAwNjNceDAwNzRceDAwNjVceDAwNzJceDAwMjBceDAwNjVceDAwNkVceDAwNzRceDAwNjlceDAwNzRceDAwNjlceDAwNjVceDAwNzNceDAwMjBceDAwNkZceDAwNzJceDAwMjBceDAwNzNceDAwNzBceDAwNjVceDAwNjNceDAwNjlceDAwNjFceDAwNkNceDAwMjBceDAwNjNceDAwNjhceDAwNjFceDAwNzJceDAwNjFceDAwNjNceDAwNzRceDAwNjVceDAwNzJceDAwMjBceDAwNjVceDAwNkVceDAwNzRceDAwNjlceDAwNzRceDAwNjlceDAwNjVceDAwNzNceDAwMjBceDAwNjFceDAwNzJceDAwNjVceDAwMjBceDAwNkNceDAwNjVceDAwNjdceDAwNjFceDAwNkNceDAwMjBceDAwNjhceDAwNjVceDAwNzJceDAwNjVceDAwIgotICAgIDExOSAgICAgICAgICAgICAgIEwiXHgwMDQ3XHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYxXHgwMDZFXHgwMDIwXHgwMDc1XHgwMDZFXHgwMDY1XHgwMDc4XHgwMDcwXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDc0XHgwMDcyXHgwMDYxXHgwMDY5XHgwMDZDXHgwMDY5XHgwMDZFXHgwMDY3XHgwMDIwXHgwMDczXHgwMDc1XHgwMDcyXHgwMDcyXHgwMDZGXHgwMDY3XHgwMDYxXHgwMDc0XHgwMDY1XHgwMDIwXHgwMDYzXHgwMDY4XHgwMDYxXHgwMDcyXHgwMDYxXHgwMDYzXHgwMDc0XHgwMDY1XHgwMDcyXHgwMCIKLSAgICAxMjAgICAgICAgICAgICAgICBMIlx4MDA0RVx4MDA2Rlx4MDAyMFx4MDA3MFx4MDA3Mlx4MDA2Rlx4MDA2M1x4MDA2NVx4MDA3M1x4MDA3M1x4MDA2OVx4MDA2RVx4MDA2N1x4MDAyMFx4MDA2OVx4MDA2RVx4MDA3M1x4MDA3NFx4MDA3Mlx4MDA3NVx4MDA2M1x4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDAyMFx4MDA3M1x4MDA3NFx4MDA2MVx4MDA3Mlx4MDA3NFx4MDA3M1x4MDAyMFx4MDA3N1x4MDA2OVx4MDA3NFx4MDA2OFx4MDAyMFx4MDAyN1x4MDA3OFx4MDA2RFx4MDA2Q1x4MDAyN1x4MDAiCi0gICAgMTIxICAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNThceDAwNERceDAwNENceDAwMjBceDAwNkZceDAwNzJceDAwMjBceDAwNTRceDAwNjVceDAwNzhceDAwNzRceDAwMjBceDAwNjRceDAwNjVceDAwNjNceDAwNkNceDAwNjFceDAwNzJceDAwNjFceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwMjBceDAwNkRceDAwNzVceDAwNzNceDAwNzRceDAwMjBceDAwNzNceDAwNzRceDAwNjFceDAwNzJceDAwNzRceDAwMjBceDAwNjFceDAwNzRceDAwMjBceDAwNkNceDAwNjlceDAwNkVceDAwNjVceDAwMkZceDAwNjNceDAwNkZceDAwNkNceDAwNzVceDAwNkRceDAwNkVceDAwMjBceDAwMzFceDAwMkZceDAwMzFceDAwIgotICAgIDEyMiAgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDI3XHgwMDc2XHgwMDY1XHgwMDcyXHgwMDczXHgwMDY5XHgwMDZGXHgwMDZFXHgwMDNEXHgwMDI3XHgwMDIwXHgwMDczXHgwMDc0XHgwMDcyXHgwMDY5XHgwMDZFXHgwMDY3XHgwMDIwXHgwMDY5XHgwMDczXHgwMDIwXHgwMDcyXHgwMDY1XHgwMDcxXHgwMDc1XHgwMDY5XHgwMDcyXHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY5XHgwMDZFXHgwMDIwXHgwMDYxXHgwMDZFXHgwMDIwXHgwMDU4XHgwMDREXHgwMDRDXHgwMDQ0XHgwMDY1XHgwMDYzXHgwMDZDXHgwMCIKLSAgICAxMjMgICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDAyN1x4MDA3M1x4MDA3NFx4MDA2MVx4MDA2RVx4MDA2NFx4MDA2MVx4MDA2Q1x4MDA2Rlx4MDA2RVx4MDA2NVx4MDAzRFx4MDAyN1x4MDAyMFx4MDA3M1x4MDA3NFx4MDA3Mlx4MDA2OVx4MDA2RVx4MDA2N1x4MDAyMFx4MDA2OVx4MDA3M1x4MDAyMFx4MDA2Rlx4MDA2RVx4MDA2Q1x4MDA3OVx4MDAyMFx4MDA2MVx4MDA2Q1x4MDA2Q1x4MDA2Rlx4MDA3N1x4MDA2NVx4MDA2NFx4MDAyMFx4MDA2OVx4MDA2RVx4MDAyMFx4MDA3NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2RFx4MDA2MVx4MDA2OVx4MDA2RVx4MDAyMFx4MDA1OFx4MDA0RFx4MDA0Q1x4MDAyMFx4MDA2NVx4MDA2RVx4MDA3NFx4MDA2OVx4MDA3NFx4MDA3OVx4MDAiCi0gICAgMTI0ICAgICAgICAgICAgICAgTCJceDAwNTdceDAwNjhceDAwNjVceDAwNkVceDAwMjBceDAwNkVceDAwNjFceDAwNkRceDAwNjVceDAwNzNceDAwNzBceDAwNjFceDAwNjNceDAwNjVceDAwNzNceDAwMjBceDAwNjFceDAwNzJceDAwNjVceDAwMjBceDAwNjVceDAwNkVceDAwNjFceDAwNjJceDAwNkNceDAwNjVceDAwNjRceDAwMkNceDAwMjBceDAwNjFceDAwMjBceDAwNkVceDAwNjFceDAwNkRceDAwNjVceDAwMjBceDAwNjNceDAwNjFceDAwNkVceDAwMjBceDAwNjhceDAwNjFceDAwNzZceDAwNjVceDAwMjBceDAwNkZceDAwNkVceDAwNkNceDAwNzlceDAwMjBceDAwNkZceDAwNkVceDAwNjVceDAwMjBceDAwNjNceDAwNkZceDAwNkNceDAwNkZceDAwNkVceDAwMjBceDAwNjNceDAwNjhceDAwNjFceDAwNzJceDAwNjFceDAwNjNceDAwNzRceDAwNjVceDAwNzJceDAwIgotICAgIDEyNSAgICAgICAgICAgICAgIEwiXHgwMDU3XHgwMDY4XHgwMDY1XHgwMDZFXHgwMDIwXHgwMDZFXHgwMDYxXHgwMDZEXHgwMDY1XHgwMDczXHgwMDcwXHgwMDYxXHgwMDYzXHgwMDY1XHgwMDczXHgwMDIwXHgwMDYxXHgwMDcyXHgwMDY1XHgwMDIwXHgwMDY1XHgwMDZFXHgwMDYxXHgwMDYyXHgwMDZDXHgwMDY1XHgwMDY0XHgwMDJDXHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDYzXHgwMDZGXHgwMDZDXHgwMDZGXHgwMDZFXHgwMDIwXHgwMDYzXHgwMDYxXHgwMDZFXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYyXHgwMDY1XHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDY2XHgwMDY5XHgwMDcyXHgwMDczXHgwMDc0XHgwMDIwXHgwMDZGXHgwMDcyXHgwMDIwXHgwMDZDXHgwMDYxXHgwMDczXHgwMDc0XHgwMDIwXHgwMDYzXHgwMDY4XHgwMDYxXHgwMDcyXHgwMDYxXHgwMDYzXHgwMDc0XHgwMDY1XHgwMDcyXHgwMCIKLSAgICAxMjYgICAgICAgICAgICAgICBMIlx4MDA0M1x4MDA2Rlx4MDA2Q1x4MDA2Rlx4MDA2RVx4MDA3M1x4MDAyMFx4MDA2MVx4MDA3Mlx4MDA2NVx4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2MVx4MDA2Q1x4MDA2Q1x4MDA2Rlx4MDA3N1x4MDA2NVx4MDA2NFx4MDAyMFx4MDA2OVx4MDA2RVx4MDAyMFx4MDA3NFx4MDA2OFx4MDA2OVx4MDA3M1x4MDAyMFx4MDA2RVx4MDA2MVx4MDA2RFx4MDA2NVx4MDAyMFx4MDA3N1x4MDA2OFx4MDA2NVx4MDA2RVx4MDAyMFx4MDA2RVx4MDA2MVx4MDA2RFx4MDA2NVx4MDA3M1x4MDA3MFx4MDA2MVx4MDA2M1x4MDA2NVx4MDA3M1x4MDAyMFx4MDA2MVx4MDA3Mlx4MDA2NVx4MDAyMFx4MDA2NVx4MDA2RVx4MDA2MVx4MDA2Mlx4MDA2Q1x4MDA2NVx4MDA2NFx4MDAiCi0gICAgMTI3ICAgICAgICAgICAgICAgTCJceDAwNDFceDAwMjBceDAwNzNceDAwNzlceDAwNzNceDAwNzRceDAwNjVceDAwNkRceDAwMjBceDAwNjVceDAwNzhceDAwNjNceDAwNjVceDAwNzBceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwMjBceDAwNkZceDAwNjNceDAwNjNceDAwNzVceDAwNzJceDAwNjVceDAwNjRceDAwMjBceDAwNjRceDAwNzVceDAwNzJceDAwNjlceDAwNkVceDAwNjdceDAwMjBceDAwNzBceDAwNzJceDAwNkZceDAwNjNceDAwNjVceDAwNzNceDAwNzNceDAwNjlceDAwNkVceDAwNjdceDAwIgotICAgIDEyOCAgICAgICAgICAgICAgIEwiXHgwMDQxXHgwMDZFXHgwMDIwXHgwMDY1XHgwMDc4XHgwMDYzXHgwMDY1XHgwMDcwXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMDIwXHgwMDZGXHgwMDYzXHgwMDYzXHgwMDc1XHgwMDcyXHgwMDY1XHgwMDY0XHgwMDIxXHgwMDIwXHgwMDU0XHgwMDc5XHgwMDcwXHgwMDY1XHgwMDNBXHgwMDdCXHgwMDMwXHgwMDdEXHgwMDJDXHgwMDIwXHgwMDREXHgwMDY1XHgwMDczXHgwMDczXHgwMDYxXHgwMDY3XHgwMDY1XHgwMDNBXHgwMDdCXHgwMDMxXHgwMDdEXHgwMCIKLSAgICAxMjkgICAgICAgICAgICAgICBMIlx4MDA1NVx4MDA2RVx4MDA2NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA2NVx4MDA2RVx4MDA2NFx4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA2Nlx4MDA2OVx4MDA2Q1x4MDA2NVx4MDAyMFx4MDA2NVx4MDA3OFx4MDA2M1x4MDA2NVx4MDA3MFx4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDAyRVx4MDAyMFx4MDA0RFx4MDA2NVx4MDA3M1x4MDA3M1x4MDA2MVx4MDA2N1x4MDA2NVx4MDAzQVx4MDAyMFx4MDA3Qlx4MDAzMFx4MDA3RFx4MDAiCi1FTkQKLVNUUklOR1RBQkxFIERJU0NBUkRBQkxFCi1CRUdJTgotICAgIDE2Mzg2ICAgICAgICAgICAgIEwiXHgwMDU1XHgwMDZFXHgwMDZCXHgwMDZFXHgwMDZGXHgwMDc3XHgwMDZFXHgwMDIwXHgwMDY1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMwXHgwMDdEXHgwMDI3XHgwMCIKLSAgICAxNjM4NyAgICAgICAgICAgICBMIlx4MDA0MVx4MDA3NFx4MDA3NFx4MDA3Mlx4MDA2OVx4MDA2Mlx4MDA3NVx4MDA3NFx4MDA2NVx4MDAyMFx4MDAyN1x4MDA3Qlx4MDAzMFx4MDA3RFx4MDAyN1x4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2NFx4MDA2NVx4MDA2Nlx4MDA2OVx4MDA2RVx4MDA2NVx4MDA2NFx4MDAiCi0gICAgMTYzODggICAgICAgICAgICAgTCJceDAwNEVceDAwNkZceDAwNzRceDAwNjFceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwMjBceDAwNzdceDAwNjFceDAwNzNceDAwMjBceDAwNzJceDAwNjVceDAwNjZceDAwNjVceDAwNzJceDAwNjVceDAwNkVceDAwNjNceDAwNjVceDAwNjRceDAwMjBceDAwNjJceDAwNzVceDAwNzRceDAwMjBceDAwNkVceDAwNjVceDAwNzZceDAwNjVceDAwNzJceDAwMjBceDAwNjRceDAwNjVceDAwNjNceDAwNkNceDAwNjFceDAwNzJceDAwNjVceDAwNjRceDAwIgotICAgIDE2Mzg5ICAgICAgICAgICAgIEwiXHgwMDUyXHgwMDZGXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDY1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDY0XHgwMDY5XHgwMDY2XHgwMDY2XHgwMDY1XHgwMDcyXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDY2XHgwMDcyXHgwMDZGXHgwMDZEXHgwMDIwXHgwMDQ0XHgwMDRGXHgwMDQzXHgwMDU0XHgwMDU5XHgwMDUwXHgwMDQ1XHgwMCIKLSAgICAxNjM5MCAgICAgICAgICAgICBMIlx4MDA1Mlx4MDA2NVx4MDA3MVx4MDA3NVx4MDA2OVx4MDA3Mlx4MDA2NVx4MDA2NFx4MDAyMFx4MDA2MVx4MDA3NFx4MDA3NFx4MDA3Mlx4MDA2OVx4MDA2Mlx4MDA3NVx4MDA3NFx4MDA2NVx4MDAyMFx4MDAyN1x4MDA3Qlx4MDAzMFx4MDA3RFx4MDAyN1x4MDAyMFx4MDA3N1x4MDA2MVx4MDA3M1x4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA3MFx4MDA3Mlx4MDA2Rlx4MDA3Nlx4MDA2OVx4MDA2NFx4MDA2NVx4MDA2NFx4MDAiCi0gICAgMTYzOTEgICAgICAgICAgICAgTCJceDAwNDVceDAwNkNceDAwNjVceDAwNkRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwMjBceDAwNjlceDAwNzNceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNjlceDAwNjRceDAwMjBceDAwNjZceDAwNkZceDAwNzJceDAwMjBceDAwNjNceDAwNkZceDAwNkVceDAwNzRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwNkRceDAwNkZceDAwNjRceDAwNjVceDAwNkNceDAwM0FceDAwMjBceDAwMjdceDAwN0JceDAwMzFceDAwN0RceDAwMjdceDAwIgotICAgIDE2MzkyICAgICAgICAgICAgIEwiXHgwMDQ5XHgwMDQ0XHgwMDIwXHgwMDYxXHgwMDc0XHgwMDc0XHgwMDcyXHgwMDY5XHgwMDYyXHgwMDc1XHgwMDc0XHgwMDY1XHgwMDczXHgwMDIwXHgwMDZEXHgwMDc1XHgwMDczXHgwMDc0XHgwMDIwXHgwMDYyXHgwMDY1XHgwMDIwXHgwMDIzXHgwMDQ5XHgwMDREXHgwMDUwXHgwMDRDXHgwMDQ5XHgwMDQ1XHgwMDQ0XHgwMDIwXHgwMDZGXHgwMDcyXHgwMDIwXHgwMDIzXHgwMDUyXHgwMDQ1XHgwMDUxXHgwMDU1XHgwMDQ5XHgwMDUyXHgwMDQ1XHgwMDQ0XHgwMCIKLSAgICAxNjM5MyAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2OVx4MDA3M1x4MDAyMFx4MDA3NFx4MDA3OVx4MDA3MFx4MDA2NVx4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA2MVx4MDA3NFx4MDA3NFx4MDA3Mlx4MDA2OVx4MDA2Mlx4MDA3NVx4MDA3NFx4MDA2NVx4MDAyMFx4MDA2M1x4MDA2MVx4MDA2RVx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2OFx4MDA2MVx4MDA3Nlx4MDA2NVx4MDAyMFx4MDA2MVx4MDA2RVx4MDAyMFx4MDA2NVx4MDA2RFx4MDA3MFx4MDA3NFx4MDA3OVx4MDAyMFx4MDA3Nlx4MDA2MVx4MDA2Q1x4MDA3NVx4MDA2NVx4MDAiCi0gICAgMTYzOTQgICAgICAgICAgICAgTCJceDAwNDVceDAwNkNceDAwNjVceDAwNkRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwMjBceDAwNjhceDAwNjFceDAwNzNceDAwMjBceDAwNjFceDAwNkNceDAwNzJceDAwNjVceDAwNjFceDAwNjRceDAwNzlceDAwMjBceDAwNjJceDAwNjVceDAwNjVceDAwNkVceDAwMjBceDAwNjRceDAwNjVceDAwNjNceDAwNkNceDAwNjFceDAwNzJceDAwNjVceDAwNjRceDAwIgotICAgIDE2Mzk1ICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMwXHgwMDdEXHgwMDI3XHgwMDIwXHgwMDY4XHgwMDYxXHgwMDczXHgwMDIwXHgwMDZEXHgwMDZGXHgwMDcyXHgwMDY1XHgwMDIwXHgwMDc0XHgwMDY4XHgwMDYxXHgwMDZFXHgwMDIwXHgwMDZGXHgwMDZFXHgwMDY1XHgwMDIwXHgwMDQ5XHgwMDQ0XHgwMDIwXHgwMDYxXHgwMDc0XHgwMDc0XHgwMDcyXHgwMDY5XHgwMDYyXHgwMDc1XHgwMDc0XHgwMDY1XHgwMCIKLSAgICAxNjM5NiAgICAgICAgICAgICBMIlx4MDA0OVx4MDA0NFx4MDAyMFx4MDAyN1x4MDA3Qlx4MDAzMFx4MDA3RFx4MDAyN1x4MDAyMFx4MDA2OFx4MDA2MVx4MDA3M1x4MDAyMFx4MDA2MVx4MDA2Q1x4MDA3Mlx4MDA2NVx4MDA2MVx4MDA2NFx4MDA3OVx4MDAyMFx4MDA2Mlx4MDA2NVx4MDA2NVx4MDA2RVx4MDAyMFx4MDA3NVx4MDA3M1x4MDA2NVx4MDA2NFx4MDAiCi0gICAgMTYzOTcgICAgICAgICAgICAgTCJceDAwNDlceDAwNDRceDAwMjBceDAwNjFceDAwNzRceDAwNzRceDAwNzJceDAwNjlceDAwNjJceDAwNzVceDAwNzRceDAwNjVceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwMjBceDAwNzdceDAwNjFceDAwNzNceDAwMjBceDAwNzJceDAwNjVceDAwNjZceDAwNjVceDAwNzJceDAwNjVceDAwNkVceDAwNjNceDAwNjVceDAwNjRceDAwMjBceDAwNjJceDAwNzVceDAwNzRceDAwMjBceDAwNkVceDAwNjVceDAwNzZceDAwNjVceDAwNzJceDAwMjBceDAwNjRceDAwNjVceDAwNjNceDAwNkNceDAwNjFceDAwNzJceDAwNjVceDAwNjRceDAwIgotICAgIDE2Mzk4ICAgICAgICAgICAgIEwiXHgwMDQxXHgwMDc0XHgwMDc0XHgwMDcyXHgwMDY5XHgwMDYyXHgwMDc1XHgwMDc0XHgwMDY1XHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMwXHgwMDdEXHgwMDI3XHgwMDIwXHgwMDcyXHgwMDY1XHgwMDY2XHgwMDY1XHgwMDcyXHgwMDczXHgwMDIwXHgwMDc0XHgwMDZGXHgwMDIwXHgwMDYxXHgwMDZFXHgwMDIwXHgwMDc1XHgwMDZFXHgwMDZCXHgwMDZFXHgwMDZGXHgwMDc3XHgwMDZFXHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDYxXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMxXHgwMDdEXHgwMDI3XHgwMCIKLSAgICAxNjM5OSAgICAgICAgICAgICBMIlx4MDA0NVx4MDA2Q1x4MDA2NVx4MDA2RFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDAyN1x4MDA3Qlx4MDAzMFx4MDA3RFx4MDAyN1x4MDAyMFx4MDA3N1x4MDA2MVx4MDA3M1x4MDAyMFx4MDA3NVx4MDA3M1x4MDA2NVx4MDA2NFx4MDAyMFx4MDA2OVx4MDA2RVx4MDAyMFx4MDA3NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA0NFx4MDA0Rlx4MDA0M1x4MDA1NFx4MDA1OVx4MDA1MFx4MDA0NVx4MDAyMFx4MDA2Mlx4MDA3NVx4MDA3NFx4MDAyMFx4MDA2RVx4MDA2NVx4MDA3Nlx4MDA2NVx4MDA3Mlx4MDAyMFx4MDA2NFx4MDA2NVx4MDA2M1x4MDA2Q1x4MDA2MVx4MDA3Mlx4MDA2NVx4MDA2NFx4MDAiCi0gICAgMTY0MDAgICAgICAgICAgICAgTCJceDAwNDVceDAwNkRceDAwNzBceDAwNzRceDAwNzlceDAwMjBceDAwNjNceDAwNkZceDAwNkVceDAwNzRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNjlceDAwNjRceDAwMjBceDAwNjZceDAwNkZceDAwNzJceDAwMjBceDAwNjNceDAwNkZceDAwNkVceDAwNzRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwNkRceDAwNkZceDAwNjRceDAwNjVceDAwNkNceDAwM0FceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwIgotICAgIDE2NDAxICAgICAgICAgICAgIEwiXHgwMDQxXHgwMDc0XHgwMDc0XHgwMDcyXHgwMDY5XHgwMDYyXHgwMDc1XHgwMDc0XHgwMDY1XHgwMDIwXHgwMDI3XHgwMDdCXHgwMDdCXHgwMDMwXHgwMDdEXHgwMDdEXHgwMDdCXHgwMDMxXHgwMDdEXHgwMDI3XHgwMDIwXHgwMDY5XHgwMDczXHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDY0XHgwMDY1XHgwMDYzXHgwMDZDXHgwMDYxXHgwMDcyXHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY2XHgwMDZGXHgwMDcyXHgwMDIwXHgwMDY1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMyXHgwMDdEXHgwMDI3XHgwMCIKLSAgICAxNjQwMiAgICAgICAgICAgICBMIlx4MDA0MVx4MDA3NFx4MDA3NFx4MDA3Mlx4MDA2OVx4MDA2Mlx4MDA3NVx4MDA3NFx4MDA2NVx4MDA3M1x4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA3NFx4MDA3OVx4MDA3MFx4MDA2NVx4MDAyMFx4MDA0NVx4MDA0RVx4MDA1NFx4MDA0OVx4MDA1NFx4MDA1OVx4MDAyRlx4MDA0NVx4MDA0RVx4MDA1NFx4MDA0OVx4MDA1NFx4MDA0OVx4MDA0NVx4MDA1M1x4MDAyMFx4MDA2RFx4MDA3NVx4MDA3M1x4MDA3NFx4MDAyMFx4MDA3Mlx4MDA2NVx4MDA2Nlx4MDA2NVx4MDA3Mlx4MDAyMFx4MDA3NFx4MDA2Rlx4MDAyMFx4MDA2MVx4MDA2RVx4MDAyMFx4MDA2NVx4MDA3OFx4MDA3NFx4MDA2NVx4MDA3Mlx4MDA2RVx4MDA2MVx4MDA2Q1x4MDAyQ1x4MDAyMFx4MDA3NVx4MDA2RVx4MDA3MFx4MDA2MVx4MDA3Mlx4MDA3M1x4MDA2NVx4MDA2NFx4MDAyMFx4MDA2NVx4MDA2RVx4MDA3NFx4MDA2OVx4MDA3NFx4MDA3OVx4MDAiCi0gICAgMTY0MDMgICAgICAgICAgICAgTCJceDAwNDFceDAwNzRceDAwNzRceDAwNzJceDAwNjlceDAwNjJceDAwNzVceDAwNzRceDAwNjVceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwMjBceDAwNzJceDAwNjVceDAwNjZceDAwNjVceDAwNzJceDAwNzNceDAwMjBceDAwNzRceDAwNkZceDAwMjBceDAwNjFceDAwNkVceDAwMjBceDAwNzVceDAwNkVceDAwNkJceDAwNkVceDAwNkZceDAwNzdceDAwNkVceDAwMjBceDAwNjVceDAwNkVceDAwNzRceDAwNjlceDAwNzRceDAwNzlceDAwMjBceDAwMjdceDAwN0JceDAwMzFceDAwN0RceDAwMjdceDAwIgotICAgIDE2NDA0ICAgICAgICAgICAgIEwiXHgwMDRFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDY1XHgwMDZFXHgwMDZGXHgwMDc1XHgwMDY3XHgwMDY4XHgwMDIwXHgwMDY1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDczXHgwMDIwXHgwMDc0XHgwMDZGXHgwMDIwXHgwMDZEXHgwMDYxXHgwMDc0XHgwMDYzXHgwMDY4XHgwMDIwXHgwMDYzXHgwMDZGXHgwMDZFXHgwMDc0XHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDZEXHgwMDZGXHgwMDY0XHgwMDY1XHgwMDZDXHgwMDIwXHgwMDNBXHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMwXHgwMDdEXHgwMDI3XHgwMCIKLSAgICAxNjQwNSAgICAgICAgICAgICBMIlx4MDA0RVx4MDA2Rlx4MDAyMFx4MDA2M1x4MDA2OFx4MDA2MVx4MDA3Mlx4MDA2MVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA3Mlx4MDAyMFx4MDA2NFx4MDA2MVx4MDA3NFx4MDA2MVx4MDAyMFx4MDA2OVx4MDA3M1x4MDAyMFx4MDA2MVx4MDA2Q1x4MDA2Q1x4MDA2Rlx4MDA3N1x4MDA2NVx4MDA2NFx4MDAyMFx4MDA2Mlx4MDA3OVx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RVx4MDA3NFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDA2RFx4MDA2Rlx4MDA2NFx4MDA2NVx4MDA2Q1x4MDAiCi0gICAgMTY0MDYgICAgICAgICAgICAgTCJceDAwNDFceDAwNzRceDAwNzRceDAwNzJceDAwNjlceDAwNjJceDAwNzVceDAwNzRceDAwNjVceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwMjBceDAwNjRceDAwNkZceDAwNjVceDAwNzNceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNkRceDAwNjFceDAwNzRceDAwNjNceDAwNjhceDAwMjBceDAwNjlceDAwNzRceDAwNzNceDAwMjBceDAwNjRceDAwNjVceDAwNjZceDAwNjlceDAwNkVceDAwNjVceDAwNjRceDAwMjBceDAwNjVceDAwNkVceDAwNzVceDAwNkRceDAwNjVceDAwNzJceDAwNjFceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwMjBceDAwNkZceDAwNzJceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwNjFceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwMjBceDAwNkNceDAwNjlceDAwNzNceDAwNzRceDAwIgotICAgIDE2NDA3ICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDc2XHgwMDYxXHgwMDZDXHgwMDc1XHgwMDY1XHgwMDczXHgwMDIwXHgwMDY2XHgwMDZGXHgwMDcyXHgwMDIwXHgwMDYxXHgwMDc0XHgwMDc0XHgwMDcyXHgwMDY5XHgwMDYyXHgwMDc1XHgwMDc0XHgwMDY1XHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMwXHgwMDdEXHgwMDI3XHgwMDIwXHgwMDZEXHgwMDc1XHgwMDczXHgwMDc0XHgwMDIwXHgwMDYyXHgwMDY1XHgwMDIwXHgwMDZFXHgwMDYxXHgwMDZEXHgwMDY1XHgwMDczXHgwMDIwXHgwMDZGXHgwMDcyXHgwMDIwXHgwMDZFXHgwMDYxXHgwMDZEXHgwMDY1XHgwMDIwXHgwMDc0XHgwMDZGXHgwMDZCXHgwMDY1XHgwMDZFXHgwMDczXHgwMCIKLSAgICAxNjQwOCAgICAgICAgICAgICBMIlx4MDA0MVx4MDA3NFx4MDA3NFx4MDA3Mlx4MDA2OVx4MDA2Mlx4MDA3NVx4MDA3NFx4MDA2NVx4MDAyMFx4MDAyN1x4MDA3Qlx4MDAzMFx4MDA3RFx4MDAyN1x4MDAyMFx4MDA2NFx4MDA2Rlx4MDA2NVx4MDA3M1x4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA3M1x4MDA3NVx4MDA3MFx4MDA3MFx4MDA2Rlx4MDA3Mlx4MDA3NFx4MDAyMFx4MDA2RFx4MDA3NVx4MDA2Q1x4MDA3NFx4MDA2OVx4MDA3MFx4MDA2Q1x4MDA2NVx4MDAyMFx4MDA3Nlx4MDA2MVx4MDA2Q1x4MDA3NVx4MDA2NVx4MDA3M1x4MDAiCi0gICAgMTY0MDkgICAgICAgICAgICAgTCJceDAwNDFceDAwNzRceDAwNzRceDAwNzJceDAwNjlceDAwNjJceDAwNzVceDAwNzRceDAwNjVceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwMjBceDAwNjhceDAwNjFceDAwNzNceDAwMjBceDAwNjFceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNzVceDAwNjVceDAwMjBceDAwNzRceDAwNjhceDAwNjFceDAwNzRceDAwMjBceDAwNjRceDAwNkZceDAwNjVceDAwNzNceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNkRceDAwNjFceDAwNzRceDAwNjNceDAwNjhceDAwMjBceDAwNjlceDAwNzRceDAwNzNceDAwMjBceDAwMjNceDAwNDZceDAwNDlceDAwNThceDAwNDVceDAwNDRceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNzVceDAwNjVceDAwIgotICAgIDE2NDEwICAgICAgICAgICAgIEwiXHgwMDQ1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDc0XHgwMDc5XHgwMDcwXHgwMDY1XHgwMDczXHgwMDIwXHgwMDYzXHgwMDYxXHgwMDZFXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYyXHgwMDY1XHgwMDIwXHgwMDY0XHgwMDc1XHgwMDcwXHgwMDZDXHgwMDY5XHgwMDYzXHgwMDYxXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY5XHgwMDZFXHgwMDIwXHgwMDREXHgwMDY5XHgwMDc4XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDYzXHgwMDZGXHgwMDZFXHgwMDc0XHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDZEXHgwMDZGXHgwMDY0XHgwMDY1XHgwMDZDXHgwMDczXHgwMCIKLUVORAotU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKLUJFR0lOCi0gICAgODE5NCAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNjlceDAwNkVceDAwNjRceDAwNjVceDAwNzhceDAwMjBceDAwNjlceDAwNzNceDAwMjBceDAwNjJceDAwNjVceDAwNzlceDAwNkZceDAwNkVceDAwNjRceDAwMjBceDAwNzRceDAwNjhceDAwNjVceDAwMjBceDAwNjFceDAwNzJceDAwNzJceDAwNjFceDAwNzlceDAwMjBceDAwNjJceDAwNkZceDAwNzVceDAwNkVceDAwNjRceDAwNzNceDAwMjBceDAwMjBceDAwIgotICAgIDgxOTUgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDZFXHgwMDY1XHgwMDc3XHgwMDIwXHgwMDczXHgwMDY5XHgwMDdBXHgwMDY1XHgwMDIwXHgwMDY5XHgwMDczXHgwMDIwXHgwMDZDXHgwMDY1XHgwMDczXHgwMDczXHgwMDIwXHgwMDc0XHgwMDY4XHgwMDYxXHgwMDZFXHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDZGXHgwMDZDXHgwMDY0XHgwMDIwXHgwMDZGXHgwMDZFXHgwMDY1XHgwMCIKLSAgICA4MTk2ICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2Mlx4MDA2OVx4MDA3NFx4MDAyMFx4MDA2OVx4MDA2RVx4MDA2NFx4MDA2NVx4MDA3OFx4MDAyMFx4MDA3N1x4MDA2MVx4MDA3M1x4MDAyMFx4MDA2Mlx4MDA2NVx4MDA3OVx4MDA2Rlx4MDA2RVx4MDA2NFx4MDAyMFx4MDA3NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA3M1x4MDA2NVx4MDA3NFx4MDAyMFx4MDA3M1x4MDA2OVx4MDA3QVx4MDA2NVx4MDAiCi0gICAgODE5NyAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNzBceDAwNkZceDAwNjlceDAwNkVceDAwNzRceDAwNjVceDAwNzJceDAwMjBceDAwNjhceDAwNjFceDAwNzNceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNjJceDAwNjVceDAwNjVceDAwNkVceDAwMjBceDAwNzNceDAwNjVceDAwNzRceDAwIgotICAgIDgxOTggICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDY1XHgwMDZFXHgwMDc1XHgwMDZEXHgwMDY1XHgwMDcyXHgwMDYxXHgwMDc0XHgwMDZGXHgwMDcyXHgwMDIwXHgwMDYzXHgwMDZGXHgwMDZFXHgwMDc0XHgwMDYxXHgwMDY5XHgwMDZFXHgwMDczXHgwMDIwXHgwMDZFXHgwMDZGXHgwMDIwXHgwMDZEXHgwMDZGXHgwMDcyXHgwMDY1XHgwMDIwXHgwMDY1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDczXHgwMCIKLSAgICA4MTk5ICAgICAgICAgICAgICBMIlx4MDA0M1x4MDA2Rlx4MDA3NVx4MDA2Q1x4MDA2NFx4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2Rlx4MDA3MFx4MDA2NVx4MDA2RVx4MDAyMFx4MDA2Nlx4MDA2OVx4MDA2Q1x4MDA2NVx4MDAzQVx4MDAyMFx4MDA3Qlx4MDAzMFx4MDA3RFx4MDAiCi0gICAgODIwMCAgICAgICAgICAgICAgTCJceDAwNDNceDAwNkZceDAwNzVceDAwNkNceDAwNjRceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNzFceDAwNzVceDAwNjVceDAwNzJceDAwNzlceDAwMjBceDAwNzRceDAwNjhceDAwNjVceDAwMjBceDAwNjNceDAwNzVceDAwNzJceDAwNzJceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwNjZceDAwNjlceDAwNkNceDAwNjVceDAwMjBceDAwNzBceDAwNkZceDAwNzNceDAwNjlceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwIgotICAgIDgyMDEgICAgICAgICAgICAgIEwiXHgwMDQzXHgwMDZGXHgwMDc1XHgwMDZDXHgwMDY0XHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYzXHgwMDZDXHgwMDZGXHgwMDczXHgwMDY1XHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDY2XHgwMDY5XHgwMDZDXHgwMDY1XHgwMCIKLSAgICA4MjAyICAgICAgICAgICAgICBMIlx4MDA0M1x4MDA2Rlx4MDA3NVx4MDA2Q1x4MDA2NFx4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA3M1x4MDA2NVx4MDA2NVx4MDA2Qlx4MDAyMFx4MDA3NFx4MDA2Rlx4MDAyMFx4MDA2NVx4MDA2RVx4MDA2NFx4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA2Nlx4MDA2OVx4MDA2Q1x4MDA2NVx4MDAiCi0gICAgODIwMyAgICAgICAgICAgICAgTCJceDAwNDNceDAwNkZceDAwNzVceDAwNkNceDAwNjRceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNzNceDAwNjVceDAwNjVceDAwNkJceDAwMjBceDAwNzRceDAwNkZceDAwMjBceDAwNzJceDAwNjVceDAwNzFceDAwNzVceDAwNjlceDAwNzJceDAwNjVceDAwNjRceDAwMjBceDAwNzBceDAwNkZceDAwNzNceDAwNjlceDAwNzRceDAwNjlceDAwNkZceDAwNkVceDAwMjBceDAwNjlceDAwNkVceDAwMjBceDAwNjZceDAwNjlceDAwNkNceDAwNjVceDAwIgotICAgIDgyMDQgICAgICAgICAgICAgIEwiXHgwMDQzXHgwMDZGXHgwMDc1XHgwMDZDXHgwMDY0XHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDY0XHgwMDc1XHgwMDcwXHgwMDZDXHgwMDY5XHgwMDYzXHgwMDYxXHgwMDc0XHgwMDY1XHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDY4XHgwMDYxXHgwMDZFXHgwMDY0XHgwMDZDXHgwMDY1XHgwMCIKLSAgICA4MjA1ICAgICAgICAgICAgICBMIlx4MDA0M1x4MDA2Rlx4MDA3NVx4MDA2Q1x4MDA2NFx4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA3Mlx4MDA2NVx4MDA2MVx4MDA2NFx4MDAyMFx4MDA2NFx4MDA2MVx4MDA3NFx4MDA2MVx4MDAyMFx4MDA2Nlx4MDA3Mlx4MDA2Rlx4MDA2RFx4MDAyMFx4MDA2Nlx4MDA2OVx4MDA2Q1x4MDA2NVx4MDAiCi0gICAgODIwNiAgICAgICAgICAgICAgTCJceDAwNDNceDAwNkZceDAwNzVceDAwNkNceDAwNjRceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNzJceDAwNjVceDAwNzNceDAwNjVceDAwNzRceDAwMjBceDAwNjZceDAwNjlceDAwNkNceDAwNjVceDAwMjBceDAwNzRceDAwNkZceDAwMjBceDAwNjJceDAwNjVceDAwNjdceDAwNjlceDAwNkVceDAwNkVceDAwNjlceDAwNkVceDAwNjdceDAwIgotICAgIDgyMDcgICAgICAgICAgICAgIEwiXHgwMDQzXHgwMDZGXHgwMDc1XHgwMDZDXHgwMDY0XHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYxXHgwMDYzXHgwMDY1XHgwMDcyXHgwMDc0XHgwMDYxXHgwMDY5XHgwMDZFXHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDY2XHgwMDY5XHgwMDZDXHgwMDY1XHgwMDIwXHgwMDczXHgwMDY5XHgwMDdBXHgwMDY1XHgwMCIKLSAgICA4MjA4ICAgICAgICAgICAgICBMIlx4MDA0M1x4MDA2Rlx4MDA3NVx4MDA2Q1x4MDA2NFx4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2NFx4MDA2NVx4MDA3NFx4MDA2NVx4MDA3Mlx4MDA2RFx4MDA2OVx4MDA2RVx4MDA2NVx4MDAyMFx4MDA2Mlx4MDA2MVx4MDA3M1x4MDA2NVx4MDAyMFx4MDA3MFx4MDA2MVx4MDA3NFx4MDA2OFx4MDA2RVx4MDA2MVx4MDA2RFx4MDA2NVx4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA3NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2Nlx4MDA2OVx4MDA2Q1x4MDA2NVx4MDAiCi0gICAgODIwOSAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNjhceDAwNjFceDAwNzNceDAwNjhceDAwMjBceDAwNkRceDAwNkZceDAwNjRceDAwNzVceDAwNkNceDAwNzVceDAwNzNceDAwMjBceDAwNjNceDAwNjFceDAwNkVceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNjJceDAwNjVceDAwMjBceDAwN0FceDAwNjVceDAwNzJceDAwNkZceDAwIgotICAgIDgyMTAgICAgICAgICAgICAgIEwiXHgwMDQ4XHgwMDYxXHgwMDczXHgwMDY4XHgwMDY5XHgwMDZFXHgwMDY3XHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDZCXHgwMDY1XHgwMDc5XHgwMDIwXHgwMDcyXHgwMDY1XHgwMDc0XHgwMDc1XHgwMDcyXHgwMDZFXHgwMDY1XHgwMDY0XHgwMDIwXHgwMDYxXHgwMDZFXHgwMDIwXHgwMDY5XHgwMDZFXHgwMDc2XHgwMDYxXHgwMDZDXHgwMDY5XHgwMDY0XHgwMDIwXHgwMDYyXHgwMDYxXHgwMDY0XHgwMDIwXHgwMDY4XHgwMDYxXHgwMDczXHgwMDY4XHgwMDIwXHgwMDc2XHgwMDYxXHgwMDZDXHgwMDc1XHgwMDY1XHgwMCIKLSAgICA4MjExICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2Qlx4MDA2NVx4MDA3OVx4MDAyMFx4MDAyN1x4MDA3Qlx4MDAzMFx4MDA3RFx4MDAyN1x4MDAyMFx4MDA2M1x4MDA2Rlx4MDA3NVx4MDA2Q1x4MDA2NFx4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2Mlx4MDA2NVx4MDAyMFx4MDA2Nlx4MDA2Rlx4MDA3NVx4MDA2RVx4MDA2NFx4MDAyMFx4MDA2OVx4MDA2RVx4MDAyMFx4MDA3NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2OFx4MDA2MVx4MDA3M1x4MDA2OFx4MDAyMFx4MDA3NFx4MDA2MVx4MDA2Mlx4MDA2Q1x4MDA2NVx4MDAiCi0gICAgODIxMiAgICAgICAgICAgICAgTCJceDAwNDNceDAwNkZceDAwNzVceDAwNkNceDAwNjRceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNjNceDAwNzJceDAwNjVceDAwNjFceDAwNzRceDAwNjVceDAwMjBceDAwNkRceDAwNzVceDAwNzRceDAwNjVceDAwNzhceDAwIgotICAgIDgyMTMgICAgICAgICAgICAgIEwiXHgwMDQzXHgwMDZGXHgwMDc1XHgwMDZDXHgwMDY0XHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYzXHgwMDZDXHgwMDZGXHgwMDczXHgwMDY1XHgwMDIwXHgwMDZEXHgwMDc1XHgwMDc0XHgwMDY1XHgwMDc4XHgwMCIKLSAgICA4MjE0ICAgICAgICAgICAgICBMIlx4MDA0M1x4MDA2Rlx4MDA3NVx4MDA2Q1x4MDA2NFx4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2Q1x4MDA2Rlx4MDA2M1x4MDA2Qlx4MDAyMFx4MDA2RFx4MDA3NVx4MDA3NFx4MDA2NVx4MDA3OFx4MDAiCi0gICAgODIxNSAgICAgICAgICAgICAgTCJceDAwNDNceDAwNkZceDAwNzVceDAwNkNceDAwNjRceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNzVceDAwNkVceDAwNkNceDAwNkZceDAwNjNceDAwNkJceDAwMjBceDAwNkRceDAwNzVceDAwNzRceDAwNjVceDAwNzhceDAwIgotICAgIDgyMTYgICAgICAgICAgICAgIEwiXHgwMDQzXHgwMDZGXHgwMDc1XHgwMDZDXHgwMDY0XHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDY0XHgwMDY1XHgwMDczXHgwMDc0XHgwMDcyXHgwMDZGXHgwMDc5XHgwMDIwXHgwMDZEXHgwMDc1XHgwMDc0XHgwMDY1XHgwMDc4XHgwMCIKLSAgICA4MjE3ICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2NVx4MDA2Q1x4MDA2NVx4MDA2RFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDA3Qlx4MDAzMFx4MDA3RFx4MDAyMFx4MDA2MVx4MDA2Q1x4MDA3Mlx4MDA2NVx4MDA2MVx4MDA2NFx4MDA3OVx4MDAyMFx4MDA2NVx4MDA3OFx4MDA2OVx4MDA3M1x4MDA3NFx4MDA3M1x4MDAiCi0gICAgODIxOCAgICAgICAgICAgICAgTCJceDAwNDhceDAwNjFceDAwNzNceDAwNjhceDAwNjlceDAwNkVceDAwNjdceDAwMjBceDAwNzRceDAwNjhceDAwNjVceDAwMjBceDAwNkJceDAwNjVceDAwNzlceDAwMjBceDAwNzJceDAwNjVceDAwNzRceDAwNzVceDAwNzJceDAwNkVceDAwNjVceDAwNjRceDAwMjBceDAwNjFceDAwNkVceDAwMjBceDAwNjlceDAwNkVceDAwNzZceDAwNjFceDAwNkNceDAwNjlceDAwNjRceDAwMjBceDAwNjJceDAwNjFceDAwNjRceDAwMjBceDAwNjhceDAwNjFceDAwNzNceDAwNjhceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNzVceDAwNjVceDAwIgotICAgIDgyMTkgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDcwXHgwMDYxXHgwMDczXHgwMDczXHgwMDY1XHgwMDY0XHgwMDIwXHgwMDY5XHgwMDY0XHgwMDIwXHgwMDY5XHgwMDczXHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDc2XHgwMDYxXHgwMDZDXHgwMDY5XHgwMDY0XHgwMDIwXHgwMDY2XHgwMDZGXHgwMDcyXHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY5XHgwMDczXHgwMDIwXHgwMDcwXHgwMDZGXHgwMDZGXHgwMDZDXHgwMCIKLSAgICA4MjIwICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2RFx4MDA2Rlx4MDA2NFx4MDA3NVx4MDA2Q1x4MDA3NVx4MDA3M1x4MDAyMFx4MDA3Nlx4MDA2MVx4MDA2Q1x4MDA3NVx4MDA2NVx4MDAyMFx4MDA2M1x4MDA2MVx4MDA2RVx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2Mlx4MDA2NVx4MDAyMFx4MDA3QVx4MDA2NVx4MDA3Mlx4MDA2Rlx4MDAiCi0gICAgODIyMSAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNjlceDAwNkVceDAwNjRceDAwNjVceDAwNzhceDAwMjBceDAwNjlceDAwNzNceDAwMjBceDAwNzBceDAwNjFceDAwNzNceDAwNzRceDAwMjBceDAwNzRceDAwNjhceDAwNjVceDAwMjBceDAwNzRceDAwNkZceDAwNzBceDAwMjBceDAwNkZceDAwNjZceDAwMjBceDAwNzNceDAwNzRceDAwNjFceDAwNjNceDAwNkJceDAwIgotICAgIDgyMjIgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDczXHgwMDc0XHgwMDYxXHgwMDYzXHgwMDZCXHgwMDIwXHgwMDY5XHgwMDczXHgwMDIwXHgwMDY1XHgwMDZEXHgwMDcwXHgwMDc0XHgwMDc5XHgwMDJDXHgwMDIwXHgwMDYzXHgwMDYxXHgwMDZFXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYxXHgwMDYzXHgwMDYzXHgwMDY1XHgwMDczXHgwMDczXHgwMDIwXHgwMDZEXHgwMDY1XHgwMDZEXHgwMDYyXHgwMDY1XHgwMDcyXHgwMDczXHgwMCIKLSAgICA4MjIzICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA3NFx4MDA2MVx4MDA3Mlx4MDA2N1x4MDA2NVx4MDA3NFx4MDAyMFx4MDA2Mlx4MDA3NVx4MDA2Nlx4MDA2Nlx4MDA2NVx4MDA3Mlx4MDAyMFx4MDA2M1x4MDA2MVx4MDA2RVx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2OFx4MDA2MVx4MDA3Nlx4MDA2NVx4MDAyMFx4MDA2MVx4MDAyMFx4MDA2RFx4MDA2MVx4MDA3OFx4MDAyMFx4MDA3M1x4MDA2OVx4MDA3QVx4MDA2NVx4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA3QVx4MDA2NVx4MDA3Mlx4MDA2Rlx4MDAiCi0gICAgODIyNCAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNjdceDAwNjlceDAwNzZceDAwNjVceDAwNkVceDAwMjBceDAwNzJceDAwNjFceDAwNjRceDAwNjlceDAwNzhceDAwMjBceDAwNjlceDAwNzNceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNzNceDAwNzVceDAwNzBceDAwNzBceDAwNkZceDAwNzJceDAwNzRceDAwNjVceDAwNjRceDAwMkVceDAwMjBceDAwNTVceDAwNzNceDAwNjVceDAwMjBceDAwMzJceDAwMkNceDAwMjBceDAwMzhceDAwMkNceDAwMjBceDAwMzFceDAwMzBceDAwMkNceDAwMjBceDAwNkZceDAwNzJceDAwMjBceDAwMzFceDAwMzZceDAwIgotICAgIDgyMjUgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDc0XHgwMDYxXHgwMDcyXHgwMDY3XHgwMDY1XHgwMDc0XHgwMDIwXHgwMDYyXHgwMDc1XHgwMDY2XHgwMDY2XHgwMDY1XHgwMDcyXHgwMDIwXHgwMDY5XHgwMDczXHgwMDIwXHgwMDc0XHgwMDZGXHgwMDZGXHgwMDIwXHgwMDczXHgwMDZEXHgwMDYxXHgwMDZDXHgwMDZDXHgwMDIwXHgwMDc0XHgwMDZGXHgwMDIwXHgwMDYxXHgwMDYzXHgwMDYzXHgwMDY1XHgwMDcwXHgwMDc0XHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDcyXHgwMDY1XHgwMDczXHgwMDc1XHgwMDZDXHgwMDc0XHgwMDczXHgwMCIKLSAgICA4MjI2ICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA3M1x4MDA3NFx4MDA2MVx4MDA3Mlx4MDA3NFx4MDAyMFx4MDA2OVx4MDA2RVx4MDA2NFx4MDA2NVx4MDA3OFx4MDAyMFx4MDA2OVx4MDA3M1x4MDAyMFx4MDA3MFx4MDA2MVx4MDA3M1x4MDA3NFx4MDAyMFx4MDA3NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2NVx4MDA2RVx4MDA2NFx4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA3NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA3M1x4MDA3NFx4MDA3Mlx4MDA2OVx4MDA2RVx4MDA2N1x4MDAiCi0gICAgODIyNyAgICAgICAgICAgICAgTCJceDAwNDNceDAwNkZceDAwNzVceDAwNkNceDAwNjRceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNzdceDAwNzJceDAwNjlceDAwNzRceDAwNjVceDAwMjBceDAwNzRceDAwNkZceDAwMjBceDAwNzNceDAwNzRceDAwNjFceDAwNkVceDAwNjRceDAwNjFceDAwNzJceDAwNjRceDAwMjBceDAwNjVceDAwNzJceDAwNzJceDAwIgotICAgIDgyMjggICAgICAgICAgICAgIEwiXHgwMDQzXHgwMDZGXHgwMDc1XHgwMDZDXHgwMDY0XHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDc3XHgwMDcyXHgwMDY5XHgwMDc0XHgwMDY1XHgwMDIwXHgwMDc0XHgwMDZGXHgwMDIwXHgwMDczXHgwMDc0XHgwMDYxXHgwMDZFXHgwMDY0XHgwMDYxXHgwMDcyXHgwMDY0XHgwMDIwXHgwMDZGXHgwMDc1XHgwMDc0XHgwMCIKLSAgICA4MjI5ICAgICAgICAgICAgICBMIlx4MDA0M1x4MDA2Rlx4MDA3NVx4MDA2Q1x4MDA2NFx4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA3N1x4MDA3Mlx4MDA2OVx4MDA3NFx4MDA2NVx4MDAyMFx4MDA3NFx4MDA2Rlx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RVx4MDA3M1x4MDA2Rlx4MDA2Q1x4MDA2NVx4MDAiCi0gICAgODIzMCAgICAgICAgICAgICAgTCJceDAwNTNceDAwNzRceDAwNzJceDAwNjlceDAwNkVceDAwNjdceDAwMjBceDAwNzBceDAwNkZceDAwNkZceDAwNkNceDAwMjBceDAwNjlceDAwNjRceDAwMjBceDAwNzdceDAwNjFceDAwNzNceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNkNceDAwNjVceDAwNjdceDAwNjFceDAwNkNceDAwIgotICAgIDgyMzEgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDU1XHgwMDUyXHgwMDRDXHgwMDIwXHgwMDc3XHgwMDYxXHgwMDczXHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYzXHgwMDZGXHgwMDcyXHgwMDcyXHgwMDY1XHgwMDYzXHgwMDc0XHgwMDZDXHgwMDc5XHgwMDIwXHgwMDY2XHgwMDZGXHgwMDcyXHgwMDZEXHgwMDY1XHgwMDY0XHgwMCIKLSAgICA4MjMyICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA1NVx4MDA1Mlx4MDA0Q1x4MDAyMFx4MDA3NVx4MDA3M1x4MDA2NVx4MDA2NFx4MDAyMFx4MDA2MVx4MDA2RVx4MDAyMFx4MDA3NVx4MDA2RVx4MDA3M1x4MDA3NVx4MDA3MFx4MDA3MFx4MDA2Rlx4MDA3Mlx4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA3MFx4MDA3Mlx4MDA2Rlx4MDA3NFx4MDA2Rlx4MDA2M1x4MDA2Rlx4MDA2Q1x4MDAiCi0gICAgODIzMyAgICAgICAgICAgICAgTCJceDAwNTVceDAwNkVceDAwNzNceDAwNzVceDAwNzBceDAwNzBceDAwNkZceDAwNzJceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwNTVceDAwNTJceDAwNENceDAwMjBceDAwNzBceDAwNzJceDAwNkZceDAwNzRceDAwNkZceDAwNjNceDAwNkZceDAwNkNceDAwM0FceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwIgotICAgIDgyMzQgICAgICAgICAgICAgIEwiXHgwMDRGXHgwMDZFXHgwMDZDXHgwMDc5XHgwMDIwXHgwMDZDXHgwMDZGXHgwMDYzXHgwMDYxXHgwMDZDXHgwMDY4XHgwMDZGXHgwMDczXHgwMDc0XHgwMDIwXHgwMDY5XHgwMDczXHgwMDIwXHgwMDczXHgwMDc1XHgwMDcwXHgwMDcwXHgwMDZGXHgwMDcyXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDYxXHgwMDc0XHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY5XHgwMDczXHgwMDIwXHgwMDc0XHgwMDY5XHgwMDZEXHgwMDY1XHgwMCIKLSAgICA4MjM1ICAgICAgICAgICAgICBMIlx4MDA0RVx4MDA2Rlx4MDAyMFx4MDA3MFx4MDA3Mlx4MDA2Rlx4MDA3NFx4MDA2Rlx4MDA2M1x4MDA2Rlx4MDA2Q1x4MDAyMFx4MDA3MFx4MDA3Mlx4MDA2NVx4MDA2Nlx4MDA2OVx4MDA3OFx4MDAyMFx4MDA3MFx4MDA3Mlx4MDA2NVx4MDA3M1x4MDA2NVx4MDA2RVx4MDA3NFx4MDAiCi0gICAgODIzNiAgICAgICAgICAgICAgTCJceDAwNDVceDAwNzhceDAwNzBceDAwNjVceDAwNjNceDAwNzRceDAwNjVceDAwNjRceDAwMjBceDAwMkZceDAwMkZceDAwMjBceDAwNjFceDAwNjZceDAwNzRceDAwNjVceDAwNzJceDAwMjBceDAwNzBceDAwNzJceDAwNkZceDAwNzRceDAwNkZceDAwNjNceDAwNkZceDAwNkNceDAwIgotICAgIDgyMzcgICAgICAgICAgICAgIEwiXHgwMDI1XHgwMDIwXHgwMDZEXHgwMDc1XHgwMDczXHgwMDc0XHgwMDIwXHgwMDYyXHgwMDY1XHgwMDIwXHgwMDY2XHgwMDZGXHgwMDZDXHgwMDZDXHgwMDZGXHgwMDc3XHgwMDY1XHgwMDY0XHgwMDIwXHgwMDYyXHgwMDc5XHgwMDIwXHgwMDc0XHgwMDc3XHgwMDZGXHgwMDIwXHgwMDY4XHgwMDY1XHgwMDc4XHgwMDIwXHgwMDY0XHgwMDY5XHgwMDY3XHgwMDY5XHgwMDc0XHgwMDczXHgwMCIKLSAgICA4MjM4ICAgICAgICAgICAgICBMIlx4MDA1NVx4MDA2RVx4MDA3NFx4MDA2NVx4MDA3Mlx4MDA2RFx4MDA2OVx4MDA2RVx4MDA2MVx4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA2OFx4MDA2Rlx4MDA3M1x4MDA3NFx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RFx4MDA3MFx4MDA2Rlx4MDA2RVx4MDA2NVx4MDA2RVx4MDA3NFx4MDAiCi0gICAgODIzOSAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNzBceDAwNjFceDAwNzNceDAwNzNceDAwNjVceDAwNjRceDAwMjBceDAwNjlceDAwNkVceDAwNjRceDAwNjVceDAwNzhceDAwMjBceDAwNjlceDAwNzNceDAwMjBceDAwNzBceDAwNjFceDAwNzNceDAwNzRceDAwMjBceDAwNzRceDAwNjhceDAwNjVceDAwMjBceDAwNjVceDAwNkVceDAwNjRceDAwMjBceDAwNkZceDAwNjZceDAwMjBceDAwNzRceDAwNjhceDAwNjVceDAwMjBceDAwNzZceDAwNjVceDAwNjNceDAwNzRceDAwNkZceDAwNzJceDAwIgotICAgIDgyNDAgICAgICAgICAgICAgIEwiXHgwMDUwXHgwMDYxXHgwMDcyXHgwMDczXHgwMDY1XHgwMDIwXHgwMDZEXHgwMDYxXHgwMDc5XHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYyXHgwMDY1XHgwMDIwXHgwMDYzXHgwMDYxXHgwMDZDXHgwMDZDXHgwMDY1XHgwMDY0XHgwMDIwXHgwMDc3XHgwMDY4XHgwMDY5XHgwMDZDXHgwMDY1XHgwMDIwXHgwMDcwXHgwMDYxXHgwMDcyXHgwMDczXHgwMDY5XHgwMDZFXHgwMDY3XHgwMCIKLSAgICA4MjQxICAgICAgICAgICAgICBMIlx4MDA0MVx4MDAyMFx4MDA0NFx4MDA0Rlx4MDA0M1x4MDA1NFx4MDA1OVx4MDA1MFx4MDA0NVx4MDAyMFx4MDA3N1x4MDA2MVx4MDA3M1x4MDAyMFx4MDA3M1x4MDA2NVx4MDA2NVx4MDA2RVx4MDAyMFx4MDA2Mlx4MDA3NVx4MDA3NFx4MDAyMFx4MDA3NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2OVx4MDA2RVx4MDA3M1x4MDA3NFx4MDA2MVx4MDA2Q1x4MDA2Q1x4MDA2NVx4MDA2NFx4MDAyMFx4MDA3Nlx4MDA2MVx4MDA2Q1x4MDA2OVx4MDA2NFx4MDA2MVx4MDA3NFx4MDA2Rlx4MDA3Mlx4MDAyMFx4MDA2NFx4MDA2Rlx4MDA2NVx4MDA3M1x4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA3NVx4MDA2RVx4MDA2NFx4MDA2NVx4MDA3Mlx4MDA3M1x4MDA3NFx4MDA2MVx4MDA2RVx4MDA2NFx4MDAyMFx4MDA0NFx4MDA1NFx4MDA0NFx4MDA3M1x4MDAiCi0gICAgODI0MiAgICAgICAgICAgICAgTCJceDAwNDNceDAwNkZceDAwNzVceDAwNkNceDAwNjRceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNkZceDAwNzBceDAwNjVceDAwNkVceDAwMjBceDAwNDRceDAwNTRceDAwNDRceDAwMjBceDAwNjZceDAwNjlceDAwNkNceDAwNjVceDAwMjBceDAwMjdceDAwN0JceDAwMzBceDAwN0RceDAwMjdceDAwIgotICAgIDgyNDMgICAgICAgICAgICAgIEwiXHgwMDQzXHgwMDZGXHgwMDc1XHgwMDZDXHgwMDY0XHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDZGXHgwMDcwXHgwMDY1XHgwMDZFXHgwMDIwXHgwMDY1XHgwMDc4XHgwMDc0XHgwMDY1XHgwMDcyXHgwMDZFXHgwMDYxXHgwMDZDXHgwMDIwXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDY5XHgwMDc0XHgwMDc5XHgwMDIwXHgwMDI3XHgwMDdCXHgwMDMwXHgwMDdEXHgwMDI3XHgwMCIKLSAgICA4MjQ0ICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2NVx4MDA2RVx4MDA2NFx4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA2OVx4MDA2RVx4MDA3MFx4MDA3NVx4MDA3NFx4MDAyMFx4MDA3N1x4MDA2MVx4MDA3M1x4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2NVx4MDA3OFx4MDA3MFx4MDA2NVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA2NFx4MDAiCi0gICAgODI0NSAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNjlceDAwNkVceDAwNjRceDAwNjVceDAwNzhceDAwMjBceDAwNjdceDAwNjlceDAwNzZceDAwNjVceDAwNkVceDAwMjBceDAwNzdceDAwNjFceDAwNzNceDAwMjBceDAwNjJceDAwNjVceDAwNzlceDAwNkZceDAwNkVceDAwNjRceDAwMjBceDAwNzRceDAwNjhceDAwNjVceDAwMjBceDAwNkRceDAwNjFceDAwNzhceDAwMjBceDAwNjFceDAwNzRceDAwNzRceDAwNzJceDAwNjlceDAwNjJceDAwNzVceDAwNzRceDAwNjVceDAwMjBceDAwNjlceDAwNkVceDAwNjRceDAwNjVceDAwNzhceDAwIgotICAgIDgyNDYgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDY1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDczXHgwMDc0XHgwMDYxXHgwMDYzXHgwMDZCXHgwMDIwXHgwMDY5XHgwMDczXHgwMDIwXHgwMDY1XHgwMDZEXHgwMDcwXHgwMDc0XHgwMDc5XHgwMCIKLSAgICA4MjQ3ICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2NVx4MDA2Q1x4MDA2NVx4MDA2RFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDA3M1x4MDA3NFx4MDA2MVx4MDA2M1x4MDA2Qlx4MDAyMFx4MDA2OVx4MDA2RVx4MDA2NFx4MDA2NVx4MDA3OFx4MDAyMFx4MDA2N1x4MDA2OVx4MDA3Nlx4MDA2NVx4MDA2RVx4MDAyMFx4MDA3N1x4MDA2MVx4MDA3M1x4MDAyMFx4MDA2Mlx4MDA2NVx4MDA3OVx4MDA2Rlx4MDA2RVx4MDA2NFx4MDAyMFx4MDA3NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA3M1x4MDA3NFx4MDA2MVx4MDA2M1x4MDA2Qlx4MDAyMFx4MDA3NFx4MDA2Rlx4MDA3MFx4MDAiCi0gICAgODI0OCAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNjVceDAwNkNceDAwNjVceDAwNkRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwNzNceDAwNzRceDAwNjFceDAwNjNceDAwNkJceDAwMjBceDAwNzdceDAwNjFceDAwNzNceDAwMjBceDAwNjFceDAwNkNceDAwNzJceDAwNjVceDAwNjFceDAwNjRceDAwNzlceDAwMjBceDAwNjVceDAwNkRceDAwNzBceDAwNzRceDAwNzlceDAwMjBceDAwNzdceDAwNjhceDAwNjVceDAwNkVceDAwMjBceDAwNjFceDAwMjBceDAwNzBceDAwNkZceDAwNzBceDAwMjBceDAwNzJceDAwNjVceDAwNzFceDAwNzVceDAwNjVceDAwNzNceDAwNzRceDAwMjBceDAwNkZceDAwNjNceDAwNjNceDAwNzVceDAwNzJceDAwNjVceDAwNjRceDAwIgotICAgIDgyNDkgICAgICAgICAgICAgIEwiXHgwMDQxXHgwMDIwXHgwMDcwXHgwMDYxXHgwMDcyXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDZGXHgwMDcwXHgwMDY1XHgwMDcyXHgwMDYxXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMDIwXHgwMDc3XHgwMDYxXHgwMDczXHgwMDIwXHgwMDcyXHgwMDY1XHgwMDcxXHgwMDc1XHgwMDY1XHgwMDczXHgwMDc0XHgwMDY1XHgwMDY0XHgwMDJDXHgwMDIwXHgwMDYyXHgwMDc1XHgwMDc0XHgwMDIwXHgwMDZGXHgwMDZFXHgwMDZDXHgwMDc5XHgwMDIwXHgwMDZGXHgwMDZFXHgwMDY1XHgwMDIwXHgwMDY1XHgwMDZDXHgwMDY1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDY5XHgwMDczXHgwMDIwXHgwMDZGXHgwMDZFXHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDczXHgwMDc0XHgwMDYxXHgwMDYzXHgwMDZCXHgwMCIKLSAgICA4MjUwICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2OVx4MDA2RVx4MDA2NFx4MDA2OVx4MDA2M1x4MDA2MVx4MDA3NFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA3Mlx4MDA2NVx4MDA2MVx4MDA2NFx4MDA2NVx4MDA3Mlx4MDAyMFx4MDA2OVx4MDA2NFx4MDAyMFx4MDA3N1x4MDA2MVx4MDA3M1x4MDAyMFx4MDA2RVx4MDA2NVx4MDA3Nlx4MDA2NVx4MDA3Mlx4MDAyMFx4MDA2Nlx4MDA2Rlx4MDA3NVx4MDA2RVx4MDA2NFx4MDAiCi0gICAgODI1MSAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNjFceDAwNzVceDAwNzRceDAwNkZceDAwMjBceDAwNjVceDAwNkVceDAwNjNceDAwNkZceDAwNjRceDAwNjlceDAwNkVceDAwNjdceDAwMjBceDAwNjVceDAwNkVceDAwNzVceDAwNkRceDAwMjBceDAwNjhceDAwNjFceDAwNzNceDAwMjBceDAwNjFceDAwNkVceDAwMjBceDAwNzVceDAwNkVceDAwNkJceDAwNkVceDAwNkZceDAwNzdceDAwNkVceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNzVceDAwNjVceDAwIgotICAgIDgyNTIgICAgICAgICAgICAgIEwiXHgwMDQzXHgwMDZGXHgwMDc1XHgwMDZDXHgwMDY0XHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYzXHgwMDcyXHgwMDY1XHgwMDYxXHgwMDc0XHgwMDY1XHgwMDIwXHgwMDYxXHgwMDIwXHgwMDYzXHgwMDZGXHgwMDZFXHgwMDc2XHgwMDY1XHgwMDcyXHgwMDc0XHgwMDY1XHgwMDcyXHgwMDIwXHgwMDY2XHgwMDZGXHgwMDcyXHgwMDIwXHgwMDY1XHgwMDZFXHgwMDYzXHgwMDZGXHgwMDY0XHgwMDY5XHgwMDZFXHgwMDY3XHgwMDNBXHgwMDIwXHgwMDdCXHgwMDMwXHgwMDdEXHgwMCIKLSAgICA4MjUzICAgICAgICAgICAgICBMIlx4MDA0M1x4MDA2Rlx4MDA3NVx4MDA2Q1x4MDA2NFx4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2NFx4MDA2NVx4MDA2M1x4MDA2Rlx4MDA2NFx4MDA2NVx4MDAyMFx4MDA2Nlx4MDA2OVx4MDA3Mlx4MDA3M1x4MDA3NFx4MDAyMFx4MDA2Q1x4MDA2OVx4MDA2RVx4MDA2NVx4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA2NVx4MDA2RVx4MDA3NFx4MDA2OVx4MDA3NFx4MDA3OVx4MDAzQVx4MDAyMFx4MDA3Qlx4MDAzMFx4MDA3RFx4MDAiCi0gICAgODI1NCAgICAgICAgICAgICAgTCJceDAwNDVceDAwNkVceDAwNjRceDAwMjBceDAwNkZceDAwNjZceDAwMjBceDAwNjlceDAwNkVceDAwNzBceDAwNzVceDAwNzRceDAwMjBceDAwNzdceDAwNjFceDAwNzNceDAwMjBceDAwNjhceDAwNjlceDAwNzRceDAwMjBceDAwNjlceDAwNkVceDAwMjBceDAwNzRceDAwNjhceDAwNjVceDAwMjBceDAwNkRceDAwNjlceDAwNjRceDAwNjRceDAwNkNceDAwNjVceDAwMjBceDAwNkZceDAwNjZceDAwMjBceDAwNjFceDAwMjBceDAwNkRceDAwNzVceDAwNkNceDAwNzRceDAwNjlceDAwNjJceDAwNzlceDAwNzRceDAwNjVceDAwMjBceDAwNzNceDAwNjVceDAwNzFceDAwNzVceDAwNjVceDAwNkVceDAwNjNceDAwNjVceDAwIgotICAgIDgyNTUgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY5XHgwMDczXHgwMDIwXHgwMDY1XHgwMDZFXHgwMDYzXHgwMDZGXHgwMDY0XHgwMDY5XHgwMDZFXHgwMDY3XHgwMDIwXHgwMDI4XHgwMDdCXHgwMDMwXHgwMDdEXHgwMDI5XHgwMDczXHgwMDY4XHgwMDZGXHgwMDc1XHgwMDZDXHgwMDY0XHgwMDIwXHgwMDY4XHgwMDYxXHgwMDc2XHgwMDY1XHgwMDIwXHgwMDY4XHgwMDYxXHgwMDY0XHgwMDIwXHgwMDYxXHgwMDIwXHgwMDc0XHgwMDcyXHgwMDYxXHgwMDZFXHgwMDczXHgwMDYzXHgwMDZGXHgwMDY0XHgwMDY1XHgwMDcyXHgwMCIKLSAgICA4MjU2ICAgICAgICAgICAgICBMIlx4MDA0OVx4MDA2RVx4MDA3Nlx4MDA2MVx4MDA2Q1x4MDA2OVx4MDA2NFx4MDAyMFx4MDA3M1x4MDA2NVx4MDA2M1x4MDA2Rlx4MDA2RVx4MDA2NFx4MDAyMFx4MDA2Mlx4MDA3OVx4MDA3NFx4MDA2NVx4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA2MVx4MDAyMFx4MDA1NVx4MDA1NFx4MDA0Nlx4MDAyRFx4MDAzOFx4MDAyMFx4MDA2M1x4MDA2OFx4MDA2MVx4MDA3Mlx4MDA2MVx4MDA2M1x4MDA3NFx4MDA2NVx4MDA3Mlx4MDAyMFx4MDA3M1x4MDA2NVx4MDA3MVx4MDA3NVx4MDA2NVx4MDA2RVx4MDA2M1x4MDA2NVx4MDAiCi0gICAgODI1NyAgICAgICAgICAgICAgTCJceDAwNDlceDAwNkVceDAwNzZceDAwNjFceDAwNkNceDAwNjlceDAwNjRceDAwMjBceDAwNzNceDAwNzVceDAwNzJceDAwNzJceDAwNkZceDAwNjdceDAwNjFceDAwNzRceDAwNjVceDAwMjBceDAwNjNceDAwNjhceDAwNjFceDAwNzJceDAwNjFceDAwNjNceDAwNzRceDAwNjVceDAwNzJceDAwMjBceDAwNjZceDAwNkZceDAwNzVceDAwNkVceDAwNjRceDAwMjBceDAwNjlceDAwNkVceDAwMjBceDAwNTVceDAwNTRceDAwNDZceDAwMkRceDAwMzhceDAwMjBceDAwNjRceDAwNjFceDAwNzRceDAwNjFceDAwIgotICAgIDgyNTggICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDcwXHgwMDcyXHgwMDY5XHgwMDZEXHgwMDYxXHgwMDcyXHgwMDc5XHgwMDIwXHgwMDY0XHgwMDZGXHgwMDYzXHgwMDc1XHgwMDZEXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDY1XHgwMDZFXHgwMDc0XHgwMDY5XHgwMDc0XHgwMDc5XHgwMDIwXHgwMDYzXHgwMDZGXHgwMDc1XHgwMDZDXHgwMDY0XHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDYyXHgwMDY1XHgwMDIwXHgwMDZGXHgwMDcwXHgwMDY1XHgwMDZFXHgwMDY1XHgwMDY0XHgwMDJFXHgwMDIwXHgwMDQ5XHgwMDY0XHgwMDNEXHgwMDdCXHgwMDMwXHgwMDdEXHgwMCIKLSAgICA4MjU5ICAgICAgICAgICAgICBMIlx4MDA1NVx4MDA2RVx4MDA2Mlx4MDA2MVx4MDA2Q1x4MDA2MVx4MDA2RVx4MDA2M1x4MDA2NVx4MDA2NFx4MDAyMFx4MDA3M1x4MDA3NFx4MDA2MVx4MDA3Mlx4MDA3NFx4MDAyRlx4MDA2NVx4MDA2RVx4MDA2NFx4MDAyMFx4MDA3NFx4MDA2MVx4MDA2N1x4MDA3M1x4MDAyMFx4MDA2Nlx4MDA2Rlx4MDA3NVx4MDA2RVx4MDA2NFx4MDAyQ1x4MDAyMFx4MDA2M1x4MDA2MVx4MDA2RVx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RVx4MDA3NFx4MDA2OVx4MDA2RVx4MDA3NVx4MDA2NVx4MDAiCi0gICAgODI2MCAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNzBceDAwNjFceDAwNzNceDAwNzNceDAwNjVceDAwNjRceDAwMjBceDAwNDFceDAwNzRceDAwNzRceDAwNTRceDAwNzlceDAwNzBceDAwNjVceDAwNzNceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNzVceDAwNjVceDAwMjBceDAwNjlceDAwNzNceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNkJceDAwNkVceDAwNkZceDAwNzdceDAwNkVceDAwIgotICAgIDgyNjEgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDcwXHgwMDYxXHgwMDczXHgwMDczXHgwMDY1XHgwMDY0XHgwMDIwXHgwMDQ0XHgwMDY1XHgwMDY2XHgwMDQxXHgwMDc0XHgwMDc0XHgwMDU0XHgwMDc5XHgwMDcwXHgwMDY1XHgwMDczXHgwMDIwXHgwMDc2XHgwMDYxXHgwMDZDXHgwMDc1XHgwMDY1XHgwMDIwXHgwMDY5XHgwMDczXHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDZCXHgwMDZFXHgwMDZGXHgwMDc3XHgwMDZFXHgwMCIKLSAgICA4MjYyICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2Mlx4MDA3NVx4MDA2Nlx4MDA2Nlx4MDA2NVx4MDA3Mlx4MDAyMFx4MDA2RFx4MDA2MVx4MDA2RVx4MDA2MVx4MDA2N1x4MDA2NVx4MDA3Mlx4MDAyMFx4MDA2M1x4MDA2MVx4MDA2RVx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA3MFx4MDA3Mlx4MDA2Rlx4MDA3Nlx4MDA2OVx4MDA2NFx4MDA2NVx4MDAyMFx4MDA2MVx4MDA2RVx4MDA3OVx4MDAyMFx4MDA2RFx4MDA2Rlx4MDA3Mlx4MDA2NVx4MDAyMFx4MDA2Mlx4MDA3NVx4MDA2Nlx4MDA2Nlx4MDA2NVx4MDA3Mlx4MDA3M1x4MDAiCi0gICAgODI2MyAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNzBceDAwNjFceDAwNzNceDAwNzNceDAwNjVceDAwNjRceDAwMjBceDAwNjJceDAwNzVceDAwNjZceDAwNjZceDAwNjVceDAwNzJceDAwMjBceDAwNzdceDAwNjFceDAwNzNceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNjZceDAwNkZceDAwNzVceDAwNkVceDAwNjRceDAwMjBceDAwNjlceDAwNkVceDAwMjBceDAwNzRceDAwNjhceDAwNjlceDAwNzNceDAwMjBceDAwNkRceDAwNjFceDAwNkVceDAwNjFceDAwNjdceDAwNjVceDAwNzJceDAwMjdceDAwNzNceDAwMjBceDAwNzBceDAwNkZceDAwNkZceDAwNkNceDAwIgotICAgIDgyNjQgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDcwXHgwMDYxXHgwMDczXHgwMDczXHgwMDY1XHgwMDY0XHgwMDIwXHgwMDcyXHgwMDY1XHgwMDYzXHgwMDZGXHgwMDY3XHgwMDZFXHgwMDY5XHgwMDdBXHgwMDY1XHgwMDcyXHgwMDIwXHgwMDY1XHgwMDZFXHgwMDYzXHgwMDZGXHgwMDY0XHgwMDY5XHgwMDZFXHgwMDY3XHgwMDIwXHgwMDc3XHgwMDYxXHgwMDczXHgwMDIwXHgwMDZFXHgwMDZGXHgwMDc0XHgwMDIwXHgwMDZCXHgwMDZFXHgwMDZGXHgwMDc3XHgwMDZFXHgwMCIKLSAgICA4MjY1ICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2Mlx4MDA2Q1x4MDA2Rlx4MDA2M1x4MDA2Qlx4MDAyMFx4MDA2Rlx4MDA2Nlx4MDAyMFx4MDA1OFx4MDA0RFx4MDA0Q1x4MDAyMFx4MDA2NFx4MDA2MVx4MDA3NFx4MDA2MVx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA3NVx4MDA2Q1x4MDA2NFx4MDAyMFx4MDA2RVx4MDA2Rlx4MDA3NFx4MDAyMFx4MDA2Mlx4MDA2NVx4MDAyMFx4MDA3NFx4MDA3Mlx4MDA2MVx4MDA2RVx4MDA3M1x4MDA2M1x4MDA2Rlx4MDA2NFx4MDA2NVx4MDA2NFx4MDAiCi0gICAgODI2NiAgICAgICAgICAgICAgTCJceDAwNDNceDAwNkZceDAwNzVceDAwNkNceDAwNjRceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNjNceDAwNzJceDAwNjVceDAwNjFceDAwNzRceDAwNjVceDAwMjBceDAwNjFceDAwMjBceDAwNjRceDAwNjVceDAwNjZceDAwNjFceDAwNzVceDAwNkNceDAwNzRceDAwMjBceDAwNzRceDAwNzJceDAwNjFceDAwNkVceDAwNzNceDAwNjNceDAwNkZceDAwNjRceDAwNjVceDAwNzJceDAwIgotICAgIDgyNjcgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDYyXHgwMDY5XHgwMDZFXHgwMDYxXHgwMDcyXHgwMDc5XHgwMDIwXHgwMDZGXHgwMDcwXHgwMDY1XHgwMDcyXHgwMDYxXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMDIwXHgwMDZFXHgwMDZGXHgwMDY0XHgwMDY1XHgwMDIwXHgwMDY4XHgwMDYxXHgwMDY0XHgwMDIwXHgwMDYxXHgwMDIwXHgwMDc1XHgwMDZFXHgwMDYxXHgwMDcyXHgwMDc5XHgwMDIwXHgwMDZFXHgwMDZGXHgwMDY0XHgwMDY1XHgwMDIwXHgwMDc0XHgwMDc5XHgwMDcwXHgwMDY1XHgwMCIKLSAgICA4MjY4ICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2M1x4MDA2Rlx4MDA2RVx4MDA3NFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDA3NFx4MDA3OVx4MDA3MFx4MDA2NVx4MDAyMFx4MDA2RFx4MDA3NVx4MDA3M1x4MDA3NFx4MDAyMFx4MDA2Mlx4MDA2NVx4MDAyMFx4MDA2RFx4MDA2OVx4MDA3OFx4MDA2NVx4MDA2NFx4MDAyMFx4MDA2Rlx4MDA3Mlx4MDAyMFx4MDA2M1x4MDA2OFx4MDA2OVx4MDA2Q1x4MDA2NFx4MDA3Mlx4MDA2NVx4MDA2RVx4MDAiCi0gICAgODI2OSAgICAgICAgICAgICAgTCJceDAwNTBceDAwNDNceDAwNDRceDAwNDFceDAwNTRceDAwNDFceDAwMjBceDAwNkVceDAwNkZceDAwNjRceDAwNjVceDAwNzNceDAwMjBceDAwNjFceDAwNzJceDAwNjVceDAwMjBceDAwNkVceDAwNkZceDAwNzRceDAwMjBceDAwNzZceDAwNjFceDAwNkNceDAwNjlceDAwNjRceDAwMjBceDAwNjhceDAwNjVceDAwNzJceDAwNjVceDAwIgotICAgIDgyNzAgICAgICAgICAgICAgIEwiXHgwMDU0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDdCXHgwMDMwXHgwMDdEXHgwMDIwXHgwMDZGXHgwMDcwXHgwMDY1XHgwMDcyXHgwMDYxXHgwMDc0XHgwMDY5XHgwMDZGXHgwMDZFXHgwMDIwXHgwMDY5XHgwMDczXHgwMDIwXHgwMDY5XHgwMDZFXHgwMDc2XHgwMDYxXHgwMDZDXHgwMDY5XHgwMDY0XHgwMDIwXHgwMDY2XHgwMDZGXHgwMDcyXHgwMDIwXHgwMDc0XHgwMDY4XHgwMDY1XHgwMDIwXHgwMDczXHgwMDcwXHgwMDY1XHgwMDYzXHgwMDIwXHgwMDc0XHgwMDc5XHgwMDcwXHgwMDY1XHgwMCIKLSAgICA4MjcxICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA3NVx4MDA2RVx4MDA2MVx4MDA3Mlx4MDA3OVx4MDAyMFx4MDA2Rlx4MDA3MFx4MDA2NVx4MDA3Mlx4MDA2MVx4MDA3NFx4MDA2OVx4MDA2Rlx4MDA2RVx4MDAyMFx4MDA2RVx4MDA2Rlx4MDA2NFx4MDA2NVx4MDAyMFx4MDA2OFx4MDA2MVx4MDA2NFx4MDAyMFx4MDA2MVx4MDAyMFx4MDA2Mlx4MDA2OVx4MDA2RVx4MDA2MVx4MDA3Mlx4MDA3OVx4MDAyMFx4MDA2RVx4MDA2Rlx4MDA2NFx4MDA2NVx4MDAyMFx4MDA3NFx4MDA3OVx4MDA3MFx4MDA2NVx4MDAiCi0gICAgODI3MiAgICAgICAgICAgICAgTCJceDAwNTVceDAwNkVceDAwNkJceDAwNkVceDAwNkZceDAwNzdceDAwNkVceDAwMjBceDAwNjNceDAwNkZceDAwNkVceDAwNzRceDAwNjVceDAwNkVceDAwNzRceDAwMjBceDAwNkRceDAwNkZceDAwNjRceDAwNjVceDAwNkNceDAwMjBceDAwNzRceDAwNzlceDAwNzBceDAwNjVceDAwIgotICAgIDgyNzMgICAgICAgICAgICAgIEwiXHgwMDU1XHgwMDZFXHgwMDZCXHgwMDZFXHgwMDZGXHgwMDc3XHgwMDZFXHgwMDIwXHgwMDYzXHgwMDZGXHgwMDZFXHgwMDc0XHgwMDY1XHgwMDZFXHgwMDc0XHgwMDIwXHgwMDczXHgwMDcwXHgwMDY1XHgwMDYzXHgwMDIwXHgwMDc0XHgwMDc5XHgwMDcwXHgwMDY1XHgwMCIKLSAgICA4Mjc0ICAgICAgICAgICAgICBMIlx4MDA1NFx4MDA2OFx4MDA2NVx4MDAyMFx4MDA2NVx4MDA2Q1x4MDA2NVx4MDA2RFx4MDA2NVx4MDA2RVx4MDA3NFx4MDAyMFx4MDA2OVx4MDA2NFx4MDAyMFx4MDA3N1x4MDA2MVx4MDA3M1x4MDAyMFx4MDA2OVx4MDA2RVx4MDA3Nlx4MDA2MVx4MDA2Q1x4MDA2OVx4MDA2NFx4MDAiCi0gICAgODI3NSAgICAgICAgICAgICAgTCJceDAwNTRceDAwNjhceDAwNjVceDAwMjBceDAwNjNceDAwNjFceDAwNkNceDAwNkNceDAwMjBceDAwNzRceDAwNkZceDAwMjBceDAwNzNceDAwNjNceDAwNjFceDAwNkVceDAwNEVceDAwNjVceDAwNzhceDAwNzRceDAwMjhceDAwMjlceDAwMjBceDAwNjlceDAwNzNceDAwMjBceDAwNjlceDAwNkNceDAwNkNceDAwNjVceDAwNjdceDAwNjFceDAwNkNceDAwMjBceDAwNjFceDAwNzRceDAwMjBceDAwNzRceDAwNjhceDAwNjlceDAwNzNceDAwMjBceDAwNzRceDAwNjlceDAwNkRceDAwNjVceDAwIgorICAgIDIgICAgICAgICAgICAgICAgICAgICAgICJOb3RhdGlvbiAnezB9JyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkIgorICAgIDMgICAgICAgICAgICAgICAgICAgICAgICJBdHRyaWJ1dGUgJ3swfScgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZCIKKyAgICA0ICAgICAgICAgICAgICAgICAgICAgICAiRW5jb2RpbmcgKHswfSwgZnJvbSBYTUxEZWNsIG9yIG1hbnVhbGx5IHNldCkgY29udHJhZGljdHMgdGhlIGF1dG8tc2Vuc2VkIGVuY29kaW5nLCBpZ25vcmluZyBpdCIKKyAgICA1ICAgICAgICAgICAgICAgICAgICAgICAiRWxlbWVudCAnezB9JyB3YXMgcmVmZXJlbmNlZCBpbiBhIGNvbnRlbnQgbW9kZWwgYnV0IG5ldmVyIGRlY2xhcmVkIgorICAgIDYgICAgICAgICAgICAgICAgICAgICAgICJFbGVtZW50ICd7MH0nIHdhcyByZWZlcmVuY2VkIGluIGFuIGF0dGxpc3QgYnV0IG5ldmVyIGRlY2xhcmVkIgorICAgIDkgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBjb21tZW50IG9yIENEQVRBIgorICAgIDEwICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBhbiBhdHRyaWJ1dGUgbmFtZSIKKyAgICAxMSAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgYSBub3RhdGlvbiBuYW1lIgorICAgIDEyICAgICAgICAgICAgICAgICAgICAgICJSZXBldGl0aW9uIG9mIGluZGl2aWR1YWwgZWxlbWVudHMgaXMgbm90IGxlZ2FsIGZvciBtaXhlZCBjb250ZW50IG1vZGVscyIKKyAgICAxMyAgICAgICAgICAgICAgICAgICAgICAiQmFkIGRlZmF1bHQgYXR0cmlidXRlIGRlY2xhcmF0aW9uIgorICAgIDE0ICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBkZWZhdWx0IGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiwgYXNzdW1pbmcgI0lNUExJRUQgICIKKyAgICAxNSAgICAgICAgICAgICAgICAgICAgICAiQXR0cmlidXRlIGxpc3Qgc3ludGF4IGVycm9yIgogRU5ECiAKK1NUUklOR1RBQkxFIERJU0NBUkRBQkxFIAorQkVHSU4KKyAgICAxNiAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgZXF1YWwgc2lnbiIKKyAgICAxNyAgICAgICAgICAgICAgICAgICAgICAiRHVwbGljYXRpb24gYXR0cmlidXRlIG5hbWUiCisgICAgMTggICAgICAgICAgICAgICAgICAgICAgIkJhZCBJRCBmb3IgeG1sOmxhbmcgYXR0cmlidXRlIgorICAgIDE5ICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBhbiBlbGVtZW50IG5hbWUiCisgICAgMjAgICAgICAgICAgICAgICAgICAgICAgIk11c3Qgc3RhcnQgd2l0aCBhbiBYTUxEZWNsIgorICAgIDIxICAgICAgICAgICAgICAgICAgICAgICJDb21tZW50cyBtdXN0IHN0YXJ0IHdpdGggPCEtLSIKKyAgICAyMiAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBkb2N1bWVudCBzdHJ1Y3R1cmUiCisgICAgMjMgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGEgJ3ZlcnNpb249JywgJ2VuY29kaW5nPScsIG9yICdzdGFuZGFsb25lPSciCisgICAgMjQgICAgICAgICAgICAgICAgICAgICAgIkJhZCBYTUwgdmVyc2lvbiBzdHJpbmciCisgICAgMjUgICAgICAgICAgICAgICAgICAgICAgIlVuc3VwcG9ydGVkIFhNTCB2ZXJzaW9uIgorICAgIDI2ICAgICAgICAgICAgICAgICAgICAgICJVbnRlcm1pbmF0ZWQgWE1MIGRlY2wiCisgICAgMjcgICAgICAgICAgICAgICAgICAgICAgIkJhZCBYTUwgZW5jb2RpbmcgZGVjbGFyYXRpb24iCisgICAgMjggICAgICAgICAgICAgICAgICAgICAgIkJhZCBzdGFuZGFsb25lIGRlY2xhcmF0aW9uIgorICAgIDI5ICAgICAgICAgICAgICAgICAgICAgICJVbnRlcm1pbmF0ZWQgY29tbWVudCIKKyAgICAzMCAgICAgICAgICAgICAgICAgICAgICAiUHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBuYW1lIGV4cGVjdGVkIgorICAgIDMxICAgICAgICAgICAgICAgICAgICAgICJVbnRlcm1pbmF0ZWQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiIKK0VORAorCitTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSAKK0JFR0lOCisgICAgMzIgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgY2hhcmFjdGVyIgorICAgIDMzICAgICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIHRleHQgYmVmb3JlIHJvb3QgZWxlbWVudCIKKyAgICAzNCAgICAgICAgICAgICAgICAgICAgICAiVW50ZXJtaW5hdGVkIHN0YXJ0IHRhZyIKKyAgICAzNSAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgYW4gYXR0cmlidXRlIHZhbHVlIgorICAgIDM2ICAgICAgICAgICAgICAgICAgICAgICJVbnRlcm1pbmF0ZWQgZW5kIHRhZyIKKyAgICAzNyAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgYXR0cmlidXRlIHR5cGUgKENEQVRBLCBJRCwgTk1UT0tFTiwgLi4pLCIKKyAgICAzOCAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgZW5kIG9mIHRhZyAnezB9JyIKKyAgICAzOSAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgdGFnIG5hbWUsIGNvbW1lbnQsIFBJLCBvciBvdGhlciBtYXJrdXAiCisgICAgNDAgICAgICAgICAgICAgICAgICAgICAgIk5vdCB2YWxpZCBhZnRlciBjb250ZW50IgorICAgIDQxICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBjb21tZW50IgorICAgIDQyICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24iCisgICAgNDMgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIHdoaXRlc3BhY2UiCisgICAgNDQgICAgICAgICAgICAgICAgICAgICAgIk5vIHJvb3QgZWxlbWVudCBpbiBET0NUWVBFIgorICAgIDQ1ICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBxdW90ZWQgc3RyaW5nIgorICAgIDQ2ICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBwdWJsaWMgaWQiCisgICAgNDcgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgY2hhcmFjdGVyIGluIHB1YmxpYyBpZCIKK0VORAorCitTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSAKK0JFR0lOCisgICAgNDggICAgICAgICAgICAgICAgICAgICAgIlVudGVybWluYXRlZCBET0NUWVBFIGRlY2xhcmF0aW9uIgorICAgIDQ5ICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGNoYXJhY3RlciBpbiBpbnRlcm5hbCBzdWJzZXQiCisgICAgNTAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIENEQVRBIHNlY3Rpb24iCisgICAgNTEgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgaW5pdGlhbCBuYW1lIGNoYXJhY3RlciIKKyAgICA1MiAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBuYW1lIGNoYXJhY3RlciIKKyAgICA1MyAgICAgICAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCB3aGl0ZXNwYWNlIgorICAgIDU0ICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGNoYXJhY3RlciBpbiBhdHRyaWJ1dGUgdmFsdWUiCisgICAgNTUgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGEgbWFya3VwIGRlY2xhcmF0aW9uIgorICAgIDU2ICAgICAgICAgICAgICAgICAgICAgICJUZXh0IGRlY2xhcmF0aW9uIG5vdCBsZWdhbCBoZXJlIgorICAgIDU3ICAgICAgICAgICAgICAgICAgICAgICJDb25kaXRpb25hbCBzZWN0aW9uIGluIGludGVybmFsIHN1YnNldCIKKyAgICA1OCAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgcGFyYW1ldGVyIGVudGl0eSBuYW1lIgorICAgIDU5ICAgICAgICAgICAgICAgICAgICAgICJVbnRlcm1pbmF0ZWQgZW50aXR5IGRlY2xhcmF0aW9uIgorICAgIDYwICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGNoYXJhY3RlciByZWZlcmVuY2UiCisgICAgNjEgICAgICAgICAgICAgICAgICAgICAgIlVudGVybWluYXRlZCBjaGFyYWN0ZXIgcmVmZXJlbmNlIgorICAgIDYyICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBlbnRpdHkgbmFtZSBmb3IgcmVmZXJlbmNlIgorICAgIDYzICAgICAgICAgICAgICAgICAgICAgICJFbnRpdHkgJ3swfScgd2FzIG5vdCBmb3VuZCIKK0VORAorCitTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSAKK0JFR0lOCisgICAgNjQgICAgICAgICAgICAgICAgICAgICAgIlVucGFyc2VkIGVudGl0dHkgcmVmZXJlbmNlcyBub3QgdmFsaWQgaGVyZSIKKyAgICA2NSAgICAgICAgICAgICAgICAgICAgICAiVW50ZXJtaW5hdGVkIGVudGl0eSByZWZlcmVuY2UiCisgICAgNjYgICAgICAgICAgICAgICAgICAgICAgIlJlY3Vyc2l2ZSBlbnRpdHkgZXhwYW5zaW9uIgorICAgIDY3ICAgICAgICAgICAgICAgICAgICAgICJQYXJ0aWFsIG1hcmt1cCBpbiBlbnRpdHkgdmFsdWUiCisgICAgNjggICAgICAgICAgICAgICAgICAgICAgIlVudGVybWluYXRlZCBlbGVtZW50IGRlY2xhcmF0aW9uIgorICAgIDY5ICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBjb250ZW50IHNwZWNpZmljYXRpb24gZXhwcmVzc2lvbiIKKyAgICA3MCAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgYXN0ZXJpc2siCisgICAgNzEgICAgICAgICAgICAgICAgICAgICAgIlVudGVybWluYXRlZCBDb250ZW50IG1vZGVsIgorICAgIDcyICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBzeXN0ZW0gaWQiCisgICAgNzMgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIHN5c3RlbSBvciBwdWJsaWMgaWQiCisgICAgNzQgICAgICAgICAgICAgICAgICAgICAgIlVudGVybWluYXRlZCBub3RhdGlvbiBkZWNsYXJhdGlvbiIKKyAgICA3NSAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgJywnLCAnfCcsIG9yICcpJyBjaGFyYWN0ZXJzIgorICAgIDc2ICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCAnfCcgb3IgJyknIGNoYXJhY3RlcnMiCisgICAgNzcgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkICcsJyBvciAnKScgY2hhcmFjdGVycyBvciBjbG9zZSBwYXJlbnRoZXNpcyIKKyAgICA3OCAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgZW51bWVyYXRpb24gdmFsdWUiCisgICAgNzkgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIHwgZW51bWVyYXRpb24gc2VwYXJhdG9yLCBvciBjbG9zaW5nIHBhcmVuIgorRU5ECisKK1NUUklOR1RBQkxFIERJU0NBUkRBQkxFIAorQkVHSU4KKyAgICA4MCAgICAgICAgICAgICAgICAgICAgICAiVW50ZXJtaW5hdGVkIGVudGl0eSBsaXRlcmFsIgorICAgIDgxICAgICAgICAgICAgICAgICAgICAgICJUaGVyZSBhcmUgbW9yZSBlbmQgdGFncyB0aGFuIHN0YXJ0IHRhZ3MiCisgICAgODIgICAgICAgICAgICAgICAgICAgICAgIlJlZmVyZW5jZSB0byBleHRlcm5hbCBkZWNsYXJhdGlvbiBpbiBzdGFuZGFsb25lIGRvY3VtZW50LiBFbnRpdHk9ezB9IgorICAgIDgzICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBhbiBvcGVuIHBhcmVudGhlc2lzIgorICAgIDg0ICAgICAgICAgICAgICAgICAgICAgICJUaGUgYXR0cmlidXRlICd7MH0nIGlzIGFscmVhZHkgdXNlZCBpbiBlbGVtZW50ICd7MX0nIgorICAgIDg1ICAgICAgICAgICAgICAgICAgICAgICJBICc8JyBjaGFyYWN0ZXIgY2Fubm90IGJlIHVzZWQgaW4gYW4gYXR0cmlidXRlIHZhbHVlLCBleGNlcHQgdGhyb3VnaCA8IgorICAgIDg2ICAgICAgICAgICAgICAgICAgICAgICJBIGxlYWRpbmcgc3Vycm9nYXRlIGNoYXJhY3RlciB3YXMgbm90IGZvbGxvd2VkIGJ5IGEgbGVnYWwgc2Vjb25kIGNoYXJhY3RlciIKKyAgICA4NyAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgJ11dPicgdG8gZW5kIGEgY29uZGl0aW9uYWwgc2VjdGlvbiIKKyAgICA4OCAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgSU5DTFVERSBvciBJR05PUkUgaGVyZSIKKyAgICA4OSAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgWyB0byBmb2xsb3cgSU5DTFVERSBvciBJR05PUkUiCisgICAgOTAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGEgVGV4dERlY2wgaGVyZTogPD94bWwgLi4uLiIKKyAgICA5MSAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgYSBYTUxEZWNsIGhlcmU6IDw/eG1sIC4uLi4iCisgICAgOTIgICAgICAgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZW5kIG9mIGVudGl0eSB7MH0iCisgICAgOTMgICAgICAgICAgICAgICAgICAgICAgIkEgUEUgcHJvcG9nYXRlZCBvdXQgb2YgdGhlIGludC9leHQgc3Vic2V0LCBkaXNjYXJkaW5nIGV4dHJhIHRleHQiCisgICAgOTQgICAgICAgICAgICAgICAgICAgICAgIkFuIGV4dHJhIF0gY2hhcmFjdGVyIHdhcyBmb3VuZCBhbiBpZ25vcmVkIgorICAgIDk1ICAgICAgICAgICAgICAgICAgICAgICJQRSByZWZzIGFyZSBub3QgYWxsb3dlZCBpbnNpZGUgbWFya3VwIGluIHRoZSBpbnRlcm5hbCBzdWJzZXQiCitFTkQKKworU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgCitCRUdJTgorICAgIDk2ICAgICAgICAgICAgICAgICAgICAgICJBbiBlbnRpdHkgcHJvcG9nYXRlZCBvdXQgb2YgdGhlIGNvbnRlbnQgc2VjdGlvbiBpbnRvIE1pc2NlbGxhbmVvdXMiCisgICAgOTcgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkICYjIHRvIGJlIGZvbGxvd2VkIGJ5IGEgbnVtZXJpYyBjaGFyYWN0ZXIgdmFsdWUiCisgICAgOTggICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGFuIG9wZW4gYnJhY2tldCAoJ1snKSBoZXJlIgorICAgIDk5ICAgICAgICAgICAgICAgICAgICAgICJUaGUgc2VxdWVuY2UgJ11dPicgaXMgbm90IGFsbG93ZWQgaW4gY2hhcmFjdGVyIGRhdGEiCisgICAgMTAwICAgICAgICAgICAgICAgICAgICAgIklsbGVnYWwgc2VxdWVuY2UgJy0tJyBpbiBjb21tZW50IgorICAgIDEwMSAgICAgICAgICAgICAgICAgICAgICJVbnRlcm1pbmF0ZWQgQ0RBVEEgc2VjdGlvbiIKKyAgICAxMDIgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgTkRBVEEiCisgICAgMTAzICAgICAgICAgICAgICAgICAgICAgIk5EQVRBIGlzIG5vdCBsZWdhbCBmb3IgcGFyYW1ldGVyIGVudGl0aWVzIgorICAgIDEwNCAgICAgICAgICAgICAgICAgICAgICJIZXggcmFkaXggY2hhcmFjdGVyIHJlZnMgbXVzdCB1c2UgJ3gnLCBub3QgJ1gnIgorICAgIDEwNSAgICAgICAgICAgICAgICAgICAgICInezB9JyBoYXMgYWxyZWFkeSBiZWVuIHNldC4gSWdub3JpbmcgcmVkdW5kYW50IHNldHRpbmciCisgICAgMTA2ICAgICAgICAgICAgICAgICAgICAgIlRoZSBYTUxEZWNsIHN0cmluZ3MgbXVzdCBiZSBpbiB0aGUgb3JkZXI6IHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lIgorICAgIDEwNyAgICAgICAgICAgICAgICAgICAgICJFeHRlcm5hbCBlbnRpdGllcyBjYW5ub3QgYmUgcmVmZXJyZWQgdG8gZnJvbSBhdHRyaWJ1dGUgdmFsdWVzIgorICAgIDEwOCAgICAgICAgICAgICAgICAgICAgICJUaGUgWE1MIG9yIFRleHQgZGVjbCBtdXN0IHN0YXJ0IHdpdGggJzw/eG1sICcsIG5vdCAnPD9YTUwgJyIKKyAgICAxMDkgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgYSBsaXRlcmFsIGVudGl0eSB2YWx1ZSBvciBQVUJMSUMvU1lTVEVNIGlkIgorICAgIDExMCAgICAgICAgICAgICAgICAgICAgICInezB9JyBpcyBub3QgYSB2YWxpZCBkaWdpdCBmb3IgdGhlIGluZGljYXRlZCByYWRpeCIKKyAgICAxMTEgICAgICAgICAgICAgICAgICAgICAiVGhlIGlucHV0IGVuZGVkIGJlZm9yZSBhbGwgc3RhcnRlZCB0YWdzIHdlcmUgZW5kZWQuIExhc3QgdGFnIHN0YXJ0ZWQgd2FzICd7MH0nIgorRU5ECisKK1NUUklOR1RBQkxFIERJU0NBUkRBQkxFIAorQkVHSU4KKyAgICAxMTIgICAgICAgICAgICAgICAgICAgICAiVGhlIGNvbnRlbnQgbW9kZWwgZm9yIGVsZW1lbnQgJ3swfScgaXMgYW1iaWd1b3VzIgorICAgIDExMyAgICAgICAgICAgICAgICAgICAgICJOZXN0ZWQgQ0RBVEEgc2VjdGlvbnMgYXJlIG5vdCBhbGxvd2VkIgorICAgIDExNCAgICAgICAgICAgICAgICAgICAgICJUaGUgcHJlZml4ICd7MH0nIGhhcyBub3QgYmVlbiBtYXBwZWQgdG8gYW55IFVSSSIKKyAgICAxMTUgICAgICAgICAgICAgICAgICAgICAiVGhlIHN0YXJ0IGFuZCB0aGUgZW5kIHRhZyB3ZXJlIGluIHRoZSBkaWZmZXJlbnQgZW50aXRpZXMiCisgICAgMTE2ICAgICAgICAgICAgICAgICAgICAgIlRoZSBtYWluIFhNTCBkb2N1bWVudCBjYW5ub3QgYmUgZW1wdHkiCisgICAgMTE3ICAgICAgICAgICAgICAgICAgICAgIkNEQVRBIGlzIG5vdCBhbGxvd2VkIG91dHNpZGUgdGhlIHJvb3QgZWxlbWVudCIKKyAgICAxMTggICAgICAgICAgICAgICAgICAgICAiT25seSBudW1lcmljIGNoYXJhY3RlciBlbnRpdGllcyBvciBzcGVjaWFsIGNoYXJhY3RlciBlbnRpdGllcyBhcmUgbGVnYWwgaGVyZSIKKyAgICAxMTkgICAgICAgICAgICAgICAgICAgICAiR290IGFuIHVuZXhwZWN0ZWQgdHJhaWxpbmcgc3Vycm9nYXRlIGNoYXJhY3RlciIKKyAgICAxMjAgICAgICAgICAgICAgICAgICAgICAiTm8gcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBzdGFydHMgd2l0aCAneG1sJyIKKyAgICAxMjEgICAgICAgICAgICAgICAgICAgICAiVGhlIFhNTCBvciBUZXh0IGRlY2xhcmF0aW9uIG11c3Qgc3RhcnQgYXQgbGluZS9jb2x1bW4gMS8xIgorICAgIDEyMiAgICAgICAgICAgICAgICAgICAgICJUaGUgJ3ZlcnNpb249JyBzdHJpbmcgaXMgcmVxdWlyZWQgaW4gYW4gWE1MRGVjbCIKKyAgICAxMjMgICAgICAgICAgICAgICAgICAgICAiVGhlICdzdGFuZGFsb25lPScgc3RyaW5nIGlzIG9ubHkgYWxsb3dlZCBpbiB0aGUgbWFpbiBYTUwgZW50aXR5IgorICAgIDEyNCAgICAgICAgICAgICAgICAgICAgICJXaGVuIG5hbWVzcGFjZXMgYXJlIGVuYWJsZWQsIGEgbmFtZSBjYW4gaGF2ZSBvbmx5IG9uZSBjb2xvbiBjaGFyYWN0ZXIiCisgICAgMTI1ICAgICAgICAgICAgICAgICAgICAgIldoZW4gbmFtZXNwYWNlcyBhcmUgZW5hYmxlZCwgdGhlIGNvbG9uIGNhbm5vdCBiZSB0aGUgZmlyc3Qgb3IgbGFzdCBjaGFyYWN0ZXIiCisgICAgMTI2ICAgICAgICAgICAgICAgICAgICAgIkNvbG9ucyBhcmUgbm90IGFsbG93ZWQgaW4gdGhpcyBuYW1lIHdoZW4gbmFtZXNwYWNlcyBhcmUgZW5hYmxlZCIKKyAgICAxMjcgICAgICAgICAgICAgICAgICAgICAiQSBzeXN0ZW0gZXhjZXB0aW9uIG9jY3VyZWQgZHVyaW5nIHByb2Nlc3NpbmciCitFTkQKKworU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgCitCRUdJTgorICAgIDEyOCAgICAgICAgICAgICAgICAgICAgICJBbiBleGNlcHRpb24gb2NjdXJlZCEgVHlwZTp7MH0sIE1lc3NhZ2U6ezF9IgorICAgIDEyOSAgICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGV4Y2VwdGlvbi4gTWVzc2FnZTogezB9IgorRU5ECisKK1NUUklOR1RBQkxFIERJU0NBUkRBQkxFIAorQkVHSU4KKyAgICAxNjM4NiAgICAgICAgICAgICAgICAgICAiVW5rbm93biBlbGVtZW50ICd7MH0nIgorICAgIDE2Mzg3ICAgICAgICAgICAgICAgICAgICJBdHRyaWJ1dGUgJ3swfScgbm90IGRlZmluZWQiCisgICAgMTYzODggICAgICAgICAgICAgICAgICAgIk5vdGF0aW9uICd7MH0nIHdhcyByZWZlcmVuY2VkIGJ1dCBuZXZlciBkZWNsYXJlZCIKKyAgICAxNjM4OSAgICAgICAgICAgICAgICAgICAiUm9vdCBlbGVtZW50IGRpZmZlcmVudCBmcm9tIERPQ1RZUEUiCisgICAgMTYzOTAgICAgICAgICAgICAgICAgICAgIlJlcXVpcmVkIGF0dHJpYnV0ZSAnezB9JyB3YXMgbm90IHByb3ZpZGVkIgorICAgIDE2MzkxICAgICAgICAgICAgICAgICAgICJFbGVtZW50ICd7MH0nIGlzIG5vdCB2YWxpZCBmb3IgY29udGVudCBtb2RlbDogJ3sxfSciCisgICAgMTYzOTIgICAgICAgICAgICAgICAgICAgIklEIGF0dHJpYnV0ZXMgbXVzdCBiZSAjSU1QTElFRCBvciAjUkVRVUlSRUQiCisgICAgMTYzOTMgICAgICAgICAgICAgICAgICAgIlRoaXMgdHlwZSBvZiBhdHRyaWJ1dGUgY2Fubm90IGhhdmUgYW4gZW1wdHkgdmFsdWUiCisgICAgMTYzOTQgICAgICAgICAgICAgICAgICAgIkVsZW1lbnQgJ3swfScgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZCIKKyAgICAxNjM5NSAgICAgICAgICAgICAgICAgICAiRWxlbWVudCAnezB9JyBoYXMgbW9yZSB0aGFuIG9uZSBJRCBhdHRyaWJ1dGUiCisgICAgMTYzOTYgICAgICAgICAgICAgICAgICAgIklEICd7MH0nIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCIKKyAgICAxNjM5NyAgICAgICAgICAgICAgICAgICAiSUQgYXR0cmlidXRlICd7MH0nIHdhcyByZWZlcmVuY2VkIGJ1dCBuZXZlciBkZWNsYXJlZCIKKyAgICAxNjM5OCAgICAgICAgICAgICAgICAgICAiQXR0cmlidXRlICd7MH0nIHJlZmVycyB0byBhbiB1bmtub3duIG5vdGF0aW9uICd7MX0nIgorICAgIDE2Mzk5ICAgICAgICAgICAgICAgICAgICJFbGVtZW50ICd7MH0nIHdhcyB1c2VkIGluIHRoZSBET0NUWVBFIGJ1dCBuZXZlciBkZWNsYXJlZCIKK0VORAorCitTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSAKK0JFR0lOCisgICAgMTY0MDAgICAgICAgICAgICAgICAgICAgIkVtcHR5IGNvbnRlbnQgbm90IHZhbGlkIGZvciBjb250ZW50IG1vZGVsOiAnezB9JyIKKyAgICAxNjQwMSAgICAgICAgICAgICAgICAgICAiQXR0cmlidXRlICd7ezB9fXsxfScgaXMgbm90IGRlY2xhcmVkIGZvciBlbGVtZW50ICd7Mn0nIgorICAgIDE2NDAyICAgICAgICAgICAgICAgICAgICJBdHRyaWJ1dGVzIG9mIHR5cGUgRU5USVRZL0VOVElUSUVTIG11c3QgcmVmZXIgdG8gYW4gZXh0ZXJuYWwsIHVucGFyc2VkIGVudGl0eSIKKyAgICAxNjQwMyAgICAgICAgICAgICAgICAgICAiQXR0cmlidXRlICd7MH0nIHJlZmVycyB0byBhbiB1bmtub3duIGVudGl0eSAnezF9JyIKKyAgICAxNjQwNCAgICAgICAgICAgICAgICAgICAiTm90IGVub3VnaCBlbGVtZW50cyB0byBtYXRjaCBjb250ZW50IG1vZGVsIDogJ3swfSciCisgICAgMTY0MDUgICAgICAgICAgICAgICAgICAgIk5vIGNoYXJhY3RlciBkYXRhIGlzIGFsbG93ZWQgYnkgY29udGVudCBtb2RlbCIKKyAgICAxNjQwNiAgICAgICAgICAgICAgICAgICAiQXR0cmlidXRlICd7MH0nIGRvZXMgbm90IG1hdGNoIGl0cyBkZWZpbmVkIGVudW1lcmF0aW9uIG9yIG5vdGF0aW9uIGxpc3QiCisgICAgMTY0MDcgICAgICAgICAgICAgICAgICAgIlRoZSB2YWx1ZXMgZm9yIGF0dHJpYnV0ZSAnezB9JyBtdXN0IGJlIG5hbWVzIG9yIG5hbWUgdG9rZW5zIgorICAgIDE2NDA4ICAgICAgICAgICAgICAgICAgICJBdHRyaWJ1dGUgJ3swfScgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSB2YWx1ZXMiCisgICAgMTY0MDkgICAgICAgICAgICAgICAgICAgIkF0dHJpYnV0ZSAnezB9JyBoYXMgYSB2YWx1ZSB0aGF0IGRvZXMgbm90IG1hdGNoIGl0cyAjRklYRUQgdmFsdWUiCisgICAgMTY0MTAgICAgICAgICAgICAgICAgICAgIkVsZW1lbnQgdHlwZXMgY2Fubm90IGJlIGR1cGxpY2F0ZWQgaW4gTWl4ZWQgY29udGVudCBtb2RlbHMiCitFTkQKKworU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgCitCRUdJTgorICAgIDgxOTQgICAgICAgICAgICAgICAgICAgICJUaGUgaW5kZXggaXMgYmV5b25kIHRoZSBhcnJheSBib3VuZHMgICIKKyAgICA4MTk1ICAgICAgICAgICAgICAgICAgICAiVGhlIG5ldyBzaXplIGlzIGxlc3MgdGhhbiB0aGUgb2xkIG9uZSIKKyAgICA4MTk2ICAgICAgICAgICAgICAgICAgICAiVGhlIGJpdCBpbmRleCB3YXMgYmV5b25kIHRoZSBzZXQgc2l6ZSIKKyAgICA4MTk3ICAgICAgICAgICAgICAgICAgICAiVGhlIHBvaW50ZXIgaGFzIG5vdCBiZWVuIHNldCIKKyAgICA4MTk4ICAgICAgICAgICAgICAgICAgICAiVGhlIGVudW1lcmF0b3IgY29udGFpbnMgbm8gbW9yZSBlbGVtZW50cyIKKyAgICA4MTk5ICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IG9wZW4gZmlsZTogezB9IgorICAgIDgyMDAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgcXVlcnkgdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiIKKyAgICA4MjAxICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGNsb3NlIHRoZSBmaWxlIgorICAgIDgyMDIgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3Qgc2VlayB0byBlbmQgb2YgZmlsZSIKKyAgICA4MjAzICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IHNlZWsgdG8gcmVxdWlyZWQgcG9zaXRpb24gaW4gZmlsZSIKKyAgICA4MjA0ICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGR1cGxpY2F0ZSB0aGUgaGFuZGxlIgorICAgIDgyMDUgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgcmVhZCBkYXRhIGZyb20gZmlsZSIKKyAgICA4MjA2ICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IHJlc2V0IGZpbGUgdG8gYmVnaW5uaW5nIgorICAgIDgyMDcgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgYWNlcnRhaW4gdGhlIGZpbGUgc2l6ZSIKK0VORAorCitTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSAKK0JFR0lOCisgICAgODIwOCAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBkZXRlcm1pbmUgYmFzZSBwYXRobmFtZSBvZiB0aGUgZmlsZSIKKyAgICA4MjA5ICAgICAgICAgICAgICAgICAgICAiVGhlIGhhc2ggbW9kdWx1cyBjYW5ub3QgYmUgemVybyIKKyAgICA4MjEwICAgICAgICAgICAgICAgICAgICAiSGFzaGluZyB0aGUga2V5IHJldHVybmVkIGFuIGludmFsaWQgYmFkIGhhc2ggdmFsdWUiCisgICAgODIxMSAgICAgICAgICAgICAgICAgICAgIlRoZSBrZXkgJ3swfScgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSBoYXNoIHRhYmxlIgorICAgIDgyMTIgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIG11dGV4IgorICAgIDgyMTMgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgY2xvc2UgbXV0ZXgiCisgICAgODIxNCAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBsb2NrIG11dGV4IgorICAgIDgyMTUgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgdW5sb2NrIG11dGV4IgorICAgIDgyMTYgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZGVzdHJveSBtdXRleCIKKyAgICA4MjE3ICAgICAgICAgICAgICAgICAgICAiVGhlIGVsZW1lbnQgezB9IGFscmVhZHkgZXhpc3RzIgorICAgIDgyMTggICAgICAgICAgICAgICAgICAgICJIYXNoaW5nIHRoZSBrZXkgcmV0dXJuZWQgYW4gaW52YWxpZCBiYWQgaGFzaCB2YWx1ZSIKKyAgICA4MjE5ICAgICAgICAgICAgICAgICAgICAiVGhlIHBhc3NlZCBpZCBpcyBub3QgdmFsaWQgZm9yIHRoaXMgcG9vbCIKKyAgICA4MjIwICAgICAgICAgICAgICAgICAgICAiVGhlIG1vZHVsdXMgdmFsdWUgY2Fubm90IGJlIHplcm8iCisgICAgODIyMSAgICAgICAgICAgICAgICAgICAgIlRoZSBpbmRleCBpcyBwYXN0IHRoZSB0b3Agb2Ygc3RhY2siCisgICAgODIyMiAgICAgICAgICAgICAgICAgICAgIlRoZSBzdGFjayBpcyBlbXB0eSwgY2Fubm90IGFjY2VzcyBtZW1iZXJzIgorICAgIDgyMjMgICAgICAgICAgICAgICAgICAgICJUaGUgdGFyZ2V0IGJ1ZmZlciBjYW5ub3QgaGF2ZSBhIG1heCBzaXplIG9mIHplcm8iCitFTkQKKworU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgCitCRUdJTgorICAgIDgyMjQgICAgICAgICAgICAgICAgICAgICJUaGUgZ2l2ZW4gcmFkaXggaXMgbm90IHN1cHBvcnRlZC4gVXNlIDIsIDgsIDEwLCBvciAxNiIKKyAgICA4MjI1ICAgICAgICAgICAgICAgICAgICAiVGhlIHRhcmdldCBidWZmZXIgaXMgdG9vIHNtYWxsIHRvIGFjY2VwdCB0aGUgcmVzdWx0cyIKKyAgICA4MjI2ICAgICAgICAgICAgICAgICAgICAiVGhlIHN0YXJ0IGluZGV4IGlzIHBhc3QgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIgorICAgIDgyMjcgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3Qgd3JpdGUgdG8gc3RhbmRhcmQgZXJyIgorICAgIDgyMjggICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3Qgd3JpdGUgdG8gc3RhbmRhcmQgb3V0IgorICAgIDgyMjkgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3Qgd3JpdGUgdG8gY29uc29sZSIKKyAgICA4MjMwICAgICAgICAgICAgICAgICAgICAiU3RyaW5nIHBvb2wgaWQgd2FzIG5vdCBsZWdhbCIKKyAgICA4MjMxICAgICAgICAgICAgICAgICAgICAiVGhlIFVSTCB3YXMgbm90IGNvcnJlY3RseSBmb3JtZWQiCisgICAgODIzMiAgICAgICAgICAgICAgICAgICAgIlRoZSBVUkwgdXNlZCBhbiB1bnN1cHBvcnRlZCBwcm90b2NvbCIKKyAgICA4MjMzICAgICAgICAgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgVVJMIHByb3RvY29sOiAnezB9JyIKKyAgICA4MjM0ICAgICAgICAgICAgICAgICAgICAiT25seSBsb2NhbGhvc3QgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZSIKKyAgICA4MjM1ICAgICAgICAgICAgICAgICAgICAiTm8gcHJvdG9jb2wgcHJlZml4IHByZXNlbnQiCisgICAgODIzNiAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIC8vIGFmdGVyIHByb3RvY29sIgorICAgIDgyMzcgICAgICAgICAgICAgICAgICAgICIlIG11c3QgYmUgZm9sbG93ZWQgYnkgdHdvIGhleCBkaWdpdHMiCisgICAgODIzOCAgICAgICAgICAgICAgICAgICAgIlVudGVybWluYXRlZCBob3N0IGNvbXBvbmVudCIKKyAgICA4MjM5ICAgICAgICAgICAgICAgICAgICAiVGhlIHBhc3NlZCBpbmRleCBpcyBwYXN0IHRoZSBlbmQgb2YgdGhlIHZlY3RvciIKK0VORAorCitTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSAKK0JFR0lOCisgICAgODI0MCAgICAgICAgICAgICAgICAgICAgIlBhcnNlIG1heSBub3QgYmUgY2FsbGVkIHdoaWxlIHBhcnNpbmciCisgICAgODI0MSAgICAgICAgICAgICAgICAgICAgIkEgRE9DVFlQRSB3YXMgc2VlbiBidXQgdGhlIGluc3RhbGxlZCB2YWxpZGF0b3IgZG9lcyBub3QgdW5kZXJzdGFuZCBEVERzIgorICAgIDgyNDIgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3Qgb3BlbiBEVEQgZmlsZSAnezB9JyIKKyAgICA4MjQzICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IG9wZW4gZXh0ZXJuYWwgZW50aXR5ICd7MH0nIgorICAgIDgyNDQgICAgICAgICAgICAgICAgICAgICJUaGUgZW5kIG9mIGlucHV0IHdhcyBub3QgZXhwZWN0ZWQiCisgICAgODI0NSAgICAgICAgICAgICAgICAgICAgIlRoZSBpbmRleCBnaXZlbiB3YXMgYmV5b25kIHRoZSBtYXggYXR0cmlidXRlIGluZGV4IgorICAgIDgyNDYgICAgICAgICAgICAgICAgICAgICJUaGUgZWxlbWVudCBzdGFjayBpcyBlbXB0eSIKKyAgICA4MjQ3ICAgICAgICAgICAgICAgICAgICAiVGhlIGVsZW1lbnQgc3RhY2sgaW5kZXggZ2l2ZW4gd2FzIGJleW9uZCB0aGUgc3RhY2sgdG9wIgorICAgIDgyNDggICAgICAgICAgICAgICAgICAgICJUaGUgZWxlbWVudCBzdGFjayB3YXMgYWxyZWFkeSBlbXB0eSB3aGVuIGEgcG9wIHJlcXVlc3Qgb2NjdXJlZCIKKyAgICA4MjQ5ICAgICAgICAgICAgICAgICAgICAiQSBwYXJlbnQgb3BlcmF0aW9uIHdhcyByZXF1ZXN0ZWQsIGJ1dCBvbmx5IG9uZSBlbGVtZW50IGlzIG9uIHRoZSBzdGFjayIKKyAgICA4MjUwICAgICAgICAgICAgICAgICAgICAiVGhlIGluZGljYXRlZCByZWFkZXIgaWQgd2FzIG5ldmVyIGZvdW5kIgorICAgIDgyNTEgICAgICAgICAgICAgICAgICAgICJUaGUgYXV0byBlbmNvZGluZyBlbnVtIGhhcyBhbiB1bmtub3duIHZhbHVlIgorICAgIDgyNTIgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGEgY29udmVydGVyIGZvciBlbmNvZGluZzogezB9IgorICAgIDgyNTMgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZGVjb2RlIGZpcnN0IGxpbmUgb2YgZW50aXR5OiB7MH0iCisgICAgODI1NCAgICAgICAgICAgICAgICAgICAgIkVuZCBvZiBpbnB1dCB3YXMgaGl0IGluIHRoZSBtaWRkbGUgb2YgYSBtdWx0aWJ5dGUgc2VxdWVuY2UiCisgICAgODI1NSAgICAgICAgICAgICAgICAgICAgIlRoaXMgZW5jb2RpbmcgKHswfSlzaG91bGQgaGF2ZSBoYWQgYSB0cmFuc2NvZGVyIgorRU5ECisKK1NUUklOR1RBQkxFIERJU0NBUkRBQkxFIAorQkVHSU4KKyAgICA4MjU2ICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBzZWNvbmQgYnl0ZSBvZiBhIFVURi04IGNoYXJhY3RlciBzZXF1ZW5jZSIKKyAgICA4MjU3ICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBzdXJyb2dhdGUgY2hhcmFjdGVyIGZvdW5kIGluIFVURi04IGRhdGEiCisgICAgODI1OCAgICAgICAgICAgICAgICAgICAgIlRoZSBwcmltYXJ5IGRvY3VtZW50IGVudGl0eSBjb3VsZCBub3QgYmUgb3BlbmVkLiBJZD17MH0iCisgICAgODI1OSAgICAgICAgICAgICAgICAgICAgIlVuYmFsYW5jZWQgc3RhcnQvZW5kIHRhZ3MgZm91bmQsIGNhbm5vdCBjb250aW51ZSIKKyAgICA4MjYwICAgICAgICAgICAgICAgICAgICAiVGhlIHBhc3NlZCBBdHRUeXBlcyB2YWx1ZSBpcyBub3Qga25vd24iCisgICAgODI2MSAgICAgICAgICAgICAgICAgICAgIlRoZSBwYXNzZWQgRGVmQXR0VHlwZXMgdmFsdWUgaXMgbm90IGtub3duIgorICAgIDgyNjIgICAgICAgICAgICAgICAgICAgICJUaGUgYnVmZmVyIG1hbmFnZXIgY2Fubm90IHByb3ZpZGUgYW55IG1vcmUgYnVmZmVycyIKKyAgICA4MjYzICAgICAgICAgICAgICAgICAgICAiVGhlIHBhc3NlZCBidWZmZXIgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIG1hbmFnZXIncyBwb29sIgorICAgIDgyNjQgICAgICAgICAgICAgICAgICAgICJUaGUgcGFzc2VkIHJlY29nbml6ZXIgZW5jb2Rpbmcgd2FzIG5vdCBrbm93biIKKyAgICA4MjY1ICAgICAgICAgICAgICAgICAgICAiVGhlIGJsb2NrIG9mIFhNTCBkYXRhIGNvdWxkIG5vdCBiZSB0cmFuc2NvZGVkIgorICAgIDgyNjYgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGEgZGVmYXVsdCB0cmFuc2NvZGVyIgorICAgIDgyNjcgICAgICAgICAgICAgICAgICAgICJUaGUgYmluYXJ5IG9wZXJhdGlvbiBub2RlIGhhZCBhIHVuYXJ5IG5vZGUgdHlwZSIKKyAgICA4MjY4ICAgICAgICAgICAgICAgICAgICAiVGhlIGNvbnRlbnQgdHlwZSBtdXN0IGJlIG1peGVkIG9yIGNoaWxkcmVuIgorICAgIDgyNjkgICAgICAgICAgICAgICAgICAgICJQQ0RBVEEgbm9kZXMgYXJlIG5vdCB2YWxpZCBoZXJlIgorICAgIDgyNzAgICAgICAgICAgICAgICAgICAgICJUaGUgezB9IG9wZXJhdGlvbiBpcyBpbnZhbGlkIGZvciB0aGUgc3BlYyB0eXBlIgorICAgIDgyNzEgICAgICAgICAgICAgICAgICAgICJUaGUgdW5hcnkgb3BlcmF0aW9uIG5vZGUgaGFkIGEgYmluYXJ5IG5vZGUgdHlwZSIKK0VORAorCitTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSAKK0JFR0lOCisgICAgODI3MiAgICAgICAgICAgICAgICAgICAgIlVua25vd24gY29udGVudCBtb2RlbCB0eXBlIgorICAgIDgyNzMgICAgICAgICAgICAgICAgICAgICJVbmtub3duIGNvbnRlbnQgc3BlYyB0eXBlIgorICAgIDgyNzQgICAgICAgICAgICAgICAgICAgICJUaGUgZWxlbWVudCBpZCB3YXMgaW52YWxpZCIKKyAgICA4Mjc1ICAgICAgICAgICAgICAgICAgICAiVGhlIGNhbGwgdG8gc2Nhbk5leHQoKSBpcyBpbGxlZ2FsIGF0IHRoaXMgdGltZSIKK0VORAogCiAjZW5kaWYgICAgLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKKworI2lmbmRlZiBBUFNUVURJT19JTlZPS0VECisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEdlbmVyYXRlZCBmcm9tIHRoZSBURVhUSU5DTFVERSAzIHJlc291cmNlLgorLy8KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2VuZGlmICAgIC8vIG5vdCBBUFNUVURJT19JTlZPS0VECisKZGlmZiAtLWdpdCBhL3NyYy91dGlsL1BsYXRmb3Jtcy9XaW4zMi9XaW4zMlBsYXRmb3JtVXRpbHMuY3BwIGIvc3JjL3V0aWwvUGxhdGZvcm1zL1dpbjMyL1dpbjMyUGxhdGZvcm1VdGlscy5jcHAKaW5kZXggNDljYTAzMC4uYjRhZmExZiAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvUGxhdGZvcm1zL1dpbjMyL1dpbjMyUGxhdGZvcm1VdGlscy5jcHAKKysrIGIvc3JjL3V0aWwvUGxhdGZvcm1zL1dpbjMyL1dpbjMyUGxhdGZvcm1VdGlscy5jcHAKQEAgLTU2LDggKzU2LDExIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNjoyMSAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjIgMjA6NDE6MjYgIGFiYWdjaGkKKyAqIENoYW5nZWQgJ2ludGxGaWxlcy9Mb2NhbGVzJyB0byAnaWN1L2RhdGEnCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNjoyMSAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjQgIDE5OTkvMTEvMDggMjA6NDU6MzMgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC02OTUsNyArNjk4LDcgQEAKICAgICBpZiAoITo6R2V0RW52aXJvbm1lbnRWYXJpYWJsZUEoIklDVV9EQVRBIiwgdG1wQnVmLCA0MDk2KSkKICAgICB7CiAgICAgICAgIHN0cmNweSh0bXBCdWYsIGZnTGliTG9jYXRpb24pOwotICAgICAgICBzdHJjYXQodG1wQnVmLCAiaW50bEZpbGVzXFxMb2NhbGVzXFwiKTsKKyAgICAgICAgc3RyY2F0KHRtcEJ1ZiwgImljdVxcZGF0YVxcIik7CiAgICAgICAgIElDVVRyYW5zU2VydmljZTo6c2V0SUNVUGF0aCh0bXBCdWYpOwogICAgIH0KICAgICByZXR1cm4gbmV3IElDVVRyYW5zU2VydmljZTsKZGlmZiAtLWdpdCBhL3NyYy91dGlsL1RyYW5zY29kZXJzL0lDVS9JQ1VUcmFuc1NlcnZpY2UuY3BwIGIvc3JjL3V0aWwvVHJhbnNjb2RlcnMvSUNVL0lDVVRyYW5zU2VydmljZS5jcHAKaW5kZXggZTlmZGVhYi4uZjZmNzJjMSAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvVHJhbnNjb2RlcnMvSUNVL0lDVVRyYW5zU2VydmljZS5jcHAKKysrIGIvc3JjL3V0aWwvVHJhbnNjb2RlcnMvSUNVL0lDVVRyYW5zU2VydmljZS5jcHAKQEAgLTU2LDggKzU2LDE0IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNjowNyAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMTggMjA6MTY6NTIgIGFiYWdjaGkKKyAqIE5vdyB3b3JrcyB3aXRoIElDVSAxLjMuMQorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xNyAyMjozNjo0MSAgcmFodWxqCisgKiBDb2RlIHdvcmtzIHdpdGggSUNVIHRyYW5zY29kaW5nIHNlcnZpY2UKKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA2OjA3ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NTozMyAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTc3LDYgKzgzLDcgQEAKICNpbmNsdWRlIDx1c3RyaW5nLmg+CiAKIAorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBJQ1VUcmFuc1NlcnZpY2U6IFB1YmxpYywgc3RhdGljIG1ldGhvZHMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTc0LDcgKzE4MSw3IEBACiAgICAgLy8gIHdoaWNoIHdpbGwgYmFzaWNhbGx5IGNhdXNlIHRoZSBzeXN0ZW0gdG8gZ2l2ZSB1cCBiZWNhdXNlIHdlIHJlYWxseSBjYW4ndAogICAgIC8vICBkbyBhbnl0aGluZyB3aXRob3V0IG9uZS4KICAgICAvLwotICAgIFVFcnJvckNvZGUgdWVyciA9IFpFUk9fRVJST1I7CisgICAgVUVycm9yQ29kZSB1ZXJyID0gVV9aRVJPX0VSUk9SOwogICAgIFVDb252ZXJ0ZXIqIGNvbnZlcnRlciA9IHVjbnZfb3BlbihOVUxMLCAmdWVycik7CiAgICAgaWYgKCFjb252ZXJ0ZXIpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTg5LDcgKzE5Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgICAgICBYTUxUcmFuc1NlcnZpY2U6OkNvZGVzJiByZXNWYWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY29uc3QgdW5zaWduZWQgaW50ICAgICAgICAgICAgYmxvY2tTaXplKQogewotICAgIFVFcnJvckNvZGUgdWVyciA9IFpFUk9fRVJST1I7CisgICAgVUVycm9yQ29kZSB1ZXJyID0gVV9aRVJPX0VSUk9SOwogICAgIFVDb252ZXJ0ZXIqIGNvbnZlcnRlciA9IHVjbnZfb3BlblUoZW5jb2RpbmdOYW1lLCAmdWVycik7CiAgICAgaWYgKCFjb252ZXJ0ZXIpCiAgICAgewpAQCAtMjM5LDcgKzI0Niw3IEBACiAKICAgICBYTUxNdXRleExvY2sgbG9ja0NvbnZlcnRlcigmZk11dGV4KTsKIAotICAgIFVFcnJvckNvZGUgZXJyID0gWkVST19FUlJPUjsKKyAgICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKICAgICBjb25zdCBpbnQzMl90IHRhcmdldENhcCA9IHVjbnZfZnJvbVVDaGFycwogICAgICgKICAgICAgICAgZkNvbnZlcnRlcgpAQCAtMjQ5LDcgKzI1Niw3IEBACiAgICAgICAgICwgJmVycgogICAgICk7CiAKLSAgICBpZiAoZXJyICE9IEJVRkZFUl9PVkVSRkxPV19FUlJPUikKKyAgICBpZiAoZXJyICE9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiAodW5zaWduZWQgaW50KXRhcmdldENhcDsKQEAgLTI2Miw3ICsyNjksNyBAQAogCiAgICAgWE1MTXV0ZXhMb2NrIGxvY2tDb252ZXJ0ZXIoJmZNdXRleCk7CiAKLSAgICBVRXJyb3JDb2RlIGVyciA9IFpFUk9fRVJST1I7CisgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7CiAgICAgY29uc3QgaW50MzJfdCB0YXJnZXRDYXAgPSB1Y252X3RvVUNoYXJzCiAgICAgKAogICAgICAgICBmQ29udmVydGVyCkBAIC0yNzMsNyArMjgwLDcgQEAKICAgICAgICAgLCAmZXJyCiAgICAgKTsKIAotICAgIGlmIChlcnIgIT0gQlVGRkVSX09WRVJGTE9XX0VSUk9SKQorICAgIGlmIChlcnIgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gU3VidHJhY3Qgb25lIHNpbmNlIGl0IGluY2x1ZGVzIHRoZSB0ZXJtaW5hdG9yIHNwYWNlCkBAIC0yOTEsNyArMjk4LDcgQEAKIAogICAgIFhNTE11dGV4TG9jayBsb2NrQ29udmVydGVyKCZmTXV0ZXgpOwogCi0gICAgVUVycm9yQ29kZSBlcnIgPSBaRVJPX0VSUk9SOworICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwogICAgIGNvbnN0IGNoYXIqIHN0YXJ0U3JjID0gc3JjRGF0YTsKICAgICBjb25zdCBYTUxDaCBjaFJldCA9IHVjbnZfZ2V0TmV4dFVDaGFyCiAgICAgKApAQCAtMzAyLDcgKzMwOSw3IEBACiAgICAgKTsKIAogICAgIC8vIEJhaWwgb3V0IGlmIGFuIGVycm9yCi0gICAgaWYgKEZBSUxVUkUoZXJyKSkKKyAgICBpZiAoVV9GQUlMVVJFKGVycikpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBieXRlcyBlYXRlbiBhbmQgcmV0dXJuIHRoZSBjaGFyCkBAIC0zMzUsNyArMzQyLDcgQEAKICAgICByZXRCdWYgPSBuZXcgY2hhclt0YXJnZXRMZW4gKyAxXTsKIAogICAgIC8vQ29udmVydCB0aGUgVW5pY29kZSBzdHJpbmcgdG8gY2hhciogdXNpbmcgSW50bCBzdHVmZgotICAgIFVFcnJvckNvZGUgZXJyID0gWkVST19FUlJPUjsKKyAgICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKICAgICBpbnQzMl90IHRhcmdldENhcCA9IHVjbnZfZnJvbVVDaGFycwogICAgICgKICAgICAgICAgZkNvbnZlcnRlcgpAQCAtMzQ2LDE2ICszNTMsMTYgQEAKICAgICApOwogCiAgICAgLy8gSWYgdGFyZ2V0TGVuIGlzIG5vdCBlbm91Z2ggdGhlbiBidWZmZXIgb3ZlcmZsb3cgbWlnaHQgb2NjdXIKLSAgICBpZiAoZXJyID09IEJVRkZFUl9PVkVSRkxPV19FUlJPUikKKyAgICBpZiAoZXJyID09IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKQogICAgIHsKICAgICAgICAgLy8gUmVzZXQgdGhlIGVycm9yLCBkZWxldGUgdGhlIG9sZCBidWZmZXIsIGFsbG9jYXRlIGEgbmV3IG9uZSwgYW5kIHRyeSBhZ2FpbgotICAgICAgICBlcnIgPSBaRVJPX0VSUk9SOworICAgICAgICBlcnIgPSBVX1pFUk9fRVJST1I7CiAgICAgICAgIGRlbGV0ZSBbXSByZXRCdWY7CiAgICAgICAgIHJldEJ1ZiA9IG5ldyBjaGFyW3RhcmdldENhcF07CiAgICAgICAgIHRhcmdldENhcCA9IHVjbnZfZnJvbVVDaGFycyhmQ29udmVydGVyLCByZXRCdWYsIHRhcmdldENhcCwgdG9UcmFuc2NvZGUsICZlcnIpOwogICAgIH0KIAotICAgIGlmIChGQUlMVVJFKGVycikpCisgICAgaWYgKFVfRkFJTFVSRShlcnIpKQogICAgIHsKICAgICAgICAgZGVsZXRlIFtdIHJldEJ1ZjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zODYsMTEgKzM5MywxMSBAQAogCiAgICAgWE1MTXV0ZXhMb2NrIGxvY2tDb252ZXJ0ZXIoJmZNdXRleCk7CiAKLSAgICBVRXJyb3JDb2RlIGVyciA9IFpFUk9fRVJST1I7CisgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7CiAgICAgaW50MzJfdCB0YXJnZXRDYXA7CiAgICAgdGFyZ2V0Q2FwID0gdWNudl9mcm9tVUNoYXJzKGZDb252ZXJ0ZXIsIHRvRmlsbCwgbWF4Q2hhcnMgKyAxLCB0b1RyYW5zY29kZSwgJmVycik7CiAKLSAgICBpZiAoRkFJTFVSRShlcnIpKQorICAgIGlmIChVX0ZBSUxVUkUoZXJyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC00MjIsMTAgKzQyOSwxMCBAQAogCiAgICAgLy8KICAgICAvLyAgSGVyZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHRhcmdldCBsZW5ndGggd2lsbCBiZSBzbyB1c2UgMCBhbmQgZXhwZWN0Ci0gICAgLy8gIGFuIEJVRkZFUl9PVkVSRkxPV19FUlJPUiBpbiB3aGljaCBjYXNlIGl0J2QgZ2V0IHJlc29sdmVkIGJ5IHRoZQorICAgIC8vICBhbiBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUiBpbiB3aGljaCBjYXNlIGl0J2QgZ2V0IHJlc29sdmVkIGJ5IHRoZQogICAgIC8vICBjb3JyZWN0IGNhcGFjaXR5IHZhbHVlLgogICAgIC8vCi0gICAgVUVycm9yQ29kZSBlcnIgPSBaRVJPX0VSUk9SOworICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwogICAgIGludDMyX3QgdGFyZ2V0Q2FwOwogICAgIHRhcmdldENhcCA9IHVjbnZfdG9VQ2hhcnMKICAgICAoCkBAIC00MzcsMTAgKzQ0NCwxMCBAQAogICAgICAgICAsICZlcnIKICAgICApOwogCi0gICAgaWYgKGVyciAhPSBCVUZGRVJfT1ZFUkZMT1dfRVJST1IpCisgICAgaWYgKGVyciAhPSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBlcnIgPSBaRVJPX0VSUk9SOworICAgIGVyciA9IFVfWkVST19FUlJPUjsKICAgICByZXRWYWwgPSBuZXcgWE1MQ2hbdGFyZ2V0Q2FwXTsKICAgICB1Y252X3RvVUNoYXJzCiAgICAgKApAQCAtNDUyLDcgKzQ1OSw3IEBACiAgICAgICAgICwgJmVycgogICAgICk7CiAKLSAgICBpZiAoRkFJTFVSRShlcnIpKQorICAgIGlmIChVX0ZBSUxVUkUoZXJyKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gcmV0VmFsOwpAQCAtNDc4LDcgKzQ4NSw3IEBACiAKICAgICBYTUxNdXRleExvY2sgbG9ja0NvbnZlcnRlcigmZk11dGV4KTsKIAotICAgIFVFcnJvckNvZGUgZXJyID0gWkVST19FUlJPUjsKKyAgICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKICAgICBjb25zdCBpbnQzMl90IHNyY0xlbiA9IChpbnQzMl90KXN0cmxlbih0b1RyYW5zY29kZSk7CiAKICAgICB1Y252X3RvVUNoYXJzCkBAIC00OTEsNyArNDk4LDcgQEAKICAgICAgICAgLCAmZXJyCiAgICAgKTsKIAotICAgIGlmIChGQUlMVVJFKGVycikpCisgICAgaWYgKFVfRkFJTFVSRShlcnIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01MjQsNyArNTMxLDcgQEAKICAgICAvLyAgd2hlbiB0aGUgcmF3IGlucHV0IGJ1ZmZlciBob2xkcyBtb3JlIGNoYXJhY3RlcnMgdGhhbiB3aWxsIGZpdAogICAgIC8vICBpbiB0aGUgVW5pY29kZSBvdXRwdXQgYnVmZmVyLgogICAgIC8vCi0gICAgVUVycm9yQ29kZSAgZXJyID0gWkVST19FUlJPUjsKKyAgICBVRXJyb3JDb2RlICBlcnIgPSBVX1pFUk9fRVJST1I7CiAgICAgdWNudl90b1VuaWNvZGUKICAgICAoCiAgICAgICAgIGZDb252ZXJ0ZXIKQEAgLTUzNyw3ICs1NDQsNyBAQAogICAgICAgICAsICZlcnIKICAgICApOwogCi0gICAgaWYgKChlcnIgIT0gWkVST19FUlJPUikgJiYgKGVyciAhPSBJTkRFWF9PVVRPRkJPVU5EU19FUlJPUikpCisgICAgaWYgKChlcnIgIT0gVV9aRVJPX0VSUk9SKSAmJiAoZXJyICE9IFVfSU5ERVhfT1VUT0ZCT1VORFNfRVJST1IpKQogICAgICAgICBUaHJvd1hNTChUcmFuc2NvZGluZ0V4Y2VwdGlvbiwgWE1MNENFeGNlcHRzOjpUcmFuc19Db3VsZE5vdFhDb2RlWE1MRGF0YSk7CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIGJ5dGVzIGVhdGVuIGFuZCBzdG9yZSBpbiBjYWxsZXIncyBwYXJhbQpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvVHJhbnNjb2RlcnMvSUNVL01ha2VmaWxlLmluIGIvc3JjL3V0aWwvVHJhbnNjb2RlcnMvSUNVL01ha2VmaWxlLmluCmluZGV4IDUyMGVhYTQuLjMwYzgxOWMgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL1RyYW5zY29kZXJzL0lDVS9NYWtlZmlsZS5pbgorKysgYi9zcmMvdXRpbC9UcmFuc2NvZGVycy9JQ1UvTWFrZWZpbGUuaW4KQEAgLTU1LDggKzU1LDEyIEBACiAjIAogIwogIyAkTG9nJAotIyBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDY6MDggIHR3bAotIyBJbml0aWFsIHJldmlzaW9uCisjIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8yMyAwMjowMDo1NCAgcmFodWxqCisjIENvZGUgbm93IHdvcmtzIHVuZGVyIEhQVVggMTEuIFRlc3RlZCBpbm1lbW9yeSBtZXNzYWdlIGxvYWRlci4KK1JldmFtcGVkIG1ha2VmaWxlcy4gQnVpbGRzIHdpdGggYm90aCBEQ0UgdGhyZWFkcyBhcyB3ZWxsIGFzIHB0aHJlYWQgbGlicmFyaWVzLgorIworIyBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA2OjA4ICB0d2wKKyMgSW5pdGlhbCBjaGVja2luCiAjCiAjIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NTozNCAgcmFodWwKICMgU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNjQsNyArNjgsOCBAQAogIwogCiBQTEFURk9STSA9IEBwbGF0Zm9ybUAKLUNPTVBJTEVSID0gQGNvbXBpbGVyQAorQ0MgID0gQGNjQAorQ1hYID0gQGN4eEAKIENYWEZMQUdTID0gQGN4eGZsYWdzQAogQ0ZMQUdTID0gQGNmbGFnc0AKIFBSRUZJWCA9IEBwcmVmaXhACmRpZmYgLS1naXQgYS9zcmMvdXRpbC9UcmFuc2NvZGVycy9JY29udi9JY29udlRyYW5zU2VydmljZS5jcHAgYi9zcmMvdXRpbC9UcmFuc2NvZGVycy9JY29udi9JY29udlRyYW5zU2VydmljZS5jcHAKaW5kZXggZjU3NTZlZC4uM2RhYjRkMSAxMDA2NDQKLS0tIGEvc3JjL3V0aWwvVHJhbnNjb2RlcnMvSWNvbnYvSWNvbnZUcmFuc1NlcnZpY2UuY3BwCisrKyBiL3NyYy91dGlsL1RyYW5zY29kZXJzL0ljb252L0ljb252VHJhbnNTZXJ2aWNlLmNwcApAQCAtNTYsOCArNTYsMjMgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA2OjEwICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuNCAgMTk5OS8xMi8wMiAyMDoyMDoxNiAgcmFodWxqCisgKiBGaXhlZCBpbmNvcnJlY3QgY29tcGFyaXNpb24gb2YgaW50IHdpdGggYSBwb2ludGVyLgorR290IGJ1cm50IGJlY2F1c2UgZGVmaW5pdGlvbiBvZiBOVUxMIHZhcmllcyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLAordGhvdWdoIHVzZSBvZiBOVUxMIHdhcyBub3QgY29ycmVjdCBpbiB0aGUgZmlyc3QgcGxhY2UuCisgKgorICogUmV2aXNpb24gMS4zICAxOTk5LzExLzIwIDAwOjI4OjE5ICByYWh1bGoKKyAqIEFkZGVkIGNvZGUgZm9yIGNhc2UtaW5zZW5zaXRpdmUgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nIGNvbXBhcmVzCisgKgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzE3IDIxOjUyOjQ5ICBhYmFnY2hpCisgKiBDaGFuZ2VkIHdjc2Nhc2VjbXAoKSB0byB3Y3NjbXAoKSB0byBtYWtlIGl0IHdvcmsgb24gU29sYXJpcyBhbmQgQUlYCisgKiBQUjoKKyAqIE9idGFpbmVkIGZyb206CisgKiBTdWJtaXR0ZWQgYnk6CisgKiBSZXZpZXdlZCBieToKKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA2OjEwICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuNyAgMTk5OS8xMS8wOCAyMDo0NTozNCAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTExMCw2MCArMTI1LDQ3IEBACiBpbnQgSWNvbnZUcmFuc1NlcnZpY2U6OmNvbXBhcmVJU3RyaW5nKCAgY29uc3QgICBYTUxDaCogY29uc3QgICAgY29tcDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGNvbnN0IFhNTENoKiBjb25zdCAgICBjb21wMikKIHsKLSAgICB1bnNpZ25lZCBpbnQgIGxlbnQxID0gZ2V0V2lkZUNoYXJMZW5ndGgoY29tcDEpOwotICAgIHVuc2lnbmVkIGludCAgbGVudDIgPSBnZXRXaWRlQ2hhckxlbmd0aChjb21wMik7CisgICAgY29uc3QgWE1MQ2gqIGNwdHIxID0gY29tcDE7CisgICAgY29uc3QgWE1MQ2gqIGNwdHIyID0gY29tcDI7CiAKLSAgICB3Y2hhcl90KiAgICB0bXAxID0gbmV3IHdjaGFyX3RbbGVudDEgKyAxXTsKLSAgICB3Y2hhcl90KiAgICB0bXAyID0gbmV3IHdjaGFyX3RbbGVudDIgKyAxXTsKKyAgICB3aGlsZSAoKCpjcHRyMSAhPSAwKSAmJiAoKmNwdHIyICE9IDApKQorICAgIHsKKyAgICAgICAgd2ludF90ICB3Y2gxID0gdG93dXBwZXIoKmNwdHIxKTsKKyAgICAgICAgd2ludF90ICB3Y2gyID0gdG93dXBwZXIoKmNwdHIyKTsKKyAgICAgICAgaWYgKHdjaDEgPCB3Y2gyKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAod2NoMSA+IHdjaDIpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgIGNvbnN0IFhNTENoKiAgcHRyID0gY29tcDE7Ci0gICAgd2NoYXJfdCogICAgICB0YXJnZXQgPSB0bXAxOwotICAgIHdoaWxlICgqcHRyKyspCi0gICAgICAgICp0YXJnZXQrKyA9ICpwdHI7Ci0gICAgKnRhcmdldCA9IDB4MDA7Ci0gICAgCi0gICAgcHRyID0gY29tcDI7Ci0gICAgdGFyZ2V0ID0gdG1wMjsKLSAgICB3aGlsZSAoKnB0cisrKQotICAgICAgICAqdGFyZ2V0KysgPSAqcHRyOwotICAgICp0YXJnZXQgPSAweDAwOwotCi0gICAgaW50IHJldHZhbCA9IHdjc2Nhc2VjbXAodG1wMSwgdG1wMik7Ci0KLSAgICBkZWxldGUgW10gdG1wMTsKLSAgICBkZWxldGUgW10gdG1wMjsKLQotICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIGNwdHIxKys7CisgICAgICAgIGNwdHIyKys7CisgICAgfQorICAgIHJldHVybiAwOwogfQogCisKIGludCBJY29udlRyYW5zU2VydmljZTo6Y29tcGFyZU5JU3RyaW5nKCBjb25zdCAgIFhNTENoKiBjb25zdCAgICBjb21wMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY29uc3QgWE1MQ2gqIGNvbnN0ICAgIGNvbXAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBjb25zdCB1bnNpZ25lZCBpbnQgICAgbWF4Q2hhcnMpCiB7Ci0gICAgdW5zaWduZWQgaW50ICBsZW50MSA9IGdldFdpZGVDaGFyTGVuZ3RoKGNvbXAxKTsKLSAgICB1bnNpZ25lZCBpbnQgIGxlbnQyID0gZ2V0V2lkZUNoYXJMZW5ndGgoY29tcDIpOworICAgIGNvbnN0IFhNTENoKiBjcHRyMSA9IGNvbXAxOworICAgIGNvbnN0IFhNTENoKiBjcHRyMiA9IGNvbXAyOwogCi0gICAgd2NoYXJfdCogICAgdG1wMSA9IG5ldyB3Y2hhcl90W2xlbnQxICsgMV07Ci0gICAgd2NoYXJfdCogICAgdG1wMiA9IG5ldyB3Y2hhcl90W2xlbnQyICsgMV07CisgICAgdW5zaWduZWQgaW50ICBuID0gMDsKKyAgICB3aGlsZSAoKCpjcHRyMSAhPSAwKSAmJiAoKmNwdHIyICE9IDApICYmIChuIDwgbWF4Q2hhcnMpKQorICAgIHsKKyAgICAgICAgd2ludF90ICB3Y2gxID0gdG93dXBwZXIoKmNwdHIxKTsKKyAgICAgICAgd2ludF90ICB3Y2gyID0gdG93dXBwZXIoKmNwdHIyKTsKKyAgICAgICAgaWYgKHdjaDEgPCB3Y2gyKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAod2NoMSA+IHdjaDIpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgIGNvbnN0IFhNTENoKiAgcHRyID0gY29tcDE7Ci0gICAgd2NoYXJfdCogICAgICB0YXJnZXQgPSB0bXAxOwotICAgIHdoaWxlICgqcHRyKyspCi0gICAgICAgICp0YXJnZXQrKyA9ICpwdHI7Ci0gICAgKnRhcmdldCA9IDB4MDA7Ci0gICAgCi0gICAgcHRyID0gY29tcDI7Ci0gICAgdGFyZ2V0ID0gdG1wMjsKLSAgICB3aGlsZSAoKnB0cisrKQotICAgICAgICAqdGFyZ2V0KysgPSAqcHRyOwotICAgICp0YXJnZXQgPSAweDAwOwotCi0gICAgaW50IHJldHZhbCA9IHdjc25jYXNlY21wKHRtcDEsIHRtcDIsIG1heENoYXJzKTsKLQotICAgIGRlbGV0ZSBbXSB0bXAxOwotICAgIGRlbGV0ZSBbXSB0bXAyOwotCi0gICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgY3B0cjErKzsKKyAgICAgICAgY3B0cjIrKzsKKyAgICAgICAgbisrOworICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvdXRpbC9UcmFuc2NvZGVycy9JY29udi9NYWtlZmlsZS5pbiBiL3NyYy91dGlsL1RyYW5zY29kZXJzL0ljb252L01ha2VmaWxlLmluCmluZGV4IDUyYTk1YmQuLjc2YzQyMGMgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL1RyYW5zY29kZXJzL0ljb252L01ha2VmaWxlLmluCisrKyBiL3NyYy91dGlsL1RyYW5zY29kZXJzL0ljb252L01ha2VmaWxlLmluCkBAIC01NSw4ICs1NSwxMiBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA2OjExICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDI6MDE6MDAgIHJhaHVsagorIyBDb2RlIG5vdyB3b3JrcyB1bmRlciBIUFVYIDExLiBUZXN0ZWQgaW5tZW1vcnkgbWVzc2FnZSBsb2FkZXIuCitSZXZhbXBlZCBtYWtlZmlsZXMuIEJ1aWxkcyB3aXRoIGJvdGggRENFIHRocmVhZHMgYXMgd2VsbCBhcyBwdGhyZWFkIGxpYnJhcmllcy4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowNjoxMSAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDU6MzUgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTY0LDcgKzY4LDggQEAKICMKIAogUExBVEZPUk0gPSBAcGxhdGZvcm1ACi1DT01QSUxFUiA9IEBjb21waWxlckAKK0NDICA9IEBjY0AKK0NYWCA9IEBjeHhACiBDWFhGTEFHUyA9IEBjeHhmbGFnc0AKIENGTEFHUyA9IEBjZmxhZ3NACiBQUkVGSVggPSBAcHJlZml4QApkaWZmIC0tZ2l0IGEvc3JjL3V0aWwvVHJhbnNjb2RlcnMvV2luMzIvV2luMzJUcmFuc1NlcnZpY2UuY3BwIGIvc3JjL3V0aWwvVHJhbnNjb2RlcnMvV2luMzIvV2luMzJUcmFuc1NlcnZpY2UuY3BwCmluZGV4IDMyYzk2ZGEuLmM5NWYwZmUgMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL1RyYW5zY29kZXJzL1dpbjMyL1dpbjMyVHJhbnNTZXJ2aWNlLmNwcAorKysgYi9zcmMvdXRpbC9UcmFuc2NvZGVycy9XaW4zMi9XaW4zMlRyYW5zU2VydmljZS5jcHAKQEAgLTU2LDggKzU2LDE0IEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNjowNCAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMDEgMTg6NTQ6MjYgIHJvZGRleQorICogU21hbGwgc3ludGFjdGljYWwgY2hhbmdlIHRvIG1ha2UgaXQgY29tcGlsZSB1bmRlciBCb3JsYW5kJ3MgY29tcGlsZXIuCisgKiBJdCBkb2VzIG5vdCBtYWtlIGl0IHdvcnNlIHVuZGVyIG90aGVyIGNvbXBpbGVycywgc28gd2h5IG5vdC4gQmFzaWNhbGx5CisgKiBpdCB3YXMganVzdCBjaGFuZ2luZyA6Omlzd3NwYWNlKCkgdG8gaXN3c3BhY2UoKSwgaS5lLiBnZXQgcmlkIG9mIHRoZSA6OgorICogcHJlZml4LCB3aGljaCBmcmVha2VkIG91dCBCb3JsYW5kIGZvciBzb21lIHJlYXNvbi4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA2OjA0ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NTozNSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTEwMiw3ICsxMDgsNyBAQAogCiBib29sIFdpbjMyVHJhbnNTZXJ2aWNlOjppc1NwYWNlKGNvbnN0IFhNTENoIHRvQ2hlY2spIGNvbnN0CiB7Ci0gICAgcmV0dXJuICg6Omlzd3NwYWNlKHRvQ2hlY2spICE9IDApOworICAgIHJldHVybiAoaXN3c3BhY2UodG9DaGVjaykgIT0gMCk7CiB9CiAKIFhNTFRyYW5zY29kZXIqIFdpbjMyVHJhbnNTZXJ2aWNlOjptYWtlTmV3RGVmVHJhbnNjb2RlcigpCmRpZmYgLS1naXQgYS9zcmMvdXRpbC9VUkwuaHBwIGIvc3JjL3V0aWwvVVJMLmhwcAppbmRleCA4MWMyN2U4Li4xYzViNTgyIDEwMDY0NAotLS0gYS9zcmMvdXRpbC9VUkwuaHBwCisrKyBiL3NyYy91dGlsL1VSTC5ocHAKQEAgLTU2LDggKzU2LDExIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowNToyMiAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDE6NDk6NTYgIHJhaHVsagorICogQ2Fubm90IHVzZSBjbGFzcyBxdWFsaWZpZXIgaW4gY2xhc3MgZGVmbi4gQ0MgdW5kZXIgSFBVWCBpcyBoYXBweS4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA1OjIyICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0NToxNiAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTEzOCw3ICsxNDEsNyBAQAogICAgIGNvbnN0IFhNTENoKiBnZXRIb3N0KCkgY29uc3Q7CiAgICAgY29uc3QgWE1MQ2gqIGdldFByb3RvY29sKCkgY29uc3Q7CiAgICAgY29uc3QgWE1MQ2gqIGdldFBhdGgoKSBjb25zdDsKLSAgICBVUkw6OlByb3RvY29scyBnZXRUeXBlKCkgY29uc3Q7CisgICAgUHJvdG9jb2xzIGdldFR5cGUoKSBjb25zdDsKICAgICBjb25zdCBYTUxDaCogZ2V0VVJMKCkgY29uc3Q7CiAKIApAQCAtMTYwLDcgKzE2Myw3IEBACiAgICAgLy8gIFByaXZhdGUgaGVscGVyIG1ldGhvZHMKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIHZvaWQgY2xlYW51cCgpOwotICAgIFVSTDo6UHJvdG9jb2xzIGZpbmRUeXBlKHVuc2lnbmVkIGludCYgY3VyUG9zKSBjb25zdDsKKyAgICBQcm90b2NvbHMgZmluZFR5cGUodW5zaWduZWQgaW50JiBjdXJQb3MpIGNvbnN0OwogICAgIFhNTENoIGdldE5leHRDaCh1bnNpZ25lZCBpbnQmIHBvcywgY29uc3QgYm9vbCBlbmRPayA9IGZhbHNlKSBjb25zdDsKICAgICBYTUxDaCBwZWVrTmV4dENoKHVuc2lnbmVkIGludCBwb3MpIGNvbnN0OwogICAgIHZvaWQgcGFyc2UoKTsKZGlmZiAtLWdpdCBhL3NyYy91dGlsL1hNTDRDRGVmcy5ocHAgYi9zcmMvdXRpbC9YTUw0Q0RlZnMuaHBwCmluZGV4IGY2NDM3N2QuLmVkNjViMDggMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL1hNTDRDRGVmcy5ocHAKKysrIGIvc3JjL3V0aWwvWE1MNENEZWZzLmhwcApAQCAtNTYsOCArNTYsMTQgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA1OjM1ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMi8wMSAxNzoxNjoxNiAgcmFodWxqCisgKiBBZGRlZCBzdXBwb3J0IGZvciBJUklYIDYuNS41IHVzaW5nIFNHSSBNSVBTcHJvIEMrKyA3LjMgYW5kIDcuMjEgZ2VuZXJhdGluZyAzMiBiaXQgb2JqZWN0cy4gQ2hhbmdlcyBzdWJtaXR0ZWQgYnkgTWFyYyBTdHVlc3NlbAorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8xMCAwMjowMjo1MSAgYWJhZ2NoaQorICogQ2hhbmdlZCB2ZXJzaW9uIG51bWJlcnMKKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjA1OjM1ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NToxOSAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTc0LDEwICs4MCwxMCBAQAogLy8gIFRoZXNlIGFyZSB1cGRhdGVkIGZvciBldmVyeSBidWlsZC4gVGhleSBtdXN0IGJlIGF0IHRoZSB0b3AgYmVjYXVzZSB0aGV5CiAvLyAgY2FuIGJlIHVzZWQgYnkgdmFyaW91cyBwZXItY29tcGlsZXIgaGVhZGVycyBiZWxvdy4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2RlZmluZSBYTUw0Q19ETExWZXJzaW9uU3RyICIzXzAiCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgICAgZ1hNTDRDVmVyc2lvblN0ciA9ICIzXzAiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0ICAgIGdYTUw0Q0Z1bGxWZXJzaW9uU3RyID0gIjNfMF8wIjsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgICBnWE1MNENNYWpWZXJzaW9uID0gMzsKKyNkZWZpbmUgWE1MNENfRExMVmVyc2lvblN0ciAiMV8wIgorc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0ICAgIGdYTUw0Q1ZlcnNpb25TdHIgPSAiMV8wIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCAgICBnWE1MNENGdWxsVmVyc2lvblN0ciA9ICIxXzBfMCI7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50ICAgZ1hNTDRDTWFqVmVyc2lvbiA9IDE7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50ICAgZ1hNTDRDTWluVmVyc2lvbiA9IDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50ICAgZ1hNTDRDUmV2aXNpb24gICA9IDA7CiAKQEAgLTExMCw2ICsxMTYsMTAgQEAKICNpbmNsdWRlICAgIDx1dGlsL1BsYXRmb3Jtcy9IUFVYL0hQVVhEZWZzLmhwcD4KICNlbmRpZgogCisjaWYgZGVmaW5lZChYTUxfSVJJWCkKKyNpbmNsdWRlICAgIDx1dGlsL1BsYXRmb3Jtcy9JUklYL0lSSVhEZWZzLmhwcD4KKyNlbmRpZgorCiAjaWYgZGVmaW5lZChYTUxfVEFOREVNKQogI2luY2x1ZGUgICAgPHV0aWwvUGxhdGZvcm1zL1RhbmRlbS9UYW5kZW1EZWZzLmhwcD4KICNlbmRpZgpAQCAtMTY0LDYgKzE3NCwxMCBAQAogI2luY2x1ZGUgICAgPHV0aWwvQ29tcGlsZXJzL0hQQ0NEZWZzLmhwcD4KICNlbmRpZgogCisjaWYgZGVmaW5lZChYTUxfTUlQU1BST19DQykKKyNpbmNsdWRlICAgIDx1dGlsL0NvbXBpbGVycy9NSVBTcHJvRGVmcy5ocHA+CisjZW5kaWYKKwogI2lmIGRlZmluZWQoWE1MX1RBTkRFTUNDKQogI2luY2x1ZGUgICAgPHV0aWwvQ29tcGlsZXJzL1RhbmRlbUNDRGVmcy5ocHA+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy91dGlsL1hNTEV4Y2VwdGlvbi5jcHAgYi9zcmMvdXRpbC9YTUxFeGNlcHRpb24uY3BwCmluZGV4IGRiZTU2ZGUuLjBkZTk1NDggMTAwNjQ0Ci0tLSBhL3NyYy91dGlsL1hNTEV4Y2VwdGlvbi5jcHAKKysrIGIvc3JjL3V0aWwvWE1MRXhjZXB0aW9uLmNwcApAQCAtNTYsOCArNTYsMTMgQEAKIAogLyoqCiAgKiAkTG9nJAotICogUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjA1OjM5ICB0d2wKLSAqIEluaXRpYWwgcmV2aXNpb24KKyAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMi8wMiAxOTowMjo1NyAgcm9kZGV5CisgKiBHZXQgcmlkIG9mIGEgZmV3IHN0YXRpY2FsbHkgZGVmaW5lZCBYTUxNdXRleCBvYmplY3RzLCBhbmQgbGF6eSBldmFsIHRoZW0KKyAqIHVzaW5nIGF0b21pYyBjb21wYXJlIGFuZCBzd2FwLiBJIHNvbWVob3cgbGV0IGl0IGdldCBieSBtZSB0aGF0IHdlIGRvbid0CisgKiB3YW50IGFueSBzdGF0aWMvZ2xvYmFsIG9iamVjdHMgYXQgYWxsLgorICoKKyAqIFJldmlzaW9uIDEuMS4xLjEgIDE5OTkvMTEvMDkgMDE6MDU6MzkgIHR3bAorICogSW5pdGlhbCBjaGVja2luCiAgKgogICogUmV2aXNpb24gMS4zICAxOTk5LzExLzA4IDIwOjQ1OjE5ICByYWh1bAogICogU3dhdCBmb3IgYWRkaW5nIGluIFByb2R1Y3QgbmFtZSBhbmQgQ1ZTIGNvbW1lbnQgbG9nIHZhcmlhYmxlLgpAQCAtNzksMTUgKzg0LDEwIEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBMb2NhbCBkYXRhCiAvLwotLy8gIGdNc2dNdXRleAotLy8gICAgICBUaGlzIGlzIGEgbXV0ZXggdGhhdCBpcyB1c2VkIHRvIHN5bmNocm9uaXplIGFjY2VzcyB0byBvdXIgb25lIGFuZAotLy8gICAgICBvbmx5IGV4Y2VwdGlvbiB0ZXh0IG1lc3NhZ2UgbG9hZGVyLgotLy8KIC8vICBnRGVmRXJyTXNnCiAvLyAgICAgIEZvciBub3csIGlmIHdlIGNhbm5vdCBsb2FkIGFuIGV4Y2VwdGlvbiBtZXNzYWdlLCB3ZSBsb2FkIHVwIHRoZQogLy8gICAgICBkZWZhdWx0LgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zdGF0aWMgWE1MTXV0ZXggICAgIGdNc2dNdXRleDsKIHN0YXRpYyBjb25zdCBYTUxDaCAgZ0RlZkVyck1zZ1tdID0gCiB7CiAgICAgICAgIGNoTGF0aW5fQywgY2hMYXRpbl9vLCBjaExhdGluX3UsIGNoTGF0aW5fbCwgY2hMYXRpbl9kCkBAIC05OCw2ICs5OCwzMCBAQAogfTsKIAogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBMb2NhbCwgc3RhdGljIGZ1bmN0aW9ucworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vCisvLyAgV2UgbmVlZCB0byBmYXVsdCBpbiB0aGlzIG11dGV4LiBCdXQsIHNpbmNlIGl0cyB1c2VkIGZvciBzeW5jaHJvbml6YXRpb24KKy8vICBpdHNlbGYsIHdlIGhhdmUgdG8gZG8gdGhpcyB0aGUgbG93IGxldmVsIHdheSB1c2luZyBhIGNvbXBhcmUgYW5kIHN3YXAuCisvLworc3RhdGljIFhNTE11dGV4JiBnTXNnTXV0ZXgoKQoreworICAgIHN0YXRpYyBYTUxNdXRleCogbXNnTXV0ZXggPSAwOworICAgIGlmICghbXNnTXV0ZXgpCisgICAgeworICAgICAgICBYTUxNdXRleCogdG1wTXV0ZXggPSBuZXcgWE1MTXV0ZXg7CisgICAgICAgIGlmIChYTUxQbGF0Zm9ybVV0aWxzOjpjb21wYXJlQW5kU3dhcCgodm9pZCoqKSZtc2dNdXRleCwgdG1wTXV0ZXgsIDApKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBTb21lb25lIGJlYXQgdXMgdG8gaXQsIHNvIGxldCdzIGNsZWFuIHVwIG91cnMKKyAgICAgICAgICAgIGRlbGV0ZSB0bXBNdXRleDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gKm1zZ011dGV4OworfQorCisKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgTG9jYWwgbWV0aG9kcwpAQCAtMjIxLDcgKzI0NSw3IEBACiAKICAgICAvLyBMb2NrIHRoZSBtZXNzYWdlIGxvYWRlciBtdXRleCBhbmQgbG9hZCB0aGUgdGV4dAogICAgIHsKLSAgICAgICAgWE1MTXV0ZXhMb2NrIGxvY2tJbml0KCZnTXNnTXV0ZXgpOworICAgICAgICBYTUxNdXRleExvY2sgbG9ja0luaXQoJmdNc2dNdXRleCgpKTsKICAgICAgICAgaWYgKCFnR2V0TXNnTG9hZGVyKCkubG9hZE1zZyh0b0xvYWQsIGVyclRleHQsIG1zZ1NpemUpKQogICAgICAgICB7CiAgICAgICAgICAgICBmTXNnID0gWE1MU3RyaW5nOjpyZXBsaWNhdGUoZ0RlZkVyck1zZyk7CkBAIC0yNTAsNyArMjc0LDcgQEAKIAogICAgIC8vIExvY2sgdGhlIG1lc3NhZ2UgbG9hZGVyIG11dGV4IGFuZCBsb2FkIHRoZSB0ZXh0CiAgICAgewotICAgICAgICBYTUxNdXRleExvY2sgbG9ja0luaXQoJmdNc2dNdXRleCk7CisgICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ01zZ011dGV4KCkpOwogICAgICAgICBpZiAoIWdHZXRNc2dMb2FkZXIoKS5sb2FkTXNnKHRvTG9hZCwgZXJyVGV4dCwgbXNnU2l6ZSwgdGV4dDEsIHRleHQyLCB0ZXh0MywgdGV4dDQpKQogICAgICAgICB7CiAgICAgICAgICAgICBmTXNnID0gWE1MU3RyaW5nOjpyZXBsaWNhdGUoZ0RlZkVyck1zZyk7CkBAIC0yNzksNyArMzAzLDcgQEAKIAogICAgIC8vIExvY2sgdGhlIG1lc3NhZ2UgbG9hZGVyIG11dGV4IGFuZCBsb2FkIHRoZSB0ZXh0CiAgICAgewotICAgICAgICBYTUxNdXRleExvY2sgbG9ja0luaXQoJmdNc2dNdXRleCk7CisgICAgICAgIFhNTE11dGV4TG9jayBsb2NrSW5pdCgmZ01zZ011dGV4KCkpOwogICAgICAgICBpZiAoIWdHZXRNc2dMb2FkZXIoKS5sb2FkTXNnKHRvTG9hZCwgZXJyVGV4dCwgbXNnU2l6ZSwgdGV4dDEsIHRleHQyLCB0ZXh0MywgdGV4dDQpKQogICAgICAgICB7CiAgICAgICAgICAgICBmTXNnID0gWE1MU3RyaW5nOjpyZXBsaWNhdGUoZ0RlZkVyck1zZyk7CmRpZmYgLS1naXQgYS9zcmMvdmFsaWRhdG9ycy9EVEQvRFRERWxlbWVudERlY2wuaHBwIGIvc3JjL3ZhbGlkYXRvcnMvRFREL0RUREVsZW1lbnREZWNsLmhwcAppbmRleCAxOGRjYjEyLi43ZTNmN2QxIDEwMDY0NAotLS0gYS9zcmMvdmFsaWRhdG9ycy9EVEQvRFRERWxlbWVudERlY2wuaHBwCisrKyBiL3NyYy92YWxpZGF0b3JzL0RURC9EVERFbGVtZW50RGVjbC5ocHAKQEAgLTU2LDggKzU2LDExIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowMzozMiAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDE6NTE6MDQgIHJhaHVsagorICogQ2Fubm90IHVzZSBjbGFzcyBxdWFsaWZpZXIgaW4gY2xhc3MgZGVmbi4gQ0MgdW5kZXIgSFBVWCBpcyBoYXBweS4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjAzOjMyICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMyAgMTk5OS8xMS8wOCAyMDo0NTo0MCAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTE0NCw3ICsxNDcsNyBAQAogICAgIERUREF0dERlZiogZ2V0QXR0RGVmKGNvbnN0IFhNTENoKiBjb25zdCBhdHROYW1lKTsKICAgICBDb250ZW50U3BlY05vZGUqIGdldENvbnRlbnRTcGVjKCk7CiAgICAgY29uc3QgQ29udGVudFNwZWNOb2RlKiBnZXRDb250ZW50U3BlYygpIGNvbnN0OwotICAgIERUREVsZW1lbnREZWNsOjpNb2RlbFR5cGVzIGdldE1vZGVsVHlwZSgpIGNvbnN0OworICAgIE1vZGVsVHlwZXMgZ2V0TW9kZWxUeXBlKCkgY29uc3Q7CiAKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvdmFsaWRhdG9ycy9EVEQvRFREVmFsaWRhdG9yLmNwcCBiL3NyYy92YWxpZGF0b3JzL0RURC9EVERWYWxpZGF0b3IuY3BwCmluZGV4IDFiYjA4MDYuLmYyMGVkZDMgMTAwNjQ0Ci0tLSBhL3NyYy92YWxpZGF0b3JzL0RURC9EVERWYWxpZGF0b3IuY3BwCisrKyBiL3NyYy92YWxpZGF0b3JzL0RURC9EVERWYWxpZGF0b3IuY3BwCkBAIC01Niw4ICs1NiwxMiBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDM6MzUgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIwOjI0OjQ1ICByb2RkZXkKKyAqIEZpeGVzIGZvciBpbmNvcnJlY3QgZGVsZXRpb24gb2YgdGVtcG9yYXJ5IGRlY2wgb2JqZWN0cywgd2hpY2ggd291bGQgY2F1c2UKKyAqIGEgZG91YmxlIGRlbGV0ZSB3aGVuIHRoZSBwYXJzZXIgaXMgZGVsZXRlZC4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjAzOjM1ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuNCAgMTk5OS8xMS8wOCAyMDo0NTo0MCAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTU3OSw3ICs1ODMsMTAgQEAKIAogICAgIC8vIEFuIGVtcHR5IHN0cmluZyBjYW5ub3QgYmUgdmFsaWQgZm9yIGFueSBvZiB0aGUgb3RoZXIgdHlwZXMKICAgICBpZiAoIWF0dHJWYWx1ZVswXSkKKyAgICB7CiAgICAgICAgIGVtaXRFcnJvcihYTUw0Q1ZhbGlkOjpJbnZhbGlkRW1wdHlBdHRWYWx1ZSwgZnVsbE5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gU2VlIHdoZXRoZXIgd2UgYXJlIGRvaW5nIG11bHRpcGxlIHZhbHVlcyBvciBub3QKICAgICBjb25zdCBib29sIG11bHRpcGxlVmFsdWVzID0KZGlmZiAtLWdpdCBhL3NyYy92YWxpZGF0b3JzL0RURC9EVERWYWxpZGF0b3IyLmNwcCBiL3NyYy92YWxpZGF0b3JzL0RURC9EVERWYWxpZGF0b3IyLmNwcAppbmRleCAyNzdjOTczLi4xN2VmMjQxIDEwMDY0NAotLS0gYS9zcmMvdmFsaWRhdG9ycy9EVEQvRFREVmFsaWRhdG9yMi5jcHAKKysrIGIvc3JjL3ZhbGlkYXRvcnMvRFREL0RURFZhbGlkYXRvcjIuY3BwCkBAIC01Niw4ICs1NiwxNiBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDM6MzggIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4zICAxOTk5LzEyLzA0IDAxOjEzOjE2ICByb2RkZXkKKyAqIEZpeGVkIHRoZSBsb2dpYyBmb3IgY2hlY2tpbmcgZm9yIFBJcyB0aGF0IHN0YXJ0IHdpdGggJ3htbCcuIEl0IHdhcyBkb2luZyBkb2luZyAiaWYgKHN0cmluZ0lDb21wYXJlKCkpICIKKyAqIGluc3RlYWQgb2YgImlmICghc3RyaW5nSUNvbXBhcmUoKSkuCisgKgorICogUmV2aXNpb24gMS4yICAxOTk5LzExLzMwIDIwOjI0OjQ1ICByb2RkZXkKKyAqIEZpeGVzIGZvciBpbmNvcnJlY3QgZGVsZXRpb24gb2YgdGVtcG9yYXJ5IGRlY2wgb2JqZWN0cywgd2hpY2ggd291bGQgY2F1c2UKKyAqIGEgZG91YmxlIGRlbGV0ZSB3aGVuIHRoZSBwYXJzZXIgaXMgZGVsZXRlZC4KKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjAzOjM4ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuNCAgMTk5OS8xMS8wOCAyMDo0NTo0MiAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTM4MiwxOSArMzkwLDI0IEBACiAgICAgICAgIC8vIEl0IGFscmVhZHkgZXhpc3RzLCBzbyBwdXQgb3V0IGEgd2FybmluZwogICAgICAgICBnZXRTY2FubmVyKCktPmVtaXRFcnJvcihYTUw0Q0VycnM6OkF0dExpc3RBbHJlYWR5RXhpc3RzLCBidWZUb1VzZS5nZXRSYXdCdWZmZXIoKSk7CiAKLSAgICAgICAgLy8gVXNlIHRoZSBkdW1teSBkZWNsIHRvIHBhcnNlIGludG8KKyAgICAgICAgLy8gVXNlIHRoZSBkdW1teSBkZWNsIHRvIHBhcnNlIGludG8gYW5kIHNldCBpdHMgbmFtZSB0byB0aGUgbmFtZSB3ZSBnb3QKICAgICAgICAgaWYgKCFmRHVtQXR0RGVmKQorICAgICAgICB7CiAgICAgICAgICAgICBmRHVtQXR0RGVmID0gbmV3IERUREF0dERlZjsKKyAgICAgICAgICAgIGZEdW1BdHREZWYtPnNldElkKGZOZXh0QXR0cklkKyspOworICAgICAgICB9CiAgICAgICAgIGZEdW1BdHREZWYtPnNldE5hbWUoYnVmVG9Vc2UuZ2V0UmF3QnVmZmVyKCkpOwogICAgICAgICBkZWNsID0gZkR1bUF0dERlZjsKICAgICB9CiAgICAgIGVsc2UKICAgICB7Ci0gICAgICAgIC8vIEl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3Qgc28gY3JlYXRlIGEgbmV3IG9uZQorICAgICAgICAvLworICAgICAgICAvLyAgSXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCBzbyBjcmVhdGUgYSBuZXcgb25lLCBnaXZlIGl0IHRoZSBuZXh0CisgICAgICAgIC8vICBhdmFpbGFibGUgdW5pcXVlIGlkLCBhbmQgYWRkIGl0CisgICAgICAgIC8vCiAgICAgICAgIGRlY2wgPSBuZXcgRFREQXR0RGVmKGJ1ZlRvVXNlLmdldFJhd0J1ZmZlcigpKTsKLQotICAgICAgICAvLyBHaXZlIGl0IHRoZSBuZXh0IGF2YWlsYWJsZSB1bmlxdWUgaWQKICAgICAgICAgZGVjbC0+c2V0SWQoZk5leHRBdHRySWQrKyk7CisgICAgICAgIHBhcmVudEVsZW0uYWRkQXR0RGVmKGRlY2wpOwogICAgIH0KIAogICAgIC8vIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciB3ZSBhcmUgZG9pbmcgYSBkdW1teSBwYXJzZQpAQCAtNDM0LDggKzQ0Nyw2IEBACiAgICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAgIGdldFNjYW5uZXIoKS0+ZW1pdEVycm9yKFhNTDRDRXJyczo6RXhwZWN0ZWRBdHRyaWJ1dGVUeXBlKTsKLSAgICAgICAgICAgIGlmIChpc0lnbm9yZWQpCi0gICAgICAgICAgICAgICAgZGVsZXRlIGRlY2w7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTQ1NCwxMSArNDY1LDcgQEAKIAogICAgICAgICBkZWNsLT5zZXRUeXBlKFhNTEF0dERlZjo6Tm90YXRpb24pOwogICAgICAgICBpZiAoIXNjYW5FbnVtZXJhdGlvbihidWZUb1VzZSwgdHJ1ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc0lnbm9yZWQpCi0gICAgICAgICAgICAgICAgZGVsZXRlIGRlY2w7CiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQogCiAgICAgICAgIC8vIFNldCB0aGUgdmFsdWUgYXMgdGhlIGVudW1lcmF0aW9uIGZvciB0aGlzIGRlY2wKICAgICAgICAgZGVjbC0+c2V0RW51bWVyYXRpb24oYnVmVG9Vc2UuZ2V0UmF3QnVmZmVyKCkpOwpAQCAtNDY3LDExICs0NzQsNyBAQAogICAgIHsKICAgICAgICAgZGVjbC0+c2V0VHlwZShYTUxBdHREZWY6OkVudW1lcmF0aW9uKTsKICAgICAgICAgaWYgKCFzY2FuRW51bWVyYXRpb24oYnVmVG9Vc2UsIGZhbHNlKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzSWdub3JlZCkKLSAgICAgICAgICAgICAgICBkZWxldGUgZGVjbDsKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CiAKICAgICAgICAgLy8gU2V0IHRoZSB2YWx1ZSBhcyB0aGUgZW51bWVyYXRpb24gZm9yIHRoaXMgZGVjbAogICAgICAgICBkZWNsLT5zZXRFbnVtZXJhdGlvbihidWZUb1VzZS5nZXRSYXdCdWZmZXIoKSk7CkBAIC00NzksOCArNDgyLDYgQEAKICAgICAgZWxzZQogICAgIHsKICAgICAgICAgZ2V0U2Nhbm5lcigpLT5lbWl0RXJyb3IoWE1MNENFcnJzOjpFeHBlY3RlZEF0dHJpYnV0ZVR5cGUpOwotICAgICAgICBpZiAoaXNJZ25vcmVkKQotICAgICAgICAgICAgZGVsZXRlIGRlY2w7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtNDkxLDEwICs0OTIsNiBAQAogICAgIC8vIEFuZCB0aGVuIHNjYW4gZm9yIHRoZSBvcHRpb25hbCBkZWZhdWx0IHZhbHVlIGRlY2xhcmF0aW9uCiAgICAgc2NhbkRlZmF1bHREZWNsKCpkZWNsKTsKIAotICAgIC8vIEFkZCB0aGlzIGd1eSB0byBlbGVtZW50J3MgYXR0ciBsaXN0IChpZiBub3QgaWdub3JpbmcuKQotICAgIGlmICghaXNJZ25vcmVkKQotICAgICAgICBwYXJlbnRFbGVtLmFkZEF0dERlZihkZWNsKTsKLQogICAgIC8vIElmIHZhbGlkYXRpbmcsIHRoZW4gZG8gYSBjb3VwbGUgb2YgdmFsaWRhdGlvbiBjb25zdHJhaW50cwogICAgIGlmIChnZXRTY2FubmVyKCktPmdldERvVmFsaWRhdGlvbigpKQogICAgIHsKQEAgLTE2NDYsNyArMTY0Myw2IEBACiAgICAgLy8gIHNjYW4gb3ZlciB0aGUgY29udGVudCBtb2RlbCBzbyB1c2UgdGhlIGR1bW15IGRlY2xhcmF0aW9uIHRoYXQgdGhlCiAgICAgLy8gIHBhcnNpbmcgY29kZSBjYW4gZmlsbCBpbi4KICAgICAvLwotICAgIGJvb2wgaXNOZXcgPSBmYWxzZTsKICAgICBpZiAoZGVjbCkKICAgICB7CiAgICAgICAgIGlmIChkZWNsLT5pc0RlY2xhcmVkKCkpCkBAIC0xNjYyLDE3ICsxNjU4LDIwIEBACiAgICAgfQogICAgICBlbHNlCiAgICAgewotICAgICAgICAvLyBDcmVhdGUgdGhlIG5ldyBlbXB0eSBkZWNsYXJhdGlvbiB0byBmaWxsIGluLiBNYXJrIGl0IGRlY2xhcmVkCisgICAgICAgIC8vCisgICAgICAgIC8vICBDcmVhdGUgdGhlIG5ldyBlbXB0eSBkZWNsYXJhdGlvbiB0byBmaWxsIGluIGFuZCBwdXQgaXQgaW50bworICAgICAgICAvLyAgdGhlIGRlY2wgcG9vbC4KKyAgICAgICAgLy8KICAgICAgICAgZGVjbCA9IG5ldyBEVERFbGVtZW50RGVjbChiYk5hbWUuZ2V0UmF3QnVmZmVyKCkpOwotICAgICAgICBpc05ldyA9IHRydWU7Ci0KLSAgICAgICAgLy8gUHV0IGl0IGluIHRoZSBlbGVtZW50IGRlY2wgcG9vbAogICAgICAgICBmRWxlbURlY2xQb29sLT5wdXQoZGVjbCk7CiAgICAgfQogCiAgICAgLy8gU2V0IGEgZmxhZyBmb3Igd2hldGhlciB3ZSB3aWxsIGlnbm9yZSB0aGlzIG9uZQogICAgIGNvbnN0IGJvb2wgaXNJZ25vcmVkID0gKGRlY2wgPT0gZkR1bUVsZW1EZWNsKTsKIAorICAgIC8vIE1hcmsgdGhpcyBvbmUgYXMgYmVpbmcgZGVjbGFyZWQKKyAgICBkZWNsLT5zZXRDcmVhdGVSZWFzb24oWE1MRWxlbWVudERlY2w6OkRlY2xhcmVkKTsKKwogICAgIC8vIEFub3RoZXIgY2hlY2sgZm9yIGEgUEUgcmVmLCB3aXRoIGF0IGxlYXN0IHJlcXVpcmVkIHdoaXRlc3BhY2UKICAgICBpZiAoIWNoZWNrRm9yUEVSZWYodHJ1ZSwgZmFsc2UsIHRydWUpKQogICAgICAgICBnZXRTY2FubmVyKCktPmVtaXRFcnJvcihYTUw0Q0VycnM6OkV4cGVjdGVkV2hpdGVzcGFjZSk7CkBAIC0xNjgxLDE4ICsxNjgwLDEyIEBACiAgICAgaWYgKCFzY2FuQ29udGVudFNwZWMoKmRlY2wpKQogICAgIHsKICAgICAgICAgZ2V0UmVhZGVyTWdyKCktPnNraXBQYXN0Q2hhcihjaENsb3NlQW5nbGUpOwotICAgICAgICBpZiAoaXNOZXcpCi0gICAgICAgICAgICBkZWxldGUgZGVjbDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIEFub3RoZXIgY2hlY2sgZm9yIGEgUEUgcmVmLCBidXQgd2UgZG9uJ3QgcmVxdWlyZSB3aGl0ZXNwYWNlIGhlcmUKICAgICBjaGVja0ZvclBFUmVmKGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CiAKLSAgICAvLyBJZiB0aGlzIGlzIG5vdCBvbmUgd2UgYXJlIGlnbm9yaW5nLCB0aGVuIHNldCBpdCBkZWNsYXJlZAotICAgIGlmICghaXNJZ25vcmVkKQotICAgICAgICBkZWNsLT5zZXRDcmVhdGVSZWFzb24oWE1MRWxlbWVudERlY2w6OkRlY2xhcmVkKTsKLQogICAgIC8vIEFuZCB3ZSBzaG91bGQgaGF2ZSB0aGUgZW5kaW5nIGFuZ2xlIGJyYWNrZXQKICAgICBpZiAoIWdldFJlYWRlck1ncigpLT5za2lwcGVkQ2hhcihjaENsb3NlQW5nbGUpKQogICAgIHsKQEAgLTE3MDcsMTMgKzE3MDAsNyBAQAogICAgIC8vICBpZiBhZHZhbmNlZCBjYWxsYmFja3MgYXJlIGVuYWJsZWQuCiAgICAgLy8KICAgICBpZiAoZkRvY1R5cGVIYW5kbGVyKQotICAgIHsKLSAgICAgICAgZkRvY1R5cGVIYW5kbGVyLT5lbGVtZW50RGVjbAotICAgICAgICAoCi0gICAgICAgICAgICAqZGVjbAotICAgICAgICAgICAgLCBpc0lnbm9yZWQKLSAgICAgICAgKTsKLSAgICB9CisgICAgICAgIGZEb2NUeXBlSGFuZGxlci0+ZWxlbWVudERlY2woKmRlY2wsIGlzSWdub3JlZCk7CiB9CiAKIApAQCAtMTc5MSwxMSArMTc3OCwxOCBAQAogICAgICAgICBlbnRpdHlEZWNsID0gbmV3IERUREVudGl0eURlY2woYmJOYW1lLmdldFJhd0J1ZmZlcigpKTsKIAogICAgICAgICAvLwotICAgICAgICAvLyAgU2V0IHRoZSBkZWNsYXJhdGlvbiBsb2NhdGlvbi4gVGhlIHBhcmFtZXRlciBpbmRpY2F0ZXMgd2hldGhlcgotICAgICAgICAvLyAgaXRzIGRlY2xhcmVkIGluIHRoZSBjb250ZW50L2ludGVybmFsIHN1YnNldCwgc28gd2UgZG8KLSAgICAgICAgLy8gIHdoZXRoZXIgaXRzIG5vdCBpbiB0aGUgZXh0ZXJuYWwgc3Vic2V0LgorICAgICAgICAvLyAgU2V0IHRoZSBkZWNsYXJhdGlvbiBsb2NhdGlvbi4gVGhlIHBhcmFtZXRlciBpbmRpY2F0ZXMgd2hldGhlciBpdHMKKyAgICAgICAgLy8gIGRlY2xhcmVkIGluIHRoZSBjb250ZW50L2ludGVybmFsIHN1YnNldCwgc28gd2Uga25vdyB3aGV0aGVyIG9yIG5vdAorICAgICAgICAvLyAgaXRzIGluIHRoZSBleHRlcm5hbCBzdWJzZXQuCiAgICAgICAgIC8vCiAgICAgICAgIGVudGl0eURlY2wtPnNldERlY2xhcmVkSW5JbnRTdWJzZXQoZkludGVybmFsU3Vic2V0KTsKKworICAgICAgICAvLyBBZGQgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIGVudGl0eSBkZWNsIHBvb2wKKyAgICAgICAgaWYgKGlzUEVEZWNsKQorICAgICAgICAgICAgZlBFbnRpdHlEZWNsUG9vbC0+cHV0KGVudGl0eURlY2wpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmRW50aXR5RGVjbFBvb2wtPnB1dChlbnRpdHlEZWNsKTsKKwogICAgIH0KIAogICAgIC8vIFNldCBhIGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB3ZSBhcmUgaWdub3JpbmcgdGhpcyBvbmUKQEAgLTE4MTYsOSArMTgxMCw2IEBACiAgICAgaWYgKCFzY2FuRW50aXR5RGVmKCplbnRpdHlEZWNsLCBpc1BFRGVjbCkpCiAgICAgewogICAgICAgICBnZXRSZWFkZXJNZ3IoKS0+c2tpcFBhc3RDaGFyKGNoQ2xvc2VBbmdsZSk7Ci0gICAgICAgIGlmICghaXNJZ25vcmVkKQotICAgICAgICAgICAgZGVsZXRlIGVudGl0eURlY2w7Ci0KICAgICAgICAgZ2V0U2Nhbm5lcigpLT5lbWl0RXJyb3IoWE1MNENFcnJzOjpFeHBlY3RlZEVudGl0eVZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE4MzQsMzEgKzE4MjUsMTEgQEAKICAgICB9CiAKICAgICAvLwotICAgIC8vICBBbmQgYWRkIHRoaXMgZ3V5IHRvIHRoZSBhcHByb3ByaWF0ZSBlbnRpdHkgZGVjbCBwb29sLCBpZiBpdCB3YXMKLSAgICAvLyAgbm90IGFuIG92ZXJyaWRlIG9mIGFuIGV4aXN0aW5nIGVudGl0eSB0aGF0IHdlIGp1c3QgcGFyc2VkIGludG8gdGhlCi0gICAgLy8gIGR1bW15IGRlY2wuCi0gICAgLy8KLSAgICBpZiAoIWlzSWdub3JlZCkKLSAgICB7Ci0gICAgICAgIGlmIChpc1BFRGVjbCkKLSAgICAgICAgICAgIGZQRW50aXR5RGVjbFBvb2wtPnB1dChlbnRpdHlEZWNsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZkVudGl0eURlY2xQb29sLT5wdXQoZW50aXR5RGVjbCk7Ci0gICAgfQotCi0gICAgLy8KICAgICAvLyAgSWYgd2UgaGF2ZSBhIGRvYyB0eXBlIGhhbmRsZXIsIHRoZW4gY2FsbCBpdC4gQnV0IG9ubHkgY2FsbCBpdCBmb3IKICAgICAvLyAgaWdub3JlZCBlbGVtZW50cyBpZiBhZHZhbmNlZCBjYWxsYmFja3MgYXJlIGVuYWJsZWQuCiAgICAgLy8KICAgICBpZiAoZkRvY1R5cGVIYW5kbGVyKQotICAgIHsKLSAgICAgICAgZkRvY1R5cGVIYW5kbGVyLT5lbnRpdHlEZWNsCi0gICAgICAgICgKLSAgICAgICAgICAgICplbnRpdHlEZWNsCi0gICAgICAgICAgICAsIGlzUEVEZWNsCi0gICAgICAgICAgICAsIChlbnRpdHlEZWNsID09IGZEdW1FbnRpdHlEZWNsKQotICAgICAgICApOwotICAgIH0KKyAgICAgICAgZkRvY1R5cGVIYW5kbGVyLT5lbnRpdHlEZWNsKCplbnRpdHlEZWNsLCBpc1BFRGVjbCwgaXNJZ25vcmVkKTsKIH0KIAogCkBAIC0zMzAzLDcgKzMyNzQsNyBAQAogICAgIG5hbWVQdHIgPSBiYk5hbWUuZ2V0UmF3QnVmZmVyKCk7CiAKICAgICAvLyBTZWUgaWYgaXQgaXNzb21lIGZvcm0gb2YgJ3htbCcgYW5kIGVtaXQgYSB3YXJuaW5nCi0gICAgaWYgKFhNTFN0cmluZzo6Y29tcGFyZUlTdHJpbmcobmFtZVB0ciwgWE1MVW5pOjpmZ1hNTFN0cmluZykpCisgICAgaWYgKCFYTUxTdHJpbmc6OmNvbXBhcmVJU3RyaW5nKG5hbWVQdHIsIFhNTFVuaTo6ZmdYTUxTdHJpbmcpKQogICAgICAgICBnZXRTY2FubmVyKCktPmVtaXRFcnJvcihYTUw0Q0VycnM6Ok5vUElTdGFydHNXaXRoWE1MKTsKIAogICAgIC8vIElmIG5hbWVzcGFjZXMgYXJlIGVuYWJsZWQsIHRoZW4gbm8gY29sb25zIGFsbG93ZWQKZGlmZiAtLWdpdCBhL3NyYy92YWxpZGF0b3JzL0RURC9NYWtlZmlsZS5pbiBiL3NyYy92YWxpZGF0b3JzL0RURC9NYWtlZmlsZS5pbgppbmRleCAzNTZkNDM2Li5kMjZiZjRkIDEwMDY0NAotLS0gYS9zcmMvdmFsaWRhdG9ycy9EVEQvTWFrZWZpbGUuaW4KKysrIGIvc3JjL3ZhbGlkYXRvcnMvRFREL01ha2VmaWxlLmluCkBAIC01NSw4ICs1NSwxMiBAQAogIyAKICMKICMgJExvZyQKLSMgUmV2aXNpb24gMS4xICAxOTk5LzExLzA5IDAxOjAzOjQyICB0d2wKLSMgSW5pdGlhbCByZXZpc2lvbgorIyBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMjMgMDI6MDE6MDUgIHJhaHVsagorIyBDb2RlIG5vdyB3b3JrcyB1bmRlciBIUFVYIDExLiBUZXN0ZWQgaW5tZW1vcnkgbWVzc2FnZSBsb2FkZXIuCitSZXZhbXBlZCBtYWtlZmlsZXMuIEJ1aWxkcyB3aXRoIGJvdGggRENFIHRocmVhZHMgYXMgd2VsbCBhcyBwdGhyZWFkIGxpYnJhcmllcy4KKyMKKyMgUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowMzo0MiAgdHdsCisjIEluaXRpYWwgY2hlY2tpbgogIwogIyBSZXZpc2lvbiAxLjMgIDE5OTkvMTEvMDggMjA6NDU6NDMgIHJhaHVsCiAjIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTY0LDcgKzY4LDggQEAKICMKIAogUExBVEZPUk0gPSBAcGxhdGZvcm1ACi1DT01QSUxFUiA9IEBjb21waWxlckAKK0NDICA9IEBjY0AKK0NYWCA9IEBjeHhACiBDWFhGTEFHUyA9IEBjeHhmbGFnc0AKIENGTEFHUyA9IEBjZmxhZ3NACiBQUkVGSVggPSBAcHJlZml4QApAQCAtMTQwLDkgKzE0NSw2IEBACiAJQGZvciBmaWxlIGluICQoVkFMSURBVE9SU19EVERfQ1BQX1BVQkhFQURFUlMpOyBkbyBcCiAJcm0gLWYgJChYTUxfSU5DX0RJUikvJChNT0RVTEUpLyQoU1VCTU9EVUxFKS8kJGZpbGU7IFwKIAlkb25lCi0JQGZvciBmaWxlIGluICQoVkFMSURBVE9SU19EVERfQ19GSUxFUyk7IGRvIFwKLQlybSAtZiAkKFhNTF9JTkNfRElSKS8kKE1PRFVMRSkvJChTVUJNT0RVTEUpLyQkZmlsZTsgXAotCWRvbmUKIAlAZWNobyAiUmVtb3ZpbmcgYWxsICQoTU9EVUxFKS8kKFNVQk1PRFVMRSkgb2JqZWN0IGZpbGVzIC4uLiIKIAlAZm9yIGZpbGUgaW4gJChWQUxJREFUT1JTX0RURF9DUFBfT0JKRUNUUyk7IGRvIFwKIAlybSAtZiAkKEFMTF9PQkpFQ1RTX0RJUikvJCRmaWxlOyBcCmRpZmYgLS1naXQgYS90ZXN0cy9ET00vRE9NTWVtVGVzdC9ET01NZW1UZXN0LmNwcCBiL3Rlc3RzL0RPTS9ET01NZW1UZXN0L0RPTU1lbVRlc3QuY3BwCmluZGV4IGQzY2JjNzMuLjQwMDAyNDAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL0RPTS9ET01NZW1UZXN0L0RPTU1lbVRlc3QuY3BwCisrKyBiL3Rlc3RzL0RPTS9ET01NZW1UZXN0L0RPTU1lbVRlc3QuY3BwCkBAIC02Niw4ICs2NiwxMiBAQAogCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDI6NDMgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzEyLzAzIDAwOjAyOjI1ICBhbmR5aAorICogRE9NIHRlc3RzIHVwZGF0ZWQgdG8gY2F0Y2ggRE9NRXhjZXB0aW9uIGJ5IHJlZi4KKyAqIEFkZGVkIHRlc3RzIG9mIERPTVN0cmluZzo6dHJhbnNjb2RlKCkgYW5kIGFwcGVuZCgpCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowMjo0MyAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDI6MjQgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC03NSwxMCArNzksMTEgQEAKICAqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxkb20vRE9NLmhwcD4KICNpbmNsdWRlIDxkb20vRG9tTWVtRGVidWcuaHBwPgogI2luY2x1ZGUgPHV0aWwvUGxhdGZvcm1VdGlscy5ocHA+Ci0jaW5jbHVkZSA8dXRpbC9FeGNlcHRpb24uaHBwPgorI2luY2x1ZGUgPHV0aWwvWE1MRXhjZXB0aW9uLmhwcD4KICNpbmNsdWRlIDx1dGlsL1N0ZE91dC5ocHA+CiAKIApAQCAtNjUzLDEwICs2NTgsOSBAQAogICAgICAgICAgICAgIERPTV9FbGVtZW50IGVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIiFAQCBiYWQgZWxlbWVudCBuYW1lIik7CiAgICAgICAgICAgICAgVEFTU0VSVChmYWxzZSk7ICAvLyBFeGNlcHRpb24gYWJvdmUgc2hvdWxkIHByZXZlbnQgdXMgcmVhY2hpbmcgaGVyZS4KICAgICAgICAgIH0KLSAgICAgICAgIGNhdGNoICggRE9NX0RPTUV4Y2VwdGlvbiAqZSkKKyAgICAgICAgIGNhdGNoICggRE9NX0RPTUV4Y2VwdGlvbiAmZSkKICAgICAgICAgIHsKLSAgICAgICAgICAgICBUQVNTRVJUKGUtPmNvZGUgPT0gRE9NX0RPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSKTsKLSAgICAgICAgICAgICBkZWxldGUgZTsKKyAgICAgICAgICAgICBUQVNTRVJUKGUuY29kZSA9PSBET01fRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlIpOwogICAgICAgICAgfQogICAgICAgICAgY2F0Y2ggKC4uLikKICAgICAgICAgIHsKQEAgLTcxOCw2ICs3MjIsMzMgQEAKICAgICBURVNURVBJTE9HOwogCiAKKwkvLworCS8vIE1pbmltYWwgdGVzdCBvZiBET01TdHJpbmc6OnRyYW5zY29kZSgpCisJLy8KKwlURVNUUFJPTE9HOworCXsKKwkJc3RhdGljIGNoYXIgdGVzdFN0cltdID0gIlRoaXMgaXMgb3VyIHRlc3Qgc3RyaW5nLiI7CisKKwkJRE9NU3RyaW5nIERPTVRlc3RTdHIgPSB0ZXN0U3RyOworCQljaGFyICpyb3VuZFRyaXBTdHJpbmcgPSBET01UZXN0U3RyLnRyYW5zY29kZSgpOworCQlUQVNTRVJUKHN0cmNtcCh0ZXN0U3RyLCByb3VuZFRyaXBTdHJpbmcpID09IDApOworCQlkZWxldGUgcm91bmRUcmlwU3RyaW5nOworCX0KKyAgICBURVNURVBJTE9HOworCisKKyAgICAvLworICAgIC8vICBTdHJpbmcgYnVnIHN1Ym1pdHRlZCBieSBEYXZpZCBDaHVuZworICAgIC8vCisJVEVTVFBST0xPRzsKKwl7CisgICAgICAgIERPTVN0cmluZyBncmVldGluZygiaGVsbG8iKTsKKyAgICAgICAgZ3JlZXRpbmcuYXBwZW5kRGF0YShncmVldGluZyk7CisgICAgICAgIFRBU1NFUlQoZ3JlZXRpbmcuZXF1YWxzKCJoZWxsb2hlbGxvIikpOworICAgICAgICBncmVldGluZy5wcmludGxuKCk7CisgICAgfQorICAgIFRFU1RFUElMT0c7CisKICAgICAvLwogICAgIC8vICBQcmludCBGaW5hbCBhbGxvY2F0aW9uIHN0YXRzIGZvciBmdWxsIHRlc3QKICAgICAvLwpkaWZmIC0tZ2l0IGEvdGVzdHMvRE9NL0RPTVRlc3QvRFRlc3QuY3BwIGIvdGVzdHMvRE9NL0RPTVRlc3QvRFRlc3QuY3BwCmluZGV4IDgyMGI5NmQuLjFhYTY1YjIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL0RPTS9ET01UZXN0L0RUZXN0LmNwcAorKysgYi90ZXN0cy9ET00vRE9NVGVzdC9EVGVzdC5jcHAKQEAgLTU2LDggKzU2LDEyIEBACiAKIC8qKgogICogJExvZyQKLSAqIFJldmlzaW9uIDEuMSAgMTk5OS8xMS8wOSAwMTowMjozNCAgdHdsCi0gKiBJbml0aWFsIHJldmlzaW9uCisgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTIvMDMgMDA6MDI6MjUgIGFuZHloCisgKiBET00gdGVzdHMgdXBkYXRlZCB0byBjYXRjaCBET01FeGNlcHRpb24gYnkgcmVmLgorICogQWRkZWQgdGVzdHMgb2YgRE9NU3RyaW5nOjp0cmFuc2NvZGUoKSBhbmQgYXBwZW5kKCkKKyAqCisgKiBSZXZpc2lvbiAxLjEuMS4xICAxOTk5LzExLzA5IDAxOjAyOjM0ICB0d2wKKyAqIEluaXRpYWwgY2hlY2tpbgogICoKICAqIFJldmlzaW9uIDEuMiAgMTk5OS8xMS8wOCAyMDo0MjoyNCAgcmFodWwKICAqIFN3YXQgZm9yIGFkZGluZyBpbiBQcm9kdWN0IG5hbWUgYW5kIENWUyBjb21tZW50IGxvZyB2YXJpYWJsZS4KQEAgLTc2LDggKzgwLDEyIEBACiAgCiAvKioKICAqICRMb2ckCi0gKiBSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMDkgMDE6MDI6MzQgIHR3bAotICogSW5pdGlhbCByZXZpc2lvbgorICogUmV2aXNpb24gMS4yICAxOTk5LzEyLzAzIDAwOjAyOjI1ICBhbmR5aAorICogRE9NIHRlc3RzIHVwZGF0ZWQgdG8gY2F0Y2ggRE9NRXhjZXB0aW9uIGJ5IHJlZi4KKyAqIEFkZGVkIHRlc3RzIG9mIERPTVN0cmluZzo6dHJhbnNjb2RlKCkgYW5kIGFwcGVuZCgpCisgKgorICogUmV2aXNpb24gMS4xLjEuMSAgMTk5OS8xMS8wOSAwMTowMjozNCAgdHdsCisgKiBJbml0aWFsIGNoZWNraW4KICAqCiAgKiBSZXZpc2lvbiAxLjIgIDE5OTkvMTEvMDggMjA6NDI6MjQgIHJhaHVsCiAgKiBTd2F0IGZvciBhZGRpbmcgaW4gUHJvZHVjdCBuYW1lIGFuZCBDVlMgY29tbWVudCBsb2cgdmFyaWFibGUuCkBAIC04Nyw3ICs5NSw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJEVGVzdC5oIgogI2luY2x1ZGUgPHV0aWwvUGxhdGZvcm1VdGlscy5ocHA+Ci0jaW5jbHVkZSA8dXRpbC9FeGNlcHRpb24uaHBwPgorI2luY2x1ZGUgPHV0aWwvWE1MRXhjZXB0aW9uLmhwcD4KICNpbmNsdWRlIDx1dGlsL1N0ZE91dC5ocHA+CiAKIApAQCAtOTgsOSArMTA2LDkgQEAKICAgICAgICAgICAgIG9wZXJhdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFeGNlcHRpb25zIFRlc3QgIyAlZDogbm8gRXhjZXB0aW9uIHRocm93bi5cbiIsIHRlc3ROdW0pOyBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY2F0Y2ggKERPTV9ET01FeGNlcHRpb24gKmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjYXRjaCAoRE9NX0RPTUV4Y2VwdGlvbiAmZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmIChlLT5jb2RlICE9IGV4cGVjdGVkRXhjZXB0aW9uKSB7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmIChlLmNvZGUgIT0gZXhwZWN0ZWRFeGNlcHRpb24pIHsgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXhjZXB0aW9ucyBUZXN0ICMgJWQ6IHdyb25nIERPTV9ET01FeGNlcHRpb24gdGhyb3duLlxuIiwgXAogICAgICAgICAgICAgICAgICAgICB0ZXN0TnVtKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgcmVzdWx0RmxhZyA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK