ZGlmZiAtLWdpdCBhL0FuZHJvaWQuYnAgYi9BbmRyb2lkLmJwCmluZGV4IGQwMTc4ZjguLmVjMWMzNTQgMTAwNjQ0Ci0tLSBhL0FuZHJvaWQuYnAKKysrIGIvQW5kcm9pZC5icApAQCAtMzMsNiArMzMsNyBAQAogICAgIG5hbWU6ICJncHRmZGlza19kZWZhdWx0X2ZsYWdzIiwKICAgICBjZmxhZ3M6IFsKICAgICAgICAgIi1Xbm8tdW51c2VkLXBhcmFtZXRlciIsCisgICAgICAgICItV25vLW1hY3JvLXJlZGVmaW5lZCIsCiAgICAgICAgICItV25vLXByYWdtYS1wYWNrIiwKICAgICAgICAgIi1XZXJyb3IiLAogICAgICAgICAiLWZQSUMiLApkaWZmIC0tZ2l0IGEvTUVUQURBVEEgYi9NRVRBREFUQQppbmRleCBlNTNhNmE2Li44ZGQxNGYxIDEwMDY0NAotLS0gYS9NRVRBREFUQQorKysgYi9NRVRBREFUQQpAQCAtMSwzICsxLDcgQEAKKyMgVGhpcyBwcm9qZWN0IHdhcyB1cGdyYWRlZCB3aXRoIGV4dGVybmFsX3VwZGF0ZXIuCisjIFVzYWdlOiB0b29scy9leHRlcm5hbF91cGRhdGVyL3VwZGF0ZXIuc2ggdXBkYXRlIGdwdGZkaXNrCisjIEZvciBtb3JlIGluZm8sIGNoZWNrIGh0dHBzOi8vY3MuYW5kcm9pZC5jb20vYW5kcm9pZC9wbGF0Zm9ybS9zdXBlcnByb2plY3QvKy9tYXN0ZXI6dG9vbHMvZXh0ZXJuYWxfdXBkYXRlci9SRUFETUUubWQKKwogbmFtZTogImdwdGZkaXNrIgogZGVzY3JpcHRpb246ICJUaGlzIHBhY2thZ2UgaW5jbHVkZXMgdGhlIHNvdXJjZSBjb2RlIGZvciBmb3VyIHJlbGF0ZWQgZGlzayBwYXJ0aXRpb25pbmcgcHJvZ3JhbXMuIgogdGhpcmRfcGFydHkgewpAQCAtOSwxMSArMTMsMTEgQEAKICAgICB0eXBlOiBHSVQKICAgICB2YWx1ZTogImh0dHBzOi8vZ2l0LmNvZGUuc2YubmV0L3AvZ3B0ZmRpc2svY29kZSIKICAgfQotICB2ZXJzaW9uOiAiZDI5MmZmMzZhM2IzNTAxMTU4MzVjNjI0NjI5MTFjM2Q4NzIxNzA0ZiIKKyAgdmVyc2lvbjogImNiNGJmMzIwNzQ4ZjcwMWEwZWQ4MzVkNGE0MTBmMjk2MGYxY2UwYmQiCiAgIGxpY2Vuc2VfdHlwZTogUkVTVFJJQ1RFRAogICBsYXN0X3VwZ3JhZGVfZGF0ZSB7Ci0gICAgeWVhcjogMjAyMAotICAgIG1vbnRoOiAyCi0gICAgZGF5OiAxMAorICAgIHllYXI6IDIwMjMKKyAgICBtb250aDogMworICAgIGRheTogMTUKICAgfQogfQpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAwZDczMDljLi5hZjk3MDFjIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSwzMCArMSwxNjAgQEAKLUNGTEFHUys9LURfRklMRV9PRkZTRVRfQklUUz02NAotI0NYWEZMQUdTKz0tV2FsbCAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1EIFVTRV9VVEYxNgotQ1hYRkxBR1MrPS1XYWxsIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKKyMgTWFrZWZpbGUgZm9yIEdQVCBmZGlzaworCisjIENvcHlyaWdodCAoYykgMjAyMiBieSBSb2QgU21pdGgKKyMgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLAorIyBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgaXMgYSBjb25zb2xpZGF0ZWQgTWFrZWZpbGUgZm9yIExpbnV4LCBGcmVlQlNELCBTb2xhcmlzICh1bnRlc3RlZCksCisjIG1hY09TLCBhbmQgV2luZG93cyAoeDg2XzY0IGFuZCBpNjg2KS4KKworIyBCdWlsZHMgZm9yIGhvc3QgT1MgYnkgZGVmYXVsdDsgcGFzcyBUQVJHRVQ9e3RhcmdldF9vc30gdG8gY3Jvc3MtY29tcGlsZSwKKyMgd2hlcmUge3RhcmdldF9vc30gaXMgb25lIG9mIGxpbnV4LCBmcmVlYnNkLCBzb2xhcmlzLCBtYWNvcywgd2luMzIsIG9yIHdpbjY0LgorIyBBcHByb3ByaWF0ZSBjcm9zcy1jb21waWxlciBzdXBwb3J0IG11c3QgYmUgaW5zdGFsbGVkLCBvZiBjb3Vyc2UsIGFuZCBidWlsZAorIyBvcHRpb25zIGJlbG93IG1heSBuZWVkIHRvIGJlIGNoYW5nZWQuCisKKyMgREVURUNURURfT1MgaXMgdXNlZCBib3RoIHRvIHNldCBjZXJ0YWluIG9wdGlvbnMgZm9yIHRoZSBidWlsZAorIyBlbnZpcm9ubWVudCBhbmQgdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IFRBUkdFVCBpZiBpdCdzIG5vdAorIyBvdGhlcndpc2Ugc3BlY2lmaWVkLgorREVURUNURURfT1MgOj0gJChzaGVsbCB1bmFtZSAtcykKKworaWZlcSAoJChvcmlnaW4gVEFSR0VUKSx1bmRlZmluZWQpCisgICQoaW5mbyBUQVJHRVQgaXMgbm90IHNldDsgdHJ5aW5nIHRvIGRldGVybWluZSB0YXJnZXQgYmFzZWQgb24gaG9zdCBPUy4uLi4pCisgICQoaW5mbyBEZXRlY3RlZCBPUyBpcyAkKERFVEVDVEVEX09TKSkKKyAgaWZlcSAoJChERVRFQ1RFRF9PUyksTGludXgpCisgICAgIyBOb3RlOiBUQVJHRVQgaXMgc2V0IHRvICJsaW51eCIsIGJ1dCB0aGlzIGlzIG5ldmVyIHRlc3RlZCwgc2luY2UgaXQncworICAgICMgdGhlIGRlZmF1bHQuCisgICAgVEFSR0VUPWxpbnV4CisgIGVsc2UgaWZlcSAoJChERVRFQ1RFRF9PUyksRGFyd2luKQorICAgIFRBUkdFVD1tYWNvcworICBlbHNlIGlmZXEgKCQoREVURUNURURfT1MpLE1JTkdXNjRfTlQtMTAuMC0xOTA0MikKKyAgICAjIFdvcmtzIGZvciBteSBNU1lTMiBpbnN0YWxsYXRpb24sIGJ1dCBzZWVtcyBhd2Z1bGx5IHZlcnNpb24tc3BlY2lmaWMKKyAgICAjIEFsc28sIHVuYW1lIG1heSBub3QgZXhpc3QgaW4gc29tZSBXaW5kb3dzIGVudmlyb25tZW50cy4KKyAgICBUQVJHRVQ9d2luZG93cworICBlbHNlIGlmZXEgKCQoREVURUNURURfT1MpLEZyZWVCU0QpCisgICAgVEFSR0VUPWZyZWVic2QKKyAgZWxzZSBpZmVxICgkKERFVEVDVEVEX09TKSxTdW5PUykKKyAgICBUQVJHRVQ9c29sYXJpcworICBlbmRpZgorZW5kaWYKKworIyBBIHNlY29uZCB3YXkgdG8gZGV0ZWN0IFdpbmRvd3MuLi4uCitpZmVxICgkKG9yaWdpbiBUQVJHRVQpLHVuZGVmaW5lZCkKKyAgaWZlcSAoJChPUyksV2luZG93c19OVCkKKyAgICBUQVJHRVQ9d2luZG93cworICBlbmRpZgorZW5kaWYKKworIyBGb3IgV2luZG93cywgd2UgbmVlZCB0byBrbm93IHRoZSBiaXQgZGVwdGgsIHRvbworaWZlcSAoJChUQVJHRVQpLHdpbmRvd3MpCisgIEFSQ0g9JChzaGVsbCB1bmFtZSAtbSkKKyAgJChpbmZvIEFSQ0ggaXMgJChBUkNIKSkKKyAgaWZlcSAoJChBUkNIKSx4ODZfNjQpCisgICAgVEFSR0VUPXdpbjY0CisgIGVsc2UgaWZlcSAoJChBUkNIKSxpNjg2KQorICAgIFRBUkdFVD13aW4zMgorICBlbHNlCisgICAgIyBJbiB0aGVvcnksIHRoZXJlIGNvdWxkIGJlIEFSTSB2ZXJzaW9ucywgYnV0IHdlIGFyZW4ndCBzZXQgdXAgZm9yIHRoZW0geWV0OworICAgICMgYWxzbywgZGVmYXVsdCB0byB3aW42NCBpbiBjYXNlIHVuYW1lIGRvZXNuJ3QgZXhpc3Qgb24gdGhlIHN5c3RlbQorICAgIFRBUkdFVD13aW42NAorICBlbmRpZgorZW5kaWYKKworJChpbmZvIEJ1aWxkIHRhcmdldCBpcyAkKFRBUkdFVCkpCisKKyMgRGVmYXVsdC9MaW51eCBzZXR0aW5ncy4uLi4KK1NUUklQPz1zdHJpcAorI0NYWEZMQUdTKz0tTzIgLVdhbGwgLURfRklMRV9PRkZTRVRfQklUUz02NCAtRCBVU0VfVVRGMTYKK0NYWEZMQUdTKz0tTzIgLVdhbGwgLURfRklMRV9PRkZTRVRfQklUUz02NAogTERGTEFHUys9CitMRExJQlMrPS1sdXVpZCAjLWxpY3VpbyAtbGljdXVjCitGQVRCSU5GTEFHUz0KK1RISU5CSU5GTEFHUz0KK1NHRElTS19MRExJQlM9LWxwb3B0CitDR0RJU0tfTERMSUJTPS1sbmN1cnNlc3cKIExJQl9OQU1FUz1jcmMzMiBzdXBwb3J0IGd1aWQgZ3B0cGFydCBtYnJwYXJ0IGJhc2ljbWJyIG1iciBncHQgYnNkIHBhcnR0eXBlcyBhdHRyaWJ1dGVzIGRpc2tpbyBkaXNraW8tdW5peAogTUJSX0xJQlM9c3VwcG9ydCBkaXNraW8gZGlza2lvLXVuaXggYmFzaWNtYnIgbWJycGFydAorQUxMPWdkaXNrIGNnZGlzayBzZ2Rpc2sgZml4cGFydHMKK0ZOX0VYVEVOU0lPTj0KKworIyBTZXR0aW5ncyBmb3Igbm9uLUxpbnV4IE9TZXMuLi4uCitpZmVxICgkKFRBUkdFVCksd2luNjQpCisgIENYWD14ODZfNjQtdzY0LW1pbmd3MzItZysrCisgIGlmZXEgKCQoREVURUNURURfT1MpLExpbnV4KQorICAgIFNUUklQPXg4Nl82NC13NjQtbWluZ3czMi1zdHJpcAorICBlbHNlCisgICAgU1RSSVA9c3RyaXAKKyAgZW5kaWYKKyAgQ1hYRkxBR1M9LU8yIC1XYWxsIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLXN0YXRpYyAtc3RhdGljLWxpYmdjYyAtc3RhdGljLWxpYnN0ZGMrKworICAjQ1hYRkxBR1M9LU8yIC1XYWxsIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLUkgL3Vzci9sb2NhbC9pbmNsdWRlIC1JL29wdC9sb2NhbC9pbmNsdWRlIC1nCisgIExERkxBR1MrPS1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysKKyAgTERMSUJTKz0tbHJwY3J0NAorICBTR0RJU0tfTERMSUJTPS1scG9wdCAtbGludGwgLWxpY29udgorICBMSUJfTkFNRVM9Z3VpZCBncHRwYXJ0IGJzZCBwYXJ0dHlwZXMgYXR0cmlidXRlcyBjcmMzMiBtYnJwYXJ0IGJhc2ljbWJyIG1iciBncHQgc3VwcG9ydCBkaXNraW8gZGlza2lvLXdpbmRvd3MKKyAgTUJSX0xJQlM9c3VwcG9ydCBkaXNraW8gZGlza2lvLXdpbmRvd3MgYmFzaWNtYnIgbWJycGFydAorICBGTl9FWFRFTlNJT049NjQuZXhlCisgIGlmZXEgKCQoREVURUNURURfT1MpLExpbnV4KQorICAgICMgT21pdCBjZ2Rpc2sgd2hlbiBidWlsZGluZyB1bmRlciBMaW51eCBmb3IgV2luZG93cyBiZWNhdXNlIGl0IGRvZXNuJ3QKKyAgICAjIHdvcmsgb24gbXkgc3lzdGVtCisgICAgQUxMPWdkaXNrIHNnZGlzayBmaXhwYXJ0cworICBlbmRpZgorZWxzZSBpZmVxICgkKFRBUkdFVCksd2luMzIpCisgIENYWD1pNjg2LXc2NC1taW5ndzMyLWcrKworICBpZmVxICgkKERFVEVDVEVEX09TKSxMaW51eCkKKyAgICBTVFJJUD1pNjg2LXc2NC1taW5ndzMyLXN0cmlwCisgIGVsc2UKKyAgICBTVFJJUD1zdHJpcAorICBlbmRpZgorICBDWFhGTEFHUz0tTzIgLVdhbGwgLURfRklMRV9PRkZTRVRfQklUUz02NCAtc3RhdGljIC1zdGF0aWMtbGliZ2NjIC1zdGF0aWMtbGlic3RkYysrCisgICNDWFhGTEFHUz0tTzIgLVdhbGwgLURfRklMRV9PRkZTRVRfQklUUz02NCAtSSAvdXNyL2xvY2FsL2luY2x1ZGUgLUkvb3B0L2xvY2FsL2luY2x1ZGUKKyAgTERGTEFHUys9LXN0YXRpYyAtc3RhdGljLWxpYmdjYyAtc3RhdGljLWxpYnN0ZGMrKworICBMRExJQlMrPS1scnBjcnQ0CisgIFNHRElTS19MRExJQlM9LWxwb3B0IC1saW50bCAtbGljb252CisgIExJQl9OQU1FUz1ndWlkIGdwdHBhcnQgYnNkIHBhcnR0eXBlcyBhdHRyaWJ1dGVzIGNyYzMyIG1icnBhcnQgYmFzaWNtYnIgbWJyIGdwdCBzdXBwb3J0IGRpc2tpbyBkaXNraW8td2luZG93cworICBNQlJfTElCUz1zdXBwb3J0IGRpc2tpbyBkaXNraW8td2luZG93cyBiYXNpY21iciBtYnJwYXJ0CisgIEZOX0VYVEVOU0lPTj0zMi5leGUKKyAgaWZlcSAoJChERVRFQ1RFRF9PUyksTGludXgpCisgICAgIyBPbWl0IGNnZGlzayB3aGVuIGJ1aWxkaW5nIGZvciBXaW5kb3dzIHVuZGVyIExpbnV4IGJlY2F1c2UgaXQgZG9lc24ndAorICAgICMgd29yayBvbiBteSBzeXN0ZW0KKyAgICBBTEw9Z2Rpc2sgc2dkaXNrIGZpeHBhcnRzCisgIGVuZGlmCitlbHNlIGlmZXEgKCQoVEFSR0VUKSxmcmVlYnNkKQorICBDWFg9Y2xhbmcrKworICBDWFhGTEFHUys9LU8yIC1XYWxsIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLUkgL3Vzci9sb2NhbC9pbmNsdWRlCisgIExERkxBR1MrPS1ML3Vzci9sb2NhbC9saWIKKyAgTERMSUJTKz0tbHV1aWQgIy1saWN1aW8KK2Vsc2UgaWZlcSAoJChUQVJHRVQpLG1hY29zKQorICBGQVRCSU5GTEFHUz0tYXJjaCB4ODZfNjQgLWFyY2ggYXJtNjQgLW1tYWNvc3gtdmVyc2lvbi1taW49MTAuOQorICBUSElOQklORkxBR1M9LWFyY2ggeDg2XzY0IC1tbWFjb3N4LXZlcnNpb24tbWluPTEwLjkKKyAgQ1hYRkxBR1M9JChGQVRCSU5GTEFHUykgLU8yIC1XYWxsIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLXN0ZGxpYj1saWJjKysgLUkvb3B0L2xvY2FsL2luY2x1ZGUgLUkgL3Vzci9sb2NhbC9pbmNsdWRlIC1JL29wdC9sb2NhbC9pbmNsdWRlCisgIExETElCUz0gIy1saWN1Y29yZQorICBDR0RJU0tfTERMSUJTPS91c3IvbG9jYWwvQ2VsbGFyL25jdXJzZXMvNi4yL2xpYi9saWJuY3Vyc2VzLmR5bGliCitlbHNlIGlmZXEgKCQoVEFSR0VUKSxzb2xhcmlzKQorICBDWFhGTEFHUys9LVdhbGwgLURfRklMRV9PRkZTRVRfQklUUz02NCAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzCisgIExERkxBR1MrPS1ML2xpYiAtbGljdWlvIC1saWN1dWMgLWx1dWlkCitlbmRpZgorCisjIE1vcmUgZGVmYXVsdCBzZXR0aW5ncywgZm9yIGFsbCBPU2VzLi4uLgogTElCX09CSlM9JChMSUJfTkFNRVM6PS5vKQogTUJSX0xJQl9PQkpTPSQoTUJSX0xJQlM6PS5vKQogTElCX0hFQURFUlM9JChMSUJfTkFNRVM6PS5oKQogREVQRU5EPSBtYWtlZGVwZW5kICQoQ1hYRkxBR1MpCitBTExfRVhFPSQoQUxMOj0kKEZOX0VYVEVOU0lPTikpCiAKLWFsbDoJY2dkaXNrIGdkaXNrIHNnZGlzayBmaXhwYXJ0cworYWxsOgkkKEFMTCkKIAogZ2Rpc2s6CSQoTElCX09CSlMpIGdkaXNrLm8gZ3B0dGV4dC5vCi0JJChDWFgpICQoTElCX09CSlMpIGdkaXNrLm8gZ3B0dGV4dC5vICQoTERGTEFHUykgLWx1dWlkICQoTERMSUJTKSAtbyBnZGlzawotIwkkKENYWCkgJChMSUJfT0JKUykgZ2Rpc2subyBncHR0ZXh0Lm8gJChMREZMQUdTKSAtbGljdWlvIC1saWN1dWMgLWx1dWlkIC1vIGdkaXNrCisJJChDWFgpICQoTElCX09CSlMpIGdkaXNrLm8gZ3B0dGV4dC5vICQoTERGTEFHUykgJChMRExJQlMpICQoRkFUQklORkxBR1MpIC1vIGdkaXNrJChGTl9FWFRFTlNJT04pCiAKIGNnZGlzazogJChMSUJfT0JKUykgY2dkaXNrLm8gZ3B0Y3Vyc2VzLm8KLQkkKENYWCkgJChMSUJfT0JKUykgY2dkaXNrLm8gZ3B0Y3Vyc2VzLm8gJChMREZMQUdTKSAtbHV1aWQgLWxuY3Vyc2VzdyAkKExETElCUykgLW8gY2dkaXNrCi0jCSQoQ1hYKSAkKExJQl9PQkpTKSBjZ2Rpc2subyBncHRjdXJzZXMubyAkKExERkxBR1MpIC1saWN1aW8gLWxpY3V1YyAtbHV1aWQgLWxuY3Vyc2VzIC1vIGNnZGlzaworCSQoQ1hYKSAkKExJQl9PQkpTKSBjZ2Rpc2subyBncHRjdXJzZXMubyAkKExERkxBR1MpICQoTERMSUJTKSAkKENHRElTS19MRExJQlMpIC1vIGNnZGlzayQoRk5fRVhURU5TSU9OKQogCiBzZ2Rpc2s6ICQoTElCX09CSlMpIHNnZGlzay5vIGdwdGNsLm8KLQkkKENYWCkgJChMSUJfT0JKUykgc2dkaXNrLm8gZ3B0Y2wubyAkKExERkxBR1MpIC1sdXVpZCAtbHBvcHQgJChMRExJQlMpIC1vIHNnZGlzawotIwkkKENYWCkgJChMSUJfT0JKUykgc2dkaXNrLm8gZ3B0Y2wubyAkKExERkxBR1MpIC1saWN1aW8gLWxpY3V1YyAtbHV1aWQgLWxwb3B0IC1vIHNnZGlzaworCSQoQ1hYKSAkKExJQl9PQkpTKSBzZ2Rpc2subyBncHRjbC5vICQoTERGTEFHUykgJChMRExJQlMpICQoU0dESVNLX0xETElCUykgJChUSElOQklORkxBR1MpIC1vIHNnZGlzayQoRk5fRVhURU5TSU9OKQogCiBmaXhwYXJ0czogJChNQlJfTElCX09CSlMpIGZpeHBhcnRzLm8KLQkkKENYWCkgJChNQlJfTElCX09CSlMpIGZpeHBhcnRzLm8gJChMREZMQUdTKSAkKExETElCUykgLW8gZml4cGFydHMKKwkkKENYWCkgJChNQlJfTElCX09CSlMpIGZpeHBhcnRzLm8gJChMREZMQUdTKSAkKEZBVEJJTkZMQUdTKSAtbyBmaXhwYXJ0cyQoRk5fRVhURU5TSU9OKQogCiB0ZXN0OgogCS4vZ2Rpc2tfdGVzdC5zaApAQCAtMzMsNyArMTYzLDEwIEBACiAJbGludCAkKFNSQ1MpCiAKIGNsZWFuOgkjbm8gcHJlLXJlcXMKLQlybSAtZiBjb3JlICoubyAqfiBnZGlzayBzZ2Rpc2sgY2dkaXNrIGZpeHBhcnRzCisJcm0gLWYgY29yZSAqLm8gKn4gJChBTExfRVhFKQorCitzdHJpcDoJI25vIHByZS1yZXFzCisJJChTVFJJUCkgJChBTExfRVhFKQogCiAjIHdoYXQgYXJlIHRoZSBzb3VyY2UgZGVwZW5kZW5jaWVzCiBkZXBlbmQ6ICQoU1JDUykKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmZyZWVic2QgYi9NYWtlZmlsZS5mcmVlYnNkCmluZGV4IGRhY2U3MzMuLjcyMjNmMmQgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmZyZWVic2QKKysrIGIvTWFrZWZpbGUuZnJlZWJzZApAQCAtMSw5ICsxLDggQEAKLUNDPWdjYwotQ1hYPWcrKwotQ0ZMQUdTKz0tRF9GSUxFX09GRlNFVF9CSVRTPTY0Ci0jQ1hYRkxBR1MrPS1XYWxsIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLUQgVVNFX1VURjE2IC1JL3Vzci9sb2NhbC9pbmNsdWRlCi1DWFhGTEFHUys9LVdhbGwgLURfRklMRV9PRkZTRVRfQklUUz02NCAtSSAvdXNyL2xvY2FsL2luY2x1ZGUgCi1MREZMQUdTKz0KK0NYWD1jbGFuZysrCisjQ1hYRkxBR1MrPS1PMiAtV2FsbCAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1EIFVTRV9VVEYxNiAtSS91c3IvbG9jYWwvaW5jbHVkZQorQ1hYRkxBR1MrPS1PMiAtV2FsbCAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1JIC91c3IvbG9jYWwvaW5jbHVkZSAKK0xERkxBR1MrPS1ML3Vzci9sb2NhbC9saWIKK0xETElCUys9LWx1dWlkICMtbGljdWlvCiBMSUJfTkFNRVM9Y3JjMzIgc3VwcG9ydCBndWlkIGdwdHBhcnQgbWJycGFydCBiYXNpY21iciBtYnIgZ3B0IGJzZCBwYXJ0dHlwZXMgYXR0cmlidXRlcyBkaXNraW8gZGlza2lvLXVuaXgKIE1CUl9MSUJTPXN1cHBvcnQgZGlza2lvIGRpc2tpby11bml4IGJhc2ljbWJyIG1icnBhcnQKIExJQl9PQkpTPSQoTElCX05BTUVTOj0ubykKQEAgLTE0LDI1ICsxMywyMiBAQAogYWxsOglnZGlzayBjZ2Rpc2sgc2dkaXNrIGZpeHBhcnRzCiAKIGdkaXNrOgkkKExJQl9PQkpTKSBnZGlzay5vIGdwdHRleHQubwotIwkkKENYWCkgJChMSUJfT0JKUykgZ2Rpc2subyBncHR0ZXh0Lm8gLUwvdXNyL2xvY2FsL2xpYiAkKExERkxBR1MpIC1saWN1aW8gLWx1dWlkIC1vIGdkaXNrCi0JJChDWFgpICQoTElCX09CSlMpIGdkaXNrLm8gZ3B0dGV4dC5vIC1ML3Vzci9sb2NhbC9saWIgJChMREZMQUdTKSAtbHV1aWQgLW8gZ2Rpc2sKKwkkKENYWCkgJChMSUJfT0JKUykgZ2Rpc2subyBncHR0ZXh0Lm8gJChMREZMQUdTKSAkKExETElCUykgLW8gZ2Rpc2sKIAogY2dkaXNrOiAkKExJQl9PQkpTKSBjZ2Rpc2subyBncHRjdXJzZXMubwotIwkkKENYWCkgJChMSUJfT0JKUykgY2dkaXNrLm8gZ3B0Y3Vyc2VzLm8gLUwvdXNyL2xvY2FsL2xpYiAkKExERkxBR1MpIC1saWN1aW8gLWx1dWlkIC1sbmN1cnNlcyAtbyBjZ2Rpc2sKLQkkKENYWCkgJChMSUJfT0JKUykgY2dkaXNrLm8gZ3B0Y3Vyc2VzLm8gLUwvdXNyL2xvY2FsL2xpYiAkKExERkxBR1MpIC1sdXVpZCAtbG5jdXJzZXMgLW8gY2dkaXNrCisJJChDWFgpICQoTElCX09CSlMpIGNnZGlzay5vIGdwdGN1cnNlcy5vICQoTERGTEFHUykgJChMRExJQlMpIC1sbmN1cnNlcyAtbyBjZ2Rpc2sKIAogc2dkaXNrOiAkKExJQl9PQkpTKSBzZ2Rpc2subyBncHRjbC5vCi0jCSQoQ1hYKSAkKExJQl9PQkpTKSBzZ2Rpc2subyBncHRjbC5vIC1ML3Vzci9sb2NhbC9saWIgJChMREZMQUdTKSAtbHV1aWQgLWxpY3VpbyAtbHBvcHQgLW8gc2dkaXNrCi0JJChDWFgpICQoTElCX09CSlMpIHNnZGlzay5vIGdwdGNsLm8gLUwvdXNyL2xvY2FsL2xpYiAkKExERkxBR1MpIC1sdXVpZCAtbHBvcHQgLW8gc2dkaXNrCisJJChDWFgpICQoTElCX09CSlMpIHNnZGlzay5vIGdwdGNsLm8gJChMREZMQUdTKSAkKExETElCUykgLWxwb3B0IC1vIHNnZGlzawogCiBmaXhwYXJ0czogJChNQlJfTElCX09CSlMpIGZpeHBhcnRzLm8KLQkkKENYWCkgJChNQlJfTElCX09CSlMpIGZpeHBhcnRzLm8gLUwvdXNyL2xvY2FsL2xpYiAkKExERkxBR1MpIC1vIGZpeHBhcnRzCisJJChDWFgpICQoTUJSX0xJQl9PQkpTKSBmaXhwYXJ0cy5vICQoTERGTEFHUykgLW8gZml4cGFydHMKIAogbGludDoJI25vIHByZS1yZXFzCiAJbGludCAkKFNSQ1MpCiAKIGNsZWFuOgkjbm8gcHJlLXJlcXMKLQlybSAtZiBjb3JlICoubyAqfiBnZGlzayBzZ2Rpc2sKKwlybSAtZiBjb3JlICoubyAqfiBnZGlzayBjZ2Rpc2sgc2dkaXNrIGZpeHBhcnRzCiAKICMgd2hhdCBhcmUgdGhlIHNvdXJjZSBkZXBlbmRlbmNpZXMKIGRlcGVuZDogJChTUkNTKQpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUubGludXggYi9NYWtlZmlsZS5saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDczMDljCi0tLSAvZGV2L251bGwKKysrIGIvTWFrZWZpbGUubGludXgKQEAgLTAsMCArMSw0NiBAQAorQ0ZMQUdTKz0tRF9GSUxFX09GRlNFVF9CSVRTPTY0CisjQ1hYRkxBR1MrPS1XYWxsIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLUQgVVNFX1VURjE2CitDWFhGTEFHUys9LVdhbGwgLURfRklMRV9PRkZTRVRfQklUUz02NAorTERGTEFHUys9CitMSUJfTkFNRVM9Y3JjMzIgc3VwcG9ydCBndWlkIGdwdHBhcnQgbWJycGFydCBiYXNpY21iciBtYnIgZ3B0IGJzZCBwYXJ0dHlwZXMgYXR0cmlidXRlcyBkaXNraW8gZGlza2lvLXVuaXgKK01CUl9MSUJTPXN1cHBvcnQgZGlza2lvIGRpc2tpby11bml4IGJhc2ljbWJyIG1icnBhcnQKK0xJQl9PQkpTPSQoTElCX05BTUVTOj0ubykKK01CUl9MSUJfT0JKUz0kKE1CUl9MSUJTOj0ubykKK0xJQl9IRUFERVJTPSQoTElCX05BTUVTOj0uaCkKK0RFUEVORD0gbWFrZWRlcGVuZCAkKENYWEZMQUdTKQorCithbGw6CWNnZGlzayBnZGlzayBzZ2Rpc2sgZml4cGFydHMKKworZ2Rpc2s6CSQoTElCX09CSlMpIGdkaXNrLm8gZ3B0dGV4dC5vCisJJChDWFgpICQoTElCX09CSlMpIGdkaXNrLm8gZ3B0dGV4dC5vICQoTERGTEFHUykgLWx1dWlkICQoTERMSUJTKSAtbyBnZGlzaworIwkkKENYWCkgJChMSUJfT0JKUykgZ2Rpc2subyBncHR0ZXh0Lm8gJChMREZMQUdTKSAtbGljdWlvIC1saWN1dWMgLWx1dWlkIC1vIGdkaXNrCisKK2NnZGlzazogJChMSUJfT0JKUykgY2dkaXNrLm8gZ3B0Y3Vyc2VzLm8KKwkkKENYWCkgJChMSUJfT0JKUykgY2dkaXNrLm8gZ3B0Y3Vyc2VzLm8gJChMREZMQUdTKSAtbHV1aWQgLWxuY3Vyc2VzdyAkKExETElCUykgLW8gY2dkaXNrCisjCSQoQ1hYKSAkKExJQl9PQkpTKSBjZ2Rpc2subyBncHRjdXJzZXMubyAkKExERkxBR1MpIC1saWN1aW8gLWxpY3V1YyAtbHV1aWQgLWxuY3Vyc2VzIC1vIGNnZGlzaworCitzZ2Rpc2s6ICQoTElCX09CSlMpIHNnZGlzay5vIGdwdGNsLm8KKwkkKENYWCkgJChMSUJfT0JKUykgc2dkaXNrLm8gZ3B0Y2wubyAkKExERkxBR1MpIC1sdXVpZCAtbHBvcHQgJChMRExJQlMpIC1vIHNnZGlzaworIwkkKENYWCkgJChMSUJfT0JKUykgc2dkaXNrLm8gZ3B0Y2wubyAkKExERkxBR1MpIC1saWN1aW8gLWxpY3V1YyAtbHV1aWQgLWxwb3B0IC1vIHNnZGlzaworCitmaXhwYXJ0czogJChNQlJfTElCX09CSlMpIGZpeHBhcnRzLm8KKwkkKENYWCkgJChNQlJfTElCX09CSlMpIGZpeHBhcnRzLm8gJChMREZMQUdTKSAkKExETElCUykgLW8gZml4cGFydHMKKwordGVzdDoKKwkuL2dkaXNrX3Rlc3Quc2gKKworbGludDoJI25vIHByZS1yZXFzCisJbGludCAkKFNSQ1MpCisKK2NsZWFuOgkjbm8gcHJlLXJlcXMKKwlybSAtZiBjb3JlICoubyAqfiBnZGlzayBzZ2Rpc2sgY2dkaXNrIGZpeHBhcnRzCisKKyMgd2hhdCBhcmUgdGhlIHNvdXJjZSBkZXBlbmRlbmNpZXMKK2RlcGVuZDogJChTUkNTKQorCSQoREVQRU5EKSAkKFNSQ1MpCisKKyQoT0JKUyk6CisJJChDUklUSUNBTF9DWFhfRkxBR1MpIAorCisjIG1ha2VkZXBlbmQgZGVwZW5kZW5jaWVzIGJlbG93IC0tIHR5cGUgIm1ha2VkZXBlbmQgKi5jYyIgdG8gcmVnZW5lcmF0ZS4uLi4KKyMgRE8gTk9UIERFTEVURQpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUubWFjIGIvTWFrZWZpbGUubWFjCmluZGV4IDI3Zjk1YjcuLjkxYTI4MWMgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLm1hYworKysgYi9NYWtlZmlsZS5tYWMKQEAgLTEsMTAgKzEsMTEgQEAKLUNDPWdjYwotQ1hYPWNsYW5nKysKLUZBVEJJTkZMQUdTPS1hcmNoIHg4Nl82NCAtYXJjaCBpMzg2IC1tbWFjb3N4LXZlcnNpb24tbWluPTEwLjQKLVRISU5CSU5GTEFHUz0tYXJjaCB4ODZfNjQgLW1tYWNvc3gtdmVyc2lvbi1taW49MTAuNAotQ0ZMQUdTPSQoRkFUQklORkxBR1MpIC1PMiAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1nCi0jQ1hYRkxBR1M9LU8yIC1XYWxsIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLUQgVVNFX1VURjE2IC1JL29wdC9sb2NhbC9pbmNsdWRlIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1JL29wdC9sb2NhbC9pbmNsdWRlIC1nCi1DWFhGTEFHUz0kKEZBVEJJTkZMQUdTKSAtTzIgLVdhbGwgLURfRklMRV9PRkZTRVRfQklUUz02NCAtSS9vcHQvbG9jYWwvaW5jbHVkZSAtSSAvdXNyL2xvY2FsL2luY2x1ZGUgLUkvb3B0L2xvY2FsL2luY2x1ZGUgLWcKK0NYWD1jKysKKyMgRkFUQklORkxBR1M9LWFyY2ggeDg2XzY0IC1hcmNoIGkzODYgLW1tYWNvc3gtdmVyc2lvbi1taW49MTAuOQorRkFUQklORkxBR1M9LWFyY2ggeDg2XzY0IC1hcmNoIGFybTY0IC1tbWFjb3N4LXZlcnNpb24tbWluPTEwLjkKK1RISU5CSU5GTEFHUz0tYXJjaCB4ODZfNjQgLW1tYWNvc3gtdmVyc2lvbi1taW49MTAuOQorI0NYWEZMQUdTPS1PMiAtV2FsbCAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1EIFVTRV9VVEYxNiAtSS9vcHQvbG9jYWwvaW5jbHVkZSAtSS91c3IvbG9jYWwvaW5jbHVkZSAtSS9vcHQvbG9jYWwvaW5jbHVkZQorQ1hYRkxBR1M9JChGQVRCSU5GTEFHUykgLU8yIC1XYWxsIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLXN0ZGxpYj1saWJjKysgLUkvb3B0L2xvY2FsL2luY2x1ZGUgLUkgL3Vzci9sb2NhbC9pbmNsdWRlIC1JL29wdC9sb2NhbC9pbmNsdWRlCitMREZMQUdTKz0KK0xETElCUys9ICMtbGljdWNvcmUKIExJQl9OQU1FUz1jcmMzMiBzdXBwb3J0IGd1aWQgZ3B0cGFydCBtYnJwYXJ0IGJhc2ljbWJyIG1iciBncHQgYnNkIHBhcnR0eXBlcyBhdHRyaWJ1dGVzIGRpc2tpbyBkaXNraW8tdW5peAogTUJSX0xJQlM9c3VwcG9ydCBkaXNraW8gZGlza2lvLXVuaXggYmFzaWNtYnIgbWJycGFydAogI0xJQl9TUkNTPSQoTkFNRVM6PS5jYykKQEAgLTE2LDI0ICsxNywxNyBAQAogYWxsOglnZGlzayBzZ2Rpc2sgY2dkaXNrIGZpeHBhcnRzCiAKIGdkaXNrOgkkKExJQl9PQkpTKSBncHR0ZXh0Lm8gZ2Rpc2subwotCSQoQ1hYKSAkKExJQl9PQkpTKSBncHR0ZXh0Lm8gZ2Rpc2subyAkKEZBVEJJTkZMQUdTKSAtbyBnZGlzawotIwkkKENYWCkgJChMSUJfT0JKUykgLUwvdXNyL2xpYiAtbGljdWNvcmUgZ3B0dGV4dC5vIGdkaXNrLm8gLW8gZ2Rpc2sKKwkkKENYWCkgJChMSUJfT0JKUykgZ3B0dGV4dC5vIGdkaXNrLm8gJChGQVRCSU5GTEFHUykgJChMREZMQUdTKSAkKExETElCUykgLW8gZ2Rpc2sKIAogY2dkaXNrOiAkKExJQl9PQkpTKSBjZ2Rpc2subyBncHRjdXJzZXMubwotCSQoQ1hYKSAkKExJQl9PQkpTKSBjZ2Rpc2subyBncHRjdXJzZXMubyAvdXNyL2xpYi9saWJuY3Vyc2VzLmR5bGliICQoTERGTEFHUykgJChGQVRCSU5GTEFHUykgLW8gY2dkaXNrCi0jCSQoQ1hYKSAkKExJQl9PQkpTKSBjZ2Rpc2subyBncHRjdXJzZXMubyAkKExERkxBR1MpIC1saWN1Y29yZSAtbG5jdXJzZXMgLW8gY2dkaXNrCisJJChDWFgpICQoTElCX09CSlMpIGNnZGlzay5vIGdwdGN1cnNlcy5vICQoTERGTEFHUykgJChMRExJQlMpIC91c3IvbG9jYWwvQ2VsbGFyL25jdXJzZXMvNi4yL2xpYi9saWJuY3Vyc2VzLmR5bGliIC1vIGNnZGlzawogCiBzZ2Rpc2s6ICQoTElCX09CSlMpIGdwdGNsLm8gc2dkaXNrLm8KLSMJJChDWFgpICQoTElCX09CSlMpIGdwdGNsLm8gc2dkaXNrLm8gL29wdC9sb2NhbC9saWIvbGliaWNvbnYuYSAvb3B0L2xvY2FsL2xpYi9saWJpbnRsLmEgL29wdC9sb2NhbC9saWIvbGlicG9wdC5hICQoRkFUQklORkxBR1MpIC1vIHNnZGlzawotCSQoQ1hYKSAkKExJQl9PQkpTKSBncHRjbC5vIHNnZGlzay5vIC1ML3Vzci9sb2NhbC9saWIgLWxwb3B0ICQoVEhJTkJJTkZMQUdTKSAtbyBzZ2Rpc2sKLSMJJChDWFgpICQoTElCX09CSlMpIGdwdGNsLm8gc2dkaXNrLm8gLUwvc3cvbGliIC1saWN1Y29yZSAtbHBvcHQgLW8gc2dkaXNrCisJJChDWFgpICQoTElCX09CSlMpIGdwdGNsLm8gc2dkaXNrLm8gJChMREZMQUdTKSAtTC91c3IvbG9jYWwvbGliICQoTERMSUJTKSAtbHBvcHQgJChUSElOQklORkxBR1MpIC1vIHNnZGlzawogCiBmaXhwYXJ0czogJChNQlJfTElCX09CSlMpIGZpeHBhcnRzLm8KIAkkKENYWCkgJChNQlJfTElCX09CSlMpIGZpeHBhcnRzLm8gJChMREZMQUdTKSAkKEZBVEJJTkZMQUdTKSAtbyBmaXhwYXJ0cwogCi10ZXN0Z3VpZDoJJChMSUJfT0JKUykgdGVzdGd1aWQubwotCSQoQ1hYKSAkKExJQl9PQkpTKSB0ZXN0Z3VpZC5vIC1vIHRlc3RndWlkCi0KIGxpbnQ6CSNubyBwcmUtcmVxcwogCWxpbnQgJChTUkNTKQogCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5taW5ndyBiL01ha2VmaWxlLm1pbmd3CmluZGV4IGFjZmZmNjQuLjJlZDIyOGEgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLm1pbmd3CisrKyBiL01ha2VmaWxlLm1pbmd3CkBAIC0xLDkgKzEsOSBAQAotQ0M9L3Vzci9iaW4vaTY4Ni13NjQtbWluZ3czMi1nY2MKLUNYWD0vdXNyL2Jpbi9pNjg2LXc2NC1taW5ndzMyLWcrKwotU1RSSVA9L3Vzci9iaW4vaTY4Ni13NjQtbWluZ3czMi1zdHJpcAotQ0ZMQUdTPS1PMiAtV2FsbCAtc3RhdGljIC1zdGF0aWMtbGliZ2NjIC1zdGF0aWMtbGlic3RkYysrICAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1nCi1DWFhGTEFHUz0tTzIgLVdhbGwgLXN0YXRpYyAtc3RhdGljLWxpYmdjYyAtc3RhdGljLWxpYnN0ZGMrKyAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1nCi0jQ1hYRkxBR1M9LU8yIC1XYWxsIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLUkgL3Vzci9sb2NhbC9pbmNsdWRlIC1JL29wdC9sb2NhbC9pbmNsdWRlIC1nCitDWFg9aTY4Ni13NjQtbWluZ3czMi1nKysKK1NUUklQPWk2ODYtdzY0LW1pbmd3MzItc3RyaXAKK0NYWEZMQUdTPS1PMiAtV2FsbCAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysKKyNDWFhGTEFHUz0tTzIgLVdhbGwgLURfRklMRV9PRkZTRVRfQklUUz02NCAtSSAvdXNyL2xvY2FsL2luY2x1ZGUgLUkvb3B0L2xvY2FsL2luY2x1ZGUKK0xERkxBR1MrPS1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysKK0xETElCUys9LWxycGNydDQKIExJQl9OQU1FUz1ndWlkIGdwdHBhcnQgYnNkIHBhcnR0eXBlcyBhdHRyaWJ1dGVzIGNyYzMyIG1icnBhcnQgYmFzaWNtYnIgbWJyIGdwdCBzdXBwb3J0IGRpc2tpbyBkaXNraW8td2luZG93cwogTUJSX0xJQlM9c3VwcG9ydCBkaXNraW8gZGlza2lvLXdpbmRvd3MgYmFzaWNtYnIgbWJycGFydAogTElCX1NSQ1M9JChOQU1FUzo9LmNjKQpAQCAtMTIsMjUgKzEyLDI4IEBACiBMSUJfSEVBREVSUz0kKExJQl9OQU1FUzo9LmgpCiBERVBFTkQ9IG1ha2VkZXBlbmQgJChDRkxBR1MpCiAKLWFsbDoJZ2Rpc2sgZml4cGFydHMKK2FsbDoJZ2Rpc2sgc2dkaXNrIGZpeHBhcnRzCiAKIGdkaXNrOgkkKExJQl9PQkpTKSBnZGlzay5vIGdwdHRleHQubwotCSQoQ1hYKSAkKENYWEZMQUdTKSAkKExJQl9PQkpTKSBnZGlzay5vIGdwdHRleHQubyAtbHJwY3J0NCAtc3RhdGljLWxpYmdjYyAtbyBnZGlzazMyLmV4ZQorCSQoQ1hYKSAkKExJQl9PQkpTKSBnZGlzay5vIGdwdHRleHQubyAkKExERkxBR1MpICQoTERMSUJTKSAtbyBnZGlzazMyLmV4ZQogCi1zZ2Rpc2s6ICQoTElCX09CSlMpIHNnZGlzay5vCi0JJChDWFgpICQoQ1hYRkxBR1MpICQoTElCX09CSlMpIHNnZGlzay5vIC1scG9wdCAtc3RhdGljLWxpYmdjYyAtbyBzZ2Rpc2szMi5leGUKK2NnZGlzazogJChMSUJfT0JKUykgY2dkaXNrLm8gZ3B0Y3Vyc2VzLm8KKwkkKENYWCkgJChMSUJfT0JKUykgY2dkaXNrLm8gZ3B0Y3Vyc2VzLm8gJChMREZMQUdTKSAkKExETElCUykgLWxuY3Vyc2VzdyAtbyBjZ2Rpc2szMi5leGUKKworc2dkaXNrOiAkKExJQl9PQkpTKSBzZ2Rpc2subyBncHRjbC5vCisJJChDWFgpICQoTElCX09CSlMpIHNnZGlzay5vIGdwdGNsLm8gJChMREZMQUdTKSAkKExETElCUykgLWxwb3B0IC1saW50bCAtbGljb252IC1vIHNnZGlzazMyLmV4ZQogCiBmaXhwYXJ0czogJChNQlJfTElCX09CSlMpIGZpeHBhcnRzLm8KLQkkKENYWCkgJChDWFhGTEFHUykgJChNQlJfTElCX09CSlMpIGZpeHBhcnRzLm8gJChMREZMQUdTKSAtc3RhdGljLWxpYmdjYyAtbyBmaXhwYXJ0czMyLmV4ZQorCSQoQ1hYKSAkKE1CUl9MSUJfT0JKUykgZml4cGFydHMubyAkKExERkxBR1MpIC1vIGZpeHBhcnRzMzIuZXhlCiAKIGxpbnQ6CSNubyBwcmUtcmVxcwogCWxpbnQgJChTUkNTKQogCiBjbGVhbjoJI25vIHByZS1yZXFzCi0Jcm0gLWYgY29yZSAqLm8gKn4gZ2Rpc2suZXhlIHNnZGlzay5leGUKKwlybSAtZiBjb3JlICoubyAqfiBnZGlzazMyLmV4ZSBjZ2Rpc2szMi5leGUgc2dkaXNrMzIuZXhlIGZpeHBhcnRzMzIuZXhlCiAKIHN0cmlwOgkjbm8gcHJlLXJlcXMKLQkkKFNUUklQKSBnZGlzazMyLmV4ZSBmaXhwYXJ0czMyLmV4ZQorCSQoU1RSSVApIGdkaXNrMzIuZXhlIGNnZGlzazMyLmV4ZSBzZ2Rpc2szMi5leGUgZml4cGFydHMzMi5leGUKIAogIyB3aGF0IGFyZSB0aGUgc291cmNlIGRlcGVuZGVuY2llcwogZGVwZW5kOiAkKFNSQ1MpCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5taW5ndzY0IGIvTWFrZWZpbGUubWluZ3c2NAppbmRleCA3ZTRiMzJiLi4zMDcwYTQyIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5taW5ndzY0CisrKyBiL01ha2VmaWxlLm1pbmd3NjQKQEAgLTEsOSArMSw5IEBACi1DQz0vdXNyL2Jpbi94ODZfNjQtdzY0LW1pbmd3MzItZ2NjCi1DWFg9L3Vzci9iaW4veDg2XzY0LXc2NC1taW5ndzMyLWcrKwotU1RSSVA9L3Vzci9iaW4veDg2XzY0LXc2NC1taW5ndzMyLXN0cmlwCi1DRkxBR1M9LU8yIC1XYWxsIC1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysgIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWcKLUNYWEZMQUdTPS1PMiAtV2FsbCAtc3RhdGljIC1zdGF0aWMtbGliZ2NjIC1zdGF0aWMtbGlic3RkYysrIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWcKK0NYWD14ODZfNjQtdzY0LW1pbmd3MzItZysrCitTVFJJUD14ODZfNjQtdzY0LW1pbmd3MzItc3RyaXAKK0NYWEZMQUdTPS1PMiAtV2FsbCAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1nCiAjQ1hYRkxBR1M9LU8yIC1XYWxsIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLUkgL3Vzci9sb2NhbC9pbmNsdWRlIC1JL29wdC9sb2NhbC9pbmNsdWRlIC1nCitMREZMQUdTKz0tc3RhdGljIC1zdGF0aWMtbGliZ2NjIC1zdGF0aWMtbGlic3RkYysrCitMRExJQlMrPS1scnBjcnQ0CiBMSUJfTkFNRVM9Z3VpZCBncHRwYXJ0IGJzZCBwYXJ0dHlwZXMgYXR0cmlidXRlcyBjcmMzMiBtYnJwYXJ0IGJhc2ljbWJyIG1iciBncHQgc3VwcG9ydCBkaXNraW8gZGlza2lvLXdpbmRvd3MKIE1CUl9MSUJTPXN1cHBvcnQgZGlza2lvIGRpc2tpby13aW5kb3dzIGJhc2ljbWJyIG1icnBhcnQKIExJQl9TUkNTPSQoTkFNRVM6PS5jYykKQEAgLTEyLDI1ICsxMiwyOSBAQAogTElCX0hFQURFUlM9JChMSUJfTkFNRVM6PS5oKQogREVQRU5EPSBtYWtlZGVwZW5kICQoQ0ZMQUdTKQogCi1hbGw6CWdkaXNrIGZpeHBhcnRzCisjIE5vdGU6IGNnZGlzayBpcyBidWlsZGFibGUgaW4gV2luZG93cywgYnV0IG5vdCBpbiBVYnVudHUgMjAuMDQgb3IgMjIuMDQKK2FsbDoJZ2Rpc2sgc2dkaXNrIGZpeHBhcnRzCiAKIGdkaXNrOgkkKExJQl9PQkpTKSBnZGlzay5vIGdwdHRleHQubwotCSQoQ1hYKSAkKENYWEZMQUdTKSAkKExJQl9PQkpTKSBnZGlzay5vIGdwdHRleHQubyAtbHJwY3J0NCAtc3RhdGljLWxpYmdjYyAtbyBnZGlzazY0LmV4ZQorCSQoQ1hYKSAkKExJQl9PQkpTKSBnZGlzay5vIGdwdHRleHQubyAkKExERkxBR1MpICQoTERMSUJTKSAtbyBnZGlzazY0LmV4ZQogCi1zZ2Rpc2s6ICQoTElCX09CSlMpIHNnZGlzay5vCi0JJChDWFgpICQoQ1hYRkxBR1MpICQoTElCX09CSlMpIHNnZGlzay5vIC1scG9wdCAtc3RhdGljLWxpYmdjYyAtbyBzZ2Rpc2s2NC5leGUKK2NnZGlzazogJChMSUJfT0JKUykgY2dkaXNrLm8gZ3B0Y3Vyc2VzLm8KKwkkKENYWCkgJChMSUJfT0JKUykgY2dkaXNrLm8gZ3B0Y3Vyc2VzLm8gJChMREZMQUdTKSAkKExETElCUykgLWxuY3Vyc2VzdyAtbyBjZ2Rpc2s2NC5leGUKKworc2dkaXNrOiAkKExJQl9PQkpTKSBzZ2Rpc2subyBncHRjbC5vCisJJChDWFgpICQoTElCX09CSlMpIHNnZGlzay5vIGdwdGNsLm8gJChMREZMQUdTKSAkKExETElCUykgLWxwb3B0IC1saW50bCAtbGljb252IC1vIHNnZGlzazY0LmV4ZQogCiBmaXhwYXJ0czogJChNQlJfTElCX09CSlMpIGZpeHBhcnRzLm8KLQkkKENYWCkgJChDWFhGTEFHUykgJChNQlJfTElCX09CSlMpIGZpeHBhcnRzLm8gJChMREZMQUdTKSAtc3RhdGljLWxpYmdjYyAtbyBmaXhwYXJ0czY0LmV4ZQorCSQoQ1hYKSAkKE1CUl9MSUJfT0JKUykgZml4cGFydHMubyAkKExERkxBR1MpIC1vIGZpeHBhcnRzNjQuZXhlCiAKIGxpbnQ6CSNubyBwcmUtcmVxcwogCWxpbnQgJChTUkNTKQogCiBjbGVhbjoJI25vIHByZS1yZXFzCi0Jcm0gLWYgY29yZSAqLm8gKn4gZ2Rpc2s2NC5leGUgc2dkaXNrNjQuZXhlCisJcm0gLWYgY29yZSAqLm8gKn4gZ2Rpc2s2NC5leGUgY2dkaXNrNjQuZXhlIHNnZGlzazY0LmV4ZSBmaXhwYXJ0czY0LmV4ZQogCiBzdHJpcDoJI25vIHByZS1yZXFzCi0JJChTVFJJUCkgZ2Rpc2s2NC5leGUgZml4cGFydHM2NC5leGUKKwkkKFNUUklQKSBnZGlzazY0LmV4ZSBjZ2Rpc2s2NC5leGUgc2dkaXNrNjQuZXhlIGZpeHBhcnRzNjQuZXhlCiAKICMgd2hhdCBhcmUgdGhlIHNvdXJjZSBkZXBlbmRlbmNpZXMKIGRlcGVuZDogJChTUkNTKQpkaWZmIC0tZ2l0IGEvTkVXUyBiL05FV1MKaW5kZXggZmY1NGM2Yy4uMjlkOTllMyAxMDA2NDQKLS0tIGEvTkVXUworKysgYi9ORVdTCkBAIC0xLDEyICsxLDE3NiBAQAotMS4wLjUgKD8vPy8yMDIwKToKKzEuMC4xMCAoPy8/Py8yMDIzKToKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworLSBGaXhlZCBwcm9ibGVtIHRoYXQgY2F1c2VkIHNnZGlzayB0byBjcmFzaCB3aXRoIGVycm9ycyBhYm91dCBiZWluZyB1bmFibGUKKyAgdG8gcmVhZCB0aGUgZGlzaydzIHBhcnRpdGlvbiB0YWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIGxhdGVzdCBwb3B0CisgIChjb21taXQgNzQwLCB3aGljaCBpcyBwcmUtcmVsZWFzZSBhcyBJIHR5cGU7IHByZXN1bWFibHkgdmVyc2lvbiAxLjE5IGFuZAorICBsYXRlciBvbmNlIHJlbGVhc2VkKS4KKworLSBVcGRhdGVkIGd1aWQuY2MgdG8gZGVhbCB3aXRoIG1pbm9yIGNoYW5nZSBpbiBsaWJ1dWlkLgorCistIEZpeGVkIHBvdGVudGlhbCBOVUxMIGRlcmVmZXJuY2UgYnVnIGluIHNnZGlzay4gVGhhbmtzIHRvIERhbWlhbiBLdXJlaworICBmb3IgdGhpcyBmaXguCisKKy0gVGhlIHBhcnRpdGlvbiBudW1iZXIgb2YgIjAiIGNhbiBub3cgYmUgdXNlZCB0byByZWZlcmVuY2UgbmV3bHktY3JlYXRlZAorICBwYXJ0aXRpb25zIHdoZW4gdGhlIC0tbGFyZ2VzdC1uZXc9MCBvcHRpb24gdG8gc2dkaXNrIGlzIHVzZWQuIFRoYW5rcyB0bworICBEYXZpZCBKb2Fxde1uIFNob3VyYWJpIFBvcmNlbCBmb3IgdGhpcyBpbXByb3ZlbWVudC4KKworLSBNYWtlIGV4cGxpY2l0IGNhc3RzIGluIGdwdGN1cnNlcy5jYyB0byBlbGltaW5hdGUgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQKKyAgbWlzLW1hdGNoZWQgdHlwZXMgaW4gcHJpbnR3KCkgc3RhdGVtZW50cy4KKworLSBNaW5vciBjb2RlIGNsZWFudXAgYmFzZWQgb24gdmFsZ3JpbmQgYW5hbHlzaXMuCisKKy0gSW4gcHJldmlvdXMgdmVyc2lvbnMsIHJFRkluZCBhY2NlcHRlZCBvbmx5IGludGVnZXIgdmFsdWVzIGZvciBwYXJ0aXRpb24KKyAgc3RhcnQgcG9pbnRzLCBlbmQgcG9pbnRzLCBhbmQgc2l6ZXMsIGFuZCBpdCBpbnRlcnByZXRlZCBkZWNpbWFsIHZhbHVlcworICBpbmNvcnJlY3RseS4gVGhhdCBpcywgaWYgeW91IHR5cGVkICIrOS41RyIgYXMgdGhlIHBhcnRpdGlvbiBlbmQgcG9pbnQsCisgIHlvdSdkIGVuZCB1cCB3aXRoIHNvbWV0aGluZyBqdXN0IDkgc2VjdG9ycyBpbiBzaXplLiBUaGlzIHZlcnNpb24gbm93CisgIHRydW5jYXRlcyBkZWNpbWFsIG51bWJlcnMgdG8gdGhlaXIgaW50ZWdyYWwgdmFsdWVzLCBzbyB5b3UnZCBnZXQgYSA5IEdpQgorICBwYXJ0aXRpb24gaW5zdGVhZC4KKworMS4wLjkgKDQvMTQvMjAyMik6CistLS0tLS0tLS0tLS0tLS0tLS0KKworLSBSZW1vdmVkIHN0cmF5IGRlYnVnZ2luZyBjb2RlIHRoYXQgY2F1c2VkICJwYXJ0TnVtIGlzIHt4fSIgdG8gYmUgcHJpbnRlZAorICB3aGVuIGNoYW5naW5nIGEgcGFydGl0aW9uJ3MgbmFtZSB3aXRoIHNnZGlzayAoLWMvLS1jaGFuZ2UtbmFtZSkuCisKKy0gQWRkZWQgc3VwcG9ydCBmb3IgYWxpZ25pbmcgcGFydGl0aW9ucycgZW5kIHBvaW50cywgYXMgd2VsbCBhcyB0aGVpciBzdGFydAorICBwb2ludHMuIFRoaXMgc3VwcG9ydCBhZmZlY3RzIHRoZSBkZWZhdWx0IHBhcnRpdGlvbiBzaXplIHdoZW4gdXNpbmcgJ24nIGluCisgIGdkaXNrOyBpdCBhZmZlY3RzIHRoZSBkZWZhdWx0IHBhcnRpdGlvbiBzaXplIGluIGNnZGlzazsgYW5kIGl0J3MgYWN0aXZhdGVkCisgIGJ5IHRoZSBuZXcgJy1JJyBvcHRpb24gaW4gc2dkaXNrLiBTZWUgdGhlIHByb2dyYW1zJyByZXNwZWN0aXZlIG1hbiBwYWdlcworICBmb3IgZGV0YWlscy4gVGhpcyBmZWF0dXJlIGlzIGludGVuZGVkIHRvIGhlbHAgd2l0aCBMVUtTMiBlbmNyeXB0aW9uLCB3aGljaAorICByZWFjdHMgYmFkbHkgdG8gcGFydGl0aW9ucyB0aGF0IGFyZSBub3Qgc2l6ZWQgYXMgZXhhY3QgbXVsdGlwbGVzIG9mIHRoZQorICBlbmNyeXB0aW9uIGJsb2NrIHNpemUuCisKKy0gQWRkZWQgY2hlY2sgZm9yIHRvby1zbWFsbCBkaXNrcyAobW9zdCBsaWtlbHkgdG8gYmUgYW4gaXNzdWUgd2hlbiB0cnlpbmcKKyAgdG8gdXNlIGEgdG9vLXNtYWxsIGRpc2sgaW1hZ2UpOyBwcm9ncmFtIG5vdyBhYm9ydHMgaWYgdGhpcyBoYXBwZW5zLgorCistIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGJ1aWxkIHNnZGlzayBhbmQgY2dkaXNrIGZvciBXaW5kb3dzLgorCistIEFkZGVkIG5ldyB0eXBlIGNvZGVzOgorICAqIEZyZWVCU0QgbmFuZGZzICgweGE1MDYpCisgICogQXBwbGUgQVBGUyBQcmUtQm9vdCAoMHhhZjBiKQorICAqIEFwcGxlIEFQRlMgUmVjb3ZlcnkgKDB4YWYwYykKKyAgKiBDaHJvbWVPUyBmaXJtd2FyZSAoMHg3ZjAzKQorICAqIENocm9tZU9TIG1pbmktT1MgKDB4N2YwNCkKKyAgKiBDaHJvbWVPUyBoaWJlcm5hdGUgKDB4N2YwNSkKKyAgKiBVLUJvb3QgYm9vdCBsb2FkZXIgKDB4YjAwMCkKKyAgKiAyNyAoISkgY29kZXMgZm9yIEZ1Y2hzaWEgKDB4ZjEwMCB0byAweGYxMWEpCisKKy0gRml4ZWQgYnVpbGQgcHJvYmxlbXMgd2l0aCByZWNlbnQgdmVyc2lvbnMgb2YgbmN1cnNlcy4KKworLSBGaXhlZCBidWcgdGhhdCBjYXVzZWQgY2dkaXNrIHRvIHJlcG9ydCBpbmNvcnJlY3QgcGFydGl0aW9uIGF0dHJpYnV0ZXMuCisKKy0gQ29uc29saWRhdGVkIE1ha2VmaWxlcyBmb3IgTGludXgsIEZyZWVCU0QsIFNvbGFyaXMsIG1hY09TLCBhbmQgV2luZG93cworICAoMzItIGFuZCA2NC1iaXQpLiBUaGUgb2xkIE9TLXNwZWNpZmljIE1ha2VmaWxlcyByZW1haW4gaW4gY2FzZSB0aGUgbmV3CisgIGNvbnNvbGlkYXRlZCBNYWtlZmlsZSBoYXMgcHJvYmxlbXMsIGJ1dCB0aGUgb2xkIG9uZXMgYXJlIGRlcHJlY2F0ZWQuCisgIChUaGUgU29sYXJpcyBzdXBwb3J0IGluIHRoZSBuZXcgTWFrZWZpbGUgaXMgdW50ZXN0ZWQuKQorCisxLjAuOCAoNi85LzIwMjEpOgogLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBGaXhlZCBkb3VibGUgYnl0ZSBzd2FwIG9wZXJhdGlvbiBvbiB3cml0ZXMgb2YgcGFydGl0aW9uIG5hbWUgZGF0YSBvbgorICBiaWctZW5kaWFuIHN5c3RlbXM7IHRoaXMgaXMgaW4gYWRkaXRpb24gdG8gdGhlIGRvdWJsZSBieXRlIHN3YXAgZml4IG9uCisgIHJlYWRpbmcgcGFydGl0aW9uIGxhYmVsIGRhdGEgZml4ZWQgaW4gMS4wLjcuIChUaGFua3MgdG8gRXJpayBMYXJzc29uIGZvcgorICBib3RoIGZpeGVzLikKKworLSBBZGRlZCBmZWF0dXJlIHRvIGdkaXNrIGFuZCBzZ2Rpc2sgdG8gZW5hYmxlIHN3YXBwaW5nIHRoZSBieXRlIG9yZGVyIG9mCisgIHBhcnRpdGlvbiBuYW1lcywgc28gYXMgdG8gY29ycmVjdCBkaXNrcyBhbHJlYWR5IGFmZmVjdGVkIGJ5IHRoZSBwcmVjZWRpbmcKKyAgYnVnLiBUaGlzIG9wdGlvbiBpcyAnYicgb24gdGhlIGV4cGVydHMnIG1lbnUgaW4gZ2Rpc2sgYW5kCisgIC1iLy0tYnl0ZS1zd2FwLW5hbWUgaW4gc2dkaXNrLiBUaGlzIHNlZW1zIGFkdmFuY2VkL29ic2N1cmUgZW5vdWdoIHRoYXQgSQorICBkb24ndCB3YW50IHRvIGNsdXR0ZXIgY2dkaXNrJ3MgbWVudSB3aXRoIHRoaXMgb3B0aW9uLCBzbyBJIGhhdmVuJ3QgYWRkZWQKKyAgaXQgdGhlcmUuCisKKy0gQWRkZWQgdHlwZSBjb2RlIGZvciB0aGUgQmFyZWJveCBib290IGxvYWRlciAoMHhiYjAwOworICA0Nzc4RUQ2NS1CRjQyLTQ1RkEtOUM1Qi0yODdBMURDNEFBQjEpLgorCistIFRyaXZpYWwgY29kZSBjbGVhbnVwLgorCisxLjAuNyAoMy8xMC8yMDIxKToKKy0tLS0tLS0tLS0tLS0tLS0tLQorCistIEZpeGVkIGJ1ZyB0aGF0IGNhdXNlZCBzcHVyaW91cyB3YXJuaW5ncyBhYm91dCB0aGUgcGFydGl0aW9uIHRhYmxlCisgIGhlYWRlciBjbGFpbWluZyBhbiBpbnZhbGlkIHNpemUgb2YgcGFydGl0aW9uIGVudHJpZXMgd2hlbiByZWFkaW5nCisgIHNvbWUgTUJSIGRpc2tzLgorCistIEFkZGVkIEFSTTY0IGFzIGFuIGFyY2hpdGVjdHVyZSBmb3IgdGhlIE1hYyBidWlsZHMgb2YgZ2Rpc2sgYW5kIGZpeHBhcnRzLgorICBUaGUgb2ZmaWNpYWwgR1BUIGZkaXNrIGJpbmFyaWVzIG9mIHRoZXNlIGZpbGVzIGZvciBtYWNPUyBhcmUgbm93CisgICJ1bml2ZXJzYWwiIHg4Ni02NC9BUk02NCBiaW5hcmllcywgc28gdGhleSB3aWxsIHJ1biBuYXRpdmVseSBvbiB0aGUgbmV3IE0xCisgIChBUk02NCkgTWFjcy4gVGhlIHNnZGlzayBhbmQgY2dkaXNrIGJpbmFyaWVzLCB0aG91Z2gsIHJlbWFpbiBidWlsdCBvbmx5CisgIGZvciB4ODYtNjQsIGJlY2F1c2UgdGhleSByZWx5IG9uIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgZWFzaWx5IGJ1aWx0IGluCisgICJ1bml2ZXJzYWwiIGZvcm0uCisKKy0gRml4ZWQgZG91YmxlIGJ5dGUgc3dhcCBvcGVyYXRpb24gb24gcGFydGl0aW9uIGxhYmVsIGRhdGEgb24gYmlnLWVuZGlhbgorICBDUFVzLiBUaGlzIHJlc3VsdGVkIGluIHBhcnRpdGlvbiBuYW1lcyBiZWNvbWluZyBnaWJiZXJpc2ggb24gc3VjaCBDUFVzLgorCistIEFkZGVkIHRocmVlIG5ldyB0eXBlIGNvZGVzOgorICAtIDB4MDcwMSAtIE1pY3Jvc29mdCBTdG9yYWdlIFJlcGxpY2EKKyAgLSAweDA3MDIgLSBBcmNhT1MgVHlwZSAxCisgIC0gMHg4NDAxIC0gU3RvcmFnZSBQZXJmb3JtYW5jZSBEZXZlbG9wbWVudCBLaXQgKFNQREspIGJsb2NrIGRldmljZQorCisxLjAuNiAoMS8xMy8yMDIxKToKKy0tLS0tLS0tLS0tLS0tLS0tLQorCistIEZpeGVkIGJ1ZyB0aGF0IGNvdWxkIGNhdXNlIHNlZ2ZhdWx0IGlmIEdQVCBoZWFkZXIgY2xhaW1lZCBwYXJ0aXRpb24KKyAgZW50cmllcyBhcmUgb3ZlcnNpemVkLiBTZWU6CisgIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMjAtMDI1NgorCistIEZpeGVkIGJ1ZyB0aGF0IGNvdWxkIGNhdXNlIGEgY3Jhc2ggaWYgYSBiYWRseS1mb3JtYXR0ZWQgTUJSIGRpc2sgd2FzCisgIHJlYWQuIFNlZToKKyAgaHR0cHM6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3ZlbmFtZS5jZ2k/bmFtZT1DVkUtMjAyMS0wMzA4CisKKy0gUmVuYW1lZCB0aGUgcGFydGl0aW9uIHR5cGUgIkZyZWVkZXNrdG9wICRCT09UIiB0byAiWEJPT1RMRFIgcGFydGl0aW9uIi4KKworLSBBZGRlZCBzZXZlcmFsIG1vcmUgRnJlZWRlc2t0b3AgcGFydGl0aW9uIHRhYmxlIHR5cGUgY29kZXMgKDB4ODMxMiB0aHJvdWdoCisgIDB4ODMxQykuCisKKy0gRml4ZWQgdHlwZSBjb2RlIGRlZmluaXRpb24gaW4gZGlza2lvLXVuaXguY2MgdGhhdCBwcmV2ZW50ZWQgMzItYml0IGJ1aWxkcworICBmcm9tIGNvcnJlY3RseSBoYW5kbGluZyBkaXNrcyBvdmVyIDQgVGlCIGluIHNpemUuCisKKy0gTWlub3IgdHdlYWtzIHRvIGdldCB0aGUgc29mdHdhcmUgdG8gY29tcGlsZSBvbiBGcmVlQlNEOyB0aGF0IHNlZW1zIHRvIGhhdmUKKyAgZmFsbGVuIGludG8gZGlzcmVwYWlyLgorCisxLjAuNSAoMi8xNy8yMDIwKToKKy0tLS0tLS0tLS0tLS0tLS0tLQorCiAtIEZpeGVkIHR5cG9zIGFuZCBtaW5vciBmb3JtYXR0aW5nIGlzc3VlcyBpbiBtYW4gcGFnZXMKIAogLSBDaGFuZ2VkIG51bWJlciBvZiBjb2x1bW5zIGluIHR5cGUgY29kZSBvdXRwdXQgKCJzZ2Rpc2sgLUwiIGFuZCBlcXVpdmFsZW50cwogICBpbiBnZGlzayBhbmQgY2dkaXNrKSBmcm9tIDMgdG8gMiwgc2luY2Ugc29tZSBkZXNjcmlwdGlvbnMgYXJlIGxvbmcgZW5vdWdoCiAgIHRoYXQgdGhleSdyZSBhbWJpZ3VvdXMgd2l0aCB0aHJlZSBjb2x1bW5zLgogCistIE1ha2VmaWxlIGNoYW5nZTogQWRkICQoTERMSUJTKSBzdXBwb3J0IHRvIGVuYWJsZSBjbGVhbiBzdGF0aWMgYnVpbGRzIChmb3IKKyAgbGliaW50bCkuCisKKy0gWW91IGNhbiBub3cgcHV0IHRoZSAweEVFIHBhcnRpdGlvbiBsYXN0IGluIGEgaHlicmlkIE1CUiB1c2luZyBzZ2Rpc2suCisgIChQcmV2aW91c2x5LCB0aGlzIHdhcyBwb3NzaWJsZSB3aXRoIGdkaXNrIGJ1dCBub3Qgd2l0aCBzZ2Rpc2suKSBTZWUgdGhlCisgIHNnZGlzayBtYW4gcGFnZSBmb3IgZGV0YWlscy4KKworLSBBZGRlZCBudW1lcm91cyB0eXBlIGNvZGVzIGZvciBDb250YWluZXIgTGludXgsIFZlcmFjcnlwdCwgYW5kCisgIEZyZWVkZXNrdG9wLm9yZydzIERpc2NvdmVyYWJsZSBQYXJ0aXRpb25zIFNwZWNpZmljYXRpb24KKworLSBQYXJ0aXRpb24gdHlwZSBuYW1lIHNlYXJjaGVzIGFyZSBub3cgY2FzZS1pbnNlbnNpdGl2ZS4KKworLSBJdCdzIG5vdyBwb3NzaWJsZSB0byBxdWl0IG91dCBvZiBwYXJ0aXRpb24gdHlwZSBuYW1lIHNlYXJjaGVzIGJ5IHR5cGluZworICAicSIuCisKKy0gV2hlbiBjaGFuZ2luZyBhIHBhcnRpdGlvbiB0eXBlIGNvZGUsIHRoZSBkZWZhdWx0IGlzIG5vdyB0aGUgY3VycmVudAorICB0eXBlIGNvZGUsIG5vdCBhIHBsYXRmb3JtLXNwZWNpZmljIHR5cGUgY29kZS4KKworLSBUaGUgVUVGSSBHUFQgZmRpc2sgcHJvamVjdAorICAoaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdWVmaWdwdGZkaXNrLykgaGFzbid0IGJlZW4gdXBkYXRlZCBzaW5jZQorICAyMDE2LCBhbmQgaXMgbm93IGJyb2tlbjsgYmluYXJpZXMgZG9uJ3QgY29tcGlsZSB3aXRoIG1vZGVybiBHQ0MKKyAgdG9vbGNoYWlucywgYW5kIGV2ZW4gd2hlbiBkcm9wcGluZyBiYWNrIHRvIFVidW50dSAxNC4wNCwgd2hpY2ggd29ya2VkIGZvcgorICBHUFQgZmRpc2sgMS4wLjQsIHRoZSByZXN1bHRpbmcgYmluYXJ5IGhhbmdzIG9uIGxhdW5jaC4gVGhlcmVmb3JlLCBJJ20KKyAgZHJvcHBpbmcgc3VwcG9ydCBmb3IgdGhlIEVGSSBidWlsZCBvZiBnZGlzaywgYXQgbGVhc3QgdW5sZXNzIGFuZCB1bnRpbAorICBVRUZJIEdQVCBmZGlzayBpcyBmaXhlZC4KKworLSBBcHBsZSBubyBsb25nZXIgc3VwcG9ydHMgYnVpbGRpbmcgaTM4NiBvciAiZmF0IiBiaW5hcmllcyBpbiBYQ29kZSAob3IgaWYKKyAgdGhleSBkbywgdGhleSdyZSBtYWtpbmcgaXQgaGFyZCksIHNvIEkndmUgcmVtb3ZlZCB0aGF0IHN1cHBvcnQuIEdQVCBmZGlzaworICBtYWNPUyBiaW5hcmllcyBhcmUgbm93IHg4Ni02NCBvbmx5LiBTaW1pbGFybHksIGJ1aWxkaW5nIG5vdyBzZWVtcyB0bworICByZXF1aXJlIG1hY09TIDEwLjkgb3IgbGF0ZXIsIHNvIHRoYXQncyBub3cgdGhlIG1pbmltdW0gbWFjT1MgdmVyc2lvbi4gSSd2ZQorICBhbHNvIHJlLWJ1aWx0IG15IE1hYyBidWlsZCBlbnZpcm9ubWVudCBhbmQgdHdlYWtlZCBNYWtlZmlsZS5tYWMKKyAgYXBwcm9wcmlhdGVseS4KKwogMS4wLjQgKDcvNS8yMDE4KToKIC0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCBmMWEwOTFkLi4xNTdhYmI4IDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0xNjEsMTUgKzE2MSwxNSBAQAogSW5zdGFsbGluZwogLS0tLS0tLS0tLQogCi1UbyBjb21waWxlIEdQVCBmZGlzaywgeW91IG11c3QgaGF2ZSBhcHByb3ByaWF0ZSBkZXZlbG9wbWVudCB0b29scwotaW5zdGFsbGVkLCBtb3N0IG5vdGFibHkgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIGFuZCBpdHMgZysrCi1jb21waWxlciBmb3IgQysrLiBJJ3ZlIGFsc28gdGVzdGVkIGNvbXBpbGF0aW9uIHdpdGggQ2xhbmcsIHdoaWNoIHNlZW1zIHRvCi13b3JrOyBob3dldmVyLCBJJ3ZlIG5vdCBkb25lIGV4dGVuc2l2ZSB0ZXN0aW5nIG9mIHRoZSByZXN1bHRpbmcgYmluYXJpZXMsCi1iZXlvbmQgY2hlY2tpbmcgYSBmZXcgYmFzaWNzLiBVbmRlciBXaW5kb3dzLCBNaWNyb3NvZnQgVmlzdWFsIEMrKyAyMDA4IGNhbgotYmUgdXNlZCBpbnN0ZWFkLiBJbiBhZGRpdGlvbiwgbm90ZSB0aGVzZSByZXF1aXJlbWVudHM6CitUbyBjb21waWxlIEdQVCBmZGlzaywgeW91IG11c3QgaGF2ZSBhcHByb3ByaWF0ZSBkZXZlbG9wbWVudCB0b29scyBpbnN0YWxsZWQsCittb3N0IG5vdGFibHkgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIGFuZCBpdHMgZysrIGNvbXBpbGVyIGZvciBDKysuCitJJ3ZlIGFsc28gdGVzdGVkIGNvbXBpbGF0aW9uIHdpdGggQ2xhbmcsIHdoaWNoIHNlZW1zIHRvIHdvcms7IGhvd2V2ZXIsIEkndmUKK25vdCBkb25lIGV4dGVuc2l2ZSB0ZXN0aW5nIG9mIHRoZSByZXN1bHRpbmcgYmluYXJpZXMsIGJleW9uZCBjaGVja2luZyBhIGZldworYmFzaWNzLiBTZWUgdGhlIFJFQURNRS5XaW5kb3dzIGZpbGVzIGZvciBhZGRpdGlvbmFsIG5vdGVzIG9uIGNvbXBpbGluZyB0aGUKK3NvZnR3YXJlIGZvciBXaW5kb3dzLiBJbiBhZGRpdGlvbiwgbm90ZSB0aGVzZSByZXF1aXJlbWVudHM6CiAKLSogT24gTGludXgsIEZyZWVCU0QsIE9TIFgsIGFuZCBTb2xhcmlzLCBsaWJ1dWlkIG11c3QgYmUgaW5zdGFsbGVkLiBUaGlzIGlzCi0gIHRoZSBzdGFuZGFyZCBmb3IgTGludXggYW5kIE9TIFgsIGFsdGhvdWdoIHlvdSBtYXkgbmVlZCB0byBpbnN0YWxsIGEKKyogT24gTGludXgsIEZyZWVCU0QsIG1hY09TLCBhbmQgU29sYXJpcywgbGlidXVpZCBtdXN0IGJlIGluc3RhbGxlZC4gVGhpcyBpcworICB0aGUgc3RhbmRhcmQgZm9yIExpbnV4IGFuZCBtYWNPUywgYWx0aG91Z2ggeW91IG1heSBuZWVkIHRvIGluc3RhbGwgYQogICBwYWNrYWdlIGNhbGxlZCB1dWlkLWRldiBvciBzb21ldGhpbmcgc2ltaWxhciB0byBnZXQgdGhlIGhlYWRlcnMuIE9uCiAgIEZyZWVCU0QsIHRoZSBlMmZzcHJvZ3MtbGlidXVpZCBwb3J0IG11c3QgYmUgaW5zdGFsbGVkLgogCkBAIC0xNzcsMTEgKzE3NywxMSBAQAogICBVbmljb2RlIHBhcnRpdGlvbiBuYW1lcywgaXMgb3B0aW9uYWwgb24gYWxsIHBsYXRmb3JtcyBleGNlcHQgV2luZG93cywgb24KICAgd2hpY2ggaXQncyBub3Qgc3VwcG9ydGVkLiBVc2luZyB0aGlzIGxpYnJhcnkgd2FzIHJlcXVpcmVkIHRvIGdldCBwcm9wZXIKICAgVVRGLTE2IHBhcnRpdGlvbiBuYW1lIHN1cHBvcnQgaW4gR1BUIGZkaXNrIHZlcnNpb25zIHByaW9yIHRvIDAuOC45LCBidXQKLSAgYXMgb2YgdGhhdCB2ZXJzaW9uIGl0IHNob3VsZCBub3QgbG9uZ2VyIGJlIHJlcXVpcmVkLiBOb25ldGhlbGVzcywgeW91IGNhbgorICBhcyBvZiB0aGF0IHZlcnNpb24gaXQgc2hvdWxkIG5vIGxvbmdlciBiZSByZXF1aXJlZC4gTm9uZXRoZWxlc3MsIHlvdSBjYW4KICAgdXNlIGl0IGlmIHlvdSdyZSBoYXZpbmcgcHJvYmxlbXMgd2l0aCB0aGUgbmV3IFVURi0xNiBzdXBwb3J0LiBUaGlzCi0gIGxpYnJhcnkgaXMgbm9ybWFsbHkgaW5zdGFsbGVkIGluIExpbnV4IGFuZCBPUyBYLCBidXQgeW91IG1heSBuZWVkIHRvCisgIGxpYnJhcnkgaXMgbm9ybWFsbHkgaW5zdGFsbGVkIGluIExpbnV4IGFuZCBtYWNPUywgYnV0IHlvdSBtYXkgbmVlZCB0bwogICBpbnN0YWxsIHRoZSBkZXZlbG9wbWVudCBoZWFkZXJzIChsaWJpY3UtZGV2IG9yIHNvbWV0aGluZyBzaW1pbGFyIGluCi0gIExpbnV4OyBvciB0aGUgbGliaWN1MzYtZGV2IEZpbmsgcGFja2FnZSBpbiBPUyBYKS4gVG8gY29tcGlsZSB3aXRoIElDVQorICBMaW51eDsgb3IgdGhlIGxpYmljdTM2LWRldiBGaW5rIHBhY2thZ2UgaW4gbWFjT1MpLiBUbyBjb21waWxlIHdpdGggSUNVCiAgIHN1cHBvcnQsIHlvdSBtdXN0IG1vZGlmeSB0aGUgTWFrZWZpbGU6IExvb2sgZm9yIGNvbW1lbnRlZC1vdXQgbGluZXMgdGhhdAogICByZWZlciB0byBVU0VfVVRGMTYsIC1saWN1dWMsIC1saWN1ZGF0YSwgb3IgLWxpY3Vjb3JlLiBVbmNvbW1lbnQgdGhlbSBhbmQKICAgY29tbWVudCBvdXQgdGhlIGVxdWl2YWxlbnRzIHRoYXQgbGFjayB0aGVzZSBsaW5lcy4KQEAgLTE4OSw1NiArMTg5LDcwIEBACiAqIFRoZSBjZ2Rpc2sgcHJvZ3JhbSByZXF1aXJlcyB0aGUgbmN1cnNlcyBsaWJyYXJ5IGFuZCBpdHMgZGV2ZWxvcG1lbnQgZmlsZXMKICAgKGhlYWRlcnMpLiBNb3N0IExpbnV4IGRpc3RyaWJ1dGlvbnMgaW5zdGFsbCBuY3Vyc2VzIGJ5IGRlZmF1bHQsIGJ1dCB5b3UKICAgbWF5IG5lZWQgdG8gaW5zdGFsbCBhIHBhY2thZ2UgY2FsbGVkIGxpYm5jdXJzZXM1LWRldiwgbmN1cnNlcy1kZXZlbCwgb3IKLSAgc29tZXRoaW5nIHNpbWlsYXIgdG8gb2J0YWluIHRoZSBoZWFkZXIgZmlsZXMuIFRoZXNlIGZpbGVzIHdlcmUgaW5zdGFsbGVkCi0gIGFscmVhZHkgb24gbXkgTWFjIE9TIFggZGV2ZWxvcG1lbnQgc3lzdGVtOyBob3dldmVyLCB0aGV5IG1heSBoYXZlIGJlZW4KLSAgaW5zdGFsbGVkIGFzIGRlcGVuZGVuY2llcyBvZiBvdGhlciBwcm9ncmFtcyBJJ3ZlIGluc3RhbGxlZC4gSWYgeW91J3JlCi0gIGhhdmluZyBwcm9ibGVtcyBpbnN0YWxsaW5nIG5jdXJzZXMsIHlvdSBjYW4gY29tcGlsZSBnZGlzayBhbmQvb3Igc2dkaXNrCi0gIHdpdGhvdXQgY2dkaXNrIGJ5IHNwZWNpZnlpbmcgb25seSB0aGUgdGFyZ2V0cyB5b3Ugd2FudCB0byBjb21waWxlIHRvCi0gIG1ha2UuCisgIHNvbWV0aGluZyBzaW1pbGFyIHRvIG9idGFpbiB0aGUgaGVhZGVyIGZpbGVzLiBPbiBteSBtYWNPUyBkZXZlbG9wbWVudAorICBzeXN0ZW0sIEkgaW5zdGFsbGVkIHRoZSBudXJzZXMgSG9tZWJyZXcgKCJicmV3IikgcGFja2FnZTsgaG93ZXZlciwgb3RoZXIKKyAgVW5peC1zdHlsZSBzb2Z0d2FyZSByZXBvc2l0b3JpZXMgYXJlIGF2YWlsYWJsZSBhbmQgbWF5IHdvcmsgZm9yIHlvdSAoc2VlCisgIHRoZSBuZXh0IGl0ZW0pLiBJZiB5b3UncmUgaGF2aW5nIHByb2JsZW1zIGluc3RhbGxpbmcgbmN1cnNlcywgeW91IGNhbgorICBjb21waWxlIGdkaXNrIGFuZC9vciBzZ2Rpc2sgd2l0aG91dCBjZ2Rpc2sgYnkgc3BlY2lmeWluZyBvbmx5IHRoZSB0YXJnZXRzCisgIHlvdSB3YW50IHRvIGNvbXBpbGUgdG8gbWFrZS4KIAogKiBUaGUgc2dkaXNrIHByb2dyYW0gcmVxdWlyZXMgdGhlIHBvcHQgbGlicmFyeSBhbmQgaXRzIGRldmVsb3BtZW50IGZpbGVzCiAgIChoZWFkZXJzKS4gTW9zdCBMaW51eCBkaXN0cmlidXRpb25zIGluc3RhbGwgcG9wdCBieSBkZWZhdWx0LCBidXQgeW91IG1heQogICBuZWVkIHRvIGluc3RhbGwgYSBwYWNrYWdlIGNhbGxlZCBwb3B0LWRldiwgcG9wdC1kZXZlbCwgb3Igc29tZXRoaW5nCi0gIHNpbWlsYXIgdG8gb2J0YWluIHRoZSBoZWFkZXIgZmlsZXMuIE1hYyBPUyB1c2VycyBjYW4gZmluZCBhIHZlcnNpb24gb2YKKyAgc2ltaWxhciB0byBvYnRhaW4gdGhlIGhlYWRlciBmaWxlcy4gTWFjT1MgdXNlcnMgY2FuIGZpbmQgYSB2ZXJzaW9uIG9mCiAgIHBvcHQgZm9yIE1hYyBPUyBmcm9tIERhcndpbiBQb3J0cyAoaHR0cDovL3BvcHQuZGFyd2lucG9ydHMuY29tKSwgTWFjUG9ydHMKICAgKGh0dHBzOi8vdHJhYy5tYWNwb3J0cy5vcmcvYnJvd3Nlci90cnVuay9kcG9ydHMvZGV2ZWwvcG9wdC9Qb3J0ZmlsZSksIEZpbmsKICAgKGh0dHA6Ly93d3cuZmlua3Byb2plY3Qub3JnKSwgb3IgYnJldyAoaHR0cDovL21hY2FwcHN0b3JlLm9yZy9wb3B0Lyk7IAogICBob3dldmVyLCB5b3UnbGwgZmlyc3QgbmVlZCB0byBpbnN0YWxsIHRoZSByZWxldmFudCBlbnZpcm9ubWVudAotICAoaW5zdHJ1Y3Rpb25zIGV4aXN0IG9uIHRoZSByZWxldmFudCBwcm9qZWN0cycgcGFnZXMpLiBBbHRlcm5hdGl2ZWx5LCB5b3UKLSAgY2FuIGNvbXBpbGUgZ2Rpc2sgYW5kL29yIGNnZGlzayBhbG9uZSwgd2l0aG91dCBzZ2Rpc2s7IGdkaXNrIGRvZXNuJ3QKLSAgcmVxdWlyZSBwb3B0LgorICAoaW5zdHJ1Y3Rpb25zIGV4aXN0IG9uIHRoZSByZWxldmFudCBwcm9qZWN0cycgcGFnZXMpLiBXaGVuIEkgcmUtYnVpbHQgbXkKKyAgTWFjIGJ1aWxkIGVudmlyb25tZW50IGluIEZlYnJ1YXJ5IG9mIDIwMjAsIEkgZm91bmQgdGhhdCBicmV3IHdhcywgYnkgZmFyLAorICB0aGUgZWFzaWVzdCBvZiB0aGVzZSB0byBpbnN0YWxsLiBTb21lIG9mIHRoZSBvdGhlcnMgc2VlbSB0byBoYXZlIGJlZW4KKyAgYWJhbmRvbmVkLCBidXQgSSBkaWRuJ3QgaW52ZXN0aWdhdGUgdGhvcm91Z2hseS4gSSdtIGxlYXZpbmcgdGhlIHJlZmVyZW5jZXMKKyAgaW4gY2FzZSB0aGV5IG1pZ2h0IGJlIHVzZWZ1bCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIG9mIGluc3RhbGxpbmcgb25lIG9mCisgIFRoZXNlIHBvcnRzLCB5b3UgY2FuIGNvbXBpbGUgZ2Rpc2sgYW5kL29yIGNnZGlzayBhbG9uZSwgd2l0aG91dCBzZ2Rpc2s7CisgIGdkaXNrIGFuZCBjZ2Rpc2sgZG9uJ3QgcmVxdWlyZSBwb3B0LgogCiBXaGVuIGFsbCB0aGUgbmVjZXNzYXJ5IGRldmVsb3BtZW50IHRvb2xzIGFuZCBsaWJyYXJpZXMgYXJlIGluc3RhbGxlZCwgeW91CiBjYW4gdW5jb21wcmVzcyB0aGUgcGFja2FnZSBhbmQgdHlwZSAibWFrZSIgYXQgdGhlIGNvbW1hbmQgcHJvbXB0IGluIHRoZQotcmVzdWx0aW5nIGRpcmVjdG9yeS4gKFlvdSBtYXkgbmVlZCB0byB0eXBlICJtYWtlIC1mIE1ha2VmaWxlLm1hYyIgb24gTWFjIE9TCi1YLCAibWFrZSAtZiBNYWtlZmlsZS5mcmVlYnNkIiBvbiBGcmVlQlNELCAibWFrZSAtZiBNYWtlZmlsZS5zb2xhcmlzIiBvbgotU29sYXJpcywgb3IgIm1ha2UgLWYgTWFrZWZpbGUubWluZ3ciIHRvIGNvbXBpbGUgdXNpbmcgTWluR1cgZm9yIFdpbmRvd3MuKQotWW91IG1heSBhbHNvIG5lZWQgdG8gYWRkIGhlYWRlciAoaW5jbHVkZSkgZGlyZWN0b3JpZXMgb3IgbGlicmFyeQotZGlyZWN0b3JpZXMgYnkgc2V0dGluZyB0aGUgQ1hYRkxBR1MgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgYnkgZWRpdGluZyB0aGUKLU1ha2VmaWxlLiBUaGUgcmVzdWx0IHNob3VsZCBiZSBwcm9ncmFtIGZpbGVzIGNhbGxlZCBnZGlzaywgY2dkaXNrLCBzZ2Rpc2ssCi1hbmQgZml4cGFydHMuIFR5cGluZyAibWFrZSBnZGlzayIsICJtYWtlIGNnZGlzayIsICJtYWtlIHNnZGlzayIsIG9yICJtYWtlCi1maXhwYXJ0cyIgd2lsbCBjb21waWxlIG9ubHkgdGhlIHJlcXVlc3RlZCBwcm9ncmFtcy4gWW91IGNhbiB1c2UgdGhlc2UKLXByb2dyYW1zIGluIHBsYWNlIG9yIGNvcHkgdGhlIGZpbGVzIHRvIGEgc3VpdGFibGUgZGlyZWN0b3J5LCBzdWNoIGFzCi0vdXNyL2xvY2FsL3NiaW4uIFlvdSBjYW4gY29weSB0aGUgbWFuIHBhZ2VzIChnZGlzay44LCBjZ2Rpc2suOCwgc2dkaXNrLjgsCi1hbmQgZml4cGFydHMuOCkgdG8gL3Vzci9sb2NhbC9tYW4vbWFuOCB0byBtYWtlIHRoZW0gYXZhaWxhYmxlLgorcmVzdWx0aW5nIGRpcmVjdG9yeS4gKEJlZ2lubmluZyB3aXRoIHZlcnNpb24gMS4wLjksIEdQVCBmZGlzayBwcm92aWRlcyBhCitjb25zb2xpZGF0ZWQgTWFrZWZpbGUgZm9yIGFsbCBzdXBwb3J0ZWQgT1Nlcy4gRWFybGllciB2ZXJzaW9ucyB1c2VkCitPUy1zcGVjaWZpYyBNYWtlZmlsZXMsIHN1Y2ggYXMgTWFrZWZpbGUubWFjIGFuZCBNYWtlZmlsZS5mcmVlYnNkLCB3aGljaCBhcmUKK3N0aWxsIHByb3ZpZGVkLCBidXQgYXJlIGRlcHJlY2F0ZWQuKSBZb3UgbXVzdCB1c2UgR05VIG1ha2UgKGdtYWtlIG9uCitGcmVlQlNEKSB3aXRoIHRoaXMgTWFrZWZpbGUuIFlvdSBtYXkgYWxzbyBuZWVkIHRvIGFkZCBoZWFkZXIgKGluY2x1ZGUpCitkaXJlY3RvcmllcyBvciBsaWJyYXJ5IGRpcmVjdG9yaWVzIGJ5IHNldHRpbmcgdGhlIENYWEZMQUdTIGVudmlyb25tZW50Cit2YXJpYWJsZSBvciBieSBlZGl0aW5nIHRoZSBNYWtlZmlsZS4gVGhlIHJlc3VsdCBzaG91bGQgYmUgcHJvZ3JhbSBmaWxlcworY2FsbGVkIGdkaXNrLCBjZ2Rpc2ssIHNnZGlzaywgYW5kIGZpeHBhcnRzIChvciB2YXJpYW50cyB3aXRoICIzMi5leGUiIG9yCisiNjQuZXhlIiBhZGRlZCBmb3IgV2luZG93cyBiaW5hcmllcykuIFR5cGluZyAibWFrZSBnZGlzayIsICJtYWtlIGNnZGlzayIsCisibWFrZSBzZ2Rpc2siLCBvciAibWFrZSBmaXhwYXJ0cyIgd2lsbCBjb21waWxlIG9ubHkgdGhlIHJlcXVlc3RlZCBwcm9ncmFtcy4KK1lvdSBjYW4gdXNlIHRoZXNlIHByb2dyYW1zIGluIHBsYWNlIG9yIGNvcHkgdGhlIGZpbGVzIHRvIGEgc3VpdGFibGUKK2RpcmVjdG9yeSwgc3VjaCBhcyAvdXNyL2xvY2FsL3NiaW4uIFlvdSBjYW4gY29weSB0aGUgbWFuIHBhZ2VzIChnZGlzay44LAorY2dkaXNrLjgsIHNnZGlzay44LCBhbmQgZml4cGFydHMuOCkgdG8gL3Vzci9sb2NhbC9tYW4vbWFuOCB0byBtYWtlIHRoZW0KK2F2YWlsYWJsZS4KKworQ3Jvc3MtY29tcGlsaW5nIGlzIHBvc3NpYmxlLCBidXQgaXMgbm90IHdlbGwtdGVzdGVkLCBleGNlcHQgZm9yIGNvbXBpbGluZworV2luZG93cyBiaW5hcmllcyBvbiBMaW51eC4gKFNlZSBSRUFETUUuV2luZG93cyBmb3IgZGV0YWlscy4pIFRvCitjcm9zcy1jb21waWxlLCBzcGVjaWZ5IHRoZSBUQVJHRVQgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBsYXVuY2hpbmcgbWFrZSwKK2FzIGluICJUQVJHRVQ9d2luNjQgbWFrZSIgdG8gY29tcGlsZSBmb3IgNjQtYml0ICh4ODYtNjQsIFg2NCwgQU1ENjQpIFdpbmRvd3MKK29uIGEgbm9uLVdpbmRvd3MgcGxhdGZvcm0uIFN1cHBvcnRlZCBUQVJHRVQgdmFsdWVzIGFyZSBsaW51eCwgZnJlZWJzZCwKK3NvbGFyaXMsIG1hY29zLCB3aW4zMiwgYW5kIHdpbjY0LgogCiBDYXZlYXRzCiAtLS0tLS0tCiAKLVRISVMgU09GVFdBUkUgSVMgQkVUQSBTT0ZUV0FSRSEgSUYgSVQgV0lQRVMgT1VUIFlPVVIgSEFSRCBESVNLIE9SIEVBVFMgWU9VUgotQ0FULCBET04nVCBCTEFNRSBNRSEgVG8gZGF0ZSwgSSd2ZSB0ZXN0ZWQgdGhlIHNvZnR3YXJlIG9uIHNldmVyYWwgVVNCIGZsYXNoCi1kcml2ZXMsIHBoeXNpY2FsIGhhcmQgZGlza3MsIGFuZCB2aXJ0dWFsIGRpc2tzIGluIHRoZSBRRU1VIGFuZCBWaXJ0dWFsQm94Ci1lbnZpcm9ubWVudHMuIE1hbnkgb3RoZXJzIGhhdmUgbm93IHVzZWQgdGhlIHNvZnR3YXJlIG9uIHRoZWlyIGNvbXB1dGVycywgYXMKLXdlbGwuIEkgYmVsaWV2ZSBhbGwgZGF0YS1jb3JydXB0aW9uIGJ1Z3MgdG8gYmUgc3F1YXNoZWQsIGJ1dCBJIGtub3cgZnVsbCB3ZWxsCi10aGF0IHRoZSBvZGRzIG9mIG15IG1pc3Npbmcgc29tZXRoaW5nIGFyZSBoaWdoLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIGZvcgotbGFyZ2UgKG92ZXItMlRpQikgZHJpdmVzOyBteSBvbmx5IGRpcmVjdCB0ZXN0aW5nIHdpdGggc3VjaCBkaXNrcyBpcyB3aXRoCi12aXJ0dWFsIFFFTVUgYW5kIFZpcnR1YWxCb3ggZGlza3MuIEkndmUgcmVjZWl2ZWQgdXNlciByZXBvcnRzIG9mIHN1Y2Nlc3Mgd2l0aAotUkFJRCBhcnJheXMgb3ZlciAyVGlCIGluIHNpemUsIHRob3VnaC4KK0RJU0sgUEFSVElUSU9OSU5HIFNPRlRXQVJFIElTIERBTkdFUk9VUyEgQWx0aG91Z2ggdGhlIEdQVCBmZGlzayBwcm9qZWN0IGhhcworZXhpc3RlZCBzaW5jZSAyMDA5LCBJIGRvIG5vdCBjbGFpbSBpdCBpcyBlbnRpcmVseSBidWctZnJlZTsgaW4gZmFjdCBhIGdsYW5jZQorYXQgdGhlIHJldmlzaW9uIGhpc3Rvcnkgc2hvd3MgcmVjZW50IGJ1ZyBmaXhlcy4gSSBiZWxpZXZlIGFsbAorZGF0YS1jb3JydXB0aW9uIGJ1Z3MgdG8gYmUgc3F1YXNoZWQsIGJ1dCBJIGtub3cgZnVsbCB3ZWxsIHRoYXQgdGhlIG9kZHMgb2YKK215IG1pc3Npbmcgc29tZXRoaW5nIGFyZSBoaWdoLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIGZvciBsYXJnZQorKG92ZXItMlRpQikgZHJpdmVzIGFuZCB1c2UgaW4gZXhvdGljIGVudmlyb25tZW50cy4KIAogTXkgbWFpbiBkZXZlbG9wbWVudCBwbGF0Zm9ybSBpcyBhIHN5c3RlbSBydW5uaW5nIHRoZSA2NC1iaXQgdmVyc2lvbiBvZgogVWJ1bnR1IExpbnV4LiBJJ3ZlIGFsc28gdGVzdGVkIG9uIHNldmVyYWwgb3RoZXIgMzItIGFuZCA2NC1iaXQgTGludXgKLWRpc3RyaWJ1dGlvbnMsIEludGVsLWJhc2VkIE1hYyBPUyBYIDEwLjYgYW5kIHNldmVyYWwgbGF0ZXIgdmVyc2lvbnMsIDY0LWJpdAotRnJlZUJTRCA3LjEsIGFuZCBXaW5kb3dzIDcgYW5kIDEwLgorZGlzdHJpYnV0aW9ucywgSW50ZWwtYmFzZWQgbWFjT1MgMTAgYW5kIDExLCA2NC1iaXQgRnJlZUJTRCA3LjEsIGFuZCBXaW5kb3dzCis3IGFuZCAxMC4gT3RoZXIgZW52aXJvbm1lbnRzIHF1YWxpZnkgYXMgImV4b3RpYywiIGFuZCBldmVuIG1hY09TIGFuZCBXaW5kb3dzCithcmUgYm9yZGVybGluZSBleG90aWMgaW4gdGhpcyBjb250ZXh0LCBzaW5jZSBJIHVzZSBMaW51eCBhbG1vc3QgZXhjbHVzaXZlbHksCithbmQgbXkgaW1wcmVzc2lvbiBpcyB0aGF0IEdQVCBmZGlzayBpcyBmYXIgbW9yZSBjb21tb25seSB1c2VkIG9uIExpbnV4IHRoYW4KK2luIG90aGVyIE9TZXMuCiAKIFJlZGlzdHJpYnV0aW9uCiAtLS0tLS0tLS0tLS0tLQpAQCAtMjY2LDcgKzI4MCw3IEBACiAKIC0gSnVzdGluIE1hZ2dhcmQgKGp1c3Rpbi5tYWdnYXJkQG5ldGdlYXIuY29tKQogCi0tIER3aWdodCBTY2hhdWVyIChkc2NoYXVlckB0aS5jb20pCistIER3aWdodCBTY2hhdWVyIChkYXNAdGVlZ3JhLm5ldCkKIAogLSBGbG9yaWFuIFp1bWJpZWhsIChmbG9yekBmbG9yei5kZSkKIApkaWZmIC0tZ2l0IGEvUkVBRE1FLldpbmRvd3MgYi9SRUFETUUuV2luZG93cwppbmRleCAzZjQ5MDIzLi5kMTNiY2UzIDEwMDY0NAotLS0gYS9SRUFETUUuV2luZG93cworKysgYi9SRUFETUUuV2luZG93cwpAQCAtMjgsMTIgKzI4LDggQEAKIA0KIFRoZSBXaW5kb3dzIHZlcnNpb24gb2YgR1BUIGZkaXNrIHdhcyBhZGRlZCB3aXRoIHZlcnNpb24gMC42LjIgb2YgdGhlDQogcGFja2FnZS4gVGhlIFdpbmRvd3MgYmluYXJ5IHBhY2thZ2UgaW5jbHVkZXMgdGhlIGdkaXNrLmV4ZSBpbnRlcmFjdGl2ZQ0KLXRleHQtbW9kZSBwcm9ncmFtIGZpbGUgYnV0IG5vIGVxdWl2YWxlbnQgdG8gdGhlIHNnZGlzayBwcm9ncmFtIHRoYXQncw0KLWF2YWlsYWJsZSB3aXRoIExpbnV4LCBGcmVlQlNELCBhbmQgT1MgWCBidWlsZHMuIEluIHRoZW9yeSwgYW4gc2dkaXNrLmV4ZQ0KLWZvciBXaW5kb3dzIGNvdWxkIGJlIGJ1aWx0IGlmIHRoZSBwb3B0IGxpYnJhcnkgd2VyZSBpbnN0YWxsZWQuIEkndmUgbm90DQotYXR0ZW1wdGVkIHRvIGRvIHRoaXMgbXlzZWxmLCB0aG91Z2guIElmIHlvdSBjYXJlIHRvIHRyeSwgY2hlY2sNCi1odHRwOi8vZ251d2luMzIuc291cmNlZm9yZ2UubmV0L3BhY2thZ2VzL3BvcHQuaHRtIGZvciBpbmZvcm1hdGlvbiBvbiBwb3B0DQotZm9yIFdpbmRvd3MuDQordGV4dC1tb2RlIHByb2dyYW0gZmlsZSBhcyB3ZWxsIGFzIHRoZSBzZ2Rpc2sgcHJvZ3JhbSB0aGF0J3MgYXZhaWxhYmxlDQord2l0aCBMaW51eCwgRnJlZUJTRCwgYW5kIE9TIFggYnVpbGRzLg0KIA0KIEJlZ2lubmluZyB3aXRoIHZlcnNpb24gMC44LjEwLCBJJ20gZGlzdHJpYnV0aW5nIGJvdGggMzItYml0IGFuZCA2NC1iaXQNCiBiaW5hcmllcywgd2hpY2ggaW5jbHVkZSB0aGUgc3RyaW5ncyAiMzIiIG9yICI2NCIgaW4gdGhlaXIgbmFtZXMuIFRoZSAzMi1iaXQNCkBAIC00NywxMCArNDMsMTEgQEAKIHNvZnR3YXJlLiBXaW5kb3dzIHNlZW1zIHRvIGJlIHVuZmF6ZWQgYnkgbW9zdCBzdWNoIHByb2JsZW1zLCBidXQgSSd2ZSBub3QNCiBkb25lIGFuIGV4dGVuc2l2ZSBzdXJ2ZXkgb2YgV2luZG93cyBwYXJ0aXRpb25pbmcgdG9vbHMgb24gdGhpcyBzY29yZS4NCiANCi1UbyBpbnN0YWxsIHRoZSBwcm9ncmFtcywgY29weSB0aGUgZ2Rpc2szMi5leGUgYW5kIGZpeHBhcnRzMzIuZXhlIChvcg0KLWdkaXNrNjQuZXhlIGFuZCBmaXhwYXJ0czY0LmV4ZSkgcHJvZ3JhbSBmaWxlcyB0byBhbnkgZGlyZWN0b3J5IG9uIHlvdXINCi1wYXRoLCBzdWNoIGFzIEM6XFdpbmRvd3MuIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gY2hhbmdlIHRvIHRoZSBwcm9ncmFtJ3MNCi1kaXJlY3Rvcnkgb3IgdHlwZSBpdHMgY29tcGxldGUgcGF0aCB3aGVuZXZlciB5b3UgdXNlIGl0Lg0KK1RvIGluc3RhbGwgdGhlIHByb2dyYW1zLCBjb3B5IHRoZSBnZGlzazMyLmV4ZSwgY2dkaXNrMzIuZXhlLCBzZ2Rpc2szMi5leGUNCithbmQgZml4cGFydHMzMi5leGUgKG9yIGdkaXNrNjQuZXhlLCBjZ2Rpc2s2NC5leGUsIHNnZGlzazY0LmV4ZSBhbmQNCitmaXhwYXJ0czY0LmV4ZSkgcHJvZ3JhbSBmaWxlcyB0byBhbnkgZGlyZWN0b3J5IG9uIHlvdXIgcGF0aCwgc3VjaCBhcw0KK0M6XFdpbmRvd3MuIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gY2hhbmdlIHRvIHRoZSBwcm9ncmFtJ3MgZGlyZWN0b3J5IG9yIHR5cGUNCitpdHMgY29tcGxldGUgcGF0aCB3aGVuZXZlciB5b3UgdXNlIGl0Lg0KIA0KIFRvIHVzZSB0aGUgcHJvZ3JhbXMsIGZpcnN0IGxhdW5jaCBhIENvbW1hbmQgUHJvbXB0IGFzIHRoZSBBZG1pbmlzdHJhdG9yLiBUbw0KIGRvIHRoaXMsIGxvY2F0ZSB0aGUgQ29tbWFuZCBQcm9tcHQgcHJvZ3JhbSBpY29uLCByaWdodC1jbGljayBpdCwgYW5kIHNlbGVjdA0KQEAgLTc0LDE3ICs3MSwxOCBAQAogdGFibGUgb24gdGhlIGZpcnN0IHBoeXNpY2FsIGRpc2suIENoYW5nZSB0aGUgbnVtYmVyIGF0IHRoZSBlbmQgb2YgdGhlDQogZGV2aWNlIG5hbWUgdG8gY2hhbmdlIHRoZSBkaXNrIGVkaXRlZC4NCiANCi1JZiB5b3UgcGFzcyB0aGUgIi1sIiBvcHRpb24gdG8gZ2Rpc2suZXhlIGluIGFkZGl0aW9uIHRvIHRoZSBkaXNrDQotaWRlbnRpZmllciwgdGhlIHByb2dyYW0gZGlzcGxheXMgdGhlIGN1cnJlbnQgcGFydGl0aW9uIHRhYmxlIGluZm9ybWF0aW9uDQotYW5kIHRoZW4gZXhpdHMuIFRoaXMgdXNlIGVudGFpbHMgbm8gcmlzayB0byBNQlIgZGlza3MsIHNpbmNlIHRoZSBwcm9ncmFtDQotbmV2ZXIgd3JpdGVzIGRhdGEgYmFjayB0byB0aGUgZGlzayB3aGVuIHVzZWQgaW4gdGhpcyB3YXkuDQorSWYgeW91IHBhc3MgdGhlICItbCIgb3B0aW9uIHRvIGdkaXNrNjQuZXhlIGluIGFkZGl0aW9uIHRvIHRoZSBkaXNrDQoraWRlbnRpZmllciwgdGhlIHByb2dyYW0gZGlzcGxheXMgdGhlIGN1cnJlbnQgcGFydGl0aW9uIHRhYmxlIGluZm9ybWF0aW9uIGFuZA0KK3RoZW4gZXhpdHMuIChBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHBhc3MgIi1wIiB0byBzZ2Rpc2s2NC5leGUuKSBUaGlzIHVzZQ0KK2VudGFpbHMgbm8gcmlzayB0byBNQlIgZGlza3MsIHNpbmNlIHRoZSBwcm9ncmFtIG5ldmVyIHdyaXRlcyBkYXRhIGJhY2sgdG8NCit0aGUgZGlzayB3aGVuIHVzZWQgaW4gdGhpcyB3YXkuDQogDQotQXMgbm90ZWQgYWJvdmUsIGVkaXRpbmcgdGhlIGZpcnN0IGRpc2sgd2l0aCBHUFQgZmRpc2sgaXMgdXN1YWxseSBhIEJhZA0KLUlkZWEuIEFuIGV4Y2VwdGlvbiB3b3VsZCBiZSBpZiB5b3VyIHN5c3RlbSB1c2VzIGFuIEV4dGVuc2libGUgRmlybXdhcmUNCi1JbnRlcmZhY2UgKEVGSSkgYW5kIGFscmVhZHkgYm9vdHMgZnJvbSBhIEdQVCBkaXNrLiBJdCdzIHNhZmVyIHRvIGVkaXQNCi1ub24tYm9vdCBkaXNrcywgd2hpY2ggdXN1YWxseSBoYXZlIG51bWJlcnMgb2YgMSBhbmQgYWJvdmUsIGJ1dCBvbmx5IGlmIHlvdQ0KLXJ1biBhIHZlcnNpb24gb2YgV2luZG93cyB3aXRoIEdQVCBzdXBwb3J0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBXaW5kb3dzJw0KLXN1cHBvcnQgb2YgR1BULCBzZWUgTWljcm9zb2Z0J3MgV2ViIHBhZ2Ugb24gdGhlIHRvcGljOg0KK0FzIG5vdGVkIGFib3ZlLCBlZGl0aW5nIHRoZSBmaXJzdCBkaXNrIHdpdGggR1BUIGZkaXNrIGlzIGEgQmFkIElkZWEgb24gb2xkZXINCitCSU9TLWJhc2VkIGNvbXB1dGVycy4gTmV3ZXIgY29tcHV0ZXJzIHR5cGljYWxseSB1c2UgYW4gRXh0ZW5zaWJsZSBGaXJtd2FyZQ0KK0ludGVyZmFjZSAoRUZJKSBhbmQgYm9vdCBmcm9tIEdQVCBkaXNrcy4gSXQncyBzYWZlciB0byBlZGl0IG5vbi1ib290IGRpc2tzLA0KK3doaWNoIHVzdWFsbHkgaGF2ZSBudW1iZXJzIG9mIDEgYW5kIGFib3ZlLCBidXQgb25seSBpZiB5b3UgcnVuIGEgdmVyc2lvbiBvZg0KK1dpbmRvd3Mgd2l0aCBHUFQgc3VwcG9ydC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV2luZG93cycgc3VwcG9ydCBvZiBHUFQsDQorc2VlIE1pY3Jvc29mdCdzIFdlYiBwYWdlIG9uIHRoZSB0b3BpYzoNCiANCiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vd2hkYy9kZXZpY2Uvc3RvcmFnZS9HUFRfRkFRLm1zcHgNCiANCkBAIC0xMDMsMzQgKzEwMSw5MiBAQAogSSBoYXZlIHN1Y2Nlc3NmdWxseSBjb21waWxlZCBHUFQgZmRpc2sgdXNpbmcgdGhyZWUgZGlmZmVyZW50IFdpbmRvd3MNCiBjb21waWxlcnM6DQogDQotLSBNaW5HVyAoaHR0cDovL3d3dy5taW5ndy5vcmcpLCBhbmQgaW4gcGFydGljdWxhciBpdHMgTGludXgtaG9zdGVkDQotICBjcm9zcy1jb21waWxlciAtLSBVbmRlciBVYnVudHUgTGludXgsIHRoZSBNYWtlZmlsZS5taW5ndyBhbmQNCi0gIE1ha2VmaWxlLm1pbmd3NjQgZmlsZXMgZW5hYmxlIGNvbXBpbGF0aW9uIG9mIHRoZSBzb2Z0d2FyZSB2aWEgTWluR1cuDQotICAoVHlwZSAibWFrZSAtZiBNYWtlZmlsZS5taW5ndyIgdG8gY29tcGlsZSAzMi1iaXQgYmluYXJpZXMsIGFuZCAibWFrZSAtZg0KLSAgTWFrZWZpbGUubWluZ3c2NCIgdG8gY29tcGlsZSA2NC1iaXQgYmluYXJpZXMuKSBJZiB5b3UgdHJ5IHRvIGNvbXBpbGUNCi0gIHVzaW5nIGFub3RoZXIgY29tcGlsZXIgb3IgZXZlbiB1c2luZyBNaW5HVyB1bmRlciBXaW5kb3dzIG9yIGFub3RoZXIgTGludXgNCi0gIHZhcmlldHksIHlvdSBtYXkgbmVlZCB0byBhZGp1c3QgdGhlIE1ha2VmaWxlLm1pbmd3IG9wdGlvbnMuDQorLSBNaW5HVyAoaHR0cHM6Ly93d3cubWluZ3ctdzY0Lm9yZy8pLCB1c2luZyBlaXRoZXIgYSBMaW51eC1ob3N0ZWQNCisgIGNyb3NzLWNvbXBpbGVyIG9yIHVuZGVyIFdpbmRvd3MgdXNpbmcgdGhlIG9yaWdpbmFsIE1pbkdXIG9yIE1TWVMyDQorICAoaHR0cHM6Ly93d3cubXN5czIub3JnKS4gVGhpcyBpcyBteSBvbmx5IEdQVCBmZGlzayBkZXZlbG9wbWVudCBlbnZpcm9ubWVudA0KKyAgZm9yIFdpbmRvd3MgaW4gMjAyMi4NCiANCiAtIE1pY3Jvc29mdCBWaXN1YWwgQysrIDIwMDggRXhwcmVzcw0KICAgKGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9leHByZXNzL1dpbmRvd3MvKSAtLSBUaGlzIGNvbXBpbGVyIHJlcXVpcmVzIGENCiAgIHRoaXJkLXBhcnR5IHN0ZGludC5oIGZpbGUgKEkgdXNlZCB0aGUgb25lIGZyb20NCi0gIGh0dHA6Ly9tc2ludHR5cGVzLmdvb2dsZWNvZGUuY29tL3N2bi90cnVuay9zdGRpbnQuaCksIGJ1dCBpdCBvdGhlcndpc2UNCi0gIHdvcmtzIGZpbmUuIEEgcHJvamVjdCBpcyBlYXNpbHkgY3JlYXRlZCBieSBhZGRpbmcgYWxsIHRoZSAqLmggZmlsZXMgYW5kDQotICBhbGwgdGhlICouY2MgZmlsZXMgZXhjZXB0IGRpc2tpby11bml4LmNjLCBzZ2Rpc2suY2MsIGFuZCB3aGljaGV2ZXINCi0gIHByb2dyYW0gZmlsZSB5b3UgaW50ZW5kIHRvIE5PVCBidWlsZCAoZ2Rpc2suY2Mgb3IgZml4cGFydHMuY2MpLg0KKyAgaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMzAzMTcwMDE3MTIvaHR0cDovL21zaW50dHlwZXMuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rL3N0ZGludC5oKSwNCisgIGJ1dCBpdCBvdGhlcndpc2Ugd29ya2VkIGZpbmUgdGhlIGxhc3QgdGltZSBJIHRyaWVkIGl0LiBBIHByb2plY3QgaXMgZWFzaWx5DQorICBjcmVhdGVkIGJ5IGFkZGluZyBhbGwgdGhlICouaCBmaWxlcyBhbmQgYWxsIHRoZSAqLmNjIGZpbGVzIGV4Y2VwdA0KKyAgZGlza2lvLXVuaXguY2MsIHNnZGlzay5jYywgYW5kIHdoaWNoZXZlciBwcm9ncmFtIGZpbGUgeW91IGludGVuZCB0byBOT1QNCisgIGJ1aWxkIChnZGlzay5jYyBvciBmaXhwYXJ0cy5jYykuDQogDQogLSBNaWNyb3NvZnQgVmlzdWFsIEMrKyAyMDEwIEV4cHJlc3MgLS0gVGhpcyBjb21waWxlciB3b3JrcyBtdWNoIGxpa2UgdGhlDQogICAyMDA4IHZlcnNpb24sIGFsdGhvdWdoIEkgZGlkbid0IG5lZWQgdG8gYWRkIGEgdGhpcmQtcGFydHkgc3RkaW50LmggZmlsZS4NCiANCi1UaGUgTWluR1cgY29tcGlsZXIgcHJvZHVjZXMgbXVjaCBsYXJnZXIgZXhlY3V0YWJsZXMgdGhhbiBkbyB0aGUgTVMNCi1jb21waWxlcnMuIFRoZSByZXN1bHRpbmcgYmluYXJpZXMgc2VlbSB0byB3b3JrIGVxdWFsbHkgd2VsbCwgYnV0IG15IHRlc3RpbmcNCi1oYXMgYmVlbiBtaW5pbWFsLg0KLQ0KLUkndmUgYWxzbyBhdHRlbXB0ZWQgdG8gY29tcGlsZSB0aGUgY29kZSB3aXRoIE9wZW5XYXRjb20gMS44LCBidXQgdGhpcw0KLWF0dGVtcHQgZmFpbGVkLCBtb3N0bHkgYmVjYXVzZSB0aGUgY29tcGlsZXIgY2FuJ3QgeWV0IGhhbmRsZSBpb3N0cmVhbQ0KLW91dHB1dCBvbiBzdGFuZGFyZCBDKysgc3RyaW5ncy4gT3BlbldhdGNvbSBhbHNvIHNlZW1zIHRvIGhhdmUgaW5jb3JyZWN0bHkNCi1zZXQgdGhlIHZhbHVlIG9mIFVJTlQzMl9NQVggYXMgaWYgdWludDMyX3QgdmFsdWVzIHdlcmUgNjQtYml0IGludGVnZXJzLg0KLVRoaXMgYWxvbmUgd29uJ3QgY2F1c2UgdGhlIGNvbXBpbGUgdG8gZmFpbCwgYnV0IGl0IHdvdWxkIGNyZWF0ZSBidWdzLg0KK0FsdGhvdWdoIEkgdXNlZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBpbiB0aGUgcGFzdCwgSSBoYXZlbid0IHRyaWVkIHVzaW5nDQordGhlc2UgY29tcGlsZXJzIHJlY2VudGx5IGFuZCBzbyBJIGNhbid0IHByb21pc2UgdGhleSB3b3VsZCB3b3JrIHRvZGF5IChpbg0KKzIwMjIpLg0KIA0KIElmIHlvdSBtb2RpZnkgR1BUIGZkaXNrIHRvIGdldCBpdCB0byBjb21waWxlIHVuZGVyIGFub3RoZXIgY29tcGlsZXIsIEkNCiB3ZWxjb21lIHN1Ym1pc3Npb24gb2YgcGF0Y2hlcy4NCisNCitUaGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBmb2N1cyBvbiB1c2Ugb2YgTWluR1cgdG8gY29tcGlsZSBHUFQgZmRpc2sgZm9yDQorV2luZG93cy4NCisNCitNeSBwcmltYXJ5IGRldmVsb3BtZW50IGVudmlyb25tZW50IGlzIFVidW50dSBMaW51eCwgdXNpbmcgdGhlIE1pbkdXDQorY3Jvc3MtY29tcGlsZXIuIFRoaXMgc3lzdGVtIGNhbiBjb21waWxlIHRoZSBnZGlzayBhbmQgZml4cGFydHMgYmluYXJpZXMgd2l0aA0KK25vIG5lZWQgZm9yIGFkZGl0aW9uYWwgbGlicmFyaWVzOyBhZnRlciBpbnN0YWxsaW5nIE1pbkdXICh2aWEgdGhlDQorZysrLW1pbmd3LXc2NCBwYWNrYWdlIGluIFVidW50dSwgb3IgdGhlIGVxdWl2YWxlbnQgaW4gYW5vdGhlciBkaXN0cmlidXRpb24pLA0KK3lvdSBjYW4gdHlwZSAiVEFSR0VUPXdpbjMyIG1ha2UiIHRvIGNvbXBpbGUgMzItYml0IGJpbmFyaWVzLCBhbmQNCisiVEFSR0VUPXdpbjY0IG1ha2UiIHRvIGNvbXBpbGUgNjQtYml0IGJpbmFyaWVzLiBUaGlzIHdpbGwgYXR0ZW1wdCB0byBidWlsZA0KK2dkaXNrLCBzZ2Rpc2ssIGFuZCBmaXhwYXJ0czsgYnV0IHRoZSBzZ2Rpc2sgYnVpbGQgd2lsbCBmYWlsIHVudGlsIHlvdQ0KK2luc3RhbGwgdGhlIHBvcHQgbGlicmFyaWVzLCBhcyBkZXNjcmliZWQgc2hvcnRseS4gWW91IGNhbiBidWlsZCB0aGUgb3RoZXINCitiaW5hcmllcyBieSBzcGVjaWZ5aW5nIHRoZW0sIGFzIGluICJUQVJHRVQ9d2luNjQgbWFrZSBnZGlzayIgdG8gYnVpbGQgdGhlDQorNjQtYml0IGdkaXNrIGJpbmFyeSBhbG9uZS4NCisNCitJZiB5b3UgdXNlIFdpbmRvd3MsIHlvdXIgYmVzdCBiZXQgaXMgbGlrZWx5IHRvIGJlIHRvIGluc3RhbGwgdGhlIE1TWVMyDQorcGFja2FnZSAoaHR0cHM6Ly93d3cubXN5czIub3JnKS4gVGhpcyBwYWNrYWdlIHByb3ZpZGVzIE1pbkdXIGFuZCBhIHBhY2thZ2UNCittYW5hZ2VtZW50IHN5c3RlbSBiYXNlZCBvbiBwYWNtYW4gKHVzZWQgYnkgQXJjaCBMaW51eCkgZm9yIGluc3RhbGxpbmcNCithZGRpdGlvbmFsIGxpYnJhcmllcy4gVG8gaW5zdGFsbCB0aGUgbGlicmFyaWVzIG5lZWRlZCB0byBjb21waWxlIHNnZGlzayBhbmQNCitjZ2Rpc2ssIHR5cGUgInBhY21hbiAtUyBtaW5ndy13NjQteDg2XzY0LXBvcHQgbWluZ3ctdzY0LXg4Nl82NC1nZXR0ZXh0DQorbWluZ3ctdzY0LXg4Nl82NC1uY3Vyc2VzIiBpZiB5b3Ugd2FudCB0byBjb21waWxlIDY0LWJpdCBiaW5hcmllczsgY2hhbmdlDQorJ3g4Nl82NCcgdG8gJ2k2ODYnIGZvciAzMi1iaXQgcGFja2FnZXMuIFRoaXMgY29tbWFuZCB3aWxsIGluc3RhbGwgdGhlIHBvcHQNCitsaWJyYXJ5IG5lZWRlZCBieSBzZ2Rpc2sgYW5kIHRoZSBuY3Vyc2VzIGxpYnJhcnkgbmVlZGVkIGJ5IGNnZGlzaywgYWxvbmcNCit3aXRoIGdldHRleHQsIHdoaWNoIGlzIG5lZWRlZCBieSBwb3B0LiBXaXRoIHRoZXNlIGxpYnJhcmllcyBpbnN0YWxsZWQsIHlvdQ0KK3Nob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgYWxsIGZvdXIgTGludXggcHJvZ3JhbXMgLS0gZ2Rpc2ssIGNnZGlzaywgc2dkaXNrLA0KK2FuZCBmaXhwYXJ0cy4gVHlwaW5nICJtYWtlIiBhbG9uZSBpbiB0aGUgTVNZUzIgc2hlbGwgc2hvdWxkIGJ1aWxkIGFsbCBmb3VyDQorcHJvZ3JhbXMgZm9yIHRoZSBob3N0IGFyY2hpdGVjdHVyZSAoeDg2LTY0IG9yIGk2ODYpOyB0byBjb21waWxlIGZvciB0aGUNCitvdGhlciBhcmNoaXRlY3R1cmUsIHlvdSBtdXN0IHNwZWNpZnkgaXQgd2l0aCBhICJUQVJHRVQ9IiBzcGVjaWZpY2F0aW9uLCBhcw0KK3VuZGVyIExpbnV4LiAoVGhlIE1ha2VmaWxlIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IEFSTTY0IHRhcmdldHMgZm9yDQorV2luZG93cy4pDQorDQorSWYgeW91IHdhbnQgdG8gY29tcGlsZSBzZ2Rpc2sgZm9yIFdpbmRvd3MgdW5kZXIgTGludXgsIHlvdSBjYW4gZG8gc287DQoraG93ZXZlciwgeW91IG11c3QgY29weSB0aGUgcmVsZXZhbnQgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGZyb20gYSBXaW5kb3dzDQoraW5zdGFsbGF0aW9uIHRvIExpbnV4LiBTcGVjaWZpY2FsbHksIHlvdSBtdXN0IGNvcHk6DQorDQorICAgIFdpbmRvd3MgRmlsZSAgICAgICAgICAgICAgICAgICBMaW51eCBEaXJlY3RvcnkNCisgICAgLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLQ0KKyAgICAvbWluZ3c2NC9pbmNsdWRlL3BvcHQuaCAgICAgICAgL3Vzci94ODZfNjQtdzY0LW1pbmd3MzIvaW5jbHVkZS8NCisgICAgL21pbmd3NjQvbGliL2xpYnBvcHQuYSAgICAgICAgIC91c3IveDg2XzY0LXc2NC1taW5ndzMyL2xpYi8NCisgICAgL21pbmd3NjQvbGliL2xpYmludGwuYSAgICAgICAgIC91c3IveDg2XzY0LXc2NC1taW5ndzMyL2xpYi8NCisgICAgL21pbmd3NjQvbGliL2xpYmljb252LmEgICAgICAgIC91c3IveDg2XzY0LXc2NC1taW5ndzMyL2xpYi8NCisNCitGb3IgMzItYml0IGJpbmFyaWVzLCBjaGFuZ2UgL21pbmd3NjQgdG8gL21pbmd3MzIgb24gdGhlIFdpbmRvd3Mgc291cmNlIGFuZA0KK3g4Nl82NC13NjQtbWluZ3czMiB0byBpNjg2LXc2NC1taW5ndzMyIG9uIHRoZSBMaW51eCBkZXN0aW5hdGlvbi4NCisNCitJbiB0aGVvcnksIHlvdSBzaG91bGQgYmUgYWJsZSB0byBkbyBzb21ldGhpbmcgc2ltaWxhciB0byBjb21waWxlIGNnZGlzay4gVGhlDQorcmVsZXZhbnQgZmlsZXMgYXJlOg0KKw0KKyAgICBXaW5kb3dzIEZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGludXggRGlyZWN0b3J5DQorICAgIC0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0NCisgICAgL21pbmd3NjQvaW5jbHVkZS9uY3Vyc2Vzdy9jdXJzZXMuaCAgICAgIC91c3IveDg2XzY0LXc2NC1taW5ndzMyL2luY2x1ZGUvbmN1cnNlc3cvDQorICAgIC9taW5ndzY0L2luY2x1ZGUvbmN1cnNlc3cvbmN1cnNlcy5oICAgICAvdXNyL3g4Nl82NC13NjQtbWluZ3czMi9pbmNsdWRlL25jdXJzZXN3Lw0KKyAgICAvbWluZ3c2NC9pbmNsdWRlL25jdXJzZXN3L25jdXJzZXNfZGxsLmggL3Vzci94ODZfNjQtdzY0LW1pbmd3MzIvaW5jbHVkZS9uY3Vyc2Vzdy8NCisgICAgL21pbmd3NjQvaW5jbHVkZS9uY3Vyc2Vzdy91bmN0cmwuaCAgICAgIC91c3IveDg2XzY0LXc2NC1taW5ndzMyL2luY2x1ZGUvbmN1cnNlc3cvDQorICAgIC9taW5ndzY0L2xpYi9saWJuY3Vyc2VzLmEgICAgICAgICAgICAgICAvdXNyL3g4Nl82NC13NjQtbWluZ3czMi9saWIvDQorDQorSW4gcHJhY3RpY2UsIHRoaXMgaGFzIG5vdCB3b3JrZWQgZm9yIG1lOyB0aGUgY29tcGlsYXRpb24gZmFpbHMgd2l0aCBhDQorY29tcGxhaW50IGFib3V0IGFuIHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gJ25hbm9zbGVlcCcuIE15IGd1ZXNzIGlzIHRoYXQgdGhlDQorbmN1cnNlcyB2ZXJzaW9uIGluc3RhbGxlZCBpbiBXaW5kb3dzIGlzIHRvbyBuZXcgdG8gd29yayB3aXRoIHRoZSBNaW5HVw0KK2xpYnJhcmllcyBpbiBVYnVudHUgKDIwLjA0IG9yIDIyLjA0KS4gSXQncyBjb25jZWl2YWJsZSBpdCB3b3VsZCB3b3JrIHdpdGgNCithbm90aGVyIGRpc3RyaWJ1dGlvbiwgdGhvdWdoLg0KKw0KK1RoZSBNYWtlZmlsZSBpcyBjb25maWd1cmVkIHRvIGNyZWF0ZSBzdGF0aWNhbGx5LWxpbmtlZCBiaW5hcmllcyBzbyBhcyB0bw0KK3NpbXBsaWZ5IGluc3RhbGxhdGlvbiBvZiB0aGUgYmluYXJpZXMuIElmIHlvdSB3YW50IHNtYWxsZXIgYmluYXJpZXMsIHlvdSBjYW4NCityZW1vdmUgdGhlIHZhcmlvdXMgc3RhdGljIG9wdGlvbnMgZnJvbSB0aGUgTWFrZWZpbGUuIFlvdSBjYW4gYWxzbyBzdHJpcCB0aGUNCitiaW5hcmllcyAoIm1ha2Ugc3RyaXAiKSB0byByZW1vdmUgdW51c2VkIGNvZGUuDQpkaWZmIC0tZ2l0IGEvYXR0cmlidXRlcy5jYyBiL2F0dHJpYnV0ZXMuY2MKaW5kZXggYmJkNWFhZC4uZjNjZDU4NSAxMDA2NDQKLS0tIGEvYXR0cmlidXRlcy5jYworKysgYi9hdHRyaWJ1dGVzLmNjCkBAIC03LDkgKzcsNyBAQAogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdmVyc2lvbiAyLCBhcyBkZXRhaWxlZCBpbiB0aGUgQ09QWUlORyBmaWxlLiAqLwogCiAjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MKLSNpZm5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPUwogI2RlZmluZSBfX1NURENfQ09OU1RBTlRfTUFDUk9TCi0jZW5kaWYKIAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CmRpZmYgLS1naXQgYS9hdHRyaWJ1dGVzLmggYi9hdHRyaWJ1dGVzLmgKaW5kZXggZjZjNjZmZi4uNWViNTdlMyAxMDA2NDQKLS0tIGEvYXR0cmlidXRlcy5oCisrKyBiL2F0dHJpYnV0ZXMuaApAQCAtMSwyMCArMSwxOCBAQAogLyogVGhpcyBwcm9ncmFtIGlzIGNvcHlyaWdodCAoYykgMjAwOS0yMDExIGJ5IFJvZGVyaWNrIFcuIFNtaXRoLiBJdCBpcyBkaXN0cmlidXRlZAogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdmVyc2lvbiAyLCBhcyBkZXRhaWxlZCBpbiB0aGUgQ09QWUlORyBmaWxlLiAqLwogCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCiAjaWZuZGVmIF9fR1BUX0FUVFJJQlVURVMKICNkZWZpbmUgX19HUFRfQVRUUklCVVRFUwogCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nPgorCiAjZGVmaW5lIE5VTV9BVFIgNjQgLyogIyBvZiBhdHRyaWJ1dGVzIC0tIDY0LCBzaW5jZSBpdCdzIGEgNjQtYml0IGZpZWxkICovCiAjZGVmaW5lIEFUUl9OQU1FX1NJWkUgMjUgLyogbWF4aW11bSBzaXplIG9mIGF0dHJpYnV0ZSBuYW1lcyAqLwogCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCiBjbGFzcyBBdHRyaWJ1dGVzIHsKIHByb3RlY3RlZDoKLSAgIHN0YXRpYyBzdHJpbmcgYXROYW1lc1tOVU1fQVRSXTsKKyAgIHN0YXRpYyBzdGQ6OnN0cmluZyBhdE5hbWVzW05VTV9BVFJdOwogICAgc3RhdGljIGludCBudW1BdHRyczsKICAgIHZvaWQgU2V0dXAodm9pZCk7CiAgICB1aW50NjRfdCBhdHRyaWJ1dGVzOwpAQCAtMzAsMTIgKzI4LDEyIEBACiAgICB2b2lkIFNob3dBdHRyaWJ1dGVzKGNvbnN0IHVpbnQzMl90IHBhcnROdW0pOwogCiAgICB2b2lkIENoYW5nZUF0dHJpYnV0ZXModm9pZCk7Ci0gICBib29sIE9wZXJhdGVPbkF0dHJpYnV0ZXMoY29uc3QgdWludDMyX3QgcGFydE51bSwgY29uc3Qgc3RyaW5nJiBhdHRyaWJ1dGVPcGVyYXRvciwgY29uc3Qgc3RyaW5nJiBhdHRyaWJ1dGVCaXRzKTsKKyAgIGJvb2wgT3BlcmF0ZU9uQXR0cmlidXRlcyhjb25zdCB1aW50MzJfdCBwYXJ0TnVtLCBjb25zdCBzdGQ6OnN0cmluZyYgYXR0cmlidXRlT3BlcmF0b3IsIGNvbnN0IHN0ZDo6c3RyaW5nJiBhdHRyaWJ1dGVCaXRzKTsKIAotICAgc3RhdGljIGNvbnN0IHN0cmluZyYgR2V0QXR0cmlidXRlTmFtZShjb25zdCB1aW50MzJfdCBiaXROdW0pIHtyZXR1cm4gYXROYW1lcyBbYml0TnVtXTt9CisgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcmIEdldEF0dHJpYnV0ZU5hbWUoY29uc3QgdWludDMyX3QgYml0TnVtKSB7cmV0dXJuIGF0TmFtZXMgW2JpdE51bV07fQogICAgc3RhdGljIHZvaWQgTGlzdEF0dHJpYnV0ZXModm9pZCk7CiB9OyAvLyBjbGFzcyBBdHRyaWJ1dGVzCiAKLW9zdHJlYW0gJiBvcGVyYXRvcjw8KG9zdHJlYW0gJiBvcywgY29uc3QgQXR0cmlidXRlcyAmIGRhdGEpOworc3RkOjpvc3RyZWFtICYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJiBvcywgY29uc3QgQXR0cmlidXRlcyAmIGRhdGEpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2Jhc2ljbWJyLmNjIGIvYmFzaWNtYnIuY2MKaW5kZXggZTlhYzVjNS4uZTA5YjBlOSAxMDA2NDQKLS0tIGEvYmFzaWNtYnIuY2MKKysrIGIvYmFzaWNtYnIuY2MKQEAgLTcsOSArNyw3IEBACiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2ZXJzaW9uIDIsIGFzIGRldGFpbGVkIGluIHRoZSBDT1BZSU5HIGZpbGUuICovCiAKICNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUwotI2lmbmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TCiAjZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MKLSNlbmRpZgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTE0Miw3ICsxNDAsNyBAQAogLy8gUmVhZCBkYXRhIGZyb20gTUJSLiBSZXR1cm5zIDEgaWYgcmVhZCB3YXMgc3VjY2Vzc2Z1bCAoZXZlbiBpZiB0aGUKIC8vIGRhdGEgaXNuJ3QgYSB2YWxpZCBNQlIpLCAwIGlmIHRoZSByZWFkIGZhaWxlZC4KIGludCBCYXNpY01CUkRhdGE6OlJlYWRNQlJEYXRhKGNvbnN0IHN0cmluZyAmIGRldmljZUZpbGVuYW1lKSB7Ci0gICBpbnQgYWxsT0sgPSAxOworICAgaW50IGFsbE9LOwogCiAgICBpZiAobXlEaXNrID09IE5VTEwpIHsKICAgICAgIG15RGlzayA9IG5ldyBEaXNrSU87CkBAIC0yOTIsOCArMjkwLDggQEAKICAgICAgICAgIGlmIChFYnJMb2NhdGlvbnNbaV0gPT0gb2Zmc2V0KSB7IC8vIGFscmVhZHkgcmVhZCB0aGlzIG9uZTsgaW5maW5pdGUgbG9naWNhbCBwYXJ0aXRpb24gbG9vcCEKICAgICAgICAgICAgIGNlcnIgPDwgIkxvZ2ljYWwgcGFydGl0aW9uIGluZmluaXRlIGxvb3AgZGV0ZWN0ZWQhIFRoaXMgaXMgYmVpbmcgY29ycmVjdGVkLlxuIjsKICAgICAgICAgICAgIGFsbE9LID0gLTE7Ci0gICAgICAgICAgICBpZihwYXJ0TnVtID4gMCkgLy9kb24ndCBnbyBuZWdhdGl2ZQotICAgICAgICAgICAgICAgIHBhcnROdW0gLT0gMTsKKyAgICAgICAgICAgIGlmIChwYXJ0TnVtID4gMCkgLy9kb24ndCBnbyBuZWdhdGl2ZQorICAgICAgICAgICAgICAgcGFydE51bSAtPSAxOwogICAgICAgICAgfSAvLyBpZgogICAgICAgfSAvLyBmb3IKICAgICAgIEVickxvY2F0aW9uc1twYXJ0TnVtXSA9IG9mZnNldDsKQEAgLTM1Nyw3ICszNTUsNyBAQAogLy8gTUJSIGl0c2VsZiBhbmQgYW55IGRlZmluZWQgbG9naWNhbCBwYXJ0aXRpb25zLCBwcm92aWRlZCB0aGVyZSdzIGFuCiAvLyBNQlIgZXh0ZW5kZWQgcGFydGl0aW9uLgogaW50IEJhc2ljTUJSRGF0YTo6V3JpdGVNQlJEYXRhKHZvaWQpIHsKLSAgIGludCBhbGxPSyA9IDE7CisgICBpbnQgYWxsT0s7CiAKICAgIGlmIChteURpc2sgIT0gTlVMTCkgewogICAgICAgaWYgKG15RGlzay0+T3BlbkZvcldyaXRlKCkgIT0gMCkgewpAQCAtMzc0LDcgKzM3Miw3IEBACiAvLyBTYXZlIHRoZSBNQlIgZGF0YSB0byBhIGZpbGUuIFRoaXMgd3JpdGVzIGJvdGggdGhlCiAvLyBNQlIgaXRzZWxmIGFuZCBhbnkgZGVmaW5lZCBsb2dpY2FsIHBhcnRpdGlvbnMuCiBpbnQgQmFzaWNNQlJEYXRhOjpXcml0ZU1CUkRhdGEoRGlza0lPICp0aGVEaXNrKSB7Ci0gICBpbnQgaSwgaiwgcGFydE51bSwgbmV4dCwgYWxsT0sgPSAxLCBtb3JlTG9naWNhbHMgPSAwOworICAgaW50IGksIGosIHBhcnROdW0sIG5leHQsIGFsbE9LLCBtb3JlTG9naWNhbHMgPSAwOwogICAgdWludDY0X3QgZXh0Rmlyc3RMQkEgPSAwOwogICAgdWludDY0X3Qgd3JpdGVFYnJUbzsgLy8gNjQtYml0IGJlY2F1c2Ugd2Ugc3VwcG9ydCBleHRlbmRlZCBpbiAyLTRUaUIgcmFuZ2UKICAgIFRlbXBNQlIgdGVtcE1CUjsKQEAgLTk1MCw3ICs5NDgsNyBAQAogLy8gcHJpbWFyeSBzdGF0dXMuIEFsc28gZG9lcyBOT1QgY29uc2lkZXIgcGFydGl0aW9uIG9yZGVyOyB0aGVyZQogLy8gY2FuIGJlIGdhcHMgYW5kIGl0IHdpbGwgc3RpbGwgYmUgY29uc2lkZXJlZCBsZWdhbC4KIGludCBCYXNpY01CUkRhdGE6OklzTGVnYWwodm9pZCkgewotICAgaW50IGFsbE9LID0gMTsKKyAgIGludCBhbGxPSzsKIAogICAgYWxsT0sgPSAoRmluZE92ZXJsYXBzKCkgPT0gMCk7CiAgICBhbGxPSyA9IChhbGxPSyAmJiAoTnVtUHJpbWFyaWVzKCkgPD0gNCkpOwpAQCAtMTA1Nyw3ICsxMDU1LDcgQEAKIC8vIFNldCB0aGUgcGFydGl0aW9uJ3MgdHlwZSBjb2RlLgogLy8gUmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgbm90IChpbnZhbGlkIHBhcnRpdGlvbiBudW1iZXIpCiBpbnQgQmFzaWNNQlJEYXRhOjpTZXRQYXJ0VHlwZShpbnQgbnVtLCBpbnQgdHlwZSkgewotICAgaW50IGFsbE9LID0gMTsKKyAgIGludCBhbGxPSzsKIAogICAgaWYgKChudW0gPj0gMCkgJiYgKG51bSA8IE1BWF9NQlJfUEFSVFMpKSB7CiAgICAgICBpZiAocGFydGl0aW9uc1tudW1dLkdldExlbmd0aExCQSgpICE9IFVJTlQzMl9DKDApKSB7CkBAIC0xMzEwLDcgKzEzMDgsNyBAQAogLy8gZW50cmllcyAocHJpbWFyeSBzcGFjZSkuCiAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFydGl0aW9ucyBtb3ZlZC4KIGludCBCYXNpY01CUkRhdGE6OlJlbW92ZUxvZ2ljYWxzRnJvbUZpcnN0Rm91cih2b2lkKSB7Ci0gICBpbnQgaSwgaiA9IDQsIG51bU1vdmVkID0gMCwgc3dhcHBlZCA9IDA7CisgICBpbnQgaSwgaiwgbnVtTW92ZWQgPSAwLCBzd2FwcGVkID0gMDsKICAgIE1CUlBhcnQgdGVtcDsKIAogICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewpkaWZmIC0tZ2l0IGEvYmFzaWNtYnIuaCBiL2Jhc2ljbWJyLmgKaW5kZXggNTA0ZTAzOS4uNjk2ZjgyNiAxMDA2NDQKLS0tIGEvYmFzaWNtYnIuaAorKysgYi9iYXNpY21ici5oCkBAIC0zLDIxICszLDE5IEBACiAvKiBUaGlzIHByb2dyYW0gaXMgY29weXJpZ2h0IChjKSAyMDA5LTIwMTMgYnkgUm9kZXJpY2sgVy4gU21pdGguIEl0IGlzIGRpc3RyaWJ1dGVkCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2ZXJzaW9uIDIsIGFzIGRldGFpbGVkIGluIHRoZSBDT1BZSU5HIGZpbGUuICovCiAKKyNpZm5kZWYgX19CQVNJQ01CUlNUUlVDVFMKKyNkZWZpbmUgX19CQVNJQ01CUlNUUlVDVFMKKwogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgImRpc2tpby5oIgogI2luY2x1ZGUgIm1icnBhcnQuaCIKIAotI2lmbmRlZiBfX0JBU0lDTUJSU1RSVUNUUwotI2RlZmluZSBfX0JBU0lDTUJSU1RSVUNUUwotCiAjZGVmaW5lIE1CUl9TSUdOQVRVUkUgVUlOVDE2X0MoMHhBQTU1KQogCiAvLyBNYXhpbXVtIG51bWJlciBvZiBNQlIgcGFydGl0aW9ucwogI2RlZmluZSBNQVhfTUJSX1BBUlRTIDEyOAogCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIE1CUkRhdGEgY2xhc3MgYW5kIHJlbGF0ZWQgc3RydWN0dXJlcyAqCkBAIC01NywyMyArNTUsMjMgQEAKICAgIHVpbnQzMl90IG51bVNlY3NwVHJhY2s7IC8vIG51bWJlciBvZiBzZWN0b3JzIHBlciB0cmFjaywgaW4gQ0hTIHNjaGVtZQogICAgRGlza0lPKiBteURpc2s7CiAgICBpbnQgY2FuRGVsZXRlTXlEaXNrOwotICAgc3RyaW5nIGRldmljZTsKKyAgIHN0ZDo6c3RyaW5nIGRldmljZTsKICAgIE1CUlZhbGlkaXR5IHN0YXRlOwogICAgTUJSUGFydCogR2V0UGFydGl0aW9uKGludCBpKTsgLy8gUmV0dXJuIHByaW1hcnkgb3IgbG9naWNhbCBwYXJ0aXRpb24KIHB1YmxpYzoKICAgIEJhc2ljTUJSRGF0YSh2b2lkKTsKLSAgIEJhc2ljTUJSRGF0YShzdHJpbmcgZGV2aWNlRmlsZW5hbWUpOworICAgQmFzaWNNQlJEYXRhKHN0ZDo6c3RyaW5nIGRldmljZUZpbGVuYW1lKTsKICAgIEJhc2ljTUJSRGF0YShjb25zdCBCYXNpY01CUkRhdGEgJik7CiAgICB+QmFzaWNNQlJEYXRhKHZvaWQpOwogICAgQmFzaWNNQlJEYXRhICYgb3BlcmF0b3I9KGNvbnN0IEJhc2ljTUJSRGF0YSAmIG9yaWcpOwogCiAgICAvLyBGaWxlIEkvTyBmdW5jdGlvbnMuLi4KLSAgIGludCBSZWFkTUJSRGF0YShjb25zdCBzdHJpbmcgJiBkZXZpY2VGaWxlbmFtZSk7CisgICBpbnQgUmVhZE1CUkRhdGEoY29uc3Qgc3RkOjpzdHJpbmcgJiBkZXZpY2VGaWxlbmFtZSk7CiAgICBpbnQgUmVhZE1CUkRhdGEoRGlza0lPICogdGhlRGlzaywgaW50IGNoZWNrQmxvY2tTaXplID0gMSk7CiAgICBpbnQgUmVhZExvZ2ljYWxQYXJ0cyh1aW50NjRfdCBleHRlbmRlZFN0YXJ0LCBpbnQgcGFydE51bSk7CiAgICBpbnQgV3JpdGVNQlJEYXRhKHZvaWQpOwogICAgaW50IFdyaXRlTUJSRGF0YShEaXNrSU8gKnRoZURpc2spOwotICAgaW50IFdyaXRlTUJSRGF0YShjb25zdCBzdHJpbmcgJiBkZXZpY2VGaWxlbmFtZSk7CisgICBpbnQgV3JpdGVNQlJEYXRhKGNvbnN0IHN0ZDo6c3RyaW5nICYgZGV2aWNlRmlsZW5hbWUpOwogICAgaW50IFdyaXRlTUJSRGF0YShzdHJ1Y3QgVGVtcE1CUiAmIG1iciwgRGlza0lPICp0aGVEaXNrLCB1aW50NjRfdCBzZWN0b3IpOwogICAgdm9pZCBEaXNrU3luYyh2b2lkKSB7bXlEaXNrLT5EaXNrU3luYygpO30KICAgIHZvaWQgU2V0RGlzayhEaXNrSU8gKnRoZURpc2spOwpAQCAtMTQ3LDcgKzE0NSw3IEBACiAgICB1aW50NjRfdCBHZXRMZW5ndGgoaW50IGkpOwogCiAgICAvLyBVc2VyIGludGVyYWN0aW9uIGZ1bmN0aW9ucy4uLi4KLSAgIGludCBEb01lbnUoY29uc3Qgc3RyaW5nJiBwcm9tcHQgPSAiXG5NQlIgY29tbWFuZCAoPyBmb3IgaGVscCk6ICIpOworICAgaW50IERvTWVudShjb25zdCBzdGQ6OnN0cmluZyYgcHJvbXB0ID0gIlxuTUJSIGNvbW1hbmQgKD8gZm9yIGhlbHApOiAiKTsKICAgIHZvaWQgU2hvd0NvbW1hbmRzKHZvaWQpOwogfTsgLy8gY2xhc3MgQmFzaWNNQlJEYXRhCiAKZGlmZiAtLWdpdCBhL2JzZC5jYyBiL2JzZC5jYwppbmRleCA1OTU1N2MyLi4xZWY3YzgxIDEwMDY0NAotLS0gYS9ic2QuY2MKKysrIGIvYnNkLmNjCkBAIC03LDkgKzcsNyBAQAogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdmVyc2lvbiAyLCBhcyBkZXRhaWxlZCBpbiB0aGUgQ09QWUlORyBmaWxlLiAqLwogCiAjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MKLSNpZm5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPUwogI2RlZmluZSBfX1NURENfQ09OU1RBTlRfTUFDUk9TCi0jZW5kaWYKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAvLyNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTQ2LDcgKzQ0LDcgQEAKIC8vIGp1c3Qgb3BlbnMgdGhlIGRldmljZSBmaWxlIGFuZCB0aGVuIGNhbGxzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb24gdG8gZG8KIC8vIHRoZSBidWxrIG9mIHRoZSB3b3JrLiBSZXR1cm5zIDEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlLgogaW50IEJTRERhdGE6OlJlYWRCU0REYXRhKGNvbnN0IHN0cmluZyAmIGRldmljZSwgdWludDY0X3Qgc3RhcnRTZWN0b3IsIHVpbnQ2NF90IGVuZFNlY3RvcikgewotICAgaW50IGFsbE9LID0gMTsKKyAgIGludCBhbGxPSzsKICAgIERpc2tJTyBteURpc2s7CiAKICAgIGlmIChkZXZpY2UgIT0gIiIpIHsKQEAgLTY2LDcgKzY0LDcgQEAKIC8vIExvYWQgdGhlIEJTRCBkaXNrbGFiZWwgZGF0YSBmcm9tIGFuIGFscmVhZHktb3BlbmVkIGRpc2sKIC8vIGZpbGUsIHN0YXJ0aW5nIHdpdGggdGhlIHNwZWNpZmllZCBzZWN0b3IgbnVtYmVyLgogaW50IEJTRERhdGE6OlJlYWRCU0REYXRhKERpc2tJTyAqdGhlRGlzaywgdWludDY0X3Qgc3RhcnRTZWN0b3IsIHVpbnQ2NF90IGVuZFNlY3RvcikgewotICAgaW50IGFsbE9LID0gMTsKKyAgIGludCBhbGxPSzsKICAgIGludCBpLCBmb3VuZFNpZyA9IDAsIGJpZ0VuZCA9IDA7CiAgICBpbnQgcmVsYXRpdmUgPSAwOyAvLyBhc3N1bWUgYWJzb2x1dGUgcGFydGl0aW9uIHNlY3RvciBudW1iZXJpbmcKICAgIHVpbnQ4X3QgYnVmZmVyWzQwOTZdOyAvLyBJL08gYnVmZmVyCmRpZmYgLS1naXQgYS9ic2QuaCBiL2JzZC5oCmluZGV4IGNiZDM1ODguLmUwNDJiN2IgMTAwNjQ0Ci0tLSBhL2JzZC5oCisrKyBiL2JzZC5oCkBAIC0zLDE0ICszLDE0IEBACiAvKiBUaGlzIHByb2dyYW0gaXMgY29weXJpZ2h0IChjKSAyMDA5IGJ5IFJvZGVyaWNrIFcuIFNtaXRoLiBJdCBpcyBkaXN0cmlidXRlZAogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdmVyc2lvbiAyLCBhcyBkZXRhaWxlZCBpbiB0aGUgQ09QWUlORyBmaWxlLiAqLwogCisjaWZuZGVmIF9fQlNEX1NUUlVDVFMKKyNkZWZpbmUgX19CU0RfU1RSVUNUUworCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSAiZ3B0cGFydC5oIgogI2luY2x1ZGUgImRpc2tpby5oIgogCi0jaWZuZGVmIF9fQlNEX1NUUlVDVFMKLSNkZWZpbmUgX19CU0RfU1RSVUNUUwotCiAjZGVmaW5lIEJTRF9TSUdOQVRVUkUgVUlOVDMyX0MoMHg4MjU2NDU1NykgIC8qIEJTRCBkaXNrbGFiZWwgc2lnbmF0dXJlICgibWFnaWMiKSAqLwogCiAvLyBCU0QgZGlza2xhYmVscyBjYW4gc3RhcnQgYXQgb2Zmc2V0cyBvZiA2NCBvciB0aGUgc2VjdG9yIHNpemUgLS0gYXQgbGVhc3QsCkBAIC0zMCw5ICszMCw2IEBACiAvLyBtZW1vcnkgZXJyb3JzIHdpbGwgb2NjdXIuCiAjZGVmaW5lIE1BWF9CU0RfUEFSVFMgNjQKIAotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIEJTRERhdGEgY2xhc3MgYW5kIHJlbGF0ZWQgc3RydWN0dXJlcyAqCkBAIC03NSw3ICs3Miw3IEBACiAgICBwdWJsaWM6CiAgICAgICBCU0REYXRhKHZvaWQpOwogICAgICAgfkJTRERhdGEodm9pZCk7Ci0gICAgICBpbnQgUmVhZEJTRERhdGEoY29uc3Qgc3RyaW5nICYgZGV2aWNlRmlsZW5hbWUsIHVpbnQ2NF90IHN0YXJ0U2VjdG9yLCB1aW50NjRfdCBlbmRTZWN0b3IpOworICAgICAgaW50IFJlYWRCU0REYXRhKGNvbnN0IHN0ZDo6c3RyaW5nICYgZGV2aWNlRmlsZW5hbWUsIHVpbnQ2NF90IHN0YXJ0U2VjdG9yLCB1aW50NjRfdCBlbmRTZWN0b3IpOwogICAgICAgaW50IFJlYWRCU0REYXRhKERpc2tJTyAqbXlEaXNrLCB1aW50NjRfdCBzdGFydFNlY3RvciwgdWludDY0X3QgZW5kU2VjdG9yKTsKICAgICAgIHZvaWQgUmV2ZXJzZU1ldGFCeXRlcyh2b2lkKTsKICAgICAgIHZvaWQgRGlzcGxheUJTRERhdGEodm9pZCk7CmRpZmYgLS1naXQgYS9jZ2Rpc2suOCBiL2NnZGlzay44CmluZGV4IDNkYmRkZmYuLmJjODNkNGIgMTAwNjQ0Ci0tLSBhL2NnZGlzay44CisrKyBiL2NnZGlzay44CkBAIC0xLDYgKzEsNiBAQAotLlwiIENvcHlyaWdodCAyMDExLTIwMTggUm9kZXJpY2sgVy4gU21pdGggKHJvZHNtaXRoQHJvZHNib29rcy5jb20pCisuXCIgQ29weXJpZ2h0IDIwMTEtMjAyMiBSb2RlcmljayBXLiBTbWl0aCAocm9kc21pdGhAcm9kc2Jvb2tzLmNvbSkKIC5cIiBNYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0uVEggIkNHRElTSyIgIjgiICIxLjAuNCIgIlJvZGVyaWNrIFcuIFNtaXRoIiAiR1BUIGZkaXNrIE1hbnVhbCIKKy5USCAiQ0dESVNLIiAiOCIgIjEuMC45IiAiUm9kZXJpY2sgVy4gU21pdGgiICJHUFQgZmRpc2sgTWFudWFsIgogLlNIICJOQU1FIgogY2dkaXNrIFwtIEN1cnNlcy1iYXNlZCBHVUlEIHBhcnRpdGlvbiB0YWJsZSAoR1BUKSBtYW5pcHVsYXRvcgogLlNIICJTWU5PUFNJUyIKQEAgLTI1LDcgKzI1LDcgQEAKIAogRm9yIGluZm9ybWF0aW9uIG9uIE1CUiB2cy4gR1BULCBhcyB3ZWxsIGFzIEdQVCB0ZXJtaW5vbG9neSBhbmQgc3RydWN0dXJlLAogc2VlIHRoZSBleHRlbmRlZCBHUFQgZmRpc2sgZG9jdW1lbnRhdGlvbiBhdAotXGZJaHR0cDovL3d3dy5yb2RzYm9va3MuY29tL2dkaXNrL1xmUiBvciBjb25zdWx0IFdpa2lwZWRpYS4KK1xmSWh0dHBzOi8vd3d3LnJvZHNib29rcy5jb20vZ2Rpc2svXGZSIG9yIGNvbnN1bHQgV2lraXBlZGlhLgogCiBUaGUgXGZCY2dkaXNrXGZSIHByb2dyYW0gZW1wbG95cyBhIHVzZXIgaW50ZXJmYWNlIHNpbWlsYXIgdG8gdGhhdCBvZiBMaW51eCdzCiBcZkJjZmRpc2tcZlIsIGJ1dCBcZkJjZ2Rpc2tcZlIgbW9kaWZpZXMgR1BUIHBhcnRpdGlvbnMuIEl0IGFsc28gaGFzIHRoZQpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIEF2YWlsYWJsZSBvcHRpb25zIGFyZSBhcyBkZXNjcmliZWQgYmVsb3cuIChOb3RlIHRoYXQgXGZCY2dkaXNrXGZSIHByb3ZpZGVzCiBhIG11Y2ggbW9yZSBsaW1pdGVkIHNldCBvZiBvcHRpb25zIHRoYW4gaXRzIHNpYmxpbmcgXGZCZ2Rpc2tcZlIuIElmIHlvdQotbmVlZCB0byBwZXJmb3JtIHBhcnRpdGlvbiB0YWJsZSByZWNvdmVyeSwgaHlicmlkIE1CUiBtb2RpZmNhdGlvbiwgb3Igb3RoZXIKK25lZWQgdG8gcGVyZm9ybSBwYXJ0aXRpb24gdGFibGUgcmVjb3ZlcnksIGh5YnJpZCBNQlIgbW9kaWZpY2F0aW9uLCBvciBvdGhlcgogYWR2YW5jZWQgb3BlcmF0aW9ucywgeW91IHNob3VsZCBjb25zdWx0IHRoZSBcZkJnZGlza1xmUiBkb2N1bWVudGF0aW9uLikKIAogLlRQIApAQCAtMTg2LDggKzE4NiwxMyBAQAogcGVyZm9ybWFuY2UgZm9yIGFsbCBvZiB0aGVzZSBkaXNrIHR5cGVzLiBPbiBwcmVcLXBhcnRpdGlvbmVkIGRpc2tzLCBHUFQKIGZkaXNrIGF0dGVtcHRzIHRvIGlkZW50aWZ5IHRoZSBhbGlnbm1lbnQgdmFsdWUgdXNlZCBvbiB0aGF0IGRpc2ssIGJ1dCB3aWxsCiBzZXQgOC1zZWN0b3IgYWxpZ25tZW50IG9uIGRpc2tzIGxhcmdlciB0aGFuIDMwMCBHQiBldmVuIGlmIGxlc3NlciBhbGlnbm1lbnQKLXZhbHVlcyBhcmUgZGV0ZWN0ZWQuIEluIGVpdGhlciBjYXNlLCBpdCBjYW4gYmUgY2hhbmdlZCBieSB1c2luZyB0aGlzCi1vcHRpb24uCit2YWx1ZXMgYXJlIGRldGVjdGVkLiBJbiBlaXRoZXIgY2FzZSwgaXQgY2FuIGJlIGNoYW5nZWQgYnkgdXNpbmcgdGhpcyBvcHRpb24uCitUaGUgYWxpZ25tZW50IHZhbHVlIGFsc28gYWZmZWN0cyB0aGUgZGVmYXVsdCBlbmQgc2VjdG9yIHZhbHVlIHdoZW4gY3JlYXRpbmcKK2EgbmV3IHBhcnRpdGlvbjsgaXQgd2lsbCBiZSBhbGlnbmVkIHRvIG9uZSBsZXNzIHRoYW4gYSBtdWx0aXBsZSBvZiB0aGUKK2FsaWdubWVudCB2YWx1ZSwgd2hlbiBwb3NzaWJsZS4gVGhpcyBzaG91bGQga2VlcCBwYXJ0aXRpb25zIGEgbXVsdGlwbGUgb2YKK3RoZSBhbGlnbm1lbnQgdmFsdWUgaW4gc2l6ZS4gU29tZSBkaXNrIGVuY3J5cHRpb24gdG9vbHMgcmVxdWlyZSBwYXJ0aXRpb25zCit0byBiZSBzaXplZCB0byBzb21lIHZhbHVlLCB0eXBpY2FsbHkgNDA5NiBieXRlcywgc28gdGhlIGRlZmF1bHQgYWxpZ25tZW50IG9mCisxIE1pQiB3b3JrcyB3ZWxsIGZvciB0aGVtLgogCiAuVFAgCiAuQiBCYWNrdXAKQEAgLTI2Myw5ICsyNjgsOSBAQAogaGF2ZSBvbmUgYW5kIFxmQmNnZGlza1xmUiBkb2Vzbid0IGtub3cgaXQuIElmIHlvdSBkb24ndCBrbm93IHRoZSB0eXBlIGNvZGUKIGZvciB5b3VyIHBhcnRpdGlvbiwgeW91IGNhbiB0eXBlIFxmQkxcZlIgdG8gc2VlIGEgbGlzdCBvZiBrbm93biB0eXBlIGNvZGVzLgogVGhlIHR5cGUgY29kZSBsaXN0IG1heSBvcHRpb25hbGx5IGJlIGZpbHRlcmVkIGJ5IGEgc2VhcmNoIHN0cmluZzsgZm9yCi1pbnN0YW5jZSwgZW50ZXJpbmcgXGZJXGZCTGludXhcZlJcZlIgc2hvd3Mgb25seSBwYXJ0aXRpb24gdHlwZSBjb2RlcyB3aXRoCitpbnN0YW5jZSwgZW50ZXJpbmcgXGZJXGZCbGludXhcZlJcZlIgc2hvd3Mgb25seSBwYXJ0aXRpb24gdHlwZSBjb2RlcyB3aXRoCiBkZXNjcmlwdGlvbnMgdGhhdCBpbmNsdWRlIHRoZSBzdHJpbmcgXGZJTGludXhcZlIuIFRoaXMgc2VhcmNoIGlzIHBlcmZvcm1lZAotY2FzZVwtc2Vuc2l0aXZlbHkuCitjYXNlXC1pbnNlbnNpdGl2ZWx5LgogCiAuVFAgCiAuQiBWZXJpZnkKQEAgLTM2OSw3ICszNzQsNyBAQAogCiAqIEp1c3RpbiBNYWdnYXJkIChqdXN0aW4ubWFnZ2FyZEBuZXRnZWFyLmNvbSkKIAotKiBEd2lnaHQgU2NoYXVlciAoZHNjaGF1ZXJAZ21haWwuY29tKQorKiBEd2lnaHQgU2NoYXVlciAoZGFzQHRlZWdyYS5uZXQpCiAKICogRmxvcmlhbiBadW1iaWVobCAoZmxvcnpAZmxvcnouZGUpCiAKQEAgLTM4NCwxMSArMzg5LDExIEBACiAuQlIgc2dkaXNrICg4KSwKIC5CUiBmaXhwYXJ0cyAoOCkuCiAKLVxmSWh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR1VJRF9QYXJ0aXRpb25fVGFibGVcZlIKK1xmSWh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dVSURfUGFydGl0aW9uX1RhYmxlXGZSCiAKLVxmSWh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3RlY2hub3Rlcy90bjIwMDYvdG4yMTY2Lmh0bWxcZlIKK1xmSWh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90ZWNobm90ZXMvdG4yMDA2L3RuMjE2Ni5odG1sXGZSCiAKLVxmSWh0dHA6Ly93d3cucm9kc2Jvb2tzLmNvbS9nZGlzay9cZlIKK1xmSWh0dHBzOi8vd3d3LnJvZHNib29rcy5jb20vZ2Rpc2svXGZSCiAKIC5TSCAiQVZBSUxBQklMSVRZIgogVGhlIFxmQmNnZGlza1xmUiBjb21tYW5kIGlzIHBhcnQgb2YgdGhlIFxmSUdQVCBmZGlza1xmUiBwYWNrYWdlIGFuZCBpcwpkaWZmIC0tZ2l0IGEvY3VycmVudC5zcGVjIGIvY3VycmVudC5zcGVjCmluZGV4IGU2MWEwYWUuLmE5MTI4OTQgMTAwNjQ0Ci0tLSBhL2N1cnJlbnQuc3BlYworKysgYi9jdXJyZW50LnNwZWMKQEAgLTEsMTIgKzEsMTIgQEAKIFN1bW1hcnk6IEdQVCBwYXJ0aXRpb25pbmcgYW5kIE1CUiByZXBhaXIgc29mdHdhcmUKIE5hbWU6IGdwdGZkaXNrCi1WZXJzaW9uOiAxLjAuNAorVmVyc2lvbjogMS4wLjkKIAogUmVsZWFzZTogMSV7P2Rpc3R9CiBMaWNlbnNlOiBHUEx2MgogVVJMOiBodHRwOi8vd3d3LnJvZHNib29rcy5jb20vZ2Rpc2sKIEdyb3VwOiBBcHBsaWNhdGlvbnMvU3lzdGVtCi1Tb3VyY2U6IGh0dHA6Ly93d3cucm9kc2Jvb2tzLmNvbS9nZGlzay9ncHRmZGlzay0xLjAuNC50YXIuZ3oKK1NvdXJjZTogaHR0cDovL3d3dy5yb2RzYm9va3MuY29tL2dkaXNrL2dwdGZkaXNrLTEuMC45LnRhci5negogQnVpbGRSb290OiAlKG1rdGVtcCAtdWQgJXtfdG1wcGF0aH0vJXtuYW1lfS0le3ZlcnNpb259LSV7cmVsZWFzZX0tWFhYWFhYKQogCiAlZGVzY3JpcHRpb24KQEAgLTgxLDUgKzgxLDUgQEAKIAogCiAlY2hhbmdlbG9nCi0qIFRodSBKdWwgNSAyMDE4IFIgU21pdGggPHJvZHNtaXRoQHJvZHNib29rcy5jb20+IC0gMS4wLjQKLS0gQ3JlYXRlZCBzcGVjIGZpbGUgZm9yIDEuMC40IHJlbGVhc2UKKyogVGh1IEFwciAxNCAyMDIyIFIgU21pdGggPHJvZHNtaXRoQHJvZHNib29rcy5jb20+IC0gMS4wLjkKKy0gQ3JlYXRlZCBzcGVjIGZpbGUgZm9yIDEuMC45IHJlbGVhc2UKZGlmZiAtLWdpdCBhL2Rpc2tpby11bml4LmNjIGIvZGlza2lvLXVuaXguY2MKaW5kZXggNmQzZTViMS4uMDg5N2M1NiAxMDA2NDQKLS0tIGEvZGlza2lvLXVuaXguY2MKKysrIGIvZGlza2lvLXVuaXguY2MKQEAgLTEzLDkgKzEzLDcgQEAKIC8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2ZXJzaW9uIDIsIGFzIGRldGFpbGVkIGluIHRoZSBDT1BZSU5HIGZpbGUuCiAKICNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUwotI2lmbmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TCiAjZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MKLSNlbmRpZgogCiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0zOSw2ICszNywxNCBAQAogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19saW51eF9fKQorI2RlZmluZSBvZmY2NF90IG9mZl90CisjZGVmaW5lIHN0YXQ2NCBzdGF0CisjZGVmaW5lIGZzdGF0NjQgZnN0YXQKKyNkZWZpbmUgbHN0YXQ2NCBsc3RhdAorI2RlZmluZSBsc2VlazY0IGxzZWVrCisjZW5kaWYKKwogLy8gUmV0dXJucyB0aGUgb2ZmaWNpYWwgInJlYWwiIG5hbWUgZm9yIGEgc2hvcnRlbmVkIHZlcnNpb24gb2Ygc2FtZS4KIC8vIFRyaXZpYWwgaGVyZTsgbW9yZSBpbXBvcnRhbnQgaW4gV2luZG93cwogdm9pZCBEaXNrSU86Ok1ha2VSZWFsTmFtZSh2b2lkKSB7CkBAIC0zNzQsNyArMzgwLDcgQEAKIC8vIHNpemUgd2l0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCiAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KIGludCBEaXNrSU86OldyaXRlKHZvaWQqIGJ1ZmZlciwgaW50IG51bUJ5dGVzKSB7Ci0gICBpbnQgYmxvY2tTaXplID0gNTEyLCBpLCBudW1CbG9ja3MsIHJldHZhbCA9IDA7CisgICBpbnQgYmxvY2tTaXplLCBpLCBudW1CbG9ja3MsIHJldHZhbCA9IDA7CiAgICBjaGFyKiB0ZW1wU3BhY2U7CiAKICAgIC8vIElmIGRpc2sgaXNuJ3Qgb3BlbiwgdHJ5IHRvIG9wZW4gaXQuLi4uCkBAIC00MjYsNyArNDMyLDcgQEAKIC8vIHJldHVybiBjb3JyZWN0IHZhbHVlcyBmb3IgZGlzayBpbWFnZSBmaWxlcy4KIHVpbnQ2NF90IERpc2tJTzo6RGlza1NpemUoaW50ICplcnIpIHsKICAgIHVpbnQ2NF90IHNlY3RvcnMgPSAwOyAvLyBzaXplIGluIHNlY3RvcnMKLSAgIG9mZl90IGJ5dGVzID0gMDsgLy8gc2l6ZSBpbiBieXRlcworICAgb2ZmNjRfdCBieXRlcyA9IDA7IC8vIHNpemUgaW4gYnl0ZXMKICAgIHN0cnVjdCBzdGF0NjQgc3Q7CiAgICBpbnQgcGxhdGZvcm1Gb3VuZCA9IDA7CiAjaWZkZWYgX19zdW5fXwpkaWZmIC0tZ2l0IGEvZGlza2lvLmNjIGIvZGlza2lvLmNjCmluZGV4IDdhODlkMDkuLjU1NjEzOGUgMTAwNjQ0Ci0tLSBhL2Rpc2tpby5jYworKysgYi9kaXNraW8uY2MKQEAgLTEzLDkgKzEzLDcgQEAKIC8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2ZXJzaW9uIDIsIGFzIGRldGFpbGVkIGluIHRoZSBDT1BZSU5HIGZpbGUuCiAKICNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUwotI2lmbmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TCiAjZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MKLSNlbmRpZgogCiAjaWZkZWYgX1dJTjMyCiAjaW5jbHVkZSA8d2luZG93cy5oPgpkaWZmIC0tZ2l0IGEvZGlza2lvLmggYi9kaXNraW8uaAppbmRleCA4NTIxYjhlLi5kZWM1NmFkIDEwMDY0NAotLS0gYS9kaXNraW8uaAorKysgYi9kaXNraW8uaApAQCAtMzcsOCArMzcsNiBAQAogI2luY2x1ZGUgInN1cHBvcnQuaCIKIC8vI2luY2x1ZGUgInBhcnR0eXBlcy5oIgogCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBEaXNrSU8gY2xhc3MgYW5kIHJlbGF0ZWQgc3RydWN0dXJlcyAqCkBAIC00Nyw5ICs0NSw5IEBACiAKIGNsYXNzIERpc2tJTyB7CiAgICBwcm90ZWN0ZWQ6Ci0gICAgICBzdHJpbmcgdXNlckZpbGVuYW1lOwotICAgICAgc3RyaW5nIHJlYWxGaWxlbmFtZTsKLSAgICAgIHN0cmluZyBtb2RlbE5hbWU7CisgICAgICBzdGQ6OnN0cmluZyB1c2VyRmlsZW5hbWU7CisgICAgICBzdGQ6OnN0cmluZyByZWFsRmlsZW5hbWU7CisgICAgICBzdGQ6OnN0cmluZyBtb2RlbE5hbWU7CiAgICAgICBpbnQgaXNPcGVuOwogICAgICAgaW50IG9wZW5Gb3JXcml0ZTsKICNpZmRlZiBfV0lOMzIKQEAgLTcwLDkgKzY4LDkgQEAKICNpZmRlZiBFTkFCTEVfSEVBUF9ESVNLSU8KICAgICAgIGludCBPcGVuRm9yUmVhZChjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CiAjZW5kaWYKLSAgICAgIGludCBPcGVuRm9yUmVhZChjb25zdCBzdHJpbmcgJiBmaWxlbmFtZSk7CisgICAgICBpbnQgT3BlbkZvclJlYWQoY29uc3Qgc3RkOjpzdHJpbmcgJiBmaWxlbmFtZSk7CiAgICAgICBpbnQgT3BlbkZvclJlYWQodm9pZCk7Ci0gICAgICBpbnQgT3BlbkZvcldyaXRlKGNvbnN0IHN0cmluZyAmIGZpbGVuYW1lKTsKKyAgICAgIGludCBPcGVuRm9yV3JpdGUoY29uc3Qgc3RkOjpzdHJpbmcgJiBmaWxlbmFtZSk7CiAgICAgICBpbnQgT3BlbkZvcldyaXRlKHZvaWQpOwogICAgICAgdm9pZCBDbG9zZSgpOwogICAgICAgaW50IFNlZWsodWludDY0X3Qgc2VjdG9yKTsKQEAgLTgxLDEyICs3OSwxMiBAQAogICAgICAgaW50IERpc2tTeW5jKHZvaWQpOyAvLyByZXN5bmMgZGlzayBjYWNoZXMgdG8gdXNlIG5ldyBwYXJ0aXRpb25zCiAgICAgICBpbnQgR2V0QmxvY2tTaXplKHZvaWQpOwogICAgICAgaW50IEdldFBoeXNCbG9ja1NpemUodm9pZCk7Ci0gICAgICBzdHJpbmcgR2V0TW9kZWwodm9pZCkge3JldHVybiBtb2RlbE5hbWU7fQorICAgICAgc3RkOjpzdHJpbmcgR2V0TW9kZWwodm9pZCkge3JldHVybiBtb2RlbE5hbWU7fQogICAgICAgdWludDMyX3QgR2V0TnVtSGVhZHModm9pZCk7CiAgICAgICB1aW50MzJfdCBHZXROdW1TZWNzUGVyVHJhY2sodm9pZCk7CiAgICAgICBpbnQgSXNPcGVuKHZvaWQpIHtyZXR1cm4gaXNPcGVuO30KICAgICAgIGludCBJc09wZW5Gb3JXcml0ZSh2b2lkKSB7cmV0dXJuIG9wZW5Gb3JXcml0ZTt9Ci0gICAgICBzdHJpbmcgR2V0TmFtZSh2b2lkKSBjb25zdCB7cmV0dXJuIHJlYWxGaWxlbmFtZTt9CisgICAgICBzdGQ6OnN0cmluZyBHZXROYW1lKHZvaWQpIGNvbnN0IHtyZXR1cm4gcmVhbEZpbGVuYW1lO30KIAogICAgICAgdWludDY0X3QgRGlza1NpemUoaW50KiBlcnIpOwogfTsgLy8gY2xhc3MgRGlza0lPCmRpZmYgLS1naXQgYS9maXhwYXJ0cy44IGIvZml4cGFydHMuOAppbmRleCA5ODU3YjI0Li4yNWQwNWFkIDEwMDY0NAotLS0gYS9maXhwYXJ0cy44CisrKyBiL2ZpeHBhcnRzLjgKQEAgLTEsNiArMSw2IEBACi0uXCIgQ29weXJpZ2h0IDIwMTEtMjAxOCBSb2RlcmljayBXLiBTbWl0aCAocm9kc21pdGhAcm9kc2Jvb2tzLmNvbSkKKy5cIiBDb3B5cmlnaHQgMjAxMS0yMDIyIFJvZGVyaWNrIFcuIFNtaXRoIChyb2RzbWl0aEByb2RzYm9va3MuY29tKQogLlwiIE1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLS5USCAiRklYUEFSVFMiICI4IiAiMS4wLjQiICJSb2RlcmljayBXLiBTbWl0aCIgIkZpeFBhcnRzIE1hbnVhbCIKKy5USCAiRklYUEFSVFMiICI4IiAiMS4wLjkiICJSb2RlcmljayBXLiBTbWl0aCIgIkZpeFBhcnRzIE1hbnVhbCIKIC5TSCAiTkFNRSIKIGZpeHBhcnRzIFwtIE1CUiBwYXJ0aXRpb24gdGFibGUgcmVwYWlyIHV0aWxpdHkKIC5TSCAiU1lOT1BTSVMiCkBAIC0yNTgsNyArMjU4LDcgQEAKIAogKiBKdXN0aW4gTWFnZ2FyZCAoanVzdGluLm1hZ2dhcmRAbmV0Z2Vhci5jb20pCiAKLSogRHdpZ2h0IFNjaGF1ZXIgKGRzY2hhdWVyQGdtYWlsLmNvbSkKKyogRHdpZ2h0IFNjaGF1ZXIgKGRhc0B0ZWVncmEubmV0KQogCiAqIEZsb3JpYW4gWnVtYmllaGwgKGZsb3J6QGZsb3J6LmRlKQogCkBAIC0yNzMsOSArMjczLDkgQEAKIC5CUiBnZGlzayAoOCksCiAuQlIgc2dkaXNrICg4KS4KIAotXGZJaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYXN0ZXJfYm9vdF9yZWNvcmRcZlIKK1xmSWh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01hc3Rlcl9ib290X3JlY29yZFxmUgogCi1cZklodHRwOi8vd3d3LnJvZHNib29rcy5jb20vZml4cGFydHMvXGZSCitcZklodHRwczovL3d3dy5yb2RzYm9va3MuY29tL2ZpeHBhcnRzL1xmUgogCiAuU0ggIkFWQUlMQUJJTElUWSIKIFRoZSBcZkJmaXhwYXJ0c1xmUiBjb21tYW5kIGlzIHBhcnQgb2YgdGhlIFxmSUdQVCBmZGlza1xmUiBwYWNrYWdlIGFuZCBpcwpkaWZmIC0tZ2l0IGEvZ2Rpc2suOCBiL2dkaXNrLjgKaW5kZXggZGZkYWEyYy4uOGM5OTI5YiAxMDA2NDQKLS0tIGEvZ2Rpc2suOAorKysgYi9nZGlzay44CkBAIC0xLDYgKzEsNiBAQAotLlwiIENvcHlyaWdodCAyMDExLTIwMTggUm9kZXJpY2sgVy4gU21pdGggKHJvZHNtaXRoQHJvZHNib29rcy5jb20pCisuXCIgQ29weXJpZ2h0IDIwMTEtMjAyMiBSb2RlcmljayBXLiBTbWl0aCAocm9kc21pdGhAcm9kc2Jvb2tzLmNvbSkKIC5cIiBNYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0uVEggIkdESVNLIiAiOCIgIjEuMC40IiAiUm9kZXJpY2sgVy4gU21pdGgiICJHUFQgZmRpc2sgTWFudWFsIgorLlRIICJHRElTSyIgIjgiICIxLjAuOSIgIlJvZGVyaWNrIFcuIFNtaXRoIiAiR1BUIGZkaXNrIE1hbnVhbCIKIC5TSCAiTkFNRSIKIGdkaXNrIFwtIEludGVyYWN0aXZlIEdVSUQgcGFydGl0aW9uIHRhYmxlIChHUFQpIG1hbmlwdWxhdG9yCiAuU0ggIlNZTk9QU0lTIgpAQCAtMjcsNyArMjcsNyBAQAogbWFpbiBhbmQgYmFja3VwIGRhdGEsIGFzIHdlbGwgYXMgYmV0d2VlbiB0aGUgR1BUIGhlYWRlcnMgYW5kIHRoZSBwYXJ0aXRpb24KIHRhYmxlcy4gRm9yIGluZm9ybWF0aW9uIG9uIE1CUiB2cy4gR1BULCBhcyB3ZWxsIGFzIEdQVCB0ZXJtaW5vbG9neSBhbmQKIHN0cnVjdHVyZSwgc2VlIHRoZSBleHRlbmRlZCBcZkJnZGlza1xmUiBkb2N1bWVudGF0aW9uIGF0Ci1cZklodHRwOi8vd3d3LnJvZHNib29rcy5jb20vZ2Rpc2svXGZSIG9yIGNvbnN1bHQgV2lraXBlZGlhLgorXGZJaHR0cHM6Ly93d3cucm9kc2Jvb2tzLmNvbS9nZGlzay9cZlIgb3IgY29uc3VsdCBXaWtpcGVkaWEuCiAKIFRoZSBcZkJnZGlza1xmUiBwcm9ncmFtIGVtcGxveXMgYSB1c2VyIGludGVyZmFjZSBzaW1pbGFyIHRvIHRoYXQgb2YgTGludXgncwogXGZCZmRpc2tcZlIsIGJ1dCBcZkJnZGlza1xmUiBtb2RpZmllcyBHUFQgcGFydGl0aW9ucy4gSXQgYWxzbyBoYXMgdGhlCkBAIC0xOTEsOSArMTkxLDkgQEAKIHN1Y2ggYXMgMHhhNTAwIGZvciBhIEZyZWVCU0QgZGlza2xhYmVsLCAweGE1MDEgZm9yIEZyZWVCU0QgYm9vdCwgMHhhNTAyIGZvcgogRnJlZUJTRCBzd2FwLCBhbmQgc28gb24uIE5vdGUgdGhhdCB0aGVzZSB0d29cLWJ5dGUgY29kZXMgYXJlIHVuaXF1ZSB0bwogXGZCZ2Rpc2tcZlIuIFRoZSB0eXBlIGNvZGUgbGlzdCBtYXkgb3B0aW9uYWxseSBiZSBmaWx0ZXJlZCBieSBhIHNlYXJjaAotc3RyaW5nOyBmb3IgaW5zdGFuY2UsIGVudGVyaW5nIFxmSVxmQkxpbnV4XGZSXGZSIHNob3dzIG9ubHkgcGFydGl0aW9uIHR5cGUKK3N0cmluZzsgZm9yIGluc3RhbmNlLCBlbnRlcmluZyBcZklcZkJsaW51eFxmUlxmUiBzaG93cyBvbmx5IHBhcnRpdGlvbiB0eXBlCiBjb2RlcyB3aXRoIGRlc2NyaXB0aW9ucyB0aGF0IGluY2x1ZGUgdGhlIHN0cmluZyBcZklMaW51eFxmUi4gVGhpcyBzZWFyY2ggaXMKLXBlcmZvcm1lZCBjYXNlXC1zZW5zaXRpdmVseS4KK3BlcmZvcm1lZCBjYXNlXC1pbnNlbnNpdGl2ZWx5LgogCiAuVFAgCiAuQiBuCkBAIC0yMTAsNyArMjEwLDggQEAKIGJlZm9yZSB0aGUgbGFzdCBhdmFpbGFibGUgc2VjdG9yLiBQcmVzc2luZyB0aGUgRW50ZXIga2V5IHdpdGggbm8gaW5wdXQKIHNwZWNpZmllcyB0aGUgZGVmYXVsdCB2YWx1ZSwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHRoZSBsYXJnZXN0IGF2YWlsYWJsZQogYmxvY2sgZm9yIHRoZSBzdGFydCBzZWN0b3IgYW5kIHRoZSBlbmQgb2YgdGhlIHNhbWUgYmxvY2sgZm9yIHRoZSBlbmQKLXNlY3Rvci4KK3NlY3Rvci4gRGVmYXVsdCBzdGFydCBhbmQgZW5kIHBvaW50cyBtYXkgYmUgYWRqdXN0ZWQgdG8gb3B0aW1pemUgcGFydGl0aW9uCithbGlnbm1lbnQuCiAKIC5UUCAKIC5CIG8KQEAgLTQyMCw2ICs0MjEsMTQgQEAKIGlnbm9yZSB0aGVzZSBhdHRyaWJ1dGVzLgogCiAuVFAgCisuQiBiCitTd2FwIHRoZSBieXRlIG9yZGVyIGZvciB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWVkIHBhcnRpdGlvbi4gU29tZQorcGFydGl0aW9uaW5nIHRvb2xzLCBpbmNsdWRpbmcgR1BUIGZkaXNrIDEuMC43IGFuZCBlYXJsaWVyLCBjYW4gd3JpdGUgdGhlCitwYXJ0aXRpb24gbmFtZSBpbiB0aGUgd3JvbmcgYnl0ZSBvcmRlciBvbiBiaWctZW5kaWFuIGNvbXB1dGVycywgc3VjaCBhcyB0aGUKK0lCTSBzMzkwIG1haW5mcmFtZXMgYW5kIFBvd2VyUEMtYmFzZWQgTWFjcy4gVGhpcyBmZWF0dXJlIGNvcnJlY3RzIHRoaXMKK3Byb2JsZW0uCisKKy5UUCAKIC5CIGMKIENoYW5nZSBwYXJ0aXRpb24gR1VJRC4gWW91IGNhbiBlbnRlciBhIGN1c3RvbSB1bmlxdWUgR1VJRCBmb3IgYSBwYXJ0aXRpb24KIHVzaW5nIHRoaXMgb3B0aW9uLiAoTm90ZSB0aGlzIHJlZmVycyB0byB0aGUgR1VJRCB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgYQpAQCAtNDgzLDEzICs0OTIsMTggQEAKIHBoeXNpY2FsIHNlY3RvcnMgKHN1Y2ggYXMgbW9kZXJuIEFkdmFuY2VkIEZvcm1hdCBkcml2ZXMpLCBzb21lIFJBSUQKIGNvbmZpZ3VyYXRpb25zLCBhbmQgbWFueSBTU0QgZGV2aWNlcywgY2FuIHN1ZmZlciBwZXJmb3JtYW5jZSBwcm9ibGVtcyBpZgogcGFydGl0aW9ucyBhcmUgbm90IGFsaWduZWQgcHJvcGVybHkgZm9yIHRoZWlyIGludGVybmFsIGRhdGEgc3RydWN0dXJlcy4gT24KLW5ldyBkaXNrcywgR1BUIGZkaXNrIGF0dGVtcHRzIHRvIGFsaWduIHBhcnRpdGlvbnMgb24gMSBNaUIgYm91bmRhcmllcwotKDIwNDhcLXNlY3RvcnMgb24gZGlza3Mgd2l0aCA1MTItYnl0ZSBzZWN0b3JzKSBieSBkZWZhdWx0LCB3aGljaCBvcHRpbWl6ZXMKK25ldyBkaXNrcywgR1BUIGZkaXNrIGF0dGVtcHRzIHRvIGFsaWduIHBhcnRpdGlvbnMgb24gMSBNaUIgYm91bmRhcmllcyAoMjA0OAorc2VjdG9ycyBvbiBkaXNrcyB3aXRoIDUxMi1ieXRlIHNlY3RvcnMpIGJ5IGRlZmF1bHQsIHdoaWNoIG9wdGltaXplcwogcGVyZm9ybWFuY2UgZm9yIGFsbCBvZiB0aGVzZSBkaXNrIHR5cGVzLiBPbiBwcmVcLXBhcnRpdGlvbmVkIGRpc2tzLCBHUFQKIGZkaXNrIGF0dGVtcHRzIHRvIGlkZW50aWZ5IHRoZSBhbGlnbm1lbnQgdmFsdWUgdXNlZCBvbiB0aGF0IGRpc2ssIGJ1dCB3aWxsCiBzZXQgOC1zZWN0b3IgYWxpZ25tZW50IG9uIGRpc2tzIGxhcmdlciB0aGFuIDMwMCBHQiBldmVuIGlmIGxlc3NlciBhbGlnbm1lbnQKLXZhbHVlcyBhcmUgZGV0ZWN0ZWQuIEluIGVpdGhlciBjYXNlLCBpdCBjYW4gYmUgY2hhbmdlZCBieSB1c2luZyB0aGlzCi1vcHRpb24uCit2YWx1ZXMgYXJlIGRldGVjdGVkLiBJbiBlaXRoZXIgY2FzZSwgaXQgY2FuIGJlIGNoYW5nZWQgYnkgdXNpbmcgdGhpcyBvcHRpb24uCitUaGUgYWxpZ25tZW50IHZhbHVlIGFsc28gYWZmZWN0cyB0aGUgZGVmYXVsdCBlbmQgc2VjdG9yIHZhbHVlIHdoZW4gY3JlYXRpbmcKK2EgbmV3IHBhcnRpdGlvbjsgaXQgd2lsbCBiZSBhbGlnbmVkIHRvIG9uZSBsZXNzIHRoYW4gYSBtdWx0aXBsZSBvZiB0aGUKK2FsaWdubWVudCB2YWx1ZSwgaWYgcG9zc2libGUuIFRoaXMgc2hvdWxkIGtlZXAgcGFydGl0aW9ucyBhIG11bHRpcGxlIG9mIHRoZQorYWxpZ25tZW50IHZhbHVlIGluIHNpemUuIFNvbWUgZGlzayBlbmNyeXB0aW9uIHRvb2xzIHJlcXVpcmUgcGFydGl0aW9ucyB0byBiZQorc2l6ZWQgdG8gc29tZSB2YWx1ZSwgdHlwaWNhbGx5IDQwOTYgYnl0ZXMsIHNvIHRoZSBkZWZhdWx0IGFsaWdubWVudCBvZiAxIE1pQgord29ya3Mgd2VsbCBmb3IgdGhlbS4KIAogLlRQIAogLkIgbQpAQCAtNjczLDcgKzY4Nyw3IEBACiAKICogSnVzdGluIE1hZ2dhcmQgKGp1c3Rpbi5tYWdnYXJkQG5ldGdlYXIuY29tKQogCi0qIER3aWdodCBTY2hhdWVyIChkc2NoYXVlckBnbWFpbC5jb20pCisqIER3aWdodCBTY2hhdWVyIChkYXNAdGVlZ3JhLm5ldCkKIAogKiBGbG9yaWFuIFp1bWJpZWhsIChmbG9yekBmbG9yei5kZSkKIApAQCAtNjg4LDExICs3MDIsMTEgQEAKIC5CUiBzZ2Rpc2sgKDgpLAogLkJSIGZpeHBhcnRzICg4KS4KIAotXGZJaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HVUlEX1BhcnRpdGlvbl9UYWJsZVxmUgorXGZJaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR1VJRF9QYXJ0aXRpb25fVGFibGVcZlIKIAotXGZJaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdGVjaG5vdGVzL3RuMjAwNi90bjIxNjYuaHRtbFxmUgorXGZJaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3RlY2hub3Rlcy90bjIwMDYvdG4yMTY2Lmh0bWxcZlIKIAotXGZJaHR0cDovL3d3dy5yb2RzYm9va3MuY29tL2dkaXNrL1xmUgorXGZJaHR0cHM6Ly93d3cucm9kc2Jvb2tzLmNvbS9nZGlzay9cZlIKIAogLlNIICJBVkFJTEFCSUxJVFkiCiBUaGUgXGZCZ2Rpc2tcZlIgY29tbWFuZCBpcyBwYXJ0IG9mIHRoZSBcZklHUFQgZmRpc2tcZlIgcGFja2FnZSBhbmQgaXMKZGlmZiAtLWdpdCBhL2dkaXNrLmNjIGIvZ2Rpc2suY2MKaW5kZXggNWY4NTQ5OC4uYzk0NDNiZCAxMDA2NDQKLS0tIGEvZ2Rpc2suY2MKKysrIGIvZ2Rpc2suY2MKQEAgLTExLDYgKzExLDggQEAKICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlICJncHR0ZXh0LmgiCiAKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIHsKICAgIEdQVERhdGFUZXh0VUkgdGhlR1BUOwogICAgc3RyaW5nIGRldmljZSA9ICIiOwpkaWZmIC0tZ2l0IGEvZ3B0LmNjIGIvZ3B0LmNjCmluZGV4IDhhYjY5NzUuLmU4ZTA4NzggMTAwNjQ0Ci0tLSBhL2dwdC5jYworKysgYi9ncHQuY2MKQEAgLTMsMTMgKzMsMTEgQEAKIAogLyogQnkgUm9kIFNtaXRoLCBpbml0aWFsIGNvZGluZyBKYW51YXJ5IHRvIEZlYnJ1YXJ5LCAyMDA5ICovCiAKLS8qIFRoaXMgcHJvZ3JhbSBpcyBjb3B5cmlnaHQgKGMpIDIwMDktMjAxOCBieSBSb2RlcmljayBXLiBTbWl0aC4gSXQgaXMgZGlzdHJpYnV0ZWQKKy8qIFRoaXMgcHJvZ3JhbSBpcyBjb3B5cmlnaHQgKGMpIDIwMDktMjAyMiBieSBSb2RlcmljayBXLiBTbWl0aC4gSXQgaXMgZGlzdHJpYnV0ZWQKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHZlcnNpb24gMiwgYXMgZGV0YWlsZWQgaW4gdGhlIENPUFlJTkcgZmlsZS4gKi8KIAogI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TCi0jaWZuZGVmIF9fU1REQ19DT05TVEFOVF9NQUNST1MKICNkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUwotI2VuZGlmCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtODIsNiArODAsOCBAQAogICAgYmVRdWlldCA9IDA7CiAgICB3aGljaFdhc1VzZWQgPSB1c2VfbmV3OwogICAgbWFpbkhlYWRlci5udW1QYXJ0cyA9IDA7CisgICBtYWluSGVhZGVyLmZpcnN0VXNhYmxlTEJBID0gMDsKKyAgIG1haW5IZWFkZXIubGFzdFVzYWJsZUxCQSA9IDA7CiAgICBudW1QYXJ0cyA9IDA7CiAgICBTZXRHUFRTaXplKE5VTV9HUFRfRU5UUklFUyk7CiAgICAvLyBJbml0aWFsaXplIENSQyBmdW5jdGlvbnMuLi4KQEAgLTE0NSw2ICsxNDUsNyBAQAogICAgYmVRdWlldCA9IDA7CiAgICB3aGljaFdhc1VzZWQgPSB1c2VfbmV3OwogICAgbWFpbkhlYWRlci5udW1QYXJ0cyA9IDA7CisgICBtYWluSGVhZGVyLmxhc3RVc2FibGVMQkEgPSAwOwogICAgbnVtUGFydHMgPSAwOwogICAgLy8gSW5pdGlhbGl6ZSBDUkMgZnVuY3Rpb25zLi4uCiAgICBjaGtzdW1fY3JjMzJnZW50YWIoKTsKQEAgLTQxMiw2ICs0MTMsMTEgQEAKICAgICAgICAgICAgICAgPDwgImluIGRlZ3JhZGVkIHBlcmZvcm1hbmNlIG9uIHNvbWUgbW9kZXJuICgyMDA5IGFuZCBsYXRlcikgaGFyZCBkaXNrcy5cbiI7CiAgICAgICAgICBhbGlnblByb2JzKys7CiAgICAgICB9IC8vIGlmCisgICAgICBpZiAoKHBhcnRpdGlvbnNbaV0uSXNVc2VkKCkpICYmICgocGFydGl0aW9uc1tpXS5HZXRMYXN0TEJBKCkgKyAxKSAlIHRlc3RBbGlnbm1lbnQpICE9IDApIHsKKyAgICAgICAgIGNvdXQgPDwgIlxuQ2F1dGlvbjogUGFydGl0aW9uICIgPDwgaSArIDEgPDwgIiBkb2Vzbid0IGVuZCBvbiBhICIKKyAgICAgICAgICAgICAgPDwgdGVzdEFsaWdubWVudCA8PCAiLXNlY3RvciBib3VuZGFyeS4gVGhpcyBtYXlcbnJlc3VsdCAiCisgICAgICAgICAgICAgIDw8ICJpbiBwcm9ibGVtcyB3aXRoIHNvbWUgZGlzayBlbmNyeXB0aW9uIHRvb2xzLlxuIjsKKyAgICAgIH0gLy8gaWYKICAgIH0gLy8gZm9yCiAgICBpZiAoYWxpZ25Qcm9icyA+IDApCiAgICAgICBjb3V0IDw8ICJcbkNvbnN1bHQgaHR0cDovL3d3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL2xpbnV4L2xpYnJhcnkvbC00a2Itc2VjdG9yLWRpc2tzL1xuIgpAQCAtNTg0LDcgKzU5MCw3IEBACiAvLyBieXRlIG9yZGVyIGFuZCB0aGVuIHVuZG9lcyB0aGF0IHJldmVyc2FsLikKIHZvaWQgR1BURGF0YTo6UmVjb21wdXRlQ1JDcyh2b2lkKSB7CiAgICB1aW50MzJfdCBjcmMsIGhTaXplOwotICAgaW50IGxpdHRsZUVuZGlhbiA9IDE7CisgICBpbnQgbGl0dGxlRW5kaWFuOwogCiAgICAvLyBJZiB0aGUgaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gdGhlIEdQVCBoZWFkZXIgZGF0YSBzdHJ1Y3R1cmUsIHJlc2V0IGl0OwogICAgLy8gb3RoZXJ3aXNlLCBzZXQgYm90aCBoZWFkZXIgc2l6ZXMgdG8gd2hhdGV2ZXIgdGhlIG1haW4gb25lIGlzLi4uLgpAQCAtODg4LDggKzg5NCwxNiBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICB9IC8vIHN3aXRjaAogCi0gICAgICBpZiAoYWxsT0spCisgICAgICBpZiAoYWxsT0spIHsKICAgICAgICAgIENoZWNrR1BUU2l6ZSgpOworICAgICAgICAgLy8gQmVsb3cgaXMgdW5saWtlbHkgdG8gaGFwcGVuIG9uIHJlYWwgZGlza3MsIGJ1dCBjb3VsZCBoYXBwZW4gaWYKKyAgICAgICAgIC8vIHRoZSB1c2VyIGlzIG1hbmlwdWxhdGluZyBhIHRydW5jYXRlZCBpbWFnZSBmaWxlLi4uLgorICAgICAgICAgaWYgKGRpc2tTaXplIDw9IEdldFRhYmxlU2l6ZUluU2VjdG9ycygpICogMiArIDMpIHsKKyAgICAgICAgICAgICBhbGxPSyA9IDA7CisgICAgICAgICAgICAgY291dCA8PCAiRGlzayBpcyB0b28gc21hbGwgdG8gaG9sZCBHUFQgZGF0YSAoIiA8PCBkaXNrU2l6ZQorICAgICAgICAgICAgICAgICAgPDwgIiBzZWN0b3JzKSEgQWJvcnRpbmchXG4iOworICAgICAgICAgfQorICAgICAgfQogICAgICAgbXlEaXNrLkNsb3NlKCk7CiAgICAgICBDb21wdXRlQWxpZ25tZW50KCk7CiAgICB9IGVsc2UgewpAQCAtMTA0OCw2ICsxMDYyLDIyIEBACiAgICB9IC8vIGlmCiAgICAqY3JjT2sgPSBDaGVja0hlYWRlckNSQygmdGVtcEhlYWRlcik7CiAKKyAgIGlmICh0ZW1wSGVhZGVyLnNpemVPZlBhcnRpdGlvbkVudHJpZXMgIT0gc2l6ZW9mKEdQVFBhcnQpKSB7CisgICAgICAvLyBQcmludCB0aGUgYmVsb3cgd2FybmluZyBvbmx5IGlmIHRoZSBDUkMgaXMgT0sgLS0gYnV0IGNvcnJlY3QgdGhlCisgICAgICAvLyBwcm9ibGVtIGVpdGhlciB3YXkuIFRoZSB3YXJuaW5nIGlzIHByaW50ZWQgb25seSBvbiBhIHZhbGlkIENSQworICAgICAgLy8gYmVjYXVzZSBvdGhlcndpc2UgdGhpcyB3YXJuaW5nIHdpbGwgZGlzcGxheSBpbmFwcHJvcHJpYXRlbHkgd2hlbgorICAgICAgLy8gcmVhZGluZyBNQlIgZGlza3MuIElmIHRoZSBDUkMgaXMgaW52YWxpZCwgdGhlbiBhIHdhcm5pbmcgYWJvdXQKKyAgICAgIC8vIHRoYXQgd2lsbCBiZSBzaG93biBsYXRlciwgc28gdGhlIHVzZXIgd2lsbCBzdGlsbCBrbm93IHRoYXQKKyAgICAgIC8vIHNvbWV0aGluZyBpcyB3cm9uZy4KKyAgICAgIGlmICgqY3JjT2spIHsKKyAgICAgICAgIGNlcnIgPDwgIldhcm5pbmc6IFBhcnRpdGlvbiB0YWJsZSBoZWFkZXIgY2xhaW1zIHRoYXQgdGhlIHNpemUgb2YgcGFydGl0aW9uIHRhYmxlXG4iOworICAgICAgICAgY2VyciA8PCAiZW50cmllcyBpcyAiIDw8IHRlbXBIZWFkZXIuc2l6ZU9mUGFydGl0aW9uRW50cmllcyA8PCAiIGJ5dGVzLCBidXQgdGhpcyBwcm9ncmFtICI7CisgICAgICAgICBjZXJyIDw8ICIgc3VwcG9ydHMgb25seSAiIDw8IHNpemVvZihHUFRQYXJ0KSA8PCAiLWJ5dGUgZW50cmllcy5cbiI7CisgICAgICAgICBjZXJyIDw8ICJBZGp1c3RpbmcgYWNjb3JkaW5nbHksIGJ1dCBwYXJ0aXRpb24gdGFibGUgbWF5IGJlIGdhcmJhZ2UuXG4iOworICAgICAgfQorICAgICAgdGVtcEhlYWRlci5zaXplT2ZQYXJ0aXRpb25FbnRyaWVzID0gc2l6ZW9mKEdQVFBhcnQpOworICAgfQorCiAgICBpZiAoYWxsT0sgJiYgKG51bVBhcnRzICE9IHRlbXBIZWFkZXIubnVtUGFydHMpICYmICpjcmNPaykgewogICAgICAgYWxsT0sgPSBTZXRHUFRTaXplKHRlbXBIZWFkZXIubnVtUGFydHMsIDApOwogICAgfQpAQCAtMjEzNSw3ICsyMTY1LDYgQEAKICAgICAgIC8vIENoZWNrIHRvIHNlZSB0aGF0IGV2ZXJ5IHNlY3RvciBiZXR3ZWVuIHRoZSBlYXJsaWVyIG9uZSBhbmQgdGhlCiAgICAgICAvLyByZXF1ZXN0ZWQgb25lIGlzIGNsZWFyLCBhbmQgdGhhdCBpdCdzIG5vdCB0b28gZWFybHkuLi4uCiAgICAgICBpZiAoZWFybGllciA+PSBtYWluSGVhZGVyLmZpcnN0VXNhYmxlTEJBKSB7Ci0gICAgICAgICBzZWN0b3JPSyA9IDE7CiAgICAgICAgICB0ZXN0U2VjdG9yID0gZWFybGllcjsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgIHNlY3Rvck9LID0gSXNGcmVlKHRlc3RTZWN0b3IrKyk7CkBAIC0yMTQ4LDcgKzIxNzcsNiBAQAogCiAgICAgICAvLyBJZiBjb3VsZG4ndCBtb3ZlIHRoZSBzZWN0b3IgZWFybGllciwgdHJ5IHRvIG1vdmUgaXQgbGF0ZXIgaW5zdGVhZC4uLi4KICAgICAgIGlmICgoc2VjdG9yT0sgIT0gMSkgJiYgKGxhdGVyIDw9IG1haW5IZWFkZXIubGFzdFVzYWJsZUxCQSkpIHsKLSAgICAgICAgIHNlY3Rvck9LID0gMTsKICAgICAgICAgIHRlc3RTZWN0b3IgPSBsYXRlcjsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgIHNlY3Rvck9LID0gSXNGcmVlKHRlc3RTZWN0b3ItLSk7CkBAIC0yMzI3LDE4ICsyMzU1LDI4IEBACiB9IC8vIEdQVERhdGE6OkZpbmRMYXN0QXZhaWxhYmxlKCkKIAogLy8gRmluZCB0aGUgbGFzdCBhdmFpbGFibGUgYmxvY2sgaW4gdGhlIGZyZWUgc3BhY2UgcG9pbnRlZCB0byBieSBzdGFydC4KLXVpbnQ2NF90IEdQVERhdGE6OkZpbmRMYXN0SW5GcmVlKHVpbnQ2NF90IHN0YXJ0KSB7Ci0gICB1aW50NjRfdCBuZWFyZXN0U3RhcnQ7CisvLyBJZiBhbGlnbiA9PSB0cnVlLCByZXR1cm5zIHRoZSBsYXN0IHNlY3RvciB0aGF0J3MgYWxpZ25lZCBvbiB0aGUKKy8vIHN5c3RlbSBhbGlnbm1lbnQgdmFsdWUgKHVubGVzcyB0aGF0J3MgbGVzcyB0aGFuIHRoZSBzdGFydCB2YWx1ZSk7CisvLyBpZiBhbGlnbiA9PSBmYWxzZSwgcmV0dXJucyB0aGUgbGFzdCBhdmFpbGFibGUgYmxvY2sgcmVnYXJkbGVzcyBvZgorLy8gYWxpZ25tZW50LiAoVGhlIGFsaWduIHZhcmlhYmxlIGlzIHNldCB0byBmYWxzZSBieSBkZWZhdWx0LikKK3VpbnQ2NF90IEdQVERhdGE6OkZpbmRMYXN0SW5GcmVlKHVpbnQ2NF90IHN0YXJ0LCBib29sIGFsaWduKSB7CisgICB1aW50NjRfdCBuZWFyZXN0RW5kLCBlbmRQbHVzOwogICAgdWludDMyX3QgaTsKIAotICAgbmVhcmVzdFN0YXJ0ID0gbWFpbkhlYWRlci5sYXN0VXNhYmxlTEJBOworICAgbmVhcmVzdEVuZCA9IG1haW5IZWFkZXIubGFzdFVzYWJsZUxCQTsKICAgIGZvciAoaSA9IDA7IGkgPCBudW1QYXJ0czsgaSsrKSB7Ci0gICAgICBpZiAoKG5lYXJlc3RTdGFydCA+IHBhcnRpdGlvbnNbaV0uR2V0Rmlyc3RMQkEoKSkgJiYKKyAgICAgIGlmICgobmVhcmVzdEVuZCA+IHBhcnRpdGlvbnNbaV0uR2V0Rmlyc3RMQkEoKSkgJiYKICAgICAgICAgICAocGFydGl0aW9uc1tpXS5HZXRGaXJzdExCQSgpID4gc3RhcnQpKSB7Ci0gICAgICAgICBuZWFyZXN0U3RhcnQgPSBwYXJ0aXRpb25zW2ldLkdldEZpcnN0TEJBKCkgLSAxOworICAgICAgICAgbmVhcmVzdEVuZCA9IHBhcnRpdGlvbnNbaV0uR2V0Rmlyc3RMQkEoKSAtIDE7CiAgICAgICB9IC8vIGlmCiAgICB9IC8vIGZvcgotICAgcmV0dXJuIChuZWFyZXN0U3RhcnQpOworICAgaWYgKGFsaWduKSB7CisgICAgICAgZW5kUGx1cyA9IG5lYXJlc3RFbmQgKyAxOworICAgICAgIGlmIChBbGlnbigmZW5kUGx1cykgJiYgSXNGcmVlKGVuZFBsdXMgLSAxKSAmJiAoZW5kUGx1cyA+IHN0YXJ0KSkgeworICAgICAgICAgICBuZWFyZXN0RW5kID0gZW5kUGx1cyAtIDE7CisgICAgICAgfSAvLyBpZgorICAgfSAvLyBpZgorICAgcmV0dXJuIChuZWFyZXN0RW5kKTsKIH0gLy8gR1BURGF0YTo6RmluZExhc3RJbkZyZWUoKQogCiAvLyBGaW5kcyB0aGUgdG90YWwgbnVtYmVyIG9mIGZyZWUgYmxvY2tzLCB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIGluIHdoaWNoCkBAIC0yNDE1LDcgKzI0NTMsMTAgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLy8gU2V0IHBhcnRpdGlvbiBhbGlnbm1lbnQgdmFsdWU7IHBhcnRpdGlvbnMgd2lsbCBiZWdpbiBvbiBtdWx0aXBsZXMgb2YKLS8vIHRoZSBzcGVjaWZpZWQgdmFsdWUKKy8vIHRoZSBzcGVjaWZpZWQgdmFsdWUsIGFuZCB0aGUgZGVmYXVsdCBlbmQgdmFsdWVzIHdpbGwgYmUgc2V0IHNvIHRoYXQKKy8vIHBhcnRpdGlvbiBzaXplcyBhcmUgbXVsdGlwbGVzIG9mIHRoaXMgdmFsdWUgaW4gY2dkaXNrIGFuZCBnZGlzaywgdG9vLgorLy8gKEluIHNnZGlzaywgZW5kLWFsaWdubWVudCBpcyBkb25lIG9ubHkgaWYgdGhlICctSScgY29tbWFuZC1saW5lIG9wdGlvbgorLy8gaXMgdXNlZC4pCiB2b2lkIEdQVERhdGE6OlNldEFsaWdubWVudCh1aW50MzJfdCBuKSB7CiAgICBpZiAobiA+IDApIHsKICAgICAgIHNlY3RvckFsaWdubWVudCA9IG47CkBAIC0yNDQ1LDcgKzI0ODYsNyBAQAogLy8gaXMgdXNlZCBvbiBiaWcgZGlza3MgKGFzIHNhZmV0eSBmb3IgQWR2YW5jZWQgRm9ybWF0IGRyaXZlcykuCiAvLyBSZXR1cm5zIHRoZSBjb21wdXRlZCBhbGlnbm1lbnQgdmFsdWUuCiB1aW50MzJfdCBHUFREYXRhOjpDb21wdXRlQWxpZ25tZW50KHZvaWQpIHsKLSAgIHVpbnQzMl90IGkgPSAwLCBmb3VuZCwgZXhwb25lbnQgPSAzMTsKKyAgIHVpbnQzMl90IGkgPSAwLCBmb3VuZCwgZXhwb25lbnQ7CiAgICB1aW50MzJfdCBhbGlnbiA9IERFRkFVTFRfQUxJR05NRU5UOwogCiAgICBpZiAoYmxvY2tTaXplID4gMCkKZGlmZiAtLWdpdCBhL2dwdC5oIGIvZ3B0LmgKaW5kZXggMDcxMmExZi4uNmUxZTBiYiAxMDA2NDQKLS0tIGEvZ3B0LmgKKysrIGIvZ3B0LmgKQEAgLTEsOSArMSwxMiBAQAogLyogZ3B0LmggLS0gR1BUIGFuZCBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9ucywgdHlwZXMsIGFuZAogICAgZnVuY3Rpb25zICovCiAKLS8qIFRoaXMgcHJvZ3JhbSBpcyBjb3B5cmlnaHQgKGMpIDIwMDktMjAxMSBieSBSb2RlcmljayBXLiBTbWl0aC4gSXQgaXMgZGlzdHJpYnV0ZWQKKy8qIFRoaXMgcHJvZ3JhbSBpcyBjb3B5cmlnaHQgKGMpIDIwMDktMjAyMiBieSBSb2RlcmljayBXLiBTbWl0aC4gSXQgaXMgZGlzdHJpYnV0ZWQKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHZlcnNpb24gMiwgYXMgZGV0YWlsZWQgaW4gdGhlIENPUFlJTkcgZmlsZS4gKi8KIAorI2lmbmRlZiBfX0dQVFNUUlVDVFMKKyNkZWZpbmUgX19HUFRTVFJVQ1RTCisKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlICJncHRwYXJ0LmgiCkBAIC0xMiw5ICsxNSw2IEBACiAjaW5jbHVkZSAiYnNkLmgiCiAjaW5jbHVkZSAiZ3B0cGFydC5oIgogCi0jaWZuZGVmIF9fR1BUU1RSVUNUUwotI2RlZmluZSBfX0dQVFNUUlVDVFMKLQogLy8gRGVmYXVsdCB2YWx1ZXMgZm9yIHNlY3RvciBhbGlnbm1lbnQKICNkZWZpbmUgREVGQVVMVF9BTElHTk1FTlQgMjA0OAogI2RlZmluZSBNQVhfQUxJR05NRU5UIDY1NTM2CkBAIC0yNCw4ICsyNCw2IEBACiAvLyBzbWFsbGVzdCBBZHZhbmNlZCBGb3JtYXQgZHJpdmUgSSBrbm93IG9mIGlzIDMyMEdCIGluIHNpemUKICNkZWZpbmUgU01BTExFU1RfQURWQU5DRURfRk9STUFUIFVJTlQ2NF9DKDU4NTkzNzUwMCkKIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBHUFREYXRhIGNsYXNzIGFuZCByZWxhdGVkIHN0cnVjdHVyZXMgKgpAQCAtNjcsNyArNjUsNyBAQAogICAgdWludDMyX3QgbnVtUGFydHM7IC8vICMgb2YgcGFydGl0aW9ucyB0aGUgdGFibGUgY2FuIGhvbGQKICAgIHN0cnVjdCBHUFRIZWFkZXIgc2Vjb25kSGVhZGVyOwogICAgTUJSRGF0YSBwcm90ZWN0aXZlTUJSOwotICAgc3RyaW5nIGRldmljZTsgLy8gZGV2aWNlIGZpbGVuYW1lCisgICBzdGQ6OnN0cmluZyBkZXZpY2U7IC8vIGRldmljZSBmaWxlbmFtZQogICAgRGlza0lPIG15RGlzazsKICAgIHVpbnQzMl90IGJsb2NrU2l6ZTsgLy8gZGV2aWNlIGxvZ2ljYWwgYmxvY2sgc2l6ZQogICAgdWludDMyX3QgcGh5c0Jsb2NrU2l6ZTsgLy8gZGV2aWNlIHBoeXNpY2FsIGJsb2NrIHNpemUgKG9yIDAgaWYgaXQgY2FuJ3QgYmUgZGV0ZXJtaW5lZCkKQEAgLTkzLDcgKzkxLDcgQEAKICAgIC8vIEJhc2ljIG5lY2Vzc2FyeSBmdW5jdGlvbnMuLi4uCiAgICBHUFREYXRhKHZvaWQpOwogICAgR1BURGF0YShjb25zdCBHUFREYXRhICYpOwotICAgR1BURGF0YShzdHJpbmcgZGV2aWNlRmlsZW5hbWUpOworICAgR1BURGF0YShzdGQ6OnN0cmluZyBkZXZpY2VGaWxlbmFtZSk7CiAgICB2aXJ0dWFsIH5HUFREYXRhKHZvaWQpOwogICAgR1BURGF0YSAmIG9wZXJhdG9yPShjb25zdCBHUFREYXRhICYgb3JpZyk7CiAKQEAgLTExMSwxOSArMTA5LDE5IEBACiAgICBpbnQgRmluZEluc2FuZVBhcnRpdGlvbnModm9pZCk7CiAKICAgIC8vIExvYWQgb3Igc2F2ZSBkYXRhIGZyb20vdG8gZGlzawotICAgaW50IFNldERpc2soY29uc3Qgc3RyaW5nICYgZGV2aWNlRmlsZW5hbWUpOworICAgaW50IFNldERpc2soY29uc3Qgc3RkOjpzdHJpbmcgJiBkZXZpY2VGaWxlbmFtZSk7CiAgICBpbnQgU2V0RGlzayhjb25zdCBEaXNrSU8gJiBkaXNrKTsKICAgIERpc2tJTyogR2V0RGlzayh2b2lkKSB7cmV0dXJuICZteURpc2s7fQotICAgaW50IExvYWRNQlIoY29uc3Qgc3RyaW5nICYgZikge3JldHVybiBwcm90ZWN0aXZlTUJSLlJlYWRNQlJEYXRhKGYpO30KKyAgIGludCBMb2FkTUJSKGNvbnN0IHN0ZDo6c3RyaW5nICYgZikge3JldHVybiBwcm90ZWN0aXZlTUJSLlJlYWRNQlJEYXRhKGYpO30KICAgIGludCBXcml0ZVByb3RlY3RpdmVNQlIodm9pZCkge3JldHVybiBwcm90ZWN0aXZlTUJSLldyaXRlTUJSRGF0YSgmbXlEaXNrKTt9CiAgICB2b2lkIFBhcnRpdGlvblNjYW4odm9pZCk7Ci0gICBpbnQgTG9hZFBhcnRpdGlvbnMoY29uc3Qgc3RyaW5nICYgZGV2aWNlRmlsZW5hbWUpOworICAgaW50IExvYWRQYXJ0aXRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nICYgZGV2aWNlRmlsZW5hbWUpOwogICAgaW50IEZvcmNlTG9hZEdQVERhdGEodm9pZCk7CiAgICBpbnQgTG9hZE1haW5UYWJsZSh2b2lkKTsKICAgIGludCBMb2FkU2Vjb25kVGFibGVBc01haW4odm9pZCk7CiAgICBpbnQgU2F2ZUdQVERhdGEoaW50IHF1aWV0ID0gMCk7Ci0gICBpbnQgU2F2ZUdQVEJhY2t1cChjb25zdCBzdHJpbmcgJiBmaWxlbmFtZSk7Ci0gICBpbnQgTG9hZEdQVEJhY2t1cChjb25zdCBzdHJpbmcgJiBmaWxlbmFtZSk7CisgICBpbnQgU2F2ZUdQVEJhY2t1cChjb25zdCBzdGQ6OnN0cmluZyAmIGZpbGVuYW1lKTsKKyAgIGludCBMb2FkR1BUQmFja3VwKGNvbnN0IHN0ZDo6c3RyaW5nICYgZmlsZW5hbWUpOwogICAgaW50IFNhdmVNQlIodm9pZCk7CiAgICBpbnQgRGVzdHJveUdQVCh2b2lkKTsKICAgIGludCBEZXN0cm95TUJSKHZvaWQpOwpAQCAtMTg2LDcgKzE4NCw3IEBACiAgICB1aW50NjRfdCBGaW5kRmlyc3RVc2VkTEJBKHZvaWQpOwogICAgdWludDY0X3QgRmluZEZpcnN0SW5MYXJnZXN0KHZvaWQpOwogICAgdWludDY0X3QgRmluZExhc3RBdmFpbGFibGUoKTsKLSAgIHVpbnQ2NF90IEZpbmRMYXN0SW5GcmVlKHVpbnQ2NF90IHN0YXJ0KTsKKyAgIHVpbnQ2NF90IEZpbmRMYXN0SW5GcmVlKHVpbnQ2NF90IHN0YXJ0LCBib29sIGFsaWduID0gZmFsc2UpOwogICAgdWludDY0X3QgRmluZEZyZWVCbG9ja3ModWludDMyX3QgKm51bVNlZ21lbnRzLCB1aW50NjRfdCAqbGFyZ2VzdFNlZ21lbnQpOwogICAgaW50IElzRnJlZSh1aW50NjRfdCBzZWN0b3IsIHVpbnQzMl90ICpwYXJ0TnVtID0gTlVMTCk7CiAgICBpbnQgSXNGcmVlUGFydE51bSh1aW50MzJfdCBwYXJ0TnVtKTsKQEAgLTIwNSw5ICsyMDMsOSBAQAogICAgdm9pZCBSZXZlcnNlUGFydGl0aW9uQnl0ZXMoKTsgLy8gZm9yIGVuZGlhbm5lc3MKIAogICAgLy8gQXR0cmlidXRlcyBmdW5jdGlvbnMKLSAgIGludCBNYW5hZ2VBdHRyaWJ1dGVzKGludCBwYXJ0TnVtLCBjb25zdCBzdHJpbmcgJiBjb21tYW5kLCBjb25zdCBzdHJpbmcgJiBiaXRzKTsKKyAgIGludCBNYW5hZ2VBdHRyaWJ1dGVzKGludCBwYXJ0TnVtLCBjb25zdCBzdGQ6OnN0cmluZyAmIGNvbW1hbmQsIGNvbnN0IHN0ZDo6c3RyaW5nICYgYml0cyk7CiAgICB2b2lkIFNob3dBdHRyaWJ1dGVzKGNvbnN0IHVpbnQzMl90IHBhcnROdW0pOwotICAgdm9pZCBHZXRBdHRyaWJ1dGUoY29uc3QgdWludDMyX3QgcGFydE51bSwgY29uc3Qgc3RyaW5nJiBhdHRyaWJ1dGVCaXRzKTsKKyAgIHZvaWQgR2V0QXR0cmlidXRlKGNvbnN0IHVpbnQzMl90IHBhcnROdW0sIGNvbnN0IHN0ZDo6c3RyaW5nJiBhdHRyaWJ1dGVCaXRzKTsKIAogfTsgLy8gY2xhc3MgR1BURGF0YQogCmRpZmYgLS1naXQgYS9ncHRjbC5jYyBiL2dwdGNsLmNjCmluZGV4IGNiMTcwMWQuLjgxNjI4NjggMTAwNjQ0Ci0tLSBhL2dwdGNsLmNjCisrKyBiL2dwdGNsLmNjCkBAIC0xLDcgKzEsNyBAQAogLyoKICAgICBJbXBsZW1lbnRhdGlvbiBvZiBHUFREYXRhIGNsYXNzIGRlcml2YXRpdmUgd2l0aCBwb3B0LWJhc2VkIGNvbW1hbmQKICAgICBsaW5lIHByb2Nlc3NpbmcKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNCBSb2RlcmljayBXLiBTbWl0aAorICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDIyIFJvZGVyaWNrIFcuIFNtaXRoCiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNSwxMCArMjUsMTMgQEAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgImdwdGNsLmgiCiAKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKIEdQVERhdGFDTDo6R1BURGF0YUNMKHZvaWQpIHsKICAgIGF0dHJpYnV0ZU9wZXJhdGlvbiA9IGJhY2t1cEZpbGUgPSBwYXJ0TmFtZSA9IGh5YnJpZHMgPSBuZXdQYXJ0SW5mbyA9IE5VTEw7CiAgICBtYnJQYXJ0cyA9IHR3b1BhcnRzID0gb3V0RGV2aWNlID0gdHlwZUNvZGUgPSBwYXJ0R1VJRCA9IGRpc2tHVUlEID0gTlVMTDsKICAgIGFsaWdubWVudCA9IERFRkFVTFRfQUxJR05NRU5UOworICAgYWxpZ25FbmQgPSBmYWxzZTsKICAgIGRlbGV0ZVBhcnROdW0gPSBpbmZvUGFydE51bSA9IGxhcmdlc3RQYXJ0TnVtID0gYnNkUGFydE51bSA9IDA7CiAgICB0YWJsZVNpemUgPSBHUFRfU0laRTsKIH0gLy8gR1BURGF0YUNMIGNvbnN0cnVjdG9yCkBAIC02Myw2ICs2Niw3IEBACiAgICBHUFREYXRhIHNlY29uZERldmljZTsKICAgIGludCBvcHQsIG51bU9wdGlvbnMgPSAwLCBzYXZlRGF0YSA9IDAsIG5ldmVyU2F2ZURhdGEgPSAwOwogICAgaW50IHBhcnROdW0gPSAwLCBuZXdQYXJ0TnVtID0gLTEsIHNhdmVOb25HUFQgPSAxLCByZXR2YWwgPSAwLCBwcmV0ZW5kID0gMDsKKyAgIGludCBieXRlU3dhcFBhcnROdW0gPSAwOwogICAgdWludDY0X3QgbG93LCBoaWdoLCBzdGFydFNlY3RvciwgZW5kU2VjdG9yLCBzU2l6ZSwgbWFpblRhYmxlTEJBOwogICAgdWludDY0X3QgdGVtcDsgLy8gdGVtcG9yYXJ5IHZhcmlhYmxlOyBmcmVlIHRvIHVzZSBpbiBhbnkgY2FzZQogICAgY2hhciAqZGV2aWNlOwpAQCAtNzUsNiArNzksNyBAQAogICAgICAgICAgICJsaXN0fFtwYXJ0bnVtOnNob3d8b3J8bmFuZHx4b3J8PXxzZXR8Y2xlYXJ8dG9nZ2xlfGdldFs6Yml0bnVtfGhleGJpdG1hc2tdXSJ9LAogICAgICAgeyJzZXQtYWxpZ25tZW50IiwgJ2EnLCBQT1BUX0FSR19JTlQsICZhbGlnbm1lbnQsICdhJywgInNldCBzZWN0b3IgYWxpZ25tZW50IiwgInZhbHVlIn0sCiAgICAgICB7ImJhY2t1cCIsICdiJywgUE9QVF9BUkdfU1RSSU5HLCAmYmFja3VwRmlsZSwgJ2InLCAiYmFja3VwIEdQVCB0byBmaWxlIiwgImZpbGUifSwKKyAgICAgIHsiYnl0ZS1zd2FwLW5hbWUiLCAnQicsICBQT1BUX0FSR19JTlQsICZieXRlU3dhcFBhcnROdW0sICdCJywgImJ5dGUtc3dhcCBwYXJ0aXRpb24ncyBuYW1lIiwgInBhcnRudW0ifSwKICAgICAgIHsiY2hhbmdlLW5hbWUiLCAnYycsIFBPUFRfQVJHX1NUUklORywgJnBhcnROYW1lLCAnYycsICJjaGFuZ2UgcGFydGl0aW9uJ3MgbmFtZSIsICJwYXJ0bnVtOm5hbWUifSwKICAgICAgIHsicmVjb21wdXRlLWNocyIsICdDJywgUE9QVF9BUkdfTk9ORSwgTlVMTCwgJ0MnLCAicmVjb21wdXRlIENIUyB2YWx1ZXMgaW4gcHJvdGVjdGl2ZS9oeWJyaWQgTUJSIiwgIiJ9LAogICAgICAgeyJkZWxldGUiLCAnZCcsIFBPUFRfQVJHX0lOVCwgJmRlbGV0ZVBhcnROdW0sICdkJywgImRlbGV0ZSBhIHBhcnRpdGlvbiIsICJwYXJ0bnVtIn0sCkBAIC04Nyw2ICs5Miw3IEBACiAgICAgICB7InJhbmRvbWl6ZS1ndWlkcyIsICdHJywgUE9QVF9BUkdfTk9ORSwgTlVMTCwgJ0cnLCAicmFuZG9taXplIGRpc2sgYW5kIHBhcnRpdGlvbiBHVUlEcyIsICIifSwKICAgICAgIHsiaHlicmlkIiwgJ2gnLCBQT1BUX0FSR19TVFJJTkcsICZoeWJyaWRzLCAnaCcsICJjcmVhdGUgaHlicmlkIE1CUiIsICJwYXJ0bnVtWzpwYXJ0bnVtLi4uXVs6RUVdIn0sCiAgICAgICB7ImluZm8iLCAnaScsIFBPUFRfQVJHX0lOVCwgJmluZm9QYXJ0TnVtLCAnaScsICJzaG93IGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHBhcnRpdGlvbiIsICJwYXJ0bnVtIn0sCisgICAgICB7ImFsaWduLWVuZCIsICdJJywgUE9QVF9BUkdfTk9ORSwgTlVMTCwgJ0knLCAiYWxpZ24gcGFydGl0aW9uIGVuZCBwb2ludHMiLCAiIn0sCiAgICAgICB7Im1vdmUtbWFpbi10YWJsZSIsICdqJywgUE9QVF9BUkdfSU5ULCAmbWFpblRhYmxlTEJBLCAnaicsICJhZGp1c3QgdGhlIGxvY2F0aW9uIG9mIHRoZSBtYWluIHBhcnRpdGlvbiB0YWJsZSIsICJzZWN0b3IifSwKICAgICAgIHsibG9hZC1iYWNrdXAiLCAnbCcsIFBPUFRfQVJHX1NUUklORywgJmJhY2t1cEZpbGUsICdsJywgImxvYWQgR1BUIGJhY2t1cCBmcm9tIGZpbGUiLCAiZmlsZSJ9LAogICAgICAgeyJsaXN0LXR5cGVzIiwgJ0wnLCBQT1BUX0FSR19OT05FLCBOVUxMLCAnTCcsICJsaXN0IGtub3duIHBhcnRpdGlvbiB0eXBlcyIsICIifSwKQEAgLTE0OSw5ICsxNTUsMTAgQEAKIAogICAgLy8gQXNzdW1lIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQgaXMgdGhlIGRldmljZSBmaWxlbmFtZS4uLi4KICAgIGRldmljZSA9IChjaGFyKikgcG9wdEdldEFyZyhwb3B0Q29uKTsKLSAgIHBvcHRSZXNldENvbnRleHQocG9wdENvbik7CiAKICAgIGlmIChkZXZpY2UgIT0gTlVMTCkgeworICAgICAgZGV2aWNlID0gc3RyZHVwKGRldmljZSk7CisgICAgICBwb3B0UmVzZXRDb250ZXh0KHBvcHRDb24pOwogICAgICAgSnVzdExvb2tpbmcoKTsgLy8gcmVzZXQgYXMgbmVjZXNzYXJ5CiAgICAgICBCZVF1aWV0KCk7IC8vIFRlbGwgY2FsbGVkIGZ1bmN0aW9ucyB0byBiZSBsZXNzIHZlcmJvc2UgJiBpbnRlcmFjdGl2ZQogICAgICAgaWYgKExvYWRQYXJ0aXRpb25zKChzdHJpbmcpIGRldmljZSkpIHsKQEAgLTE5MCwxNyArMTk3LDI0IEBACiAgICAgICAgICAgICAgICBjYXNlICdhJzoKICAgICAgICAgICAgICAgICAgIFNldEFsaWdubWVudChhbGlnbm1lbnQpOwogICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICBjYXNlICdCJzoKKyAgICAgICAgICAgICAgICAgIGlmIChJc1VzZWRQYXJ0TnVtKGJ5dGVTd2FwUGFydE51bSAtIDEpKSB7CisgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25zW2J5dGVTd2FwUGFydE51bSAtIDFdLlJldmVyc2VOYW1lQnl0ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIkNoYW5nZWQgcGFydGl0aW9uICIgPDwgYnl0ZVN3YXBQYXJ0TnVtIDw8ICIncyBuYW1lIHRvICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGFydGl0aW9uc1tieXRlU3dhcFBhcnROdW0gLSAxXS5HZXREZXNjcmlwdGlvbigpIDw8ICJcbiI7CisgICAgICAgICAgICAgICAgICAgICBKdXN0TG9va2luZygwKTsKKyAgICAgICAgICAgICAgICAgICAgIHNhdmVEYXRhID0gMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnYic6CiAgICAgICAgICAgICAgICAgICBTYXZlR1BUQmFja3VwKGJhY2t1cEZpbGUpOwogICAgICAgICAgICAgICAgICAgZnJlZShiYWNrdXBGaWxlKTsKICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICAgICAgICBjb3V0IDw8ICJTZXR0aW5nIG5hbWUhXG4iOwogICAgICAgICAgICAgICAgICAgSnVzdExvb2tpbmcoMCk7CiAgICAgICAgICAgICAgICAgICBwYXJ0TnVtID0gKGludCkgR2V0SW50KHBhcnROYW1lLCAxKSAtIDE7CiAgICAgICAgICAgICAgICAgICBpZiAocGFydE51bSA8IDApCiAgICAgICAgICAgICAgICAgICAgICBwYXJ0TnVtID0gbmV3UGFydE51bTsKLSAgICAgICAgICAgICAgICAgIGNvdXQgPDwgInBhcnROdW0gaXMgIiA8PCBwYXJ0TnVtIDw8ICJcbiI7CiAgICAgICAgICAgICAgICAgICBpZiAoKHBhcnROdW0gPj0gMCkgJiYgKHBhcnROdW0gPCAoaW50KSBHZXROdW1QYXJ0cygpKSkgewogICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IEdldFN0cmluZyhwYXJ0TmFtZSwgMik7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoU2V0TmFtZShwYXJ0TnVtLCAoVW5pY29kZVN0cmluZykgbmFtZS5jX3N0cigpKSkgewpAQCAtMjYyLDYgKzI3Niw5IEBACiAgICAgICAgICAgICAgICBjYXNlICdpJzoKICAgICAgICAgICAgICAgICAgIFNob3dQYXJ0RGV0YWlscyhpbmZvUGFydE51bSAtIDEpOwogICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICBjYXNlICdJJzoKKyAgICAgICAgICAgICAgICAgIGFsaWduRW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnaic6CiAgICAgICAgICAgICAgICAgICAgaWYgKE1vdmVNYWluVGFibGUobWFpblRhYmxlTEJBKSkgewogICAgICAgICAgICAgICAgICAgICAgICBKdXN0TG9va2luZygwKTsKQEAgLTI5Nyw5ICszMTQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgbmV3UGFydE51bSA9IEZpbmRGaXJzdEZyZWVQYXJ0KCk7CiAgICAgICAgICAgICAgICAgICBsb3cgPSBGaW5kRmlyc3RJbkxhcmdlc3QoKTsKICAgICAgICAgICAgICAgICAgIEFsaWduKCZsb3cpOwotICAgICAgICAgICAgICAgICAgaGlnaCA9IEZpbmRMYXN0SW5GcmVlKGxvdyk7Ci0gICAgICAgICAgICAgICAgICBzdGFydFNlY3RvciA9IEllZWVUb0ludChHZXRTdHJpbmcobmV3UGFydEluZm8sIDIpLCBzU2l6ZSwgbG93LCBoaWdoLCBsb3cpOwotICAgICAgICAgICAgICAgICAgZW5kU2VjdG9yID0gSWVlZVRvSW50KEdldFN0cmluZyhuZXdQYXJ0SW5mbywgMyksIHNTaXplLCBzdGFydFNlY3RvciwgaGlnaCwgaGlnaCk7CisgICAgICAgICAgICAgICAgICBoaWdoID0gRmluZExhc3RJbkZyZWUobG93LCBhbGlnbkVuZCk7CisgICAgICAgICAgICAgICAgICBzdGFydFNlY3RvciA9IEllZWVUb0ludChHZXRTdHJpbmcobmV3UGFydEluZm8sIDIpLCBzU2l6ZSwgbG93LCBoaWdoLCBzZWN0b3JBbGlnbm1lbnQsIGxvdyk7CisgICAgICAgICAgICAgICAgICBlbmRTZWN0b3IgPSBJZWVlVG9JbnQoR2V0U3RyaW5nKG5ld1BhcnRJbmZvLCAzKSwgc1NpemUsIHN0YXJ0U2VjdG9yLCBoaWdoLCBzZWN0b3JBbGlnbm1lbnQsIGhpZ2gpOwogICAgICAgICAgICAgICAgICAgaWYgKENyZWF0ZVBhcnRpdGlvbihuZXdQYXJ0TnVtLCBzdGFydFNlY3RvciwgZW5kU2VjdG9yKSkgewogICAgICAgICAgICAgICAgICAgICAgc2F2ZURhdGEgPSAxOwogICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTMxMyw5ICszMzAsMTEgQEAKICAgICAgICAgICAgICAgICAgIEp1c3RMb29raW5nKDApOwogICAgICAgICAgICAgICAgICAgc3RhcnRTZWN0b3IgPSBGaW5kRmlyc3RJbkxhcmdlc3QoKTsKICAgICAgICAgICAgICAgICAgIEFsaWduKCZzdGFydFNlY3Rvcik7Ci0gICAgICAgICAgICAgICAgICBlbmRTZWN0b3IgPSBGaW5kTGFzdEluRnJlZShzdGFydFNlY3Rvcik7Ci0gICAgICAgICAgICAgICAgICBpZiAobGFyZ2VzdFBhcnROdW0gPD0gMCkKKyAgICAgICAgICAgICAgICAgIGVuZFNlY3RvciA9IEZpbmRMYXN0SW5GcmVlKHN0YXJ0U2VjdG9yLCBhbGlnbkVuZCk7CisgICAgICAgICAgICAgICAgICBpZiAobGFyZ2VzdFBhcnROdW0gPD0gMCkgewogICAgICAgICAgICAgICAgICAgICAgbGFyZ2VzdFBhcnROdW0gPSBGaW5kRmlyc3RGcmVlUGFydCgpICsgMTsKKyAgICAgICAgICAgICAgICAgICAgIG5ld1BhcnROdW0gPSBsYXJnZXN0UGFydE51bSAtIDE7CisgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICBpZiAoQ3JlYXRlUGFydGl0aW9uKGxhcmdlc3RQYXJ0TnVtIC0gMSwgc3RhcnRTZWN0b3IsIGVuZFNlY3RvcikpIHsKICAgICAgICAgICAgICAgICAgICAgIHNhdmVEYXRhID0gMTsKICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zNzksNyArMzk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVSYXdbcGFydE51bV0gPSBTdHJUb0hleChyYXcsIDApOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgdHlwZUhlbHBlciA9IEdldFN0cmluZyh0eXBlQ29kZSwgMik7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVIZWxwZXIgIT0gKEdVSUREYXRhKSAiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIikgJiYKKyAgICAgICAgICAgICAgICAgICAgIGlmICgodHlwZUhlbHBlciAhPSBQYXJ0VHlwZTo6dW51c2VkUGFydFR5cGUpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgKENoYW5nZVBhcnRUeXBlKHBhcnROdW0sIHR5cGVIZWxwZXIpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZURhdGEgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTQ4Niw2ICs1MDUsNyBAQAogICAgICAgICAgY2VyciA8PCAiRXJyb3IgZW5jb3VudGVyZWQ7IG5vdCBzYXZpbmcgY2hhbmdlcy5cbiI7CiAgICAgICAgICByZXR2YWwgPSA0OwogICAgICAgfSAvLyBpZgorICAgICAgZnJlZShkZXZpY2UpOwogICAgfSAvLyBpZiAoZGV2aWNlICE9IE5VTEwpCiAgICBwb3B0RnJlZUNvbnRleHQocG9wdENvbik7CiAgICByZXR1cm4gcmV0dmFsOwpAQCAtNDk0LDcgKzUxNCw3IEBACiAvLyBDcmVhdGUgYSBoeWJyaWQgb3IgcmVndWxhciBNQlIgZnJvbSBHUFQgZGF0YSBzdHJ1Y3R1cmVzCiBpbnQgR1BURGF0YUNMOjpCdWlsZE1CUihjaGFyKiBhcmd1bWVudCwgaW50IGlzSHlicmlkKSB7CiAgICBpbnQgbnVtUGFydHMsIGFsbE9LID0gMSwgaSwgb3JpZ1BhcnROdW07Ci0gICBpbnQgZWVMYXN0LCBtYnJOdW0gPSAwOworICAgaW50IGVlTGFzdCA9IDAsIG1ick51bSA9IDA7CiAgICBNQlJQYXJ0IG5ld1BhcnQ7CiAgICBCYXNpY01CUkRhdGEgbmV3TUJSOwogCmRpZmYgLS1naXQgYS9ncHRjbC5oIGIvZ3B0Y2wuaAppbmRleCBkOGZhOWZmLi5iOTM3NDMwIDEwMDY0NAotLS0gYS9ncHRjbC5oCisrKyBiL2dwdGNsLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICAgIEltcGxlbWVudGF0aW9uIG9mIEdQVERhdGEgY2xhc3MgZGVyaXZhdGl2ZSB3aXRoIHBvcHQtYmFzZWQgY29tbWFuZAogICAgIGxpbmUgcHJvY2Vzc2luZwotICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIFJvZGVyaWNrIFcuIFNtaXRoCisgICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMjIgUm9kZXJpY2sgVy4gU21pdGgKIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRlIDxwb3B0Lmg+CiAjaW5jbHVkZSA8bWFwPgogCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCiBjbGFzcyBHUFREYXRhQ0wgOiBwdWJsaWMgR1BURGF0YSB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgICAvLyBGb2xsb3dpbmcgYXJlIHZhcmlhYmxlcyBhc3NvY2lhdGVkIHdpdGggcG9wdCBwYXJhbWV0ZXJzLi4uLgpAQCAtMzUsNiArMzMsNyBAQAogICAgICAgY2hhciAqbmV3UGFydEluZm8sICptYnJQYXJ0cywgKnR3b1BhcnRzLCAqb3V0RGV2aWNlLCAqdHlwZUNvZGU7CiAgICAgICBjaGFyICpwYXJ0R1VJRCwgKmRpc2tHVUlEOwogICAgICAgaW50IGFsaWdubWVudCwgZGVsZXRlUGFydE51bSwgaW5mb1BhcnROdW0sIGxhcmdlc3RQYXJ0TnVtLCBic2RQYXJ0TnVtOworICAgICAgYm9vbCBhbGlnbkVuZDsKICAgICAgIHVpbnQzMl90IHRhYmxlU2l6ZTsKICAgICAgIHBvcHRDb250ZXh0IHBvcHRDb247CiAgICAgICBzdGQ6Om1hcDxpbnQsIGNoYXI+IHR5cGVSYXc7CkBAIC00MiwxNCArNDEsMTQgQEAKICAgICAgIGludCBCdWlsZE1CUihjaGFyKiBhcmd1bWVudCwgaW50IGlzSHlicmlkKTsKICAgIHB1YmxpYzoKICAgICAgIEdQVERhdGFDTCh2b2lkKTsKLSAgICAgIEdQVERhdGFDTChzdHJpbmcgZmlsZW5hbWUpOworICAgICAgR1BURGF0YUNMKHN0ZDo6c3RyaW5nIGZpbGVuYW1lKTsKICAgICAgIH5HUFREYXRhQ0wodm9pZCk7Ci0gICAgICB2b2lkIExvYWRCYWNrdXBGaWxlKHN0cmluZyBiYWNrdXBGaWxlLCBpbnQgJnNhdmVEYXRhLCBpbnQgJm5ldmVyU2F2ZURhdGEpOworICAgICAgdm9pZCBMb2FkQmFja3VwRmlsZShzdGQ6OnN0cmluZyBiYWNrdXBGaWxlLCBpbnQgJnNhdmVEYXRhLCBpbnQgJm5ldmVyU2F2ZURhdGEpOwogICAgICAgaW50IERvT3B0aW9ucyhpbnQgYXJnYywgY2hhciogYXJndltdKTsKIH07IC8vIGNsYXNzIEdQVERhdGFDTAogCiBpbnQgQ291bnRDb2xvbnMoY2hhciogYXJndW1lbnQpOwotdWludDY0X3QgR2V0SW50KGNvbnN0IHN0cmluZyAmIGFyZ3VtZW50LCBpbnQgaXRlbU51bSk7Ci1zdHJpbmcgR2V0U3RyaW5nKHN0cmluZyBhcmd1bWVudCwgaW50IGl0ZW1OdW0pOwordWludDY0X3QgR2V0SW50KGNvbnN0IHN0ZDo6c3RyaW5nICYgYXJndW1lbnQsIGludCBpdGVtTnVtKTsKK3N0ZDo6c3RyaW5nIEdldFN0cmluZyhzdGQ6OnN0cmluZyBhcmd1bWVudCwgaW50IGl0ZW1OdW0pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2dwdGN1cnNlcy5jYyBiL2dwdGN1cnNlcy5jYwppbmRleCA0ZWJmZGUxLi42NGNjNTE0IDEwMDY0NAotLS0gYS9ncHRjdXJzZXMuY2MKKysrIGIvZ3B0Y3Vyc2VzLmNjCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICAgIEltcGxlbWVudGF0aW9uIG9mIEdQVERhdGEgY2xhc3MgZGVyaXZhdGl2ZSB3aXRoIGN1cnNlcy1iYXNlZCB0ZXh0LW1vZGUKICAqICAgIGludGVyYWN0aW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBSb2RlcmljayBXLiBTbWl0aAorICogICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMjIgUm9kZXJpY2sgVy4gU21pdGgKICAqCiAgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIzLDcgKzIzLDExIEBACiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHNzdHJlYW0+CisjaWYgZGVmaW5lZCAoX19BUFBMRV9fKSB8fCAoX19GcmVlQlNEX18pCiAjaW5jbHVkZSA8bmN1cnNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxuY3Vyc2Vzdy9uY3Vyc2VzLmg+CisjZW5kaWYKICNpbmNsdWRlICJncHRjdXJzZXMuaCIKICNpbmNsdWRlICJzdXBwb3J0LmgiCiAKQEAgLTg2LDcgKzkwLDcgQEAKIC8vIHVucGFydGl0aW9uZWQgc3BhY2Ugb24gdGhlIGRpc2suCiAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgU3BhY2VzIGNyZWF0ZWQuCiBpbnQgR1BURGF0YUN1cnNlczo6TWFrZVNwYWNlc0Zyb21QYXJ0cyh2b2lkKSB7Ci0gICB1aW50IGk7CisgICB1aW50MzJfdCBpOwogICAgU3BhY2UgKnRlbXBTcGFjZTsKIAogICAgRW1wdHlTcGFjZXMoKTsKQEAgLTIzNSwyMiArMjM5LDIyIEBACiAgICAgICBDbGVhckxpbmUobGluZU51bSk7CiAgICAgICBpZiAoc3BhY2UtPnBhcnROdW0gPT0gLTEpIHsgLy8gc3BhY2UgaXMgZW1wdHkKICAgICAgICAgIG1vdmUobGluZU51bSwgMTIpOwotICAgICAgICAgcHJpbnR3KEJ5dGVzVG9JZWVlKChzcGFjZS0+bGFzdExCQSAtIHNwYWNlLT5maXJzdExCQSArIDEpLCBibG9ja1NpemUpLmNfc3RyKCkpOworICAgICAgICAgcHJpbnR3KCIlcyIsIEJ5dGVzVG9JZWVlKChzcGFjZS0+bGFzdExCQSAtIHNwYWNlLT5maXJzdExCQSArIDEpLCBibG9ja1NpemUpLmNfc3RyKCkpOwogICAgICAgICAgbW92ZShsaW5lTnVtLCAyNCk7CiAgICAgICAgICBwcmludHcoImZyZWUgc3BhY2UiKTsKICAgICAgIH0gZWxzZSB7IC8vIHNwYWNlIGhvbGRzIGEgcGFydGl0aW9uCiAgICAgICAgICBtb3ZlKGxpbmVOdW0sIDMpOwogICAgICAgICAgcHJpbnR3KCIlZCIsIHNwYWNlLT5wYXJ0TnVtICsgMSk7CiAgICAgICAgICBtb3ZlKGxpbmVOdW0sIDEyKTsKLSAgICAgICAgIHByaW50dyhCeXRlc1RvSWVlZSgoc3BhY2UtPmxhc3RMQkEgLSBzcGFjZS0+Zmlyc3RMQkEgKyAxKSwgYmxvY2tTaXplKS5jX3N0cigpKTsKKyAgICAgICAgIHByaW50dygiJXMiLCBCeXRlc1RvSWVlZSgoc3BhY2UtPmxhc3RMQkEgLSBzcGFjZS0+Zmlyc3RMQkEgKyAxKSwgYmxvY2tTaXplKS5jX3N0cigpKTsKICAgICAgICAgIG1vdmUobGluZU51bSwgMjQpOwotICAgICAgICAgcHJpbnR3KHNwYWNlLT5vcmlnUGFydC0+R2V0VHlwZU5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgIHByaW50dygiJXMiLCBzcGFjZS0+b3JpZ1BhcnQtPkdldFR5cGVOYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICBtb3ZlKGxpbmVOdW0sIDUwKTsKICAgICAgICAgICNpZmRlZiBVU0VfVVRGMTYKICAgICAgICAgIHNwYWNlLT5vcmlnUGFydC0+R2V0RGVzY3JpcHRpb24oKS5leHRyYWN0KDAsIDM5LCB0ZW1wLCAzOSk7CiAgICAgICAgICBwcmludHcodGVtcCk7CiAgICAgICAgICAjZWxzZQotICAgICAgICAgcHJpbnR3KHNwYWNlLT5vcmlnUGFydC0+R2V0RGVzY3JpcHRpb24oKS5jX3N0cigpKTsKKyAgICAgICAgIHByaW50dygiJXMiLCBzcGFjZS0+b3JpZ1BhcnQtPkdldERlc2NyaXB0aW9uKCkuY19zdHIoKSk7CiAgICAgICAgICAjZW5kaWYKICAgICAgIH0gLy8gaWYvZWxzZQogICAgfSAvLyBpZgpAQCAtMjY3LDEwICsyNzEsMTAgQEAKIAogICAgbW92ZShsaW5lTnVtKyssIDApOwogICAgdGhlTGluZSA9ICJQYXJ0LiAjICAgICBTaXplICAgICAgICBQYXJ0aXRpb24gVHlwZSAgICAgICAgICAgIFBhcnRpdGlvbiBOYW1lIjsKLSAgIHByaW50dyh0aGVMaW5lLmNfc3RyKCkpOworICAgcHJpbnR3KCIlcyIsIHRoZUxpbmUuY19zdHIoKSk7CiAgICBtb3ZlKGxpbmVOdW0rKywgMCk7CiAgICB0aGVMaW5lID0gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iOwotICAgcHJpbnR3KHRoZUxpbmUuY19zdHIoKSk7CisgICBwcmludHcoIiVzIiwgdGhlTGluZS5jX3N0cigpKTsKICAgIG51bVRvU2hvdyA9IExJTkVTIC0gUkVTRVJWRURfVE9QIC0gUkVTRVJWRURfQk9UVE9NOwogICAgcGFnZU51bSA9IHNlbGVjdGVkIC8gbnVtVG9TaG93OwogICAgZm9yIChpID0gcGFnZU51bSAqIG51bVRvU2hvdzsgaSA8PSAocGFnZU51bSArIDEpICogbnVtVG9TaG93IC0gMTsgaSsrKSB7CkBAIC0zMjksMTMgKzMzMywxMyBAQAogICAgcHJpbnR3KCJQYXJ0aXRpb24gR1VJRCBjb2RlOiAlcyAoJXMpXG4iLCBwYXJ0aXRpb25zW3BhcnROdW1dLkdldFR5cGUoKS5Bc1N0cmluZygpLmNfc3RyKCksCiAgICAgICAgICAgcGFydGl0aW9uc1twYXJ0TnVtXS5HZXRUeXBlTmFtZSgpLmNfc3RyKCkpOwogICAgcHJpbnR3KCJQYXJ0aXRpb24gdW5pcXVlIEdVSUQ6ICVzXG4iLCBwYXJ0aXRpb25zW3BhcnROdW1dLkdldFVuaXF1ZUdVSUQoKS5Bc1N0cmluZygpLmNfc3RyKCkpOwotICAgcHJpbnR3KCJGaXJzdCBzZWN0b3I6ICVsbGQgKGF0ICVzKVxuIiwgcGFydGl0aW9uc1twYXJ0TnVtXS5HZXRGaXJzdExCQSgpLAorICAgcHJpbnR3KCJGaXJzdCBzZWN0b3I6ICVsbHUgKGF0ICVzKVxuIiwgKGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQpIHBhcnRpdGlvbnNbcGFydE51bV0uR2V0Rmlyc3RMQkEoKSwKICAgICAgICAgICBCeXRlc1RvSWVlZShwYXJ0aXRpb25zW3BhcnROdW1dLkdldEZpcnN0TEJBKCksIGJsb2NrU2l6ZSkuY19zdHIoKSk7Ci0gICBwcmludHcoIkxhc3Qgc2VjdG9yOiAlbGxkIChhdCAlcylcbiIsIHBhcnRpdGlvbnNbcGFydE51bV0uR2V0TGFzdExCQSgpLAorICAgcHJpbnR3KCJMYXN0IHNlY3RvcjogJWxsdSAoYXQgJXMpXG4iLCAobG9uZyBsb25nIHVuc2lnbmVkIGludCkgcGFydGl0aW9uc1twYXJ0TnVtXS5HZXRMYXN0TEJBKCksCiAgICAgICAgICAgQnl0ZXNUb0llZWUocGFydGl0aW9uc1twYXJ0TnVtXS5HZXRMYXN0TEJBKCksIGJsb2NrU2l6ZSkuY19zdHIoKSk7CiAgICBzaXplID0gcGFydGl0aW9uc1twYXJ0TnVtXS5HZXRMYXN0TEJBKCkgLSBwYXJ0aXRpb25zW3BhcnROdW1dLkdldEZpcnN0TEJBKCkgKyAxOwotICAgcHJpbnR3KCJQYXJ0aXRpb24gc2l6ZTogJWxsZCBzZWN0b3JzICglcylcbiIsIHNpemUsIEJ5dGVzVG9JZWVlKHNpemUsIGJsb2NrU2l6ZSkuY19zdHIoKSk7Ci0gICBwcmludHcoIkF0dHJpYnV0ZSBmbGFnczogJTAxNnhcbiIsIHBhcnRpdGlvbnNbcGFydE51bV0uR2V0QXR0cmlidXRlcygpLkdldEF0dHJpYnV0ZXMoKSk7CisgICBwcmludHcoIlBhcnRpdGlvbiBzaXplOiAlbGx1IHNlY3RvcnMgKCVzKVxuIiwgKGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQpIHNpemUsIEJ5dGVzVG9JZWVlKHNpemUsIGJsb2NrU2l6ZSkuY19zdHIoKSk7CisgICBwcmludHcoIkF0dHJpYnV0ZSBmbGFnczogJTAxNmxseFxuIiwgKGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQpIHBhcnRpdGlvbnNbcGFydE51bV0uR2V0QXR0cmlidXRlcygpLkdldEF0dHJpYnV0ZXMoKSk7CiAgICAjaWZkZWYgVVNFX1VURjE2CiAgICBwYXJ0aXRpb25zW3BhcnROdW1dLkdldERlc2NyaXB0aW9uKCkuZXh0cmFjdCgwLCBOQU1FX1NJWkUgLCB0ZW1wLCBOQU1FX1NJWkUgKTsKICAgIHByaW50dygiUGFydGl0aW9uIG5hbWU6ICclcydcbiIsIHRlbXApOwpAQCAtNDI2LDM0ICs0MzAsNDMgQEAKIAogLy8gQ3JlYXRlIGEgbmV3IHBhcnRpdGlvbiBpbiB0aGUgc3BhY2UgcG9pbnRlZCB0byBieSBjdXJyZW50U3BhY2UuCiB2b2lkIEdQVERhdGFDdXJzZXM6Ok1ha2VOZXdQYXJ0KHZvaWQpIHsKLSAgIHVpbnQ2NF90IHNpemUsIG5ld0ZpcnN0TEJBID0gMCwgbmV3TGFzdExCQSA9IDA7CisgICB1aW50NjRfdCBzaXplLCBuZXdGaXJzdExCQSA9IDAsIG5ld0xhc3RMQkEgPSAwLCBsYXN0QWxpZ25lZDsKICAgIGludCBwYXJ0TnVtOwogICAgY2hhciBpbkxpbmVbODBdOwogCiAgICBtb3ZlKExJTkVTIC0gNCwgMCk7CiAgICBjbHJ0b2JvdCgpOworICAgbGFzdEFsaWduZWQgPSBjdXJyZW50U3BhY2UtPmxhc3RMQkEgKyAxOworICAgQWxpZ24oJmxhc3RBbGlnbmVkKTsKKyAgIGxhc3RBbGlnbmVkLS07CisgICAvLyBEaXNjYXJkIGVuZC1hbGlnbm1lbnQgYXR0ZW1wdCBpZiBpdCdzIGdpdmluZyB1cyBhbiBpbnZhbGlkIGVuZCBwb2ludC4uLi4KKyAgIGlmICghSXNGcmVlKGxhc3RBbGlnbmVkKSkKKyAgICAgICBsYXN0QWxpZ25lZCA9IGN1cnJlbnRTcGFjZS0+bGFzdExCQTsKICAgIHdoaWxlICgobmV3Rmlyc3RMQkEgPCBjdXJyZW50U3BhY2UtPmZpcnN0TEJBKSB8fCAobmV3Rmlyc3RMQkEgPiBjdXJyZW50U3BhY2UtPmxhc3RMQkEpKSB7Ci0gICAgICBuZXdGaXJzdExCQSA9IGN1cnJlbnRTcGFjZS0+Zmlyc3RMQkE7CiAgICAgICBtb3ZlKExJTkVTIC0gNCwgMCk7CiAgICAgICBjbHJ0b2VvbCgpOwogICAgICAgbmV3Rmlyc3RMQkEgPSBjdXJyZW50U3BhY2UtPmZpcnN0TEJBOwogICAgICAgQWxpZ24oJm5ld0ZpcnN0TEJBKTsKLSAgICAgIHByaW50dygiRmlyc3Qgc2VjdG9yICglbGxkLSVsbGQsIGRlZmF1bHQgPSAlbGxkKTogIiwgbmV3Rmlyc3RMQkEsIGN1cnJlbnRTcGFjZS0+bGFzdExCQSwgbmV3Rmlyc3RMQkEpOworICAgICAgcHJpbnR3KCJGaXJzdCBzZWN0b3IgKCVsbHUtJWxsdSwgZGVmYXVsdCA9ICVsbHUpOiAiLCAobG9uZyBsb25nIHVuc2lnbmVkIGludCkgbmV3Rmlyc3RMQkEsCisgICAgICAgICAgICAgKGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQpIGN1cnJlbnRTcGFjZS0+bGFzdExCQSwgKGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQpIG5ld0ZpcnN0TEJBKTsKICAgICAgIGVjaG8oKTsKICAgICAgIGdldG5zdHIoaW5MaW5lLCA3OSk7CiAgICAgICBub2VjaG8oKTsKLSAgICAgIG5ld0ZpcnN0TEJBID0gSWVlZVRvSW50KGluTGluZSwgYmxvY2tTaXplLCBjdXJyZW50U3BhY2UtPmZpcnN0TEJBLCBjdXJyZW50U3BhY2UtPmxhc3RMQkEsIG5ld0ZpcnN0TEJBKTsKKyAgICAgIG5ld0ZpcnN0TEJBID0gSWVlZVRvSW50KGluTGluZSwgYmxvY2tTaXplLCBjdXJyZW50U3BhY2UtPmZpcnN0TEJBLCBjdXJyZW50U3BhY2UtPmxhc3RMQkEsIHNlY3RvckFsaWdubWVudCwgbmV3Rmlyc3RMQkEpOwogICAgICAgQWxpZ24oJm5ld0ZpcnN0TEJBKTsKICAgIH0gLy8gd2hpbGUKLSAgIHNpemUgPSBjdXJyZW50U3BhY2UtPmxhc3RMQkEgLSBuZXdGaXJzdExCQSArIDE7CisgICBpZiAobmV3Rmlyc3RMQkEgPiBsYXN0QWxpZ25lZCkKKyAgICAgIHNpemUgPSBjdXJyZW50U3BhY2UtPmxhc3RMQkEgLSBuZXdGaXJzdExCQSArIDE7CisgICBlbHNlCisgICAgICBzaXplID0gbGFzdEFsaWduZWQgLSBuZXdGaXJzdExCQSArIDE7CiAgICB3aGlsZSAoKG5ld0xhc3RMQkEgPiBjdXJyZW50U3BhY2UtPmxhc3RMQkEpIHx8IChuZXdMYXN0TEJBIDwgbmV3Rmlyc3RMQkEpKSB7CiAgICAgICBtb3ZlKExJTkVTIC0gMywgMCk7CiAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgcHJpbnR3KCJTaXplIGluIHNlY3RvcnMgb3Ige0tNR1RQfSAoZGVmYXVsdCA9ICVsbGQpOiAiLCBzaXplKTsKKyAgICAgIHByaW50dygiU2l6ZSBpbiBzZWN0b3JzIG9yIHtLTUdUUH0gKGRlZmF1bHQgPSAlbGx1KTogIiwgKGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQpIHNpemUpOwogICAgICAgZWNobygpOwogICAgICAgZ2V0bnN0cihpbkxpbmUsIDc5KTsKICAgICAgIG5vZWNobygpOwotICAgICAgbmV3TGFzdExCQSA9IG5ld0ZpcnN0TEJBICsgSWVlZVRvSW50KGluTGluZSwgYmxvY2tTaXplLCAxLCBzaXplLCBzaXplKSAtIDE7CisgICAgICBuZXdMYXN0TEJBID0gbmV3Rmlyc3RMQkEgKyBJZWVlVG9JbnQoaW5MaW5lLCBibG9ja1NpemUsIDEsIHNpemUsIHNlY3RvckFsaWdubWVudCwgc2l6ZSkgLSAxOwogICAgfSAvLyB3aGlsZQogICAgcGFydE51bSA9IEZpbmRGaXJzdEZyZWVQYXJ0KCk7CiAgICBpZiAoQ3JlYXRlUGFydGl0aW9uKHBhcnROdW0sIG5ld0ZpcnN0TEJBLCBuZXdMYXN0TEJBKSkgeyAvLyBjcmVhdGVkIE9LOyBzZXQgdHlwZSBjb2RlICYgbmFtZS4uLi4KQEAgLTU5Niw3ICs2MDksNyBAQAogLy8gU2hvdyB1c2VyJ3Mgb3B0aW9ucy4gUmVmZXJzIHRvIGN1cnJlbnRTcGFjZSB0byBkZXRlcm1pbmUgd2hpY2ggb3B0aW9ucyB0byBzaG93LgogLy8gSGlnaGxpZ2h0cyB0aGUgb3B0aW9uIHdpdGggdGhlIGtleSBzZWxlY3RlZEtleTsgb3IgYSBkZWZhdWx0IGlmIHRoYXQncyBpbnZhbGlkLgogdm9pZCBHUFREYXRhQ3Vyc2VzOjpEaXNwbGF5T3B0aW9ucyhjaGFyIHNlbGVjdGVkS2V5KSB7Ci0gICB1aW50IGksIGogPSAwLCBmaXJzdExpbmUsIG51bVBlckxpbmU7CisgICB1aW50NjRfdCBpLCBqID0gMCwgZmlyc3RMaW5lLCBudW1QZXJMaW5lOwogICAgc3RyaW5nIG9wdGlvbk5hbWUsIG9wdGlvbkRlc2MgPSAiIjsKIAogICAgaWYgKGN1cnJlbnRTcGFjZSAhPSBOVUxMKSB7CkBAIC02MzMsNyArNjQ2LDcgQEAKICAgICAgICAgIH0gLy8gaWYvZWxzZQogICAgICAgfSAvLyBmb3IKICAgICAgIG1vdmUoTElORVMgLSAxLCAoQ09MUyAtIG9wdGlvbkRlc2MubGVuZ3RoKCkpIC8gMik7Ci0gICAgICBwcmludHcob3B0aW9uRGVzYy5jX3N0cigpKTsKKyAgICAgIHByaW50dygiJXMiLCBvcHRpb25EZXNjLmNfc3RyKCkpOwogICAgICAgY3VycmVudEtleSA9IHNlbGVjdGVkS2V5OwogICAgfSAvLyBpZgogfSAvLyBHUFREYXRhQ3Vyc2VzOjpEaXNwbGF5T3B0aW9ucygpCkBAIC03NDUsMTEgKzc1OCwxMSBAQAogCiAgICBjbGVhcigpOwogICAgbW92ZSgwLCAoQ09MUyAtIHRpdGxlLmxlbmd0aCgpKSAvIDIpOwotICAgcHJpbnR3KHRpdGxlLmNfc3RyKCkpOworICAgcHJpbnR3KCIlcyIsIHRpdGxlLmNfc3RyKCkpOwogICAgbW92ZSgyLCAoQ09MUyAtIGRyaXZlLmxlbmd0aCgpKSAvIDIpOwotICAgcHJpbnR3KGRyaXZlLmNfc3RyKCkpOworICAgcHJpbnR3KCIlcyIsIGRyaXZlLmNfc3RyKCkpOwogICAgbW92ZSgzLCAoQ09MUyAtIHNpemUuc3RyKCkubGVuZ3RoKCkpIC8gMik7Ci0gICBwcmludHcoc2l6ZS5zdHIoKS5jX3N0cigpKTsKKyAgIHByaW50dygiJXMiLCBzaXplLnN0cigpLmNfc3RyKCkpOwogICAgRGlzcGxheVBhcnRzKGN1cnJlbnRTcGFjZU51bSk7CiB9IC8vIERyYXdNZW51CiAKQEAgLTc5OSw3ICs4MTIsNyBAQAogdm9pZCBSZXBvcnQoc3RyaW5nIHRoZVRleHQpIHsKICAgIGNsZWFyKCk7CiAgICBtb3ZlKDAsIDApOwotICAgcHJpbnR3KHRoZVRleHQuY19zdHIoKSk7CisgICBwcmludHcoIiVzIiwgdGhlVGV4dC5jX3N0cigpKTsKICAgIG1vdmUoTElORVMgLSAyLCAoQ09MUyAtIDI5KSAvIDIpOwogICAgcHJpbnR3KCJQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uLiIpOwogICAgY2JyZWFrKCk7CmRpZmYgLS1naXQgYS9ncHRjdXJzZXMuaCBiL2dwdGN1cnNlcy5oCmluZGV4IGYxNTNkZTIuLjhkMmVjYWYgMTAwNjQ0Ci0tLSBhL2dwdGN1cnNlcy5oCisrKyBiL2dwdGN1cnNlcy5oCkBAIC0xOSwyMCArMTksMTggQEAKICAqCiAgKi8KIAorI2lmbmRlZiBfX0dQVF9DVVJTRVMKKyNkZWZpbmUgX19HUFRfQ1VSU0VTCisKICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSAiZ3B0cGFydC5oIgogI2luY2x1ZGUgImdwdC5oIgogCi0jaWZuZGVmIF9fR1BUX0NVUlNFUwotI2RlZmluZSBfX0dQVF9DVVJTRVMKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogc3RydWN0IE1lbnVJdGVtIHsKICAgIGludCBrZXk7IC8vIEtleWJvYXJkIHNob3J0Y3V0Ci0gICBzdHJpbmcgbmFtZTsgLy8gSXRlbSBuYW1lOyA4IGNoYXJhY3RlcnMKLSAgIHN0cmluZyBkZXNjOyAvLyBEZXNjcmlwdGlvbgorICAgc3RkOjpzdHJpbmcgbmFtZTsgLy8gSXRlbSBuYW1lOyA4IGNoYXJhY3RlcnMKKyAgIHN0ZDo6c3RyaW5nIGRlc2M7IC8vIERlc2NyaXB0aW9uCiB9OwogCiBzdGF0aWMgc3RydWN0IE1lbnVJdGVtIG1lbnVNYWluW10gPSB7CkBAIC04MSw3ICs3OSw3IEBACiAgICBTcGFjZSAqbGFzdFNwYWNlOwogICAgU3BhY2UgKmN1cnJlbnRTcGFjZTsKICAgIGludCBjdXJyZW50U3BhY2VOdW07Ci0gICBzdHJpbmcgd2hpY2hPcHRpb25zOworICAgc3RkOjpzdHJpbmcgd2hpY2hPcHRpb25zOwogICAgY2hhciBjdXJyZW50S2V5OwogICAgaW50IG51bVNwYWNlczsKICAgIGludCBkaXNwbGF5VHlwZTsKQEAgLTEzMCw3ICsxMjgsNyBAQAogdm9pZCBDbGVhckxpbmUoaW50IGxpbmVOdW0pOwogdm9pZCBDbGVhckJvdHRvbSh2b2lkKTsKIHZvaWQgUHJvbXB0VG9Db250aW51ZSh2b2lkKTsKLXZvaWQgUmVwb3J0KHN0cmluZyB0aGVUZXh0KTsKK3ZvaWQgUmVwb3J0KHN0ZDo6c3RyaW5nIHRoZVRleHQpOwogdm9pZCBTaG93VHlwZXModm9pZCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3B0cGFydC5jYyBiL2dwdHBhcnQuY2MKaW5kZXggMTU4M2JjYS4uNWZlN2I1YSAxMDA2NDQKLS0tIGEvZ3B0cGFydC5jYworKysgYi9ncHRwYXJ0LmNjCkBAIC0xMywyMSArMTMsMTggQEAKIC8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2ZXJzaW9uIDIsIGFzIGRldGFpbGVkIGluIHRoZSBDT1BZSU5HIGZpbGUuCiAKICNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUwotI2lmbmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TCiAjZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MKLSNlbmRpZgotCi0jaWZkZWYgVVNFX1VURjE2Ci0jaW5jbHVkZSA8dW5pY29kZS91c3RkaW8uaD4KLSNlbHNlCi0jZGVmaW5lIFVuaWNvZGVTdHJpbmcgc3RyaW5nCi0jZW5kaWYKIAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSAiZ3B0cGFydC5oIgogI2luY2x1ZGUgImF0dHJpYnV0ZXMuaCIKKyNpZmRlZiBVU0VfVVRGMTYKKyNpbmNsdWRlIDx1bmljb2RlL3VzdGRpby5oPgorI2Vsc2UKKyNkZWZpbmUgVW5pY29kZVN0cmluZyBzdGQ6OnN0cmluZworI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTk0LDcgKzkxLDYgQEAKICAgIHNpemVfdCBwb3MgPSAwIDsKICAgIHdoaWxlICggKCBwb3MgPCBOQU1FX1NJWkUgKSAmJiAoIG5hbWVbIHBvcyBdICE9IDAgKSApIHsKICAgICAgIHVpbnQxNl90IGNwID0gbmFtZVsgcG9zICsrIF0gOwotICAgICAgaWYgKCAhIElzTGl0dGxlRW5kaWFuKCkgKSBSZXZlcnNlQnl0ZXMoICYgY3AgLCAyICkgOwogICAgICAgLy8gZmlyc3QgdG8gdXRmMzIKICAgICAgIHVpbnQzMl90IHVuaSA7CiAgICAgICBpZiAoIGNwIDwgMHhkODAwIHx8IGNwID4gMHhkZmZmICkgewpAQCAtMjQ1LDcgKzI0MSw2IEBACiAgICAgICAvLyB0aGVuIHRvIHV0ZjE2bGUKICAgICAgIGlmICggdW5pIDwgMHgxMDAwMCApIHsKICAgICAgICAgIG5hbWVbIHBvcyBdID0gKHVpbnQxNl90KSB1bmkgOwotICAgICAgICAgaWYgKCAhIElzTGl0dGxlRW5kaWFuKCkgKSBSZXZlcnNlQnl0ZXMoIG5hbWUgKyBwb3MgLCAyICkgOwogICAgICAgICAgcG9zICsrIDsKICAgICAgIH0gLy8gaWYKICAgICAgIGVsc2UgewpAQCAtMjU1LDEwICsyNTAsOCBAQAogICAgICAgICAgfSAvLyBpZgogICAgICAgICAgdW5pIC09IDB4MTAwMDAgOwogICAgICAgICAgbmFtZVsgcG9zIF0gPSAodWludDE2X3QpKCB1bmkgPj4gMTAgKSB8IDB4ZDgwMCA7Ci0gICAgICAgICBpZiAoICEgSXNMaXR0bGVFbmRpYW4oKSApIFJldmVyc2VCeXRlcyggbmFtZSArIHBvcyAsIDIgKSA7CiAgICAgICAgICBwb3MgKysgOwogICAgICAgICAgbmFtZVsgcG9zIF0gPSAodWludDE2X3QpKCB1bmkgJiAweDNmZiApIHwgMHhkYzAwIDsKLSAgICAgICAgIGlmICggISBJc0xpdHRsZUVuZGlhbigpICkgUmV2ZXJzZUJ5dGVzKCBuYW1lICsgcG9zICwgMiApIDsKICAgICAgICAgIHBvcyArKyA7CiAgICAgICB9CiAgICB9IC8vIGZvcgpAQCAtNDE4LDE0ICs0MTEsMTggQEAKIC8vIFJldmVyc2UgdGhlIGJ5dGVzIG9mIGludGVncmFsIGRhdGEgdHlwZXMgYW5kIG9mIHRoZSBVVEYtMTZMRSBuYW1lOwogLy8gdXNlZCBvbiBiaWctZW5kaWFuIHN5c3RlbXMuCiB2b2lkIEdQVFBhcnQ6OlJldmVyc2VQYXJ0Qnl0ZXModm9pZCkgewotICAgaW50IGk7Ci0KICAgIFJldmVyc2VCeXRlcygmZmlyc3RMQkEsIDgpOwogICAgUmV2ZXJzZUJ5dGVzKCZsYXN0TEJBLCA4KTsKICAgIFJldmVyc2VCeXRlcygmYXR0cmlidXRlcywgOCk7CisgICBSZXZlcnNlTmFtZUJ5dGVzKCk7Cit9IC8vIEdQVFBhcnQ6OlJldmVyc2VQYXJ0Qnl0ZXMoKQorCit2b2lkIEdQVFBhcnQ6OlJldmVyc2VOYW1lQnl0ZXModm9pZCkgeworICAgaW50IGk7CisKICAgIGZvciAoaSA9IDA7IGkgPCBOQU1FX1NJWkU7IGkgKysgKQogICAgICAgUmV2ZXJzZUJ5dGVzKG5hbWUgKyBpLCAyKTsKLX0gLy8gR1BUUGFydDo6UmV2ZXJzZUJ5dGVzKCkKK30gLy8gR1BUUGFydDo6UmV2ZXJzZU5hbWVCeXRlcygpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBGdW5jdGlvbnMgcmVxdWlyaW5nIHVzZXIgaW50ZXJhY3Rpb24gKgpAQCAtNDM2LDcgKzQzMyw3IEBACiB2b2lkIEdQVFBhcnQ6OkNoYW5nZVR5cGUodm9pZCkgewogICAgc3RyaW5nIGxpbmU7CiAgICBpbnQgY2hhbmdlTmFtZTsKLSAgIFBhcnRUeXBlIHRlbXBUeXBlID0gKEdVSUREYXRhKSAiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIjsKKyAgIFBhcnRUeXBlIHRlbXBUeXBlID0gUGFydFR5cGU6OnVudXNlZFBhcnRUeXBlOwogCiAjaWZkZWYgVVNFX1VURjE2CiAgICBjaGFuZ2VOYW1lID0gKEdldERlc2NyaXB0aW9uKCkgPT0gR2V0VVR5cGVOYW1lKCkpOwpAQCAtNDQ0LDE5ICs0NDEsMTkgQEAKICAgIGNoYW5nZU5hbWUgPSAoR2V0RGVzY3JpcHRpb24oKSA9PSBHZXRUeXBlTmFtZSgpKTsKICNlbmRpZgogCi0gICBjb3V0IDw8ICJDdXJyZW50IHR5cGUgaXMgJyIgPDwgR2V0VHlwZU5hbWUoKSA8PCAiJ1xuIjsKKyAgIGNvdXQgPDwgIkN1cnJlbnQgdHlwZSBpcyAiIDw8IGhleCA8PCBHZXRIZXhUeXBlKCkgPDwgZGVjIDw8ICIgKCIgPDwgR2V0VHlwZU5hbWUoKSA8PCAiKVxuIjsKICAgIGRvIHsKLSAgICAgIGNvdXQgPDwgIkhleCBjb2RlIG9yIEdVSUQgKEwgdG8gc2hvdyBjb2RlcywgRW50ZXIgPSAiIDw8IGhleCA8PCBERUZBVUxUX0dQVF9UWVBFIDw8IGRlYyA8PCAiKTogIjsKKyAgICAgIGNvdXQgPDwgIkhleCBjb2RlIG9yIEdVSUQgKEwgdG8gc2hvdyBjb2RlcywgRW50ZXIgPSAiIDw8IGhleCA8PCBHZXRIZXhUeXBlKCkgPDwgZGVjIDw8ICIpOiAiOwogICAgICAgbGluZSA9IFJlYWRTdHJpbmcoKTsKICAgICAgIGlmICgobGluZVswXSA9PSAnTCcpIHx8IChsaW5lWzBdID09ICdsJykpIHsKICAgICAgICAgIHBhcnRpdGlvblR5cGUuU2hvd0FsbFR5cGVzKCk7CiAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGxpbmUubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgIHRlbXBUeXBlID0gREVGQVVMVF9HUFRfVFlQRTsKKyAgICAgICAgICAgIHRlbXBUeXBlID0gR2V0SGV4VHlwZSgpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGVtcFR5cGUgPSBsaW5lOwogICAgICAgfSAvLyBpZi9lbHNlCi0gICB9IHdoaWxlICh0ZW1wVHlwZSA9PSAoR1VJRERhdGEpICIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiKTsKKyAgIH0gd2hpbGUgKHRlbXBUeXBlID09IFBhcnRUeXBlOjp1bnVzZWRQYXJ0VHlwZSk7CiAgICBwYXJ0aXRpb25UeXBlID0gdGVtcFR5cGU7CiAgICBjb3V0IDw8ICJDaGFuZ2VkIHR5cGUgb2YgcGFydGl0aW9uIHRvICciIDw8IHBhcnRpdGlvblR5cGUuVHlwZU5hbWUoKSA8PCAiJ1xuIjsKICAgIGlmIChjaGFuZ2VOYW1lKSB7CmRpZmYgLS1naXQgYS9ncHRwYXJ0LmggYi9ncHRwYXJ0LmgKaW5kZXggZmFjNTE0ZS4uZWRlODEzOSAxMDA2NDQKLS0tIGEvZ3B0cGFydC5oCisrKyBiL2dwdHBhcnQuaApAQCAtMjMsOCArMjMsNiBAQAogI2luY2x1ZGUgImd1aWQuaCIKICNpbmNsdWRlICJhdHRyaWJ1dGVzLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KIC8vIFZhbHVlcyByZXR1cm5lZCBieSBHUFRQYXJ0OjpJc1NpemVkRm9yTUJSKCkKICNkZWZpbmUgTUJSX1NJWkVEX0dPT0QgMCAvKiBXaG9sZSBwYXJ0aXRpb24gdW5kZXIgMl4zMiBzZWN0b3JzICovCiAjZGVmaW5lIE1CUl9TSVpFRF9JRkZZIDEgLyogUGFydGl0aW9uIHN0YXJ0cyB1bmRlciAyXjMyICYgaXMgbGVzcyB0aGFuIDJeMzIsIGJ1dCBlbmRzIG92ZXIgMl4zMiAqLwpAQCAtNTksNyArNTcsNyBAQAogICAgICAgLy8gU2ltcGxlIGRhdGEgcmV0cmlldmFsOgogICAgICAgUGFydFR5cGUgJiBHZXRUeXBlKHZvaWQpIHtyZXR1cm4gcGFydGl0aW9uVHlwZTt9CiAgICAgICB1aW50MTZfdCBHZXRIZXhUeXBlKHZvaWQpIGNvbnN0OwotICAgICAgc3RyaW5nIEdldFR5cGVOYW1lKHZvaWQpOworICAgICAgc3RkOjpzdHJpbmcgR2V0VHlwZU5hbWUodm9pZCk7CiAgICAgICBVbmljb2RlU3RyaW5nIEdldFVUeXBlTmFtZSh2b2lkKTsKICAgICAgIGNvbnN0IEdVSUREYXRhIEdldFVuaXF1ZUdVSUQodm9pZCkgY29uc3Qge3JldHVybiB1bmlxdWVHVUlEO30KICAgICAgIHVpbnQ2NF90IEdldEZpcnN0TEJBKHZvaWQpIGNvbnN0IHtyZXR1cm4gZmlyc3RMQkE7fQpAQCAtODAsNyArNzgsNyBAQAogICAgICAgdm9pZCBTZXRMYXN0TEJBKHVpbnQ2NF90IGwpIHtsYXN0TEJBID0gbDt9CiAgICAgICB2b2lkIFNldEF0dHJpYnV0ZXModWludDY0X3QgYSkge2F0dHJpYnV0ZXMgPSBhO30KICAgICAgIHZvaWQgU2V0QXR0cmlidXRlcyh2b2lkKSB7YXR0cmlidXRlcy5DaGFuZ2VBdHRyaWJ1dGVzKCk7fQotICAgICAgdm9pZCBTZXROYW1lKGNvbnN0IHN0cmluZyAmIHRoZU5hbWUpOworICAgICAgdm9pZCBTZXROYW1lKGNvbnN0IHN0ZDo6c3RyaW5nICYgdGhlTmFtZSk7CiAjaWZkZWYgVVNFX1VURjE2CiAgICAgICB2b2lkIFNldE5hbWUoY29uc3QgVW5pY29kZVN0cmluZyAmIHRoZU5hbWUpOwogI2VuZGlmCkBAIC05NCw2ICs5Miw3IEBACiAgICAgICB2b2lkIEJsYW5rUGFydGl0aW9uKHZvaWQpOyAvLyBlbXB0eSBwYXJ0aXRpb24gb2YgZGF0YQogICAgICAgaW50IERvVGhleU92ZXJsYXAoY29uc3QgR1BUUGFydCAmIG90aGVyKTsgLy8gcmV0dXJucyAxIGlmIHRoZXJlJ3Mgb3ZlcmxhcAogICAgICAgdm9pZCBSZXZlcnNlUGFydEJ5dGVzKHZvaWQpOyAvLyByZXZlcnNlIGJ5dGUgb3JkZXIgb2YgYWxsIGludGVnZXIgZmllbGRzCisgICAgICB2b2lkIFJldmVyc2VOYW1lQnl0ZXModm9pZCk7IC8vIHJldmVyc2UgYnl0ZSBvcmRlciBvZiBwYXJ0aXRpb24ncyBuYW1lIGZpZWxkCiAKICAgICAgIC8vIEZ1bmN0aW9ucyByZXF1aXJpbmcgdXNlciBpbnRlcmFjdGlvbgogICAgICAgdm9pZCBDaGFuZ2VUeXBlKHZvaWQpOyAvLyBDaGFuZ2UgdGhlIHR5cGUgY29kZQpkaWZmIC0tZ2l0IGEvZ3B0dGV4dC5jYyBiL2dwdHRleHQuY2MKaW5kZXggZWEzNDQ0NC4uMTcwYTE2OSAxMDA2NDQKLS0tIGEvZ3B0dGV4dC5jYworKysgYi9ncHR0ZXh0LmNjCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCAgPFJvZGVyaWNrIFcuIFNtaXRoPgorICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDIyICA8Um9kZXJpY2sgVy4gU21pdGg+CiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xOTksNyArMTk5LDcgQEAKIAogLy8gSW50ZXJhY3RpdmVseSBjcmVhdGUgYSBwYXJ0aXRpb24KIHZvaWQgR1BURGF0YVRleHRVSTo6Q3JlYXRlUGFydGl0aW9uKHZvaWQpIHsKLSAgIHVpbnQ2NF90IGZpcnN0QmxvY2ssIGZpcnN0SW5MYXJnZXN0LCBsYXN0QmxvY2ssIHNlY3Rvciwgb3JpZ1NlY3RvcjsKKyAgIHVpbnQ2NF90IGZpcnN0QmxvY2ssIGZpcnN0SW5MYXJnZXN0LCBsYXN0QmxvY2ssIHNlY3Rvciwgb3JpZ1NlY3RvciwgbGFzdEFsaWduZWQ7CiAgICB1aW50MzJfdCBmaXJzdEZyZWVQYXJ0ID0gMDsKICAgIG9zdHJpbmdzdHJlYW0gcHJvbXB0MSwgcHJvbXB0MiwgcHJvbXB0MzsKICAgIGludCBwYXJ0TnVtOwpAQCAtMjI5LDcgKzIyOSw3IEBACiAgICAgICBwcm9tcHQyIDw8ICJGaXJzdCBzZWN0b3IgKCIgPDwgZmlyc3RCbG9jayA8PCAiLSIgPDwgbGFzdEJsb2NrIDw8ICIsIGRlZmF1bHQgPSAiCiAgICAgICAgICAgICAgIDw8IGZpcnN0SW5MYXJnZXN0IDw8ICIpIG9yIHsrLX1zaXple0tNR1RQfTogIjsKICAgICAgIGRvIHsKLSAgICAgICAgIHNlY3RvciA9IEdldFNlY3Rvck51bShmaXJzdEJsb2NrLCBsYXN0QmxvY2ssIGZpcnN0SW5MYXJnZXN0LCBibG9ja1NpemUsIHByb21wdDIuc3RyKCkpOworICAgICAgICAgc2VjdG9yID0gR2V0U2VjdG9yTnVtKGZpcnN0QmxvY2ssIGxhc3RCbG9jaywgZmlyc3RJbkxhcmdlc3QsIHByb21wdDIuc3RyKCkpOwogICAgICAgfSB3aGlsZSAoSXNGcmVlKHNlY3RvcikgPT0gMCk7CiAgICAgICBvcmlnU2VjdG9yID0gc2VjdG9yOwogICAgICAgaWYgKEFsaWduKCZzZWN0b3IpKSB7CkBAIC0yMzksMTkgKzIzOSwxOSBAQAogICAgICAgICAgaWYgKCFiZVF1aWV0KQogICAgICAgICAgICAgY291dCA8PCAiVXNlICdsJyBvbiB0aGUgZXhwZXJ0cycgbWVudSB0byBhZGp1c3QgYWxpZ25tZW50XG4iOwogICAgICAgfSAvLyBpZgotICAgICAgLy8gICAgICBBbGlnbigmc2VjdG9yKTsgLy8gQWxpZ24gc2VjdG9yIHRvIGNvcnJlY3QgbXVsdGlwbGUKICAgICAgIGZpcnN0QmxvY2sgPSBzZWN0b3I7CiAKICAgICAgIC8vIEdldCBsYXN0IGJsb2NrIGZvciBuZXcgcGFydGl0aW9ucy4uLgotICAgICAgbGFzdEJsb2NrID0gRmluZExhc3RJbkZyZWUoZmlyc3RCbG9jayk7CisgICAgICBsYXN0QmxvY2sgPSBGaW5kTGFzdEluRnJlZShmaXJzdEJsb2NrLCBmYWxzZSk7CisgICAgICBsYXN0QWxpZ25lZCA9IEZpbmRMYXN0SW5GcmVlKGZpcnN0QmxvY2ssIHRydWUpOwogICAgICAgcHJvbXB0MyA8PCAiTGFzdCBzZWN0b3IgKCIgPDwgZmlyc3RCbG9jayA8PCAiLSIgPDwgbGFzdEJsb2NrIDw8ICIsIGRlZmF1bHQgPSAiCi0gICAgICAgICAgICA8PCBsYXN0QmxvY2sgPDwgIikgb3IgeystfXNpemV7S01HVFB9OiAiOworICAgICAgICAgICAgICA8PCBsYXN0QWxpZ25lZCA8PCAiKSBvciB7Ky19c2l6ZXtLTUdUUH06ICI7CiAgICAgICBkbyB7Ci0gICAgICAgICBzZWN0b3IgPSBHZXRTZWN0b3JOdW0oZmlyc3RCbG9jaywgbGFzdEJsb2NrLCBsYXN0QmxvY2ssIGJsb2NrU2l6ZSwgcHJvbXB0My5zdHIoKSk7CisgICAgICAgICBzZWN0b3IgPSBHZXRTZWN0b3JOdW0oZmlyc3RCbG9jaywgbGFzdEJsb2NrLCBsYXN0QWxpZ25lZCwgcHJvbXB0My5zdHIoKSk7CiAgICAgICB9IHdoaWxlIChJc0ZyZWUoc2VjdG9yKSA9PSAwKTsKICAgICAgIGxhc3RCbG9jayA9IHNlY3RvcjsKIAotICAgICAgZmlyc3RGcmVlUGFydCA9IEdQVERhdGE6OkNyZWF0ZVBhcnRpdGlvbihwYXJ0TnVtLCBmaXJzdEJsb2NrLCBsYXN0QmxvY2spOworICAgICAgR1BURGF0YTo6Q3JlYXRlUGFydGl0aW9uKHBhcnROdW0sIGZpcnN0QmxvY2ssIGxhc3RCbG9jayk7CiAgICAgICBwYXJ0aXRpb25zW3BhcnROdW1dLkNoYW5nZVR5cGUoKTsKICAgICAgIHBhcnRpdGlvbnNbcGFydE51bV0uU2V0RGVmYXVsdERlc2NyaXB0aW9uKCk7CiAgICB9IGVsc2UgewpAQCAtMzQxLDYgKzM0MSwyMiBAQAogICAgcmV0dXJuIHJldHZhbDsKIH0gLy8gR1BURGF0YVRleHRVSTo6U2V0TmFtZSgpCiAKKy8vIEVuYWJsZSB0aGUgdXNlciB0byBieXRlLXN3YXAgdGhlIG5hbWUgb2YgdGhlIHBhcnRpdGlvbi4gVXNlZCB0byBjb3JyZWN0CisvLyBwYXJ0aXRpb24gbmFtZXMgZGFtYWdlZCBieSBpbmNvcnJlY3QgYnl0ZSBvcmRlciwgYXMgY291bGQgYmUgY3JlYXRlZCBieQorLy8gR1BUIGZkaXNrIDEuMC43IGFuZCBlYXJsaWVyIG9uIGJpZy1lbmRpYW4gc3lzdGVtcywgYW5kIHBlcmhhcHMgb3RoZXIgdG9vbHMuCit2b2lkIEdQVERhdGFUZXh0VUk6OlJldmVyc2VOYW1lKHVpbnQzMl90IHBhcnROdW0pIHsKKyAgIGludCBzd2FwQnl0ZXM7CisKKyAgIGNvdXQgPDwgIkN1cnJlbnQgbmFtZSBpczogIiA8PCBwYXJ0aXRpb25zW3BhcnROdW1dLkdldERlc2NyaXB0aW9uKCkgPDwgIlxuIjsKKyAgIHBhcnRpdGlvbnNbcGFydE51bV0uUmV2ZXJzZU5hbWVCeXRlcygpOworICAgY291dCA8PCAiQnl0ZS1zd2FwcGVkIG5hbWUgaXM6ICIgPDwgcGFydGl0aW9uc1twYXJ0TnVtXS5HZXREZXNjcmlwdGlvbigpIDw8ICJcbiI7CisgICBjb3V0IDw8ICJEbyB5b3Ugd2FudCB0byBieXRlLXN3YXAgdGhlIG5hbWU/ICI7CisgICBzd2FwQnl0ZXMgPSAoR2V0WU4oKSA9PSAnWScpOworICAgLy8gQWxyZWFkeSBzd2FwcGVkIGZvciBkaXNwbGF5LCBzbyB1bmRvIGlmIG5lY2Vzc2FyeS4uLi4KKyAgIGlmICghc3dhcEJ5dGVzKQorICAgICAgcGFydGl0aW9uc1twYXJ0TnVtXS5SZXZlcnNlTmFtZUJ5dGVzKCk7Cit9IC8vIEdQVERhdGFUZXh0VUk6OlJldmVyc2VOYW1lKCkKKwogLy8gQXNrIHVzZXIgZm9yIHR3byBwYXJ0aXRpb24gbnVtYmVycyBhbmQgc3dhcCB0aGVtIGluIHRoZSB0YWJsZS4gTm90ZSB0aGF0CiAvLyB0aGlzIGp1c3QgcmVvcmRlcnMgdGFibGUgZW50cmllczsgaXQgZG9lc24ndCBhZGp1c3QgcGFydGl0aW9uIGxheW91dCBvbgogLy8gdGhlIGRpc2suCkBAIC01MzIsNiArNTQ4LDI4IEBACiAgICByZXR1cm4gcHJvdGVjdGl2ZU1CUi5Eb01lbnUoKTsKIH0gLy8gR1BURGF0YVRleHRVSTo6WEZvcm1Ub01CUigpCiAKKy8vIE9idGFpbnMgYSBzZWN0b3IgbnVtYmVyLCBiZXR3ZWVuIGxvdyBhbmQgaGlnaCwgZnJvbSB0aGUKKy8vIHVzZXIsIGFjY2VwdGluZyB2YWx1ZXMgcHJlZml4ZWQgYnkgIisiIHRvIGFkZCBzZWN0b3JzIHRvIGxvdywKKy8vIG9yIHRoZSBzYW1lIHdpdGggIksiLCAiTSIsICJHIiwgIlQiLCBvciAiUCIgYXMgc3VmZml4ZXMgdG8gYWRkCisvLyBraWJpYnl0ZXMsIG1lYmlieXRlcywgZ2liaWJ5dGVzLCB0ZWJpYnl0ZXMsIG9yIHBlYmlieXRlcywKKy8vIHJlc3BlY3RpdmVseS4gSWYgYSAiLSIgcHJlZml4IGlzIHVzZWQsIHVzZSB0aGUgaGlnaCB2YWx1ZSBtaW51cworLy8gdGhlIHVzZXItc3BlY2lmaWVkIG51bWJlciBvZiBzZWN0b3JzIChvciBLaUIsIE1pQiwgZXRjLikuIFVzZSB0aGUKKy8vIGRlZiB2YWx1ZSBhcyB0aGUgZGVmYXVsdCBpZiB0aGUgdXNlciBqdXN0IGhpdHMgRW50ZXIuCit1aW50NjRfdCBHUFREYXRhVGV4dFVJOjpHZXRTZWN0b3JOdW0odWludDY0X3QgbG93LCB1aW50NjRfdCBoaWdoLCB1aW50NjRfdCBkZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nICYgcHJvbXB0KSB7CisgICB1aW50NjRfdCByZXNwb25zZTsKKyAgIGNoYXIgbGluZVsyNTVdOworCisgICBkbyB7CisgICAgICBjb3V0IDw8IHByb21wdDsKKyAgICAgIGNpbi5nZXRsaW5lKGxpbmUsIDI1NSk7CisgICAgICBpZiAoIWNpbi5nb29kKCkpCisgICAgICAgICBleGl0KDUpOworICAgICAgcmVzcG9uc2UgPSBJZWVlVG9JbnQobGluZSwgYmxvY2tTaXplLCBsb3csIGhpZ2gsIHNlY3RvckFsaWdubWVudCwgZGVmKTsKKyAgIH0gd2hpbGUgKChyZXNwb25zZSA8IGxvdykgfHwgKHJlc3BvbnNlID4gaGlnaCkpOworICAgcmV0dXJuIHJlc3BvbnNlOworfSAvLyBHUFREYXRhVGV4dFVJOjpHZXRTZWN0b3JOdW0oKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBEaXNwbGF5IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgZm9yIHRoZSB1c2VyLi4uLiAgICAqCkBAIC03OTksNiArODM3LDkgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGNvdXQgPDwgIk5vIHBhcnRpdGlvbnNcbiI7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgJ2InOiBjYXNlICdCJzoKKyAgICAgICAgICAgIFJldmVyc2VOYW1lKEdldFBhcnROdW0oKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ2MnOiBjYXNlICdDJzoKICAgICAgICAgICAgIENoYW5nZVVuaXF1ZUd1aWQoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtODk2LDYgKzkzNyw3IEBACiAKIHZvaWQgR1BURGF0YVRleHRVSTo6U2hvd0V4cGVydENvbW1hbmRzKHZvaWQpIHsKICAgIGNvdXQgPDwgImFcdHNldCBhdHRyaWJ1dGVzXG4iOworICAgY291dCA8PCAiYlx0Ynl0ZS1zd2FwIGEgcGFydGl0aW9uJ3MgbmFtZVxuIjsKICAgIGNvdXQgPDwgImNcdGNoYW5nZSBwYXJ0aXRpb24gR1VJRFxuIjsKICAgIGNvdXQgPDwgImRcdGRpc3BsYXkgdGhlIHNlY3RvciBhbGlnbm1lbnQgdmFsdWVcbiI7CiAgICBjb3V0IDw8ICJlXHRyZWxvY2F0ZSBiYWNrdXAgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRoZSBlbmQgb2YgdGhlIGRpc2tcbiI7CmRpZmYgLS1naXQgYS9ncHR0ZXh0LmggYi9ncHR0ZXh0LmgKaW5kZXggYWZlNDY1MS4uMzJlMmY4OCAxMDA2NDQKLS0tIGEvZ3B0dGV4dC5oCisrKyBiL2dwdHRleHQuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgSW1wbGVtZW50YXRpb24gb2YgR1BURGF0YSBjbGFzcyBkZXJpdmF0aXZlIHdpdGggYmFzaWMgdGV4dC1tb2RlIGludGVyYWN0aW9uCi0gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggUm9kZXJpY2sgVy4gU21pdGgKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMiBSb2RlcmljayBXLiBTbWl0aAogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjMsMTMgKzIzLDExIEBACiAKICNpbmNsdWRlICJncHQuaCIKIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogY2xhc3MgR1BURGF0YVRleHRVSSA6IHB1YmxpYyBHUFREYXRhIHsKICAgIHByb3RlY3RlZDoKICAgIHB1YmxpYzoKICAgICAgIEdQVERhdGFUZXh0VUkodm9pZCk7Ci0gICAgICBHUFREYXRhVGV4dFVJKHN0cmluZyBmaWxlbmFtZSk7CisgICAgICBHUFREYXRhVGV4dFVJKHN0ZDo6c3RyaW5nIGZpbGVuYW1lKTsKICAgICAgIH5HUFREYXRhVGV4dFVJKHZvaWQpOwogCiAgICAgICAvLyBUaGlzIG9uZSBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGRlZmluZWQsIGV2ZW4gdGhvdWdoIGl0IGRvZXMgbm90aGluZyBuZXcuLi4uCkBAIC00OSwyMSArNDcsMjMgQEAKICAgICAgIHZvaWQgQ2hhbmdlVW5pcXVlR3VpZCh2b2lkKTsKICAgICAgIHZvaWQgU2V0QXR0cmlidXRlcyh1aW50MzJfdCBwYXJ0TnVtKTsKICAgICAgIGludCBTZXROYW1lKHVpbnQzMl90IHBhcnROdW0pOworICAgICAgdm9pZCBSZXZlcnNlTmFtZSh1aW50MzJfdCBwYXJ0TnVtKTsKICAgICAgIGludCBTd2FwUGFydGl0aW9ucyh2b2lkKTsKICAgICAgIGludCBEZXN0cm95R1BUd1Byb21wdCh2b2lkKTsgLy8gUmV0dXJucyAxIGlmIHVzZXIgcHJvY2VlZHMKICAgICAgIHZvaWQgU2hvd0RldGFpbHModm9pZCk7CiAgICAgICB2b2lkIE1ha2VIeWJyaWQodm9pZCk7CiAgICAgICBpbnQgWEZvcm1Ub01CUih2b2lkKTsgLy8gY29udmVydCBHUFQgdG8gTUJSLCB3aXBpbmcgR1BUIGFmdGVyd2FyZHMuIFJldHVybnMgMSBpZiBzdWNjZXNzZnVsCisgICAgICB1aW50NjRfdCBHZXRTZWN0b3JOdW0odWludDY0X3QgbG93LCB1aW50NjRfdCBoaWdoLCB1aW50NjRfdCBkZWYsIGNvbnN0IHN0ZDo6c3RyaW5nICYgcHJvbXB0KTsKIAogICAgICAgLy8gQW4gaW5mb3JtYXRpb25hbCBmdW5jdGlvbi4uLi4KICAgICAgIHZvaWQgV2FybkFib3V0SWZmeU1CUlBhcnQoaW50IHBhcnROdW0pOwogCiAgICAgICAvLyBNYWluIG1lbnUgZnVuY3Rpb25zCi0gICAgICB2b2lkIE1haW5NZW51KHN0cmluZyBmaWxlbmFtZSk7CisgICAgICB2b2lkIE1haW5NZW51KHN0ZDo6c3RyaW5nIGZpbGVuYW1lKTsKICAgICAgIHZvaWQgU2hvd0NvbW1hbmRzKHZvaWQpOwotICAgICAgdm9pZCBFeHBlcnRzTWVudShzdHJpbmcgZmlsZW5hbWUpOworICAgICAgdm9pZCBFeHBlcnRzTWVudShzdGQ6OnN0cmluZyBmaWxlbmFtZSk7CiAgICAgICB2b2lkIFNob3dFeHBlcnRDb21tYW5kcyh2b2lkKTsKLSAgICAgIHZvaWQgUmVjb3ZlcnlNZW51KHN0cmluZyBmaWxlbmFtZSk7CisgICAgICB2b2lkIFJlY292ZXJ5TWVudShzdGQ6OnN0cmluZyBmaWxlbmFtZSk7CiAgICAgICB2b2lkIFNob3dSZWNvdmVyeUNvbW1hbmRzKHZvaWQpOwogfTsgLy8gY2xhc3MgR1BURGF0YVRleHRVSQogCmRpZmYgLS1naXQgYS9ndWlkLmNjIGIvZ3VpZC5jYwppbmRleCBlM2U0OTVjLi5kM2U0ZmQ1IDEwMDY0NAotLS0gYS9ndWlkLmNjCisrKyBiL2d1aWQuY2MKQEAgLTEyLDkgKzEyLDcgQEAKIC8vCiAKICNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUwotI2lmbmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TCiAjZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MKLSNlbmRpZgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx0aW1lLmg+CkBAIC0xNDMsNyArMTQxLDcgQEAKIHZvaWQgR1VJRERhdGE6OlJhbmRvbWl6ZSh2b2lkKSB7CiAgICBpbnQgaSwgdXVpZEdlbmVyYXRlZCA9IDA7CiAKLSNpZmRlZiBfVVVJRF9VVUlEX0gKKyNpZiBkZWZpbmVkIChfVVVJRF9VVUlEX0gpIHx8IGRlZmluZWQgKF9VTF9MSUJVVUlEX1VVSURfSCkKICAgIHV1aWRfZ2VuZXJhdGUodXVpZERhdGEpOwogICAgUmV2ZXJzZUJ5dGVzKCZ1dWlkRGF0YVswXSwgNCk7CiAgICBSZXZlcnNlQnl0ZXMoJnV1aWREYXRhWzRdLCAyKTsKZGlmZiAtLWdpdCBhL2d1aWQuaCBiL2d1aWQuaAppbmRleCAyMjlkNWJkLi41MTVhNzVkIDEwMDY0NAotLS0gYS9ndWlkLmgKKysrIGIvZ3VpZC5oCkBAIC0zMCw4ICszMCw2IEBACiB0eXBlZGVmIHV1aWRfdCBteV91dWlkX3Q7CiAjZW5kaWYKIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogLy8gTm90ZTogVGhpcyBjbGFzcydzIGRhdGEgc2l6ZSBpcyBjcml0aWNhbC4gSWYgZGF0YSBlbGVtZW50cyBtdXN0IGJlIGFkZGVkLAogLy8gaXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8gbW9kaWZ5IHZhcmlvdXMgR1BUIGNsYXNzZXMgdG8gY29tcGVuc2F0ZS4KIGNsYXNzIEdVSUREYXRhIHsKQEAgLTM5LDE3ICszNywxNyBAQAogICAgICAgc3RhdGljIGJvb2wgZmlyc3RJbnN0YW5jZTsKICAgIHByb3RlY3RlZDoKICAgICAgIG15X3V1aWRfdCB1dWlkRGF0YTsKLSAgICAgIHN0cmluZyBEZWxldGVTcGFjZXMoc3RyaW5nIHMpOworICAgICAgc3RkOjpzdHJpbmcgRGVsZXRlU3BhY2VzKHN0ZDo6c3RyaW5nIHMpOwogICAgcHVibGljOgogICAgICAgR1VJRERhdGEodm9pZCk7CiAgICAgICBHVUlERGF0YShjb25zdCBHVUlERGF0YSAmIG9yaWcpOwotICAgICAgR1VJRERhdGEoY29uc3Qgc3RyaW5nICYgb3JpZyk7CisgICAgICBHVUlERGF0YShjb25zdCBzdGQ6OnN0cmluZyAmIG9yaWcpOwogICAgICAgR1VJRERhdGEoY29uc3QgY2hhciAqIG9yaWcpOwogICAgICAgfkdVSUREYXRhKHZvaWQpOwogCiAgICAgICAvLyBEYXRhIGFzc2lnbm1lbnQgb3BlcmF0b3JzLi4uLgogICAgICAgR1VJRERhdGEgJiBvcGVyYXRvcj0oY29uc3QgR1VJRERhdGEgJiBvcmlnKTsKLSAgICAgIEdVSUREYXRhICYgb3BlcmF0b3I9KGNvbnN0IHN0cmluZyAmIG9yaWcpOworICAgICAgR1VJRERhdGEgJiBvcGVyYXRvcj0oY29uc3Qgc3RkOjpzdHJpbmcgJiBvcmlnKTsKICAgICAgIEdVSUREYXRhICYgb3BlcmF0b3I9KGNvbnN0IGNoYXIgKiBvcmlnKTsKICAgICAgIHZvaWQgWmVybyh2b2lkKTsKICAgICAgIHZvaWQgUmFuZG9taXplKHZvaWQpOwpAQCAtNTksOSArNTcsOSBAQAogICAgICAgaW50IG9wZXJhdG9yIT0oY29uc3QgR1VJRERhdGEgJiBvcmlnKSBjb25zdDsKIAogICAgICAgLy8gRGF0YSByZXRyaWV2YWwuLi4uCi0gICAgICBzdHJpbmcgQXNTdHJpbmcodm9pZCkgY29uc3Q7CisgICAgICBzdGQ6OnN0cmluZyBBc1N0cmluZyh2b2lkKSBjb25zdDsKIH07IC8vIGNsYXNzIEdVSUREYXRhCiAKLW9zdHJlYW0gJiBvcGVyYXRvcjw8KG9zdHJlYW0gJiBvcywgY29uc3QgR1VJRERhdGEgJiBkYXRhKTsKK3N0ZDo6b3N0cmVhbSAmIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICYgb3MsIGNvbnN0IEdVSUREYXRhICYgZGF0YSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbWJyLmNjIGIvbWJyLmNjCmluZGV4IGEwMWZlOTAuLmMzNDgzYTAgMTAwNjQ0Ci0tLSBhL21ici5jYworKysgYi9tYnIuY2MKQEAgLTcsOSArNyw3IEBACiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2ZXJzaW9uIDIsIGFzIGRldGFpbGVkIGluIHRoZSBDT1BZSU5HIGZpbGUuICovCiAKICNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUwotI2lmbmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TCiAjZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MKLSNlbmRpZgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KZGlmZiAtLWdpdCBhL21ici5oIGIvbWJyLmgKaW5kZXggYmJiODRlZi4uM2VlYTc3NSAxMDA2NDQKLS0tIGEvbWJyLmgKKysrIGIvbWJyLmgKQEAgLTMsNiArMyw5IEBACiAvKiBUaGlzIHByb2dyYW0gaXMgY29weXJpZ2h0IChjKSAyMDA5LTIwMTMgYnkgUm9kZXJpY2sgVy4gU21pdGguIEl0IGlzIGRpc3RyaWJ1dGVkCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2ZXJzaW9uIDIsIGFzIGRldGFpbGVkIGluIHRoZSBDT1BZSU5HIGZpbGUuICovCiAKKyNpZm5kZWYgX19NQlJTVFJVQ1RTCisjZGVmaW5lIF9fTUJSU1RSVUNUUworCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSAiZ3B0cGFydC5oIgpAQCAtMTAsMTEgKzEzLDYgQEAKICNpbmNsdWRlICJkaXNraW8uaCIKICNpbmNsdWRlICJiYXNpY21ici5oIgogCi0jaWZuZGVmIF9fTUJSU1RSVUNUUwotI2RlZmluZSBfX01CUlNUUlVDVFMKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBNQlJEYXRhIGNsYXNzIGFuZCByZWxhdGVkIHN0cnVjdHVyZXMgKgpAQCAtMjYsNyArMjQsNyBAQAogcHJvdGVjdGVkOgogcHVibGljOgogICAgTUJSRGF0YSh2b2lkKSB7fQotICAgTUJSRGF0YShzdHJpbmcgZGV2aWNlRmlsZW5hbWUpIDogQmFzaWNNQlJEYXRhKGRldmljZUZpbGVuYW1lKSB7fQorICAgTUJSRGF0YShzdGQ6OnN0cmluZyBkZXZpY2VGaWxlbmFtZSkgOiBCYXNpY01CUkRhdGEoZGV2aWNlRmlsZW5hbWUpIHt9CiAgICBNQlJEYXRhICYgb3BlcmF0b3I9KGNvbnN0IEJhc2ljTUJSRGF0YSAmIG9yaWcpOwogICAgfk1CUkRhdGEodm9pZCk7CiAKZGlmZiAtLWdpdCBhL21icnBhcnQuY2MgYi9tYnJwYXJ0LmNjCmluZGV4IGM4MDVkNzUuLjBjYTU4MTQgMTAwNjQ0Ci0tLSBhL21icnBhcnQuY2MKKysrIGIvbWJycGFydC5jYwpAQCAtMTgsOSArMTgsNyBAQAogKi8KIAogI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TCi0jaWZuZGVmIF9fU1REQ19DT05TVEFOVF9NQUNST1MKICNkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUwotI2VuZGlmCiAKICNpbmNsdWRlIDxzdGRkZWYuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KZGlmZiAtLWdpdCBhL21icnBhcnQuaCBiL21icnBhcnQuaAppbmRleCAwZGUzNjVmLi42YzdiMjFhIDEwMDY0NAotLS0gYS9tYnJwYXJ0LmgKKysrIGIvbWJycGFydC5oCkBAIC0zMiw4ICszMiw2IEBACiAjZGVmaW5lIEVCUiA0ICAgICAvKiBzZWN0b3IgaXMgdXNlZCBhcyBhbiBFQlIgb3IgTUJSICovCiAjZGVmaW5lIElOVkFMSUQgOCAvKiBzZWN0b3IgbnVtYmVyIGlzIHRvbyBsYXJnZSBmb3IgZGlzayAqLwogCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCiAvLyBEYXRhIGZvciBhIHNpbmdsZSBNQlIgcGFydGl0aW9uIHJlY29yZAogLy8gTm90ZSB0aGF0IGZpcnN0U2VjdG9yIGFuZCBsYXN0U2VjdG9yIGFyZSBpbiBDSFMgYWRkcmVzc2luZywgd2hpY2gKIC8vIHNwbGl0cyB0aGUgYml0cyB1cCBpbiBhIHdlaXJkIHdheS4KZGlmZiAtLWdpdCBhL3BhcnR0eXBlcy5jYyBiL3BhcnR0eXBlcy5jYwppbmRleCBjYmM0MGJhLi5iMmY1YTM1IDEwMDY0NAotLS0gYS9wYXJ0dHlwZXMuY2MKKysrIGIvcGFydHR5cGVzLmNjCkBAIC02LDkgKzYsNyBAQAogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdmVyc2lvbiAyLCBhcyBkZXRhaWxlZCBpbiB0aGUgQ09QWUlORyBmaWxlLiAqLwogCiAjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MKLSNpZm5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPUwogI2RlZmluZSBfX1NURENfQ09OU1RBTlRfTUFDUk9TCi0jZW5kaWYKIAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgpAQCAtMjEsNiArMTksNyBAQAogaW50IFBhcnRUeXBlOjpudW1JbnN0YW5jZXMgPSAwOwogQVR5cGUqIFBhcnRUeXBlOjphbGxUeXBlcyA9IE5VTEw7CiBBVHlwZSogUGFydFR5cGU6Omxhc3RUeXBlID0gTlVMTDsKK2NvbnN0IFBhcnRUeXBlIFBhcnRUeXBlOjp1bnVzZWRQYXJ0VHlwZSA9IChHVUlERGF0YSkgIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCI7CiAKICNkZWZpbmUgU0NSRUVOX1dJRFRIIDgwCiAjZGVmaW5lIE5VTV9DT0xVTU5TIDIKQEAgLTg0LDYgKzgzLDggQEAKICAgIEFkZFR5cGUoMHgwNDAwLCAiRUJEMEEwQTItQjlFNS00NDMzLTg3QzAtNjhCNkI3MjY5OUM3IiwgIk1pY3Jvc29mdCBiYXNpYyBkYXRhIiwgMCk7IC8vIEZBVC0xNiA8IDMyTQogICAgQWRkVHlwZSgweDA2MDAsICJFQkQwQTBBMi1COUU1LTQ0MzMtODdDMC02OEI2QjcyNjk5QzciLCAiTWljcm9zb2Z0IGJhc2ljIGRhdGEiLCAwKTsgLy8gRkFULTE2CiAgICBBZGRUeXBlKDB4MDcwMCwgIkVCRDBBMEEyLUI5RTUtNDQzMy04N0MwLTY4QjZCNzI2OTlDNyIsICJNaWNyb3NvZnQgYmFzaWMgZGF0YSIsIDEpOyAvLyBOVEZTIChvciBIUEZTKQorICAgQWRkVHlwZSgweDA3MDEsICI1NThENDNDNS1BMUFDLTQzQzAtQUFDOC1EMTQ3MkIyOTIzRDEiLCAiTWljcm9zb2Z0IFN0b3JhZ2UgUmVwbGljYSIsIDEpOworICAgQWRkVHlwZSgweDA3MDIsICI5MEI2RkYzOC1COThGLTQzNTgtQTIxRi00OEYzNUI0QThBRDMiLCAiQXJjYU9TIFR5cGUgMSIsIDEpOwogICAgQWRkVHlwZSgweDBiMDAsICJFQkQwQTBBMi1COUU1LTQ0MzMtODdDMC02OEI2QjcyNjk5QzciLCAiTWljcm9zb2Z0IGJhc2ljIGRhdGEiLCAwKTsgLy8gRkFULTMyCiAgICBBZGRUeXBlKDB4MGMwMCwgIkVCRDBBMEEyLUI5RTUtNDQzMy04N0MwLTY4QjZCNzI2OTlDNyIsICJNaWNyb3NvZnQgYmFzaWMgZGF0YSIsIDApOyAvLyBGQVQtMzIgTEJBCiAgICBBZGRUeXBlKDB4MGMwMSwgIkUzQzlFMzE2LTBCNUMtNERCOC04MTdELUY5MkRGMDAyMTVBRSIsICJNaWNyb3NvZnQgcmVzZXJ2ZWQiKTsKQEAgLTEyNiw2ICsxMjcsOSBAQAogICAgQWRkVHlwZSgweDdmMDAsICJGRTNBMkE1RC00RjMyLTQxQTctQjcyNS1BQ0NDMzI4NUEzMDkiLCAiQ2hyb21lT1Mga2VybmVsIik7CiAgICBBZGRUeXBlKDB4N2YwMSwgIjNDQjhFMjAyLTNCN0UtNDdERC04QTNDLTdGRjJBMTNDRkNFQyIsICJDaHJvbWVPUyByb290Iik7CiAgICBBZGRUeXBlKDB4N2YwMiwgIjJFMEE3NTNELTlFNDgtNDNCMC04MzM3LUIxNTE5MkNCMUI1RSIsICJDaHJvbWVPUyByZXNlcnZlZCIpOworICAgQWRkVHlwZSgweDdmMDMsICJDQUI2RTg4RS1BQkYzLTQxMDItQTA3QS1ENEJCOUJFM0MxRDMiLCAiQ2hyb21lT1MgZmlybXdhcmUiKTsKKyAgIEFkZFR5cGUoMHg3ZjA0LCAiMDk4NDU4NjAtNzA1Ri00QkI1LUIxNkMtOEE4QTA5OUNBRjUyIiwgIkNocm9tZU9TIG1pbmktT1MiKTsKKyAgIEFkZFR5cGUoMHg3ZjA1LCAiM0YwRjgzMTgtRjE0Ni00RTZCLTgyMjItQzI4QzhGMDJFMEQ1IiwgIkNocm9tZU9TIGhpYmVybmF0ZSIpOwogCiAgICAvLyBMaW51eC1zcGVjaWZpYyBwYXJ0aXRpb24gdHlwZXMuLi4uCiAgICBBZGRUeXBlKDB4ODIwMCwgIjA2NTdGRDZELUE0QUItNDNDNC04NEU1LTA5MzNDODRCNEY0RiIsICJMaW51eCBzd2FwIik7IC8vIExpbnV4IHN3YXAgKG9yIFNvbGFyaXMgb24gTUJSKQpAQCAtMTQ5LDkgKzE1MywyOSBAQAogICAgQWRkVHlwZSgweDgzMEYsICI4NkVEMTBENS1CNjA3LTQ1QkItODk1Ny1EMzUwRjIzRDA1NzEiLCAiTGludXggSUEtNjQgcm9vdCB2ZXJpdHkiKTsKICAgIEFkZFR5cGUoMHg4MzEwLCAiNEQyMUIwMTYtQjUzNC00NUMyLUE5RkItNUMxNkUwOTFGRDJEIiwgIkxpbnV4IC92YXIiKTsgLy8gTGludXggL3ZhciAoYXV0by1tb3VudGVkIGJ5IHN5c3RlbWQpCiAgICBBZGRUeXBlKDB4ODMxMSwgIjdFQzZGNTU3LTNCQzUtNEFDQS1CMjkzLTE2RUY1REY2MzlEMSIsICJMaW51eCAvdmFyL3RtcCIpOyAvLyBMaW51eCAvdmFyL3RtcCAoYXV0by1tb3VudGVkIGJ5IHN5c3RlbWQpCisgICAvLyBodHRwczovL3N5c3RlbWQuaW8vSE9NRV9ESVJFQ1RPUlkvCisgICBBZGRUeXBlKDB4ODMxMiwgIjc3M0Y5MUVGLTY2RDQtNDlCNS1CRDgzLUQ2ODNCRjQwQUQxNiIsICJMaW51eCB1c2VyJ3MgaG9tZSIpOyAvLyB1c2VkIGJ5IHN5c3RlbWQtaG9tZWQKKyAgIEFkZFR5cGUoMHg4MzEzLCAiNzUyNTBENzYtOENDNi00NThFLUJENjYtQkQ0N0NDODFBODEyIiwgIkxpbnV4IHg4NiAvdXNyICIpOyAvLyBMaW51eCAvdXNyIG9uIHg4NiAoYXV0by1tb3VudGVkIGJ5IHN5c3RlbWQpCisgICBBZGRUeXBlKDB4ODMxNCwgIjg0ODQ2ODBDLTk1MjEtNDhDNi05QzExLUIwNzIwNjU2RjY5RSIsICJMaW51eCB4ODYtNjQgL3VzciIpOyAvLyBMaW51eCAvdXNyIG9uIHg4Ni02NCAoYXV0by1tb3VudGVkIGJ5IHN5c3RlbWQpCisgICBBZGRUeXBlKDB4ODMxNSwgIjdEMDM1OUEzLTAyQjMtNEYwQS04NjVDLTY1NDQwM0U3MDYyNSIsICJMaW51eCBBUk0zMiAvdXNyIik7IC8vIExpbnV4IC91c3Igb24gMzItYml0IEFSTSAoYXV0by1tb3VudGVkIGJ5IHN5c3RlbWQpCisgICBBZGRUeXBlKDB4ODMxNiwgIkIwRTAxMDUwLUVFNUYtNDM5MC05NDlBLTkxMDFCMTcxMDRFOSIsICJMaW51eCBBUk02NCAvdXNyIik7IC8vIExpbnV4IC91c3Igb24gNjQtYml0IEFSTSAoYXV0by1tb3VudGVkIGJ5IHN5c3RlbWQpCisgICBBZGRUeXBlKDB4ODMxNywgIjQzMDFEMkE2LTRFM0ItNEIyQS1CQjk0LTlFMEIyQzQyMjVFQSIsICJMaW51eCBJQS02NCAvdXNyIik7IC8vIExpbnV4IC91c3Igb24gSXRhbml1bSAoYXV0by1tb3VudGVkIGJ5IHN5c3RlbWQpCisgICBBZGRUeXBlKDB4ODMxOCwgIjhGNDYxQjBELTE0RUUtNEU4MS05QUE5LTA0OUI2RkI5N0FCRCIsICJMaW51eCB4ODYgL3VzciB2ZXJpdHkiKTsKKyAgIEFkZFR5cGUoMHg4MzE5LCAiNzdGRjVGNjMtRTdCNi00NjMzLUFDRjQtMTU2NUI4NjRDMEU2IiwgIkxpbnV4IHg4Ni02NCAvdXNyIHZlcml0eSIpOworICAgQWRkVHlwZSgweDgzMUEsICJDMjE1RDc1MS03QkNELTQ2NDktQkU5MC02NjI3NDkwQTRDMDUiLCAiTGludXggQVJNMzIgL3VzciB2ZXJpdHkiKTsKKyAgIEFkZFR5cGUoMHg4MzFCLCAiNkUxMUE0RTctRkJDQS00REVELUI5RTktRTFBNTEyQkI2NjRFIiwgIkxpbnV4IEFSTTY0IC91c3IgdmVyaXR5Iik7CisgICBBZGRUeXBlKDB4ODMxQywgIjZBNDkxRTAzLTNCRTctNDU0NS04RTM4LTgzMzIwRTBFQTg4MCIsICJMaW51eCBJQS02NCAvdXNyIHZlcml0eSIpOwogCiAgICAvLyBVc2VkIGJ5IEludGVsIFJhcGlkIFN0YXJ0IHRlY2hub2xvZ3kKICAgIEFkZFR5cGUoMHg4NDAwLCAiRDNCRkUyREUtM0RBRi0xMURGLUJBNDAtRTNBNTU2RDg5NTkzIiwgIkludGVsIFJhcGlkIFN0YXJ0Iik7CisgICAvLyBUaGlzIGlzIGFub3RoZXIgSW50ZWwtYXNzb2NpYXRlZCB0ZWNobm9sb2d5LCBzbyBJJ20ga2VlcGluZyBpdCBjbG9zZSB0byB0aGUgcHJldmlvdXMgb25lLi4uLgorICAgQWRkVHlwZSgweDg0MDEsICI3QzUyMjJCRC04RjVELTQwODctOUMwMC1CRjk4NDNDN0I1OEMiLCAiU1BESyBibG9jayBkZXZpY2UiKTsKKworICAgLy8gVHlwZSBjb2RlcyBmb3IgQ29udGFpbmVyIExpbnV4IChmb3JtZXJseSBDb3JlT1M7IGh0dHBzOi8vY29yZW9zLmNvbSkKKyAgIEFkZFR5cGUoMHg4NTAwLCAiNURGQkY1RjQtMjg0OC00QkFDLUFBNUUtMEQ5QTIwQjc0NUE2IiwgIkNvbnRhaW5lciBMaW51eCAvdXNyIik7CisgICBBZGRUeXBlKDB4ODUwMSwgIjM4ODRERDQxLTg1ODItNDQwNC1COUE4LUU5Qjg0RjJERjUwRSIsICJDb250YWluZXIgTGludXggcmVzaXphYmxlIHJvb3RmcyIpOworICAgQWRkVHlwZSgweDg1MDIsICJDOTVEQzIxQS1ERjBFLTQzNDAtOEQ3Qi0yNkNCRkE5QTAzRTAiLCAiQ29udGFpbmVyIExpbnV4IC9PRU0gY3VzdG9taXphdGlvbnMiKTsKKyAgIEFkZFR5cGUoMHg4NTAzLCAiQkU5MDY3QjktRUE0OS00RjE1LUI0RjYtRjM2RjhDOUUxODE4IiwgIkNvbnRhaW5lciBMaW51eCByb290IG9uIFJBSUQiKTsKIAogICAgLy8gQW5vdGhlciBMaW51eCB0eXBlIGNvZGUuLi4uCiAgICBBZGRUeXBlKDB4OGUwMCwgIkU2RDZEMzc5LUY1MDctNDRDMi1BMjNDLTIzOEYyQTNERjkyOCIsICJMaW51eCBMVk0iKTsKQEAgLTIzNyw2ICsyNjEsNyBAQAogICAgQWRkVHlwZSgweGE1MDMsICI1MTZFN0NCNi02RUNGLTExRDYtOEZGOC0wMDAyMkQwOTcxMkIiLCAiRnJlZUJTRCBVRlMiKTsKICAgIEFkZFR5cGUoMHhhNTA0LCAiNTE2RTdDQkEtNkVDRi0xMUQ2LThGRjgtMDAwMjJEMDk3MTJCIiwgIkZyZWVCU0QgWkZTIik7CiAgICBBZGRUeXBlKDB4YTUwNSwgIjUxNkU3Q0I4LTZFQ0YtMTFENi04RkY4LTAwMDIyRDA5NzEyQiIsICJGcmVlQlNEIFZpbnVtL1JBSUQiKTsKKyAgIEFkZFR5cGUoMHhhNTA2LCAiNzRCQTdERDktQTY4OS0xMUUxLUJEMDQtMDBFMDgxMjg2QUNGIiwgIkZyZWVCU0QgbmFuZGZzIik7CiAKICAgIC8vIE1pZG5pZ2h0IEJTRCBwYXJ0aXRpb24gdHlwZXMuLi4uCiAgICBBZGRUeXBlKDB4YTU4MCwgIjg1RDVFNDVBLTIzN0MtMTFFMS1CNEIzLUU4OUE4RjdGQzNBNyIsICJNaWRuaWdodCBCU0QgZGF0YSIpOwpAQCAtMjc1LDEwICszMDAsMTkgQEAKICAgIEFkZFR5cGUoMHhhZjA4LCAiRkE3MDlDN0UtNjVCMS00NTkzLUJGRDUtRTcxRDYxREU5QjAyIiwgIkFwcGxlIFNvZnRSQUlEIFZvbHVtZSIpOwogICAgQWRkVHlwZSgweGFmMDksICJCQkJBNkRGNS1GNDZGLTRBODktOEY1OS04NzY1QjI3Mjc1MDMiLCAiQXBwbGUgU29mdFJBSUQgQ2FjaGUiKTsKICAgIEFkZFR5cGUoMHhhZjBhLCAiN0MzNDU3RUYtMDAwMC0xMUFBLUFBMTEtMDAzMDY1NDNFQ0FDIiwgIkFwcGxlIEFQRlMiKTsKKyAgIEFkZFR5cGUoMHhhZjBiLCAiNjk2NDY5NjEtNjcwMC0xMUFBLUFBMTEtMDAzMDY1NDNFQ0FDIiwgIkFwcGxlIEFQRlMgUHJlLUJvb3QiKTsKKyAgIEFkZFR5cGUoMHhhZjBjLCAiNTI2Mzc2NzItNzkwMC0xMUFBLUFBMTEtMDAzMDY1NDNFQ0FDIiwgIkFwcGxlIEFQRlMgUmVjb3ZlcnkiKTsKKworICAgLy8gVS1Cb290IGJvb3QgbG9hZGVyOyBzZWUgaHR0cHM6Ly9saXN0cy5kZW54LmRlL3BpcGVybWFpbC91LWJvb3QvMjAyMC1Ob3ZlbWJlci80MzI5MjguaHRtbAorICAgLy8gYW5kIGh0dHBzOi8vc291cmNlLmRlbnguZGUvdS1ib290L3UtYm9vdC8tL2Jsb2IvdjIwMjEuMDcvaW5jbHVkZS9wYXJ0X2VmaS5oI0w1OS02MQorICAgQWRkVHlwZSgweGIwMDAsICIzREUyMTc2NC05NUJELTU0QkQtQTVDMy00QUJFNzg2RjM4QTgiLCAiVS1Cb290IGJvb3QgbG9hZGVyIik7CiAKICAgIC8vIFFOWCBQb3dlci1TYWZlIChRTlg2KQogICAgQWRkVHlwZSgweGIzMDAsICJDRUY1QTlBRC03M0JDLTQ2MDEtODlGMy1DREVFRUVFMzIxQTEiLCAiUU5YNiBQb3dlci1TYWZlIik7CiAKKyAgIC8vIEJhcmVib3ggYm9vdCBsb2FkZXI7IHNlZSBodHRwczovL2JhcmVib3gub3JnL2RvYy9sYXRlc3QvdXNlci9zdGF0ZS5odG1sP2hpZ2hsaWdodD1ndWlkI3NkLWVtbWMtYW5kLWF0YQorICAgQWRkVHlwZSgweGJiMDAsICI0Nzc4RUQ2NS1CRjQyLTQ1RkEtOUM1Qi0yODdBMURDNEFBQjEiLCAiQmFyZWJveCBib290IGxvYWRlciIpOworCiAgICAvLyBBY3JvbmlzIFNlY3VyZSBab25lCiAgICBBZGRUeXBlKDB4YmMwMCwgIjAzMTFGQzUwLTAxQ0EtNDcyNS1BRDc3LTlBREJCMjBBQ0U5OCIsICJBY3JvbmlzIFNlY3VyZSBab25lIik7CiAKQEAgLTMwNiw4ICszNDAsMTEgQEAKICAgIEFkZFR5cGUoMHhlMTAwLCAiNzQxMkY3RDUtQTE1Ni00QjEzLTgxREMtODY3MTc0OTI5MzI1IiwgIk9OSUUgYm9vdCIpOwogICAgQWRkVHlwZSgweGUxMDEsICJENEU2RTJDRC00NDY5LTQ2RjMtQjVDQi0xQkZGNTdBRkMxNDkiLCAiT05JRSBjb25maWciKTsKIAotICAgLy8gU2VlIGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU3BlY2lmaWNhdGlvbnMvQm9vdExvYWRlclNwZWMKLSAgIEFkZFR5cGUoMHhlYTAwLCAiQkMxM0MyRkYtNTlFNi00MjYyLUEzNTItQjI3NUZENkY3MTcyIiwgIkZyZWVkZXNrdG9wICRCT09UIik7CisgICAvLyBWZXJhY3J5cHQgKGh0dHBzOi8vd3d3LnZlcmFjcnlwdC5mci9lbi9Ib21lLmh0bWwpIGVuY3J5cHRlZCBwYXJ0aXRpb24KKyAgIEFkZFR5cGUoMHhlOTAwLCAiOEM4RjhFRkYtQUM5NS00NzcwLTgxNEEtMjE5OTRGMkRCQzhGIiwgIlZlcmFjcnlwdCBkYXRhIik7CisKKyAgIC8vIFNlZSBodHRwczovL3N5c3RlbWQuaW8vQk9PVF9MT0FERVJfU1BFQ0lGSUNBVElPTi8KKyAgIEFkZFR5cGUoMHhlYTAwLCAiQkMxM0MyRkYtNTlFNi00MjYyLUEzNTItQjI3NUZENkY3MTcyIiwgIlhCT09UTERSIHBhcnRpdGlvbiIpOwogCiAgICAvLyBUeXBlIGNvZGUgZm9yIEhhaWt1OyB1c2VzIEJlT1MgTUJSIGNvZGUgYXMgaGV4IGNvZGUgYmFzZQogICAgQWRkVHlwZSgweGViMDAsICI0MjQ2NTMzMS0zQkEzLTEwRjEtODAyQS00ODYxNjk2Qjc1MjEiLCAiSGFpa3UgQkZTIik7CkBAIC0zMjEsNiArMzU4LDM1IEBACiAgICBBZGRUeXBlKDB4ZWYwMSwgIjAyNERFRTQxLTMzRTctMTFEMy05RDY5LTAwMDhDNzgxRjM5RiIsICJNQlIgcGFydGl0aW9uIHNjaGVtZSIpOyAvLyBVc2VkIHRvIG5lc3QgTUJSIGluIEdQVAogICAgQWRkVHlwZSgweGVmMDIsICIyMTY4NjE0OC02NDQ5LTZFNkYtNzQ0RS02NTY1NjQ0NTQ2NDkiLCAiQklPUyBib290IHBhcnRpdGlvbiIpOyAvLyBVc2VkIGJ5IEdSVUIKIAorICAgLy8gRnVzY2lhIE9TIGNvZGVzOyBzZWUgaHR0cHM6Ly9jcy5vcGVuc291cmNlLmdvb2dsZS9mdWNoc2lhL2Z1Y2hzaWEvKy9tYWluOnppcmNvbi9zeXN0ZW0vcHVibGljL3ppcmNvbi9ody9ncHQuaAorICAgQWRkVHlwZSgweGYxMDAsICJGRThBMjYzNC01RTJFLTQ2QkEtOTlFMy0zQTE5MjA5MUEzNTAiLCAiRnVjaHNpYSBib290IGxvYWRlciAoc2xvdCBBL0IvUikiKTsKKyAgIEFkZFR5cGUoMHhmMTAxLCAiRDlGRDQ1MzUtMTA2Qy00Q0VDLThEMzctREZDMDIwQ0E4N0NCIiwgIkZ1Y2hzaWEgZHVyYWJsZSBtdXRhYmxlIGVuY3J5cHRlZCBzeXN0ZW0gZGF0YSIpOworICAgQWRkVHlwZSgweGYxMDIsICJBNDA5RTE2Qi03OEFBLTRBQ0MtOTk1Qy0zMDIzNTI2MjFBNDEiLCAiRnVjaHNpYSBkdXJhYmxlIG11dGFibGUgYm9vdCBsb2FkZXIiKTsKKyAgIEFkZFR5cGUoMHhmMTAzLCAiRjk1RDk0MEUtQ0FCQS00NTc4LTlCOTMtQkI2QzkwRjI5RDNFIiwgIkZ1Y2hzaWEgZmFjdG9yeSBybyBzeXN0ZW0gZGF0YSIpOworICAgQWRkVHlwZSgweGYxMDQsICIxMEI4REJBQS1EMkJGLTQyQTktOThDNi1BN0M1REIzNzAxRTciLCAiRnVjaHNpYSBmYWN0b3J5IHJvIGJvb3Rsb2FkZXIgZGF0YSIpOworICAgQWRkVHlwZSgweGYxMDUsICI0OUZEN0NCOC1ERjE1LTRFNzMtQjlEOS05OTIwNzAxMjdGMEYiLCAiRnVjaHNpYSBWb2x1bWUgTWFuYWdlciIpOworICAgQWRkVHlwZSgweGYxMDYsICI0MjFBOEJGQy04NUQ5LTREODUtQUNEQS1CNjRFRUMwMTMzRTkiLCAiRnVjaHNpYSB2ZXJpZmllZCBib290IG1ldGFkYXRhIChzbG90IEEvQi9SKSIpOworICAgQWRkVHlwZSgweGYxMDcsICI5QjM3RkZGNi0yRTU4LTQ2NkEtOTgzQS1GNzkyNkQwQjA0RTAiLCAiRnVjaHNpYSBaaXJjb24gYm9vdCBpbWFnZSAoc2xvdCBBL0IvUikiKTsKKyAgIEFkZFR5cGUoMHhmMTA4LCAiQzEyQTczMjgtRjgxRi0xMUQyLUJBNEItMDBBMEM5M0VDOTNCIiwgIkZ1Y2hzaWEgRVNQIik7CisgICBBZGRUeXBlKDB4ZjEwOSwgIjYwNkIwMDBCLUI3QzctNDY1My1BN0Q1LUI3MzczMzJDODk5RCIsICJGdWNoc2lhIFN5c3RlbSIpOworICAgQWRkVHlwZSgweGYxMGEsICIwODE4NUYwQy04OTJELTQyOEEtQTc4OS1EQkVFQzhGNTVFNkEiLCAiRnVjaHNpYSBEYXRhIik7CisgICBBZGRUeXBlKDB4ZjEwYiwgIjQ4NDM1NTQ2LTQ5NTMtMjA0MS00OTRFLTUzNTQ0MTRDNEM1MiIsICJGdWNoc2lhIEluc3RhbGwiKTsKKyAgIEFkZFR5cGUoMHhmMTBjLCAiMjk2NzM4MEUtMTM0Qy00Q0JCLUI2REEtMTdFN0NFMUNBNDVEIiwgIkZ1Y2hzaWEgQmxvYiIpOworICAgQWRkVHlwZSgweGYxMGQsICI0MUQwRTM0MC01N0UzLTk1NEUtOEMxRS0xN0VDQUM0NENGRjUiLCAiRnVjaHNpYSBGVk0iKTsKKyAgIEFkZFR5cGUoMHhmMTBlLCAiREUzMENDODYtMUY0QS00QTMxLTkzQzQtNjZGMTQ3RDMzRTA1IiwgIkZ1Y2hzaWEgWmlyY29uIGJvb3QgaW1hZ2UgKHNsb3QgQSkiKTsKKyAgIEFkZFR5cGUoMHhmMTBmLCAiMjNDQzA0REYtQzI3OC00Q0U3LTg0NzEtODk3RDFBNEJDREY3IiwgIkZ1Y2hzaWEgWmlyY29uIGJvb3QgaW1hZ2UgKHNsb3QgQikiKTsKKyAgIEFkZFR5cGUoMHhmMTEwLCAiQTBFNUNGNTctMkRFRi00NkJFLUE4MEMtQTIwNjdDMzdDRDQ5IiwgIkZ1Y2hzaWEgWmlyY29uIGJvb3QgaW1hZ2UgKHNsb3QgUikiKTsKKyAgIEFkZFR5cGUoMHhmMTExLCAiNEU1RTk4OUUtNEM4Ni0xMUU4LUExNUItNDgwRkNGMzVGOEU2IiwgIkZ1Y2hzaWEgc3lzLWNvbmZpZyIpOworICAgQWRkVHlwZSgweGYxMTIsICI1QTNBOTBCRS00Qzg2LTExRTgtQTE1Qi00ODBGQ0YzNUY4RTYiLCAiRnVjaHNpYSBmYWN0b3J5LWNvbmZpZyIpOworICAgQWRkVHlwZSgweGYxMTMsICI1RUNFOTRGRS00Qzg2LTExRTgtQTE1Qi00ODBGQ0YzNUY4RTYiLCAiRnVjaHNpYSBib290bG9hZGVyIik7CisgICBBZGRUeXBlKDB4ZjExNCwgIjhCOTREMDQzLTMwQkUtNDg3MS05REZBLUQ2OTU1NkU4QzFGMyIsICJGdWNoc2lhIGd1aWQtdGVzdCIpOworICAgQWRkVHlwZSgweGYxMTUsICJBMTNCNEQ5QS1FQzVGLTExRTgtOTdEOC02QzNCRTUyNzA1QkYiLCAiRnVjaHNpYSB2ZXJpZmllZCBib290IG1ldGFkYXRhIChBKSIpOworICAgQWRkVHlwZSgweGYxMTYsICJBMjg4QUJGMi1FQzVGLTExRTgtOTdEOC02QzNCRTUyNzA1QkYiLCAiRnVjaHNpYSB2ZXJpZmllZCBib290IG1ldGFkYXRhIChCKSIpOworICAgQWRkVHlwZSgweGYxMTcsICI2QTI0NjBDMy1DRDExLTRFOEItODBBOC0xMkNDRTI2OEVEMEEiLCAiRnVjaHNpYSB2ZXJpZmllZCBib290IG1ldGFkYXRhIChSKSIpOworICAgQWRkVHlwZSgweGYxMTgsICIxRDc1Mzk1RC1GMkM2LTQ3NkItQThCNy00NUNDMUM5N0I0NzYiLCAiRnVjaHNpYSBtaXNjIik7CisgICBBZGRUeXBlKDB4ZjExOSwgIjkwMEIwRkM1LTkwQ0QtNEQ0Ri04NEY5LTlGOEVENTc5REI4OCIsICJGdWNoc2lhIGVtbWMtYm9vdDEiKTsKKyAgIEFkZFR5cGUoMHhmMTFhLCAiQjJCMkU4RDEtN0MxMC00RUJDLUEyRDAtNDYxNDU2ODI2MEFEIiwgIkZ1Y2hzaWEgZW1tYy1ib290MiIpOworCiAgICAvLyBDZXBoIHR5cGUgY29kZXM7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2VwaC9jZXBoL2Jsb2IvOWJjYzQyYTNlNmIwODUyMTY5NGI1YzAyMjhiMmM2ZWQ3YjNkMzEyZS9zcmMvY2VwaC1kaXNrI0w3Ni1MODEKICAgIC8vIGFuZCBXaWtpcGVkaWEKICAgIEFkZFR5cGUoMHhmODAwLCAiNEZCRDdFMjktOUQyNS00MUI4LUFGRDAtMDYyQzBDRUZGMDVEIiwgIkNlcGggT1NEIik7IC8vIENlcGggT2JqZWN0IFN0b3JhZ2UgRGFlbW9uCkBAIC01MjMsMTAgKzU4OSwxMCBAQAogICAgY291dC51bnNldGYoaW9zOjp1cHBlcmNhc2UpOwogICAgaWYgKG1heExpbmVzID4gMCkgewogICAgICAgY291dCA8PCAiVHlwZSBzZWFyY2ggc3RyaW5nLCBvciA8RW50ZXI+IHRvIHNob3cgYWxsIGNvZGVzOiAiOwotICAgICAgbWF0Y2hTdHJpbmcgPSBSZWFkU3RyaW5nKCk7CisgICAgICBtYXRjaFN0cmluZyA9IFRvTG93ZXIoUmVhZFN0cmluZygpKTsKICAgIH0gLy8gaWYKICAgIHdoaWxlICh0aGlzVHlwZSAhPSBOVUxMKSB7Ci0gICAgICBmb3VuZCA9IHRoaXNUeXBlLT5uYW1lLmZpbmQobWF0Y2hTdHJpbmcpOworICAgICAgZm91bmQgPSBUb0xvd2VyKHRoaXNUeXBlLT5uYW1lKS5maW5kKG1hdGNoU3RyaW5nKTsKICAgICAgIGlmICgodGhpc1R5cGUtPmRpc3BsYXkgPT0gMSkgJiYgKGZvdW5kICE9IHN0cmluZzo6bnBvcykpIHsgLy8gc2hvdyBpdAogICAgICAgICAgY291dC5maWxsKCcwJyk7CiAgICAgICAgICBjb3V0LndpZHRoKDQpOwpAQCAtNTM4LDggKzYwNCwxMCBAQAogICAgICAgICAgICAgaWYgKHRoaXNUeXBlLT5uZXh0KSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICJcbiI7CiAgICAgICAgICAgICAgICBpZiAoKG1heExpbmVzID4gMCkgJiYgKGxpbmVDb3VudCsrICUgbWF4TGluZXMpID09IDApIHsKLSAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIlByZXNzIHRoZSA8RW50ZXI+IGtleSB0byBzZWUgbW9yZSBjb2RlczogIjsKKyAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIlByZXNzIHRoZSA8RW50ZXI+IGtleSB0byBzZWUgbW9yZSBjb2RlcywgcSB0byBxdWl0OiAiOwogICAgICAgICAgICAgICAgICAgZ2V0bGluZShjaW4sIGxpbmUpOworICAgICAgICAgICAgICAgICAgaWYgKChsaW5lWzBdID09J3EnKSB8fCAobGluZVswXSA9PSdRJykpCisgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gLy8gaWYgcmVhY2hlZCBzY3JlZW4gbGluZSBsaW1pdAogICAgICAgICAgICAgfSAvLyBpZiB0aGVyZSdzIGFub3RoZXIgZW50cnkgZm9sbG93aW5nIHRoaXMgb25lCiAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvcGFydHR5cGVzLmggYi9wYXJ0dHlwZXMuaAppbmRleCBjMTA4YTE3Li40ZTFkOTY4IDEwMDY0NAotLS0gYS9wYXJ0dHlwZXMuaAorKysgYi9wYXJ0dHlwZXMuaApAQCAtMSwyMSArMSwxOSBAQAogLyogVGhpcyBwcm9ncmFtIGlzIGNvcHlyaWdodCAoYykgMjAwOS0yMDE4IGJ5IFJvZGVyaWNrIFcuIFNtaXRoLiBJdCBpcyBkaXN0cmlidXRlZAogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdmVyc2lvbiAyLCBhcyBkZXRhaWxlZCBpbiB0aGUgQ09QWUlORyBmaWxlLiAqLwogCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaWZkZWYgVVNFX1VURjE2Ci0jaW5jbHVkZSA8dW5pY29kZS91c3RyZWFtLmg+Ci0jZWxzZQotI2RlZmluZSBVbmljb2RlU3RyaW5nIHN0cmluZwotI2VuZGlmCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgInN1cHBvcnQuaCIKLSNpbmNsdWRlICJndWlkLmgiCi0KICNpZm5kZWYgX19QQVJUSVRJT05fVFlQRVMKICNkZWZpbmUgX19QQVJUSVRJT05fVFlQRVMKIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSAic3VwcG9ydC5oIgorI2luY2x1ZGUgImd1aWQuaCIKKyNpZmRlZiBVU0VfVVRGMTYKKyNpbmNsdWRlIDx1bmljb2RlL3VzdHJlYW0uaD4KKyNlbHNlCisjZGVmaW5lIFVuaWNvZGVTdHJpbmcgc3RkOjpzdHJpbmcKKyNlbmRpZgogCiAvLyBBIHBhcnRpdGlvbiB0eXBlCiBzdHJ1Y3QgQVR5cGUgewpAQCAtMjQsNyArMjIsNyBAQAogICAgLy8gY29kZXMgcmVxdWlyZWQgYnkgR1BUCiAgICB1aW50MTZfdCBNQlJUeXBlOwogICAgR1VJRERhdGEgR1VJRFR5cGU7Ci0gICBzdHJpbmcgbmFtZTsKKyAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICBpbnQgZGlzcGxheTsgLy8gMSB0byBzaG93IHRvIHVzZXJzIGFzIGF2YWlsYWJsZSB0eXBlLCAwIG5vdCB0bwogICAgQVR5cGUqIG5leHQ7CiB9OyAvLyBzdHJ1Y3QgQVR5cGUKQEAgLTM2LDYgKzM0LDkgQEAKICAgIHN0YXRpYyBBVHlwZSogbGFzdFR5cGU7IC8vIFBvaW50ZXIgdG8gbGFzdCBlbnRyeSBpbiB0aGUgbGlzdAogICAgdm9pZCBBZGRBbGxUeXBlcyh2b2lkKTsKIHB1YmxpYzoKKyAgIC8vIFBhcnRUeXBlIHdpdGggR1VJRCAiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIgorICAgc3RhdGljIGNvbnN0IFBhcnRUeXBlIHVudXNlZFBhcnRUeXBlOworCiAgICBQYXJ0VHlwZSh2b2lkKTsKICAgIFBhcnRUeXBlKGNvbnN0IFBhcnRUeXBlICYgb3JpZyk7CiAgICBQYXJ0VHlwZShjb25zdCBHVUlERGF0YSAmIG9yaWcpOwpAQCAtNDUsNyArNDYsNyBAQAogICAgaW50IEFkZFR5cGUodWludDE2X3QgbWJyVHlwZSwgY29uc3QgY2hhciAqIGd1aWREYXRhLCBjb25zdCBjaGFyICogbmFtZSwgaW50IHRvRGlzcGxheSA9IDEpOwogCiAgICAvLyBOZXcgYXNzaWdubWVudCBvcGVyYXRvcnMuLi4uCi0gICBQYXJ0VHlwZSAmIG9wZXJhdG9yPShjb25zdCBzdHJpbmcgJiBvcmlnKTsKKyAgIFBhcnRUeXBlICYgb3BlcmF0b3I9KGNvbnN0IHN0ZDo6c3RyaW5nICYgb3JpZyk7CiAgICBQYXJ0VHlwZSAmIG9wZXJhdG9yPShjb25zdCBjaGFyICogb3JpZyk7CiAKICAgIC8vIEFzc2lnbm1lbnQgb3BlcmF0b3JzIGJhc2VkIG9uIGJhc2UgY2xhc3MuLi4uCkBAIC01NSw3ICs1Niw3IEBACiAgICBQYXJ0VHlwZSAmIG9wZXJhdG9yPSh1aW50MTZfdCBJRCk7IC8vIFVzZSBNQlIgdHlwZSBjb2RlIHRpbWVzIDB4MDEwMCB0byBhc3NpZ24gR1VJRAogCiAgICAvLyBSZXRyaWV2ZSB0cmFuc2Zvcm1lZCBHVUlEIGRhdGEgYmFzZWQgb24gdHlwZSBjb2RlIG1hdGNoZXMKLSAgIHN0cmluZyBUeXBlTmFtZSh2b2lkKSBjb25zdDsKKyAgIHN0ZDo6c3RyaW5nIFR5cGVOYW1lKHZvaWQpIGNvbnN0OwogICAgVW5pY29kZVN0cmluZyBVVHlwZU5hbWUodm9pZCkgY29uc3Q7CiAgICB1aW50MTZfdCBHZXRIZXhUeXBlKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL3NnZGlzay44IGIvc2dkaXNrLjgKaW5kZXggZDVhNzFhMC4uZmE1M2IyOSAxMDA2NDQKLS0tIGEvc2dkaXNrLjgKKysrIGIvc2dkaXNrLjgKQEAgLTEsNiArMSw2IEBACi0uXCIgQ29weXJpZ2h0IDIwMTEtMjAxOCBSb2RlcmljayBXLiBTbWl0aCAocm9kc21pdGhAcm9kc2Jvb2tzLmNvbSkKKy5cIiBDb3B5cmlnaHQgMjAxMS0yMDIyIFJvZGVyaWNrIFcuIFNtaXRoIChyb2RzbWl0aEByb2RzYm9va3MuY29tKQogLlwiIE1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLS5USCAiU0dESVNLIiAiOCIgIjEuMC40IiAiUm9kZXJpY2sgVy4gU21pdGgiICJHUFQgZmRpc2sgTWFudWFsIgorLlRIICJTR0RJU0siICI4IiAiMS4wLjkiICJSb2RlcmljayBXLiBTbWl0aCIgIkdQVCBmZGlzayBNYW51YWwiCiAuU0ggIk5BTUUiCiBzZ2Rpc2sgXC0gQ29tbWFuZFwtbGluZSBHVUlEIHBhcnRpdGlvbiB0YWJsZSAoR1BUKSBtYW5pcHVsYXRvciBmb3IgTGludXggYW5kIFVuaXgKIC5TSCAiU1lOT1BTSVMiCkBAIC0yMyw3ICsyMyw3IEBACiBtYWluIGFuZCBiYWNrdXAgZGF0YSwgYXMgd2VsbCBhcyBiZXR3ZWVuIHRoZSBHUFQgaGVhZGVycyBhbmQgdGhlIHBhcnRpdGlvbgogdGFibGVzLiBGb3IgaW5mb3JtYXRpb24gb24gTUJSIHZzLiBHUFQsIGFzIHdlbGwgYXMgR1BUIHRlcm1pbm9sb2d5IGFuZAogc3RydWN0dXJlLCBzZWUgdGhlIGV4dGVuZGVkIFxmQmdkaXNrXGZSIGRvY3VtZW50YXRpb24gYXQKLVxmSWh0dHA6Ly93d3cucm9kc2Jvb2tzLmNvbS9nZGlzay9cZlIgb3IgY29uc3VsdCBXaWtpcGVkaWEuCitcZklodHRwczovL3d3dy5yb2RzYm9va3MuY29tL2dkaXNrL1xmUiBvciBjb25zdWx0IFdpa2lwZWRpYS4KIAogVGhlIFxmQnNnZGlza1xmUiBwcm9ncmFtIGVtcGxveXMgYSB1c2VyIGludGVyZmFjZSB0aGF0J3MgYmFzZWQgZW50aXJlbHkgb24KIHRoZSBjb21tYW5kIGxpbmUsIG1ha2luZyBpdCBzdWl0YWJsZSBmb3IgdXNlIGluIHNjcmlwdHMgb3IgYnkgZXhwZXJ0cyB3aG8KQEAgLTE1NCw3ICsxNTQsMTAgQEAKIG9uIGRpc2tzIHdpdGggNTEyLWJ5dGUgc2VjdG9ycykgb24gZnJlc2hseSBmb3JtYXR0ZWQgZGlza3MuIFRoaXMgYWxpZ25tZW50CiB2YWx1ZSBpcyBuZWNlc3NhcnkgdG8gb2J0YWluIG9wdGltdW0gcGVyZm9ybWFuY2Ugd2l0aCBXZXN0ZXJuIERpZ2l0YWwKIEFkdmFuY2VkIEZvcm1hdCBhbmQgc2ltaWxhciBkcml2ZXMgd2l0aCBsYXJnZXIgcGh5c2ljYWwgdGhhbiBsb2dpY2FsIHNlY3Rvcgotc2l6ZXMsIHdpdGggc29tZSB0eXBlcyBvZiBSQUlEIGFycmF5cywgYW5kIHdpdGggU1NEIGRldmljZXMuCitzaXplcywgd2l0aCBzb21lIHR5cGVzIG9mIFJBSUQgYXJyYXlzLCBhbmQgd2l0aCBTU0QgZGV2aWNlcy4gV2hlbiB0aGUKK1xmSVwtSVxmUiBvcHRpb24gaXMgdXNlZCwgdGhpcyBzYW1lIGFsaWdubWVudCB2YWx1ZSBpcyB1c2VkIHRvIGRldGVybWluZQorcGFydGl0aW9uIGVuZCBwb2ludHM7IGJ1dCBwYXJ0aXRpb25zIGVuZCBhdCBvbmUgbGVzcyB0aGFuIGEgbXVsdGlwbGUgb2YgdGhpcwordmFsdWUsIHRvIGtlZXAgdGhlIHBhcnRpdGlvbiBsZW5ndGggYSBtdWx0aXBsZSBvZiB0aGlzIHZhbHVlLgogCiAuVFAKIC5CIFwtQSwgXC1cLWF0dHJpYnV0ZXM9bGlzdHxbcGFydG51bTpzaG93fG9yfG5hbmR8eG9yfD18c2V0fGNsZWFyfHRvZ2dsZXxnZXRbOmJpdG51bXxoZXhiaXRtYXNrXV0KQEAgLTE2Nyw3ICsxNzAsNyBAQAogXGZJdG9nZ2xlXGZSIG9wdGlvbnMgZW5hYmxlIHlvdSB0byBjaGFuZ2UgdGhlIGF0dHJpYnV0ZSBiaXQgdmFsdWUuIFRoZQogXGZJc2V0XGZSLCBcZkljbGVhclxmUiwgXGZJdG9nZ2xlXGZSLCBhbmQgXGZJZ2V0XGZSIG9wdGlvbnMgd29yayBvbiBhCiBiaXQgbnVtYmVyOyB0aGUgb3RoZXJzIHdvcmsgb24gYSBoZXhhZGVjaW1hbCBiaXQgbWFzay4gRm9yIGV4YW1wbGUsIHR5cGUgCi1cZkJzZ2Rpc2sgLUEgNDpzZXQ6MiAvZGV2L3NkY1xmUiB0byBzZXQgdGhlIGJpdCAyIGF0dHJpYnV0ZSAobGVnYWN5IEJJT1MKK1xmQnNnZGlzayBcLUEgNDpzZXQ6MiAvZGV2L3NkY1xmUiB0byBzZXQgdGhlIGJpdCAyIGF0dHJpYnV0ZSAobGVnYWN5IEJJT1MKIGJvb3RhYmxlKSBvbiBwYXJ0aXRpb24gNCBvbiBcZkkvZGV2L3NkY1xmUi4KIAogLlRQIApAQCAtMTgzLDYgKzE4NiwxNCBAQAogd2lsbCByZWZsZWN0IEdQVCBmZGlzaydzIGZpcnN0XC1wYXNzIGludGVycHJldGF0aW9uIG9mIHRoZSBHUFQuCiAKIC5UUCAKKy5CIFwtQiwgXC1cLWJ5dGVcLXN3YXBcLW5hbWU9cGFydG51bQorU3dhcCB0aGUgYnl0ZSBvcmRlciBmb3IgdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmllZCBwYXJ0aXRpb24uIFNvbWUKK3BhcnRpdGlvbmluZyB0b29scywgaW5jbHVkaW5nIEdQVCBmZGlzayAxLjAuNyBhbmQgZWFybGllciwgY2FuIHdyaXRlIHRoZQorcGFydGl0aW9uIG5hbWUgaW4gdGhlIHdyb25nIGJ5dGUgb3JkZXIgb24gYmlnLWVuZGlhbiBjb21wdXRlcnMsIHN1Y2ggYXMgdGhlCitJQk0gczM5MCBtYWluZnJhbWVzIGFuZCBQb3dlclBDLWJhc2VkIE1hY3MuIFRoaXMgZmVhdHVyZSBjb3JyZWN0cyB0aGlzCitwcm9ibGVtLgorCisuVFAgCiAuQiBcLWMsIFwtXC1jaGFuZ2VcLW5hbWU9cGFydG51bTpuYW1lCiBDaGFuZ2UgdGhlIEdQVCBuYW1lIG9mIGEgcGFydGl0aW9uLiBUaGlzIG5hbWUgaXMgZW5jb2RlZCBhcyBhIFVURlwtMTYKIHN0cmluZywgYnV0IHByb3BlciBlbnRyeSBhbmQgZGlzcGxheSBvZiBhbnl0aGluZyBiZXlvbmQgYmFzaWMgQVNDSUkgdmFsdWVzCkBAIC0yNzIsNyArMjgzLDcgQEAKIGJlIHNldCwgeW91IG11c3QgZG8gc28gaW4gYW5vdGhlciBwcm9ncmFtLCBzdWNoIGFzIFxmQmZkaXNrXGZSLiBUaGUgXGZCZ2Rpc2tcZlIKIHByb2dyYW0gb2ZmZXJzIGFkZGl0aW9uYWwgaHlicmlkIE1CUiBjcmVhdGlvbiBvcHRpb25zLgogCi0uVFAgCisuVFAKIC5CIFwtaSwgXC1cLWluZm89cGFydG51bQogU2hvdyBkZXRhaWxlZCBwYXJ0aXRpb24gaW5mb3JtYXRpb24uIFRoZSBzdW1tYXJ5IGluZm9ybWF0aW9uIHByb2R1Y2VkIGJ5CiB0aGUgXGZJXC1wXGZSIGNvbW1hbmQgbmVjZXNzYXJpbHkgb21pdHMgbWFueSBkZXRhaWxzLCBzdWNoIGFzIHRoZSBwYXJ0aXRpb24ncwpAQCAtMjgxLDYgKzI5MiwxOCBAQAogZGlzcGxheXMgdGhpcyBpbmZvcm1hdGlvbiBmb3IgYSBzaW5nbGUgcGFydGl0aW9uLgogCiAuVFAKKy5CIFwtSSwgXC1cLWFsaWduXC1lbmQKK1doZW4gcG9zc2libGUsIGFsaWduIHRoZSBlbmQgcG9pbnRzIG9mIHBhcnRpdGlvbnMgdG8gb25lIGxlc3MgdGhhbiBhCittdWx0aXBsZSBvZiB0aGUgYWxpZ25tZW50IHZhbHVlLiBXaGVuIGJvdGggc3RhcnQgYW5kIGVuZCBwb2ludHMgYXJlIGFsaWduZWQsCitwYXJ0aXRpb25zIHNob3VsZCBiZSBtdWx0aXBsZXMgb2YgdGhlIGFsaWdubWVudCB2YWx1ZSBpbiBzaXplLCB3aGljaCBpcworbmVjZXNzYXJ5IGZvciBzb21lIHBhcnRpdGlvbiBlbmNyeXB0aW9uIHRvb2xzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcworb3B0aW9uIGFwcGxpZXMgdG8gYWxsIHBhcnRpdGlvbnMgY3JlYXRlZCBcZkJhZnRlclxmUiB0aGlzIG9wdGlvbiBvbiB0aGUKK2NvbW1hbmQgbGluZS4gTm90ZSB0aGF0IHRoaXMgYWxpZ25tZW50IGlzIG5vdCBhbHdheXMgcG9zc2libGU7IGZvciBpbnN0YW5jZSwKK2lmIHRoZSBmcmVlIHNwYWNlIGF0IHRoZSBlbmQgb2YgYSBkaXNrIGlzIGxlc3MgdGhhbiB0aGUgYWxpZ25tZW50IHZhbHVlLAord2l0aCB0aGUgY3VycmVudCBmaW5hbCBwYXJ0aXRpb24gYmVpbmcgYWxpZ25lZCwgYW5kIGlmIFxmQnNnZGlza1xmUiBpcyBhc2tlZAordG8gY3JlYXRlIGEgcGFydGl0aW9uIGluIHRoYXQgc3BhY2UsIHRoZW4gaXQgd2lsbCBcZkJub3RcZlIgYmUgZW5kXC1hbGlnbmVkLgorCisuVFAKIC5CIFwtaiwgXC1cLWFkanVzdFwtbWFpblwtdGFibGU9c2VjdG9yCiBBZGp1c3QgdGhlIGxvY2F0aW9uIG9mIHRoZSBtYWluIHBhcnRpdGlvbiB0YWJsZS4gVGhpcyB2YWx1ZSBpcyBub3JtYWxseSAyLAogYnV0IGl0IG1heSBuZWVkIHRvIGJlIGluY3JlYXNlZCBpbiBzb21lIGNhc2VzLCBzdWNoIGFzIHdoZW4gYQpAQCAtMzM5LDIyICszNjIsMjYgQEAKIHN0YXJ0IG9mIHRoZSBsYXJnZXN0IGF2YWlsYWJsZSBibG9jayBmb3IgdGhlIHN0YXJ0IHNlY3RvciBhbmQgdGhlIGVuZCBvZgogdGhlIHNhbWUgYmxvY2sgZm9yIHRoZSBlbmQgc2VjdG9yLiBBIHBhcnRudW0gdmFsdWUgb2YgMCBjYXVzZXMgdGhlIHByb2dyYW0KIHRvIHVzZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHBhcnRpdGlvbiBudW1iZXIuIFN1YnNlcXVlbnQgdXNlcyBvZiB0aGUKLVxmSVwtQVxmUiwgXGZJXC1jXGZSLCBcZklcLXRcZlIsIGFuZCBcZklcLXVcZlIgb3B0aW9ucyBtYXkgYWxzbyB1c2UKK1xmSVwtQVxmUiAoXGZJXC1cLWF0dHJpYnV0ZXNcZlIpLCBcZklcLWNcZlIgKFxmSVwtXC1jaGFuZ2VcLW5hbWVcZlIpLCBcZklcLXRcZlIKKyhcZklcLVwtdHlwZWNvZGVcZlIpLCBhbmQgXGZJXC11XGZSIChcZklcLVwtcGFydGl0aW9uXC1ndWlkXGZSKSBvcHRpb25zIG1heSBhbHNvIHVzZQogXGZJMFxmUiB0byByZWZlciB0byB0aGUgc2FtZSBwYXJ0aXRpb24uCiAKIC5UUAogLkIgXC1OLCBcLVwtbGFyZ2VzdFwtbmV3PW51bQogQ3JlYXRlIGEgbmV3IHBhcnRpdGlvbiB0aGF0IGZpbGxzIHRoZSBsYXJnZXN0IGF2YWlsYWJsZSBibG9jayBvZiBzcGFjZSBvbgogdGhlIGRpc2suIFlvdSBjYW4gdXNlIHRoZSBcZklcLWFcZlIgKFxmSVwtXC1zZXRcLWFsaWdubWVudFxmUikgb3B0aW9uIHRvCi1hZGp1c3QgdGhlIGFsaWdubWVudCwgaWYgZGVzaXJlZC4gQSBudW0gdmFsdWUgb2YgMCBjYXVzZXMgdGhlIHByb2dyYW0gdG8KLXVzZSB0aGUgZmlyc3QgYXZhaWxhYmxlIHBhcnRpdGlvbiBudW1iZXIuCithZGp1c3QgdGhlIGFsaWdubWVudCwgaWYgZGVzaXJlZC4gQSBudW0gdmFsdWUgb2YgMCBjYXVzZXMgdGhlIHByb2dyYW0gdG8gdXNlCit0aGUgZmlyc3QgYXZhaWxhYmxlIHBhcnRpdGlvbiBudW1iZXIuIFN1YnNlcXVlbnQgdXNlcyBvZiB0aGUgXGZJXC1BXGZSCisoXGZJXC1cLWF0dHJpYnV0ZXNcZlIpLCBcZklcLWNcZlIgKFxmSVwtXC1jaGFuZ2VcLW5hbWVcZlIpLCBcZklcLXRcZlIKKyhcZklcLVwtdHlwZWNvZGVcZlIpLCBhbmQgXGZJXC11XGZSIChcZklcLVwtcGFydGl0aW9uXC1ndWlkXGZSKSBvcHRpb25zIG1heQorYWxzbyB1c2UgXGZJMFxmUiB0byByZWZlciB0byB0aGUgc2FtZSBwYXJ0aXRpb24uCiAKIC5UUCAKIC5CIFwtbywgXC1cLWNsZWFyCiBDbGVhciBvdXQgYWxsIHBhcnRpdGlvbiBkYXRhLiBUaGlzIGluY2x1ZGVzIEdQVCBoZWFkZXIgZGF0YSwgYWxsIHBhcnRpdGlvbgogZGVmaW5pdGlvbnMsIGFuZCB0aGUgcHJvdGVjdGl2ZSBNQlIuIE5vdGUgdGhhdCB0aGlzIG9wZXJhdGlvbiB3aWxsLCBsaWtlCiBtb3N0IG90aGVyIG9wZXJhdGlvbnMsIGZhaWwgb24gYSBkYW1hZ2VkIGRpc2suIElmIHlvdSB3YW50IHRvIHByZXBhcmUgYQotZGlzayB5b3Uga25vdyB0byBiZSBkYW1hZ2VkIGZvciBHUFQgdXNlLCB5b3Ugc2hvdWxkIGZpcnN0IHdpcGUgaXQgd2l0aCAtWgorZGlzayB5b3Uga25vdyB0byBiZSBkYW1hZ2VkIGZvciBHUFQgdXNlLCB5b3Ugc2hvdWxkIGZpcnN0IHdpcGUgaXQgd2l0aCBcLVoKIGFuZCB0aGVuIHBhcnRpdGlvbiBpdCBub3JtYWxseS4gVGhpcyBvcHRpb24gd2lsbCB3b3JrIGV2ZW4gaWYgdGhlCiBkaXNrJ3Mgb3JpZ2luYWwgcGFydGl0aW9uIHRhYmxlIGlzIGJhZDsgaG93ZXZlciwgbW9zdCBvdGhlciBvcHRpb25zIG9uIHRoZQogc2FtZSBjb21tYW5kIGxpbmUgd2lsbCBiZSBpZ25vcmVkLgpAQCAtNTA0LDcgKzUzMSw3IEBACiAKIC5UUAogLkIgOAotRGlzayByZXBsaWNhdGlvbiBvcGVyYXRpb24gKC1SKSBmYWlsZWQKK0Rpc2sgcmVwbGljYXRpb24gb3BlcmF0aW9uIChcLVIpIGZhaWxlZAogCiAuU0ggIkJVR1MiCiBLbm93biBidWdzIGFuZCBsaW1pdGF0aW9ucyBpbmNsdWRlOgpAQCAtNTkzLDcgKzYyMCw3IEBACiAKICogSnVzdGluIE1hZ2dhcmQgKGp1c3Rpbi5tYWdnYXJkQG5ldGdlYXIuY29tKQogCi0qIER3aWdodCBTY2hhdWVyIChkc2NoYXVlckBnbWFpbC5jb20pCisqIER3aWdodCBTY2hhdWVyIChkYXNAdGVlZ3JhLm5ldCkKIAogKiBGbG9yaWFuIFp1bWJpZWhsIChmbG9yekBmbG9yei5kZSkKIApAQCAtNjA4LDExICs2MzUsMTEgQEAKIC5CUiBzZmRpc2sgKDgpLAogLkJSIGZpeHBhcnRzICg4KS4KIAotXGZJaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HVUlEX1BhcnRpdGlvbl9UYWJsZVxmUgorXGZJaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR1VJRF9QYXJ0aXRpb25fVGFibGVcZlIKIAotXGZJaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdGVjaG5vdGVzL3RuMjAwNi90bjIxNjYuaHRtbFxmUgorXGZJaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3RlY2hub3Rlcy90bjIwMDYvdG4yMTY2Lmh0bWxcZlIKIAotXGZJaHR0cDovL3d3dy5yb2RzYm9va3MuY29tL2dkaXNrL1xmUgorXGZJaHR0cHM6Ly93d3cucm9kc2Jvb2tzLmNvbS9nZGlzay9cZlIKIAogLlNIICJBVkFJTEFCSUxJVFkiCiBUaGUgXGZCc2dkaXNrXGZSIGNvbW1hbmQgaXMgcGFydCBvZiB0aGUgXGZJR1BUIGZkaXNrXGZSIHBhY2thZ2UgYW5kIGlzCmRpZmYgLS1naXQgYS9zdXBwb3J0LmNjIGIvc3VwcG9ydC5jYwppbmRleCA5MmJmZDc3Li4zY2JhYmY3IDEwMDY0NAotLS0gYS9zdXBwb3J0LmNjCisrKyBiL3N1cHBvcnQuY2MKQEAgLTMsMTQgKzMsMTQgQEAKIC8vIFByaW1hcmlseSBieSBSb2QgU21pdGgsIEZlYnJ1YXJ5IDIwMDksIGJ1dCB3aXRoIGEgZmV3IGZ1bmN0aW9ucwogLy8gY29waWVkIGZyb20gb3RoZXIgc291cmNlcyAoc2VlIGF0dHJpYnV0aW9ucyBiZWxvdykuCiAKLS8qIFRoaXMgcHJvZ3JhbSBpcyBjb3B5cmlnaHQgKGMpIDIwMDktMjAxOCBieSBSb2RlcmljayBXLiBTbWl0aC4gSXQgaXMgZGlzdHJpYnV0ZWQKKy8qIFRoaXMgcHJvZ3JhbSBpcyBjb3B5cmlnaHQgKGMpIDIwMDktMjAyMiBieSBSb2RlcmljayBXLiBTbWl0aC4gSXQgaXMgZGlzdHJpYnV0ZWQKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHZlcnNpb24gMiwgYXMgZGV0YWlsZWQgaW4gdGhlIENPUFlJTkcgZmlsZS4gKi8KIAogI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TCi0jaWZuZGVmIF9fU1REQ19DT05TVEFOVF9NQUNST1MKICNkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUwotI2VuZGlmCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TCiAKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTE4LDggKzE4LDkgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxjY3R5cGU+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlICJzdXBwb3J0LmgiCiAKQEAgLTgxLDcgKzgyLDcgQEAKICAgICAgICAgIGNpbi5nZXRsaW5lKGxpbmUsIDI1NSk7CiAgICAgICAgICBpZiAoIWNpbi5nb29kKCkpCiAgICAgICAgICAgICBleGl0KDUpOwotICAgICAgICAgbnVtID0gc3NjYW5mKGxpbmUsICIlIiBTQ051NjQsICZyZXNwb25zZSk7CisgICAgICAgICBudW0gPSBzc2NhbmYobGluZSwgIiUiIFBSSXU2NCwgJnJlc3BvbnNlKTsKICAgICAgICAgIGlmIChudW0gPT0gMSkgeyAvLyB1c2VyIHByb3ZpZGVkIGEgcmVzcG9uc2UKICAgICAgICAgICAgIGlmICgocmVzcG9uc2UgPCBsb3cpIHx8IChyZXNwb25zZSA+IGhpZ2gpKQogICAgICAgICAgICAgICAgY291dCA8PCAiVmFsdWUgb3V0IG9mIHJhbmdlXG4iOwpAQCAtMTEyLDQ4ICsxMTMsMjcgQEAKICAgIHJldHVybiByZXNwb25zZTsKIH0gLy8gR2V0WU4odm9pZCkKIAotLy8gT2J0YWlucyBhIHNlY3RvciBudW1iZXIsIGJldHdlZW4gbG93IGFuZCBoaWdoLCBmcm9tIHRoZQotLy8gdXNlciwgYWNjZXB0aW5nIHZhbHVlcyBwcmVmaXhlZCBieSAiKyIgdG8gYWRkIHNlY3RvcnMgdG8gbG93LAotLy8gb3IgdGhlIHNhbWUgd2l0aCAiSyIsICJNIiwgIkciLCAiVCIsIG9yICJQIiBhcyBzdWZmaXhlcyB0byBhZGQKLS8vIGtpbG9ieXRlcywgbWVnYWJ5dGVzLCBnaWdhYnl0ZXMsIHRlcmFieXRlcywgb3IgcGV0YWJ5dGVzLAotLy8gcmVzcGVjdGl2ZWx5LiBJZiBhICItIiBwcmVmaXggaXMgdXNlZCwgdXNlIHRoZSBoaWdoIHZhbHVlIG1pbnVzCi0vLyB0aGUgdXNlci1zcGVjaWZpZWQgbnVtYmVyIG9mIHNlY3RvcnMgKG9yIEtpQiwgTWlCLCBldGMuKS4gVXNlIHRoZQotLy8gZGVmIHZhbHVlIGFzIHRoZSBkZWZhdWx0IGlmIHRoZSB1c2VyIGp1c3QgaGl0cyBFbnRlci4gVGhlIHNTaXplIGlzCi0vLyB0aGUgc2VjdG9yIHNpemUgb2YgdGhlIGRldmljZS4KLXVpbnQ2NF90IEdldFNlY3Rvck51bSh1aW50NjRfdCBsb3csIHVpbnQ2NF90IGhpZ2gsIHVpbnQ2NF90IGRlZiwgdWludDY0X3Qgc1NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nICYgcHJvbXB0KSB7Ci0gICB1aW50NjRfdCByZXNwb25zZTsKLSAgIGNoYXIgbGluZVsyNTVdOwotCi0gICBkbyB7Ci0gICAgICBjb3V0IDw8IHByb21wdDsKLSAgICAgIGNpbi5nZXRsaW5lKGxpbmUsIDI1NSk7Ci0gICAgICBpZiAoIWNpbi5nb29kKCkpCi0gICAgICAgICBleGl0KDUpOwotICAgICAgcmVzcG9uc2UgPSBJZWVlVG9JbnQobGluZSwgc1NpemUsIGxvdywgaGlnaCwgZGVmKTsKLSAgIH0gd2hpbGUgKChyZXNwb25zZSA8IGxvdykgfHwgKHJlc3BvbnNlID4gaGlnaCkpOwotICAgcmV0dXJuIHJlc3BvbnNlOwotfSAvLyBHZXRTZWN0b3JOdW0oKQotCiAvLyBDb252ZXJ0IGFuIElFRUUtMTU0MS0yMDAyIHZhbHVlIChLLCBNLCBHLCBULCBQLCBvciBFKSB0byBpdHMgZXF1aXZhbGVudCBpbgogLy8gbnVtYmVyIG9mIHNlY3RvcnMuIElmIG5vIHVuaXRzIGFyZSBhcHBlbmRlZCwgaW50ZXJwcmV0cyBhcyB0aGUgbnVtYmVyCiAvLyBvZiBzZWN0b3JzOyBvdGhlcndpc2UsIGludGVycHJldHMgYXMgbnVtYmVyIG9mIHNwZWNpZmllZCB1bml0cyBhbmQKIC8vIGNvbnZlcnRzIHRvIHNlY3RvcnMuIEZvciBpbnN0YW5jZSwgd2l0aCA1MTItYnl0ZSBzZWN0b3JzLCAiMUsiIGNvbnZlcnRzCi0vLyB0byAyLiBJZiB2YWx1ZSBpbmNsdWRlcyBhICIrIiwgYWRkcyBsb3cgYW5kIHN1YnRyYWN0cyAxOyBpZiBTSVZhbHVlCisvLyB0byAyLiBJZiB2YWx1ZSBpbmNsdWRlcyBhICIrIiwgYWRkcyBsb3cgYW5kIHN1YnRyYWN0cyAxOyBpZiBpblZhbHVlCiAvLyBpbmNsdWVzIGEgIi0iLCBzdWJ0cmFjdHMgZnJvbSBoaWdoLiBJZiBJZWVlVmFsdWUgaXMgZW1wdHksIHJldHVybnMgZGVmLgogLy8gUmV0dXJucyBmaW5hbCBzZWN0b3IgdmFsdWUuIEluIGNhc2UgaW5WYWx1ZSBpcyBpbnZhbGlkLCByZXR1cm5zIDAgKGEKIC8vIHNlY3RvciB2YWx1ZSB0aGF0J3MgYWx3YXlzIGluIHVzZSBvbiBHUFQgYW5kIHRoZXJlZm9yZSBpbnZhbGlkKTsgYW5kIGlmCiAvLyBpblZhbHVlIHdvcmtzIG91dCB0byBzb21ldGhpbmcgb3V0c2lkZSB0aGUgcmFuZ2UgbG93LWhpZ2gsIHJldHVybnMgdGhlCiAvLyBjb21wdXRlZCB2YWx1ZTsgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGNoZWNraW5nIHRoZQogLy8gdmFsaWRpdHkgb2YgdGhpcyB2YWx1ZS4KKy8vIElmIGluVmFsdWUgY29udGFpbnMgYSBkZWNpbWFsIG51bWJlciAoZS5nLiwgIjkuNUciKSwgcXVpZXRseSB0cnVuY2F0ZSBpdAorLy8gKHRvICI5RyIgaW4gdGhpcyBleGFtcGxlKS4KIC8vIE5PVEU6IFRoZXJlJ3MgYSBkaWZmZXJlbmNlIGluIGhvdyBHQ0MgYW5kIFZDKysgdHJlYXQgb3ZlcnNpemVkIHZhbHVlcwogLy8gKHNheSwgIjk5OTk5OTk5OTk5OTk5OTk5OTk5OSIpIHJlYWQgdmlhIHRoZSAiPj4iIG9wZXJhdG9yOyBHQ0MgdHVybnMKIC8vIHRoZW0gaW50byB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgdGhlIHR5cGUsIHdoZXJlYXMgVkMrKyB0dXJucyB0aGVtIGludG8KIC8vIDAgdmFsdWVzLiBUaGUgcmVzdWx0IGlzIHRoYXQgSWVlZVRvSW50KCkgcmV0dXJucyBVSU5UNjRfTUFYIHdoZW4KIC8vIGNvbXBpbGVkIHdpdGggR0NDIChhbmQgc28gdGhlIHZhbHVlIGlzIHJlamVjdGVkKSwgd2hlcmVhcyB3aGVuIFZDKysKIC8vIGlzIHVzZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHJldHVybmVkLgotdWludDY0X3QgSWVlZVRvSW50KHN0cmluZyBpblZhbHVlLCB1aW50NjRfdCBzU2l6ZSwgdWludDY0X3QgbG93LCB1aW50NjRfdCBoaWdoLCB1aW50NjRfdCBkZWYpIHsKLSAgIHVpbnQ2NF90IHJlc3BvbnNlID0gZGVmLCBieXRlc1BlclVuaXQgPSAxLCBtdWx0ID0gMSwgZGl2aWRlID0gMTsKK3VpbnQ2NF90IEllZWVUb0ludChzdHJpbmcgaW5WYWx1ZSwgdWludDY0X3Qgc1NpemUsIHVpbnQ2NF90IGxvdywgdWludDY0X3QgaGlnaCwgdWludDMyX3Qgc2VjdG9yQWxpZ25tZW50LCB1aW50NjRfdCBkZWYpIHsKKyAgIHVpbnQ2NF90IHJlc3BvbnNlID0gZGVmLCBieXRlc1BlclVuaXQsIG11bHQgPSAxLCBkaXZpZGUgPSAxOwogICAgc2l6ZV90IGZvdW5kQXQgPSAwOwogICAgY2hhciBzdWZmaXggPSAnICcsIHBsdXNGbGFnID0gJyAnOwogICAgc3RyaW5nIHN1ZmZpeGVzID0gIktNR1RQRSI7CkBAIC0xODAsNiArMTYwLDE1IEBACiAgICAgICBiYWRJbnB1dCA9IDE7CiAgICBpblN0cmluZyA+PiByZXNwb25zZSA+PiBzdWZmaXg7CiAgICBzdWZmaXggPSB0b3VwcGVyKHN1ZmZpeCk7CisgICBmb3VuZEF0ID0gc3VmZml4ZXMuZmluZChzdWZmaXgpOworICAgLy8gSWYgc3VmZml4IGlzIGludmFsaWQsIHRyeSB0byBmaW5kIGEgdmFsaWQgb25lLiBEb25lIGJlY2F1c2UgdXNlcnMKKyAgIC8vIHNvbWV0aW1lcyBlbnRlciBkZWNpbWFsIG51bWJlcnM7IHdoZW4gdGhleSBkbywgc3VmZml4IGJlY29tZXMKKyAgIC8vICcuJywgYW5kIHdlIG5lZWQgdG8gdHJ1bmNhdGUgdGhlIG51bWJlciBhbmQgZmluZCB0aGUgcmVhbCBzdWZmaXguCisgICB3aGlsZSAoZm91bmRBdCA+IChzdWZmaXhlcy5sZW5ndGgoKSAtIDEpICYmIGluU3RyaW5nLnBlZWsoKSAhPSAtMSkgeworICAgICAgaW5TdHJpbmcgPj4gc3VmZml4OworICAgICAgZm91bmRBdCA9IHN1ZmZpeGVzLmZpbmQoc3VmZml4KTsKKyAgICAgIHN1ZmZpeCA9IHRvdXBwZXIoc3VmZml4KTsKKyAgIH0KIAogICAgLy8gSWYgbm8gcmVzcG9uc2UsIG9yIGlmIHJlc3BvbnNlID09IDAsIHVzZSBkZWZhdWx0IChkZWYpCiAgICBpZiAoKGluVmFsdWUubGVuZ3RoKCkgPT0gMCkgfHwgKHJlc3BvbnNlID09IDApKSB7CkBAIC0xODksNyArMTc4LDYgQEAKICAgIH0gLy8gaWYKIAogICAgLy8gRmluZCBtdWx0aXBsaWNhdGlvbiBhbmQgZGl2aXNpb24gZmFjdG9ycyBmb3IgdGhlIHN1ZmZpeAotICAgZm91bmRBdCA9IHN1ZmZpeGVzLmZpbmQoc3VmZml4KTsKICAgIGlmIChmb3VuZEF0ICE9IHN0cmluZzo6bnBvcykgewogICAgICAgYnl0ZXNQZXJVbml0ID0gVUlOVDY0X0MoMSkgPDwgKDEwICogKGZvdW5kQXQgKyAxKSk7CiAgICAgICBtdWx0ID0gYnl0ZXNQZXJVbml0IC8gc1NpemU7CkBAIC0yMDcsMTEgKzE5NSwxMiBAQAogICAgfSAvLyBpZi9lbHNlaWYKIAogICAgaWYgKHBsdXNGbGFnID09ICcrJykgewotICAgICAgLy8gUmVjb21wdXRlIHJlc3BvbnNlIGJhc2VkIG9uIGxvdyBwYXJ0IG9mIHJhbmdlIChpZiBkZWZhdWx0ID09IGhpZ2gKLSAgICAgIC8vIHZhbHVlLCB3aGljaCBzaG91bGQgYmUgdGhlIGNhc2Ugd2hlbiBwcm9tcHRpbmcgZm9yIHRoZSBlbmQgb2YgYQotICAgICAgLy8gcmFuZ2UpIG9yIHRoZSBkZWZhdXQgdmFsdWUgKGlmIGRlZmF1bHQgIT0gaGlnaCwgd2hpY2ggc2hvdWxkIGJlCi0gICAgICAvLyB0aGUgY2FzZSBmb3IgdGhlIGZpcnN0IHNlY3RvciBvZiBhIHBhcnRpdGlvbikuCi0gICAgICBpZiAoZGVmID09IGhpZ2gpIHsKKyAgICAgIC8vIFJlY29tcHV0ZSByZXNwb25zZSBiYXNlZCBvbiBsb3cgcGFydCBvZiByYW5nZSAoaWYgZGVmYXVsdCBpcyB3aXRoaW4KKyAgICAgIC8vIHNlY3RvckFsaWdubWVudCBzZWN0b3JzIG9mIGhpZ2gsIHdoaWNoIHNob3VsZCBiZSB0aGUgY2FzZSB3aGVuCisgICAgICAvLyBwcm9tcHRpbmcgZm9yIHRoZSBlbmQgb2YgYSByYW5nZSkgb3IgdGhlIGRlZmF1dCB2YWx1ZSAoaWYgZGVmYXVsdCBpcworICAgICAgLy8gZnVydGhlciBhd2F5IGZyb20gdGhlIGhpZ2ggdmFsdWUsIHdoaWNoIHNob3VsZCBiZSB0aGUgY2FzZSBmb3IgdGhlCisgICAgICAvLyBmaXJzdCBzZWN0b3Igb2YgYSBwYXJ0aXRpb24pLgorICAgICAgaWYgKChoaWdoIC0gZGVmKSA8IHNlY3RvckFsaWdubWVudCkgewogICAgICAgICAgaWYgKHJlc3BvbnNlID4gMCkKICAgICAgICAgICAgIHJlc3BvbnNlLS07CiAgICAgICAgICBpZiAocmVzcG9uc2UgPiAoVUlOVDY0X01BWCAtIGxvdykpCkBAIC0zNjEsMyArMzUwLDExIEBACiAgICAgICBleGl0KDApOwogICAgI2VuZGlmCiB9IC8vIFdpbldhcm5pbmcoKQorCisvLyBSZXR1cm5zIHRoZSBpbnB1dCBzdHJpbmcgaW4gbG93ZXIgY2FzZQorc3RyaW5nIFRvTG93ZXIoY29uc3Qgc3RyaW5nJiBpbnB1dCkgeworICAgc3RyaW5nIGxvd2VyID0gaW5wdXQ7IC8vIGFsbG9jYXRlIGNvcnJlY3Qgc2l6ZSB0aHJvdWdoIGNvcHkKKworICAgdHJhbnNmb3JtKGlucHV0LmJlZ2luKCksIGlucHV0LmVuZCgpLCBsb3dlci5iZWdpbigpLCA6OnRvbG93ZXIpOworICAgcmV0dXJuIGxvd2VyOworfSAvLyBUb0xvd2VyKCkKZGlmZiAtLWdpdCBhL3N1cHBvcnQuaCBiL3N1cHBvcnQuaAppbmRleCA4Zjk3NmRhLi40YTlmNDE0IDEwMDY0NAotLS0gYS9zdXBwb3J0LmgKKysrIGIvc3VwcG9ydC5oCkBAIC0xLDE0ICsxLDE0IEBACi0vKiBUaGlzIHByb2dyYW0gaXMgY29weXJpZ2h0IChjKSAyMDA5LTIwMTggYnkgUm9kZXJpY2sgVy4gU21pdGguIEl0IGlzIGRpc3RyaWJ1dGVkCisvKiBUaGlzIHByb2dyYW0gaXMgY29weXJpZ2h0IChjKSAyMDA5LTIwMjIgYnkgUm9kZXJpY2sgVy4gU21pdGguIEl0IGlzIGRpc3RyaWJ1dGVkCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2ZXJzaW9uIDIsIGFzIGRldGFpbGVkIGluIHRoZSBDT1BZSU5HIGZpbGUuICovCiAKKyNpZm5kZWYgX19HUFRTVVBQT1JUCisjZGVmaW5lIF9fR1BUU1VQUE9SVAorCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nPgogCi0jaWZuZGVmIF9fR1BUU1VQUE9SVAotI2RlZmluZSBfX0dQVFNVUFBPUlQKLQotI2RlZmluZSBHUFRGRElTS19WRVJTSU9OICIxLjAuNCIKKyNkZWZpbmUgR1BURkRJU0tfVkVSU0lPTiAiMS4wLjkuMiIKIAogI2lmIGRlZmluZWQgKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkIChfX0ZyZWVCU0Rfa2VybmVsX18pIHx8IGRlZmluZWQgKF9fQVBQTEVfXykKIC8vIERhcndpbiAoTWFjIE9TKSAmIEZyZWVCU0Q6IGRpc2sgSU9DVExzIGFyZSBkaWZmZXJlbnQsIGFuZCB0aGVyZSBpcyBubyBsc2VlazY0CkBAIC02OSwxOCArNjksMTYgQEAKICNkZWZpbmUgR1BUX1JFU0VSVkVEIDQyMAogI2RlZmluZSBOQU1FX1NJWkUgMzYgLy8gR1BUIGFsbG93cyAzNiBVVEYtMTZMRSBjb2RlIHVuaXRzIGZvciBhIG5hbWUgaW4gYSAxMjggYnl0ZSBwYXJ0aXRpb24gZW50cnkKIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotc3RyaW5nIFJlYWRTdHJpbmcodm9pZCk7Ci11aW50NjRfdCBHZXROdW1iZXIodWludDY0X3QgbG93LCB1aW50NjRfdCBoaWdoLCB1aW50NjRfdCBkZWYsIGNvbnN0IHN0cmluZyAmIHByb21wdCk7CitzdGQ6OnN0cmluZyBSZWFkU3RyaW5nKHZvaWQpOwordWludDY0X3QgR2V0TnVtYmVyKHVpbnQ2NF90IGxvdywgdWludDY0X3QgaGlnaCwgdWludDY0X3QgZGVmLCBjb25zdCBzdGQ6OnN0cmluZyAmIHByb21wdCk7CiBjaGFyIEdldFlOKHZvaWQpOwotdWludDY0X3QgR2V0U2VjdG9yTnVtKHVpbnQ2NF90IGxvdywgdWludDY0X3QgaGlnaCwgdWludDY0X3QgZGVmLCB1aW50NjRfdCBzU2l6ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHByb21wdCk7Ci11aW50NjRfdCBJZWVlVG9JbnQoc3RyaW5nIEllZWVWYWx1ZSwgdWludDY0X3Qgc1NpemUsIHVpbnQ2NF90IGxvdywgdWludDY0X3QgaGlnaCwgdWludDY0X3QgZGVmID0gMCk7Ci1zdHJpbmcgQnl0ZXNUb0llZWUodWludDY0X3Qgc2l6ZSwgdWludDMyX3Qgc2VjdG9yU2l6ZSk7Ci11bnNpZ25lZCBjaGFyIFN0clRvSGV4KGNvbnN0IHN0cmluZyAmIGlucHV0LCB1bnNpZ25lZCBpbnQgcG9zaXRpb24pOwotaW50IElzSGV4KHN0cmluZyBpbnB1dCk7IC8vIFJldHVybnMgMSBpZiBpbnB1dCBjYW4gYmUgaGV4YWRlY2ltYWwgbnVtYmVyLi4uLgordWludDY0X3QgSWVlZVRvSW50KHN0ZDo6c3RyaW5nIEllZWVWYWx1ZSwgdWludDY0X3Qgc1NpemUsIHVpbnQ2NF90IGxvdywgdWludDY0X3QgaGlnaCwgdWludDMyX3Qgc2VjdG9yQWxpZ25tZW50LCB1aW50NjRfdCBkZWYgPSAwKTsKK3N0ZDo6c3RyaW5nIEJ5dGVzVG9JZWVlKHVpbnQ2NF90IHNpemUsIHVpbnQzMl90IHNlY3RvclNpemUpOwordW5zaWduZWQgY2hhciBTdHJUb0hleChjb25zdCBzdGQ6OnN0cmluZyAmIGlucHV0LCB1bnNpZ25lZCBpbnQgcG9zaXRpb24pOworaW50IElzSGV4KHN0ZDo6c3RyaW5nIGlucHV0KTsgLy8gUmV0dXJucyAxIGlmIGlucHV0IGNhbiBiZSBoZXhhZGVjaW1hbCBudW1iZXIuLi4uCiBpbnQgSXNMaXR0bGVFbmRpYW4odm9pZCk7IC8vIFJldHVybnMgMSBpZiBDUFUgaXMgbGl0dGxlLWVuZGlhbiwgMCBpZiBpdCdzIGJpZy1lbmRpYW4KIHZvaWQgUmV2ZXJzZUJ5dGVzKHZvaWQqIHRoZVZhbHVlLCBpbnQgbnVtQnl0ZXMpOyAvLyBSZXZlcnNlcyBieXRlLW9yZGVyIG9mIHRoZVZhbHVlCiB2b2lkIFdpbldhcm5pbmcodm9pZCk7CitzdGQ6OnN0cmluZyBUb0xvd2VyKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dCk7CiAKICNlbmRpZgo=