ZGlmZiAtLWdpdCBhLy5jbGFuZy1mb3JtYXQgYi8uY2xhbmctZm9ybWF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZDA0YzEKLS0tIC9kZXYvbnVsbAorKysgYi8uY2xhbmctZm9ybWF0CkBAIC0wLDAgKzEsMTYgQEAKK0Jhc2VkT25TdHlsZTogQ2hyb21pdW0KK0FsaWduQWZ0ZXJPcGVuQnJhY2tldDogQWxpZ24KK0FsaWduQ29uc2VjdXRpdmVBc3NpZ25tZW50czogdHJ1ZQorQWxpZ25Db25zZWN1dGl2ZURlY2xhcmF0aW9uczogdHJ1ZQorQWxpZ25Db25zZWN1dGl2ZU1hY3JvczogdHJ1ZQorQWxpZ25Fc2NhcGVkTmV3bGluZXM6IHRydWUKKyMgQWxpZ25PcGVyYW5kczogQWxpZ24KK0FsaWduVHJhaWxpbmdDb21tZW50czogdHJ1ZQorQWx3YXlzQnJlYWtBZnRlclJldHVyblR5cGU6IEFsbERlZmluaXRpb25zCitCcmVha0JlZm9yZUJyYWNlczogQWxsbWFuCitDb2x1bW5MaW1pdDogODAKK0Rlcml2ZVBvaW50ZXJBbGlnbm1lbnQ6IGZhbHNlCitJbmRlbnRDYXNlTGFiZWxzOiBmYWxzZQorUG9pbnRlckFsaWdubWVudDogTGVmdAorU3BhY2VCZWZvcmVQYXJlbnM6IENvbnRyb2xTdGF0ZW1lbnRzCitTcGFjZXNJblBhcmVudGhlc2VzOiB0cnVlCmRpZmYgLS1naXQgYS8ubWFpbG1hcCBiLy5tYWlsbWFwCmluZGV4IGM0MDZlMjMuLjUyZDA1MDYgMTAwNjQ0Ci0tLSBhLy5tYWlsbWFwCisrKyBiLy5tYWlsbWFwCkBAIC03LDMgKzcsNCBAQAogU3V6dWtpLCBUb3NoaXlhICjpiLTmnKjkv4rlk4kpIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4gc3V6dWtpIHRvc2hpeWEgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgogQmVuIFdhZ25lciA8YnVuZ2VtYW5AZ21haWwuY29tPiBCdW5nZW1hbiA8YnVuZ2VtYW5AZ21haWwuY29tPgogRXdhbGQgSGV3IChIZXcgWWloIFNoaXVhbiDkuJjmr4XlrqMpIDxld2FsZGhld0BnbWFpbC5jb20+CitOaWtoaWwgUmFtYWtyaXNobmFuICjgpKjgpL/gpJbgpL/gpLIg4KSw4KS+4KSu4KSV4KWD4KS34KWN4KSj4KSoKSA8cmFtYWtyaXNobmFuLm5pa2hpbEBnbWFpbC5jb20+CmRpZmYgLS1naXQgYS9BbmRyb2lkLmJwIGIvQW5kcm9pZC5icAppbmRleCA4YjNkMDFkLi4xMjdkNmU2IDEwMDY0NAotLS0gYS9BbmRyb2lkLmJwCisrKyBiL0FuZHJvaWQuYnAKQEAgLTEsMTIgKzEsNDkgQEAKLWNjX2xpYnJhcnkgewotICAgIG5hbWU6ICJsaWJmdDIiLAorcGFja2FnZSB7CisgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbImV4dGVybmFsX2ZyZWV0eXBlX2xpY2Vuc2UiXSwKK30KKworLy8gQWRkZWQgYXV0b21hdGljYWxseSBieSBhIGxhcmdlLXNjYWxlLWNoYW5nZSB0aGF0IHRvb2sgdGhlIGFwcHJvYWNoIG9mCisvLyAnYXBwbHkgZXZlcnkgbGljZW5zZSBmb3VuZCB0byBldmVyeSB0YXJnZXQnLiBXaGlsZSB0aGlzIG1ha2VzIHN1cmUgd2UgcmVzcGVjdAorLy8gZXZlcnkgbGljZW5zZSByZXN0cmljdGlvbiwgaXQgbWF5IG5vdCBiZSBlbnRpcmVseSBjb3JyZWN0LgorLy8KKy8vIGUuZy4gR1BMIGluIGFuIE1JVCBwcm9qZWN0IG1pZ2h0IG9ubHkgYXBwbHkgdG8gdGhlIGNvbnRyaWIvIGRpcmVjdG9yeS4KKy8vCisvLyBQbGVhc2UgY29uc2lkZXIgc3BsaXR0aW5nIHRoZSBzaW5nbGUgbGljZW5zZSBiZWxvdyBpbnRvIG11bHRpcGxlIGxpY2Vuc2VzLAorLy8gdGFraW5nIGNhcmUgbm90IHRvIGxvc2UgYW55IGxpY2Vuc2Vfa2luZCBpbmZvcm1hdGlvbiwgYW5kIG92ZXJyaWRpbmcgdGhlCisvLyBkZWZhdWx0IGxpY2Vuc2UgdXNpbmcgdGhlICdsaWNlbnNlczogWy4uLl0nIHByb3BlcnR5IG9uIHRhcmdldHMgYXMgbmVlZGVkLgorLy8KKy8vIEZvciB1bnVzZWQgZmlsZXMsIGNvbnNpZGVyIGNyZWF0aW5nIGEgJ2ZpbGVHcm91cCcgd2l0aCAiLy92aXNpYmlsaXR5OnByaXZhdGUiCisvLyB0byBhdHRhY2ggdGhlIGxpY2Vuc2UgdG8sIGFuZCBpbmNsdWRpbmcgYSBjb21tZW50IHdoZXRoZXIgdGhlIGZpbGVzIG1heSBiZQorLy8gdXNlZCBpbiB0aGUgY3VycmVudCBwcm9qZWN0LgorLy8gU2VlOiBodHRwOi8vZ28vYW5kcm9pZC1saWNlbnNlLWZhcQorbGljZW5zZSB7CisgICAgbmFtZTogImV4dGVybmFsX2ZyZWV0eXBlX2xpY2Vuc2UiLAorICAgIHZpc2liaWxpdHk6IFsiOl9fc3VicGFja2FnZXNfXyJdLAorICAgIGxpY2Vuc2Vfa2luZHM6IFsKKyAgICAgICAgIlNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUJTRCIsCisgICAgICAgICJTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1GVEwiLAorICAgICAgICAiU1BEWC1saWNlbnNlLWlkZW50aWZpZXItR1BMIiwKKyAgICAgICAgIlNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUdQTC0yLjAiLAorICAgICAgICAiU1BEWC1saWNlbnNlLWlkZW50aWZpZXItR1BMLTMuMCIsCisgICAgICAgICJTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1JU0MiLAorICAgICAgICAiU1BEWC1saWNlbnNlLWlkZW50aWZpZXItTEdQTCIsCisgICAgICAgICJTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1NSVQiLAorICAgICAgICAiU1BEWC1saWNlbnNlLWlkZW50aWZpZXItWmxpYiIsCisgICAgICAgICJsZWdhY3lfdW5lbmN1bWJlcmVkIiwKKyAgICBdLAorICAgIGxpY2Vuc2VfdGV4dDogWworICAgICAgICAiTk9USUNFIiwKKyAgICBdLAorfQorCitjY19kZWZhdWx0cyB7CisgICAgbmFtZTogImxpYmZ0Ml9kZWZhdWx0cyIsCiAgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCiAgICAgLy8gVE9ETyhiLzE1MzYwOTUzMSk6IHJlbW92ZSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCiAgICAgbmF0aXZlX2JyaWRnZV9zdXBwb3J0ZWQ6IHRydWUsCiAKICAgICAvLyBjb21waWxlIGluIEFSTSBtb2RlLCBzaW5jZSB0aGUgZ2x5cGggbG9hZGVyL3JlbmRlcmVyIGlzIGEgaG90c3BvdAogICAgIC8vIHdoZW4gbG9hZGluZyBjb21wbGV4IHBhZ2VzIGluIHRoZSBicm93c2VyCi0gICAgLy8KICAgICBhcmNoOiB7CiAgICAgICAgIGFybTogewogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25fc2V0OiAiYXJtIiwKQEAgLTUwLDE4ICs4NywyNiBAQAogICAgICAgICAiLUREQVJXSU5fTk9fQ0FSQk9OIiwKICAgICAgICAgIi1ERlQyX0JVSUxEX0xJQlJBUlkiLAogCi0gICAgICAgIC8vIFVzdWFsbHkgdGhlc2UgYXJlIGRlZmluZWQgaW4gaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAotICAgICAgICAvLyB3ZSBoYXZlIGNvbW1lbnRlZCB0aGVtIGFuZCBkZWZpbmVkIHRoZW0gaGVyZSB0byBhbGxvdyBmb3IgdGhlCi0gICAgICAgIC8vIG5vIGRlcGVuZGVuY3kgdmFyaWFudCBsaWJmdDIubm9kZXAgYmVsb3cuCi0gICAgICAgICItREZUX0NPTkZJR19PUFRJT05fVVNFX1BORyIsCi0gICAgICAgICItREZUX0NPTkZJR19PUFRJT05fVVNFX1pMSUIiLAotCiAgICAgICAgICItTzIiLAogCiAgICAgICAgIC8vIFVwc3RyZWFtIGlnbm9yZXMgdW51c2VkIHBhcmFtZXRlciB3YXJuaW5nCiAgICAgICAgICItV25vLXVudXNlZC1wYXJhbWV0ZXIiLAogICAgICAgICAvLyBEaXNhYmxpbmcgc29tZSBvZiBtb2R1bGVzIHJlc3VsdHMgaW4gd2FybmluZ3MKICAgICAgICAgIi1Xbm8tdW51c2VkLXZhcmlhYmxlIiwKKyAgICBdLAorfQorCitjY19saWJyYXJ5IHsKKyAgICBuYW1lOiAibGliZnQyIiwKKyAgICBkZWZhdWx0czogWyJsaWJmdDJfZGVmYXVsdHMiXSwKKworICAgIGNmbGFnczogWworICAgICAgICAvLyBVc3VhbGx5IHRoZXNlIGFyZSBkZWZpbmVkIGluIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKyAgICAgICAgLy8gd2UgaGF2ZSBjb21tZW50ZWQgdGhlbSBhbmQgZGVmaW5lZCB0aGVtIGhlcmUgdG8gYWxsb3cgZm9yIHRoZQorICAgICAgICAvLyBubyBkZXBlbmRlbmN5IHZhcmlhbnQgbGliZnQyLm5vZGVwIGJlbG93LgorICAgICAgICAiLURGVF9DT05GSUdfT1BUSU9OX1VTRV9QTkciLAorICAgICAgICAiLURGVF9DT05GSUdfT1BUSU9OX1VTRV9aTElCIiwKKwogICAgICAgICAvLyB0aGUgZm9sbG93aW5nIGlzIGZvciB0ZXN0aW5nIG9ubHksIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gZmluYWwKICAgICAgICAgLy8gYnVpbGRzIG9mIHRoZSBwcm9kdWN0CiAgICAgICAgIC8vICItRFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIiLApAQCAtODksNjUgKzEzNCwxNiBAQAogICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSwKICAgICAgICAgfSwKICAgICB9LAotfQogCi1sbG5ka19saWJyYXJ5IHsKLSAgICBuYW1lOiAibGliZnQyIiwKLSAgICB2ZW5kb3JfYXZhaWxhYmxlOiBmYWxzZSwKLSAgICBzeW1ib2xfZmlsZTogImxpYmZ0Mi5tYXAudHh0IiwKLSAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbImluY2x1ZGUiXSwKKyAgICBsbG5kazogeworICAgICAgICBwcml2YXRlOiB0cnVlLAorICAgICAgICBzeW1ib2xfZmlsZTogImxpYmZ0Mi5tYXAudHh0IiwKKyAgICB9LAogfQogCiAvLyB2YXJpYW50IG9mIGxpYmZ0MiB3aXRob3V0IGFueSBsaWJyYXJ5IGRlcGVuZGVuY2llcy4KIGNjX2xpYnJhcnlfc3RhdGljIHsKICAgICBuYW1lOiAibGliZnQyLm5vZGVwIiwKLSAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKLQotICAgIC8vIGNvbXBpbGUgaW4gQVJNIG1vZGUsIHNpbmNlIHRoZSBnbHlwaCBsb2FkZXIvcmVuZGVyZXIgaXMgYSBob3RzcG90Ci0gICAgLy8gd2hlbiBsb2FkaW5nIGNvbXBsZXggcGFnZXMgaW4gdGhlIGJyb3dzZXIKLSAgICBhcmNoOiB7Ci0gICAgICAgIGFybTogewotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25fc2V0OiAiYXJtIiwKLSAgICAgICAgfSwKLSAgICB9LAotCi0gICAgc3JjczogWwotICAgICAgICAic3JjL2F1dG9maXQvYXV0b2ZpdC5jIiwKLSAgICAgICAgInNyYy9iYXNlL2Z0YmFzZS5jIiwKLSAgICAgICAgInNyYy9iYXNlL2Z0YmJveC5jIiwKLSAgICAgICAgInNyYy9iYXNlL2Z0Yml0bWFwLmMiLAotICAgICAgICAic3JjL2Jhc2UvZnRkZWJ1Zy5jIiwKLSAgICAgICAgInNyYy9iYXNlL2Z0ZnN0eXBlLmMiLAotICAgICAgICAic3JjL2Jhc2UvZnRnYXNwLmMiLAotICAgICAgICAic3JjL2Jhc2UvZnRnbHlwaC5jIiwKLSAgICAgICAgInNyYy9iYXNlL2Z0aW5pdC5jIiwKLSAgICAgICAgInNyYy9iYXNlL2Z0bW0uYyIsCi0gICAgICAgICJzcmMvYmFzZS9mdHN0cm9rZS5jIiwKLSAgICAgICAgInNyYy9iYXNlL2Z0dHlwZTEuYyIsCi0gICAgICAgICJzcmMvYmFzZS9mdHN5c3RlbS5jIiwKLSAgICAgICAgInNyYy9jaWQvdHlwZTFjaWQuYyIsCi0gICAgICAgICJzcmMvY2ZmL2NmZi5jIiwKLSAgICAgICAgInNyYy9nemlwL2Z0Z3ppcC5jIiwKLSAgICAgICAgInNyYy9wc2F1eC9wc2F1eC5jIiwKLSAgICAgICAgInNyYy9wc2hpbnRlci9wc2hpbnRlci5jIiwKLSAgICAgICAgInNyYy9wc25hbWVzL3BzbmFtZXMuYyIsCi0gICAgICAgICJzcmMvcmFzdGVyL3Jhc3Rlci5jIiwKLSAgICAgICAgInNyYy9zZm50L3NmbnQuYyIsCi0gICAgICAgICJzcmMvc21vb3RoL3Ntb290aC5jIiwKLSAgICAgICAgInNyYy90cnVldHlwZS90cnVldHlwZS5jIiwKLSAgICAgICAgInNyYy90eXBlMS90eXBlMS5jIiwKLSAgICBdLAotCi0gICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyJpbmNsdWRlIl0sCi0KLSAgICBjZmxhZ3M6IFsKLSAgICAgICAgIi1XIiwKLSAgICAgICAgIi1XYWxsIiwKLSAgICAgICAgIi1XZXJyb3IiLAotCi0gICAgICAgICItRERBUldJTl9OT19DQVJCT04iLAotICAgICAgICAiLURGVDJfQlVJTERfTElCUkFSWSIsCi0KLSAgICAgICAgIi1PMiIsCi0gICAgXSwKKyAgICB2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlLAorICAgIGRlZmF1bHRzOiBbImxpYmZ0Ml9kZWZhdWx0cyJdLAogfQpkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxpc3RzLnR4dAppbmRleCBlM2ZmYjgzLi4zZWQ1NWFhIDEwMDY0NAotLS0gYS9DTWFrZUxpc3RzLnR4dAorKysgYi9DTWFrZUxpc3RzLnR4dApAQCAtMSw2ICsxLDYgQEAKICMgQ01ha2VMaXN0cy50eHQKICMKLSMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBXcml0dGVuIG9yaWdpbmFsbHkgYnkgSm9obiBDYXJ5IDxjYXJ5QHR4Y29ycC5jb20+CkBAIC0xNCwxNCArMTQsMTQgQEAKICMKICMgVGhlIGZvbGxvd2luZyB3aWxsIDEuIGNyZWF0ZSBhIGJ1aWxkIGRpcmVjdG9yeSBhbmQgMi4gY2hhbmdlIGludG8gaXQgYW5kCiAjIGNhbGwgY21ha2UgdG8gY29uZmlndXJlIHRoZSBidWlsZCB3aXRoIGRlZmF1bHQgcGFyYW1ldGVycyBhcyBhIHN0YXRpYwotIyBsaWJyYXJ5LgorIyBsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9jbWFrZS5vcmcvY21ha2UvaGVscC9sYXRlc3QvdmFyaWFibGUvQ01BS0VfQlVJTERfVFlQRS5odG1sCisjIGZvciBpbmZvcm1hdGlvbiBhYm91dCBEZWJ1ZywgUmVsZWFzZSwgZXRjLiBidWlsZHMuCiAjCi0jICAgY21ha2UgLUUgbWFrZV9kaXJlY3RvcnkgYnVpbGQKLSMgICBjbWFrZSAtRSBjaGRpciBidWlsZCBjbWFrZSAuLgorIyAgIGNtYWtlIC1CIGJ1aWxkIC1EIENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZQogIwogIyBGb3IgYSBkeW5hbWljIGxpYnJhcnksIHVzZQogIwotIyAgIGNtYWtlIC1FIGNoZGlyIGJ1aWxkIGNtYWtlIC1EIEJVSUxEX1NIQVJFRF9MSUJTOkJPT0w9dHJ1ZSAuLgorIyAgIGNtYWtlIC1CIGJ1aWxkIC1EIEJVSUxEX1NIQVJFRF9MSUJTPXRydWUgLUQgQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlCiAjCiAjIEZvciBhIGZyYW1ld29yayBvbiBPUyBYLCB1c2UKICMKQEAgLTY4LDE0ICs2OCwyNiBAQAogIyAuIGBDTWFrZUxpc3RzLnR4dCcgaXMgcHJvdmlkZWQgYXMtaXMgc2luY2UgaXQgaXMgbm9ybWFsbHkgbm90IHVzZWQgYnkgdGhlCiAjICAgZGV2ZWxvcGVyIHRlYW0uCiAjCi0jIC4gU2V0IHRoZSBgRlRfV0lUSF9aTElCJywgYEZUX1dJVEhfQlpJUDInLCBgRlRfV0lUSF9QTkcnLCBhbmQKLSMgICBgRlRfV0lUSF9IQVJGQlVaWicgQ01ha2UgdmFyaWFibGVzIHRvIGBPTicgdG8gZm9yY2UgdXNpbmcgYSBkZXBlbmRlbmN5LgotIyAgIExlYXZlIGEgdmFyaWFibGUgdW5kZWZpbmVkICh3aGljaCBpcyB0aGUgZGVmYXVsdCkgdG8gdXNlIHRoZSBkZXBlbmRlbmN5Ci0jICAgb25seSBpZiBpdCBpcyBhdmFpbGFibGUuICBTZXQgYENNQUtFX0RJU0FCTEVfRklORF9QQUNLQUdFX0hhcmZCdXp6PVRSVUUnIHRvCi0jICAgZGlzYWJsZSBhIGRlcGVuZGVuY3kgY29tcGxldGVseSAoQ01ha2UgcGFja2FnZSBuYW1lLCBzbyBgQlppcDInIGluc3RlYWQgb2YKLSMgICBgQlpJUDInKS4gRXhhbXBsZToKKyMgLiBTZXQgdGhlIGBGVF9XSVRIX1pMSUInLCBgRlRfV0lUSF9CWklQMicsIGBGVF9XSVRIX1BORycsCisjICAgYEZUX1dJVEhfSEFSRkJVWlonLCBhbmQgYEZUX1dJVEhfQlJPVExJJyBDTWFrZSB2YXJpYWJsZXMgdG8gYE9OJyB0bworIyAgIGZvcmNlIHVzaW5nIGEgZGVwZW5kZW5jeS4gIExlYXZlIGEgdmFyaWFibGUgdW5kZWZpbmVkICh3aGljaCBpcyB0aGUKKyMgICBkZWZhdWx0KSB0byB1c2UgdGhlIGRlcGVuZGVuY3kgb25seSBpZiBpdCBpcyBhdmFpbGFibGUuIEV4YW1wbGU6CiAjCi0jICAgICBjbWFrZSAtREZUX1dJVEhfWkxJQj1PTiAtRENNQUtFX0RJU0FCTEVfRklORF9QQUNLQUdFX0hhcmZCdXp6PVRSVUUgWy4uLl0KKyMgICAgIGNtYWtlIC1CIGJ1aWxkIC1EIEZUX1dJVEhfWkxJQj1PTiBcCisjICAgICAgICAgICAgICAgICAgICAtRCBGVF9XSVRIX0JaSVAyPU9OIFwKKyMgICAgICAgICAgICAgICAgICAgIC1EIEZUX1dJVEhfUE5HPU9OIFwKKyMgICAgICAgICAgICAgICAgICAgIC1EIEZUX1dJVEhfSEFSRkJVWlo9T04gXAorIyAgICAgICAgICAgICAgICAgICAgLUQgRlRfV0lUSF9CUk9UTEk9T04gWy4uLl0KKyMKKyMgICBTZXQgYENNQUtFX0RJU0FCTEVfRklORF9QQUNLQUdFX1hYWD1UUlVFJyB0byBkaXNhYmxlIGEgZGVwZW5kZW5jeSBjb21wbGV0ZWx5CisjICAgKHdoZXJlIGBYWFgnIGlzIGEgQ01ha2UgcGFja2FnZSBuYW1lIGxpa2UgYEJaaXAyJykuICBFeGFtcGxlIGZvciBkaXNhYmxpbmcgYWxsCisjICAgZGVwZW5kZW5jaWVzOgorIworIyAgICAgY21ha2UgLUIgYnVpbGQgLUQgQ01BS0VfRElTQUJMRV9GSU5EX1BBQ0tBR0VfWkxJQj1UUlVFIFwKKyMgICAgICAgICAgICAgICAgICAgIC1EIENNQUtFX0RJU0FCTEVfRklORF9QQUNLQUdFX0JaaXAyPVRSVUUgXAorIyAgICAgICAgICAgICAgICAgICAgLUQgQ01BS0VfRElTQUJMRV9GSU5EX1BBQ0tBR0VfUE5HPVRSVUUgXAorIyAgICAgICAgICAgICAgICAgICAgLUQgQ01BS0VfRElTQUJMRV9GSU5EX1BBQ0tBR0VfSGFyZkJ1eno9VFJVRSBcCisjICAgICAgICAgICAgICAgICAgICAtRCBDTUFLRV9ESVNBQkxFX0ZJTkRfUEFDS0FHRV9Ccm90bGlEZWM9VFJVRSBbLi4uXQogIwogIyAuIEluc3RhbGxhdGlvbiBvZiBGcmVlVHlwZSBjYW4gYmUgY29udHJvbGxlZCB3aXRoIHRoZSBDTWFrZSB2YXJpYWJsZXMKICMgICBgU0tJUF9JTlNUQUxMX0hFQURFUlMnLCBgU0tJUF9JTlNUQUxMX0xJQlJBUklFUycsIGFuZCBgU0tJUF9JTlNUQUxMX0FMTCcKQEAgLTg5LDcgKzEwMSw3IEBACiAKIGlmIChOT1QgQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy4zKQogICAjIEFsbG93IHN5bWJvbCB2aXNpYmlsaXR5IHNldHRpbmdzIGFsc28gb24gc3RhdGljIGxpYnJhcmllcy4gQ01ha2UgPCAzLjMKLSAgIyBvbmx5IHNldHMgdGhlIHByb3Blcnkgb24gYSBzaGFyZWQgbGlicmFyeSBidWlsZC4KKyAgIyBvbmx5IHNldHMgdGhlIHByb3BlcnR5IG9uIGEgc2hhcmVkIGxpYnJhcnkgYnVpbGQuCiAgIGNtYWtlX3BvbGljeShTRVQgQ01QMDA2MyBORVcpCiBlbmRpZiAoKQogCkBAIC0xMzUsMjYgKzE0NywzNCBAQAogCiBzZXQoVkVSU0lPTl9NQUpPUiAiMiIpCiBzZXQoVkVSU0lPTl9NSU5PUiAiMTAiKQotc2V0KFZFUlNJT05fUEFUQ0ggIjEiKQorc2V0KFZFUlNJT05fUEFUQ0ggIjQiKQogCi0jIFNPVkVSU0lPTiBzY2hlbWU6IENVUlJFTlQuQUdFLlJFVklTSU9OCi0jICAgSWYgdGhlcmUgd2FzIGFuIGluY29tcGF0aWJsZSBpbnRlcmZhY2UgY2hhbmdlOgotIyAgICAgSW5jcmVtZW50IENVUlJFTlQuIFNldCBBR0UgYW5kIFJFVklTSU9OIHRvIDAKLSMgICBJZiB0aGVyZSB3YXMgYSBjb21wYXRpYmxlIGludGVyZmFjZSBjaGFuZ2U6Ci0jICAgICBJbmNyZW1lbnQgQUdFLiBTZXQgUkVWSVNJT04gdG8gMAotIyAgIElmIHRoZSBzb3VyY2UgY29kZSB3YXMgY2hhbmdlZCwgYnV0IHRoZXJlIHdlcmUgbm8gaW50ZXJmYWNlIGNoYW5nZXM6Ci0jICAgICBJbmNyZW1lbnQgUkVWSVNJT04uCi1zZXQoTElCUkFSWV9WRVJTSU9OICI2LjE2LjAiKQotc2V0KExJQlJBUllfU09WRVJTSU9OICI2IikKKyMgR2VuZXJhdGUgTElCUkFSWV9WRVJTSU9OIGFuZCBMSUJSQVJZX1NPVkVSU0lPTi4KK3NldChMSUJUT09MX1JFR0VYICJ2ZXJzaW9uX2luZm89JyhbMC05XSspOihbMC05XSspOihbMC05XSspJyIpCitmaWxlKFNUUklOR1MgIiR7UFJPSkVDVF9TT1VSQ0VfRElSfS9idWlsZHMvdW5peC9jb25maWd1cmUucmF3IgorICBWRVJTSU9OX0lORk8KKyAgUkVHRVggJHtMSUJUT09MX1JFR0VYfSkKK3N0cmluZyhSRUdFWCBSRVBMQUNFCisgICR7TElCVE9PTF9SRUdFWH0gIlxcMSIKKyAgTElCVE9PTF9DVVJSRU5UICIke1ZFUlNJT05fSU5GT30iKQorc3RyaW5nKFJFR0VYIFJFUExBQ0UKKyAgJHtMSUJUT09MX1JFR0VYfSAiXFwyIgorICBMSUJUT09MX1JFVklTSU9OICIke1ZFUlNJT05fSU5GT30iKQorc3RyaW5nKFJFR0VYIFJFUExBQ0UKKyAgJHtMSUJUT09MX1JFR0VYfSAiXFwzIgorICBMSUJUT09MX0FHRSAiJHtWRVJTSU9OX0lORk99IikKIAotIyBUaGVzZSBvcHRpb25zIG1lYW4gInJlcXVpcmUgeCBhbmQgY29tcGxhaW4gaWYgbm90IGZvdW5kIi4gVGhleSdsbCBnZXQKLSMgb3B0aW9uYWxseSBmb3VuZCBhbnl3YXkuIFVzZSBgLURDTUFLRV9ESVNBQkxFX0ZJTkRfUEFDS0FHRV94PVRSVUVgIHRvIGRpc2FibGUKLSMgc2VhcmNoaW5nIGZvciBhIHBhY2tnZSBlbnRpcmVseSAoeCBpcyB0aGUgQ01ha2UgcGFja2FnZSBuYW1lLCBzbyAiQlppcDIiCi0jIGluc3RlYWQgb2YgIkJaSVAyIikuCisjIFRoaXMgaXMgd2hhdCBsaWJ0b29sIGRvZXMgaW50ZXJuYWxseSBvbiBVbml4IHBsYXRmb3Jtcy4KK21hdGgoRVhQUiBMSUJSQVJZX1NPVkVSU0lPTiAiJHtMSUJUT09MX0NVUlJFTlR9IC0gJHtMSUJUT09MX0FHRX0iKQorc2V0KExJQlJBUllfVkVSU0lPTiAiJHtMSUJSQVJZX1NPVkVSU0lPTn0uJHtMSUJUT09MX0FHRX0uJHtMSUJUT09MX1JFVklTSU9OfSIpCisKKyMgRXh0ZXJuYWwgZGVwZW5kZW5jeSBsaWJyYXJ5IGRldGVjdGlvbiBpcyBhdXRvbWF0aWMuIFNlZSB0aGUgbm90ZXMgYXQgdGhlIHRvcAorIyBvZiB0aGlzIGZpbGUsIGZvciBob3cgdG8gZm9yY2Ugb3IgZGlzYWJsZSBkZXBlbmRlbmNpZXMgY29tcGxldGVseS4KIG9wdGlvbihGVF9XSVRIX1pMSUIgIlVzZSBzeXN0ZW0gemxpYiBpbnN0ZWFkIG9mIGludGVybmFsIGxpYnJhcnkuIiBPRkYpCiBvcHRpb24oRlRfV0lUSF9CWklQMiAiU3VwcG9ydCBiemlwMiBjb21wcmVzc2VkIGZvbnRzLiIgT0ZGKQogb3B0aW9uKEZUX1dJVEhfUE5HICJTdXBwb3J0IFBORyBjb21wcmVzc2VkIE9wZW5UeXBlIGVtYmVkZGVkIGJpdG1hcHMuIiBPRkYpCiBvcHRpb24oRlRfV0lUSF9IQVJGQlVaWiAiSW1wcm92ZSBhdXRvLWhpbnRpbmcgb2YgT3BlblR5cGUgZm9udHMuIiBPRkYpCitvcHRpb24oRlRfV0lUSF9CUk9UTEkgIlN1cHBvcnQgY29tcHJlc3NlZCBXT0ZGMiBmb250cy4iIE9GRikKIAogCiAjIERpc2FsbG93IGluLXNvdXJjZSBidWlsZHMKQEAgLTE4NSwxMCArMjA1LDExIEBACiAKIAogIyBGaW5kIGRlcGVuZGVuY2llcworc2V0KEhBUkZCVVpaX01JTl9WRVJTSU9OICIxLjguMCIpCiBpZiAoRlRfV0lUSF9IQVJGQlVaWikKLSAgZmluZF9wYWNrYWdlKEhhcmZCdXp6IDEuMy4wIFJFUVVJUkVEKQorICBmaW5kX3BhY2thZ2UoSGFyZkJ1enogJHtIQVJGQlVaWl9NSU5fVkVSU0lPTn0gUkVRVUlSRUQpCiBlbHNlICgpCi0gIGZpbmRfcGFja2FnZShIYXJmQnV6eiAxLjMuMCkKKyAgZmluZF9wYWNrYWdlKEhhcmZCdXp6ICR7SEFSRkJVWlpfTUlOX1ZFUlNJT059KQogZW5kaWYgKCkKIAogaWYgKEZUX1dJVEhfUE5HKQpAQCAtMjA5LDEzICsyMzAsMTggQEAKICAgZmluZF9wYWNrYWdlKEJaaXAyKQogZW5kaWYgKCkKIAoraWYgKEZUX1dJVEhfQlJPVExJKQorICBmaW5kX3BhY2thZ2UoQnJvdGxpRGVjIFJFUVVJUkVEKQorZWxzZSAoKQorICBmaW5kX3BhY2thZ2UoQnJvdGxpRGVjKQorZW5kaWYgKCkKKwogIyBDcmVhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQogaWYgKFVOSVgpCiAgIGNoZWNrX2luY2x1ZGVfZmlsZSgidW5pc3RkLmgiIEhBVkVfVU5JU1REX0gpCiAgIGNoZWNrX2luY2x1ZGVfZmlsZSgiZmNudGwuaCIgSEFWRV9GQ05UTF9IKQotICBjaGVja19pbmNsdWRlX2ZpbGUoInN0ZGludC5oIiBIQVZFX1NURElOVF9IKQogCi0gIGZpbGUoUkVBRCAiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2J1aWxkcy91bml4L2Z0Y29uZmlnLmluIgorICBmaWxlKFJFQUQgIiR7UFJPSkVDVF9TT1VSQ0VfRElSfS9idWlsZHMvdW5peC9mdGNvbmZpZy5oLmluIgogICAgIEZUQ09ORklHX0gpCiAgIGlmIChIQVZFX1VOSVNURF9IKQogICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFCkBAIC0yMjcsMTMgKzI1Myw2IEBACiAgICAgICAiI3VuZGVmICsoSEFWRV9GQ05UTF9IKSIgIiNkZWZpbmUgXFwxIDEiCiAgICAgICBGVENPTkZJR19IICIke0ZUQ09ORklHX0h9IikKICAgZW5kaWYgKCkKLSAgaWYgKEhBVkVfU1RESU5UX0gpCi0gICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UKLSAgICAgICIjdW5kZWYgKyhIQVZFX1NURElOVF9IKSIgIiNkZWZpbmUgXFwxIDEiCi0gICAgICBGVENPTkZJR19IICIke0ZUQ09ORklHX0h9IikKLSAgZW5kaWYgKCkKLSAgc3RyaW5nKFJFUExBQ0UgIi91bmRlZiAiICIjdW5kZWYgIgotICAgIEZUQ09ORklHX0ggIiR7RlRDT05GSUdfSH0iKQogZWxzZSAoKQogICBmaWxlKFJFQUQgIiR7UFJPSkVDVF9TT1VSQ0VfRElSfS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oIgogICAgIEZUQ09ORklHX0gpCkBAIC0yNzMsNiArMjkyLDExIEBACiAgICAgIi9cXCogKygjZGVmaW5lICtGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWikgK1xcKi8iICJcXDEiCiAgICAgRlRPUFRJT05fSCAiJHtGVE9QVElPTl9IfSIpCiBlbmRpZiAoKQoraWYgKEJST1RMSURFQ19GT1VORCkKKyAgc3RyaW5nKFJFR0VYIFJFUExBQ0UKKyAgICAiL1xcKiArKCNkZWZpbmUgK0ZUX0NPTkZJR19PUFRJT05fVVNFX0JST1RMSSkgK1xcKi8iICJcXDEiCisgICAgRlRPUFRJT05fSCAiJHtGVE9QVElPTl9IfSIpCitlbmRpZiAoKQogCiBzZXQoRlRPUFRJT05fSF9OQU1FICIke1BST0pFQ1RfQklOQVJZX0RJUn0vaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCIpCiBpZiAoRVhJU1RTICIke0ZUT1BUSU9OX0hfTkFNRX0iKQpAQCAtMzA4LDcgKzMzMiw2IEBACiAgIHNyYy9iYXNlL2Z0cGZyLmMKICAgc3JjL2Jhc2UvZnRzdHJva2UuYwogICBzcmMvYmFzZS9mdHN5bnRoLmMKLSAgc3JjL2Jhc2UvZnRzeXN0ZW0uYwogICBzcmMvYmFzZS9mdHR5cGUxLmMKICAgc3JjL2Jhc2UvZnR3aW5mbnQuYwogICBzcmMvYmRmL2JkZi5jCkBAIC0zMzIsNiArMzU1LDEyIEBACiAgIHNyYy93aW5mb250cy93aW5mbnQuYwogKQogCitpZiAoVU5JWCkKKyAgbGlzdChBUFBFTkQgQkFTRV9TUkNTICJidWlsZHMvdW5peC9mdHN5c3RlbS5jIikKK2Vsc2UgKCkKKyAgbGlzdChBUFBFTkQgQkFTRV9TUkNTICJzcmMvYmFzZS9mdHN5c3RlbS5jIikKK2VuZGlmICgpCisKIGlmIChXSU4zMikKICAgZW5hYmxlX2xhbmd1YWdlKFJDKQogICBsaXN0KEFQUEVORCBCQVNFX1NSQ1MgYnVpbGRzL3dpbmRvd3MvZnRkZWJ1Zy5jCkBAIC0zOTAsNyArNDE5LDExIEBACiAgICAgICAkPEJVSUxEX0lOVEVSRkFDRToke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vaW5jbHVkZT4KICAgICBQUklWQVRFCiAgICAgICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vaW5jbHVkZQotICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2luY2x1ZGUpCisgICAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vaW5jbHVkZQorICAgICAgCisgICAgICAjIE1ha2UgPGZ0Y29uZmlnLmg+IGF2YWlsYWJsZSBmb3IgYnVpbGRzL3VuaXgvZnRzeXN0ZW0uYy4KKyAgICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZworKQogCiAKIGlmIChCVUlMRF9GUkFNRVdPUkspCkBAIC00MTEsMjMgKzQ0NCwyOSBAQAogaWYgKFpMSUJfRk9VTkQpCiAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhmcmVldHlwZSBQUklWQVRFICR7WkxJQl9MSUJSQVJJRVN9KQogICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhmcmVldHlwZSBQUklWQVRFICR7WkxJQl9JTkNMVURFX0RJUlN9KQotICBsaXN0KEFQUEVORCBQS0dfQ09ORklHX1JFUVVJUkVEX1BSSVZBVEUgemxpYikKKyAgbGlzdChBUFBFTkQgUEtHX0NPTkZJR19SRVFVSVJFRF9QUklWQVRFICJ6bGliIikKIGVuZGlmICgpCiBpZiAoQlpJUDJfRk9VTkQpCiAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhmcmVldHlwZSBQUklWQVRFICR7QlpJUDJfTElCUkFSSUVTfSkKICAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoZnJlZXR5cGUgUFJJVkFURSAke0JaSVAyX0lOQ0xVREVfRElSfSkgIyBub3QgQlpJUDJfSU5DTFVERV9ESVJTCi0gIGxpc3QoQVBQRU5EIFBLR19DT05GSUdfUkVRVUlSRURfUFJJVkFURSBiemlwMikKKyAgbGlzdChBUFBFTkQgUEtHX0NPTkZJR19SRVFVSVJFRF9QUklWQVRFICJiemlwMiIpCiBlbmRpZiAoKQogaWYgKFBOR19GT1VORCkKICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGZyZWV0eXBlIFBSSVZBVEUgJHtQTkdfTElCUkFSSUVTfSkKICAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoZnJlZXR5cGUgUFJJVkFURSAke1BOR19ERUZJTklUSU9OU30pCiAgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKGZyZWV0eXBlIFBSSVZBVEUgJHtQTkdfSU5DTFVERV9ESVJTfSkKLSAgbGlzdChBUFBFTkQgUEtHX0NPTkZJR19SRVFVSVJFRF9QUklWQVRFIGxpYnBuZykKKyAgbGlzdChBUFBFTkQgUEtHX0NPTkZJR19SRVFVSVJFRF9QUklWQVRFICJsaWJwbmciKQogZW5kaWYgKCkKIGlmIChIQVJGQlVaWl9GT1VORCkKICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGZyZWV0eXBlIFBSSVZBVEUgJHtIQVJGQlVaWl9MSUJSQVJJRVN9KQogICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhmcmVldHlwZSBQUklWQVRFICR7SEFSRkJVWlpfSU5DTFVERV9ESVJTfSkKLSAgbGlzdChBUFBFTkQgUEtHX0NPTkZJR19SRVFVSVJFRF9QUklWQVRFIGhhcmZidXp6KQorICBsaXN0KEFQUEVORCBQS0dfQ09ORklHX1JFUVVJUkVEX1BSSVZBVEUgImhhcmZidXp6ID49ICR7SEFSRkJVWlpfTUlOX1ZFUlNJT059IikKK2VuZGlmICgpCitpZiAoQlJPVExJREVDX0ZPVU5EKQorICB0YXJnZXRfbGlua19saWJyYXJpZXMoZnJlZXR5cGUgUFJJVkFURSAke0JST1RMSURFQ19MSUJSQVJJRVN9KQorICB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhmcmVldHlwZSBQUklWQVRFICR7QlJPVExJREVDX0RFRklOSVRJT05TfSkKKyAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoZnJlZXR5cGUgUFJJVkFURSAke0JST1RMSURFQ19JTkNMVURFX0RJUlN9KQorICBsaXN0KEFQUEVORCBQS0dfQ09ORklHX1JFUVVJUkVEX1BSSVZBVEUgImxpYmJyb3RsaWRlYyIpCiBlbmRpZiAoKQogCiAKQEAgLTQ1Myw3ICs0OTIsNyBAQAogaWYgKE5PVCBTS0lQX0lOU1RBTExfTElCUkFSSUVTIEFORCBOT1QgU0tJUF9JTlNUQUxMX0FMTCkKICAgIyBHZW5lcmF0ZSB0aGUgcGtnLWNvbmZpZyBmaWxlCiAgIGlmIChVTklYKQotICAgIGZpbGUoUkVBRCAke1BST0pFQ1RfU09VUkNFX0RJUn0vYnVpbGRzL3VuaXgvZnJlZXR5cGUyLmluIEZSRUVUWVBFMl9QQ19JTikKKyAgICBmaWxlKFJFQUQgIiR7UFJPSkVDVF9TT1VSQ0VfRElSfS9idWlsZHMvdW5peC9mcmVldHlwZTIuaW4iIEZSRUVUWVBFMl9QQ19JTikKIAogICAgIHN0cmluZyhSRVBMQUNFICI7IiAiLCAiIFBLR19DT05GSUdfUkVRVUlSRURfUFJJVkFURSAiJHtQS0dfQ09ORklHX1JFUVVJUkVEX1BSSVZBVEV9IikKIApAQCAtNDY1LDcgKzUwNCw3IEBACiAgICAgICAgICAgIEZSRUVUWVBFMl9QQ19JTiAke0ZSRUVUWVBFMl9QQ19JTn0pCiAgICAgc3RyaW5nKFJFUExBQ0UgIiVpbmNsdWRlZGlyJSIgIlwke3ByZWZpeH0vJHtDTUFLRV9JTlNUQUxMX0lOQ0xVREVESVJ9IgogICAgICAgICAgICBGUkVFVFlQRTJfUENfSU4gJHtGUkVFVFlQRTJfUENfSU59KQotICAgIHN0cmluZyhSRVBMQUNFICIlZnRfdmVyc2lvbiUiICIke1ZFUlNJT05fTUFKT1J9LiR7VkVSU0lPTl9NSU5PUn0uJHtWRVJTSU9OX1BBVENIfSIKKyAgICBzdHJpbmcoUkVQTEFDRSAiJWZ0X3ZlcnNpb24lIiAiJHtMSUJUT09MX0NVUlJFTlR9LiR7TElCVE9PTF9SRVZJU0lPTn0uJHtMSUJUT09MX0FHRX0iCiAgICAgICAgICAgIEZSRUVUWVBFMl9QQ19JTiAke0ZSRUVUWVBFMl9QQ19JTn0pCiAgICAgc3RyaW5nKFJFUExBQ0UgIiVSRVFVSVJFU19QUklWQVRFJSIgIiR7UEtHX0NPTkZJR19SRVFVSVJFRF9QUklWQVRFfSIKICAgICAgICAgICAgRlJFRVRZUEUyX1BDX0lOICR7RlJFRVRZUEUyX1BDX0lOfSkKQEAgLTQ4OCw2ICs1MjcsMTIgQEAKICAgICAgIENPTVBPTkVOVCBwa2djb25maWcpCiAgIGVuZGlmICgpCiAKKyAgaW5jbHVkZShDTWFrZVBhY2thZ2VDb25maWdIZWxwZXJzKQorICB3cml0ZV9iYXNpY19wYWNrYWdlX3ZlcnNpb25fZmlsZSgKKyAgICAke1BST0pFQ1RfQklOQVJZX0RJUn0vZnJlZXR5cGUtY29uZmlnLXZlcnNpb24uY21ha2UKKyAgICBWRVJTSU9OICR7VkVSU0lPTl9NQUpPUn0uJHtWRVJTSU9OX01JTk9SfS4ke1ZFUlNJT05fUEFUQ0h9CisgICAgQ09NUEFUSUJJTElUWSBTYW1lTWFqb3JWZXJzaW9uKQorCiAgIGluc3RhbGwoCiAgICAgVEFSR0VUUyBmcmVldHlwZQogICAgICAgRVhQT1JUIGZyZWV0eXBlLXRhcmdldHMKQEAgLTUwMSw2ICs1NDYsMTAgQEAKICAgICAgIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9L2NtYWtlL2ZyZWV0eXBlCiAgICAgICBGSUxFIGZyZWV0eXBlLWNvbmZpZy5jbWFrZQogICAgICAgQ09NUE9ORU5UIGhlYWRlcnMpCisgIGluc3RhbGwoCisgICAgRklMRVMgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2ZyZWV0eXBlLWNvbmZpZy12ZXJzaW9uLmNtYWtlCisgICAgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0vY21ha2UvZnJlZXR5cGUKKyAgICBDT01QT05FTlQgaGVhZGVycykKIGVuZGlmICgpCiAKIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDY0NTBhNjAuLjQyZjdjMzQgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOTQ5IEBACisyMDIwLTEwLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFZlcnNpb24gMi4xMC40IHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTEwLTQnLgorCisJKiBkb2NzL1ZFUlNJT04uVFhUOiBBZGQgZW50cnkgZm9yIHZlcnNpb24gMi4xMC40LgorCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisJKiBSRUFETUUsIHNyYy9iYXNlL2Z0dmVyLnJjLCBidWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sLCBkb2NzL2ZyZWV0eXBlLWNvbmZpZy4xOgorCXMvMi4xMC4zLzIuMTAuNC8sIHMvMjEwMy8yMTA0Ly4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byA0LgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMjM6NDoxNy4KKwkqIENNYWtlTGlzdHMudHh0IChWRVJTSU9OX1BBVENIKTogU2V0IHRvIDQuCisKKzIwMjAtMTAtMTkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggaGVhcCBidWZmZXIgb3ZlcmZsb3cgKCM1OTMwOCkuCisKKwlUaGlzIGlzIENWRS0yMDIwLTE1OTk5LgorCisJKiBzcmMvc2ZudC9wbmdzaGltLmMgKExvYWRfU0JpdF9QbmcpOiBUZXN0IGJpdG1hcCBzaXplIGVhcmxpZXIuCisKKzIwMjAtMTAtMTcgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL3NmbnQvdHR7Y29scixjcGFsfS5jOiBGaXggc2lnbmVkbmVzcyB3YXJuaW5ncyBmcm9tIFZDKysuCisKKzIwMjAtMTAtMTcgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5jIChSZWFkMjU1VVNob3J0KTogVHdlYWsgdHlwZXMgdG8gcGxlYXNlIFZDKysuCisKKzIwMjAtMTAtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogVmVyc2lvbiAyLjEwLjMgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItMTAtMycuCisKKwkqIGRvY3MvVkVSU0lPTi5UWFQ6IEFkZCBlbnRyeSBmb3IgdmVyc2lvbiAyLjEwLjMuCisKKwkqIFJFQURNRSwgc3JjL2Jhc2UvZnR2ZXIucmMsIGJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWwsIGRvY3MvZnJlZXR5cGUtY29uZmlnLjE6CisJcy8yLjEwLjIvMi4xMC4zLywgcy8yMTAyLzIxMDMvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDMuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKHZlcnNpb25faW5mbyk6IFNldCB0byAyMzozOjE3LgorCSogQ01ha2VMaXN0cy50eHQgKFZFUlNJT05fUEFUQ0gpOiBTZXQgdG8gMy4KKworMjAyMC0wOS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFN5bmNocm9uaXplIHdpdGggdHRmYXV0b2hpbnQuCisKKwlUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBmb2xsb3dpbmcgY29tbWl0cyBpbiB0aGUgdHRmYXV0b2hpbnQgZ2l0CisJcmVwb3NpdG9yeToKKworCSAgYmI2ODQyYmQzYmQ0MzdiN2I0YTc5MjFiMDM3NmM4NjBmNWU3M2QxOCAgVHlwbywgZm9ybWF0dGluZy4KKwkgIGQ1YzkxZGRiMWNiMzEwMjU3YTNkZmU5YThlMjBlMWZjNTEzMzVmYWEgIEFkZCBNZWRlZmFpZHJpbiBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgTWVkZWZhaWRyaW4uCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgTWVkZWZhaWRyaW4gc3RhbmRhcmQgY2hhcmFjdGVycy4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIE1lZGVmYWlkcmluCisJZGF0YS4KKworMjAyMC0wOS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTW92ZSBgc2NyaXB0cy9tYWtlX2Rpc3RyaWJ1dGlvbl9hcmNoaXZlcy5weWAgdG8gYHNyYy90b29sc2AuCisKKwkqIHNjci90b29scy9zY3JpcHRzL21ha2VfZGlzdHJpYnV0aW9uX2FyY2hpdmVzLnB5OiAoX1RPUF9ESVIsCisJX1NDUklQVF9ESVIpOiBVcGRhdGVkIHRvIG5ldyBsb2NhdGlvbi4KKwkobWFpbik6IHMvc2h1dGlscy5jb3B5ZmlsZS9zaHV0aWxzLmNvcHkvIHRvIHByZXNlcnZlIGZpbGUKKwlwZXJtaXNzaW9ucy4KKwkobWFpbik6IFByZWZpeCBzb3VyY2UgZmlsZSBwYXRocyB3aXRoIGBnaXRfZGlyYCB3aGlsZSBjb3B5aW5nIGZpbGVzCisJdG8gYWxsb3cgY2FsbHMgb2YgdGhlIHNjcmlwdCBmcm9tIG90aGVyIHBsYWNlcyB0aGFuIHRoZSB0b3AtbGV2ZWwKKwlkaXJlY3RvcnkuCisKKzIwMjAtMDktMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfc2xvdF9sb2FkKTogU2NhbGUgYHZlcnRCZWFyaW5nWWAuCisKKwlUb3dhcmRzIHRoZSBlbmQgb2YgdGhlIHRoZSBmdW5jdGlvbiB0aGVyZSBpcyBhIGNhbGwgdG8KKwlgRlRfT3V0bGluZV9HZXRfQ0JveGAgdGhhdCByZXRyaWV2ZXMgdGhlIGdseXBoIGJib3ggaW4gc2NhbGVkIHVuaXRzLgorCVRoYXQgc2V0cyBgaG9yaUJlYXJpbmd7WCxZfWAgYW5kIGB2ZXJ0QmVhcmluZ1hgIGJ1dCBgdmVydEJlYXJpbmdZYAorCWlzIGxlZnQgYWxvbmUsIGFuZCBpcyBub3Qgc2NhbGVkLgorCisJUGF0Y2ggZnJvbSBFcmljIE11bGxlciA8ZW11bGxlckBhbWF6b24uY29tPi4KKworMjAyMC0wOS0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTG9hZF9HbHlwaCk6IFRyYWNlIGdseXBoIG1ldHJpY3MuCisKKzIwMjAtMDktMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVttZXNvbl0gTW92ZSBhdXhpbGlhcnkgc2NyaXB0cyB0byBgYnVpbGRzL21lc29uYC4KKworCVN1Z2dlc3RlZCBieSBBbGV4ZWkuCisKKwkqIHNjcmlwdHMvKi5weTogTW92ZSBtZXNvbiBzY3JpcHRzIHRvLi4uCisJKiBidWlsZHMvbWVzb24vKi5weTogLi4uIHRoaXMgbmV3IGxvY2F0aW9uLgorCisJKiBtZXNvbi5idWlsZDogVXBkYXRlZC4KKworMjAyMC0wOS0yMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJQWRkIHB5dGhvbiBzY3JpcHQgZm9yIGJ1aWxkaW5nIHRhcmJhbGxzLgorCisJKiBzY3JpcHRzL21ha2VfZGlzdHJpYnV0aW9uX2FyY2hpdmVzLnB5OiBOZXcgZmlsZS4KKworCVRoaXMgc3RhbmRhbG9uZSBQeXRob24gc2NyaXB0IHNob3VsZCBiZSBlcXVpdmFsZW50IHRvIHJ1bm5pbmcgYG1ha2UKKwlkaXN0YCB3aXRoIHRoZSBNYWtlLWJhc2VkIGJ1aWxkIHN5c3RlbSwgd2l0aCB0aGUgZm9sbG93aW5nIG1pbm9yCisJZGlmZmVyZW5jZXM6CisKKwktIFNpbmNlIGBtYWtlIGRpc3RjbGVhbmAgZG9lc24ndCBhbHdheXMgY2xlYW4gdXAgYG9ianMvYCBwcm9wZXJseSwKKwkgIGBtYWtlIGRpc3RgIGFyY2hpdmVzIG1heSBjb250YWluIHNvbWUgc3RhbGUgYmluYXJpZXMgbGlrZQorCSAgYG9ianMvLmxpYnMvbGliZnJlZXR5cGUuc28uNmAgb3Igb3RoZXJzLgorCisJLSBgY29uZmlnLmd1ZXNzYCBhbmQgYGNvbmZpZy5zdWJgIGFyZSBub3QgdXBkYXRlZCB1bmxlc3Mgb3B0aW9uCisJICBgLS1nbnUtY29uZmlnLWRpcj1ESVJgIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlc2UKKwkgIGZpbGVzLgorCisJLSBTb21lIGJpdHMgb2YgdGhlIGF1dG8tZ2VuZXJhdGVkIHJlZmVyZW5jZSBkb2N1bWVudGF0aW9uIG1heQorCSAgYXBwZWFyIGluIHNsaWdodGx5IGRpZmZlcmVudCBvcmRlciwgcHJvYmFibHkgZHVlIHRvIGlzc3VlcyByZWxhdGVkCisJICB0byBta2RvY3MgYW5kIGRvY3dyaXRlci4KKworCUFzIGFuIGV4YW1wbGUsIHRoZSBjYWxsCisKKwkgIHNjcmlwdHMvbWFrZV9kaXN0cmlidXRpb25fYXJjaGl2ZXMucHkgL3RtcC9mcmVldHlwZTItZGlzdAorCisJY3JlYXRlcyB0aGUgZm9sbG93aW5nIGZpbGVzIHVuZGVyIGAvdG1wL2ZyZWV0eXBlMi1kaXN0YDoKKworCSAgZnJlZXR5cGUtPHZlcnNpb24+LnRhci5negorCSAgZnJlZXR5cGUtPHZlcnNpb24+LnRhci54egorCSAgZnQ8d2ludmVyc2lvbj4uemlwCisKKzIwMjAtMDktMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc2NyaXB0cy9leHRyYWN0X2ZyZWV0eXBlX3ZlcnNpb24ucHk6IEZpeCByZWdleCB0eXBvcy4KKworMjAyMC0wOS0yMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJQWRkIE1lc29uIGJ1aWxkIHByb2plY3QgZmlsZS4KKworCUV4YW1wbGUgdXNhZ2U6CisKKwkgICMgQ29uZmlndXJlIE1lc29uIGJ1aWxkIGluIGRpcmVjdG9yeSBgYnVpbGQtbWVzb25gIHRvIGdlbmVyYXRlCisJICAjIHJlbGVhc2UgYmluYXJpZXMgY29tcGFyYWJsZSB0byB0byB0aGUgb25lcyBmcm9tIHRoZQorCSAgIyBhdXRvdG9vbHMvbWFrZSBidWlsZCBzeXN0ZW0uCisJICBtZXNvbiBzZXR1cCBidWlsZC1tZXNvbiBcCisJICAgICAgICAtLXByZWZpeD0vdXNyL2xvY2FsIFwKKwkgICAgICAgIC0tYnVpbGR0eXBlPWRlYnVnb3B0aW1pemVkIFwKKwkgICAgICAgIC0tc3RyaXAgXAorCSAgICAgICAgLURiX25kZWJ1Zz10cnVlCisKKwkgICMgQWZ0ZXIgY29uZmlndXJpbmcgdGhlIE1lc29uIGJ1aWxkIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQsCisJICAjIGNvbXBpbGUgYW5kIGluc3RhbGwgdG8gYC91c3IvbG9jYWwvYDsgdGhpcyBpbmNsdWRlcyBhIHBrZy1jb25maWcKKwkgICMgZmlsZS4KKwkgIG5pbmphIC1DIGJ1aWxkLW1lc29uIGluc3RhbGwKKworCSAgIyBBbHRlcm5hdGl2ZWx5LCBjb21waWxlIGFuZCBpbnN0YWxsIHRvIGAvdG1wL2FhL3Vzci9sb2NhbC8uLi5gCisJICAjIGZvciBwYWNrYWdpbmcuCisJICBERVNURElSPS90bXAvYWEgbmluamEgLUMgYnVpbGQtbWVzb24gaW5zdGFsbAorCisJICAjIEdlbmVyYXRlIGRvY3VtZW50YXRpb24gdW5kZXIgYGJ1aWxkLW1lc29uL2RvY3NgLgorCSAgbmluamEgLUMgYnVpbGQtbWVzb24gZG9jcworCisJTGlicmFyeSBzaXplIGNvbXBhcmlzb24gZm9yIHN0cmlwcGVkIGBsaWJmcmVldHlwZS5zb2AgZ2VuZXJhdGVkIGJ5CisJYWxsIHRocmVlIGJ1aWxkIHN5c3RlbXM6CisKKwkgIC0gRGVmYXVsdCBidWlsZCAoYXV0b3Rvb2xzICsgbGlidG9vbCk6IDcxMiBLaUIKKwkgIC0gQ01ha2UgYnVpbGQgKFJlbFdpdGhEZWJJbmZvKTogICAgICAgIDcxMiBLaUIKKwkgIC0gTWVzb24gYnVpbGQ6ICAgICAgICAgICAgICAgICAgICAgICAgIDcxMiBLaUIKKworCisJKiBtZXNvbi5idWlsZDogTmV3IHRvcC1sZXZlbCBNZXNvbiBidWlsZCBmaWxlIGZvciB0aGUgbGlicmFyeS4KKworCSogbWVzb25fb3B0aW9ucy50eHQ6IE5ldyBmaWxlLiAgSXQgaG9sZHMgdXNlci1zZWxlY3RhYmxlIG9wdGlvbnMgZm9yCisJdGhlIGJ1aWxkLCB3aGljaCBjYW4gYmUgcHJpbnRlZCB3aXRoIGBtZXNvbiBjb25maWd1cmVgLCBhbmQgc2VsZWN0ZWQKKwlhdCBgbWVzb24gc2V0dXBgIG9yIGBtZXNvbiAtLXJlY29uZmlndXJlYCB0aW1lIHdpdGgKKwlgLUQ8b3B0aW9uPj08dmFsdWU+YC4KKworCSogc2NyaXB0cy9wYXJzZV9tb2R1bGVzX2NmZy5weTogQSBzY3JpcHQgaW52b2tlZCBieSBgbWVzb24uYnVpbGRgIHRvCisJcGFyc2UgYG1vZHVsZXMuY2ZnYCBhbmQgZXh0cmFjdCBpbXBvcnRhbnQgaW5mb3JtYXRpb24gb3V0IG9mIGl0CisJKGkuZS4sIHRoZSBsaXN0IG9mIG1vZHVsZXMpLgorCisJKiBzY3JpcHRzL3Byb2Nlc3NfZnRvcHRpb25faC5weTogTmV3IHNjcmlwdCBpbnZva2VkIGJ5IGBtZXNvbi5idWlsZGAKKwl0byBwcm9jZXNzIHRoZSBvcmlnaW5hbCBgZnRvcHRpb24uaGAgZmlsZS4gIEl0IGVuYWJsZXMgb3IgZGlzYWJsZXMKKwljb25maWd1cmF0aW9uIG1hY3JvIHZhcmlhYmxlcyBiYXNlZCBvbiB0aGUgYXZhaWxhYmxlIGRlcGVuZGVuY2llcy4KKwlUaGlzIGlzIHNpbWlsYXIgdG8gd2hhdCBvdGhlciBidWlsZCBzeXN0ZW1zIGFyZSB1c2luZyAoaS5lLiwgTWVzb24ncworCWBjb25maWd1cmVfZmlsZSgpYCBjb21tYW5kIGlzIG5vdCB1c2VkIGhlcmUpLgorCisJKiBzY3JpcHRzL2V4dHJhY3RfZnJlZXR5cGVfdmVyc2lvbi5weTogTmV3IHNjcmlwdCBpbnZva2VkIGJ5CisJYG1lc29uLmJ1aWxkYCB0byBleHRyYWN0IHRoZSBGcmVlVHlwZSB2ZXJzaW9uIG51bWJlciBmcm9tCisJYDxmcmVldHlwZS9mcmVldHlwZS5oPmAuCisKKwkqIHNjcmlwdHMvZXh0cmFjdF9saWJ0b29sX3ZlcnNpb24ucHk6IE5ldyBzY3JpcHQgaW52b2tlZCBieQorCWBtZXNvbi5idWlsZGAgdG8gZXh0cmFjdCB0aGUgbGlidG9vbCBgcmV2aXNpb25faW5mb2AgZGF0YSBmcm9tCisJYGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXdgLCBhbmQgdG8gZ2VuZXJhdGUgdGhlIGNvcnJlc3BvbmRpbmcKKwlzaGFyZWQgbGlicmFyeSBzdWZmaXguCisKKwkqIHNjcmlwdHMvZ2VuZXJhdGVfcmVmZXJlbmNlX2RvY3MucHk6IE5ldyBzY3JpcHQgaW52b2tlZCBieQorCWBtZXNvbi5idWlsZGAgdG8gZ2VuZXJhdGUgdGhlIEZyZWVUeXBlIDIgcmVmZXJlbmNlIGRvY3VtZW50YXRpb24KKwkodXNpbmcgdGhlIGBkb2N3cml0ZXJgIGFuZCBgbWtkb2NzYCBwYWNrYWdlcywgd2hpY2ggbXVzdCBiZSBhbHJlYWR5CisJaW5zdGFsbGVkKS4KKworMjAyMC0wOS0xMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Jhc3Rlcl0gSW1wcm92ZSB0aGUgc2Vjb25kIHBhc3MgKCM1ODM3MykuCisKKwlCZXNpZGVzIGRyb3BvdXQgY29udHJvbCB0aGUgc2Vjb25kIGhvcml6b250YWwgc3dlZXAgaXMgc3VwcG9zZWQgdG8KKwljbGVhbiB1cCBzdHJhaWdodCBob3Jpem9udGFsIGVkZ2VzIHRoYXQgYXJlIG1pc2hhbmRsZWQgYnkgdGhlIGZpcnN0CisJdmVydGljYWwgc3dlZXAgd2hlbiBhIGxpbmUgcGFzc2VzIHRocm91Z2ggcGl4ZWwgY2VudGVycy4gIFRoaXMgbGluZQorCXdvdWxkIHByZXNlbnQgYXMgcGVyZmVjdGx5IGFsaWduZWQgc3BhbiBlZGdlcyBpbiB0aGUgc2Vjb25kIHN3ZWVwLgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKEhvcml6b250YWxfU3dlZXBfU3Bhbik6IFJlcGxhY2UgdGhlIG9sZAorCWltcGxlbWVudGF0aW9uIHdpdGggYSBiZXR0ZXIgb25lIGZvY3VzaW5nIG9uIGFsaWduZWQgc3BhbiBlZGdlcyBvbmx5LgorCisyMDIwLTA5LTA4ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbcmFzdGVyXSBUdW5lIFNNQVJUIG1hY3JvICgjNTgzNTIpLgorCisJV2luZG93cyBzZWVtcyB0byBwZXJmb3JtIHNtYXJ0IGRyb3BvdXQgY29udHJvbCBhdCAyNi42IHByZWNpc2lvbi4KKwlUbyBtaW1pY2sgV2luZG93cyBpbmRlcGVuZGVudCBvZiBpbmNyZWFzZWQgcHJlY2lzaW9uLCB3ZSBuZWVkIHRvIHR3ZWFrCisJdGhlIG1hY3JvIHNvIHRoYXQgc29tZSBjbG9zZSBjYWxscyBicmVhayBkb3duIHJhdGhlciB0aGFuIHVwLgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKFNNQVJUKTogVHdlYWsgdGhlIG1hY3JvLgorCisyMDIwLTA5LTA4ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbcmFzdGVyXSBJbnRyb2R1Y2UgU01BUlQgbWFjcm8uCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoU01BUlQpOiBOZXcgbWFjcm8gZm9yIHNtYXJ0IGRyb3BvdXQgcm91bmRpbmcuCisJKFZlcnN0aWNhbF9Td2VlcF9Ecm9wLCBIb3Jpem9udGFsX1N3ZWVwX0Ryb3ApOiBVc2UgaXQuCisKKzIwMjAtMDktMDMgIEJvcmlzIERhbHN0ZWluICA8ZGFsYm9yaXNAZ21haWwuY29tPgorCisJW2J1aWxkXSBNYWtlIENNYWtlIGluc3RhbGwgYmFzaWMgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKworCSogQ01ha2VMaXN0cy50eHQ6IERvIGl0LgorCisyMDIwLTA5LTAyICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbdHJ1ZXR5cGVdIFJlZHVjZSBJbmZpbmFsaXR5IGZvb3RwcmludCAoY29udCdkKS4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19ERUxUQVApOiBTaHJpbmsgdmFyaWFibGUgc2NvcGUuCisJKEluc19TSFBJWCwgSW5zX01JUlApOiBSZXZpc2UgaWYtbG9naWMuCisKKzIwMjAtMDktMDIgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVt0cnVldHlwZV0gUmVkdWNlIEluZmluYWxpdHkgZm9vdHByaW50LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX1NIUElYLCBJbnNfTVNJUlAsIEluc19NSUFQLCBJbnNfTURSUCwKKwlJbnNfTUlSUCk6IFNocmluayB2YXJpYWJsZSBzY29wZXMgYW5kIGNvbnNvbGlkYXRlIGlmZGVmcy4KKworMjAyMC0wOS0wMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3RydWV0eXBlXSBSZWZhY3RvciBjb21wZW5zYXRpb24gY29sb3IuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5oIChUVF9Sb3VuZF9GdW5jKTogQ2hhbmdlIHRoZSBsYXN0IGFyZ3VtZW50LgorCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19ST1VORCwgSW5zX05ST1VORCwgSW5zX01EQVAsIEluc19NSUFQLAorCUluc19NRFJQLCBJbnNfTUlSUCk6IE1vdmUgY29tcGVuc2F0aW9uIHJldHJpZXZhbCBmcm9tIGhlcmUuLi4KKwkoUm91bmRfKik6IC4uLiB0byBoZXJlLgorCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9zaXplX2luaXRfYnl0ZWNvZGUpOiBSZXNlcnZlIHplcm8KKwljb21wZW5zYXRpb24gYXQgY29sb3IgaW5kZXggMy4KKworMjAyMC0wOC0yOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Ntb290aF0gRG9uJ3Qgc2V0IHRhcmdldCBpbiBkaXJlY3QgbW9kZS4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmFzdGVyX292ZXJsYXApOiBSZW1vdmUgYXNzaWdubWVudC4KKwkoZnRfc21vb3RoX3Jhc3Rlcl9sY2QpIFshRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkddOiBEaXR0by4KKworMjAyMC0wOC0yNSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yYXN0ZXJfb3ZlcmxhcCk6IExpbWl0IHdpZHRoLgorCisJU2VnbWVudGF0aW9uIGZhdWx0IHJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTI0NzI5CisKKzIwMjAtMDgtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfR2V0X1ZNZXRyaWNzKTogQWRkIHRyYWNpbmcgbWVzc2FnZS4KKworMjAyMC0wOC0wNSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3RydWV0eXBlXSBSZXRhaW4gT1ZFUkxBUF9TSU1QTEUgYW5kIE9WRVJMQVBfQ09NUE9VTkQuCisKKwlGb3IgZ2x5cGhzIHdpdGggT1ZFUkxBUF9TSU1QTEUgb3IgT1ZFUkxBUF9DT01QT1VORCwgc2V0CisJRlRfT1VUTElORV9PVkVSTEFQIHRvIHJlbmRlciB0aGVtIHdpdGggZGlyZWN0IG92ZXJzYW1wbGluZywgd2hpY2gKKwltaXRpZ2F0ZXMgYXJ0aWZhY3RzIChzZWUgM2JiNTEyYmM5ZjYyKS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmggKEZUX09VVExJTkVfT1ZFUkxBUCk6IFJlZGVmaW5lIHRvIHJoeW1lCisJd2l0aCBPVkVSTEFQX1NJTVBMRS4KKwkqIHNyYy9iYXNlL2Z0Z2xvYWRyLmMgKEZUX0dseXBoTG9hZGVyX1Jld2luZCk6IFJlc2V0IG91dGxpbmUgZmxhZ3MuCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jCisJKFRUX0xvYWRfU2ltcGxlX0dseXBoKTogUmV0YWluIE9WRVJMQVBfU0lNUExFLgorCShsb2FkX3RydWV0eXBlX2dseXBoKTogUmV0YWluIE9WRVJMQVBfQ09NUE9VTkQuCisKKzIwMjAtMDgtMDQgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9HbHlwaCk6IE1vcmUgdHJhY2luZy4KKworMjAyMC0wNy0yOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJSGlkZSBpbnRlcm5hbCBmdW5jdGlvbnMgd2l0aCBTdW5Qcm8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY29tcGlsZXItbWFjcm9zLmgKKwkoRlRfSU5URVJOQUxfRlVOQ1RJT05fQVRUUklCVVRFKSA8X19TVU5QUk9fQz46IERlZmluZSBhcyBfX2hpZGRlbi4KKworMjAyMC0wNy0yOCAgQW51aiBWZXJtYSAgPGFudWp2QGlpdGJoaWxhaS5hYy5pbj4KKworCUZpeCBzdGF0aWMgY29tcGlsYXRpb24gd2l0aCBWaXN1YWwgQy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9jb21waWxlci1tYWNyb3MuaAorCShGVF9JTlRFUk5BTF9GVU5DVElPTl9BVFRSSUJVVEUpIDxfV0lOMzI+OiBEZWZpbmUgYXMgZW1wdHkuCisKKzIwMjAtMDctMjggIFByaXllc2ggS3VtYXIgIDxwcml5ZXNoa2t1bWFyQGdtYWlsLmNvbT4KKworCUZpeCBgLVdmb3JtYXQnIGNvbXBpbGVyIHdhcm5pbmdzLgorCisJKiBzcmMvKjogRml4IGZvcm1hdCBzcGVjaWZpZXJzLgorCisJKiBidWlsZHMvdW5peC9mdHN5c3RlbS5jIChGVF9TdHJlYW1fT3Blbik6IERpdHRvLgorCisyMDIwLTA3LTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggYC1XZm9ybWF0JyBjb21waWxlciB3YXJuaW5ncy4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgUHJpeWVzaCBrdW1hciA8cHJpeWVzaGtrdW1hckBnbWFpbC5jb20+CisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9EZWNvbXBvc2UpOiBGaXggbnVtYmVyIG9mIGFyZ3VtZW50cworCXRvIHRyYWNpbmcgbWFjcm8uCisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoYmRmX2NtYXBfY2hhcl9uZXh0LCBiZGZfZ2V0X2JkZl9wcm9wZXJ0eSk6CisJRGl0dG8uCisKKwkqIHNyYy9jYWNoZS9mdGNiYXNpYy5jIChmdGNfYmFzaWNfZmFtaWx5X2dldF9jb3VudCk6IERpdHRvLgorCVJlZm9ybXVsYXRlIG1lc3NhZ2UuCisKKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAocGNmX2dldF9iZGZfcHJvcGVydHkpOiBEaXR0by4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5jICh3b2ZmMl9vcGVuX2ZvbnQpOiBEaXR0by4KKwlUcmFjZSB0YWJsZSBvZmZzZXQsIHRvby4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoZnRfdmFyX2FwcGx5X3R1cGxlKTogRGl0dG8uCisKKzIwMjAtMDctMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5jICh3b2ZmMl9kZWNvbXByZXNzKTogRml4IGNvbXBpbGVyIHdhcm5pbmcuCisKKwlSZXBvcnRlZCBieSBIaW4tVGFrLgorCisyMDIwLTA3LTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IEZpeCBpbmNsdXNpb24gb2YgYGZ0b3B0aW9uLmgnLgorCisyMDIwLTA3LTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggY2xhbmcgd2FybmluZ3MuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvYXV0b2hpbnQuaAorCShGVF9ERUNMQVJFX0FVVE9ISU5URVJfSU5URVJGQUNFKTogTmV3IG1hY3JvLgorCSogc3JjL2F1dG9maXQvYWZtb2R1bGUuaDogVXNlIGl0IHRvIGRlY2xhcmUKKwlgYWZfYXV0b2ZpdHRlcl9pbnRlcmZhY2UnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9ERUNMQVJFX0dMWVBIKTogTmV3IG1hY3JvLgorCSogc3JjL2Jhc2UvZnRiYXNlLmg6IFVzZSBpdCB0byBkZWNsYXJlIGBmdF9iaXRtYXBfZ2x5cGhfY2xhc3MnIGFuZAorCWBmdF9vdXRsaW5lX2dseXBoX2NsYXNzJy4KKworCSogc3JjL2Jhc2UvZnRnbHlwaC5jOiBJbmNsdWRlIGBmdGJhc2UuaCcuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlcl9ydW4pOiBGaXggdHlwZSBvZiBgdDJfc2l6ZScuCisKKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAocGNmX2NtYXBfY2hhcl9uZXh0KTogRml4IHR5cGUgb2YgYHJlc3VsdCcuCisKKwkqIHNyYy9wc2F1eC9wc2F1eG1vZC5jIChwc2F1eF9tb2R1bGVfY2xhc3MpOiBVc2UgYEZUX0RFRklORV9NT0RVTEUnLgorCSogc3JjL3BzYXV4L3BzYXV4bW9kLmg6IERlY2xhcmUgYGFmbV9wYXJzZXJfZnVuY3MnLAorCWB0MV9jbWFwX2NsYXNzZXMnLCBgY2ZmX2RlY29kZXJfZnVuY3MnLCBhbmQgYHBzYXV4X21vZHVsZV9jbGFzcycuCisKKwkqIHNyYy9wc2hpbnRlci9wc2htb2QuYzogSW5jbHVkZSBgcHNobW9kLmgnLgorCisJKiBzcmMvc2ZudC9zZndvZmYyLmMgKFJPVU5ENCwgV1JJVEVfU0hPUlQpOiBGaXggaW1wbGljaXQgc2lnbgorCWNvbnZlcnNpb24uCisJKGNvbXB1dGVfVUxvbmdfc3VtKTogRml4IHJldHVybiB0eXBlLgorCUZpeCBpbXBsaWNpdCBzaWduIGNvbnZlcnNpb24uCisJKHN0b3JlX3BvaW50cyk6IEZpeCB0eXBlIG9mIGBsYXN0X2ZsYWcnLCBgcmVwZWF0X2NvdW50JywgYW5kIGBmbGFnJy4KKwlVc2UgY2FzdHMgdG8gYXZvaWQgd2FybmluZ3MuCisJKHJlY29uc3RydWN0X2dseWYpOiBGaXggaW1wbGljaXQgc2lnbiBjb252ZXJzaW9uLgorCVVzZSBjYXN0IHRvIGF2b2lkIHdhcm5pbmcuCisJKGdldF94X21pbnMpOiBGaXggaW1wbGljaXQgc2lnbiBjb252ZXJzaW9uLgorCSogc3JjL3NmbnQvdHRjbWFwLmM6IFVuZGVmIGBUVENNQVBDSVRFTScuCisJKiBzcmMvc2ZudC90dGNtYXAuaDogRGVmaW5lIGBUVENNQVBDSVRFTScgYW5kIGluY2x1ZGUgYHR0Y21hcGMuaCcgdG8KKwlkZWNsYXJlIGNtYXAgY2xhc3Nlcy4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfb3ZlcmxhcF9zcGFucyk6IFVzZSBjYXN0LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX01JQVApOiBGaXggdHlwby4KKworMjAyMC0wNy0wNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJW2J1aWxkXSBSZWFsbHkgZml4IG11bHRpIGFuZCBDKysgYnVpbGRzLgorCisJVGhlIGZvbGxvd2luZyBidWlsZHMgd2VyZSBzdGlsbCBmYWlsaW5nIGR1ZSB0byBwcmV2aW91cyBjaGFuZ2VzOgorCisJICBtYWtlIG11bHRpCisJICBtYWtlIG11bHRpIENDPSJjKysiCisJICBtYWtlIENDPSJjKysiCisKKwlUaGlzIHBhdGNoIGZpeGVzIHRoZSBpc3N1ZXMsIHdoaWNoIHdlcmUgbWlzc2luZyBpbmNsdWRlcyB0byBnZXQgdGhlCisJcmlnaHQgbWFjcm8gZGVmaW5pdGlvbnMgaW4gbXVsdGktYnVpbGQgbW9kZS4KKworCUFsc28sIGBGVF9VTlVTRUQnIGlzIGFjdHVhbGx5IHVzZWQgYnkgdGhpcmQtcGFydHkgY29kZSwgc28gbW92ZSBpdAorCWJhY2sgdG8gYHB1YmxpYy1tYWNyb3MuaCcgdG8gYXZvaWQgYnJlYWtpbmcgaXQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL3B1YmxpYy1tYWNyb3MuaCAoRlRfRVhQT1JUKTogUmVtb3ZlCisJc3BlY2lhbCBkZWZpbml0aW9uIGZvciBDKysuCisJKEZUX1VOVVNFRCk6IERlZmluZSBoZXJlIGluc3RlYWQgb2YuLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2NvbXBpbGVyLW1hY3Jvcy5oOiAuLi4gaGVyZS4KKwkoRlRfRlVOQ1RJT05fREVDTEFSQVRJT04pOiBSZW1vdmUgc3BlY2lhbCBkZWZpbml0aW9uIGZvciBDKysuCisJKEZUX0xPQ0FMX0FSUkFZX0RFRik6IEZpeCBkZWZpbml0aW9uLgorCisJKiBzcmMvY2FjaGUvZnRjY2JhY2suaCwgc3JjL2x6dy9mdHpvcGVuLmgsIHNyYy9neHZhbGlkL2d4dm1vcnQuaCwKKwlzcmMvZ3h2YWxpZC9neHZtb3J4Lmg6IEFkZCBgRlRfQkVHSU5fSEVBREVSJyBhbmQgYEZUX0VORF9IRUFERVInLgorCisyMDIwLTA3LTA2ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlbYnVpbGRdIEZpeCBtdWx0aSBhbmQgQysrIGJ1aWxkcy4KKworCVRoZSBmb2xsb3dpbmcgYnVpbGRzIHdlcmUgZmFpbGluZyBkdWUgdG8gcHJldmlvdXMgY2hhbmdlczoKKworCSAgbWFrZSBtdWx0aQorCSAgbWFrZSBtdWx0aSBDQz0iYysrIgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oOiBSZW1vdmUgYEZUX0VORF9IRUFERVInLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9CRUdJTl9IRUFERVIsCisJRlRfRU5EX0hFQURFUik6IFByb3RlY3QgYWdhaW5zdCByZWRlZmluaXRpb24uCisKKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5oLCBzcmMvY2FjaGUvZnRjbXJ1LmgsIHNyYy9wY2YvcGNmdXRpbC5oLAorCXNyYy9wc2F1eC9wc2Vycm9yLmgsIHNyYy9wc2F1eC9wc2Z0LmgsIHNyYy9wc2F1eC9wc3N0YWNrLmgsCisJc3JjL3NmbnQvd29mZjJ0YWdzLmg6IEluY2x1ZGUgYGNvbXBpbGVyLW1hY3Jvcy5oJy4KKworCSogc3JjL3NmbnQvd29mZjJ0YWdzLmM6IEluY2x1ZGUgYHdvZmYydGFncy5oJy4KKworMjAyMC0wNy0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BzYXV4XSBJbXByb3ZlIGB0MV9kZWNvZGVyX3BhcnNlX21ldHJpY3MnICgjNTg2NDYpLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9wYXJzZV9tZXRyaWNzKTogQ29weQorCWNvcnJlc3BvbmRpbmcgY29kZSBmcm9tIG9sZCBlbmdpbmUncyBgdDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncycKKwlmdW5jdGlvbiB0byBoYW5kbGUgYG9wX2NhbGxzdWJyJyBhbmQgYG9wX3JldHVybicuCisKKzIwMjAtMDctMDUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCVtidWlsZF0gSW1wcm92ZSB2aXNpYmlsaXR5IHN1cHBvcnQgb2YgbGlicmFyeSBmdW5jdGlvbiBuYW1lcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvcHVibGljLW1hY3Jvcy5oCisJKEZUX1BVQkxJQ19GVU5DVElPTl9BVFRSSUJVVEUpOiBOZXcgbWFjcm8gdG8gdGFnIGZ1bmN0aW9ucyBhcworCXB1YmxpYyAoYW5kIHRodXMgZXhwb3J0YWJsZSkuCisJKEZUX0VYUE9SVCk6IFVzZSBpdC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvY29tcGlsZXItbWFjcm9zLmgKKwkoRlRfSU5URVJOQUxfRlVOQ1RJT05fQVRUUklCVVRFKTogTmV3IG1hY3JvIHRvIHRhZyBmdW5jdGlvbnMgYXMKKwlpbnRlcm5hbCB0byB0aGUgbGlicmFyeSAoYW5kIHRodXMgaGlkZGVuKS4gIE5vdGUgdGhhdCBvbiBFTEYKKwlzeXN0ZW1zLCBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zIGhhdmUgaGlkZGVuIHZpc2liaWxpdHksIHdoaWNoIGF2b2lkcworCXRoZSBuZWVkIHRvIGVuZm9yY2UgdGhpcyB3aGVuIGludm9raW5nIHRoZSBjb21waWxlciAoZS5nLiwgd2l0aCBhbgorCW9wdGlvbiBsaWtlIGAtZnZpc2liaWxpdHk9aGlkZGVuJykuCisKKwkoRlRfRlVOQ1RJT05fREVDTEFSQVRJT04sIEZUX0ZVTkNUSU9OX0RFRklOSVRJT04pOiBOZXcgYmFzZSBtYWNyb3MKKwl0byBkZWFsIHdpdGggQyBhbmQgQysrIGxpbmthZ2UgaXNzdWVzIGF0IHRoZSBzYW1lIHRpbWUuCisKKwkoRlRfTE9DQUwsIEZUX0xPQ0FMX0RFRiwgRlRfTE9DQUxfQVJSQVksIEZUX0xPQ0FMX0FSUkFZX0RFRiwKKwlGVF9CQVNFLCBGVF9CQVNFX0RFRiwgRlRfRVhQT1JUX1ZBUiwgRlRfQkFTRV9DQUxMQkFDSywKKwlGVF9CQVNFX0NBTExCQUNLX0RFRik6IFJlZGVmaW5lZCB1c2luZyBuZXcgbWFjcm9zLgorCisyMDIwLTA3LTA1ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlbYnVpbGRdIFNwbGl0IG9mZiBtb3JlIHN0dWZmIGZyb20gYGZ0Y29uZmlnLmgnLgorCisJKiBidWlsZHMvdW5peC9mdGNvbmZpZy5oLmluLCBidWlsZHMvdm1zL2Z0Y29uZmlnLmgsCisJaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaDogU3BsaXQgb2ZmIG1hY3JvIGRlZmluaXRpb25zCisJcmVxdWlyZWQgYnkgdGhlIEZyZWVUeXBlIEFQSSBoZWFkZXJzIHRvLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9wdWJsaWMtbWFjcm9zLmg6IC4uLnRoaXMgbmV3IGZpbGUuCisKKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmguaW4sIGJ1aWxkcy92bXMvZnRjb25maWcuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oOiBTcGxpdCBvZmYgbWFjcm8gZGVmaW5pdGlvbnMgdXNlZAorCWJ5IHRoZSBsaWJyYXJ5IGJ1dCBub3QgdG8gYmUgZXhwb3NlZCB0byBjbGllbnRzIHRvLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9jb21waWxlci1tYWNyb3MuaDogLi4udGhpcyBuZXcgZmlsZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC8qLmgsIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuaDogSW5jbHVkZQorCWBjb21waWxlci1tYWNyb3MuaCcgd2hlcmUgbmVlZGVkLgorCisyMDIwLTA3LTA1ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlbYnVpbGRdIE1vdmUgbWFjIHN1cHBvcnQgY29kZSB0byBgbWFjLXN1cHBvcnQuaCcuCisKKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmguaW4sIGJ1aWxkcy92bXMvZnRjb25maWcuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oOiBTcGxpdCBvZmYgbWFjLXNwZWNpZmljIHN0dWZmCisJdG8uLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL21hYy1zdXBwb3J0Lmg6IC4uLnRoaXMgbmV3IGZpbGUuCisKKwkqIENNYWtlTGlzdHMudHh0LCBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBSZW1vdmUgYC91bmRlZiAtPgorCSN1bmRlZicgc3RyaW5nIHJlcGxhY2VtZW50OyB0aGUgYWZmZWN0ZWQgY29kZSBpcyBubyBsb25nZXIgcGFydCBvZgorCXRoZSBgZnRjb25maWcuaCcgdGVtcGxhdGUuCisKKzIwMjAtMDctMDUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCVtidWlsZF0gUHV0IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyBpbnRvIGBpbnRlZ2VyLXR5cGVzLmgnLgorCisJUmVmYWN0b3Igc29tZSBvZiB0aGUgYGZ0Y29uZmlnLmgnIGhlYWRlcnMgYW5kIHRlbXBsYXRlIHRvIG1vdmUgdGhlCisJZGVmaW5pdGlvbiBvZiB0aGUgRnJlZVR5cGUgaW50ZWdlciB0eXBlcyAoZS5nLiwgYEZUX0ludDE2JykgdG8gYQorCWNvbW1vbiBoZWFkZXIgZmlsZSBgZnJlZXR5cGUvY29uZmlnL2ludGVnZXItdHlwZXMuaCcuCisKKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmguaW4sIGJ1aWxkcy92bXMvZnRjb25maWcuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oOiBTcGxpdCBvZmYgaW50ZWdlciB0eXBlCisJZGVmaW5pdGlvbiBzdHVmZiB0by4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvaW50ZWdlci10eXBlcy5oOiAuLi50aGlzIG5ldyBmaWxlLgorCisJKiBidWlsZHMvdW5peC9mdGNvbmZpZy5oLmluOiBDb250cm9sIHRoZSBkZWZpbml0aW9uIG9mCisJYEZUX1NJWkVPRl9JTlQnIGFuZCBgRlRfU0laRU9GX0xPTkcnIHdpdGggbWFjcm8KKwlgRlRfVVNFX0FVVE9DT05GX1NJWkVPRl9UWVBFUycuICBJZiB0aGVzZSBhcmUgbm90IGRlZmluZWQsIGF1dG8KKwlkZXRlY3Rpb24gaGFwcGVucyBpbiBgaW50ZWdlci10eXBlcy5oJyBhcyB1c3VhbCBiYXNlZCBvbiBgSU5UWFhfTUFYJworCXZhbHVlcy4gIE90aGVyd2lzZSB0aGUgYXV0b2NvbmYtZGV0ZWN0ZWQgdmFsdWVzIGFyZSB1c2VkLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3IChDUFBGTEFHUyk6IERvbid0IGluY2x1ZGUgcGF0aCB0bworCWBjb25maWcnIGRpcmVjdG9yeS4gIEluc3RlYWQsIC4uLgorCShGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9IKTogVXNlIGNvbXBsZXRlIHBhdGguCisKKzIwMjAtMDctMDUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCVtidWlsZF0gUmVuYW1lIGBidWlsZC91bml4L2Z0Y29uZmlnLmluJyB0byBgZnRjb25maWcuaC5pbicuCisKKwlTaW5jZSB3ZSBhcmUgbm8gbG9uZ2VyIGxpbWl0ZWQgdG8gOC4zIGZpbGUgbmFtZXMsIGl0IGlzIHNpbXBsZXIgdG8KKwlmb2xsb3cgdGhlIHVzdWFsIGNvbnZlbnRpb25zIGZvciB0ZW1wbGF0ZSBmaWxlcy4KKworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW46IFJlbmFtZWQgdG8uLi4KKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmguaW46IC4uLnRoaXMuCisKKwkqIENNYWtlTGlzdHMudHh0LCBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBVcGRhdGVkLgorCisyMDIwLTA3LTAzICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbc21vb3RoXSBJbnRyb2R1Y2UgZGlyZWN0IG92ZXJzYW1wbGluZyBmb3Igb3ZlcmxhcHMuCisKKwlUaGlzIGltcGxlbWVudHMgb3ZlcnNhbXBsaW5nIHRvIG1pdGlnYXRlIGFydGlmYWN0cyBpbiBwaXhlbHMgcGFydGlhbGx5CisJY292ZXJlZCBieSBvdmVybGFwcGluZyBjb250b3Vycy4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSA0eDQKKwlvdmVyc2FtcGxpbmcgaXMgc3VmZmljaWVudCBidXQsIGF0IGxlYXN0LCBxdWFkcnVwbGVzIHRoZSByZW5kZXJpbmcKKwl0aW1lLiAgVGhlIG91dGxpbmUgaGFzIHRvIHNldCBGVF9PVVRMSU5FX09WRVJMQVAgdG8gdXNlIHRoaXMgbWV0aG9kLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaCAoRlRfT1VUTElORV9PVkVSTEFQKTogTmV3IGZsYWcuCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXIpOiBDaGVjayBpdCB0by4uLgorCShmdF9zbW9vdGhfcmFzdGVyX292ZXJsYXApOiAuLi4gaW5mbGF0ZSBvdXRsaW5lIGFuZCBzZXQgdXAgZGlyZWN0CisJcmVuZGVyaW5nIGZvciBvdmVyc2FtcGxpbmcgd2l0aC4uLgorCShmdF9zbW9vdGhfb3ZlcmxhcF9zcGFucyk6IC4uLiBuZXcgc3BhbiBmdW5jdGlvbiB0aGF0IGludGVncmF0ZXMgdGhlbS4KKworMjAyMC0wNy0wMyAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Ntb290aF0gVXNlIGRpcmVjdCByZW5kZXJpbmcgbW9kZSBpbiBIYXJtb255LgorCisJSW5zdGVhZCBvZiByZW5kZXJpbmcgMyBiaXRtYXBzIHNpZGUgYnkgc2lkZSBhbmQgcmVzaHVmZmxpbmcsIHdlIHVzZQorCWRpcmVjdCByZW5kZXJpbmcgdG8gZGVsaXZlciB0aGUgYml0bWFwcyBvbiBlYWNoIHRoaXJkIGJ5dGUuCisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3Jhc3Rlcl9sY2QpCisJWyFGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklOR106IFNldCB1cCBkaXJlY3QgbW9kZSB3aXRoLi4uCisJKGZ0X3Ntb290aF9sY2Rfc3BhbnMpOiAuLi4gbmV3IHNwYW4gZnVuY3Rpb24uCisKKzIwMjAtMDctMDMgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtzbW9vdGhdIFNlcGFyYXRlIExDRCBwYXRocyBmcm9tIGdyYXkgcmVuZGVyaW5nLgorCisJVGhpcyBtYWtlcyBgZnRfc21vb3RoX3JlbmRlcicgYSBsb3Qgc21hbGxlciBhbmQgZWFzaWVyIHRvIGZvbGxvdy4gSXQKKwlhbHNvIGNsZWFubHkgc2VwYXJhdGVzIEhhcm1vbnkgYW5kIENsZWFyVHlwZS1zdHlsZSBMQ0QgcmVuZGVyaW5nCisJYWxnb3JpdGhtcy4gTm93IEkgb25seSB3aXNoIHRvIG1vdmUgTENEIGZpbHRlcmluZyBhbmQgZ2VvbWV0cnkgZnJvbQorCUZUX0xpYnJhcnkgdG8gRlRfUmVuZGVyZXIuCisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcik6IE1vdmUgTENEIGNvZGUgZnJvbSBoZXJlLi4uCisJKGZ0X3Ntb290aF9yYXN0ZXJfbGNkLCBmdF9zbW9vdGhfcmFzdGVyX2xjZHYpOiAuLi4gdG8gaGVyZS4KKwlbRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkddOiBSZW9yZ2FuaXplICNpZmRlZidzLgorCisyMDIwLTA2LTIwICBTZWJhc3RpYW4gUmFzbXVzc2VuICA8c2VicmFzQGdtYWlsLmNvbT4KKworCVtjZmZdIEZpeCBoYW5kbGluZyBvZiBgc3R5bGVfbmFtZSA9PSBOVUxMJyAoIzU4NjMwKS4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpOiBJZiBhIGNhbGwgdG8gYGNmZl9zdHJjcHknIGZhaWxzCisJYnkgcmV0dXJuaW5nIE5VTEwgaW4gYGNmZl9mYWNlX2luaXQnLCBgcmVtb3ZlX3N0eWxlJyBpcyBzdGlsbAorCWNhbGxlZC4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgTlVMTCBwb2ludGVyIGlzIGRlcmVmZXJlbmNlZCwgY2F1c2luZyBhCisJY3Jhc2guCisKKzIwMjAtMDYtMTkgIFNlYmFzdGlhbiBSYXNtdXNzZW4gIDxzZWJyYXNAZ21haWwuY29tPgorCisJW2NmZl0gRml4IGFub3RoZXIgdHdvIG1lbW9yeSBsZWFrcyAoIzU4NjI5KS4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9zaXplX2luaXQpOiBJZiBhIGNhbGwgdG8gYGZ1bmNzLT5jcmVhdGUnCisJZmFpbHMgdG8gYWxsb2NhdGUgb25lIG9mIHRoZSBgaW50ZXJuYWwtPnN1YmZvbnQnIHZhcmlhYmxlcywgbWFrZQorCXN1cmUgdG8gZnJlZSBgaW50ZXJuYWwtPnRvcGZvbnQnIGFuZCBhbnkgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZAorCXN1YmZvbnRzLgorCisyMDIwLTA2LTE5ICBTZWJhc3RpYW4gUmFzbXVzc2VuICA8c2VicmFzQGdtYWlsLmNvbT4KKworCVtwc2F1eF0gRml4IG1lbW9yeSBsZWFrICgjNTg2MjYpLgorCisJKiBzcmMvcHNhdXgvcHNzdGFjay5jIChjZjJfc3RhY2tfaW5pdCk6IElmIGBjZjJfc3RhY2tfaW5pdCcgZmFpbHMgdG8KKwlhbGxvY2F0ZSB0aGUgc3RhY2ssIHJldHVybiBlcnJvciBlYXJseS4KKworMjAyMC0wNi0xOSAgU2ViYXN0aWFuIFJhc211c3NlbiAgPHNlYnJhc0BnbWFpbC5jb20+CisKKwlbYmFzZV0gRml4IG1lbW9yeSBsZWFrICgjNTg2MjQpLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTmV3X1NpemUpOiBBdm9pZCB0cnlpbmcgdG8gZnJlZQorCWBzaXplLT5pbnRlcm5hbCcgdW5sZXNzIGBzaXplJyBoYXMgYmVlbiBhbGxvY2F0ZWQuICBUaGlzIG1pc3Rha2UKKwlhcHBlYXJlZCBpbiB0aGUgZml4IGZvciBpc3N1ZSAjNTg2MTEuCisKKzIwMjAtMDYtMTkgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBSZXdvcmsgZDExODBiNWY5NTk4IHVudGlsIGZ1cnRoZXIgbm90aWNlLgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfR2V0X09yaWVudGF0aW9uKTogUmVqZWN0IGxhcmdlCisJb3V0bGluZXMuCisKKzIwMjAtMDYtMTkgIFNlYmFzdGlhbiBSYXNtdXNzZW4gIDxzZWJyYXNAZ21haWwuY29tPgorCisJW2NmZiwgY2lkXSBGaXggc2VnZmF1bHRzIGluIGNhc2Ugb2YgZXJyb3IgKCM1ODYyMSkuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfc2xvdF9kb25lKSwgc3JjL2NpZC9jaWRvYmpzLmMKKwkoY2lkX3Nsb3RfZG9uZSk6IElmIGBmdF9nbHlwaHNsb3RfaW5pdCcgZmFpbHMgdG8gYWxsb2NhdGUKKwlgaW50ZXJuYWwnLCB0aGVuIHRoZSBjbGFzcycgYGRvbmVfc2xvdCcgY2FsbGJhY2sgKGNhbGxlZCBieQorCWBmdF9nbHlwaHNsb3RfZG9uZScpIG11c3Qgbm90IGRlcmVmZXJlbmNlIHRoZSBwb2ludGVyIHRvIGBpbnRlcm5hbCcuCisKKzIwMjAtMDYtMTkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiYXNlXSBGaXggVUJTQU4gZXJyb3IuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMzE2NgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfR2V0X09yaWVudGF0aW9uKTogQXZvaWQgdmFsdWVzCisJbGFyZ2VyIHRoYW4gMzIgYml0cy4KKworMjAyMC0wNi0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3dvZmYyXSBGaXggc2VnZmF1bHQuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMzQwMgorCisJKiBzcmMvc2ZudC9zZndvZmYyLmMgKGdldF94X21pbnMpOiBDaGVjayB3aGV0aGVyIGBsb2NhJyB0YWJsZQorCWV4aXN0cy4KKworMjAyMC0wNi0xOSAgU3RlcGhlbiBNY0Rvd2VsbCAgPHN2ZW5ldnMuZGV2QGdtYWlsLmNvbT4KKworCVtzZm50XSBTdXBwb3J0IEludGVsIGNvbXBpbGVycy4KKworCSogc3JjL3NmbnQvcG5nc2hpbS5jIChwcmVtdWx0aXBseV9kYXRhKTogSW50ZWwgY29tcGlsZXJzIGRvIG5vdAorCWN1cnJlbnRseSBzdXBwb3J0IGBfX2J1aWx0aW5fc2h1ZmZsZScuCisKKzIwMjAtMDYtMTkgIFNlYmFzdGlhbiBSYXNtdXNzZW4gIDxzZWJyYXNAZ21haWwuY29tPgorCisJW2Jhc2VdIEZpeCBtZW1vcnkgbGVhayAoIzU4NjExKS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX05ld19TaXplKTogV2hlbiB0aGUgY2FsbCB0byBgY2xhenotPmluaXRfc2l6ZScKKwlmYWlscywgbWFrZSBzdXJlIHRvIGZyZWUgYHNpemUtPmludGVybmFsJy4KKworMjAyMC0wNi0xOSAgU2ViYXN0aWFuIFJhc211c3NlbiAgPHNlYnJhc0BnbWFpbC5jb20+CisKKwlbY2ZmXSBGaXggbWVtb3J5IGxlYWsgKCM1ODYxMCkuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfc2l6ZV9pbml0KTogV2hlbiB0aGUgY2FsbCB0bworCWBmdW5jcy0+Y3JlYXRlJyBmYWlscywgbWFrZSBzdXJlIHRvIGZyZWUgYGludGVybmFsJy4KKworMjAyMC0wNi0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2luZGV4X2dldF9wb2ludGVycyk6IFJlbmFtZSBgdCcgdG8gYHRibCcuCisKKzIwMjAtMDYtMTkgIFNlYmFzdGlhbiBSYXNtdXNzZW4gIDxzZWJyYXNAZ21haWwuY29tPgorCisJW2NmZl0gRnJlZSB0YWJsZSB1cG9uIGVycm9yIGFsbG9jYXRpbmcgb3RoZXIgZGF0YSAoIzU4NjA5KS4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9pbmRleF9nZXRfcG9pbnRlcnMpOiBXaGVuIG5ld19ieXRlcyBmYWlscworCXRvIGFsbG9jYXRlLCBtYWtlIHN1cmUgdG8gZnJlZSB0aGUgdGFibGUuICBEbyB0aGUgc2FtZSBmb3IgYm90aAorCWFsbG9jYXRpb25zIGlmIHRoZXJlIGlzIGEgbGF0ZXIgZXJyb3IuCisKKzIwMjAtMDYtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVJlbW92ZSByZWR1bmRhbnQgaW5jbHVzaW9uIG9mIGBmdDJidWlsZC5oJy4KKworCSogKi8qOiBSZW1vdmUgYCNpbmNsdWRlIDxmdDJidWlsZC5oPicgd2hlcmUgcG9zc2libGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaDogUmVtb3ZlIGNwcCBlcnJvciBhYm91dCBtaXNzaW5nCisJaW5jbHVzaW9uIG9mIGBmdDJidWlsZC5oJy4KKworMjAyMC0wNi0wOCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJTWFrZSBtYWNyb3MgZm9yIGhlYWRlciBmaWxlIG5hbWVzIG9wdGlvbmFsLgorCisJV2Ugbm8gbG9uZ2VyIGhhdmUgdG8gdGFrZSBjYXJlIG9mIHRoZSA4LjMgZmlsZSBuYW1lIGxpbWl0OyB0aGlzCisJYWxsb3dzIHVzIChhKSB0byBpbnRyb2R1Y2UgbG9uZ2VyLCBtZWFuaW5nZnVsIGZpbGUgbmFtZXMsIGFuZCAoYikgdG8KKwlhdm9pZCBtYWNybyBuYW1lcyBpbiBgI2luY2x1ZGUnIGxpbmVzIGFsdG9nZXRoZXIgc2luY2Ugc29tZQorCWNvbXBpbGVycyAobW9zdCBub3RhYmx5IFZpc3VhbCBDKyspIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIHByb3Blcmx5LgorCisJKi8qOiBSZXBsYWNlCisKKwkgICAjaW5jbHVkZSBGT09fSAorCisJd2l0aAorCisJICAgI2luY2x1ZGUgPGZyZWV0eXBlL2Zvby5oPgorCisJb3Igc29tZXRoaW5nIHNpbWlsYXIuICBBbHNvIHVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbi4KKworMjAyMC0wNi0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfZmFjZV9idWlsZF9jbWFwcyk6IFRyYWNlIG51bWJlciBvZiBjbWFwcy4KKworMjAyMC0wNS0xOCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJUmVtb3ZlIG9ic29sZXRlIEhBVkVfU1RESU5UX0ggcHJvYmluZyBtYWNyby4KKworCVRoaXMgbWFjcm8gd2FzIHVwZGF0ZWQgYnkgdGhlIHVuaXggY29uZmlndXJlIHNjcmlwdCBhbmQgdGhlCisJYENNYWtlTGlzdHMudHh0JyBvbmUsIGJ1dCBpcyBuZXZlciB1c2VkIGluIHRoZSBzb3VyY2UgdHJlZSAobm9yIGlzCisJPHN0ZGludC5oPiBpbmNsdWRlZCBhbnl3aGVyZSkuCisKKwkqIENNYWtlTGlzdHMudHh0LCBidWlsZHMvdW5peC9mdGNvbmZpZy5pbjogRG9uJ3QgaGFuZGxlCisJYEhBVkVfU1RESU5UX0gnLgorCisyMDIwLTA1LTE4ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlSZW1vdmUgSmFtZmlsZSBmaWxlcyBmcm9tIHRoZSB0cmVlLgorCisJVGhlc2UgaGF2ZSBub3QgYmVlbiB1c2VkIGluIGEgdmVyeSwgdmVyeSBsb25nIHRpbWUsIHNvIGJldHRlciByZW1vdmUKKwl0aGVtLiAgQSBjb3JyZXNwb25kaW5nIHBhdGNoIHdpbGwgYmUgc3VibWl0dGVkIHRvIHRoZQorCWBmcmVldHlwZTItZGVtb3MnIHJlcG9zaXRvcnkuCisKKwkqIHNyYy9KYW1maWxlLCBzcmMvKi9KYW1maWxlLCBKYW1ydWxlczogRGVsZXRlLgorCisyMDIwLTA1LTEyICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbc21vb3RoXSBUdXJuIG9uIExDRCBmaWx0ZXJpbmcgZHVyaW5nIEZyZWVUeXBlIGluaXRpYWxpemF0aW9uLgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9pbml0KTogRW5hYmxlIExDRCBmaWx0ZXJpbmcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaDogRG9jdW1lbnQgaXQsIHJlbW92ZSBwYXRlbnQgd2FybmluZ3MuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX1JlbmRlcl9Nb2RlKTogVXBkYXRlZC4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgsIGRldmVsL2Z0b3B0aW9uLmgKKwlbRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkddOiBEbyBub3QgbWVudGlvbiBwYXRlbnRzLgorCisyMDIwLTA1LTExICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbc21vb3RoXSBTdG9wIHVzaW5nIGRlZGljYXRlZCBMQ0QgbW9kdWxlcyBhbmQgY2xhc3Nlcy4KKworCVRoZSBMQ0QgbW9kdWxlcyB3ZXJlIG5ldmVyIHRydWx5IGluZGVwZW5kZW50LiBUaGV5IG1vc3RseSBzZXJ2ZWQgYXMKKwlhIHdheSB0byBkaXNhYmxlIHBhdGVudGVkIExDRCByZW5kZXJpbmcsIHdoaWNoIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuCisJVGhlIGBzbW9vdGgnIG1vZHVsZSBub3cgaGFuZGxlcyBMQ0QgbW9kZXMgYXMgd2VsbC4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfbGNkX3JlbmRlcmVyX2NsYXNzLgorCWZ0X3Ntb290aF9sY2R2X3JlbmRlcmVyX2NsYXNzKTogRGVsZXRlZC4KKwkoZnRfcmVuZGVyX3Ntb290aCk6IFJld29ya2VkIGZyb20gYGZ0X3JlbmRlcl9zbW9vdGhfZ2VuZXJpYycuCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmg6IFJlbW92ZSBkZWRpY2F0ZWQgTENEIGNsYXNzZXMuCisJKiBzcmMvc21vb3RoL21vZHVsZS5tazogUmVtb3ZlIGRlZGljYXRlZCBMQ0QgbW9kdWxlcy4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmg6IERpdHRvLgorCSogYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0bW9kdWxlLmg6IERpdHRvLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdG1vZGFwaS5oOiBEbyBub3QgbWVudGlvbiBMQ0QgbW9kdWxlcy4KKworMjAyMC0wNS0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBWZXJzaW9uIDIuMTAuMiByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi0xMC0yJy4KKworCSogZG9jcy9WRVJTSU9OLlRYVDogQWRkIGVudHJ5IGZvciB2ZXJzaW9uIDIuMTAuMi4KKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLCBzcmMvYmFzZS9mdHZlci5yYywKKwlidWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbCwgYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvaW5kZXguaHRtbCwgZG9jcy9mcmVldHlwZS1jb25maWcuMToKKwlzLzIuMTAuMS8yLjEwLjIvLCBzLzIxMDEvMjEwMi8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlJFRVRZUEVfUEFUQ0gpOiBTZXQgdG8gMi4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDIzOjI6MTcuCisJKiBDTWFrZUxpc3RzLnR4dCAoVkVSU0lPTl9QQVRDSCk6IFNldCB0byAyLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMjAtMDUtMDggIEpha3ViIEFsYmEgIDxqYWxiYUB2ZXdkLmNvbT4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX1J1bklucyk6IEFkanVzdCBsb29wIGNvdW50ZXIgKCM1ODMxOSkuCisKKwlUaGUgZm9udCB0aGF0IGV4Y2VlZHMgdGhlIG9sZCBsaW1pdCBpcyBJY29ubyBSZWd1bGFyLCB2ZXJzaW9uCisJMS4wMDAwMC4KKworMjAyMC0wNS0wMyAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBidWlsZHMvZnJlZXR5cGUubWs6IFJlZmFjdG9yIGZvciByZWFkYWJpbGl0eS4KKworMjAyMC0wNS0wMiAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2J1aWxkc10gQ2xlYW4gdXAgV2luZG93cyBDRSBwcm9qZWN0IGZpbGVzLgorCisJUmVtb3ZlIHZlcnNpb24gZnJvbSBmaWxlbmFtZXMgdGhhdCBjYXVzZWQgYSBsb3Qgb2YgcG9sdXRpb24gaW4gdGhlCisJcmVsZWFzZSBwcm9jZXNzLiBVc2UgVkVSU0lPTklORk8gcmVzb3VyY2UgaW5zdGVhZC4KKworCSogYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcDogcy8yMTAxLy9nLCBidXQgYWRkIGBmdHZlci5yYycuCisJKiBidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2luZGV4Lmh0bWw6IHMvMjEwMS8vZy4KKworMjAyMC0wNS0wMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBkZXZlbC9mdDJidWlsZC5oOiBPdmVycmlkZSBGVF9DT05GSUdfTU9EVUxFU19IIGhlcmUgYXMgd2VsbC4KKworMjAyMC0wNS0wMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2J1aWxkcy91bml4XSBDb25zb2xpZGF0ZSBtYXJjbyBvdmVycmlkZXMgKGZvciB0aGUgZGVtb3MgdG8gc2VlIHRoZW0pLgorCisJKiBidWlsZHMvdW5peC91bml4LWNjLmluIChGVF9DT05GSUdfTU9EVUxFU19ILCBGVF9DT05GSUdfT1BUSU9OU19IKToKKwlPdmVycmlkZSB0aGVtIGhlcmUuLi4KKwkqIGJ1aWxkcy9mcmVldHlwZS5tazogLi4uIGluc3RlYWQgb2YgaGVyZS4KKworMjAyMC0wNC0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQWxsb3cgc2V0dGluZyBgQ0MnIGluIFVuaXggYnVpbGQgKCM1ODA1MSkuCisKKwkqIGJ1aWxkcy91bml4L3VuaXgtY2MuaW4gKENDKTogVXNlIGBvdmVycmlkZScuICBUaGUgY29tbWFuZCBsaW5lCisJICB2YWx1ZSBvZiBgQ0MnIChpZiBhbnkpIGlzIHN0b3JlZCBhbHJlYWR5IGluIGBDQ3JhdycuCisKKzIwMjAtMDQtMDQgIE5pa2hpbCBSYW1ha3Jpc2huYW4gIDxyYW1ha3Jpc2huYW4ubmlraGlsQGdtYWlsLmNvbT4KKworCVt3b2ZmMl0gUmV0dXJuIGlmIHNpbmdsZSBzdHJlYW0gb3BlcmF0aW9uIGZhaWxzLgorCisJKiBzcmMvc2ZudC9zZndvZmYyLmMgKGdldF94X21pbnMpOiBEbyBpdC4KKworCSogc3JjL3NmbnQvd29mZjJ0YWdzLmM6IFJlbW92ZSB1bnVzZWQgaW5jbHVkZS4KKworMjAyMC0wMy0yMiAgTmlraGlsIFJhbWFrcmlzaG5hbiAgPHJhbWFrcmlzaG5hbi5uaWtoaWxAZ21haWwuY29tPgorCisJW2RvY3NdIEZpeCBidWlsZGluZyBkb2NzIGlmIGBzcmNkaXInICE9IGBidWlsZGRpcicuCisKKwlgZG9jcy9yZWZlcmVuY2UvKicgd2FzIG1vdmVkIG9uZSBkaXJlY3RvcnkgdXAgaW4gY29tbWl0IDIzN2ZlZDYuCisKKwkqIGJ1aWxkcy91bml4L3VuaXgtZGVmLmluIChQSVApOiBSZW1vdmUgdmFyaWFibGUuCisKKwkqIGNvbmZpZ3VyZTogQ3JlYXRlIGBkb2NzJyBkaXJlY3RvcnkgYW5kIGNvcHkgYXNzZXRzIGZyb20KKwlgZG9jcy9tYXJrZG93bicuCisKKwkqIGRvY3MvUkVBRE1FOiBPdXRwdXQgZGlyZWN0b3J5IGlzIGByZWZlcmVuY2UnLgorCisyMDIwLTAzLTIxICBOaWtoaWwgUmFtYWtyaXNobmFuICA8cmFtYWtyaXNobmFuLm5pa2hpbEBnbWFpbC5jb20+CisKKwlbZG9jd3JpdGVyXSBEcm9wIHN1cHBvcnQgZm9yIFB5dGhvbiA8IDMuNS4KKworCVB5dGhvbiB2ZXJzaW9ucyA8IDMuNSBoYXZlIHJlYWNoZWQgZW5kLW9mLWxpZmUgYW5kIGFzIHN1Y2gsIG5vCisJc2VjdXJpdHkgb3IgYnVnIGZpeGVzIHdpbGwgYmUgcHJvdmlkZWQgZm9yIHRob3NlIHZlcnNpb25zLiAgU2VlCisKKwkgIGh0dHBzOi8vZGV2Z3VpZGUucHl0aG9uLm9yZy8jc3RhdHVzLW9mLXB5dGhvbi1icmFuY2hlcworCQorCWZvciBtb3JlIGluZm9ybWF0aW9uLgorCisJKiBKYW1maWxlIChSZWZEb2MpOiBBZGQgYHNpdGUnIHBhcmFtZXRlci4KKworCSogYnVpbGRzL2RldGVjdC5tayAoc3RkX3NldHVwKTogVXBkYXRlIFB5dGhvbiB2ZXJzaW9uIHJlcXVpcmVtZW50LgorCisJKiBidWlsZHMvZnJlZXR5cGUubWsgKHJlZmRvYy12ZW52KTogVXNlIHBpcCBhcyBgcHl0aG9uIC1tIHBpcCcuCisKKwkqIGJ1aWxkcy91bml4L2F4X2NvbXBhcmVfdmVyc2lvbi5tNCwKKwlidWlsZHMvdW5peC9heF9wcm9nX3B5dGhvbl92ZXJzaW9uLm00OiBNYWNyb3MgdG8gZGV0ZWN0IFB5dGhvbgorCXZlcnNpb24uICBOZXcgZmlsZXMuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IENoZWNrIGZvciBQeXRob24gPj0gMy41IGFuZCByZW1vdmUKKwljaGVjayBmb3IgYHBpcCcuCisKKwkqIGRvY3MvQ0hBTkdFUywgZG9jcy9JTlNUQUxMLkdOVSwgZG9jcy9SRUFETUU6IFVwZGF0ZWQuCisKKzIwMjAtMDMtMDIgIE1vYXppbiBLaGF0dGkgIDxtb2F6aW5raGF0cmlAZ21haWwuY29tPgorCisJW2d6aXBdIFN1cHBvcnQgYGd6aXAnIGVuY29kZWQgaGVhZGVyIGNvbmRpdGlvbmFsbHkuCisKKwlJbiBvcmRlciB0byBzdXBwb3J0IGBnemlwJyBlbmNvZGVkIGhlYWRlciB0aGUgY2FsbCB0bworCWBpbmZsYXRlSW5pdDInIHdhcyBtb2RpZmllZCBpbiBjb21taXQgNmE5MmIxZmFkZGUyNjQ3N2E5MTc5LgorCUhvd2V2ZXIsIHRoaXMgY29kZSBicmVha3Mgd2l0aCB0aGUgb3V0ZGF0ZWQgaW50ZXJuYWwgdmVyc2lvbgorCW9mIHpsaWIuICBUaGlzIGlzIGEgdGVtcG9yYXJ5IGZpeCB0byBjb25kaXRpb25hbGx5IHN1cHBvcnQKKwlgZ3ppcCcgZW5jb2RlZCBoZWFkZXIgd2hlbmV2ZXIgYSBzeXN0ZW0gaW5zdGFsbGF0aW9uIG9mIHpsaWIKKwlpcyBiZWluZyB1c2VkLgorCisJUHJvYmxlbSByZXBvcnQgaW4KKworCSAgaHR0cHM6Ly9saXN0cy5ub25nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDIwLTAyL21zZzAwMDIzLmh0bWwKKworCSogc3JjL2d6aXAvZnRnemlwLmMgKEZUX0d6aXBfVW5jb21wcmVzcyk6IENoYW5nZSB0aGUgdGhlIGNhbGwgdG8KKwlgaW5mbGF0ZUluaXQyJyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgc3lzdGVtIGluc3RhbGxhdGlvbiBpcworCWJlaW5nIHVzZWQgb3IgdGhlIGludGVybmFsIGNvcHkuCisKKzIwMjAtMDItMjkgIEJlbiBXYWduZXIgIDxidW5nZW1hbkBnb29nbGUuY29tPgorCisJW3RydWV0eXBlXSBGaXggc3RhdGUgb2YgYEZUX0ZhY2UnIGZvciBidWdneSBgZ3ZhcicgdGFibGVzICgjNTc5MjMpLgorCisJQnkgcmVzZXR0aW5nIHRoZSBibGVuZCBhcyBpbXBsZW1lbnRlZCB3aXRoIHRoaXMgY29tbWl0IGZvbnRzIHdpdGgKKwlpbnZhbGlkIGBndmFyJyB0YWJsZXMgbWF5IGtlZXAgY2FsbGluZyBpbnRvIGBmdF92YXJfbG9hZF9ndmFyJyBmcm9tCisJYHR0X3NldF9tbV9ibGVuZCcgYW5kIGZhaWxpbmcsIGJ1dCB0aGUgZm9udCB3YXMgaW52YWxpZCBhbnl3YXkgYW5kCisJd2Ugd2FudCB0byBrZWVwIHNlZWluZyB0aGUgZmFpbHVyZSBpbiBgdHRfc2V0X21tX2JsZW5kJy4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoZnRfdmFyX2xvYWRfZ3Zhcik6IENhbGN1bGF0ZSBsZW5ndGggb2YKKwlvZmZzZXQgYXJyYXkgb25jZS4KKwlBbGxvY2F0ZSBhcnJheXMgYWZ0ZXIgYEZUX0ZSQU1FX0VOVEVSJyAoZXh0cmEgY2hlY2sgYmVmb3JlCisJYWxsb2NhdGluZyBhbmQgYXZvaWQgbmVlZGluZyB0byBmcmVlIGFycmF5IGxhdGVyIGlmIGVycm9yIGVudGVyaW5nCisJZnJhbWUpLgorCUFsd2F5cyBjYWxsIGBGVF9GUkFNRV9FWElUJy4KKwlDb25zaXN0ZW50bHkgc2V0IGNvdW50cyBpbW1lZGlhdGVseSBhZnRlciBhcnJheSBpbml0aWFsaXplZC4KKwlSZXNldCB0aGUgYmxlbmQgKHBhcnRpY3VsYXJseSBgYmxlbmQtPmdseXBob2Zmc2V0cycpIG9uIGZhaWx1cmUuCisKKzIwMjAtMDMtMDEgIE5pa2hpbCBSYW1ha3Jpc2huYW4gIDxyYW1ha3Jpc2huYW4ubmlraGlsQGdtYWlsLmNvbT4KKworCVtkb2NzXSBVcGRhdGUgZG9jd3JpdGVyIHN0eWxlc2hlZXQuCisKKwlUaGlzIGNoYW5nZSBpcyByZXF1aXJlZCB0byBzdXBwb3J0IGRvY3dyaXRlciAxLjIuMS4KKworCVNlZQorCisJICBodHRwczovL2dpdGh1Yi5jb20vZnJlZXR5cGUvZG9jd3JpdGVyL2lzc3Vlcy8zNgorCisJZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKwkqIGRvY3MvbWFya2Rvd24vc3R5bGVzaGVldHMvZXh0cmEuY3NzOgorCSgubWQtdHlwZXNldCBjb2RlKSAtPiAoLm1kLXR5cGVzZXQgcHJlPmNvZGUpCisJKHByZSkgLT4gKHByZT5jb2RlKQorCShwLCAubWQtdHlwZXNldCBwLCBoNCk6IFJlbW92ZSBjb21tZW50ZWQgc3R5bGVzLgorCSh0YWJsZS5pbmRleCk6IFJlbW92ZSB1bnVzZWQgc3R5bGVzLgorCisyMDIwLTAyLTI4ICBCZW4gV2FnbmVyICA8YnVuZ2VtYW5AZ29vZ2xlLmNvbT4KKworCVt0cnVldHlwZV0gQWRkIGJldHRlciBjaGVja3MgZm9yIGxvYWRpbmcgYGd2YXInIHRhYmxlICgjNTc5MDUpLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfbG9hZF9ndmFyKTogRGVsYXkgc2V0dGluZ3Mgb2YgYW55CisJYGJsZW5kLT54eHhjb3VudCcgdmFsdWVzIHVudGlsIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgaGFzIGJlZW4KKwljaGVja2VkLgorCUFsc28gZG8gc29tZSBzYW5pdGl6aW5nIHRvIGF2b2lkIGEgdG9vIGVhcmx5IGV4aXQuCisKKwkoVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXMpOiBJbXByb3ZlIHRyYWNpbmcgbWVzc2FnZS4KKworMjAyMC0wMi0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWFrZSBgRlRfSEFTXyonIGFuZCBgRlRfSVNfKicgcmVhbGx5IHJldHVybiB0cnVlICgjNTc5MDYpLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0hBU18qLCBGVF9JU18qKTogSW1wbGVtZW50IGl0LgorCisyMDIwLTAyLTI1ICBEb21pbmlrIFLDtnR0c2NoZXMgIDxkcm90dEBjaHJvbWl1bS5vcmc+CisKKwlGaXggZm9yIENGRiBzcGFjZSBnbHlwaCByZWdyZXNzaW9uICgjNTc1NDEpLgorCisJKiBzcmMvcHNhdXgvcHNmdC5jIChjZjJfZGVjb2Rlcl9wYXJzZV9zdWJzdHJpbmdzKTogUmVwbGFjZSBlYXJseS1vdXQKKwkgIHdpdGggRlRfT0ZGU0VULgorCisyMDIwLTAyLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbd29mZjJdIEZpeCBmb250IHRhYmxlIGFjY2Vzcy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwNzc4CisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAoZ2V0X3hfbWlucyk6IEV4cGxpY2l0bHkgY2hlY2sgZm9yIHByZXNlbmNlIG9mCisJYGhlYWQnIHRhYmxlLCB3aGljaCBtaWdodCBub3QgaGF2ZSBiZWVuIHByb2Nlc3NlZCB5ZXQuCisKKzIwMjAtMDItMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtwc2F1eF0gTWFrZSBgdDFfZGVjb2Rlcl9wYXJzZV9tZXRyaWNzJyBoYW5kbGUgYG9wX2RpdicgKCM1NzUxOSkuCisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9kZWNvZGVyX3BhcnNlX21ldHJpY3MpOiBDb3B5CisJY29ycmVzcG9uZGluZyBjb2RlIGZyb20gb2xkIGVuZ2luZSdzIGB0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzJworCWZ1bmN0aW9uLgorCisyMDIwLTAyLTE5ICBOaWtvbGF1cyBXYXh3ZWlsZXIgIDxuaWtvbGF1cy53YXh3ZWlsZXJAZGFsdG9ubWFhZy5jb20+CisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIEhhbmlmaSBSb2hpbmd5YSBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgSGFuaWZpIFJvaGluZ3lhLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIEhhbmlmaSBSb2hpbmd5YSBzdGFuZGFyZCBjaGFyYWN0ZXIuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBIYW5pZmkKKwkgIFJvaGluZ3lhIGRhdGEuCisKKzIwMjAtMDItMTkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVJlcXVpcmUgSGFyZkJ1enogMS44LgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3LCBDTWFrZUxpc3RzLnR4dDogUmVxdWVzdCBIYXJmQnV6eiAxLjguMAorCW9yIG5ld2VyLgorCisJV2UgYXJlIGdvaW5nIHRvIGFkZCBhdXRvLWhpbnRlciBzdXBwb3J0IGZvciBIYW5pZmkgUm9oaW5neWEsIHdoaWNoCisJd2FzIGludHJvZHVjZWQgaW4gVW5pY29kZSAxMS4wLgorCisyMDIwLTAyLTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9mYWNlX2J1aWxkX2NtYXBzKTogSWdub3JlIHZlcnNpb24gKCM1NzcwOCkuCisKKzIwMjAtMDItMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX1J1bklucyk6IEFkanVzdCBsb29wIGNvdW50ZXIgKCM1NzczMikuCisKKwlUaGUgZm9udCB0aGF0IGV4Y2VlZHMgdGhlIG9sZCBsaW1pdCBpcyBDb25zdGFudGluZSwgdmVyc2lvbiAxLjAwMS4KKworMjAyMC0wMS0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Jhc2VdIEZpeCBgRlJFRVRZUEVfUFJPUEVSVElFUz10eXBlMTpoaW50aW5nLWVuZ2luZT1hZG9iZWAuCisKKwkqIHNyYy9iYXNlL2Z0cHNwcm9wLmMgKHBzX3Byb3BlcnR5X3NldCkgW2hpbnRpbmctZW5naW5lXTogQXZvaWQgYW4KKwlpbmNvcnJlY3QgcmV0dXJuIHZhbHVlIHRoYXQgY2F1c2VkIGEgd2FybmluZy4gIFRoZSBmdW5jdGlvbiBkaWQgdGhlCisJcmlnaHQgdGhpbmcsIHRob3VnaC4KKworMjAyMC0wMS0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3dvZmYyXSBGaXggbWVtb3J5IGxlYWtzIGFuZCBhIHJ1bnRpbWUgd2FybmluZy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTE5NzczCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0xODEwMQorCisJKiBzcmMvc2ZudC9zZndvZmYyLmMgKGNvbXB1dGVfVUxvbmdfc3VtKTogQWRkIG1pc3NpbmcgY2FzdC4KKwkocmVjb25zdHJ1Y3RfaG10eCk6IEFkZCBtaXNzaW5nIGRlYWxsb2NhdGlvbiBjYWxscy4KKworMjAyMC0wMS0wMiAgRG9taW5payBSw7Z0dHNjaGVzICA8ZHJvdHRAY2hyb21pdW0ub3JnPgorCisJW3RydWV0eXBlXSBGaXggVUJTYW4gd2FybmluZyBvbiBvZmZzZXQgdG8gbnVsbHB0ciAoIzU3NTAxKS4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19DQUxMKTogRmFpbCBpZiBgZXhjLT5GRGVmcycgaXMgbnVsbC4KKworMjAxOS0xMi0zMSAgTmlraGlsIFJhbWFrcmlzaG5hbiAgPHJhbWFrcmlzaG5hbi5uaWtoaWxAZ21haWwuY29tPgorCisJW3dvZmYyXSBBbGxvdyBiaXRtYXAtb25seSBmb250cyAoIzU3Mzk0KS4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5jIChyZWNvbnN0cnVjdF9mb250KTogRml4IHRlc3QgZm9yIGBnbHlmJyBhbmQKKwlgbG9jYScgdGFibGVzLgorCisyMDE5LTEyLTIxICBIdWdoIE1jTWFzdGVyICA8aHVnaC5tY21hc3RlckBvdXRsb29rLmNvbT4KKworCVtkb2NzXSAoMi8yKSBGaXggZ2VuZXJhdGlvbiBvZiBBUEkgZG9jdW1lbnRhdGlvbiAoIzU2NzQ1KS4KKworCUNyZWF0aW5nIHRoZSBBUEkgUmVmZXJlbmNlIGluIHRoZSAobmV3KSBgcmVmZXJlbmNlJyBzdWItZGlyZWN0b3J5IGlzCisJY29uc2lzdGVudCB3aXRoIG90aGVyIGRvY3VtZW50YXRpb24gc3ViLXRvcGljcywgc3VjaCBhcyBgZGVzaWduJywKKwlgZ2x5cGhzJyBhbmQgYHR1dG9yaWFsJy4KKworCVRoaXMgcGF0Y2ggZml4ZXMgYnJva2VuIGh5cGVybGlua3MgaW4gdGhlIGRvY3VtZW50YXRpb24gcG9pbnRpbmcgdG8KKwlhbmQgZnJvbSB0aGUgQVBJIFJlZmVyZW5jZS4gIEl0IGFsc28gYWxsb3dzIHdlYiBhc3NldHMgdG8gbG9hZCBmcm9tCisJdGhlaXIgcmVsYXRpdmUgcGF0aHMuCisKKwkqIGJ1aWxkcy9mcmVldHlwZS5tayAoRE9DX0RJUik6IEFkanVzdC4KKwkocmVmZG9jLCByZWZkb2MtdmVudik6IEFkZCBgLS1zaXRlJyBhcmd1bWVudC4KKworCSogYnVpbGRzL3RvcGxldmVsLm1rIChkby1kaXN0KTogVXBkYXRlZC4KKworMjAxOS0xMi0yMSAgSHVnaCBNY01hc3RlciAgPGh1Z2gubWNtYXN0ZXJAb3V0bG9vay5jb20+CisKKwlbZG9jc10gKDEvMikgTW92ZSBzdGF0aWMgd2ViIGFzc2V0cyAoIzU2NzQ1KS4KKworCSogZG9jcy9yZWZlcmVuY2UvKjogTW92ZSAuLi4KKwkqIGRvY3M6IC4uLiBvbmUgZGlyZWN0b3J5IHVwLgorCisyMDE5LTEyLTIxICBEb21pbmlrIFLDtnR0c2NoZXMgIDxkcm90dEBjaHJvbWl1bS5vcmc+CisKKwlGaXggbW9yZSBVQlNhbiB3YXJuaW5ncyBvbiBhZGRpbmcgb2Zmc2V0IHRvIG51bGxwdHIgKCM1NzQzMikuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfTE9PUENBTEwpLCBzcmMvcHNhdXgvcHNmdC5jCisJKGNmMl9pbml0TG9jYWxSZWdpb25CdWZmZXIpOiBVc2UgYEZUX09GRlNFVCcuCisKKzIwMTktMTItMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRml4IFVCU2FuIHdhcm5pbmdzIG9uIGFkZGluZyBvZmZzZXRzIHRvIG51bGxwdHIuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDMyMTUyCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfRkRFRiwgSW5zX0lERUYpOiBVc2UgYEZUX09GRlNFVCcuCisKKzIwMTktMTItMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRml4IGludGVnZXIgb3ZlcmZsb3cuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0xOTMwNQorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX01JUlApOiBVc2UgYEFERF9MT05HJy4KKworMjAxOS0xMi0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQW5vdGhlciBidW5jaCBvZiBVQlNhbiB3YXJuaW5ncyBvbiBhZGRpbmcgb2Zmc2V0cyB0byBudWxscHRyLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MTk0MjcKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTE5NDMzCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0xOTQ0MQorCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MTk0NTEKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTE5NDUyCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0xOTQ1NworCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfc2VnbWVudHMsCisJYWZfbGF0aW5faGludHNfY29tcHV0ZV9lZGdlcyk6IFVzZSBgRlRfT0ZGU0VUJy4KKworCSogc3JjL2Jhc2UvZnRzdHJlYW0uYyAoRlRfU3RyZWFtX0VudGVyRnJhbWUpOiBVc2UgYEZUX09GRlNFVCcuCisKKwkqIHNyYy9wc2F1eC9jZmZkZWNvZGUuYyAoY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOiBFeGl0IGVhcmx5CisJaWYgdGhlcmUgaXMgbm8gY2hhcnN0cmluZy4KKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jICh0MV9kZWNyeXB0KTogVXNlIGBGVF9PRkZTRVQnLgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyk6IEV4aXQgZWFybHkgZm9yCisJemVybyBiaXRtYXAgZGltZW5zaW9ucy4KKworMjAxOS0xMi0wOSAgRG9taW5payBSw7Z0dHNjaGVzICA8ZHJvdHRAY2hyb21pdW0ub3JnPgorCisJRml4IG1vcmUgVUJTYW4gd2FybmluZ3Mgb24gYWRkaW5nIG9mZnNldCB0byBudWxscHRyICgjNTczODQpLgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyksCisJc3JjL3BzYXV4L3Bzb2Jqcy5jIChwc190YWJsZV9hZGQpOiBVc2UgYEZUX09GRlNFVCcuCisKKzIwMTktMTItMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX1J1bklucyk6IFVzZSBgRlRfT0ZGU0VUJy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwMzA2MTQKKworMjAxOS0xMi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTW9yZSBudWxscHRyIG9mZnNldCBVQlNhbiB3YXJuaW5ncyAoIzU3MzMxLCAjNTczNDcpLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfaGludHNfY29tcHV0ZV9zZWdtZW50cyksCisJc3JjL3BzYXV4L3BzZnQuYyAoY2YyX2dldFNlYWNDb21wb25lbnQpLCBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYworCShJbnNfVU5LTk9XTik6IFVzZSBgRlRfT0ZGU0VUJy4KKworMjAxOS0xMS0yOSAgRG9taW5payBSw7Z0dHNjaGVzICA8ZHJvdHRAY2hyb21pdW0ub3JnPgorCisJQXZvaWQgbW9yZSBudWxscHRyIG9mZnNldCBVQlNhbiB3YXJuaW5ncyAoIzU3MzE2KS4KKworCSogc3JjL2Jhc2UvZnRvdXRsbi5jIChGVF9PdXRsaW5lX1RyYW5zZm9ybSk6IEJhaWwgb24gZW1wdHkgcG9pbnRzLgorCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9zdWJmb250X2xvYWQpOiBVc2UgYEZUX09GRlNFVCcuCisJKiBzcmMvcHNhdXgvcHNmdC5jIChjZjJfZGVjb2Rlcl9wYXJzZV9zdWJzdHJpbmdzKTogRWFybHkgb3V0IGlmCisJYGNoYXJzdHJpbmdfYmFzZScgb3IgYGNoYXJzdHJpbmdfbGVuJyBhcmUgbnVsbC4KKwkqIHNyYy9zZm50L3R0bG9hZC5jICh0dF9mYWNlX2xvYWRfbmFtZSk6IFVzZSBgRlRfT0ZGU0VUJy4KKworMjAxOS0xMS0yMyAgSm9obiBTdHJhY2tlICA8anN0cmFja2VAR29vZ2xlLmNvbT4KKworCVtiYXNlXSBSZWFsbHkgZml4ICM1NzE5NC4KKworCUFwcGx5IGFjY2lkZW50YWxseSBtaXNzZWQgc2Vjb25kIHBhcnQgb2YgcGF0Y2guCisKKwkqIHNyYy9iYXNlL2Z0Z2xvYWRyLmMgKEZUX0dseXBoTG9hZGVyX0NoZWNrUG9pbnRzKTogQ2FsbAorCWBGVF9HbHlwaExvYWRlcl9DcmVhdGVFeHRyYScuCisKKzIwMTktMTEtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gQXZvaWQgc2FuaXRpemVyIHdhcm5pbmcgKCM1NzI4OSkuCisKKwkqIHNyYy90cnVldHlwZS90dHBsb2FkLmMgKHR0X2ZhY2VfZ2V0X2RldmljZV9tZXRyaWNzKTogVXNlCisJYEZUX09GRlNFVCcuCisKKzIwMTktMTEtMjMgIEFybWluIEhhc2l0emthICA8cHJpbmNlLmNoZXJ1c2tlckBnbWFpbC5jb20+CisKKwlbdHJ1ZXR5cGVdIEZpeCBpbnRlZ2VyIG92ZXJmbG93ICgjNTcyODcpLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChjb21wdXRlX2dseXBoX21ldHJpY3MpOiBVc2UgYFNVQl9MT05HJy4KKworMjAxOS0xMS0yMyAgQmVuIFdhZ25lciAgPGJ1bmdlbWFuQGdvb2dsZS5jb20+CisKKwlbc2ZudF0gQXZvaWQgc2FuaXRpemVyIHdhcm5pbmcgKCM1NzI4NikuCisKKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9mYWNlX2J1aWxkX2NtYXBzKTogQXZvaWQgcG9zc2libGUgYE5VTEwgKworCW9mZnNldCcgY29tcHV0YXRpb24uCisJVGFnIGB0YWJsZScgYXMgYGNvbnN0Jy4KKworMjAxOS0xMS0yMyAgSm9obiBTdHJhY2tlICA8anN0cmFja2VAR29vZ2xlLmNvbT4KKyAgICAgICAgICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiYXNlXSBGaXggYE5VTEwgKyBvZmZzZXQnIHNhbml0aXplciB3YXJuaW5ncyAoIzU3MTk0KS4KKworCSogc3JjL2Jhc2UvZnRnbG9hZHIuYyAoRlRfR2x5cGhMb2FkZXJfQWRqdXN0X1BvaW50cywKKwlGVF9HbHlwaExvYWRlcl9BZGp1c3RfU3ViZ2x5cGhzKTogVXNlIGBGVF9PRkZTRVQnLgorCShGVF9HbHlwaExvYWRlcl9DcmVhdGVFeHRyYSk6IEFkZCBzaG9ydCBjdXQgaWYgc29tZSB2YWx1ZXMgYXJlIHplcm8uCisKKzIwMTktMTEtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oIChGVF9PRkZTRVQpOiBOZXcgbWFjcm8uCisKKwlVc2UgdGhpcyBmb3IgYGJhc2UgKyBvZmZzZXQnIHBvaW50ZXIgY2FsY3VsYXRpb25zIHdoZXJlIGBiYXNlJyBjYW4KKwliZSBOVUxMICh0cmlnZ2VyaW5nIGEgc2FuaXRpemVyIHdhcm5pbmcgZXZlbiBpZiB0aGUgcmVzdWx0aW5nCisJcG9pbnRlciBnZXRzIG5ldmVyIGRlcmVmZXJlbmNlZCBzaW5jZSBpdCBpcyB1bmRlZmluZWQgYmVoYXZpb3VyCisJaW4gQykuCisKKwlTdWdnZXN0ZWQgYnkgQmVuIFdhZ25lci4KKworMjAxOS0xMS0yMyAgQmVuIFdhZ25lciAgPGJ1bmdlbWFuQGdvb2dsZS5jb20+CisKKwlbc2ZudF0gRW5zdXJlIE9UVE8gZm9udHMgaGF2ZSB0YWJsZXMgKCM1NzI4NSkuCisKKwkqIHNyYy9zZm50L3R0bG9hZC5jICh0dF9mYWNlX2xvYWRfZm9udF9kaXIpOiBBZGQgdGVzdC4KKworMjAxOS0xMS0yMyAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGJlaGRhZC5vcmc+CisKKwlNaW5vciBmaXhlcyBmb3IgcmVjZW50IGNvbXBpbGVycy4KKworCSogc3JjL2d6aXAvaW5mdXRpbC5oIChpbmZsYXRlX21hc2spOiBBZGQgYGNvbnN0Jy4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbjIuYzogSW5jbHVkZSBgZnQyYnVpbGQuaCcuCisKKzIwMTktMTEtMDcgIE5pa29sYXVzIFdheHdlaWxlciAgPG1hZGlnZW5zQGdtYWlsLmNvbT4KKworCSogQ01ha2VMaXN0cy50eHQ6IE1pbm9yIGFkZGl0aW9ucyB0byB0aGUgbm90ZXMsIGNvbXBpbGUKKwkgIGJ1aWxkcy91bml4L2Z0c3lzdGVtLmMgaW5zdGVhZCBvZiBzcmMvYmFzZS9mdHN5c3RlbS5jIG9uIFVOSVguCisKKwlUaGUgbGF0dGVyIGNoYW5nZSBpcyBiYXNlZCBvbiB0aGUgY29kZSBwcm9wb3NlZCBieSByaW0gaW4gIzU1MjM1LgorCisyMDE5LTEwLTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAod29mZjJfb3Blbl9mb250KTogQ2hlY2sgYG51bV9mb250cycgZm9yIFRUQ3MuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0xODQ5NAorCisyMDE5LTEwLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAod29mZjJfb3Blbl9mb250KTogQXZvaWQgdW5kZWZpbmVkIHNoaWZ0LgorCisJQWxzbyBpbXByb3ZlIHRyYWNpbmcuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0xODM5MAorCisyMDE5LTEwLTEwICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy9zZm50L3BuZ3NoaW0uYyAocHJlbXVsdGlwbHlfZGF0YSk6IE9wdGltaXplIGZvciBfX1NTRV9fIG9ubHkuCisKKzIwMTktMTAtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5jIChyZWNvbnN0cnVjdF9nbHlmKTogQ2hlY2sgYHRyaXBsZXRfc2l6ZScuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0xODEwOAorCisyMDE5LTEwLTA5ICBKb2huIFR5dGdhdCAgPEpvaG4uVHl0Z2F0QGVza28uY29tPgorCisJW2NmZl0gRml4IEZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUyBmb3IgQ0ZGMiBiYXNlZCBmb250cyAoIzU3MDIzKS4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpOiBEb24ndCBzZXQKKwlGVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVMgZm9yIENGRjIgYmFzZWQgZm9udHMuCisKKzIwMTktMTAtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt3b2ZmMl0gRml4IFNGTlQgdGFibGUgY2hlY2tzLgorCisJQWxzbyByZWR1Y2UgbnVtYmVyIG9mIFNGTlQgdGFibGUgbG9va3Vwcy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTE4MDY1CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvd29mZnR5cGVzLmggKFdPRkYyX0luZm9SZWMpOiBBZGQgZmllbGRzCisJYGdseWZfdGFibGUnLCBgbG9jYV90YWJsZScsIGFuZCBgaGVhZF90YWJsZScuCisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAocmVjb25zdHJ1Y3RfZ2x5Zik6IFVwZGF0ZSBzaWduYXR1cmUuCisJVXNlIHRhYmxlIHBvaW50ZXJzIGluIGBpbmZvJyBwYXJhbWV0ZXIuCisJKGdldF94X21pbnMpOiBDaGVjayBgbWF4cF90YWJsZScKKwlVc2UgdGFibGUgcG9pbnRlcnMgaW4gYGluZm8nIHBhcmFtZXRlci4KKwkocmVjb25zdHJ1Y3RfZm9udCk6ICBVc2UgYW5kIHNldCB0YWJsZSBwb2ludGVycyBpbiBgaW5mbycgcGFyYW1ldGVyLgorCUZpeCBjaGVjayBmb3IgYGdseWYnIGFuZCBgbG9jYScgdGFibGVzLgorCVVwZGF0ZSBjYWxsIHRvIGByZWNvbnN0cnVjdF9nbHlmJy4KKwkod29mZjJfb3Blbl9mb250KTogVXBkYXRlZC4KKworMjAxOS0xMC0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC9zZndvZmYyLmMgKHJlY29uc3RydWN0X2dseWYpOiBGaXggcmVhbGxvY2F0aW9uLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MTgwNDYKKworMjAxOS0xMC0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJSW1wcm92ZSBtZW1vcnkgZGVidWdnaW5nLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5LmggKEZUX01FTV9GUkVFKTogVXNlCisJYEZUX0RFQlVHX0lOTkVSJyB0byBzZXQgc291cmNlIGNvZGUgZmlsZSBuYW1lIGFuZCBsaW5lLgorCisJKiBzcmMvYmFzZS9mdGRiZ21lbS5jIChmdF9tZW1fdGFibGVfcmVtb3ZlKTogQmV0dGVyIGZvcm1hdHRpbmcgb2YKKwl0cmFjaW5nIG1lc3NhZ2UuCisKKzIwMTktMTAtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMiAocmVjb25zdHJ1Y3RfZm9udCk6IEZpeCByZWFsbG9jYXRpb24uCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0xNzk2NgorCisyMDE5LTEwLTAxICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy9iYXNlL2Z0c3Ryb2tlLmMgKGZ0X3N0cm9rZXJfaW5zaWRlKTogU3BlZWQgdXAuCisKKzIwMTktMTAtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMiAod29mZjJfb3Blbl9mb250KTogSW5pdGlhbGl6ZSBgd29mZjIudHRjX2ZvbnRzJy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTE3ODA0CisKKzIwMTktMDktMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5jIChyZWNvbnN0cnVjdF9mb250KTogRml4IG1lbW9yeSBsZWFrLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MTc4MTIKKworMjAxOS0wOS0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3dvZmYyXSBSZWplY3QgZm9udHMgd2l0aG91dCBgaGVhZCcgdGFibGUuCisKKwlBbHNvIGZpeCBtZW1vcnkgZGVhbGxvY2F0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCisKKwlgaGVhZCcgcHJvYmxlbSByZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0xNzgyMAorCisJKiBzcmMvc2ZudC9zZndvZmYyLmMgKHJlY29uc3RydWN0X2dseWYpOiBEb24ndCB1c2UgYHN0cmVhbV9jbG9zZScuCisJQWJvcnQgaWYgYGhlYWRfdGFibGUnIGlzIE5VTEwuCisJRG9uJ3QgZnJlZSBgdHJhbnNmb3JtZWRfYnVmJyBpbiBjYXNlIG9mIGVycm9yLgorCSh3b2ZmMl9vcGVuX2ZvbnQpOiBEb24ndCBzZXQgYHVuY29tcHJlc3NlZF9idWYnIHRvIE5VTEwuCisKKzIwMTktMDktMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt3b2ZmMl0gRml4IGNvbXBpbGVyIHdhcm5pbmdzLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBBbGV4ZWkuCisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAocmVjb25zdHJ1Y3RfZ2x5Zik6IEluaXRpYWxpemUgYHhfbWluJy4KKwkocmVjb25zdHJ1Y3RfZm9udCk6IEluaXRpYWxpemUgYG51bV9obWV0cmljcycuCisJKHdvZmYyX29wZW5fZm9udCk6IEluaXRpYWxpemUgYGluZm8nLgorCisyMDE5LTA5LTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAod29mZjJfb3Blbl9mb250KTogRml4IHNhbml0eSBjaGVjay4KKworCUNvcnJlY3QgdGhpbmtvcyBpbiBwYXRjaCBmcm9tIDIwMTktMDktMDEuCisKKzIwMTktMDktMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt3b2ZmMl0gRml4IG1lbW9yeSBsZWFrcy4KKworCU9uZSBvZiB0aGVtIHJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTE3NzY2CisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAod29mZjJfb3Blbl9mb250KTogRnJlZSBgaW5mby0+eF9taW5zJyBhbmQKKwlgd29mZjItPnR0Y19mb250cycuCisKKwkocmVjb25zdHJ1Y3RfZ2x5Zik6IEluaXRpYWxpemUgYGluZm8tPnhfbWlucycuCisKKzIwMTktMDktMjcgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL2Jhc2UvZnRzdHJva2UuYyAoZnRfc3Ryb2tlcl9jYXApOiBTcGVlZCB1cCBjYXBzLgorCisyMDE5LTA5LTI1ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy9iYXNlL2Z0c3Ryb2tlLmMgKGZ0X3N0cm9rZXJfb3V0c2lkZSk6IFNwZWVkIHVwIGNsaXBwZWQgbWl0ZXIuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0c3Ryb2tlLmg6IFdvcmRzbWl0aCBtaXRlciBkb2NzLgorCisyMDE5LTA5LTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAod29mZjJfb3Blbl9mb250KTogQ2hlY2sgKHN1bSBvZikgdGFibGUgc2l6ZXMuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0xNzY4NAorCisyMDE5LTA5LTIzICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy9iYXNlL2Z0c3Ryb2tlLmMgKGZ0X3N0cm9rZV9ib3JkZXJfYXJjdG8pOiBTcGVlZCB1cCBjYWxjdWxhdGlvbnMuCisKKzIwMTktMDktMjAgIE5pa2hpbCBSYW1ha3Jpc2huYW4gIDxyYW1ha3Jpc2huYW4ubmlraGlsQGdtYWlsLmNvbT4KKworCVt3b2ZmMl0gRml4IG1lbW9yeSBsZWFrcy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTE2ODk2CisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAod29mZjJfb3Blbl9mb250KTogRml4IGVycm9yIGhhbmRsaW5nLgorCUZyZWUgYHVuY29tcHJlc3NlZF9idWYnLgorCShyZWNvbnN0cnVjdF9mb250KTogRnJlZSBgdHJhbnNmb3JtZWRfYnVmJy4KKworMjAxOS0wOS0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvb3R2YWxpZC9vdHZjb21tb24uYyAob3R2X0NvdmVyYWdlX2dldF9sYXN0KTogR3VhcmQgYGNvdW50Jy4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgTWFyYyBTY2jDtm5lZmVsZCA8bWFyYy5zY2hvZW5lZmVsZEBnbXgub3JnPi4KKworMjAxOS0wOS0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC9zZndvZmYyLmMgKHdvZmYyX29wZW5fZm9udCk6IENoZWNrIHRhYmxlIGluZGV4LgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MTcxMDAKKworMjAxOS0wOS0xNSAgQXZpIEhhbGFjaG1pICg6YXZpaCkgIDxhdmlocGl0QHlhaG9vLmNvbT4KKworCVtjbWFrZV0gRG9uJ3QgZmFpbCBpZiBicm90bGkgaXMgbWlzc2luZyAoIzU2ODk0KS4KKworCVRoZSBsaWJzIHdoaWNoIGNtYWtlIGNvbnRyb2xzIGFyZSBjb21tZW50ZWQgb3V0IGF0CisKKwkgIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKworCWFuZCBjbWFrZSB1bi1jb21tZW50IGVhY2ggZW5hYmxlZCBsaWJyYXJ5LCBidXQgdGhlIGJyb3RsaSBvcHRpb24gd2FzCisJbm90IGNvbW1lbnRlZCBvdXQsIHRoZXJlZm9yZSBgRlRfQ09ORklHX09QVElPTl9VU0VfQlJPVExJJyByZW1haW5lZAorCWRlZmluZWQgZXZlbiBpZiBicm90bGkgd2FzIG1pc3NpbmcvZGlzYWJsZWQvZXRjLgorCisJQ29tbWVudCBpdCBzdWNoIHRoYXQgY21ha2UgY2FuIGNvbnRyb2wgaXQsIHdoaWNoIG1lYW5zIGxlYXZpbmcgaXQKKwl1bmRlZmluZWQgaWYgYnJvdGxpIGlzIG1pc3NpbmcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmg6IEZpeCB0eXBvLgorCisyMDE5LTA5LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY21ha2VdIEFkZCBicm90bGkgc3VwcG9ydC4KKworCSogQ01ha2VMaXN0cy50eHQgKEZUX1dJVEhfQlJPVExJKTogTmV3IG9wdGlvbi4KKworCSogYnVpbGRzL2NtYWtlL0ZpbmRCcm90bGlEZWMuY21ha2U6IE5ldyBmaWxlLgorCisyMDE5LTA5LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggaGFuZGxpbmcgb2YgYEFGX0NPTkZJR19PUFRJT05fSU5ESUMnLgorCisJKiBkZXZlbC9mdG9wdGlvbi5oLCBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oOgorCWBBRl9DT05GSUdfT1BUSU9OX0lORElDJyBuZWVkcyBgQUZfQ09ORklHX09QVElPTl9DSksnLgorCisyMDE5LTA5LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlDTWFrZUxpc3RzLnR4dDogRml4IGdlbmVyYXRpb24gb2YgRExMIHJlbGF0ZWQgc3R1ZmYgKCM1Njg1MikuCisKKwlFeHRyYWN0IGB2ZXJzaW9uX2luZm8nIHZhcmlhYmxlIGZyb20gYGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcnIGFuZAorCXVzZSB0aGUgZGF0YSB0byBjb3JyZWN0bHkgc2V0IGBMSUJSQVJZX1ZFUlNJT04nIGFuZAorCWBMSUJSQVJZX1NPVkVSU0lPTicuCisKKwlBbHNvIHVzZSB0aGUgZGF0YSB0byBzZXQgYGZ0X3ZlcnNpb24nIGZpZWxkIGluIGBmcmVldHlwZTIucGMnLgorCUFsc28gZml4IHRoZSBuZWVkZWQgbWluaW11bSB2ZXJzaW9uIG9mIEhhcmZCdXp6IGluIGBmcmVldHlwZTIucGMnLgorCisyMDE5LTA5LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAoY29tcHV0ZV9VTG9uZ19zdW0pOiBGaXggdW5kZWZpbmVkIHNoaWZ0LgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MTY5MzMKKworMjAxOS0wOS0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC9zZndvZmYyLmMgKHdvZmYyX29wZW5fZm9udCk6IEFkZCBzYW5pdHkgY2hlY2suCisKKwlEb24ndCB0cnVzdCBgdG90YWxTZm50U2l6ZScgdW5jb25kaXRpb25hbGx5LgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MTY4OTMKKworMjAxOS0wOC0yNyAgRG9taW5payBSw7Z0dHNjaGVzICA8ZHJvdHRAY2hyb21pdW0ub3JnPgorCisJW3dvZmYyXSBEb24ndCB1c2UgYEZUX1VJbnQ2NCcgKCM1NjgxNSkuCisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAod29mZjJfb3Blbl9mb250KTogVXNlIGBGVF9VSW50MzInIGZvcgorCWBmaWxlX29mZnNldCcuICBUaGlzIGZpeGVzIGJ1aWxkcyBvbiBwbGF0Zm9ybXMgd2hlcmUgYEZUX0xPTkc2NCcgaXMKKwlub3QgZGVmaW5lZCB3aGlsZSBzdGlsbCBiZWluZyBzdWZmaWNpZW50IHRvIHN0b3JlIGEgZmlsZSBvZmZzZXQuCisKKzIwMTktMDgtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gUHJldmVudCBjcmFzaCBpbiBgVFRfU2V0X05hbWVkX0luc3RhbmNlJyAoIzU2ODEzKS4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfU2V0X05hbWVkX0luc3RhbmNlKTogRml4IGVycm9yCisJaGFuZGxpbmcuCisKKzIwMTktMDgtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt3b2ZmMl0gRml4IGNvbXBpbGVyIHdhcm5pbmdzLgorCisJKiBzcmMvc2ZudC9zZndvZmYyLmMgKHJlYWRfbnVtX2htZXRyaWNzKTogUmVtb3ZlIHVudXNlZCBhcmd1bWVudAorCWB0YWJsZV9sZW4nLgorCVVwZGF0ZSBjYWxsZXIuCisJKHRyaXBsZXRfZGVjb2RlLCBjb21wdXRlX2Jib3gsIHN0b3JlX2xvY2EsIHJlY29uc3RydWN0X2dseWYpOiBNYWtlCisJYGknIHZhcmlhYmxlIHVuc2lnbmVkLgorCShyZWNvbnN0cnVjdF9nbHlwaCk6IFJlbW92ZSBjb25kaXRpb24gd2hpY2ggaXMgYWx3YXlzIGZhbHNlLgorCShyZWNvbnN0cnVjdF9odG1sKTogUmVtb3ZlZCB1bnVzZWQgYXJndW1lbnQgYHRyYW5zZm9ybWVkX3NpemUnLgorCVVwZGF0ZSBjYWxsZXIuCisKKwkqIHNyYy9zZm50L3dvZmYydGFncy5jICh3b2ZmMl9rbm93bl90YWdzKTogUmVtb3ZlIGNvbmRpdGlvbiB3aGljaCBpcworCWFsd2F5cyBmYWxzZS4KKworMjAxOS0wOC0yNyAgTmlraGlsIFJhbWFrcmlzaG5hbiAgPHJhbWFrcmlzaG5hbi5uaWtoaWxAZ21haWwuY29tPgorCisJW3dvZmYyXSBDaGVjayB3aGV0aGVyIGtub3duIHRhZyBpcyBpbiBhcnJheSBib3VuZHMuCisKKwlJZiB0YWJsZSB0YWcgaXMgbm90IDB4M2YsIHdlIGV4cGVjdCBhIHZhbHVlIGJldHdlZW4gMCBhbmQgNjIuICBJZgorCXRoaXMgaXMgbm90IHRoZSBjYXNlLCBleGl0IHdpdGggZXJyb3JzLgorCisJKiBzcmMvc2ZudC9zZndvZmYyL2M6IENoZWNrIHdoZXRoZXIgdGFibGUgdGFnIG1ha2VzIHNlbnNlLgorCisJKiBzcmMvc2ZudC93b2ZmMnRhZ3MuYzogUmV0dXJuIDAgaWYgdGFnIGlzIG91dCBvZiBib3VuZHMuCisKKzIwMTktMDgtMjcgIE5pa2hpbCBSYW1ha3Jpc2huYW4gIDxyYW1ha3Jpc2huYW4ubmlraGlsQGdtYWlsLmNvbT4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5jOiBJbXByb3ZlIHRyYWNlIGNvbW1lbnRzLgorCisJQWRqdXN0IHRyYWNpbmcgbGV2ZWxzIGZvciBjb21tZW50cywgYW5kIG1vcmUgZm9ybWF0dGluZy4KKworMjAxOS0wOC0yNyAgTmlraGlsIFJhbWFrcmlzaG5hbiAgPHJhbWFrcmlzaG5hbi5uaWtoaWxAZ21haWwuY29tPgorCisJW3dvZmYyXSBTdXBwb3J0IGBobXR4JyByZWNvbnN0cnVjdGlvbiB3aGVuIGBnbHlmJyBpcyB1bnRyYW5zZm9ybWVkLgorCisJYHJlY29uc3RydWN0X2htdHgnIHJlcXVpcmVzIGBpbmZvLT54X21pbnMnIGFuZCBgaW5mby0+bnVtX2dseXBocycgdG8KKwlyZWNvbnN0cnVjdCB0aGUgaG10eCB0YWJsZS4gIEluIGNhc2UgZ2x5ZiBpcyBub3QgdHJhbnNmb3JtZWQsIHdlCisJY2FsbCBgZ2V0X3hfbWlucycgd2hpY2ggZG9lcyB0aGUgbmVjZXNzYXJ5IHdvcmsuCisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAoZ2V0X3hfbWlucyk6IE5ldyBmdW5jdGlvbi4KKwkocmVjb25zdHJ1Y3RfZm9udCk6IENhbGwgZ2V0X3hfbWlucy4KKworMjAxOS0wOC0yNyAgTmlraGlsIFJhbWFrcmlzaG5hbiAgPHJhbWFrcmlzaG5hbi5uaWtoaWxAZ21haWwuY29tPgorCisJW3NmbnRdIFN1cHBvcnQgYGZhY2UtPm51bV9mYWNlcycgZm9yIFdPRkYyIGZvbnRzLgorCisJU2V0IGNvcnJlY3QgdmFsdWUgb2YgYGZhY2UtPm51bV9mYWNlcycgZm9yIFdPRkYyIGZvbnRzLiAgVGhpcyBpcworCWJlaW5nIGhhbmRsZWQgc2VwYXJhdGVseSBiZWNhdXNlIHdlIG9ubHkgbG9hZCB0aGUgdGFibGVzIGZvciB0aGUKKwlyZXF1ZXN0ZWQgZm9udCBmYWNlIGluIGB3b2ZmMl9vcGVuX2ZvbnQnIGFuZCBjcmVhdGUgYSBzaW5nbGUtZmFjZQorCXNmbnQgc3RyZWFtLgorCisJVGhlIGZ1bGwgZGlzY3Vzc2lvbiBpcyBhdDoKKworCSAgaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDE5LTA4L21zZzAwMDAwLmh0bWwKKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfb3Blbl9mb250KTogQWRkIHBhcmFtZXRlcgorCWB3b2ZmMl9udW1fZmFjZXMnLgorCShzZm50X2luaXRfZmFjZSk6IEludHJvZHVjZSB2YXJpYWJsZSBgd29mZjJfbnVtX2ZhY2VzJywgYW5kIGNoYW5nZQorCWBmYWNlLT5yb290Lm51bV9mYWNlcycgaWYgYHdvZmYyX251bV9mYWNlcycgaXMgc2V0LgorCisJKiBzcmMvc2ZudC9zZndvZmYyLmMgKHdvZmYyX29wZW5fZm9udCk6IFZhbGlkYXRlIHJlcXVlc3RlZCBmYWNlCisJaW5kZXggYW5kIGhhbmRsZSBuZWdhdGl2ZSBmYWNlIGluZGljZXMuCisKKwkqIHNyYy9zZm50L3Nmd29mZjIuaCAod29mZjJfb3Blbl9mb250KTogQWRkIHBhcmFtZXRlciBgbnVtX2ZhY2VzJyB0bworCWRlY2xhcmF0aW9uLgorCisyMDE5LTA4LTI3ICBOaWtoaWwgUmFtYWtyaXNobmFuICA8cmFtYWtyaXNobmFuLm5pa2hpbEBnbWFpbC5jb20+CisKKwlbd29mZjJdIEltcHJvdmUgbWVtb3J5IGFuZCBlcnJvciBoYW5kbGluZy4KKworCUZyZWUgdXAgbWVtb3J5IGFmdGVyIHVzZSwgYW5kIGltcHJvdmUgZXJyb3IgaGFuZGxpbmcuCisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAocmVjb25zdHJ1Y3RfZm9udCwgd29mZjJfb3Blbl9mb250KTogSW1wbGVtZW50CisJY2hhbmdlcy4KKworMjAxOS0wOC0yNyAgTmlraGlsIFJhbWFrcmlzaG5hbiAgPHJhbWFrcmlzaG5hbi5uaWtoaWxAZ21haWwuY29tPgorCisJW3dvZmYyXSBBdm9pZCB0b28gbWFueSBjYWxscyB0byBgRlRfUkVBTExPQycuCisKKwlXZSBkbyB0aGlzIGJ5IHVzaW5nIGB0b3RhbFNmbnRTaXplJyBhcyBhbiBpbml0aWFsIHJlZmVyZW5jZSwgYW5kCisJZXh0ZW5kaW5nIHRoZSBidWZmZXIgd2hlbiByZXF1aXJlZC4gIFRoaXMgcmVkdWNlcyByZW5kZXJpbmcgdGltZQorCWNvbnNpZGVyYWJseS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC93b2ZmdHlwZXMuaCAoV09GRjJfSGVhZGVyUmVjKTogQWRkCisJYHRvdGFsU2ZudFNpemUnLCByZW5hbWUgYHRvdGFsX3NmbnRfc2l6ZScgdG8gYGFjdHVhbF9zZm50X3NpemUnLgorCisJKiBzcmMvc2ZudC9zZndvZmYyLmMgKHdyaXRlX2J1Zik6IEFkZCBwYXJhbWV0ZXIgYGRzdF9zaXplJyB0byBrZWVwCisJdHJhY2sgb2YgYW5kIHVwZGF0ZSB0b3RhbCBzaXplIG9mIHN0cmVhbS4KKworCShXUklURV9TRk5UX0JVRiwgV1JJVEVfU0ZOVF9CVUZfQVQpOiBNb2RpZnkgbWFjcm9zIGFjY29yZGluZ2x5LgorCisJKHBhZDQsIHN0b3JlX2xvY2EsIHJlY29uc3RydWN0X2dseWYsIHJlY29uc3RydWN0X2htdHgsCisJcmVjb25zdHJ1Y3RfZm9udCk6IFVwZGF0ZSBwYXJhbWV0ZXJzIHRvIGFjY2VwdCBgc2ZudF9zaXplJy4KKworCSh3b2ZmMl9vcGVuX2ZvbnQpOiBBZGQgdmFyaWFibGUgYHNmbnRfc2l6ZScuICBVc2UgV09GRjIgaGVhZGVyIGZpZWxkCisJYHRvdGFsU2ZudFNpemUnIGFzIGluaXRpYWwgcmVmZXJlbmNlIChpZiB2YWx1ZSBtYWtlcyBzZW5zZSkgYW5kCisJYWxsb2NhdGUgYHRvdGFsU2ZudFNpemUnIGJ5dGVzIGZvciB0aGUgc2ZudCBzdHJlYW0uICBgd3JpdGVfYnVmJworCWhhbmRsZXMgcmVhbGxvY2F0aW9uIGlmIGFuZCB3aGVuIHJlcXVpcmVkLiAgQWxzbyByZXNpemUgdGhlIHN0cmVhbQorCXRvIGBhY3R1YWxfc2ZudF9zaXplJyBhZnRlciByZWNvbnN0cnVjdGlvbi4KKworMjAxOS0wOC0yNyAgTmlraGlsIFJhbWFrcmlzaG5hbiAgPHJhbWFrcmlzaG5hbi5uaWtoaWxAZ21haWwuY29tPgorCisJW3dvZmYyXSBSZWNvbnN0cnVjdCBgbG9jYScsIGBobXR4JywgYW5kIHN3YXAgb3V0IHN0cmVhbS4KKworCUFkZCBuZWNlc3NhcnkgZnVuY3Rpb25zIHRvIHJlY29uc3RydWN0IGxvY2EgYW5kIGhtdHggdGFibGVzICh0aGUgdHdvCisJcmVtYWluaW5nIHRhYmxlcyB0aGF0IGNhbiBoYXZlIGEgdHJhbnNmb3JtKS4gIGB3b2ZmMl9vcGVuX2ZvbnQnIGlzCisJbm93IGNhcGFibGUgb2YgbG9hZGluZyBhIHdvZmYyIGZvbnQgZmFjZS4gIFRoaXMgY29kZSBtYXkgc3RpbGwgbmVlZAorCW1vcmUgcmVmaW5pbmcgYW5kIGJldHRlciBtZW1vcnkgbWFuYWdlbWVudC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC93b2ZmdHlwZXMuaCAoV09GRjJfSGVhZGVyUmVjKTogQWRkIHRvdGFsCisJKGZpbmFsKSBzaXplIG9mIHNmbnQgc3RyZWFtLgorCisJKFdPRkYyX0luZm9SZWMpOiBBZGQgaGVhZGVyIGNoZWNrc3VtIHZhbHVlLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9vcGVuX2ZvbnQpOiBDaGFuZ2UgYGZhY2VfaW5zdGFuY2VfaW5kZXgnCisJcGFyYW1ldGVyIHRvIGl0cyBwb2ludGVyIHNvIGl0cyB2YWx1ZSBjYW4gYmUgbW9kaWZpZWQgYnkKKwlgd29mZjJfb3Blbl9mb250Jy4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5jOiAoV1JJVEVfU0ZOVF9CVUZfQVQpOiBOZXcgbWFjcm8gdG8gd3JpdGUgaW50bworCXNmbnQgYnVmZmVyIGF0IGdpdmVuIHBvc2l0aW9uLgorCisJKHdyaXRlX2J1Zik6IEFkZCBwYXJhbWV0ZXIgYGV4dGVuZF9idWYnIHdoaWNoIGFsbG93cyBjYWxsZXIgdG8KKwlzcGVjaWZ5IHdoZXRoZXIgYnVmZmVyIHNob3VsZCBiZSByZWFsbG9jYXRlZCBiZWZvcmUgY29weWluZyBkYXRhLgorCisJKFdSSVRFX1NGTlRfQlVGKTogVXBkYXRlZC4KKworCShwYWQ0LCBzdG9yZV9sb2NhLCByZWNvbnN0cnVjdF9odG14KTogTmV3IGZ1bmN0aW9ucy4KKworCShyZWNvbnN0cnVjdF9nbHlmKTogQ2FsY3VsYXRlIGxvY2EgdmFsdWVzIGFuZCBzdG9yZSB0aGVtLgorCisJKHJlY29uc3RydWN0X2ZvbnQpOiBDYWxsIGByZWNvbnN0cnVjdF9obXR4Jywgd3JpdGUgdGFibGUgcmVjb3JkCisJZW50cmllcywgYW5kIGNhbGN1bGF0ZSB0YWJsZSBjaGVja3N1bXMuICBBbHNvIGNhbGN1bGF0ZSBmb250CisJY2hlY2tzdW0gYW5kIHVwZGF0ZSBgY2hlY2tzdW1BZGp1c3RtZW50JyBlbnRyeSBpbiBoZWFkIHRhYmxlLgorCisJKHdvZmYyX29wZW5fZm9udCk6IE9wZW4gc3RyZWFtIGZvciBzZm50IGJ1ZmZlciwgc3dhcCBvdXQgaW5wdXQKKwlzdHJlYW0gYW5kIHJldHVybi4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5oICh3b2ZmMl9vcGVuX2ZvbnQpOiBNb2RpZnkgcGFyYW1ldGVyIHRvIGFjY2VwdAorCXBvaW50ZXIgdG8gYGZhY2VfaW5kZXgnLgorCisyMDE5LTA4LTI3ICBOaWtoaWwgUmFtYWtyaXNobmFuICA8cmFtYWtyaXNobmFuLm5pa2hpbEBnbWFpbC5jb20+CisKKwlbd29mZjJdIFJlY29uc3RydWN0IHRyYW5zZm9ybWVkIGBnbHlmJyB0YWJsZS4KKworCVJlY29uc3RydWN0IGBnbHlmJyB0YWJsZSBpZiBpdCBpcyB0cmFuc2Zvcm1lZCBpbiB0aGUgdW5jb21wcmVzc2VkCisJdGFibGUgc3RyZWFtLiAgQWxzbyBhZGQgbmVjZXNzYXJ5IHN0cnVjdHVyZXMsIG1hY3JvcyBhbmQgZnVuY3Rpb25zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3dvZmZ0eXBlcy5oIChXT0ZGMl9JbmZvUmVjLAorCVdPRkYyX1N1YnN0cmVhbVJlYywgV09GRjJfUG9pbnRSZWMpOiBOZXcgc3RydWN0dXJlcy4KKwkoV09GRjJfVGFibGVSZWMpOiBzL09yaWdMZW5ndGgvZHN0X2xlbmd0aC8uCisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAoUkVBRF8yNTVVU0hPUlQsIFJFQURfQkFTRTEyOCk6IFVzZQorCWBGVF9TRVRfRVJST1InIHRvIHNldCBpbXBsaWNpdCBgZXJyb3InIHZhcmlhYmxlLgorCisJKFdSSVRFX1NIT1JUKTogTmV3IG1hY3JvLgorCisJKE5fQ09OVE9VUl9TVFJFQU0sIE5fUE9JTlRTX1NUUkVBTSwgRkxBR19TVFJFQU0sIEdMWVBIX1NUUkVBTSwKKwlDT01QT1NJVEVfU1RSRUFNLCBCQk9YX1NUUkVBTSwgSU5TVFJVQ1RJT05fU1RSRUFNKTogTmV3IG1hY3JvcyB0bworCXJlZmVyIHRvIHN1YnN0cmVhbXMgb2YgdGhlIHRyYW5zZm9ybWVkIGBnbHlmJyB0YWJsZXMuCisKKwkoUmVhZDI1NVVTaG9ydCwgUmVhZEJhc2UxMjgpOiBSZXR1cm4gZXJyb3JzIHNldCBieSBgRlRfUkVBRF9YWFgnCisJbWFjcm9zLgorCisJKHdpdGhfc2lnbiwgc2FmZV9pbnRfYWRkaXRpb24pOiBOZXcgZnVuY3Rpb25zIHRvIGFkZCBzaWduIHRvIHZhbHVlcworCWJhc2VkIG9uIGEgZmxhZyBhbmQgcGVyZm9ybSBzYWZlIGFkZGl0aW9uIHJlc3BlY3RpdmVseS4KKworCSh0cmlwbGV0X2RlY29kZSk6IERlY29kZSB2YXJpYWJsZS1sZW5ndGggKGZsYWcsIHhDb29yZGluYXRlLAorCXlDb29yZGluYXRlKSB0cmlwbGV0IGZvciBhIHNpbXBsZSBnbHlwaC4gICBTZWUKKworCSAgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dPRkYyLyN0cmlwbGV0X2RlY29kaW5nCisKKwkoc3RvcmVfcG9pbnRzLCBjb21wdXRlX2Jib3gsIGNvbXBvc3RlR2x5cGhfc2l6ZSwgcmVjb25zdHJ1Y3RfZ2x5Zik6CisJTmV3IGZ1bmN0aW9ucy4KKworCShyZWNvbnN0cnVjdF9mb250KTogQ2FsbCBgcmVjb25zdHJ1Y3RfZ2x5ZicuCisKKwkqIHNyYy9zZm50L3Nmd29mZjIuaDogQWRkIHJlcXVpcmVkIGNvbnN0YW50cy4KKworCSogc3JjL3NmbnQvd29mZjJ0YWdzLmg6IE1vdmUgb3V0IGNvbnN0YW50cyB0byBgc2Z3b2ZmMi5oJy4KKworMjAxOS0wOC0yNyAgTmlraGlsIFJhbWFrcmlzaG5hbiAgPHJhbWFrcmlzaG5hbi5uaWtoaWxAZ21haWwuY29tPgorCisJW3dvZmYyXSBDb3B5IHVuLXRyYW5zZm9ybWVkIHRhYmxlcyB0byBzZm50IHN0cmVhbS4KKworCUNvcHkgdW4tdHJhbnNmb3JtZWQgdGFibGVzIHRvIHRoZSBzZm50IHN0cmVhbS4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5jOiAoV1JJVEVfU0ZOVF9CVUYpOiBOZXcgbWFjcm8uCisJKHdyaXRlX2J1Zik6IE5ldyBmdW5jdGlvbi4gIEV4dGVuZCBtZW1vcnkgb2YgYGRzdCcgYnVmZmVyIGFuZCBjb3B5CisJYnl0ZXMgZnJvbSBgc3JjJy4KKwkoY29tcHV0ZV9VTG9uZ19zdW0pOiBOZXcgZnVuY3Rpb24uICBDYWxjdWxhdGUgY2hlY2tzdW0gb2YgdGFibGUuCisJKHJlY29uc3RydWN0X2ZvbnQpOiBDaGFuZ2UgYEZUX0J5dGUqIHNmbnQnIHRvIGBGVF9CeXRlKioKKwlzZm50X2J5dGVzJy4gIFRoaXMgaGFzIGJlZW4gZG9uZSBiZWNhdXNlIHdlIHJlYWxsb2NhdGUgbWVtb3J5IHRvCisJYHNmbnQnIG11bHRpcGxlIHRpbWVzLCB3aGljaCBtYXkgY2hhbmdlIHRoZSBwb2ludGVyIHZhbHVlIG9mIGBzZm50Jy4KKwlUaGlzIG5ldyBwb2ludGVyIG11c3QgYmUgcHJvcG9nYXRlZCBiYWNrIHRvIHRoZSBjYWxsZXIuICBTYW1lIHJlYXNvbgorCWZvciB1c2luZyBhIGRvdWJsZSBwb2ludGVyIGluIGB3cml0ZV9idWYnLgorCisJKiBzcmMvc2ZudC93b2ZmMnRhZ3MuaCAoV09GRjJfREVGQVVMVF9NQVhfU0laRSk6IE5ldyBtYWNybyB1c2VkIGZvcgorCW92ZXJmbG93IGNoZWNraW5nLgorCisyMDE5LTA4LTI3ICBOaWtoaWwgUmFtYWtyaXNobmFuICA8cmFtYWtyaXNobmFuLm5pa2hpbEBnbWFpbC5jb20+CisKKwlbd29mZjJdIENyZWF0ZSBzdHJlYW0gZm9yIHVuY29tcHJlc3NlZCBidWZmZXIuCisKKwlVbmNvbXByZXNzZWQgYnVmZmVyIGlzIG5vdyBhbiBgRlRfU3RyZWFtJy4KKworCVBlcmZvcm0gYmFzaWMgY2hlY2tzIGFuZCBzdGFydCBpdGVyYXRpbmcgb3ZlciB0YWJsZXMuCisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAoc3RyZWFtX2Nsb3NlLCBmaW5kX3RhYmxlLCByZWFkX251bV9obWV0cmljcyk6CisJTmV3IGZ1bmN0aW9ucy4KKwkocmVjb25zdHJ1Y3RfZm9udCk6IE1vZGlmeSBwYXJhbWV0ZXJzIGFuZCBpdGVyYXRlIG92ZXIgdGFibGVzLgorCSh3b2ZmMl9vcGVuX2ZvbnQpOiBVcGRhdGVkLgorCisyMDE5LTA4LTI3ICBOaWtoaWwgUmFtYWtyaXNobmFuICA8cmFtYWtyaXNobmFuLm5pa2hpbEBnbWFpbC5jb20+CisKKwlbd29mZjJdIEhhbmRsZSBUVENzIGFuZCBzdGFydCByZWNvbnN0cnVjdGluZyBmb250LgorCisJV2UgYGhhbmRsZScgVFRDcyBieSBtb2RpZnlpbmcgdGhlIGBpbmRpY2VzJyBhcnJheSB0byBwb2ludCB0byBvbmx5CisJdGhvc2UgdGFibGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHJlcXVlc3RlZCBgZmFjZV9pbmRleCcuCisKKwlTZXQgYW5kIHVzZSBgbnVtX3RhYmxlcycgaW4gYFdPRkYyX1R0Y0ZvbnQnLgorCisJKiBzcmMvc2ZudC9zZndvZmYyLmMgKHJlY29uc3RydWN0X2ZvbnQpOiBOZXcgZnVuY3Rpb24uCisJKHdvZmYyX29wZW5fZm9udCk6IFN0YXJ0IHJlY29uc3RydWN0aW9uIG9mIGZvbnQuCisKKzIwMTktMDgtMjcgIE5pa2hpbCBSYW1ha3Jpc2huYW4gIDxyYW1ha3Jpc2huYW4ubmlraGlsQGdtYWlsLmNvbT4KKworCVt3b2ZmMl0gR2V0IGtub3duIHRhZ3MgZnJvbSBmdW5jdGlvbi4KKworCUNoYW5nZSBgS25vd25UYWdzJyB0byBhIGZ1bmN0aW9uIChgd29mZjJfa25vd25fdGFncycpLiAgVGhpcyBhdm9pZHMKKwlpbnRyb2R1Y2luZyBhIGdsb2JhbCBjb25zdGFudCBhcnJheS4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUKKwlzcGVjaWZpZWQgaW5kZXggd2l0aG91dCAqYW55KiBjaGVja3MuICBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQKKwlgaW5kZXgnIGlzIHdpdGhpbiBhcnJheSBsaW1pdHMuCisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAod29mZjJfb3Blbl9mb250KTogQ2hhbmdlIGBLbm93blRhZ3NbLi4uXScKKwlub3RhdGlvbiB0byBgd29mZjJfa25vd25fdGFncyggLi4uICApJy4KKworCSogc3JjL3NmbnQvd29mZjJ0YWdzLmM6IFBlcmZvcm0gY2hhbmdlcy4KKworCSogc3JjL3NmbnQvd29mZjJ0YWdzLmg6IFVwZGF0ZSBkZWZpbml0aW9ucy4KKworMjAxOS0wOC0yNyAgTmlraGlsIFJhbWFrcmlzaG5hbiAgPHJhbWFrcmlzaG5hbi5uaWtoaWxAZ21haWwuY29tPgorCisJW3dvZmYyXSBNaW5vci4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5jICh3b2ZmMl91bmNvbXByZXNzKTogQWRkIGVycm9yIG1lc3NhZ2UKKwkod29mZjJfb3Blbl9mb250KTogRnJlZSBgdW5jb21wcmVzc2VkX2J1ZicuCisKKzIwMTktMDgtMjcgIE5pa2hpbCBSYW1ha3Jpc2huYW4gIDxyYW1ha3Jpc2huYW4ubmlraGlsQGdtYWlsLmNvbT4KKworCVt3b2ZmMl0gVW5jb21wcmVzcyBCcm90bGkgc3RyZWFtcyBhbmQgYGZhY2VfaW5kZXgnIHN1cHBvcnQuCisKKwlXT0ZGMiBjb21wcmVzc2VkIHN0cmVhbSBpcyBub3cgdW5jb21wcmVzc2VkIGlmIEJyb3RsaSBpcyBhdmFpbGFibGUuCisJVGhpcyBkYXRhIGlzIHN0b3JlZCBpbiBhIHNlcGFyYXRlIGJ1ZmZlciAodW5jb21wcmVzc2VkX2J1ZikgYmVjYXVzZQorCWl0IGRvZXMgbm90IGNvbnRhaW4gZGlyZWN0IHRhYmxlIGRhdGEuICBDZXJ0YWluIHRhYmxlcyBoYXZlCisJdHJhbnNmb3JtYXRpb25zIGFwcGxpZWQgdG8gdGhlbSwgYW5kIHRoZXkgbXVzdCBiZSByZWNvbnN0cnVjdGVkCisJYmVmb3JlIHdlIGNhbiB3cml0ZSB0aG9zZSB0YWJsZXMgdG8gdGhlIFNGTlQgc3RyZWFtLgorCisJYGZhY2VfaW5kZXgnIGlzIG5vdyBiZWluZyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIgdG8KKwlgd29mZjJfb3Blbl9mb250Jy4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfb3Blbl9mb250KTogQWRkIHBhcmFtZXRlcgorCWBmYWNlX2luc3RhbmNlX2luZGV4Jy4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5jICh3b2ZmMl91bmNvbXByZXNzKTogTmV3IGZ1bmN0aW9uLgorCSh3b2ZmMl9vcGVuX2ZvbnQpOiBDYWxsIGB3b2ZmMl91bmNvbXByZXNzJy4KKwkoY29tcHV0ZV9maXJzdF90YWJsZV9vZmZzZXQpOiBGaXggcmV0dXJuIHR5cGUuCisKKwkqIHNyYy9zZm50L3Nmd29mZjIuaCAod29mZjJfb3Blbl9mb250KTogTW9kaWZ5IGRlY2xhcmF0aW9uLgorCisyMDE5LTA4LTI3ICBOaWtoaWwgUmFtYWtyaXNobmFuICA8cmFtYWtyaXNobmFuLm5pa2hpbEBnbWFpbC5jb20+CisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IENoYW5nZSBhcmd1bWVudCBuYW1lIHRvIGBicm90bGknLgorCisyMDE5LTA4LTI3ICBOaWtoaWwgUmFtYWtyaXNobmFuICA8cmFtYWtyaXNobmFuLm5pa2hpbEBnbWFpbC5jb20+CisKKwlBZGQgQnJvdGxpIGRlcGVuZGVuY3kgYW5kIHJlcXVpcmVkIGNoZWNrcy4KKworCUJyb3RsaSBpcyByZXF1aXJlZCBmb3IgZGVjb21wcmVzc2luZyBXT0ZGMiBmb250IGRpcmVjdG9yeSBzdHJlYW1zLgorCVRoZSBsaWJyYXJ5IGlzIHRodXMgYmVpbmcgYWRkZWQgYXMgYW4gb3B0aW9uYWwgZGVwZW5kZW5jeSBmb3IKKwlGcmVlVHlwZS4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogQWRkIGNoZWNrcyBmb3IgYGxpYmJyb3RsaWRlYycuCisJKFJFUVVJUkVTX1BSSVZBVEUsIExJQlNfUFJJVkFURSwgTElCU1NUQVRJQ19DT05GSUcpOiBVcGRhdGVkLgorCisJKiBkZXZlbC9mdG9wdGlvbi5oLCBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCisJKEZUX0NPTkZJR19PUFRJT05fVVNFX0JST1RMSSk6IE5ldyBtYWNyby4KKworMjAxOS0wOC0yNyAgTmlraGlsIFJhbWFrcmlzaG5hbiAgPHJhbWFrcmlzaG5hbi5uaWtoaWxAZ21haWwuY29tPgorCisJW3dvZmYyXSBXcml0ZSBTRk5UIE9mZnNldCB0YWJsZS4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5jIChXUklURV9VU0hPUlQsIFdSSVRFX1VMT05HKTogTmV3IG1hY3Jvcy4KKwkoY29tcGFyZV90YWdzKTogTmV3IGZ1bmN0aW9uLgorCSh3b2ZmMl9vcGVuX2ZvbnQpOiBJbXBsZW1lbnQgaXQuCisKKzIwMTktMDgtMjcgIE5pa2hpbCBSYW1ha3Jpc2huYW4gIDxyYW1ha3Jpc2huYW4ubmlraGlsQGdtYWlsLmNvbT4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5jOiAjdW5kZWYgbWFjcm9zLgorCisyMDE5LTA4LTI3ICBOaWtoaWwgUmFtYWtyaXNobmFuICA8cmFtYWtyaXNobmFuLm5pa2hpbEBnbWFpbC5jb20+CisKKwlbd29mZjJdIFJlYWQgdGFibGUgYW5kIGNvbGxlY3Rpb24gZGlyZWN0b3J5LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3dvZmZ0eXBlcy5oIChXT0ZGMl9UdGNGb250UmVjKTogTmV3CisJc3RydWN0dXJlLgorCShXT0ZGMl9IZWFkZXJSZWMpOiBBZGQgbW9yZSBmaWVsZHMuCisKKwkqIHNyYy9zZm50L3Nmd29mZjIuYyAoUkVBRF8yNTVVU0hPUlQsIFJFQURfQkFTRTEyOCwgUk9VTkQ0KTogTmV3CisJbWFjcm9zLgorCShSZWFkMjU1VVNob3J0LCBDb2xsZWN0aW9uSGVhZGVyU2l6ZSwgY29tcHV0ZV9maXJzdF90YWJsZV9vZmZzZXQpOgorCU5ldyBmdW5jdGlvbnMuCisJKFJlYWRCYXNlMTI4KTogVXNlIGBGVF9SRUFEX0JZVEUnLgorCSh3b2ZmMl9vcGVuX2ZvbnQpOiBBZGQgZnVuY3Rpb25hbGl0eSB0byByZWFkIHRhYmxlIGRpcmVjdG9yeSBhbmQKKwljb2xsZWN0aW9uIGRpcmVjdG9yeSAoaWYgcHJlc2VudCkuCisKKzIwMTktMDgtMjcgIE5pa2hpbCBSYW1ha3Jpc2huYW4gIDxyYW1ha3Jpc2huYW4ubmlraGlsQGdtYWlsLmNvbT4KKworCVtzZm50XSBJbmNsdWRlIGB3b2ZmMnRhZ3MuYycgZm9yIGJ1aWxkaW5nLgorCisJKiBzcmMvc2ZudC9ydWxlcy5tayAoU0ZOVF9EUlZfU1JDKTogQWRkIGB3b2ZmMnRhZ3MuYycuCisKKwkqIHNyYy9zZm50L3NmbnQuYzogSW5jbHVkZSBgd29mZjJ0YWdzLmMnLgorCisyMDE5LTA4LTI3ICBOaWtoaWwgUmFtYWtyaXNobmFuICA8cmFtYWtyaXNobmFuLm5pa2hpbEBnbWFpbC5jb20+CisKKwlbc2ZudF0gQWRkIFdPRkYyIGNvbnN0YW50cy4KKworCUFkZCBjb25zdGFudHMgcmVxdWlyZWQgZm9yIFdPRkYyLCBhbmQga25vd24gdGFibGUgdGFncyBhcyBkZWZpbmVkIGluCisJdGhlIHNwZWNpZmljYXRpb24uICBTZWUKKworCSAgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dPRkYyLyN0YWJsZV9kaXJfZm9ybWF0CisKKwlmb3IgZGV0YWlscy4KKworCSogc3JjL3NmbnQvd29mZjJ0YWdzLmMsIHNyYy9zZm50L3dvZmYydGFncy5oOiBOZXcgZmlsZXMuCisKKzIwMTktMDgtMjcgIE5pa2hpbCBSYW1ha3Jpc2huYW4gIDxyYW1ha3Jpc2huYW4ubmlraGlsQGdtYWlsLmNvbT4KKworCVtzZm50XSBSZWFkIFdPRkYgMiBoZWFkZXIuCisKKwlDaGVjayBmb3IgV09GRjIgdGFnLCBjYWxsIGB3b2ZmMl9vcGVuX2ZvbnQnLCBhbmQgaW1wbGVtZW50IGl0IHRvIHJlYWQKKwloZWFkZXIgYWNjb3JkaW5nIHRvIHNwZWNpZmljYXRpb24uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oOiBBZGQgYHNmd29mZjIuYycuCisKKwkqIHNyYy9zZm50L3J1bGVzLm1rIChTRk5UX0RSVl9TUkMpOiBBZGQgYHNmd29mZjIuYycuCisKKwkqIHNyYy9zZm50L3NmbnQuYzogSW5jbHVkZSBgc2Z3b2ZmMi5jJy4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfb3Blbl9mb250KTogQ2hlY2sgZm9yIGB3T0YyJyB0YWcgYW5kIGNhbGwKKwlgd29mZjJfb3Blbl9mb250Jy4KKworCSogc3JjL3NmbnQvc2Z3b2ZmMi5jLCBzcmMvc2ZudC9zZndvZmYyLmg6IE5ldyBmaWxlcy4KKworMjAxOS0wOC0yNyAgTmlraGlsIFJhbWFrcmlzaG5hbiAgPHJhbWFrcmlzaG5hbi5uaWtoaWxAZ21haWwuY29tPgorCisJQWRkIHN0cnVjdHVyZXMgZm9yIFdPRkYyLgorCisJQWRkIHN0cnVjdHVyZXMgYW5kIG1hY3JvIGZvciBXT0ZGIDIgaGVhZGVyIGFuZCB0YWJsZSBkaXJlY3RvcnkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvd29mZnR5cGVzLmggKFdPRkYyX0hlYWRlclJlYywKKwlXT0ZGMl9UYWJsZVJlY18pOiBOZXcgc3RydWN0dXJlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaCAoVFRBR193T0YyKTogTmV3IG1hY3JvLgorCisyMDE5LTA4LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wc2F1eC9jZmZkZWNvZGUuYyAoY2ZmX29wZXJhdG9yX3NlYWMpOiBGaXggbnVtZXJpYyBvdmVyZmxvdy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTE2NDcwCisKKzIwMTktMDgtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0eXBlMV0gRml4IGBGVF9HZXRfVmFyX0F4aXNfRmxhZ3MnICgjNTY4MDQpLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKFQxX0dldF9NTV9WYXIpOiBBbGxvY2F0ZSBzcGFjZSBmb3IgYXhpcyBmbGFncy4KKwlBbHNvIHJlbW92ZSByZWR1bmRhbnQgYXNzaWdubWVudC4KKworMjAxOS0wNy0yNCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvYmFzZS9mdGJib3guYyAoY3ViaWNfcGVhayk6IFNhbml0aXplIGxlZnQgc2hpZnQgKCM1NjU4NikuCisKKzIwMTktMDctMjIgIFdlaXlpIFd1ICA8dzF3MnkzQGdtYWlsLmNvbT4KKworCSogc3JjL2NpZC9jaWRsb2FkLmMgKGNpZF9oZXhfdG9fYmluYXJ5KTogRml4IHR5cG8gKCM1NjY1MykuCisKKzIwMTktMDctMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50LCB3aW5mb250c10gQXZvaWQgbWVtb3J5IGxlYWtzIGluIGNhc2Ugb2YgZXJyb3IgKCM1NjU4NykuCisKKwkqIHNyYy9zZm50L3Nmd29mZi5jICh3b2ZmX29wZW5fZm9udCk6IENhbGwgYEZUX0ZSQU1FX0VYSVQnIGluIGNhc2UKKwlvZiBlcnJvci4KKworCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jIChmbnRfZmFjZV9nZXRfZGxsX2ZvbnQpOiBEaXR0by4KKworMjAxOS0wNy0xMiAgQmVuIFdhZ25lciAgPGJ1bmdlbWFuQGdvb2dsZS5jb20+CisKKwlQcm9wZXJseSBoYW5kbGUgcGhhbnRvbSBwb2ludHMgZm9yIHZhcmlhdGlvbiBmb250cyAoIzU2NjAxKS4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgpOiBTY2FsZSBwaGFudG9tCisJcG9pbnRzIGlmIEhWQVIgYW5kL29yIFZWQVIgaXMgcHJlc2VudC4KKworMjAxOS0wNy0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BzYXV4XSAoMi8yKSBIYW5kbGUgZm9udHMgdGhhdCB1c2UgU0VBQyBmb3IgbGlnYXR1cmVzICgjNTY1ODApLgorCisJVGhlIHNhbWUgYXMgcHJldmlvdXMgY29tbWl0IGJ1dCBmb3IgdGhlIG9sZCBlbmdpbmUuCisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MW9wZXJhdG9yX3NlYWMpOiBJbXBsZW1lbnQgaXQuCisKKzIwMTktMDctMDQgIENocmlzIExpZGRlbGwgPGNocmlzLmxpZGRlbGxAYXJ0aWZleC5jb20+CisKKwlbcHNhdXhdICgxLzIpIEhhbmRsZSBmb250cyB0aGF0IHVzZSBTRUFDIGZvciBsaWdhdHVyZXMgKCM1NjU4MCkuCisKKwlBcyBvcmlnaW5hbGx5IGludGVuZGVkLCBhIFR5cGUgMSBTRUFDIGNoYXJzdHJpbmcgd291bGQgYmUgdXNlZCBmb3IKKwlhbiBhY2NlbnRlZCBnbHlwaCAobGlrZSBgYWNhcm9uJyBvciBgdXVtbGF1dCcpLCB3aGVyZSB0aGUgYWR2YW5jZQorCXdpZHRoIG9mIHRoZSBTRUFDIGdseXBoIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGBiYXNlJyBnbHlwaAorCShsaWtlIGBhJyBvciBgdScpLiAgSW4gdGhpcyBjYXNlIGl0IGlzIG5vdCB1bmNvbW1vbiBmb3IgdGhlIFNFQUMKKwlnbHlwaCB0byBub3QgdXNlIGFuIChIKVNCVyBvcGNvZGUgb2YgaXRzIG93biBidXQgdG8gcmVseSBvbiB0aGUKKwl2YWx1ZSBmcm9tIHRoZSBiYXNlIGdseXBoLgorCisJSG93ZXZlciwgb3V0LW9mLXNwZWMgZm9udHMgYWxzbyB1c2UgU0VBQyBnbHlwaHMgZm9yIGxpZ2F0dXJlcyAobGlrZQorCWBvZScgb3IgYGZpJyksIGFuZCBpbiB0aG9zZSBjYXNlcyB0aGUgb3ZlcmFsbCBhZHZhbmNlIHdpZHRoIGlzCisJZ3JlYXRlciB0aGFuIHRoYXQgb2YgdGhlIGBiYXNlJyBnbHlwaC4gIEZvciB0aGlzIHJlYXNvbiB3ZSBoYXZlIHRvCisJYWxsb3cgdGhhdCB0aGUgU0VBQyBnbHlwaCBjYW4gaGF2ZSBhbiAoSClTQlcgdmFsdWUgb2YgaXRzIG93biwgYW5kCisJaWYgaXQgaGFzLCByZXRhaW4gdGhpcyB2YWx1ZSwgcmF0aGVyIHRoYW4gdGhlIG9uZSBmcm9tIHRoZSBiYXNlCisJZ2x5cGguCisKKwkqIHNyYy9wc2F1eC9wc2ludHJwLmMgKGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcpIDxjZjJfZXNjU0VBQz46CisJSW1wbGVtZW50IGl0LgorCiAyMDE5LTA3LTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CiAKIAkqIFZlcnNpb24gMi4xMC4xIHJlbGVhc2VkLgpAQCAtODgsNyArMjAzNCw3IEBACiAJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kYXBpLmggKEZUX0RlYnVnSG9va19GdW5jKTogUmV0dXJuIGVycm9yLgogCiAJRml4IGEgd2FybmluZyBieSBhZGRpbmcgYSByZXR1cm4gdmFsdWUgYXMgaW4gYFRUX1J1bklucycsCi0Jd2hpY2ggc2hvdWxkIG5vdCBiZSBhIGNvbXBhdGliaWxpdHkgaXNzdWUuIAorCXdoaWNoIHNob3VsZCBub3QgYmUgYSBjb21wYXRpYmlsaXR5IGlzc3VlLgogCiAyMDE5LTA2LTExICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CiAKQEAgLTk5LDcgKzIwNDUsNyBAQAogCVtnemlwXSBBZGQgc3VwcG9ydCBmb3IgYGd6aXAnIGVuY29kZWQgaGVhZGVyLgogCiAJKiBzcmMvZ3ppcC9mdGd6aXAuYyAoRlRfR3ppcF9VbmNvbXByZXNzKTogTW9kaWZ5IHRoZSB0aGUgY2FsbCB0bwotCWBpbmZsYXRlSW5pdDInIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBgZ3ppcCcgZW5jb2RlZCBoZWFkZXJzLiAKKwlgaW5mbGF0ZUluaXQyJyB0byBlbmFibGUgc3VwcG9ydCBmb3IgYGd6aXAnIGVuY29kZWQgaGVhZGVycy4KIAogMjAxOS0wNi0xMCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgogCkBAIC0yOTEyLDcgKzQ4NTgsNyBAQAogMjAxOC0wNS0xMyAgU2hhbyBZdSBaaGFuZyAgPHNoYW96aGFuZ0BmYi5jb20+CiAJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KIAotCVtzZm50XSBQcmVsaW1pbmFyeSBzdXBwb3J0IG9mIGNvbG91cmVkIGxheWVyIG91dGxpbmVzICgjNDQ2ODkpLgorCVtzZm50XSBQcmVsaW1pbmFyeSBzdXBwb3J0IG9mIGNvbG9yZWQgbGF5ZXIgb3V0bGluZXMgKCM0NDY4OSkuCiAKIAlUaGlzIGNvbW1pdCBlbmFibGVzIE9wZW5UeXBlJ3MgQ09MUi9DUEFMIHRhYmxlIGhhbmRsaW5nOyBhIHR5cGljYWwKIAlhcHBsaWNhdGlvbiBhcmUgY29sb3IgZW1vamlzIHRoYXQgY2FuIGJlIHNjYWxlZCB0byBhbnkgc2l6ZS4KQEAgLTMxMDQsNyArNTA1MCw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgYnkKK0NvcHlyaWdodCAoQykgMjAxOC0yMDIwIGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuMjAgYi9DaGFuZ2VMb2cuMjAKaW5kZXggYTU4OWUxMy4uOWY4MTkxNCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nLjIwCisrKyBiL0NoYW5nZUxvZy4yMApAQCAtMjU5Nyw3ICsyNTk3LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKEMpIDIwMDAtMjAxOSBieQorQ29weXJpZ2h0IChDKSAyMDAwLTIwMjAgYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy4yMSBiL0NoYW5nZUxvZy4yMQppbmRleCBlYTg4OWVlLi5mMzZmNWI3IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cuMjEKKysrIGIvQ2hhbmdlTG9nLjIxCkBAIC00Nzk5LDExICs0Nzk5LDExIEBACiAJKGNoYXB0ZXJfaW50ZXIsIGNoYXB0ZXJfZm9vdGVyKTogQWRkIDxsaT4gYW5kIHVzZSBzcGVjaWFsIDx1bD4KIAljbGFzcy4KIAlVc2UgZG91YmxlIHF1b3RlcyBhcm91bmQgdGFibGUgd2lkdGhzIGdpdmVuIGluIHBlcmNlbnQuCi0JKGtleXdvcmRfcHJlZml4LCBrZXl3b3JkX3N1ZmZpeCk6IERvbid0IGNoYW5nZSBmb250IGNvbG91ciBkaXJlY3RseQorCShrZXl3b3JkX3ByZWZpeCwga2V5d29yZF9zdWZmaXgpOiBEb24ndCBjaGFuZ2UgZm9udCBjb2xvciBkaXJlY3RseQogCWJ1dCB1c2UgYSBuZXcgPHNwYW4+IGNsYXNzLgogCShzZWN0aW9uX3N5bm9wc2lzX2hlYWRlciwgc2VjdGlvbl9zeW5vcHNpc19mb290ZXIpOiBEb24ndCBjaGFuZ2UKLQljb2xvdXIuCi0JKGNvZGVfaGVhZGVyLCBjb2RlX2Zvb3Rlcik6IERvbid0IGNoYW5nZSBmb250IGNvbG91ciBkaXJlY3RseSBidXQKKwljb2xvci4KKwkoY29kZV9oZWFkZXIsIGNvZGVfZm9vdGVyKTogRG9uJ3QgY2hhbmdlIGZvbnQgY29sb3IgZGlyZWN0bHkgYnV0CiAJdXNlIGEgc3BlY2lhbCA8cHJlPiBjbGFzcy4KIAkocHJpbnRfaHRtbF9maWVsZCk6IDx0cj4gZ2V0cyB0aGUgYHZhbGlnbicgYXR0cmlidXRlLCBub3QgPHRhYmxlPi4KIAkocHJpbnRfaHRtbF9maWVsZF9saXN0KTogRGl0dG8uCkBAIC05NDIyLDcgKzk0MjIsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CitDb3B5cmlnaHQgKEMpIDIwMDItMjAyMCBieQogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogCiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLjIyIGIvQ2hhbmdlTG9nLjIyCmluZGV4IGZlYWFiODYuLjg2NjYyZjYgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZy4yMgorKysgYi9DaGFuZ2VMb2cuMjIKQEAgLTI4MjEsNyArMjgyMSw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkKK0NvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuMjMgYi9DaGFuZ2VMb2cuMjMKaW5kZXggZjEzNzI1Mi4uNGM4MDUwNCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nLjIzCisrKyBiL0NoYW5nZUxvZy4yMwpAQCAtNzkzMiw3ICs3OTMyLDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBieQorQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy4yNCBiL0NoYW5nZUxvZy4yNAppbmRleCA1MjAwNGRiLi4xN2U5OGM0IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cuMjQKKysrIGIvQ2hhbmdlTG9nLjI0CkBAIC02MzQ0LDcgKzYzNDQsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAoQykgMjAxMC0yMDE5IGJ5CitDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBieQogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogCiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLjI1IGIvQ2hhbmdlTG9nLjI1CmluZGV4IGM0YTNjNTMuLjZlMDQ0MjcgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZy4yNQorKysgYi9DaGFuZ2VMb2cuMjUKQEAgLTUxNDUsNyArNTE0NSw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgYnkKK0NvcHlyaWdodCAoQykgMjAxMy0yMDIwIGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuMjYgYi9DaGFuZ2VMb2cuMjYKaW5kZXggNWUwOTExYy4uYTRmYzA2MCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nLjI2CisrKyBiL0NoYW5nZUxvZy4yNgpAQCAtNTY5NSw3ICs1Njk1LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBieQorQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy4yNyBiL0NoYW5nZUxvZy4yNwppbmRleCBlOWQxZWMxLi5jNTllZDdiIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cuMjcKKysrIGIvQ2hhbmdlTG9nLjI3CkBAIC0yMDkwLDcgKzIwOTAsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAoQykgMjAxNi0yMDE5IGJ5CitDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBieQogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogCiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLjI4IGIvQ2hhbmdlTG9nLjI4CmluZGV4IGMyODhiYjkuLmIxN2E3NTEgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZy4yOAorKysgYi9DaGFuZ2VMb2cuMjgKQEAgLTMxMjAsNyArMzEyMCw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgYnkKK0NvcHlyaWdodCAoQykgMjAxNi0yMDIwIGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuMjkgYi9DaGFuZ2VMb2cuMjkKaW5kZXggMjEzNDA3MS4uMjUxYzA1NiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nLjI5CisrKyBiL0NoYW5nZUxvZy4yOQpAQCAtMjMzNiw3ICsyMzM2LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKEMpIDIwMTctMjAxOSBieQorQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL0phbWZpbGUgYi9KYW1maWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2I0ZDU4Li4wMDAwMDAwCi0tLSBhL0phbWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMgKzAsMCBAQAotIyBGcmVlVHlwZSAyIHRvcCBKYW1maWxlLgotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQotIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCi0jCi0jIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCi0jIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKLSMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKLSMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKLSMgZnVsbHkuCi0KLQotIyBUaGUgSERSTUFDUk8gaXMgYWxyZWFkeSBkZWZpbmVkIGluIEZUSmFtIGFuZCBpcyB1c2VkIHRvIGFkZAotIyB0aGUgY29udGVudCBvZiBjZXJ0YWluIG1hY3JvcyB0byB0aGUgbGlzdCBvZiBpbmNsdWRlZCBoZWFkZXIKLSMgZmlsZXMuCi0jCi0jIFdlIGNhbiBjb21waWxlIEZyZWVUeXBlIDIgd2l0aCBjbGFzc2ljIEphbSBob3dldmVyIHRoYW5rcyB0bwotIyB0aGUgZm9sbG93aW5nIGNvZGUKLSMKLWlmICEgJChKQU1fVE9PTFNFVCkKLXsKLSAgcnVsZSBIRFJNQUNSTwotICB7Ci0gICAgIyBub3RoaW5nCi0gIH0KLX0KLQotCi0jIFdlIG5lZWQgdG8gaW52b2tlIGEgU3ViRGlyIHJ1bGUgaWYgdGhlIEZUMiBzb3VyY2UgZGlyZWN0b3J5IHRvcCBpcyBub3QgdGhlCi0jIGN1cnJlbnQgZGlyZWN0b3J5LiAgVGhpcyBhbGxvd3MgdXMgdG8gYnVpbGQgRnJlZVR5cGUgMiBhcyBwYXJ0IG9mIGEgbGFyZ2VyCi0jIHByb2plY3QgZWFzaWx5LgotIwotaWYgJChGVDJfVE9QKSAhPSAkKERPVCkKLXsKLSAgU3ViRGlyICBGVDJfVE9QIDsKLX0KLQotCi0jIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGRlZmluZSB0aGUgaW5jbHVkZSBkaXJlY3RvcnksIHRoZSBzb3VyY2UgZGlyZWN0b3J5LAotIyBhbmQgdGhlIGZpbmFsIGxpYnJhcnkgbmFtZSAod2l0aG91dCBsaWJyYXJ5IGV4dGVuc2lvbnMpLiAgVGhleSBjYW4gYmUKLSMgcmVwbGFjZWQgYnkgb3RoZXIgZGVmaW5pdGlvbnMgd2hlbiB0aGUgbGlicmFyeSBpcyBjb21waWxlZCBhcyBwYXJ0IG9mCi0jIGEgbGFyZ2VyIHByb2plY3QuCi0jCi0KLSMgTmFtZSBvZiBGcmVlVHlwZSBpbmNsdWRlIGRpcmVjdG9yeSBkdXJpbmcgY29tcGlsYXRpb24uCi0jIFRoaXMgaXMgcmVsYXRpdmUgdG8gRlQyX1RPUC4KLSMKLUZUMl9JTkNMVURFX0RJUiA/PSBpbmNsdWRlIDsKLQotIyBOYW1lIG9mIEZyZWVUeXBlIHNvdXJjZSBkaXJlY3RvcnkgZHVyaW5nIGNvbXBpbGF0aW9uLgotIyBUaGlzIGlzIHJlbGF0aXZlIHRvIEZUMl9UT1AuCi0jCi1GVDJfU1JDX0RJUiA/PSBzcmMgOwotCi0jIE5hbWUgb2YgZmluYWwgbGlicmFyeSwgd2l0aG91dCBleHRlbnNpb24uCi0jCi1GVDJfTElCID89ICQoTElCUFJFRklYKWZyZWV0eXBlIDsKLQotCi0jIERlZmluZSBGVDJfQlVJTERfSU5DTFVERSB0byBwb2ludCB0byB5b3VyIGJ1aWxkLXNwZWNpZmljIGRpcmVjdG9yeS4KLSMgVGhpcyBpcyBwcmVwZW5kZWQgdG8gRlQyX0lOQ0xVREVfRElSLiAgSXQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeQotIyB0aGUgbG9jYXRpb24gb2YgYSBjdXN0b20gPGZ0MmJ1aWxkLmg+IHdoaWNoIHdpbGwgcG9pbnQgdG8gY3VzdG9tCi0jIHZlcnNpb25zIG9mIGBmdG1vZHVsZS5oJyBhbmQgYGZ0b3B0aW9uLmgnLCBmb3IgZXhhbXBsZS4KLSMKLUZUMl9CVUlMRF9JTkNMVURFID89IDsKLQotIyBUaGUgbGlzdCBvZiBtb2R1bGVzIHRvIGNvbXBpbGUgb24gYW55IGdpdmVuIGJ1aWxkIG9mIHRoZSBsaWJyYXJ5LgotIyBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgY29udGFpbiBfYWxsXyBtb2R1bGVzIGRlZmluZWQgaW4gRlQyX1NSQ19ESVIuCi0jCi0jIElNUE9SVEFOVDogWW91J2xsIG5lZWQgdG8gY2hhbmdlIHRoZSBjb250ZW50IG9mIGBmdG1vZHVsZS5oJyBhcyB3ZWxsCi0jICAgICAgICAgICAgaWYgeW91IG1vZGlmeSB0aGlzIGxpc3Qgb3IgcHJvdmlkZSB5b3VyIG93bi4KLSMKLUZUMl9DT01QT05FTlRTID89IGF1dG9maXQgICAgIyBhdXRvLWZpdHRlcgotICAgICAgICAgICAgICAgICAgYmFzZSAgICAgICAjIGJhc2UgY29tcG9uZW50IChwdWJsaWMgQVBJcykKLSAgICAgICAgICAgICAgICAgIGJkZiAgICAgICAgIyBCREYgZm9udCBkcml2ZXIKLSAgICAgICAgICAgICAgICAgIGJ6aXAyICAgICAgIyBzdXBwb3J0IGZvciBiemlwMi1jb21wcmVzc2VkIFBDRiBmb250Ci0gICAgICAgICAgICAgICAgICBjYWNoZSAgICAgICMgY2FjaGUgc3ViLXN5c3RlbQotICAgICAgICAgICAgICAgICAgY2ZmICAgICAgICAjIENGRi9DRUYgZm9udCBkcml2ZXIKLSAgICAgICAgICAgICAgICAgIGNpZCAgICAgICAgIyBQb3N0U2NyaXB0IENJRC1rZXllZCBmb250IGRyaXZlcgotICAgICAgICAgICAgICAgICAgZ3ppcCAgICAgICAjIHN1cHBvcnQgZm9yIGd6aXAtY29tcHJlc3NlZCBQQ0YgZm9udAotICAgICAgICAgICAgICAgICAgbHp3ICAgICAgICAjIHN1cHBvcnQgZm9yIExaVy1jb21wcmVzc2VkIFBDRiBmb250Ci0gICAgICAgICAgICAgICAgICBwY2YgICAgICAgICMgUENGIGZvbnQgZHJpdmVyCi0gICAgICAgICAgICAgICAgICBwZnIgICAgICAgICMgUEZSL1RydWVEb2MgZm9udCBkcml2ZXIKLSAgICAgICAgICAgICAgICAgIHBzYXV4ICAgICAgIyBjb21tb24gUG9zdFNjcmlwdCByb3V0aW5lcyBtb2R1bGUKLSAgICAgICAgICAgICAgICAgIHBzaGludGVyICAgIyBQb3N0U2NyaXB0IGhpbnRlciBtb2R1bGUKLSAgICAgICAgICAgICAgICAgIHBzbmFtZXMgICAgIyBQb3N0U2NyaXB0IG5hbWVzIGhhbmRsaW5nCi0gICAgICAgICAgICAgICAgICByYXN0ZXIgICAgICMgbW9ub2Nocm9tZSByYXN0ZXJpemVyCi0gICAgICAgICAgICAgICAgICBzZm50ICAgICAgICMgU0ZOVC1iYXNlZCBmb3JtYXQgc3VwcG9ydCByb3V0aW5lcwotICAgICAgICAgICAgICAgICAgc21vb3RoICAgICAjIGFudGktYWxpYXNlZCByYXN0ZXJpemVyCi0gICAgICAgICAgICAgICAgICB0cnVldHlwZSAgICMgVHJ1ZVR5cGUgZm9udCBkcml2ZXIKLSAgICAgICAgICAgICAgICAgIHR5cGUxICAgICAgIyBQb3N0U2NyaXB0IFR5cGUgMSBmb250IGRyaXZlcgotICAgICAgICAgICAgICAgICAgdHlwZTQyICAgICAjIFBvc3RTY3JpcHQgVHlwZSA0MiAoZW1iZWRkZWQgVHJ1ZVR5cGUpIGRyaXZlcgotICAgICAgICAgICAgICAgICAgd2luZm9udHMgICAjIFdpbmRvd3MgRk9OL0ZOVCBmb250IGRyaXZlcgotICAgICAgICAgICAgICAgICAgOwotCi0KLSMgRG9uJ3QgdG91Y2guCi0jCi1GVDJfSU5DTFVERSAgPSAkKEZUMl9CVUlMRF9JTkNMVURFKQotICAgICAgICAgICAgICAgWyBGVDJfU3ViRGlyICQoRlQyX0lOQ0xVREVfRElSKSBdIDsKLQotRlQyX1NSQyAgICAgID0gWyBGVDJfU3ViRGlyICQoRlQyX1NSQ19ESVIpIF0gOwotCi0jIExvY2F0aW9uIG9mIEFQSSBSZWZlcmVuY2UgRG9jdW1lbnRhdGlvbgotIwotaWYgJChET0NfRElSKQotewotICBET0NfRElSID0gJChET0NESVI6VCkgOwotfQotZWxzZQotewotICBET0NfRElSID0gZG9jcy9yZWZlcmVuY2UgOwotfQotCi0KLSMgT25seSB1c2VkIGJ5IEZyZWVUeXBlIGRldmVsb3BlcnMuCi0jCi1pZiAkKERFQlVHX0hJTlRFUikKLXsKLSAgQ0NGTEFHUyArPSAtRERFQlVHX0hJTlRFUiA7Ci19Ci0KLQotIyBXZSBuZWVkIGBpbmNsdWRlJyBpbiB0aGUgY3VycmVudCBpbmNsdWRlIHBhdGggaW4gb3JkZXIgdG8KLSMgY29tcGlsZSBhbnkgcGFydCBvZiBGcmVlVHlwZSAyLgotIwotSERSUyArPSAkKEZUMl9JTkNMVURFKSA7Ci0KLQotIyBXZSBuZWVkIHRvICNkZWZpbmUgRlQyX0JVSUxEX0xJQlJBUlkgc28gdGhhdCBvdXIgc291cmNlcyBmaW5kIHRoZQotIyBpbnRlcm5hbCBoZWFkZXJzCi0jCi1DQ0ZMQUdTICs9IC1ERlQyX0JVSUxEX0xJQlJBUlkgOwotCi0jIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgaW5kaXZpZHVhbCBzb3VyY2UgZmlsZXMKLSMgZm9yIGVhY2ggRnJlZVR5cGUgMiBtb2R1bGUuICBUaGlzIGlzIG9ubHkgdXNlZnVsIGR1cmluZyBkZXZlbG9wbWVudCwgYW5kCi0jIGlzIGJldHRlciBkZWZpbmVkIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGFueXdheSEKLSMKLSMgRlQyX01VTFRJID0gdHJ1ZSA7Ci0KLQotIyBUaGUgZmlsZXMgYGZ0aGVhZGVyLmgnLCBgaW50ZXJuYWwuaCcsIGFuZCBgZnRzZXJ2LmgnIGFyZSB1c2VkIHRvIGRlZmluZQotIyBtYWNyb3MgdGhhdCBhcmUgbGF0ZXIgdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzLiAgVGhleSBuZWVkIHRvIGJlIHBhcnNlZAotIyBpbiBvcmRlciB0byByZWNvcmQgdGhlc2UgZGVmaW5pdGlvbnMuCi0jCi1IRFJNQUNSTyAgWyBGVDJfU3ViRGlyICAkKEZUMl9JTkNMVURFX0RJUikgZnJlZXR5cGUgY29uZmlnIGZ0aGVhZGVyLmggXSA7Ci1IRFJNQUNSTyAgWyBGVDJfU3ViRGlyICAkKEZUMl9JTkNMVURFX0RJUikgZnJlZXR5cGUgaW50ZXJuYWwgaW50ZXJuYWwuaCBdIDsKLUhEUk1BQ1JPICBbIEZUMl9TdWJEaXIgICQoRlQyX0lOQ0xVREVfRElSKSBmcmVldHlwZSBpbnRlcm5hbCBmdHNlcnYuaCBdIDsKLQotCi0jIE5vdyBpbmNsdWRlIHRoZSBKYW1maWxlIGluIGBmcmVldHlwZTIvc3JjJywgdXNlZCB0byBkcml2ZSB0aGUgY29tcGlsYXRpb24KLSMgb2YgZWFjaCBGcmVlVHlwZSAyIGNvbXBvbmVudCBhbmQvb3IgbW9kdWxlLgotIwotU3ViSW5jbHVkZSAgRlQyX1RPUCAkKEZUMl9TUkNfRElSKSA7Ci0KLSMgSGFuZGxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBgZnRleHBvcnQuc3ltJyBmaWxlLCB3aGljaCBjb250YWlucyB0aGUgbGlzdAotIyBvZiBleHBvcnRlZCBzeW1ib2xzLiAgVGhpcyBjYW4gYmUgdXNlZCBvbiBVbml4IGJ5IGxpYnRvb2wuCi0jCi1TdWJJbmNsdWRlIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgdG9vbHMgOwotCi1ydWxlIEdlbkV4cG9ydFN5bWJvbHMKLXsKLSAgbG9jYWwgIGFwaW5hbWVzID0gYXBpbmFtZXMkKFNVRkVYRSkgOwotICBsb2NhbCAgYWhlYWRlciA7Ci0gIGxvY2FsICBoZWFkZXJzIDsKLQotICBmb3IgYWhlYWRlciBpbiBbIEdsb2IgJCgyKSA6ICouaCBdCi0gIHsKLSAgICBzd2l0Y2ggJChhaGVhZGVyKQotICAgIHsKLSAgICAgIGNhc2UgKi9mdG1hYy5oIDoKLSAgICAgICAgaWYgKCAkKE1BQykgfHwgJChPUykgPSBNQUNPU1ggKSB7Ci0gICAgICAgICAgaGVhZGVycyArPSAkKGFoZWFkZXIpIDsKLSAgICAgICAgfQotICAgICAgY2FzZSAqLmggOiBoZWFkZXJzICs9ICQoYWhlYWRlcikgOwotICAgIH0KLSAgfQotCi0gIExPQ0FURSBvbiAkKDEpID0gJChBTExfTE9DQVRFX1RBUkdFVCkgOwotCi0gIEFQSU5BTUVTIG9uICQoMSkgPSBhcGluYW1lcyQoU1VGRVhFKSA7Ci0KLSAgRGVwZW5kcyAgICAgICAgICAgICQoMSkgOiAkKGFwaW5hbWVzKSAkKGhlYWRlcnMpIDsKLSAgR2VuRXhwb3J0U3ltYm9sczEgICQoMSkgOiAkKGhlYWRlcnMpIDsKLSAgQ2xlYW4gICAgICAgICAgICAgIGNsZWFuIDogJCgxKSA7Ci19Ci0KLWFjdGlvbnMgR2VuRXhwb3J0U3ltYm9sczEgYmluZCBBUElOQU1FUwotewotICAkKEFQSU5BTUVTKSAkKDIpID4gJCgxKQotfQotCi1HZW5FeHBvcnRTeW1ib2xzICBmdGV4cG9ydC5zeW0gOiBpbmNsdWRlL2ZyZWV0eXBlIDsKLQotIyBUZXN0IGZpbGVzIChoaW50ZXIgZGVidWdnaW5nKS4gIE9ubHkgdXNlZCBieSBGcmVlVHlwZSBkZXZlbG9wZXJzLgotIwotaWYgJChERUJVR19ISU5URVIpCi17Ci0gIFN1YkluY2x1ZGUgRlQyX1RPUCB0ZXN0cyA7Ci19Ci0KLXJ1bGUgUmVmRG9jCi17Ci0gIERlcGVuZHMgICQxIDogYWxsIDsKLSAgTm90RmlsZSAgJDEgOwotICBBbHdheXMgICAkMSA7Ci19Ci0KLWFjdGlvbnMgUmVmRG9jCi17Ci0gIHB5dGhvbiAtbSBkb2N3cml0ZXIKLSAgICAgICAgIC0tcHJlZml4PWZ0MgotICAgICAgICAgLS10aXRsZT1GcmVlVHlwZS0yLjEwLjEKLSAgICAgICAgIC0tb3V0cHV0PSQoRE9DX0RJUikKLSAgICAgICAgICQoRlQyX0lOQ0xVREUpL2ZyZWV0eXBlLyouaAotICAgICAgICAgJChGVDJfSU5DTFVERSkvZnJlZXR5cGUvY29uZmlnLyouaAotICAgICAgICAgJChGVDJfSU5DTFVERSkvZnJlZXR5cGUvY2FjaGUvKi5oCi19Ci0KLVJlZkRvYyAgcmVmZG9jIDsKLQotCi0jIGVuZCBvZiB0b3AgSmFtZmlsZQpkaWZmIC0tZ2l0IGEvSmFtcnVsZXMgYi9KYW1ydWxlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyZWY1Yi4uMDAwMDAwMAotLS0gYS9KYW1ydWxlcworKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLSMgRnJlZVR5cGUgMiBKYW1SdWxlcy4KLSMKLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgYnkKLSMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgotIwotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAotIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCi0jIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91Ci0jIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0Ci0jIGZ1bGx5LgotCi0KLSMgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBKYW0gcnVsZXMgbmVlZGVkIHRvIGJ1aWxkIHRoZSBGcmVlVHlwZSAyIGxpYnJhcnkuCi0jIEl0IGlzIHNoYXJlZCBieSBhbGwgSmFtZmlsZXMgYW5kIGlzIGluY2x1ZGVkIG9ubHkgb25jZSBpbiB0aGUgYnVpbGQKLSMgcHJvY2Vzcy4KLSMKLQotCi0jIENhbGwgU3ViRGlySGRycyBvbiBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMuCi0jCi1ydWxlIEFkZFN1YkRpckhkcnMKLXsKLSAgbG9jYWwgeCA7Ci0KLSAgZm9yIHggaW4gJCg8KQotICB7Ci0gICAgU3ViRGlySGRycyAkKHgpIDsKLSAgfQotfQotCi0KLSMgRGV0ZXJtaW5lIHByZWZpeCBvZiBsaWJyYXJ5IGZpbGUuICBXZSBtdXN0IHVzZSAibGlieHh4eHgiIG9uIFVuaXggc3lzdGVtcywKLSMgd2hpbGUgYWxsIG90aGVyIHNpbXBseSB1c2UgdGhlIHJlYWwgbmFtZS4KLSMKLWlmICQoVU5JWCkKLXsKLSAgTElCUFJFRklYID89IGxpYiA7Ci19Ci1lbHNlCi17Ci0gIExJQlBSRUZJWCA/PSAiIiA7Ci19Ci0KLSMgRlQyX1RPUCBjb250YWlucyB0aGUgbG9jYXRpb24gb2YgdGhlIEZyZWVUeXBlIHNvdXJjZSBkaXJlY3RvcnkuICBZb3UgY2FuCi0jIHNldCBpdCB0byBhIHNwZWNpZmljIHZhbHVlIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgdGhlIGxpYnJhcnkgYXMgcGFydCBvZiBhCi0jIGxhcmdlciBwcm9qZWN0LgotIwotRlQyX1RPUCA/PSAkKERPVCkgOwotCi0jIERlZmluZSBhIG5ldyBydWxlIHVzZWQgdG8gZGVjbGFyZSBhIHN1YiBkaXJlY3Rvcnkgb2YgdGhlIE5pcnZhbmEgc291cmNlCi0jIHRyZWUuCi0jCi1ydWxlIEZUMl9TdWJEaXIKLXsKLSAgaWYgJChGVDJfVE9QKSA9ICQoRE9UKQotICB7Ci0gICAgcmV0dXJuIFsgRkRpck5hbWUgICQoPCkgXSA7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgcmV0dXJuIFsgRkRpck5hbWUgICQoRlQyX1RPUCkgJCg8KSBdIDsKLSAgfQotfQotCi0jIFdlIGFsc28gc2V0IEFMTF9MT0NBVEVfVEFSR0VUIGluIG9yZGVyIHRvIHBsYWNlIGFsbCBvYmplY3QgYW5kIGxpYnJhcnkKLSMgZmlsZXMgaW4gIm9ianMiLgotIwotQUxMX0xPQ0FURV9UQVJHRVQgPz0gWyBGVDJfU3ViRGlyICBvYmpzIF0gOwotCi0KLSMgZW5kIG9mIEphbXJ1bGVzCmRpZmYgLS1naXQgYS9NRVRBREFUQSBiL01FVEFEQVRBCmluZGV4IGNhZjMyNWYuLjdmZDBkYzUgMTAwNjQ0Ci0tLSBhL01FVEFEQVRBCisrKyBiL01FVEFEQVRBCkBAIC05LDEwICs5LDExIEBACiAgICAgdHlwZTogR0lUCiAgICAgdmFsdWU6ICJnaXQ6Ly9naXQuc3Yubm9uZ251Lm9yZy9mcmVldHlwZS9mcmVldHlwZTIuZ2l0IgogICB9Ci0gIHZlcnNpb246ICJWRVItMi0xMC0xIgorICB2ZXJzaW9uOiAiVkVSLTItMTAtNCIKKyAgbGljZW5zZV90eXBlOiBSRVNUUklDVEVECiAgIGxhc3RfdXBncmFkZV9kYXRlIHsKLSAgICB5ZWFyOiAyMDE5Ci0gICAgbW9udGg6IDcKLSAgICBkYXk6IDkKKyAgICB5ZWFyOiAyMDIwCisgICAgbW9udGg6IDEwCisgICAgZGF5OiAyMgogICB9CiB9CmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDNmNmE4YmUuLmUxZDE0NjkgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDhmM2UyYmMuLmU0YzhjZjEgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNCArMSw0IEBACi0gIEZyZWVUeXBlIDIuMTAuMQorICBGcmVlVHlwZSAyLjEwLjQKICAgPT09PT09PT09PT09PT09CiAKICAgSG9tZXBhZ2U6IGh0dHBzOi8vd3d3LmZyZWV0eXBlLm9yZwpAQCAtMTYsMTcgKzE2LDIwIEBACiAgIHRoZSBmaWxlIGBkb2NzL0xJQ0VOU0UuVFhUJyBmb3IgdGhlIGF2YWlsYWJsZSBsaWNlbnNlcy4KIAogICBUaGUgRnJlZVR5cGUgIDIgQVBJICByZWZlcmVuY2UgaXMgbG9jYXRlZCAgaW4gYGRvY3MvcmVmZXJlbmNlL3NpdGUnOwotICB1c2UgIHRoZSAgZmlsZSBgaW5kZXguaHRtbCcgIGFzICB0aGUgIHRvcCBlbnRyeSAgcG9pbnQuICAgQWRkaXRpb25hbAotICBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhcyBhIHNlcGFyYXRlIHBhY2thZ2UgZnJvbSBvdXIgc2l0ZXMuICBHbwotICB0bworICB1c2UgdGhlIGZpbGUgYGluZGV4Lmh0bWwnIGFzIHRoZSB0b3AgZW50cnkgcG9pbnQuICBbUGxlYXNlIG5vdGUgdGhhdAorICBjdXJyZW50bHkgdGhlICBzZWFyY2ggZnVuY3Rpb24gIGZvciBsb2NhbGx5ICBpbnN0YWxsZWQgZG9jdW1lbnRhdGlvbgorICBkb2Vzbid0IHdvcmsgZHVlIHRvIGNyb3NzLXNpdGUgc2NyaXB0aW5nIGlzc3Vlcy5dCisKKyAgQWRkaXRpb25hbCBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhcyBhIHNlcGFyYXRlIHBhY2thZ2UgZnJvbSBvdXIKKyAgc2l0ZXMuICBHbyB0bwogCiAgICAgaHR0cHM6Ly9kb3dubG9hZC5zYXZhbm5haC5nbnUub3JnL3JlbGVhc2VzL2ZyZWV0eXBlLwogCiAgIGFuZCBkb3dubG9hZCBvbmUgb2YgdGhlIGZvbGxvd2luZyBmaWxlcy4KIAotICAgIGZyZWV0eXBlLWRvYy0yLjEwLjEudGFyLnh6Ci0gICAgZnJlZXR5cGUtZG9jLTIuMTAuMS50YXIuZ3oKLSAgICBmdGRvYzIxMDEuemlwCisgICAgZnJlZXR5cGUtZG9jLTIuMTAuNC50YXIueHoKKyAgICBmcmVldHlwZS1kb2MtMi4xMC40LnRhci5negorICAgIGZ0ZG9jMjEwNC56aXAKIAogICBUbyB2aWV3IHRoZSBkb2N1bWVudGF0aW9uIG9ubGluZSwgZ28gdG8KIApAQCAtNjQsNiArNjcsMTggQEAKICAgYSB0ZXJzZSBtZXNzYWdlIHRoYXQgb25seSBzYXlzIGBpdCBkb2Vzbid0IHdvcmsnLgogCiAKKyAgUGF0Y2hlcworICA9PT09PT09CisKKyAgUGxlYXNlICBzdWJtaXQgcGF0Y2hlcyAgdG8gIHRoZSBgZnJlZXR5cGUtZGV2ZWxAbm9uZ251Lm9yZycgIG1haWxpbmcKKyAgbGlzdCAgLS0gIGFuZCB0aGFuayAgeW91ICBpbiAgYWR2YW5jZSAgZm9yICB5b3VyIHdvcmsgIG9uICBpbXByb3ZpbmcKKyAgRnJlZVR5cGUhCisKKyAgRGV0YWlscyBvbiB0aGUgcHJvY2VzcyBjYW4gYmUgZm91bmQgaGVyZToKKworICAgIGh0dHBzOi8vd3d3LmZyZWV0eXBlLm9yZy9kZXZlbG9wZXIuaHRtbCNwYXRjaGVzCisKKwogICBFbmpveSEKIAogCkBAIC03MSw3ICs4Niw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgYnkKK0NvcHlyaWdodCAoQykgMjAwNi0yMDIwIGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgIGZpbGUgaXMgIHBhcnQgb2YgIHRoZSBGcmVlVHlwZSAgcHJvamVjdCwgYW5kICBtYXkgb25seSAgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL1JFQURNRS5hbmRyb2lkIGIvUkVBRE1FLmFuZHJvaWQKaW5kZXggYTJmNTAyMC4uYWRjN2EyYyAxMDA2NDQKLS0tIGEvUkVBRE1FLmFuZHJvaWQKKysrIGIvUkVBRE1FLmFuZHJvaWQKQEAgLTI2LDYgKzI2LDcgQEAKICAgZXg6IGZvciAyLjguMTogaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvZnJlZXR5cGUvZnJlZXR5cGUyLmdpdC9jb21taXQvP2g9VkVSLTItOC0xJmlkPTM5Y2UzYWM0OTlkNGNkNzM3MTAzMWEwNjJmNDEwOTUzYzhlY2NlMjkKICogSW4gPGNoZWNrb3V0X2Rpcj4sIHJ1biBnaXQgbWVyZ2UgPGNvbW1pdF9zaGE+CiAgIGkuZS4gZ2l0IG1lcmdlIDM5Y2UzYWM0OTlkNGNkNzM3MTAzMWEwNjJmNDEwOTUzYzhlY2NlMjkKKyogVXBkYXRlIHZlcnNpb24gYW5kIGxhc3QgdXBncmFkZSBkYXRlIGluIE1FQVRBREFUQSBmaWxlLgogKiBVcGxvYWQgdGhlIGNoYW5nZXMuCiAgIGV4OiBnaXQgcHVzaCBvcmlnaW4gSEVBRDpyZWZzL2Zvci9tYXN0ZXIKICogR2Vycml0IHdpbGwgcnVuIHRoZSB0ZXh0IHJlbGF0ZWQgdGVzdHMuCmRpZmYgLS1naXQgYS9SRUFETUUuZ2l0IGIvUkVBRE1FLmdpdAppbmRleCA5NWY0MGUxLi5jNGYwMDMzIDEwMDY0NAotLS0gYS9SRUFETUUuZ2l0CisrKyBiL1JFQURNRS5naXQKQEAgLTM3LDcgKzM3LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKEMpIDIwMDUtMjAxOSBieQorQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyAgZmlsZSBpcyAgcGFydCBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSBvbmx5ICBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvYXV0b2dlbi5zaCBiL2F1dG9nZW4uc2gKaW5kZXggYWY2Y2YzNC4uNzljNGU0ZSAxMDA3NTUKLS0tIGEvYXV0b2dlbi5zaAorKysgYi9hdXRvZ2VuLnNoCkBAIC0xLDYgKzEsNiBAQAogIyEvYmluL3NoCiAKLSMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL2FtaWdhL1JFQURNRSBiL2J1aWxkcy9hbWlnYS9SRUFETUUKaW5kZXggZmY1ZTY1Mi4uYzU1MjUyNyAxMDA2NDQKLS0tIGEvYnVpbGRzL2FtaWdhL1JFQURNRQorKysgYi9idWlsZHMvYW1pZ2EvUkVBRE1FCkBAIC0xLDcgKzEsNyBAQAogCiBSRUFETUUgZm9yIHRoZSBidWlsZHMvYW1pZ2Egc3ViZGlyZWN0b3J5LgogCi1Db3B5cmlnaHQgKEMpIDIwMDUtMjAxOSBieQorQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgYnkKIFdlcm5lciBMZW1iZXJnIGFuZCBEZXRsZWYgV/xya25lci4KIAogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9hbWlnYS9pbmNsdWRlL2NvbmZpZy9mdGNvbmZpZy5oIGIvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmgKaW5kZXggN2M1ZmEwMi4uNDk3NmM3NSAxMDA2NDQKLS0tIGEvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmgKKysrIGIvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQW1pZ2Etc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBXZXJuZXIgTGVtYmVyZyBhbmQgRGV0bGVmIFf8cmtuZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2J1aWxkcy9hbWlnYS9pbmNsdWRlL2NvbmZpZy9mdG1vZHVsZS5oIGIvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0bW9kdWxlLmgKaW5kZXggOWRjNDYzMS4uNjAzNWJmMCAxMDA2NDQKLS0tIGEvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0bW9kdWxlLmgKKysrIGIvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0bW9kdWxlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQW1pZ2Etc3BlY2lmaWMgRnJlZVR5cGUgbW9kdWxlIHNlbGVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBXZXJuZXIgTGVtYmVyZyBhbmQgRGV0bGVmIFf8cmtuZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEzNyw4ICsxMzcsNiBAQAogCiAjaWZkZWYgRlRfVVNFX1NNT09USAogRlRfVVNFX01PRFVMRSggRlRfUmVuZGVyZXJfQ2xhc3MsIGZ0X3Ntb290aF9yZW5kZXJlcl9jbGFzcyApCi1GVF9VU0VfTU9EVUxFKCBGVF9SZW5kZXJlcl9DbGFzcywgZnRfc21vb3RoX2xjZF9yZW5kZXJlcl9jbGFzcyApCi1GVF9VU0VfTU9EVUxFKCBGVF9SZW5kZXJlcl9DbGFzcywgZnRfc21vb3RoX2xjZHZfcmVuZGVyZXJfY2xhc3MgKQogI2VuZGlmCiAKICNpZmRlZiBGVF9VU0VfT1RWCmRpZmYgLS1naXQgYS9idWlsZHMvYW1pZ2EvbWFrZWZpbGUgYi9idWlsZHMvYW1pZ2EvbWFrZWZpbGUKaW5kZXggOTJkYTI2ZC4uNTAzMTVmMyAxMDA2NDQKLS0tIGEvYnVpbGRzL2FtaWdhL21ha2VmaWxlCisrKyBiL2J1aWxkcy9hbWlnYS9tYWtlZmlsZQpAQCAtNSw3ICs1LDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMjAwNS0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiAjIFdlcm5lciBMZW1iZXJnIGFuZCBEZXRsZWYgV/xya25lci4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9hbWlnYS9tYWtlZmlsZS5vczQgYi9idWlsZHMvYW1pZ2EvbWFrZWZpbGUub3M0CmluZGV4IDgyM2I5YjUuLmNkNTE1MWMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9hbWlnYS9tYWtlZmlsZS5vczQKKysrIGIvYnVpbGRzL2FtaWdhL21ha2VmaWxlLm9zNApAQCAtNCw3ICs0LDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMjAwNS0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiAjIFdlcm5lciBMZW1iZXJnIGFuZCBEZXRsZWYgV/xya25lci4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9hbWlnYS9zbWFrZWZpbGUgYi9idWlsZHMvYW1pZ2Evc21ha2VmaWxlCmluZGV4IGRlZDc2YTAuLmZhNDE2NzYgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9hbWlnYS9zbWFrZWZpbGUKKysrIGIvYnVpbGRzL2FtaWdhL3NtYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMjAwNS0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiAjIFdlcm5lciBMZW1iZXJnIGFuZCBEZXRsZWYgV/xya25lci4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdGRlYnVnLmMgYi9idWlsZHMvYW1pZ2Evc3JjL2Jhc2UvZnRkZWJ1Zy5jCmluZGV4IDRhNzM4ZDMuLjY1MTBkMjAgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdGRlYnVnLmMKKysrIGIvYnVpbGRzL2FtaWdhL3NyYy9iYXNlL2Z0ZGVidWcuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIERlYnVnZ2luZyBhbmQgbG9nZ2luZyBjb21wb25lbnQgZm9yIGFtaWdhIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIFdlcm5lciBMZW1iZXJnLCBhbmQgRGV0bGVmIFd1ZXJrbmVyLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTY4LDggKzY4LDggQEAKIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAogCiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfRVJST1IKQEAgLTE1Miw3ICsxNTIsNyBAQAogCiAgIHN0YXRpYyBjb25zdCBjaGFyKiAgZnRfdHJhY2VfdG9nZ2xlc1t0cmFjZV9jb3VudCArIDFdID0KICAgewotI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJBQ0VfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaD4KICAgICBOVUxMCiAgIH07CiAKZGlmZiAtLWdpdCBhL2J1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdHN5c3RlbS5jIGIvYnVpbGRzL2FtaWdhL3NyYy9iYXNlL2Z0c3lzdGVtLmMKaW5kZXggN2U5ZGNiNy4uMWRmYmQ2NiAxMDA2NDQKLS0tIGEvYnVpbGRzL2FtaWdhL3NyYy9iYXNlL2Z0c3lzdGVtLmMKKysrIGIvYnVpbGRzL2FtaWdhL3NyYy9iYXNlL2Z0c3lzdGVtLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQW1pZ2Etc3BlY2lmaWMgRnJlZVR5cGUgbG93LWxldmVsIHN5c3RlbSBpbnRlcmZhY2UgKGJvZHkpLiAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBXZXJuZXIgTGVtYmVyZyBhbmQgRGV0bGVmIFf8cmtuZXIuICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTk2LDEwICs5NiwxMCBAQAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfU1lTVEVNX0gKLSNpbmNsdWRlIEZUX0VSUk9SU19ICi0jaW5jbHVkZSBGVF9UWVBFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0c3lzdGVtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdHR5cGVzLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpkaWZmIC0tZ2l0IGEvYnVpbGRzL2Fuc2kvYW5zaS1kZWYubWsgYi9idWlsZHMvYW5zaS9hbnNpLWRlZi5tawppbmRleCA5ZTFmNTdkLi45NjQyMDk4IDEwMDY0NAotLS0gYS9idWlsZHMvYW5zaS9hbnNpLWRlZi5taworKysgYi9idWlsZHMvYW5zaS9hbnNpLWRlZi5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9hbnNpL2Fuc2kubWsgYi9idWlsZHMvYW5zaS9hbnNpLm1rCmluZGV4IGViOTdkZjQuLmMyNDQ4MDMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9hbnNpL2Fuc2kubWsKKysrIGIvYnVpbGRzL2Fuc2kvYW5zaS5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9iZW9zL2Jlb3MtZGVmLm1rIGIvYnVpbGRzL2Jlb3MvYmVvcy1kZWYubWsKaW5kZXggN2E5ZDkxYy4uNWFlN2VkOCAxMDA2NDQKLS0tIGEvYnVpbGRzL2Jlb3MvYmVvcy1kZWYubWsKKysrIGIvYnVpbGRzL2Jlb3MvYmVvcy1kZWYubWsKQEAgLTUsNyArNSw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvYmVvcy9iZW9zLm1rIGIvYnVpbGRzL2Jlb3MvYmVvcy5tawppbmRleCAxODBiZTU4Li4xYTA4MmMxIDEwMDY0NAotLS0gYS9idWlsZHMvYmVvcy9iZW9zLm1rCisrKyBiL2J1aWxkcy9iZW9zL2Jlb3MubWsKQEAgLTIsNyArMiw3IEBACiAjIEZyZWVUeXBlIDIgY29uZmlndXJhdGlvbiBydWxlcyBmb3IgYSBCZU9TIHN5c3RlbQogIwogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9iZW9zL2RldGVjdC5tayBiL2J1aWxkcy9iZW9zL2RldGVjdC5tawppbmRleCAxOTIwNWViLi41YjkyNTEyIDEwMDY0NAotLS0gYS9idWlsZHMvYmVvcy9kZXRlY3QubWsKKysrIGIvYnVpbGRzL2Jlb3MvZGV0ZWN0Lm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL2NtYWtlL0ZpbmRCcm90bGlEZWMuY21ha2UgYi9idWlsZHMvY21ha2UvRmluZEJyb3RsaURlYy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzQ4NGM3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbGRzL2NtYWtlL0ZpbmRCcm90bGlEZWMuY21ha2UKQEAgLTAsMCArMSw1MSBAQAorIyBGaW5kQnJvdGxpRGVjLmNtYWtlCisjCisjIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgV3JpdHRlbiBieSBXZXJuZXIgTGVtYmVyZyA8d2xAZ251Lm9yZz4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKyMKKyMKKyMgVHJ5IHRvIGZpbmQgbGliYnJvdGxpZGVjIGluY2x1ZGUgYW5kIGxpYnJhcnkgZGlyZWN0b3JpZXMuCisjCisjIElmIGZvdW5kLCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgc2V0LgorIworIyAgIEJST1RMSURFQ19JTkNMVURFX0RJUlMKKyMgICBCUk9UTElERUNfTElCUkFSSUVTCisKK2luY2x1ZGUoRmluZFBrZ0NvbmZpZykKK3BrZ19jaGVja19tb2R1bGVzKFBDX0JST1RMSURFQyBRVUlFVCBsaWJicm90bGlkZWMpCisKK2lmIChQQ19CUk9UTElERUNfVkVSU0lPTikKKyAgc2V0KEJST1RMSURFQ19WRVJTSU9OICIke1BDX0JST1RMSURFQ19WRVJTSU9OfSIpCitlbmRpZiAoKQorCisKK2ZpbmRfcGF0aChCUk9UTElERUNfSU5DTFVERV9ESVJTCisgIE5BTUVTIGJyb3RsaS9kZWNvZGUuaAorICBISU5UUyAke1BDX0JST1RMSURFQ19JTkNMVURFRElSfQorICAgICAgICAke1BDX0JST1RMSURFQ19JTkNMVURFX0RJUlN9CisgIFBBVEhfU1VGRklYRVMgYnJvdGxpKQorCitmaW5kX2xpYnJhcnkoQlJPVExJREVDX0xJQlJBUklFUworICBOQU1FUyBicm90bGlkZWMKKyAgSElOVFMgJHtQQ19CUk9UTElERUNfTElCRElSfQorICAgICAgICAke1BDX0JST1RMSURFQ19MSUJSQVJZX0RJUlN9KQorCisKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoCisgIGJyb3RsaWRlYworICBSRVFVSVJFRF9WQVJTIEJST1RMSURFQ19JTkNMVURFX0RJUlMgQlJPVExJREVDX0xJQlJBUklFUworICBGT1VORF9WQVIgQlJPVExJREVDX0ZPVU5ECisgIFZFUlNJT05fVkFSIEJST1RMSURFQ19WRVJTSU9OKQorCittYXJrX2FzX2FkdmFuY2VkKAorICBCUk9UTElERUNfSU5DTFVERV9ESVJTCisgIEJST1RMSURFQ19MSUJSQVJJRVMpCmRpZmYgLS1naXQgYS9idWlsZHMvY21ha2UvRmluZEhhcmZCdXp6LmNtYWtlIGIvYnVpbGRzL2NtYWtlL0ZpbmRIYXJmQnV6ei5jbWFrZQppbmRleCBlZTBkNTJlLi5kNDg5NjEzIDEwMDY0NAotLS0gYS9idWlsZHMvY21ha2UvRmluZEhhcmZCdXp6LmNtYWtlCisrKyBiL2J1aWxkcy9jbWFrZS9GaW5kSGFyZkJ1enouY21ha2UKQEAgLTIzLDU5ICsyMyw2NSBAQAogIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQogIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQogIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSMKLSMgVHJ5IHRvIGZpbmQgSGFyZmJ1enogaW5jbHVkZSBhbmQgbGlicmFyeSBkaXJlY3Rvcmllcy4KKworCisjIFRyeSB0byBmaW5kIEhhcmZCdXp6IGluY2x1ZGUgYW5kIGxpYnJhcnkgZGlyZWN0b3JpZXMuCiAjCiAjIEFmdGVyIHN1Y2Nlc3NmdWwgZGlzY292ZXJ5LCB0aGlzIHdpbGwgc2V0IGZvciBpbmNsdXNpb24gd2hlcmUgbmVlZGVkOgotIyBIQVJGQlVaWl9JTkNMVURFX0RJUlMgLSBjb250YWluZyB0aGUgSGFyZkJ1enogaGVhZGVycwotIyBIQVJGQlVaWl9MSUJSQVJJRVMgLSBjb250YWluZyB0aGUgSGFyZkJ1enogbGlicmFyeQorIworIyAgIEhBUkZCVVpaX0lOQ0xVREVfRElSUyAtIGNvbnRhaW5nIHRoZSBIYXJmQnV6eiBoZWFkZXJzCisjICAgSEFSRkJVWlpfTElCUkFSSUVTICAgIC0gY29udGFpbmcgdGhlIEhhcmZCdXp6IGxpYnJhcnkKIAogaW5jbHVkZShGaW5kUGtnQ29uZmlnKQogcGtnX2NoZWNrX21vZHVsZXMoUENfSEFSRkJVWlogUVVJRVQgaGFyZmJ1enopCiAKIGZpbmRfcGF0aChIQVJGQlVaWl9JTkNMVURFX0RJUlMKLSAgICBOQU1FUyBoYi5oCi0gICAgSElOVFMgJHtQQ19IQVJGQlVaWl9JTkNMVURFRElSfQotICAgICAgICAgICR7UENfSEFSRkJVWlpfSU5DTFVERV9ESVJTfQotICAgIFBBVEhfU1VGRklYRVMgaGFyZmJ1enoKLSkKKyAgTkFNRVMgaGIuaAorICBISU5UUyAke1BDX0hBUkZCVVpaX0lOQ0xVREVESVJ9CisgICAgICAgICR7UENfSEFSRkJVWlpfSU5DTFVERV9ESVJTfQorICBQQVRIX1NVRkZJWEVTIGhhcmZidXp6KQogCi1maW5kX2xpYnJhcnkoSEFSRkJVWlpfTElCUkFSSUVTIE5BTUVTIGhhcmZidXp6Ci0gICAgSElOVFMgJHtQQ19IQVJGQlVaWl9MSUJESVJ9Ci0gICAgICAgICAgJHtQQ19IQVJGQlVaWl9MSUJSQVJZX0RJUlN9Ci0pCitmaW5kX2xpYnJhcnkoSEFSRkJVWlpfTElCUkFSSUVTCisgIE5BTUVTIGhhcmZidXp6CisgIEhJTlRTICR7UENfSEFSRkJVWlpfTElCRElSfQorICAgICAgICAke1BDX0hBUkZCVVpaX0xJQlJBUllfRElSU30pCiAKIGlmIChIQVJGQlVaWl9JTkNMVURFX0RJUlMpCi0gICAgaWYgKEVYSVNUUyAiJHtIQVJGQlVaWl9JTkNMVURFX0RJUlN9L2hiLXZlcnNpb24uaCIpCi0gICAgICAgIGZpbGUoUkVBRCAiJHtIQVJGQlVaWl9JTkNMVURFX0RJUlN9L2hiLXZlcnNpb24uaCIgX2hhcmZidXp6X3ZlcnNpb25fY29udGVudCkKKyAgaWYgKEVYSVNUUyAiJHtIQVJGQlVaWl9JTkNMVURFX0RJUlN9L2hiLXZlcnNpb24uaCIpCisgICAgZmlsZShSRUFEICIke0hBUkZCVVpaX0lOQ0xVREVfRElSU30vaGItdmVyc2lvbi5oIiBfaGFyZmJ1enpfdmVyc2lvbl9jb250ZW50KQogCi0gICAgICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiI2RlZmluZSArSEJfVkVSU0lPTl9TVFJJTkcgK1wiKFswLTldK1xcLlswLTldK1xcLlswLTldKylcIiIgX2R1bW15ICIke19oYXJmYnV6el92ZXJzaW9uX2NvbnRlbnR9IikKLSAgICAgICAgc2V0KEhBUkZCVVpaX1ZFUlNJT04gIiR7Q01BS0VfTUFUQ0hfMX0iKQotICAgIGVuZGlmICgpCisgICAgc3RyaW5nKFJFR0VYIE1BVENICisgICAgICAgICAgICIjZGVmaW5lICtIQl9WRVJTSU9OX1NUUklORyArXCIoWzAtOV0rXFwuWzAtOV0rXFwuWzAtOV0rKVwiIgorICAgICAgICAgICBfZHVtbXkgIiR7X2hhcmZidXp6X3ZlcnNpb25fY29udGVudH0iKQorICAgIHNldChIQVJGQlVaWl9WRVJTSU9OICIke0NNQUtFX01BVENIXzF9IikKKyAgZW5kaWYgKCkKIGVuZGlmICgpCiAKIGlmICgiJHtoYXJmYnV6el9GSU5EX1ZFUlNJT059IiBWRVJTSU9OX0dSRUFURVIgIiR7SEFSRkJVWlpfVkVSU0lPTn0iKQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlJlcXVpcmVkIHZlcnNpb24gKCIgJHtoYXJmYnV6el9GSU5EX1ZFUlNJT059ICIpIGlzIGhpZ2hlciB0aGFuIGZvdW5kIHZlcnNpb24gKCIgJHtIQVJGQlVaWl9WRVJTSU9OfSAiKSIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiUmVxdWlyZWQgdmVyc2lvbiAoIiAke2hhcmZidXp6X0ZJTkRfVkVSU0lPTn0gIikiCisgICAgIiBpcyBoaWdoZXIgdGhhbiBmb3VuZCB2ZXJzaW9uICgiICR7SEFSRkJVWlpfVkVSU0lPTn0gIikiKQogZW5kaWYgKCkKIAogaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKLUZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUygKLSAgICBoYXJmYnV6eiAKLSAgICAgICAgUkVRVUlSRURfVkFSUyBIQVJGQlVaWl9JTkNMVURFX0RJUlMgSEFSRkJVWlpfTElCUkFSSUVTCi0gICAgICAgIFZFUlNJT05fVkFSIEhBUkZCVVpaX1ZFUlNJT04pCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoCisgIGhhcmZidXp6CisgIFJFUVVJUkVEX1ZBUlMgSEFSRkJVWlpfSU5DTFVERV9ESVJTIEhBUkZCVVpaX0xJQlJBUklFUworICBWRVJTSU9OX1ZBUiBIQVJGQlVaWl9WRVJTSU9OKQogCiBtYXJrX2FzX2FkdmFuY2VkKAotICAgIEhBUkZCVVpaX0lOQ0xVREVfRElSUwotICAgIEhBUkZCVVpaX0xJQlJBUklFUwotKQorICBIQVJGQlVaWl9JTkNMVURFX0RJUlMKKyAgSEFSRkJVWlpfTElCUkFSSUVTKQogCi0jIEFsbG93cyBlYXN5IGxpbmtpbmcgYXMgaW4gCisjIEFsbG93IGVhc3kgbGlua2luZyBhcyBpbgorIwogIyAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhmcmVldHlwZSBQUklWQVRFIEhhcmZidXp6OjpIYXJmYnV6eikKKyMKIGlmIChOT1QgQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy4xKQotICAgIGlmIChIQVJGQlVaWl9GT1VORCBBTkQgTk9UIFRBUkdFVCBIYXJmYnV6ejo6SGFyZmJ1enopCi0gICAgICAgIGFkZF9saWJyYXJ5KEhhcmZidXp6OjpIYXJmYnV6eiBJTlRFUkZBQ0UgSU1QT1JURUQpCi0gICAgICAgIHNldF90YXJnZXRfcHJvcGVydGllcygKLSAgICAgICAgICAgIEhhcmZidXp6OjpIYXJmYnV6eiBQUk9QRVJUSUVTCi0gICAgICAgICAgICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7SEFSRkJVWlpfSU5DTFVERV9ESVJTfSIpCi0gICAgZW5kaWYgKCkKKyAgaWYgKEhBUkZCVVpaX0ZPVU5EIEFORCBOT1QgVEFSR0VUIEhhcmZidXp6OjpIYXJmYnV6eikKKyAgICBhZGRfbGlicmFyeShIYXJmYnV6ejo6SGFyZmJ1enogSU5URVJGQUNFIElNUE9SVEVEKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcygKKyAgICAgICAgSGFyZmJ1eno6OkhhcmZidXp6IFBST1BFUlRJRVMKKyAgICAgICAgICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtIQVJGQlVaWl9JTkNMVURFX0RJUlN9IikKKyAgZW5kaWYgKCkKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9idWlsZHMvY21ha2UvaU9TLmNtYWtlIGIvYnVpbGRzL2NtYWtlL2lPUy5jbWFrZQppbmRleCAzYTM1MGQyLi42ZjQ2ODM2IDEwMDY0NAotLS0gYS9idWlsZHMvY21ha2UvaU9TLmNtYWtlCisrKyBiL2J1aWxkcy9jbWFrZS9pT1MuY21ha2UKQEAgLTEsNiArMSw2IEBACiAjIGlPUy5jbWFrZQogIwotIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFdyaXR0ZW4gYnkgRGF2aWQgV2ltc2V5IDxkYXZpZEB3aW1zZXkudXM+CmRpZmYgLS1naXQgYS9idWlsZHMvY21ha2UvdGVzdGJ1aWxkLnNoIGIvYnVpbGRzL2NtYWtlL3Rlc3RidWlsZC5zaAppbmRleCA2NWM0ODFmLi5jYzY3YWJkIDEwMDc1NQotLS0gYS9idWlsZHMvY21ha2UvdGVzdGJ1aWxkLnNoCisrKyBiL2J1aWxkcy9jbWFrZS90ZXN0YnVpbGQuc2gKQEAgLTEsNiArMSw2IEBACiAjIS9iaW4vc2ggLWUKIAotIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCkBAIC05Myw3ICs5Myw3IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CiAKIAogRlRfTGlicmFyeSBsaWJyYXJ5OwpkaWZmIC0tZ2l0IGEvYnVpbGRzL2NvbXBpbGVyL2Fuc2ktY2MubWsgYi9idWlsZHMvY29tcGlsZXIvYW5zaS1jYy5tawppbmRleCAzYzNmZDczLi43OGIxM2E0IDEwMDY0NAotLS0gYS9idWlsZHMvY29tcGlsZXIvYW5zaS1jYy5taworKysgYi9idWlsZHMvY29tcGlsZXIvYW5zaS1jYy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9jb21waWxlci9iY2MtZGV2Lm1rIGIvYnVpbGRzL2NvbXBpbGVyL2JjYy1kZXYubWsKaW5kZXggNjJhNTFjNC4uNWY2ZjE2MSAxMDA2NDQKLS0tIGEvYnVpbGRzL2NvbXBpbGVyL2JjYy1kZXYubWsKKysrIGIvYnVpbGRzL2NvbXBpbGVyL2JjYy1kZXYubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvY29tcGlsZXIvYmNjLm1rIGIvYnVpbGRzL2NvbXBpbGVyL2JjYy5tawppbmRleCA1YmE2Nzk4Li5mNWUyZThhIDEwMDY0NAotLS0gYS9idWlsZHMvY29tcGlsZXIvYmNjLm1rCisrKyBiL2J1aWxkcy9jb21waWxlci9iY2MubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvY29tcGlsZXIvZW14Lm1rIGIvYnVpbGRzL2NvbXBpbGVyL2VteC5tawppbmRleCAwYzJhYTMxLi5iYmI3NjA0IDEwMDY0NAotLS0gYS9idWlsZHMvY29tcGlsZXIvZW14Lm1rCisrKyBiL2J1aWxkcy9jb21waWxlci9lbXgubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvY29tcGlsZXIvZ2NjLWRldi5tayBiL2J1aWxkcy9jb21waWxlci9nY2MtZGV2Lm1rCmluZGV4IDQ2ZGFkMzkuLjk1YjVmNTAgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9jb21waWxlci9nY2MtZGV2Lm1rCisrKyBiL2J1aWxkcy9jb21waWxlci9nY2MtZGV2Lm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL2NvbXBpbGVyL2djYy5tayBiL2J1aWxkcy9jb21waWxlci9nY2MubWsKaW5kZXggYjFlZTQwOS4uNjNjZDkzYiAxMDA2NDQKLS0tIGEvYnVpbGRzL2NvbXBpbGVyL2djYy5taworKysgYi9idWlsZHMvY29tcGlsZXIvZ2NjLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL2NvbXBpbGVyL2ludGVsYy5tayBiL2J1aWxkcy9jb21waWxlci9pbnRlbGMubWsKaW5kZXggM2ExOTcwMi4uYjNjNjliMCAxMDA2NDQKLS0tIGEvYnVpbGRzL2NvbXBpbGVyL2ludGVsYy5taworKysgYi9idWlsZHMvY29tcGlsZXIvaW50ZWxjLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL2NvbXBpbGVyL3VuaXgtbGNjLm1rIGIvYnVpbGRzL2NvbXBpbGVyL3VuaXgtbGNjLm1rCmluZGV4IDlmZTY3NTMuLjI2ZjhlN2IgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9jb21waWxlci91bml4LWxjYy5taworKysgYi9idWlsZHMvY29tcGlsZXIvdW5peC1sY2MubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvY29tcGlsZXIvdmlzdWFsYWdlLm1rIGIvYnVpbGRzL2NvbXBpbGVyL3Zpc3VhbGFnZS5tawppbmRleCAyNmM5OWY3Li40YThjOGFjIDEwMDY0NAotLS0gYS9idWlsZHMvY29tcGlsZXIvdmlzdWFsYWdlLm1rCisrKyBiL2J1aWxkcy9jb21waWxlci92aXN1YWxhZ2UubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvY29tcGlsZXIvdmlzdWFsYy5tayBiL2J1aWxkcy9jb21waWxlci92aXN1YWxjLm1rCmluZGV4IDE3YzhlNzYuLmE5Y2Y3MWQgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9jb21waWxlci92aXN1YWxjLm1rCisrKyBiL2J1aWxkcy9jb21waWxlci92aXN1YWxjLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL2NvbXBpbGVyL3dhdGNvbS5tayBiL2J1aWxkcy9jb21waWxlci93YXRjb20ubWsKaW5kZXggMmVjMjRlZi4uNDNhOWUwNiAxMDA2NDQKLS0tIGEvYnVpbGRzL2NvbXBpbGVyL3dhdGNvbS5taworKysgYi9idWlsZHMvY29tcGlsZXIvd2F0Y29tLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL2NvbXBpbGVyL3dpbi1sY2MubWsgYi9idWlsZHMvY29tcGlsZXIvd2luLWxjYy5tawppbmRleCBmYzFmMjNiLi4wMGQ5ZDMxIDEwMDY0NAotLS0gYS9idWlsZHMvY29tcGlsZXIvd2luLWxjYy5taworKysgYi9idWlsZHMvY29tcGlsZXIvd2luLWxjYy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9kZXRlY3QubWsgYi9idWlsZHMvZGV0ZWN0Lm1rCmluZGV4IDkzYjI4NjEuLjk0NjI3ZmMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9kZXRlY3QubWsKKysrIGIvYnVpbGRzL2RldGVjdC5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTEyMCw3ICsxMjAsNyBAQAogCSQoaW5mbyBgJChDT05GSUdfTUspJyBmcm9tIHRoaXMgZGlyZWN0b3J5IHRoZW4gcmVhZCB0aGUgSU5TVEFMTCBmaWxlIGZvciBoZWxwLikKIAkkKGluZm8gKQogCSQoaW5mbyBPdGhlcndpc2UsIHNpbXBseSB0eXBlIGAkKE1BS0UpJyBhZ2FpbiB0byBidWlsZCB0aGUgbGlicmFyeSwpCi0JJChpbmZvIG9yIGAkKE1BS0UpIHJlZmRvYycgdG8gYnVpbGQgdGhlIEFQSSByZWZlcmVuY2UgKHRoaXMgbmVlZHMgcHl0aG9uID49IDIuNikuKQorCSQoaW5mbyBvciBgJChNQUtFKSByZWZkb2MnIHRvIGJ1aWxkIHRoZSBBUEkgcmVmZXJlbmNlICh0aGlzIG5lZWRzIFB5dGhvbiA+PSAzLjUpLikKIAkkKGluZm8gKQogCUAkKENPUFkpICQoc3Vic3QgLywkKFNFUCksJChDT05GSUdfUlVMRVMpICQoQ09ORklHX01LKSkKIApkaWZmIC0tZ2l0IGEvYnVpbGRzL2Rvcy9kZXRlY3QubWsgYi9idWlsZHMvZG9zL2RldGVjdC5tawppbmRleCA1M2MxY2FhLi5mNTk4Nzk0IDEwMDY0NAotLS0gYS9idWlsZHMvZG9zL2RldGVjdC5taworKysgYi9idWlsZHMvZG9zL2RldGVjdC5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9kb3MvZG9zLWRlZi5tayBiL2J1aWxkcy9kb3MvZG9zLWRlZi5tawppbmRleCBhNWM1NmI2Li4wNjdkMWQ0IDEwMDY0NAotLS0gYS9idWlsZHMvZG9zL2Rvcy1kZWYubWsKKysrIGIvYnVpbGRzL2Rvcy9kb3MtZGVmLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL2Rvcy9kb3MtZW14Lm1rIGIvYnVpbGRzL2Rvcy9kb3MtZW14Lm1rCmluZGV4IGRiYmEzM2UuLjUxNzMyMDggMTAwNjQ0Ci0tLSBhL2J1aWxkcy9kb3MvZG9zLWVteC5taworKysgYi9idWlsZHMvZG9zL2Rvcy1lbXgubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvZG9zL2Rvcy1nY2MubWsgYi9idWlsZHMvZG9zL2Rvcy1nY2MubWsKaW5kZXggYzI4MTMxOC4uNjM4ODkyZCAxMDA2NDQKLS0tIGEvYnVpbGRzL2Rvcy9kb3MtZ2NjLm1rCisrKyBiL2J1aWxkcy9kb3MvZG9zLWdjYy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9kb3MvZG9zLXdhdC5tayBiL2J1aWxkcy9kb3MvZG9zLXdhdC5tawppbmRleCA4YzUwNjJkLi40ZTM5ZDIxIDEwMDY0NAotLS0gYS9idWlsZHMvZG9zL2Rvcy13YXQubWsKKysrIGIvYnVpbGRzL2Rvcy9kb3Mtd2F0Lm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL2V4cG9ydHMubWsgYi9idWlsZHMvZXhwb3J0cy5tawppbmRleCA5ZGMyMWUyLi5lYmE5NjY4IDEwMDY0NAotLS0gYS9idWlsZHMvZXhwb3J0cy5taworKysgYi9idWlsZHMvZXhwb3J0cy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMjAwNS0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9mcmVldHlwZS5tayBiL2J1aWxkcy9mcmVldHlwZS5tawppbmRleCAyYjBmZmFlLi4xZDdlZWI2IDEwMDY0NAotLS0gYS9idWlsZHMvZnJlZXR5cGUubWsKKysrIGIvYnVpbGRzL2ZyZWV0eXBlLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApAQCAtMTA0LDcgKzEwNCw3IEBACiAKICMgVGhlIGRvY3VtZW50YXRpb24gZGlyZWN0b3J5LgogIwotRE9DX0RJUiA/PSAkKFRPUF9ESVIpL2RvY3MvcmVmZXJlbmNlCitET0NfRElSID89ICQoVE9QX0RJUikvZG9jcwogCiAjIFRoZSBmaW5hbCBuYW1lIG9mIHRoZSBsaWJyYXJ5IGZpbGUuCiAjCkBAIC0xMjYsMTIgKzEyNiwxNCBAQAogCiBJTkNMVURFX0ZMQUdTIDo9ICQoSU5DTFVERVM6JT0kSSUpCiAKKyMgRm9yIGEgZGV2ZWxvcG1lbnQgYnVpbGQsIHdlIGFzc3VtZSB0aGF0IHRoZSBleHRlcm5hbCBsaWJyYXJ5IGRlcGVuZGVuY2llcworIyBkZWZpbmVkIGluIGBmdG9wdGlvbi5oJyBhcmUgZnVsZmlsbGVkLCBzbyB3ZSBkaXJlY3RseSBhY2Nlc3MgdGhlIG5lY2Vzc2FyeQorIyBpbmNsdWRlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiB1c2luZyBgcGtnLWNvbmZpZycuCisjCiBpZmRlZiBERVZFTF9ESVIKLSAgIyBXZSBhc3N1bWUgdGhhdCBhbGwgbGlicmFyeSBkZXBlbmRlbmNpZXMgZm9yIEZyZWVUeXBlIGFyZSBmdWxmaWxsZWQgZm9yIGEKLSAgIyBkZXZlbG9wbWVudCBidWlsZCwgc28gd2UgZGlyZWN0bHkgYWNjZXNzIHRoZSBuZWNlc3NhcnkgaW5jbHVkZSBkaXJlY3RvcnkKLSAgIyBpbmZvcm1hdGlvbiB1c2luZyBgcGtnLWNvbmZpZycuCi0gIElOQ0xVREVfRkxBR1MgKz0gJChzaGVsbCBwa2ctY29uZmlnIC0tY2ZsYWdzIGxpYnBuZyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmZidXp6ICkKKyAgSU5DTFVERV9GTEFHUyArPSAkKHNoZWxsIHBrZy1jb25maWcgLS1jZmxhZ3MgbGlicG5nKQorICBJTkNMVURFX0ZMQUdTICs9ICQoc2hlbGwgcGtnLWNvbmZpZyAtLWNmbGFncyBoYXJmYnV6eikKKyAgSU5DTFVERV9GTEFHUyArPSAkKHNoZWxsIHBrZy1jb25maWcgLS1jZmxhZ3MgbGliYnJvdGxpZGVjKQogZW5kaWYKIAogCkBAIC0xNDYsMjUgKzE0OCwxMyBAQAogIyBGcmVlVHlwZS4gIFRoaXMgaXMgcmVxdWlyZWQgdG8gbGV0IG91ciBzb3VyY2VzIGluY2x1ZGUgdGhlIGludGVybmFsCiAjIGhlYWRlcnMgKHNvbWV0aGluZyBmb3JiaWRkZW4gYnkgY2xpZW50cykuCiAjCi0jIEZpbmFsbHksIHdlIGRlZmluZSBGVF9DT05GSUdfTU9EVUxFU19IIHNvIHRoYXQgdGhlIGNvbXBpbGVyIHVzZXMgdGhlCi0jIGdlbmVyYXRlZCB2ZXJzaW9uIG9mIGBmdG1vZHVsZS5oJyBpbiAkKE9CSl9ESVIpLiAgSWYgdGhlcmUgaXMgYW4KLSMgYGZ0b3B0aW9uLmgnIGZpbGVzIGluICQoT0JKX0RJUiksIGRlZmluZSBGVF9DT05GSUdfT1BUSU9OU19IIHRvby4KLSMKLWlmbmVxICgkKHdpbGRjYXJkICQoT0JKX0RJUikvZnRvcHRpb24uaCksKQotICBGVE9QVElPTl9IICAgIDo9ICQoT0JKX0RJUikvZnRvcHRpb24uaAotICBGVE9QVElPTl9GTEFHIDo9ICRERlRfQ09ORklHX09QVElPTlNfSD0iPGZ0b3B0aW9uLmg+IgotZWxzZSBpZm5lcSAoJCh3aWxkY2FyZCAkKEJVSUxEX0RJUikvZnRvcHRpb24uaCksKQotICBGVE9QVElPTl9IICAgIDo9ICQoQlVJTERfRElSKS9mdG9wdGlvbi5oCi0gIEZUT1BUSU9OX0ZMQUcgOj0gJERGVF9DT05GSUdfT1BUSU9OU19IPSI8ZnRvcHRpb24uaD4iCi1lbmRpZgotCiAjIGBDUFBGTEFHUycgbWlnaHQgYmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyIGluIHRoZSBlbnZpcm9ubWVudC4KICMKIEZUX0NGTEFHUyAgPSAkKENQUEZMQUdTKSBcCiAgICAgICAgICAgICAgJChDRkxBR1MpIFwKLSAgICAgICAgICAgICAkREZUMl9CVUlMRF9MSUJSQVJZIFwKLSAgICAgICAgICAgICAkREZUX0NPTkZJR19NT0RVTEVTX0g9IjxmdG1vZHVsZS5oPiIgXAotICAgICAgICAgICAgICQoRlRPUFRJT05fRkxBRykKKyAgICAgICAgICAgICAkREZUMl9CVUlMRF9MSUJSQVJZCisKK0ZUX0NPTVBJTEUgOj0gJChDQykgJChBTlNJRkxBR1MpICQoSU5DTFVERV9GTEFHUykgJChGVF9DRkxBR1MpCiAKIAogIyBJbmNsdWRlIHRoZSBgZXhwb3J0cycgcnVsZXMgZmlsZS4KQEAgLTE3OSwxMSArMTY5LDE3IEBACiAKICMgRGVmaW5lICQoUFVCTElDX0gpIGFzIHRoZSBsaXN0IG9mIGFsbCBwdWJsaWMgaGVhZGVyIGZpbGVzIGxvY2F0ZWQgaW4KICMgYCQoVE9QX0RJUikvaW5jbHVkZS9mcmVldHlwZScuICAkKElOVEVSTkFMX0gpLCBhbmQgJChDT05GSUdfSCkgYXJlIGRlZmluZWQKLSMgc2ltaWxhcmx5LgorIyBzaW1pbGFybHkuICAkKEZUT1BUSU9OX0gpIGlzIHRoZSBvcHRpb24gZmlsZSB1c2VkIGluIHRoZSBjb21waWxhdGlvbi4KICMKICMgVGhpcyBpcyB1c2VkIHRvIHNpbXBsaWZ5IHRoZSBkZXBlbmRlbmN5IHJ1bGVzIC0tIGlmIG9uZSBvZiB0aGVzZSBmaWxlcwogIyBjaGFuZ2VzLCB0aGUgd2hvbGUgbGlicmFyeSBpcyByZWNvbXBpbGVkLgogIworaWZuZXEgKCQod2lsZGNhcmQgJChPQkpfRElSKS9mdG9wdGlvbi5oKSwpCisgIEZUT1BUSU9OX0ggICAgOj0gJChPQkpfRElSKS9mdG9wdGlvbi5oCitlbHNlIGlmbmVxICgkKHdpbGRjYXJkICQoQlVJTERfRElSKS9mdG9wdGlvbi5oKSwpCisgIEZUT1BUSU9OX0ggICAgOj0gJChCVUlMRF9ESVIpL2Z0b3B0aW9uLmgKK2VuZGlmCisKIFBVQkxJQ19IICAgOj0gJCh3aWxkY2FyZCAkKFBVQkxJQ19ESVIpLyouaCkKIElOVEVSTkFMX0ggOj0gJCh3aWxkY2FyZCAkKElOVEVSTkFMX0RJUikvKi5oKSBcCiAgICAgICAgICAgICAgICQod2lsZGNhcmQgJChTRVJWSUNFU19ESVIpLyouaCkKQEAgLTE5Niw4ICsxOTIsNiBAQAogRlJFRVRZUEVfSCA6PSAkKFBVQkxJQ19IKSAkKElOVEVSTkFMX0gpICQoQ09ORklHX0gpICQoREVWRUxfSCkKIAogCi1GVF9DT01QSUxFIDo9ICQoQ0MpICQoQU5TSUZMQUdTKSAkKElOQ0xVREVfRkxBR1MpICQoRlRfQ0ZMQUdTKQotCiAjIGZ0c3lzdGVtIGNvbXBvbmVudAogIwogRlRTWVNfU1JDID89ICQoQkFTRV9ESVIpL2Z0c3lzdGVtLmMKQEAgLTI5MCwxNyArMjg0LDE1IEBACiBsaWJyYXJ5OiAkKFBST0pFQ1RfTElCUkFSWSkKIAogIyBSdW4gYGRvY3dyaXRlcicgaW4gdGhlIGN1cnJlbnQgUHl0aG9uIGVudmlyb25tZW50LgotIyBPcHRpb24gYC1CJyBkaXNhYmxlcyBnZW5lcmF0aW9uIG9mIC5weWMgZmlsZXMgKGF2YWlsYWJsZSBzaW5jZSBweXRob24gMi42KQogIwotCiBQWVRIT04gPz0gcHl0aG9uCi1QSVAgICAgPz0gcGlwCiAKIHJlZmRvYzoKIAlAZWNobyBSdW5uaW5nIGRvY3dyaXRlci4uLgogCSQoUFlUSE9OKSAtbSBkb2N3cml0ZXIgXAogICAgICAgICAgICAgICAgICAgLS1wcmVmaXg9ZnQyIFwKICAgICAgICAgICAgICAgICAgIC0tdGl0bGU9RnJlZVR5cGUtJCh2ZXJzaW9uKSBcCisgICAgICAgICAgICAgICAgICAtLXNpdGU9cmVmZXJlbmNlIFwKICAgICAgICAgICAgICAgICAgIC0tb3V0cHV0PSQoRE9DX0RJUikgXAogICAgICAgICAgICAgICAgICAgJChQVUJMSUNfRElSKS8qLmggXAogICAgICAgICAgICAgICAgICAgJChQVUJMSUNfRElSKS9jb25maWcvKi5oIFwKQEAgLTMxOCwxNyArMzEwLDE3IEBACiBWRU5WX05BTUUgIDo9IGVudgogVkVOVl9ESVIgICA6PSAkKERPQ19ESVIpJChTRVApJChWRU5WX05BTUUpCiBFTlZfUFlUSE9OIDo9ICQoVkVOVl9ESVIpJChTRVApJChCSU4pJChTRVApJChQWVRIT04pCi1FTlZfUElQICAgIDo9ICQoVkVOVl9ESVIpJChTRVApJChCSU4pJChTRVApJChQSVApCiAKIHJlZmRvYy12ZW52OgogCUBlY2hvIFNldHRpbmcgdXAgdmlydHVhbGVudiBmb3IgUHl0aG9uLi4uCiAJdmlydHVhbGVudiAtLXB5dGhvbj0kKFBZVEhPTikgJChWRU5WX0RJUikKIAlAZWNobyBJbnN0YWxsaW5nIGRvY3dyaXRlci4uLgotCSQoRU5WX1BJUCkgaW5zdGFsbCBkb2N3cml0ZXIKKwkkKEVOVl9QWVRIT04pIC1tIHBpcCBpbnN0YWxsIGRvY3dyaXRlcgogCUBlY2hvIFJ1bm5pbmcgZG9jd3JpdGVyLi4uCiAJJChFTlZfUFlUSE9OKSAtbSBkb2N3cml0ZXIgXAogICAgICAgICAgICAgICAgICAgICAgIC0tcHJlZml4PWZ0MiBcCiAgICAgICAgICAgICAgICAgICAgICAgLS10aXRsZT1GcmVlVHlwZS0kKHZlcnNpb24pIFwKKyAgICAgICAgICAgICAgICAgICAgICAtLXNpdGU9cmVmZXJlbmNlIFwKICAgICAgICAgICAgICAgICAgICAgICAtLW91dHB1dD0kKERPQ19ESVIpIFwKICAgICAgICAgICAgICAgICAgICAgICAkKFBVQkxJQ19ESVIpLyouaCBcCiAgICAgICAgICAgICAgICAgICAgICAgJChQVUJMSUNfRElSKS9jb25maWcvKi5oIFwKZGlmZiAtLWdpdCBhL2J1aWxkcy9saW5rX2Rvcy5tayBiL2J1aWxkcy9saW5rX2Rvcy5tawppbmRleCA0YzkwNzZhLi5jMWVkMTUwIDEwMDY0NAotLS0gYS9idWlsZHMvbGlua19kb3MubWsKKysrIGIvYnVpbGRzL2xpbmtfZG9zLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL2xpbmtfc3RkLm1rIGIvYnVpbGRzL2xpbmtfc3RkLm1rCmluZGV4IDdlZWRmMWUuLjk0MGU2NzQgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9saW5rX3N0ZC5taworKysgYi9idWlsZHMvbGlua19zdGQubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvbWFjL2Z0bWFjLmMgYi9idWlsZHMvbWFjL2Z0bWFjLmMKaW5kZXggNmFkZjgwMC4uMmNiMzA0NiAxMDA2NDQKLS0tIGEvYnVpbGRzL21hYy9mdG1hYy5jCisrKyBiL2J1aWxkcy9tYWMvZnRtYWMuYwpAQCAtNSw3ICs1LDcgQEAKIC8qICAgIE1hYyBGT05EIHN1cHBvcnQuICBXcml0dGVuIGJ5IGp1c3RAbGV0dGVycm9yLmNvbS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgSGVhdmlseSBGaXhlZCBieSBtcHN1enVraSwgR2VvcmdlIFdpbGxpYW1zIGFuZCBTZWFuIE1jQnJpZGUgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIEp1c3QgdmFuIFJvc3N1bSwgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNjIsMTAgKzYyLDkgQEAKICAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBR1NfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL3R0dGFncy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CiAjaW5jbHVkZSAiZnRiYXNlLmgiCiAKICNpZiBkZWZpbmVkKCBfX0dOVUNfXyApIHx8IGRlZmluZWQoIF9fSUJNQ19fICkKZGlmZiAtLWdpdCBhL2J1aWxkcy9tZXNvbi9leHRyYWN0X2ZyZWV0eXBlX3ZlcnNpb24ucHkgYi9idWlsZHMvbWVzb24vZXh0cmFjdF9mcmVldHlwZV92ZXJzaW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZTg3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZHMvbWVzb24vZXh0cmFjdF9mcmVldHlwZV92ZXJzaW9uLnB5CkBAIC0wLDAgKzEsMTA3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyIiIkV4dHJhY3QgdGhlIEZyZWVUeXBlIHZlcnNpb24gbnVtYmVycyBmcm9tIGA8ZnJlZXR5cGUvZnJlZXR5cGUuaD5gLgorCitUaGlzIHNjcmlwdCBwYXJzZXMgdGhlIGhlYWRlciB0byBleHRyYWN0IHRoZSB2ZXJzaW9uIG51bWJlciBkZWZpbmVkIHRoZXJlLgorQnkgZGVmYXVsdCwgdGhlIGZ1bGwgZG90dGVkIHZlcnNpb24gbnVtYmVyIGlzIHByaW50ZWQsIGJ1dCBgLS1tYWpvcmAsCitgLS1taW5vcmAgb3IgYC0tcGF0Y2hgIGNhbiBiZSB1c2VkIHRvIG9ubHkgcHJpbnQgb25lIG9mIHRoZXNlIHZhbHVlcworaW5zdGVhZC4KKyIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKKworIyBFeHBlY3RlZCBpbnB1dDoKKyMKKyMgIC4uLgorIyAgI2RlZmluZSBGUkVFVFlQRV9NQUpPUiAgMgorIyAgI2RlZmluZSBGUkVFVFlQRV9NSU5PUiAgMTAKKyMgICNkZWZpbmUgRlJFRVRZUEVfUEFUQ0ggIDIKKyMgIC4uLgorCitSRV9NQUpPUiA9IHJlLmNvbXBpbGUociJeIFwjZGVmaW5lIFxzKyBGUkVFVFlQRV9NQUpPUiBccysgKC4qKSAkIiwgcmUuWCkKK1JFX01JTk9SID0gcmUuY29tcGlsZShyIl4gXCNkZWZpbmUgXHMrIEZSRUVUWVBFX01JTk9SIFxzKyAoLiopICQiLCByZS5YKQorUkVfUEFUQ0ggPSByZS5jb21waWxlKHIiXiBcI2RlZmluZSBccysgRlJFRVRZUEVfUEFUQ0ggXHMrICguKikgJCIsIHJlLlgpCisKKworZGVmIHBhcnNlX2ZyZWV0eXBlX2hlYWRlcihoZWFkZXIpOgorICAgIG1ham9yID0gTm9uZQorICAgIG1pbm9yID0gTm9uZQorICAgIHBhdGNoID0gTm9uZQorCisgICAgZm9yIGxpbmUgaW4gaGVhZGVyLnNwbGl0bGluZXMoKToKKyAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgbSA9IFJFX01BSk9SLm1hdGNoKGxpbmUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBhc3NlcnQgbWFqb3IgPT0gTm9uZSwgIkZSRUVUWVBFX01BSk9SIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UhIgorICAgICAgICAgICAgbWFqb3IgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG0gPSBSRV9NSU5PUi5tYXRjaChsaW5lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgYXNzZXJ0IG1pbm9yID09IE5vbmUsICJGUkVFVFlQRV9NSU5PUiBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlISIKKyAgICAgICAgICAgIG1pbm9yID0gbS5ncm91cCgxKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBtID0gUkVfUEFUQ0gubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIGFzc2VydCBwYXRjaCA9PSBOb25lLCAiRlJFRVRZUEVfUEFUQ0ggYXBwZWFycyBtb3JlIHRoYW4gb25jZSEiCisgICAgICAgICAgICBwYXRjaCA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICBhc3NlcnQgKAorICAgICAgICBtYWpvciBhbmQgbWlub3IgYW5kIHBhdGNoCisgICAgKSwgIlRoaXMgaGVhZGVyIGlzIG1pc3Npbmcgb25lIG9mIEZSRUVUWVBFX01BSk9SLCBGUkVFVFlQRV9NSU5PUiBvciBGUkVFVFlQRV9QQVRDSCEiCisKKyAgICByZXR1cm4gKG1ham9yLCBtaW5vciwgcGF0Y2gpCisKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj1fX2RvY19fKQorCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS1tYWpvciIsCisgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGhlbHA9Ik9ubHkgcHJpbnQgdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyLiIsCisgICAgKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tbWlub3IiLAorICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICBoZWxwPSJPbmx5IHByaW50IHRoZSBtaW5vciB2ZXJzaW9uIG51bWJlci4iLAorICAgICkKKyAgICBncm91cC5hZGRfYXJndW1lbnQoCisgICAgICAgICItLXBhdGNoIiwKKyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgaGVscD0iT25seSBwcmludCB0aGUgcGF0Y2ggdmVyc2lvbiBudW1iZXIuIiwKKyAgICApCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiaW5wdXQiLAorICAgICAgICBtZXRhdmFyPSJGUkVFVFlQRV9IIiwKKyAgICAgICAgaGVscD0iVGhlIGlucHV0IGZyZWV0eXBlLmggaGVhZGVyIHRvIHBhcnNlLiIsCisgICAgKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICB3aXRoIG9wZW4oYXJncy5pbnB1dCkgYXMgZjoKKyAgICAgICAgaGVhZGVyID0gZi5yZWFkKCkKKworICAgIHZlcnNpb24gPSBwYXJzZV9mcmVldHlwZV9oZWFkZXIoaGVhZGVyKQorCisgICAgaWYgYXJncy5tYWpvcjoKKyAgICAgICAgcHJpbnQodmVyc2lvblswXSkKKyAgICBlbGlmIGFyZ3MubWlub3I6CisgICAgICAgIHByaW50KHZlcnNpb25bMV0pCisgICAgZWxpZiBhcmdzLnBhdGNoOgorICAgICAgICBwcmludCh2ZXJzaW9uWzJdKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCIlcy4lcy4lcyIgJSB2ZXJzaW9uKQorCisgICAgcmV0dXJuIDAKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL2J1aWxkcy9tZXNvbi9leHRyYWN0X2xpYnRvb2xfdmVyc2lvbi5weSBiL2J1aWxkcy9tZXNvbi9leHRyYWN0X2xpYnRvb2xfdmVyc2lvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTY5NDgxCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbGRzL21lc29uL2V4dHJhY3RfbGlidG9vbF92ZXJzaW9uLnB5CkBAIC0wLDAgKzEsMTA1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyIiIkV4dHJhY3QgdGhlIGxpYnRvb2wgdmVyc2lvbiBmcm9tIGBjb25maWd1cmUucmF3YC4KKworVGhpcyBzY3JpcHQgcGFyc2VzIHRoZSBgY29uZmlndXJlLnJhd2AgZmlsZSB0byBleHRyYWN0IHRoZSBsaWJ0b29sIHZlcnNpb24KK251bWJlci4gIEJ5IGRlZmF1bHQsIHRoZSBmdWxsIGRvdHRlZCB2ZXJzaW9uIG51bWJlciBpcyBwcmludGVkLCBidXQKK2AtLW1ham9yYCwgYC0tbWlub3JgIG9yIGAtLXBhdGNoYCBjYW4gYmUgdXNlZCB0byBvbmx5IHByaW50IG9uZSBvZiB0aGVzZQordmFsdWVzIGluc3RlYWQuCisiIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCisKKyMgRXhwZWN0ZWQgaW5wdXQ6CisjCisjICAuLi4KKyMgIHZlcnNpb25faW5mbz0nMjM6MjoxNycKKyMgIC4uLgorCitSRV9WRVJTSU9OX0lORk8gPSByZS5jb21waWxlKHIiXnZlcnNpb25faW5mbz0nKFxkKyk6KFxkKyk6KFxkKyknIikKKworCitkZWYgcGFyc2VfY29uZmlndXJlX3JhdyhoZWFkZXIpOgorICAgIG1ham9yID0gTm9uZQorICAgIG1pbm9yID0gTm9uZQorICAgIHBhdGNoID0gTm9uZQorCisgICAgZm9yIGxpbmUgaW4gaGVhZGVyLnNwbGl0bGluZXMoKToKKyAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgbSA9IFJFX1ZFUlNJT05fSU5GTy5tYXRjaChsaW5lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgYXNzZXJ0IG1ham9yID09IE5vbmUsICJ2ZXJzaW9uX2luZm8gYXBwZWFycyBtb3JlIHRoYW4gb25jZSEiCisgICAgICAgICAgICBtYWpvciA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgIG1pbm9yID0gbS5ncm91cCgyKQorICAgICAgICAgICAgcGF0Y2ggPSBtLmdyb3VwKDMpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgYXNzZXJ0ICgKKyAgICAgICAgbWFqb3IgYW5kIG1pbm9yIGFuZCBwYXRjaAorICAgICksICJUaGlzIGlucHV0IGZpbGUgaXMgbWlzc2luZyBhIHZlcnNpb25faW5mbyBkZWZpbml0aW9uISIKKworICAgIHJldHVybiAobWFqb3IsIG1pbm9yLCBwYXRjaCkKKworCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPV9fZG9jX18pCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICBncm91cC5hZGRfYXJndW1lbnQoCisgICAgICAgICItLW1ham9yIiwKKyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgaGVscD0iT25seSBwcmludCB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIuIiwKKyAgICApCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS1taW5vciIsCisgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGhlbHA9Ik9ubHkgcHJpbnQgdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyLiIsCisgICAgKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tcGF0Y2giLAorICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICBoZWxwPSJPbmx5IHByaW50IHRoZSBwYXRjaCB2ZXJzaW9uIG51bWJlci4iLAorICAgICkKKyAgICBncm91cC5hZGRfYXJndW1lbnQoCisgICAgICAgICItLXNvdmVyc2lvbiIsCisgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGhlbHA9Ik9ubHkgcHJpbnQgdGhlIGxpYnRvb2wgbGlicmFyeSBzdWZmaXguIiwKKyAgICApCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiaW5wdXQiLAorICAgICAgICBtZXRhdmFyPSJDT05GSUdVUkVfUkFXIiwKKyAgICAgICAgaGVscD0iVGhlIGlucHV0IGNvbmZpZ3VyZS5yYXcgZmlsZSB0byBwYXJzZS4iLAorICAgICkKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgd2l0aCBvcGVuKGFyZ3MuaW5wdXQpIGFzIGY6CisgICAgICAgIHJhd19maWxlID0gZi5yZWFkKCkKKworICAgIHZlcnNpb24gPSBwYXJzZV9jb25maWd1cmVfcmF3KHJhd19maWxlKQorCisgICAgaWYgYXJncy5tYWpvcjoKKyAgICAgICAgcHJpbnQodmVyc2lvblswXSkKKyAgICBlbGlmIGFyZ3MubWlub3I6CisgICAgICAgIHByaW50KHZlcnNpb25bMV0pCisgICAgZWxpZiBhcmdzLnBhdGNoOgorICAgICAgICBwcmludCh2ZXJzaW9uWzJdKQorICAgIGVsaWYgYXJncy5zb3ZlcnNpb246CisgICAgICAgICMgQ29udmVydCBsaWJ0b29sIHZlcnNpb25faW5mbyB0byB0aGUgbGlicmFyeSBzdWZmaXguCisgICAgICAgICMgKGN1cnJlbnQscmV2aXNpb24sIGFnZSkgLT4gKGN1cnJlbnQgLSBhZ2UsIGFnZSwgcmV2aXNpb24pCisgICAgICAgIHByaW50KAorICAgICAgICAgICAgIiVkLiVzLiVzIgorICAgICAgICAgICAgJSAoaW50KHZlcnNpb25bMF0pIC0gaW50KHZlcnNpb25bMl0pLCB2ZXJzaW9uWzJdLCB2ZXJzaW9uWzFdKQorICAgICAgICApCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIiVzLiVzLiVzIiAlIHZlcnNpb24pCisKKyAgICByZXR1cm4gMAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvYnVpbGRzL21lc29uL2dlbmVyYXRlX3JlZmVyZW5jZV9kb2NzLnB5IGIvYnVpbGRzL21lc29uL2dlbmVyYXRlX3JlZmVyZW5jZV9kb2NzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTAxN2MKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZHMvbWVzb24vZ2VuZXJhdGVfcmVmZXJlbmNlX2RvY3MucHkKQEAgLTAsMCArMSw3OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJHZW5lcmF0ZSBGcmVlVHlwZSByZWZlcmVuY2UgZG9jdW1lbnRhdGlvbi4iIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBnbG9iCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCisKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj1fX2RvY19fKQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0taW5wdXQtZGlyIiwKKyAgICAgICAgcmVxdWlyZWQ9VHJ1ZSwKKyAgICAgICAgaGVscD0iVG9wLWxldmVsIEZyZWVUeXBlIHNvdXJjZSBkaXJlY3RvcnkuIiwKKyAgICApCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS12ZXJzaW9uIiwgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0nRnJlZVR5cGUgdmVyc2lvbiAoZS5nLiAiMi54LnkiKS4nCisgICAgKQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tb3V0cHV0LWRpciIsIHJlcXVpcmVkPVRydWUsIGhlbHA9Ik91dHB1dCBkaXJlY3RvcnkuIgorICAgICkKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICAjIEdldCB0aGUgbGlzdCBvZiBpbnB1dCBmaWxlcyBvZiBpbnRlcmVzdC4KKyAgICBpbmNsdWRlX2RpciA9IG9zLnBhdGguam9pbihhcmdzLmlucHV0X2RpciwgImluY2x1ZGUiKQorICAgIGluY2x1ZGVfY29uZmlnX2RpciA9IG9zLnBhdGguam9pbihpbmNsdWRlX2RpciwgImNvbmZpZyIpCisgICAgaW5jbHVkZV9jYWNoZV9kaXIgPSBvcy5wYXRoLmpvaW4oaW5jbHVkZV9kaXIsICJjYWNoZSIpCisKKyAgICBhbGxfaGVhZGVycyA9ICgKKyAgICAgICAgZ2xvYi5nbG9iKG9zLnBhdGguam9pbihhcmdzLmlucHV0X2RpciwgImluY2x1ZGUiLCAiZnJlZXR5cGUiLCAiKi5oIikpCisgICAgICAgICsgZ2xvYi5nbG9iKAorICAgICAgICAgICAgb3MucGF0aC5qb2luKAorICAgICAgICAgICAgICAgIGFyZ3MuaW5wdXRfZGlyLCAiaW5jbHVkZSIsICJmcmVldHlwZSIsICJjb25maWciLCAiKi5oIgorICAgICAgICAgICAgKQorICAgICAgICApCisgICAgICAgICsgZ2xvYi5nbG9iKAorICAgICAgICAgICAgb3MucGF0aC5qb2luKAorICAgICAgICAgICAgICAgIGFyZ3MuaW5wdXRfZGlyLCAiaW5jbHVkZSIsICJmcmVldHlwZSIsICJjYWNoZSIsICIqLmgiCisgICAgICAgICAgICApCisgICAgICAgICkKKyAgICApCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJncy5vdXRwdXRfZGlyKToKKyAgICAgICAgb3MubWFrZWRpcnMoYXJncy5vdXRwdXRfZGlyKQorICAgIGVsc2U6CisgICAgICAgIGFzc2VydCBvcy5wYXRoLmlzZGlyKGFyZ3Mub3V0cHV0X2RpciksICgKKyAgICAgICAgICAgICJOb3QgYSBkaXJlY3Rvcnk6ICIgKyBhcmdzLm91dHB1dF9kaXIKKyAgICAgICAgKQorCisgICAgY21kcyA9IFsKKyAgICAgICAgc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICItbSIsCisgICAgICAgICJkb2N3cml0ZXIiLAorICAgICAgICAiLS1wcmVmaXg9ZnQyIiwKKyAgICAgICAgIi0tdGl0bGU9RnJlZVR5cGUtIiArIGFyZ3MudmVyc2lvbiwKKyAgICAgICAgIi0tc2l0ZT1yZWZlcmVuY2UiLAorICAgICAgICAiLS1vdXRwdXQ9IiArIGFyZ3Mub3V0cHV0X2RpciwKKyAgICBdICsgYWxsX2hlYWRlcnMKKworICAgIHByaW50KCJSdW5uaW5nIGRvY3dyaXRlci4uLiIpCisgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKGNtZHMpCisKKyAgICBwcmludCgiQnVpbGRpbmcgc3RhdGljIHNpdGUuLi4iKQorICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbCgKKyAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLW0iLCAibWtkb2NzIiwgImJ1aWxkIl0sIGN3ZD1hcmdzLm91dHB1dF9kaXIKKyAgICApCisgICAgcmV0dXJuIDAKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL2J1aWxkcy9tZXNvbi9wYXJzZV9tb2R1bGVzX2NmZy5weSBiL2J1aWxkcy9tZXNvbi9wYXJzZV9tb2R1bGVzX2NmZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGY3NjA1Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbGRzL21lc29uL3BhcnNlX21vZHVsZXNfY2ZnLnB5CkBAIC0wLDAgKzEsMTYwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyIiIlBhcnNlIG1vZHVsZXMuY2ZnIGFuZCBkdW1wIGl0cyBvdXRwdXQgZWl0aGVyIGFzIGZ0bW9kdWxlLmggb3IgYSBsaXN0IG9mCitiYXNlIGV4dGVuc2lvbnMuCisiIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCisKKyMgRXhwZWN0ZWQgaW5wdXQ6CisjCisjICAuLi4KKyMgIEZPTlRfTU9EVUxFUyArPSA8bmFtZT4KKyMgIEhJTlRJTkdfTU9EVUxFUyArPSA8bmFtZT4KKyMgIFJBU1RFUl9NT0RVTEVTICs9IDxuYW1lPgorIyAgQVVYX01PRFVMRVMgKz0gPG5hbWU+CisjICBCQVNFX0VYVEVOU0lPTlMgKz0gPG5hbWU+CisjICAuLi4KKworCitkZWYgcGFyc2VfbW9kdWxlc19jZmcoaW5wdXRfZmlsZSk6CisKKyAgICBsaXN0cyA9IHsKKyAgICAgICAgIkZPTlRfTU9EVUxFUyI6IFtdLAorICAgICAgICAiSElOVElOR19NT0RVTEVTIjogW10sCisgICAgICAgICJSQVNURVJfTU9EVUxFUyI6IFtdLAorICAgICAgICAiQVVYX01PRFVMRVMiOiBbXSwKKyAgICAgICAgIkJBU0VfRVhURU5TSU9OUyI6IFtdLAorICAgIH0KKworICAgIGZvciBsaW5lIGluIGlucHV0X2ZpbGUuc3BsaXRsaW5lcygpOgorICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQorICAgICAgICAjIElnbm9yZSBlbXB0eSBsaW5lcyBhbmQgdGhvc2UgdGhhdCBzdGFydCB3aXRoIGEgY29tbWVudC4KKyAgICAgICAgaWYgbm90IGxpbmUgb3IgbGluZVswXSA9PSAiIyI6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGl0ZW1zID0gbGluZS5zcGxpdCgpCisgICAgICAgIGFzc2VydCBsZW4oaXRlbXMpID09IDMgYW5kIGl0ZW1zWzFdID09ICIrPSIsICgKKyAgICAgICAgICAgICJVbmV4cGVjdGVkIGlucHV0IGxpbmUgWyVzXSIgJSBsaW5lCisgICAgICAgICkKKyAgICAgICAgYXNzZXJ0IGl0ZW1zWzBdIGluIGxpc3RzLCAoCisgICAgICAgICAgICAiVW5leHBlY3RlZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWUgIiArIGl0ZW1zWzBdCisgICAgICAgICkKKworICAgICAgICBsaXN0c1tpdGVtc1swXV0uYXBwZW5kKGl0ZW1zWzJdKQorCisgICAgcmV0dXJuIGxpc3RzCisKKworZGVmIGdlbmVyYXRlX2Z0bW9kdWxlKGxpc3RzKToKKyAgICByZXN1bHQgPSAiLyogVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlLiAqL1xuIgorICAgIGZvciBkcml2ZXIgaW4gbGlzdHNbIkZPTlRfTU9EVUxFUyJdOgorICAgICAgICBpZiBkcml2ZXIgPT0gInNmbnQiOiAgIyBTcGVjaWFsIGNhc2UgZm9yIHRoZSBzZm50ICdkcml2ZXInLgorICAgICAgICAgICAgcmVzdWx0ICs9ICJGVF9VU0VfTU9EVUxFKCBGVF9Nb2R1bGVfQ2xhc3MsIHNmbnRfbW9kdWxlX2NsYXNzIClcbiIKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgbmFtZSA9IHsKKyAgICAgICAgICAgICJ0cnVldHlwZSI6ICJ0dCIsCisgICAgICAgICAgICAidHlwZTEiOiAidDEiLAorICAgICAgICAgICAgImNpZCI6ICJ0MWNpZCIsCisgICAgICAgICAgICAidHlwZTQyIjogInQ0MiIsCisgICAgICAgICAgICAid2luZm9udHMiOiAid2luZm50IiwKKyAgICAgICAgfS5nZXQoZHJpdmVyLCBkcml2ZXIpCisgICAgICAgIHJlc3VsdCArPSAoCisgICAgICAgICAgICAiRlRfVVNFX01PRFVMRSggRlRfRHJpdmVyX0NsYXNzUmVjLCAlc19kcml2ZXJfY2xhc3MgKVxuIiAlIG5hbWUKKyAgICAgICAgKQorCisgICAgZm9yIG1vZHVsZSBpbiBsaXN0c1siSElOVElOR19NT0RVTEVTIl06CisgICAgICAgIHJlc3VsdCArPSAoCisgICAgICAgICAgICAiRlRfVVNFX01PRFVMRSggRlRfTW9kdWxlX0NsYXNzLCAlc19tb2R1bGVfY2xhc3MgKVxuIiAlIG1vZHVsZQorICAgICAgICApCisKKyAgICBmb3IgbW9kdWxlIGluIGxpc3RzWyJSQVNURVJfTU9EVUxFUyJdOgorICAgICAgICBuYW1lID0geworICAgICAgICAgICAgInJhc3RlciI6ICJmdF9yYXN0ZXIxIiwKKyAgICAgICAgICAgICJzbW9vdGgiOiAiZnRfc21vb3RoIiwKKyAgICAgICAgfS5nZXQobW9kdWxlKQorICAgICAgICByZXN1bHQgKz0gKAorICAgICAgICAgICAgIkZUX1VTRV9NT0RVTEUoIEZUX1JlbmRlcmVyX0NsYXNzLCAlc19yZW5kZXJlcl9jbGFzcyApXG4iICUgbmFtZQorICAgICAgICApCisKKyAgICBmb3IgbW9kdWxlIGluIGxpc3RzWyJBVVhfTU9EVUxFUyJdOgorICAgICAgICBpZiBtb2R1bGUgaW4gKCJwc2F1eCIsICJwc25hbWVzIiwgIm90dmFsaWQiLCAiZ3h2YWxpZCIpOgorICAgICAgICAgICAgcmVzdWx0ICs9ICgKKyAgICAgICAgICAgICAgICAiRlRfVVNFX01PRFVMRSggRlRfTW9kdWxlX0NsYXNzLCAlc19tb2R1bGVfY2xhc3MgKVxuIiAlIG1vZHVsZQorICAgICAgICAgICAgKQorCisgICAgcmVzdWx0ICs9ICIvKiBFT0YgKi9cbiIKKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIGdlbmVyYXRlX21haW5fbW9kdWxlcyhsaXN0cyk6CisgICAgcmV0dXJuICJcbiIuam9pbigKKyAgICAgICAgbGlzdHNbIkZPTlRfTU9EVUxFUyJdCisgICAgICAgICsgbGlzdHNbIkhJTlRJTkdfTU9EVUxFUyJdCisgICAgICAgICsgbGlzdHNbIlJBU1RFUl9NT0RVTEVTIl0KKyAgICApCisKKworZGVmIGdlbmVyYXRlX2F1eF9tb2R1bGVzKGxpc3RzKToKKyAgICByZXR1cm4gIlxuIi5qb2luKGxpc3RzWyJBVVhfTU9EVUxFUyJdKQorCisKK2RlZiBnZW5lcmF0ZV9iYXNlX2V4dGVuc2lvbnMobGlzdHMpOgorICAgIHJldHVybiAiXG4iLmpvaW4obGlzdHNbIkJBU0VfRVhURU5TSU9OUyJdKQorCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249X19kb2NfXykKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLWZvcm1hdCIsCisgICAgICAgIHJlcXVpcmVkPVRydWUsCisgICAgICAgIGNob2ljZXM9KAorICAgICAgICAgICAgImZ0bW9kdWxlLmgiLAorICAgICAgICAgICAgIm1haW4tbW9kdWxlcyIsCisgICAgICAgICAgICAiYXV4LW1vZHVsZXMiLAorICAgICAgICAgICAgImJhc2UtZXh0ZW5zaW9ucy1saXN0IiwKKyAgICAgICAgKSwKKyAgICAgICAgaGVscD0iU2VsZWN0IG91dHB1dCBmb3JtYXQuIiwKKyAgICApCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiaW5wdXQiLAorICAgICAgICBtZXRhdmFyPSJDT05GSUdVUkVfUkFXIiwKKyAgICAgICAgaGVscD0iVGhlIGlucHV0IGNvbmZpZ3VyZS5yYXcgZmlsZSB0byBwYXJzZS4iLAorICAgICkKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tb3V0cHV0IiwgaGVscD0iT3V0cHV0IGZpbGUgKGRlZmF1bHQgaXMgc3Rkb3V0KS4iKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICB3aXRoIG9wZW4oYXJncy5pbnB1dCkgYXMgZjoKKyAgICAgICAgaW5wdXRfZGF0YSA9IGYucmVhZCgpCisKKyAgICBsaXN0cyA9IHBhcnNlX21vZHVsZXNfY2ZnKGlucHV0X2RhdGEpCisKKyAgICBpZiBhcmdzLmZvcm1hdCA9PSAiZnRtb2R1bGUuaCI6CisgICAgICAgIHJlc3VsdCA9IGdlbmVyYXRlX2Z0bW9kdWxlKGxpc3RzKQorICAgIGVsaWYgYXJncy5mb3JtYXQgPT0gIm1haW4tbW9kdWxlcyI6CisgICAgICAgIHJlc3VsdCA9IGdlbmVyYXRlX21haW5fbW9kdWxlcyhsaXN0cykKKyAgICBlbGlmIGFyZ3MuZm9ybWF0ID09ICJhdXgtbW9kdWxlcyI6CisgICAgICAgIHJlc3VsdCA9IGdlbmVyYXRlX2F1eF9tb2R1bGVzKGxpc3RzKQorICAgIGVsaWYgYXJncy5mb3JtYXQgPT0gImJhc2UtZXh0ZW5zaW9ucy1saXN0IjoKKyAgICAgICAgcmVzdWx0ID0gZ2VuZXJhdGVfYmFzZV9leHRlbnNpb25zKGxpc3RzKQorICAgIGVsc2U6CisgICAgICAgIGFzc2VydCBGYWxzZSwgIkludmFsaWQgb3V0cHV0IGZvcm1hdCEiCisKKyAgICBpZiBhcmdzLm91dHB1dDoKKyAgICAgICAgd2l0aCBvcGVuKGFyZ3Mub3V0cHV0LCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHJlc3VsdCkKKyAgICBlbHNlOgorICAgICAgICBwcmludChyZXN1bHQpCisgICAgcmV0dXJuIDAKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL2J1aWxkcy9tZXNvbi9wcm9jZXNzX2Z0b3B0aW9uX2gucHkgYi9idWlsZHMvbWVzb24vcHJvY2Vzc19mdG9wdGlvbl9oLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjgwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZHMvbWVzb24vcHJvY2Vzc19mdG9wdGlvbl9oLnB5CkBAIC0wLDAgKzEsMTA1IEBACisjIS91c3IvYmluL3B5dGhvbgorIiIiVG9nZ2xlIHNldHRpbmdzIGluIGBmdG9wdGlvbi5oYCBmaWxlIGJhc2VkIG9uIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuCisKK1RoaXMgc2NyaXB0IHRha2VzIGFuIGBmdG9wdGlvbi5oYCBmaWxlIGFzIGlucHV0IGFuZCByZXdyaXRlcworYCNkZWZpbmVgL2AjdW5kZWZgIGxpbmVzIGluIGl0IGJhc2VkIG9uIGAtLWVuYWJsZT1DT05GSUdfVkFSTkFNRWAgb3IKK2AtLWRpc2FibGU9Q09ORklHX1ZBUk5BTUVgIGFyZ3VtZW50cyBwYXNzZWQgdG8gaXQsIHdoZXJlIGBDT05GSUdfVkFSTkFNRWAgaXMKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZSwgc3VjaCBhcyBgRlRfQ09ORklHX09QVElPTl9VU0VfTFpXYCwgdGhhdCBtYXkKK2FwcGVhciBpbiB0aGUgZmlsZS4KKworTm90ZSB0aGF0IGlmIG9uZSBvZiBgQ09ORklHX1ZBUk5BTUVgIGlzIG5vdCBmb3VuZCBpbiB0aGUgaW5wdXQgZmlsZSwgdGhpcworc2NyaXB0IGV4aXRzIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBsaXN0aW5nIHRoZSBtaXNzaW5nIHZhcmlhYmxlIG5hbWVzLgorIiIiCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKKworCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPV9fZG9jX18pCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiaW5wdXQiLCBtZXRhdmFyPSJGVE9QVElPTl9IIiwgaGVscD0iUGF0aCB0byBpbnB1dCBmdG9wdGlvbi5oIGZpbGUuIgorICAgICkKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tb3V0cHV0IiwgaGVscD0iT3V0cHV0IHRvIGZpbGUgaW5zdGVhZCBvZiBzdGRvdXQuIikKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLWVuYWJsZSIsCisgICAgICAgIGFjdGlvbj0iYXBwZW5kIiwKKyAgICAgICAgZGVmYXVsdD1bXSwKKyAgICAgICAgaGVscD0iRW5hYmxlIGEgZ2l2ZW4gYnVpbGQgb3B0aW9uIChlLmcuIEZUX0NPTkZJR19PUFRJT05fVVNFX0xaVykuIiwKKyAgICApCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS1kaXNhYmxlIiwKKyAgICAgICAgYWN0aW9uPSJhcHBlbmQiLAorICAgICAgICBkZWZhdWx0PVtdLAorICAgICAgICBoZWxwPSJEaXNhYmxlIGEgZ2l2ZW4gYnVpbGQgb3B0aW9uLiIsCisgICAgKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGNvbW1vbl9vcHRpb25zID0gc2V0KGFyZ3MuZW5hYmxlKSAmIHNldChhcmdzLmRpc2FibGUpCisgICAgaWYgY29tbW9uX29wdGlvbnM6CisgICAgICAgIHBhcnNlci5lcnJvcigKKyAgICAgICAgICAgICJPcHRpb25zIGNhbm5vdCBiZSBib3RoIGVuYWJsZWQgYW5kIGRpc2FibGVkOiAlcyIKKyAgICAgICAgICAgICUgc29ydGVkKGNvbW1vbl9vcHRpb25zKQorICAgICAgICApCisgICAgICAgIHJldHVybiAxCisKKyAgICB3aXRoIG9wZW4oYXJncy5pbnB1dCkgYXMgZjoKKyAgICAgICAgaW5wdXRfZmlsZSA9IGYucmVhZCgpCisKKyAgICBvcHRpb25zX3NlZW4gPSBzZXQoKQorCisgICAgbmV3X2xpbmVzID0gW10KKyAgICBmb3IgbGluZSBpbiBpbnB1dF9maWxlLnNwbGl0bGluZXMoKToKKyAgICAgICAgIyBFeHBlY3RlZCBmb3JtYXRzOgorICAgICAgICAjICAgI2RlZmluZSA8Q09ORklHX1ZBUj4KKyAgICAgICAgIyAgIC8qICNkZWZpbmUgPENPTkZJR19WQVI+ICovCisgICAgICAgICMgICAjdW5kZWYgPENPTkZJR19WQVI+CisgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiLyogI2RlZmluZSAiKSBhbmQgbGluZS5lbmRzd2l0aCgiICovIik6CisgICAgICAgICAgICBvcHRpb25fbmFtZSA9IGxpbmVbMTE6LTNdLnN0cmlwKCkKKyAgICAgICAgICAgIG9wdGlvbl9lbmFibGVkID0gRmFsc2UKKyAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIiNkZWZpbmUgIik6CisgICAgICAgICAgICBvcHRpb25fbmFtZSA9IGxpbmVbODpdLnN0cmlwKCkKKyAgICAgICAgICAgIG9wdGlvbl9lbmFibGVkID0gVHJ1ZQorICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiI3VuZGVmICIpOgorICAgICAgICAgICAgb3B0aW9uX25hbWUgPSBsaW5lWzc6XS5zdHJpcCgpCisgICAgICAgICAgICBvcHRpb25fZW5hYmxlZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXdfbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG9wdGlvbnNfc2Vlbi5hZGQob3B0aW9uX25hbWUpCisgICAgICAgIGlmIG9wdGlvbl9lbmFibGVkIGFuZCBvcHRpb25fbmFtZSBpbiBhcmdzLmRpc2FibGU6CisgICAgICAgICAgICBsaW5lID0gIiN1bmRlZiAiICsgb3B0aW9uX25hbWUKKyAgICAgICAgZWxpZiBub3Qgb3B0aW9uX2VuYWJsZWQgYW5kIG9wdGlvbl9uYW1lIGluIGFyZ3MuZW5hYmxlOgorICAgICAgICAgICAgbGluZSA9ICIjZGVmaW5lICIgKyBvcHRpb25fbmFtZQorICAgICAgICBuZXdfbGluZXMuYXBwZW5kKGxpbmUpCisKKyAgICByZXN1bHQgPSAiXG4iLmpvaW4obmV3X2xpbmVzKQorCisgICAgIyBTYW5pdHkgY2hlY2sgdGhhdCBhbGwgY29tbWFuZC1saW5lIG9wdGlvbnMgd2VyZSBhY3R1YWxseSBwcm9jZXNzZWQuCisgICAgY21kbGluZV9vcHRpb25zID0gc2V0KGFyZ3MuZW5hYmxlKSB8IHNldChhcmdzLmRpc2FibGUpCisgICAgYXNzZXJ0IGNtZGxpbmVfb3B0aW9ucy5pc3N1YnNldCgKKyAgICAgICAgb3B0aW9uc19zZWVuCisgICAgKSwgIkNvdWxkIG5vdCBmaW5kIG9wdGlvbnMgaW4gaW5wdXQgZmlsZTogIiArICIsICIuam9pbigKKyAgICAgICAgc29ydGVkKGNtZGxpbmVfb3B0aW9ucyAtIG9wdGlvbnNfc2VlbikKKyAgICApCisKKyAgICBpZiBhcmdzLm91dHB1dDoKKyAgICAgICAgd2l0aCBvcGVuKGFyZ3Mub3V0cHV0LCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHJlc3VsdCkKKyAgICBlbHNlOgorICAgICAgICBwcmludChyZXN1bHQpCisKKyAgICByZXR1cm4gMAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvYnVpbGRzL21vZHVsZXMubWsgYi9idWlsZHMvbW9kdWxlcy5tawppbmRleCA4ODg2ZmIzLi5hZTJlMjM4IDEwMDY0NAotLS0gYS9idWlsZHMvbW9kdWxlcy5taworKysgYi9idWlsZHMvbW9kdWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9vczIvZGV0ZWN0Lm1rIGIvYnVpbGRzL29zMi9kZXRlY3QubWsKaW5kZXggOGUyOTQ1MC4uNjU5YjZjNCAxMDA2NDQKLS0tIGEvYnVpbGRzL29zMi9kZXRlY3QubWsKKysrIGIvYnVpbGRzL29zMi9kZXRlY3QubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvb3MyL29zMi1kZWYubWsgYi9idWlsZHMvb3MyL29zMi1kZWYubWsKaW5kZXggN2ExNjk5ZS4uYjA5NzY1NCAxMDA2NDQKLS0tIGEvYnVpbGRzL29zMi9vczItZGVmLm1rCisrKyBiL2J1aWxkcy9vczIvb3MyLWRlZi5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9vczIvb3MyLWRldi5tayBiL2J1aWxkcy9vczIvb3MyLWRldi5tawppbmRleCAxYjgzODM2Li44ZTJhNGViIDEwMDY0NAotLS0gYS9idWlsZHMvb3MyL29zMi1kZXYubWsKKysrIGIvYnVpbGRzL29zMi9vczItZGV2Lm1rCkBAIC01LDcgKzUsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL29zMi9vczItZ2NjLm1rIGIvYnVpbGRzL29zMi9vczItZ2NjLm1rCmluZGV4IDYzYTNlZDEuLjJiZDM5YWUgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9vczIvb3MyLWdjYy5taworKysgYi9idWlsZHMvb3MyL29zMi1nY2MubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvc3ltYmlhbi9ibGQuaW5mIGIvYnVpbGRzL3N5bWJpYW4vYmxkLmluZgppbmRleCAwZmExNmMzLi45NzM5ZGExIDEwMDY0NAotLS0gYS9idWlsZHMvc3ltYmlhbi9ibGQuaW5mCisrKyBiL2J1aWxkcy9zeW1iaWFuL2JsZC5pbmYKQEAgLTIsNyArMiw3IEBACiAvLyBGcmVlVHlwZSAyIHByb2plY3QgZm9yIHRoZSBzeW1iaWFuIHBsYXRmb3JtCiAvLwogCi0vLyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBieQorLy8gQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgYnkKIC8vIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIC8vCiAvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL3N5bWJpYW4vZnJlZXR5cGUubW1wIGIvYnVpbGRzL3N5bWJpYW4vZnJlZXR5cGUubW1wCmluZGV4IGJmYmJjYWYuLjkwZmM2YmIgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9zeW1iaWFuL2ZyZWV0eXBlLm1tcAorKysgYi9idWlsZHMvc3ltYmlhbi9mcmVldHlwZS5tbXAKQEAgLTIsNyArMiw3IEBACiAvLyBGcmVlVHlwZSAyIG1ha2VmaWxlIGZvciB0aGUgc3ltYmlhbiBwbGF0Zm9ybQogLy8KIAotLy8gQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgYnkKKy8vIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIGJ5CiAvLyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAvLwogLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy90b3BsZXZlbC5tayBiL2J1aWxkcy90b3BsZXZlbC5tawppbmRleCAzMzNiNzc1Li41ZGU2MWMxIDEwMDY0NAotLS0gYS9idWlsZHMvdG9wbGV2ZWwubWsKKysrIGIvYnVpbGRzL3RvcGxldmVsLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApAQCAtMjY4LDcgKzI2OCw3IEBACiAJY3AgJChDT05GSUdfU1VCKSBidWlsZHMvdW5peAogCiAJQCMgUmVtb3ZlIGludGVybWVkaWF0ZSBmaWxlcyBjcmVhdGVkIGJ5IHRoZSBgcmVmZG9jJyB0YXJnZXQuCi0Jcm0gLXJmIGRvY3MvcmVmZXJlbmNlL21hcmtkb3duCi0Jcm0gLWYgZG9jcy9yZWZlcmVuY2UvbWtkb2NzLnltbAorCXJtIC1yZiBkb2NzL21hcmtkb3duCisJcm0gLWYgZG9jcy9ta2RvY3MueW1sCiAKICMgRU9GCmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC9heF9jb21wYXJlX3ZlcnNpb24ubTQgYi9idWlsZHMvdW5peC9heF9jb21wYXJlX3ZlcnNpb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZiNDk5NwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWxkcy91bml4L2F4X2NvbXBhcmVfdmVyc2lvbi5tNApAQCAtMCwwICsxLDE3NyBAQAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgICAgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X2NvbXBhcmVfdmVyc2lvbi5odG1sCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTWU5PUFNJUworIworIyAgIEFYX0NPTVBBUkVfVkVSU0lPTihWRVJTSU9OX0EsIE9QLCBWRVJTSU9OX0IsIFtBQ1RJT04tSUYtVFJVRV0sIFtBQ1RJT04tSUYtRkFMU0VdKQorIworIyBERVNDUklQVElPTgorIworIyAgIFRoaXMgbWFjcm8gY29tcGFyZXMgdHdvIHZlcnNpb24gc3RyaW5ncy4gRHVlIHRvIHRoZSB2YXJpb3VzIG51bWJlciBvZgorIyAgIG1pbm9yLXZlcnNpb24gbnVtYmVycyB0aGF0IGNhbiBleGlzdCwgYW5kIHRoZSBmYWN0IHRoYXQgc3RyaW5nCisjICAgY29tcGFyaXNvbnMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggbnVtZXJpYyBjb21wYXJpc29ucywgdGhpcyBpcyBub3QKKyMgICBuZWNlc3NhcmlseSB0cml2aWFsIHRvIGRvIGluIGEgYXV0b2NvbmYgc2NyaXB0LiBUaGlzIG1hY3JvIG1ha2VzIGRvaW5nCisjICAgdGhlc2UgY29tcGFyaXNvbnMgZWFzeS4KKyMKKyMgICBUaGUgc2l4IGJhc2ljIGNvbXBhcmlzb25zIGFyZSBhdmFpbGFibGUsIGFzIHdlbGwgYXMgY2hlY2tpbmcgZXF1YWxpdHkKKyMgICBsaW1pdGVkIHRvIGEgY2VydGFpbiBudW1iZXIgb2YgbWlub3ItdmVyc2lvbiBsZXZlbHMuCisjCisjICAgVGhlIG9wZXJhdG9yIE9QIGRldGVybWluZXMgd2hhdCB0eXBlIG9mIGNvbXBhcmlzb24gdG8gZG8sIGFuZCBjYW4gYmUgb25lCisjICAgb2Y6CisjCisjICAgIGVxICAtIGVxdWFsICh0ZXN0IEEgPT0gQikKKyMgICAgbmUgIC0gbm90IGVxdWFsICh0ZXN0IEEgIT0gQikKKyMgICAgbGUgIC0gbGVzcyB0aGFuIG9yIGVxdWFsICh0ZXN0IEEgPD0gQikKKyMgICAgZ2UgIC0gZ3JlYXRlciB0aGFuIG9yIGVxdWFsICh0ZXN0IEEgPj0gQikKKyMgICAgbHQgIC0gbGVzcyB0aGFuICh0ZXN0IEEgPCBCKQorIyAgICBndCAgLSBncmVhdGVyIHRoYW4gKHRlc3QgQSA+IEIpCisjCisjICAgQWRkaXRpb25hbGx5LCB0aGUgZXEgYW5kIG5lIG9wZXJhdG9yIGNhbiBoYXZlIGEgbnVtYmVyIGFmdGVyIGl0IHRvIGxpbWl0CisjICAgdGhlIHRlc3QgdG8gdGhhdCBudW1iZXIgb2YgbWlub3IgdmVyc2lvbnMuCisjCisjICAgIGVxMCAtIGVxdWFsIHVwIHRvIHRoZSBsZW5ndGggb2YgdGhlIHNob3J0ZXIgdmVyc2lvbgorIyAgICBuZTAgLSBub3QgZXF1YWwgdXAgdG8gdGhlIGxlbmd0aCBvZiB0aGUgc2hvcnRlciB2ZXJzaW9uCisjICAgIGVxTiAtIGVxdWFsIHVwIHRvIE4gc3ViLXZlcnNpb24gbGV2ZWxzCisjICAgIG5lTiAtIG5vdCBlcXVhbCB1cCB0byBOIHN1Yi12ZXJzaW9uIGxldmVscworIworIyAgIFdoZW4gdGhlIGNvbmRpdGlvbiBpcyB0cnVlLCBzaGVsbCBjb21tYW5kcyBBQ1RJT04tSUYtVFJVRSBhcmUgcnVuLAorIyAgIG90aGVyd2lzZSBzaGVsbCBjb21tYW5kcyBBQ1RJT04tSUYtRkFMU0UgYXJlIHJ1bi4gVGhlIGVudmlyb25tZW50CisjICAgdmFyaWFibGUgJ2F4X2NvbXBhcmVfdmVyc2lvbicgaXMgYWx3YXlzIHNldCB0byBlaXRoZXIgJ3RydWUnIG9yICdmYWxzZScKKyMgICBhcyB3ZWxsLgorIworIyAgIEV4YW1wbGVzOgorIworIyAgICAgQVhfQ09NUEFSRV9WRVJTSU9OKFszLjE1LjddLFtsdF0sWzMuMTUuOF0pCisjICAgICBBWF9DT01QQVJFX1ZFUlNJT04oWzMuMTVdLFtsdF0sWzMuMTUuOF0pCisjCisjICAgd291bGQgYm90aCBiZSB0cnVlLgorIworIyAgICAgQVhfQ09NUEFSRV9WRVJTSU9OKFszLjE1LjddLFtlcV0sWzMuMTUuOF0pCisjICAgICBBWF9DT01QQVJFX1ZFUlNJT04oWzMuMTVdLFtndF0sWzMuMTUuOF0pCisjCisjICAgd291bGQgYm90aCBiZSBmYWxzZS4KKyMKKyMgICAgIEFYX0NPTVBBUkVfVkVSU0lPTihbMy4xNS43XSxbZXEyXSxbMy4xNS44XSkKKyMKKyMgICB3b3VsZCBiZSB0cnVlIGJlY2F1c2UgaXQgaXMgb25seSBjb21wYXJpbmcgdHdvIG1pbm9yIHZlcnNpb25zLgorIworIyAgICAgQVhfQ09NUEFSRV9WRVJTSU9OKFszLjE1LjddLFtlcTBdLFszLjE1XSkKKyMKKyMgICB3b3VsZCBiZSB0cnVlIGJlY2F1c2UgaXQgaXMgb25seSBjb21wYXJpbmcgdGhlIGxlc3NlciBudW1iZXIgb2YgbWlub3IKKyMgICB2ZXJzaW9ucyBvZiB0aGUgdHdvIHZhbHVlcy4KKyMKKyMgICBOb3RlOiBUaGUgY2hhcmFjdGVycyB0aGF0IHNlcGFyYXRlIHRoZSB2ZXJzaW9uIG51bWJlcnMgZG8gbm90IG1hdHRlci4gQW4KKyMgICBlbXB0eSBzdHJpbmcgaXMgdGhlIHNhbWUgYXMgdmVyc2lvbiAwLiBPUCBpcyBldmFsdWF0ZWQgYnkgYXV0b2NvbmYsIG5vdAorIyAgIGNvbmZpZ3VyZSwgc28gbXVzdCBiZSBhIHN0cmluZywgbm90IGEgdmFyaWFibGUuCisjCisjICAgVGhlIGF1dGhvciB3b3VsZCBsaWtlIHRvIGFja25vd2xlZGdlIEd1aWRvIERyYWhlaW0gd2hvc2UgYWR2aWNlIGFib3V0CisjICAgdGhlIG00X2Nhc2UgYW5kIG00X2lmdmFsbiBmdW5jdGlvbnMgbWFrZSB0aGlzIG1hY3JvIG9ubHkgaW5jbHVkZSB0aGUKKyMgICBwb3J0aW9ucyBuZWNlc3NhcnkgdG8gcGVyZm9ybSB0aGUgc3BlY2lmaWMgY29tcGFyaXNvbiBzcGVjaWZpZWQgYnkgdGhlCisjICAgT1AgYXJndW1lbnQgaW4gdGhlIGZpbmFsIGNvbmZpZ3VyZSBzY3JpcHQuCisjCisjIExJQ0VOU0UKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDggVGltIFRvb2xhbiA8dG9vbGFuQGVsZS51cmkuZWR1PgorIworIyAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorIyAgIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZQorIyAgIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiBUaGlzIGZpbGUgaXMgb2ZmZXJlZCBhcy1pcywgd2l0aG91dCBhbnkKKyMgICB3YXJyYW50eS4KKworI3NlcmlhbCAxMworCitkbmwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQUNfREVGVU4oW0FYX0NPTVBBUkVfVkVSU0lPTl0sIFsKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19BV0tdKQorCisgICMgVXNlZCB0byBpbmRpY2F0ZSB0cnVlIG9yIGZhbHNlIGNvbmRpdGlvbgorICBheF9jb21wYXJlX3ZlcnNpb249ZmFsc2UKKworICAjIENvbnZlcnQgdGhlIHR3byB2ZXJzaW9uIHN0cmluZ3MgdG8gYmUgY29tcGFyZWQgaW50byBhIGZvcm1hdCB0aGF0CisgICMgYWxsb3dzIGEgc2ltcGxlIHN0cmluZyBjb21wYXJpc29uLiAgVGhlIGVuZCByZXN1bHQgaXMgdGhhdCBhIHZlcnNpb24KKyAgIyBzdHJpbmcgb2YgdGhlIGZvcm0gMS4xMi41LXI2MTcgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlIGZvcm0KKyAgIyAwMDAxMDAxMjAwMDUwNjE3LiAgSW4gb3RoZXIgd29yZHMsIGVhY2ggbnVtYmVyIGlzIHplcm8gcGFkZGVkIHRvIGZvdXIKKyAgIyBkaWdpdHMsIGFuZCBub24gZGlnaXRzIGFyZSByZW1vdmVkLgorICBBU19WQVJfUFVTSERFRihbQV0sW2F4X2NvbXBhcmVfdmVyc2lvbl9BXSkKKyAgQT1gZWNobyAiJDEiIHwgc2VkIC1lICdzL1woW1swLTldXSpcKS9aXDFaL2cnIFwKKyAgICAgICAgICAgICAgICAgICAgIC1lICdzL1pcKFtbMC05XV1cKVovWjBcMVovZycgXAorICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvWlwoW1swLTldXVtbMC05XV1cKVovWjBcMVovZycgXAorICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvWlwoW1swLTldXVtbMC05XV1bWzAtOV1dXClaL1owXDFaL2cnIFwKKyAgICAgICAgICAgICAgICAgICAgIC1lICdzL1tbXjAtOV1dLy9nJ2AKKworICBBU19WQVJfUFVTSERFRihbQl0sW2F4X2NvbXBhcmVfdmVyc2lvbl9CXSkKKyAgQj1gZWNobyAiJDMiIHwgc2VkIC1lICdzL1woW1swLTldXSpcKS9aXDFaL2cnIFwKKyAgICAgICAgICAgICAgICAgICAgIC1lICdzL1pcKFtbMC05XV1cKVovWjBcMVovZycgXAorICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvWlwoW1swLTldXVtbMC05XV1cKVovWjBcMVovZycgXAorICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvWlwoW1swLTldXVtbMC05XV1bWzAtOV1dXClaL1owXDFaL2cnIFwKKyAgICAgICAgICAgICAgICAgICAgIC1lICdzL1tbXjAtOV1dLy9nJ2AKKworICBkbmwgIyBJbiB0aGUgY2FzZSBvZiBsZSwgZ2UsIGx0LCBhbmQgZ3QsIHRoZSBzdHJpbmdzIGFyZSBzb3J0ZWQgYXMgbmVjZXNzYXJ5CisgIGRubCAjIHRoZW4gdGhlIGZpcnN0IGxpbmUgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLgorICBkbmwgIyBUaGUgc2VkIHJpZ2h0IGFmdGVyIHRoZSBlY2hvIGlzIHRvIHJlbW92ZSBhbnkgaW5kZW50ZWQgd2hpdGUgc3BhY2UuCisgIG00X2Nhc2UobTRfdG9sb3dlcigkMiksCisgIFtsdF0sWworICAgIGF4X2NvbXBhcmVfdmVyc2lvbj1gZWNobyAieCRBCit4JEIiIHwgc2VkICdzL14gKi8vJyB8IHNvcnQgLXIgfCBzZWQgInMveCR7QX0vZmFsc2UvO3MveCR7Qn0vdHJ1ZS87MXEiYAorICBdLAorICBbZ3RdLFsKKyAgICBheF9jb21wYXJlX3ZlcnNpb249YGVjaG8gIngkQQoreCRCIiB8IHNlZCAncy9eICovLycgfCBzb3J0IHwgc2VkICJzL3gke0F9L2ZhbHNlLztzL3gke0J9L3RydWUvOzFxImAKKyAgXSwKKyAgW2xlXSxbCisgICAgYXhfY29tcGFyZV92ZXJzaW9uPWBlY2hvICJ4JEEKK3gkQiIgfCBzZWQgJ3MvXiAqLy8nIHwgc29ydCB8IHNlZCAicy94JHtBfS90cnVlLztzL3gke0J9L2ZhbHNlLzsxcSJgCisgIF0sCisgIFtnZV0sWworICAgIGF4X2NvbXBhcmVfdmVyc2lvbj1gZWNobyAieCRBCit4JEIiIHwgc2VkICdzL14gKi8vJyB8IHNvcnQgLXIgfCBzZWQgInMveCR7QX0vdHJ1ZS87cy94JHtCfS9mYWxzZS87MXEiYAorICBdLFsKKyAgICBkbmwgU3BsaXQgdGhlIG9wZXJhdG9yIGZyb20gdGhlIHN1YnZlcnNpb24gY291bnQgaWYgcHJlc2VudC4KKyAgICBtNF9ibWF0Y2gobTRfc3Vic3RyKCQyLDIpLAorICAgIFswXSxbCisgICAgICAjIEEgY291bnQgb2YgemVybyBtZWFucyB1c2UgdGhlIGxlbmd0aCBvZiB0aGUgc2hvcnRlciB2ZXJzaW9uLgorICAgICAgIyBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIEEgYW5kIEIuCisgICAgICBheF9jb21wYXJlX3ZlcnNpb25fbGVuX0E9YGVjaG8gIiRBIiB8ICRBV0sgJ3twcmludChsZW5ndGgpfSdgCisgICAgICBheF9jb21wYXJlX3ZlcnNpb25fbGVuX0I9YGVjaG8gIiRCIiB8ICRBV0sgJ3twcmludChsZW5ndGgpfSdgCisKKyAgICAgICMgU2V0IEEgdG8gbm8gbW9yZSB0aGFuIEIncyBsZW5ndGggYW5kIEIgdG8gbm8gbW9yZSB0aGFuIEEncyBsZW5ndGguCisgICAgICBBPWBlY2hvICIkQSIgfCBzZWQgInMvXCguXHskYXhfY29tcGFyZV92ZXJzaW9uX2xlbl9CXH1cKS4qL1wxLyJgCisgICAgICBCPWBlY2hvICIkQiIgfCBzZWQgInMvXCguXHskYXhfY29tcGFyZV92ZXJzaW9uX2xlbl9BXH1cKS4qL1wxLyJgCisgICAgXSwKKyAgICBbWzAtOV0rXSxbCisgICAgICAjIEEgY291bnQgZ3JlYXRlciB0aGFuIHplcm8gbWVhbnMgdXNlIG9ubHkgdGhhdCBtYW55IHN1YnZlcnNpb25zCisgICAgICBBPWBlY2hvICIkQSIgfCBzZWQgInMvXChcKFtbMC05XV1cezRcfVwpXHttNF9zdWJzdHIoJDIsMilcfVwpLiovXDEvImAKKyAgICAgIEI9YGVjaG8gIiRCIiB8IHNlZCAicy9cKFwoW1swLTldXVx7NFx9XClce200X3N1YnN0cigkMiwyKVx9XCkuKi9cMS8iYAorICAgIF0sCisgICAgWy4rXSxbCisgICAgICBBQ19XQVJOSU5HKAorICAgICAgICBbaW52YWxpZCBPUCBudW1lcmljIHBhcmFtZXRlcjogJDJdKQorICAgIF0sW10pCisKKyAgICAjIFBhZCB6ZXJvcyBhdCBlbmQgb2YgbnVtYmVycyB0byBtYWtlIHNhbWUgbGVuZ3RoLgorICAgIGF4X2NvbXBhcmVfdmVyc2lvbl90bXBfQT0iJEFgZWNobyAkQiB8IHNlZCAncy8uLzAvZydgIgorICAgIEI9IiRCYGVjaG8gJEEgfCBzZWQgJ3MvLi8wL2cnYCIKKyAgICBBPSIkYXhfY29tcGFyZV92ZXJzaW9uX3RtcF9BIgorCisgICAgIyBDaGVjayBmb3IgZXF1YWxpdHkgb3IgaW5lcXVhbGl0eSBhcyBuZWNlc3NhcnkuCisgICAgbTRfY2FzZShtNF90b2xvd2VyKG00X3N1YnN0cigkMiwwLDIpKSwKKyAgICBbZXFdLFsKKyAgICAgIHRlc3QgIngkQSIgPSAieCRCIiAmJiBheF9jb21wYXJlX3ZlcnNpb249dHJ1ZQorICAgIF0sCisgICAgW25lXSxbCisgICAgICB0ZXN0ICJ4JEEiICE9ICJ4JEIiICYmIGF4X2NvbXBhcmVfdmVyc2lvbj10cnVlCisgICAgXSxbCisgICAgICBBQ19XQVJOSU5HKFtpbnZhbGlkIE9QIHBhcmFtZXRlcjogJDJdKQorICAgIF0pCisgIF0pCisKKyAgQVNfVkFSX1BPUERFRihbQV0pZG5sCisgIEFTX1ZBUl9QT1BERUYoW0JdKWRubAorCisgIGRubCAjIEV4ZWN1dGUgQUNUSU9OLUlGLVRSVUUgLyBBQ1RJT04tSUYtRkFMU0UuCisgIGlmIHRlc3QgIiRheF9jb21wYXJlX3ZlcnNpb24iID0gInRydWUiIDsgdGhlbgorICAgIG00X2lmdmFsbihbJDRdLFskNF0sWzpdKWRubAorICAgIG00X2lmdmFsbihbJDVdLFtlbHNlICQ1XSlkbmwKKyAgZmkKK10pIGRubCBBWF9DT01QQVJFX1ZFUlNJT04KZGlmZiAtLWdpdCBhL2J1aWxkcy91bml4L2F4X3Byb2dfcHl0aG9uX3ZlcnNpb24ubTQgYi9idWlsZHMvdW5peC9heF9wcm9nX3B5dGhvbl92ZXJzaW9uLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYzNkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZHMvdW5peC9heF9wcm9nX3B5dGhvbl92ZXJzaW9uLm00CkBAIC0wLDAgKzEsNjYgQEAKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLWFyY2hpdmUvYXhfcHJvZ19weXRob25fdmVyc2lvbi5odG1sCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTWU5PUFNJUworIworIyAgIEFYX1BST0dfUFlUSE9OX1ZFUlNJT04oW1ZFUlNJT05dLFtBQ1RJT04tSUYtVFJVRV0sW0FDVElPTi1JRi1GQUxTRV0pCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgTWFrZXMgc3VyZSB0aGF0IHB5dGhvbiBzdXBwb3J0cyB0aGUgdmVyc2lvbiBpbmRpY2F0ZWQuIElmIHRydWUgdGhlIHNoZWxsCisjICAgY29tbWFuZHMgaW4gQUNUSU9OLUlGLVRSVUUgYXJlIGV4ZWN1dGVkLiBJZiBub3QgdGhlIHNoZWxsIGNvbW1hbmRzIGluCisjICAgQUNUSU9OLUlGLUZBTFNFIGFyZSBydW4uIE5vdGUgaWYgJFBZVEhPTiBpcyBub3Qgc2V0IChmb3IgZXhhbXBsZSBieQorIyAgIHJ1bm5pbmcgQUNfQ0hFQ0tfUFJPRyBvciBBQ19QQVRIX1BST0cpIHRoZSBtYWNybyB3aWxsIGZhaWwuCisjCisjICAgRXhhbXBsZToKKyMKKyMgICAgIEFDX1BBVEhfUFJPRyhbUFlUSE9OXSxbcHl0aG9uXSkKKyMgICAgIEFYX1BST0dfUFlUSE9OX1ZFUlNJT04oWzIuNC40XSxbIC4uLiBdLFsgLi4uIF0pCisjCisjICAgVGhpcyB3aWxsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBweXRob24geW91IGhhdmUgc3VwcG9ydHMgYXQgbGVhc3QKKyMgICB2ZXJzaW9uIDIuNC40LgorIworIyAgIE5PVEU6IFRoaXMgbWFjcm8gdXNlcyB0aGUgJFBZVEhPTiB2YXJpYWJsZSB0byBwZXJmb3JtIHRoZSBjaGVjay4KKyMgICBBWF9XSVRIX1BZVEhPTiBjYW4gYmUgdXNlZCB0byBzZXQgdGhhdCB2YXJpYWJsZSBwcmlvciB0byBydW5uaW5nIHRoaXMKKyMgICBtYWNyby4gVGhlICRQWVRIT05fVkVSU0lPTiB2YXJpYWJsZSB3aWxsIGJlIHZhbG9yaXplZCB3aXRoIHRoZSBkZXRlY3RlZAorIyAgIHZlcnNpb24uCisjCisjIExJQ0VOU0UKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDkgRnJhbmNlc2NvIFNhbHZlc3RyaW5pIDxzYWx2ZXN0cmluaUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisjCisjICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisjICAgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlCisjICAgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLCB3aXRob3V0IGFueQorIyAgIHdhcnJhbnR5LgorCisjc2VyaWFsIDEyCisKK0FDX0RFRlVOKFtBWF9QUk9HX1BZVEhPTl9WRVJTSU9OXSxbCisgICAgQUNfUkVRVUlSRShbQUNfUFJPR19TRURdKQorICAgIEFDX1JFUVVJUkUoW0FDX1BST0dfR1JFUF0pCisKKyAgICBBU19JRihbdGVzdCAtbiAiJFBZVEhPTiJdLFsKKyAgICAgICAgYXhfcHl0aG9uX3ZlcnNpb249IiQxIgorCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHB5dGhvbiB2ZXJzaW9uXSkKKyAgICAgICAgY2hhbmdlcXVvdGUoPDwsPj4pCisgICAgICAgIHB5dGhvbl92ZXJzaW9uPWAkUFlUSE9OIC1WIDI+JjEgfCAkR1JFUCAiXlB5dGhvbiAiIHwgJFNFRCAtZSAncy9eLiogXChbMC05XSpcLlswLTldKlwuWzAtOV0qXCkvXDEvJ2AKKyAgICAgICAgY2hhbmdlcXVvdGUoWyxdKQorICAgICAgICBBQ19NU0dfUkVTVUxUKCRweXRob25fdmVyc2lvbikKKworCUFDX1NVQlNUKFtQWVRIT05fVkVSU0lPTl0sWyRweXRob25fdmVyc2lvbl0pCisKKyAgICAgICAgQVhfQ09NUEFSRV9WRVJTSU9OKFskYXhfcHl0aG9uX3ZlcnNpb25dLFtsZV0sWyRweXRob25fdmVyc2lvbl0sWworCSAgICA6CisgICAgICAgICAgICAkMgorICAgICAgICBdLFsKKwkgICAgOgorICAgICAgICAgICAgJDMKKyAgICAgICAgXSkKKyAgICBdLFsKKyAgICAgICAgQUNfTVNHX1dBUk4oW2NvdWxkIG5vdCBmaW5kIHRoZSBweXRob24gaW50ZXJwcmV0ZXJdKQorICAgICAgICAkMworICAgIF0pCitdKQpkaWZmIC0tZ2l0IGEvYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyBiL2J1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcKaW5kZXggYTFhNmRiZS4uYmM2NWU0NSAxMDA2NDQKLS0tIGEvYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdworKysgYi9idWlsZHMvdW5peC9jb25maWd1cmUucmF3CkBAIC0yLDcgKzIsNyBAQAogIwogIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgogIwotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCkBAIC0xMiwxMiArMTIsMTIgQEAKICMgZnVsbHkuCiAKIEFDX0lOSVQoW0ZyZWVUeXBlXSwgW0BWRVJTSU9OQF0sIFtmcmVldHlwZUBub25nbnUub3JnXSwgW2ZyZWV0eXBlXSkKLUFDX0NPTkZJR19TUkNESVIoW2Z0Y29uZmlnLmluXSkKK0FDX0NPTkZJR19TUkNESVIoW2Z0Y29uZmlnLmguaW5dKQogCiAKICMgRG9uJ3QgZm9yZ2V0IHRvIHVwZGF0ZSBgZG9jcy9WRVJTSU9OUy5UWFQnIQogCi12ZXJzaW9uX2luZm89JzIzOjE6MTcnCit2ZXJzaW9uX2luZm89JzIzOjQ6MTcnCiBBQ19TVUJTVChbdmVyc2lvbl9pbmZvXSkKIGZ0X3ZlcnNpb249YGVjaG8gJHZlcnNpb25faW5mbyB8IHRyIDogLmAKIEFDX1NVQlNUKFtmdF92ZXJzaW9uXSkKQEAgLTEwOSwxMSArMTA5LDExIEBACiBBQ19UWVBFX0xPTkdfTE9OR19JTlQKIAogCi0jIGNoZWNrIHdoZXRoZXIgY3BwIGNvbXB1dGF0aW9uIG9mIHNpemUgb2YgaW50IGFuZCBsb25nIGluIGZ0Y29uZmlnLmluIHdvcmtzCisjIGNoZWNrIHdoZXRoZXIgY3BwIGNvbXB1dGF0aW9uIG9mIHNpemUgb2YgaW50IGFuZCBsb25nIGluIGZ0Y29uZmlnLmguaW4gd29ya3MKIAotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGNwcCBjb21wdXRhdGlvbiBvZiBiaXQgbGVuZ3RoIGluIGZ0Y29uZmlnLmluIHdvcmtzXSkKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBjcHAgY29tcHV0YXRpb24gb2YgYml0IGxlbmd0aCBpbiBmdGNvbmZpZy5oLmluIHdvcmtzXSkKIG9yaWdfQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IgotQ1BQRkxBR1M9Ii1JJHtzcmNkaXJ9IC1JLiAtSSR7c3JjZGlyfS8uLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZyAke0NQUEZMQUdTfSIKK0NQUEZMQUdTPSItSSR7c3JjZGlyfSAtSS4gLUkke3NyY2Rpcn0vLi4vLi4vaW5jbHVkZSAke0NQUEZMQUdTfSIKIAogYWNfY2xlYW5fZmlsZXM9CiBpZiB0ZXN0ICEgLWYgZnQyYnVpbGQuaDsgdGhlbgpAQCAtMTIzLDExICsxMjMsMTEgQEAKIAogY2F0ID4gY29uZnRlc3QuYyA8PFxfQUNFT0YKICNpbmNsdWRlIDxsaW1pdHMuaD4KLSNkZWZpbmUgRlRfQ09ORklHX09QVElPTlNfSCAiZnRvcHRpb24uaCIKLSNkZWZpbmUgRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSCAiZnRzdGRsaWIuaCIKKyNkZWZpbmUgRlRfQ09ORklHX09QVElPTlNfSCA8ZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmg+CisjZGVmaW5lIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0ggPGZyZWV0eXBlL2NvbmZpZy9mdHN0ZGxpYi5oPgogI2RlZmluZSBGVF9VSU5UX01BWCAgVUlOVF9NQVgKICNkZWZpbmUgRlRfVUxPTkdfTUFYIFVMT05HX01BWAotI2luY2x1ZGUgImZ0Y29uZmlnLmluIgorI2luY2x1ZGUgImZ0Y29uZmlnLmguaW4iCiBfQUNFT0YKIGVjaG8gPj4gY29uZnRlc3QuYyAiI2lmIEZUX1NJWkVPRl9JTlQgPT0gIiR7YWNfY3Zfc2l6ZW9mX2ludH0KIGVjaG8gPj4gY29uZnRlc3QuYyAiYWNfY3BwX2Z0X3NpemVvZl9pbnQ9IiR7YWNfY3Zfc2l6ZW9mX2ludH0KQEAgLTQ3OCw3ICs0NzgsNyBAQAogICAgICAgbGlicG5nX2xpYnNzdGF0aWNjb25mPSIkTElCUE5HX0xJQlMiCiAgICAgICBoYXZlX2xpYnBuZz0ieWVzIChMSUJQTkdfQ0ZMQUdTIGFuZCBMSUJQTkdfTElCUykiCiAgICAgZWxzZQotICAgICAgIyBmYWxsIGJhY2sgdG8gY29uZmlnIHNjcmlwdC4KKyAgICAgICMgZmFsbCBiYWNrIHRvIGNvbmZpZyBzY3JpcHQKICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGxpYnBuZy1jb25maWddKQogICAgICAgaWYgd2hpY2ggbGlicG5nLWNvbmZpZyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgICAgICAgIExJQlBOR19DRkxBR1M9YGxpYnBuZy1jb25maWcgLS1jZmxhZ3NgCkBAIC01MDgsNyArNTA4LDcgQEAKIAogaGF2ZV9oYXJmYnV6ej1ubwogaWYgdGVzdCB4IiR3aXRoX2hhcmZidXp6IiA9IHh5ZXMgLW8geCIkd2l0aF9oYXJmYnV6eiIgPSB4YXV0bzsgdGhlbgotICBoYXJmYnV6el9wa2c9ImhhcmZidXp6ID49IDEuMy4wIgorICBoYXJmYnV6el9wa2c9ImhhcmZidXp6ID49IDEuOC4wIgogICBoYXZlX2hhcmZidXp6X3BrZz1ubwogCiAgIGlmIHRlc3QgeCIkSEFSRkJVWlpfQ0ZMQUdTIiA9IHggLWEgeCIkSEFSRkJVWlpfTElCUyIgPSB4OyB0aGVuCkBAIC01NDMsNiArNTQzLDUwIEBACiBmaQogCiAKKyMgY2hlY2sgZm9yIHN5c3RlbSBsaWJicm90bGlkZWMKKworQUNfQVJHX1dJVEgoW2Jyb3RsaV0sCisgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWJyb3RsaT1APDpAeWVzfG5vfGF1dG9AOj5AXSwKKyAgICAgICAgICAgICAgICAgIFtzdXBwb3J0IGRlY29tcHJlc3Npb24gb2YgV09GRjIgc3RyZWFtcyBAPDpAZGVmYXVsdD1hdXRvQDo+QF0pXSwKKyAgW10sIFt3aXRoX2Jyb3RsaT1hdXRvXSkKKworaGF2ZV9icm90bGk9bm8KK2lmIHRlc3QgeCIkd2l0aF9icm90bGkiID0geHllcyAtbyB4IiR3aXRoX2Jyb3RsaSIgPSB4YXV0bzsgdGhlbgorICBicm90bGlfcGtnPSJsaWJicm90bGlkZWMiCisgIGhhdmVfYnJvdGxpX3BrZz1ubworCisgIGlmIHRlc3QgeCIkQlJPVExJX0NGTEFHUyIgPSB4IC1hIHgiJEJST1RMSV9MSUJTIiA9IHg7IHRoZW4KKyAgICBQS0dfQ0hFQ0tfRVhJU1RTKFskYnJvdGxpX3BrZ10sIFtoYXZlX2Jyb3RsaV9wa2c9eWVzXSkKKyAgZmkKKyAgUEtHX0NIRUNLX01PRFVMRVMoW0JST1RMSV0sIFskYnJvdGxpX3BrZ10sCisgICAgICAgICAgICAgICAgICAgIFtoYXZlX2Jyb3RsaT0ieWVzIChwa2ctY29uZmlnKSJdLCBbOl0pCisKKyAgaWYgdGVzdCAkaGF2ZV9icm90bGlfcGtnID0geWVzOyB0aGVuCisgICAgIyB3ZSBoYXZlIGxpYmJyb3RsaWRlYy5wYworICAgIGJyb3RsaV9yZXFwcml2PSIkYnJvdGxpX3BrZyIKKyAgICBicm90bGlfbGlic3ByaXY9CisgICAgYnJvdGxpX2xpYnNzdGF0aWNjb25mPWAkUEtHX0NPTkZJRyAtLXN0YXRpYyAtLWxpYnMgIiRicm90bGlfcGtnImAKKyAgZWxzZQorICAgIGJyb3RsaV9yZXFwcml2PQorCisgICAgaWYgdGVzdCAiJGhhdmVfYnJvdGxpIiAhPSBubzsgdGhlbgorICAgICAgIyBCUk9UTElfQ0ZMQUdTIGFuZCBCUk9UTElfTElCUyBhcmUgc2V0IGJ5IHRoZSB1c2VyCisgICAgICBicm90bGlfbGlic3ByaXY9IiRCUk9UTElfTElCUyIKKyAgICAgIGJyb3RsaV9saWJzc3RhdGljY29uZj0iJEJST1RMSV9MSUJTIgorICAgICAgaGF2ZV9icm90bGk9InllcyAoQlJPVExJX0NGTEFHUyBhbmQgQlJPVExJX0xJQlMpIgorICAgIGVsc2UKKyAgICAgICMgc2luY2UgQnJvdGxpIGlzIHF1aXRlIGEgbmV3IGxpYnJhcnkgd2UgZG9uJ3QgZmFsbCBiYWNrIHRvIGEKKyAgICAgICMgZGlmZmVyZW50IHRlc3QKKyAgICAgIDoKKyAgICBmaQorICBmaQorZmkKKworaWYgdGVzdCB4IiR3aXRoX2Jyb3RsaSIgPSB4eWVzIC1hICIkaGF2ZV9icm90bGkiID0gbm87IHRoZW4KKyAgQUNfTVNHX0VSUk9SKFticm90bGkgc3VwcG9ydCByZXF1ZXN0ZWQgYnV0IGxpYnJhcnkgbm90IGZvdW5kXSkKK2ZpCisKKwogIyBjaGVjayBmb3IgbGlicnQKICMKICMgV2UgbmVlZCBgY2xvY2tfZ2V0dGltZScgZm9yIHRoZSBgZnRiZW5jaCcgZGVtbyBwcm9ncmFtLgpAQCAtOTY4LDE2ICsxMDEyLDIwIEBACiAgICAgOzsKIGVzYWMKIAotIyBDaGVjayBmb3IgcHl0aG9uIGFuZCBkb2N3cml0ZXIKKyMgQ2hlY2sgZm9yIFB5dGhvbiBhbmQgZG9jd3JpdGVyCiAKLUFDX0NIRUNLX1BST0dTKFtQWVRIT05dLCBbcHl0aG9uMyBweXRob24yIHB5dGhvbl0sIFttaXNzaW5nXSkKK2hhdmVfcHkzPW5vCiBoYXZlX2RvY3dyaXRlcj1ubwotaWYgdGVzdCAieCRQWVRIT04iICE9ICJ4bWlzc2luZyI7IHRoZW4KLSAgQUNfQ0hFQ0tfUFJPR1MoW1BJUF0sIFtwaXAzIHBpcDIgcGlwXSwgW21pc3NpbmddKQorUElQPXBpcAogCi0gIGlmIHRlc3QgIngkUElQIiAhPSAieG1pc3NpbmciOyB0aGVuCitBQ19DSEVDS19QUk9HUyhbUFlUSE9OXSwgW3B5dGhvbjMgcHl0aG9uXSwgW21pc3NpbmddKQoraWYgdGVzdCAieCRQWVRIT04iICE9ICJ4bWlzc2luZyI7IHRoZW4KKyAgQVhfUFJPR19QWVRIT05fVkVSU0lPTihbMy41XSwgW2hhdmVfcHkzPXllc10sIFtdKQorCisgIGlmIHRlc3QgIngkaGF2ZV9weTMiID0gInh5ZXMiOyB0aGVuCisgICAgUElQPSIkUFlUSE9OIC1tICRQSVAiCiAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgXGBkb2N3cml0ZXInIFB5dGhvbiBtb2R1bGVdKQotICAgICRQSVAgc2hvdyAtcSBkb2N3cml0ZXIKKyAgICAkUFlUSE9OIC1tIGRvY3dyaXRlciAtaCA+IC9kZXYvbnVsbCAyPiYxCiAgICAgaWYgdGVzdCAieCQ/IiA9ICJ4MCI7IHRoZW4KICAgICAgIGhhdmVfZG9jd3JpdGVyPXllcwogICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKQEAgLTk4OCwxMSArMTAzNiwxMiBAQAogZmkKIAogCi0jIGVudHJpZXMgaW4gUmVxdWlyZXMucHJpdmF0ZSBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hczsKKyMgZW50cmllcyBpbiBSZXF1aXJlcy5wcml2YXRlIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzCiBSRVFVSVJFU19QUklWQVRFPSIkemxpYl9yZXFwcml2LCAgICAgXAogICAgICAgICAgICAgICAgICAgJGJ6aXAyX3JlcXByaXYsICAgIFwKICAgICAgICAgICAgICAgICAgICRsaWJwbmdfcmVxcHJpdiwgICBcCi0gICAgICAgICAgICAgICAgICAkaGFyZmJ1enpfcmVxcHJpdiIKKyAgICAgICAgICAgICAgICAgICRoYXJmYnV6el9yZXFwcml2LCBcCisgICAgICAgICAgICAgICAgICAkYnJvdGxpX3JlcXByaXYiCiAjIGJlYXV0aWZ5CiBSRVFVSVJFU19QUklWQVRFPWBlY2hvICIkUkVRVUlSRVNfUFJJVkFURSIgXAogICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgJ3MvXiAgKi8vJyAgICAgIFwKQEAgLTEwMDcsNiArMTA1Niw3IEBACiAgICAgICAgICAgICAgICRiemlwMl9saWJzcHJpdiAgICBcCiAgICAgICAgICAgICAgICRsaWJwbmdfbGlic3ByaXYgICBcCiAgICAgICAgICAgICAgICRoYXJmYnV6el9saWJzcHJpdiBcCisgICAgICAgICAgICAgICRicm90bGlfbGlic3ByaXYgICBcCiAgICAgICAgICAgICAgICRmdDJfZXh0cmFfbGlicyIKICMgYmVhdXRpZnkKIExJQlNfUFJJVkFURT1gZWNobyAiJExJQlNfUFJJVkFURSIgIFwKQEAgLTEwMTksNiArMTA2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgJGJ6aXAyX2xpYnNzdGF0aWNjb25mICAgIFwKICAgICAgICAgICAgICAgICAgICAkbGlicG5nX2xpYnNzdGF0aWNjb25mICAgXAogICAgICAgICAgICAgICAgICAgICRoYXJmYnV6el9saWJzc3RhdGljY29uZiBcCisgICAgICAgICAgICAgICAgICAgJGJyb3RsaV9saWJzc3RhdGljY29uZiAgIFwKICAgICAgICAgICAgICAgICAgICAkZnQyX2V4dHJhX2xpYnMiCiAjIHJlbW92ZSAtTC91c3IvbGliIGFuZCAtTC91c3IvbGliNjQgc2luY2UgYGZyZWV0eXBlLWNvbmZpZycgYWRkcyB0aGVtIGxhdGVyCiAjIG9uIGlmIG5lY2Vzc2FyeTsgYWxzbyBiZWF1dGlmeQpAQCAtMTA4Myw2ICsxMTM0LDEzIEBACiBlbHNlCiAgIGZ0b3B0aW9uX3Vuc2V0IEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaCiBmaQoraWYgdGVzdCAiJGhhdmVfYnJvdGxpIiAhPSBubzsgdGhlbgorICBDRkxBR1M9IiRDRkxBR1MgJEJST1RMSV9DRkxBR1MiCisgIExERkxBR1M9IiRMREZMQUdTICRCUk9UTElfTElCUyIKKyAgZnRvcHRpb25fc2V0IEZUX0NPTkZJR19PUFRJT05fVVNFX0JST1RMSQorZWxzZQorICBmdG9wdGlvbl91bnNldCBGVF9DT05GSUdfT1BUSU9OX1VTRV9CUk9UTEkKK2ZpCiAKIEFDX1NVQlNUKFtDRkxBR1NdKQogQUNfU1VCU1QoW0xERkxBR1NdKQpAQCAtMTEwMCwxNSArMTE1OCw3IEBACiAgICBybSBmdG9wdGlvbi50bXBdLAogICBbRlRPUFRJT05fSF9TRUQ9IiRGVE9QVElPTl9IX1NFRCJdKQogCi0jIGNvbmZpZ3VyYXRpb24gZmlsZSAtLSBzdGF5IGluIDguMyBsaW1pdAotIwotIyBzaW5jZSAjdW5kZWYgZG9lc24ndCBzdXJ2aXZlIGluIGNvbmZpZ3VyYXRpb24gaGVhZGVyIGZpbGVzIHdlIHJlcGxhY2UKLSMgYC91bmRlZicgd2l0aCBgI3VuZGVmJyBhZnRlciBjcmVhdGluZyB0aGUgb3V0cHV0IGZpbGUKLQotQUNfQ09ORklHX0hFQURFUlMoW2Z0Y29uZmlnLmg6ZnRjb25maWcuaW5dLAotICBbbXYgZnRjb25maWcuaCBmdGNvbmZpZy50bXAKLSAgIHNlZCAnc3wvdW5kZWZ8I3VuZGVmfCcgPCBmdGNvbmZpZy50bXAgPiBmdGNvbmZpZy5oCi0gICBybSBmdGNvbmZpZy50bXBdKQorQUNfQ09ORklHX0hFQURFUlMoW2Z0Y29uZmlnLmhdKQogCiAjIGNyZWF0ZSB0aGUgVW5peC1zcGVjaWZpYyBzdWItTWFrZWZpbGVzIGBidWlsZHMvdW5peC91bml4LWRlZi5taycKICMgYW5kIGBidWlsZHMvdW5peC91bml4LWNjLm1rJyB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtCkBAIC0xMTE2LDEwICsxMTY2LDYgQEAKIEFDX0NPTkZJR19GSUxFUyhbdW5peC1jYy5tazp1bml4LWNjLmluCiAgICAgICAgICAgICAgICAgIHVuaXgtZGVmLm1rOnVuaXgtZGVmLmluXSkKIAotIyByZS1nZW5lcmF0ZSB0aGUgSmFtZmlsZSB0byB1c2UgbGlidG9vbCBub3cKLSMKLSMgQUNfQ09ORklHX0ZJTEVTKFsuLi8uLi9KYW1maWxlOi4uLy4uL0phbWZpbGUuaW5dKQotCiBBQ19PVVRQVVQKIAogQUNfTVNHX05PVElDRShbCkBAIC0xMTI5LDE2ICsxMTc1LDE3IEBACiAgIGJ6aXAyOiAgICAgICAgICRoYXZlX2J6aXAyCiAgIGxpYnBuZzogICAgICAgICRoYXZlX2xpYnBuZwogICBoYXJmYnV6ejogICAgICAkaGF2ZV9oYXJmYnV6egorICBicm90bGk6ICAgICAgICAkaGF2ZV9icm90bGkKIF0pCiAKICMgV2FybiBpZiBkb2N3cml0ZXIgaXMgbm90IGluc3RhbGxlZAogCiBpZiB0ZXN0ICRoYXZlX2RvY3dyaXRlciA9IG5vOyB0aGVuCi0gIEFDX01TR19OT1RJQ0UoWwotICBXYXJuaW5nOiBcYG1ha2UgcmVmZG9jJyB3aWxsIGZhaWwgc2luY2UgcGlwIHBhY2thZ2UgXGBkb2N3cml0ZXInIGlzIG5vdAotICBpbnN0YWxsZWQuICBUbyBpbnN0YWxsLCBydW4gXGAkUElQIGluc3RhbGwgZG9jd3JpdGVyJywgb3IgdG8gdXNlIGEgcHl0aG9uCisgIEFDX01TR19XQVJOKFsKKyAgXGBtYWtlIHJlZmRvYycgd2lsbCBmYWlsIHNpbmNlIHBpcCBwYWNrYWdlIFxgZG9jd3JpdGVyJyBpcyBub3QgaW5zdGFsbGVkLgorICBUbyBpbnN0YWxsLCBydW4gXGAkUElQIGluc3RhbGwgZG9jd3JpdGVyJywgb3IgdG8gdXNlIGEgUHl0aG9uCiAgIHZpcnR1YWwgZW52aXJvbm1lbnQsIHJ1biBcYG1ha2UgcmVmZG9jLXZlbnYnIChyZXF1aXJlcyBwaXAgcGFja2FnZQotICBcYHZpcnR1YWxlbnYnKS4KKyAgXGB2aXJ0dWFsZW52JykuIFRoZXNlIG9wZXJhdGlvbnMgcmVxdWlyZSBQeXRob24gPj0gMy41LgogICBdKQogZmkKIApkaWZmIC0tZ2l0IGEvYnVpbGRzL3VuaXgvZGV0ZWN0Lm1rIGIvYnVpbGRzL3VuaXgvZGV0ZWN0Lm1rCmluZGV4IDdjZTdkOGEuLmM3ZTg0MDggMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L2RldGVjdC5taworKysgYi9idWlsZHMvdW5peC9kZXRlY3QubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW4gYi9idWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW4KaW5kZXggOWU4ZDNjMi4uMzkxOGRkYiAxMDA2NDQKLS0tIGEvYnVpbGRzL3VuaXgvZnJlZXR5cGUtY29uZmlnLmluCisrKyBiL2J1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbgpAQCAtMSw2ICsxLDYgQEAKICMhIC9iaW4vc2gKICMKLSMgQ29weXJpZ2h0IChDKSAyMDAwLTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAyMDAwLTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL3VuaXgvZnJlZXR5cGUyLm00IGIvYnVpbGRzL3VuaXgvZnJlZXR5cGUyLm00CmluZGV4IGQ2OGQxNWUuLjIwN2MyNjMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L2ZyZWV0eXBlMi5tNAorKysgYi9idWlsZHMvdW5peC9mcmVldHlwZTIubTQKQEAgLTEsNyArMSw3IEBACiAjIENvbmZpZ3VyZSBwYXRocyBmb3IgRnJlZVR5cGUyCiAjIE1hcmNlbG8gTWFnYWxsb24gMjAwMS0xMC0yNiwgYmFzZWQgb24gZ3RrLm00IGJ5IE93ZW4gVGF5bG9yCiAjCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTE1LDcgKzE1LDcgQEAKICMgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlciB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YKICMgdGhhdCBwcm9ncmFtLgogIwotIyBzZXJpYWwgNAorIyBzZXJpYWwgNQogCiAjIEFDX0NIRUNLX0ZUMihbTUlOSU1VTS1WRVJTSU9OIFssIEFDVElPTi1JRi1GT1VORCBbLCBBQ1RJT04tSUYtTk9ULUZPVU5EXV1dKQogIyBUZXN0IGZvciBGcmVlVHlwZSAyLCBhbmQgZGVmaW5lIEZUMl9DRkxBR1MgYW5kIEZUMl9MSUJTLgpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAgICAgICAgQUNfTEFOR19TT1VSQ0UoW1sKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC9mdC1tdW5tYXAubTQgYi9idWlsZHMvdW5peC9mdC1tdW5tYXAubTQKaW5kZXggNDM4NDAxMy4uYTFhZWEyYiAxMDA2NDQKLS0tIGEvYnVpbGRzL3VuaXgvZnQtbXVubWFwLm00CisrKyBiL2J1aWxkcy91bml4L2Z0LW11bm1hcC5tNApAQCAtMSw2ICsxLDYgQEAKICMjIEZyZWVUeXBlIHNwZWNpZmljIGF1dG9jb25mIHRlc3RzCiAjCi0jIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy91bml4L2Z0Y29uZmlnLmguaW4gYi9idWlsZHMvdW5peC9mdGNvbmZpZy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYjVhODIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZHMvdW5peC9mdGNvbmZpZy5oLmluCkBAIC0wLDAgKzEsNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRjb25maWcuaC5pbgorICoKKyAqICAgVU5JWC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGlzIGhlYWRlciBmaWxlIGNvbnRhaW5zIGEgbnVtYmVyIG9mIG1hY3JvIGRlZmluaXRpb25zIHRoYXQgYXJlIHVzZWQgYnkKKyAgICogdGhlIHJlc3Qgb2YgdGhlIGVuZ2luZS4gIE1vc3Qgb2YgdGhlIG1hY3JvcyBoZXJlIGFyZSBhdXRvbWF0aWNhbGx5CisgICAqIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lLCBhbmQgeW91IHNob3VsZCBub3QgbmVlZCB0byBjaGFuZ2UgaXQgdG8gcG9ydAorICAgKiBGcmVlVHlwZSwgZXhjZXB0IHRvIGNvbXBpbGUgdGhlIGxpYnJhcnkgd2l0aCBhIG5vbi1BTlNJIGNvbXBpbGVyLgorICAgKgorICAgKiBOb3RlIGhvd2V2ZXIgdGhhdCBpZiBzb21lIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgYXJlIG5lZWRlZCwgd2UgYWR2aXNlCisgICAqIHlvdSB0byBwbGFjZSBhIG1vZGlmaWVkIGNvcHkgaW4geW91ciBidWlsZCBkaXJlY3RvcnkuCisgICAqCisgICAqIFRoZSBidWlsZCBkaXJlY3RvcnkgaXMgdXN1YWxseSBgYnVpbGRzLzxzeXN0ZW0+YCwgYW5kIGNvbnRhaW5zCisgICAqIHN5c3RlbS1zcGVjaWZpYyBmaWxlcyB0aGF0IGFyZSBhbHdheXMgaW5jbHVkZWQgZmlyc3Qgd2hlbiBidWlsZGluZyB0aGUKKyAgICogbGlicmFyeS4KKyAgICoKKyAgICovCisKKyNpZm5kZWYgRlRDT05GSUdfSF8KKyNkZWZpbmUgRlRDT05GSUdfSF8KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9DT05GSUdfT1BUSU9OU19ICisjaW5jbHVkZSBGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9ICisKKyN1bmRlZiBIQVZFX1VOSVNURF9ICisjdW5kZWYgSEFWRV9GQ05UTF9ICisKKyN1bmRlZiBGVF9VU0VfQVVUT0NPTkZfU0laRU9GX1RZUEVTCisjaWZkZWYgRlRfVVNFX0FVVE9DT05GX1NJWkVPRl9UWVBFUworCisjdW5kZWYgU0laRU9GX0lOVAorI3VuZGVmIFNJWkVPRl9MT05HCisjZGVmaW5lIEZUX1NJWkVPRl9JTlQgIFNJWkVPRl9JTlQKKyNkZWZpbmUgRlRfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKworI2VuZGlmIC8qIEZUX1VTRV9BVVRPQ09ORl9TSVpFT0ZfVFlQRVMgKi8KKworI2luY2x1ZGUgPGZyZWV0eXBlL2NvbmZpZy9pbnRlZ2VyLXR5cGVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvY29uZmlnL3B1YmxpYy1tYWNyb3MuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9jb25maWcvbWFjLXN1cHBvcnQuaD4KKworI2VuZGlmIC8qIEZUQ09ORklHX0hfICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC9mdGNvbmZpZy5pbiBiL2J1aWxkcy91bml4L2Z0Y29uZmlnLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTk3OTNlLi4wMDAwMDAwCi0tLSBhL2J1aWxkcy91bml4L2Z0Y29uZmlnLmluCisrKyAvZGV2L251bGwKQEAgLTEsNjAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogZnRjb25maWcuaW4KLSAqCi0gKiAgIFVOSVgtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIChzcGVjaWZpY2F0aW9uIG9ubHkpLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5Ci0gKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCi0gKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAotICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKLSAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQotICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCi0gKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCi0gKgotICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogVGhpcyBoZWFkZXIgZmlsZSBjb250YWlucyBhIG51bWJlciBvZiBtYWNybyBkZWZpbml0aW9ucyB0aGF0IGFyZSB1c2VkIGJ5Ci0gICAqIHRoZSByZXN0IG9mIHRoZSBlbmdpbmUuICBNb3N0IG9mIHRoZSBtYWNyb3MgaGVyZSBhcmUgYXV0b21hdGljYWxseQotICAgKiBkZXRlcm1pbmVkIGF0IGNvbXBpbGUgdGltZSwgYW5kIHlvdSBzaG91bGQgbm90IG5lZWQgdG8gY2hhbmdlIGl0IHRvIHBvcnQKLSAgICogRnJlZVR5cGUsIGV4Y2VwdCB0byBjb21waWxlIHRoZSBsaWJyYXJ5IHdpdGggYSBub24tQU5TSSBjb21waWxlci4KLSAgICoKLSAgICogTm90ZSBob3dldmVyIHRoYXQgaWYgc29tZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zIGFyZSBuZWVkZWQsIHdlIGFkdmlzZQotICAgKiB5b3UgdG8gcGxhY2UgYSBtb2RpZmllZCBjb3B5IGluIHlvdXIgYnVpbGQgZGlyZWN0b3J5LgotICAgKgotICAgKiBUaGUgYnVpbGQgZGlyZWN0b3J5IGlzIHVzdWFsbHkgYGJ1aWxkcy88c3lzdGVtPmAsIGFuZCBjb250YWlucwotICAgKiBzeXN0ZW0tc3BlY2lmaWMgZmlsZXMgdGhhdCBhcmUgYWx3YXlzIGluY2x1ZGVkIGZpcnN0IHdoZW4gYnVpbGRpbmcgdGhlCi0gICAqIGxpYnJhcnkuCi0gICAqCi0gICAqLwotCi0jaWZuZGVmIEZUQ09ORklHX0hfCi0jZGVmaW5lIEZUQ09ORklHX0hfCi0KLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfQ09ORklHX09QVElPTlNfSAotI2luY2x1ZGUgRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSAotCi0KLUZUX0JFR0lOX0hFQURFUgotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqICAgICAgICAgICAgICBQTEFURk9STS1TUEVDSUZJQyBDT05GSUdVUkFUSU9OIE1BQ1JPUwotICAgKgotICAgKiBUaGVzZSBtYWNyb3MgY2FuIGJlIHRvZ2dsZWQgdG8gc3VpdCBhIHNwZWNpZmljIHN5c3RlbS4gIFRoZSBjdXJyZW50IG9uZXMKLSAgICogYXJlIGRlZmF1bHRzIHVzZWQgdG8gY29tcGlsZSBGcmVlVHlwZSBpbiBhbiBBTlNJIEMgZW52aXJvbm1lbnQgKDE2Yml0Ci0gICAqIGNvbXBpbGVycyBhcmUgYWxzbyBzdXBwb3J0ZWQpLiAgQ29weSB0aGlzIGZpbGUgdG8geW91ciBvd24KLSAgICogYGJ1aWxkcy88c3lzdGVtPmAgZGlyZWN0b3J5LCBhbmQgZWRpdCBpdCB0byBwb3J0IHRoZSBlbmdpbmUuCi0gICAqCi0gICAqLwotCi0jdW5kZWYgSEFWRV9VTklTVERfSAotI3VuZGVmIEhBVkVfRkNOVExfSAotI3VuZGVmIEhBVkVfU1RESU5UX0gKLQotICAvKiBUaGVyZSBhcmUgc3lzdGVtcyAobGlrZSB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgJ0M1NHgpIHdoZXJlIGEgYGNoYXJgICAqLwotICAvKiBoYXMgMTZ+Yml0cy4gIEFOU0l+QyBzYXlzIHRoYXQgYHNpemVvZihjaGFyKWAgaXMgYWx3YXlzfjEuICBTaW5jZSBhbiAqLwotICAvKiBgaW50YCBoYXMgMTZ+Yml0cyBhbHNvIGZvciB0aGlzIHN5c3RlbSwgYHNpemVvZihpbnQpYCBnaXZlc34xIHdoaWNoICAqLwotICAvKiBpcyBwcm9iYWJseSB1bmV4cGVjdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBgQ0hBUl9CSVRgIChkZWZpbmVkIGluIGBsaW1pdHMuaGApIGdpdmVzIHRoZSBudW1iZXIgb2YgYml0cyBpbiBhICAgICAqLwotICAvKiBgY2hhcmAgdHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0jaWZuZGVmIEZUX0NIQVJfQklUCi0jZGVmaW5lIEZUX0NIQVJfQklUICBDSEFSX0JJVAotI2VuZGlmCi0KLQotI3VuZGVmIEZUX1VTRV9BVVRPQ09ORl9TSVpFT0ZfVFlQRVMKLSNpZmRlZiBGVF9VU0VfQVVUT0NPTkZfU0laRU9GX1RZUEVTCi0KLSN1bmRlZiBTSVpFT0ZfSU5UCi0jdW5kZWYgU0laRU9GX0xPTkcKLSNkZWZpbmUgRlRfU0laRU9GX0lOVCAgU0laRU9GX0lOVAotI2RlZmluZSBGVF9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORwotCi0jZWxzZSAvKiAhRlRfVVNFX0FVVE9DT05GX1NJWkVPRl9UWVBFUyAqLwotCi0gIC8qIEZvbGxvd2luZyBjcHAgY29tcHV0YXRpb24gb2YgdGhlIGJpdCBsZW5ndGggb2YgYGludGAgYW5kIGBsb25nYCAqLwotICAvKiBpcyBjb3BpZWQgZnJvbSBkZWZhdWx0IGBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oYC4gICAgKi8KLSAgLyogSWYgYW55IGltcHJvdmVtZW50IGlzIHJlcXVpcmVkIGZvciB0aGlzIGZpbGUsIGl0IHNob3VsZCBiZSAgICAgICovCi0gIC8qIGFwcGxpZWQgdG8gdGhlIG9yaWdpbmFsIGhlYWRlciBmaWxlIGZvciB0aGUgYnVpbGRlcnMgdGhhdCBkbyAgICAqLwotICAvKiBub3QgdXNlIGNvbmZpZ3VyZSBzY3JpcHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAvKiBUaGUgc2l6ZSBvZiBhbiBgaW50YCB0eXBlLiAqLwotI2lmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUlOVF9NQVggPT0gMHhGRkZGVUwKLSNkZWZpbmUgRlRfU0laRU9GX0lOVCAgKCAxNiAvIEZUX0NIQVJfQklUICkKLSNlbGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJTlRfTUFYID09IDB4RkZGRkZGRkZVTAotI2RlZmluZSBGVF9TSVpFT0ZfSU5UICAoIDMyIC8gRlRfQ0hBUl9CSVQgKQotI2VsaWYgRlRfVUlOVF9NQVggPiAweEZGRkZGRkZGVUwgJiYgRlRfVUlOVF9NQVggPT0gMHhGRkZGRkZGRkZGRkZGRkZGVUwKLSNkZWZpbmUgRlRfU0laRU9GX0lOVCAgKCA2NCAvIEZUX0NIQVJfQklUICkKLSNlbHNlCi0jZXJyb3IgIlVuc3VwcG9ydGVkIHNpemUgb2YgYGludCcgdHlwZSEiCi0jZW5kaWYKLQotICAvKiBUaGUgc2l6ZSBvZiBhIGBsb25nYCB0eXBlLiAgQSBmaXZlLWJ5dGUgYGxvbmdgIChhcyB1c2VkIGUuZy4gb24gdGhlICovCi0gIC8qIERNNjQyKSBpcyByZWNvZ25pemVkIGJ1dCBhdm9pZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTE9OR19NQVggPT0gMHhGRkZGRkZGRlVMCi0jZGVmaW5lIEZUX1NJWkVPRl9MT05HICAoIDMyIC8gRlRfQ0hBUl9CSVQgKQotI2VsaWYgRlRfVUxPTkdfTUFYID4gMHhGRkZGRkZGRlVMICYmIEZUX1VMT05HX01BWCA9PSAweEZGRkZGRkZGRkZVTAotI2RlZmluZSBGVF9TSVpFT0ZfTE9ORyAgKCAzMiAvIEZUX0NIQVJfQklUICkKLSNlbGlmIEZUX1VMT05HX01BWCA+IDB4RkZGRkZGRkZVTCAmJiBGVF9VTE9OR19NQVggPT0gMHhGRkZGRkZGRkZGRkZGRkZGVUwKLSNkZWZpbmUgRlRfU0laRU9GX0xPTkcgICggNjQgLyBGVF9DSEFSX0JJVCApCi0jZWxzZQotI2Vycm9yICJVbnN1cHBvcnRlZCBzaXplIG9mIGBsb25nJyB0eXBlISIKLSNlbmRpZgotCi0jZW5kaWYgLyogIUZUX1VTRV9BVVRPQ09ORl9TSVpFT0ZfVFlQRVMgKi8KLQotICAvKiBgRlRfVU5VU0VEYCBpbmRpY2F0ZXMgdGhhdCBhIGdpdmVuIHBhcmFtZXRlciBpcyBub3QgdXNlZCAtLSAgICovCi0gIC8qIHRoaXMgaXMgb25seSB1c2VkIHRvIGdldCByaWQgb2YgdW5wbGVhc2FudCBjb21waWxlciB3YXJuaW5ncy4gKi8KLSNpZm5kZWYgRlRfVU5VU0VECi0jZGVmaW5lIEZUX1VOVVNFRCggYXJnICkgICggKGFyZykgPSAoYXJnKSApCi0jZW5kaWYKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiAgICAgICAgICAgICAgICAgICAgQVVUT01BVElDIENPTkZJR1VSQVRJT04gTUFDUk9TCi0gICAqCi0gICAqIFRoZXNlIG1hY3JvcyBhcmUgY29tcHV0ZWQgZnJvbSB0aGUgb25lcyBkZWZpbmVkIGFib3ZlLiAgRG9uJ3QgdG91Y2gKLSAgICogdGhlaXIgZGVmaW5pdGlvbiwgdW5sZXNzIHlvdSBrbm93IHByZWNpc2VseSB3aGF0IHlvdSBhcmUgZG9pbmcuICBObwotICAgKiBwb3J0ZXIgc2hvdWxkIG5lZWQgdG8gbWVzcyB3aXRoIHRoZW0uCi0gICAqCi0gICAqLwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIE1hYyBzdXBwb3J0Ci0gICAqCi0gICAqICAgVGhpcyBpcyB0aGUgb25seSBuZWNlc3NhcnkgY2hhbmdlLCBzbyBpdCBpcyBkZWZpbmVkIGhlcmUgaW5zdGVhZAotICAgKiAgIHByb3ZpZGluZyBhIG5ldyBjb25maWd1cmF0aW9uIGZpbGUuCi0gICAqLwotI2lmIGRlZmluZWQoIF9fQVBQTEVfXyApIHx8ICggZGVmaW5lZCggX19NV0VSS1NfXyApICYmIGRlZmluZWQoIG1hY2ludG9zaCApICkKLSAgLyogTm8gQ2FyYm9uIGZyYW1ld29ya3MgZm9yIDY0Yml0IDEwLjQueC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogYEF2YWlsYWJpbGl0eU1hY3Jvcy5oYCBpcyBhdmFpbGFibGUgc2luY2UgTWFjIE9TIFggMTAuMiwgICAgICAgKi8KLSAgLyogc28gZ3Vlc3MgdGhlIHN5c3RlbSB2ZXJzaW9uIGJ5IG1heGltdW0gZXJybm8gYmVmb3JlIGluY2x1c2lvbi4gKi8KLSNpbmNsdWRlIDxlcnJuby5oPgotI2lmZGVmIEVDQU5DRUxFRCAvKiBkZWZpbmVkIHNpbmNlIDEwLjIgKi8KLSNpbmNsdWRlICJBdmFpbGFiaWxpdHlNYWNyb3MuaCIKLSNlbmRpZgotI2lmIGRlZmluZWQoIF9fTFA2NF9fICkgJiYgXAotICAgICggTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0gTUFDX09TX1hfVkVSU0lPTl8xMF80ICkKLS91bmRlZiBGVF9NQUNJTlRPU0gKLSNlbmRpZgotCi0jZWxpZiBkZWZpbmVkKCBfX1NDX18gKSB8fCBkZWZpbmVkKCBfX01SQ19fICkKLSAgLyogQ2xhc3NpYyBNYWNPUyBjb21waWxlcnMgKi8KLSNpbmNsdWRlICJDb25kaXRpb25hbE1hY3Jvcy5oIgotI2lmIFRBUkdFVF9PU19NQUMKLSNkZWZpbmUgRlRfTUFDSU5UT1NIIDEKLSNlbmRpZgotCi0jZW5kaWYKLQotCi0gIC8qIEZpeCBjb21waWxlciB3YXJuaW5nIHdpdGggc2dpIGNvbXBpbGVyLiAqLwotI2lmIGRlZmluZWQoIF9fc2dpICkgJiYgIWRlZmluZWQoIF9fR05VQ19fICkKLSNpZiBkZWZpbmVkKCBfQ09NUElMRVJfVkVSU0lPTiApICYmICggX0NPTVBJTEVSX1ZFUlNJT04gPj0gNzMwICkKLSNwcmFnbWEgc2V0IHdvZmYgMzUwNQotI2VuZGlmCi0jZW5kaWYKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAc2VjdGlvbjoKLSAgICogICBiYXNpY190eXBlcwotICAgKgotICAgKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAdHlwZToKLSAgICogICBGVF9JbnQxNgotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgQSB0eXBlZGVmIGZvciBhIDE2Yml0IHNpZ25lZCBpbnRlZ2VyIHR5cGUuCi0gICAqLwotICB0eXBlZGVmIHNpZ25lZCBzaG9ydCAgRlRfSW50MTY7Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQHR5cGU6Ci0gICAqICAgRlRfVUludDE2Ci0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBBIHR5cGVkZWYgZm9yIGEgMTZiaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlLgotICAgKi8KLSAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgRlRfVUludDE2OwotCi0gIC8qICovCi0KLQotICAvKiB0aGlzICNpZiAwIC4uLiAjZW5kaWYgY2xhdXNlIGlzIGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzICovCi0jaWYgMAotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAdHlwZToKLSAgICogICBGVF9JbnQzMgotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgQSB0eXBlZGVmIGZvciBhIDMyYml0IHNpZ25lZCBpbnRlZ2VyIHR5cGUuICBUaGUgc2l6ZSBkZXBlbmRzIG9uIHRoZQotICAgKiAgIGNvbmZpZ3VyYXRpb24uCi0gICAqLwotICB0eXBlZGVmIHNpZ25lZCBYWFggIEZUX0ludDMyOwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEB0eXBlOgotICAgKiAgIEZUX1VJbnQzMgotICAgKgotICAgKiAgIEEgdHlwZWRlZiBmb3IgYSAzMmJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUuICBUaGUgc2l6ZSBkZXBlbmRzIG9uIHRoZQotICAgKiAgIGNvbmZpZ3VyYXRpb24uCi0gICAqLwotICB0eXBlZGVmIHVuc2lnbmVkIFhYWCAgRlRfVUludDMyOwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEB0eXBlOgotICAgKiAgIEZUX0ludDY0Ci0gICAqCi0gICAqICAgQSB0eXBlZGVmIGZvciBhIDY0Yml0IHNpZ25lZCBpbnRlZ2VyIHR5cGUuICBUaGUgc2l6ZSBkZXBlbmRzIG9uIHRoZQotICAgKiAgIGNvbmZpZ3VyYXRpb24uICBPbmx5IGRlZmluZWQgaWYgdGhlcmUgaXMgcmVhbCA2NGJpdCBzdXBwb3J0OwotICAgKiAgIG90aGVyd2lzZSwgaXQgZ2V0cyBlbXVsYXRlZCB3aXRoIGEgc3RydWN0dXJlIChpZiBuZWNlc3NhcnkpLgotICAgKi8KLSAgdHlwZWRlZiBzaWduZWQgWFhYICBGVF9JbnQ2NDsKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAdHlwZToKLSAgICogICBGVF9VSW50NjQKLSAgICoKLSAgICogICBBIHR5cGVkZWYgZm9yIGEgNjRiaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlLiAgVGhlIHNpemUgZGVwZW5kcyBvbiB0aGUKLSAgICogICBjb25maWd1cmF0aW9uLiAgT25seSBkZWZpbmVkIGlmIHRoZXJlIGlzIHJlYWwgNjRiaXQgc3VwcG9ydDsKLSAgICogICBvdGhlcndpc2UsIGl0IGdldHMgZW11bGF0ZWQgd2l0aCBhIHN0cnVjdHVyZSAoaWYgbmVjZXNzYXJ5KS4KLSAgICovCi0gIHR5cGVkZWYgdW5zaWduZWQgWFhYICBGVF9VSW50NjQ7Ci0KLSAgLyogKi8KLQotI2VuZGlmCi0KLSNpZiBGVF9TSVpFT0ZfSU5UID09IDQKLQotICB0eXBlZGVmIHNpZ25lZCBpbnQgICAgICBGVF9JbnQzMjsKLSAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgRlRfVUludDMyOwotCi0jZWxpZiBGVF9TSVpFT0ZfTE9ORyA9PSA0Ci0KLSAgdHlwZWRlZiBzaWduZWQgbG9uZyAgICAgRlRfSW50MzI7Ci0gIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIEZUX1VJbnQzMjsKLQotI2Vsc2UKLSNlcnJvciAibm8gMzJiaXQgdHlwZSBmb3VuZCAtLSBwbGVhc2UgY2hlY2sgeW91ciBjb25maWd1cmF0aW9uIGZpbGVzIgotI2VuZGlmCi0KLQotICAvKiBsb29rIHVwIGFuIGludGVnZXIgdHlwZSB0aGF0IGlzIGF0IGxlYXN0IDMyfmJpdHMgKi8KLSNpZiBGVF9TSVpFT0ZfSU5UID49IDQKLQotICB0eXBlZGVmIGludCAgICAgICAgICAgIEZUX0Zhc3Q7Ci0gIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgRlRfVUZhc3Q7Ci0KLSNlbGlmIEZUX1NJWkVPRl9MT05HID49IDQKLQotICB0eXBlZGVmIGxvbmcgICAgICAgICAgIEZUX0Zhc3Q7Ci0gIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgRlRfVUZhc3Q7Ci0KLSNlbmRpZgotCi0KLSAgLyogZGV0ZXJtaW5lIHdoZXRoZXIgd2UgaGF2ZSBhIDY0LWJpdCBgaW50YCB0eXBlIGZvciBwbGF0Zm9ybXMgd2l0aG91dCAqLwotICAvKiBBdXRvY29uZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWYgRlRfU0laRU9GX0xPTkcgPT0gOAotCi0gIC8qIGBGVF9MT05HNjRgIG11c3QgYmUgZGVmaW5lZCBpZiBhIDY0LWJpdCB0eXBlIGlzIGF2YWlsYWJsZSAqLwotI2RlZmluZSBGVF9MT05HNjQKLSNkZWZpbmUgRlRfSU5UNjQgICBsb25nCi0jZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgbG9uZwotCi0gIC8qIHdlIGhhbmRsZSB0aGUgTExQNjQgc2NoZW1lIHNlcGFyYXRlbHkgZm9yIEdDQyBhbmQgY2xhbmcsICovCi0gIC8qIHN1cHByZXNzaW5nIHRoZSBgbG9uZyBsb25nYCB3YXJuaW5nICAgICAgICAgICAgICAgICAgICAgICovCi0jZWxpZiAoIEZUX1NJWkVPRl9MT05HID09IDQgKSAgICAgICAmJiBcCi0gICAgICBkZWZpbmVkKCBIQVZFX0xPTkdfTE9OR19JTlQgKSAmJiBcCi0gICAgICBkZWZpbmVkKCBfX0dOVUNfXyApCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbG9uZy1sb25nIgotI2RlZmluZSBGVF9MT05HNjQKLSNkZWZpbmUgRlRfSU5UNjQgICBsb25nIGxvbmcgaW50Ci0jZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgbG9uZyBsb25nIGludAotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBBIDY0LWJpdCBkYXRhIHR5cGUgbWF5IGNyZWF0ZSBjb21waWxhdGlvbiBwcm9ibGVtcyBpZiB5b3UgY29tcGlsZSBpbgotICAgKiBzdHJpY3QgQU5TSSBtb2RlLiAgVG8gYXZvaWQgdGhlbSwgd2UgZGlzYWJsZSBvdGhlciA2NC1iaXQgZGF0YSB0eXBlcyBpZgotICAgKiBgX19TVERDX19gIGlzIGRlZmluZWQuICBZb3UgY2FuIGhvd2V2ZXIgaWdub3JlIHRoaXMgcnVsZSBieSBkZWZpbmluZyB0aGUKLSAgICogYEZUX0NPTkZJR19PUFRJT05fRk9SQ0VfSU5UNjRgIGNvbmZpZ3VyYXRpb24gbWFjcm8uCi0gICAqLwotI2VsaWYgIWRlZmluZWQoIF9fU1REQ19fICkgfHwgZGVmaW5lZCggRlRfQ09ORklHX09QVElPTl9GT1JDRV9JTlQ2NCApCi0KLSNpZiBkZWZpbmVkKCBfX1NURENfVkVSU0lPTl9fICkgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0KLSNkZWZpbmUgRlRfTE9ORzY0Ci0jZGVmaW5lIEZUX0lOVDY0ICAgbG9uZyBsb25nIGludAotI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKLQotI2VsaWYgZGVmaW5lZCggX01TQ19WRVIgKSAmJiBfTVNDX1ZFUiA+PSA5MDAgLyogVmlzdWFsIEMrKyAoYW5kIEludGVsIEMrKykgKi8KLQotICAvKiB0aGlzIGNvbXBpbGVyIHByb3ZpZGVzIHRoZSBgX19pbnQ2NGAgdHlwZSAqLwotI2RlZmluZSBGVF9MT05HNjQKLSNkZWZpbmUgRlRfSU5UNjQgICBfX2ludDY0Ci0jZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgX19pbnQ2NAotCi0jZWxpZiBkZWZpbmVkKCBfX0JPUkxBTkRDX18gKSAgLyogQm9ybGFuZCBDKysgKi8KLQotICAvKiBYWFhYOiBXZSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHZhbHVlIG9mIGBfX0JPUkxBTkRDX19gIGluIG9yZGVyICovCi0gIC8qICAgICAgIHRvIHRlc3QgdGhlIGNvbXBpbGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAvKiB0aGlzIGNvbXBpbGVyIHByb3ZpZGVzIHRoZSBgX19pbnQ2NGAgdHlwZSAqLwotI2RlZmluZSBGVF9MT05HNjQKLSNkZWZpbmUgRlRfSU5UNjQgICBfX2ludDY0Ci0jZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgX19pbnQ2NAotCi0jZWxpZiBkZWZpbmVkKCBfX1dBVENPTUNfXyApICAgLyogV2F0Y29tIEMrKyAqLwotCi0gIC8qIFdhdGNvbSBkb2Vzbid0IHByb3ZpZGUgNjQtYml0IGRhdGEgdHlwZXMgKi8KLQotI2VsaWYgZGVmaW5lZCggX19NV0VSS1NfXyApICAgIC8qIE1ldHJvd2Vya3MgQ29kZVdhcnJpb3IgKi8KLQotI2RlZmluZSBGVF9MT05HNjQKLSNkZWZpbmUgRlRfSU5UNjQgICBsb25nIGxvbmcgaW50Ci0jZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgbG9uZyBsb25nIGludAotCi0jZWxpZiBkZWZpbmVkKCBfX0dOVUNfXyApCi0KLSAgLyogR0NDIHByb3ZpZGVzIHRoZSBgbG9uZyBsb25nYCB0eXBlICovCi0jZGVmaW5lIEZUX0xPTkc2NAotI2RlZmluZSBGVF9JTlQ2NCAgIGxvbmcgbG9uZyBpbnQKLSNkZWZpbmUgRlRfVUlOVDY0ICB1bnNpZ25lZCBsb25nIGxvbmcgaW50Ci0KLSNlbmRpZiAvKiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwgKi8KLQotI2VuZGlmIC8qIEZUX1NJWkVPRl9MT05HID09IDggKi8KLQotI2lmZGVmIEZUX0xPTkc2NAotICB0eXBlZGVmIEZUX0lOVDY0ICAgRlRfSW50NjQ7Ci0gIHR5cGVkZWYgRlRfVUlOVDY0ICBGVF9VSW50NjQ7Ci0jZW5kaWYKLQotCi0jaWZkZWYgX1dJTjY0Ci0gIC8qIG9ubHkgNjRiaXQgV2luZG93cyB1c2VzIHRoZSBMTFA2NCBkYXRhIG1vZGVsLCBpLmUuLCAqLwotICAvKiAzMmJpdCBpbnRlZ2VycywgNjRiaXQgcG9pbnRlcnMgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRlRfVUlOVF9UT19QT0lOVEVSKCB4ICkgKHZvaWQqKSh1bnNpZ25lZCBfX2ludDY0KSh4KQotI2Vsc2UKLSNkZWZpbmUgRlRfVUlOVF9UT19QT0lOVEVSKCB4ICkgKHZvaWQqKSh1bnNpZ25lZCBsb25nKSh4KQotI2VuZGlmCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogbWlzY2VsbGFuZW91cwotICAgKgotICAgKi8KLQotCi0jZGVmaW5lIEZUX0JFR0lOX1NUTU5UICBkbyB7Ci0jZGVmaW5lIEZUX0VORF9TVE1OVCAgICB9IHdoaWxlICggMCApCi0jZGVmaW5lIEZUX0RVTU1ZX1NUTU5UICBGVF9CRUdJTl9TVE1OVCBGVF9FTkRfU1RNTlQKLQotCi0gIC8qIGB0eXBlb2ZgIGNvbmRpdGlvbiB0YWtlbiBmcm9tIGdudWxpYidzIGBpbnRwcm9wcy5oYCBoZWFkZXIgZmlsZSAqLwotI2lmICggKCBkZWZpbmVkKCBfX0dOVUNfXyApICYmIF9fR05VQ19fID49IDIgKSAgICAgICAgICAgICAgICAgICAgICAgfHwgXAotICAgICAgKCBkZWZpbmVkKCBfX0lCTUNfXyApICYmIF9fSUJNQ19fID49IDEyMTAgJiYgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkZWZpbmVkKCBfX0lCTV9fVFlQRU9GX18gKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAotICAgICAgKCBkZWZpbmVkKCBfX1NVTlBST19DICkgJiYgX19TVU5QUk9fQyA+PSAweDUxMTAgJiYgIV9fU1REQ19fICkgKQotI2RlZmluZSBGVF9UWVBFT0YoIHR5cGUgKSAgKCBfX3R5cGVvZl9fICggdHlwZSApICkKLSNlbHNlCi0jZGVmaW5lIEZUX1RZUEVPRiggdHlwZSApICAvKiBlbXB0eSAqLwotI2VuZGlmCi0KLQotICAvKiBVc2UgYEZUX0xPQ0FMYCBhbmQgYEZUX0xPQ0FMX0RFRmAgdG8gZGVjbGFyZSBhbmQgZGVmaW5lLCAgICAgICAgICAgICovCi0gIC8qIHJlc3BlY3RpdmVseSwgYSBmdW5jdGlvbiB0aGF0IGdldHMgdXNlZCBvbmx5IHdpdGhpbiB0aGUgc2NvcGUgb2YgYSAgKi8KLSAgLyogbW9kdWxlLiAgTm9ybWFsbHksIGJvdGggdGhlIGhlYWRlciBhbmQgc291cmNlIGNvZGUgZmlsZXMgZm9yIHN1Y2ggYSAqLwotICAvKiBmdW5jdGlvbiBhcmUgd2l0aGluIGEgc2luZ2xlIG1vZHVsZSBkaXJlY3RvcnkuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSW50cmEtbW9kdWxlIGFycmF5cyBzaG91bGQgYmUgdGFnZ2VkIHdpdGggYEZUX0xPQ0FMX0FSUkFZYCBhbmQgICAgICAqLwotICAvKiBgRlRfTE9DQUxfQVJSQVlfREVGYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZmRlZiBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCi0KLSNkZWZpbmUgRlRfTE9DQUwoIHggKSAgICAgIHN0YXRpYyAgeAotI2RlZmluZSBGVF9MT0NBTF9ERUYoIHggKSAgc3RhdGljICB4Ci0KLSNlbHNlCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9MT0NBTCggeCApICAgICAgZXh0ZXJuICJDIiAgeAotI2RlZmluZSBGVF9MT0NBTF9ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfTE9DQUwoIHggKSAgICAgIGV4dGVybiAgeAotI2RlZmluZSBGVF9MT0NBTF9ERUYoIHggKSAgeAotI2VuZGlmCi0KLSNlbmRpZiAvKiBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUICovCi0KLSNkZWZpbmUgRlRfTE9DQUxfQVJSQVkoIHggKSAgICAgIGV4dGVybiBjb25zdCAgeAotI2RlZmluZSBGVF9MT0NBTF9BUlJBWV9ERUYoIHggKSAgY29uc3QgIHgKLQotCi0gIC8qIFVzZSBgRlRfQkFTRWAgYW5kIGBGVF9CQVNFX0RFRmAgdG8gZGVjbGFyZSBhbmQgZGVmaW5lLCByZXNwZWN0aXZlbHksICovCi0gIC8qIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGluIG1vcmUgdGhhbiBhIHNpbmdsZSBtb2R1bGUuICBJbiB0aGUgICAgICAgICovCi0gIC8qIGN1cnJlbnQgc2V0dXAgdGhpcyBpbXBsaWVzIHRoYXQgdGhlIGRlY2xhcmF0aW9uIGlzIGluIGEgaGVhZGVyIGZpbGUgICovCi0gIC8qIGluIHRoZSBgaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbGAgZGlyZWN0b3J5LCBhbmQgdGhlIGZ1bmN0aW9uIGJvZHkgICovCi0gIC8qIGlzIGluIGEgZmlsZSBpbiBgc3JjL2Jhc2VgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWZuZGVmIEZUX0JBU0UKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jZGVmaW5lIEZUX0JBU0UoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfQkFTRSggeCApICBleHRlcm4gIHgKLSNlbmRpZgotCi0jZW5kaWYgLyogIUZUX0JBU0UgKi8KLQotCi0jaWZuZGVmIEZUX0JBU0VfREVGCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9CQVNFX0RFRiggeCApICB4Ci0jZWxzZQotI2RlZmluZSBGVF9CQVNFX0RFRiggeCApICB4Ci0jZW5kaWYKLQotI2VuZGlmIC8qICFGVF9CQVNFX0RFRiAqLwotCi0KLSAgLyogV2hlbiBjb21waWxpbmcgRnJlZVR5cGUgYXMgYSBETEwgb3IgRFNPIHdpdGggaGlkZGVuIHZpc2liaWxpdHkgICAgKi8KLSAgLyogc29tZSBzeXN0ZW1zL2NvbXBpbGVycyBuZWVkIGEgc3BlY2lhbCBhdHRyaWJ1dGUgaW4gZnJvbnQgT1IgYWZ0ZXIgKi8KLSAgLyogdGhlIHJldHVybiB0eXBlIG9mIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVHdvIG1hY3JvcyBhcmUgdXNlZCB3aXRoaW4gdGhlIEZyZWVUeXBlIHNvdXJjZSBjb2RlIHRvIGRlZmluZSAgICAgKi8KLSAgLyogZXhwb3J0ZWQgbGlicmFyeSBmdW5jdGlvbnM6IGBGVF9FWFBPUlRgIGFuZCBgRlRfRVhQT1JUX0RFRmAuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLSBgRlRfRVhQT1JUKCByZXR1cm5fdHlwZSApYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBpcyB1c2VkIGluIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24sIGFzIGluICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0luaXRfRnJlZVR5cGUoIEZUX0xpYnJhcnkqICBhbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLSBgRlRfRVhQT1JUX0RFRiggcmV0dXJuX3R5cGUgKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBpcyB1c2VkIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgYXMgaW4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0luaXRfRnJlZVR5cGUoIEZUX0xpYnJhcnkqICBhbGlicmFyeSApICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgLi4uIHNvbWUgY29kZSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogWW91IGNhbiBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIGBGVF9FWFBPUlRgIGFuZCAgICAgICAgKi8KLSAgLyogYEZUX0VYUE9SVF9ERUZgIGhlcmUgaWYgeW91IHdhbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVG8gZXhwb3J0IGEgdmFyaWFibGUsIHVzZSBgRlRfRVhQT1JUX1ZBUmAuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZm5kZWYgRlRfRVhQT1JUCi0KLSNpZmRlZiBGVDJfQlVJTERfTElCUkFSWQotCi0jaWYgZGVmaW5lZCggX1dJTjMyICkgJiYgZGVmaW5lZCggRExMX0VYUE9SVCApCi0jZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2RlY2xzcGVjKCBkbGxleHBvcnQgKSAgeAotI2VsaWYgZGVmaW5lZCggX19HTlVDX18gKSAmJiBfX0dOVUNfXyA+PSA0Ci0jZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2F0dHJpYnV0ZV9fKCggdmlzaWJpbGl0eSggImRlZmF1bHQiICkgKSkgIHgKLSNlbGlmIGRlZmluZWQoIF9fU1VOUFJPX0MgKSAmJiBfX1NVTlBST19DID49IDB4NTUwCi0jZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2dsb2JhbCAgeAotI2VsaWYgZGVmaW5lZCggX19jcGx1c3BsdXMgKQotI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIGV4dGVybiAgeAotI2VuZGlmCi0KLSNlbHNlCi0KLSNpZiBkZWZpbmVkKCBfV0lOMzIgKSAmJiBkZWZpbmVkKCBETExfSU1QT1JUICkKLSNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIF9fZGVjbHNwZWMoIGRsbGltcG9ydCApICB4Ci0jZWxpZiBkZWZpbmVkKCBfX2NwbHVzcGx1cyApCi0jZGVmaW5lIEZUX0VYUE9SVCggeCApICBleHRlcm4gIkMiICB4Ci0jZWxzZQotI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgZXh0ZXJuICB4Ci0jZW5kaWYKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhRlRfRVhQT1JUICovCi0KLQotI2lmbmRlZiBGVF9FWFBPUlRfREVGCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9FWFBPUlRfREVGKCB4ICkgIGV4dGVybiAiQyIgIHgKLSNlbHNlCi0jZGVmaW5lIEZUX0VYUE9SVF9ERUYoIHggKSAgZXh0ZXJuICB4Ci0jZW5kaWYKLQotI2VuZGlmIC8qICFGVF9FWFBPUlRfREVGICovCi0KLQotI2lmbmRlZiBGVF9FWFBPUlRfVkFSCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9FWFBPUlRfVkFSKCB4ICkgIGV4dGVybiAiQyIgIHgKLSNlbHNlCi0jZGVmaW5lIEZUX0VYUE9SVF9WQVIoIHggKSAgZXh0ZXJuICB4Ci0jZW5kaWYKLQotI2VuZGlmIC8qICFGVF9FWFBPUlRfVkFSICovCi0KLQotICAvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgbmVlZGVkIHRvIGNvbXBpbGUgdGhlIGxpYnJhcnkgd2l0aCBhICAgKi8KLSAgLyogQysrIGNvbXBpbGVyIGFuZCB3aXRoIDE2Yml0IGNvbXBpbGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIC8qIFRoaXMgaXMgc3BlY2lhbC4gIFdpdGhpbiBDKyssIHlvdSBtdXN0IHNwZWNpZnkgYGV4dGVybiAiQyJgIGZvciAqLwotICAvKiBmdW5jdGlvbnMgd2hpY2ggYXJlIHVzZWQgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzLCBhbmQgeW91IGFsc28gICAgKi8KLSAgLyogbXVzdCBkbyB0aGF0IGZvciBzdHJ1Y3R1cmVzIHdoaWNoIGNvbnRhaW4gZnVuY3Rpb24gcG9pbnRlcnMgdG8gICovCi0gIC8qIGFzc3VyZSBDIGxpbmthZ2UgLS0gaXQncyBub3QgcG9zc2libGUgdG8gaGF2ZSAobG9jYWwpIGFub255bW91cyAqLwotICAvKiBmdW5jdGlvbnMgd2hpY2ggYXJlIGFjY2Vzc2VkIGJ5IChnbG9iYWwpIGZ1bmN0aW9uIHBvaW50ZXJzLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGVF9DQUxMQkFDS19ERUYgaXMgdXNlZCB0byBfZGVmaW5lXyBhIGNhbGxiYWNrIGZ1bmN0aW9uLCAgICAgICAgKi8KLSAgLyogbG9jYXRlZCBpbiB0aGUgc2FtZSBzb3VyY2UgY29kZSBmaWxlIGFzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB1c2VzICovCi0gIC8qIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRlRfQkFTRV9DQUxMQkFDSyBhbmQgRlRfQkFTRV9DQUxMQkFDS19ERUYgYXJlIHVzZWQgdG8gZGVjbGFyZSAgICovCi0gIC8qIGFuZCBkZWZpbmUgYSBjYWxsYmFjayBmdW5jdGlvbiwgcmVzcGVjdGl2ZWx5LCBpbiBhIHNpbWlsYXIgd2F5ICAqLwotICAvKiBhcyBGVF9CQVNFIGFuZCBGVF9CQVNFX0RFRiB3b3JrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZUX0NBTExCQUNLX1RBQkxFIGlzIHVzZWQgdG8gX2RlY2xhcmVfIGEgY29uc3RhbnQgdmFyaWFibGUgdGhhdCAqLwotICAvKiBjb250YWlucyBwb2ludGVycyB0byBjYWxsYmFjayBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZUX0NBTExCQUNLX1RBQkxFX0RFRiBpcyB1c2VkIHRvIF9kZWZpbmVfIGEgY29uc3RhbnQgdmFyaWFibGUgICAqLwotICAvKiB0aGF0IGNvbnRhaW5zIHBvaW50ZXJzIHRvIGNhbGxiYWNrIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTb21lIDE2Yml0IGNvbXBpbGVycyBoYXZlIHRvIHJlZGVmaW5lIHRoZXNlIG1hY3JvcyB0byBpbnNlcnQgICAgKi8KLSAgLyogdGhlIGluZmFtb3VzIGBfY2RlY2xgIG9yIGBfX2Zhc3RjYWxsYCBkZWNsYXJhdGlvbnMuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmbmRlZiBGVF9DQUxMQkFDS19ERUYKLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9DQUxMQkFDS19ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfQ0FMTEJBQ0tfREVGKCB4ICkgIHN0YXRpYyAgeAotI2VuZGlmCi0jZW5kaWYgLyogRlRfQ0FMTEJBQ0tfREVGICovCi0KLSNpZm5kZWYgRlRfQkFTRV9DQUxMQkFDSwotI2lmZGVmIF9fY3BsdXNwbHVzCi0jZGVmaW5lIEZUX0JBU0VfQ0FMTEJBQ0soIHggKSAgICAgIGV4dGVybiAiQyIgIHgKLSNkZWZpbmUgRlRfQkFTRV9DQUxMQkFDS19ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfQkFTRV9DQUxMQkFDSyggeCApICAgICAgZXh0ZXJuICB4Ci0jZGVmaW5lIEZUX0JBU0VfQ0FMTEJBQ0tfREVGKCB4ICkgIHgKLSNlbmRpZgotI2VuZGlmIC8qIEZUX0JBU0VfQ0FMTEJBQ0sgKi8KLQotI2lmbmRlZiBGVF9DQUxMQkFDS19UQUJMRQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFICAgICAgZXh0ZXJuICJDIgotI2RlZmluZSBGVF9DQUxMQkFDS19UQUJMRV9ERUYgIGV4dGVybiAiQyIKLSNlbHNlCi0jZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFICAgICAgZXh0ZXJuCi0jZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFX0RFRiAgLyogbm90aGluZyAqLwotI2VuZGlmCi0jZW5kaWYgLyogRlRfQ0FMTEJBQ0tfVEFCTEUgKi8KLQotCi1GVF9FTkRfSEVBREVSCi0KLQotI2VuZGlmIC8qIEZUQ09ORklHX0hfICovCi0KLQotLyogRU5EICovCmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC9mdHN5c3RlbS5jIGIvYnVpbGRzL3VuaXgvZnRzeXN0ZW0uYwppbmRleCA4MjY3MTNmLi5iNGQ3MWQ0IDEwMDY0NAotLS0gYS9idWlsZHMvdW5peC9mdHN5c3RlbS5jCisrKyBiL2J1aWxkcy91bml4L2Z0c3lzdGVtLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVW5peC1zcGVjaWZpYyBGcmVlVHlwZSBsb3ctbGV2ZWwgc3lzdGVtIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE4LDEyICsxOCwxMiBAQAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICAgLyogd2UgdXNlIG91ciBzcGVjaWFsIGZ0Y29uZmlnLmggZmlsZSwgbm90IHRoZSBzdGFuZGFyZCBvbmUgKi8KLSNpbmNsdWRlIDxmdGNvbmZpZy5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfU1lTVEVNX0gKLSNpbmNsdWRlIEZUX0VSUk9SU19ICi0jaW5jbHVkZSBGVF9UWVBFU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0c3lzdGVtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdHR5cGVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KIAogICAvKiBtZW1vcnktbWFwcGluZyBpbmNsdWRlcyBhbmQgZGVmaW5pdGlvbnMgKi8KICNpZmRlZiBIQVZFX1VOSVNURF9ICkBAIC0zNTEsNyArMzUxLDcgQEAKICAgICBzdHJlYW0tPnJlYWQgPSAwOwogCiAgICAgRlRfVFJBQ0UxKCggIkZUX1N0cmVhbV9PcGVuOiIgKSk7Ci0gICAgRlRfVFJBQ0UxKCggIiBvcGVuZWQgYCVzJyAoJWQgYnl0ZXMpIHN1Y2Nlc3NmdWxseVxuIiwKKyAgICBGVF9UUkFDRTEoKCAiIG9wZW5lZCBgJXMnICglbGQgYnl0ZXMpIHN1Y2Nlc3NmdWxseVxuIiwKICAgICAgICAgICAgICAgICBmaWxlcGF0aG5hbWUsIHN0cmVhbS0+c2l6ZSApKTsKIAogICAgIHJldHVybiBGVF9FcnJfT2s7CmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC9pbnN0YWxsLm1rIGIvYnVpbGRzL3VuaXgvaW5zdGFsbC5tawppbmRleCAyMjg3ZGZjLi5hYTI1MTg3IDEwMDY0NAotLS0gYS9idWlsZHMvdW5peC9pbnN0YWxsLm1rCisrKyBiL2J1aWxkcy91bml4L2luc3RhbGwubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC91bml4LWNjLmluIGIvYnVpbGRzL3VuaXgvdW5peC1jYy5pbgppbmRleCBlZDUxZmRlLi4zMGQwOTdiIDEwMDY0NAotLS0gYS9idWlsZHMvdW5peC91bml4LWNjLmluCisrKyBiL2J1aWxkcy91bml4L3VuaXgtY2MuaW4KQEAgLTIsNyArMiw3IEBACiAjIEZyZWVUeXBlIDIgdGVtcGxhdGUgZm9yIFVuaXgtc3BlY2lmaWMgY29tcGlsZXIgZGVmaW5pdGlvbnMKICMKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCkBAIC03NiwxMCArNzYsMTMgQEAKICMgICBVc2UgdGhlIEFOU0lGTEFHUyB2YXJpYWJsZSB0byBkZWZpbmUgdGhlIGNvbXBpbGVyIGZsYWdzIHVzZWQgdG8gZW5mb3JlCiAjICAgQU5TSSBjb21wbGlhbmNlLgogIwotIyAgIFdlIHVzZSBvdXIgb3duIEZyZWVUeXBlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyMgICBXZSB1c2Ugb3VyIG93biBGcmVlVHlwZSBjb25maWd1cmF0aW9uIGZpbGVzIG92ZXJyaWRpbmcgZGVmYXVsdHMuCiAjCiBDUFBGTEFHUyA6PSBAQ1BQRkxBR1NACi1DRkxBR1MgICA6PSAtYyBAWFhfQ0ZMQUdTQCBAQ0ZMQUdTQCAtREZUX0NPTkZJR19DT05GSUdfSD0iPGZ0Y29uZmlnLmg+IgorQ0ZMQUdTICAgOj0gLWMgQFhYX0NGTEFHU0AgQENGTEFHU0AgXAorICAgICAgICAgICAgJERGVF9DT05GSUdfQ09ORklHX0g9IjxmdGNvbmZpZy5oPiIgXAorICAgICAgICAgICAgJERGVF9DT05GSUdfTU9EVUxFU19IPSI8ZnRtb2R1bGUuaD4iIFwKKyAgICAgICAgICAgICRERlRfQ09ORklHX09QVElPTlNfSD0iPGZ0b3B0aW9uLmg+IgogCiAjIEFOU0lGTEFHUzogUHV0IHRoZXJlIHRoZSBmbGFncyB1c2VkIHRvIG1ha2UgeW91ciBjb21waWxlciBBTlNJLWNvbXBsaWFudC4KICMKQEAgLTg3LDggKzkwLDEyIEBACiAKICMgQyBjb21waWxlciB0byB1c2UgLS0gd2UgdXNlIGxpYnRvb2whCiAjCi1DQ3JhdyA6PSAkKENDKQotQ0MgICAgOj0gJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENDcmF3KQorIyBDQyBtaWdodCBiZSBzZXQgb24gdGhlIGNvbW1hbmQgbGluZTsgd2Ugc3RvcmUgdGhpcyB2YWx1ZSBpbiBgQ0NyYXcnLgorIyBDb25zZXF1ZW50bHksIHdlIHVzZSB0aGUgYG92ZXJyaWRlJyBkaXJlY3RpdmUgdG8gZW5zdXJlIHRoYXQgdGhlCisjIGxpYnRvb2wgY2FsbCBpcyBhbHdheXMgcHJlcGVuZGVkLgorIworQ0NyYXcgICAgICAgOj0gJChDQykKK292ZXJyaWRlIENDIDo9ICQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDQ3JhdykKIAogIyBSZXNvdXJjZSBjb21waWxlciB0byB1c2Ugb24gQ3lnd2luL01pbkdXLCB1c3VhbGx5IHdpbmRyZXMuCiAjCmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC91bml4LWRlZi5pbiBiL2J1aWxkcy91bml4L3VuaXgtZGVmLmluCmluZGV4IGU3NDg0NGQuLjVlMDRmMWMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L3VuaXgtZGVmLmluCisrKyBiL2J1aWxkcy91bml4L3VuaXgtZGVmLmluCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApAQCAtMjQsNyArMjQsNiBAQAogIyBUaGlzIGlzIHVzZWQgZm9yIGBtYWtlIHJlZmRvYycgYW5kIGBtYWtlIHJlZmRvYy12ZW52JwogIwogUFlUSE9OIDo9IEBQWVRIT05ACi1QSVAgICAgOj0gQFBJUEAKIEJJTiAgICA6PSBiaW4KIAogIyB0aGlzIGlzIHVzZWQgZm9yIGBtYWtlIGRpc3RjbGVhbicgYW5kIGBtYWtlIGluc3RhbGwnCmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC91bml4LWRldi5tayBiL2J1aWxkcy91bml4L3VuaXgtZGV2Lm1rCmluZGV4IDNjYjE3MWEuLjEzNTI1NzUgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L3VuaXgtZGV2Lm1rCisrKyBiL2J1aWxkcy91bml4L3VuaXgtZGV2Lm1rCkBAIC02LDcgKzYsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL3VuaXgvdW5peC1sY2MubWsgYi9idWlsZHMvdW5peC91bml4LWxjYy5tawppbmRleCBlNjMyZTlhLi5hNjU3OWRiIDEwMDY0NAotLS0gYS9idWlsZHMvdW5peC91bml4LWxjYy5taworKysgYi9idWlsZHMvdW5peC91bml4LWxjYy5tawpAQCAtNiw3ICs2LDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy91bml4L3VuaXgubWsgYi9idWlsZHMvdW5peC91bml4Lm1rCmluZGV4IDJkMDRlZWYuLmUwODcyN2QgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L3VuaXgubWsKKysrIGIvYnVpbGRzL3VuaXgvdW5peC5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy91bml4L3VuaXhkZGVmLm1rIGIvYnVpbGRzL3VuaXgvdW5peGRkZWYubWsKaW5kZXggOWFhZDM1Yy4uYjhlMzIxNyAxMDA2NDQKLS0tIGEvYnVpbGRzL3VuaXgvdW5peGRkZWYubWsKKysrIGIvYnVpbGRzL3VuaXgvdW5peGRkZWYubWsKQEAgLTQsNyArNCw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvdm1zL2Z0Y29uZmlnLmggYi9idWlsZHMvdm1zL2Z0Y29uZmlnLmgKaW5kZXggNzgyNWRiMC4uMDdlNWY4MyAxMDA2NDQKLS0tIGEvYnVpbGRzL3Ztcy9mdGNvbmZpZy5oCisrKyBiL2J1aWxkcy92bXMvZnRjb25maWcuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFZNUy1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgKHNwZWNpZmljYXRpb24gb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMzksMjEgKzM5LDYgQEAKICNpbmNsdWRlIEZUX0NPTkZJR19PUFRJT05TX0gKICNpbmNsdWRlIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0gKIAotCi1GVF9CRUdJTl9IRUFERVIKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiAgICAgICAgICAgICAgUExBVEZPUk0tU1BFQ0lGSUMgQ09ORklHVVJBVElPTiBNQUNST1MKLSAgICoKLSAgICogVGhlc2UgbWFjcm9zIGNhbiBiZSB0b2dnbGVkIHRvIHN1aXQgYSBzcGVjaWZpYyBzeXN0ZW0uICBUaGUgY3VycmVudCBvbmVzCi0gICAqIGFyZSBkZWZhdWx0cyB1c2VkIHRvIGNvbXBpbGUgRnJlZVR5cGUgaW4gYW4gQU5TSSBDIGVudmlyb25tZW50ICgxNmJpdAotICAgKiBjb21waWxlcnMgYXJlIGFsc28gc3VwcG9ydGVkKS4gIENvcHkgdGhpcyBmaWxlIHRvIHlvdXIgb3duCi0gICAqIGBidWlsZHMvPHN5c3RlbT5gIGRpcmVjdG9yeSwgYW5kIGVkaXQgaXQgdG8gcG9ydCB0aGUgZW5naW5lLgotICAgKgotICAgKi8KLQogI2RlZmluZSBIQVZFX1VOSVNURF9IICAxCiAjZGVmaW5lIEhBVkVfRkNOVExfSCAgIDEKIApAQCAtNjMsNDkxICs0OCw5IEBACiAjZGVmaW5lIEZUX1NJWkVPRl9JTlQgICA0CiAjZGVmaW5lIEZUX1NJWkVPRl9MT05HICA0CiAKLQotICAvKiBgRlRfVU5VU0VEYCBpbmRpY2F0ZXMgdGhhdCBhIGdpdmVuIHBhcmFtZXRlciBpcyBub3QgdXNlZCAtLSAgICovCi0gIC8qIHRoaXMgaXMgb25seSB1c2VkIHRvIGdldCByaWQgb2YgdW5wbGVhc2FudCBjb21waWxlciB3YXJuaW5ncy4gKi8KLSNpZm5kZWYgRlRfVU5VU0VECi0jZGVmaW5lIEZUX1VOVVNFRCggYXJnICkgICggKGFyZykgPSAoYXJnKSApCi0jZW5kaWYKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiAgICAgICAgICAgICAgICAgICAgQVVUT01BVElDIENPTkZJR1VSQVRJT04gTUFDUk9TCi0gICAqCi0gICAqIFRoZXNlIG1hY3JvcyBhcmUgY29tcHV0ZWQgZnJvbSB0aGUgb25lcyBkZWZpbmVkIGFib3ZlLiAgRG9uJ3QgdG91Y2gKLSAgICogdGhlaXIgZGVmaW5pdGlvbiwgdW5sZXNzIHlvdSBrbm93IHByZWNpc2VseSB3aGF0IHlvdSBhcmUgZG9pbmcuICBObwotICAgKiBwb3J0ZXIgc2hvdWxkIG5lZWQgdG8gbWVzcyB3aXRoIHRoZW0uCi0gICAqCi0gICAqLwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIE1hYyBzdXBwb3J0Ci0gICAqCi0gICAqICAgVGhpcyBpcyB0aGUgb25seSBuZWNlc3NhcnkgY2hhbmdlLCBzbyBpdCBpcyBkZWZpbmVkIGhlcmUgaW5zdGVhZAotICAgKiAgIHByb3ZpZGluZyBhIG5ldyBjb25maWd1cmF0aW9uIGZpbGUuCi0gICAqLwotI2lmIGRlZmluZWQoIF9fQVBQTEVfXyApIHx8ICggZGVmaW5lZCggX19NV0VSS1NfXyApICYmIGRlZmluZWQoIG1hY2ludG9zaCApICkKLSAgLyogTm8gQ2FyYm9uIGZyYW1ld29ya3MgZm9yIDY0Yml0IDEwLjQueC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogYEF2YWlsYWJpbGl0eU1hY3Jvcy5oYCBpcyBhdmFpbGFibGUgc2luY2UgTWFjIE9TIFggMTAuMiwgICAgICAgKi8KLSAgLyogc28gZ3Vlc3MgdGhlIHN5c3RlbSB2ZXJzaW9uIGJ5IG1heGltdW0gZXJybm8gYmVmb3JlIGluY2x1c2lvbi4gKi8KLSNpbmNsdWRlIDxlcnJuby5oPgotI2lmZGVmIEVDQU5DRUxFRCAvKiBkZWZpbmVkIHNpbmNlIDEwLjIgKi8KLSNpbmNsdWRlICJBdmFpbGFiaWxpdHlNYWNyb3MuaCIKLSNlbmRpZgotI2lmIGRlZmluZWQoIF9fTFA2NF9fICkgJiYgXAotICAgICggTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0gTUFDX09TX1hfVkVSU0lPTl8xMF80ICkKLSN1bmRlZiBGVF9NQUNJTlRPU0gKLSNlbmRpZgotCi0jZWxpZiBkZWZpbmVkKCBfX1NDX18gKSB8fCBkZWZpbmVkKCBfX01SQ19fICkKLSAgLyogQ2xhc3NpYyBNYWNPUyBjb21waWxlcnMgKi8KLSNpbmNsdWRlICJDb25kaXRpb25hbE1hY3Jvcy5oIgotI2lmIFRBUkdFVF9PU19NQUMKLSNkZWZpbmUgRlRfTUFDSU5UT1NIIDEKLSNlbmRpZgotCi0jZW5kaWYKLQotCi0gIC8qIEZpeCBjb21waWxlciB3YXJuaW5nIHdpdGggc2dpIGNvbXBpbGVyLiAqLwotI2lmIGRlZmluZWQoIF9fc2dpICkgJiYgIWRlZmluZWQoIF9fR05VQ19fICkKLSNpZiBkZWZpbmVkKCBfQ09NUElMRVJfVkVSU0lPTiApICYmICggX0NPTVBJTEVSX1ZFUlNJT04gPj0gNzMwICkKLSNwcmFnbWEgc2V0IHdvZmYgMzUwNQotI2VuZGlmCi0jZW5kaWYKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAc2VjdGlvbjoKLSAgICogICBiYXNpY190eXBlcwotICAgKgotICAgKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAdHlwZToKLSAgICogICBGVF9JbnQxNgotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgQSB0eXBlZGVmIGZvciBhIDE2Yml0IHNpZ25lZCBpbnRlZ2VyIHR5cGUuCi0gICAqLwotICB0eXBlZGVmIHNpZ25lZCBzaG9ydCAgRlRfSW50MTY7Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQHR5cGU6Ci0gICAqICAgRlRfVUludDE2Ci0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBBIHR5cGVkZWYgZm9yIGEgMTZiaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlLgotICAgKi8KLSAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgRlRfVUludDE2OwotCi0gIC8qICovCi0KLQotICAvKiB0aGlzICNpZiAwIC4uLiAjZW5kaWYgY2xhdXNlIGlzIGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzICovCi0jaWYgMAotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAdHlwZToKLSAgICogICBGVF9JbnQzMgotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgQSB0eXBlZGVmIGZvciBhIDMyYml0IHNpZ25lZCBpbnRlZ2VyIHR5cGUuICBUaGUgc2l6ZSBkZXBlbmRzIG9uIHRoZQotICAgKiAgIGNvbmZpZ3VyYXRpb24uCi0gICAqLwotICB0eXBlZGVmIHNpZ25lZCBYWFggIEZUX0ludDMyOwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEB0eXBlOgotICAgKiAgIEZUX1VJbnQzMgotICAgKgotICAgKiAgIEEgdHlwZWRlZiBmb3IgYSAzMmJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUuICBUaGUgc2l6ZSBkZXBlbmRzIG9uIHRoZQotICAgKiAgIGNvbmZpZ3VyYXRpb24uCi0gICAqLwotICB0eXBlZGVmIHVuc2lnbmVkIFhYWCAgRlRfVUludDMyOwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEB0eXBlOgotICAgKiAgIEZUX0ludDY0Ci0gICAqCi0gICAqICAgQSB0eXBlZGVmIGZvciBhIDY0Yml0IHNpZ25lZCBpbnRlZ2VyIHR5cGUuICBUaGUgc2l6ZSBkZXBlbmRzIG9uIHRoZQotICAgKiAgIGNvbmZpZ3VyYXRpb24uICBPbmx5IGRlZmluZWQgaWYgdGhlcmUgaXMgcmVhbCA2NGJpdCBzdXBwb3J0OwotICAgKiAgIG90aGVyd2lzZSwgaXQgZ2V0cyBlbXVsYXRlZCB3aXRoIGEgc3RydWN0dXJlIChpZiBuZWNlc3NhcnkpLgotICAgKi8KLSAgdHlwZWRlZiBzaWduZWQgWFhYICBGVF9JbnQ2NDsKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAdHlwZToKLSAgICogICBGVF9VSW50NjQKLSAgICoKLSAgICogICBBIHR5cGVkZWYgZm9yIGEgNjRiaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlLiAgVGhlIHNpemUgZGVwZW5kcyBvbiB0aGUKLSAgICogICBjb25maWd1cmF0aW9uLiAgT25seSBkZWZpbmVkIGlmIHRoZXJlIGlzIHJlYWwgNjRiaXQgc3VwcG9ydDsKLSAgICogICBvdGhlcndpc2UsIGl0IGdldHMgZW11bGF0ZWQgd2l0aCBhIHN0cnVjdHVyZSAoaWYgbmVjZXNzYXJ5KS4KLSAgICovCi0gIHR5cGVkZWYgdW5zaWduZWQgWFhYICBGVF9VSW50NjQ7Ci0KLSAgLyogKi8KLQotI2VuZGlmCi0KLSNpZiBGVF9TSVpFT0ZfSU5UID09IDQKLQotICB0eXBlZGVmIHNpZ25lZCBpbnQgICAgICBGVF9JbnQzMjsKLSAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgRlRfVUludDMyOwotCi0jZWxpZiBGVF9TSVpFT0ZfTE9ORyA9PSA0Ci0KLSAgdHlwZWRlZiBzaWduZWQgbG9uZyAgICAgRlRfSW50MzI7Ci0gIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIEZUX1VJbnQzMjsKLQotI2Vsc2UKLSNlcnJvciAibm8gMzJiaXQgdHlwZSBmb3VuZCAtLSBwbGVhc2UgY2hlY2sgeW91ciBjb25maWd1cmF0aW9uIGZpbGVzIgotI2VuZGlmCi0KLQotICAvKiBsb29rIHVwIGFuIGludGVnZXIgdHlwZSB0aGF0IGlzIGF0IGxlYXN0IDMyfmJpdHMgKi8KLSNpZiBGVF9TSVpFT0ZfSU5UID49IDQKLQotICB0eXBlZGVmIGludCAgICAgICAgICAgIEZUX0Zhc3Q7Ci0gIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgRlRfVUZhc3Q7Ci0KLSNlbGlmIEZUX1NJWkVPRl9MT05HID49IDQKLQotICB0eXBlZGVmIGxvbmcgICAgICAgICAgIEZUX0Zhc3Q7Ci0gIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgRlRfVUZhc3Q7Ci0KLSNlbmRpZgotCi0KLSAgLyogZGV0ZXJtaW5lIHdoZXRoZXIgd2UgaGF2ZSBhIDY0LWJpdCBgaW50YCB0eXBlIGZvciBwbGF0Zm9ybXMgd2l0aG91dCAqLwotICAvKiBBdXRvY29uZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWYgRlRfU0laRU9GX0xPTkcgPT0gOAotCi0gIC8qIGBGVF9MT05HNjRgIG11c3QgYmUgZGVmaW5lZCBpZiBhIDY0LWJpdCB0eXBlIGlzIGF2YWlsYWJsZSAqLwotI2RlZmluZSBGVF9MT05HNjQKLSNkZWZpbmUgRlRfSU5UNjQgICBsb25nCi0jZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgbG9uZwotCi0gIC8qIHdlIGhhbmRsZSB0aGUgTExQNjQgc2NoZW1lIHNlcGFyYXRlbHkgZm9yIEdDQyBhbmQgY2xhbmcsICovCi0gIC8qIHN1cHByZXNzaW5nIHRoZSBgbG9uZyBsb25nYCB3YXJuaW5nICAgICAgICAgICAgICAgICAgICAgICovCi0jZWxpZiAoIEZUX1NJWkVPRl9MT05HID09IDQgKSAgICAgICAmJiBcCi0gICAgICBkZWZpbmVkKCBIQVZFX0xPTkdfTE9OR19JTlQgKSAmJiBcCi0gICAgICBkZWZpbmVkKCBfX0dOVUNfXyApCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbG9uZy1sb25nIgotI2RlZmluZSBGVF9MT05HNjQKLSNkZWZpbmUgRlRfSU5UNjQgICBsb25nIGxvbmcgaW50Ci0jZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgbG9uZyBsb25nIGludAotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBBIDY0LWJpdCBkYXRhIHR5cGUgbWF5IGNyZWF0ZSBjb21waWxhdGlvbiBwcm9ibGVtcyBpZiB5b3UgY29tcGlsZSBpbgotICAgKiBzdHJpY3QgQU5TSSBtb2RlLiAgVG8gYXZvaWQgdGhlbSwgd2UgZGlzYWJsZSBvdGhlciA2NC1iaXQgZGF0YSB0eXBlcyBpZgotICAgKiBgX19TVERDX19gIGlzIGRlZmluZWQuICBZb3UgY2FuIGhvd2V2ZXIgaWdub3JlIHRoaXMgcnVsZSBieSBkZWZpbmluZyB0aGUKLSAgICogYEZUX0NPTkZJR19PUFRJT05fRk9SQ0VfSU5UNjRgIGNvbmZpZ3VyYXRpb24gbWFjcm8uCi0gICAqLwotI2VsaWYgIWRlZmluZWQoIF9fU1REQ19fICkgfHwgZGVmaW5lZCggRlRfQ09ORklHX09QVElPTl9GT1JDRV9JTlQ2NCApCi0KLSNpZiBkZWZpbmVkKCBfX1NURENfVkVSU0lPTl9fICkgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0KLSNkZWZpbmUgRlRfTE9ORzY0Ci0jZGVmaW5lIEZUX0lOVDY0ICAgbG9uZyBsb25nIGludAotI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKLQotI2VsaWYgZGVmaW5lZCggX01TQ19WRVIgKSAmJiBfTVNDX1ZFUiA+PSA5MDAgLyogVmlzdWFsIEMrKyAoYW5kIEludGVsIEMrKykgKi8KLQotICAvKiB0aGlzIGNvbXBpbGVyIHByb3ZpZGVzIHRoZSBgX19pbnQ2NGAgdHlwZSAqLwotI2RlZmluZSBGVF9MT05HNjQKLSNkZWZpbmUgRlRfSU5UNjQgICBfX2ludDY0Ci0jZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgX19pbnQ2NAotCi0jZWxpZiBkZWZpbmVkKCBfX0JPUkxBTkRDX18gKSAgLyogQm9ybGFuZCBDKysgKi8KLQotICAvKiBYWFhYOiBXZSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHZhbHVlIG9mIGBfX0JPUkxBTkRDX19gIGluIG9yZGVyICovCi0gIC8qICAgICAgIHRvIHRlc3QgdGhlIGNvbXBpbGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAvKiB0aGlzIGNvbXBpbGVyIHByb3ZpZGVzIHRoZSBgX19pbnQ2NGAgdHlwZSAqLwotI2RlZmluZSBGVF9MT05HNjQKLSNkZWZpbmUgRlRfSU5UNjQgICBfX2ludDY0Ci0jZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgX19pbnQ2NAotCi0jZWxpZiBkZWZpbmVkKCBfX1dBVENPTUNfXyApICAgLyogV2F0Y29tIEMrKyAqLwotCi0gIC8qIFdhdGNvbSBkb2Vzbid0IHByb3ZpZGUgNjQtYml0IGRhdGEgdHlwZXMgKi8KLQotI2VsaWYgZGVmaW5lZCggX19NV0VSS1NfXyApICAgIC8qIE1ldHJvd2Vya3MgQ29kZVdhcnJpb3IgKi8KLQotI2RlZmluZSBGVF9MT05HNjQKLSNkZWZpbmUgRlRfSU5UNjQgICBsb25nIGxvbmcgaW50Ci0jZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgbG9uZyBsb25nIGludAotCi0jZWxpZiBkZWZpbmVkKCBfX0dOVUNfXyApCi0KLSAgLyogR0NDIHByb3ZpZGVzIHRoZSBgbG9uZyBsb25nYCB0eXBlICovCi0jZGVmaW5lIEZUX0xPTkc2NAotI2RlZmluZSBGVF9JTlQ2NCAgIGxvbmcgbG9uZyBpbnQKLSNkZWZpbmUgRlRfVUlOVDY0ICB1bnNpZ25lZCBsb25nIGxvbmcgaW50Ci0KLSNlbmRpZiAvKiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwgKi8KLQotI2VuZGlmIC8qIEZUX1NJWkVPRl9MT05HID09IDggKi8KLQotI2lmZGVmIEZUX0xPTkc2NAotICB0eXBlZGVmIEZUX0lOVDY0ICAgRlRfSW50NjQ7Ci0gIHR5cGVkZWYgRlRfVUlOVDY0ICBGVF9VSW50NjQ7Ci0jZW5kaWYKLQotCi0jaWZkZWYgX1dJTjY0Ci0gIC8qIG9ubHkgNjRiaXQgV2luZG93cyB1c2VzIHRoZSBMTFA2NCBkYXRhIG1vZGVsLCBpLmUuLCAqLwotICAvKiAzMmJpdCBpbnRlZ2VycywgNjRiaXQgcG9pbnRlcnMgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRlRfVUlOVF9UT19QT0lOVEVSKCB4ICkgKHZvaWQqKSh1bnNpZ25lZCBfX2ludDY0KSh4KQotI2Vsc2UKLSNkZWZpbmUgRlRfVUlOVF9UT19QT0lOVEVSKCB4ICkgKHZvaWQqKSh1bnNpZ25lZCBsb25nKSh4KQotI2VuZGlmCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogbWlzY2VsbGFuZW91cwotICAgKgotICAgKi8KLQotCi0jZGVmaW5lIEZUX0JFR0lOX1NUTU5UICBkbyB7Ci0jZGVmaW5lIEZUX0VORF9TVE1OVCAgICB9IHdoaWxlICggMCApCi0jZGVmaW5lIEZUX0RVTU1ZX1NUTU5UICBGVF9CRUdJTl9TVE1OVCBGVF9FTkRfU1RNTlQKLQotCi0gIC8qIGB0eXBlb2ZgIGNvbmRpdGlvbiB0YWtlbiBmcm9tIGdudWxpYidzIGBpbnRwcm9wcy5oYCBoZWFkZXIgZmlsZSAqLwotI2lmICggKCBkZWZpbmVkKCBfX0dOVUNfXyApICYmIF9fR05VQ19fID49IDIgKSAgICAgICAgICAgICAgICAgICAgICAgfHwgXAotICAgICAgKCBkZWZpbmVkKCBfX0lCTUNfXyApICYmIF9fSUJNQ19fID49IDEyMTAgJiYgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkZWZpbmVkKCBfX0lCTV9fVFlQRU9GX18gKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAotICAgICAgKCBkZWZpbmVkKCBfX1NVTlBST19DICkgJiYgX19TVU5QUk9fQyA+PSAweDUxMTAgJiYgIV9fU1REQ19fICkgKQotI2RlZmluZSBGVF9UWVBFT0YoIHR5cGUgKSAgKCBfX3R5cGVvZl9fICggdHlwZSApICkKLSNlbHNlCi0jZGVmaW5lIEZUX1RZUEVPRiggdHlwZSApICAvKiBlbXB0eSAqLwotI2VuZGlmCi0KLQotICAvKiBVc2UgYEZUX0xPQ0FMYCBhbmQgYEZUX0xPQ0FMX0RFRmAgdG8gZGVjbGFyZSBhbmQgZGVmaW5lLCAgICAgICAgICAgICovCi0gIC8qIHJlc3BlY3RpdmVseSwgYSBmdW5jdGlvbiB0aGF0IGdldHMgdXNlZCBvbmx5IHdpdGhpbiB0aGUgc2NvcGUgb2YgYSAgKi8KLSAgLyogbW9kdWxlLiAgTm9ybWFsbHksIGJvdGggdGhlIGhlYWRlciBhbmQgc291cmNlIGNvZGUgZmlsZXMgZm9yIHN1Y2ggYSAqLwotICAvKiBmdW5jdGlvbiBhcmUgd2l0aGluIGEgc2luZ2xlIG1vZHVsZSBkaXJlY3RvcnkuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSW50cmEtbW9kdWxlIGFycmF5cyBzaG91bGQgYmUgdGFnZ2VkIHdpdGggYEZUX0xPQ0FMX0FSUkFZYCBhbmQgICAgICAqLwotICAvKiBgRlRfTE9DQUxfQVJSQVlfREVGYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZmRlZiBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCi0KLSNkZWZpbmUgRlRfTE9DQUwoIHggKSAgICAgIHN0YXRpYyAgeAotI2RlZmluZSBGVF9MT0NBTF9ERUYoIHggKSAgc3RhdGljICB4Ci0KLSNlbHNlCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9MT0NBTCggeCApICAgICAgZXh0ZXJuICJDIiAgeAotI2RlZmluZSBGVF9MT0NBTF9ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfTE9DQUwoIHggKSAgICAgIGV4dGVybiAgeAotI2RlZmluZSBGVF9MT0NBTF9ERUYoIHggKSAgeAotI2VuZGlmCi0KLSNlbmRpZiAvKiBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUICovCi0KLSNkZWZpbmUgRlRfTE9DQUxfQVJSQVkoIHggKSAgICAgIGV4dGVybiBjb25zdCAgeAotI2RlZmluZSBGVF9MT0NBTF9BUlJBWV9ERUYoIHggKSAgY29uc3QgIHgKLQotCi0gIC8qIFVzZSBgRlRfQkFTRWAgYW5kIGBGVF9CQVNFX0RFRmAgdG8gZGVjbGFyZSBhbmQgZGVmaW5lLCByZXNwZWN0aXZlbHksICovCi0gIC8qIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGluIG1vcmUgdGhhbiBhIHNpbmdsZSBtb2R1bGUuICBJbiB0aGUgICAgICAgICovCi0gIC8qIGN1cnJlbnQgc2V0dXAgdGhpcyBpbXBsaWVzIHRoYXQgdGhlIGRlY2xhcmF0aW9uIGlzIGluIGEgaGVhZGVyIGZpbGUgICovCi0gIC8qIGluIHRoZSBgaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbGAgZGlyZWN0b3J5LCBhbmQgdGhlIGZ1bmN0aW9uIGJvZHkgICovCi0gIC8qIGlzIGluIGEgZmlsZSBpbiBgc3JjL2Jhc2VgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWZuZGVmIEZUX0JBU0UKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jZGVmaW5lIEZUX0JBU0UoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfQkFTRSggeCApICBleHRlcm4gIHgKLSNlbmRpZgotCi0jZW5kaWYgLyogIUZUX0JBU0UgKi8KLQotCi0jaWZuZGVmIEZUX0JBU0VfREVGCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9CQVNFX0RFRiggeCApICB4Ci0jZWxzZQotI2RlZmluZSBGVF9CQVNFX0RFRiggeCApICB4Ci0jZW5kaWYKLQotI2VuZGlmIC8qICFGVF9CQVNFX0RFRiAqLwotCi0KLSAgLyogV2hlbiBjb21waWxpbmcgRnJlZVR5cGUgYXMgYSBETEwgb3IgRFNPIHdpdGggaGlkZGVuIHZpc2liaWxpdHkgICAgKi8KLSAgLyogc29tZSBzeXN0ZW1zL2NvbXBpbGVycyBuZWVkIGEgc3BlY2lhbCBhdHRyaWJ1dGUgaW4gZnJvbnQgT1IgYWZ0ZXIgKi8KLSAgLyogdGhlIHJldHVybiB0eXBlIG9mIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVHdvIG1hY3JvcyBhcmUgdXNlZCB3aXRoaW4gdGhlIEZyZWVUeXBlIHNvdXJjZSBjb2RlIHRvIGRlZmluZSAgICAgKi8KLSAgLyogZXhwb3J0ZWQgbGlicmFyeSBmdW5jdGlvbnM6IGBGVF9FWFBPUlRgIGFuZCBgRlRfRVhQT1JUX0RFRmAuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLSBgRlRfRVhQT1JUKCByZXR1cm5fdHlwZSApYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBpcyB1c2VkIGluIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24sIGFzIGluICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0luaXRfRnJlZVR5cGUoIEZUX0xpYnJhcnkqICBhbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLSBgRlRfRVhQT1JUX0RFRiggcmV0dXJuX3R5cGUgKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBpcyB1c2VkIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgYXMgaW4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0luaXRfRnJlZVR5cGUoIEZUX0xpYnJhcnkqICBhbGlicmFyeSApICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgLi4uIHNvbWUgY29kZSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogWW91IGNhbiBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIGBGVF9FWFBPUlRgIGFuZCAgICAgICAgKi8KLSAgLyogYEZUX0VYUE9SVF9ERUZgIGhlcmUgaWYgeW91IHdhbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVG8gZXhwb3J0IGEgdmFyaWFibGUsIHVzZSBgRlRfRVhQT1JUX1ZBUmAuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZm5kZWYgRlRfRVhQT1JUCi0KLSNpZmRlZiBGVDJfQlVJTERfTElCUkFSWQotCi0jaWYgZGVmaW5lZCggX1dJTjMyICkgJiYgZGVmaW5lZCggRExMX0VYUE9SVCApCi0jZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2RlY2xzcGVjKCBkbGxleHBvcnQgKSAgeAotI2VsaWYgZGVmaW5lZCggX19HTlVDX18gKSAmJiBfX0dOVUNfXyA+PSA0Ci0jZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2F0dHJpYnV0ZV9fKCggdmlzaWJpbGl0eSggImRlZmF1bHQiICkgKSkgIHgKLSNlbGlmIGRlZmluZWQoIF9fU1VOUFJPX0MgKSAmJiBfX1NVTlBST19DID49IDB4NTUwCi0jZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2dsb2JhbCAgeAotI2VsaWYgZGVmaW5lZCggX19jcGx1c3BsdXMgKQotI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIGV4dGVybiAgeAotI2VuZGlmCi0KLSNlbHNlCi0KLSNpZiBkZWZpbmVkKCBfV0lOMzIgKSAmJiBkZWZpbmVkKCBETExfSU1QT1JUICkKLSNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIF9fZGVjbHNwZWMoIGRsbGltcG9ydCApICB4Ci0jZWxpZiBkZWZpbmVkKCBfX2NwbHVzcGx1cyApCi0jZGVmaW5lIEZUX0VYUE9SVCggeCApICBleHRlcm4gIkMiICB4Ci0jZWxzZQotI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgZXh0ZXJuICB4Ci0jZW5kaWYKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhRlRfRVhQT1JUICovCi0KLQotI2lmbmRlZiBGVF9FWFBPUlRfREVGCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9FWFBPUlRfREVGKCB4ICkgIGV4dGVybiAiQyIgIHgKLSNlbHNlCi0jZGVmaW5lIEZUX0VYUE9SVF9ERUYoIHggKSAgZXh0ZXJuICB4Ci0jZW5kaWYKLQotI2VuZGlmIC8qICFGVF9FWFBPUlRfREVGICovCi0KLQotI2lmbmRlZiBGVF9FWFBPUlRfVkFSCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9FWFBPUlRfVkFSKCB4ICkgIGV4dGVybiAiQyIgIHgKLSNlbHNlCi0jZGVmaW5lIEZUX0VYUE9SVF9WQVIoIHggKSAgZXh0ZXJuICB4Ci0jZW5kaWYKLQotI2VuZGlmIC8qICFGVF9FWFBPUlRfVkFSICovCi0KLQotICAvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgbmVlZGVkIHRvIGNvbXBpbGUgdGhlIGxpYnJhcnkgd2l0aCBhICAgKi8KLSAgLyogQysrIGNvbXBpbGVyIGFuZCB3aXRoIDE2Yml0IGNvbXBpbGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIC8qIFRoaXMgaXMgc3BlY2lhbC4gIFdpdGhpbiBDKyssIHlvdSBtdXN0IHNwZWNpZnkgYGV4dGVybiAiQyJgIGZvciAqLwotICAvKiBmdW5jdGlvbnMgd2hpY2ggYXJlIHVzZWQgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzLCBhbmQgeW91IGFsc28gICAgKi8KLSAgLyogbXVzdCBkbyB0aGF0IGZvciBzdHJ1Y3R1cmVzIHdoaWNoIGNvbnRhaW4gZnVuY3Rpb24gcG9pbnRlcnMgdG8gICovCi0gIC8qIGFzc3VyZSBDIGxpbmthZ2UgLS0gaXQncyBub3QgcG9zc2libGUgdG8gaGF2ZSAobG9jYWwpIGFub255bW91cyAqLwotICAvKiBmdW5jdGlvbnMgd2hpY2ggYXJlIGFjY2Vzc2VkIGJ5IChnbG9iYWwpIGZ1bmN0aW9uIHBvaW50ZXJzLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGVF9DQUxMQkFDS19ERUYgaXMgdXNlZCB0byBfZGVmaW5lXyBhIGNhbGxiYWNrIGZ1bmN0aW9uLCAgICAgICAgKi8KLSAgLyogbG9jYXRlZCBpbiB0aGUgc2FtZSBzb3VyY2UgY29kZSBmaWxlIGFzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB1c2VzICovCi0gIC8qIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRlRfQkFTRV9DQUxMQkFDSyBhbmQgRlRfQkFTRV9DQUxMQkFDS19ERUYgYXJlIHVzZWQgdG8gZGVjbGFyZSAgICovCi0gIC8qIGFuZCBkZWZpbmUgYSBjYWxsYmFjayBmdW5jdGlvbiwgcmVzcGVjdGl2ZWx5LCBpbiBhIHNpbWlsYXIgd2F5ICAqLwotICAvKiBhcyBGVF9CQVNFIGFuZCBGVF9CQVNFX0RFRiB3b3JrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZUX0NBTExCQUNLX1RBQkxFIGlzIHVzZWQgdG8gX2RlY2xhcmVfIGEgY29uc3RhbnQgdmFyaWFibGUgdGhhdCAqLwotICAvKiBjb250YWlucyBwb2ludGVycyB0byBjYWxsYmFjayBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZUX0NBTExCQUNLX1RBQkxFX0RFRiBpcyB1c2VkIHRvIF9kZWZpbmVfIGEgY29uc3RhbnQgdmFyaWFibGUgICAqLwotICAvKiB0aGF0IGNvbnRhaW5zIHBvaW50ZXJzIHRvIGNhbGxiYWNrIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTb21lIDE2Yml0IGNvbXBpbGVycyBoYXZlIHRvIHJlZGVmaW5lIHRoZXNlIG1hY3JvcyB0byBpbnNlcnQgICAgKi8KLSAgLyogdGhlIGluZmFtb3VzIGBfY2RlY2xgIG9yIGBfX2Zhc3RjYWxsYCBkZWNsYXJhdGlvbnMuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmbmRlZiBGVF9DQUxMQkFDS19ERUYKLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9DQUxMQkFDS19ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfQ0FMTEJBQ0tfREVGKCB4ICkgIHN0YXRpYyAgeAotI2VuZGlmCi0jZW5kaWYgLyogRlRfQ0FMTEJBQ0tfREVGICovCi0KLSNpZm5kZWYgRlRfQkFTRV9DQUxMQkFDSwotI2lmZGVmIF9fY3BsdXNwbHVzCi0jZGVmaW5lIEZUX0JBU0VfQ0FMTEJBQ0soIHggKSAgICAgIGV4dGVybiAiQyIgIHgKLSNkZWZpbmUgRlRfQkFTRV9DQUxMQkFDS19ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfQkFTRV9DQUxMQkFDSyggeCApICAgICAgZXh0ZXJuICB4Ci0jZGVmaW5lIEZUX0JBU0VfQ0FMTEJBQ0tfREVGKCB4ICkgIHgKLSNlbmRpZgotI2VuZGlmIC8qIEZUX0JBU0VfQ0FMTEJBQ0sgKi8KLQotI2lmbmRlZiBGVF9DQUxMQkFDS19UQUJMRQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFICAgICAgZXh0ZXJuICJDIgotI2RlZmluZSBGVF9DQUxMQkFDS19UQUJMRV9ERUYgIGV4dGVybiAiQyIKLSNlbHNlCi0jZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFICAgICAgZXh0ZXJuCi0jZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFX0RFRiAgLyogbm90aGluZyAqLwotI2VuZGlmCi0jZW5kaWYgLyogRlRfQ0FMTEJBQ0tfVEFCTEUgKi8KLQotCi1GVF9FTkRfSEVBREVSCi0KKyNpbmNsdWRlIDxmcmVldHlwZS9jb25maWcvaW50ZWdlci10eXBlcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2NvbmZpZy9wdWJsaWMtbWFjcm9zLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvY29uZmlnL21hYy1zdXBwb3J0Lmg+CiAKICNlbmRpZiAvKiBGVENPTkZJR19IXyAqLwogCmRpZmYgLS1naXQgYS9idWlsZHMvdm1zL2Z0c3lzdGVtLmMgYi9idWlsZHMvdm1zL2Z0c3lzdGVtLmMKaW5kZXggYWY2ZmU0Ni4uMTc3NDgxYSAxMDA2NDQKLS0tIGEvYnVpbGRzL3Ztcy9mdHN5c3RlbS5jCisrKyBiL2J1aWxkcy92bXMvZnRzeXN0ZW0uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBWTVMtc3BlY2lmaWMgRnJlZVR5cGUgbG93LWxldmVsIHN5c3RlbSBpbnRlcmZhY2UgKGJvZHkpLiAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTksMTEgKzE5LDExIEBACiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICAgLyogd2UgdXNlIG91ciBzcGVjaWFsIGZ0Y29uZmlnLmggZmlsZSwgbm90IHRoZSBzdGFuZGFyZCBvbmUgKi8KICNpbmNsdWRlIDxmdGNvbmZpZy5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfU1lTVEVNX0gKLSNpbmNsdWRlIEZUX0VSUk9SU19ICi0jaW5jbHVkZSBGVF9UWVBFU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRzeXN0ZW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0dHlwZXMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KIAogICAvKiBtZW1vcnktbWFwcGluZyBpbmNsdWRlcyBhbmQgZGVmaW5pdGlvbnMgKi8KICNpZmRlZiBIQVZFX1VOSVNURF9ICmRpZmYgLS1naXQgYS9idWlsZHMvd2luY2UvZnRkZWJ1Zy5jIGIvYnVpbGRzL3dpbmNlL2Z0ZGVidWcuYwppbmRleCBkMGNhOTk5Li43MzRjNGYwIDEwMDY0NAotLS0gYS9idWlsZHMvd2luY2UvZnRkZWJ1Zy5jCisrKyBiL2J1aWxkcy93aW5jZS9mdGRlYnVnLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBEZWJ1Z2dpbmcgYW5kIGxvZ2dpbmcgY29tcG9uZW50IGZvciBXaW5DRSAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtNDEsOSArNDEsOCBAQAogICAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAogCiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfRVJST1IKQEAgLTE1NCw3ICsxNTMsNyBAQAogCiAgIHN0YXRpYyBjb25zdCBjaGFyKiAgZnRfdHJhY2VfdG9nZ2xlc1t0cmFjZV9jb3VudCArIDFdID0KICAgewotI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJBQ0VfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaD4KICAgICBOVUxMCiAgIH07CiAKZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qIGIvYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2oKaW5kZXggZGU1NTZhYS4uZWZkYjU4NyAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2oKKysrIGIvYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2oKQEAgLTIxLDcgKzIxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxLmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxLmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxLmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxLmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTIxMDEubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZS5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjEwMS5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlLmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxTVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0xNjEsNyArMTYxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxTVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0xODEsNyArMTgxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxTVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxTVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0yMjEsNyArMjIxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxTVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0yNDEsNyArMjQxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxTVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0yNjEsNyArMjYxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxU1QubGliIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGVTVC5saWIiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTI4MSw3ICsyODEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTIxMDFTVC5saWIiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZVNULmxpYiIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMzAxLDcgKzMwMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjEwMVNULmxpYiIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlU1QubGliIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0zMjEsNyArMzIxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxU1QubGliIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGVTVC5saWIiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTM0MSw3ICszNDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTIxMDFTVC5saWIiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZVNULmxpYiIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMzYxLDcgKzM2MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjEwMVNULmxpYiIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlU1QubGliIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0zODEsNyArMzgxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZV9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC00MDEsNyArNDAxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZV9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC00MjEsNyArNDIxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZV9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC00NDEsNyArNDQxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZV9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC00NjEsNyArNDYxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZV9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC00ODEsNyArNDgxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZV9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC01MDEsNyArNTAxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxU1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlU1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNTIxLDcgKzUyMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjEwMVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTU0MSw3ICs1NDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTIxMDFTVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGVTVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC01NjEsNyArNTYxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxU1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlU1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNTgxLDcgKzU4MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjEwMVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTYwMSw3ICs2MDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTIxMDFTVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGVTVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC02MjEsNyArNjIxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxTVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlTVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNjQxLDcgKzY0MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjEwMU1UX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZU1UX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTY2MSw3ICs2NjEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTIxMDFNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGVNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC02ODEsNyArNjgxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxTVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlTVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNzAxLDcgKzcwMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjEwMU1UX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZU1UX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTcyMSw3ICs3MjEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTIxMDFNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGVNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC03NDEsNyArNzQxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxTVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC03NTgsNyArNzU4LDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyMTAxTVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlTVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtODY4LDYgKzg2OCwxMCBAQAogICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmNsdWRlXGZyZWV0eXBlXGNvbmZpZ1xmdHN0ZGxpYi5oIj4NCiAgICAgICA8L0ZpbGU+DQogICAgIDwvRmlsdGVyPg0KKyAgICA8RmlsdGVyIE5hbWU9IlJlc291cmNlIEZpbGVzIiBGaWx0ZXI9InJjO2ljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZTtyZXN4Ij4NCisgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0dmVyLnJjIj4NCisgICAgICA8L0ZpbGU+DQorICAgIDwvRmlsdGVyPg0KICAgPC9GaWxlcz4NCiAgIDxHbG9iYWxzPg0KICAgPC9HbG9iYWxzPg0KZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCBiL2J1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbAppbmRleCAxNmExMDYyLi42OTM2YTg5IDEwMDY0NAotLS0gYS9idWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwKKysrIGIvYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9pbmRleC5odG1sCkBAIC0yMSwxNCArMjEsMTQgQEAKICAgPGxpPlBQQy9TUCBXTTYgKFdpbmRvd3MgTW9iaWxlIDYpPC9saT4KIDwvdWw+CiAKLUl0IGNvbXBpbGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGZyb20gdGhlIEZyZWVUeXBlIDIuMTAuMSBzb3VyY2VzOjwvcD4KK0l0IGNvbXBpbGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGZyb20gdGhlIEZyZWVUeXBlIDIuMTAuNCBzb3VyY2VzOjwvcD4KIAogPHVsPgogICA8cHJlPgotICAgIGZyZWV0eXBlMjEwMS5saWIgICAgIC0gcmVsZWFzZSBidWlsZDsgc2luZ2xlIHRocmVhZGVkCi0gICAgZnJlZXR5cGUyMTAxX0QubGliICAgLSBkZWJ1ZyBidWlsZDsgICBzaW5nbGUgdGhyZWFkZWQKLSAgICBmcmVldHlwZTIxMDFNVC5saWIgICAtIHJlbGVhc2UgYnVpbGQ7IG11bHRpLXRocmVhZGVkCi0gICAgZnJlZXR5cGUyMTAxTVRfRC5saWIgLSBkZWJ1ZyBidWlsZDsgICBtdWx0aS10aHJlYWRlZDwvcHJlPgorICAgIGZyZWV0eXBlLmxpYiAgICAgLSByZWxlYXNlIGJ1aWxkOyBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZV9ELmxpYiAgIC0gZGVidWcgYnVpbGQ7ICAgc2luZ2xlIHRocmVhZGVkCisgICAgZnJlZXR5cGVNVC5saWIgICAtIHJlbGVhc2UgYnVpbGQ7IG11bHRpLXRocmVhZGVkCisgICAgZnJlZXR5cGVNVF9ELmxpYiAtIGRlYnVnIGJ1aWxkOyAgIG11bHRpLXRocmVhZGVkPC9wcmU+CiA8L3VsPgogCiA8cD5CZSBzdXJlIHRvIGV4dHJhY3QgdGhlIGZpbGVzIHdpdGggdGhlIFdpbmRvd3MgKENSK0xGKSBsaW5lIGVuZGluZ3MuICBaSVAKZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qIGIvYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2oKaW5kZXggZjk0NzlkYS4uZDAxYzViNSAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2oKKysrIGIvYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2oKQEAgLTg4LDcgKzg4LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTIxMDEubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI2Niw3ICsyNjYsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjEwMS5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlLmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zNTUsNyArMzU1LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTIxMDEubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTUzMyw3ICs1MzMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjEwMS5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlLmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC02MjEsNyArNjIxLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTIxMDFNVC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlTVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTcwOSw3ICs3MDksNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjEwMU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGVNVC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtNzk3LDcgKzc5Nyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxTVQubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC04ODUsNyArODg1LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTIxMDFNVC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlTVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTk3Myw3ICs5NzMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjEwMU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGVNVC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTA2MSw3ICsxMDYxLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTIxMDFNVC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlTVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTExNDksNyArMTE0OSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTEyMzYsNyArMTIzNiw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTEzMjMsNyArMTMyMyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTE0MTAsNyArMTQxMCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTE0OTcsNyArMTQ5Nyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTE1ODQsNyArMTU4NCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTE2NjgsNyArMTY2OCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xNzUzLDcgKzE3NTMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjEwMV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGVfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTgzOCw3ICsxODM4LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTIxMDFfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTE5MjMsNyArMTkyMyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMDA4LDcgKzIwMDgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjEwMV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGVfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMjA5Myw3ICsyMDkzLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTIxMDFfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTIxNzgsNyArMjE3OCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxU1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlU1RfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMjI2Myw3ICsyMjYzLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTIxMDFTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGVTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMzQ4LDcgKzIzNDgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjEwMVNUX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI0MzMsNyArMjQzMyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxU1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlU1RfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMjUxOCw3ICsyNTE4LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTIxMDFTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGVTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yNjAzLDcgKzI2MDMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjEwMVNUX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI2ODksNyArMjY4OSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxTVRfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlTVRfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMjc3NSw3ICsyNzc1LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTIxMDFNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGVNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yODYxLDcgKzI4NjEsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjEwMU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZU1UX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI5NDcsNyArMjk0Nyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxTVRfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlTVRfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMzAzMyw3ICszMDMzLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTIxMDFNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGVNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zMTE5LDcgKzMxMTksNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjEwMU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZU1UX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTMyMDUsNyArMzIwNSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyMTAxTVQubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zMjc5LDcgKzMyNzksNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjEwMU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZU1UX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTM1MDIsNiArMzUwMiwxNSBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9InJjO2ljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZTtyZXN4Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0dmVyLnJjIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQogCTwvRmlsZXM+DQogCTxHbG9iYWxzPg0KIAk8L0dsb2JhbHM+DQpkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sIGIvYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sCmluZGV4IDlkNzFiMDkuLmVlMzg1YWYgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5jZS92YzIwMDgtY2UvaW5kZXguaHRtbAorKysgYi9idWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWwKQEAgLTIxLDE0ICsyMSwxNCBAQAogICA8bGk+UFBDL1NQIFdNNiAoV2luZG93cyBNb2JpbGUgNik8L2xpPgogPC91bD4KIAotSXQgY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgZnJvbSB0aGUgRnJlZVR5cGUgMi4xMC4xIHNvdXJjZXM6PC9wPgorSXQgY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgZnJvbSB0aGUgRnJlZVR5cGUgMi4xMC40IHNvdXJjZXM6PC9wPgogCiA8dWw+CiAgIDxwcmU+Ci0gICAgZnJlZXR5cGUyMTAxLmxpYiAgICAgLSByZWxlYXNlIGJ1aWxkOyBzaW5nbGUgdGhyZWFkZWQKLSAgICBmcmVldHlwZTIxMDFfRC5saWIgICAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAotICAgIGZyZWV0eXBlMjEwMU1ULmxpYiAgIC0gcmVsZWFzZSBidWlsZDsgbXVsdGktdGhyZWFkZWQKLSAgICBmcmVldHlwZTIxMDFNVF9ELmxpYiAtIGRlYnVnIGJ1aWxkOyAgIG11bHRpLXRocmVhZGVkPC9wcmU+CisgICAgZnJlZXR5cGUubGliICAgICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlX0QubGliICAgLSBkZWJ1ZyBidWlsZDsgICBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZU1ULmxpYiAgIC0gcmVsZWFzZSBidWlsZDsgbXVsdGktdGhyZWFkZWQKKyAgICBmcmVldHlwZU1UX0QubGliIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KIDwvdWw+CiAKIDxwPkJlIHN1cmUgdG8gZXh0cmFjdCB0aGUgZmlsZXMgd2l0aCB0aGUgV2luZG93cyAoQ1IrTEYpIGxpbmUgZW5kaW5ncy4gIFpJUApkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvZGV0ZWN0Lm1rIGIvYnVpbGRzL3dpbmRvd3MvZGV0ZWN0Lm1rCmluZGV4IDM1MWUyNTYuLjMwM2RjOGIgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL2RldGVjdC5taworKysgYi9idWlsZHMvd2luZG93cy9kZXRlY3QubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy9mdGRlYnVnLmMgYi9idWlsZHMvd2luZG93cy9mdGRlYnVnLmMKaW5kZXggN2M0N2ZiNS4uZDU4OTQ5MCAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvZnRkZWJ1Zy5jCisrKyBiL2J1aWxkcy93aW5kb3dzL2Z0ZGVidWcuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIERlYnVnZ2luZyBhbmQgbG9nZ2luZyBjb21wb25lbnQgZm9yIFdpbjMyIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC00MSw5ICs0MSw4IEBACiAgICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogCiAKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9FUlJPUgpAQCAtMTM4LDcgKzEzNyw3IEBACiAKICAgc3RhdGljIGNvbnN0IGNoYXIqICBmdF90cmFjZV90b2dnbGVzW3RyYWNlX2NvdW50ICsgMV0gPQogICB7Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9UUkFDRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oPgogICAgIE5VTEwKICAgfTsKIApkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2luZGV4Lmh0bWwgYi9idWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbAppbmRleCBlZWQ0ZGQzLi4zYjYwYzVmIDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbAorKysgYi9idWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbApAQCAtMTIsNyArMTIsNyBAQAogPHA+VGhpcyBkaXJlY3RvcnkgY29udGFpbnMgc29sdXRpb24gYW5kIHByb2plY3QgZmlsZXMgZm9yCiBWaXN1YWwmbmJzcDtDKysmbmJzcDsyMDEwIG9yIG5ld2VyLCBuYW1lZCA8dHQ+ZnJlZXR5cGUuc2xuPC90dD4sCiBhbmQgPHR0PmZyZWV0eXBlLnZjeHByb2o8L3R0Pi4gIEl0IGNvbXBpbGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzCi1mcm9tIHRoZSBGcmVlVHlwZSAyLjEwLjEgc291cmNlczo8L3A+Citmcm9tIHRoZSBGcmVlVHlwZSAyLjEwLjQgc291cmNlczo8L3A+CiAKIDx1bD4KICAgPGxpPmZyZWV0eXBlLmRsbCB1c2luZyAnUmVsZWFzZScgb3IgJ0RlYnVnJyBjb25maWd1cmF0aW9uczwvbGk+CmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy92aXN1YWxjL2luZGV4Lmh0bWwgYi9idWlsZHMvd2luZG93cy92aXN1YWxjL2luZGV4Lmh0bWwKaW5kZXggNDIzMjQ0YS4uY2VjMjZkMiAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sCisrKyBiL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGMvaW5kZXguaHRtbApAQCAtMTIsNyArMTIsNyBAQAogPHA+VGhpcyBkaXJlY3RvcnkgY29udGFpbnMgcHJvamVjdCBmaWxlcyA8dHQ+ZnJlZXR5cGUuZHNwPC90dD4gZm9yCiBWaXN1YWwgQysrIDYuMCwgYW5kIDx0dD5mcmVldHlwZS52Y3Byb2o8L3R0PiBmb3IgVmlzdWFsIEMrKyAyMDAyCiB0aHJvdWdoIDIwMDgsIHdoaWNoIHlvdSBtaWdodCBuZWVkIHRvIHVwZ3JhZGUgYXV0b21hdGljYWxseS4KLUl0IGNvbXBpbGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGZyb20gdGhlIEZyZWVUeXBlIDIuMTAuMSBzb3VyY2VzOjwvcD4KK0l0IGNvbXBpbGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGZyb20gdGhlIEZyZWVUeXBlIDIuMTAuNCBzb3VyY2VzOjwvcD4KIAogPHVsPgogICA8bGk+ZnJlZXR5cGUuZGxsIHVzaW5nICdSZWxlYXNlJyBvciAnRGVidWcnIGNvbmZpZ3VyYXRpb25zPC9saT4KZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCBiL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcAppbmRleCBjYjEyMDVkLi43MTRjNDIyIDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS5kc3AKKysrIGIvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHNwCkBAIC01NCw3ICs1NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElCMzI9bGluay5leGUgLWxpYg0KICMgQUREIEJBU0UgTElCMzIgL25vbG9nbw0KLSMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTIxMDEubGliIg0KKyMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZS5saWIiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImZyZWV0eXBlIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzgsNyArNzgsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCiAjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCi0jIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxX0QubGliIg0KKyMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZV9ELmxpYiINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBEZWJ1ZyBNdWx0aXRocmVhZGVkIg0KIA0KQEAgLTEwMiw4ICsxMDIsOCBAQAogIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCi0jIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoibGliXGZyZWV0eXBlMjEwMV9ELmxpYiINCi0jIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxTVRfRC5saWIiDQorIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvIC9vdXQ6ImxpYlxmcmVldHlwZV9ELmxpYiINCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVNVF9ELmxpYiINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBSZWxlYXNlIE11bHRpdGhyZWFkZWQiDQogDQpAQCAtMTI2LDggKzEyNiw4IEBACiAjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElCMzI9bGluay5leGUgLWxpYg0KLSMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiJsaWJcZnJlZXR5cGUyMTAxLmxpYiINCi0jIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxTVQubGliIg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiJsaWJcZnJlZXR5cGUubGliIg0KKyMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZU1ULmxpYiINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkIg0KIA0KQEAgLTE1MSw4ICsxNTEsOCBAQAogIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCi0jIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTIxMDEubGliIg0KLSMgQUREIExJQjMyIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxU1QubGliIg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlLmxpYiINCisjIEFERCBMSUIzMiAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlU1QubGliIg0KICMgU1VCVFJBQ1QgTElCMzIgL25vbG9nbw0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJmcmVldHlwZSAtIFdpbjMyIERlYnVnIFNpbmdsZXRocmVhZGVkIg0KQEAgLTE3Nyw4ICsxNzcsOCBAQAogIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCi0jIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTIxMDFfRC5saWIiDQotIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjEwMVNUX0QubGliIg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlX0QubGliIg0KKyMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZVNUX0QubGliIg0KIA0KICFFTkRJRg0KIA0KQEAgLTM3OSw1ICszNzksMTMgQEAKIFNPVVJDRT0uLlwuLlwuLlxpbmNsdWRlXGZyZWV0eXBlXGNvbmZpZ1xmdHN0ZGxpYi5oDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIlJlc291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAicmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3giDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdHZlci5yYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCiAjIEVuZCBUYXJnZXQNCiAjIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qIGIvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qCmluZGV4IDk2YjUxZTkuLmUyNzE0NjIgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvagorKysgYi9idWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2oKQEAgLTg3LDcgKzg3LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjEwMS5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTE2Miw3ICsxNjIsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxTVQubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlTVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTIzNyw3ICsyMzcsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlU1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMzA5LDcgKzMwOSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTIxMDFfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMzgyLDcgKzM4Miw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTIxMDFTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTQ1Niw3ICs0NTYsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxTVRfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC01MzQsNyArNTM0LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjEwMS5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTYxOSw3ICs2MTksNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxTVQubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlTVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTcwNCw3ICs3MDQsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlU1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtNzg1LDcgKzc4NSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTIxMDFfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtODY3LDcgKzg2Nyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTIxMDFTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTk1MCw3ICs5NTAsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxTVRfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xMDM2LDcgKzEwMzYsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTEyMSw3ICsxMTIxLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjEwMU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xMjA2LDcgKzEyMDYsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlU1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMTI4Nyw3ICsxMjg3LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjEwMV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xMzY5LDcgKzEzNjksNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxU1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xNDUyLDcgKzE0NTIsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxTVRfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xNTM4LDcgKzE1MzgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTYyMyw3ICsxNjIzLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjEwMU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xNzA4LDcgKzE3MDgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlU1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMTc4OSw3ICsxNzg5LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjEwMV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xODcxLDcgKzE4NzEsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxU1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xOTU0LDcgKzE5NTQsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxTVRfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMDQwLDcgKzIwNDAsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMjEyNSw3ICsyMTI1LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjEwMU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMjEwLDcgKzIyMTAsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlU1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMjI5MSw3ICsyMjkxLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjEwMV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMzczLDcgKzIzNzMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxU1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yNDU2LDcgKzI0NTYsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxTVRfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yNTQyLDcgKzI1NDIsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMjYyNyw3ICsyNjI3LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjEwMU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yNzEyLDcgKzI3MTIsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlU1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMjc5Myw3ICsyNzkzLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjEwMV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yODc1LDcgKzI4NzUsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxU1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yOTU4LDcgKzI5NTgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxTVRfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zMDQ0LDcgKzMwNDQsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMzEyOSw3ICszMTI5LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjEwMU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zMjE0LDcgKzMyMTQsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlU1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMzI5NSw3ICszMjk1LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjEwMV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zMzc3LDcgKzMzNzcsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxU1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zNDYwLDcgKzM0NjAsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyMTAxTVRfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGVNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zNjkxLDYgKzM2OTEsMTUgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJPC9GaWx0ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQorCQkJRmlsdGVyPSJyYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeCINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHZlci5yYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KIAk8L0ZpbGVzPg0KIAk8R2xvYmFscz4NCiAJPC9HbG9iYWxzPg0KZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2luZGV4Lmh0bWwgYi9idWlsZHMvd2luZG93cy92aXN1YWxjZS9pbmRleC5odG1sCmluZGV4IDk1ZTYxZmMuLjQ3NGU4NWMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2luZGV4Lmh0bWwKKysrIGIvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbApAQCAtMjEsMTQgKzIxLDE0IEBACiAgIDxsaT5QUEMvU1AgV002IChXaW5kb3dzIE1vYmlsZSA2KTwvbGk+CiA8L3VsPgogCi1JdCBjb21waWxlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIHRoZSBGcmVlVHlwZSAyLjEwLjEgc291cmNlczo8L3A+CitJdCBjb21waWxlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIHRoZSBGcmVlVHlwZSAyLjEwLjQgc291cmNlczo8L3A+CiAKIDx1bD4KICAgPHByZT4KLSAgICBmcmVldHlwZTIxMDEubGliICAgICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAotICAgIGZyZWV0eXBlMjEwMV9ELmxpYiAgIC0gZGVidWcgYnVpbGQ7ICAgc2luZ2xlIHRocmVhZGVkCi0gICAgZnJlZXR5cGUyMTAxTVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAotICAgIGZyZWV0eXBlMjEwMU1UX0QubGliIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KKyAgICBmcmVldHlwZS5saWIgICAgIC0gcmVsZWFzZSBidWlsZDsgc2luZ2xlIHRocmVhZGVkCisgICAgZnJlZXR5cGVfRC5saWIgICAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlTVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAorICAgIGZyZWV0eXBlTVRfRC5saWIgLSBkZWJ1ZyBidWlsZDsgICBtdWx0aS10aHJlYWRlZDwvcHJlPgogPC91bD4KIAogPHA+QmUgc3VyZSB0byBleHRyYWN0IHRoZSBmaWxlcyB3aXRoIHRoZSBXaW5kb3dzIChDUitMRikgbGluZSBlbmRpbmdzLiAgWklQCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy93MzItYmNjLm1rIGIvYnVpbGRzL3dpbmRvd3MvdzMyLWJjYy5tawppbmRleCAzOTI2MmZmLi5jODA3MTBlIDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy93MzItYmNjLm1rCisrKyBiL2J1aWxkcy93aW5kb3dzL3czMi1iY2MubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy93MzItYmNjZC5tayBiL2J1aWxkcy93aW5kb3dzL3czMi1iY2NkLm1rCmluZGV4IDIwZTI3MmYuLjk2NmJkYjUgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3czMi1iY2NkLm1rCisrKyBiL2J1aWxkcy93aW5kb3dzL3czMi1iY2NkLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdzMyLWRldi5tayBiL2J1aWxkcy93aW5kb3dzL3czMi1kZXYubWsKaW5kZXggMzBjNWE4Zi4uYjJhZjY2NyAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdzMyLWRldi5taworKysgYi9idWlsZHMvd2luZG93cy93MzItZGV2Lm1rCkBAIC01LDcgKzUsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdzMyLWdjYy5tayBiL2J1aWxkcy93aW5kb3dzL3czMi1nY2MubWsKaW5kZXggNGEwN2JiMC4uZjI3ZTZiMSAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdzMyLWdjYy5taworKysgYi9idWlsZHMvd2luZG93cy93MzItZ2NjLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdzMyLWljYy5tayBiL2J1aWxkcy93aW5kb3dzL3czMi1pY2MubWsKaW5kZXggZmIxZmMxYS4uMmU2OTYwOSAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdzMyLWljYy5taworKysgYi9idWlsZHMvd2luZG93cy93MzItaWNjLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdzMyLWludGwubWsgYi9idWlsZHMvd2luZG93cy93MzItaW50bC5tawppbmRleCAyNTJlYWUyLi44OGU2MjY5IDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy93MzItaW50bC5taworKysgYi9idWlsZHMvd2luZG93cy93MzItaW50bC5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3czMi1sY2MubWsgYi9idWlsZHMvd2luZG93cy93MzItbGNjLm1rCmluZGV4IGFhNDBlNTYuLjZjZjY0NjAgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3czMi1sY2MubWsKKysrIGIvYnVpbGRzL3dpbmRvd3MvdzMyLWxjYy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3czMi1taW5ndzMyLm1rIGIvYnVpbGRzL3dpbmRvd3MvdzMyLW1pbmd3MzIubWsKaW5kZXggMzkxM2RhYy4uZjJlYjAyMSAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdzMyLW1pbmd3MzIubWsKKysrIGIvYnVpbGRzL3dpbmRvd3MvdzMyLW1pbmd3MzIubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy93MzItdmNjLm1rIGIvYnVpbGRzL3dpbmRvd3MvdzMyLXZjYy5tawppbmRleCBjYzM4YTQ1Li5lODAwZDI3IDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy93MzItdmNjLm1rCisrKyBiL2J1aWxkcy93aW5kb3dzL3czMi12Y2MubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy93MzItd2F0Lm1rIGIvYnVpbGRzL3dpbmRvd3MvdzMyLXdhdC5tawppbmRleCA4NDJmYmNlLi5hMGRlNGJiIDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy93MzItd2F0Lm1rCisrKyBiL2J1aWxkcy93aW5kb3dzL3czMi13YXQubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy93aW4zMi1kZWYubWsgYi9idWlsZHMvd2luZG93cy93aW4zMi1kZWYubWsKaW5kZXggMjNiYTgwYS4uZjc1OTg1MyAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3Mvd2luMzItZGVmLm1rCisrKyBiL2J1aWxkcy93aW5kb3dzL3dpbjMyLWRlZi5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCA5YTY0ZjY5Li5hYzkxYThlIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xLDYgKzEsNiBAQAogIyEvYmluL3NoCiAjCi0jIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTk0LDEwICs5NCwxMCBAQAogaW5vZGVfZHN0PWBscyAtaWQgJGFic19jdXJyX2RpciB8IGF3ayAne3ByaW50ICQxfSdgCiAKIGlmIHRlc3QgJGlub2RlX3NyYyAtbmUgJGlub2RlX2RzdDsgdGhlbgotICBpZiB0ZXN0ICEgLWQgcmVmZXJlbmNlOyB0aGVuCi0gICAgbWtkaXIgcmVmZXJlbmNlCisgIGlmIHRlc3QgISAtZCBkb2NzOyB0aGVuCisgICAgbWtkaXIgZG9jcwogICAgIGVjaG8gIkNvcHlpbmcgZG9jdW1lbnRhdGlvbiBhc3NldHMiCi0gICAgY3AgLVIgJGFic19mdDJfZGlyL2RvY3MvcmVmZXJlbmNlL21hcmtkb3duICRhYnNfY3Vycl9kaXIvcmVmZXJlbmNlCisgICAgY3AgLVIgJGFic19mdDJfZGlyL2RvY3MvbWFya2Rvd24gJGFic19jdXJyX2Rpci9kb2NzCiAgIGZpCiAgIGlmIHRlc3QgISAtciAkYWJzX2N1cnJfZGlyL21vZHVsZXMuY2ZnOyB0aGVuCiAgICAgZWNobyAiQ29weWluZyBcYG1vZHVsZXMuY2ZnJyIKQEAgLTEwNyw3ICsxMDcsNyBAQAogICBlY2hvICJUT1BfRElSICAgICAgICA6PSAkYWJzX2Z0Ml9kaXIiICAgICAgICAgICA+IE1ha2VmaWxlCiAgIGVjaG8gIk9CSl9ESVIgICAgICAgIDo9ICRhYnNfY3Vycl9kaXIiICAgICAgICAgPj4gTWFrZWZpbGUKICAgZWNobyAiT0JKX0JVSUxEICAgICAgOj0gXCQoT0JKX0RJUikiICAgICAgICAgICA+PiBNYWtlZmlsZQotICBlY2hvICJET0NfRElSICAgICAgICA6PSBcJChPQkpfRElSKS9yZWZlcmVuY2UiID4+IE1ha2VmaWxlCisgIGVjaG8gIkRPQ19ESVIgICAgICAgIDo9IFwkKE9CSl9ESVIpL2RvY3MiICAgICAgPj4gTWFrZWZpbGUKICAgZWNobyAiRlRfTElCVE9PTF9ESVIgOj0gXCQoT0JKX0RJUikiICAgICAgICAgICA+PiBNYWtlZmlsZQogICBlY2hvICJpZm5kZWYgRlQyREVNT1MiICAgICAgICAgICAgICAgICAgICAgICAgID4+IE1ha2VmaWxlCiAgIGVjaG8gIiAgaW5jbHVkZSBcJChUT1BfRElSKS9NYWtlZmlsZSIgICAgICAgICAgPj4gTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2RldmVsLXRlZXVpL2Z0bW9kdWxlLmggYi9kZXZlbC10ZWV1aS9mdG1vZHVsZS5oCmluZGV4IGI1NTE2MWMuLjkxMmQyNTMgMTAwNjQ0Ci0tLSBhL2RldmVsLXRlZXVpL2Z0bW9kdWxlLmgKKysrIGIvZGV2ZWwtdGVldWkvZnRtb2R1bGUuaApAQCAtNCw3ICs0LDUgQEAKIEZUX1VTRV9NT0RVTEUoIEZUX1JlbmRlcmVyX0NsYXNzLCBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzICkKIEZUX1VTRV9NT0RVTEUoIEZUX01vZHVsZV9DbGFzcywgc2ZudF9tb2R1bGVfY2xhc3MgKQogRlRfVVNFX01PRFVMRSggRlRfUmVuZGVyZXJfQ2xhc3MsIGZ0X3Ntb290aF9yZW5kZXJlcl9jbGFzcyApCi1GVF9VU0VfTU9EVUxFKCBGVF9SZW5kZXJlcl9DbGFzcywgZnRfc21vb3RoX2xjZF9yZW5kZXJlcl9jbGFzcyApCi1GVF9VU0VfTU9EVUxFKCBGVF9SZW5kZXJlcl9DbGFzcywgZnRfc21vb3RoX2xjZHZfcmVuZGVyZXJfY2xhc3MgKQogCiAvKiBFT0YgKi8KZGlmZiAtLWdpdCBhL2RldmVsL2Z0MmJ1aWxkLmggYi9kZXZlbC9mdDJidWlsZC5oCmluZGV4IDQyZmQzOWYuLjBhYjhiYTAgMTAwNjQ0Ci0tLSBhL2RldmVsL2Z0MmJ1aWxkLmgKKysrIGIvZGV2ZWwvZnQyYnVpbGQuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIDIgYnVpbGQgYW5kIHNldHVwIG1hY3JvcyAoZGV2ZWxvcG1lbnQgdmVyc2lvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMzAsNiArMzAsNyBAQAogI2lmbmRlZiBGVDJCVUlMRF9IXwogI2RlZmluZSBGVDJCVUlMRF9IXwogCisjZGVmaW5lIEZUX0NPTkZJR19NT0RVTEVTX0ggIDxmdG1vZHVsZS5oPgogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OU19IICA8ZnRvcHRpb24uaD4KIAogI2luY2x1ZGUgPGZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oPgpkaWZmIC0tZ2l0IGEvZGV2ZWwvZnRvcHRpb24uaCBiL2RldmVsL2Z0b3B0aW9uLmgKaW5kZXggMTZjZjRlMS4uMzA3ZDFhMyAxMDA2NDQKLS0tIGEvZGV2ZWwvZnRvcHRpb24uaAorKysgYi9kZXZlbC9mdG9wdGlvbi5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVXNlci1zZWxlY3RhYmxlIGNvbmZpZ3VyYXRpb24gbWFjcm9zIChzcGVjaWZpY2F0aW9uIG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTQyLDcgKzQyLDcgQEAKICAgICogICB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSB0aGF0IGlzIGluY2x1ZGVkIF9iZWZvcmVfIHRoZSBGcmVlVHlwZSBpbmNsdWRlCiAgICAqICAgcGF0aCBkdXJpbmcgY29tcGlsYXRpb24uCiAgICAqCi0gICAqICAgVGhlIGRlZmF1bHQgRnJlZVR5cGUgTWFrZWZpbGVzIGFuZCBKYW1maWxlcyB1c2UgdGhlIGJ1aWxkIGRpcmVjdG9yeQorICAgKiAgIFRoZSBkZWZhdWx0IEZyZWVUeXBlIE1ha2VmaWxlcyB1c2UgdGhlIGJ1aWxkIGRpcmVjdG9yeQogICAgKiAgIGBidWlsZHMvPHN5c3RlbT5gIGJ5IGRlZmF1bHQsIGJ1dCB5b3UgY2FuIGVhc2lseSBjaGFuZ2UgdGhhdCBmb3IgeW91cgogICAgKiAgIG93biBwcm9qZWN0cy4KICAgICoKQEAgLTEyMSwxMCArMTIxLDggQEAKICAgICogbWl0aWdhdGUgY29sb3IgZnJpbmdlcyBpbmhlcmVudCB0byB0aGlzIHRlY2hub2xvZ3ksIHlvdSBhbHNvIG5lZWQgdG8KICAgICogZXhwbGljaXRseSBzZXQgdXAgTENEIGZpbHRlcmluZy4KICAgICoKLSAgICogTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBpcyBjb3ZlcmVkIGJ5IHNldmVyYWwgTWljcm9zb2Z0IHBhdGVudHMgYW5kCi0gICAqIHNob3VsZCBub3QgYmUgYWN0aXZhdGVkIGluIGFueSBkZWZhdWx0IGJ1aWxkIG9mIHRoZSBsaWJyYXJ5LiAgV2hlbiB0aGlzCi0gICAqIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCBGcmVlVHlwZSBvZmZlcnMgYWx0ZXJuYXRpdmUgTENEIHJlbmRlcmluZwotICAgKiB0ZWNobm9sb2d5IHRoYXQgcHJvZHVjZXMgZXhjZWxsZW50IG91dHB1dCB3aXRob3V0IExDRCBmaWx0ZXJpbmcuCisgICAqIFdoZW4gdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgRnJlZVR5cGUgb2ZmZXJzIGFsdGVybmF0aXZlIExDRAorICAgKiByZW5kZXJpbmcgdGVjaG5vbG9neSB0aGF0IHByb2R1Y2VzIGV4Y2VsbGVudCBvdXRwdXQuCiAgICAqLwogLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORyAqLwogCkBAIC0yOTQsNiArMjkyLDIyIEBACiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqCisgICAqIEJyb3RsaSBzdXBwb3J0LgorICAgKgorICAgKiAgIEZyZWVUeXBlIHVzZXMgdGhlIEJyb3RsaSBsaWJyYXJ5IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgZGVjb21wcmVzc2luZworICAgKiAgIFdPRkYyIHN0cmVhbXMuCisgICAqCisgICAqICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgJ2ZlYXR1cmUnLgorICAgKgorICAgKiAgIElmIHlvdSB1c2UgYSBidWlsZCBzeXN0ZW0gbGlrZSBjbWFrZSBvciB0aGUgYGNvbmZpZ3VyZWAgc2NyaXB0LAorICAgKiAgIG9wdGlvbnMgc2V0IGJ5IHRob3NlIHByb2dyYW1zIGhhdmUgcHJlY2VkZW5jZSwgb3ZlcndyaXRpbmcgdGhlIHZhbHVlCisgICAqICAgaGVyZSB3aXRoIHRoZSBjb25maWd1cmVkIG9uZS4KKyAgICovCisjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fVVNFX0JST1RMSQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCiAgICAqIEdseXBoIFBvc3RzY3JpcHQgTmFtZXMgaGFuZGxpbmcKICAgICoKICAgICogICBCeSBkZWZhdWx0LCBGcmVlVHlwZSAyIGlzIGNvbXBpbGVkIHdpdGggdGhlICdwc25hbWVzJyBtb2R1bGUuICBUaGlzCkBAIC01MjYsNyArNTQwLDcgQEAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKLSAgICogRGVmaW5lIGBUVF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSU2AgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBjb2xvdXJlZAorICAgKiBEZWZpbmUgYFRUX0NPTkZJR19PUFRJT05fQ09MT1JfTEFZRVJTYCBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IGNvbG9yZWQKICAgICogb3V0bGluZXMgKGZyb20gdGhlICdDT0xSJy8nQ1BBTCcgdGFibGVzKSBpbiBhbGwgZm9ybWF0cyB1c2luZyB0aGUgJ3NmbnQnCiAgICAqIG1vZHVsZSAobmFtZWx5IFRydWVUeXBlfiYgT3BlblR5cGUpLgogICAgKi8KQEAgLTg3MSw5ICs4ODUsMTEgQEAKICAgICoKICAgICogQ29tcGlsZSAnYXV0b2ZpdCcgbW9kdWxlIHdpdGggZmFsbGJhY2sgSW5kaWMgc2NyaXB0IHN1cHBvcnQsIGNvdmVyaW5nCiAgICAqIHNvbWUgc2NyaXB0cyB0aGF0IHRoZSAnbGF0aW4nIHN1Ym1vZHVsZSBvZiB0aGUgJ2F1dG9maXQnIG1vZHVsZSBkb2Vzbid0Ci0gICAqICh5ZXQpIGhhbmRsZS4KKyAgICogKHlldCkgaGFuZGxlLiAgQ3VycmVudGx5LCB0aGlzIG5lZWRzIG9wdGlvbiBgQUZfQ09ORklHX09QVElPTl9DSktgLgogICAgKi8KKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKSwogI2RlZmluZSBBRl9DT05GSUdfT1BUSU9OX0lORElDCisjZW5kaWYKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZG9jcy9yZWZlcmVuY2UvLmdpdGlnbm9yZSBiL2RvY3MvLmdpdGlnbm9yZQpzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSBkb2NzL3JlZmVyZW5jZS8uZ2l0aWdub3JlCnJlbmFtZSB0byBkb2NzLy5naXRpZ25vcmUKaW5kZXggZTI0NWJkYy4uYjhkMDVkMSAxMDA2NDQKLS0tIGEvZG9jcy9yZWZlcmVuY2UvLmdpdGlnbm9yZQorKysgYi9kb2NzLy5naXRpZ25vcmUKQEAgLTEsNSArMSw1IEBACiAjIFN0YXRpYyBzaXRlIGZvbGRlcgotc2l0ZS8KK3JlZmVyZW5jZS8KIAogIyBIVE1MIGFuZCBNYXJrZG93biBmaWxlcwogKi5odG1sCmRpZmYgLS1naXQgYS9kb2NzL0NIQU5HRVMgYi9kb2NzL0NIQU5HRVMKaW5kZXggZjM2Y2IxOS4uM2JkNTI5MSAxMDA2NDQKLS0tIGEvZG9jcy9DSEFOR0VTCisrKyBiL2RvY3MvQ0hBTkdFUwpAQCAtMSwzICsxLDEwNCBAQAorQ0hBTkdFUyBCRVRXRUVOIDIuMTAuMyBhbmQgMi4xMC40CisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgIC0gQSBoZWFwIGJ1ZmZlciBvdmVyZmxvdyBoYXMgYmVlbiBmb3VuZCAgaW4gdGhlIGhhbmRsaW5nIG9mIGVtYmVkZGVkCisgICAgUE5HIGJpdG1hcHMsIGludHJvZHVjZWQgaW4gRnJlZVR5cGUgdmVyc2lvbiAyLjYuCisKKyAgICAgIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMjAtMTU5OTkKKworICAgIElmIHlvdSAgdXNlIG9wdGlvbiAgRlRfQ09ORklHX09QVElPTl9VU0VfUE5HICB5b3UgIHNob3VsZCAgdXBncmFkZQorICAgIGltbWVkaWF0ZWx5LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMTAuMiBhbmQgMi4xMC4zCisKKyAgSS4gSU1QT1JUQU5UIENIQU5HRVMKKworICAtIE5ldyBmbGFnIGBGVF9PVVRMSU5FX09WRVJMQVAnLiAgSWYgc2V0LCBtYWtlIHRoZSBzbW9vdGggcmFzdGVyaXplcgorICAgIGRvICA0eDQgb3ZlcnNhbXBsaW5nICB0byAgbWl0aWdhdGUgYXJ0aWZhY3RzICBpbiBwaXhlbHMgIHBhcnRpYWxseQorICAgIGNvdmVyZWQgIGJ5ICBvdmVybGFwcGluZyAgY29udG91cnMuICAgIE5vdGUgIHRoYXQgIHRoaXMgIGF0ICBsZWFzdAorICAgIHF1YWRydXBsZXMgdGhlIHJlbmRlcmluZyB0aW1lLgorCisgICAgSWYgIGEgIGdseXBoICBpbiAgYSAgVHJ1ZVR5cGUgZm9udCAgaGFzICB0aGUgIGBPVkVSTEFQX1NJTVBMRScgIG9yCisgICAgYE9WRVJMQVBfQ09NUE9VTkQnICBiaXQgc2V0LCAgRnJlZVR5cGUgYXV0b21hdGljYWxseSAgc2VsZWN0cyB0aGlzCisgICAgcmVuZGVyaW5nIG1vZGUuCisKKworICBJSS4gTUlTQ0VMTEFORU9VUworCisgIC0gVXNpbmcgdGhlICBhcmNhbmUgbWV0aG9kIG9mICBpbmNsdWRpbmcgRnJlZVR5cGUgaGVhZGVyICBmaWxlcyB3aXRoCisgICAgbWFjcm9zIGxpa2UgIGBGVF9GUkVFVFlQRV9IJyBpcyBubyBsb25nZXIgIG1hbmRhdG9yeSAoYnV0IHJldGFpbmVkCisgICAgYXMgYW4gb3B0aW9uYWwgZmVhdHVyZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkuCisKKyAgLSBTdXBwb3J0IGZvciAgYnVpbGRpbmcgdGhlIGxpYnJhcnkgIHdpdGggTWVzb24uICBCdWlsZGluZyAgdGhlIGRlbW8KKyAgICBwcm9ncmFtcyB3aXRoIE1lc29uIHdpbGwgZm9sbG93IGluIGEgZm9ydGhjb21pbmcgcmVsZWFzZS4KKworICAtIE1pbm9yIGltcHJvdmVtZW50cyB0byB0aGUgQi9XIHJhc3Rlcml6ZXIuCisKKyAgLSBBdXRvLWhpbnRlciBzdXBwb3J0IGZvciBNZWRlZmFpZHJpbiBzY3JpcHQuCisKKyAgLSBGaXggdmFyaW91cyAgbWVtb3J5IGxlYWtzIChtYWlubHkgIGZvciBDRkYpIGFuZCBvdGhlciAgaXNzdWVzIHRoYXQKKyAgICBtaWdodCBjYXVzZSBjcmFzaGVzIGluIHJhcmUgY2lyY3Vtc3RhbmNlcy4KKworICAtIEphbSBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQuCisKKyAgLSBJbiAgYGZ0dmlldycsIGN1c3RvbSAgTENEICBmaWx0ZXIgdmFsdWVzICBhcmUgIG5vdyBub3JtYWxpemVkICBhbmQKKyAgICBiYWxhbmNlZC4gIFVub3J0aG9kb3ggZmlsdGVycyBhcmUgc3RpbGwgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGAtTCcKKyAgICBjb21tYW5kIGxpbmUgb3B0aW9uLgorCisgIC0gVGhlIEdVSSBkZW1vIHByb2dyYW1zIGNhbiBub3cgYmUgcmVzaXplZC4KKworICAtIERlbW8gcHJvZ3JhbXMgdGhhdCBhY2NlcHQgY29tbWFuZCAgbGluZSBvcHRpb24gYC1rJyBjYW4gbm93IGhhbmRsZQorICAgIGZ1bmN0aW9uIGtleXMsIHRvby4gIFRoZSAgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIgY29kZXMgc3RhcnQgd2l0aAorICAgIDB4RjEuICBBcyAgYW4gZXhhbXBsZSwgdGhlICBQT1NJWCBzaGVsbCBzeW50YXggKGFjY2VwdGVkICBieSBiYXNoLAorICAgIGtzaCwgYW5kIHpzaCkKKworICAgICAgLWsgJCdceEYzcScKKworICAgIGVtdWxhdGVzIHRoZSBwcmVzc2luZyBvZiBmdW5jdGlvbiBrZXkgYEYzJyBmb2xsb3dlZCBieSBrZXkgYHEnLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMTAuMSBhbmQgMi4xMC4yCisKKyAgSS4gSU1QT1JUQU5UIENIQU5HRVMKKworICAtIFN1cHBvcnQgIG9mICBXT0ZGMiAgZm9udHMuICAgVGhpcyAgY29kZSAgY29udHJpYnV0aW9uICB3YXMgIE5pa2hpbAorICAgIFJhbWFrcmlzaG5hbidzIEdTb0MgMjAxOSBwcm9qZWN0LgorCisKKyAgSUkuIE1JU0NFTExBTkVPVVMKKworICAtIEZ1bmN0aW9uICBgRlRfR2V0X1Zhcl9BeGlzX0ZsYWdzJyByZXR1cm5lZCByYW5kb20gZGF0YSBmb3IgIFR5cGUgMQorICAgIE1NIGZvbnRzLgorCisgIC0gVHlwZSAxIGZvbnRzIHdpdGggbm9uLWludGVnZXIgbWV0cmljcyBhcmUgbm93IHN1cHBvcnRlZCBieSB0aGUgbmV3CisgICAgKENGRikgZW5naW5lIGludHJvZHVjZWQgaW4gRnJlZVR5cGUgMi45LgorCisgIC0gRHJvcCAgc3VwcG9ydCAgZm9yIFB5dGhvbiAyIGluIEZyZWV0eXBlJ3MgQVBJIHJlZmVyZW5jZSAgZ2VuZXJhdG9yCisgICAgYGRvY3dyaXRlcicgIChQeXRob24gPj0gMy41IGlzIHJlcXVpcmVkIGZvciB0YXJnZXRzICBgbWFrZSByZWZkb2MnCisgICAgYW5kIGBtYWtlIHJlZmRvYy12ZW52JykuCisKKyAgLSBBdXRvLWhpbnRlciBzdXBwb3J0IGZvciBIYW5pZmkgUm9oaW5neWEuCisKKyAgLSBEb2N1bWVudCB0aGUgYEZUMl9LRUVQX0FMSVZFJyBkZWJ1Z2dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKyAgLSBUaGUgVmlzdWFsIEMrKyAoYW5kIFZpc3VhbCBDKSAgcHJvamVjdCBmaWxlcyBmb3IgV2luZG93cyBidWlsZHMgbm8KKyAgICBsb25nZXIgZ2VuZXJhdGUgbGlicmFyaWVzIHRoYXQgY29udGFpbiB0aGUgRnJlZVR5cGUgdmVyc2lvbiBpbiBpdHMKKyAgICBmaWxlbmFtZXMuICAgSW5zdGVhZCwgIGEgIHJlc291cmNlICBmaWxlIGdldHMgIHVzZWQgIHRvICBtYWtlICB0aGUKKyAgICBsaWJyYXJpZXMgY29udGFpbiB0aGUgY29ycmVzcG9uZGluZyBpbmZvcm1hdGlvbi4KKworICAtIFRoZSBuZXh0IHJlbGVhc2Ugd2lsbCByZW1vdmUgSmFtIGJ1aWxkIHN1cHBvcnQuCisKKyAgLSBUaGUgIGBmdGJlbmNoJyAgZGVtbyAgcHJvZ3JhbSAgaGFzICBhIG5ldyAgdGVzdCAgZm9yICB0ZXN0aW5nICB0aGUKKyAgICBgRlRfR2x5cGhfU3Ryb2tlJyBmdW5jdGlvbmFsaXR5LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogQ0hBTkdFUyBCRVRXRUVOIDIuMTAuMCBhbmQgMi4xMC4xCiAKQEAgLTIwOSw3ICszMTAsNyBAQAogICAgICAgdXNlIHRoZSBgcGtnLWNvbmZpZycgaW50ZXJmYWNlLgogCiAgICAgICBUaGUgYGNvbmZpZ3VyZScgIHNjcmlwdCBubyBsb25nZXIgaW5zdGFsbHMgIGBmcmVldHlwZS1jb25maWcnIGJ5Ci0gICAgICBkZWZhdWx0LiAgRm9yICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgIGEgbmV3ICBjb25maWd1cmUgb3B0aW9uCisgICAgICBkZWZhdWx0LiAgRm9yICBiYWNrd2FyZCAgY29tcGF0aWJpbGl0eSwgIGEgbmV3ICBjb25maWd1cmUgb3B0aW9uCiAgICAgICBgLS1lbmFibGUtZnJlZXR5cGUtY29uZmlnJyAgIGlzICBwcm92aWRlZCAgIHRoYXQgIHJldmVydHMgICB0aGlzCiAgICAgICBkZWNpc2lvbi4KIApAQCAtNTE5OCw3ICs1Mjk5LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAoQykgMjAwMC0yMDE5IGJ5CitDb3B5cmlnaHQgKEMpIDIwMDAtMjAyMCBieQogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogCiBUaGlzICBmaWxlICBpcyAgcGFydCAgb2YgdGhlICBGcmVlVHlwZSAgcHJvamVjdCwgYW5kIG1heSAgb25seSBiZSAgdXNlZCwKZGlmZiAtLWdpdCBhL2RvY3MvQ1VTVE9NSVpFIGIvZG9jcy9DVVNUT01JWkUKaW5kZXggZjNmOWY4ZS4uMGY5MmU3MCAxMDA2NDQKLS0tIGEvZG9jcy9DVVNUT01JWkUKKysrIGIvZG9jcy9DVVNUT01JWkUKQEAgLTEzOSw3ICsxMzksNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CitDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogCiBUaGlzICBmaWxlIGlzICBwYXJ0IG9mICB0aGUgRnJlZVR5cGUgIHByb2plY3QsIGFuZCAgbWF5IG9ubHkgIGJlIHVzZWQsCmRpZmYgLS1naXQgYS9kb2NzL0RFQlVHIGIvZG9jcy9ERUJVRwppbmRleCA4MjhmMjk0Li5hOTZiNWUyIDEwMDY0NAotLS0gYS9kb2NzL0RFQlVHCisrKyBiL2RvY3MvREVCVUcKQEAgLTExLDIwICsxMSwyMCBAQAogCiAgIEZUX0RFQlVHX0xFVkVMX0VSUk9SCiAKLSAgICAjZGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gY29tcGlsZSB0aGUgRlRfRVJST1IgbWFjcm8gY2FsbHMKLSAgICB0byBwcmludCBlcnJvciAgbWVzc2FnZXMgZHVyaW5nIHByb2dyYW0gZXhlY3V0aW9uLiAgIFRoaXMgd2lsbCBub3QKLSAgICBzdG9wICB0aGUgIHByb2dyYW0uICBWZXJ5ICB1c2VmdWwgIHRvICBzcG90IGludmFsaWQgIGZvbnRzICBkdXJpbmcKKyAgICAjZGVmaW5lIHRoaXMgIG1hY3JvIGlmICB5b3Ugd2FudCB0byAgY29tcGlsZSB0aGUgIGBGVF9FUlJPUicgbWFjcm8KKyAgICBjYWxscyB0byBwcmludCBlcnJvciBtZXNzYWdlcyBkdXJpbmcgcHJvZ3JhbSBleGVjdXRpb24uICBUaGlzIGRvZXMKKyAgICBub3Qgc3RvcCAgdGhlIHByb2dyYW0uICBWZXJ5ICB1c2VmdWwgdG8gc3BvdCBpbnZhbGlkICBmb250cyBkdXJpbmcKICAgICBkZXZlbG9wbWVudCBhbmQgdG8gY29kZSB3b3JrYXJvdW5kcyBmb3IgdGhlbS4KIAogICBGVF9ERUJVR19MRVZFTF9UUkFDRQogCi0gICAgI2RlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgYm90aCBtYWNyb3MgRlRfRVJST1IgYW5kCi0gICAgRlRfVFJBQ0UuICBUaGlzICBhbHNvIGluY2x1ZGVzIHRoZSB2YXJpYW50cyAgRlRfVFJBQ0UwLCBGVF9UUkFDRTEsCi0gICAgRlRfVFJBQ0UyLCAuLi4sIEZUX1RSQUNFNy4KKyAgICAjZGVmaW5lIHRoaXMgbWFjcm8gIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgIGJvdGggbWFjcm9zIGBGVF9FUlJPUicKKyAgICBhbmQgIGBGVF9UUkFDRScuICBUaGlzICBhbHNvICBpbmNsdWRlcyAgdGhlIHZhcmlhbnRzICBgRlRfVFJBQ0UwJywKKyAgICBgRlRfVFJBQ0UxJywgYEZUX1RSQUNFMicsIC4uLiwgYEZUX1RSQUNFNycuCiAKICAgICBUaGUgIHRyYWNlIG1hY3JvcyAgYXJlIHVzZWQgIHRvICBzZW5kIGRlYnVnZ2luZyAgbWVzc2FnZXMgd2hlbiAgYW4KICAgICBhcHByb3ByaWF0ZSAgYGRlYnVnIGxldmVsJyAgaXMgY29uZmlndXJlZCAgYXQgcnVudGltZSAgdGhyb3VnaCB0aGUKLSAgICBGVDJfREVCVUcgZW52aXJvbm1lbnQgdmFyaWFibGUgKG1vcmUgb24gdGhpcyBsYXRlcikuCisgICAgYEZUMl9ERUJVRycgZW52aXJvbm1lbnQgdmFyaWFibGUgKG1vcmUgb24gdGhpcyBsYXRlcikuCiAKICAgRlRfREVCVUdfTUVNT1JZCiAKQEAgLTMyLDE2ICszMiwxNiBAQAogICAgIHNtYWxsICBidXQgIGVmZmVjdGl2ZSBkZWJ1Z2dpbmcgIG1lbW9yeSAgbWFuYWdlciAgdGhhdCB0cmFja3MgIGFsbAogICAgIGFsbG9jYXRpb25zIGFuZCBmcmVlcyB0aGF0IGFyZSBwZXJmb3JtZWQgd2l0aGluIHRoZSBmb250IGVuZ2luZS4KIAotICAgIFdoZW4gIHRoZSAgRlQyX0RFQlVHX01FTU9SWSAgZW52aXJvbm1lbnQgdmFyaWFibGUgIGlzICBkZWZpbmVkICBhdAotICAgIHJ1bnRpbWUsIGEgIGNhbGwgdG8gRlRfRG9uZV9GcmVlVHlwZSB3aWxsICBkdW1wIG1lbW9yeSBzdGF0aXN0aWNzLAotICAgIGluY2x1ZGluZyAgdGhlICBsaXN0ICBvZiAgbGVha2VkIG1lbW9yeSAgYmxvY2tzICB3aXRoICB0aGUgIHNvdXJjZQotICAgIGxvY2F0aW9ucyB3aGVyZSAgdGhlc2Ugd2VyZSBhbGxvY2F0ZWQuICAgSXQgaXMgYWx3YXlzIGEgIHZlcnkgZ29vZAotICAgIGlkZWEgdG8gZGVmaW5lIHRoaXMgaW4gIGRldmVsb3BtZW50IGJ1aWxkcy4gIFRoaXMgd29ya3Mgd2l0aCBfYW55XwotICAgIHByb2dyYW0gbGlua2VkIHRvIEZyZWVUeXBlLCBidXQgcmVxdWlyZXMgYSBiaWcgZGVhbCBvZiBtZW1vcnkgKHRoZQotICAgIGRlYnVnZ2luZyBtZW1vcnkgIG1hbmFnZXIgbmV2ZXIgIGZyZWVzIHRoZSBibG9ja3MgIHRvIHRoZSAgaGVhcCBpbgotICAgIG9yZGVyIHRvIGRldGVjdCBkb3VibGUgZnJlZXMpLgorICAgIFdoZW4gIHRoZSBgRlQyX0RFQlVHX01FTU9SWScgIGVudmlyb25tZW50IHZhcmlhYmxlICBpcyBkZWZpbmVkICBhdAorICAgIHJ1bnRpbWUsICBhIGNhbGwgIHRvIGBGVF9Eb25lX0ZyZWVUeXBlJyAgZHVtcHMgbWVtb3J5ICBzdGF0aXN0aWNzLAorICAgIGluY2x1ZGluZyB0aGUgbGlzdCBvZiBsZWFrZWQgbWVtb3J5IGJsb2NrcyBhbmQgb3B0aW9uYWxseSB3aXRoIHRoZQorICAgIHNvdXJjZSBsb2NhdGlvbnMgd2hlcmUgdGhlc2Ugd2VyZSAgYWxsb2NhdGVkLiAgSXQgaXMgYWx3YXlzIGEgdmVyeQorICAgIGdvb2QgaWRlYSB0byAgZGVmaW5lIHRoaXMgaW4gZGV2ZWxvcG1lbnQgYnVpbGRzLiAgIFRoaXMgd29ya3Mgd2l0aAorICAgIF9hbnlfICBwcm9ncmFtIGxpbmtlZCAgdG8gRnJlZVR5cGUsICBidXQgIHJlcXVpcmVzIGEgIGJpZyBkZWFsICBvZgorICAgIG1lbW9yeSAodGhlIGRlYnVnZ2luZyBtZW1vcnkgbWFuYWdlciBuZXZlciBmcmVlcyB0aGUgYmxvY2tzIHRvIHRoZQorICAgIGhlYXAgaW4gb3JkZXIgdG8gZGV0ZWN0IGRvdWJsZSBmcmVlcykuCiAKLSAgICBXaGVuICBGVDJfREVCVUdfTUVNT1JZIGlzbid0ICBkZWZpbmVkICBhdCAgcnVudGltZSwgdGhlICBkZWJ1Z2dpbmcKKyAgICBXaGVuIGBGVDJfREVCVUdfTUVNT1JZJyAgaXNuJ3QgZGVmaW5lZCAgYXQgcnVudGltZSwgIHRoZSBkZWJ1Z2dpbmcKICAgICBtZW1vcnkgbWFuYWdlciBpcyBpZ25vcmVkLCBhbmQgcGVyZm9ybWFuY2UgaXMgdW5hZmZlY3RlZC4KIAogCkBAIC01NSwxMCArNTUsMTAgQEAKICAgMS4gRlRfRVJST1IoKCAuLi4gKSkKIAogICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZW5kIGRlYnVnIG1lc3NhZ2VzIHRoYXQgaW5kaWNhdGUgcmVsYXRpdmVseQotICAgIHNlcmlvdXMgZXJyb3JzICAobGlrZSBicm9rZW4gIGZvbnQgZmlsZXMpLCBidXQgIHdpbGwgbm90ICBzdG9wIHRoZQorICAgIHNlcmlvdXMgIGVycm9ycyAgKGxpa2UgYnJva2VuICBmb250ICBmaWxlcykgIHdpdGhvdXQgc3RvcHBpbmcgIHRoZQogICAgIGV4ZWN1dGlvbiBvZiB0aGUgcnVubmluZyBwcm9ncmFtLiAgIEl0cyBjb2RlIGlzIGNvbXBpbGVkIG9ubHkgd2hlbgotICAgIGVpdGhlciBGVF9ERUJVR19MRVZFTF9FUlJPUiBvciBGVF9ERUJVR19MRVZFTF9UUkFDRSBhcmUgZGVmaW5lZCBpbgotICAgIGBmdG9wdGlvbi5oJy4KKyAgICBlaXRoZXIgICBgRlRfREVCVUdfTEVWRUxfRVJST1InICAgb3IgIGBGVF9ERUJVR19MRVZFTF9UUkFDRScgICBhcmUKKyAgICBkZWZpbmVkIGluIGBmdG9wdGlvbi5oJy4KIAogICAgIE5vdGUgdGhhdCB5b3UgaGF2ZSB0byB1c2UgYSBwcmludGYtbGlrZSBzaWduYXR1cmUsIGJ1dCB3aXRoIGRvdWJsZQogICAgIHBhcmVudGhlc2VzLCBsaWtlIGluCkBAIC02OSw1MyArNjksNTMgQEAKICAgMi4gRlRfQVNTRVJUKCBjb25kaXRpb24gKQogCiAgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNoZWNrICBzdHJvbmcgYXNzZXJ0aW9ucyBhdCBydW50aW1lLiAgSWYgaXRzCi0gICAgY29uZGl0aW9uIGlzbid0IFRSVUUsIHRoZSBwcm9ncmFtIHdpbGwgYWJvcnQgd2l0aCBhIHBhbmljIG1lc3NhZ2UuCi0gICAgSXRzICBjb2RlICAgaXMgIGNvbXBpbGVkICAgd2hlbiAgZWl0aGVyICAgRlRfREVCVUdfTEVWRUxfRVJST1IgIG9yCi0gICAgRlRfREVCVUdfTEVWRUxfVFJBQ0UgICBhcmUgIGRlZmluZWQuICAgIFlvdSAgIGRvbid0ICBuZWVkICAgZG91YmxlCi0gICAgcGFyZW50aGVzZXMgaGVyZS4gIEZvciBleGFtcGxlCisgICAgY29uZGl0aW9uIGlzbid0ICBUUlVFLCB0aGUgIHByb2dyYW0gYWJvcnRzICB3aXRoIGEgIHBhbmljIG1lc3NhZ2UuCisgICAgSXRzICBjb2RlICBpcyAgY29tcGlsZWQgICB3aGVuICBlaXRoZXIgIGBGVF9ERUJVR19MRVZFTF9FUlJPUicgIG9yCisgICAgYEZUX0RFQlVHX0xFVkVMX1RSQUNFJyAgYXJlICAgZGVmaW5lZC4gICBZb3UgIGRvbid0ICAgbmVlZCAgZG91YmxlCisgICAgcGFyZW50aGVzZXMgaGVyZS4gIEV4YW1wbGU6CiAKICAgICAgIEZUX0FTU0VSVCggcHRyICE9IE5VTEwgKTsKIAogCiAgIDMuIEZUX1RSQUNFKCBsZXZlbCwgKG1lc3NhZ2UuLi4pICkKIAotICAgIFRoZSAgRlRfVFJBQ0UgIG1hY3JvIGlzICB1c2VkICB0byAgc2VuZCBnZW5lcmFsLXB1cnBvc2UgIGRlYnVnZ2luZworICAgIFRoZSAgYEZUX1RSQUNFJyBtYWNybyAgaXMgdXNlZCAgdG8gc2VuZCAgZ2VuZXJhbC1wdXJwb3NlIGRlYnVnZ2luZwogICAgIG1lc3NhZ2VzIGR1cmluZyBwcm9ncmFtIGV4ZWN1dGlvbi4gICBUaGlzIG1hY3JvIHVzZXMgYW4gKmltcGxpY2l0KgotICAgIG1hY3JvICBuYW1lZCAgRlRfQ09NUE9ORU5UICB1c2VkICB0byAgbmFtZSAgdGhlICBjdXJyZW50ICBGcmVlVHlwZQorICAgIG1hY3JvICBuYW1lZCAgYEZUX0NPTVBPTkVOVCcsICB3aGljaCBuYW1lcyAgdGhlICBjdXJyZW50ICBGcmVlVHlwZQogICAgIGNvbXBvbmVudCBiZWluZyBydW4uCiAKLSAgICBUaGUgZGV2ZWxvcGVyICBzaG91bGQgYWx3YXlzICBkZWZpbmUgRlRfQ09NUE9ORU5UICBhcyBhcHByb3ByaWF0ZSwKKyAgICBUaGUgZGV2ZWxvcGVyIHNob3VsZCBhbHdheXMgIGRlZmluZSBgRlRfQ09NUE9ORU5UJyBhcyBhcHByb3ByaWF0ZSwKICAgICBmb3IgZXhhbXBsZSBhcyBpbgogCiAgICAgICAjdW5kZWYgIEZUX0NPTVBPTkVOVAogICAgICAgI2RlZmluZSBGVF9DT01QT05FTlQgIGlvCiAKLSAgICBUaGUgIHZhbHVlICBvZiB0aGUgIEZUX0NPTVBPTkVOVCAgbWFjcm8gIGlzICBvbmUgIG9mIHRoZSBjb21wb25lbnQKLSAgICBuYW1lcyAgZGVmaW5lZCBpbiB0aGUgaW50ZXJuYWwgIGZpbGUgYGludGVybmFsL2Z0dHJhY2UuaCcuICBJZiB5b3UKLSAgICBtb2RpZnkgRnJlZVR5cGUgc291cmNlIGFuZCBpbnNlcnQgbmV3IEZUX0NPTVBPTkVOVCBtYWNybywgeW91IG11c3QKLSAgICByZWdpc3RlciBpdCAgaW4gYGZ0dHJhY2UuaCcuICBJZiAgeW91IGluc2VydCBvciAgcmVtb3ZlIG1hbnkgdHJhY2UKLSAgICBtYWNyb3MsIHlvdSBjYW4gY2hlY2sgdGhlIHVuZGVmaW5lZCBvciB0aGUgdW51c2VkIHRyYWNlICBtYWNybyAgYnkKLSAgICBgc3JjL3Rvb2xzL2Noa3RyY21wLnB5Jy4KKyAgICBUaGUgIHZhbHVlIG9mICB0aGUgYEZUX0NPTVBPTkVOVCcgIG1hY3JvIGlzICBvbmUgb2YgIHRoZSBjb21wb25lbnQKKyAgICBuYW1lcyBkZWZpbmVkICBpbiB0aGUgaW50ZXJuYWwgZmlsZSAgYGludGVybmFsL2Z0dHJhY2UuaCcuICBJZiB5b3UKKyAgICBtb2RpZnkgdGhlICBGcmVlVHlwZSBzb3VyY2UgY29kZSAgYW5kIGluc2VydCBhICBuZXcgYEZUX0NPTVBPTkVOVCcKKyAgICBtYWNybywgIHlvdSBtdXN0ICByZWdpc3RlciBpdCAgaW4gYGZ0dHJhY2UuaCcuICAgSWYgeW91ICBpbnNlcnQgb3IKKyAgICByZW1vdmUgbWFueSAgdHJhY2UgbWFjcm9zLCAgeW91IGNhbiB0ZXN0ICBmb3IgdW5kZWZpbmVkICBvciB1bnVzZWQKKyAgICB0cmFjZSBtYWNyb3Mgd2l0aCB0aGUgc2NyaXB0IGBzcmMvdG9vbHMvY2hrdHJjbXAucHknLgogCi0gICAgRWFjaCBzdWNoIGNvbXBvbmVudCBpcyBhc3NpZ25lZCBhIGBkZWJ1ZyBsZXZlbCcsIHJhbmdpbmcgZnJvbSAwIHRvCi0gICAgNywgIHRocm91Z2ggICB0aGUgIHVzZSAgb2YgIHRoZSAgIEZUMl9ERUJVRyAgZW52aXJvbm1lbnQgIHZhcmlhYmxlCi0gICAgKGRlc2NyaWJlZCBiZWxvdykgd2hlbiBhIHByb2dyYW0gbGlua2VkIHdpdGggRnJlZVR5cGUgc3RhcnRzLgorICAgIEVhY2ggIHN1Y2ggY29tcG9uZW50ICBpcyBhc3NpZ25lZCAgYSBgZGVidWcgIGxldmVsJywgcmFuZ2luZyAgZnJvbQorICAgIHZhbHVlICAwIHRvICA3LCB0aHJvdWdoICB0aGUgIHVzZSBvZiAgdGhlIGBGVDJfREVCVUcnICBlbnZpcm9ubWVudAorICAgIHZhcmlhYmxlICAoZGVzY3JpYmVkIGJlbG93KSAgd2hlbiBhICBwcm9ncmFtIGxpbmtlZCAgd2l0aCBGcmVlVHlwZQorICAgIHN0YXJ0cy4KIAotICAgIFdoZW4gRlRfVFJBQ0UgaXMgIGNhbGxlZCwgaXRzIGxldmVsIGlzIGNvbXBhcmVkIHRvICB0aGUgb25lIG9mIHRoZQorICAgIFdoZW4gYEZUX1RSQUNFJyBpcyBjYWxsZWQsIGl0cyBsZXZlbCBpcyBjb21wYXJlZCB0byB0aGUgb25lIG9mIHRoZQogICAgIGNvcnJlc3BvbmRpbmcgY29tcG9uZW50LiAgTWVzc2FnZXMgd2l0aCB0cmFjZSBsZXZlbHMgKmhpZ2hlciogdGhhbgotICAgIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBvbmVudCBsZXZlbCBhcmUgZmlsdGVyZWQgYW5kIG5ldmVyIHByaW50ZWQuCisgICAgdGhlICBjb3JyZXNwb25kaW5nICBjb21wb25lbnQgbGV2ZWwgIGFyZSAgZmlsdGVyZWQgIG91dCBhbmQgIG5ldmVyCisgICAgcHJpbnRlZC4gIFRoaXMgbWVhbnMgIHRoYXQgdHJhY2UgbWVzc2FnZXMgd2l0aCBsZXZlbCAgMCBhcmUgYWx3YXlzCisgICAgcHJpbnRlZCwgdGhvc2UgIHdpdGggbGV2ZWwgMiAgYXJlIG9ubHkgcHJpbnRlZCB3aGVuICB0aGUgY29tcG9uZW50CisgICAgbGV2ZWwgaXMgKmF0IGxlYXN0KiAyLCBldGMuCiAKLSAgICBUaGlzIG1lYW5zICB0aGF0IHRyYWNlIG1lc3NhZ2VzICB3aXRoIGxldmVsIDAgYXJlICBhbHdheXMgcHJpbnRlZCwKLSAgICB0aG9zZSB3aXRoICBsZXZlbCAyIGFyZSBvbmx5ICBwcmludGVkIHdoZW4gdGhlIGNvbXBvbmVudCAgbGV2ZWwgaXMKLSAgICAqYXQgbGVhc3QqIDIuCi0KLSAgICBUaGUgIHNlY29uZCBwYXJhbWV0ZXIgIHRvICBGVF9UUkFDRSBtdXN0ICBjb250YWluIHBhcmVudGhlc2VzICBhbmQKLSAgICBjb3JyZXNwb25kIHRvIGEgcHJpbnRmLWxpa2UgY2FsbCwgYXMgaW4KKyAgICBUaGUgc2Vjb25kICBwYXJhbWV0ZXIgdG8gIGBGVF9UUkFDRScgbXVzdCBjb250YWluICBwYXJlbnRoZXNlcyBhbmQKKyAgICBjb3JyZXNwb25kcyB0byBhIHByaW50Zi1saWtlIGNhbGwsIGFzIGluCiAKICAgICAgIEZUX1RSQUNFKCAyLCAoICJ5b3VyICVzIGlzIG5vdCAlc1xuIiwgImZvbyIsICJiYXIiICkgKQogCi0gICAgVGhlICAgc2hvcnRjdXQgIG1hY3JvcyAgIEZUX1RSQUNFMCwgIEZUX1RSQUNFMSwgICBGVF9UUkFDRTIsICAuLi4sCi0gICAgRlRfVFJBQ0U3IGNhbiAgYmUgdXNlZCB3aXRoICBjb25zdGFudCBsZXZlbCBpbmRpY2VzLCBhbmQgIGFyZSBtdWNoCisgICAgVGhlICBzaG9ydGN1dCBtYWNyb3MgIGBGVF9UUkFDRTAnLCBgRlRfVFJBQ0UxJywgIGBGVF9UUkFDRTInLCAuLi4sCisgICAgYEZUX1RSQUNFNycgY2FuIGJlIHVzZWQgd2l0aCAgY29uc3RhbnQgbGV2ZWwgaW5kaWNlcywgYW5kIGFyZSBtdWNoCiAgICAgY2xlYW5lciB0byB1c2UsIGFzIGluCiAKICAgICAgIEZUX1RSQUNFMigoICJ5b3VyICVzIGlzIG5vdCAlc1xuIiwgImZvbyIsICJiYXIiICkpOwpAQCAtMTMxLDcgKzEzMSw3IEBACiAgIEZUMl9ERUJVRwogCiAgICAgVGhpcyAgdmFyaWFibGUgICBpcyAgb25seSAgdXNlZCAgIHdoZW4gIEZyZWVUeXBlICBpcyAgIGJ1aWx0ICB3aXRoCi0gICAgRlRfREVCVUdfTEVWRUxfVFJBQ0UgIGRlZmluZWQuICBJdCAgY29udGFpbnMgYSAgbGlzdCBvZiAgY29tcG9uZW50CisgICAgYEZUX0RFQlVHX0xFVkVMX1RSQUNFJyBkZWZpbmVkLiAgIEl0IGNvbnRhaW5zIGEgbGlzdCAgb2YgY29tcG9uZW50CiAgICAgbGV2ZWwgZGVmaW5pdGlvbnMsIGZvbGxvd2luZyB0aGlzIGZvcm1hdDoKIAogICAgICAgY29tcG9uZW50MTpsZXZlbDEgY29tcG9uZW50MjpsZXZlbDIgY29tcG9uZW50MzpsZXZlbDMgLi4uCkBAIC0xNDAsNTcgKzE0MCw3MCBAQAogICAgIGluIGBmdHRyYWNlLmgnLiAgYGxldmVsWCcgaXMgIHRoZSBjb3JyZXNwb25kaW5nIGxldmVsICB0byAgdXNlICBhdAogICAgIHJ1bnRpbWUuCiAKLSAgICBgYW55JyAgaXMgYSAgc3BlY2lhbCBjb21wb25lbnQgIG5hbWUgdGhhdCAgd2lsbCBiZSAgaW50ZXJwcmV0ZWQgYXMKLSAgICBgYW55L2FsbCBjb21wb25lbnRzJy4gIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGRlZmluaXRpb25zCisgICAgYGFueScgaXMgYSBzcGVjaWFsIGNvbXBvbmVudCAgbmFtZSB0aGF0IGlzIGludGVycHJldGVkIGFzIGBhbnkvYWxsCisgICAgY29tcG9uZW50cycuICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucwogCiAgICAgICBzZXQgRlQyX0RFQlVHPWFueToyIG1lbW9yeTo1IGlvOjQgICAgICAgIChvbiBXaW5kb3dzKQogICAgICAgZXhwb3J0IEZUMl9ERUJVRz0iYW55OjIgbWVtb3J5OjUgaW86NCIgICAob24gTGludXggd2l0aCBiYXNoKQogCiAgICAgYm90aCBzdGlwdWxhdGUgdGhhdCBhbGwgY29tcG9uZW50cyBzaG91bGQgaGF2ZSBsZXZlbCAyLCBleGNlcHQgZm9yCi0gICAgdGhlIG1lbW9yeSBhbmQgIGlvIGNvbXBvbmVudHMgd2hpY2ggd2lsbCBiZSBzZXQgIHRvIHRyYWNlIGxldmVscyA1CisgICAgdGhlIG1lbW9yeSBhbmQgaW8gY29tcG9uZW50cywgd2hpY2ggIGFyZSBzZXQgdG8gdGhlIHRyYWNlIGxldmVscyA1CiAgICAgYW5kIDQsIHJlc3BlY3RpdmVseS4KIAogCiAgIEZUMl9ERUJVR19NRU1PUlkKIAogICAgIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUsICB3aGVuIGRlZmluZWQsIHRlbGxzIEZyZWVUeXBlICB0byB1c2UgYQotICAgIGRlYnVnZ2luZyBtZW1vcnkgbWFuYWdlciB0aGF0IHdpbGwgIHRyYWNrIGxlYWtpbmcgbWVtb3J5IGJsb2NrcyBhcwotICAgIHdlbGwgYXMgb3RoZXIgY29tbW9uIGVycm9ycyBsaWtlIGRvdWJsZSBmcmVlcy4gIEl0IGlzIGFsc28gY2FwYWJsZQotICAgIG9mICByZXBvcnRpbmcgX3doZXJlXyAgdGhlICBsZWFraW5nIGJsb2NrcyAgd2VyZSBhbGxvY2F0ZWQsICB3aGljaAorICAgIGRlYnVnZ2luZyBtZW1vcnkgbWFuYWdlciB0aGF0IHRyYWNrcyBsZWFraW5nIG1lbW9yeSBibG9ja3MgYXMgd2VsbAorICAgIGFzIG90aGVyIGNvbW1vbiAgZXJyb3JzIGxpa2UgZG91YmxlIGZyZWVzLiAgSXQgaXMgIGFsc28gY2FwYWJsZSBvZgorICAgIHJlcG9ydGluZyAgX3doZXJlXyAgdGhlICBsZWFraW5nICAgYmxvY2tzICB3ZXJlICBhbGxvY2F0ZWQsICB3aGljaAogICAgIGNvbnNpZGVyYWJseSAgc2F2ZXMgIHRpbWUgIHdoZW4gIGRlYnVnZ2luZyBuZXcgIGFkZGl0aW9ucyAgdG8gIHRoZQogICAgIGxpYnJhcnkuCiAKICAgICBUaGlzICBjb2RlICBpcyBvbmx5ICBjb21waWxlZCAgd2hlbiAgRnJlZVR5cGUgIGlzIGJ1aWx0ICB3aXRoICB0aGUKLSAgICBGVF9ERUJVR19NRU1PUlkgbWFjcm8gI2RlZmluZWQgaW4gIGBmdG9wdGlvbi5oJyB0aG91Z2gsIGl0IHdpbGwgYmUKKyAgICBgRlRfREVCVUdfTUVNT1JZJyAgbWFjcm8gI2RlZmluZWQgIGluIGBmdG9wdGlvbi5oJyAgdGhvdWdoLCBpdCAgaXMKICAgICBpZ25vcmVkIGluIG90aGVyIGJ1aWxkcy4KIAogCiAgIEZUMl9BTExPQ19UT1RBTF9NQVgKIAotICAgIFRoaXMgdmFyaWFibGUgaXMgIGlnbm9yZWQgaWYgRlQyX0RFQlVHX01FTU9SWSBpcyAgbm90IGRlZmluZWQuICBJdAorICAgIFRoaXMgdmFyaWFibGUgaXMgaWdub3JlZCBpZiBgRlQyX0RFQlVHX01FTU9SWScgaXMgbm90IGRlZmluZWQuICBJdAogICAgIGFsbG93cyAgeW91ICB0byAgc3BlY2lmeSAgYSAgbWF4aW11bSAgaGVhcCAgc2l6ZSAgZm9yICBhbGwgIG1lbW9yeQogICAgIGFsbG9jYXRpb25zIHBlcmZvcm1lZCAgYnkgRnJlZVR5cGUuICBUaGlzICBpcyB2ZXJ5IHVzZWZ1bCAgdG8gdGVzdAogICAgIHRoZSByb2J1c3RuZXNzICBvZiB0aGUgIGZvbnQgZW5naW5lICBhbmQgcHJvZ3JhbXMgIHRoYXQgdXNlICBpdCBpbgogICAgIHRpZ2h0IG1lbW9yeSBjb25kaXRpb25zLgogCi0gICAgSWYgaXQgaXMgdW5kZWZpbmVkLCBvciBpZiBpdHMgdmFsdWUgaXMgbm90IHN0cmljdGx5IHBvc2l0aXZlLCB0aGVuCi0gICAgbm8gYWxsb2NhdGlvbiBib3VuZHMgYXJlIGNoZWNrZWQgYXQgcnVudGltZS4KKyAgICBJZiBpdCBpcyAgdW5kZWZpbmVkLCBvciBpZiBpdHMgdmFsdWUgaXMgIG5vdCBzdHJpY3RseSBwb3NpdGl2ZSwgbm8KKyAgICBhbGxvY2F0aW9uIGJvdW5kcyBhcmUgY2hlY2tlZCBhdCBydW50aW1lLgogCiAKICAgRlQyX0FMTE9DX0NPVU5UX01BWAogCi0gICAgVGhpcyB2YXJpYWJsZSBpcyAgaWdub3JlZCBpZiBGVDJfREVCVUdfTUVNT1JZIGlzICBub3QgZGVmaW5lZC4gIEl0CisgICAgVGhpcyB2YXJpYWJsZSBpcyBpZ25vcmVkIGlmIGBGVDJfREVCVUdfTUVNT1JZJyBpcyBub3QgZGVmaW5lZC4gIEl0CiAgICAgYWxsb3dzICB5b3UgdG8gIHNwZWNpZnkgIGEgbWF4aW11bSAgbnVtYmVyICBvZiBtZW1vcnkgIGFsbG9jYXRpb25zCiAgICAgcGVyZm9ybWVkICAgIGJ5ICAgIEZyZWVUeXBlICAgIGJlZm9yZSAgICByZXR1cm5pbmcgICAgdGhlICAgIGVycm9yCi0gICAgRlRfRXJyX091dF9PZl9NZW1vcnkuICBUaGlzICBpcyB1c2VmdWwgIGZvciBkZWJ1Z2dpbmcgIGFuZCB0ZXN0aW5nCisgICAgYEZUX0Vycl9PdXRfT2ZfTWVtb3J5Jy4gIFRoaXMgaXMgdXNlZnVsICBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nCiAgICAgdGhlIGVuZ2luZSdzIHJvYnVzdG5lc3MuCiAKLSAgICBJZiBpdCBpcyB1bmRlZmluZWQsIG9yIGlmIGl0cyB2YWx1ZSBpcyBub3Qgc3RyaWN0bHkgcG9zaXRpdmUsIHRoZW4KLSAgICBubyBhbGxvY2F0aW9uIGJvdW5kcyBhcmUgY2hlY2tlZCBhdCBydW50aW1lLgorICAgIElmIGl0IGlzICB1bmRlZmluZWQsIG9yIGlmIGl0cyB2YWx1ZSBpcyAgbm90IHN0cmljdGx5IHBvc2l0aXZlLCBubworICAgIGFsbG9jYXRpb24gYm91bmRzIGFyZSBjaGVja2VkIGF0IHJ1bnRpbWUuCisKKworICBGVDJfS0VFUF9BTElWRQorCisgICAgVGhpcyAgdmFyaWFibGUgaXMgIGlnbm9yZWQgaWYgIGBGVDJfREVCVUdfTUVNT1JZJyBpcyAgbm90IGRlZmluZWQuCisgICAgYEtlZXAgYWxpdmUnIG1lYW5zIHRoYXQgZnJlZWQgIGJsb2NrcyBhcmVuJ3QgcmVsZWFzZWQgdG8gdGhlIGhlYXAuCisgICAgVGhpcyBpcyAgdXNlZnVsIHRvIGRldGVjdCAgZG91YmxlLWZyZWVzIG9yIHdlaXJkICBoZWFwIGNvcnJ1cHRpb24sCisgICAgcmVwb3J0aW5nIHRoZSBzb3VyY2UgY29kZSBsb2NhdGlvbiAgb2YgdGhlIG9yaWdpbmFsIGFsbG9jYXRpb24gYW5kCisgICAgZGVhbGxvY2F0aW9uICBpbiBjYXNlICBvZiBhICBwcm9ibGVtLiAgIEl0IHVzZXMgIGxhcmdlIGFtb3VudHMgIG9mCisgICAgbWVtb3J5LCBob3dldmVyLgorCisgICAgSWYgaXQgIGlzIHVuZGVmaW5lZCwgIG9yIGlmICBpdHMgdmFsdWUgIGlzIG5vdCAgc3RyaWN0bHkgcG9zaXRpdmUsCisgICAgZnJlZWQgYmxvY2tzIGFyZSByZWxlYXNlZCBhdCBydW50aW1lLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKK0NvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgIGZpbGUgaXMgIHBhcnQgIG9mIHRoZSAgRnJlZVR5cGUgIHByb2plY3QsIGFuZCAgbWF5ICBvbmx5IGJlICB1c2VkLApkaWZmIC0tZ2l0IGEvZG9jcy9ET0NHVUlERSBiL2RvY3MvRE9DR1VJREUKaW5kZXggZGE3NmM4OC4uODk2MTdiNCAxMDA2NDQKLS0tIGEvZG9jcy9ET0NHVUlERQorKysgYi9kb2NzL0RPQ0dVSURFCkBAIC0yODUsNyArMjg1LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBieQorQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgYnkKIE5pa2hpbCBSYW1ha3Jpc2huYW4sIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyAgZmlsZSBpcyAgcGFydCBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSBvbmx5ICBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvZG9jcy9JTlNUQUxMIGIvZG9jcy9JTlNUQUxMCmluZGV4IDYxMDUwMjUuLjgxNGZjN2IgMTAwNjQ0Ci0tLSBhL2RvY3MvSU5TVEFMTAorKysgYi9kb2NzL0lOU1RBTEwKQEAgLTc3LDcgKzc3LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKEMpIDIwMDAtMjAxOSBieQorQ29weXJpZ2h0IChDKSAyMDAwLTIwMjAgYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyAgZmlsZSBpcyAgcGFydCBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSBvbmx5ICBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvZG9jcy9JTlNUQUxMLkFOWSBiL2RvY3MvSU5TVEFMTC5BTlkKaW5kZXggNGQ1ZmQ4ZC4uODc5ZGRkYiAxMDA2NDQKLS0tIGEvZG9jcy9JTlNUQUxMLkFOWQorKysgYi9kb2NzL0lOU1RBTEwuQU5ZCkBAIC04LDEzICs4LDE1IEBACiBJLiBTdGFuZGFyZCBwcm9jZWR1cmUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICogRElTQUJMRSBQUkUtQ09NUElMRUQgIEhFQURFUlMhICBUaGlzIGlzIHZlcnkgIGltcG9ydGFudCBmb3IgVmlzdWFsCi0gICAgQysrLCBiZWNhdXNlIEZyZWVUeXBlIHVzZXMgbGluZXMgbGlrZToKKyAgKiBJZiB5b3UgdXNlIG1hY3JvIG5hbWVzICBmb3IgRnJlZVR5cGUgaGVhZGVyIGZpbGVzICh3aGlsZSBtYW5kYXRvcnkKKyAgICBpbiBlYXJsaWVyIHZlcnNpb25zLCAgdGhpcyBpcyBub3cgb3B0aW9uYWwgIHNpbmNlIEZyZWVUeXBlIHZlcnNpb24KKyAgICAyLjEwLjMpIGl0ICBpcyBuZWNlc3NhcnkgdG8gZGlzYWJsZSBwcmUtY29tcGlsZWQgaGVhZGVycy4gIFRoaXMgaXMKKyAgICB2ZXJ5IGltcG9ydGFudCBmb3IgVmlzdWFsIEMrKywgYmVjYXVzZSBsaW5lcyBsaWtlCiAKICAgICAgICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKIAotICAgIHdoaWNoIGFyZSBub3QgY29ycmVjdGx5IHN1cHBvcnRlZCBieSB0aGlzIGNvbXBpbGVyIHdoaWxlIGJlaW5nIElTTwotICAgIEMgY29tcGxpYW50IQorICAgIGFyZSBub3QgIGNvcnJlY3RseSBzdXBwb3J0ZWQgIGJ5IHRoaXMgY29tcGlsZXIgIHdoaWxlIGJlaW5nICBJU08gQworICAgIGNvbXBsaWFudCEKIAogICAqIFlvdSBuZWVkIHRvIGFkZCB0aGUgZGlyZWN0b3J5IGBpbmNsdWRlJyB0byB5b3VyICBpbmNsdWRlIHBhdGggd2hlbgogICAgIGNvbXBpbGluZyB0aGUgbGlicmFyeS4KQEAgLTE0MSw3ICsxNDMsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CitDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogCiBUaGlzICBmaWxlIGlzICBwYXJ0IG9mICB0aGUgRnJlZVR5cGUgIHByb2plY3QsIGFuZCAgbWF5IG9ubHkgIGJlIHVzZWQsCmRpZmYgLS1naXQgYS9kb2NzL0lOU1RBTEwuQ1JPU1MgYi9kb2NzL0lOU1RBTEwuQ1JPU1MKaW5kZXggOGY0Y2Y2ZS4uODUxMTgwNSAxMDA2NDQKLS0tIGEvZG9jcy9JTlNUQUxMLkNST1NTCisrKyBiL2RvY3MvSU5TVEFMTC5DUk9TUwpAQCAtMTYzLDcgKzE2Myw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgYnkKK0NvcHlyaWdodCAoQykgMjAwNi0yMDIwIGJ5CiBzdXp1a2kgdG9zaGl5YSwgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogCiAKZGlmZiAtLWdpdCBhL2RvY3MvSU5TVEFMTC5HTlUgYi9kb2NzL0lOU1RBTEwuR05VCmluZGV4IDZmMzdhMGYuLjhmZGJiODIgMTAwNjQ0Ci0tLSBhL2RvY3MvSU5TVEFMTC5HTlUKKysrIGIvZG9jcy9JTlNUQUxMLkdOVQpAQCAtNjMsNyArNjMsNyBAQAogCiAgICAgICBPdGhlcndpc2UsIHNpbXBseSB0eXBlICdtYWtlJyBhZ2FpbiB0byBidWlsZCB0aGUgbGlicmFyeQogICAgICAgb3IgJ21ha2UgcmVmZG9jJyB0byBidWlsZCB0aGUgQVBJIHJlZmVyZW5jZSAodGhlIGxhdHRlciBuZWVkcwotICAgICAgcHl0aG9uKS4KKyAgICAgIFB5dGhvbiA+PSAzLjUpLgogICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKQEAgLTE0OCw3ICsxNDgsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CitDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogCiBUaGlzICBmaWxlIGlzICBwYXJ0IG9mICB0aGUgRnJlZVR5cGUgIHByb2plY3QsIGFuZCAgbWF5IG9ubHkgIGJlIHVzZWQsCmRpZmYgLS1naXQgYS9kb2NzL0lOU1RBTEwuVU5JWCBiL2RvY3MvSU5TVEFMTC5VTklYCmluZGV4IDYwMjc0NGQuLmY4ZDIyMGEgMTAwNjQ0Ci0tLSBhL2RvY3MvSU5TVEFMTC5VTklYCisrKyBiL2RvY3MvSU5TVEFMTC5VTklYCkBAIC0xMDUsNyArMTA1LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyAgZmlsZSBpcyAgcGFydCBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSBvbmx5ICBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvZG9jcy9JTlNUQUxMLlZNUyBiL2RvY3MvSU5TVEFMTC5WTVMKaW5kZXggNTRmYTJmOC4uZTE4MTdlYyAxMDA2NDQKLS0tIGEvZG9jcy9JTlNUQUxMLlZNUworKysgYi9kb2NzL0lOU1RBTEwuVk1TCkBAIC00OSw3ICs0OSw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKEMpIDIwMDAtMjAxOSBieQorQ29weXJpZ2h0IChDKSAyMDAwLTIwMjAgYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyAgZmlsZSAgaXMgIHBhcnQgIG9mIHRoZSAgRnJlZVR5cGUgIHByb2plY3QsIGFuZCBtYXkgIG9ubHkgYmUgIHVzZWQsCmRpZmYgLS1naXQgYS9kb2NzL3JlZmVyZW5jZS9SRUFETUUgYi9kb2NzL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDY1JQpyZW5hbWUgZnJvbSBkb2NzL3JlZmVyZW5jZS9SRUFETUUKcmVuYW1lIHRvIGRvY3MvUkVBRE1FCmluZGV4IDNmZmNmYzAuLmQ3MWZkMzcgMTAwNjQ0Ci0tLSBhL2RvY3MvcmVmZXJlbmNlL1JFQURNRQorKysgYi9kb2NzL1JFQURNRQpAQCAtMSw2ICsxLDYgQEAKLUFmdGVyIHNheWluZyBgbWFrZSByZWZkb2MnIG9yIGBtYWtlIHJlZmRvYy12ZW52JyB0aGUgYHNpdGUvJyBkaXJlY3RvcnkKLWNvbnRhaW5zIHRoZSBGcmVlVHlwZSBBUEkgcmVmZXJlbmNlLiAgWW91IG5lZWQgcHl0aG9uIGFuZCBwaXAgdG8gbWFrZSB0aGlzCi10YXJnZXQuCitBZnRlciBzYXlpbmcgYG1ha2UgcmVmZG9jJyBvciBgbWFrZSByZWZkb2MtdmVudicgdGhlIGByZWZlcmVuY2UvJyBkaXJlY3RvcnkKK2NvbnRhaW5zIHRoZSBGcmVlVHlwZSBBUEkgcmVmZXJlbmNlLiAgWW91IG5lZWQgUHl0aG9uID49IDMuNSBhbmQgcGlwIHRvIG1ha2UKK3RoaXMgdGFyZ2V0LgogCiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gZ2VuZXJhdGUgdGhlIGRvY3VtZW50YXRpb246CiAKQEAgLTEzLDcgKzEzLDcgQEAKIAogMi4gVXNpbmcgYG1ha2UgcmVmZG9jLXZlbnYnIChyZXF1aXJlcyBpbnRlcm5ldCBhY2Nlc3MpOgogCi0gICAgLSBFbnN1cmUgYHB5dGhvbicsIGBwaXAnIGFuZCBweXRob24gcGFja2FnZSBgdmlydHVhbGVudicgYXJlIGF2YWlsYWJsZS4KKyAgICAtIEVuc3VyZSBgcHl0aG9uJywgYHBpcCcgYW5kIFB5dGhvbiBwYWNrYWdlIGB2aXJ0dWFsZW52JyBhcmUgYXZhaWxhYmxlLgogICAgIC0gTWFrZSB0YXJnZXQgd2l0aCBgbWFrZSByZWZkb2MtdmVudicuCiAgICAgLSBUaGlzIG1heSBvciBtYXkgbm90IHJlcXVpcmUgaW50ZXJuZXQgYWNjZXNzIGV2ZXJ5IHRpbWUgZGVwZW5kaW5nIG9uCiAgICAgcGlwIGFuZCBzeXN0ZW0gY2FjaGluZy4KQEAgLTI1LDExICsyNSwxMSBAQAogKiBSZWd1bGFybHkgcnVuIGBwaXAgaW5zdGFsbCAtLXVwZ3JhZGUgZG9jd3JpdGVyJyB0byBjaGVjayBmb3IgdXBkYXRlcyB3aGljaAogbWF5IGluY2x1ZGUgYnVnIGZpeGVzLgogCi0qIEVuc3VyZSB0aGF0IGBkb2N3cml0ZXInIGlzIGluc3RhbGxlZCBpbiB0aGUgc2FtZSBweXRob24gdGFyZ2V0IHRoYXQKLWBtYWtlIHJlZmRvYycgdXNlcyAocHl0aG9uMy9weXRob24yL3B5dGhvbikuCisqIGBEb2N3cml0ZXInIGRvZXMgbm90IHN1cHBvcnQgUHl0aG9uIDIuICBFbnN1cmUgdGhhdCBQeXRob24gPj0gMy41IGlzCitpbnN0YWxsZWQgYW5kIGF2YWlsYWJsZSBhcyBgcHl0aG9uMycvYHB5dGhvbicuCiAKLSogYHBpcCcgYW5kIGBweXRob24nIG1heSBwb2ludCB0byBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgUHl0aG9uLiAgQ2hlY2sgdXNpbmcKLWBweXRob24gLS12ZXJzaW9uJyBhbmQgYHBpcCAtLXZlcnNpb24nLgorKiBFbnN1cmUgdGhhdCBgZG9jd3JpdGVyJyBpcyBpbnN0YWxsZWQgaW4gdGhlIHNhbWUgUHl0aG9uIHRhcmdldCB0aGF0CitgbWFrZSByZWZkb2MnIHVzZXMgKHB5dGhvbjMvcHl0aG9uKS4KIAogKiBJZiBub25lIG9mIHRoaXMgd29ya3MsIHNlbmQgYSBtYWlsIHRvIGBmcmVldHlwZS1kZXZlbEBub25nbnUub3JnJyBvciBmaWxlCiBhbiBpc3N1ZSBhdCBgaHR0cHM6Ly9naXRodWIuY29tL2ZyZWV0eXBlL2RvY3dyaXRlci9pc3N1ZXMnLgpkaWZmIC0tZ2l0IGEvZG9jcy9UT0RPIGIvZG9jcy9UT0RPCmluZGV4IDFlZmNjYzYuLjhiMjdlMjYgMTAwNjQ0Ci0tLSBhL2RvY3MvVE9ETworKysgYi9kb2NzL1RPRE8KQEAgLTI3LDcgKzI3LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAoQykgMjAwMS0yMDE5IGJ5CitDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBieQogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogCiBUaGlzICBmaWxlICBpcyAgcGFydCAgb2YgdGhlICBGcmVlVHlwZSAgcHJvamVjdCwgYW5kIG1heSAgb25seSBiZSAgdXNlZCwKZGlmZiAtLWdpdCBhL2RvY3MvVkVSU0lPTlMuVFhUIGIvZG9jcy9WRVJTSU9OUy5UWFQKaW5kZXggNWNkZjM3OC4uNGUyODFhNyAxMDA2NDQKLS0tIGEvZG9jcy9WRVJTSU9OUy5UWFQKKysrIGIvZG9jcy9WRVJTSU9OUy5UWFQKQEAgLTEsMzYgKzEsNDQgQEAKLUR1ZSAgdG8gb3VyICB1c2Ugb2YgIGBsaWJ0b29sJyB0byAgZ2VuZXJhdGUgYW5kICBpbnN0YWxsIHRoZSAgRnJlZVR5cGUgMgotbGlicmFyaWVzIG9uICBVbml4IHN5c3RlbXMsIGFzICB3ZWxsIGFzICBvdGhlciBoaXN0b3JpY2FsIGV2ZW50cywgIGl0IGlzCi1nZW5lcmFsbHkgdmVyeSAgZGlmZmljdWx0IHRvICBrbm93IHByZWNpc2VseSB3aGljaCAgcmVsZWFzZSBvZiAgdGhlIGZvbnQKK0R1ZSB0byAgb3VyIHVzZSBvZiAgYGxpYnRvb2wnIHRvIGdlbmVyYXRlICBhbmQgaW5zdGFsbCB0aGUgIEZyZWVUeXBlIDIKK2xpYnJhcmllcyBvbiBVbml4ICBzeXN0ZW1zLCBhcyB3ZWxsIGFzIG90aGVyIGhpc3RvcmljYWwgIGV2ZW50cywgaXQgaXMKK2dlbmVyYWxseSB2ZXJ5IGRpZmZpY3VsdCAgdG8ga25vdyBwcmVjaXNlbHkgd2hpY2ggcmVsZWFzZSAgb2YgdGhlIGZvbnQKIGVuZ2luZSBpcyBpbnN0YWxsZWQgb24gYSBnaXZlbiBzeXN0ZW0uCiAKLVRoaXMgZmlsZSB0cmllcyAgdG8gZXhwbGFpbiB3aHkgYW5kIHRvIGRvY3VtZW50ICB3YXlzIHRvIHByb3Blcmx5IGRldGVjdAorVGhpcyBmaWxlIHRyaWVzIHRvIGV4cGxhaW4gd2h5IGFuZCB0byBkb2N1bWVudCB3YXlzIHRvIHByb3Blcmx5IGRldGVjdAogRnJlZVR5cGUgb24gVW5peC4KIAogCiAxLiBWZXJzaW9uIGFuZCBSZWxlYXNlIG51bWJlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Gb3IgZWFjaCBuZXcgIHB1YmxpYyByZWxlYXNlIG9mIEZyZWVUeXBlIDIsIHRoZXJlICBhcmUgZ2VuZXJhbGx5ICp0aHJlZSoKK0ZvciBlYWNoIG5ldyBwdWJsaWMgcmVsZWFzZSBvZiBGcmVlVHlwZSAyLCB0aGVyZSBhcmUgZ2VuZXJhbGx5ICp0aHJlZSoKIGRpc3RpbmN0IGB2ZXJzaW9uJyBudW1iZXJzIHRvIGNvbnNpZGVyOgogCi0gICogVGhlIG9mZmljaWFsIEZyZWVUeXBlIDIgcmVsZWFzZSBudW1iZXIsIGxpa2UgMi4zLjEgb3IgMi40LjEwLgorICAqIFRoZSBvZmZpY2lhbCBGcmVlVHlwZSAyIHJlbGVhc2UgbnVtYmVyLCBsaWtlIDIuNy4wIG9yIDIuMTAuMi4KIAotICAqIFRoZSBsaWJ0b29sIChhbmQgIFVuaXgpIHNwZWNpZmljIHZlcnNpb24gbnVtYmVyLCAgbGlrZSAxMy4wLjcuICBUaGlzCi0gICAgaXMgd2hhdCBgZnJlZXR5cGUtY29uZmlnIC0tdmVyc2lvbicgcmV0dXJucy4KKyAgKiBUaGUgIGxpYnRvb2wgKGFuZCAgVW5peCkgIHNwZWNpZmljIHZlcnNpb24gIG51bWJlciwgbGlrZSAgMjMuMi4xNy4KKyAgICBUaGlzIGlzIHdoYXQKIAotICAqIFRoZSBwbGF0Zm9ybS1zcGVjaWZpYyAgc2hhcmVkIG9iamVjdCAgbnVtYmVyLCB1c2VkIGZvciAgZXhhbXBsZSB3aGVuCi0gICAgdGhlIGxpYnJhcnkgaXMgaW5zdGFsbGVkIGFzIGAvdXNyL2xpYi9saWJmcmVldHlwZS5zby42LjcuMScuCisgICAgICBwa2ctY29uZmlnIGZyZWV0eXBlMiAtLW1vZHZlcnNpb24KIAotVGhlIHBsYXRmb3JtLXNwZWNpZmljICBudW1iZXIgaXMsIHVuc3VycHJpc2luZ2x5LCAgcGxhdGZvcm0tc3BlY2lmaWMgYW5kCi12YXJpZXMgIHdpdGggdGhlICBvcGVyYXRpbmcgc3lzdGVtICB5b3UgYXJlICB1c2luZyAoc2V2ZXJhbCAgdmFyaWFudHMgb2YKLUxpbnV4LCBGcmVlQlNELCAgU29sYXJpcywgZXRjLikuICBZb3UgIHNob3VsZCB0aHVzIF9uZXZlcl8gdXNlICBpdCwgZXZlbgorICAgIG9yCisKKyAgICAgIGZyZWV0eXBlLWNvbmZpZyAtLXZlcnNpb24KKworICAgIHJldHVybnMuCisKKyAgKiBUaGUgcGxhdGZvcm0tc3BlY2lmaWMgc2hhcmVkIG9iamVjdCAgbnVtYmVyLCB1c2VkIGZvciBleGFtcGxlIHdoZW4KKyAgICB0aGUgbGlicmFyeSBpcyBpbnN0YWxsZWQgYXMgYC91c3IvbGliL2xpYmZyZWV0eXBlLnNvLjYuMTcuMicuCisKK1RoZSBwbGF0Zm9ybS1zcGVjaWZpYyBudW1iZXIgaXMsIHVuc3VycHJpc2luZ2x5LCBwbGF0Zm9ybS1zcGVjaWZpYyBhbmQKK3ZhcmllcyB3aXRoICB0aGUgb3BlcmF0aW5nIHN5c3RlbSAgeW91IGFyZSB1c2luZyAoc2V2ZXJhbCAgdmFyaWFudHMgb2YKK0xpbnV4LCBGcmVlQlNELCBTb2xhcmlzLCBldGMuKS4gIFlvdSAgc2hvdWxkIHRodXMgX25ldmVyXyB1c2UgaXQsIGV2ZW4KIGZvciBzaW1wbGUgdGVzdHMuCiAKLVRoZSBsaWJ0b29sLXNwZWNpZmljICBudW1iZXIgZG9lcyAgbm90IGVxdWFsIHRoZSAgcmVsZWFzZSBudW1iZXIgIGJ1dCBpcworVGhlIGxpYnRvb2wtc3BlY2lmaWMgbnVtYmVyICBkb2VzIG5vdCBlcXVhbCB0aGUgcmVsZWFzZSAgbnVtYmVyIGJ1dCBpcwogdGllZCB0byBpdC4KIAotVGhlIHJlbGVhc2UgbnVtYmVyIGlzIGF2YWlsYWJsZSAgYXQgKmNvbXBpbGUqIHRpbWUgdGhyb3VnaCB0aGUgZm9sbG93aW5nCi1tYWNyb3MgZGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IOgorVGhlICByZWxlYXNlICBudW1iZXIgIGlzICBhdmFpbGFibGUgIGF0ICAqY29tcGlsZSogIHRpbWUgIHRocm91Z2ggIHRoZQorZm9sbG93aW5nIG1hY3JvcyBkZWZpbmVkIGluIGBmcmVldHlwZS5oJzoKIAogICAtIEZSRUVUWVBFX01BSk9SOiBtYWpvciByZWxlYXNlIG51bWJlcgogICAtIEZSRUVUWVBFX01JTk9SOiBtaW5vciByZWxlYXNlIG51bWJlcgpAQCAtMzgsMjAgKzQ2LDIzIEBACiAKIFNlZSBiZWxvdyBmb3IgYSBzbWFsbCBhdXRvY29uZiBmcmFnbWVudC4KIAotVGhlICByZWxlYXNlICBudW1iZXIgICBpcyAgYWxzbyAgYXZhaWxhYmxlICBhdCAgICpydW50aW1lKiAgdGhyb3VnaCAgdGhlCitUaGUgIHJlbGVhc2UgIG51bWJlciAgaXMgIGFsc28gIGF2YWlsYWJsZSAgYXQgICpydW50aW1lKiAgdGhyb3VnaCAgdGhlCiBgRlRfTGlicmFyeV9WZXJzaW9uJyBBUEkuCiAKIAogMi4gSGlzdG9yeQogLS0tLS0tLS0tLQogCi1UaGUgIGZvbGxvd2luZyAgIHRhYmxlICBnaXZlcywgIGZvciAgIGFsbCAgcmVsZWFzZXMgIHNpbmNlICAgMi40LjAsICB0aGUKLWNvcnJlc3BvbmRpbmcgbGlidG9vbCBudW1iZXIsIGFzIHdlbGwgIGFzIHRoZSBzaGFyZWQgb2JqZWN0IG51bWJlciBmb3VuZAotb24gX21vc3RfIHN5c3RlbXMsIGJ1dCBub3QgYWxsIG9mIHRoZW06CitUaGUgIGZvbGxvd2luZyAgdGFibGUgIGdpdmVzLCAgZm9yICAgYWxsICByZWxlYXNlcyAgc2luY2UgIDIuNS4wLCAgdGhlCitjb3JyZXNwb25kaW5nICBsaWJ0b29sIG51bWJlciwgIGFzIHdlbGwgIGFzIHRoZSAgc2hhcmVkIG9iamVjdCAgbnVtYmVyCitmb3VuZCBvbiBfbW9zdF8gc3lzdGVtcywgYnV0IG5vdCBhbGwgb2YgdGhlbToKIAogCiAgICAgcmVsZWFzZSAgICAgbGlidG9vbCAgICAgc28KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAyLjEwLjQgICAgIDIzLjQuMTcgICA2LjE3LjQKKyAgICAgMi4xMC4zICAgICAyMy4zLjE3ICAgNi4xNy4zCisgICAgIDIuMTAuMiAgICAgMjMuMi4xNyAgIDYuMTcuMgogICAgICAyLjEwLjEgICAgIDIzLjEuMTcgICA2LjE3LjEKICAgICAgMi4xMC4wICAgICAyMy4wLjE3ICAgNi4xNy4wCiAgICAgIDIuOS4xICAgICAgMjIuMS4xNiAgIDYuMTYuMQpAQCAtNzIsNTggKzgzLDQ4IEBACiAgICAgIDIuNS4yICAgICAgMTcuMS4xMSAgIDYuMTEuMQogICAgICAyLjUuMSAgICAgIDE3LjAuMTEgICA2LjExLjAKICAgICAgMi41LjAgICAgICAxNi4yLjEwICAgNi4xMC4yCi0gICAgIDIuNC4xMiAgICAgMTYuMS4xMCAgIDYuMTAuMQotICAgICAyLjQuMTEgICAgIDE2LjAuMTAgICA2LjEwLjAKLSAgICAgMi40LjEwICAgICAxNS4wLjkgICAgNi45LjAKLSAgICAgMi40LjkgICAgICAxNC4xLjggICAgNi44LjEKLSAgICAgMi40LjggICAgICAxNC4wLjggICAgNi44LjAKLSAgICAgMi40LjcgICAgICAxMy4yLjcgICAgNi43LjIKLSAgICAgMi40LjYgICAgICAxMy4xLjcgICAgNi43LjEKLSAgICAgMi40LjUgICAgICAxMy4wLjcgICAgNi43LjAKLSAgICAgMi40LjQgICAgICAxMi4yLjYgICAgNi42LjIKLSAgICAgMi40LjMgICAgICAxMi4xLjYgICAgNi42LjEKLSAgICAgMi40LjIgICAgICAxMi4wLjYgICAgNi42LjAKLSAgICAgMi40LjEgICAgICAxMS4xLjUgICAgNi41LjEKLSAgICAgMi40LjAgICAgICAxMS4wLjUgICAgNi41LjAKIAogCiAzLiBBdXRvY29uZiBDb2RlIEZyYWdtZW50CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUxhcnMgQ2xhdXNlbiBjb250cmlidXRlZCB0aGUgZm9sbG93aW5nIGF1dG9jb25mIGZyYWdtZW50IHRvIGRldGVjdCB3aGljaAotdmVyc2lvbiBvZiAgRnJlZVR5cGUgaXMgIGluc3RhbGxlZCBvbiAgYSBzeXN0ZW0uICBUaGlzICBvbmUgdGVzdHMgIGZvciBhCi12ZXJzaW9uIHRoYXQgIGlzIGF0IGxlYXN0IDIuMC45OyAgeW91IHNob3VsZCBjaGFuZ2UgaXQgIHRvIGNoZWNrIGFnYWluc3QKK0xhcnMgIENsYXVzZW4gY29udHJpYnV0ZWQgIHRoZSAgZm9sbG93aW5nIGF1dG9jb25mICBmcmFnbWVudCB0byAgY2hlY2sKK3doaWNoIHZlcnNpb24gb2YgRnJlZVR5cGUgaXMgaW5zdGFsbGVkIG9uIGEgc3lzdGVtIChub3cgdXBkYXRlZCB0byB1c2UKK2Bwa2ctY29uZmlnJyAgaW5zdGVhZCBvZiAgYGZyZWV0eXBlLWNvbmZpZycpLiAgIFRoaXMgb25lICB0ZXN0cyBmb3IgIGEKK3ZlcnNpb24gdGhhdCBpcyBhdCBsZWFzdCAyLjEwLjI7IHlvdSBzaG91bGQgY2hhbmdlIGl0IHRvIGNoZWNrIGFnYWluc3QKIG90aGVyIHJlbGVhc2UgbnVtYmVycy4KIAogCi0gIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBGcmVlVHlwZSB2ZXJzaW9uIGlzIDIuMC45IG9yIGhpZ2hlcl0pCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBGcmVlVHlwZSB2ZXJzaW9uIGlzIDIuMTAuMiBvciBoaWdoZXJdKQogICBvbGRfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgQ1BQRkxBR1M9YGZyZWV0eXBlLWNvbmZpZyAtLWNmbGFnc2AKKyAgQ1BQRkxBR1M9YHBrZy1jb25maWcgZnJlZXR5cGUyIC0tY2ZsYWdzYAogICBBQ19UUllfQ1BQKFsKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0jaWYgKEZSRUVUWVBFX01BSk9SKjEwMDAgKyBGUkVFVFlQRV9NSU5PUikqMTAwMCArIEZSRUVUWVBFX1BBVENIIDwgMjAwMDAwOQotI2Vycm9yIEZyZWVUeXBlIHZlcnNpb24gdG9vIGxvdy4KKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorCisjaWYgRlJFRVRZUEVfTUFKT1IqMTAwMDAgKyBGUkVFVFlQRV9NSU5PUioxMDAgKyBGUkVFVFlQRV9QQVRDSCA8IDIxMDAyCisjICBlcnJvciBGcmVlVHlwZSB2ZXJzaW9uIHRvbyBsb3cuCiAjZW5kaWYKKwogICBdLAogICBbQUNfTVNHX1JFU1VMVCh5ZXMpCi0gICBGUkVFVFlQRV9MSUJTPWBmcmVldHlwZS1jb25maWcgLS1saWJzYAorICAgRlJFRVRZUEVfTElCUz1gcGtnLWNvbmZpZyBmcmVldHlwZTIgLS1saWJzYAogICAgQUNfU1VCU1QoRlJFRVRZUEVfTElCUykKICAgIEFDX0RFRklORShIQVZFX0ZSRUVUWVBFLDEsW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgRnJlZVR5cGUyIGxpYnJhcnldKQogICAgQ1BQRkxBR1M9IiRvbGRfQ1BQRkxBR1MiXSwKLSAgW0FDX01TR19FUlJPUihbTmVlZCBGcmVlVHlwZSBsaWJyYXJ5IHZlcnNpb24gMi4wLjkgb3IgaGlnaGVyXSldKQorICBbQUNfTVNHX0VSUk9SKFtOZWVkIEZyZWVUeXBlIGxpYnJhcnkgdmVyc2lvbiAyLjEwLjIgb3IgaGlnaGVyXSldKQogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKK0NvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKLVRoaXMgIGZpbGUgaXMgIHBhcnQgIG9mIHRoZSAgRnJlZVR5cGUgIHByb2plY3QsIGFuZCAgbWF5ICBvbmx5IGJlICB1c2VkLAotbW9kaWZpZWQsICBhbmQgIGRpc3RyaWJ1dGVkIHVuZGVyICB0aGUgIHRlcm1zICBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0Ci1saWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMKLWZpbGUgIHlvdSBpbmRpY2F0ZSB0aGF0ICB5b3UgaGF2ZSAgcmVhZCB0aGUgIGxpY2Vuc2UgYW5kICB1bmRlcnN0YW5kIGFuZAotYWNjZXB0IGl0IGZ1bGx5LgorVGhpcyAgZmlsZSBpcyAgcGFydCBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSBvbmx5ICBiZSB1c2VkLAorbW9kaWZpZWQsICBhbmQgZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgdGVybXMgb2YgIHRoZSBGcmVlVHlwZSAgcHJvamVjdAorbGljZW5zZSwgIExJQ0VOU0UuVFhULiAgQnkgIGNvbnRpbnVpbmcgdG8gIHVzZSwgbW9kaWZ5LCAgb3IgZGlzdHJpYnV0ZQordGhpcyBmaWxlIHlvdSAgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSAgbGljZW5zZSBhbmQgdW5kZXJzdGFuZAorYW5kIGFjY2VwdCBpdCBmdWxseS4KIAogCiAtLS0gZW5kIG9mIFZFUlNJT05TLlRYVCAtLS0KZGlmZiAtLWdpdCBhL2RvY3MvZm9ybWF0cy50eHQgYi9kb2NzL2Zvcm1hdHMudHh0CmluZGV4IDVlYzU0NDIuLmU2NDBmYWIgMTAwNjQ0Ci0tLSBhL2RvY3MvZm9ybWF0cy50eHQKKysrIGIvZG9jcy9mb3JtYXRzLnR4dApAQCAtMTkxLDcgKzE5MSw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBieQorQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyAgZmlsZSBpcyAgcGFydCAgb2YgdGhlICBGcmVlVHlwZSAgcHJvamVjdCwgYW5kICBtYXkgIG9ubHkgYmUgIHVzZWQsCmRpZmYgLS1naXQgYS9kb2NzL2ZyZWV0eXBlLWNvbmZpZy4xIGIvZG9jcy9mcmVldHlwZS1jb25maWcuMQppbmRleCA5NmZmMGYyLi43ZGVhNjZhIDEwMDY0NAotLS0gYS9kb2NzL2ZyZWV0eXBlLWNvbmZpZy4xCisrKyBiL2RvY3MvZnJlZXR5cGUtY29uZmlnLjEKQEAgLTEsNCArMSw0IEBACi0uVEggRlJFRVRZUEUtQ09ORklHIDEgIkp1bHkgMjAxOSIgIkZyZWVUeXBlIDIuMTAuMSIKKy5USCBGUkVFVFlQRS1DT05GSUcgMSAiT2N0b2JlciAyMDIwIiAiRnJlZVR5cGUgMi4xMC40IgogLgogLgogLlNIIE5BTUUKZGlmZiAtLWdpdCBhL2RvY3MvcmVmZXJlbmNlL21hcmtkb3duL2ltYWdlcy9mYXZpY28uaWNvIGIvZG9jcy9tYXJrZG93bi9pbWFnZXMvZmF2aWNvLmljbwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZG9jcy9yZWZlcmVuY2UvbWFya2Rvd24vaW1hZ2VzL2Zhdmljby5pY28KcmVuYW1lIHRvIGRvY3MvbWFya2Rvd24vaW1hZ2VzL2Zhdmljby5pY28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9yZWZlcmVuY2UvbWFya2Rvd24vamF2YXNjcmlwdHMvZXh0cmEuanMgYi9kb2NzL21hcmtkb3duL2phdmFzY3JpcHRzL2V4dHJhLmpzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkb2NzL3JlZmVyZW5jZS9tYXJrZG93bi9qYXZhc2NyaXB0cy9leHRyYS5qcwpyZW5hbWUgdG8gZG9jcy9tYXJrZG93bi9qYXZhc2NyaXB0cy9leHRyYS5qcwpkaWZmIC0tZ2l0IGEvZG9jcy9yZWZlcmVuY2UvbWFya2Rvd24vc3R5bGVzaGVldHMvZXh0cmEuY3NzIGIvZG9jcy9tYXJrZG93bi9zdHlsZXNoZWV0cy9leHRyYS5jc3MKc2ltaWxhcml0eSBpbmRleCA3NiUKcmVuYW1lIGZyb20gZG9jcy9yZWZlcmVuY2UvbWFya2Rvd24vc3R5bGVzaGVldHMvZXh0cmEuY3NzCnJlbmFtZSB0byBkb2NzL21hcmtkb3duL3N0eWxlc2hlZXRzL2V4dHJhLmNzcwppbmRleCBjZDZhMWVlLi5hOTllNzdmIDEwMDY0NAotLS0gYS9kb2NzL3JlZmVyZW5jZS9tYXJrZG93bi9zdHlsZXNoZWV0cy9leHRyYS5jc3MKKysrIGIvZG9jcy9tYXJrZG93bi9zdHlsZXNoZWV0cy9leHRyYS5jc3MKQEAgLTEwLDE4ICsxMCwxMyBAQAogfQogcCB7CiAgICAgdGV4dC1hbGlnbjoganVzdGlmeTsKLSAgIC8qIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOwotICAgICovCiB9Ci0vKiAubWQtdHlwZXNldCBwewotICAgIG1hcmdpbjogMWVtIDFlbSAwIDFlbTsKLX0KLSovCisKIC8qIGNvZGUgYmxvY2tzICovCiBwcmUuY29sb3JlZCB7CiAgICAgY29sb3I6IGJsdWU7CiB9Ci1wcmUgeworcHJlPmNvZGUgewogICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7CkBAIC0zMyw3ICsyOCw3IEBACiAgICAgd2hpdGUtc3BhY2U6IHByZTsKICAgICBjb2xvcjogI2Q3M2E0OTsKIH0KLS5tZC10eXBlc2V0IGNvZGUgeworLm1kLXR5cGVzZXQgcHJlPmNvZGUgewogICAgIHdoaXRlLXNwYWNlOiBwcmU7CiB9CiAvKiBINCBIZWFkaW5nICovCkBAIC00MiwxMCArMzcsOSBAQAogICAgIGZvbnQtc2l6ZTogbWVkaXVtOwogICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CiAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAvKiBtYXJnaW46IDNleCAwIDEuNWV4IDklOwotICAgICovCiAgICAgcGFkZGluZzogMC4zZW0gMCAwLjNlbSAxJTsKIH0KKwogLyogRmllbGRzIHRhYmxlICovCiB0YWJsZS5maWVsZHMgewogICAgIHdpZHRoOiA5MCU7CkBAIC03MCw3ICs2NCw3IEBACiAgICAgbWFyZ2luOiAxLjVleCAwIDAgMDsKIH0KIAotLyogU1RBUlQgRVhQRVJJTUVOVEFMIENPREUgKi8KKy8qIERlZmluZSAnbG9uZycgdGFibGVzICovCiB0YWJsZS5sb25nIHsKICAgICBkaXNwbGF5OiBibG9jazsKICAgICB3aWR0aDogOTMlOwpAQCAtMTE1LDQyICsxMDksOCBAQAogICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKIH0KLS8qIEVORCBFWFBFUklNRU5UQUwgQ09ERSAqLworLyogRW5kICdsb25nJyB0YWJsZSBkZWZpbml0aW9uICovCiAKLS8qIEluZGV4IHRhYmxlICovCi10YWJsZS5pbmRleCB7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKLSAgICBib3JkZXI6IDA7Ci0gICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsKLX0KLXRhYmxlLmluZGV4IHRyIHsKLSAgICBwYWRkaW5nOiAwOwotfQotdGFibGUuaW5kZXggdGQgewotICAgIHBhZGRpbmc6IDA7Ci19Ci10YWJsZS5pbmRleC10b2MtbGluayB7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgYm9yZGVyOiAwOwotICAgIGJvcmRlci1zcGFjaW5nOiAwOwotICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7Ci19Ci10YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsKLSAgICBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07Ci0gICAgZm9udC1zaXplOiA4MyU7Ci0gICAgdGV4dC1hbGlnbjogbGVmdDsKLX0KLXRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7Ci0gICAgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOwotICAgIGZvbnQtc2l6ZTogODMlOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLXRhYmxlLmluZGV4LXRvYy1saW5rIHRkLnJpZ2h0IHsKLSAgICBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07Ci0gICAgZm9udC1zaXplOiA4MyU7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci19CiAvKiB0b2MgdGFibGUgKi8KIHRhYmxlLnRvYyB7CiAgICAgd2lkdGg6IDk1JTsKQEAgLTE3OCw3ICsxMzgsOSBAQAogZGl2LnRpbWVzdGFtcCB7CiAgICAgZm9udC1zaXplOiBzbWFsbDsKIH0KLS8qIE1heCB3aWR0aCBiZWZvcmUgdGhpcyBQQVJUSUNVTEFSIHRhYmxlIGdldHMgbmFzdHkgVGhpcyBxdWVyeSB3aWxsIHRha2UgZWZmZWN0IGZvciBhbnkgc2NyZWVuIHNtYWxsZXIgdGhhbiA3NjBweCBhbmQgYWxzbyBpUGFkcyBzcGVjaWZpY2FsbHkuICovCisKKy8qIENoYW5nZSB0YWJsZSBsYXlvdXQgZm9yIHNtYWxsZXIgc2NyZWVucy4gVGhpcyBxdWVyeSB3aWxsIHRha2UgZWZmZWN0IGZvciBhbnkgc2NyZWVuIHNtYWxsZXIgdGhhbgorICAgNzYwcHggYW5kIGFsc28gaVBhZHMgc3BlY2lmaWNhbGx5LiAqLwogQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjBweCksIChtaW4tZGV2aWNlLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtZGV2aWNlLXdpZHRoOiAxMDI0cHgpIHsKICAgIC8qIEZvcmNlIHRhYmxlIHRvIG5vdCBiZSBsaWtlIHRhYmxlcyBhbnltb3JlICovCiAgICAgdGFibGUsIHRoZWFkLCB0Ym9keSwgdGgsIHRkLCB0ciB7CmRpZmYgLS1naXQgYS9kb2NzL3Jhc3Rlci50eHQgYi9kb2NzL3Jhc3Rlci50eHQKaW5kZXggM2FhMzgyMi4uMWJmNGY2NyAxMDA2NDQKLS0tIGEvZG9jcy9yYXN0ZXIudHh0CisrKyBiL2RvY3MvcmFzdGVyLnR4dApAQCAtNjE4LDcgKzYxOCw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyAgZmlsZSAgaXMgIHBhcnQgIG9mIHRoZSAgRnJlZVR5cGUgIHByb2plY3QsIGFuZCBtYXkgIG9ubHkgYmUgIHVzZWQsCmRpZmYgLS1naXQgYS9kb2NzL3JlbGVhc2UgYi9kb2NzL3JlbGVhc2UKaW5kZXggMWIwYzFlZS4uNjI4ZGRlZCAxMDA2NDQKLS0tIGEvZG9jcy9yZWxlYXNlCisrKyBiL2RvY3MvcmVsZWFzZQpAQCAtMTg5LDcgKzE4OSw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKK0NvcHlyaWdodCAoQykgMjAwMy0yMDIwIGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgIGZpbGUgaXMgIHBhcnQgb2YgIHRoZSBGcmVlVHlwZSAgcHJvamVjdCwgYW5kICBtYXkgb25seSAgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCmluZGV4IDk0NjY2MDMuLmI0NjRlMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEFOU0ktc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIChzcGVjaWZpY2F0aW9uIG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTQxLDUzMyArNDEsOSBAQAogI2luY2x1ZGUgRlRfQ09ORklHX09QVElPTlNfSAogI2luY2x1ZGUgRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSAogCi0KLUZUX0JFR0lOX0hFQURFUgotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqICAgICAgICAgICAgICBQTEFURk9STS1TUEVDSUZJQyBDT05GSUdVUkFUSU9OIE1BQ1JPUwotICAgKgotICAgKiBUaGVzZSBtYWNyb3MgY2FuIGJlIHRvZ2dsZWQgdG8gc3VpdCBhIHNwZWNpZmljIHN5c3RlbS4gIFRoZSBjdXJyZW50IG9uZXMKLSAgICogYXJlIGRlZmF1bHRzIHVzZWQgdG8gY29tcGlsZSBGcmVlVHlwZSBpbiBhbiBBTlNJIEMgZW52aXJvbm1lbnQgKDE2Yml0Ci0gICAqIGNvbXBpbGVycyBhcmUgYWxzbyBzdXBwb3J0ZWQpLiAgQ29weSB0aGlzIGZpbGUgdG8geW91ciBvd24KLSAgICogYGJ1aWxkcy88c3lzdGVtPmAgZGlyZWN0b3J5LCBhbmQgZWRpdCBpdCB0byBwb3J0IHRoZSBlbmdpbmUuCi0gICAqCi0gICAqLwotCi0KLSAgLyogVGhlcmUgYXJlIHN5c3RlbXMgKGxpa2UgdGhlIFRleGFzIEluc3RydW1lbnRzICdDNTR4KSB3aGVyZSBhIGBjaGFyYCAgKi8KLSAgLyogaGFzIDE2fmJpdHMuICBBTlNJfkMgc2F5cyB0aGF0IGBzaXplb2YoY2hhcilgIGlzIGFsd2F5c34xLiAgU2luY2UgYW4gKi8KLSAgLyogYGludGAgaGFzIDE2fmJpdHMgYWxzbyBmb3IgdGhpcyBzeXN0ZW0sIGBzaXplb2YoaW50KWAgZ2l2ZXN+MSB3aGljaCAgKi8KLSAgLyogaXMgcHJvYmFibHkgdW5leHBlY3RlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogYENIQVJfQklUYCAoZGVmaW5lZCBpbiBgbGltaXRzLmhgKSBnaXZlcyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYSAgICAgKi8KLSAgLyogYGNoYXJgIHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotI2lmbmRlZiBGVF9DSEFSX0JJVAotI2RlZmluZSBGVF9DSEFSX0JJVCAgQ0hBUl9CSVQKLSNlbmRpZgotCi0KLSAgLyogVGhlIHNpemUgb2YgYW4gYGludGAgdHlwZS4gKi8KLSNpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJTlRfTUFYID09IDB4RkZGRlVMCi0jZGVmaW5lIEZUX1NJWkVPRl9JTlQgICggMTYgLyBGVF9DSEFSX0JJVCApCi0jZWxpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSU5UX01BWCA9PSAweEZGRkZGRkZGVUwKLSNkZWZpbmUgRlRfU0laRU9GX0lOVCAgKCAzMiAvIEZUX0NIQVJfQklUICkKLSNlbGlmIEZUX1VJTlRfTUFYID4gMHhGRkZGRkZGRlVMICYmIEZUX1VJTlRfTUFYID09IDB4RkZGRkZGRkZGRkZGRkZGRlVMCi0jZGVmaW5lIEZUX1NJWkVPRl9JTlQgICggNjQgLyBGVF9DSEFSX0JJVCApCi0jZWxzZQotI2Vycm9yICJVbnN1cHBvcnRlZCBzaXplIG9mIGBpbnQnIHR5cGUhIgotI2VuZGlmCi0KLSAgLyogVGhlIHNpemUgb2YgYSBgbG9uZ2AgdHlwZS4gIEEgZml2ZS1ieXRlIGBsb25nYCAoYXMgdXNlZCBlLmcuIG9uIHRoZSAqLwotICAvKiBETTY0MikgaXMgcmVjb2duaXplZCBidXQgYXZvaWRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxPTkdfTUFYID09IDB4RkZGRkZGRkZVTAotI2RlZmluZSBGVF9TSVpFT0ZfTE9ORyAgKCAzMiAvIEZUX0NIQVJfQklUICkKLSNlbGlmIEZUX1VMT05HX01BWCA+IDB4RkZGRkZGRkZVTCAmJiBGVF9VTE9OR19NQVggPT0gMHhGRkZGRkZGRkZGVUwKLSNkZWZpbmUgRlRfU0laRU9GX0xPTkcgICggMzIgLyBGVF9DSEFSX0JJVCApCi0jZWxpZiBGVF9VTE9OR19NQVggPiAweEZGRkZGRkZGVUwgJiYgRlRfVUxPTkdfTUFYID09IDB4RkZGRkZGRkZGRkZGRkZGRlVMCi0jZGVmaW5lIEZUX1NJWkVPRl9MT05HICAoIDY0IC8gRlRfQ0hBUl9CSVQgKQotI2Vsc2UKLSNlcnJvciAiVW5zdXBwb3J0ZWQgc2l6ZSBvZiBgbG9uZycgdHlwZSEiCi0jZW5kaWYKLQotCi0gIC8qIGBGVF9VTlVTRURgIGluZGljYXRlcyB0aGF0IGEgZ2l2ZW4gcGFyYW1ldGVyIGlzIG5vdCB1c2VkIC0tICAgKi8KLSAgLyogdGhpcyBpcyBvbmx5IHVzZWQgdG8gZ2V0IHJpZCBvZiB1bnBsZWFzYW50IGNvbXBpbGVyIHdhcm5pbmdzLiAqLwotI2lmbmRlZiBGVF9VTlVTRUQKLSNkZWZpbmUgRlRfVU5VU0VEKCBhcmcgKSAgKCAoYXJnKSA9IChhcmcpICkKLSNlbmRpZgotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqICAgICAgICAgICAgICAgICAgICBBVVRPTUFUSUMgQ09ORklHVVJBVElPTiBNQUNST1MKLSAgICoKLSAgICogVGhlc2UgbWFjcm9zIGFyZSBjb21wdXRlZCBmcm9tIHRoZSBvbmVzIGRlZmluZWQgYWJvdmUuICBEb24ndCB0b3VjaAotICAgKiB0aGVpciBkZWZpbml0aW9uLCB1bmxlc3MgeW91IGtub3cgcHJlY2lzZWx5IHdoYXQgeW91IGFyZSBkb2luZy4gIE5vCi0gICAqIHBvcnRlciBzaG91bGQgbmVlZCB0byBtZXNzIHdpdGggdGhlbS4KLSAgICoKLSAgICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogTWFjIHN1cHBvcnQKLSAgICoKLSAgICogICBUaGlzIGlzIHRoZSBvbmx5IG5lY2Vzc2FyeSBjaGFuZ2UsIHNvIGl0IGlzIGRlZmluZWQgaGVyZSBpbnN0ZWFkCi0gICAqICAgcHJvdmlkaW5nIGEgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAgICovCi0jaWYgZGVmaW5lZCggX19BUFBMRV9fICkgfHwgKCBkZWZpbmVkKCBfX01XRVJLU19fICkgJiYgZGVmaW5lZCggbWFjaW50b3NoICkgKQotICAvKiBObyBDYXJib24gZnJhbWV3b3JrcyBmb3IgNjRiaXQgMTAuNC54LiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBgQXZhaWxhYmlsaXR5TWFjcm9zLmhgIGlzIGF2YWlsYWJsZSBzaW5jZSBNYWMgT1MgWCAxMC4yLCAgICAgICAqLwotICAvKiBzbyBndWVzcyB0aGUgc3lzdGVtIHZlcnNpb24gYnkgbWF4aW11bSBlcnJubyBiZWZvcmUgaW5jbHVzaW9uLiAqLwotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaWZkZWYgRUNBTkNFTEVEIC8qIGRlZmluZWQgc2luY2UgMTAuMiAqLwotI2luY2x1ZGUgIkF2YWlsYWJpbGl0eU1hY3Jvcy5oIgotI2VuZGlmCi0jaWYgZGVmaW5lZCggX19MUDY0X18gKSAmJiBcCi0gICAgKCBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSBNQUNfT1NfWF9WRVJTSU9OXzEwXzQgKQotI3VuZGVmIEZUX01BQ0lOVE9TSAotI2VuZGlmCi0KLSNlbGlmIGRlZmluZWQoIF9fU0NfXyApIHx8IGRlZmluZWQoIF9fTVJDX18gKQotICAvKiBDbGFzc2ljIE1hY09TIGNvbXBpbGVycyAqLwotI2luY2x1ZGUgIkNvbmRpdGlvbmFsTWFjcm9zLmgiCi0jaWYgVEFSR0VUX09TX01BQwotI2RlZmluZSBGVF9NQUNJTlRPU0ggMQotI2VuZGlmCi0KLSNlbmRpZgotCi0KLSAgLyogRml4IGNvbXBpbGVyIHdhcm5pbmcgd2l0aCBzZ2kgY29tcGlsZXIuICovCi0jaWYgZGVmaW5lZCggX19zZ2kgKSAmJiAhZGVmaW5lZCggX19HTlVDX18gKQotI2lmIGRlZmluZWQoIF9DT01QSUxFUl9WRVJTSU9OICkgJiYgKCBfQ09NUElMRVJfVkVSU0lPTiA+PSA3MzAgKQotI3ByYWdtYSBzZXQgd29mZiAzNTA1Ci0jZW5kaWYKLSNlbmRpZgotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEBzZWN0aW9uOgotICAgKiAgIGJhc2ljX3R5cGVzCi0gICAqCi0gICAqLwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEB0eXBlOgotICAgKiAgIEZUX0ludDE2Ci0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBBIHR5cGVkZWYgZm9yIGEgMTZiaXQgc2lnbmVkIGludGVnZXIgdHlwZS4KLSAgICovCi0gIHR5cGVkZWYgc2lnbmVkIHNob3J0ICBGVF9JbnQxNjsKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAdHlwZToKLSAgICogICBGVF9VSW50MTYKLSAgICoKLSAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIEEgdHlwZWRlZiBmb3IgYSAxNmJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUuCi0gICAqLwotICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBGVF9VSW50MTY7Ci0KLSAgLyogKi8KLQotCi0gIC8qIHRoaXMgI2lmIDAgLi4uICNlbmRpZiBjbGF1c2UgaXMgZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMgKi8KLSNpZiAwCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEB0eXBlOgotICAgKiAgIEZUX0ludDMyCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBBIHR5cGVkZWYgZm9yIGEgMzJiaXQgc2lnbmVkIGludGVnZXIgdHlwZS4gIFRoZSBzaXplIGRlcGVuZHMgb24gdGhlCi0gICAqICAgY29uZmlndXJhdGlvbi4KLSAgICovCi0gIHR5cGVkZWYgc2lnbmVkIFhYWCAgRlRfSW50MzI7Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQHR5cGU6Ci0gICAqICAgRlRfVUludDMyCi0gICAqCi0gICAqICAgQSB0eXBlZGVmIGZvciBhIDMyYml0IHVuc2lnbmVkIGludGVnZXIgdHlwZS4gIFRoZSBzaXplIGRlcGVuZHMgb24gdGhlCi0gICAqICAgY29uZmlndXJhdGlvbi4KLSAgICovCi0gIHR5cGVkZWYgdW5zaWduZWQgWFhYICBGVF9VSW50MzI7Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQHR5cGU6Ci0gICAqICAgRlRfSW50NjQKLSAgICoKLSAgICogICBBIHR5cGVkZWYgZm9yIGEgNjRiaXQgc2lnbmVkIGludGVnZXIgdHlwZS4gIFRoZSBzaXplIGRlcGVuZHMgb24gdGhlCi0gICAqICAgY29uZmlndXJhdGlvbi4gIE9ubHkgZGVmaW5lZCBpZiB0aGVyZSBpcyByZWFsIDY0Yml0IHN1cHBvcnQ7Ci0gICAqICAgb3RoZXJ3aXNlLCBpdCBnZXRzIGVtdWxhdGVkIHdpdGggYSBzdHJ1Y3R1cmUgKGlmIG5lY2Vzc2FyeSkuCi0gICAqLwotICB0eXBlZGVmIHNpZ25lZCBYWFggIEZUX0ludDY0OwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEB0eXBlOgotICAgKiAgIEZUX1VJbnQ2NAotICAgKgotICAgKiAgIEEgdHlwZWRlZiBmb3IgYSA2NGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUuICBUaGUgc2l6ZSBkZXBlbmRzIG9uIHRoZQotICAgKiAgIGNvbmZpZ3VyYXRpb24uICBPbmx5IGRlZmluZWQgaWYgdGhlcmUgaXMgcmVhbCA2NGJpdCBzdXBwb3J0OwotICAgKiAgIG90aGVyd2lzZSwgaXQgZ2V0cyBlbXVsYXRlZCB3aXRoIGEgc3RydWN0dXJlIChpZiBuZWNlc3NhcnkpLgotICAgKi8KLSAgdHlwZWRlZiB1bnNpZ25lZCBYWFggIEZUX1VJbnQ2NDsKLQotICAvKiAqLwotCi0jZW5kaWYKLQotI2lmIEZUX1NJWkVPRl9JTlQgPT0gKCAzMiAvIEZUX0NIQVJfQklUICkKLQotICB0eXBlZGVmIHNpZ25lZCBpbnQgICAgICBGVF9JbnQzMjsKLSAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgRlRfVUludDMyOwotCi0jZWxpZiBGVF9TSVpFT0ZfTE9ORyA9PSAoIDMyIC8gRlRfQ0hBUl9CSVQgKQotCi0gIHR5cGVkZWYgc2lnbmVkIGxvbmcgICAgIEZUX0ludDMyOwotICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICBGVF9VSW50MzI7Ci0KLSNlbHNlCi0jZXJyb3IgIm5vIDMyYml0IHR5cGUgZm91bmQgLS0gcGxlYXNlIGNoZWNrIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlcyIKLSNlbmRpZgotCi0KLSAgLyogbG9vayB1cCBhbiBpbnRlZ2VyIHR5cGUgdGhhdCBpcyBhdCBsZWFzdCAzMn5iaXRzICovCi0jaWYgRlRfU0laRU9GX0lOVCA+PSAoIDMyIC8gRlRfQ0hBUl9CSVQgKQotCi0gIHR5cGVkZWYgaW50ICAgICAgICAgICAgRlRfRmFzdDsKLSAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICBGVF9VRmFzdDsKLQotI2VsaWYgRlRfU0laRU9GX0xPTkcgPj0gKCAzMiAvIEZUX0NIQVJfQklUICkKLQotICB0eXBlZGVmIGxvbmcgICAgICAgICAgIEZUX0Zhc3Q7Ci0gIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgRlRfVUZhc3Q7Ci0KLSNlbmRpZgotCi0KLSAgLyogZGV0ZXJtaW5lIHdoZXRoZXIgd2UgaGF2ZSBhIDY0LWJpdCBgaW50YCB0eXBlIGZvciBwbGF0Zm9ybXMgd2l0aG91dCAqLwotICAvKiBBdXRvY29uZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWYgRlRfU0laRU9GX0xPTkcgPT0gKCA2NCAvIEZUX0NIQVJfQklUICkKLQotICAvKiBgRlRfTE9ORzY0YCBtdXN0IGJlIGRlZmluZWQgaWYgYSA2NC1iaXQgdHlwZSBpcyBhdmFpbGFibGUgKi8KLSNkZWZpbmUgRlRfTE9ORzY0Ci0jZGVmaW5lIEZUX0lOVDY0ICAgbG9uZwotI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcKLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQSA2NC1iaXQgZGF0YSB0eXBlIG1heSBjcmVhdGUgY29tcGlsYXRpb24gcHJvYmxlbXMgaWYgeW91IGNvbXBpbGUgaW4KLSAgICogc3RyaWN0IEFOU0kgbW9kZS4gIFRvIGF2b2lkIHRoZW0sIHdlIGRpc2FibGUgb3RoZXIgNjQtYml0IGRhdGEgdHlwZXMgaWYKLSAgICogYF9fU1REQ19fYCBpcyBkZWZpbmVkLiAgWW91IGNhbiBob3dldmVyIGlnbm9yZSB0aGlzIHJ1bGUgYnkgZGVmaW5pbmcgdGhlCi0gICAqIGBGVF9DT05GSUdfT1BUSU9OX0ZPUkNFX0lOVDY0YCBjb25maWd1cmF0aW9uIG1hY3JvLgotICAgKi8KLSNlbGlmICFkZWZpbmVkKCBfX1NURENfXyApIHx8IGRlZmluZWQoIEZUX0NPTkZJR19PUFRJT05fRk9SQ0VfSU5UNjQgKQotCi0jaWYgZGVmaW5lZCggX19TVERDX1ZFUlNJT05fXyApICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotCi0jZGVmaW5lIEZUX0xPTkc2NAotI2RlZmluZSBGVF9JTlQ2NCAgIGxvbmcgbG9uZyBpbnQKLSNkZWZpbmUgRlRfVUlOVDY0ICB1bnNpZ25lZCBsb25nIGxvbmcgaW50Ci0KLSNlbGlmIGRlZmluZWQoIF9NU0NfVkVSICkgJiYgX01TQ19WRVIgPj0gOTAwIC8qIFZpc3VhbCBDKysgKGFuZCBJbnRlbCBDKyspICovCi0KLSAgLyogdGhpcyBjb21waWxlciBwcm92aWRlcyB0aGUgYF9faW50NjRgIHR5cGUgKi8KLSNkZWZpbmUgRlRfTE9ORzY0Ci0jZGVmaW5lIEZUX0lOVDY0ICAgX19pbnQ2NAotI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIF9faW50NjQKLQotI2VsaWYgZGVmaW5lZCggX19CT1JMQU5EQ19fICkgIC8qIEJvcmxhbmQgQysrICovCi0KLSAgLyogWFhYWDogV2Ugc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSB2YWx1ZSBvZiBgX19CT1JMQU5EQ19fYCBpbiBvcmRlciAqLwotICAvKiAgICAgICB0byB0ZXN0IHRoZSBjb21waWxlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogdGhpcyBjb21waWxlciBwcm92aWRlcyB0aGUgYF9faW50NjRgIHR5cGUgKi8KLSNkZWZpbmUgRlRfTE9ORzY0Ci0jZGVmaW5lIEZUX0lOVDY0ICAgX19pbnQ2NAotI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIF9faW50NjQKLQotI2VsaWYgZGVmaW5lZCggX19XQVRDT01DX18gKSAgIC8qIFdhdGNvbSBDKysgKi8KLQotICAvKiBXYXRjb20gZG9lc24ndCBwcm92aWRlIDY0LWJpdCBkYXRhIHR5cGVzICovCi0KLSNlbGlmIGRlZmluZWQoIF9fTVdFUktTX18gKSAgICAvKiBNZXRyb3dlcmtzIENvZGVXYXJyaW9yICovCi0KLSNkZWZpbmUgRlRfTE9ORzY0Ci0jZGVmaW5lIEZUX0lOVDY0ICAgbG9uZyBsb25nIGludAotI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKLQotI2VsaWYgZGVmaW5lZCggX19HTlVDX18gKQotCi0gIC8qIEdDQyBwcm92aWRlcyB0aGUgYGxvbmcgbG9uZ2AgdHlwZSAqLwotI2RlZmluZSBGVF9MT05HNjQKLSNkZWZpbmUgRlRfSU5UNjQgICBsb25nIGxvbmcgaW50Ci0jZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgbG9uZyBsb25nIGludAotCi0jZW5kaWYgLyogX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMICovCi0KLSNlbmRpZiAvKiBGVF9TSVpFT0ZfTE9ORyA9PSAoNjQgLyBGVF9DSEFSX0JJVCkgKi8KLQotI2lmZGVmIEZUX0xPTkc2NAotICB0eXBlZGVmIEZUX0lOVDY0ICAgRlRfSW50NjQ7Ci0gIHR5cGVkZWYgRlRfVUlOVDY0ICBGVF9VSW50NjQ7Ci0jZW5kaWYKLQotCi0jaWZkZWYgX1dJTjY0Ci0gIC8qIG9ubHkgNjRiaXQgV2luZG93cyB1c2VzIHRoZSBMTFA2NCBkYXRhIG1vZGVsLCBpLmUuLCAqLwotICAvKiAzMmJpdCBpbnRlZ2VycywgNjRiaXQgcG9pbnRlcnMgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRlRfVUlOVF9UT19QT0lOVEVSKCB4ICkgKHZvaWQqKSh1bnNpZ25lZCBfX2ludDY0KSh4KQotI2Vsc2UKLSNkZWZpbmUgRlRfVUlOVF9UT19QT0lOVEVSKCB4ICkgKHZvaWQqKSh1bnNpZ25lZCBsb25nKSh4KQotI2VuZGlmCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogbWlzY2VsbGFuZW91cwotICAgKgotICAgKi8KLQotCi0jZGVmaW5lIEZUX0JFR0lOX1NUTU5UICBkbyB7Ci0jZGVmaW5lIEZUX0VORF9TVE1OVCAgICB9IHdoaWxlICggMCApCi0jZGVmaW5lIEZUX0RVTU1ZX1NUTU5UICBGVF9CRUdJTl9TVE1OVCBGVF9FTkRfU1RNTlQKLQotCi0gIC8qIGB0eXBlb2ZgIGNvbmRpdGlvbiB0YWtlbiBmcm9tIGdudWxpYidzIGBpbnRwcm9wcy5oYCBoZWFkZXIgZmlsZSAqLwotI2lmICggKCBkZWZpbmVkKCBfX0dOVUNfXyApICYmIF9fR05VQ19fID49IDIgKSAgICAgICAgICAgICAgICAgICAgICAgfHwgXAotICAgICAgKCBkZWZpbmVkKCBfX0lCTUNfXyApICYmIF9fSUJNQ19fID49IDEyMTAgJiYgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkZWZpbmVkKCBfX0lCTV9fVFlQRU9GX18gKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAotICAgICAgKCBkZWZpbmVkKCBfX1NVTlBST19DICkgJiYgX19TVU5QUk9fQyA+PSAweDUxMTAgJiYgIV9fU1REQ19fICkgKQotI2RlZmluZSBGVF9UWVBFT0YoIHR5cGUgKSAgKCBfX3R5cGVvZl9fICggdHlwZSApICkKLSNlbHNlCi0jZGVmaW5lIEZUX1RZUEVPRiggdHlwZSApICAvKiBlbXB0eSAqLwotI2VuZGlmCi0KLQotICAvKiBVc2UgYEZUX0xPQ0FMYCBhbmQgYEZUX0xPQ0FMX0RFRmAgdG8gZGVjbGFyZSBhbmQgZGVmaW5lLCAgICAgICAgICAgICovCi0gIC8qIHJlc3BlY3RpdmVseSwgYSBmdW5jdGlvbiB0aGF0IGdldHMgdXNlZCBvbmx5IHdpdGhpbiB0aGUgc2NvcGUgb2YgYSAgKi8KLSAgLyogbW9kdWxlLiAgTm9ybWFsbHksIGJvdGggdGhlIGhlYWRlciBhbmQgc291cmNlIGNvZGUgZmlsZXMgZm9yIHN1Y2ggYSAqLwotICAvKiBmdW5jdGlvbiBhcmUgd2l0aGluIGEgc2luZ2xlIG1vZHVsZSBkaXJlY3RvcnkuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSW50cmEtbW9kdWxlIGFycmF5cyBzaG91bGQgYmUgdGFnZ2VkIHdpdGggYEZUX0xPQ0FMX0FSUkFZYCBhbmQgICAgICAqLwotICAvKiBgRlRfTE9DQUxfQVJSQVlfREVGYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZmRlZiBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCi0KLSNkZWZpbmUgRlRfTE9DQUwoIHggKSAgICAgIHN0YXRpYyAgeAotI2RlZmluZSBGVF9MT0NBTF9ERUYoIHggKSAgc3RhdGljICB4Ci0KLSNlbHNlCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9MT0NBTCggeCApICAgICAgZXh0ZXJuICJDIiAgeAotI2RlZmluZSBGVF9MT0NBTF9ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfTE9DQUwoIHggKSAgICAgIGV4dGVybiAgeAotI2RlZmluZSBGVF9MT0NBTF9ERUYoIHggKSAgeAotI2VuZGlmCi0KLSNlbmRpZiAvKiBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUICovCi0KLSNkZWZpbmUgRlRfTE9DQUxfQVJSQVkoIHggKSAgICAgIGV4dGVybiBjb25zdCAgeAotI2RlZmluZSBGVF9MT0NBTF9BUlJBWV9ERUYoIHggKSAgY29uc3QgIHgKLQotCi0gIC8qIFVzZSBgRlRfQkFTRWAgYW5kIGBGVF9CQVNFX0RFRmAgdG8gZGVjbGFyZSBhbmQgZGVmaW5lLCByZXNwZWN0aXZlbHksICovCi0gIC8qIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGluIG1vcmUgdGhhbiBhIHNpbmdsZSBtb2R1bGUuICBJbiB0aGUgICAgICAgICovCi0gIC8qIGN1cnJlbnQgc2V0dXAgdGhpcyBpbXBsaWVzIHRoYXQgdGhlIGRlY2xhcmF0aW9uIGlzIGluIGEgaGVhZGVyIGZpbGUgICovCi0gIC8qIGluIHRoZSBgaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbGAgZGlyZWN0b3J5LCBhbmQgdGhlIGZ1bmN0aW9uIGJvZHkgICovCi0gIC8qIGlzIGluIGEgZmlsZSBpbiBgc3JjL2Jhc2VgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWZuZGVmIEZUX0JBU0UKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jZGVmaW5lIEZUX0JBU0UoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfQkFTRSggeCApICBleHRlcm4gIHgKLSNlbmRpZgotCi0jZW5kaWYgLyogIUZUX0JBU0UgKi8KLQotCi0jaWZuZGVmIEZUX0JBU0VfREVGCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9CQVNFX0RFRiggeCApICB4Ci0jZWxzZQotI2RlZmluZSBGVF9CQVNFX0RFRiggeCApICB4Ci0jZW5kaWYKLQotI2VuZGlmIC8qICFGVF9CQVNFX0RFRiAqLwotCi0KLSAgLyogV2hlbiBjb21waWxpbmcgRnJlZVR5cGUgYXMgYSBETEwgb3IgRFNPIHdpdGggaGlkZGVuIHZpc2liaWxpdHkgICAgKi8KLSAgLyogc29tZSBzeXN0ZW1zL2NvbXBpbGVycyBuZWVkIGEgc3BlY2lhbCBhdHRyaWJ1dGUgaW4gZnJvbnQgT1IgYWZ0ZXIgKi8KLSAgLyogdGhlIHJldHVybiB0eXBlIG9mIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVHdvIG1hY3JvcyBhcmUgdXNlZCB3aXRoaW4gdGhlIEZyZWVUeXBlIHNvdXJjZSBjb2RlIHRvIGRlZmluZSAgICAgKi8KLSAgLyogZXhwb3J0ZWQgbGlicmFyeSBmdW5jdGlvbnM6IGBGVF9FWFBPUlRgIGFuZCBgRlRfRVhQT1JUX0RFRmAuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLSBgRlRfRVhQT1JUKCByZXR1cm5fdHlwZSApYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBpcyB1c2VkIGluIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24sIGFzIGluICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0luaXRfRnJlZVR5cGUoIEZUX0xpYnJhcnkqICBhbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLSBgRlRfRVhQT1JUX0RFRiggcmV0dXJuX3R5cGUgKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBpcyB1c2VkIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgYXMgaW4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0luaXRfRnJlZVR5cGUoIEZUX0xpYnJhcnkqICBhbGlicmFyeSApICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgLi4uIHNvbWUgY29kZSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogWW91IGNhbiBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIGBGVF9FWFBPUlRgIGFuZCAgICAgICAgKi8KLSAgLyogYEZUX0VYUE9SVF9ERUZgIGhlcmUgaWYgeW91IHdhbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVG8gZXhwb3J0IGEgdmFyaWFibGUsIHVzZSBgRlRfRVhQT1JUX1ZBUmAuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZm5kZWYgRlRfRVhQT1JUCi0KLSNpZmRlZiBGVDJfQlVJTERfTElCUkFSWQotCi0jaWYgZGVmaW5lZCggX1dJTjMyICkgJiYgZGVmaW5lZCggRExMX0VYUE9SVCApCi0jZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2RlY2xzcGVjKCBkbGxleHBvcnQgKSAgeAotI2VsaWYgZGVmaW5lZCggX19HTlVDX18gKSAmJiBfX0dOVUNfXyA+PSA0Ci0jZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2F0dHJpYnV0ZV9fKCggdmlzaWJpbGl0eSggImRlZmF1bHQiICkgKSkgIHgKLSNlbGlmIGRlZmluZWQoIF9fU1VOUFJPX0MgKSAmJiBfX1NVTlBST19DID49IDB4NTUwCi0jZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2dsb2JhbCAgeAotI2VsaWYgZGVmaW5lZCggX19jcGx1c3BsdXMgKQotI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIGV4dGVybiAgeAotI2VuZGlmCi0KLSNlbHNlCi0KLSNpZiBkZWZpbmVkKCBfV0lOMzIgKSAmJiBkZWZpbmVkKCBETExfSU1QT1JUICkKLSNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIF9fZGVjbHNwZWMoIGRsbGltcG9ydCApICB4Ci0jZWxpZiBkZWZpbmVkKCBfX2NwbHVzcGx1cyApCi0jZGVmaW5lIEZUX0VYUE9SVCggeCApICBleHRlcm4gIkMiICB4Ci0jZWxzZQotI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgZXh0ZXJuICB4Ci0jZW5kaWYKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhRlRfRVhQT1JUICovCi0KLQotI2lmbmRlZiBGVF9FWFBPUlRfREVGCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9FWFBPUlRfREVGKCB4ICkgIGV4dGVybiAiQyIgIHgKLSNlbHNlCi0jZGVmaW5lIEZUX0VYUE9SVF9ERUYoIHggKSAgZXh0ZXJuICB4Ci0jZW5kaWYKLQotI2VuZGlmIC8qICFGVF9FWFBPUlRfREVGICovCi0KLQotI2lmbmRlZiBGVF9FWFBPUlRfVkFSCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9FWFBPUlRfVkFSKCB4ICkgIGV4dGVybiAiQyIgIHgKLSNlbHNlCi0jZGVmaW5lIEZUX0VYUE9SVF9WQVIoIHggKSAgZXh0ZXJuICB4Ci0jZW5kaWYKLQotI2VuZGlmIC8qICFGVF9FWFBPUlRfVkFSICovCi0KLQotICAvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgbmVlZGVkIHRvIGNvbXBpbGUgdGhlIGxpYnJhcnkgd2l0aCBhICAgKi8KLSAgLyogQysrIGNvbXBpbGVyIGFuZCB3aXRoIDE2Yml0IGNvbXBpbGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIC8qIFRoaXMgaXMgc3BlY2lhbC4gIFdpdGhpbiBDKyssIHlvdSBtdXN0IHNwZWNpZnkgYGV4dGVybiAiQyJgIGZvciAqLwotICAvKiBmdW5jdGlvbnMgd2hpY2ggYXJlIHVzZWQgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzLCBhbmQgeW91IGFsc28gICAgKi8KLSAgLyogbXVzdCBkbyB0aGF0IGZvciBzdHJ1Y3R1cmVzIHdoaWNoIGNvbnRhaW4gZnVuY3Rpb24gcG9pbnRlcnMgdG8gICovCi0gIC8qIGFzc3VyZSBDIGxpbmthZ2UgLS0gaXQncyBub3QgcG9zc2libGUgdG8gaGF2ZSAobG9jYWwpIGFub255bW91cyAqLwotICAvKiBmdW5jdGlvbnMgd2hpY2ggYXJlIGFjY2Vzc2VkIGJ5IChnbG9iYWwpIGZ1bmN0aW9uIHBvaW50ZXJzLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGVF9DQUxMQkFDS19ERUYgaXMgdXNlZCB0byBfZGVmaW5lXyBhIGNhbGxiYWNrIGZ1bmN0aW9uLCAgICAgICAgKi8KLSAgLyogbG9jYXRlZCBpbiB0aGUgc2FtZSBzb3VyY2UgY29kZSBmaWxlIGFzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB1c2VzICovCi0gIC8qIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRlRfQkFTRV9DQUxMQkFDSyBhbmQgRlRfQkFTRV9DQUxMQkFDS19ERUYgYXJlIHVzZWQgdG8gZGVjbGFyZSAgICovCi0gIC8qIGFuZCBkZWZpbmUgYSBjYWxsYmFjayBmdW5jdGlvbiwgcmVzcGVjdGl2ZWx5LCBpbiBhIHNpbWlsYXIgd2F5ICAqLwotICAvKiBhcyBGVF9CQVNFIGFuZCBGVF9CQVNFX0RFRiB3b3JrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZUX0NBTExCQUNLX1RBQkxFIGlzIHVzZWQgdG8gX2RlY2xhcmVfIGEgY29uc3RhbnQgdmFyaWFibGUgdGhhdCAqLwotICAvKiBjb250YWlucyBwb2ludGVycyB0byBjYWxsYmFjayBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZUX0NBTExCQUNLX1RBQkxFX0RFRiBpcyB1c2VkIHRvIF9kZWZpbmVfIGEgY29uc3RhbnQgdmFyaWFibGUgICAqLwotICAvKiB0aGF0IGNvbnRhaW5zIHBvaW50ZXJzIHRvIGNhbGxiYWNrIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTb21lIDE2Yml0IGNvbXBpbGVycyBoYXZlIHRvIHJlZGVmaW5lIHRoZXNlIG1hY3JvcyB0byBpbnNlcnQgICAgKi8KLSAgLyogdGhlIGluZmFtb3VzIGBfY2RlY2xgIG9yIGBfX2Zhc3RjYWxsYCBkZWNsYXJhdGlvbnMuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmbmRlZiBGVF9DQUxMQkFDS19ERUYKLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9DQUxMQkFDS19ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfQ0FMTEJBQ0tfREVGKCB4ICkgIHN0YXRpYyAgeAotI2VuZGlmCi0jZW5kaWYgLyogRlRfQ0FMTEJBQ0tfREVGICovCi0KLSNpZm5kZWYgRlRfQkFTRV9DQUxMQkFDSwotI2lmZGVmIF9fY3BsdXNwbHVzCi0jZGVmaW5lIEZUX0JBU0VfQ0FMTEJBQ0soIHggKSAgICAgIGV4dGVybiAiQyIgIHgKLSNkZWZpbmUgRlRfQkFTRV9DQUxMQkFDS19ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAotI2Vsc2UKLSNkZWZpbmUgRlRfQkFTRV9DQUxMQkFDSyggeCApICAgICAgZXh0ZXJuICB4Ci0jZGVmaW5lIEZUX0JBU0VfQ0FMTEJBQ0tfREVGKCB4ICkgIHgKLSNlbmRpZgotI2VuZGlmIC8qIEZUX0JBU0VfQ0FMTEJBQ0sgKi8KLQotI2lmbmRlZiBGVF9DQUxMQkFDS19UQUJMRQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFICAgICAgZXh0ZXJuICJDIgotI2RlZmluZSBGVF9DQUxMQkFDS19UQUJMRV9ERUYgIGV4dGVybiAiQyIKLSNlbHNlCi0jZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFICAgICAgZXh0ZXJuCi0jZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFX0RFRiAgLyogbm90aGluZyAqLwotI2VuZGlmCi0jZW5kaWYgLyogRlRfQ0FMTEJBQ0tfVEFCTEUgKi8KLQotCi1GVF9FTkRfSEVBREVSCi0KKyNpbmNsdWRlIDxmcmVldHlwZS9jb25maWcvaW50ZWdlci10eXBlcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2NvbmZpZy9wdWJsaWMtbWFjcm9zLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvY29uZmlnL21hYy1zdXBwb3J0Lmg+CiAKICNlbmRpZiAvKiBGVENPTkZJR19IXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaAppbmRleCA2OTZkNmJhLi4yOGI1Y2M2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBCdWlsZCBtYWNyb3Mgb2YgdGhlIEZyZWVUeXBlIDIgbGlicmFyeS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0zMCwxMCArMzAsMTIgQEAKICAgLyogICAgZW5jYXBzdWxhdGVkIGluIGFuIGBleHRlcm4gIkMiIHsgLi4gfWAgYmxvY2sgd2hlbiBpbmNsdWRlZCBmcm9tIGEgICovCiAgIC8qICAgIEMrKyBjb21waWxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBGVF9CRUdJTl9IRUFERVIgIGV4dGVybiAiQyIgewotI2Vsc2UKLSNkZWZpbmUgRlRfQkVHSU5fSEVBREVSICAvKiBub3RoaW5nICovCisjaWZuZGVmIEZUX0JFR0lOX0hFQURFUgorIyAgaWZkZWYgX19jcGx1c3BsdXMKKyMgICAgZGVmaW5lIEZUX0JFR0lOX0hFQURFUiAgZXh0ZXJuICJDIiB7CisjICBlbHNlCisjICBkZWZpbmUgRlRfQkVHSU5fSEVBREVSICAvKiBub3RoaW5nICovCisjICBlbmRpZgogI2VuZGlmCiAKIApAQCAtNDgsMTAgKzUwLDEyIEBACiAgIC8qICAgIGVuY2Fwc3VsYXRlZCBpbiBhbiBgZXh0ZXJuICJDIiB7IC4uIH1gIGJsb2NrIHdoZW4gaW5jbHVkZWQgZnJvbSBhICAqLwogICAvKiAgICBDKysgY29tcGlsZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLSNkZWZpbmUgRlRfRU5EX0hFQURFUiAgfQotI2Vsc2UKLSNkZWZpbmUgRlRfRU5EX0hFQURFUiAgLyogbm90aGluZyAqLworI2lmbmRlZiBGVF9FTkRfSEVBREVSCisjICBpZmRlZiBfX2NwbHVzcGx1cworIyAgICBkZWZpbmUgRlRfRU5EX0hFQURFUiAgfQorIyAgZWxzZQorIyAgIGRlZmluZSBGVF9FTkRfSEVBREVSICAvKiBub3RoaW5nICovCisjICBlbmRpZgogI2VuZGlmCiAKIApAQCAtNzMsOSArNzcsMTYgQEAKICAgICogICBNYWNybyBkZWZpbml0aW9ucyB1c2VkIHRvIGAjaW5jbHVkZWAgc3BlY2lmaWMgaGVhZGVyIGZpbGVzLgogICAgKgogICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIGRlZmluZWQgdG8gdGhlIG5hbWUgb2Ygc3BlY2lmaWMgRnJlZVR5cGV+MgotICAgKiAgIGhlYWRlciBmaWxlcy4gIFRoZXkgY2FuIGJlIHVzZWQgZGlyZWN0bHkgaW4gYCNpbmNsdWRlYCBzdGF0ZW1lbnRzIGFzCi0gICAqICAgaW46CisgICAqICAgSW4gYWRkaXRpb24gdG8gdGhlIG5vcm1hbCBzY2hlbWUgb2YgaW5jbHVkaW5nIGhlYWRlciBmaWxlcyBsaWtlCisgICAqCisgICAqICAgYGBgCisgICAqICAgICAjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KKyAgICogICAgICNpbmNsdWRlIDxmcmVldHlwZS9mdG1tLmg+CisgICAqICAgICAjaW5jbHVkZSA8ZnJlZXR5cGUvZnRnbHlwaC5oPgorICAgKiAgIGBgYAorICAgKgorICAgKiAgIGl0IGlzIHBvc3NpYmxlIHRvIHVzZWQgbmFtZWQgbWFjcm9zIGluc3RlYWQuICBUaGV5IGNhbiBiZSB1c2VkCisgICAqICAgZGlyZWN0bHkgaW4gYCNpbmNsdWRlYCBzdGF0ZW1lbnRzIGFzIGluCiAgICAqCiAgICAqICAgYGBgCiAgICAqICAgICAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICkBAIC04MywxMyArOTQsOSBAQAogICAgKiAgICAgI2luY2x1ZGUgRlRfR0xZUEhfSAogICAgKiAgIGBgYAogICAgKgotICAgKiAgIFRoZXJlIGFyZSBzZXZlcmFsIHJlYXNvbnMgd2h5IHdlIGFyZSBub3cgdXNpbmcgbWFjcm9zIHRvIG5hbWUgcHVibGljCi0gICAqICAgaGVhZGVyIGZpbGVzLiAgVGhlIGZpcnN0IG9uZSBpcyB0aGF0IHN1Y2ggbWFjcm9zIGFyZSBub3QgbGltaXRlZCB0bwotICAgKiAgIHRoZSBpbmZhbW91cyA4LjN+bmFtaW5nIHJ1bGUgcmVxdWlyZWQgYnkgRE9TIChhbmQKLSAgICogICBgRlRfTVVMVElQTEVfTUFTVEVSU19IYCBpcyBhIGxvdCBtb3JlIG1lYW5pbmdmdWwgdGhhbiBgZnRtbS5oYCkuCi0gICAqCi0gICAqICAgVGhlIHNlY29uZCByZWFzb24gaXMgdGhhdCBpdCBhbGxvd3MgZm9yIG1vcmUgZmxleGliaWxpdHkgaW4gdGhlIHdheQotICAgKiAgIEZyZWVUeXBlfjIgaXMgaW5zdGFsbGVkIG9uIGEgZ2l2ZW4gc3lzdGVtLgorICAgKiAgIFRoZXNlIG1hY3JvcyB3ZXJlIGludHJvZHVjZWQgdG8gb3ZlcmNvbWUgdGhlIGluZmFtb3VzIDguM35uYW1pbmcgcnVsZQorICAgKiAgIHJlcXVpcmVkIGJ5IERPUyAoYW5kIGBGVF9NVUxUSVBMRV9NQVNURVJTX0hgIGlzIGEgbG90IG1vcmUgbWVhbmluZ2Z1bAorICAgKiAgIHRoYW4gYGZ0bW0uaGApLgogICAgKgogICAgKi8KIApAQCAtNzk3LDE2ICs4MDQsMTkgQEAKICNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfSU1BR0VfSCAgICBGVF9DQUNIRV9ICiAjZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX1NCSVRTX0ggICAgRlRfQ0FDSEVfSAogCi0KLSAgLyoKLSAgICogSW5jbHVkZSBpbnRlcm5hbCBoZWFkZXJzIGRlZmluaXRpb25zIGZyb20gYDxpbnRlcm5hbC8uLi4+YCBvbmx5IHdoZW4KLSAgICogYnVpbGRpbmcgdGhlIGxpYnJhcnkuCi0gICAqLworLyogVE9ETyhkYXZpZCk6IE1vdmUgdGhpcyBzZWN0aW9uIGJlbG93IHRvIGEgZGlmZmVyZW50IGhlYWRlciAqLwogI2lmZGVmIEZUMl9CVUlMRF9MSUJSQVJZCi0jZGVmaW5lICBGVF9JTlRFUk5BTF9JTlRFUk5BTF9IICA8ZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0lOVEVSTkFMX0gKLSNlbmRpZiAvKiBGVDJfQlVJTERfTElCUkFSWSAqLworI2lmIGRlZmluZWQoIF9NU0NfVkVSICkgICAgICAvKiBWaXN1YWwgQysrIChhbmQgSW50ZWwgQysrKSAqLwogCisgIC8qIFdlIGRpc2FibGUgdGhlIHdhcm5pbmcgYGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQnIGhlcmUgKi8KKyAgLyogaW4gb3JkZXIgdG8gY29tcGlsZSBjbGVhbmx5IHdpdGggdGhlIG1heGltdW0gbGV2ZWwgb2Ygd2FybmluZ3MuICAqLworICAvKiBJbiBwYXJ0aWN1bGFyLCB0aGUgd2FybmluZyBjb21wbGFpbnMgYWJvdXQgc3R1ZmYgbGlrZSBgd2hpbGUoMCknICovCisgIC8qIHdoaWNoIGlzIHZlcnkgdXNlZnVsIGluIG1hY3JvIGRlZmluaXRpb25zLiAgVGhlcmUgaXMgbm8gYmVuZWZpdCAgKi8KKyAgLyogaW4gaGF2aW5nIGl0IGVuYWJsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlIDogNDEyNyApCisKKyNlbmRpZiAvKiBfTVNDX1ZFUiAqLworI2VuZGlmIC8qIEZUMl9CVUlMRF9MSUJSQVJZICovCiAKICNlbmRpZiAvKiBGVEhFQURFUl9IXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaAppbmRleCA1YWMwOGMxLi5kNjA0YWZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmgKQEAgLTI1LDggKzI1LDYgQEAKIEZUX1VTRV9NT0RVTEUoIEZUX1JlbmRlcmVyX0NsYXNzLCBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzICkKIEZUX1VTRV9NT0RVTEUoIEZUX01vZHVsZV9DbGFzcywgc2ZudF9tb2R1bGVfY2xhc3MgKQogRlRfVVNFX01PRFVMRSggRlRfUmVuZGVyZXJfQ2xhc3MsIGZ0X3Ntb290aF9yZW5kZXJlcl9jbGFzcyApCi1GVF9VU0VfTU9EVUxFKCBGVF9SZW5kZXJlcl9DbGFzcywgZnRfc21vb3RoX2xjZF9yZW5kZXJlcl9jbGFzcyApCi1GVF9VU0VfTU9EVUxFKCBGVF9SZW5kZXJlcl9DbGFzcywgZnRfc21vb3RoX2xjZHZfcmVuZGVyZXJfY2xhc3MgKQogLy9GVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIGJkZl9kcml2ZXJfY2xhc3MgKQogCiAvKiBFT0YgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCmluZGV4IDhhYmQ3NDEuLjNjN2I3MWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFVzZXItc2VsZWN0YWJsZSBjb25maWd1cmF0aW9uIG1hY3JvcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC00Miw3ICs0Miw3IEBACiAgICAqICAgdGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkgdGhhdCBpcyBpbmNsdWRlZCBfYmVmb3JlXyB0aGUgRnJlZVR5cGUgaW5jbHVkZQogICAgKiAgIHBhdGggZHVyaW5nIGNvbXBpbGF0aW9uLgogICAgKgotICAgKiAgIFRoZSBkZWZhdWx0IEZyZWVUeXBlIE1ha2VmaWxlcyBhbmQgSmFtZmlsZXMgdXNlIHRoZSBidWlsZCBkaXJlY3RvcnkKKyAgICogICBUaGUgZGVmYXVsdCBGcmVlVHlwZSBNYWtlZmlsZXMgdXNlIHRoZSBidWlsZCBkaXJlY3RvcnkKICAgICogICBgYnVpbGRzLzxzeXN0ZW0+YCBieSBkZWZhdWx0LCBidXQgeW91IGNhbiBlYXNpbHkgY2hhbmdlIHRoYXQgZm9yIHlvdXIKICAgICogICBvd24gcHJvamVjdHMuCiAgICAqCkBAIC0xMjIsMTAgKzEyMiw4IEBACiAgICAqIG1pdGlnYXRlIGNvbG9yIGZyaW5nZXMgaW5oZXJlbnQgdG8gdGhpcyB0ZWNobm9sb2d5LCB5b3UgYWxzbyBuZWVkIHRvCiAgICAqIGV4cGxpY2l0bHkgc2V0IHVwIExDRCBmaWx0ZXJpbmcuCiAgICAqCi0gICAqIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgaXMgY292ZXJlZCBieSBzZXZlcmFsIE1pY3Jvc29mdCBwYXRlbnRzIGFuZAotICAgKiBzaG91bGQgbm90IGJlIGFjdGl2YXRlZCBpbiBhbnkgZGVmYXVsdCBidWlsZCBvZiB0aGUgbGlicmFyeS4gIFdoZW4gdGhpcwotICAgKiBtYWNybyBpcyBub3QgZGVmaW5lZCwgRnJlZVR5cGUgb2ZmZXJzIGFsdGVybmF0aXZlIExDRCByZW5kZXJpbmcKLSAgICogdGVjaG5vbG9neSB0aGF0IHByb2R1Y2VzIGV4Y2VsbGVudCBvdXRwdXQgd2l0aG91dCBMQ0QgZmlsdGVyaW5nLgorICAgKiBXaGVuIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQsIEZyZWVUeXBlIG9mZmVycyBhbHRlcm5hdGl2ZSBMQ0QKKyAgICogcmVuZGVyaW5nIHRlY2hub2xvZ3kgdGhhdCBwcm9kdWNlcyBleGNlbGxlbnQgb3V0cHV0LgogICAgKi8KIC8qICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgKi8KIApAQCAtMjk2LDYgKzI5NCwyMiBAQAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgorICAgKiBCcm90bGkgc3VwcG9ydC4KKyAgICoKKyAgICogICBGcmVlVHlwZSB1c2VzIHRoZSBCcm90bGkgbGlicmFyeSB0byBwcm92aWRlIHN1cHBvcnQgZm9yIGRlY29tcHJlc3NpbmcKKyAgICogICBXT0ZGMiBzdHJlYW1zLgorICAgKgorICAgKiAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzICdmZWF0dXJlJy4KKyAgICoKKyAgICogICBJZiB5b3UgdXNlIGEgYnVpbGQgc3lzdGVtIGxpa2UgY21ha2Ugb3IgdGhlIGBjb25maWd1cmVgIHNjcmlwdCwKKyAgICogICBvcHRpb25zIHNldCBieSB0aG9zZSBwcm9ncmFtcyBoYXZlIHByZWNlZGVuY2UsIG92ZXJ3cml0aW5nIHRoZSB2YWx1ZQorICAgKiAgIGhlcmUgd2l0aCB0aGUgY29uZmlndXJlZCBvbmUuCisgICAqLworLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9CUk9UTEkgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgogICAgKiBHbHlwaCBQb3N0c2NyaXB0IE5hbWVzIGhhbmRsaW5nCiAgICAqCiAgICAqICAgQnkgZGVmYXVsdCwgRnJlZVR5cGUgMiBpcyBjb21waWxlZCB3aXRoIHRoZSAncHNuYW1lcycgbW9kdWxlLiAgVGhpcwpAQCAtNTI5LDcgKzU0Myw3IEBACiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqCi0gICAqIERlZmluZSBgVFRfQ09ORklHX09QVElPTl9DT0xPUl9MQVlFUlNgIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgY29sb3VyZWQKKyAgICogRGVmaW5lIGBUVF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSU2AgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBjb2xvcmVkCiAgICAqIG91dGxpbmVzIChmcm9tIHRoZSAnQ09MUicvJ0NQQUwnIHRhYmxlcykgaW4gYWxsIGZvcm1hdHMgdXNpbmcgdGhlICdzZm50JwogICAgKiBtb2R1bGUgKG5hbWVseSBUcnVlVHlwZX4mIE9wZW5UeXBlKS4KICAgICovCkBAIC04NzcsOSArODkxLDExIEBACiAgICAqCiAgICAqIENvbXBpbGUgJ2F1dG9maXQnIG1vZHVsZSB3aXRoIGZhbGxiYWNrIEluZGljIHNjcmlwdCBzdXBwb3J0LCBjb3ZlcmluZwogICAgKiBzb21lIHNjcmlwdHMgdGhhdCB0aGUgJ2xhdGluJyBzdWJtb2R1bGUgb2YgdGhlICdhdXRvZml0JyBtb2R1bGUgZG9lc24ndAotICAgKiAoeWV0KSBoYW5kbGUuCisgICAqICh5ZXQpIGhhbmRsZS4gIEN1cnJlbnRseSwgdGhpcyBuZWVkcyBvcHRpb24gYEFGX0NPTkZJR19PUFRJT05fQ0pLYC4KICAgICovCisjaWZkZWYgQUZfQ09ORklHX09QVElPTl9DSksKICNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9JTkRJQworI2VuZGlmCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdHN0ZGxpYi5oCmluZGV4IDQzOGI2MTQuLmQ2MDkxZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaApAQCAtNSw3ICs1LDcgQEAKICAqICAgQU5TSS1zcGVjaWZpYyBsaWJyYXJ5IGFuZCBoZWFkZXIgY29uZmlndXJhdGlvbiBmaWxlIChzcGVjaWZpY2F0aW9uCiAgKiAgIG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2ludGVnZXItdHlwZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2ludGVnZXItdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGNhMGM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvaW50ZWdlci10eXBlcy5oCkBAIC0wLDAgKzEsMjQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNvbmZpZy9pbnRlZ2VyLXR5cGVzLmgKKyAqCisgKiAgIEZyZWVUeXBlIGludGVnZXIgdHlwZXMgZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KKyNpZm5kZWYgRlJFRVRZUEVfQ09ORklHX0lOVEVHRVJfVFlQRVNfSF8KKyNkZWZpbmUgRlJFRVRZUEVfQ09ORklHX0lOVEVHRVJfVFlQRVNfSF8KKworICAvKiBUaGVyZSBhcmUgc3lzdGVtcyAobGlrZSB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgJ0M1NHgpIHdoZXJlIGEgYGNoYXJgICAqLworICAvKiBoYXMgMTZ+Yml0cy4gIEFOU0l+QyBzYXlzIHRoYXQgYHNpemVvZihjaGFyKWAgaXMgYWx3YXlzfjEuICBTaW5jZSBhbiAqLworICAvKiBgaW50YCBoYXMgMTZ+Yml0cyBhbHNvIGZvciB0aGlzIHN5c3RlbSwgYHNpemVvZihpbnQpYCBnaXZlc34xIHdoaWNoICAqLworICAvKiBpcyBwcm9iYWJseSB1bmV4cGVjdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBgQ0hBUl9CSVRgIChkZWZpbmVkIGluIGBsaW1pdHMuaGApIGdpdmVzIHRoZSBudW1iZXIgb2YgYml0cyBpbiBhICAgICAqLworICAvKiBgY2hhcmAgdHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjaWZuZGVmIEZUX0NIQVJfQklUCisjZGVmaW5lIEZUX0NIQVJfQklUICBDSEFSX0JJVAorI2VuZGlmCisKKyNpZm5kZWYgRlRfU0laRU9GX0lOVAorCisgIC8qIFRoZSBzaXplIG9mIGFuIGBpbnRgIHR5cGUuICovCisjaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSU5UX01BWCA9PSAweEZGRkZVTAorI2RlZmluZSBGVF9TSVpFT0ZfSU5UICAoIDE2IC8gRlRfQ0hBUl9CSVQgKQorI2VsaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUlOVF9NQVggPT0gMHhGRkZGRkZGRlVMCisjZGVmaW5lIEZUX1NJWkVPRl9JTlQgICggMzIgLyBGVF9DSEFSX0JJVCApCisjZWxpZiBGVF9VSU5UX01BWCA+IDB4RkZGRkZGRkZVTCAmJiBGVF9VSU5UX01BWCA9PSAweEZGRkZGRkZGRkZGRkZGRkZVTAorI2RlZmluZSBGVF9TSVpFT0ZfSU5UICAoIDY0IC8gRlRfQ0hBUl9CSVQgKQorI2Vsc2UKKyNlcnJvciAiVW5zdXBwb3J0ZWQgc2l6ZSBvZiBgaW50JyB0eXBlISIKKyNlbmRpZgorCisjZW5kaWYgIC8qICFkZWZpbmVkKEZUX1NJWkVPRl9JTlQpICovCisKKyNpZm5kZWYgRlRfU0laRU9GX0xPTkcKKworICAvKiBUaGUgc2l6ZSBvZiBhIGBsb25nYCB0eXBlLiAgQSBmaXZlLWJ5dGUgYGxvbmdgIChhcyB1c2VkIGUuZy4gb24gdGhlICovCisgIC8qIERNNjQyKSBpcyByZWNvZ25pemVkIGJ1dCBhdm9pZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTE9OR19NQVggPT0gMHhGRkZGRkZGRlVMCisjZGVmaW5lIEZUX1NJWkVPRl9MT05HICAoIDMyIC8gRlRfQ0hBUl9CSVQgKQorI2VsaWYgRlRfVUxPTkdfTUFYID4gMHhGRkZGRkZGRlVMICYmIEZUX1VMT05HX01BWCA9PSAweEZGRkZGRkZGRkZVTAorI2RlZmluZSBGVF9TSVpFT0ZfTE9ORyAgKCAzMiAvIEZUX0NIQVJfQklUICkKKyNlbGlmIEZUX1VMT05HX01BWCA+IDB4RkZGRkZGRkZVTCAmJiBGVF9VTE9OR19NQVggPT0gMHhGRkZGRkZGRkZGRkZGRkZGVUwKKyNkZWZpbmUgRlRfU0laRU9GX0xPTkcgICggNjQgLyBGVF9DSEFSX0JJVCApCisjZWxzZQorI2Vycm9yICJVbnN1cHBvcnRlZCBzaXplIG9mIGBsb25nJyB0eXBlISIKKyNlbmRpZgorCisjZW5kaWYgLyogIWRlZmluZWQoRlRfU0laRU9GX0xPTkcpICovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIGJhc2ljX3R5cGVzCisgICAqCisgICAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX0ludDE2CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHR5cGVkZWYgZm9yIGEgMTZiaXQgc2lnbmVkIGludGVnZXIgdHlwZS4KKyAgICovCisgIHR5cGVkZWYgc2lnbmVkIHNob3J0ICBGVF9JbnQxNjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9VSW50MTYKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgdHlwZWRlZiBmb3IgYSAxNmJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUuCisgICAqLworICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBGVF9VSW50MTY7CisKKyAgLyogKi8KKworCisgIC8qIHRoaXMgI2lmIDAgLi4uICNlbmRpZiBjbGF1c2UgaXMgZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMgKi8KKyNpZiAwCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX0ludDMyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHR5cGVkZWYgZm9yIGEgMzJiaXQgc2lnbmVkIGludGVnZXIgdHlwZS4gIFRoZSBzaXplIGRlcGVuZHMgb24gdGhlCisgICAqICAgY29uZmlndXJhdGlvbi4KKyAgICovCisgIHR5cGVkZWYgc2lnbmVkIFhYWCAgRlRfSW50MzI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfVUludDMyCisgICAqCisgICAqICAgQSB0eXBlZGVmIGZvciBhIDMyYml0IHVuc2lnbmVkIGludGVnZXIgdHlwZS4gIFRoZSBzaXplIGRlcGVuZHMgb24gdGhlCisgICAqICAgY29uZmlndXJhdGlvbi4KKyAgICovCisgIHR5cGVkZWYgdW5zaWduZWQgWFhYICBGVF9VSW50MzI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfSW50NjQKKyAgICoKKyAgICogICBBIHR5cGVkZWYgZm9yIGEgNjRiaXQgc2lnbmVkIGludGVnZXIgdHlwZS4gIFRoZSBzaXplIGRlcGVuZHMgb24gdGhlCisgICAqICAgY29uZmlndXJhdGlvbi4gIE9ubHkgZGVmaW5lZCBpZiB0aGVyZSBpcyByZWFsIDY0Yml0IHN1cHBvcnQ7CisgICAqICAgb3RoZXJ3aXNlLCBpdCBnZXRzIGVtdWxhdGVkIHdpdGggYSBzdHJ1Y3R1cmUgKGlmIG5lY2Vzc2FyeSkuCisgICAqLworICB0eXBlZGVmIHNpZ25lZCBYWFggIEZUX0ludDY0OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX1VJbnQ2NAorICAgKgorICAgKiAgIEEgdHlwZWRlZiBmb3IgYSA2NGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUuICBUaGUgc2l6ZSBkZXBlbmRzIG9uIHRoZQorICAgKiAgIGNvbmZpZ3VyYXRpb24uICBPbmx5IGRlZmluZWQgaWYgdGhlcmUgaXMgcmVhbCA2NGJpdCBzdXBwb3J0OworICAgKiAgIG90aGVyd2lzZSwgaXQgZ2V0cyBlbXVsYXRlZCB3aXRoIGEgc3RydWN0dXJlIChpZiBuZWNlc3NhcnkpLgorICAgKi8KKyAgdHlwZWRlZiB1bnNpZ25lZCBYWFggIEZUX1VJbnQ2NDsKKworICAvKiAqLworCisjZW5kaWYKKworI2lmIEZUX1NJWkVPRl9JTlQgPT0gKCAzMiAvIEZUX0NIQVJfQklUICkKKworICB0eXBlZGVmIHNpZ25lZCBpbnQgICAgICBGVF9JbnQzMjsKKyAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgRlRfVUludDMyOworCisjZWxpZiBGVF9TSVpFT0ZfTE9ORyA9PSAoIDMyIC8gRlRfQ0hBUl9CSVQgKQorCisgIHR5cGVkZWYgc2lnbmVkIGxvbmcgICAgIEZUX0ludDMyOworICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICBGVF9VSW50MzI7CisKKyNlbHNlCisjZXJyb3IgIm5vIDMyYml0IHR5cGUgZm91bmQgLS0gcGxlYXNlIGNoZWNrIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlcyIKKyNlbmRpZgorCisKKyAgLyogbG9vayB1cCBhbiBpbnRlZ2VyIHR5cGUgdGhhdCBpcyBhdCBsZWFzdCAzMn5iaXRzICovCisjaWYgRlRfU0laRU9GX0lOVCA+PSAoIDMyIC8gRlRfQ0hBUl9CSVQgKQorCisgIHR5cGVkZWYgaW50ICAgICAgICAgICAgRlRfRmFzdDsKKyAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICBGVF9VRmFzdDsKKworI2VsaWYgRlRfU0laRU9GX0xPTkcgPj0gKCAzMiAvIEZUX0NIQVJfQklUICkKKworICB0eXBlZGVmIGxvbmcgICAgICAgICAgIEZUX0Zhc3Q7CisgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgRlRfVUZhc3Q7CisKKyNlbmRpZgorCisKKyAgLyogZGV0ZXJtaW5lIHdoZXRoZXIgd2UgaGF2ZSBhIDY0LWJpdCBgaW50YCB0eXBlIGZvciBwbGF0Zm9ybXMgd2l0aG91dCAqLworICAvKiBBdXRvY29uZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWYgRlRfU0laRU9GX0xPTkcgPT0gKCA2NCAvIEZUX0NIQVJfQklUICkKKworICAvKiBgRlRfTE9ORzY0YCBtdXN0IGJlIGRlZmluZWQgaWYgYSA2NC1iaXQgdHlwZSBpcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgRlRfTE9ORzY0CisjZGVmaW5lIEZUX0lOVDY0ICAgbG9uZworI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQSA2NC1iaXQgZGF0YSB0eXBlIG1heSBjcmVhdGUgY29tcGlsYXRpb24gcHJvYmxlbXMgaWYgeW91IGNvbXBpbGUgaW4KKyAgICogc3RyaWN0IEFOU0kgbW9kZS4gIFRvIGF2b2lkIHRoZW0sIHdlIGRpc2FibGUgb3RoZXIgNjQtYml0IGRhdGEgdHlwZXMgaWYKKyAgICogYF9fU1REQ19fYCBpcyBkZWZpbmVkLiAgWW91IGNhbiBob3dldmVyIGlnbm9yZSB0aGlzIHJ1bGUgYnkgZGVmaW5pbmcgdGhlCisgICAqIGBGVF9DT05GSUdfT1BUSU9OX0ZPUkNFX0lOVDY0YCBjb25maWd1cmF0aW9uIG1hY3JvLgorICAgKi8KKyNlbGlmICFkZWZpbmVkKCBfX1NURENfXyApIHx8IGRlZmluZWQoIEZUX0NPTkZJR19PUFRJT05fRk9SQ0VfSU5UNjQgKQorCisjaWYgZGVmaW5lZCggX19TVERDX1ZFUlNJT05fXyApICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorCisjZGVmaW5lIEZUX0xPTkc2NAorI2RlZmluZSBGVF9JTlQ2NCAgIGxvbmcgbG9uZyBpbnQKKyNkZWZpbmUgRlRfVUlOVDY0ICB1bnNpZ25lZCBsb25nIGxvbmcgaW50CisKKyNlbGlmIGRlZmluZWQoIF9NU0NfVkVSICkgJiYgX01TQ19WRVIgPj0gOTAwIC8qIFZpc3VhbCBDKysgKGFuZCBJbnRlbCBDKyspICovCisKKyAgLyogdGhpcyBjb21waWxlciBwcm92aWRlcyB0aGUgYF9faW50NjRgIHR5cGUgKi8KKyNkZWZpbmUgRlRfTE9ORzY0CisjZGVmaW5lIEZUX0lOVDY0ICAgX19pbnQ2NAorI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIF9faW50NjQKKworI2VsaWYgZGVmaW5lZCggX19CT1JMQU5EQ19fICkgIC8qIEJvcmxhbmQgQysrICovCisKKyAgLyogWFhYWDogV2Ugc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSB2YWx1ZSBvZiBgX19CT1JMQU5EQ19fYCBpbiBvcmRlciAqLworICAvKiAgICAgICB0byB0ZXN0IHRoZSBjb21waWxlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgLyogdGhpcyBjb21waWxlciBwcm92aWRlcyB0aGUgYF9faW50NjRgIHR5cGUgKi8KKyNkZWZpbmUgRlRfTE9ORzY0CisjZGVmaW5lIEZUX0lOVDY0ICAgX19pbnQ2NAorI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIF9faW50NjQKKworI2VsaWYgZGVmaW5lZCggX19XQVRDT01DX18gKSAgIC8qIFdhdGNvbSBDKysgKi8KKworICAvKiBXYXRjb20gZG9lc24ndCBwcm92aWRlIDY0LWJpdCBkYXRhIHR5cGVzICovCisKKyNlbGlmIGRlZmluZWQoIF9fTVdFUktTX18gKSAgICAvKiBNZXRyb3dlcmtzIENvZGVXYXJyaW9yICovCisKKyNkZWZpbmUgRlRfTE9ORzY0CisjZGVmaW5lIEZUX0lOVDY0ICAgbG9uZyBsb25nIGludAorI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKKworI2VsaWYgZGVmaW5lZCggX19HTlVDX18gKQorCisgIC8qIEdDQyBwcm92aWRlcyB0aGUgYGxvbmcgbG9uZ2AgdHlwZSAqLworI2RlZmluZSBGVF9MT05HNjQKKyNkZWZpbmUgRlRfSU5UNjQgICBsb25nIGxvbmcgaW50CisjZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgbG9uZyBsb25nIGludAorCisjZW5kaWYgLyogX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMICovCisKKyNlbmRpZiAvKiBGVF9TSVpFT0ZfTE9ORyA9PSAoNjQgLyBGVF9DSEFSX0JJVCkgKi8KKworI2lmZGVmIEZUX0xPTkc2NAorICB0eXBlZGVmIEZUX0lOVDY0ICAgRlRfSW50NjQ7CisgIHR5cGVkZWYgRlRfVUlOVDY0ICBGVF9VSW50NjQ7CisjZW5kaWYKKworCisjZW5kaWYgIC8qIEZSRUVUWVBFX0NPTkZJR19JTlRFR0VSX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9tYWMtc3VwcG9ydC5oIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvbWFjLXN1cHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDg2NzA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvbWFjLXN1cHBvcnQuaApAQCAtMCwwICsxLDQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNvbmZpZy9tYWMtc3VwcG9ydC5oCisgKgorICogICBNYWMvT1MgWCBzdXBwb3J0IGNvbmZpZ3VyYXRpb24gaGVhZGVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCisjaWZuZGVmIEZSRUVUWVBFX0NPTkZJR19NQUNfU1VQUE9SVF9IXworI2RlZmluZSBGUkVFVFlQRV9DT05GSUdfTUFDX1NVUFBPUlRfSF8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTWFjIHN1cHBvcnQKKyAgICoKKyAgICogICBUaGlzIGlzIHRoZSBvbmx5IG5lY2Vzc2FyeSBjaGFuZ2UsIHNvIGl0IGlzIGRlZmluZWQgaGVyZSBpbnN0ZWFkCisgICAqICAgcHJvdmlkaW5nIGEgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICovCisjaWYgZGVmaW5lZCggX19BUFBMRV9fICkgfHwgKCBkZWZpbmVkKCBfX01XRVJLU19fICkgJiYgZGVmaW5lZCggbWFjaW50b3NoICkgKQorICAvKiBObyBDYXJib24gZnJhbWV3b3JrcyBmb3IgNjRiaXQgMTAuNC54LiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBgQXZhaWxhYmlsaXR5TWFjcm9zLmhgIGlzIGF2YWlsYWJsZSBzaW5jZSBNYWMgT1MgWCAxMC4yLCAgICAgICAqLworICAvKiBzbyBndWVzcyB0aGUgc3lzdGVtIHZlcnNpb24gYnkgbWF4aW11bSBlcnJubyBiZWZvcmUgaW5jbHVzaW9uLiAqLworI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgRUNBTkNFTEVEIC8qIGRlZmluZWQgc2luY2UgMTAuMiAqLworI2luY2x1ZGUgIkF2YWlsYWJpbGl0eU1hY3Jvcy5oIgorI2VuZGlmCisjaWYgZGVmaW5lZCggX19MUDY0X18gKSAmJiBcCisgICAgKCBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSBNQUNfT1NfWF9WRVJTSU9OXzEwXzQgKQorI3VuZGVmIEZUX01BQ0lOVE9TSAorI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoIF9fU0NfXyApIHx8IGRlZmluZWQoIF9fTVJDX18gKQorICAvKiBDbGFzc2ljIE1hY09TIGNvbXBpbGVycyAqLworI2luY2x1ZGUgIkNvbmRpdGlvbmFsTWFjcm9zLmgiCisjaWYgVEFSR0VUX09TX01BQworI2RlZmluZSBGVF9NQUNJTlRPU0ggMQorI2VuZGlmCisKKyNlbmRpZiAgLyogTWFjIHN1cHBvcnQgKi8KKworI2VuZGlmICAvKiBGUkVFVFlQRV9DT05GSUdfTUFDX1NVUFBPUlRfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL3B1YmxpYy1tYWNyb3MuaCBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL3B1YmxpYy1tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWE2NzNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvcHVibGljLW1hY3Jvcy5oCkBAIC0wLDAgKzEsMTIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNvbmZpZy9wdWJsaWMtbWFjcm9zLmgKKyAqCisgKiAgIERlZmluZSBhIHNldCBvZiBjb21waWxlciBtYWNyb3MgdXNlZCBpbiBwdWJsaWMgRnJlZVR5cGUgaGVhZGVycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KKworICAvKgorICAgKiBUaGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSB1c2VkIGJ5IHRoZSBwdWJsaWMgRnJlZVR5cGUgaGVhZGVycworICAgKiBhbmQgdGh1cyBzaG91bGQgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLgorICAgKgorICAgKiBPdGhlciBjb21waWxlci1zcGVjaWZpYyBtYWNybyBkZWZpbml0aW9ucyB0aGF0IGFyZSBub3QgZXhwb3NlZCBieSB0aGUKKyAgICogRnJlZVR5cGUgQVBJIHNob3VsZCBnbyBpbnRvCisgICAqIGBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2NvbXBpbGVyLW1hY3Jvcy5oYCBpbnN0ZWFkLgorICAgKi8KKyNpZm5kZWYgRlJFRVRZUEVfQ09ORklHX1BVQkxJQ19NQUNST1NfSF8KKyNkZWZpbmUgRlJFRVRZUEVfQ09ORklHX1BVQkxJQ19NQUNST1NfSF8KKworICAvKgorICAgKiBgRlRfQkVHSU5fSEVBREVSYCBhbmQgYEZUX0VORF9IRUFERVJgIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGRlZmluZWQKKyAgICogYnkgYGZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oYCwgYnV0IHdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGlzCisgICAqIGhlYWRlciBoZXJlLCBzbyByZWRlZmluZSB0aGUgbWFjcm9zIGhlcmUgb25seSB3aGVuIG5lZWRlZC4gIFRoZWlyCisgICAqIGRlZmluaXRpb24gaXMgdmVyeSBzdGFibGUsIHNvIGtlZXBpbmcgdGhlbSBpbiBzeW5jIHdpdGggdGhlIG9uZXMgaW4gdGhlCisgICAqIGhlYWRlciBzaG91bGQgbm90IGJlIGEgbWFpbnRlbmFuY2UgaXNzdWUuCisgICAqLworI2lmbmRlZiBGVF9CRUdJTl9IRUFERVIKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9CRUdJTl9IRUFERVIgIGV4dGVybiAiQyIgeworI2Vsc2UKKyNkZWZpbmUgRlRfQkVHSU5fSEVBREVSICAvKiBlbXB0eSAqLworI2VuZGlmCisjZW5kaWYgIC8qIEZUX0JFR0lOX0hFQURFUiAqLworCisjaWZuZGVmIEZUX0VORF9IRUFERVIKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9FTkRfSEVBREVSICB9CisjZWxzZQorI2RlZmluZSBGVF9FTkRfSEVBREVSICAvKiBlbXB0eSAqLworI2VuZGlmCisjZW5kaWYgIC8qIEZUX0VORF9IRUFERVIgKi8KKworCitGVF9CRUdJTl9IRUFERVIKKworICAvKgorICAgKiBNYXJrIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gYXMgcHVibGljLiAgVGhpcyBlbnN1cmVzIGl0IHdpbGwgYmUKKyAgICogcHJvcGVybHkgZXhwb3J0ZWQgdG8gY2xpZW50IGNvZGUuICBQbGFjZSB0aGlzIGJlZm9yZSBhIGZ1bmN0aW9uCisgICAqIGRlY2xhcmF0aW9uLgorICAgKgorICAgKiBOT1RFOiBUaGlzIG1hY3JvIHNob3VsZCBiZSBjb25zaWRlcmVkIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uCisgICAqIGRldGFpbCwgYW5kIG5vdCBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBBUEkuICBJdCBpcyBvbmx5IGRlZmluZWQgaGVyZQorICAgKiBiZWNhdXNlIGl0IGlzIG5lZWRlZCBieSBgRlRfRVhQT1JUYC4KKyAgICovCisKKyAgLyogVmlzdWFsIEMsIG1pbmd3ICovCisjaWYgZGVmaW5lZCggX1dJTjMyICkKKworI2lmIGRlZmluZWQoIEZUMl9CVUlMRF9MSUJSQVJZICkgJiYgZGVmaW5lZCggRExMX0VYUE9SVCApCisjZGVmaW5lIEZUX1BVQkxJQ19GVU5DVElPTl9BVFRSSUJVVEUgIF9fZGVjbHNwZWMoIGRsbGV4cG9ydCApCisjZWxpZiBkZWZpbmVkKCBETExfSU1QT1JUICkKKyNkZWZpbmUgRlRfUFVCTElDX0ZVTkNUSU9OX0FUVFJJQlVURSAgX19kZWNsc3BlYyggZGxsaW1wb3J0ICkKKyNlbmRpZgorCisgIC8qIGdjYywgY2xhbmcgKi8KKyNlbGlmICggZGVmaW5lZCggX19HTlVDX18gKSAmJiBfX0dOVUNfXyA+PSA0ICkgfHwgZGVmaW5lZCggX19jbGFuZ19fICkKKyNkZWZpbmUgRlRfUFVCTElDX0ZVTkNUSU9OX0FUVFJJQlVURSBcCisgICAgICAgICAgX19hdHRyaWJ1dGVfXygoIHZpc2liaWxpdHkoICJkZWZhdWx0IiApICkpCisKKyAgLyogU3VuICovCisjZWxpZiBkZWZpbmVkKCBfX1NVTlBST19DICkgJiYgX19TVU5QUk9fQyA+PSAweDU1MAorI2RlZmluZSBGVF9QVUJMSUNfRlVOQ1RJT05fQVRUUklCVVRFICBfX2dsb2JhbAorI2VuZGlmCisKKworI2lmbmRlZiBGVF9QVUJMSUNfRlVOQ1RJT05fQVRUUklCVVRFCisjZGVmaW5lIEZUX1BVQkxJQ19GVU5DVElPTl9BVFRSSUJVVEUgIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisgIC8qCisgICAqIERlZmluZSBhIHB1YmxpYyBGcmVlVHlwZSBBUEkgZnVuY3Rpb24uICBUaGlzIGVuc3VyZXMgaXQgaXMgcHJvcGVybHkKKyAgICogZXhwb3J0ZWQgb3IgaW1wb3J0ZWQgYXQgYnVpbGQgdGltZS4gIFRoZSBtYWNybyBwYXJhbWV0ZXIgaXMgdGhlCisgICAqIGZ1bmN0aW9uJ3MgcmV0dXJuIHR5cGUgYXMgaW46CisgICAqCisgICAqICAgRlRfRVhQT1JUKCBGVF9Cb29sICkKKyAgICogICBGVF9PYmplY3RfTWV0aG9kKCBGVF9PYmplY3QgIG9iaiwKKyAgICogICAgICAgICAgICAgICAgICAgICAuLi4gKTsKKyAgICoKKyAgICogTk9URTogVGhpcyByZXF1aXJlcyB0aGF0IGFsbCBgRlRfRVhQT1JUYCB1c2VzIGFyZSBpbnNpZGUKKyAgICogYEZUX0JFR0lOX0hFQURFUiAuLi4gRlRfRU5EX0hFQURFUmAgYmxvY2tzLiAgVGhpcyBndWFyYW50ZWVzIHRoYXQgdGhlCisgICAqIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgd2l0aCBDIGxpbmthZ2UsIGV2ZW4gd2hlbiB0aGUgaGVhZGVyIGlzIGluY2x1ZGVkCisgICAqIGJ5IGEgQysrIHNvdXJjZSBmaWxlLgorICAgKi8KKyNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIEZUX1BVQkxJQ19GVU5DVElPTl9BVFRSSUJVVEUgZXh0ZXJuIHgKKworICAvKgorICAgKiBgRlRfVU5VU0VEYCBpbmRpY2F0ZXMgdGhhdCBhIGdpdmVuIHBhcmFtZXRlciBpcyBub3QgdXNlZCAtLSB0aGlzIGlzCisgICAqIG9ubHkgdXNlZCB0byBnZXQgcmlkIG9mIHVucGxlYXNhbnQgY29tcGlsZXIgd2FybmluZ3MuCisgICAqCisgICAqIFRlY2huaWNhbGx5LCB0aGlzIHdhcyBub3QgbWVhbnQgdG8gYmUgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgYnV0IHNvbWUKKyAgICogdGhpcmQtcGFydHkgY29kZSBkZXBlbmRzIG9uIGl0LgorICAgKi8KKyNpZm5kZWYgRlRfVU5VU0VECisjZGVmaW5lIEZUX1VOVVNFRCggYXJnICkgICggKGFyZykgPSAoYXJnKSApCisjZW5kaWYKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAgLyogRlJFRVRZUEVfQ09ORklHX1BVQkxJQ19NQUNST1NfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaAppbmRleCBhNmJiNjY3Li5iZTE5MWY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgaGlnaC1sZXZlbCBBUEkgYW5kIGNvbW1vbiB0eXBlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCwxOSArMjAsMTAgQEAKICNkZWZpbmUgRlJFRVRZUEVfSF8KIAogCi0jaWZuZGVmIEZUX0ZSRUVUWVBFX0gKLSNlcnJvciAiYGZ0MmJ1aWxkLmgnIGhhc24ndCBiZWVuIGluY2x1ZGVkIHlldCEiCi0jZXJyb3IgIlBsZWFzZSBhbHdheXMgdXNlIG1hY3JvcyB0byBpbmNsdWRlIEZyZWVUeXBlIGhlYWRlciBmaWxlcy4iCi0jZXJyb3IgIkV4YW1wbGU6IgotI2Vycm9yICIgICNpbmNsdWRlIDxmdDJidWlsZC5oPiIKLSNlcnJvciAiICAjaW5jbHVkZSBGVF9GUkVFVFlQRV9IIgotI2VuZGlmCi0KLQogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9DT05GSUdfQ09ORklHX0gKLSNpbmNsdWRlIEZUX1RZUEVTX0gKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnR0eXBlcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZXJyb3JzLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC01MSwyMiArNDIsMTUgQEAKICAgICogICBIb3cgY2xpZW50IGFwcGxpY2F0aW9ucyBzaG91bGQgaW5jbHVkZSBGcmVlVHlwZSBoZWFkZXIgZmlsZXMuCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBUbyBiZSBhcyBmbGV4aWJsZSBhcyBwb3NzaWJsZSAoYW5kIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMpLCBGcmVlVHlwZQotICAgKiAgIHVzZXMgYSB2ZXJ5IHNwZWNpYWwgaW5jbHVzaW9uIHNjaGVtZSB0byBsb2FkIGhlYWRlciBmaWxlcywgZm9yIGV4YW1wbGUKKyAgICogICBUbyBiZSBhcyBmbGV4aWJsZSBhcyBwb3NzaWJsZSAoYW5kIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMpLCB5b3UgbXVzdAorICAgKiAgIGxvYWQgZmlsZSBgZnQyYnVpbGQuaGAgZmlyc3QgYmVmb3JlIG90aGVyIGhlYWRlciBmaWxlcywgZm9yIGV4YW1wbGUKICAgICoKICAgICogICBgYGAKICAgICogICAgICNpbmNsdWRlIDxmdDJidWlsZC5oPgogICAgKgotICAgKiAgICAgI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotICAgKiAgICAgI2luY2x1ZGUgRlRfT1VUTElORV9ICisgICAqICAgICAjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KKyAgICogICAgICNpbmNsdWRlIDxmcmVldHlwZS9mdG91dGxuLmg+CiAgICAqICAgYGBgCi0gICAqCi0gICAqICAgQSBjb21waWxlciBhbmQgaXRzIHByZXByb2Nlc3NvciBvbmx5IG5lZWRzIGFuIGluY2x1ZGUgcGF0aCB0byBmaW5kIHRoZQotICAgKiAgIGZpbGUgYGZ0MmJ1aWxkLmhgOyB0aGUgZXhhY3QgbG9jYXRpb25zIGFuZCBuYW1lcyBvZiB0aGUgb3RoZXIgRnJlZVR5cGUKLSAgICogICBoZWFkZXIgZmlsZXMgYXJlIGhpZGRlbiBieSBAaGVhZGVyX2ZpbGVfbWFjcm9zLCBsb2FkZWQgYnkKLSAgICogICBgZnQyYnVpbGQuaGAuICBUaGUgQVBJIGRvY3VtZW50YXRpb24gYWx3YXlzIGdpdmVzIHRoZSBoZWFkZXIgbWFjcm8KLSAgICogICBuYW1lIG5lZWRlZCBmb3IgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uLgotICAgKgogICAgKi8KIAogCkBAIC05NzQsNiArOTU4LDkgQEAKICAgICogICAgIE5vdGUgdGhhdCB0aGUgYm91bmRpbmcgYm94IG1pZ2h0IGJlIG9mZiBieSAoYXQgbGVhc3QpIG9uZSBwaXhlbCBmb3IKICAgICogICAgIGhpbnRlZCBmb250cy4gIFNlZSBARlRfU2l6ZV9NZXRyaWNzIGZvciBmdXJ0aGVyIGRpc2N1c3Npb24uCiAgICAqCisgICAqICAgICBOb3RlIHRoYXQgdGhlIGJvdW5kaW5nIGJveCBkb2VzIG5vdCB2YXJ5IGluIE9wZW5UeXBlIHZhcmlhYmxlIGZvbnRzCisgICAqICAgICBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgZGVmYXVsdCBpbnN0YW5jZS4KKyAgICoKICAgICogICB1bml0c19wZXJfRU0gOjoKICAgICogICAgIFRoZSBudW1iZXIgb2YgZm9udCB1bml0cyBwZXIgRU0gc3F1YXJlIGZvciB0aGlzIGZhY2UuICBUaGlzIGlzCiAgICAqICAgICB0eXBpY2FsbHkgMjA0OCBmb3IgVHJ1ZVR5cGUgZm9udHMsIGFuZCAxMDAwIGZvciBUeXBlfjEgZm9udHMuICBPbmx5CkBAIC0xMjM5LDcgKzEyMjYsNyBAQAogICAgKgogICAgKi8KICNkZWZpbmUgRlRfSEFTX0hPUklaT05UQUwoIGZhY2UgKSBcCi0gICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCApCisgICAgICAgICAgKCAhISggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0hPUklaT05UQUwgKSApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEyNTMsNyArMTI0MCw3IEBACiAgICAqCiAgICAqLwogI2RlZmluZSBGVF9IQVNfVkVSVElDQUwoIGZhY2UgKSBcCi0gICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfVkVSVElDQUwgKQorICAgICAgICAgICggISEoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19WRVJUSUNBTCApICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTI2Nyw3ICsxMjU0LDcgQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZUX0hBU19LRVJOSU5HKCBmYWNlICkgXAotICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0tFUk5JTkcgKQorICAgICAgICAgICggISEoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19LRVJOSU5HICkgKQogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMjgyLDcgKzEyNjksNyBAQAogICAgKgogICAgKi8KICNkZWZpbmUgRlRfSVNfU0NBTEFCTEUoIGZhY2UgKSBcCi0gICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfU0NBTEFCTEUgKQorICAgICAgICAgICggISEoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19TQ0FMQUJMRSApICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTMwMSw3ICsxMjg4LDcgQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZUX0lTX1NGTlQoIGZhY2UgKSBcCi0gICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfU0ZOVCApCisgICAgICAgICAgKCAhISggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX1NGTlQgKSApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEzMTYsNyArMTMwMyw3IEBACiAgICAqCiAgICAqLwogI2RlZmluZSBGVF9JU19GSVhFRF9XSURUSCggZmFjZSApIFwKLSAgICAgICAgICAoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSCApCisgICAgICAgICAgKCAhISggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIICkgKQogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzMxLDcgKzEzMTgsNyBAQAogICAgKgogICAgKi8KICNkZWZpbmUgRlRfSEFTX0ZJWEVEX1NJWkVTKCBmYWNlICkgXAotICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTICkKKyAgICAgICAgICAoICEhKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMgKSApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEzNTcsNyArMTM0NCw3IEBACiAgICAqCiAgICAqLwogI2RlZmluZSBGVF9IQVNfR0xZUEhfTkFNRVMoIGZhY2UgKSBcCi0gICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVMgKQorICAgICAgICAgICggISEoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUyApICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTM3Miw3ICsxMzU5LDcgQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZUX0hBU19NVUxUSVBMRV9NQVNURVJTKCBmYWNlICkgXAotICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX01VTFRJUExFX01BU1RFUlMgKQorICAgICAgICAgICggISEoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTICkgKQogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzk0LDcgKzEzODEsNyBAQAogICAgKgogICAgKi8KICNkZWZpbmUgRlRfSVNfTkFNRURfSU5TVEFOQ0UoIGZhY2UgKSBcCi0gICAgICAgICAgKCAoZmFjZSktPmZhY2VfaW5kZXggJiAweDdGRkYwMDAwTCApCisgICAgICAgICAgKCAhISggKGZhY2UpLT5mYWNlX2luZGV4ICYgMHg3RkZGMDAwMEwgKSApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE0MTIsNyArMTM5OSw3IEBACiAgICAqCiAgICAqLwogI2RlZmluZSBGVF9JU19WQVJJQVRJT04oIGZhY2UgKSBcCi0gICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OICkKKyAgICAgICAgICAoICEhKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OICkgKQogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNDI5LDcgKzE0MTYsNyBAQAogICAgKgogICAgKi8KICNkZWZpbmUgRlRfSVNfQ0lEX0tFWUVEKCBmYWNlICkgXAotICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0NJRF9LRVlFRCApCisgICAgICAgICAgKCAhISggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0NJRF9LRVlFRCApICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTQ0Myw3ICsxNDMwLDcgQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZUX0lTX1RSSUNLWSggZmFjZSApIFwKLSAgICAgICAgICAoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19UUklDS1kgKQorICAgICAgICAgICggISEoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19UUklDS1kgKSApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE0NjAsNyArMTQ0Nyw3IEBACiAgICAqCiAgICAqLwogI2RlZmluZSBGVF9IQVNfQ09MT1IoIGZhY2UgKSBcCi0gICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfQ09MT1IgKQorICAgICAgICAgICggISEoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19DT0xPUiApICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjA3OCw3ICsyMDY1LDggQEAKICAgICogICAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBmaWxlIGluIG1lbW9yeS4KICAgICoKICAgICogICBwYXRobmFtZSA6OgotICAgKiAgICAgQSBwb2ludGVyIHRvIGFuIDgtYml0IGZpbGUgcGF0aG5hbWUuCisgICAqICAgICBBIHBvaW50ZXIgdG8gYW4gOC1iaXQgZmlsZSBwYXRobmFtZS4gIFRoZSBwb2ludGVyIGlzIG5vdCBvd25lZCBieQorICAgKiAgICAgRnJlZVR5cGUuCiAgICAqCiAgICAqICAgc3RyZWFtIDo6CiAgICAqICAgICBBIGhhbmRsZSB0byBhIHNvdXJjZSBzdHJlYW0gb2JqZWN0LgpAQCAtMzE4Nyw2ICszMTc1LDEyIEBACiAgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHRyYW5zbGF0aW9uIHZlY3Rvci4gIFVzZSBgTlVMTGAgZm9yIHRoZSBudWxsIHZlY3Rvci4KICAgICoKICAgICogQG5vdGU6CisgICAqICAgVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCBhcyBhIGNvbnZlbmllbmNlLCBidXQga2VlcCBpbiBtaW5kIHRoYXQKKyAgICogICBARlRfTWF0cml4IGNvZWZmaWNpZW50cyBhcmUgb25seSAxNi4xNiBmaXhlZCBwb2ludCB2YWx1ZXMsIHdoaWNoIGNhbgorICAgKiAgIGxpbWl0IHRoZSBhY2N1cmFjeSBvZiB0aGUgcmVzdWx0cy4gIFVzaW5nIGZsb2F0aW5nLXBvaW50IGNvbXB1dGF0aW9ucworICAgKiAgIHRvIHBlcmZvcm0gdGhlIHRyYW5zZm9ybSBkaXJlY3RseSBpbiBjbGllbnQgY29kZSBpbnN0ZWFkIHdpbGwgYWx3YXlzCisgICAqICAgeWllbGQgYmV0dGVyIG51bWJlcnMuCisgICAqCiAgICAqICAgVGhlIHRyYW5zZm9ybWF0aW9uIGlzIG9ubHkgYXBwbGllZCB0byBzY2FsYWJsZSBpbWFnZSBmb3JtYXRzIGFmdGVyIHRoZQogICAgKiAgIGdseXBoIGhhcyBiZWVuIGxvYWRlZC4gIEl0IG1lYW5zIHRoYXQgaGludGluZyBpcyB1bmFsdGVyZWQgYnkgdGhlCiAgICAqICAgdHJhbnNmb3JtYXRpb24gYW5kIGlzIHBlcmZvcm1lZCBvbiB0aGUgY2hhcmFjdGVyIHNpemUgZ2l2ZW4gaW4gdGhlCkBAIC0zMjQ1LDE0ICszMjM5LDYgQEAKICAgICogICAgIHBpeGVscyBhbmQgdXNlIHRoZSBARlRfUElYRUxfTU9ERV9MQ0RfViBtb2RlLgogICAgKgogICAgKiBAbm90ZToKLSAgICogICBTaG91bGQgeW91IGRlZmluZSBgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkdgIGluIHlvdXIKLSAgICogICBgZnRvcHRpb24uaGAsIHdoaWNoIGVuYWJsZXMgcGF0ZW50ZWQgQ2xlYXJUeXBlLXN0eWxlIHJlbmRlcmluZywgdGhlCi0gICAqICAgTENELW9wdGltaXplZCBnbHlwaCBiaXRtYXBzIHNob3VsZCBiZSBmaWx0ZXJlZCB0byByZWR1Y2UgY29sb3IgZnJpbmdlcwotICAgKiAgIGluaGVyZW50IHRvIHRoaXMgdGVjaG5vbG9neS4gIFlvdSBjYW4gZWl0aGVyIHNldCB1cCBMQ0QgZmlsdGVyaW5nIHdpdGgKLSAgICogICBARlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIgb3IgQEZUX0ZhY2VfUHJvcGVydGllcywgb3IgZG8gdGhlIGZpbHRlcmluZwotICAgKiAgIHlvdXJzZWxmLiAgVGhlIGRlZmF1bHQgRnJlZVR5cGUgTENEIHJlbmRlcmluZyB0ZWNobm9sb2d5IGRvZXMgbm90Ci0gICAqICAgcmVxdWlyZSBmaWx0ZXJpbmcuCi0gICAqCiAgICAqICAgVGhlIHNlbGVjdGVkIHJlbmRlciBtb2RlIG9ubHkgYWZmZWN0cyB2ZWN0b3IgZ2x5cGhzIG9mIGEgZm9udC4KICAgICogICBFbWJlZGRlZCBiaXRtYXBzIG9mdGVuIGhhdmUgYSBkaWZmZXJlbnQgcGl4ZWwgbW9kZSBsaWtlCiAgICAqICAgQEZUX1BJWEVMX01PREVfTU9OTy4gIFlvdSBjYW4gdXNlIEBGVF9CaXRtYXBfQ29udmVydCB0byB0cmFuc2Zvcm0gdGhlbQpAQCAtNDA4OCw3ICs0MDc0LDcgQEAKICAgICogICAgIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3R5cG9ncmFwaHkvb3BlbnR5cGUvc3BlYy9jb2xyCiAgICAqCiAgICAqICAgVGhlIGdseXBoIGxheWVyIGRhdGEgZm9yIGEgZ2l2ZW4gZ2x5cGggaW5kZXgsIGlmIHByZXNlbnQsIHByb3ZpZGVzIGFuCi0gICAqICAgYWx0ZXJuYXRpdmUsIG11bHRpLWNvbG91ciBnbHlwaCByZXByZXNlbnRhdGlvbjogSW5zdGVhZCBvZiByZW5kZXJpbmcKKyAgICogICBhbHRlcm5hdGl2ZSwgbXVsdGktY29sb3IgZ2x5cGggcmVwcmVzZW50YXRpb246IEluc3RlYWQgb2YgcmVuZGVyaW5nCiAgICAqICAgdGhlIG91dGxpbmUgb3IgYml0bWFwIHdpdGggdGhlIGdpdmVuIGdseXBoIGluZGV4LCBnbHlwaHMgd2l0aCB0aGUKICAgICogICBpbmRpY2VzIGFuZCBjb2xvcnMgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgcmVuZGVyZWQgbGF5ZXIgYnkKICAgICogICBsYXllci4KQEAgLTQ3ODEsNyArNDc2Nyw3IEBACiAgICAqLwogI2RlZmluZSBGUkVFVFlQRV9NQUpPUiAgMgogI2RlZmluZSBGUkVFVFlQRV9NSU5PUiAgMTAKLSNkZWZpbmUgRlJFRVRZUEVfUEFUQ0ggIDEKKyNkZWZpbmUgRlJFRVRZUEVfUEFUQ0ggIDQKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGFkdmFuYy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGFkdmFuYy5oCmluZGV4IDk1YzM4ZjkuLmYxNjZiYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRhZHZhbmMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YWR2YW5jLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBRdWljayBjb21wdXRhdGlvbiBvZiBhZHZhbmNlIHdpZHRocyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw3IEBACiAjZGVmaW5lIEZUQURWQU5DX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAogI2lmZGVmIEZSRUVUWVBFX0gKICNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCkBAIC05Niw2ICs5NSw3IEBACiAgICAqICAgbG9hZF9mbGFncyA6OgogICAgKiAgICAgQSBzZXQgb2YgYml0IGZsYWdzIHNpbWlsYXIgdG8gdGhvc2UgdXNlZCB3aGVuIGNhbGxpbmcKICAgICogICAgIEBGVF9Mb2FkX0dseXBoLCB1c2VkIHRvIGRldGVybWluZSB3aGF0IGtpbmQgb2YgYWR2YW5jZXMgeW91IG5lZWQuCisgICAqCiAgICAqIEBvdXRwdXQ6CiAgICAqICAgcGFkdmFuY2UgOjoKICAgICogICAgIFRoZSBhZHZhbmNlIHZhbHVlLiAgSWYgc2NhbGluZyBpcyBwZXJmb3JtZWQgKGJhc2VkIG9uIHRoZSB2YWx1ZSBvZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGJib3guaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRiYm94LmgKaW5kZXggMjJkYTcwYy4uZmRhMWFkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGJib3guaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmJveC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgZXhhY3QgYmJveCBjb21wdXRhdGlvbiAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMzEsOCArMzEsNyBAQAogI2RlZmluZSBGVEJCT1hfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgogCiAjaWZkZWYgRlJFRVRZUEVfSAogI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRiZGYuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRiZGYuaAppbmRleCAxYzQ2ZGE1Li4yZTFkYWVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmRmLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGJkZi5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgQkRGLXNwZWNpZmljIHN0cmluZ3MgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDggKzE5LDcgQEAKICNpZm5kZWYgRlRCREZfSF8KICNkZWZpbmUgRlRCREZfSF8KIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAogI2lmZGVmIEZSRUVUWVBFX0gKICNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Yml0bWFwLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Yml0bWFwLmgKaW5kZXggYTZhY2RiOS4uMjgyYzIyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGJpdG1hcC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRiaXRtYXAuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBiaXRtYXBzIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw5ICsyMCw4IEBACiAjZGVmaW5lIEZUQklUTUFQX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0jaW5jbHVkZSBGVF9DT0xPUl9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGNvbG9yLmg+CiAKICNpZmRlZiBGUkVFVFlQRV9ICiAjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGJ6aXAyLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YnppcDIuaAppbmRleCBhZTg4Y2ZkLi5lYjZhNWE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YnppcDIuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YnppcDIuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEJ6aXAyLWNvbXByZXNzZWQgc3RyZWFtIHN1cHBvcnQuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIGJ5CiAgKiBKb2VsIEtsaW5naGVkLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDggKzE5LDcgQEAKICNpZm5kZWYgRlRCWklQMl9IXwogI2RlZmluZSBGVEJaSVAyX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CiAKICNpZmRlZiBGUkVFVFlQRV9ICiAjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgpAQCAtNDMsNiArNDIsMTYgQEAKICAgICogICBVc2luZyBiemlwMi1jb21wcmVzc2VkIGZvbnQgZmlsZXMuCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBJbiBjZXJ0YWluIGJ1aWxkcyBvZiB0aGUgbGlicmFyeSwgYnppcDIgY29tcHJlc3Npb24gcmVjb2duaXRpb24gaXMKKyAgICogICBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgd2hlbiBjYWxsaW5nIEBGVF9OZXdfRmFjZSBvciBARlRfT3Blbl9GYWNlLgorICAgKiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBubyBmb250IGRyaXZlciBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIHRoZSByYXcKKyAgICogICBjb21wcmVzc2VkIGZpbGUsIHRoZSBsaWJyYXJ5IHdpbGwgdHJ5IHRvIG9wZW4gYSBiemlwMiBjb21wcmVzc2VkCisgICAqICAgc3RyZWFtIGZyb20gaXQgYW5kIHJlLW9wZW4gdGhlIGZhY2Ugd2l0aCBpdC4KKyAgICoKKyAgICogICBUaGUgc3RyZWFtIGltcGxlbWVudGF0aW9uIGlzIHZlcnkgYmFzaWMgYW5kIHJlc2V0cyB0aGUgZGVjb21wcmVzc2lvbgorICAgKiAgIHByb2Nlc3MgZWFjaCB0aW1lIHNlZWtpbmcgYmFja3dhcmRzIGlzIG5lZWRlZCB3aXRoaW4gdGhlIHN0cmVhbSwKKyAgICogICB3aGljaCBzaWduaWZpY2FudGx5IHVuZGVybWluZXMgdGhlIHBlcmZvcm1hbmNlLgorICAgKgogICAgKiAgIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgQnppcDItc3BlY2lmaWMgZnVuY3Rpb25zLgogICAgKgogICAgKi8KQEAgLTc1LDE1ICs4NCw2IEBACiAgICAqICAgKipub3QqKiBjYWxsIGBGVF9TdHJlYW1fQ2xvc2VgIG9uIHRoZSBzb3VyY2Ugc3RyZWFtLiAgTm9uZSBvZiB0aGUKICAgICogICBzdHJlYW0gb2JqZWN0cyB3aWxsIGJlIHJlbGVhc2VkIHRvIHRoZSBoZWFwLgogICAgKgotICAgKiAgIFRoZSBzdHJlYW0gaW1wbGVtZW50YXRpb24gaXMgdmVyeSBiYXNpYyBhbmQgcmVzZXRzIHRoZSBkZWNvbXByZXNzaW9uCi0gICAqICAgcHJvY2VzcyBlYWNoIHRpbWUgc2Vla2luZyBiYWNrd2FyZHMgaXMgbmVlZGVkIHdpdGhpbiB0aGUgc3RyZWFtLgotICAgKgotICAgKiAgIEluIGNlcnRhaW4gYnVpbGRzIG9mIHRoZSBsaWJyYXJ5LCBiemlwMiBjb21wcmVzc2lvbiByZWNvZ25pdGlvbiBpcwotICAgKiAgIGF1dG9tYXRpY2FsbHkgaGFuZGxlZCB3aGVuIGNhbGxpbmcgQEZUX05ld19GYWNlIG9yIEBGVF9PcGVuX0ZhY2UuCi0gICAqICAgVGhpcyBtZWFucyB0aGF0IGlmIG5vIGZvbnQgZHJpdmVyIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgdGhlIHJhdwotICAgKiAgIGNvbXByZXNzZWQgZmlsZSwgdGhlIGxpYnJhcnkgd2lsbCB0cnkgdG8gb3BlbiBhIGJ6aXAyIGNvbXByZXNzZWQKLSAgICogICBzdHJlYW0gZnJvbSBpdCBhbmQgcmUtb3BlbiB0aGUgZmFjZSB3aXRoIGl0LgotICAgKgogICAgKiAgIFRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBgRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZWAgaWYgeW91ciBidWlsZAogICAgKiAgIG9mIEZyZWVUeXBlIHdhcyBub3QgY29tcGlsZWQgd2l0aCBiemlwMiBzdXBwb3J0LgogICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRjYWNoZS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKaW5kZXggMGQ1ODlkMC4uNjA0NzI3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBDYWNoZSBzdWJzeXN0ZW0gKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDggKzIwLDcgQEAKICNkZWZpbmUgRlRDQUNIRV9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfR0xZUEhfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0Z2x5cGguaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRjaWQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRjaWQuaAppbmRleCA4ZWFmYzFjLi5hMjlmYjMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y2lkLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNpZC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgQ0lEIGZvbnQgaW5mb3JtYXRpb24gKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBieQogICogRGVyZWcgQ2xlZ2cgYW5kIE1pY2hhZWwgVG9mdGRhbC4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOSw4ICsxOSw3IEBACiAjaWZuZGVmIEZUQ0lEX0hfCiAjZGVmaW5lIEZUQ0lEX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CiAKICNpZmRlZiBGUkVFVFlQRV9ICiAjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGNvbG9yLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y29sb3IuaAppbmRleCBjZjE4MDIxLi5lY2M2NDg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y29sb3IuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y29sb3IuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlJ3MgZ2x5cGggY29sb3IgbWFuYWdlbWVudCAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksOCArMTksNyBAQAogI2lmbmRlZiBGVENPTE9SX0hfCiAjZGVmaW5lIEZUQ09MT1JfSF8KIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAogI2lmZGVmIEZSRUVUWVBFX0gKICNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCkBAIC0xMjUsOSArMTI0LDkgQEAKICAgICogICAgIFRoZSBudW1iZXIgb2YgcGFsZXR0ZXMuCiAgICAqCiAgICAqICAgcGFsZXR0ZV9uYW1lX2lkcyA6OgotICAgKiAgICAgQSByZWFkLW9ubHkgYXJyYXkgb2YgcGFsZXR0ZSBuYW1lIElEcyB3aXRoIGBudW1fcGFsZXR0ZXNgIGVsZW1lbnRzLAotICAgKiAgICAgY29ycmVzcG9uZGluZyB0byBlbnRyaWVzIGxpa2UgJ2RhcmsnIG9yICdsaWdodCcgaW4gdGhlIGZvbnQncyAnbmFtZScKLSAgICogICAgIHRhYmxlLgorICAgKiAgICAgQW4gb3B0aW9uYWwgcmVhZC1vbmx5IGFycmF5IG9mIHBhbGV0dGUgbmFtZSBJRHMgd2l0aCBgbnVtX3BhbGV0dGVzYAorICAgKiAgICAgZWxlbWVudHMsIGNvcnJlc3BvbmRpbmcgdG8gZW50cmllcyBsaWtlICdkYXJrJyBvciAnbGlnaHQnIGluIHRoZQorICAgKiAgICAgZm9udCdzICduYW1lJyB0YWJsZS4KICAgICoKICAgICogICAgIEFuIGVtcHR5IG5hbWUgSUQgaW4gdGhlICdDUEFMJyB0YWJsZSBnZXRzIHJlcHJlc2VudGVkIGFzIHZhbHVlCiAgICAqICAgICAweEZGRkYuCkBAIC0xMzUsOCArMTM0LDggQEAKICAgICogICAgIGBOVUxMYCBpZiB0aGUgZm9udCdzICdDUEFMJyB0YWJsZSBkb2Vzbid0IGNvbnRhaW4gYXBwcm9wcmlhdGUgZGF0YS4KICAgICoKICAgICogICBwYWxldHRlX2ZsYWdzIDo6Ci0gICAqICAgICBBIHJlYWQtb25seSBhcnJheSBvZiBwYWxldHRlIGZsYWdzIHdpdGggYG51bV9wYWxldHRlc2AgZWxlbWVudHMuCi0gICAqICAgICBQb3NzaWJsZSB2YWx1ZXMgYXJlIGFuIE9SZWQgY29tYmluYXRpb24gb2YKKyAgICogICAgIEFuIG9wdGlvbmFsIHJlYWQtb25seSBhcnJheSBvZiBwYWxldHRlIGZsYWdzIHdpdGggYG51bV9wYWxldHRlc2AKKyAgICogICAgIGVsZW1lbnRzLiAgUG9zc2libGUgdmFsdWVzIGFyZSBhbiBPUmVkIGNvbWJpbmF0aW9uIG9mCiAgICAqICAgICBARlRfUEFMRVRURV9GT1JfTElHSFRfQkFDS0dST1VORCBhbmQKICAgICogICAgIEBGVF9QQUxFVFRFX0ZPUl9EQVJLX0JBQ0tHUk9VTkQuCiAgICAqCkBAIC0xNDcsNyArMTQ2LDcgQEAKICAgICogICAgIHNhbWUgc2l6ZS4KICAgICoKICAgICogICBwYWxldHRlX2VudHJ5X25hbWVfaWRzIDo6Ci0gICAqICAgICBBIHJlYWQtb25seSBhcnJheSBvZiBwYWxldHRlIGVudHJ5IG5hbWUgSURzIHdpdGgKKyAgICogICAgIEFuIG9wdGlvbmFsIHJlYWQtb25seSBhcnJheSBvZiBwYWxldHRlIGVudHJ5IG5hbWUgSURzIHdpdGgKICAgICogICAgIGBudW1fcGFsZXR0ZV9lbnRyaWVzYC4gIEluIGVhY2ggcGFsZXR0ZSwgZW50cmllcyB3aXRoIHRoZSBzYW1lIGluZGV4CiAgICAqICAgICBoYXZlIHRoZSBzYW1lIGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGUsIGluZGV4fjAgbWlnaHQgY29ycmVzcG9uZCB0bwogICAgKiAgICAgc3RyaW5nICdvdXRsaW5lJyBpbiB0aGUgZm9udCdzICduYW1lJyB0YWJsZSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMKQEAgLTE2Myw2ICsxNjIsOSBAQAogICAgKiAgIFVzZSBmdW5jdGlvbiBARlRfR2V0X1NmbnRfTmFtZSB0byBtYXAgbmFtZSBJRHMgYW5kIGVudHJ5IG5hbWUgSURzIHRvCiAgICAqICAgbmFtZSBzdHJpbmdzLgogICAgKgorICAgKiAgIFVzZSBmdW5jdGlvbiBARlRfUGFsZXR0ZV9TZWxlY3QgdG8gZ2V0IHRoZSBjb2xvcnMgYXNzb2NpYXRlZCB3aXRoIGEKKyAgICogICBwYWxldHRlIGVudHJ5LgorICAgKgogICAgKiBAc2luY2U6CiAgICAqICAgMi4xMAogICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRkcml2ZXIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRkcml2ZXIuaAppbmRleCA0OTdiZGU5Li44MDRlYzM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGRyaXZlci5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgQVBJIGZvciBjb250cm9sbGluZyBkcml2ZXIgbW9kdWxlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOSw5ICsxOSw4IEBACiAjaWZuZGVmIEZURFJJVkVSX0hfCiAjZGVmaW5lIEZURFJJVkVSX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotI2luY2x1ZGUgRlRfUEFSQU1FVEVSX1RBR1NfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRwYXJhbXMuaD4KIAogI2lmZGVmIEZSRUVUWVBFX0gKICNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCkBAIC00MjcsMTAgKzQyNiw2IEBACiAgICAqICAgY291bnRlcmFjdHMgdGhlICd0aGlubmluZyBvdXQnIG9mIGdseXBocywgbWFraW5nIHRleHQgcmVtYWluIHJlYWRhYmxlCiAgICAqICAgYXQgc21hbGxlciBzaXplcy4KICAgICoKLSAgICogICBCeSBkZWZhdWx0LCB0aGUgQWRvYmUgZW5naW5lcyBmb3IgQ0ZGLCBUeXBlfjEsIGFuZCBDSUQgZm9udHMgZGFya2VuCi0gICAqICAgc3RlbXMgYXQgc21hbGxlciBzaXplcywgcmVnYXJkbGVzcyBvZiBoaW50aW5nLCB0byBlbmhhbmNlIGNvbnRyYXN0LgotICAgKiAgIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSwgc3RlbSBkYXJrZW5pbmcgZ2V0cyBzd2l0Y2hlZCBvZmYuCi0gICAqCiAgICAqICAgRm9yIHRoZSBhdXRvLWhpbnRlciwgc3RlbS1kYXJrZW5pbmcgaXMgZXhwZXJpbWVudGFsIGN1cnJlbnRseSBhbmQgdGh1cwogICAgKiAgIHN3aXRjaGVkIG9mZiBieSBkZWZhdWx0ICh0aGlzIGlzLCBgbm8tc3RlbS1kYXJrZW5pbmdgIGlzIHNldCB0byBUUlVFCiAgICAqICAgYnkgZGVmYXVsdCkuICBUb3RhbCBjb25zaXN0ZW5jeSB3aXRoIHRoZSBDRkYgZHJpdmVyIGlzIG5vdCBhY2hpZXZlZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGVycmRlZi5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGVycmRlZi5oCmluZGV4IDliYzdkYzYuLjg5NWQyZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyZGVmLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGVycm9ycy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGVycm9ycy5oCmluZGV4IDJiNDdlYjIuLjYwYTYzN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJvcnMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyb3JzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBlcnJvciBjb2RlIGhhbmRsaW5nIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC04OSw3ICs4OSw3IEBACiAgICAqICAgICAgIGNvbnN0IGNoYXIqICBlcnJfbXNnOwogICAgKiAgICAgfSBmdF9lcnJvcnNbXSA9CiAgICAqCi0gICAqICAgICAjaW5jbHVkZSBGVF9FUlJPUlNfSAorICAgKiAgICAgI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZXJyb3JzLmg+CiAgICAqICAgYGBgCiAgICAqCiAgICAqICAgQW4gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgYW4gYXJyYXkgaXMgYSBzd2l0Y2ggc3RhdGVtZW50LgpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIAogICAvKiBpbmNsdWRlIG1vZHVsZSBiYXNlIGVycm9yIGNvZGVzICovCi0jaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdG1vZGVyci5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xOTcsNyArMTk3LDcgQEAKIAogCiAgIC8qIG5vdyBpbmNsdWRlIHRoZSBlcnJvciBjb2RlcyAqLwotI2luY2x1ZGUgRlRfRVJST1JfREVGSU5JVElPTlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZXJyZGVmLmg+CiAKIAogI2lmZGVmIEZUX0VSUk9SX0VORF9MSVNUCkBAIC0yMzIsMTEgKzIzMiwxNiBAQAogI3VuZGVmIEZUX0VSUl9QUkVGSVgKICNlbmRpZgogCi0gIC8qIEZUX0lOQ0xVREVfRVJSX1BST1RPUzogIENvbnRyb2wgaWYgZnVuY3Rpb24gcHJvdG90eXBlcyBzaG91bGQgYmUgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZWQgd2l0aCBgI2luY2x1ZGUgRlRfRVJST1JTX0gnLiAgVGhpcyBpcyAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IHRydWUgd2hlcmUgYEZUX0VSUk9SREVGYCBpcyB1bmRlZmluZWQuICAgICovCi0gIC8qIEZUX0VSUl9QUk9UT1NfREVGSU5FRDogIEFjdHVhbCBtdWx0aXBsZS1pbmNsdXNpb24gcHJvdGVjdGlvbiBvZiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgYGZ0ZXJyb3JzLmhgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGVF9JTkNMVURFX0VSUl9QUk9UT1M6IENvbnRyb2wgd2hldGhlciBmdW5jdGlvbiBwcm90b3R5cGVzIHNob3VsZCBiZSAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIHdpdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZXJyb3JzLmg+ICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSB0cnVlIHdoZXJlIGBGVF9FUlJPUkRFRmAgaXMgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGVF9FUlJfUFJPVE9TX0RFRklORUQ6IEFjdHVhbCBtdWx0aXBsZS1pbmNsdXNpb24gcHJvdGVjdGlvbiBvZiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGBmdGVycm9ycy5oYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2lmZGVmIEZUX0lOQ0xVREVfRVJSX1BST1RPUwogI3VuZGVmIEZUX0lOQ0xVREVfRVJSX1BST1RPUwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Zm50Zm10LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Zm50Zm10LmgKaW5kZXggYWFlMGIxMy4uZjgwMzM0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGZudGZtdC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRmbnRmbXQuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFN1cHBvcnQgZnVuY3Rpb25zIGZvciBmb250IGZvcm1hdHMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksOCArMTksNyBAQAogI2lmbmRlZiBGVEZOVEZNVF9IXwogI2RlZmluZSBGVEZOVEZNVF9IXwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgogCiAjaWZkZWYgRlJFRVRZUEVfSAogI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRnYXNwLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2FzcC5oCmluZGV4IDI0NjczZDguLjZiNzY4ODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRnYXNwLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEFjY2VzcyBvZiBUcnVlVHlwZSdzICdnYXNwJyB0YWJsZSAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksOCArMTksNyBAQAogI2lmbmRlZiBGVEdBU1BfSF8KICNkZWZpbmUgRlRHQVNQX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CiAKICNpZmRlZiBGUkVFVFlQRV9ICiAjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGdseXBoLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2x5cGguaAppbmRleCBmZWRhYjg0Li43MDQ2MTllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2x5cGguaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2x5cGguaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBoYW5kbGUgZ2x5cGhzIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0zMyw4ICszMyw3IEBACiAjZGVmaW5lIEZUR0xZUEhfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgogCiAjaWZkZWYgRlJFRVRZUEVfSAogI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRneHZhbC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGd4dmFsLmgKaW5kZXggYjE0ZjYzNy4uMzU0NDYwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGd4dmFsLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGd4dmFsLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBBUEkgZm9yIHZhbGlkYXRpbmcgVHJ1ZVR5cGVHWC9BQVQgdGFibGVzIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgYnkKICAqIE1hc2F0YWtlIFlBTUFUTywgUmVkaGF0IEsuSywKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCkBAIC0yOCw4ICsyOCw3IEBACiAjaWZuZGVmIEZUR1hWQUxfSF8KICNkZWZpbmUgRlRHWFZBTF9IXwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgogCiAjaWZkZWYgRlJFRVRZUEVfSAogI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRnemlwLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z3ppcC5oCmluZGV4IDQxOGM2MTIuLmVjNTkzOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRnemlwLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGd6aXAuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEd6aXAtY29tcHJlc3NlZCBzdHJlYW0gc3VwcG9ydC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOSw4ICsxOSw3IEBACiAjaWZuZGVmIEZUR1pJUF9IXwogI2RlZmluZSBGVEdaSVBfSF8KIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAogI2lmZGVmIEZSRUVUWVBFX0gKICNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCkBAIC00Myw2ICs0MiwxNiBAQAogICAgKiAgIFVzaW5nIGd6aXAtY29tcHJlc3NlZCBmb250IGZpbGVzLgogICAgKgogICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgSW4gY2VydGFpbiBidWlsZHMgb2YgdGhlIGxpYnJhcnksIGd6aXAgY29tcHJlc3Npb24gcmVjb2duaXRpb24gaXMKKyAgICogICBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgd2hlbiBjYWxsaW5nIEBGVF9OZXdfRmFjZSBvciBARlRfT3Blbl9GYWNlLgorICAgKiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBubyBmb250IGRyaXZlciBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIHRoZSByYXcKKyAgICogICBjb21wcmVzc2VkIGZpbGUsIHRoZSBsaWJyYXJ5IHdpbGwgdHJ5IHRvIG9wZW4gYSBnemlwcGVkIHN0cmVhbSBmcm9tIGl0CisgICAqICAgYW5kIHJlLW9wZW4gdGhlIGZhY2Ugd2l0aCBpdC4KKyAgICoKKyAgICogICBUaGUgc3RyZWFtIGltcGxlbWVudGF0aW9uIGlzIHZlcnkgYmFzaWMgYW5kIHJlc2V0cyB0aGUgZGVjb21wcmVzc2lvbgorICAgKiAgIHByb2Nlc3MgZWFjaCB0aW1lIHNlZWtpbmcgYmFja3dhcmRzIGlzIG5lZWRlZCB3aXRoaW4gdGhlIHN0cmVhbSwKKyAgICogICB3aGljaCBzaWduaWZpY2FudGx5IHVuZGVybWluZXMgdGhlIHBlcmZvcm1hbmNlLgorICAgKgogICAgKiAgIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgR3ppcC1zcGVjaWZpYyBmdW5jdGlvbnMuCiAgICAqCiAgICAqLwpAQCAtNzUsMTUgKzg0LDYgQEAKICAgICogICAqKm5vdCoqIGNhbGwgYEZUX1N0cmVhbV9DbG9zZWAgb24gdGhlIHNvdXJjZSBzdHJlYW0uICBOb25lIG9mIHRoZQogICAgKiAgIHN0cmVhbSBvYmplY3RzIHdpbGwgYmUgcmVsZWFzZWQgdG8gdGhlIGhlYXAuCiAgICAqCi0gICAqICAgVGhlIHN0cmVhbSBpbXBsZW1lbnRhdGlvbiBpcyB2ZXJ5IGJhc2ljIGFuZCByZXNldHMgdGhlIGRlY29tcHJlc3Npb24KLSAgICogICBwcm9jZXNzIGVhY2ggdGltZSBzZWVraW5nIGJhY2t3YXJkcyBpcyBuZWVkZWQgd2l0aGluIHRoZSBzdHJlYW0uCi0gICAqCi0gICAqICAgSW4gY2VydGFpbiBidWlsZHMgb2YgdGhlIGxpYnJhcnksIGd6aXAgY29tcHJlc3Npb24gcmVjb2duaXRpb24gaXMKLSAgICogICBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgd2hlbiBjYWxsaW5nIEBGVF9OZXdfRmFjZSBvciBARlRfT3Blbl9GYWNlLgotICAgKiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBubyBmb250IGRyaXZlciBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIHRoZSByYXcKLSAgICogICBjb21wcmVzc2VkIGZpbGUsIHRoZSBsaWJyYXJ5IHdpbGwgdHJ5IHRvIG9wZW4gYSBnemlwcGVkIHN0cmVhbSBmcm9tIGl0Ci0gICAqICAgYW5kIHJlLW9wZW4gdGhlIGZhY2Ugd2l0aCBpdC4KLSAgICoKICAgICogICBUaGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmVgIGlmIHlvdXIgYnVpbGQKICAgICogICBvZiBGcmVlVHlwZSB3YXMgbm90IGNvbXBpbGVkIHdpdGggemxpYiBzdXBwb3J0LgogICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgKaW5kZXggZmFjZTM0Zi4uNzQ5MTE2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgKQEAgLTUsNyArNSw3IEBACiAgKiAgIEZyZWVUeXBlIGdseXBoIGltYWdlIGZvcm1hdHMgYW5kIGRlZmF1bHQgcmFzdGVyIGludGVyZmFjZQogICogICAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMzAsNyArMzAsNiBAQAogCiAgIC8qIFNUQU5EQUxPTkVfIGlzIGZyb20gZnRncmF5cy5jICovCiAjaWZuZGVmIFNUQU5EQUxPTkVfCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNlbmRpZgogCiAKQEAgLTQwMSw2ICs0MDAsMTMgQEAKICAgICogICAgIGlmIEBGVF9PVVRMSU5FX0lHTk9SRV9EUk9QT1VUUyBpcyBzZXQuICBTZWUgYmVsb3cgZm9yIG1vcmUKICAgICogICAgIGluZm9ybWF0aW9uLgogICAgKgorICAgKiAgIEZUX09VVExJTkVfT1ZFUkxBUCA6OgorICAgKiAgICAgVGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHRoaXMgb3V0bGluZSBjb250YWlucyBvdmVybGFwcGluZyBjb250cm91cnMKKyAgICogICAgIGFuZCB0aGUgYW50aS1hbGlhc2VkIHJlbmRlcmVyIHNob3VsZCBwZXJmb3JtIG92ZXJzYW1wbGluZyB0bworICAgKiAgICAgbWl0aWdhdGUgcG9zc2libGUgYXJ0aWZhY3RzLiAgVGhpcyBmbGFnIHNob3VsZCBfbm90XyBiZSBzZXQgZm9yCisgICAqICAgICB3ZWxsIGRlc2lnbmVkIGdseXBocyB3aXRob3V0IG92ZXJsYXBzIGJlY2F1c2UgaXQgcXVhZHJ1cGxlcyB0aGUKKyAgICogICAgIHJlbmRlcmluZyB0aW1lLgorICAgKgogICAgKiAgIEZUX09VVExJTkVfSElHSF9QUkVDSVNJT04gOjoKICAgICogICAgIFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgc2Nhbi1saW5lIGNvbnZlcnRlciBzaG91bGQgdHJ5IHRvCiAgICAqICAgICBjb252ZXJ0IHRoaXMgb3V0bGluZSB0byBiaXRtYXBzIHdpdGggdGhlIGhpZ2hlc3QgcG9zc2libGUgcXVhbGl0eS4KQEAgLTQzMiw2ICs0MzgsNyBAQAogI2RlZmluZSBGVF9PVVRMSU5FX0lHTk9SRV9EUk9QT1VUUyAgMHg4CiAjZGVmaW5lIEZUX09VVExJTkVfU01BUlRfRFJPUE9VVFMgICAweDEwCiAjZGVmaW5lIEZUX09VVExJTkVfSU5DTFVERV9TVFVCUyAgICAweDIwCisjZGVmaW5lIEZUX09VVExJTkVfT1ZFUkxBUCAgICAgICAgICAweDQwCiAKICNkZWZpbmUgRlRfT1VUTElORV9ISUdIX1BSRUNJU0lPTiAgIDB4MTAwCiAjZGVmaW5lIEZUX09VVExJTkVfU0lOR0xFX1BBU1MgICAgICAweDIwMApAQCAtMTAwNCwyMCArMTAxMSwyNiBAQAogICAgKiAgICAgVXNlci1zdXBwbGllZCBkYXRhIHRoYXQgaXMgcGFzc2VkIHRvIGVhY2ggZHJhd2luZyBjYWxsYmFjay4KICAgICoKICAgICogICBjbGlwX2JveCA6OgotICAgKiAgICAgQW4gb3B0aW9uYWwgY2xpcHBpbmcgYm94LiAgSXQgaXMgb25seSB1c2VkIGluIGRpcmVjdCByZW5kZXJpbmcgbW9kZS4KLSAgICogICAgIE5vdGUgdGhhdCBjb29yZGluYXRlcyBoZXJlIHNob3VsZCBiZSBleHByZXNzZWQgaW4gX2ludGVnZXJfIHBpeGVscwotICAgKiAgICAgKGFuZCBub3QgaW4gMjYuNiBmaXhlZC1wb2ludCB1bml0cykuCisgICAqICAgICBBbiBvcHRpb25hbCBzcGFuIGNsaXBwaW5nIGJveCBleHByZXNzZWQgaW4gX2ludGVnZXJfIHBpeGVscworICAgKiAgICAgKG5vdCBpbiAyNi42IGZpeGVkLXBvaW50IHVuaXRzKS4KICAgICoKICAgICogQG5vdGU6Ci0gICAqICAgQW4gYW50aS1hbGlhc2VkIGdseXBoIGJpdG1hcCBpcyBkcmF3biBpZiB0aGUgQEZUX1JBU1RFUl9GTEFHX0FBIGJpdAotICAgKiAgIGZsYWcgaXMgc2V0IGluIHRoZSBgZmxhZ3NgIGZpZWxkLCBvdGhlcndpc2UgYSBtb25vY2hyb21lIGJpdG1hcCBpcwotICAgKiAgIGdlbmVyYXRlZC4KKyAgICogICBUaGUgQEZUX1JBU1RFUl9GTEFHX0FBIGJpdCBmbGFnIG11c3QgYmUgc2V0IGluIHRoZSBgZmxhZ3NgIHRvCisgICAqICAgZ2VuZXJhdGUgYW4gYW50aS1hbGlhc2VkIGdseXBoIGJpdG1hcCwgb3RoZXJ3aXNlIGEgbW9ub2Nocm9tZSBiaXRtYXAKKyAgICogICBpcyBnZW5lcmF0ZWQuICBUaGUgYHRhcmdldGAgc2hvdWxkIGhhdmUgYXBwcm9wcmlhdGUgcGl4ZWwgbW9kZSBhbmQgaXRzCisgICAqICAgZGltZW5zaW9ucyBkZWZpbmUgdGhlIGNsaXBwaW5nIHJlZ2lvbi4KICAgICoKLSAgICogICBJZiB0aGUgQEZUX1JBU1RFUl9GTEFHX0RJUkVDVCBiaXQgZmxhZyBpcyBzZXQgaW4gYGZsYWdzYCwgdGhlIHJhc3RlcgotICAgKiAgIHdpbGwgY2FsbCB0aGUgYGdyYXlfc3BhbnNgIGNhbGxiYWNrIHRvIGRyYXcgZ3JheSBwaXhlbCBzcGFucy4gIFRoaXMKLSAgICogICBhbGxvd3MgZGlyZWN0IGNvbXBvc2l0aW9uIG92ZXIgYSBwcmUtZXhpc3RpbmcgYml0bWFwIHRocm91Z2gKLSAgICogICB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrcyB0byBwZXJmb3JtIHRoZSBzcGFuIGRyYXdpbmcgYW5kIGNvbXBvc2l0aW9uLgotICAgKiAgIE5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1vbm9jaHJvbWUgcmFzdGVyaXplci4KKyAgICogICBJZiBib3RoIEBGVF9SQVNURVJfRkxBR19BQSBhbmQgQEZUX1JBU1RFUl9GTEFHX0RJUkVDVCBiaXQgZmxhZ3MKKyAgICogICBhcmUgc2V0IGluIGBmbGFnc2AsIHRoZSByYXN0ZXIgY2FsbHMgYW4gQEZUX1NwYW5GdW5jIGNhbGxiYWNrCisgICAqICAgYGdyYXlfc3BhbnNgIHdpdGggYHVzZXJgIGRhdGEgYXMgYW4gYXJndW1lbnQgaWdub3JpbmcgYHRhcmdldGAuICBUaGlzCisgICAqICAgYWxsb3dzIGRpcmVjdCBjb21wb3NpdGlvbiBvdmVyIGEgcHJlLWV4aXN0aW5nIHVzZXIgc3VyZmFjZSB0byBwZXJmb3JtCisgICAqICAgdGhlIHNwYW4gZHJhd2luZyBhbmQgY29tcG9zaXRpb24uICBUbyBvcHRpb25hbGx5IGNsaXAgdGhlIHNwYW5zLCBzZXQKKyAgICogICB0aGUgQEZUX1JBU1RFUl9GTEFHX0NMSVAgZmxhZyBhbmQgYGNsaXBfYm94YC4gIFRoZSBtb25vY2hyb21lIHJhc3RlcgorICAgKiAgIGRvZXMgbm90IHN1cHBvcnQgdGhlIGRpcmVjdCBtb2RlLgorICAgKgorICAgKiAgIFRoZSBncmF5LWxldmVsIHJhc3Rlcml6ZXIgYWx3YXlzIHVzZXMgMjU2IGdyYXkgbGV2ZWxzLiAgSWYgeW91IHdhbnQKKyAgICogICBmZXdlciBncmF5IGxldmVscywgeW91IGhhdmUgdG8gdXNlIEBGVF9SQVNURVJfRkxBR19ESVJFQ1QgYW5kIHJlZHVjZQorICAgKiAgIHRoZSBsZXZlbHMgaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgogICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1Jhc3Rlcl9QYXJhbXNfCiAgIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRpbmNyZW0uaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRpbmNyZW0uaAppbmRleCBhNGRiMDJiLi5mNjc2NTVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW5jcmVtLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGluY3JlbS5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgaW5jcmVtZW50YWwgbG9hZGluZyAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksOSArMTksOCBAQAogI2lmbmRlZiBGVElOQ1JFTV9IXwogI2RlZmluZSBGVElOQ1JFTV9IXwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX1BBUkFNRVRFUl9UQUdTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0cGFyYW1zLmg+CiAKICNpZmRlZiBGUkVFVFlQRV9ICiAjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGxjZGZpbC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGxjZGZpbC5oCmluZGV4IDNhMTlkMDQuLmM2OTk1ZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmgKQEAgLTUsNyArNSw3IEBACiAgKiAgIEZyZWVUeXBlIEFQSSBmb3IgY29sb3IgZmlsdGVyaW5nIG9mIHN1YnBpeGVsIGJpdG1hcCBnbHlwaHMKICAqICAgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDkgKzIwLDggQEAKICNpZm5kZWYgRlRMQ0RGSUxfSF8KICNkZWZpbmUgRlRMQ0RGSUxfSF8KIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0jaW5jbHVkZSBGVF9QQVJBTUVURVJfVEFHU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdHBhcmFtcy5oPgogCiAjaWZkZWYgRlJFRVRZUEVfSAogI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKQEAgLTQ3LDcgKzQ2LDcgQEAKICAgICogQGRlc2NyaXB0aW9uOgogICAgKiAgIEZyZWVUeXBlIHByb3ZpZGVzIHR3byBhbHRlcm5hdGl2ZSBzdWJwaXhlbCByZW5kZXJpbmcgdGVjaG5vbG9naWVzLiAKICAgICogICBTaG91bGQgeW91IGRlZmluZSBgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkdgIGluIHlvdXIKLSAgICogICBgZnRvcHRpb24uaGAgZmlsZSwgdGhpcyBlbmFibGVzIHBhdGVudGVkIENsZWFyVHlwZS1zdHlsZSByZW5kZXJpbmcuIAorICAgKiAgIGBmdG9wdGlvbi5oYCBmaWxlLCB0aGlzIGVuYWJsZXMgQ2xlYXJUeXBlLXN0eWxlIHJlbmRlcmluZy4KICAgICogICBPdGhlcndpc2UsIEhhcm1vbnkgTENEIHJlbmRlcmluZyBpcyBlbmFibGVkLiAgVGhlc2UgdGVjaG5vbG9naWVzIGFyZQogICAgKiAgIGNvbnRyb2xsZWQgZGlmZmVyZW50bHkgYW5kIEFQSSBkZXNjcmliZWQgYmVsb3csIGFsdGhvdWdoIGFsd2F5cwogICAgKiAgIGF2YWlsYWJsZSwgcGVyZm9ybXMgaXRzIGZ1bmN0aW9uIHdoZW4gYXBwcm9wcmlhdGUgbWV0aG9kIGlzIGVuYWJsZWQKQEAgLTE3Nyw3ICsxNzYsNyBAQAogICAgKiAgIEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gYXBwbHkgY29sb3IgZmlsdGVyaW5nIHRvIExDRCBkZWNpbWF0ZWQKKyAgICogICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hhbmdlIGZpbHRlciBhcHBsaWVkIHRvIExDRCBkZWNpbWF0ZWQKICAgICogICBiaXRtYXBzLCBsaWtlIHRoZSBvbmVzIHVzZWQgd2hlbiBjYWxsaW5nIEBGVF9SZW5kZXJfR2x5cGggd2l0aAogICAgKiAgIEBGVF9SRU5ERVJfTU9ERV9MQ0Qgb3IgQEZUX1JFTkRFUl9NT0RFX0xDRF9WLgogICAgKgpAQCAtMTk2LDE1ICsxOTUsMTQgQEAKICAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgogICAgKgogICAgKiBAbm90ZToKLSAgICogICBUaGlzIGZlYXR1cmUgaXMgYWx3YXlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBDbGllbnRzIG11c3QgbWFrZSBhbgotICAgKiAgIGV4cGxpY2l0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aXRoIGEgYGZpbHRlcmAgdmFsdWUgb3RoZXIgdGhhbgotICAgKiAgIEBGVF9MQ0RfRklMVEVSX05PTkUgaW4gb3JkZXIgdG8gZW5hYmxlIGl0LgorICAgKiAgIFNpbmNlIDIuMTAuMyB0aGUgTENEIGZpbHRlcmluZyBpcyBlbmFibGVkIHdpdGggQEZUX0xDRF9GSUxURVJfREVGQVVMVC4KKyAgICogICBJdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBleHBsaWNpdGx5IGV4Y2VwdAorICAgKiAgIHRvIGNob29zZSBhIGRpZmZlcmVudCBmaWx0ZXIgb3IgZGlzYWJsZSBmaWx0ZXJpbmcgYWx0b2dldGhlciB3aXRoCisgICAqICAgQEZUX0xDRF9GSUxURVJfTk9ORS4KICAgICoKLSAgICogICBEdWUgdG8gKipQQVRFTlRTKiogY292ZXJpbmcgc3VicGl4ZWwgcmVuZGVyaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QKLSAgICogICBkbyBhbnl0aGluZyBleGNlcHQgcmV0dXJuaW5nIGBGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlYCBpZiB0aGUKLSAgICogICBjb25maWd1cmF0aW9uIG1hY3JvIGBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklOR2AgaXMgbm90Ci0gICAqICAgZGVmaW5lZCBpbiB5b3VyIGJ1aWxkIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCBzaG91bGQgY29ycmVzcG9uZCB0byBhbGwKLSAgICogICBkZWZhdWx0IGJ1aWxkcyBvZiBGcmVlVHlwZS4KKyAgICogICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXQgcmV0dXJucyBgRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZWAKKyAgICogICBpZiB0aGUgY29uZmlndXJhdGlvbiBtYWNybyBgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkdgIGlzCisgICAqICAgbm90IGRlZmluZWQgaW4geW91ciBidWlsZCBvZiB0aGUgbGlicmFyeS4KICAgICoKICAgICogQHNpbmNlOgogICAgKiAgIDIuMy4wCkBAIC0yMzUsMTEgKzIzMyw5IEBACiAgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KICAgICoKICAgICogQG5vdGU6Ci0gICAqICAgRHVlIHRvICoqUEFURU5UUyoqIGNvdmVyaW5nIHN1YnBpeGVsIHJlbmRlcmluZywgdGhpcyBmdW5jdGlvbiBkb2Vzbid0Ci0gICAqICAgZG8gYW55dGhpbmcgZXhjZXB0IHJldHVybmluZyBgRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZWAgaWYgdGhlCi0gICAqICAgY29uZmlndXJhdGlvbiBtYWNybyBgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkdgIGlzIG5vdAotICAgKiAgIGRlZmluZWQgaW4geW91ciBidWlsZCBvZiB0aGUgbGlicmFyeSwgd2hpY2ggc2hvdWxkIGNvcnJlc3BvbmQgdG8gYWxsCi0gICAqICAgZGVmYXVsdCBidWlsZHMgb2YgRnJlZVR5cGUuCisgICAqICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0IHJldHVybnMgYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmVgCisgICAqICAgaWYgdGhlIGNvbmZpZ3VyYXRpb24gbWFjcm8gYEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HYCBpcworICAgKiAgIG5vdCBkZWZpbmVkIGluIHlvdXIgYnVpbGQgb2YgdGhlIGxpYnJhcnkuCiAgICAqCiAgICAqICAgTENEIGZpbHRlciB3ZWlnaHRzIGNhbiBhbHNvIGJlIHNldCBwZXIgZmFjZSB1c2luZyBARlRfRmFjZV9Qcm9wZXJ0aWVzCiAgICAqICAgd2l0aCBARlRfUEFSQU1fVEFHX0xDRF9GSUxURVJfV0VJR0hUUy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRsaXN0LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGlzdC5oCmluZGV4IDQ3ODI4OTIuLjQ1ODg5MjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRsaXN0LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGxpc3QuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEdlbmVyaWMgbGlzdCBzdXBwb3J0IGZvciBGcmVlVHlwZSAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjgsOCArMjgsNyBAQAogI2RlZmluZSBGVExJU1RfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgogCiAjaWZkZWYgRlJFRVRZUEVfSAogI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRsencuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRsencuaAppbmRleCBmZDIyOTY4Li5hZTQ2YWQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bHp3LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGx6dy5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgTFpXLWNvbXByZXNzZWQgc3RyZWFtIHN1cHBvcnQuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksOCArMTksNyBAQAogI2lmbmRlZiBGVExaV19IXwogI2RlZmluZSBGVExaV19IXwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgogCiAjaWZkZWYgRlJFRVRZUEVfSAogI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKQEAgLTQzLDYgKzQyLDE2IEBACiAgICAqICAgVXNpbmcgTFpXLWNvbXByZXNzZWQgZm9udCBmaWxlcy4KICAgICoKICAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEluIGNlcnRhaW4gYnVpbGRzIG9mIHRoZSBsaWJyYXJ5LCBMWlcgY29tcHJlc3Npb24gcmVjb2duaXRpb24gaXMKKyAgICogICBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgd2hlbiBjYWxsaW5nIEBGVF9OZXdfRmFjZSBvciBARlRfT3Blbl9GYWNlLgorICAgKiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBubyBmb250IGRyaXZlciBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIHRoZSByYXcKKyAgICogICBjb21wcmVzc2VkIGZpbGUsIHRoZSBsaWJyYXJ5IHdpbGwgdHJ5IHRvIG9wZW4gYSBMWlcgc3RyZWFtIGZyb20gaXQgYW5kCisgICAqICAgcmUtb3BlbiB0aGUgZmFjZSB3aXRoIGl0LgorICAgKgorICAgKiAgIFRoZSBzdHJlYW0gaW1wbGVtZW50YXRpb24gaXMgdmVyeSBiYXNpYyBhbmQgcmVzZXRzIHRoZSBkZWNvbXByZXNzaW9uCisgICAqICAgcHJvY2VzcyBlYWNoIHRpbWUgc2Vla2luZyBiYWNrd2FyZHMgaXMgbmVlZGVkIHdpdGhpbiB0aGUgc3RyZWFtLAorICAgKiAgIHdoaWNoIHNpZ25pZmljYW50bHkgdW5kZXJtaW5lcyB0aGUgcGVyZm9ybWFuY2UuCisgICAqCiAgICAqICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBMWlctc3BlY2lmaWMgZnVuY3Rpb25zLgogICAgKgogICAgKi8KQEAgLTczLDE1ICs4Miw2IEBACiAgICAqICAgKipub3QqKiBjYWxsIGBGVF9TdHJlYW1fQ2xvc2VgIG9uIHRoZSBzb3VyY2Ugc3RyZWFtLiAgTm9uZSBvZiB0aGUKICAgICogICBzdHJlYW0gb2JqZWN0cyB3aWxsIGJlIHJlbGVhc2VkIHRvIHRoZSBoZWFwLgogICAgKgotICAgKiAgIFRoZSBzdHJlYW0gaW1wbGVtZW50YXRpb24gaXMgdmVyeSBiYXNpYyBhbmQgcmVzZXRzIHRoZSBkZWNvbXByZXNzaW9uCi0gICAqICAgcHJvY2VzcyBlYWNoIHRpbWUgc2Vla2luZyBiYWNrd2FyZHMgaXMgbmVlZGVkIHdpdGhpbiB0aGUgc3RyZWFtCi0gICAqCi0gICAqICAgSW4gY2VydGFpbiBidWlsZHMgb2YgdGhlIGxpYnJhcnksIExaVyBjb21wcmVzc2lvbiByZWNvZ25pdGlvbiBpcwotICAgKiAgIGF1dG9tYXRpY2FsbHkgaGFuZGxlZCB3aGVuIGNhbGxpbmcgQEZUX05ld19GYWNlIG9yIEBGVF9PcGVuX0ZhY2UuCi0gICAqICAgVGhpcyBtZWFucyB0aGF0IGlmIG5vIGZvbnQgZHJpdmVyIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgdGhlIHJhdwotICAgKiAgIGNvbXByZXNzZWQgZmlsZSwgdGhlIGxpYnJhcnkgd2lsbCB0cnkgdG8gb3BlbiBhIExaVyBzdHJlYW0gZnJvbSBpdCBhbmQKLSAgICogICByZS1vcGVuIHRoZSBmYWNlIHdpdGggaXQuCi0gICAqCiAgICAqICAgVGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIGBGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlYCBpZiB5b3VyIGJ1aWxkCiAgICAqICAgb2YgRnJlZVR5cGUgd2FzIG5vdCBjb21waWxlZCB3aXRoIExaVyBzdXBwb3J0LgogICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRtYWMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRtYWMuaAppbmRleCA5MmI5ZjNkLi5jOWRlOTgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bWFjLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdG1hYy5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQWRkaXRpb25hbCBNYWMtc3BlY2lmaWMgQVBJLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogSnVzdCB2YW4gUm9zc3VtLCBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjksNyArMjksNiBAQAogI2RlZmluZSBGVE1BQ19IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdG1tLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW0uaAppbmRleCBmMmUxNmI2Li5kODc4MWE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW0uaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW0uaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIE11bHRpcGxlIE1hc3RlciBmb250IGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsOCArMjAsNyBAQAogI2RlZmluZSBGVE1NX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9UWVBFMV9UQUJMRVNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL3QxdGFibGVzLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kYXBpLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kYXBpLmgKaW5kZXggOGQwMzljNC4uM2Y3YWU4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdG1vZGFwaS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRtb2RhcGkuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIG1vZHVsZXMgcHVibGljIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsOCArMjAsNyBAQAogI2RlZmluZSBGVE1PREFQSV9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CiAKICNpZmRlZiBGUkVFVFlQRV9ICiAjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgpAQCAtNjUsNyArNjQsNyBAQAogICAgKiAgICAgcHNuYW1lcwogICAgKiAgICAgcmFzdGVyMQogICAgKiAgICAgc2ZudAotICAgKiAgICAgc21vb3RoLCBzbW9vdGgtbGNkLCBzbW9vdGgtbGNkdgorICAgKiAgICAgc21vb3RoCiAgICAqICAgICB0cnVldHlwZQogICAgKiAgICAgdHlwZTEKICAgICogICAgIHR5cGU0MgpAQCAtNDg2LDcgKzQ4NSw3IEBACiAgICAqCiAgICAqICAgYGBgCiAgICAqICAgICBGUkVFVFlQRV9QUk9QRVJUSUVTPXRydWV0eXBlOmludGVycHJldGVyLXZlcnNpb249MzUgXAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBjZmY6bm8tc3RlbS1kYXJrZW5pbmc9MSBcCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGNmZjpuby1zdGVtLWRhcmtlbmluZz0wIFwKICAgICogICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZpdHRlcjp3YXJwaW5nPTEKICAgICogICBgYGAKICAgICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRtb2RlcnIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRtb2RlcnIuaAppbmRleCBlMTY5OTM1Li5mMDVmYzUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kZXJyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdG1vZGVyci5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgbW9kdWxlIGVycm9yIG9mZnNldHMgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTk0LDcgKzk0LDcgQEAKICAgICogICAgIGNvbnN0IGNoYXIqICBtb2RfZXJyX21zZwogICAgKiAgIH0gZnRfbW9kX2Vycm9yc1tdID0KICAgICoKLSAgICogICAjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKyAgICogICAjaW5jbHVkZSA8ZnJlZXR5cGUvZnRtb2RlcnIuaD4KICAgICogYGBgCiAgICAqCiAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdG90dmFsLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3R2YWwuaAppbmRleCBjMDM0ZjQ4Li45YzAwYWQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3R2YWwuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3R2YWwuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBPcGVuVHlwZSB0YWJsZXMgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTMwLDggKzMwLDcgQEAKICNpZm5kZWYgRlRPVFZBTF9IXwogI2RlZmluZSBGVE9UVkFMX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CiAKICNpZmRlZiBGUkVFVFlQRV9ICiAjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdG91dGxuLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaAppbmRleCBiNzIzMjdiLi44NGU5YjE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaApAQCAtNSw3ICs1LDcgQEAKICAqICAgU3VwcG9ydCBmb3IgdGhlIEZUX091dGxpbmUgdHlwZSB1c2VkIHRvIHN0b3JlIGdseXBoIHNoYXBlcyBvZgogICogICBtb3N0IHNjYWxhYmxlIGZvbnQgZm9ybWF0cyAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjEsOCArMjEsNyBAQAogI2RlZmluZSBGVE9VVExOX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAogI2lmZGVmIEZSRUVUWVBFX0gKICNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCkBAIC00ODMsMTkgKzQ4MiwxMyBAQAogICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCiAgICAqCiAgICAqIEBub3RlOgotICAgKiAgIFRoaXMgYWR2YW5jZWQgZnVuY3Rpb24gdXNlcyBARlRfUmFzdGVyX1BhcmFtcyBhcyBhbiBhcmd1bWVudCwKLSAgICogICBhbGxvd2luZyBGcmVlVHlwZSByYXN0ZXJpemVyIHRvIGJlIHVzZWQgZm9yIGRpcmVjdCBjb21wb3NpdGlvbiwKLSAgICogICB0cmFuc2x1Y2VuY3ksIGV0Yy4gIFlvdSBzaG91bGQga25vdyBob3cgdG8gc2V0IHVwIEBGVF9SYXN0ZXJfUGFyYW1zCi0gICAqICAgZm9yIHRoaXMgZnVuY3Rpb24gdG8gd29yay4KLSAgICoKKyAgICogICBUaGlzIGFkdmFuY2VkIGZ1bmN0aW9uIHVzZXMgQEZUX1Jhc3Rlcl9QYXJhbXMgYXMgYW4gYXJndW1lbnQuCiAgICAqICAgVGhlIGZpZWxkIGBwYXJhbXMuc291cmNlYCB3aWxsIGJlIHNldCB0byBgb3V0bGluZWAgYmVmb3JlIHRoZSBzY2FuCiAgICAqICAgY29udmVydGVyIGlzIGNhbGxlZCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgdmFsdWUgeW91IGdpdmUgdG8gaXQgaXMKLSAgICogICBhY3R1YWxseSBpZ25vcmVkLgotICAgKgotICAgKiAgIFRoZSBncmF5LWxldmVsIHJhc3Rlcml6ZXIgYWx3YXlzIHVzZXMgMjU2IGdyYXkgbGV2ZWxzLiAgSWYgeW91IHdhbnQKLSAgICogICBsZXNzIGdyYXkgbGV2ZWxzLCB5b3UgaGF2ZSB0byBwcm92aWRlIHlvdXIgb3duIHNwYW4gY2FsbGJhY2suICBTZWUgdGhlCi0gICAqICAgQEZUX1JBU1RFUl9GTEFHX0RJUkVDVCB2YWx1ZSBvZiB0aGUgYGZsYWdzYCBmaWVsZCBpbiB0aGUKLSAgICogICBARlRfUmFzdGVyX1BhcmFtcyBzdHJ1Y3R1cmUgZm9yIG1vcmUgZGV0YWlscy4KKyAgICogICBhY3R1YWxseSBpZ25vcmVkLiAgRWl0aGVyIGBwYXJhbXMudGFyZ2V0YCBtdXN0IHBvaW50IHRvIHByZWFsbG9jYXRlZAorICAgKiAgIGJpdG1hcCwgb3IgQEZUX1JBU1RFUl9GTEFHX0RJUkVDVCBtdXN0IGJlIHNldCBpbiBgcGFyYW1zLmZsYWdzYAorICAgKiAgIGFsbG93aW5nIEZyZWVUeXBlIHJhc3Rlcml6ZXIgdG8gYmUgdXNlZCBmb3IgZGlyZWN0IGNvbXBvc2l0aW9uLAorICAgKiAgIHRyYW5zbHVjZW5jeSwgZXRjLiAgU2VlIEBGVF9SYXN0ZXJfUGFyYW1zIGZvciBtb3JlIGRldGFpbHMuCiAgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfT3V0bGluZV9SZW5kZXIoIEZUX0xpYnJhcnkgICAgICAgICBsaWJyYXJ5LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdHBhcmFtcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHBhcmFtcy5oCmluZGV4IGMzNzRlZTIuLjU1ZWEyYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRwYXJhbXMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGFyYW1zLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBBUEkgZm9yIHBvc3NpYmxlIEZUX1BhcmFtZXRlciB0YWdzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDggKzE5LDcgQEAKICNpZm5kZWYgRlRQQVJBTVNfSF8KICNkZWZpbmUgRlRQQVJBTVNfSF8KIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAogI2lmZGVmIEZSRUVUWVBFX0gKICNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGZyLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGZyLmgKaW5kZXggYjRlY2E3Ni4uOWE1MzgzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHBmci5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRwZnIuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIFBGUi1zcGVjaWZpYyBkYXRhIChzcGVjaWZpY2F0aW9uIG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDggKzE5LDcgQEAKICNpZm5kZWYgRlRQRlJfSF8KICNkZWZpbmUgRlRQRlJfSF8KIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAogI2lmZGVmIEZSRUVUWVBFX0gKICNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0cmVuZGVyLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0cmVuZGVyLmgKaW5kZXggYTAxYzc3NC4uODAwNzk1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHJlbmRlci5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRyZW5kZXIuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIHJlbmRlcmVyIG1vZHVsZXMgcHVibGljIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsOSArMjAsOCBAQAogI2RlZmluZSBGVFJFTkRFUl9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfTU9EVUxFX0gKLSNpbmNsdWRlIEZUX0dMWVBIX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdG1vZGFwaS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0Z2x5cGguaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRzaXplcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHNpemVzLmgKaW5kZXggNmM2M2NlZi4uYTg2ODJhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHNpemVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHNpemVzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBzaXplIG9iamVjdHMgbWFuYWdlbWVudCAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjksOCArMjksNyBAQAogI2RlZmluZSBGVFNJWkVTX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAogI2lmZGVmIEZSRUVUWVBFX0gKICNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c25hbWVzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c25hbWVzLmgKaW5kZXggNGQ0MzYwMi4uNzI5ZTZhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHNuYW1lcy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRzbmFtZXMuaApAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiAgIFRoaXMgaXMgX25vdF8gdXNlZCB0byByZXRyaWV2ZSBnbHlwaCBuYW1lcyEKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMyw5ICsyMyw4IEBACiAjZGVmaW5lIEZUU05BTUVTX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0jaW5jbHVkZSBGVF9QQVJBTUVURVJfVEFHU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdHBhcmFtcy5oPgogCiAjaWZkZWYgRlJFRVRZUEVfSAogI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRzdHJva2UuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRzdHJva2UuaAppbmRleCAwMWE5YzE4Li5hNzU5Yzk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3Ryb2tlLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHN0cm9rZS5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgcGF0aCBzdHJva2VyIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOSw5ICsxOSw4IEBACiAjaWZuZGVmIEZUU1RST0tFX0hfCiAjZGVmaW5lIEZUU1RST0tFX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfT1VUTElORV9ICi0jaW5jbHVkZSBGVF9HTFlQSF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRvdXRsbi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0Z2x5cGguaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKQEAgLTQ0LDcgKzQzLDcgQEAKICAgICogICAgYm9yZGVycyBvZiB0aGUgc3Ryb2tlLgogICAgKgogICAgKiAgICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gZ2VuZXJhdGUgJ2JvcmRlcmVkJyBnbHlwaCwgaS5lLiwgZ2x5cGhzCi0gICAqICAgIGRpc3BsYXllZCB3aXRoIGEgY29sb3VyZWQgKGFuZCBhbnRpLWFsaWFzZWQpIGJvcmRlciBhcm91bmQgdGhlaXIKKyAgICogICAgZGlzcGxheWVkIHdpdGggYSBjb2xvcmVkIChhbmQgYW50aS1hbGlhc2VkKSBib3JkZXIgYXJvdW5kIHRoZWlyCiAgICAqICAgIHNoYXBlLgogICAgKgogICAgKiBAb3JkZXI6CkBAIC0xMTQsMjIgKzExMywxOSBAQAogICAgKiAgIEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfRklYRUQgOjoKICAgICogICAgIFVzZWQgdG8gcmVuZGVyIG1pdGVyZWQgbGluZSBqb2lucywgd2l0aCBmaXhlZCBiZXZlbHMgaWYgdGhlIG1pdGVyCiAgICAqICAgICBsaW1pdCBpcyBleGNlZWRlZC4gIFRoZSBvdXRlciBlZGdlcyBvZiB0aGUgc3Ryb2tlcyBmb3IgdGhlIHR3bwotICAgKiAgICAgc2VnbWVudHMgYXJlIGV4dGVuZGVkIHVudGlsIHRoZXkgbWVldCBhdCBhbiBhbmdsZS4gIElmIHRoZSBzZWdtZW50cwotICAgKiAgICAgbWVldCBhdCB0b28gc2hhcnAgYW4gYW5nbGUgKHN1Y2ggdGhhdCB0aGUgbWl0ZXIgd291bGQgZXh0ZW5kIGZyb20KLSAgICogICAgIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHNlZ21lbnRzIGEgZGlzdGFuY2UgZ3JlYXRlciB0aGFuIHRoZSBwcm9kdWN0Ci0gICAqICAgICBvZiB0aGUgbWl0ZXIgbGltaXQgdmFsdWUgYW5kIHRoZSBib3JkZXIgcmFkaXVzKSwgdGhlbiBhIGJldmVsIGpvaW4KLSAgICogICAgIChzZWUgYWJvdmUpIGlzIHVzZWQgaW5zdGVhZC4gIFRoaXMgcHJldmVudHMgbG9uZyBzcGlrZXMgYmVpbmcKLSAgICogICAgIGNyZWF0ZWQuICBgRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9GSVhFRGAgZ2VuZXJhdGVzIGEgbWl0ZXIgbGluZQotICAgKiAgICAgam9pbiBhcyB1c2VkIGluIFBvc3RTY3JpcHQgYW5kIFBERi4KKyAgICogICAgIHNlZ21lbnRzIGFyZSBleHRlbmRlZCB1bnRpbCB0aGV5IG1lZXQgYXQgYW4gYW5nbGUuICBBIGJldmVsIGpvaW4KKyAgICogICAgIChzZWUgYWJvdmUpIGlzIHVzZWQgaWYgdGhlIHNlZ21lbnRzIG1lZXQgYXQgdG9vIHNoYXJwIGFuIGFuZ2xlIGFuZAorICAgKiAgICAgdGhlIG91dGVyIGVkZ2VzIG1lZXQgYmV5b25kIGEgZGlzdGFuY2UgY29ycmVzcG9uZGluZyB0byB0aGUgbWV0ZXIKKyAgICogICAgIGxpbWl0LiAgVGhpcyBwcmV2ZW50cyBsb25nIHNwaWtlcyBiZWluZyBjcmVhdGVkLgorICAgKiAgICAgYEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfRklYRURgIGdlbmVyYXRlcyBhIG1pdGVyIGxpbmUgam9pbiBhcworICAgKiAgICAgdXNlZCBpbiBQb3N0U2NyaXB0IGFuZCBQREYuCiAgICAqCiAgICAqICAgRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9WQVJJQUJMRSA6OgogICAgKiAgIEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVIgOjoKICAgICogICAgIFVzZWQgdG8gcmVuZGVyIG1pdGVyZWQgbGluZSBqb2lucywgd2l0aCB2YXJpYWJsZSBiZXZlbHMgaWYgdGhlIG1pdGVyCi0gICAqICAgICBsaW1pdCBpcyBleGNlZWRlZC4gIFRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHN0cm9rZXMgaXMgY2xpcHBlZCBhdCBhCi0gICAqICAgICBsaW5lIHBlcnBlbmRpY3VsYXIgdG8gdGhlIGJpc2VjdG9yIG9mIHRoZSBhbmdsZSBiZXR3ZWVuIHRoZSBzdHJva2VzLAotICAgKiAgICAgYXQgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgc2VnbWVudHMgZXF1YWwgdG8gdGhlCi0gICAqICAgICBwcm9kdWN0IG9mIHRoZSBtaXRlciBsaW1pdCB2YWx1ZSBhbmQgdGhlIGJvcmRlciByYWRpdXMuICBUaGlzCi0gICAqICAgICBwcmV2ZW50cyBsb25nIHNwaWtlcyBiZWluZyBjcmVhdGVkLiAKKyAgICogICAgIGxpbWl0IGlzIGV4Y2VlZGVkLiAgVGhlIGludGVyc2VjdGlvbiBvZiB0aGUgc3Ryb2tlcyBpcyBjbGlwcGVkCisgICAqICAgICBwZXJwZW5kaWN1bGFybHkgdG8gdGhlIGJpc2VjdG9yLCBhdCBhIGRpc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8KKyAgICogICAgIHRoZSBtaXRlciBsaW1pdC4gVGhpcyBwcmV2ZW50cyBsb25nIHNwaWtlcyBiZWluZyBjcmVhdGVkLgogICAgKiAgICAgYEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfVkFSSUFCTEVgIGdlbmVyYXRlcyBhIG1pdGVyZWQgbGluZSBqb2luCiAgICAqICAgICBhcyB1c2VkIGluIFhQUy4gIGBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSYCBpcyBhbiBhbGlhcyBmb3IKICAgICogICAgIGBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSX1ZBUklBQkxFYCwgcmV0YWluZWQgZm9yIGJhY2t3YXJkCkBAIC0yOTYsMTIgKzI5MiwxNyBAQAogICAgKiAgICAgVGhlIGxpbmUgam9pbiBzdHlsZS4KICAgICoKICAgICogICBtaXRlcl9saW1pdCA6OgotICAgKiAgICAgVGhlIG1pdGVyIGxpbWl0IGZvciB0aGUgYEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfRklYRURgIGFuZAotICAgKiAgICAgYEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfVkFSSUFCTEVgIGxpbmUgam9pbiBzdHlsZXMsIGV4cHJlc3NlZCBhcwotICAgKiAgICAgMTYuMTYgZml4ZWQtcG9pbnQgdmFsdWUuCisgICAqICAgICBUaGUgbWF4aW11bSByZWNpcHJvY2FsIHNpbmUgb2YgaGFsZi1hbmdsZSBhdCB0aGUgbWl0ZXIgam9pbiwKKyAgICogICAgIGV4cHJlc3NlZCBhcyAxNi4xNiBmaXhlZCBwb2ludCB2YWx1ZS4KICAgICoKICAgICogQG5vdGU6Ci0gICAqICAgVGhlIHJhZGl1cyBpcyBleHByZXNzZWQgaW4gdGhlIHNhbWUgdW5pdHMgYXMgdGhlIG91dGxpbmUgY29vcmRpbmF0ZXMuCisgICAqICAgVGhlIGByYWRpdXNgIGlzIGV4cHJlc3NlZCBpbiB0aGUgc2FtZSB1bml0cyBhcyB0aGUgb3V0bGluZQorICAgKiAgIGNvb3JkaW5hdGVzLgorICAgKgorICAgKiAgIFRoZSBgbWl0ZXJfbGltaXRgIG11bHRpcGxpZWQgYnkgdGhlIGByYWRpdXNgIGdpdmVzIHRoZSBtYXhpbXVtIHNpemUKKyAgICogICBvZiBhIG1pdGVyIHNwaWtlLCBhdCB3aGljaCBpdCBpcyBjbGlwcGVkIGZvcgorICAgKiAgIEBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSX1ZBUklBQkxFIG9yIHJlcGxhY2VkIHdpdGggYSBiZXZlbCBqb2luIGZvcgorICAgKiAgIEBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSX0ZJWEVELgogICAgKgogICAgKiAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgQEZUX1N0cm9rZXJfUmV3aW5kIGF1dG9tYXRpY2FsbHkuCiAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdHN5bnRoLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaAppbmRleCA4NzU0Zjk3Li5iZGI0YzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaApAQCAtNSw3ICs1LDcgQEAKICAqICAgRnJlZVR5cGUgc3ludGhlc2l6aW5nIGNvZGUgZm9yIGVtYm9sZGVuaW5nIGFuZCBzbGFudGluZwogICogICAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtNDUsOCArNDUsNyBAQAogI2RlZmluZSBGVFNZTlRIX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAogI2lmZGVmIEZSRUVUWVBFX0gKICNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3lzdGVtLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3lzdGVtLmgKaW5kZXggODg5YTZiYS4uMjJhZWFkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHN5c3RlbS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRzeXN0ZW0uaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIGxvdy1sZXZlbCBzeXN0ZW0gaW50ZXJmYWNlIGRlZmluaXRpb24gKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDcgKzIwLDYgQEAKICNkZWZpbmUgRlRTWVNURU1fSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnR0cmlnb24uaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnR0cmlnb24uaAppbmRleCAzN2UxNDEyLi4yY2U2YjMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHJpZ29uLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHRyaWdvbi5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgdHJpZ29ub21ldHJpYyBmdW5jdGlvbnMgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDcgKzE5LDcgQEAKICNpZm5kZWYgRlRUUklHT05fSF8KICNkZWZpbmUgRlRUUklHT05fSF8KIAotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CiAKICNpZmRlZiBGUkVFVFlQRV9ICiAjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHlwZXMuaAppbmRleCAxMDU3MTUwLi5hYWViOWU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHlwZXMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHlwZXMuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIHNpbXBsZSB0eXBlcyBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMiw4ICsyMiw4IEBACiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ICi0jaW5jbHVkZSBGVF9TWVNURU1fSAotI2luY2x1ZGUgRlRfSU1BR0VfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0c3lzdGVtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRpbWFnZS5oPgogCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnR3aW5mbnQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnR3aW5mbnQuaAppbmRleCBhMmZiYTkwLi43ODY1MjhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0d2luZm50LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHdpbmZudC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgV2luZG93cyBmbnQtc3BlY2lmaWMgZGF0YS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOSw4ICsxOSw3IEBACiAjaWZuZGVmIEZUV0lORk5UX0hfCiAjZGVmaW5lIEZUV0lORk5UX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CiAKICNpZmRlZiBGUkVFVFlQRV9ICiAjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9hdXRvaGludC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9hdXRvaGludC5oCmluZGV4IGY2NGMyOGIuLjJhNDcyZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvYXV0b2hpbnQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2F1dG9oaW50LmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBIaWdoLWxldmVsICdhdXRvaGludCcgbW9kdWxlLXNwZWNpZmljIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtNzAsOCArNzAsNyBAQAogICAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpAQCAtMjA4LDYgKzIwNyw5IEBACiAgIH0gRlRfQXV0b0hpbnRlcl9JbnRlcmZhY2VSZWMsICpGVF9BdXRvSGludGVyX0ludGVyZmFjZTsKIAogCisjZGVmaW5lIEZUX0RFQ0xBUkVfQVVUT0hJTlRFUl9JTlRFUkZBQ0UoIGNsYXNzXyApICAgICAgICAgICAgXAorICBGVF9DQUxMQkFDS19UQUJMRSBjb25zdCBGVF9BdXRvSGludGVyX0ludGVyZmFjZVJlYyAgY2xhc3NfOworCiAjZGVmaW5lIEZUX0RFRklORV9BVVRPSElOVEVSX0lOVEVSRkFDRSggICAgICAgXAogICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICByZXNldF9mYWNlXywgICAgICAgICAgICAgICAgICAgICAgICBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2NmZm90eXBlcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9jZmZvdHlwZXMuaAppbmRleCBiMjY4OTNlLi5hMzE2ZmQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2NmZm90eXBlcy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY2Zmb3R5cGVzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBCYXNpYyBPcGVuVHlwZS9DRkYgb2JqZWN0IHR5cGUgZGVmaW5pdGlvbnMgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDEyICsxOSwxMSBAQAogI2lmbmRlZiBDRkZPVFlQRVNfSF8KICNkZWZpbmUgQ0ZGT1RZUEVTX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9DRkZfVFlQRVNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfSElOVFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2NmZnR5cGVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNoaW50cy5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9jZmZ0eXBlcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9jZmZ0eXBlcy5oCmluZGV4IDJmYzkwNWUuLmYyMTE2N2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY2ZmdHlwZXMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2NmZnR5cGVzLmgKQEAgLTUsNyArNSw3IEBACiAgKiAgIEJhc2ljIE9wZW5UeXBlL0NGRiB0eXBlIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24KICAqICAgb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjEsMTMgKzIxLDEyIEBACiAjZGVmaW5lIENGRlRZUEVTX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0jaW5jbHVkZSBGVF9UWVBFMV9UQUJMRVNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9ISU5UU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90MXRhYmxlcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNoaW50cy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY29tcGlsZXItbWFjcm9zLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2NvbXBpbGVyLW1hY3Jvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YzE4ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2NvbXBpbGVyLW1hY3Jvcy5oCkBAIC0wLDAgKzEsMzA3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGludGVybmFsL2NvbXBpbGVyLW1hY3Jvcy5oCisgKgorICogICBDb21waWxlci1zcGVjaWZpYyBtYWNybyBkZWZpbml0aW9ucyB1c2VkIGludGVybmFsbHkgYnkgRnJlZVR5cGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwIGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCisKKyNpZm5kZWYgSU5URVJOQUxfQ09NUElMRVJfTUFDUk9TX0hfCisjZGVmaW5lIElOVEVSTkFMX0NPTVBJTEVSX01BQ1JPU19IXworCisjaW5jbHVkZSA8ZnJlZXR5cGUvY29uZmlnL3B1YmxpYy1tYWNyb3MuaD4KKworRlRfQkVHSU5fSEVBREVSCisKKyAgLyogRml4IGNvbXBpbGVyIHdhcm5pbmcgd2l0aCBzZ2kgY29tcGlsZXIuICovCisjaWYgZGVmaW5lZCggX19zZ2kgKSAmJiAhZGVmaW5lZCggX19HTlVDX18gKQorIyAgaWYgZGVmaW5lZCggX0NPTVBJTEVSX1ZFUlNJT04gKSAmJiAoIF9DT01QSUxFUl9WRVJTSU9OID49IDczMCApCisjICAgIHByYWdtYSBzZXQgd29mZiAzNTA1CisjICBlbmRpZgorI2VuZGlmCisKKyAgLyogRml4IGNvbXBpbGVyIHdhcm5pbmcgd2l0aCBzZ2kgY29tcGlsZXIuICovCisjaWYgZGVmaW5lZCggX19zZ2kgKSAmJiAhZGVmaW5lZCggX19HTlVDX18gKQorIyAgaWYgZGVmaW5lZCggX0NPTVBJTEVSX1ZFUlNJT04gKSAmJiAoIF9DT01QSUxFUl9WRVJTSU9OID49IDczMCApCisjICAgIHByYWdtYSBzZXQgd29mZiAzNTA1CisjICBlbmRpZgorI2VuZGlmCisKKyAgLyoKKyAgICogV2hlbiBkZWZpbmluZyBhIG1hY3JvIHRoYXQgZXhwYW5kcyB0byBhIG5vbi10cml2aWFsIEMgc3RhdGVtZW50LCB1c2UKKyAgICogRlRfQkVHSU5fU1RNTlQgYW5kIEZUX0VORF9TVE1OVCB0byBlbmNsb3NlIHRoZSBtYWNybydzIGJvZHkuICBUaGlzCisgICAqIGVuc3VyZXMgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyB3aGVuIHRoZSBtYWNybyBpcyBpbnZva2VkIGluIGNvbmRpdGlvbmFsCisgICAqIGJyYW5jaGVzLgorICAgKgorICAgKiBFeGFtcGxlOgorICAgKgorICAgKiAgICNkZWZpbmUgIExPRyggLi4uICkgICAgICAgIFwKKyAgICogICAgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICBcCisgICAqICAgICAgIGlmICggbG9nZ2luZ19lbmFibGVkICkgXAorICAgKiAgICAgICAgIGxvZyggX19WQV9BUkdTX18gKTsgIFwKKyAgICogICAgIEZUX0VORF9TVE1OVAorICAgKi8KKyNkZWZpbmUgRlRfQkVHSU5fU1RNTlQgIGRvIHsKKyNkZWZpbmUgRlRfRU5EX1NUTU5UICAgIH0gd2hpbGUgKCAwICkKKworICAvKgorICAgKiBGVF9EVU1NWV9TVE1OVCBleHBhbmRzIHRvIGFuIGVtcHR5IEMgc3RhdGVtZW50LiAgVXNlZnVsIGZvcgorICAgKiBjb25kaXRpb25hbGx5IGRlZmluZWQgc3RhdGVtZW50IG1hY3Jvcy4KKyAgICoKKyAgICogRXhhbXBsZToKKyAgICoKKyAgICogICAjaWZkZWYgQlVJTERfQ09ORklHX0xPR0dJTkcKKyAgICogICAjZGVmaW5lICBMT0coIC4uLiApICAgICAgICAgXAorICAgKiAgICAgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICBcCisgICAqICAgICAgICBpZiAoIGxvZ2dpbmdfZW5hYmxlZCApIFwKKyAgICogICAgICAgICAgbG9nKCBfX1ZBX0FSR1NfXyApOyAgXAorICAgKiAgICAgIEZUX0VORF9TVE1OVAorICAgKiAgICNlbHNlCisgICAqICAgIyAgZGVmaW5lIExPRyggLi4uICkgIEZUX0RVTU1ZX1NUTU5UCisgICAqICAgI2VuZGlmCisgICAqLworI2RlZmluZSBGVF9EVU1NWV9TVE1OVCAgRlRfQkVHSU5fU1RNTlQgRlRfRU5EX1NUTU5UCisKKyNpZmRlZiBfV0lONjQKKyAgLyogb25seSA2NGJpdCBXaW5kb3dzIHVzZXMgdGhlIExMUDY0IGRhdGEgbW9kZWwsIGkuZS4sICovCisgIC8qIDMyLWJpdCBpbnRlZ2VycywgNjQtYml0IHBvaW50ZXJzLiAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9VSU5UX1RPX1BPSU5URVIoIHggKSAgKHZvaWQgKikodW5zaWduZWQgX19pbnQ2NCkoeCkKKyNlbHNlCisjZGVmaW5lIEZUX1VJTlRfVE9fUE9JTlRFUiggeCApICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSh4KQorI2VuZGlmCisKKyAgLyoKKyAgICogVXNlIGBGVF9UWVBFT0YoIHR5cGUgKWAgdG8gY2FzdCBhIHZhbHVlIHRvIGB0eXBlYC4gIFRoaXMgaXMgdXNlZnVsIHRvCisgICAqIHN1cHByZXNzIHNpZ25lZG5lc3MgY29tcGlsYXRpb24gd2FybmluZ3MgaW4gbWFjcm9zLgorICAgKgorICAgKiBFeGFtcGxlOgorICAgKgorICAgKiAgICNkZWZpbmUgUEFEXyggeCwgbiApICAoICh4KSAmIH5GVF9UWVBFT0YoIHggKSggKG4pIC0gMSApICkKKyAgICoKKyAgICogKFRoZSBgdHlwZW9mYCBjb25kaXRpb24gaXMgdGFrZW4gZnJvbSBnbnVsaWIncyBgaW50cHJvcHMuaGAgaGVhZGVyCisgICAqIGZpbGUuKQorICAgKi8KKyNpZiAoICggZGVmaW5lZCggX19HTlVDX18gKSAmJiBfX0dOVUNfXyA+PSAyICkgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKKyAgICAgICggZGVmaW5lZCggX19JQk1DX18gKSAmJiBfX0lCTUNfXyA+PSAxMjEwICYmICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGVmaW5lZCggX19JQk1fX1RZUEVPRl9fICkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKKyAgICAgICggZGVmaW5lZCggX19TVU5QUk9fQyApICYmIF9fU1VOUFJPX0MgPj0gMHg1MTEwICYmICFfX1NURENfXyApICkKKyNkZWZpbmUgRlRfVFlQRU9GKCB0eXBlICkgICggX190eXBlb2ZfXyAoIHR5cGUgKSApCisjZWxzZQorI2RlZmluZSBGVF9UWVBFT0YoIHR5cGUgKSAgLyogZW1wdHkgKi8KKyNlbmRpZgorCisgIC8qCisgICAqIE1hcmsgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhcyBpbnRlcm5hbCB0byB0aGUgbGlicmFyeS4gIFRoaXMgZW5zdXJlcworICAgKiB0aGF0IGl0IHdpbGwgbm90IGJlIGV4cG9zZWQgYnkgZGVmYXVsdCB0byBjbGllbnQgY29kZSwgYW5kIGhlbHBzCisgICAqIGdlbmVyYXRlIHNtYWxsZXIgYW5kIGZhc3RlciBjb2RlIG9uIEVMRi1iYXNlZCBwbGF0Zm9ybXMuICBQbGFjZSB0aGlzCisgICAqIGJlZm9yZSBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorICAgKi8KKworICAvKiBWaXN1YWwgQywgbWluZ3cgKi8KKyNpZiBkZWZpbmVkKCBfV0lOMzIgKQorI2RlZmluZSBGVF9JTlRFUk5BTF9GVU5DVElPTl9BVFRSSUJVVEUgIC8qIGVtcHR5ICovCisKKyAgLyogZ2NjLCBjbGFuZyAqLworI2VsaWYgKCBkZWZpbmVkKCBfX0dOVUNfXyApICYmIF9fR05VQ19fID49IDQgKSB8fCBkZWZpbmVkKCBfX2NsYW5nX18gKQorI2RlZmluZSBGVF9JTlRFUk5BTF9GVU5DVElPTl9BVFRSSUJVVEUgIFwKKyAgICAgICAgICBfX2F0dHJpYnV0ZV9fKCggdmlzaWJpbGl0eSggImhpZGRlbiIgKSApKQorCisgIC8qIFN1biAqLworI2VsaWYgZGVmaW5lZCggX19TVU5QUk9fQyApICYmIF9fU1VOUFJPX0MgPj0gMHg1NTAKKyNkZWZpbmUgRlRfSU5URVJOQUxfRlVOQ1RJT05fQVRUUklCVVRFICBfX2hpZGRlbgorCisjZWxzZQorI2RlZmluZSBGVF9JTlRFUk5BTF9GVU5DVElPTl9BVFRSSUJVVEUgIC8qIGVtcHR5ICovCisjZW5kaWYKKworICAvKgorICAgKiBGcmVlVHlwZSBzdXBwb3J0cyBjb21waWxhdGlvbiBvZiBpdHMgQyBzb3VyY2VzIHdpdGggYSBDKysgY29tcGlsZXIgKGluCisgICAqIEMrKyBtb2RlKTsgdGhpcyBpbnRyb2R1Y2VzIGEgbnVtYmVyIG9mIHN1YnRsZSBpc3N1ZXMuCisgICAqCisgICAqIFRoZSBtYWluIG9uZSBpcyB0aGF0IGEgQysrIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCBpdHMgZGVmaW5pdGlvbiBtdXN0CisgICAqIGhhdmUgdGhlIHNhbWUgJ2xpbmthZ2UnLiAgQmVjYXVzZSBhbGwgRnJlZVR5cGUgaGVhZGVycyBkZWNsYXJlIHRoZWlyCisgICAqIGZ1bmN0aW9ucyB3aXRoIEMgbGlua2FnZSAoaS5lLiwgd2l0aGluIGFuIGBleHRlcm4gIkMiIHsgLi4uIH1gIGJsb2NrCisgICAqIGR1ZSB0byB0aGUgbWFnaWMgb2YgRlRfQkVHSU5fSEVBREVSIGFuZCBGVF9FTkRfSEVBREVSKSwgdGhlaXIKKyAgICogZGVmaW5pdGlvbiBpbiBGcmVlVHlwZSBzb3VyY2VzIHNob3VsZCBhbHNvIGJlIHByZWZpeGVkIHdpdGggYGV4dGVybgorICAgKiAiQyJgIHdoZW4gY29tcGlsZWQgaW4gQysrIG1vZGUuCisgICAqCisgICAqIFRoZSBgRlRfRlVOQ1RJT05fREVDTEFSQVRJT05gIGFuZCBgRlRfRlVOQ1RJT05fREVGSU5JVElPTmAgbWFjcm9zIGFyZQorICAgKiBwcm92aWRlZCB0byBkZWFsIHdpdGggdGhpcyBjYXNlLCBhcyB3ZWxsIGFzIGBGVF9DQUxMQkFDS19ERUZgIGFuZCBpdHMKKyAgICogc2libGluZ3MgYmVsb3cuCisgICAqLworCisgIC8qCisgICAqIGBGVF9GVU5DVElPTl9ERUNMQVJBVElPTiggdHlwZSApYCBjYW4gYmUgdXNlZCB0byB3cml0ZSBhIEMgZnVuY3Rpb24KKyAgICogZGVjbGFyYXRpb24gdG8gZW5zdXJlIGl0IHdpbGwgaGF2ZSBDIGxpbmthZ2Ugd2hlbiB0aGUgbGlicmFyeSBpcyBidWlsdAorICAgKiB3aXRoIGEgQysrIGNvbXBpbGVyLiAgVGhlIHBhcmFtZXRlciBpcyB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdHlwZSwgc28gYQorICAgKiBkZWNsYXJhdGlvbiB3b3VsZCBsb29rIGxpa2UKKyAgICoKKyAgICogICAgRlRfRlVOQ1RJT05fREVDTEFSQVRJT04oIGludCApCisgICAqICAgIGZvbyggaW50IHggKTsKKyAgICoKKyAgICogTk9URTogVGhpcyByZXF1aXJlcyB0aGF0IGFsbCB1c2VzIGFyZSBpbnNpZGUgb2YgYEZUX0JFR0lOX0hFQURFUiAuLi4KKyAgICogRlRfRU5EX0hFQURFUmAgYmxvY2tzLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGRlY2xhcmF0aW9ucyBoYXZlIEMKKyAgICogbGlua2FnZSB3aGVuIHRoZSBoZWFkZXJzIGFyZSBpbmNsdWRlZCBieSBDKysgc291cmNlcy4KKyAgICoKKyAgICogTk9URTogRG8gbm90IHVzZSBkaXJlY3RseS4gIFVzZSBgRlRfTE9DQUxgLCBgRlRfQkFTRWAsIGFuZCBgRlRfRVhQT1JUYAorICAgKiBpbnN0ZWFkLgorICAgKi8KKyNkZWZpbmUgRlRfRlVOQ1RJT05fREVDTEFSQVRJT04oIHggKSAgZXh0ZXJuIHgKKworICAvKgorICAgKiBTYW1lIGFzIGBGVF9GVU5DVElPTl9ERUNMQVJBVElPTmAsIGJ1dCBmb3IgZnVuY3Rpb24gZGVmaW5pdGlvbnMgaW5zdGVhZC4KKyAgICoKKyAgICogTk9URTogRG8gbm90IHVzZSBkaXJlY3RseS4gIFVzZSBgRlRfTE9DQUxfREVGYCwgYEZUX0JBU0VfREVGYCwgYW5kCisgICAqIGBGVF9FWFBPUlRfREVGYCBpbnN0ZWFkLgorICAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9GVU5DVElPTl9ERUZJTklUSU9OKCB4ICkgIGV4dGVybiAiQyIgeAorI2Vsc2UKKyNkZWZpbmUgRlRfRlVOQ1RJT05fREVGSU5JVElPTiggeCApICB4CisjZW5kaWYKKworICAvKgorICAgKiBVc2UgYEZUX0xPQ0FMYCBhbmQgYEZUX0xPQ0FMX0RFRmAgdG8gZGVjbGFyZSBhbmQgZGVmaW5lLCByZXNwZWN0aXZlbHksCisgICAqIGFuIGludGVybmFsIEZyZWVUeXBlIGZ1bmN0aW9uIHRoYXQgaXMgb25seSB1c2VkIGJ5IHRoZSBzb3VyY2VzIG9mIGEKKyAgICogc2luZ2xlIGBzcmMvbW9kdWxlL2AgZGlyZWN0b3J5LiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGZ1bmN0aW9ucyBhcmUKKyAgICogdHVybmVkIGludG8gc3RhdGljIG9uZXMgYXQgYnVpbGQgdGltZSwgcmVzdWx0aW5nIGluIHNtYWxsZXIgYW5kIGZhc3RlcgorICAgKiBjb2RlLgorICAgKi8KKyNpZmRlZiBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCisKKyNkZWZpbmUgRlRfTE9DQUwoIHggKSAgICAgIHN0YXRpYyB4CisjZGVmaW5lIEZUX0xPQ0FMX0RFRiggeCApICBzdGF0aWMgeAorCisjZWxzZQorCisjZGVmaW5lIEZUX0xPQ0FMKCB4ICkgICAgICBGVF9JTlRFUk5BTF9GVU5DVElPTl9BVFRSSUJVVEUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRlVOQ1RJT05fREVDTEFSQVRJT04oIHggKQorI2RlZmluZSBGVF9MT0NBTF9ERUYoIHggKSAgRlRfRlVOQ1RJT05fREVGSU5JVElPTiggeCApCisKKyNlbmRpZiAgLyogRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVCAqLworCisgIC8qCisgICAqIFVzZSBgRlRfTE9DQUxfQVJSQVlgIGFuZCBgRlRfTE9DQUxfQVJSQVlfREVGYCB0byBkZWNsYXJlIGFuZCBkZWZpbmUsCisgICAqIHJlc3BlY3RpdmVseSwgYSBjb25zdGFudCBhcnJheSB0aGF0IG11c3QgYmUgYWNjZXNzZWQgZnJvbSBzZXZlcmFsCisgICAqIHNvdXJjZXMgaW4gdGhlIHNhbWUgYHNyYy9tb2R1bGUvYCBzdWItZGlyZWN0b3J5LCBhbmQgd2hpY2ggYXJlIGludGVybmFsCisgICAqIHRvIHRoZSBsaWJyYXJ5LgorICAgKi8KKyNkZWZpbmUgRlRfTE9DQUxfQVJSQVkoIHggKSAgICAgIEZUX0lOVEVSTkFMX0ZVTkNUSU9OX0FUVFJJQlVURSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gY29uc3QgeAorI2RlZmluZSBGVF9MT0NBTF9BUlJBWV9ERUYoIHggKSAgRlRfRlVOQ1RJT05fREVGSU5JVElPTiggY29uc3QgeCApCisKKyAgLyoKKyAgICogYFVzZSBGVF9CQVNFYCBhbmQgYEZUX0JBU0VfREVGYCB0byBkZWNsYXJlIGFuZCBkZWZpbmUsIHJlc3BlY3RpdmVseSwgYW4KKyAgICogaW50ZXJuYWwgbGlicmFyeSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgYnkgbW9yZSB0aGFuIGEgc2luZ2xlIG1vZHVsZS4KKyAgICovCisjZGVmaW5lIEZUX0JBU0UoIHggKSAgICAgIEZUX0lOVEVSTkFMX0ZVTkNUSU9OX0FUVFJJQlVURSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OKCB4ICkKKyNkZWZpbmUgRlRfQkFTRV9ERUYoIHggKSAgRlRfRlVOQ1RJT05fREVGSU5JVElPTiggeCApCisKKworICAvKgorICAgKiBOT1RFOiBDb25kaXRpb25hbGx5IGRlZmluZSBgRlRfRVhQT1JUX1ZBUmAgZHVlIHRvIGl0cyBkZWZpbml0aW9uIGluCisgICAqIGBzcmMvc21vb3RoL2Z0Z3JheXMuaGAgdG8gbWFrZSB0aGUgaGVhZGVyIG1vcmUgcG9ydGFibGUuCisgICAqLworI2lmbmRlZiBGVF9FWFBPUlRfVkFSCisjZGVmaW5lIEZUX0VYUE9SVF9WQVIoIHggKSAgRlRfRlVOQ1RJT05fREVDTEFSQVRJT04oIHggKQorI2VuZGlmCisKKyAgLyogV2hlbiBjb21waWxpbmcgRnJlZVR5cGUgYXMgYSBETEwgb3IgRFNPIHdpdGggaGlkZGVuIHZpc2liaWxpdHksICAgKi8KKyAgLyogc29tZSBzeXN0ZW1zL2NvbXBpbGVycyBuZWVkIGEgc3BlY2lhbCBhdHRyaWJ1dGUgaW4gZnJvbnQgT1IgYWZ0ZXIgKi8KKyAgLyogdGhlIHJldHVybiB0eXBlIG9mIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVHdvIG1hY3JvcyBhcmUgdXNlZCB3aXRoaW4gdGhlIEZyZWVUeXBlIHNvdXJjZSBjb2RlIHRvIGRlZmluZSAgICAgKi8KKyAgLyogZXhwb3J0ZWQgbGlicmFyeSBmdW5jdGlvbnM6IGBGVF9FWFBPUlRgIGFuZCBgRlRfRVhQT1JUX0RFRmAuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSBgRlRfRVhQT1JUKCByZXR1cm5fdHlwZSApYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBpcyB1c2VkIGluIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24sIGFzIGluICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIEZUX0luaXRfRnJlZVR5cGUoIEZUX0xpYnJhcnkqICBhbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSBgRlRfRVhQT1JUX0RFRiggcmV0dXJuX3R5cGUgKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBpcyB1c2VkIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgYXMgaW4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIEZUX0luaXRfRnJlZVR5cGUoIEZUX0xpYnJhcnkqICBhbGlicmFyeSApICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgLi4uIHNvbWUgY29kZSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogWW91IGNhbiBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIGBGVF9FWFBPUlRgIGFuZCAgICAgICAgKi8KKyAgLyogYEZUX0VYUE9SVF9ERUZgIGhlcmUgaWYgeW91IHdhbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVG8gZXhwb3J0IGEgdmFyaWFibGUsIHVzZSBgRlRfRVhQT1JUX1ZBUmAuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAvKiBTZWUgYGZyZWV0eXBlL2NvbmZpZy9jb21waWxlcl9tYWNyb3MuaGAgZm9yIHRoZSBgRlRfRVhQT1JUYCBkZWZpbml0aW9uICovCisjZGVmaW5lIEZUX0VYUE9SVF9ERUYoIHggKSAgRlRfRlVOQ1RJT05fREVGSU5JVElPTiggeCApCisKKyAgLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIG5lZWRlZCB0byBjb21waWxlIHRoZSBsaWJyYXJ5IHdpdGggYSAgICovCisgIC8qIEMrKyBjb21waWxlciBhbmQgd2l0aCAxNmJpdCBjb21waWxlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAvKiBUaGlzIGlzIHNwZWNpYWwuICBXaXRoaW4gQysrLCB5b3UgbXVzdCBzcGVjaWZ5IGBleHRlcm4gIkMiYCBmb3IgKi8KKyAgLyogZnVuY3Rpb25zIHdoaWNoIGFyZSB1c2VkIHZpYSBmdW5jdGlvbiBwb2ludGVycywgYW5kIHlvdSBhbHNvICAgICovCisgIC8qIG11c3QgZG8gdGhhdCBmb3Igc3RydWN0dXJlcyB3aGljaCBjb250YWluIGZ1bmN0aW9uIHBvaW50ZXJzIHRvICAqLworICAvKiBhc3N1cmUgQyBsaW5rYWdlIC0tIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGhhdmUgKGxvY2FsKSBhbm9ueW1vdXMgKi8KKyAgLyogZnVuY3Rpb25zIHdoaWNoIGFyZSBhY2Nlc3NlZCBieSAoZ2xvYmFsKSBmdW5jdGlvbiBwb2ludGVycy4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRlRfQ0FMTEJBQ0tfREVGIGlzIHVzZWQgdG8gX2RlZmluZV8gYSBjYWxsYmFjayBmdW5jdGlvbiwgICAgICAgICovCisgIC8qIGxvY2F0ZWQgaW4gdGhlIHNhbWUgc291cmNlIGNvZGUgZmlsZSBhcyB0aGUgc3RydWN0dXJlIHRoYXQgdXNlcyAqLworICAvKiBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZUX0JBU0VfQ0FMTEJBQ0sgYW5kIEZUX0JBU0VfQ0FMTEJBQ0tfREVGIGFyZSB1c2VkIHRvIGRlY2xhcmUgICAqLworICAvKiBhbmQgZGVmaW5lIGEgY2FsbGJhY2sgZnVuY3Rpb24sIHJlc3BlY3RpdmVseSwgaW4gYSBzaW1pbGFyIHdheSAgKi8KKyAgLyogYXMgRlRfQkFTRSBhbmQgRlRfQkFTRV9ERUYgd29yay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGVF9DQUxMQkFDS19UQUJMRSBpcyB1c2VkIHRvIF9kZWNsYXJlXyBhIGNvbnN0YW50IHZhcmlhYmxlIHRoYXQgKi8KKyAgLyogY29udGFpbnMgcG9pbnRlcnMgdG8gY2FsbGJhY2sgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGVF9DQUxMQkFDS19UQUJMRV9ERUYgaXMgdXNlZCB0byBfZGVmaW5lXyBhIGNvbnN0YW50IHZhcmlhYmxlICAgKi8KKyAgLyogdGhhdCBjb250YWlucyBwb2ludGVycyB0byBjYWxsYmFjayBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU29tZSAxNmJpdCBjb21waWxlcnMgaGF2ZSB0byByZWRlZmluZSB0aGVzZSBtYWNyb3MgdG8gaW5zZXJ0ICAgICovCisgIC8qIHRoZSBpbmZhbW91cyBgX2NkZWNsYCBvciBgX19mYXN0Y2FsbGAgZGVjbGFyYXRpb25zLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9DQUxMQkFDS19ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAorI2Vsc2UKKyNkZWZpbmUgRlRfQ0FMTEJBQ0tfREVGKCB4ICkgIHN0YXRpYyAgeAorI2VuZGlmCisKKyNkZWZpbmUgRlRfQkFTRV9DQUxMQkFDSyggeCApICAgICAgRlRfRlVOQ1RJT05fREVDTEFSQVRJT04oIHggKQorI2RlZmluZSBGVF9CQVNFX0NBTExCQUNLX0RFRiggeCApICBGVF9GVU5DVElPTl9ERUZJTklUSU9OKCB4ICkKKworI2lmbmRlZiBGVF9DQUxMQkFDS19UQUJMRQorI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFICAgICAgZXh0ZXJuICJDIgorI2RlZmluZSBGVF9DQUxMQkFDS19UQUJMRV9ERUYgIGV4dGVybiAiQyIKKyNlbHNlCisjZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFICAgICAgZXh0ZXJuCisjZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFX0RFRiAgLyogbm90aGluZyAqLworI2VuZGlmCisjZW5kaWYgLyogRlRfQ0FMTEJBQ0tfVEFCTEUgKi8KKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgIC8qIElOVEVSTkFMX0NPTVBJTEVSX01BQ1JPU19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmgKaW5kZXggMTgxMWZjZC4uYzY1MzA3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQXJpdGhtZXRpYyBjb21wdXRhdGlvbnMgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDkgKzIwLDkgQEAKICNkZWZpbmUgRlRDQUxDX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAorI2luY2x1ZGUgImNvbXBpbGVyLW1hY3Jvcy5oIgogCiBGVF9CRUdJTl9IRUFERVIKIApAQCAtNDQ5LDggKzQ0OSw3IEBACiAjZGVmaW5lIEYyRE9UMTRfVE9fRklYRUQoIHggKSAgKCAoRlRfTG9uZykoeCkgKiA0ICkgICAgICAvKiA8PCAyICAqLwogI2RlZmluZSBGSVhFRF9UT19JTlQoIHggKSAgICAgICggRlRfUm91bmRGaXgoIHggKSA+PiAxNiApCiAKLSNkZWZpbmUgUk9VTkRfRjI2RE9UNiggeCApICAgICAoIHggPj0gMCA/ICggICAgKCAoeCkgKyAzMiApICYgLTY0ICkgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICggLSggKCAzMiAtICh4KSApICYgLTY0ICkgKSApCisjZGVmaW5lIFJPVU5EX0YyNkRPVDYoIHggKSAgICAgKCAoICh4KSArIDMyIC0gKCB4IDwgMCApICkgJiAtNjQgKQogCiAgIC8qCiAgICAqIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGhhdmUgdHdvIHB1cnBvc2VzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaAppbmRleCA1NGE5NjczLi5kZjUzNTdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIERlYnVnZ2luZyBhbmQgbG9nZ2luZyBjb21wb25lbnQgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTI3LDcgKzI3LDkgQEAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9DT05GSUdfQ09ORklHX0gKLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorCisjaW5jbHVkZSAiY29tcGlsZXItbWFjcm9zLmgiCiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC01Niw3ICs1OCw3IEBACiAgIC8qIGRlZmluaW5nIHRoZSBlbnVtZXJhdGlvbiAqLwogICB0eXBlZGVmIGVudW0gIEZUX1RyYWNlXwogICB7Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9UUkFDRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oPgogICAgIHRyYWNlX2NvdW50CiAKICAgfSBGVF9UcmFjZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcnYuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcnYuaAppbmRleCAwOWU4NDZlLi43ZjIyNzEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZHJ2LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRydi5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgaW50ZXJuYWwgZm9udCBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw5ICsyMCw5IEBACiAjZGVmaW5lIEZURFJWX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9NT0RVTEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kYXBpLmg+CiAKKyNpbmNsdWRlICJjb21waWxlci1tYWNyb3MuaCIKIAogRlRfQkVHSU5fSEVBREVSCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaAppbmRleCA3NzA4NzFkLi4yN2I4NjU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Z2xvYWRyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGdsb2Fkci5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVGhlIEZyZWVUeXBlIGdseXBoIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcKICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw3IEBACiAjZGVmaW5lIEZUR0xPQURSX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKQEAgLTEzOCw4ICsxMzcsNiBAQAogICBGVF9CQVNFKCB2b2lkICkKICAgRlRfR2x5cGhMb2FkZXJfQWRkKCBGVF9HbHlwaExvYWRlciAgbG9hZGVyICk7CiAKLSAvKiAqLwotCiAKIEZUX0VORF9IRUFERVIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGhhc2guaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRoYXNoLmgKaW5kZXggMjQ5MTg4MC4uNjIyZWM3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGhhc2guaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0aGFzaC5oCkBAIC00Myw4ICs0Myw3IEBACiAjZGVmaW5lIEZUSEFTSF9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5LmgKaW5kZXggNzhiZDNiYy4uZGRiMThiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRoZSBGcmVlVHlwZSBtZW1vcnkgbWFuYWdlbWVudCBtYWNyb3MgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjIsOCArMjIsOSBAQAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAotI2luY2x1ZGUgRlRfVFlQRVNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0dHlwZXMuaD4KIAorI2luY2x1ZGUgImNvbXBpbGVyLW1hY3Jvcy5oIgogCiBGVF9CRUdJTl9IRUFERVIKIApAQCAtNTcsNiArNTgsMTQgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAorICAvKiBUaGUgY2FsY3VsYXRpb24gYE5VTEwgKyBuJyBpcyB1bmRlZmluZWQgaW4gQy4gIEV2ZW4gaWYgdGhlIHJlc3VsdGluZyAqLworICAvKiBwb2ludGVyIGRvZXNuJ3QgZ2V0IGRlcmVmZXJlbmNlZCwgdGhpcyBjYXVzZXMgd2FybmluZ3Mgd2l0aCAgICAgICAgICAqLworICAvKiBzYW5pdGl6ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBXZSB0aHVzIHByb3ZpZGUgYSBtYWNybyB0aGF0IHNob3VsZCBiZSB1c2VkIGlmIGBiYXNlJyBjYW4gYmUgTlVMTC4gICAqLworI2RlZmluZSBGVF9PRkZTRVQoIGJhc2UsIGNvdW50ICkgICggKGJhc2UpID8gKGJhc2UpICsgKGNvdW50KSA6IE5VTEwgKQorCisKICAgLyoKICAgICogQysrIHJlZnVzZXMgdG8gaGFuZGxlIHN0YXRlbWVudHMgbGlrZSBwID0gKHZvaWQqKWFueXRoaW5nLCB3aXRoIGBwJyBhCiAgICAqIHR5cGVkIHBvaW50ZXIuICBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgYHR5cGVvZicgb3BlcmF0b3IgaW4gc3RhbmRhcmQgQysrLApAQCAtMTUzLDEwICsxNjIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpKHNpemUpLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvciApICkKIAotI2RlZmluZSBGVF9NRU1fRlJFRSggcHRyICkgICAgICAgICAgICAgICAgXAotICAgICAgICAgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZnRfbWVtX2ZyZWUoIG1lbW9yeSwgKHB0cikgKTsgXAotICAgICAgICAgICAgKHB0cikgPSBOVUxMOyAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBGVF9NRU1fRlJFRSggcHRyICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRlRfREVCVUdfSU5ORVIoIGZ0X21lbV9mcmVlKCBtZW1vcnksIChwdHIpICkgKTsgXAorICAgICAgICAgICAgKHB0cikgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIEZUX0VORF9TVE1OVAogCiAjZGVmaW5lIEZUX01FTV9ORVcoIHB0ciApICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzgxLDggKzM5MCw2IEBACiAjZGVmaW5lIEZUX1NUUkNQWU4oIGRzdCwgc3JjLCBzaXplICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBmdF9tZW1fc3RyY3B5biggKGNoYXIqKWRzdCwgKGNvbnN0IGNoYXIqKShzcmMpLCAoRlRfVUxvbmcpKHNpemUpICkKIAotIC8qICovCi0KIAogRlRfRU5EX0hFQURFUgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaAppbmRleCAwYzFkM2U1Li4yNWRiMmM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUaGUgRnJlZVR5cGUgcHJpdmF0ZSBiYXNlIGNsYXNzZXMgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTI2LDIxICsyNiwyMSBAQAogI2lmbmRlZiBGVE9CSlNfSF8KICNkZWZpbmUgRlRPQkpTX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfUkVOREVSX0gKLSNpbmNsdWRlIEZUX1NJWkVTX0gKLSNpbmNsdWRlIEZUX0xDRF9GSUxURVJfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfTUVNT1JZX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0dMWVBIX0xPQURFUl9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9EUklWRVJfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfQVVUT0hJTlRfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdHJlbmRlci5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0c2l6ZXMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGxjZGZpbC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRydi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2F1dG9oaW50Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CiAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCi0jaW5jbHVkZSBGVF9JTkNSRU1FTlRBTF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRpbmNyZW0uaD4KICNlbmRpZgogCisjaW5jbHVkZSAiY29tcGlsZXItbWFjcm9zLmgiCiAKIEZUX0JFR0lOX0hFQURFUgogCkBAIC0yMjYsOCArMjI2LDggQEAKICAgfSBGVF9DTWFwX0NsYXNzUmVjOwogCiAKLSNkZWZpbmUgRlRfREVDTEFSRV9DTUFQX0NMQVNTKCBjbGFzc18gKSAgICAgICAgICAgICAgXAotICBGVF9DQUxMQkFDS19UQUJMRSBjb25zdCAgRlRfQ01hcF9DbGFzc1JlYyBjbGFzc187CisjZGVmaW5lIEZUX0RFQ0xBUkVfQ01BUF9DTEFTUyggY2xhc3NfICkgICAgICAgICAgICBcCisgIEZUX0NBTExCQUNLX1RBQkxFIGNvbnN0IEZUX0NNYXBfQ2xhc3NSZWMgIGNsYXNzXzsKIAogI2RlZmluZSBGVF9ERUZJTkVfQ01BUF9DTEFTUyggICAgICAgXAogICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgXApAQCAtNjUzLDcgKzY1Myw3IEBACiAgIEZUX0JBU0UoIHZvaWQgKQogICBGVF9Eb25lX0dseXBoU2xvdCggRlRfR2x5cGhTbG90ICBzbG90ICk7CiAKLSAvKiAqLworICAvKiAqLwogCiAjZGVmaW5lIEZUX1JFUVVFU1RfV0lEVEgoIHJlcSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKCAocmVxKS0+aG9yaVJlc29sdXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMDU3LDYgKzEwNTcsOSBAQAogICAgKiAgIFRoZSBzdHJ1Y3Qgd2lsbCBiZSBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZSAob3IgdGhlIHNjb3BlIHdoZXJlCiAgICAqICAgdGhlIG1hY3JvIGlzIHVzZWQpLgogICAgKi8KKyNkZWZpbmUgRlRfREVDTEFSRV9HTFlQSCggY2xhc3NfICkgICAgICAgICAgICAgICAgXAorICBGVF9DQUxMQkFDS19UQUJMRSBjb25zdCBGVF9HbHlwaF9DbGFzcyAgY2xhc3NfOworCiAjZGVmaW5lIEZUX0RFRklORV9HTFlQSCggICAgICAgICAgXAogICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBzaXplXywgICAgICAgICAgICAgICAgICBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cHNwcm9wLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cHNwcm9wLmgKaW5kZXggNTc0ODM3Zi4uODFlYzI5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHBzcHJvcC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRwc3Byb3AuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEdldCBhbmQgc2V0IHByb3BlcnRpZXMgb2YgUG9zdFNjcmlwdCBkcml2ZXJzIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw3IEBACiAjZGVmaW5lIEZUUFNQUk9QX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRyZm9yay5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmgKaW5kZXggNzViM2U1My4uMWI3YjI1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBFbWJlZGRlZCByZXNvdXJjZSBmb3JrcyBhY2Nlc3NvciAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBNYXNhdGFrZSBZQU1BVE8gYW5kIFJlZGhhdCBLLksuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjUsOCArMjUsNyBAQAogI2RlZmluZSBGVFJGT1JLX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oCmluZGV4IDg4MzZjZjMuLjZlMWE5NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRoZSBGcmVlVHlwZSBzZXJ2aWNlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIEZUU0VSVl9IXwogI2RlZmluZSBGVFNFUlZfSF8KIAorI2luY2x1ZGUgImNvbXBpbGVyLW1hY3Jvcy5oIgogCiBGVF9CRUdJTl9IRUFERVIKIApAQCAtNDg2LDMzICs0ODcsNiBAQAogCiAgIC8qICovCiAKLSAgLyoKLSAgICogVGhlIGhlYWRlciBmaWxlcyBjb250YWluaW5nIHRoZSBzZXJ2aWNlcy4KLSAgICovCi0KLSNkZWZpbmUgRlRfU0VSVklDRV9CREZfSCAgICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZiZGYuaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9DRkZfVEFCTEVfTE9BRF9IICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjZmZ0bC5oPgotI2RlZmluZSBGVF9TRVJWSUNFX0NJRF9IICAgICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oPgotI2RlZmluZSBGVF9TRVJWSUNFX0ZPTlRfRk9STUFUX0ggICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmZudGZtdC5oPgotI2RlZmluZSBGVF9TRVJWSUNFX0dMWVBIX0RJQ1RfSCAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmdsZGljdC5oPgotI2RlZmluZSBGVF9TRVJWSUNFX0dYX1ZBTElEQVRFX0ggICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfS0VSTklOR19IICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2a2Vybi5oPgotI2RlZmluZSBGVF9TRVJWSUNFX01FVFJJQ1NfVkFSSUFUSU9OU19IIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1ldHJpYy5oPgotI2RlZmluZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSCAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfT1BFTlRZUEVfVkFMSURBVEVfSCAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QRlJfSCAgICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0ggICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSCAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVfSCAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0ggICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfU0ZOVF9IICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oPgotI2RlZmluZSBGVF9TRVJWSUNFX1RSVUVUWVBFX0VOR0lORV9IICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfVFJVRVRZUEVfR0xZRl9IICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfVFRfQ01BUF9IICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfV0lORk5UX0ggICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2d2luZm50Lmg+Ci0KLSAvKiAqLwotCiBGVF9FTkRfSEVBREVSCiAKICNlbmRpZiAvKiBGVFNFUlZfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaAppbmRleCBhNTc5YTAzLi5lN2Q5MjIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgU3RyZWFtIGhhbmRsaW5nIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMSw4ICsyMSw4IEBACiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9TWVNURU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRzeXN0ZW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmgKaW5kZXggZjVmOTU5OC4uNThiZDc3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUcmFjaW5nIGhhbmRsaW5nIChzcGVjaWZpY2F0aW9uIG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTQ5LDYgKzQ5LDcgQEAKIEZUX1RSQUNFX0RFRiggc2Zkcml2ZXIgKSAgLyogU0ZOVCBmb250IGRyaXZlciAgICAgICAgKHNmZHJpdmVyLmMpICovCiBGVF9UUkFDRV9ERUYoIHNmb2JqcyApICAgIC8qIFNGTlQgb2JqZWN0IGhhbmRsZXIgICAgIChzZm9ianMuYykgICAqLwogRlRfVFJBQ0VfREVGKCBzZndvZmYgKSAgICAvKiBXT0ZGIGZvcm1hdCBoYW5kbGVyICAgICAoc2Z3b2ZmLmMpICAgKi8KK0ZUX1RSQUNFX0RFRiggc2Z3b2ZmMiApICAgLyogV09GRjIgZm9ybWF0IGhhbmRsZXIgICAgKHNmd29mZjIuYykgICovCiBGVF9UUkFDRV9ERUYoIHR0YmRmICkgICAgIC8qIFRydWVUeXBlIGVtYmVkZGVkIEJERiAgICh0dGJkZi5jKSAgICAqLwogRlRfVFJBQ0VfREVGKCB0dGNtYXAgKSAgICAvKiBjaGFybWFwIGhhbmRsZXIgICAgICAgICAodHRjbWFwLmMpICAgKi8KIEZUX1RSQUNFX0RFRiggdHRjb2xyICkgICAgLyogZ2x5cGggbGF5ZXIgdGFibGUgICAgICAgKHR0Y29sci5jKSAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dmFsaWQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR2YWxpZC5oCmluZGV4IDM4YWEwNmMuLmE1YmM2YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR2YWxpZC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR2YWxpZC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgdmFsaWRhdGlvbiBzdXBwb3J0IChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw5IEBACiAjZGVmaW5lIEZUVkFMSURfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9IICAgLyogZm9yIGZ0X3NldGptcCBhbmQgZnRfbG9uZ2ptcCAqLworI2luY2x1ZGUgRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSCAgIC8qIGZvciBmdF9qbXBidWYgKi8KIAorI2luY2x1ZGUgImNvbXBpbGVyLW1hY3Jvcy5oIgogCiBGVF9CRUdJTl9IRUFERVIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzg4MzBmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogaW50ZXJuYWwuaAotICoKLSAqICAgSW50ZXJuYWwgaGVhZGVyIGZpbGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5Ci0gKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCi0gKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAotICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKLSAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQotICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCi0gKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCi0gKgotICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgYnkgYGZ0MmJ1aWxkLmhgLiAgRG8gbm90IGluY2x1ZGUgaXQKLSAgICogbWFudWFsbHkhCi0gICAqCi0gICAqLwotCi0KLSNkZWZpbmUgRlRfSU5URVJOQUxfT0JKRUNUU19IICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfU1RSRUFNX0ggICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9NRU1PUllfSCAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5Lmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX0RFQlVHX0ggICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9DQUxDX0ggICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9IQVNIX0ggICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0aGFzaC5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9EUklWRVJfSCAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZHJ2Lmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX1RSQUNFX0ggICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9HTFlQSF9MT0FERVJfSCAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0Z2xvYWRyLmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX1NGTlRfSCAgICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0ggICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9SRk9SS19IICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0cmZvcmsuaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfVkFMSURBVEVfSCAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdHZhbGlkLmg+Ci0KLSNkZWZpbmUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSCAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0ggICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9XT0ZGX1RZUEVTX0ggICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3dvZmZ0eXBlcy5oPgotCi0jZGVmaW5lIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0ggICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9ISU5UU19IICAgIDxmcmVldHlwZS9pbnRlcm5hbC9wc2hpbnRzLmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfUFJPUFNfSCAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRwc3Byb3AuaD4KLQotI2RlZmluZSBGVF9JTlRFUk5BTF9BVVRPSElOVF9IICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2F1dG9oaW50Lmg+Ci0KLSNkZWZpbmUgRlRfSU5URVJOQUxfQ0ZGX1RZUEVTX0ggICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9jZmZ0eXBlcy5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9DRkZfT0JKRUNUU19UWVBFU19IICAgPGZyZWV0eXBlL2ludGVybmFsL2NmZm90eXBlcy5oPgotCi0KLSNpZiBkZWZpbmVkKCBfTVNDX1ZFUiApICAgICAgLyogVmlzdWFsIEMrKyAoYW5kIEludGVsIEMrKykgKi8KLQotICAvKiBXZSBkaXNhYmxlIHRoZSB3YXJuaW5nIGBjb25kaXRpb25hbCBleHByZXNzaW9uIGlzIGNvbnN0YW50JyBoZXJlICovCi0gIC8qIGluIG9yZGVyIHRvIGNvbXBpbGUgY2xlYW5seSB3aXRoIHRoZSBtYXhpbXVtIGxldmVsIG9mIHdhcm5pbmdzLiAgKi8KLSAgLyogSW4gcGFydGljdWxhciwgdGhlIHdhcm5pbmcgY29tcGxhaW5zIGFib3V0IHN0dWZmIGxpa2UgYHdoaWxlKDApJyAqLwotICAvKiB3aGljaCBpcyB2ZXJ5IHVzZWZ1bCBpbiBtYWNybyBkZWZpbml0aW9ucy4gIFRoZXJlIGlzIG5vIGJlbmVmaXQgICovCi0gIC8qIGluIGhhdmluZyBpdCBlbmFibGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNwcmFnbWEgd2FybmluZyggZGlzYWJsZSA6IDQxMjcgKQotCi0jZW5kaWYgLyogX01TQ19WRVIgKi8KLQotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaAppbmRleCBmOTYyYTk3Li44ZTBhMjYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oCkBAIC01LDcgKzUsNyBAQAogICogICBBdXhpbGlhcnkgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBQb3N0U2NyaXB0IGZvbnRzCiAgKiAgIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMSwxNCArMjEsMTMgQEAKICNkZWZpbmUgUFNBVVhfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfVFlQRTFfVFlQRVNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfSEFTSF9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9UUlVFVFlQRV9UWVBFU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0ZGX1RZUEVTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0NGRl9PQkpFQ1RTX1RZUEVTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRoYXNoLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvY2ZmdHlwZXMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9jZmZvdHlwZXMuaD4KIAogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNoaW50cy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2hpbnRzLmgKaW5kZXggNjk5YWNlYS4uNjYzZTlkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2hpbnRzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2hpbnRzLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgIHJlY29yZGVycyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gIFRoZXNlIGFyZSB1c2VkIHRvIHN1cHBvcnQgbmF0aXZlCiAgKiAgIFQxL1QyIGhpbnRzIGluIHRoZSAndHlwZTEnLCAnY2lkJywgYW5kICdjZmYnIGZvbnQgZHJpdmVycy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMiw5ICsyMiw4IEBACiAjZGVmaW5lIFBTSElOVFNfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX1RZUEUxX1RBQkxFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90MXRhYmxlcy5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oCmluZGV4IGU0Nzg2ZWQuLjgxZjVhMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZiZGYuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUaGUgRnJlZVR5cGUgQkRGIHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOSw4ICsxOSw4IEBACiAjaWZuZGVmIFNWQkRGX0hfCiAjZGVmaW5lIFNWQkRGX0hfCiAKLSNpbmNsdWRlIEZUX0JERl9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGJkZi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNmZnRsLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2ZmdGwuaAppbmRleCA2YzYyMTczLi4xZDJkYmI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2ZmdGwuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2ZmdGwuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRoZSBGcmVlVHlwZSBDRkYgdGFibGVzIGxvYWRlciBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOSw4ICsxOSw4IEBACiAjaWZuZGVmIFNWQ0ZGVExfSF8KICNkZWZpbmUgU1ZDRkZUTF9IXwogCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0NGRl9UWVBFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvY2ZmdHlwZXMuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjaWQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjaWQuaAppbmRleCA1NTVhNWFmLi5iZDQ5ZjMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVGhlIEZyZWVUeXBlIENJRCBmb250IHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgYnkKICAqIERlcmVrIENsZWdnIGFuZCBNaWNoYWVsIFRvZnRkYWwuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksNyArMTksNyBAQAogI2lmbmRlZiBTVkNJRF9IXwogI2RlZmluZSBTVkNJRF9IXwogCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaAppbmRleCA2ZjQyODVlLi42MTE0ZDYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmZudGZtdC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVGhlIEZyZWVUeXBlIGZvbnQgZm9ybWF0IHNlcnZpY2UgKHNwZWNpZmljYXRpb24gb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksNyArMTksNyBAQAogI2lmbmRlZiBTVkZOVEZNVF9IXwogI2RlZmluZSBTVkZOVEZNVF9IXwogCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaAppbmRleCAwOTQ5NjIxLi5mOTQ0M2U0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmdsZGljdC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVGhlIEZyZWVUeXBlIGdseXBoIGRpY3Rpb25hcnkgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDcgKzE5LDcgQEAKICNpZm5kZWYgU1ZHTERJQ1RfSF8KICNkZWZpbmUgU1ZHTERJQ1RfSF8KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2Lmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZneHZhbC5oCmluZGV4IDBiYjc2ZjMuLjgzYzJmMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZneHZhbC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZneHZhbC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgQVBJIGZvciB2YWxpZGF0aW5nIFRydWVUeXBlR1gvQUFUIHRhYmxlcyAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCkBAIC0yOCw4ICsyOCw4IEBACiAjaWZuZGVmIFNWR1hWQUxfSF8KICNkZWZpbmUgU1ZHWFZBTF9IXwogCi0jaW5jbHVkZSBGVF9HWF9WQUxJREFURV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9WQUxJREFURV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRneHZhbC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0dmFsaWQuaD4KIAogRlRfQkVHSU5fSEVBREVSCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2a2Vybi5oCmluZGV4IGY5OTJhMzIuLjEzY2ZiMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmtlcm4uaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRoZSBGcmVlVHlwZSBLZXJuaW5nIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDggKzE5LDggQEAKICNpZm5kZWYgU1ZLRVJOX0hfCiAjZGVmaW5lIFNWS0VSTl9IXwogCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWJsZXMuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtZXRyaWMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtZXRyaWMuaAppbmRleCBkNjg4YmM3Li4yYjMwZWRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bWV0cmljLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1ldHJpYy5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVGhlIEZyZWVUeXBlIHNlcnZpY2VzIGZvciBtZXRyaWNzIHZhcmlhdGlvbnMgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDcgKzE5LDcgQEAKICNpZm5kZWYgU1ZNRVRSSUNfSF8KICNkZWZpbmUgU1ZNRVRSSUNfSF8KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2Lmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bW0uaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oCmluZGV4IDM2NTJmMjAuLjVhODA3NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVGhlIEZyZWVUeXBlIE11bHRpcGxlIE1hc3RlcnMgYW5kIEdYIHZhciBzZXJ2aWNlcyAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksNyArMTksNyBAQAogI2lmbmRlZiBTVk1NX0hfCiAjZGVmaW5lIFNWTU1fSF8KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2Lmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZvdHZhbC5oCmluZGV4IGNhYjRjNmUuLjc2M2ZiMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZvdHZhbC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZvdHZhbC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVGhlIEZyZWVUeXBlIE9wZW5UeXBlIHZhbGlkYXRpb24gc2VydmljZSAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksOCArMTksOCBAQAogI2lmbmRlZiBTVk9UVkFMX0hfCiAjZGVmaW5lIFNWT1RWQUxfSF8KIAotI2luY2x1ZGUgRlRfT1BFTlRZUEVfVkFMSURBVEVfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfVkFMSURBVEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0b3R2YWwuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHZhbGlkLmg+CiAKIEZUX0JFR0lOX0hFQURFUgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cGZyLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cGZyLmgKaW5kZXggZmQwMWQ2MS4uYmRlYmEwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEludGVybmFsIFBGUiBzZXJ2aWNlIGZ1bmN0aW9ucyAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksOCArMTksOCBAQAogI2lmbmRlZiBTVlBGUl9IXwogI2RlZmluZSBTVlBGUl9IXwogCi0jaW5jbHVkZSBGVF9QRlJfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRwZnIuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKQEAgLTU2LDcgKzU2LDYgQEAKIAogICB9OwogCi0gLyogKi8KIAogRlRfRU5EX0hFQURFUgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cG9zdG5tLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cG9zdG5tLmgKaW5kZXggMThlMzg0My4uOGVmNjJjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBvc3RubS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRoZSBGcmVlVHlwZSBQb3N0U2NyaXB0IG5hbWUgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDcgKzE5LDcgQEAKICNpZm5kZWYgU1ZQT1NUTk1fSF8KICNkZWZpbmUgU1ZQT1NUTk1fSF8KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2Lmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHJvcC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaAppbmRleCBlNDhkMDE1Li44Zjc1NTQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHJvcC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUaGUgRnJlZVR5cGUgcHJvcGVydHkgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oCmluZGV4IGRmYWMzYmEuLmI0ZGNkODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUaGUgRnJlZVR5cGUgUG9zdFNjcmlwdCBjaGFybWFwIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDcgKzE5LDcgQEAKICNpZm5kZWYgU1ZQU0NNQVBfSF8KICNkZWZpbmUgU1ZQU0NNQVBfSF8KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNpbmZvLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNpbmZvLmgKaW5kZXggZmI0ZTBlMy4uMWU3Mjc2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzaW5mby5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRoZSBGcmVlVHlwZSBQb3N0U2NyaXB0IGluZm8gc2VydmljZSAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksOCArMTksOCBAQAogI2lmbmRlZiBTVlBTSU5GT19IXwogI2RlZmluZSBTVlBTSU5GT19IXwogCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaAppbmRleCA0NjRhYTIwLi4zOWM4YjVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZzZm50LmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUaGUgRnJlZVR5cGUgU0ZOVCB0YWJsZSBsb2FkaW5nIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDggKzE5LDggQEAKICNpZm5kZWYgU1ZTRk5UX0hfCiAjZGVmaW5lIFNWU0ZOVF9IXwogCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWJsZXMuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaAppbmRleCAwZmNiODEzLi5jMThiYjIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Y21hcC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVGhlIEZyZWVUeXBlIFRydWVUeXBlL3NmbnQgY21hcCBleHRyYSBpbmZvcm1hdGlvbiBzZXJ2aWNlLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogICogTWFzYXRha2UgWUFNQVRPLCBSZWRoYXQgSy5LLiwKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCkBAIC0yMiw4ICsyMiw4IEBACiAjaWZuZGVmIFNWVFRDTUFQX0hfCiAjZGVmaW5lIFNWVFRDTUFQX0hfCiAKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFCTEVTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90dHRhYmxlcy5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaAppbmRleCBhODUyZjVjLi43YTE3ZTRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRoZSBGcmVlVHlwZSBUcnVlVHlwZSBlbmdpbmUgcXVlcnkgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksOCArMTksOCBAQAogI2lmbmRlZiBTVlRURU5HX0hfCiAjZGVmaW5lIFNWVFRFTkdfSF8KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICi0jaW5jbHVkZSBGVF9NT0RVTEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kYXBpLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmgKaW5kZXggYzg3OTg3Ny4uOTBhODFkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Z2x5Zi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGdseWYuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRoZSBGcmVlVHlwZSBUcnVlVHlwZSBnbHlwaCBzZXJ2aWNlLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBieQogICogRGF2aWQgVHVybmVyLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE4LDggKzE4LDggQEAKICNpZm5kZWYgU1ZUVEdMWUZfSF8KICNkZWZpbmUgU1ZUVEdMWUZfSF8KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUJMRVNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL3R0dGFibGVzLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2d2luZm50LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2d2luZm50LmgKaW5kZXggMzhlZTAyMC4uOGM5MTVmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdndpbmZudC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z3aW5mbnQuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRoZSBGcmVlVHlwZSBXaW5kb3dzIEZOVC9GT05UIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDggKzE5LDggQEAKICNpZm5kZWYgU1ZXSU5GTlRfSF8KICNkZWZpbmUgU1ZXSU5GTlRfSF8KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICi0jaW5jbHVkZSBGVF9XSU5GT05UU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnR3aW5mbnQuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmgKaW5kZXggYjE5MjQxYy4uYjRjMTJkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBIaWdoLWxldmVsICdzZm50JyBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCwxMCArMjAsOSBAQAogI2RlZmluZSBTRk5UX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9EUklWRVJfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfV09GRl9UWVBFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkcnYuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvd29mZnR5cGVzLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oCmluZGV4IGQ5NGM4YzEuLjZhMGZlNWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oCkBAIC01LDcgKzUsNyBAQAogICogICBCYXNpYyBUeXBlMS9UeXBlMiB0eXBlIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24KICAqICAgb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjEsMTIgKzIxLDExIEBACiAjZGVmaW5lIFQxVFlQRVNfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX1RZUEUxX1RBQkxFU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfSEFTSF9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL3QxdGFibGVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNoaW50cy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0aGFzaC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oCmluZGV4IDIzZGIyNDAuLmMzNjM0MmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oCkBAIC01LDcgKzUsNyBAQAogICogICBCYXNpYyBTRk5UL1RydWVUeXBlIHR5cGUgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbgogICogICBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMSwxMyArMjEsMTIgQEAKICNkZWZpbmUgVFRUWVBFU19IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFCTEVTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfQ09MT1JfSAorI2luY2x1ZGUgPGZyZWV0eXBlL3R0dGFibGVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRjb2xvci5oPgogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAotI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRtbS5oPgogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC93b2ZmdHlwZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvd29mZnR5cGVzLmgKaW5kZXggYmE1NWJmOC4uMTg3NGExMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC93b2ZmdHlwZXMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3dvZmZ0eXBlcy5oCkBAIC01LDcgKzUsNyBAQAogICogICBCYXNpYyBXT0ZGL1dPRkYyIHR5cGUgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbgogICogICBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMSw5ICsyMSw4IEBACiAjZGVmaW5lIFdPRkZUWVBFU19IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFCTEVTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL3R0dGFibGVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC0xMDQsNiArMTAzLDIwNyBAQAogICB9IFdPRkZfVGFibGVSZWMsICpXT0ZGX1RhYmxlOwogCiAKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgV09GRjJfVHRjRm9udFJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgTWV0YWRhdGEgZm9yIGEgVFRDIGZvbnQgZW50cnkgaW4gV09GRjIuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgZmxhdm9yIDo6CisgICAqICAgICBUVEMgZm9udCBmbGF2b3IuCisgICAqCisgICAqICAgbnVtX3RhYmxlcyA6OgorICAgKiAgICAgTnVtYmVyIG9mIHRhYmxlcyBpbiBUVEMsIGluZGljYXRpbmcgbnVtYmVyIG9mIGVsZW1lbnRzIGluCisgICAqICAgICBgdGFibGVfaW5kaWNlc2AuCisgICAqCisgICAqICAgdGFibGVfaW5kaWNlcyA6OgorICAgKiAgICAgQXJyYXkgb2YgdGFibGUgaW5kaWNlcyBmb3IgZWFjaCBUVEMgZm9udC4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0ICBXT0ZGMl9UdGNGb250UmVjXworICB7CisgICAgRlRfVUxvbmcgICAgZmxhdm9yOworICAgIEZUX1VTaG9ydCAgIG51bV90YWJsZXM7CisgICAgRlRfVVNob3J0KiAgdGFibGVfaW5kaWNlczsKKworICB9IFdPRkYyX1R0Y0ZvbnRSZWMsICpXT0ZGMl9UdGNGb250OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgV09GRjJfSGVhZGVyUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBXT0ZGMiBmaWxlIGZvcm1hdCBoZWFkZXIuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgU2VlCisgICAqCisgICAqICAgICBodHRwczovL3d3dy53My5vcmcvVFIvV09GRjIvI3dvZmYyMEhlYWRlcgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSBmaWVsZHMgYHJlc2VydmVkYCwgYG1ham9yVmVyc2lvbmAgYW5kCisgICAqICAgYG1pbm9yVmVyc2lvbmAsIHNvIHRoZXkgYXJlIG5vdCBpbmNsdWRlZC4gIFRoZSBgdG90YWxTZm50U2l6ZWAgZmllbGQKKyAgICogICBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXByZXNlbnQgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQKKyAgICogICBTRk5UIGZvbnQgc3RyZWFtLCBzbyB0aGF0IGlzIHVzZWQgYXMgYSByZWZlcmVuY2UgdmFsdWUgaW5zdGVhZC4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0ICBXT0ZGMl9IZWFkZXJSZWNfCisgIHsKKyAgICBGVF9VTG9uZyAgIHNpZ25hdHVyZTsKKyAgICBGVF9VTG9uZyAgIGZsYXZvcjsKKyAgICBGVF9VTG9uZyAgIGxlbmd0aDsKKyAgICBGVF9VU2hvcnQgIG51bV90YWJsZXM7CisgICAgRlRfVUxvbmcgICB0b3RhbFNmbnRTaXplOworICAgIEZUX1VMb25nICAgdG90YWxDb21wcmVzc2VkU2l6ZTsKKyAgICBGVF9VTG9uZyAgIG1ldGFPZmZzZXQ7CisgICAgRlRfVUxvbmcgICBtZXRhTGVuZ3RoOworICAgIEZUX1VMb25nICAgbWV0YU9yaWdMZW5ndGg7CisgICAgRlRfVUxvbmcgICBwcml2T2Zmc2V0OworICAgIEZUX1VMb25nICAgcHJpdkxlbmd0aDsKKworICAgIEZUX1VMb25nICAgdW5jb21wcmVzc2VkX3NpemU7ICAgIC8qIHVuY29tcHJlc3NlZCBicm90bGkgc3RyZWFtIHNpemUgKi8KKyAgICBGVF9VTG9uZyAgIGNvbXByZXNzZWRfb2Zmc2V0OyAgICAvKiBjb21wcmVzc2VkIHN0cmVhbSBvZmZzZXQgICAgICAgICovCisgICAgRlRfVUxvbmcgICBoZWFkZXJfdmVyc2lvbjsgICAgICAgLyogdmVyc2lvbiBvZiBvcmlnaW5hbCBUVEMgSGVhZGVyICAqLworICAgIEZUX1VTaG9ydCAgbnVtX2ZvbnRzOyAgICAgICAgICAgIC8qIG51bWJlciBvZiBmb250cyBpbiBUVEMgICAgICAgICAgKi8KKyAgICBGVF9VTG9uZyAgIGFjdHVhbF9zZm50X3NpemU7ICAgICAvKiBhY3R1YWwgc2l6ZSBvZiBzZm50IHN0cmVhbSAgICAgICovCisKKyAgICBXT0ZGMl9UdGNGb250ICB0dGNfZm9udHM7ICAgICAgICAvKiBtZXRhZGF0YSBmb3IgZm9udHMgaW4gYSBUVEMgICAgICovCisKKyAgfSBXT0ZGMl9IZWFkZXJSZWMsICpXT0ZGMl9IZWFkZXI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBXT0ZGMl9UYWJsZVJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgZ2l2ZW4gdGFibGUgb2YgYSBXT0ZGMiBmb250LgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIFNlZQorICAgKgorICAgKiAgICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dPRkYyLyN0YWJsZV9kaXJfZm9ybWF0CisgICAqLworICB0eXBlZGVmIHN0cnVjdCAgV09GRjJfVGFibGVSZWNfCisgIHsKKyAgICBGVF9CeXRlICAgRmxhZ0J5dGU7ICAgICAgICAgICAvKiB0YWJsZSB0eXBlIGFuZCBmbGFncyAgICAgICovCisgICAgRlRfVUxvbmcgIFRhZzsgICAgICAgICAgICAgICAgLyogdGFibGUgZmlsZSBvZmZzZXQgICAgICAgICAqLworICAgIEZUX1VMb25nICBkc3RfbGVuZ3RoOyAgICAgICAgIC8qIHVuY29tcHJlc3NlZCB0YWJsZSBsZW5ndGggKi8KKyAgICBGVF9VTG9uZyAgVHJhbnNmb3JtTGVuZ3RoOyAgICAvKiB0cmFuc2Zvcm1lZCBsZW5ndGggICAgICAgICovCisKKyAgICBGVF9VTG9uZyAgZmxhZ3M7ICAgICAgICAgICAgICAvKiBjYWxjdWxhdGVkIGZsYWdzICAgICAgICAgICovCisgICAgRlRfVUxvbmcgIHNyY19vZmZzZXQ7ICAgICAgICAgLyogY29tcHJlc3NlZCB0YWJsZSBvZmZzZXQgICAqLworICAgIEZUX1VMb25nICBzcmNfbGVuZ3RoOyAgICAgICAgIC8qIGNvbXByZXNzZWQgdGFibGUgbGVuZ3RoICAgKi8KKyAgICBGVF9VTG9uZyAgZHN0X29mZnNldDsgICAgICAgICAvKiB1bmNvbXByZXNzZWQgdGFibGUgb2Zmc2V0ICovCisKKyAgfSBXT0ZGMl9UYWJsZVJlYywgKldPRkYyX1RhYmxlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgV09GRjJfSW5mb1JlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgTWV0YWRhdGEgZm9yIFdPRkYyIGZvbnQgdGhhdCBtYXkgYmUgcmVxdWlyZWQgZm9yIHJlY29uc3RydWN0aW9uIG9mCisgICAqICAgc2ZudCB0YWJsZXMuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgaGVhZGVyX2NoZWNrc3VtIDo6CisgICAqICAgICBDaGVja3N1bSBvZiBTRk5UIG9mZnNldCB0YWJsZS4KKyAgICoKKyAgICogICBudW1fZ2x5cGhzIDo6CisgICAqICAgICBOdW1iZXIgb2YgZ2x5cGhzIGluIHRoZSBmb250LgorICAgKgorICAgKiAgIG51bV9obWV0cmljcyA6OgorICAgKiAgICAgYG51bWJlck9mSE1ldHJpY3NgIGZpZWxkIGluIHRoZSAnaGhlYScgdGFibGUuCisgICAqCisgICAqICAgeF9taW5zIDo6CisgICAqICAgICBgeE1pbmAgdmFsdWVzIG9mIGdseXBoIGJvdW5kaW5nIGJveC4KKyAgICoKKyAgICogICBnbHlmX3RhYmxlIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIGBnbHlmJyB0YWJsZSByZWNvcmQuCisgICAqCisgICAqICAgbG9jYV90YWJsZSA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBgbG9jYScgdGFibGUgcmVjb3JkLgorICAgKgorICAgKiAgIGhlYWRfdGFibGUgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgYGhlYWQnIHRhYmxlIHJlY29yZC4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0ICBXT0ZGMl9JbmZvUmVjXworICB7CisgICAgRlRfVUxvbmcgICBoZWFkZXJfY2hlY2tzdW07CisgICAgRlRfVVNob3J0ICBudW1fZ2x5cGhzOworICAgIEZUX1VTaG9ydCAgbnVtX2htZXRyaWNzOworICAgIEZUX1Nob3J0KiAgeF9taW5zOworCisgICAgV09GRjJfVGFibGUgIGdseWZfdGFibGU7CisgICAgV09GRjJfVGFibGUgIGxvY2FfdGFibGU7CisgICAgV09GRjJfVGFibGUgIGhlYWRfdGFibGU7CisKKyAgfSBXT0ZGMl9JbmZvUmVjLCAqV09GRjJfSW5mbzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFdPRkYyX1N1YnN0cmVhbVJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBzdHJ1Y3R1cmUgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGEgc3Vic3RyZWFtIGluIHRoZSB0cmFuc2Zvcm1lZAorICAgKiAgICdnbHlmJyB0YWJsZSBpbiBhIFdPRkYyIHN0cmVhbS4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBzdGFydCA6OgorICAgKiAgICAgQmVnaW5uaW5nIG9mIHRoZSBzdWJzdHJlYW0gcmVsYXRpdmUgdG8gdW5jb21wcmVzc2VkIHRhYmxlIHN0cmVhbS4KKyAgICoKKyAgICogICBvZmZzZXQgOjoKKyAgICogICAgIE9mZnNldCBvZiB0aGUgc3Vic3RyZWFtIHJlbGF0aXZlIHRvIHVuY29tcHJlc3NlZCB0YWJsZSBzdHJlYW0uCisgICAqCisgICAqICAgc2l6ZSA6OgorICAgKiAgICAgU2l6ZSBvZiB0aGUgc3Vic3RyZWFtLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFdPRkYyX1N1YnN0cmVhbVJlY18KKyAgeworICAgIEZUX1VMb25nICBzdGFydDsKKyAgICBGVF9VTG9uZyAgb2Zmc2V0OworICAgIEZUX1VMb25nICBzaXplOworCisgIH0gV09GRjJfU3Vic3RyZWFtUmVjLCAqV09GRjJfU3Vic3RyZWFtOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgV09GRjJfUG9pbnRSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgc3RydWN0dXJlIHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhIHBvaW50IGluIHRoZSB0cmFuc2Zvcm1lZAorICAgKiAgICdnbHlmJyB0YWJsZSBpbiBhIFdPRkYyIHN0cmVhbS4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICB4IDo6CisgICAqICAgICB4LWNvb3JkaW5hdGUgb2YgcG9pbnQuCisgICAqCisgICAqICAgeSA6OgorICAgKiAgICAgeS1jb29yZGluYXRlIG9mIHBvaW50LgorICAgKgorICAgKiAgIG9uX2N1cnZlIDo6CisgICAqICAgICBTZXQgaWYgcG9pbnQgaXMgb24tY3VydmUuCisgICAqLworICB0eXBlZGVmIHN0cnVjdCAgV09GRjJfUG9pbnRSZWNfCisgIHsKKyAgICBGVF9JbnQgICB4OworICAgIEZUX0ludCAgIHk7CisgICAgRlRfQm9vbCAgb25fY3VydmU7CisKKyAgfSBXT0ZGMl9Qb2ludFJlYywgKldPRkYyX1BvaW50OworCisKIEZUX0VORF9IRUFERVIKIAogI2VuZGlmIC8qIFdPRkZUWVBFU19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oIGIvaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oCmluZGV4IDY0NWU2NDUuLjQyNmUxNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvdDF0YWJsZXMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL3QxdGFibGVzLmgKQEAgLTUsNyArNSw3IEBACiAgKiAgIEJhc2ljIFR5cGUgMS9UeXBlIDIgdGFibGVzIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24KICAqICAgb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjEsOCArMjEsNyBAQAogI2RlZmluZSBUMVRBQkxFU19IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CiAKICNpZmRlZiBGUkVFVFlQRV9ICiAjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oIGIvaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oCmluZGV4IGNjNjc3ZGUuLjJiMmVkNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvdHRuYW1laWQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUcnVlVHlwZSBuYW1lIElEIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDcgKzIwLDYgQEAKICNkZWZpbmUgVFROQU1FSURfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWJsZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWJsZXMuaAppbmRleCBkMDRmODEwLi5jOGZhMzVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFibGVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS90dHRhYmxlcy5oCkBAIC01LDcgKzUsNyBAQAogICogICBCYXNpYyBTRk5UL1RydWVUeXBlIHRhYmxlcyBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlCiAgKiAgIChzcGVjaWZpY2F0aW9uIG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIxLDggKzIxLDcgQEAKICNkZWZpbmUgVFRUQUJMRVNfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgogCiAjaWZkZWYgRlJFRVRZUEVfSAogI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFncy5oCmluZGV4IGJkMDk4NmUuLjNjOWZiZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRhZ3MgZm9yIFRydWVUeXBlIGFuZCBPcGVuVHlwZSB0YWJsZXMgKHNwZWNpZmljYXRpb24gb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsOCArMjAsNyBAQAogI2RlZmluZSBUVEFHU19IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CiAKICNpZmRlZiBGUkVFVFlQRV9ICiAjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgpAQCAtMTA3LDYgKzEwNiw3IEBACiAjZGVmaW5lIFRUQUdfdm10eCAgRlRfTUFLRV9UQUcoICd2JywgJ20nLCAndCcsICd4JyApCiAjZGVmaW5lIFRUQUdfVlZBUiAgRlRfTUFLRV9UQUcoICdWJywgJ1YnLCAnQScsICdSJyApCiAjZGVmaW5lIFRUQUdfd09GRiAgRlRfTUFLRV9UQUcoICd3JywgJ08nLCAnRicsICdGJyApCisjZGVmaW5lIFRUQUdfd09GMiAgRlRfTUFLRV9UQUcoICd3JywgJ08nLCAnRicsICcyJyApCiAKIC8qIHVzZWQgYnkgIktleWJvYXJkLmRmb250IiBvbiBsZWdhY3kgTWFjIE9TIFggKi8KICNkZWZpbmUgVFRBR18weEE1a2JkICBGVF9NQUtFX1RBRyggMHhBNSwgJ2snLCAnYicsICdkJyApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Z0MmJ1aWxkLmggYi9pbmNsdWRlL2Z0MmJ1aWxkLmgKaW5kZXggZTNmNDg4Ny4uYjRmZDFmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mdDJidWlsZC5oCisrKyBiL2luY2x1ZGUvZnQyYnVpbGQuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIDIgYnVpbGQgYW5kIHNldHVwIG1hY3Jvcy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOCwxNiArMTgsMTQgQEAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKLSAgICogVGhpcyBpcyB0aGUgJ2VudHJ5IHBvaW50JyBmb3IgRnJlZVR5cGUgaGVhZGVyIGZpbGUgaW5jbHVzaW9ucy4gIEl0IGlzCi0gICAqIHRoZSBvbmx5IGhlYWRlciBmaWxlIHdoaWNoIHNob3VsZCBiZSBpbmNsdWRlZCBkaXJlY3RseTsgYWxsIG90aGVyCi0gICAqIEZyZWVUeXBlIGhlYWRlciBmaWxlcyBzaG91bGQgYmUgYWNjZXNzZWQgd2l0aCBtYWNybyBuYW1lcyAoYWZ0ZXIKLSAgICogaW5jbHVkaW5nIGBmdDJidWlsZC5oYCkuCisgICAqIFRoaXMgaXMgdGhlICdlbnRyeSBwb2ludCcgZm9yIEZyZWVUeXBlIGhlYWRlciBmaWxlIGluY2x1c2lvbnMsIHRvIGJlCisgICAqIGxvYWRlZCBiZWZvcmUgYWxsIG90aGVyIGhlYWRlciBmaWxlcy4KICAgICoKICAgICogQSB0eXBpY2FsIGV4YW1wbGUgaXMKICAgICoKICAgICogYGBgCiAgICAqICAgI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0gICAqICAgI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorICAgKiAgICNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgogICAgKiBgYGAKICAgICoKICAgICovCmRpZmYgLS1naXQgYS9tZXNvbi5idWlsZCBiL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMzA0OTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXNvbi5idWlsZApAQCAtMCwwICsxLDM2OCBAQAorIworIyBNZXNvbiBwcm9qZWN0IGZpbGUgZm9yIEZyZWVUeXBlIDIKKyMKKworIyBDb3B5cmlnaHQgKEMpIDIwMjAgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK3Byb2plY3QoJ2ZyZWV0eXBlMicsICdjJywKKyAgbWVzb25fdmVyc2lvbjogJz49IDAuNTUuMCcsCisgIGRlZmF1bHRfb3B0aW9uczogWydkZWZhdWx0X2xpYnJhcnk9Ym90aCddLAorKQorCisjCisjIFJ1bGVzIHRvIGNvbXBpbGUgdGhlIEZyZWVUeXBlIDIgbGlicmFyeSBpdHNlbGYKKyMKKworCisjIEFwcGFyZW50bHkgbWVzb24gZG9lc24ndCBwcm92aWRlIGEgcmVhZF9maWxlKCkgZnVuY3Rpb24sIHNvIGluc3RlYWQKKyMgcnVubmluZyBhbiBleHRlcm5hbCBjb21tYW5kIGlzIHJlcXVpcmVkLgorCitweXRob24gPSBpbXBvcnQoJ3B5dGhvbicpCitweXRob25fZXhlID0gcHl0aG9uLmZpbmRfaW5zdGFsbGF0aW9uKHJlcXVpcmVkOiB0cnVlKQorCitmdDJfdmVyc2lvbiA9IHJ1bl9jb21tYW5kKHB5dGhvbl9leGUsCisgIGZpbGVzKCdidWlsZHMvbWVzb24vZXh0cmFjdF9mcmVldHlwZV92ZXJzaW9uLnB5JyksCisgIGZpbGVzKCdpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmgnKSkuc3Rkb3V0KCkuc3RyaXAoKQorCitmdDJfbGlidG9vbF92ZXJzaW9uID0gcnVuX2NvbW1hbmQocHl0aG9uX2V4ZSwKKyAgZmlsZXMoJ2J1aWxkcy9tZXNvbi9leHRyYWN0X2xpYnRvb2xfdmVyc2lvbi5weScpLAorICAnLS1zb3ZlcnNpb24nLAorICBmaWxlcygnYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdycpKS5zdGRvdXQoKS5zdHJpcCgpCisKK2Z0Ml9pbmNsdWRlcyA9IGluY2x1ZGVfZGlyZWN0b3JpZXMoJ2luY2x1ZGUnKQorCisKKyMgR2VuZXJhdGUgYSBjdXN0b20gYGZ0bW9kdWxlLmhgIHZlcnNpb24gYmFzZWQgb24gdGhlIGNvbnRlbnQgb2YKKyMgYG1vZHVsZXMuY2ZnYC4KKworZnRtb2R1bGVfaCA9IGN1c3RvbV90YXJnZXQoJ2Z0bW9kdWxlLmgnLAorICBvdXRwdXQ6ICdmdG1vZHVsZS5oJywKKyAgaW5wdXQ6ICdtb2R1bGVzLmNmZycsCisgIGNvbW1hbmQ6IFtweXRob25fZXhlLCBmaWxlcygnYnVpbGRzL21lc29uL3BhcnNlX21vZHVsZXNfY2ZnLnB5JyksCisgICAgICAgICAgICAnLS1mb3JtYXQ9ZnRtb2R1bGUuaCcsICdASU5QVVRAJywgJy0tb3V0cHV0JywgJ0BPVVRQVVRAJ10sCisgIGluc3RhbGw6IHRydWUsCisgIGluc3RhbGxfZGlyOiAnaW5jbHVkZS9mcmVldHlwZTIvZnJlZXR5cGUvY29uZmlnJywKKykKK2Z0Ml9zb3VyY2VzID0gW2Z0bW9kdWxlX2hdCisKKworIyBGcmVlVHlwZSAyIG1vZHVsZXMuCisKK2Z0X21haW5fbW9kdWxlcyA9IHJ1bl9jb21tYW5kKHB5dGhvbl9leGUsCisgIGZpbGVzKCdidWlsZHMvbWVzb24vcGFyc2VfbW9kdWxlc19jZmcucHknKSwKKyAgJy0tZm9ybWF0PW1haW4tbW9kdWxlcycsCisgIGZpbGVzKCdtb2R1bGVzLmNmZycpKS5zdGRvdXQoKS5zdHJpcCgpLnNwbGl0KCkKKworZnQyX3NvdXJjZXMgKz0gZmlsZXMoWworICAnc3JjL2Jhc2UvZnRiYXNlLmMnLAorICAnc3JjL2Jhc2UvZnRpbml0LmMnLAorXSkKKworZm9yZWFjaCBtb2Q6IGZ0X21haW5fbW9kdWxlcworICBzb3VyY2UgPSBtb2QKKyAgaWYgbW9kID09ICd3aW5mb250cycKKyAgICBzb3VyY2UgPSAnd2luZm50JworICBlbGlmIG1vZCA9PSAnY2lkJworICAgIHNvdXJjZSA9ICd0eXBlMWNpZCcKKyAgZW5kaWYKKyAgZnQyX3NvdXJjZXMgKz0gJ3NyYy9AMEAvQDFALmMnLmZvcm1hdChtb2QsIHNvdXJjZSkKK2VuZGZvcmVhY2gKKworIyBOT1RFOiBUaGUgYGd6aXBgIGFuZCBgYnppcDJgIGF1eCBtb2R1bGVzIGFyZSBoYW5kbGVkIHRocm91Z2ggb3B0aW9ucy4KK2Z0X2F1eF9tb2R1bGVzID0gcnVuX2NvbW1hbmQocHl0aG9uX2V4ZSwKKyAgZmlsZXMoJ2J1aWxkcy9tZXNvbi9wYXJzZV9tb2R1bGVzX2NmZy5weScpLAorICAnLS1mb3JtYXQ9YXV4LW1vZHVsZXMnLAorICBmaWxlcygnbW9kdWxlcy5jZmcnKSkuc3Rkb3V0KCkuc3RyaXAoKS5zcGxpdCgpCisKK2ZvcmVhY2ggYXV4bW9kOiBmdF9hdXhfbW9kdWxlcworICBzb3VyY2UgPSBhdXhtb2QKKyAgIyBNb3N0IHNvdXJjZXMgYXJlIG5hbWVkIGBzcmMvPG1vZHVsZT4vPG1vZHVsZT4uY2AsIGJ1dCB0aGVyZSBhcmUgYSBmZXcKKyAgIyBleGNlcHRpb25zIGhhbmRsZWQgaGVyZS4KKyAgaWYgYXV4bW9kID09ICdjYWNoZScKKyAgICBzb3VyY2UgPSAnZnRjYWNoZScKKyAgZWxpZiBhdXhtb2QgPT0gJ2x6dycKKyAgICBzb3VyY2UgPSAnZnRsencnCisgIGVsaWYgYXV4bW9kID09ICdnemlwJyBvciBhdXhtb2QgPT0gJ2J6aXAyJworICAgICMgSGFuZGxlZCB0aHJvdWdoIG9wdGlvbnMgaW5zdGVhZCwgc2VlIGJlbG93LgorICAgIGNvbnRpbnVlCisgIGVuZGlmCisgIGZ0Ml9zb3VyY2VzICs9ICdzcmMvQDBAL0AxQC5jJy5mb3JtYXQoYXV4bW9kLCBzb3VyY2UpCitlbmRmb3JlYWNoCisKKworIyBGcmVlVHlwZSAyIGJhc2UgZXh0ZW5zaW9ucy4KKyMgTm9ybWFsbHkgY29uZmlndXJlZCB0aHJvdWdoIGBtb2R1bGVzLmNmZ2AuCisKK2Jhc2VfZXh0ZW5zaW9ucyA9IHJ1bl9jb21tYW5kKHB5dGhvbl9leGUsCisgIGZpbGVzKCdidWlsZHMvbWVzb24vcGFyc2VfbW9kdWxlc19jZmcucHknKSwKKyAgJy0tZm9ybWF0PWJhc2UtZXh0ZW5zaW9ucy1saXN0JywKKyAgZmlsZXMoJ21vZHVsZXMuY2ZnJykpLnN0ZG91dCgpLnNwbGl0KCkKKworZm9yZWFjaCBleHQ6IGJhc2VfZXh0ZW5zaW9ucworICBmdDJfc291cmNlcyArPSBmaWxlcygnc3JjL2Jhc2UvJyArIGV4dCkKK2VuZGZvcmVhY2gKKworCisjIEhlYWRlciBmaWxlcy4KKworZnQyX3B1YmxpY19oZWFkZXJzID0gZmlsZXMoWworICAnaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oJywKKyAgJ2luY2x1ZGUvZnJlZXR5cGUvZnRhZHZhbmMuaCcsCisgICdpbmNsdWRlL2ZyZWV0eXBlL2Z0YmJveC5oJywKKyAgJ2luY2x1ZGUvZnJlZXR5cGUvZnRiZGYuaCcsCisgICdpbmNsdWRlL2ZyZWV0eXBlL2Z0Yml0bWFwLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdGJ6aXAyLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdGNoYXB0ZXJzLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdGNvbG9yLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdGRyaXZlci5oJywKKyAgJ2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaCcsCisgICdpbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyb3JzLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdGZudGZtdC5oJywKKyAgJ2luY2x1ZGUvZnJlZXR5cGUvZnRnYXNwLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdGdseXBoLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdGd4dmFsLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdGd6aXAuaCcsCisgICdpbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaCcsCisgICdpbmNsdWRlL2ZyZWV0eXBlL2Z0aW5jcmVtLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdGxjZGZpbC5oJywKKyAgJ2luY2x1ZGUvZnJlZXR5cGUvZnRsaXN0LmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdGx6dy5oJywKKyAgJ2luY2x1ZGUvZnJlZXR5cGUvZnRtYWMuaCcsCisgICdpbmNsdWRlL2ZyZWV0eXBlL2Z0bW0uaCcsCisgICdpbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kYXBpLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdG1vZGVyci5oJywKKyAgJ2luY2x1ZGUvZnJlZXR5cGUvZnRvdHZhbC5oJywKKyAgJ2luY2x1ZGUvZnJlZXR5cGUvZnRvdXRsbi5oJywKKyAgJ2luY2x1ZGUvZnJlZXR5cGUvZnRwYXJhbXMuaCcsCisgICdpbmNsdWRlL2ZyZWV0eXBlL2Z0cGZyLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdHJlbmRlci5oJywKKyAgJ2luY2x1ZGUvZnJlZXR5cGUvZnRzaXplcy5oJywKKyAgJ2luY2x1ZGUvZnJlZXR5cGUvZnRzbmFtZXMuaCcsCisgICdpbmNsdWRlL2ZyZWV0eXBlL2Z0c3Ryb2tlLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdHN5bnRoLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9mdHN5c3RlbS5oJywKKyAgJ2luY2x1ZGUvZnJlZXR5cGUvZnR0cmlnb24uaCcsCisgICdpbmNsdWRlL2ZyZWV0eXBlL2Z0dHlwZXMuaCcsCisgICdpbmNsdWRlL2ZyZWV0eXBlL2Z0d2luZm50LmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oJywKKyAgJ2luY2x1ZGUvZnJlZXR5cGUvdHRuYW1laWQuaCcsCisgICdpbmNsdWRlL2ZyZWV0eXBlL3R0dGFibGVzLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaCcsCitdKQorCitmdDJfY29uZmlnX2hlYWRlcnMgPSBmaWxlcyhbCisgICdpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oJywKKyAgJ2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaCcsCisgICdpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9pbnRlZ2VyLXR5cGVzLmgnLAorICAnaW5jbHVkZS9mcmVldHlwZS9jb25maWcvbWFjLXN1cHBvcnQuaCcsCisgICdpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9wdWJsaWMtbWFjcm9zLmgnLAorXSkKKworZnQyX2RlZmluZXMgPSBbXQorCisKKyMgU3lzdGVtIHN1cHBvcnQgZmlsZS4KKworY2MgPSBtZXNvbi5nZXRfY29tcGlsZXIoJ2MnKQorCisjIE5PVEU6IG1zeXMyIG9uIFdpbmRvd3MgaGFzIGB1bmlzdGQuaGAgYW5kIGBmY250bC5oYCBidXQgbm90IGBzeXMvbW1hbi5oYCEKK2hhc191bmlzdGRfaCA9IGNjLmhhc19oZWFkZXIoJ3VuaXN0ZC5oJykKK2hhc19mY250bF9oID0gY2MuaGFzX2hlYWRlcignZmNudGwuaCcpCitoYXNfc3lzX21tYW5faCA9IGNjLmhhc19oZWFkZXIoJ3N5cy9tbWFuLmgnKQorCitpZiBoYXNfdW5pc3RkX2gKKyAgZnQyX2RlZmluZXMgKz0gWyctREhBVkVfVU5JU1REX0g9MSddCitlbmRpZgoraWYgaGFzX2ZjbnRsX2gKKyAgZnQyX2RlZmluZXMgKz0gWyctREhBVkVfRkNOVExfSCddCitlbmRpZgorCittbWFwX29wdGlvbiA9IGdldF9vcHRpb24oJ21tYXAnKQoraWYgbW1hcF9vcHRpb24uYXV0bygpCisgIHVzZV9tbWFwID0gaGFzX3VuaXN0ZF9oIGFuZCBoYXNfZmNudGxfaCBhbmQgaGFzX3N5c19tbWFuX2gKK2Vsc2UKKyAgdXNlX21tYXAgPSBtbWFwX29wdGlvbi5lbmFibGVkKCkKK2VuZGlmCitpZiB1c2VfbW1hcAorICAjIFRoaXMgdmVyc2lvbiBvZiBmdHN5c3RlbS5jIHVzZXMgbW1hcCgpIHRvIHJlYWQgaW5wdXQgZm9udCBmaWxlcy4KKyAgZnQyX3NvdXJjZXMgKz0gZmlsZXMoWydidWlsZHMvdW5peC9mdHN5c3RlbS5jJyxdKQorZWxzZQorICBmdDJfc291cmNlcyArPSBmaWxlcyhbJ3NyYy9iYXNlL2Z0c3lzdGVtLmMnLF0pCitlbmRpZgorCisKKyMgRGVidWcgc3VwcG9ydCBmaWxlCisjCisjIE5PVEU6IFNvbWUgc3BlY2lhbGl6ZWQgdmVyc2lvbnMgZXhpc3QgZm9yIG90aGVyIHBsYXRmb3JtcyBub3Qgc3VwcG9ydGVkIGJ5CisjIE1lc29uLiAgTW9zdCBpbXBsZW1lbnRhdGlvbiBkaWZmZXJlbmNlcyBhcmUgZXh0cmVtZWx5IG1pbm9yLCBpLmUuLCBpbiB0aGUKKyMgaW1wbGVtZW50YXRpb24gb2YgRlRfTWVzc2FnZSgpIGFuZCBGVF9QYW5pYygpLCBhbmQgZ2V0dGluZyB0aGUgYEZUMl9ERUJVR2AKKyMgdmFsdWUgZnJvbSB0aGUgZW52aXJvbm1lbnQsIHdoZW4gdGhpcyBpcyBzdXBwb3J0ZWQuICBBIHNtYWxsZXIgcmVmYWN0b3IKKyMgbWlnaHQgbWFrZSB0aGVzZSBwbGF0Zm9ybS1zcGVjaWZpYyBmaWxlcyBtdWNoIHNtYWxsZXIsIGFuZCBjb3VsZCBiZSBtb3ZlZAorIyBpbnRvIGBmdHN5c3RlbS5jYCBhcyB3ZWxsLgorIworaWYgaG9zdF9tYWNoaW5lLnN5c3RlbSgpID09ICd3aW5kb3dzJworICBmdDJfZGVidWdfc3JjID0gJ2J1aWxkcy93aW5kb3dzL2Z0ZGVidWcuYycKK2Vsc2UKKyAgZnQyX2RlYnVnX3NyYyA9ICdzcmMvYmFzZS9mdGRlYnVnLmMnCitlbmRpZgorZnQyX3NvdXJjZXMgKz0gZmlsZXMoW2Z0Ml9kZWJ1Z19zcmNdKQorCitmdDJfZGVwcyA9IFtdCisKKworIyBHZW5lcmF0ZSBgZnRvcHRpb24uaGAgYmFzZWQgb24gYXZhaWxhYmxlIGRlcGVuZGVuY2llcy4KKworZnRvcHRpb25fY29tbWFuZCA9IFtweXRob25fZXhlLAorICBmaWxlcygnYnVpbGRzL21lc29uL3Byb2Nlc3NfZnRvcHRpb25faC5weScpLAorICAnQElOUFVUQCcsICctLW91dHB1dD1AT1VUUFVUQCddCisKKyMgR1ppcCBzdXBwb3J0Cit6bGliX29wdGlvbiA9IGdldF9vcHRpb24oJ3psaWInKQoraWYgemxpYl9vcHRpb24gPT0gJ2Rpc2FibGVkJworICBmdG9wdGlvbl9jb21tYW5kICs9IFsnLS1kaXNhYmxlPUZUX0NPTkZJR19PUFRJT05fVVNFX1pMSUInXQorZWxzZQorICBmdG9wdGlvbl9jb21tYW5kICs9IFsnLS1lbmFibGU9RlRfQ09ORklHX09QVElPTl9VU0VfWkxJQiddCisgIGlmIHpsaWJfb3B0aW9uID09ICdidWlsdGluJworICAgIGZ0b3B0aW9uX2NvbW1hbmQgKz0gWyctLWRpc2FibGU9RlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQiddCisgIGVsc2UKKyAgICAjIFByb2JlIGZvciB0aGUgc3lzdGVtIHZlcnNpb24uCisgICAgemxpYl9zeXN0ZW0gPSBkZXBlbmRlbmN5KCd6bGliJywgcmVxdWlyZWQ6IHpsaWJfb3B0aW9uID09ICdzeXN0ZW0nKQorICAgIGZ0Ml9kZXBzICs9IFt6bGliX3N5c3RlbV0KKyAgICBmdG9wdGlvbl9jb21tYW5kICs9IFsnLS1lbmFibGU9RlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQiddCisgIGVuZGlmCisgIGZ0Ml9zb3VyY2VzICs9IGZpbGVzKFsnc3JjL2d6aXAvZnRnemlwLmMnLF0pCitlbmRpZgorCisjIEJaaXAyIHN1cHBvcnQKKyMKKyMgSU1QT1JUQU5UIE5PVEU6IFdpdGhvdXQgYHN0YXRpYzogZmFsc2VgIGhlcmUsIE1lc29uIHdpbGwgZmluZCBib3RoIHRoZQorIyBzdGF0aWMgbGlicmFyeSB2ZXJzaW9uIGFuZCB0aGUgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbiB3aGVuIHRoZXkgYXJlCisjIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtLCBhbmQgd2lsbCB0cnkgdG8gbGluayB0aGVtICpib3RoKiB0byB0aGUgZmluYWwKKyMgbGlicmFyeSEKK2J6aXAyX2RlcCA9IG1lc29uLmdldF9jb21waWxlcignYycpLmZpbmRfbGlicmFyeSgnYnoyJywKKyAgICAgICAgICAgICAgc3RhdGljOiBmYWxzZSwKKyAgICAgICAgICAgICAgcmVxdWlyZWQ6IGdldF9vcHRpb24oJ2J6aXAyJykpCitpZiBiemlwMl9kZXAuZm91bmQoKQorICBmdG9wdGlvbl9jb21tYW5kICs9IFsnLS1lbmFibGU9RlRfQ09ORklHX09QVElPTl9VU0VfQlpJUDInXQorICBmdDJfc291cmNlcyArPSBmaWxlcyhbJ3NyYy9iemlwMi9mdGJ6aXAyLmMnLF0pCisgIGZ0Ml9kZXBzICs9IFtiemlwMl9kZXBdCitlbmRpZgorCisjIFBORyBzdXBwb3J0CitsaWJwbmdfZGVwID0gZGVwZW5kZW5jeSgnbGlicG5nJywgcmVxdWlyZWQ6IGdldF9vcHRpb24oJ3BuZycpKQorZnRvcHRpb25fY29tbWFuZCArPSBbJy0tZW5hYmxlPUZUX0NPTkZJR19PUFRJT05fVVNFX1BORyddCitmdDJfZGVwcyArPSBbbGlicG5nX2RlcF0KKworIyBIYXJmYnV6eiBzdXBwb3J0CitoYXJmYnV6el9kZXAgPSBkZXBlbmRlbmN5KCdoYXJmYnV6eicsCisgICAgICAgICAgICAgICAgIHZlcnNpb246ICc+PSAxLjguMCcsCisgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBnZXRfb3B0aW9uKCdoYXJmYnV6eicpKQorZnRvcHRpb25fY29tbWFuZCArPSBbJy0tZW5hYmxlPUZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaJ10KK2Z0Ml9kZXBzICs9IFtoYXJmYnV6el9kZXBdCisKKyMgQnJvdGxpIGRlY29tcHJlc3Npb24gc3VwcG9ydAorYnJvdGxpX2RlcCA9IGRlcGVuZGVuY3koJ2xpYmJyb3RsaWRlYycsIHJlcXVpcmVkOiBnZXRfb3B0aW9uKCdicm90bGknKSkKK2Z0b3B0aW9uX2NvbW1hbmQgKz0gWyctLWVuYWJsZT1GVF9DT05GSUdfT1BUSU9OX1VTRV9CUk9UTEknXQorZnQyX2RlcHMgKz0gW2Jyb3RsaV9kZXBdCisKKyMgV2UgY2FuIG5vdyBnZW5lcmF0ZSBgZnRvcHRpb24uaGAuCitmdG9wdGlvbl9oID0gY3VzdG9tX3RhcmdldCgnZnRvcHRpb24uaCcsCisgIGlucHV0OiAnaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCcsCisgIG91dHB1dDogJ2Z0b3B0aW9uLmgnLAorICBjb21tYW5kOiBmdG9wdGlvbl9jb21tYW5kLAorICBpbnN0YWxsOiB0cnVlLAorICBpbnN0YWxsX2RpcjogJ2luY2x1ZGUvZnJlZXR5cGUyL2ZyZWV0eXBlL2NvbmZpZycsCispCitmdDJfc291cmNlcyArPSBmdG9wdGlvbl9oCisKKworIyBRVUVTVElPTjogV2hhdCBpZiB0aGUgY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0IGAtRGAgYnV0IHVzZXMgYC9EYCBpbnN0ZWFkCisjIGFzIG9uIFdpbmRvd3M/CisjCisjIE90aGVyIGJ1aWxkIHN5c3RlbXMgaGF2ZSBzb21ldGhpbmcgbGlrZSBjX2RlZmluZXMgdG8gbGlzdCBkZWZpbmVzIGluIGEKKyMgbW9yZSBwb3J0YWJsZSB3YXkuICBGb3Igbm93IGFzc3VtZSB0aGUgY29tcGlsZXIgc3VwcG9ydHMgYC1EYCAoaGludDogVmlzdWFsCisjIFN0dWRpbyBkb2VzKS4KK2Z0Ml9kZWZpbmVzICs9IFsnLURGVDJfQlVJTERfTElCUkFSWT0xJ10KKworCisjIEVuc3VyZSB0aGF0IHRoZSBgZnRvcHRpb24uaGAgZmlsZSBnZW5lcmF0ZWQgYWJvdmUgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkCisjIEZyZWVUeXBlLiAgVW5mb3J0dW5hdGVseSwgYW5kIHZlcnkgc3VycHJpc2luZ2x5LCBjb25maWd1cmVfZmlsZSgpIGRvZXMgbm90CisjIHN1cHBvcnQgcHV0dGluZyB0aGUgb3V0cHV0IGZpbGUgaW4gYSBzdWItZGlyZWN0b3J5LCBzbyB3ZSBoYXZlIHRvIG92ZXJyaWRlCisjIHRoZSBkZWZhdWx0IHdoaWNoIGlzIGA8ZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmg+YC4KKyMKKyMgSXQgd291bGQgYmUgY2xlYW5lciB0byBnZW5lcmF0ZSB0aGUgZmlsZSBkaXJlY3RseSBpbnRvCisjIGAke01FU09OX0JVSUxEX0RJUn0vZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmhgLiAgU2VlCisjICdodHRwczovL2dpdGh1Yi5jb20vbWVzb25idWlsZC9tZXNvbi9pc3N1ZXMvMjMyMCcgZm9yIGRldGFpbHMuCitmdDJfZGVmaW5lcyArPSBbJy1ERlRfQ09ORklHX09QVElPTlNfSD08ZnRvcHRpb24uaD4nXQorCitmdDJfY19hcmdzID0gZnQyX2RlZmluZXMKK2lmIGNjLmhhc19mdW5jdGlvbl9hdHRyaWJ1dGUoJ3Zpc2liaWxpdHk6aGlkZGVuJykKKyAgZnQyX2NfYXJncyArPSBbJy1mdmlzaWJpbGl0eT1oaWRkZW4nXQorZW5kaWYKKworZnQyX2xpYiA9IGxpYnJhcnkoJ2ZyZWV0eXBlJywKKyAgc291cmNlczogZnQyX3NvdXJjZXMgKyBbZnRtb2R1bGVfaF0sCisgIGNfYXJnczogZnQyX2NfYXJncywKKyAgaW5jbHVkZV9kaXJlY3RvcmllczogZnQyX2luY2x1ZGVzLAorICBkZXBlbmRlbmNpZXM6IGZ0Ml9kZXBzLAorICBpbnN0YWxsOiB0cnVlLAorICB2ZXJzaW9uOiBmdDJfbGlidG9vbF92ZXJzaW9uLAorKQorCisKKyMgVG8gYmUgdXNlZCBieSBvdGhlciBwcm9qZWN0cyBpbmNsdWRpbmcgdGhpcyBvbmUgdGhyb3VnaCBzdWJwcm9qZWN0KCkuCitmcmVldHlwZTJfZGVwID0gZGVjbGFyZV9kZXBlbmRlbmN5KAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBmdDJfaW5jbHVkZXMsCisgIGxpbmtfd2l0aDogZnQyX2xpYiwKKyAgdmVyc2lvbjogZnQyX2xpYnRvb2xfdmVyc2lvbikKKworCisjIE5PVEU6IFVzaW5nIGJvdGggYGluc3RhbGxfZGlyYCBhbmQgYHN1YmRpcmAgZG9lc24ndCBzZWVtIHRvIHdvcmsgYmVsb3csCisjIGkuZS4sIHRoZSBzdWJkaXIgdmFsdWUgc2VlbXMgdG8gYmUgaWdub3JlZCwgY29udHJhcnkgdG8gZXhhbXBsZXMgaW4gdGhlCisjIE1lc29uIGRvY3VtZW50YXRpb24uCitpbnN0YWxsX2hlYWRlcnMoJ2luY2x1ZGUvZnQyYnVpbGQuaCcsCisgICBpbnN0YWxsX2RpcjogJ2luY2x1ZGUvZnJlZXR5cGUyJykKK2luc3RhbGxfaGVhZGVycyhmdDJfcHVibGljX2hlYWRlcnMsCisgIGluc3RhbGxfZGlyOiAnaW5jbHVkZS9mcmVldHlwZTIvZnJlZXR5cGUnKQoraW5zdGFsbF9oZWFkZXJzKGZ0Ml9jb25maWdfaGVhZGVycywKKyAgaW5zdGFsbF9kaXI6ICdpbmNsdWRlL2ZyZWV0eXBlMi9mcmVldHlwZS9jb25maWcnKQorCisKKyMgVE9ETyhkYXZpZCk6IERlY2xhcmVfZGVwZW5kZW5jeSgpIGZvciB1c2luZyB0aGlzIGluIGEgTWVzb24gc3VicHJvamVjdAorIworcGtnY29uZmlnID0gaW1wb3J0KCdwa2djb25maWcnKQorcGtnY29uZmlnLmdlbmVyYXRlKGZ0Ml9saWIsCisgIGZpbGViYXNlOiAnZnJlZXR5cGUyJywKKyAgbmFtZTogJ0ZyZWVUeXBlIDInLAorICBkZXNjcmlwdGlvbjogJ0EgZnJlZSwgaGlnaC1xdWFsaXR5LCBhbmQgcG9ydGFibGUgZm9udCBlbmdpbmUuJywKKyAgdXJsOiAnaHR0cHM6Ly9mcmVldHlwZS5vcmcnLAorICBzdWJkaXJzOiAnZnJlZXR5cGUyJywKKyAgdmVyc2lvbjogZnQyX2xpYnRvb2xfdmVyc2lvbiwKKykKKworCisjIE5PVEU6IFVubGlrZSB0aGUgb2xkIGBtYWtlIHJlZmRvY2AgY29tbWFuZCwgdGhpcyBnZW5lcmF0ZXMgdGhlCisjIGRvY3VtZW50YXRpb24gdW5kZXIgYCRCVUlMRC9kb2NzL2Agc2luY2UgTWVzb24gZG9lc24ndCBzdXBwb3J0IG1vZGlmeWluZworIyB0aGUgc291cmNlIHJvb3QgZGlyZWN0b3J5ICh3aGljaCBpcyBhIGdvb2QgdGhpbmcpLgorZ2VuX2RvY3MgPSBjdXN0b21fdGFyZ2V0KCdmcmVldHlwZTIgcmVmZXJlbmNlIGRvY3VtZW50YXRpb24nLAorICBvdXRwdXQ6ICdkb2NzJywKKyAgaW5wdXQ6IGZ0Ml9wdWJsaWNfaGVhZGVycyArIGZ0Ml9jb25maWdfaGVhZGVycywKKyAgY29tbWFuZDogW3B5dGhvbl9leGUsCisgICAgZmlsZXMoJ2J1aWxkcy9tZXNvbi9nZW5lcmF0ZV9yZWZlcmVuY2VfZG9jcy5weScpLAorICAgICctLXZlcnNpb249JyArIGZ0Ml92ZXJzaW9uLAorICAgICctLWlucHV0LWRpcj0nICsgbWVzb24uc291cmNlX3Jvb3QoKSwKKyAgICAnLS1vdXRwdXQtZGlyPUBPVVRQVVRAJworICBdLAorKQorCisjIEVPRgpkaWZmIC0tZ2l0IGEvbWVzb25fb3B0aW9ucy50eHQgYi9tZXNvbl9vcHRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGVkMTZiCi0tLSAvZGV2L251bGwKKysrIGIvbWVzb25fb3B0aW9ucy50eHQKQEAgLTAsMCArMSw0NyBAQAorIworIyBtZXNvbl9vcHRpb25zLnR4dAorIworCisjIENvcHlyaWdodCAoQykgMjAyMCBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworb3B0aW9uKCd6bGliJywKKyAgdHlwZTogJ2NvbWJvJywKKyAgY2hvaWNlczogWydkaXNhYmxlZCcsICdhdXRvJywgJ2J1aWx0aW4nLCAnc3lzdGVtJ10sCisgIHZhbHVlOiAnYXV0bycsCisgIGRlc2NyaXB0aW9uOiAnU3VwcG9ydCByZWFkaW5nIGd6aXAtY29tcHJlc3NlZCBmb250IGZpbGVzLicpCisKK29wdGlvbignYnppcDInLAorICB0eXBlOiAnZmVhdHVyZScsCisgIHZhbHVlOiAnYXV0bycsCisgIGRlc2NyaXB0aW9uOiAnU3VwcG9ydCByZWFkaW5nIGJ6aXAyLWNvbXByZXNzZWQgZm9udCBmaWxlcy4nKQorCitvcHRpb24oJ3BuZycsCisgIHR5cGU6ICdmZWF0dXJlJywKKyAgdmFsdWU6ICdhdXRvJywKKyAgZGVzY3JpcHRpb246ICdTdXBwb3J0IGNvbG9yIGJpdG1hcCBnbHlwaCBmb3JtYXRzIGluIHRoZSBQTkcgZm9ybWF0LicKKyAgICAgICAgICAgICAgICsgJ1JlcXVpcmVzIGxpYnBuZy4nKQorCitvcHRpb24oJ2hhcmZidXp6JywKKyAgdHlwZTogJ2ZlYXR1cmUnLAorICB2YWx1ZTogJ2F1dG8nLAorICBkZXNjcmlwdGlvbjogJ1VzZSBIYXJmYnV6eiBsaWJyYXJ5IHRvIGltcHJvdmUgYXV0by1oaW50aW5nLicKKyAgICAgICAgICAgICAgICsgJyBJZiBhdmFpbGFibGUsIG1hbnkgZ2x5cGhzIG5vdCBkaXJlY3RseSBhZGRyZXNzYWJsZScKKyAgICAgICAgICAgICAgICsgJyBieSBhIGZvbnRcJ3MgY2hhcmFjdGVyIG1hcCB3aWxsIGJlIGhpbnRlZCBhbHNvLicpCisKK29wdGlvbignYnJvdGxpJywKKyAgdHlwZTogJ2ZlYXR1cmUnLAorICB2YWx1ZTogJ2F1dG8nLAorICBkZXNjcmlwdGlvbjogJ1VzZSBCcm90bGkgbGlicmFyeSB0byBzdXBwb3J0IGRlY29tcHJlc3NpbmcgV09GRjIgZm9udHMuJykKKworb3B0aW9uKCdtbWFwJywKKyAgdHlwZTogJ2ZlYXR1cmUnLAorICB2YWx1ZTogJ2F1dG8nLAorICBkZXNjcmlwdGlvbjogJ1VzZSBtbWFwKCkgdG8gb3BlbiBmb250IGZpbGVzIGZvciBmYXN0ZXIgcGFyc2luZy4nKQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy5jZmcgYi9tb2R1bGVzLmNmZwppbmRleCBkYzZjOGQ0Li5kNmNkYmU1IDEwMDY0NAotLS0gYS9tb2R1bGVzLmNmZworKysgYi9tb2R1bGVzLmNmZwpAQCAtMSw2ICsxLDYgQEAKICMgbW9kdWxlcy5jZmcKICMKLSMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL0phbWZpbGUgYi9zcmMvSmFtZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FkMmQ1Yy4uMDAwMDAwMAotLS0gYS9zcmMvSmFtZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMgRnJlZVR5cGUgMiBzcmMgSmFtZmlsZQotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQotIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCi0jCi0jIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCi0jIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKLSMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKLSMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKLSMgZnVsbHkuCi0KLVN1YkRpciAgRlQyX1RPUCAkKEZUMl9TUkNfRElSKSA7Ci0KLWZvciB4eCBpbiAkKEZUMl9DT01QT05FTlRTKQotewotICBTdWJJbmNsdWRlIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgJCh4eCkgOwotfQotCi0jIGVuZCBvZiBzcmMgSmFtZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvSmFtZmlsZSBiL3NyYy9hdXRvZml0L0phbWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNjlkZWUuLjAwMDAwMDAKLS0tIGEvc3JjL2F1dG9maXQvSmFtZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLSMgRnJlZVR5cGUgMiBzcmMvYXV0b2ZpdCBKYW1maWxlCi0jCi0jIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5Ci0jIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKLSMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAotIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQotIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAotIyBmdWxseS4KLQotU3ViRGlyIEZUMl9UT1Agc3JjIGF1dG9maXQgOwotCi17Ci0gIGxvY2FsICBfc291cmNlcyA7Ci0KLSAgIyBkZWZpbmUgRlQyX0FVVE9GSVQyIHRvIGVuYWJsZSBleHBlcmltZW50YWwgbGF0aW4gaGludGVyIHJlcGxhY2VtZW50Ci0gIGlmICQoRlQyX0FVVE9GSVQyKQotICB7Ci0gICAgQ0NGTEFHUyArPSBGVF9PUFRJT05fQVVUT0ZJVDIgOwotICB9Ci0gIGlmICQoRlQyX01VTFRJKQotICB7Ci0gICAgX3NvdXJjZXMgPSBhZmFuZ2xlcwotICAgICAgICAgICAgICAgYWZibHVlCi0gICAgICAgICAgICAgICBhZmNqawotICAgICAgICAgICAgICAgYWZkdW1teQotICAgICAgICAgICAgICAgYWZnbG9iYWwKLSAgICAgICAgICAgICAgIGFmaGludHMKLSAgICAgICAgICAgICAgIGFmaW5kaWMKLSAgICAgICAgICAgICAgIGFmbGF0aW4KLSAgICAgICAgICAgICAgIGFmbG9hZGVyCi0gICAgICAgICAgICAgICBhZm1vZHVsZQotICAgICAgICAgICAgICAgYWZwaWMKLSAgICAgICAgICAgICAgIGFmcmFuZ2VzCi0gICAgICAgICAgICAgICBhZnNoYXBlcgotICAgICAgICAgICAgICAgYWZ3YXJwCi0gICAgICAgICAgICAgICA7Ci0KLSAgICBpZiAkKEZUMl9BVVRPRklUMikKLSAgICB7Ci0gICAgICBfc291cmNlcyArPSBhZmxhdGluMiA7Ci0gICAgfQotICB9Ci0gIGVsc2UKLSAgewotICAgIF9zb3VyY2VzID0gYXV0b2ZpdCA7Ci0gIH0KLQotICBMaWJyYXJ5ICAkKEZUMl9MSUIpIDogJChfc291cmNlcykuYyA7Ci19Ci0KLSMgZW5kIG9mIHNyYy9hdXRvZml0IEphbWZpbGUKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmYW5nbGVzLmMgYi9zcmMvYXV0b2ZpdC9hZmFuZ2xlcy5jCmluZGV4IDllMWY3YTIuLmEyZDQ1ZWIgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmYW5nbGVzLmMKKysrIGIvc3JjL2F1dG9maXQvYWZhbmdsZXMuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgUm91dGluZXMgdXNlZCB0byBjb21wdXRlIHZlY3RvciBhbmdsZXMgd2l0aCBsaW1pdGVkIGFjY3VyYWN5CiAgKiAgIGFuZCB2ZXJ5IGhpZ2ggc3BlZWQuICBJdCBhbHNvIGNvbnRhaW5zIHNvcnRpbmcgcm91dGluZXMgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmYmx1ZS5jIGIvc3JjL2F1dG9maXQvYWZibHVlLmMKaW5kZXggYjk5ZGJlYi4uOWViZmZkZCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZibHVlLmMKKysrIGIvc3JjL2F1dG9maXQvYWZibHVlLmMKQEAgLTcsNyArNyw3IEBACiAgKgogICogICBBdXRvLWZpdHRlciBkYXRhIGZvciBibHVlIHN0cmluZ3MgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgICdcMCcsCiAgICAgJ1x4RjAnLCAnXHg5MCcsICdceDkwJywgJ1x4QTgnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MCcsICdceEFBJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTAnLCAnXHhBQycsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkwJywgJ1x4QkYnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MScsICdceDgzJywgIC8qIPCQkKgg8JCQqiDwkJCsIPCQkL8g8JCRgyAqLwogICAgICdcMCcsCi0gICAgJ1x4RTAnLCAnXHhBNCcsICdceDk1JywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4QUUnLCAnICcsICdceEUwJywgJ1x4QTQnLCAnXHg4NScsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceDg2JywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4QTUnLCAnICcsICdceEUwJywgJ1x4QTQnLCAnXHhBNycsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceEFEJywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4QjYnLCAgLyog4KSVIOCkriDgpIUg4KSGIOCkpSDgpKcg4KStIOCktiAqLworICAgICdceEUwJywgJ1x4QTQnLCAnXHg5NScsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceEE4JywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4QUUnLCAnICcsICdceEUwJywgJ1x4QTQnLCAnXHg4OScsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceDlCJywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4OUYnLCAnICcsICdceEUwJywgJ1x4QTQnLCAnXHhBMCcsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceEExJywgIC8qIOCklSDgpKgg4KSuIOCkiSDgpJsg4KSfIOCkoCDgpKEgKi8KICAgICAnXDAnLAogICAgICdceEUwJywgJ1x4QTQnLCAnXHg4OCcsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceDkwJywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4OTMnLCAnICcsICdceEUwJywgJ1x4QTQnLCAnXHg5NCcsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceEJGJywgJyAnLCAnXHhFMCcsICdceEE1JywgJ1x4ODAnLCAnICcsICdceEUwJywgJ1x4QTUnLCAnXHg4QicsICcgJywgJ1x4RTAnLCAnXHhBNScsICdceDhDJywgIC8qIOCkiCDgpJAg4KSTIOCklCDgpL8g4KWAIOCliyDgpYwgKi8KICAgICAnXDAnLApAQCAtMjk2LDYgKzI5NiwyMCBAQAogICAgICdcMCcsCiAgICAgJ1x4RTAnLCAnXHhCNCcsICdceDlGJywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4QTAnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHhBNycsICcgJywgJ1x4RTAnLCAnXHhCNCcsICdceEI2JywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4OTgnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHg5QScsICcgJywgJ1x4RTAnLCAnXHhCNCcsICdceEE1JywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4QjInLCAgLyog4LSfIOC0oCDgtKcg4LS2IOC0mCDgtJog4LSlIOC0siAqLwogICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5NicsICdceEI5JywgJ1x4ODAnLCAnICcsICdceEYwJywgJ1x4OTYnLCAnXHhCOScsICdceDgxJywgJyAnLCAnXHhGMCcsICdceDk2JywgJ1x4QjknLCAnXHg4MicsICcgJywgJ1x4RjAnLCAnXHg5NicsICdceEI5JywgJ1x4ODMnLCAnICcsICdceEYwJywgJ1x4OTYnLCAnXHhCOScsICdceDhGJywgJyAnLCAnXHhGMCcsICdceDk2JywgJ1x4QjknLCAnXHg5QScsICcgJywgJ1x4RjAnLCAnXHg5NicsICdceEI5JywgJ1x4OUYnLCAgLyog8Ja5gCDwlrmBIPCWuYIg8Ja5gyDwlrmPIPCWuZog8Ja5nyAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5NicsICdceEI5JywgJ1x4ODAnLCAnICcsICdceEYwJywgJ1x4OTYnLCAnXHhCOScsICdceDgxJywgJyAnLCAnXHhGMCcsICdceDk2JywgJ1x4QjknLCAnXHg4MicsICcgJywgJ1x4RjAnLCAnXHg5NicsICdceEI5JywgJ1x4ODMnLCAnICcsICdceEYwJywgJ1x4OTYnLCAnXHhCOScsICdceDhGJywgJyAnLCAnXHhGMCcsICdceDk2JywgJ1x4QjknLCAnXHg5QScsICcgJywgJ1x4RjAnLCAnXHg5NicsICdceEI5JywgJ1x4OTInLCAnICcsICdceEYwJywgJ1x4OTYnLCAnXHhCOScsICdceDkzJywgIC8qIPCWuYAg8Ja5gSDwlrmCIPCWuYMg8Ja5jyDwlrmaIPCWuZIg8Ja5kyAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5NicsICdceEI5JywgJ1x4QTQnLCAnICcsICdceEYwJywgJ1x4OTYnLCAnXHhCOScsICdceEFDJywgJyAnLCAnXHhGMCcsICdceDk2JywgJ1x4QjknLCAnXHhBNycsICcgJywgJ1x4RjAnLCAnXHg5NicsICdceEI5JywgJ1x4QjQnLCAnICcsICdceEYwJywgJ1x4OTYnLCAnXHhCOScsICdceEI2JywgJyAnLCAnXHhGMCcsICdceDk2JywgJ1x4QjknLCAnXHhCRScsICAvKiDwlrmkIPCWuawg8Ja5pyDwlrm0IPCWubYg8Ja5viAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5NicsICdceEI5JywgJ1x4QTAnLCAnICcsICdceEYwJywgJ1x4OTYnLCAnXHhCOScsICdceEExJywgJyAnLCAnXHhGMCcsICdceDk2JywgJ1x4QjknLCAnXHhBMicsICcgJywgJ1x4RjAnLCAnXHg5NicsICdceEI5JywgJ1x4QjknLCAnICcsICdceEYwJywgJ1x4OTYnLCAnXHhCOScsICdceEIzJywgJyAnLCAnXHhGMCcsICdceDk2JywgJ1x4QjknLCAnXHhBRScsICAvKiDwlrmgIPCWuaEg8Ja5oiDwlrm5IPCWubMg8Ja5riAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5NicsICdceEI5JywgJ1x4QTAnLCAnICcsICdceEYwJywgJ1x4OTYnLCAnXHhCOScsICdceEExJywgJyAnLCAnXHhGMCcsICdceDk2JywgJ1x4QjknLCAnXHhBMicsICcgJywgJ1x4RjAnLCAnXHg5NicsICdceEI5JywgJ1x4QjMnLCAnICcsICdceEYwJywgJ1x4OTYnLCAnXHhCOScsICdceEFEJywgJyAnLCAnXHhGMCcsICdceDk2JywgJ1x4QjknLCAnXHhCRCcsICAvKiDwlrmgIPCWuaEg8Ja5oiDwlrmzIPCWua0g8Ja5vSAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5NicsICdceEI5JywgJ1x4QTUnLCAnICcsICdceEYwJywgJ1x4OTYnLCAnXHhCOScsICdceEE4JywgJyAnLCAnXHhGMCcsICdceDk2JywgJ1x4QjknLCAnXHhBOScsICAvKiDwlrmlIPCWuagg8Ja5qSAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5NicsICdceEJBJywgJ1x4ODAnLCAnICcsICdceEYwJywgJ1x4OTYnLCAnXHhCQScsICdceDg1JywgJyAnLCAnXHhGMCcsICdceDk2JywgJ1x4QkEnLCAnXHg4OCcsICcgJywgJ1x4RjAnLCAnXHg5NicsICdceEJBJywgJ1x4ODQnLCAnICcsICdceEYwJywgJ1x4OTYnLCAnXHhCQScsICdceDhEJywgIC8qIPCWuoAg8Ja6hSDwlrqIIPCWuoQg8Ja6jSAqLworICAgICdcMCcsCiAgICAgJ1x4RTEnLCAnXHhBMCcsICdceEIzJywgJyAnLCAnXHhFMScsICdceEEwJywgJ1x4QjQnLCAnICcsICdceEUxJywgJ1x4QTAnLCAnXHhCNicsICcgJywgJ1x4RTEnLCAnXHhBMCcsICdceEJEJywgJyAnLCAnXHhFMScsICdceEExJywgJ1x4ODInLCAnICcsICdceEUxJywgJ1x4QTEnLCAnXHg4QScsICcgJywgJ1x4RTInLCAnXHg4MCcsICdceDhEJywgJ1x4RTEnLCAnXHhBMScsICdceEExJywgJ1x4RTInLCAnXHg4MCcsICdceDhEJywgJyAnLCAnXHhFMicsICdceDgwJywgJ1x4OEQnLCAnXHhFMScsICdceEExJywgJ1x4QjMnLCAnXHhFMicsICdceDgwJywgJ1x4OEQnLCAgLyog4aCzIOGgtCDhoLYg4aC9IOGhgiDhoYog4oCN4aGh4oCNIOKAjeGhs+KAjSAqLwogICAgICdcMCcsCiAgICAgJ1x4RTEnLCAnXHhBMScsICdceDgzJywgIC8qIOGhgyAqLwpAQCAtMzQwLDYgKzM1NCwxMiBAQAogICAgICdcMCcsCiAgICAgJ1x4RjAnLCAnXHg5MCcsICdceDkyJywgJ1x4ODAnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MicsICdceDgyJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTInLCAnXHg4NicsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkyJywgJ1x4ODgnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MicsICdceDhBJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTInLCAnXHg5MicsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkyJywgJ1x4QTAnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MicsICdceEE5JywgIC8qIPCQkoAg8JCSgiDwkJKGIPCQkogg8JCSiiDwkJKSIPCQkqAg8JCSqSAqLwogICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5MCcsICdceEI0JywgJ1x4ODMnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHhCNCcsICdceDgwJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4QjQnLCAnXHg4NicsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceEI0JywgJ1x4OTYnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHhCNCcsICdceDk1JywgIC8qIPCQtIMg8JC0gCDwkLSGIPCQtJYg8JC0lSAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5MCcsICdceEI0JywgJ1x4OTQnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHhCNCcsICdceDk2JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4QjQnLCAnXHg5NScsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceEI0JywgJ1x4OTEnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHhCNCcsICdceDkwJywgIC8qIPCQtJQg8JC0liDwkLSVIPCQtJEg8JC0kCAqLworICAgICdcMCcsCisgICAgJ1x4RDknLCAnXHg4MCcsICAvKiDZgCAqLworICAgICdcMCcsCiAgICAgJ1x4RUEnLCAnXHhBMicsICdceDlDJywgJyAnLCAnXHhFQScsICdceEEyJywgJ1x4OUUnLCAnICcsICdceEVBJywgJ1x4QTInLCAnXHhCMycsICcgJywgJ1x4RUEnLCAnXHhBMicsICdceDgyJywgJyAnLCAnXHhFQScsICdceEEyJywgJ1x4OTYnLCAnICcsICdceEVBJywgJ1x4QTInLCAnXHg5MicsICcgJywgJ1x4RUEnLCAnXHhBMicsICdceDlEJywgJyAnLCAnXHhFQScsICdceEEyJywgJ1x4OUInLCAgLyog6qKcIOqiniDqorMg6qKCIOqiliDqopIg6qKdIOqimyAqLwogICAgICdcMCcsCiAgICAgJ1x4RUEnLCAnXHhBMicsICdceDgyJywgJyAnLCAnXHhFQScsICdceEEyJywgJ1x4QTgnLCAnICcsICdceEVBJywgJ1x4QTInLCAnXHhCQScsICcgJywgJ1x4RUEnLCAnXHhBMicsICdceEE0JywgJyAnLCAnXHhFQScsICdceEEyJywgJ1x4OEUnLCAgLyog6qKCIOqiqCDqorog6qKkIOqijiAqLwpAQCAtNDg4LDE0ICs1MDgsMTQgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0NIQUtNQV9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19DSEFLTUFfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19UT1AsICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAotICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX0JPVFRPTSwgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfU01BTExfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAotICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX1NNQUxMX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfU1VQU19UT1AsICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKLSAgICB7IEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19TVVBTX0JPVFRPTSwgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfVE9QLCAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19CT1RUT00sICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX1NNQUxMX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19TTUFMTF9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX1NVUFNfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfU1VQU19CT1RUT00sICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FSSUFOX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0NBUklBTl9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LApAQCAtNTk1LDYgKzYxNSw5IEBACiAgICAgeyBBRl9CTFVFX1NUUklOR19IRUJSRVdfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19LQU5OQURBX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19LQVlBSF9MSV9UT1AsICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0tBWUFIX0xJX0JPVFRPTSwgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCkBAIC02MTMsOSArNjM2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19LSE1FUl9TWU1CT0xTX1dBTklOR19CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAotICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FOTkFEQV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0xBT19UT1AsICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX0JPVFRPTSwgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKQEAgLTY1Myw2ICs2NzMsMTUgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX01BTEFZQUxBTV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQUxBWUFMQU1fQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01FREVGQUlEUklOX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NRURFRkFJRFJJTl9DQVBJVEFMX0JPVFRPTSwgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUVERUZBSURSSU5fU01BTExfRl9UT1AsICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01FREVGQUlEUklOX1NNQUxMX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUVERUZBSURSSU5fU01BTExfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01FREVGQUlEUklOX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NRURFRkFJRFJJTl9ESUdJVF9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX01PTkdPTElBTl9UT1BfQkFTRSwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX01PTkdPTElBTl9CT1RUT01fQkFTRSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKQEAgLTY4Nyw2ICs3MTYsMTAgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX09TTUFOWUFfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfT1NNQU5ZQV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1JPSElOR1lBX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19ST0hJTkdZQV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfUk9ISU5HWUFfSk9JTiwgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX05FVVRSQUwgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19TQVVSQVNIVFJBX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX1NBVVJBU0hUUkFfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCkBAIC03MTQsOSArNzQ3LDYgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19URUxVR1VfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IEFGX0JMVUVfU1RSSU5HX1RJRklOQUdILCBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAotICAgIHsgQUZfQkxVRV9TVFJJTkdfVElGSU5BR0gsIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX1RIQUlfVE9QLCAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX1RIQUlfQk9UVE9NLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKQEAgLTcyNiw2ICs3NTYsOSBAQAogICAgIHsgQUZfQkxVRV9TVFJJTkdfVEhBSV9MQVJHRV9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfVEhBSV9ESUdJVF9UT1AsICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfVElGSU5BR0gsIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19USUZJTkFHSCwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfVkFJX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX1ZBSV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZibHVlLmNpbiBiL3NyYy9hdXRvZml0L2FmYmx1ZS5jaW4KaW5kZXggNjU0NWQxZi4uYzZhNjk3ZiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZibHVlLmNpbgorKysgYi9zcmMvYXV0b2ZpdC9hZmJsdWUuY2luCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQXV0by1maXR0ZXIgZGF0YSBmb3IgYmx1ZSBzdHJpbmdzIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmJsdWUuZGF0IGIvc3JjL2F1dG9maXQvYWZibHVlLmRhdAppbmRleCA0NmRiNDNmLi5iMTliOGRmIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmJsdWUuZGF0CisrKyBiL3NyYy9hdXRvZml0L2FmYmx1ZS5kYXQKQEAgLTIsNyArMiw3IEBACiAvLwogLy8gICBBdXRvLWZpdHRlciBkYXRhIGZvciBibHVlIHN0cmluZ3MuCiAvLwotLy8gQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgYnkKKy8vIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIGJ5CiAvLyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAvLwogLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAzLDcgKzIwMyw3IEBACiAgICAgIvCQkKgg8JCQqiDwkJCsIPCQkL8g8JCRgyIKIAogICBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX0JBU0UKLSAgICAi4KSVIOCkriDgpIUg4KSGIOCkpSDgpKcg4KStIOCktiIKKyAgICAi4KSVIOCkqCDgpK4g4KSJIOCkmyDgpJ8g4KSgIOCkoSIKICAgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9UT1AKICAgICAi4KSIIOCkkCDgpJMg4KSUIOCkvyDgpYAg4KWLIOCljCIKICAgLy8gbm90ZSB0aGF0IHNvbWUgZm9udHMgaGF2ZSBleHRyZW1lIHZhcmlhdGlvbiBpbiB0aGUgaGVpZ2h0IG9mIHRoZQpAQCAtMzkyLDYgKzM5MiwyMSBAQAogICBBRl9CTFVFX1NUUklOR19NQUxBWUFMQU1fQk9UVE9NCiAgICAgIuC0nyDgtKAg4LSnIOC0tiDgtJgg4LSaIOC0pSDgtLIiCiAKKyAgQUZfQkxVRV9TVFJJTkdfTUVERUZBSURSSU5fQ0FQSVRBTF9UT1AKKyAgICAi8Ja5gCDwlrmBIPCWuYIg8Ja5gyDwlrmPIPCWuZog8Ja5nyIKKyAgQUZfQkxVRV9TVFJJTkdfTUVERUZBSURSSU5fQ0FQSVRBTF9CT1RUT00KKyAgICAi8Ja5gCDwlrmBIPCWuYIg8Ja5gyDwlrmPIPCWuZog8Ja5kiDwlrmTIgorICBBRl9CTFVFX1NUUklOR19NRURFRkFJRFJJTl9TTUFMTF9GX1RPUAorICAgICLwlrmkIPCWuawg8Ja5pyDwlrm0IPCWubYg8Ja5viIKKyAgQUZfQkxVRV9TVFJJTkdfTUVERUZBSURSSU5fU01BTExfVE9QCisgICAgIvCWuaAg8Ja5oSDwlrmiIPCWubkg8Ja5syDwlrmuIgorICBBRl9CTFVFX1NUUklOR19NRURFRkFJRFJJTl9TTUFMTF9CT1RUT00KKyAgICAi8Ja5oCDwlrmhIPCWuaIg8Ja5syDwlrmtIPCWub0iCisgIEFGX0JMVUVfU1RSSU5HX01FREVGQUlEUklOX1NNQUxMX0RFU0NFTkRFUgorICAgICLwlrmlIPCWuagg8Ja5qSIKKyAgQUZfQkxVRV9TVFJJTkdfTUVERUZBSURSSU5fRElHSVRfVE9QCisgICAgIvCWuoAg8Ja6hSDwlrqIIPCWuoQg8Ja6jSIKKwogICBBRl9CTFVFX1NUUklOR19NT05HT0xJQU5fVE9QX0JBU0UKICAgICAi4aCzIOGgtCDhoLYg4aC9IOGhgiDhoYog4oCN4aGh4oCNIOKAjeGhs+KAjSIKICAgQUZfQkxVRV9TVFJJTkdfTU9OR09MSUFOX0JPVFRPTV9CQVNFCkBAIC00NDMsNiArNDU4LDEzIEBACiAgIEFGX0JMVUVfU1RSSU5HX09TTUFOWUFfQk9UVE9NCiAgICAgIvCQkoAg8JCSgiDwkJKGIPCQkogg8JCSiiDwkJKSIPCQkqAg8JCSqSIKIAorICBBRl9CTFVFX1NUUklOR19ST0hJTkdZQV9UT1AKKyAgICAi8JC0gyDwkLSAIPCQtIYg8JC0liDwkLSVIgorICBBRl9CTFVFX1NUUklOR19ST0hJTkdZQV9CT1RUT00KKyAgICAi8JC0lCDwkLSWIPCQtJUg8JC0kSDwkLSQIgorICBBRl9CTFVFX1NUUklOR19ST0hJTkdZQV9KT0lOCisgICAgItmAIgorCiAgIEFGX0JMVUVfU1RSSU5HX1NBVVJBU0hUUkFfVE9QCiAgICAgIuqinCDqop4g6qKzIOqigiDqopYg6qKSIOqinSDqopsiCiAgIEFGX0JMVUVfU1RSSU5HX1NBVVJBU0hUUkFfQk9UVE9NCkBAIC03MzQsMTQgKzc1NiwxNCBAQAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0NBTlMKLSAgICB7IEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19UT1AsICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9Ci0gICAgeyBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfQk9UVE9NLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX1NNQUxMX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQotICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX1NNQUxMX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB7IEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19TVVBTX1RPUCwgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9Ci0gICAgeyBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfU1VQU19CT1RUT00sICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19UT1AsICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfQk9UVE9NLCAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX1NNQUxMX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX1NNQUxMX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19TVVBTX1RPUCwgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfU1VQU19CT1RUT00sICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICBBRl9CTFVFX1NUUklOR1NFVF9DQVJJCiAgICAgeyBBRl9CTFVFX1NUUklOR19DQVJJQU5fVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9CkBAIC04NzQsNiArODk2LDExIEBACiAgICAgeyBBRl9CTFVFX1NUUklOR19IRUJSRVdfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKKyAgQUZfQkxVRV9TVFJJTkdTRVRfS05EQQorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FOTkFEQV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0tBTEkKICAgICB7IEFGX0JMVUVfU1RSSU5HX0tBWUFIX0xJX1RPUCwgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9CkBAIC04OTgsMTEgKzkyNSw2IEBACiAgICAgeyBBRl9CTFVFX1NUUklOR19LSE1FUl9TWU1CT0xTX1dBTklOR19CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgQUZfQkxVRV9TVFJJTkdTRVRfS05EQQotICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FOTkFEQV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KLSAgICB7IEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBTwogICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX1RPUCwgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0KQEAgLTk1Miw2ICs5NzQsMTcgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX01BTEFZQUxBTV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAorICBBRl9CTFVFX1NUUklOR1NFVF9NRURGCisgICAgeyBBRl9CTFVFX1NUUklOR19NRURFRkFJRFJJTl9DQVBJVEFMX1RPUCwgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NRURFRkFJRFJJTl9DQVBJVEFMX0JPVFRPTSwgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NRURFRkFJRFJJTl9TTUFMTF9GX1RPUCwgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NRURFRkFJRFJJTl9TTUFMTF9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUVERUZBSURSSU5fU01BTExfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUVERUZBSURSSU5fU01BTExfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUVERUZBSURSSU5fRElHSVRfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX01PTkcKICAgICB7IEFGX0JMVUVfU1RSSU5HX01PTkdPTElBTl9UT1BfQkFTRSwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfTU9OR09MSUFOX0JPVFRPTV9CQVNFLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMDAyLDYgKzEwMzUsMTIgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX09TTUFOWUFfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCisgIEFGX0JMVUVfU1RSSU5HU0VUX1JPSEcKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1JPSElOR1lBX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX1JPSElOR1lBX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX1JPSElOR1lBX0pPSU4sICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9ORVVUUkFMIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICBBRl9CTFVFX1NUUklOR1NFVF9TQVVSCiAgICAgeyBBRl9CTFVFX1NUUklOR19TQVVSQVNIVFJBX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfU0FVUkFTSFRSQV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEwNDMsMTEgKzEwODIsNiBAQAogICAgIHsgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gIEFGX0JMVUVfU1RSSU5HU0VUX1RGTkcKLSAgICB7IEFGX0JMVUVfU1RSSU5HX1RJRklOQUdILCBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9Ci0gICAgeyBBRl9CTFVFX1NUUklOR19USUZJTkFHSCwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQogICBBRl9CTFVFX1NUUklOR1NFVF9USEFJCiAgICAgeyBBRl9CTFVFX1NUUklOR19USEFJX1RPUCwgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0KQEAgLTEwNTksNiArMTA5MywxMSBAQAogICAgIHsgQUZfQkxVRV9TVFJJTkdfVEhBSV9ESUdJVF9UT1AsICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAorICBBRl9CTFVFX1NUUklOR1NFVF9URk5HCisgICAgeyBBRl9CTFVFX1NUUklOR19USUZJTkFHSCwgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfVElGSU5BR0gsIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKICAgQUZfQkxVRV9TVFJJTkdTRVRfVkFJSQogICAgIHsgQUZfQkxVRV9TVFJJTkdfVkFJX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfVkFJX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZibHVlLmggYi9zcmMvYXV0b2ZpdC9hZmJsdWUuaAppbmRleCBiNjliMWRmLi40ODZkNjYzIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmJsdWUuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmJsdWUuaApAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiAgIEF1dG8tZml0dGVyIGRhdGEgZm9yIGJsdWUgc3RyaW5ncyAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjEyLDU4ICsyMTIsNjggQEAKICAgICBBRl9CTFVFX1NUUklOR19MSVNVX0JPVFRPTSA9IDM1MDYsCiAgICAgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX1RPUCA9IDM1MzgsCiAgICAgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX0JPVFRPTSA9IDM1ODIsCi0gICAgQUZfQkxVRV9TVFJJTkdfTU9OR09MSUFOX1RPUF9CQVNFID0gMzYxNCwKLSAgICBBRl9CTFVFX1NUUklOR19NT05HT0xJQU5fQk9UVE9NX0JBU0UgPSAzNjU4LAotICAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfVE9QID0gMzY2MiwKLSAgICBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0JPVFRPTSA9IDM2OTQsCi0gICAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9BU0NFTkRFUiA9IDM3MjYsCi0gICAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9ERVNDRU5ERVIgPSAzNzU0LAotICAgIEFGX0JMVUVfU1RSSU5HX05LT19UT1AgPSAzNzg2LAotICAgIEFGX0JMVUVfU1RSSU5HX05LT19CT1RUT00gPSAzODEwLAotICAgIEFGX0JMVUVfU1RSSU5HX05LT19TTUFMTF9UT1AgPSAzODI1LAotICAgIEFGX0JMVUVfU1RSSU5HX05LT19TTUFMTF9CT1RUT00gPSAzODM0LAotICAgIEFGX0JMVUVfU1RSSU5HX09MX0NISUtJID0gMzg0NiwKLSAgICBBRl9CTFVFX1NUUklOR19PTERfVFVSS0lDX1RPUCA9IDM4NzAsCi0gICAgQUZfQkxVRV9TVFJJTkdfT0xEX1RVUktJQ19CT1RUT00gPSAzODg1LAotICAgIEFGX0JMVUVfU1RSSU5HX09TQUdFX0NBUElUQUxfVE9QID0gMzkwNSwKLSAgICBBRl9CTFVFX1NUUklOR19PU0FHRV9DQVBJVEFMX0JPVFRPTSA9IDM5NDUsCi0gICAgQUZfQkxVRV9TVFJJTkdfT1NBR0VfQ0FQSVRBTF9ERVNDRU5ERVIgPSAzOTc1LAotICAgIEFGX0JMVUVfU1RSSU5HX09TQUdFX1NNQUxMX1RPUCA9IDM5OTAsCi0gICAgQUZfQkxVRV9TVFJJTkdfT1NBR0VfU01BTExfQk9UVE9NID0gNDAzMCwKLSAgICBBRl9CTFVFX1NUUklOR19PU0FHRV9TTUFMTF9BU0NFTkRFUiA9IDQwNzAsCi0gICAgQUZfQkxVRV9TVFJJTkdfT1NBR0VfU01BTExfREVTQ0VOREVSID0gNDA5NSwKLSAgICBBRl9CTFVFX1NUUklOR19PU01BTllBX1RPUCA9IDQxMTAsCi0gICAgQUZfQkxVRV9TVFJJTkdfT1NNQU5ZQV9CT1RUT00gPSA0MTUwLAotICAgIEFGX0JMVUVfU1RSSU5HX1NBVVJBU0hUUkFfVE9QID0gNDE5MCwKLSAgICBBRl9CTFVFX1NUUklOR19TQVVSQVNIVFJBX0JPVFRPTSA9IDQyMjIsCi0gICAgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9UT1AgPSA0MjQyLAotICAgIEFGX0JMVUVfU1RSSU5HX1NIQVZJQU5fQk9UVE9NID0gNDI1MiwKLSAgICBBRl9CTFVFX1NUUklOR19TSEFWSUFOX0RFU0NFTkRFUiA9IDQyNzcsCi0gICAgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9TTUFMTF9UT1AgPSA0Mjg3LAotICAgIEFGX0JMVUVfU1RSSU5HX1NIQVZJQU5fU01BTExfQk9UVE9NID0gNDMyMiwKLSAgICBBRl9CTFVFX1NUUklOR19TSU5IQUxBX1RPUCA9IDQzMzcsCi0gICAgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9CT1RUT00gPSA0MzY5LAotICAgIEFGX0JMVUVfU1RSSU5HX1NJTkhBTEFfREVTQ0VOREVSID0gNDQwMSwKLSAgICBBRl9CTFVFX1NUUklOR19TVU5EQU5FU0VfVE9QID0gNDQ0NSwKLSAgICBBRl9CTFVFX1NUUklOR19TVU5EQU5FU0VfQk9UVE9NID0gNDQ2OSwKLSAgICBBRl9CTFVFX1NUUklOR19TVU5EQU5FU0VfREVTQ0VOREVSID0gNDUwMSwKLSAgICBBRl9CTFVFX1NUUklOR19UQUlfVklFVF9UT1AgPSA0NTA5LAotICAgIEFGX0JMVUVfU1RSSU5HX1RBSV9WSUVUX0JPVFRPTSA9IDQ1MjksCi0gICAgQUZfQkxVRV9TVFJJTkdfVEFNSUxfVE9QID0gNDU0MSwKLSAgICBBRl9CTFVFX1NUUklOR19UQU1JTF9CT1RUT00gPSA0NTczLAotICAgIEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9UT1AgPSA0NjA1LAotICAgIEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9CT1RUT00gPSA0NjMzLAotICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfVE9QID0gNDY2MSwKLSAgICBBRl9CTFVFX1NUUklOR19USEFJX0JPVFRPTSA9IDQ2ODUsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9BU0NFTkRFUiA9IDQ3MTMsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9MQVJHRV9BU0NFTkRFUiA9IDQ3MjUsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9ERVNDRU5ERVIgPSA0NzM3LAotICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfTEFSR0VfREVTQ0VOREVSID0gNDc1MywKLSAgICBBRl9CTFVFX1NUUklOR19USEFJX0RJR0lUX1RPUCA9IDQ3NjEsCi0gICAgQUZfQkxVRV9TVFJJTkdfVElGSU5BR0ggPSA0NzczLAotICAgIEFGX0JMVUVfU1RSSU5HX1ZBSV9UT1AgPSA0ODA1LAotICAgIEFGX0JMVUVfU1RSSU5HX1ZBSV9CT1RUT00gPSA0ODM3LAotICAgIGFmX2JsdWVfMV8xID0gNDg2OCwKKyAgICBBRl9CTFVFX1NUUklOR19NRURFRkFJRFJJTl9DQVBJVEFMX1RPUCA9IDM2MTQsCisgICAgQUZfQkxVRV9TVFJJTkdfTUVERUZBSURSSU5fQ0FQSVRBTF9CT1RUT00gPSAzNjQ5LAorICAgIEFGX0JMVUVfU1RSSU5HX01FREVGQUlEUklOX1NNQUxMX0ZfVE9QID0gMzY4OSwKKyAgICBBRl9CTFVFX1NUUklOR19NRURFRkFJRFJJTl9TTUFMTF9UT1AgPSAzNzE5LAorICAgIEFGX0JMVUVfU1RSSU5HX01FREVGQUlEUklOX1NNQUxMX0JPVFRPTSA9IDM3NDksCisgICAgQUZfQkxVRV9TVFJJTkdfTUVERUZBSURSSU5fU01BTExfREVTQ0VOREVSID0gMzc3OSwKKyAgICBBRl9CTFVFX1NUUklOR19NRURFRkFJRFJJTl9ESUdJVF9UT1AgPSAzNzk0LAorICAgIEFGX0JMVUVfU1RSSU5HX01PTkdPTElBTl9UT1BfQkFTRSA9IDM4MTksCisgICAgQUZfQkxVRV9TVFJJTkdfTU9OR09MSUFOX0JPVFRPTV9CQVNFID0gMzg2MywKKyAgICBBRl9CTFVFX1NUUklOR19NWUFOTUFSX1RPUCA9IDM4NjcsCisgICAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9CT1RUT00gPSAzODk5LAorICAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfQVNDRU5ERVIgPSAzOTMxLAorICAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfREVTQ0VOREVSID0gMzk1OSwKKyAgICBBRl9CTFVFX1NUUklOR19OS09fVE9QID0gMzk5MSwKKyAgICBBRl9CTFVFX1NUUklOR19OS09fQk9UVE9NID0gNDAxNSwKKyAgICBBRl9CTFVFX1NUUklOR19OS09fU01BTExfVE9QID0gNDAzMCwKKyAgICBBRl9CTFVFX1NUUklOR19OS09fU01BTExfQk9UVE9NID0gNDAzOSwKKyAgICBBRl9CTFVFX1NUUklOR19PTF9DSElLSSA9IDQwNTEsCisgICAgQUZfQkxVRV9TVFJJTkdfT0xEX1RVUktJQ19UT1AgPSA0MDc1LAorICAgIEFGX0JMVUVfU1RSSU5HX09MRF9UVVJLSUNfQk9UVE9NID0gNDA5MCwKKyAgICBBRl9CTFVFX1NUUklOR19PU0FHRV9DQVBJVEFMX1RPUCA9IDQxMTAsCisgICAgQUZfQkxVRV9TVFJJTkdfT1NBR0VfQ0FQSVRBTF9CT1RUT00gPSA0MTUwLAorICAgIEFGX0JMVUVfU1RSSU5HX09TQUdFX0NBUElUQUxfREVTQ0VOREVSID0gNDE4MCwKKyAgICBBRl9CTFVFX1NUUklOR19PU0FHRV9TTUFMTF9UT1AgPSA0MTk1LAorICAgIEFGX0JMVUVfU1RSSU5HX09TQUdFX1NNQUxMX0JPVFRPTSA9IDQyMzUsCisgICAgQUZfQkxVRV9TVFJJTkdfT1NBR0VfU01BTExfQVNDRU5ERVIgPSA0Mjc1LAorICAgIEFGX0JMVUVfU1RSSU5HX09TQUdFX1NNQUxMX0RFU0NFTkRFUiA9IDQzMDAsCisgICAgQUZfQkxVRV9TVFJJTkdfT1NNQU5ZQV9UT1AgPSA0MzE1LAorICAgIEFGX0JMVUVfU1RSSU5HX09TTUFOWUFfQk9UVE9NID0gNDM1NSwKKyAgICBBRl9CTFVFX1NUUklOR19ST0hJTkdZQV9UT1AgPSA0Mzk1LAorICAgIEFGX0JMVUVfU1RSSU5HX1JPSElOR1lBX0JPVFRPTSA9IDQ0MjAsCisgICAgQUZfQkxVRV9TVFJJTkdfUk9ISU5HWUFfSk9JTiA9IDQ0NDUsCisgICAgQUZfQkxVRV9TVFJJTkdfU0FVUkFTSFRSQV9UT1AgPSA0NDQ4LAorICAgIEFGX0JMVUVfU1RSSU5HX1NBVVJBU0hUUkFfQk9UVE9NID0gNDQ4MCwKKyAgICBBRl9CTFVFX1NUUklOR19TSEFWSUFOX1RPUCA9IDQ1MDAsCisgICAgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9CT1RUT00gPSA0NTEwLAorICAgIEFGX0JMVUVfU1RSSU5HX1NIQVZJQU5fREVTQ0VOREVSID0gNDUzNSwKKyAgICBBRl9CTFVFX1NUUklOR19TSEFWSUFOX1NNQUxMX1RPUCA9IDQ1NDUsCisgICAgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9TTUFMTF9CT1RUT00gPSA0NTgwLAorICAgIEFGX0JMVUVfU1RSSU5HX1NJTkhBTEFfVE9QID0gNDU5NSwKKyAgICBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0JPVFRPTSA9IDQ2MjcsCisgICAgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9ERVNDRU5ERVIgPSA0NjU5LAorICAgIEFGX0JMVUVfU1RSSU5HX1NVTkRBTkVTRV9UT1AgPSA0NzAzLAorICAgIEFGX0JMVUVfU1RSSU5HX1NVTkRBTkVTRV9CT1RUT00gPSA0NzI3LAorICAgIEFGX0JMVUVfU1RSSU5HX1NVTkRBTkVTRV9ERVNDRU5ERVIgPSA0NzU5LAorICAgIEFGX0JMVUVfU1RSSU5HX1RBSV9WSUVUX1RPUCA9IDQ3NjcsCisgICAgQUZfQkxVRV9TVFJJTkdfVEFJX1ZJRVRfQk9UVE9NID0gNDc4NywKKyAgICBBRl9CTFVFX1NUUklOR19UQU1JTF9UT1AgPSA0Nzk5LAorICAgIEFGX0JMVUVfU1RSSU5HX1RBTUlMX0JPVFRPTSA9IDQ4MzEsCisgICAgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX1RPUCA9IDQ4NjMsCisgICAgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX0JPVFRPTSA9IDQ4OTEsCisgICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9UT1AgPSA0OTE5LAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfQk9UVE9NID0gNDk0MywKKyAgICBBRl9CTFVFX1NUUklOR19USEFJX0FTQ0VOREVSID0gNDk3MSwKKyAgICBBRl9CTFVFX1NUUklOR19USEFJX0xBUkdFX0FTQ0VOREVSID0gNDk4MywKKyAgICBBRl9CTFVFX1NUUklOR19USEFJX0RFU0NFTkRFUiA9IDQ5OTUsCisgICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9MQVJHRV9ERVNDRU5ERVIgPSA1MDExLAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfRElHSVRfVE9QID0gNTAxOSwKKyAgICBBRl9CTFVFX1NUUklOR19USUZJTkFHSCA9IDUwMzEsCisgICAgQUZfQkxVRV9TVFJJTkdfVkFJX1RPUCA9IDUwNjMsCisgICAgQUZfQkxVRV9TVFJJTkdfVkFJX0JPVFRPTSA9IDUwOTUsCisgICAgYWZfYmx1ZV8xXzEgPSA1MTI2LAogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLCiAgICAgQUZfQkxVRV9TVFJJTkdfQ0pLX1RPUCA9IGFmX2JsdWVfMV8xICsgMSwKICAgICBBRl9CTFVFX1NUUklOR19DSktfQk9UVE9NID0gYWZfYmx1ZV8xXzEgKyAyMDMsCkBAIC0zNDcsMzUgKzM1NywzNyBAQAogICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dVSlIgPSAxMTIsCiAgICAgQUZfQkxVRV9TVFJJTkdTRVRfR1VSVSA9IDExOCwKICAgICBBRl9CTFVFX1NUUklOR1NFVF9IRUJSID0gMTI0LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0tBTEkgPSAxMjgsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfS0hNUiA9IDEzNCwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9LSE1TID0gMTQwLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0tOREEgPSAxNDMsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfS05EQSA9IDEyOCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9LQUxJID0gMTMxLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0tITVIgPSAxMzcsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfS0hNUyA9IDE0MywKICAgICBBRl9CTFVFX1NUUklOR1NFVF9MQU8gPSAxNDYsCiAgICAgQUZfQkxVRV9TVFJJTkdTRVRfTEFUTiA9IDE1MiwKICAgICBBRl9CTFVFX1NUUklOR1NFVF9MQVRCID0gMTU5LAogICAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBVFAgPSAxNjYsCiAgICAgQUZfQkxVRV9TVFJJTkdTRVRfTElTVSA9IDE3MywKICAgICBBRl9CTFVFX1NUUklOR1NFVF9NTFlNID0gMTc2LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX01PTkcgPSAxNzksCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfTVlNUiA9IDE4MiwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9OS09PID0gMTg3LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX05PTkUgPSAxOTIsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfT0xDSyA9IDE5MywKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9PUktIID0gMTk2LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX09TR0UgPSAxOTksCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfT1NNQSA9IDIwNywKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9TQVVSID0gMjEwLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX1NIQVcgPSAyMTMsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfU0lOSCA9IDIxOSwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9TVU5EID0gMjIzLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RBTUwgPSAyMjcsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfVEFWVCA9IDIzMCwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9URUxVID0gMjMzLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RGTkcgPSAyMzYsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfVEhBSSA9IDIzOSwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9WQUlJID0gMjQ3LAotICAgIGFmX2JsdWVfMl8xID0gMjUwLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX01FREYgPSAxNzksCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfTU9ORyA9IDE4NywKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9NWU1SID0gMTkwLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX05LT08gPSAxOTUsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfTk9ORSA9IDIwMCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9PTENLID0gMjAxLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX09SS0ggPSAyMDQsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfT1NHRSA9IDIwNywKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9PU01BID0gMjE1LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX1JPSEcgPSAyMTgsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfU0FVUiA9IDIyMiwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9TSEFXID0gMjI1LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX1NJTkggPSAyMzEsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfU1VORCA9IDIzNSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9UQU1MID0gMjM5LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RBVlQgPSAyNDIsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfVEVMVSA9IDI0NSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9USEFJID0gMjQ4LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RGTkcgPSAyNTYsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfVkFJSSA9IDI1OSwKKyAgICBhZl9ibHVlXzJfMSA9IDI2MiwKICNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKSwogICAgIEFGX0JMVUVfU1RSSU5HU0VUX0hBTkkgPSBhZl9ibHVlXzJfMSArIDAsCiAgICAgYWZfYmx1ZV8yXzFfMSA9IGFmX2JsdWVfMl8xICsgMiwKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmYmx1ZS5oaW4gYi9zcmMvYXV0b2ZpdC9hZmJsdWUuaGluCmluZGV4IDMwYTI4ZGEuLjM5NTcwMjcgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmYmx1ZS5oaW4KKysrIGIvc3JjL2F1dG9maXQvYWZibHVlLmhpbgpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEF1dG8tZml0dGVyIGRhdGEgZm9yIGJsdWUgc3RyaW5ncyAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZjamsuYyBiL3NyYy9hdXRvZml0L2FmY2prLmMKaW5kZXggYTYxNjg5Yi4uM2IzNDBjZCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZjamsuYworKysgYi9zcmMvYXV0b2ZpdC9hZmNqay5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgQ0pLIHdyaXRpbmcgc3lzdGVtIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMiw5ICsyMiw4IEBACiAgICAqCiAgICAqLwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0FEVkFOQ0VTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGFkdmFuYy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAogI2luY2x1ZGUgImFmZ2xvYmFsLmgiCiAjaW5jbHVkZSAiYWZsYXRpbi5oIgpAQCAtMTU4LDcgKzE1Nyw3IEBACiAgICAgICBpZiAoICFnbHlwaF9pbmRleCApCiAgICAgICAgIGdvdG8gRXhpdDsKIAotICAgICAgRlRfVFJBQ0U1KCggInN0YW5kYXJkIGNoYXJhY3RlcjogVSslMDRsWCAoZ2x5cGggaW5kZXggJWQpXG4iLAorICAgICAgRlRfVFJBQ0U1KCggInN0YW5kYXJkIGNoYXJhY3RlcjogVSslMDRsWCAoZ2x5cGggaW5kZXggJWxkKVxuIiwKICAgICAgICAgICAgICAgICAgIGNoLCBnbHlwaF9pbmRleCApKTsKIAogICAgICAgZXJyb3IgPSBGVF9Mb2FkX0dseXBoKCBmYWNlLCBnbHlwaF9pbmRleCwgRlRfTE9BRF9OT19TQ0FMRSApOwpAQCAtMjYxLDkgKzI2MCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgZGltID09IEFGX0RJTUVOU0lPTl9WRVJUID8gImhvcml6b250YWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInZlcnRpY2FsIiApKTsKIAotICAgICAgICAgIEZUX1RSQUNFNSgoICIgICVkIChzdGFuZGFyZCkiLCBheGlzLT5zdGFuZGFyZF93aWR0aCApKTsKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICAlbGQgKHN0YW5kYXJkKSIsIGF4aXMtPnN0YW5kYXJkX3dpZHRoICkpOwogICAgICAgICAgIGZvciAoIGkgPSAxOyBpIDwgYXhpcy0+d2lkdGhfY291bnQ7IGkrKyApCi0gICAgICAgICAgICBGVF9UUkFDRTUoKCAiICVkIiwgYXhpcy0+d2lkdGhzW2ldLm9yZyApKTsKKyAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgJWxkIiwgYXhpcy0+d2lkdGhzW2ldLm9yZyApKTsKIAogICAgICAgICAgIEZUX1RSQUNFNSgoICJcbiIgKSk7CiAgICAgICAgIH0KQEAgLTcyOCw3ICs3MjcsNyBAQAogCiAgICAgICAgIGRlbHRhMiA9IEZUX011bEZpeCggZGVsdGEyLCBzY2FsZSApOwogCi0gICAgICAgIEZUX1RSQUNFNSgoICJkZWx0YTogJWQiLCBkZWx0YTEgKSk7CisgICAgICAgIEZUX1RSQUNFNSgoICJkZWx0YTogJWxkIiwgZGVsdGExICkpOwogICAgICAgICBpZiAoIGRlbHRhMiA8IDMyICkKICAgICAgICAgICBkZWx0YTIgPSAwOwogI2lmIDAKQEAgLTczNyw3ICs3MzYsNyBAQAogI2VuZGlmCiAgICAgICAgIGVsc2UKICAgICAgICAgICBkZWx0YTIgPSBGVF9QSVhfUk9VTkQoIGRlbHRhMiApOwotICAgICAgICBGVF9UUkFDRTUoKCAiLyVkXG4iLCBkZWx0YTIgKSk7CisgICAgICAgIEZUX1RSQUNFNSgoICIvJWxkXG4iLCBkZWx0YTIgKSk7CiAKICAgICAgICAgaWYgKCBkZWx0YTEgPCAwICkKICAgICAgICAgICBkZWx0YTIgPSAtZGVsdGEyOwpAQCAtODA2LDcgKzgwNSw3IEBACiAgIHsKICAgICBBRl9BeGlzSGludHMgIGF4aXMgICAgICAgICAgPSAmaGludHMtPmF4aXNbZGltXTsKICAgICBBRl9TZWdtZW50ICAgIHNlZ21lbnRzICAgICAgPSBheGlzLT5zZWdtZW50czsKLSAgICBBRl9TZWdtZW50ICAgIHNlZ21lbnRfbGltaXQgPSBzZWdtZW50cyArIGF4aXMtPm51bV9zZWdtZW50czsKKyAgICBBRl9TZWdtZW50ICAgIHNlZ21lbnRfbGltaXQgPSBGVF9PRkZTRVQoIHNlZ21lbnRzLCBheGlzLT5udW1fc2VnbWVudHMgKTsKICAgICBGVF9FcnJvciAgICAgIGVycm9yOwogICAgIEFGX1NlZ21lbnQgICAgc2VnOwogCkBAIC0xNjQ0LDcgKzE2NDMsNyBAQAogCiAgICAgc3RlbV9lZGdlLT5wb3MgPSBiYXNlX2VkZ2UtPnBvcyArIGZpdHRlZF93aWR0aDsKIAotICAgIEZUX1RSQUNFNSgoICIgIENKS0xJTks6IGVkZ2UgJWQgQCVkIChvcG9zPSUuMmYpIGxpbmtlZCB0byAlLjJmLCIKKyAgICBGVF9UUkFDRTUoKCAiICBDSktMSU5LOiBlZGdlICVsZCBAJWQgKG9wb3M9JS4yZikgbGlua2VkIHRvICUuMmYsIgogICAgICAgICAgICAgICAgICIgZGlzdCB3YXMgJS4yZiwgbm93ICUuMmZcbiIsCiAgICAgICAgICAgICAgICAgc3RlbV9lZGdlIC0gaGludHMtPmF4aXNbZGltXS5lZGdlcywgc3RlbV9lZGdlLT5mcG9zLAogICAgICAgICAgICAgICAgIHN0ZW1fZWRnZS0+b3BvcyAvIDY0LjAsIHN0ZW1fZWRnZS0+cG9zIC8gNjQuMCwKQEAgLTE4NjYsNyArMTg2NSw3IEBACiAgICAgICAgICAgY29udGludWU7CiAKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQotICAgICAgICBGVF9UUkFDRTUoKCAiICBDSktCTFVFOiBlZGdlICVkIEAlZCAob3Bvcz0lLjJmKSBzbmFwcGVkIHRvICUuMmYsIgorICAgICAgICBGVF9UUkFDRTUoKCAiICBDSktCTFVFOiBlZGdlICVsZCBAJWQgKG9wb3M9JS4yZikgc25hcHBlZCB0byAlLjJmLCIKICAgICAgICAgICAgICAgICAgICAgIiB3YXMgJS4yZlxuIiwKICAgICAgICAgICAgICAgICAgICAgZWRnZTEgLSBlZGdlcywgZWRnZTEtPmZwb3MsIGVkZ2UxLT5vcG9zIC8gNjQuMCwKICAgICAgICAgICAgICAgICAgICAgYmx1ZS0+Zml0IC8gNjQuMCwgZWRnZTEtPnBvcyAvIDY0LjAgKSk7CkBAIC0xOTMwLDcgKzE5MjksNyBAQAogICAgICAgLyogdGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IGl0J3MgYmV0dGVyIHRvIGJlIHNhZmUgKi8KICAgICAgIGlmICggZWRnZTItPmJsdWVfZWRnZSApCiAgICAgICB7Ci0gICAgICAgIEZUX1RSQUNFNSgoICJBU1NFUlRJT04gRkFJTEVEIGZvciBlZGdlICVkXG4iLCBlZGdlMi1lZGdlcyApKTsKKyAgICAgICAgRlRfVFJBQ0U1KCggIkFTU0VSVElPTiBGQUlMRUQgZm9yIGVkZ2UgJWxkXG4iLCBlZGdlMi1lZGdlcyApKTsKIAogICAgICAgICBhZl9jamtfYWxpZ25fbGlua2VkX2VkZ2UoIGhpbnRzLCBkaW0sIGVkZ2UyLCBlZGdlICk7CiAgICAgICAgIGVkZ2UtPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmY2prLmggYi9zcmMvYXV0b2ZpdC9hZmNqay5oCmluZGV4IDU5YWNhZTUuLmZkMGY0NTEgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmY2prLmgKKysrIGIvc3JjL2F1dG9maXQvYWZjamsuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIENKSyB3cml0aW5nIHN5c3RlbSAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZjb3Zlci5oIGIvc3JjL2F1dG9maXQvYWZjb3Zlci5oCmluZGV4IGZmMjA3YTkuLjAzMDg1YWQgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmY292ZXIuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmNvdmVyLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBBdXRvLWZpdHRlciBjb3ZlcmFnZXMgKHNwZWNpZmljYXRpb24gb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZkdW1teS5jIGIvc3JjL2F1dG9maXQvYWZkdW1teS5jCmluZGV4IDdlMDdhNDEuLjc3ZDMxZGYgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmZHVtbXkuYworKysgYi9zcmMvYXV0b2ZpdC9hZmR1bW15LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgIEF1dG8tZml0dGVyIGR1bW15IHJvdXRpbmVzIHRvIGJlIHVzZWQgaWYgbm8gaGludGluZyBzaG91bGQgYmUKICAqICAgcGVyZm9ybWVkIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmR1bW15LmggYi9zcmMvYXV0b2ZpdC9hZmR1bW15LmgKaW5kZXggYWI5MjI3ZC4uZWZkNzk5ZSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZkdW1teS5oCisrKyBiL3NyYy9hdXRvZml0L2FmZHVtbXkuaApAQCAtNSw3ICs1LDcgQEAKICAqICAgQXV0by1maXR0ZXIgZHVtbXkgcm91dGluZXMgdG8gYmUgdXNlZCBpZiBubyBoaW50aW5nIHNob3VsZCBiZQogICogICBwZXJmb3JtZWQgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmZXJyb3JzLmggYi9zcmMvYXV0b2ZpdC9hZmVycm9ycy5oCmluZGV4IDJlYzMzNmYuLmY5MDg5OTkgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmZXJyb3JzLmgKKysrIGIvc3JjL2F1dG9maXQvYWZlcnJvcnMuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEF1dG9maXR0ZXIgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBBRkVSUk9SU19IXwogI2RlZmluZSBBRkVSUk9SU19IXwogCi0jaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdG1vZGVyci5oPgogCiAjdW5kZWYgRlRFUlJPUlNfSF8KIApAQCAtMzQsNyArMzQsNyBAQAogI2RlZmluZSBGVF9FUlJfUFJFRklYICBBRl9FcnJfCiAjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfQXV0b2ZpdAogCi0jaW5jbHVkZSBGVF9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZXJyb3JzLmg+CiAKICNlbmRpZiAvKiBBRkVSUk9SU19IXyAqLwogCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5jIGIvc3JjL2F1dG9maXQvYWZnbG9iYWwuYwppbmRleCA2YTlhMWU1Li5kNTEyOTQyIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5jCisrKyBiL3NyYy9hdXRvZml0L2FmZ2xvYmFsLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBBdXRvLWZpdHRlciByb3V0aW5lcyB0byBjb21wdXRlIGdsb2JhbCBoaW50aW5nIHZhbHVlcyAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgImFmZ2xvYmFsLmgiCiAjaW5jbHVkZSAiYWZyYW5nZXMuaCIKICNpbmNsdWRlICJhZnNoYXBlci5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzA2LDcgKzMwNiw3IEBACiAgICAgICAgICAgaWYgKCAhKCBjb3VudCAlIDEwICkgKQogICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAiICkpOwogCi0gICAgICAgICAgRlRfVFJBQ0U0KCggIiAlZCIsIGlkeCApKTsKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiICVsZCIsIGlkeCApKTsKICAgICAgICAgICBjb3VudCsrOwogCiAgICAgICAgICAgaWYgKCAhKCBjb3VudCAlIDEwICkgKQpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZnbG9iYWwuaCBiL3NyYy9hdXRvZml0L2FmZ2xvYmFsLmgKaW5kZXggNTJmMzgzNS4uZmVjZjdhZiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZnbG9iYWwuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5oCkBAIC01LDcgKzUsNyBAQAogICogICBBdXRvLWZpdHRlciByb3V0aW5lcyB0byBjb21wdXRlIGdsb2JhbCBoaW50aW5nIHZhbHVlcwogICogICAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZoaW50cy5jIGIvc3JjL2F1dG9maXQvYWZoaW50cy5jCmluZGV4IGVkMTExYzQuLmE4ZTAwODkgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmaGludHMuYworKysgYi9zcmMvYXV0b2ZpdC9hZmhpbnRzLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOCw4ICsxOCw4IEBACiAKICNpbmNsdWRlICJhZmhpbnRzLmgiCiAjaW5jbHVkZSAiYWZlcnJvcnMuaCIKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZoaW50cy5oIGIvc3JjL2F1dG9maXQvYWZoaW50cy5oCmluZGV4IGUwY2Y2MTIuLjYzOTdmMDkgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmaGludHMuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmhpbnRzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmluZGljLmMgYi9zcmMvYXV0b2ZpdC9hZmluZGljLmMKaW5kZXggYTE3MTE3Yy4uYmMyODM3YSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZpbmRpYy5jCisrKyBiL3NyYy9hdXRvZml0L2FmaW5kaWMuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIEluZGljIHdyaXRpbmcgc3lzdGVtIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgYnkKICAqIFJhaHVsIEJoYWxlcmFvIDxyYWh1bC5iaGFsZXJhb0ByZWRoYXQuY29tPiwgPGIucmFodWwucG1AZ21haWwuY29tPi4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmluZGljLmggYi9zcmMvYXV0b2ZpdC9hZmluZGljLmgKaW5kZXggYmM1YmM1OS4uMDg4Yjg4YiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZpbmRpYy5oCisrKyBiL3NyYy9hdXRvZml0L2FmaW5kaWMuaApAQCAtNSw3ICs1LDcgQEAKICAqICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgSW5kaWMgd3JpdGluZyBzeXN0ZW0KICAqICAgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBieQogICogUmFodWwgQmhhbGVyYW8gPHJhaHVsLmJoYWxlcmFvQHJlZGhhdC5jb20+LCA8Yi5yYWh1bC5wbUBnbWFpbC5jb20+LgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbGF0aW4uYyBiL3NyYy9hdXRvZml0L2FmbGF0aW4uYwppbmRleCAyN2Q0MDI0Li4yMWVjMDJlIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmxhdGluLmMKKysrIGIvc3JjL2F1dG9maXQvYWZsYXRpbi5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgbGF0aW4gd3JpdGluZyBzeXN0ZW0gKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDkgKzE2LDggQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfQURWQU5DRVNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0YWR2YW5jLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogCiAjaW5jbHVkZSAiYWZnbG9iYWwuaCIKICNpbmNsdWRlICJhZmxhdGluLmgiCkBAIC0xNTUsNyArMTU0LDcgQEAKICAgICAgICAgZ290byBFeGl0OwogICAgICAgfQogCi0gICAgICBGVF9UUkFDRTUoKCAic3RhbmRhcmQgY2hhcmFjdGVyOiBVKyUwNGxYIChnbHlwaCBpbmRleCAlZClcbiIsCisgICAgICBGVF9UUkFDRTUoKCAic3RhbmRhcmQgY2hhcmFjdGVyOiBVKyUwNGxYIChnbHlwaCBpbmRleCAlbGQpXG4iLAogICAgICAgICAgICAgICAgICAgY2gsIGdseXBoX2luZGV4ICkpOwogCiAgICAgICBlcnJvciA9IEZUX0xvYWRfR2x5cGgoIGZhY2UsIGdseXBoX2luZGV4LCBGVF9MT0FEX05PX1NDQUxFICk7CkBAIC0yNTgsOSArMjU3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICBkaW0gPT0gQUZfRElNRU5TSU9OX1ZFUlQgPyAiaG9yaXpvbnRhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAidmVydGljYWwiICkpOwogCi0gICAgICAgICAgRlRfVFJBQ0U1KCggIiAgJWQgKHN0YW5kYXJkKSIsIGF4aXMtPnN0YW5kYXJkX3dpZHRoICkpOworICAgICAgICAgIEZUX1RSQUNFNSgoICIgICVsZCAoc3RhbmRhcmQpIiwgYXhpcy0+c3RhbmRhcmRfd2lkdGggKSk7CiAgICAgICAgICAgZm9yICggaSA9IDE7IGkgPCBheGlzLT53aWR0aF9jb3VudDsgaSsrICkKLSAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgJWQiLCBheGlzLT53aWR0aHNbaV0ub3JnICkpOworICAgICAgICAgICAgRlRfVFJBQ0U1KCggIiAlbGQiLCBheGlzLT53aWR0aHNbaV0ub3JnICkpOwogCiAgICAgICAgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKICAgICAgICAgfQpAQCAtMTAzMiw3ICsxMDMxLDcgQEAKICAgICAgICAgewogICAgICAgICAgICphID0gKmI7CiAgICAgICAgICAgRlRfVFJBQ0U1KCggImJsdWUgem9uZSBvdmVybGFwOiIKLSAgICAgICAgICAgICAgICAgICAgICAiIGFkanVzdGluZyAlcyAlZCB0byAlbGRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIiBhZGp1c3RpbmcgJXMgJWxkIHRvICVsZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICBhX2lzX3RvcCA/ICJvdmVyc2hvb3QiIDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgYmx1ZV9zb3J0ZWRbaV0gLSBheGlzLT5ibHVlcywKICAgICAgICAgICAgICAgICAgICAgICAqYSApKTsKQEAgLTEyODAsNyArMTI3OSw3IEBACiAgICAgICAgICAgICAgICAgImFmX2xhdGluX21ldHJpY3Nfc2NhbGVfZGltOiIKICAgICAgICAgICAgICAgICAiIHggaGVpZ2h0IGFsaWdubWVudCAoc3R5bGUgYCVzJyk6XG4iCiAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICIKLSAgICAgICAgICAgICAgICAiIHZlcnRpY2FsIHNjYWxpbmcgY2hhbmdlZCBmcm9tICUuNWYgdG8gJS41ZiAoYnkgJWQlJSlcbiIKKyAgICAgICAgICAgICAgICAiIHZlcnRpY2FsIHNjYWxpbmcgY2hhbmdlZCBmcm9tICUuNWYgdG8gJS41ZiAoYnkgJWxkJSUpXG4iCiAgICAgICAgICAgICAgICAgIlxuIiwKICAgICAgICAgICAgICAgICBhZl9zdHlsZV9uYW1lc1ttZXRyaWNzLT5yb290LnN0eWxlX2NsYXNzLT5zdHlsZV0sCiAgICAgICAgICAgICAgICAgc2NhbGUgLyA2NTUzNi4wLApAQCAtMTMzMyw3ICsxMzMyLDcgQEAKICAgICAgIHdpZHRoLT5jdXIgPSBGVF9NdWxGaXgoIHdpZHRoLT5vcmcsIHNjYWxlICk7CiAgICAgICB3aWR0aC0+Zml0ID0gd2lkdGgtPmN1cjsKIAotICAgICAgRlRfVFJBQ0U1KCggIiAgJWQgc2NhbGVkIHRvICUuMmZcbiIsCisgICAgICBGVF9UUkFDRTUoKCAiICAlbGQgc2NhbGVkIHRvICUuMmZcbiIsCiAgICAgICAgICAgICAgICAgICB3aWR0aC0+b3JnLAogICAgICAgICAgICAgICAgICAgd2lkdGgtPmN1ciAvIDY0LjAgKSk7CiAgICAgfQpAQCAtMTQ3NCw4ICsxNDczLDggQEAKICAgICAgICAgQUZfTGF0aW5CbHVlICBibHVlID0gJmF4aXMtPmJsdWVzW25uXTsKIAogCi0gICAgICAgIEZUX1RSQUNFNSgoICIgIHJlZmVyZW5jZSAlZDogJWQgc2NhbGVkIHRvICUuMmYlc1xuIgotICAgICAgICAgICAgICAgICAgICAiICBvdmVyc2hvb3QgJWQ6ICVkIHNjYWxlZCB0byAlLjJmJXNcbiIsCisgICAgICAgIEZUX1RSQUNFNSgoICIgIHJlZmVyZW5jZSAlZDogJWxkIHNjYWxlZCB0byAlLjJmJXNcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgb3ZlcnNob290ICVkOiAlbGQgc2NhbGVkIHRvICUuMmYlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgbm4sCiAgICAgICAgICAgICAgICAgICAgIGJsdWUtPnJlZi5vcmcsCiAgICAgICAgICAgICAgICAgICAgIGJsdWUtPnJlZi5maXQgLyA2NC4wLApAQCAtMTkxMCw3ICsxOTA5LDcgQEAKICAgICAvKiBzZW5zZSAtLSB0aGlzIGlzIHVzZWQgdG8gYmV0dGVyIGRldGVjdCBhbmQgaWdub3JlIHNlcmlmcyAgICovCiAgICAgewogICAgICAgQUZfU2VnbWVudCAgc2VnbWVudHMgICAgID0gYXhpcy0+c2VnbWVudHM7Ci0gICAgICBBRl9TZWdtZW50ICBzZWdtZW50c19lbmQgPSBzZWdtZW50cyArIGF4aXMtPm51bV9zZWdtZW50czsKKyAgICAgIEFGX1NlZ21lbnQgIHNlZ21lbnRzX2VuZCA9IEZUX09GRlNFVCggc2VnbWVudHMsIGF4aXMtPm51bV9zZWdtZW50cyApOwogCiAKICAgICAgIGZvciAoIHNlZ21lbnQgPSBzZWdtZW50czsgc2VnbWVudCA8IHNlZ21lbnRzX2VuZDsgc2VnbWVudCsrICkKQEAgLTIzMTQsNyArMjMxMyw3IEBACiAgICAgICovCiAgICAgewogICAgICAgQUZfRWRnZSAgZWRnZXMgICAgICA9IGF4aXMtPmVkZ2VzOwotICAgICAgQUZfRWRnZSAgZWRnZV9saW1pdCA9IGVkZ2VzICsgYXhpcy0+bnVtX2VkZ2VzOworICAgICAgQUZfRWRnZSAgZWRnZV9saW1pdCA9IEZUX09GRlNFVCggZWRnZXMsIGF4aXMtPm51bV9lZGdlcyApOwogICAgICAgQUZfRWRnZSAgZWRnZTsKIAogCkBAIC0yOTQ1LDcgKzI5NDQsNyBAQAogCiAgICAgc3RlbV9lZGdlLT5wb3MgPSBiYXNlX2VkZ2UtPnBvcyArIGZpdHRlZF93aWR0aDsKIAotICAgIEZUX1RSQUNFNSgoICIgIExJTks6IGVkZ2UgJWQgKG9wb3M9JS4yZikgbGlua2VkIHRvICUuMmYsIgorICAgIEZUX1RSQUNFNSgoICIgIExJTks6IGVkZ2UgJWxkIChvcG9zPSUuMmYpIGxpbmtlZCB0byAlLjJmLCIKICAgICAgICAgICAgICAgICAiIGRpc3Qgd2FzICUuMmYsIG5vdyAlLjJmXG4iLAogICAgICAgICAgICAgICAgIHN0ZW1fZWRnZSAtIGhpbnRzLT5heGlzW2RpbV0uZWRnZXMsIHN0ZW1fZWRnZS0+b3BvcyAvIDY0LjAsCiAgICAgICAgICAgICAgICAgc3RlbV9lZGdlLT5wb3MgLyA2NC4wLCBkaXN0IC8gNjQuMCwgZml0dGVkX3dpZHRoIC8gNjQuMCApKTsKQEAgLTMwNjksMTIgKzMwNjgsMTIgQEAKIAogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCiAgICAgICAgIGlmICggIWFuY2hvciApCi0gICAgICAgICAgRlRfVFJBQ0U1KCggIiAgQkxVRV9BTkNIT1I6IGVkZ2UgJWQgKG9wb3M9JS4yZikgc25hcHBlZCB0byAlLjJmLCIKLSAgICAgICAgICAgICAgICAgICAgICAiIHdhcyAlLjJmIChhbmNob3I9ZWRnZSAlZClcbiIsCisgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgQkxVRV9BTkNIT1I6IGVkZ2UgJWxkIChvcG9zPSUuMmYpIHNuYXBwZWQgdG8gJS4yZiwiCisgICAgICAgICAgICAgICAgICAgICAgIiB3YXMgJS4yZiAoYW5jaG9yPWVkZ2UgJWxkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICBlZGdlMSAtIGVkZ2VzLCBlZGdlMS0+b3BvcyAvIDY0LjAsIGJsdWUtPmZpdCAvIDY0LjAsCiAgICAgICAgICAgICAgICAgICAgICAgZWRnZTEtPnBvcyAvIDY0LjAsIGVkZ2UgLSBlZGdlcyApKTsKICAgICAgICAgZWxzZQotICAgICAgICAgIEZUX1RSQUNFNSgoICIgIEJMVUU6IGVkZ2UgJWQgKG9wb3M9JS4yZikgc25hcHBlZCB0byAlLjJmLCIKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBCTFVFOiBlZGdlICVsZCAob3Bvcz0lLjJmKSBzbmFwcGVkIHRvICUuMmYsIgogICAgICAgICAgICAgICAgICAgICAgICIgd2FzICUuMmZcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgZWRnZTEgLSBlZGdlcywgZWRnZTEtPm9wb3MgLyA2NC4wLCBibHVlLT5maXQgLyA2NC4wLAogICAgICAgICAgICAgICAgICAgICAgIGVkZ2UxLT5wb3MgLyA2NC4wICkpOwpAQCAtMzEyMyw3ICszMTIyLDcgQEAKICAgICAgIC8qIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCBpdCdzIGJldHRlciB0byBiZSBzYWZlICovCiAgICAgICBpZiAoIGVkZ2UyLT5ibHVlX2VkZ2UgKQogICAgICAgewotICAgICAgICBGVF9UUkFDRTUoKCAiICBBU1NFUlRJT04gRkFJTEVEIGZvciBlZGdlICVkXG4iLCBlZGdlMiAtIGVkZ2VzICkpOworICAgICAgICBGVF9UUkFDRTUoKCAiICBBU1NFUlRJT04gRkFJTEVEIGZvciBlZGdlICVsZFxuIiwgZWRnZTIgLSBlZGdlcyApKTsKIAogICAgICAgICBhZl9sYXRpbl9hbGlnbl9saW5rZWRfZWRnZSggaGludHMsIGRpbSwgZWRnZTIsIGVkZ2UgKTsKICAgICAgICAgZWRnZS0+ZmxhZ3MgfD0gQUZfRURHRV9ET05FOwpAQCAtMzE5MSw3ICszMTkwLDcgQEAKICAgICAgICAgYW5jaG9yICAgICAgID0gZWRnZTsKICAgICAgICAgZWRnZS0+ZmxhZ3MgfD0gQUZfRURHRV9ET05FOwogCi0gICAgICAgIEZUX1RSQUNFNSgoICIgIEFOQ0hPUjogZWRnZSAlZCAob3Bvcz0lLjJmKSBhbmQgJWQgKG9wb3M9JS4yZikiCisgICAgICAgIEZUX1RSQUNFNSgoICIgIEFOQ0hPUjogZWRnZSAlbGQgKG9wb3M9JS4yZikgYW5kICVsZCAob3Bvcz0lLjJmKSIKICAgICAgICAgICAgICAgICAgICAgIiBzbmFwcGVkIHRvICUuMmYgYW5kICUuMmZcbiIsCiAgICAgICAgICAgICAgICAgICAgIGVkZ2UgLSBlZGdlcywgZWRnZS0+b3BvcyAvIDY0LjAsCiAgICAgICAgICAgICAgICAgICAgIGVkZ2UyIC0gZWRnZXMsIGVkZ2UyLT5vcG9zIC8gNjQuMCwKQEAgLTMyMjAsNyArMzIxOSw3IEBACiAKICAgICAgICAgaWYgKCBlZGdlMi0+ZmxhZ3MgJiBBRl9FREdFX0RPTkUgKQogICAgICAgICB7Ci0gICAgICAgICAgRlRfVFJBQ0U1KCggIiAgQURKVVNUOiBlZGdlICVkIChwb3M9JS4yZikgbW92ZWQgdG8gJS4yZlxuIiwKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBBREpVU1Q6IGVkZ2UgJWxkIChwb3M9JS4yZikgbW92ZWQgdG8gJS4yZlxuIiwKICAgICAgICAgICAgICAgICAgICAgICBlZGdlIC0gZWRnZXMsIGVkZ2UtPnBvcyAvIDY0LjAsCiAgICAgICAgICAgICAgICAgICAgICAgKCBlZGdlMi0+cG9zIC0gY3VyX2xlbiApIC8gNjQuMCApKTsKIApAQCAtMzI2MSw3ICszMjYwLDcgQEAKICAgICAgICAgICBlZGdlLT5wb3MgID0gY3VyX3BvczEgLSBjdXJfbGVuIC8gMjsKICAgICAgICAgICBlZGdlMi0+cG9zID0gY3VyX3BvczEgKyBjdXJfbGVuIC8gMjsKIAotICAgICAgICAgIEZUX1RSQUNFNSgoICIgIFNURU06IGVkZ2UgJWQgKG9wb3M9JS4yZikgbGlua2VkIHRvICVkIChvcG9zPSUuMmYpIgorICAgICAgICAgIEZUX1RSQUNFNSgoICIgIFNURU06IGVkZ2UgJWxkIChvcG9zPSUuMmYpIGxpbmtlZCB0byAlbGQgKG9wb3M9JS4yZikiCiAgICAgICAgICAgICAgICAgICAgICAgIiBzbmFwcGVkIHRvICUuMmYgYW5kICUuMmZcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgZWRnZSAtIGVkZ2VzLCBlZGdlLT5vcG9zIC8gNjQuMCwKICAgICAgICAgICAgICAgICAgICAgICBlZGdlMiAtIGVkZ2VzLCBlZGdlMi0+b3BvcyAvIDY0LjAsCkBAIC0zMjkyLDcgKzMyOTEsNyBAQAogICAgICAgICAgIGVkZ2UtPnBvcyAgPSAoIGRlbHRhMSA8IGRlbHRhMiApID8gY3VyX3BvczEgOiBjdXJfcG9zMjsKICAgICAgICAgICBlZGdlMi0+cG9zID0gZWRnZS0+cG9zICsgY3VyX2xlbjsKIAotICAgICAgICAgIEZUX1RSQUNFNSgoICIgIFNURU06IGVkZ2UgJWQgKG9wb3M9JS4yZikgbGlua2VkIHRvICVkIChvcG9zPSUuMmYpIgorICAgICAgICAgIEZUX1RSQUNFNSgoICIgIFNURU06IGVkZ2UgJWxkIChvcG9zPSUuMmYpIGxpbmtlZCB0byAlbGQgKG9wb3M9JS4yZikiCiAgICAgICAgICAgICAgICAgICAgICAgIiBzbmFwcGVkIHRvICUuMmYgYW5kICUuMmZcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgZWRnZSAtIGVkZ2VzLCBlZGdlLT5vcG9zIC8gNjQuMCwKICAgICAgICAgICAgICAgICAgICAgICBlZGdlMiAtIGVkZ2VzLCBlZGdlMi0+b3BvcyAvIDY0LjAsCkBAIC0zMzE1LDcgKzMzMTQsNyBAQAogICAgICAgICAgIGlmICggZWRnZS0+bGluayAmJiBGVF9BQlMoIGVkZ2UtPmxpbmstPnBvcyAtIGVkZ2VbLTFdLnBvcyApID4gMTYgKQogICAgICAgICAgIHsKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQotICAgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgQk9VTkQ6IGVkZ2UgJWQgKHBvcz0lLjJmKSBtb3ZlZCB0byAlLjJmXG4iLAorICAgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgQk9VTkQ6IGVkZ2UgJWxkIChwb3M9JS4yZikgbW92ZWQgdG8gJS4yZlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgLSBlZGdlcywKICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPnBvcyAvIDY0LjAsCiAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlWy0xXS5wb3MgLyA2NC4wICkpOwpAQCAtMzQxNyw3ICszNDE2LDcgQEAKICAgICAgICAgaWYgKCBkZWx0YSA8IDY0ICsgMTYgKQogICAgICAgICB7CiAgICAgICAgICAgYWZfbGF0aW5fYWxpZ25fc2VyaWZfZWRnZSggaGludHMsIGVkZ2UtPnNlcmlmLCBlZGdlICk7Ci0gICAgICAgICAgRlRfVFJBQ0U1KCggIiAgU0VSSUY6IGVkZ2UgJWQgKG9wb3M9JS4yZikgc2VyaWYgdG8gJWQgKG9wb3M9JS4yZikiCisgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgU0VSSUY6IGVkZ2UgJWxkIChvcG9zPSUuMmYpIHNlcmlmIHRvICVsZCAob3Bvcz0lLjJmKSIKICAgICAgICAgICAgICAgICAgICAgICAiIGFsaWduZWQgdG8gJS4yZlxuIiwKICAgICAgICAgICAgICAgICAgICAgICBlZGdlIC0gZWRnZXMsIGVkZ2UtPm9wb3MgLyA2NC4wLAogICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPnNlcmlmIC0gZWRnZXMsIGVkZ2UtPnNlcmlmLT5vcG9zIC8gNjQuMCwKQEAgLTM0MjcsNyArMzQyNiw3IEBACiAgICAgICAgIHsKICAgICAgICAgICBlZGdlLT5wb3MgPSBGVF9QSVhfUk9VTkQoIGVkZ2UtPm9wb3MgKTsKICAgICAgICAgICBhbmNob3IgICAgPSBlZGdlOwotICAgICAgICAgIEZUX1RSQUNFNSgoICIgIFNFUklGX0FOQ0hPUjogZWRnZSAlZCAob3Bvcz0lLjJmKSIKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBTRVJJRl9BTkNIT1I6IGVkZ2UgJWxkIChvcG9zPSUuMmYpIgogICAgICAgICAgICAgICAgICAgICAgICIgc25hcHBlZCB0byAlLjJmXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtZWRnZXMsIGVkZ2UtPm9wb3MgLyA2NC4wLCBlZGdlLT5wb3MgLyA2NC4wICkpOwogICAgICAgICB9CkBAIC0zNDU1LDggKzM0NTQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyLT5wb3MgLSBiZWZvcmUtPnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlci0+b3BvcyAtIGJlZm9yZS0+b3BvcyApOwogCi0gICAgICAgICAgICBGVF9UUkFDRTUoKCAiICBTRVJJRl9MSU5LMTogZWRnZSAlZCAob3Bvcz0lLjJmKSBzbmFwcGVkIHRvICUuMmYiCi0gICAgICAgICAgICAgICAgICAgICAgICAiIGZyb20gJWQgKG9wb3M9JS4yZilcbiIsCisgICAgICAgICAgICBGVF9UUkFDRTUoKCAiICBTRVJJRl9MSU5LMTogZWRnZSAlbGQgKG9wb3M9JS4yZikgc25hcHBlZCB0byAlLjJmIgorICAgICAgICAgICAgICAgICAgICAgICAgIiBmcm9tICVsZCAob3Bvcz0lLjJmKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgLSBlZGdlcywgZWRnZS0+b3BvcyAvIDY0LjAsCiAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5wb3MgLyA2NC4wLAogICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlIC0gZWRnZXMsIGJlZm9yZS0+b3BvcyAvIDY0LjAgKSk7CkBAIC0zNDY1LDcgKzM0NjQsNyBAQAogICAgICAgICAgIHsKICAgICAgICAgICAgIGVkZ2UtPnBvcyA9IGFuY2hvci0+cG9zICsKICAgICAgICAgICAgICAgICAgICAgICAgICggKCBlZGdlLT5vcG9zIC0gYW5jaG9yLT5vcG9zICsgMTYgKSAmIH4zMSApOwotICAgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgU0VSSUZfTElOSzI6IGVkZ2UgJWQgKG9wb3M9JS4yZikiCisgICAgICAgICAgICBGVF9UUkFDRTUoKCAiICBTRVJJRl9MSU5LMjogZWRnZSAlbGQgKG9wb3M9JS4yZikiCiAgICAgICAgICAgICAgICAgICAgICAgICAiIHNuYXBwZWQgdG8gJS4yZlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgLSBlZGdlcywgZWRnZS0+b3BvcyAvIDY0LjAsIGVkZ2UtPnBvcyAvIDY0LjAgKSk7CiAgICAgICAgICAgfQpAQCAtMzQ4NSw3ICszNDg0LDcgQEAKICAgICAgICAgICBpZiAoIGVkZ2UtPmxpbmsgJiYgRlRfQUJTKCBlZGdlLT5saW5rLT5wb3MgLSBlZGdlWy0xXS5wb3MgKSA+IDE2ICkKICAgICAgICAgICB7CiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgIEJPVU5EOiBlZGdlICVkIChwb3M9JS4yZikgbW92ZWQgdG8gJS4yZlxuIiwKKyAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgIEJPVU5EOiBlZGdlICVsZCAocG9zPSUuMmYpIG1vdmVkIHRvICUuMmZcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlIC0gZWRnZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5wb3MgLyA2NC4wLAogICAgICAgICAgICAgICAgICAgICAgICAgZWRnZVstMV0ucG9zIC8gNjQuMCApKTsKQEAgLTM1MDYsNyArMzUwNSw3IEBACiAgICAgICAgICAgaWYgKCBlZGdlLT5saW5rICYmIEZUX0FCUyggZWRnZS0+bGluay0+cG9zIC0gZWRnZVstMV0ucG9zICkgPiAxNiApCiAgICAgICAgICAgewogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0gICAgICAgICAgICBGVF9UUkFDRTUoKCAiICBCT1VORDogZWRnZSAlZCAocG9zPSUuMmYpIG1vdmVkIHRvICUuMmZcbiIsCisgICAgICAgICAgICBGVF9UUkFDRTUoKCAiICBCT1VORDogZWRnZSAlbGQgKHBvcz0lLjJmKSBtb3ZlZCB0byAlLjJmXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgZWRnZSAtIGVkZ2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+cG9zIC8gNjQuMCwKICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2VbMV0ucG9zIC8gNjQuMCApKTsKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbGF0aW4uaCBiL3NyYy9hdXRvZml0L2FmbGF0aW4uaAppbmRleCA0MDQ3OTUzLi42MmJjNGM4IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmxhdGluLmgKKysrIGIvc3JjL2F1dG9maXQvYWZsYXRpbi5oCkBAIC01LDcgKzUsNyBAQAogICogICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBsYXRpbiB3cml0aW5nIHN5c3RlbQogICogICAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZsYXRpbjIuYyBiL3NyYy9hdXRvZml0L2FmbGF0aW4yLmMKaW5kZXggYzYwMWFiOC4uOTAyZjM5OCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZsYXRpbjIuYworKysgYi9zcmMvYXV0b2ZpdC9hZmxhdGluMi5jCkBAIC05LDcgKzksNyBAQAogICoKICAqICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgbGF0aW4gd3JpdGluZyBzeXN0ZW0gKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIxLDcgKzIxLDcgQEAKICAqLwogCiAKLSNpbmNsdWRlIEZUX0FEVkFOQ0VTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGFkdmFuYy5oPgogCiAKICNpZmRlZiBGVF9PUFRJT05fQVVUT0ZJVDIKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbGF0aW4yLmggYi9zcmMvYXV0b2ZpdC9hZmxhdGluMi5oCmluZGV4IDUwN2NlZjMuLmMyYWViYzQgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmbGF0aW4yLmgKKysrIGIvc3JjL2F1dG9maXQvYWZsYXRpbjIuaApAQCAtMTAsNyArMTAsNyBAQAogICogICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBsYXRpbiB3cml0aW5nIHN5c3RlbQogICogICAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZsb2FkZXIuYyBiL3NyYy9hdXRvZml0L2FmbG9hZGVyLmMKaW5kZXggODM3NDNiNy4uYzM1ZDg1YyAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZsb2FkZXIuYworKysgYi9zcmMvYXV0b2ZpdC9hZmxvYWRlci5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQXV0by1maXR0ZXIgZ2x5cGggbG9hZGluZyByb3V0aW5lcyAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgImFmZXJyb3JzLmgiCiAjaW5jbHVkZSAiYWZtb2R1bGUuaCIKIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CiAKIAogICAvKiBJbml0aWFsaXplIGdseXBoIGxvYWRlci4gKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbG9hZGVyLmggYi9zcmMvYXV0b2ZpdC9hZmxvYWRlci5oCmluZGV4IGQxZTBmM2MuLjk3MjgyMzcgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmbG9hZGVyLmgKKysrIGIvc3JjL2F1dG9maXQvYWZsb2FkZXIuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEF1dG8tZml0dGVyIGdseXBoIGxvYWRpbmcgcm91dGluZXMgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbW9kdWxlLmMgYi9zcmMvYXV0b2ZpdC9hZm1vZHVsZS5jCmluZGV4IDNlNDZhMzYuLmUxNjQ5NDQgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmbW9kdWxlLmMKKysrIGIvc3JjL2F1dG9maXQvYWZtb2R1bGUuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEF1dG8tZml0dGVyIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtNTMsMTAgKzUzLDEwIEBACiAgIHZvaWQqICBfYWZfZGVidWdfaGludHMgPSBfYWZfZGVidWdfaGludHNfcmVjOwogI2VuZGlmCiAKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfRFJJVkVSX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfUFJPUEVSVElFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZHJpdmVyLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgaWYgKCAhYWZfc3R5bGVfY2xhc3Nlc1tzc10gKQogICAgICAgewogICAgICAgICBGVF9UUkFDRTAoKCAiYWZfcHJvcGVydHlfc2V0OiBJbnZhbGlkIHZhbHVlICVkIGZvciBwcm9wZXJ0eSBgJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICBmYWxsYmFja19zY3JpcHQsIHByb3BlcnR5X25hbWUgKSk7CisgICAgICAgICAgICAgICAgICAgICpmYWxsYmFja19zY3JpcHQsIHByb3BlcnR5X25hbWUgKSk7CiAgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwogICAgICAgfQogCkBAIC01NTAsOCArNTUwLDggQEAKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNldF9mYWNlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0X2dsb2JhbF9oaW50cyAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZV9nbG9iYWxfaGludHMgKi8KLSAgICAoRlRfQXV0b0hpbnRlcl9HbHlwaExvYWRGdW5jKWFmX2F1dG9maXR0ZXJfbG9hZF9nbHlwaCApICAvKiBsb2FkX2dseXBoICovCi0KKyAgICAoRlRfQXV0b0hpbnRlcl9HbHlwaExvYWRGdW5jKWFmX2F1dG9maXR0ZXJfbG9hZF9nbHlwaCAgICAvKiBsb2FkX2dseXBoICovCisgICkKIAogICBGVF9ERUZJTkVfTU9EVUxFKAogICAgIGF1dG9maXRfbW9kdWxlX2NsYXNzLApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZtb2R1bGUuaCBiL3NyYy9hdXRvZml0L2FmbW9kdWxlLmgKaW5kZXggYjQxMDgwOS4uZThmZTRhOSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZtb2R1bGUuaAorKysgYi9zcmMvYXV0b2ZpdC9hZm1vZHVsZS5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQXV0by1maXR0ZXIgbW9kdWxlIGltcGxlbWVudGF0aW9uIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOSw5ICsxOSw4IEBACiAjaWZuZGVmIEFGTU9EVUxFX0hfCiAjZGVmaW5lIEFGTU9EVUxFX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9NT0RVTEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kYXBpLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC00Nyw2ICs0Niw3IEBACiAgIH0gQUZfTW9kdWxlUmVjLCAqQUZfTW9kdWxlOwogCiAKK0ZUX0RFQ0xBUkVfQVVUT0hJTlRFUl9JTlRFUkZBQ0UoIGFmX2F1dG9maXR0ZXJfaW50ZXJmYWNlICkKIEZUX0RFQ0xBUkVfTU9EVUxFKCBhdXRvZml0X21vZHVsZV9jbGFzcyApCiAKIApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZyYW5nZXMuYyBiL3NyYy9hdXRvZml0L2FmcmFuZ2VzLmMKaW5kZXggNDVjOGJiZi4uYzhlYmY1ZSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZyYW5nZXMuYworKysgYi9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQXV0by1maXR0ZXIgVW5pY29kZSBzY3JpcHQgcmFuZ2VzIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC02NjQsNiArNjY0LDE4IEBACiAgIH07CiAKIAorICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX21lZGZfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDE2RTQwLCAweDE2RTlGICksICAvKiBNZWRlZmFpZHJpbiAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9tZWRmX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbW9uZ191bmlyYW5nZXNbXSA9CiAgIHsKICAgICBBRl9VTklSQU5HRV9SRUMoICAweDE4MDAsICAweDE4QUYgKSwgIC8qIE1vbmdvbGlhbiAgICAgICAgICAgICovCkBAIC03NzgsNiArNzkwLDE4IEBACiAgIH07CiAKIAorICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3JvaGdfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwRDAwLCAweDEwRDNGICksICAgLyogSGFuaWZpIFJvaGluZ3lhICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3JvaGdfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDAsIDAgKQorICB9OworCisKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zYXVyX3VuaXJhbmdlc1tdID0KICAgewogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTg4MCwgIDB4QThERiApLCAgIC8qIFNhdXJhc2h0cmEgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmcmFuZ2VzLmggYi9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5oCmluZGV4IGQ1OTE3YWUuLmMyZmZkYTQgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmcmFuZ2VzLmgKKysrIGIvc3JjL2F1dG9maXQvYWZyYW5nZXMuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEF1dG8tZml0dGVyIFVuaWNvZGUgc2NyaXB0IHJhbmdlcyAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZzY3JpcHQuaCBiL3NyYy9hdXRvZml0L2Fmc2NyaXB0LmgKaW5kZXggMmRhOGM3MC4uNGNmOWNjMSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZzY3JpcHQuaAorKysgYi9zcmMvYXV0b2ZpdC9hZnNjcmlwdC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQXV0by1maXR0ZXIgc2NyaXB0cyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNDMsNiArMjQzLDEyIEBACiAgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAogICAgICAgICAgICJceEUwXHhCNFx4QTAgXHhFMFx4QjRceEIxIiApIC8qIOC0oCDgtLEgKi8KIAorICBTQ1JJUFQoIG1lZGYsIE1FREYsCisgICAgICAgICAgIk1lZGVmYWlkcmluIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfTUVERUZBSURSSU4sCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEYwXHg5Nlx4QjlceEExIFx4RjBceDk2XHhCOVx4OUIgXHhGMFx4OTZceEI5XHhBRiIgKSAvKiDwlrmhIPCWuZsg8Ja5ryAqLworCiAgIFNDUklQVCggbW9uZywgTU9ORywKICAgICAgICAgICAiTW9uZ29saWFuIiwKICAgICAgICAgICBIQl9TQ1JJUFRfTU9OR09MSUFOLApAQCAtMjkxLDYgKzI5NywxMiBAQAogICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKICAgICAgICAgICAiXHhGMFx4OTBceDkyXHg4NiBceEYwXHg5MFx4OTJceEEwIiApIC8qIPCQkoYg8JCSoCAqLwogCisgIFNDUklQVCggcm9oZywgUk9IRywKKyAgICAgICAgICAiSGFuaWZpIFJvaGluZ3lhIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfSEFOSUZJX1JPSElOR1lBLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhGMFx4OTBceEI0XHhCMCIgKSAvKiDwkLSwICovCisKICAgU0NSSVBUKCBzYXVyLCBTQVVSLAogICAgICAgICAgICJTYXVyYXNodHJhIiwKICAgICAgICAgICBIQl9TQ1JJUFRfU0FVUkFTSFRSQSwKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2Fmc2hhcGVyLmMgYi9zcmMvYXV0b2ZpdC9hZnNoYXBlci5jCmluZGV4IGE1MTkxYzYuLmJiZjdiNmIgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmc2hhcGVyLmMKKysrIGIvc3JjL2F1dG9maXQvYWZzaGFwZXIuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEhhcmZCdXp6IGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIE9wZW5UeXBlIGZlYXR1cmVzIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiw5ICsxNiw4IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX0FEVkFOQ0VTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0YWR2YW5jLmg+CiAjaW5jbHVkZSAiYWZnbG9iYWwuaCIKICNpbmNsdWRlICJhZnR5cGVzLmgiCiAjaW5jbHVkZSAiYWZzaGFwZXIuaCIKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2Fmc2hhcGVyLmggYi9zcmMvYXV0b2ZpdC9hZnNoYXBlci5oCmluZGV4IDA2YTFlMDYuLjEzOGMyN2IgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmc2hhcGVyLmgKKysrIGIvc3JjL2F1dG9maXQvYWZzaGFwZXIuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEhhcmZCdXp6IGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIE9wZW5UeXBlIGZlYXR1cmVzIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw3IEBACiAjZGVmaW5lIEFGU0hBUEVSX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAogCiAjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWloKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2Fmc3R5bGVzLmggYi9zcmMvYXV0b2ZpdC9hZnN0eWxlcy5oCmluZGV4IDhkMWQ3MDguLjkxMTNlYzQgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmc3R5bGVzLmgKKysrIGIvc3JjL2F1dG9maXQvYWZzdHlsZXMuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEF1dG8tZml0dGVyIHN0eWxlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0zMjIsNiArMzIyLDEzIEBACiAgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9NTFlNLAogICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCiAKKyAgU1RZTEUoIG1lZGZfZGZsdCwgTUVERl9ERkxULAorICAgICAgICAgIk1lZGVmYWlkcmluIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfTUVERiwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX01FREYsCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKwogICBTVFlMRSggbW9uZ19kZmx0LCBNT05HX0RGTFQsCiAgICAgICAgICAiTW9uZ29saWFuIGRlZmF1bHQgc3R5bGUiLAogICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCkBAIC0zNzgsNiArMzg1LDEzIEBACiAgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9PU01BLAogICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCiAKKyAgU1RZTEUoIHJvaGdfZGZsdCwgUk9IR19ERkxULAorICAgICAgICAgIkhhbmlmaSBSb2hpbmd5YSBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX1JPSEcsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9ST0hHLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKICAgU1RZTEUoIHNhdXJfZGZsdCwgU0FVUl9ERkxULAogICAgICAgICAgIlNhdXJhc2h0cmEgZGVmYXVsdCBzdHlsZSIsCiAgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmdHlwZXMuaCBiL3NyYy9hdXRvZml0L2FmdHlwZXMuaAppbmRleCA1NzkwMDNkLi41ZjA0MGM2IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZnR5cGVzLmgKKysrIGIvc3JjL2F1dG9maXQvYWZ0eXBlcy5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQXV0by1maXR0ZXIgdHlwZXMgKHNwZWNpZmljYXRpb24gb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMzIsMTIgKzMyLDExIEBACiAjaWZuZGVmIEFGVFlQRVNfSF8KICNkZWZpbmUgQUZUWVBFU19IXwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KIAotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotI2luY2x1ZGUgRlRfT1VUTElORV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0b3V0bG4uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CiAKICNpbmNsdWRlICJhZmJsdWUuaCIKIApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZ3YXJwLmMgYi9zcmMvYXV0b2ZpdC9hZndhcnAuYwppbmRleCA4NGU5NzUzLi44MDgyODBkIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZndhcnAuYworKysgYi9zcmMvYXV0b2ZpdC9hZndhcnAuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEF1dG8tZml0dGVyIHdhcnBpbmcgYWxnb3JpdGhtIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZndhcnAuaCBiL3NyYy9hdXRvZml0L2Fmd2FycC5oCmluZGV4IDlhMmM5YTQuLmNkZWEyM2UgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmd2FycC5oCisrKyBiL3NyYy9hdXRvZml0L2Fmd2FycC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQXV0by1maXR0ZXIgd2FycGluZyBhbGdvcml0aG0gKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2Fmd3J0c3lzLmggYi9zcmMvYXV0b2ZpdC9hZndydHN5cy5oCmluZGV4IDU2MTFjZjQuLjM5OTA2MzMgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmd3J0c3lzLmgKKysrIGIvc3JjL2F1dG9maXQvYWZ3cnRzeXMuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEF1dG8tZml0dGVyIHdyaXRpbmcgc3lzdGVtcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hdXRvZml0LmMgYi9zcmMvYXV0b2ZpdC9hdXRvZml0LmMKaW5kZXggZmFjZmVjMS4uZWY1ZTdmMSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYXV0b2ZpdC5jCisrKyBiL3NyYy9hdXRvZml0L2F1dG9maXQuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEF1dG8tZml0dGVyIG1vZHVsZSAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTcsNyArMTcsNiBAQAogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAKICNpbmNsdWRlICJhZmFuZ2xlcy5jIgogI2luY2x1ZGUgImFmYmx1ZS5jIgpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvbW9kdWxlLm1rIGIvc3JjL2F1dG9maXQvbW9kdWxlLm1rCmluZGV4IGNmNzdiMTYuLmMzMjc4MWYgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L21vZHVsZS5taworKysgYi9zcmMvYXV0b2ZpdC9tb2R1bGUubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9ydWxlcy5tayBiL3NyYy9hdXRvZml0L3J1bGVzLm1rCmluZGV4IGM1OWRhMzMuLjU1M2RkY2UgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L3J1bGVzLm1rCisrKyBiL3NyYy9hdXRvZml0L3J1bGVzLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvSmFtZmlsZSBiL3NyYy9iYXNlL0phbWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMWVjNDIuLjAwMDAwMDAKLS0tIGEvc3JjL2Jhc2UvSmFtZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLSMgRnJlZVR5cGUgMiBzcmMvYmFzZSBKYW1maWxlCi0jCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IGJ5Ci0jIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKLSMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAotIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQotIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAotIyBmdWxseS4KLQotU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIGJhc2UgOwotCi0KLXsKLSAgbG9jYWwgIF9zb3VyY2VzIDsKLQotICBpZiAkKEZUMl9NVUxUSSkKLSAgewotICAgIF9zb3VyY2VzID0gYmFzZXBpYwotICAgICAgICAgICAgICAgZnRhZHZhbmMKLSAgICAgICAgICAgICAgIGZ0Y2FsYwotICAgICAgICAgICAgICAgZnRjb2xvcgotICAgICAgICAgICAgICAgZnRkYmdtZW0KLSAgICAgICAgICAgICAgIGZ0ZXJyb3JzCi0gICAgICAgICAgICAgICBmdGZudGZtdAotICAgICAgICAgICAgICAgZnRnbG9hZHIKLSAgICAgICAgICAgICAgIGZ0aGFzaAotICAgICAgICAgICAgICAgZnRsY2RmaWwKLSAgICAgICAgICAgICAgIGZ0b2JqcwotICAgICAgICAgICAgICAgZnRvdXRsbgotICAgICAgICAgICAgICAgZnRwaWMKLSAgICAgICAgICAgICAgIGZ0cHNwcm9wCi0gICAgICAgICAgICAgICBmdHJmb3JrCi0gICAgICAgICAgICAgICBmdHNuYW1lcwotICAgICAgICAgICAgICAgZnRzdHJlYW0KLSAgICAgICAgICAgICAgIGZ0dHJpZ29uCi0gICAgICAgICAgICAgICBmdHV0aWwKLSAgICAgICAgICAgICAgIDsKLSAgfQotICBlbHNlCi0gIHsKLSAgICBfc291cmNlcyA9IGZ0YmFzZSA7Ci0gIH0KLQotICBMaWJyYXJ5ICAkKEZUMl9MSUIpIDogJChfc291cmNlcykuYyA7Ci19Ci0KLSMgQWRkIHRoZSBvcHRpb25hbC9yZXBsYWNlYWJsZSBmaWxlcy4KLSMKLXsKLSAgbG9jYWwgIF9zb3VyY2VzID0gZnRiYm94Ci0gICAgICAgICAgICAgICAgICAgIGZ0YmRmCi0gICAgICAgICAgICAgICAgICAgIGZ0Yml0bWFwCi0gICAgICAgICAgICAgICAgICAgIGZ0Y2lkCi0gICAgICAgICAgICAgICAgICAgIGZ0ZGVidWcKLSAgICAgICAgICAgICAgICAgICAgZnRmc3R5cGUKLSAgICAgICAgICAgICAgICAgICAgZnRnYXNwCi0gICAgICAgICAgICAgICAgICAgIGZ0Z2x5cGgKLSAgICAgICAgICAgICAgICAgICAgZnRneHZhbAotICAgICAgICAgICAgICAgICAgICBmdGluaXQKLSAgICAgICAgICAgICAgICAgICAgZnRtbQotICAgICAgICAgICAgICAgICAgICBmdG90dmFsCi0gICAgICAgICAgICAgICAgICAgIGZ0cGF0ZW50Ci0gICAgICAgICAgICAgICAgICAgIGZ0cGZyCi0gICAgICAgICAgICAgICAgICAgIGZ0c3Ryb2tlCi0gICAgICAgICAgICAgICAgICAgIGZ0c3ludGgKLSAgICAgICAgICAgICAgICAgICAgZnRzeXN0ZW0KLSAgICAgICAgICAgICAgICAgICAgZnR0eXBlMQotICAgICAgICAgICAgICAgICAgICBmdHdpbmZudAotICAgICAgICAgICAgICAgICAgICA7Ci0KLSAgTGlicmFyeSAgJChGVDJfTElCKSA6ICQoX3NvdXJjZXMpLmMgOwotfQotCi0jIEFkZCBNYWNpbnRvc2gtc3BlY2lmaWMgZmlsZSB0byB0aGUgbGlicmFyeSB3aGVuIG5lY2Vzc2FyeS4KLSMKLWlmICQoTUFDKQotewotICBMaWJyYXJ5ICAkKEZUMl9MSUIpIDogZnRtYWMuYyA7Ci19Ci1lbHNlIGlmICQoT1MpID0gTUFDT1NYCi17Ci0gIGlmICQoRlQyX01VTFRJKQotICB7Ci0gICAgTGlicmFyeSAgJChGVDJfTElCKSA6IGZ0bWFjLmMgOwotICB9Ci19Ci0KLSMgZW5kIG9mIHNyYy9iYXNlIEphbWZpbGUKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0YWR2YW5jLmMgYi9zcmMvYmFzZS9mdGFkdmFuYy5jCmluZGV4IDBkZmJhNTcuLmM2ODllNmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0YWR2YW5jLmMKKysrIGIvc3JjL2Jhc2UvZnRhZHZhbmMuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFF1aWNrIGNvbXB1dGF0aW9uIG9mIGFkdmFuY2Ugd2lkdGhzIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxMSArMTYsMTAgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAotI2luY2x1ZGUgRlRfQURWQU5DRVNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRhZHZhbmMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KIAogCiAgIHN0YXRpYyBGVF9FcnJvcgpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRiYXNlLmMgYi9zcmMvYmFzZS9mdGJhc2UuYwppbmRleCBmYjhjYmZjLi5iZmJhZmZkIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGJhc2UuYworKysgYi9zcmMvYmFzZS9mdGJhc2UuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFNpbmdsZSBvYmplY3QgbGlicmFyeSBjb21wb25lbnQgKGJvZHkgb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsNyArMTYsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjZGVmaW5lICBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCiAKICNpbmNsdWRlICJmdGFkdmFuYy5jIgpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRiYXNlLmggYi9zcmMvYmFzZS9mdGJhc2UuaAppbmRleCAzNWIxYzQ3Li4yNWFmYTliIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGJhc2UuaAorKysgYi9zcmMvYmFzZS9mdGJhc2UuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFByaXZhdGUgZnVuY3Rpb25zIHVzZWQgaW4gdGhlIGBiYXNlJyBtb2R1bGUgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgV2VybmVyIExlbWJlcmcsIGFuZCBzdXp1a2kgdG9zaGl5YS4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCwxMyArMjAsMTYgQEAKICNkZWZpbmUgRlRCQVNFX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKIAogCisgIEZUX0RFQ0xBUkVfR0xZUEgoIGZ0X2JpdG1hcF9nbHlwaF9jbGFzcyApCisgIEZUX0RFQ0xBUkVfR0xZUEgoIGZ0X291dGxpbmVfZ2x5cGhfY2xhc3MgKQorCisKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX01BQ19GT05UUwogCiAgIC8qIE1hY09TIHJlc291cmNlIGZvcmsgY2Fubm90IGV4Y2VlZCAxNk1CIGF0IGxlYXN0IGZvciBDYXJib24gY29kZTsgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0YmJveC5jIGIvc3JjL2Jhc2UvZnRiYm94LmMKaW5kZXggYTBiMmM0Ni4uMzBhNGViYSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRiYm94LmMKKysrIGIvc3JjL2Jhc2UvZnRiYm94LmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBiYm94IGNvbXB1dGF0aW9uIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQKQEAgLTI0LDE0ICsyNCwxMyBAQAogICAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CiAKLSNpbmNsdWRlIEZUX0JCT1hfSAotI2luY2x1ZGUgRlRfSU1BR0VfSAotI2luY2x1ZGUgRlRfT1VUTElORV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0YmJveC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0aW1hZ2UuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdG91dGxuLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CiAKIAogICB0eXBlZGVmIHN0cnVjdCAgVEJCb3hfUmVjXwpAQCAtMjk0LDEwICsyOTMsMTAgQEAKICAgICAgIGlmICggc2hpZnQgPiAyICkKICAgICAgICAgc2hpZnQgPSAyOwogCi0gICAgICBxMSA8PD0gIHNoaWZ0OwotICAgICAgcTIgPDw9ICBzaGlmdDsKLSAgICAgIHEzIDw8PSAgc2hpZnQ7Ci0gICAgICBxNCA8PD0gIHNoaWZ0OworICAgICAgcTEgKj0gMSA8PCBzaGlmdDsKKyAgICAgIHEyICo9IDEgPDwgc2hpZnQ7CisgICAgICBxMyAqPSAxIDw8IHNoaWZ0OworICAgICAgcTQgKj0gMSA8PCBzaGlmdDsKICAgICB9CiAgICAgZWxzZQogICAgIHsKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0YmRmLmMgYi9zcmMvYmFzZS9mdGJkZi5jCmluZGV4IGMwZmNjZDcuLmZjMzc0YzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0YmRmLmMKKysrIGIvc3JjL2Jhc2UvZnRiZGYuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIEJERi1zcGVjaWZpYyBzdHJpbmdzIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxMSArMTYsMTAgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX0JERl9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZiZGYuaD4KIAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRiZGYuaCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRiaXRtYXAuYyBiL3NyYy9iYXNlL2Z0Yml0bWFwLmMKaW5kZXggMGUwYTc2Zi4uNTg0MjEzZCAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRiaXRtYXAuYworKysgYi9zcmMvYmFzZS9mdGJpdG1hcC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGJpdG1hcHMgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDEyICsxNiwxMSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogCi0jaW5jbHVkZSBGVF9CSVRNQVBfSAotI2luY2x1ZGUgRlRfSU1BR0VfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRiaXRtYXAuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGltYWdlLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTkwOSwxMyArOTA4LDEzIEBACiAKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQogICAgIEZUX1RSQUNFNSgoICJGVF9CaXRtYXBfQmxlbmQ6XG4iCi0gICAgICAgICAgICAgICAgIiAgc291cmNlIGJpdG1hcDogKCVkLCAlZCkgLS0gKCVkLCAlZCk7ICVkIHggJWRcbiIsCisgICAgICAgICAgICAgICAgIiAgc291cmNlIGJpdG1hcDogKCVsZCwgJWxkKSAtLSAoJWxkLCAlbGQpOyAlZCB4ICVkXG4iLAogICAgICAgc291cmNlX2xseCAvIDY0LCBzb3VyY2VfbGx5IC8gNjQsCiAgICAgICBzb3VyY2VfdXJ4IC8gNjQsIHNvdXJjZV91cnkgLyA2NCwKICAgICAgIHNvdXJjZV8tPndpZHRoLCBzb3VyY2VfLT5yb3dzICkpOwogCiAgICAgaWYgKCB0YXJnZXQtPndpZHRoICYmIHRhcmdldC0+cm93cyApCi0gICAgICBGVF9UUkFDRTUoKCAiICB0YXJnZXQgYml0bWFwOiAoJWQsICVkKSAtLSAoJWQsICVkKTsgJWQgeCAlZFxuIiwKKyAgICAgIEZUX1RSQUNFNSgoICIgIHRhcmdldCBiaXRtYXA6ICglbGQsICVsZCkgLS0gKCVsZCwgJWxkKTsgJWQgeCAlZFxuIiwKICAgICAgICAgdGFyZ2V0X2xseCAvIDY0LCB0YXJnZXRfbGx5IC8gNjQsCiAgICAgICAgIHRhcmdldF91cnggLyA2NCwgdGFyZ2V0X3VyeSAvIDY0LAogICAgICAgICB0YXJnZXQtPndpZHRoLCB0YXJnZXQtPnJvd3MgKSk7CkBAIC05MjMsNyArOTIyLDcgQEAKICAgICAgIEZUX1RSQUNFNSgoICIgIHRhcmdldCBiaXRtYXA6IGVtcHR5XG4iICkpOwogCiAgICAgaWYgKCBmaW5hbF93aWR0aCAmJiBmaW5hbF9yb3dzICkKLSAgICAgIEZUX1RSQUNFNSgoICIgIGZpbmFsIGJpdG1hcDogKCVkLCAlZCkgLS0gKCVkLCAlZCk7ICVkIHggJWRcbiIsCisgICAgICBGVF9UUkFDRTUoKCAiICBmaW5hbCBiaXRtYXA6ICglbGQsICVsZCkgLS0gKCVsZCwgJWxkKTsgJWQgeCAlZFxuIiwKICAgICAgICAgZmluYWxfbGx4IC8gNjQsIGZpbmFsX2xseSAvIDY0LAogICAgICAgICBmaW5hbF91cnggLyA2NCwgZmluYWxfdXJ5IC8gNjQsCiAgICAgICAgIGZpbmFsX3dpZHRoLCBmaW5hbF9yb3dzICkpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRjYWxjLmMgYi9zcmMvYmFzZS9mdGNhbGMuYwppbmRleCAzMTVkYzQ0Li5iNTI1OGM4IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGNhbGMuYworKysgYi9zcmMvYmFzZS9mdGNhbGMuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEFyaXRobWV0aWMgY29tcHV0YXRpb25zIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0zMiwxMiArMzIsMTEgQEAKICAgICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9HTFlQSF9ICi0jaW5jbHVkZSBGVF9UUklHT05PTUVUUllfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGdseXBoLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnR0cmlnb24uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CiAKIAogI2lmZGVmIEZUX01VTEZJWF9BU1NFTUJMRVIKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Y2lkLmMgYi9zcmMvYmFzZS9mdGNpZC5jCmluZGV4IDE5MGIyM2YuLmNlOGE4NzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Y2lkLmMKKysrIGIvc3JjL2Jhc2UvZnRjaWQuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIENJRCBmb250IGluZm9ybWF0aW9uLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBieQogICogRGVyZWsgQ2xlZ2cgYW5kIE1pY2hhZWwgVG9mdGRhbC4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxMCArMTYsOSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9DSURfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX0NJRF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRjaWQuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oPgogCiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGNpZC5oICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGNvbG9yLmMgYi9zcmMvYmFzZS9mdGNvbG9yLmMKaW5kZXggOGNiMDU3YS4uYTUwZDY4MCAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRjb2xvci5jCisrKyBiL3NyYy9iYXNlL2Z0Y29sb3IuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlJ3MgZ2x5cGggY29sb3IgbWFuYWdlbWVudCAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsMTEgKzE2LDEwIEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSAotI2luY2x1ZGUgRlRfQ09MT1JfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZm50Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0Y29sb3IuaD4KIAogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9DT0xPUl9MQVlFUlMKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0ZGJnbWVtLmMgYi9zcmMvYmFzZS9mdGRiZ21lbS5jCmluZGV4IDU1Y2QyNjkuLmViMGQ2NTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0ZGJnbWVtLmMKKysrIGIvc3JjL2Jhc2UvZnRkYmdtZW0uYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIE1lbW9yeSBkZWJ1Z2dlciAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTgsMTEgKzE4LDExIEBACiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9NRU1PUllfSAotI2luY2x1ZGUgRlRfU1lTVEVNX0gKLSNpbmNsdWRlIEZUX0VSUk9SU19ICi0jaW5jbHVkZSBGVF9UWVBFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRzeXN0ZW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0dHlwZXMuaD4KIAogCiAjaWZkZWYgRlRfREVCVUdfTUVNT1JZCkBAIC02MjEsOCArNjIxLDEwIEBACiAKICAgICAgICAgaWYgKCBub2RlLT5zaXplIDwgMCApCiAgICAgICAgICAgZnRfbWVtX2RlYnVnX3BhbmljKAotICAgICAgICAgICAgImZyZWVpbmcgbWVtb3J5IGJsb2NrIGF0ICVwIG1vcmUgdGhhbiBvbmNlIGF0ICglczolbGQpXG4iCi0gICAgICAgICAgICAiYmxvY2sgYWxsb2NhdGVkIGF0ICglczolbGQpIGFuZCByZWxlYXNlZCBhdCAoJXM6JWxkKSIsCisgICAgICAgICAgICAiZnJlZWluZyBtZW1vcnkgYmxvY2sgYXQgJXAgbW9yZSB0aGFuIG9uY2VcbiIKKyAgICAgICAgICAgICIgIGF0ICglczolbGQpIVxuIgorICAgICAgICAgICAgIiAgQmxvY2sgd2FzIGFsbG9jYXRlZCBhdCAoJXM6JWxkKVxuIgorICAgICAgICAgICAgIiAgYW5kIHJlbGVhc2VkIGF0ICglczolbGQpLiIsCiAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgRlRfRklMRU5BTUUoIF9mdF9kZWJ1Z19maWxlICksIF9mdF9kZWJ1Z19saW5lbm8sCiAgICAgICAgICAgICBGVF9GSUxFTkFNRSggbm9kZS0+c291cmNlLT5maWxlX25hbWUgKSwgbm9kZS0+c291cmNlLT5saW5lX25vLApkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRkZWJ1Zy5jIGIvc3JjL2Jhc2UvZnRkZWJ1Zy5jCmluZGV4IGVjNzIzMzcuLjYyY2Y2ODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0ZGVidWcuYworKysgYi9zcmMvYmFzZS9mdGRlYnVnLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBEZWJ1Z2dpbmcgYW5kIGxvZ2dpbmcgY29tcG9uZW50IChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC00MSw5ICs0MSw4IEBACiAgICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogCiAKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9FUlJPUgpAQCAtMTI2LDcgKzEyNSw3IEBACiAKICAgc3RhdGljIGNvbnN0IGNoYXIqICBmdF90cmFjZV90b2dnbGVzW3RyYWNlX2NvdW50ICsgMV0gPQogICB7Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9UUkFDRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oPgogICAgIE5VTEwKICAgfTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRlcnJvcnMuYyBiL3NyYy9iYXNlL2Z0ZXJyb3JzLmMKaW5kZXggODRmZTU5MC4uZWJhOWU3NiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRlcnJvcnMuYworKysgYi9zcmMvYmFzZS9mdGVycm9ycy5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgQVBJIGZvciBlcnJvciBjb2RlIGhhbmRsaW5nLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBieQogICogQXJtaW4gSGFzaXR6a2EsIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiw5ICsxNiw4IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZXJyb3JzLmg+CiAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0ZXJyb3JzLmggKi8KQEAgLTM4LDcgKzM3LDcgQEAKICNkZWZpbmUgRlRfRVJST1JERUYoIGUsIHYsIHMgKSAgICBjYXNlIHY6IHJldHVybiBzOwogI2RlZmluZSBGVF9FUlJPUl9FTkRfTElTVCAgICAgICB9CiAKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KIAogI2VuZGlmIC8qIGRlZmluZWQoIEZUX0NPTkZJR19PUFRJT05fRVJST1JfU1RSSU5HUyApIHx8IC4uLiAqLwogCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGZudGZtdC5jIGIvc3JjL2Jhc2UvZnRmbnRmbXQuYwppbmRleCA1NGJhNTM3Li5hNDUzMTdlIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGZudGZtdC5jCisrKyBiL3NyYy9iYXNlL2Z0Zm50Zm10LmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSB1dGlsaXR5IGZpbGUgZm9yIGZvbnQgZm9ybWF0cyAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsMTAgKzE2LDkgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRk9OVF9GT1JNQVRTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRmbnRmbXQuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmZudGZtdC5oPgogCiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGZudGZtdC5oICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGZzdHlwZS5jIGIvc3JjL2Jhc2UvZnRmc3R5cGUuYwppbmRleCA0NWUyZDgwLi5iY2E1NDhmIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGZzdHlwZS5jCisrKyBiL3NyYy9iYXNlL2Z0ZnN0eXBlLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSB1dGlsaXR5IGZpbGUgdG8gYWNjZXNzIEZTVHlwZSBkYXRhIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNSwxMSArMTUsMTAgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9UWVBFMV9UQUJMRVNfSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFCTEVTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSAorI2luY2x1ZGUgPGZyZWV0eXBlL3QxdGFibGVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWJsZXMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzaW5mby5oPgogCiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGdhc3AuYyBiL3NyYy9iYXNlL2Z0Z2FzcC5jCmluZGV4IDcyMGZiMTEuLmVlZDA1YTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Z2FzcC5jCisrKyBiL3NyYy9iYXNlL2Z0Z2FzcC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQWNjZXNzIG9mIFRydWVUeXBlJ3MgYGdhc3AnIHRhYmxlIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiw5ICsxNiw4IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0dBU1BfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0Z2FzcC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaD4KIAogCiAgIEZUX0VYUE9SVF9ERUYoIEZUX0ludCApCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGdsb2Fkci5jIGIvc3JjL2Jhc2UvZnRnbG9hZHIuYwppbmRleCBiZmVlZDQ2Li4wNWZjNzY5IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGdsb2Fkci5jCisrKyBiL3NyYy9iYXNlL2Z0Z2xvYWRyLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUaGUgRnJlZVR5cGUgZ2x5cGggbG9hZGVyIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZwogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDExICsxNiwxMCBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9HTFlQSF9MT0FERVJfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfTUVNT1JZX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGdsb2Fkci5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CiAKICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgZ2xvYWRlcgpAQCAtOTMsNiArOTIsNyBAQAogCiAgICAgYmFzZS0+b3V0bGluZS5uX3BvaW50cyAgID0gMDsKICAgICBiYXNlLT5vdXRsaW5lLm5fY29udG91cnMgPSAwOworICAgIGJhc2UtPm91dGxpbmUuZmxhZ3MgICAgICA9IDA7CiAgICAgYmFzZS0+bnVtX3N1YmdseXBocyAgICAgID0gMDsKIAogICAgICpjdXJyZW50ID0gKmJhc2U7CkBAIC0xNDYsOSArMTQ2LDkgQEAKICAgICBGVF9PdXRsaW5lKiAgY3VycmVudCA9ICZsb2FkZXItPmN1cnJlbnQub3V0bGluZTsKIAogCi0gICAgY3VycmVudC0+cG9pbnRzICAgPSBiYXNlLT5wb2ludHMgICArIGJhc2UtPm5fcG9pbnRzOwotICAgIGN1cnJlbnQtPnRhZ3MgICAgID0gYmFzZS0+dGFncyAgICAgKyBiYXNlLT5uX3BvaW50czsKLSAgICBjdXJyZW50LT5jb250b3VycyA9IGJhc2UtPmNvbnRvdXJzICsgYmFzZS0+bl9jb250b3VyczsKKyAgICBjdXJyZW50LT5wb2ludHMgICA9IEZUX09GRlNFVCggYmFzZS0+cG9pbnRzLCAgIGJhc2UtPm5fcG9pbnRzICk7CisgICAgY3VycmVudC0+dGFncyAgICAgPSBGVF9PRkZTRVQoIGJhc2UtPnRhZ3MsICAgICBiYXNlLT5uX3BvaW50cyApOworICAgIGN1cnJlbnQtPmNvbnRvdXJzID0gRlRfT0ZGU0VUKCBiYXNlLT5jb250b3VycywgYmFzZS0+bl9jb250b3VycyApOwogCiAgICAgLyogaGFuZGxlIGV4dHJhIHBvaW50cyB0YWJsZSAtIGlmIGFueSAqLwogICAgIGlmICggbG9hZGVyLT51c2VfZXh0cmEgKQpAQCAtMTY5LDYgKzE2OSwxMCBAQAogICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbG9hZGVyLT5tZW1vcnk7CiAKIAorICAgIGlmICggbG9hZGVyLT5tYXhfcG9pbnRzID09IDAgICAgICAgICAgIHx8CisgICAgICAgICBsb2FkZXItPmJhc2UuZXh0cmFfcG9pbnRzICE9IE5VTEwgKQorICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKwogICAgIGlmICggIUZUX05FV19BUlJBWSggbG9hZGVyLT5iYXNlLmV4dHJhX3BvaW50cywgMiAqIGxvYWRlci0+bWF4X3BvaW50cyApICkKICAgICB7CiAgICAgICBsb2FkZXItPnVzZV9leHRyYSAgICAgICAgICA9IDE7CkBAIC0xODksNyArMTkzLDcgQEAKICAgICBGVF9HbHlwaExvYWQgIGN1cnJlbnQgPSAmbG9hZGVyLT5jdXJyZW50OwogCiAKLSAgICBjdXJyZW50LT5zdWJnbHlwaHMgPSBiYXNlLT5zdWJnbHlwaHMgKyBiYXNlLT5udW1fc3ViZ2x5cGhzOworICAgIGN1cnJlbnQtPnN1YmdseXBocyA9IEZUX09GRlNFVCggYmFzZS0+c3ViZ2x5cGhzLCBiYXNlLT5udW1fc3ViZ2x5cGhzICk7CiAgIH0KIAogCkBAIC0yMTEsNiArMjE1LDEwIEBACiAgICAgRlRfVUludCAgICAgIG5ld19tYXgsIG9sZF9tYXg7CiAKIAorICAgIGVycm9yID0gRlRfR2x5cGhMb2FkZXJfQ3JlYXRlRXh0cmEoIGxvYWRlciApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCiAgICAgLyogY2hlY2sgcG9pbnRzICYgdGFncyAqLwogICAgIG5ld19tYXggPSAoRlRfVUludCliYXNlLT5uX3BvaW50cyArIChGVF9VSW50KWN1cnJlbnQtPm5fcG9pbnRzICsKICAgICAgICAgICAgICAgbl9wb2ludHM7CkBAIC0yNDQsNiArMjUyLDEwIEBACiAgICAgICBsb2FkZXItPm1heF9wb2ludHMgPSBuZXdfbWF4OwogICAgIH0KIAorICAgIGVycm9yID0gRlRfR2x5cGhMb2FkZXJfQ3JlYXRlRXh0cmEoIGxvYWRlciApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCiAgICAgLyogY2hlY2sgY29udG91cnMgKi8KICAgICBvbGRfbWF4ID0gbG9hZGVyLT5tYXhfY29udG91cnM7CiAgICAgbmV3X21heCA9IChGVF9VSW50KWJhc2UtPm5fY29udG91cnMgKyAoRlRfVUludCljdXJyZW50LT5uX2NvbnRvdXJzICsKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Z2x5cGguYyBiL3NyYy9iYXNlL2Z0Z2x5cGguYwppbmRleCBlNmIxMzI3Li44MjVlYmEyIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGdseXBoLmMKKysrIGIvc3JjL2Jhc2UvZnRnbHlwaC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGhhbmRsZSBnbHlwaHMgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTI4LDEzICsyOCwxNCBAQAogICAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CiAKLSNpbmNsdWRlIEZUX0dMWVBIX0gKLSNpbmNsdWRlIEZUX09VVExJTkVfSAotI2luY2x1ZGUgRlRfQklUTUFQX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0Z2x5cGguaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdG91dGxuLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRiaXRtYXAuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKworI2luY2x1ZGUgImZ0YmFzZS5oIgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGd4dmFsLmMgYi9zcmMvYmFzZS9mdGd4dmFsLmMKaW5kZXggMDY3N2QyNi4uZjA0ZGYxNCAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRneHZhbC5jCisrKyBiL3NyYy9iYXNlL2Z0Z3h2YWwuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBUcnVlVHlwZUdYL0FBVCB0YWJsZXMgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogTWFzYXRha2UgWUFNQVRPLCBSZWRoYXQgSy5LLAogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKQEAgLTI1LDExICsyNSwxMCBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfR1hfVkFMSURBVEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaD4KIAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRneHZhbC5oICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGhhc2guYyBiL3NyYy9iYXNlL2Z0aGFzaC5jCmluZGV4IDM4N2U2ZDIuLjQ0OWIwM2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0aGFzaC5jCisrKyBiL3NyYy9iYXNlL2Z0aGFzaC5jCkBAIC0zOSw5ICszOSw4IEBACiAgICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfSEFTSF9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9NRU1PUllfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0aGFzaC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5Lmg+CiAKIAogI2RlZmluZSBJTklUSUFMX0hUX1NJWkUgIDI0MQpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRpbml0LmMgYi9zcmMvYmFzZS9mdGluaXQuYwppbmRleCBjNzNjZDc4Li4wYWNjNzVlIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGluaXQuYworKysgYi9zcmMvYmFzZS9mdGluaXQuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIGluaXRpYWxpemF0aW9uIGxheWVyIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0zOSw5ICszOSw5IEBACiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX01PRFVMRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kYXBpLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0bGNkZmlsLmMgYi9zcmMvYmFzZS9mdGxjZGZpbC5jCmluZGV4IGQ5ZjRhZjQuLjFlODRkYmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0bGNkZmlsLmMKKysrIGIvc3JjL2Jhc2UvZnRsY2RmaWwuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIEFQSSBmb3IgY29sb3IgZmlsdGVyaW5nIG9mIHN1YnBpeGVsIGJpdG1hcCBnbHlwaHMgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDEyICsxNiwxMSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogCi0jaW5jbHVkZSBGVF9MQ0RfRklMVEVSX0gKLSNpbmNsdWRlIEZUX0lNQUdFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bGNkZmlsLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRpbWFnZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgogCiAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRtYWMuYyBiL3NyYy9iYXNlL2Z0bWFjLmMKaW5kZXggNWYyM2NlZS4uNTVhNjMxZiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRtYWMuYworKysgYi9zcmMvYmFzZS9mdG1hYy5jCkBAIC04LDcgKzgsNyBAQAogICogVGhpcyBmaWxlIGlzIGZvciBNYWMgT1MgWCBvbmx5OyBzZWUgYnVpbGRzL21hYy9mdG9sZG1hYy5jIGZvcgogICogY2xhc3NpYyBwbGF0Zm9ybXMgYnVpbHQgYnkgTVBXLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogSnVzdCB2YW4gUm9zc3VtLCBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtNjUsMTAgKzY1LDkgQEAKICAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBR1NfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL3R0dGFncy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CiAjaW5jbHVkZSAiZnRiYXNlLmgiCiAKIApkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRtbS5jIGIvc3JjL2Jhc2UvZnRtbS5jCmluZGV4IGJhOWU2N2YuLjlhNzAyYjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0bW0uYworKysgYi9zcmMvYmFzZS9mdG1tLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBNdWx0aXBsZSBNYXN0ZXIgZm9udCBzdXBwb3J0IChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxMyArMTYsMTIgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAotI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX01FVFJJQ1NfVkFSSUFUSU9OU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRtbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1ldHJpYy5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdG9ianMuYyBiL3NyYy9iYXNlL2Z0b2Jqcy5jCmluZGV4IGUzMDFmOGYuLmMwNjBiYmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0b2Jqcy5jCisrKyBiL3NyYy9iYXNlL2Z0b2Jqcy5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVGhlIEZyZWVUeXBlIHByaXZhdGUgYmFzZSBjbGFzc2VzIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwzMiArMTYsMzEgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfTElTVF9ICi0jaW5jbHVkZSBGVF9PVVRMSU5FX0gKLSNpbmNsdWRlIEZUX0ZPTlRfRk9STUFUU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRsaXN0Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRvdXRsbi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0Zm50Zm10Lmg+CiAKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1ZBTElEQVRFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfUkZPUktfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSCAgICAgICAgICAgIC8qIGZvciBTRk5UX0xvYWRfVGFibGVfRnVuYyAqLwotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSCAgLyogZm9yIFBTX0RyaXZlciAgICAgICAgICAgICovCisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnR2YWxpZC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZm50Lmg+ICAgICAgICAgIC8qIGZvciBTRk5UX0xvYWRfVGFibGVfRnVuYyAqLworI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3BzYXV4Lmg+ICAgICAgICAgLyogZm9yIFBTX0RyaXZlciAgICAgICAgICAgICovCiAKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX0lEU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWJsZXMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90dHRhZ3MuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90dG5hbWVpZC5oPgogCi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9TRk5UX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1RUX0NNQVBfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9LRVJOSU5HX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfVFJVRVRZUEVfRU5HSU5FX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBvc3RubS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmtlcm4uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmg+CiAKLSNpbmNsdWRlIEZUX0RSSVZFUl9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRkcml2ZXIuaD4KIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fTUFDX0ZPTlRTCiAjaW5jbHVkZSAiZnRiYXNlLmgiCkBAIC01MCw3ICs0OSw3IEBACiAKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQogCi0jaW5jbHVkZSBGVF9CSVRNQVBfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0Yml0bWFwLmg+CiAKICNpZiBkZWZpbmVkKCBfTVNDX1ZFUiApICAgICAgLyogVmlzdWFsIEMrKyAoYW5kIEludGVsIEMrKykgICAqLwogICAvKiBXZSBkaXNhYmxlIHRoZSB3YXJuaW5nIGBjb252ZXJzaW9uIGZyb20gWFhYIHRvIFlZWSwgICAgICovCkBAIC0xMDYzLDExICsxMDYyLDMwIEBACiAgICAgICAgICAgICAgICAgc2xvdC0+bGluZWFySG9yaUFkdmFuY2UgLyA2NTUzNi4wICkpOwogICAgIEZUX1RSQUNFNSgoICIgIGxpbmVhciB5IGFkdmFuY2U6ICVmXG4iLAogICAgICAgICAgICAgICAgIHNsb3QtPmxpbmVhclZlcnRBZHZhbmNlIC8gNjU1MzYuMCApKTsKKyAgICBGVF9UUkFDRTUoKCAiXG4iICkpOwogICAgIEZUX1RSQUNFNSgoICIgIGJpdG1hcCAlZHglZCwgJXMgKG1vZGUgJWQpXG4iLAogICAgICAgICAgICAgICAgIHNsb3QtPmJpdG1hcC53aWR0aCwKICAgICAgICAgICAgICAgICBzbG90LT5iaXRtYXAucm93cywKICAgICAgICAgICAgICAgICBwaXhlbF9tb2Rlc1tzbG90LT5iaXRtYXAucGl4ZWxfbW9kZV0sCiAgICAgICAgICAgICAgICAgc2xvdC0+Yml0bWFwLnBpeGVsX21vZGUgKSk7CisgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKKworICAgIHsKKyAgICAgIEZUX0dseXBoX01ldHJpY3MqICBtZXRyaWNzID0gJnNsb3QtPm1ldHJpY3M7CisKKworICAgICAgRlRfVFJBQ0U1KCggIiAgbWV0cmljczpcbiIgKSk7CisgICAgICBGVF9UUkFDRTUoKCAiICAgIHdpZHRoOiAgJWZcbiIsIG1ldHJpY3MtPndpZHRoICAvIDY0LjAgKSk7CisgICAgICBGVF9UUkFDRTUoKCAiICAgIGhlaWdodDogJWZcbiIsIG1ldHJpY3MtPmhlaWdodCAvIDY0LjAgKSk7CisgICAgICBGVF9UUkFDRTUoKCAiXG4iICkpOworICAgICAgRlRfVFJBQ0U1KCggIiAgICBob3JpQmVhcmluZ1g6ICVmXG4iLCBtZXRyaWNzLT5ob3JpQmVhcmluZ1ggLyA2NC4wICkpOworICAgICAgRlRfVFJBQ0U1KCggIiAgICBob3JpQmVhcmluZ1k6ICVmXG4iLCBtZXRyaWNzLT5ob3JpQmVhcmluZ1kgLyA2NC4wICkpOworICAgICAgRlRfVFJBQ0U1KCggIiAgICBob3JpQWR2YW5jZTogICVmXG4iLCBtZXRyaWNzLT5ob3JpQWR2YW5jZSAgLyA2NC4wICkpOworICAgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKKyAgICAgIEZUX1RSQUNFNSgoICIgICAgdmVydEJlYXJpbmdYOiAlZlxuIiwgbWV0cmljcy0+dmVydEJlYXJpbmdYIC8gNjQuMCApKTsKKyAgICAgIEZUX1RSQUNFNSgoICIgICAgdmVydEJlYXJpbmdZOiAlZlxuIiwgbWV0cmljcy0+dmVydEJlYXJpbmdZIC8gNjQuMCApKTsKKyAgICAgIEZUX1RSQUNFNSgoICIgICAgdmVydEFkdmFuY2U6ICAlZlxuIiwgbWV0cmljcy0+dmVydEFkdmFuY2UgIC8gNjQuMCApKTsKKyAgICB9CiAjZW5kaWYKIAogICBFeGl0OgpAQCAtMTg0MiwxNSArMTg2MCwxNSBAQAogICAgICAgLyogRlQyIGFsbG9jYXRvciB0YWtlcyBzaWduZWQgbG9uZyBidWZmZXIgbGVuZ3RoLAogICAgICAgICogdG9vIGxhcmdlIHZhbHVlIGNhdXNpbmcgb3ZlcmZsb3cgc2hvdWxkIGJlIGNoZWNrZWQKICAgICAgICAqLwotICAgICAgRlRfVFJBQ0U0KCggIiAgICAgICAgICAgICAgICAgUE9TVCBmcmFnbWVudCAjJWQ6IGxlbmd0aD0weCUwOHgiCi0gICAgICAgICAgICAgICAgICAiIHRvdGFsIHBmYl9sZW49MHglMDh4XG4iLAorICAgICAgRlRfVFJBQ0U0KCggIiAgICAgICAgICAgICAgICAgUE9TVCBmcmFnbWVudCAjJWQ6IGxlbmd0aD0weCUwOGx4IgorICAgICAgICAgICAgICAgICAgIiB0b3RhbCBwZmJfbGVuPTB4JTA4bHhcbiIsCiAgICAgICAgICAgICAgICAgICBpLCB0ZW1wLCBwZmJfbGVuICsgdGVtcCArIDYgKSk7CiAKICAgICAgIGlmICggRlRfTUFDX1JGT1JLX01BWF9MRU4gPCB0ZW1wICAgICAgICAgICAgICAgfHwKICAgICAgICAgICAgRlRfTUFDX1JGT1JLX01BWF9MRU4gLSB0ZW1wIDwgcGZiX2xlbiArIDYgKQogICAgICAgewogICAgICAgICBGVF9UUkFDRTIoKCAiICAgICAgICAgICAgIE1hY09TIHJlc291cmNlIGxlbmd0aCBjYW5ub3QgZXhjZWVkIgotICAgICAgICAgICAgICAgICAgICAiIDB4JTA4eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgIiAweCUwOGx4XG4iLAogICAgICAgICAgICAgICAgICAgICBGVF9NQUNfUkZPUktfTUFYX0xFTiApKTsKIAogICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX09mZnNldCApOwpAQCAtMTg2MSwxMyArMTg3OSwxMyBAQAogICAgIH0KIAogICAgIEZUX1RSQUNFMigoICIgICAgICAgICAgICAgdG90YWwgYnVmZmVyIHNpemUgdG8gY29uY2F0ZW5hdGUiCi0gICAgICAgICAgICAgICAgIiAlZCBQT1NUIGZyYWdtZW50czogMHglMDh4XG4iLAorICAgICAgICAgICAgICAgICIgJWxkIFBPU1QgZnJhZ21lbnRzOiAweCUwOGx4XG4iLAogICAgICAgICAgICAgICAgICByZXNvdXJjZV9jbnQsIHBmYl9sZW4gKyAyICkpOwogCiAgICAgaWYgKCBwZmJfbGVuICsgMiA8IDYgKQogICAgIHsKICAgICAgIEZUX1RSQUNFMigoICIgICAgICAgICAgICAgdG9vIGxvbmcgZnJhZ21lbnQgbGVuZ3RoIG1ha2VzIgotICAgICAgICAgICAgICAgICAgIiBwZmJfbGVuIGNvbmZ1c2VkOiBwZmJfbGVuPTB4JTA4eFxuIiwKKyAgICAgICAgICAgICAgICAgICIgcGZiX2xlbiBjb25mdXNlZDogcGZiX2xlbj0weCUwOGx4XG4iLAogICAgICAgICAgICAgICAgICAgcGZiX2xlbiApKTsKIAogICAgICAgZXJyb3IgPSBGVF9USFJPVyggQXJyYXlfVG9vX0xhcmdlICk7CkBAIC0xOTEwLDcgKzE5MjgsNyBAQAogICAgICAgICBnb3RvIEV4aXQyOwogCiAgICAgICBGVF9UUkFDRTMoKCAiUE9TVCBmcmFnbWVudFslZF06IgotICAgICAgICAgICAgICAgICAgIiBvZmZzZXRzPTB4JTA4eCwgcmxlbj0weCUwOHgsIGZsYWdzPTB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICIgb2Zmc2V0cz0weCUwOGx4LCBybGVuPTB4JTA4bHgsIGZsYWdzPTB4JTA0eFxuIiwKICAgICAgICAgICAgICAgICAgIGksIG9mZnNldHNbaV0sIHJsZW4sIGZsYWdzICkpOwogCiAgICAgICBlcnJvciA9IEZUX0VSUiggQXJyYXlfVG9vX0xhcmdlICk7CkBAIC0xOTM3LDcgKzE5NTUsNyBAQAogICAgICAgZWxzZQogICAgICAgewogICAgICAgICBGVF9UUkFDRTMoKCAiICAgIFdyaXRlIFBPU1QgZnJhZ21lbnQgIyVkIGhlYWRlciAoNC1ieXRlKSB0byBidWZmZXIiCi0gICAgICAgICAgICAgICAgICAgICIgJXAgKyAweCUwOHhcbiIsCisgICAgICAgICAgICAgICAgICAgICIgJXAgKyAweCUwOGx4XG4iLAogICAgICAgICAgICAgICAgICAgICBpLCBwZmJfZGF0YSwgcGZiX2xlbnBvcyApKTsKIAogICAgICAgICBpZiAoIHBmYl9sZW5wb3MgKyAzID4gcGZiX2xlbiArIDIgKQpAQCAtMTk1Miw3ICsxOTcwLDcgQEAKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBGVF9UUkFDRTMoKCAiICAgIFdyaXRlIFBPU1QgZnJhZ21lbnQgIyVkIGhlYWRlciAoNi1ieXRlKSB0byBidWZmZXIiCi0gICAgICAgICAgICAgICAgICAgICIgJXAgKyAweCUwOHhcbiIsCisgICAgICAgICAgICAgICAgICAgICIgJXAgKyAweCUwOGx4XG4iLAogICAgICAgICAgICAgICAgICAgICBpLCBwZmJfZGF0YSwgcGZiX3BvcyApKTsKIAogICAgICAgICBpZiAoIHBmYl9wb3MgKyA2ID4gcGZiX2xlbiArIDIgKQpAQCAtMTk3NCw4ICsxOTkyLDggQEAKICAgICAgIGlmICggcGZiX3BvcyA+IHBmYl9sZW4gfHwgcGZiX3BvcyArIHJsZW4gPiBwZmJfbGVuICkKICAgICAgICAgZ290byBFeGl0MjsKIAotICAgICAgRlRfVFJBQ0UzKCggIiAgICBMb2FkIFBPU1QgZnJhZ21lbnQgIyVkICglZCBieXRlKSB0byBidWZmZXIiCi0gICAgICAgICAgICAgICAgICAiICVwICsgMHglMDh4XG4iLAorICAgICAgRlRfVFJBQ0UzKCggIiAgICBMb2FkIFBPU1QgZnJhZ21lbnQgIyVkICglbGQgYnl0ZSkgdG8gYnVmZmVyIgorICAgICAgICAgICAgICAgICAgIiAlcCArIDB4JTA4bHhcbiIsCiAgICAgICAgICAgICAgICAgICBpLCBybGVuLCBwZmJfZGF0YSwgcGZiX3BvcyApKTsKIAogICAgICAgZXJyb3IgPSBGVF9TdHJlYW1fUmVhZCggc3RyZWFtLCAoRlRfQnl0ZSAqKXBmYl9kYXRhICsgcGZiX3BvcywgcmxlbiApOwpAQCAtMjI2MCw3ICsyMjc4LDcgQEAKICAgICAgIGFyZ3MyLmZsYWdzICAgID0gRlRfT1BFTl9QQVRITkFNRTsKICAgICAgIGFyZ3MyLnBhdGhuYW1lID0gZmlsZV9uYW1lc1tpXSA/IGZpbGVfbmFtZXNbaV0gOiBhcmdzLT5wYXRobmFtZTsKIAotICAgICAgRlRfVFJBQ0UzKCggIlRyeSBydWxlICVkOiAlcyAob2Zmc2V0PSVkKSAuLi4iLAorICAgICAgRlRfVFJBQ0UzKCggIlRyeSBydWxlICVkOiAlcyAob2Zmc2V0PSVsZCkgLi4uIiwKICAgICAgICAgICAgICAgICAgIGksIGFyZ3MyLnBhdGhuYW1lLCBvZmZzZXRzW2ldICkpOwogCiAgICAgICBlcnJvciA9IEZUX1N0cmVhbV9OZXcoIGxpYnJhcnksICZhcmdzMiwgJnN0cmVhbTIgKTsKQEAgLTI4NTgsNiArMjg3Niw4IEBACiAgICAgaWYgKCBlcnJvciApCiAgICAgewogICAgICAgRlRfRlJFRSggbm9kZSApOworICAgICAgaWYgKCBzaXplICkKKyAgICAgICAgRlRfRlJFRSggc2l6ZS0+aW50ZXJuYWwgKTsKICAgICAgIEZUX0ZSRUUoIHNpemUgKTsKICAgICB9CiAKQEAgLTMyMTMsOSArMzIzMyw5IEBACiAgICAgICBGVF9TaXplX01ldHJpY3MqICBtZXRyaWNzID0gJmZhY2UtPnNpemUtPm1ldHJpY3M7CiAKIAotICAgICAgRlRfVFJBQ0U1KCggIiAgeCBzY2FsZTogJWQgKCVmKVxuIiwKKyAgICAgIEZUX1RSQUNFNSgoICIgIHggc2NhbGU6ICVsZCAoJWYpXG4iLAogICAgICAgICAgICAgICAgICAgbWV0cmljcy0+eF9zY2FsZSwgbWV0cmljcy0+eF9zY2FsZSAvIDY1NTM2LjAgKSk7Ci0gICAgICBGVF9UUkFDRTUoKCAiICB5IHNjYWxlOiAlZCAoJWYpXG4iLAorICAgICAgRlRfVFJBQ0U1KCggIiAgeSBzY2FsZTogJWxkICglZilcbiIsCiAgICAgICAgICAgICAgICAgICBtZXRyaWNzLT55X3NjYWxlLCBtZXRyaWNzLT55X3NjYWxlIC8gNjU1MzYuMCApKTsKICAgICAgIEZUX1RSQUNFNSgoICIgIGFzY2VuZGVyOiAlZlxuIiwgICAgbWV0cmljcy0+YXNjZW5kZXIgLyA2NC4wICkpOwogICAgICAgRlRfVFJBQ0U1KCggIiAgZGVzY2VuZGVyOiAlZlxuIiwgICBtZXRyaWNzLT5kZXNjZW5kZXIgLyA2NC4wICkpOwpAQCAtMzI4OCw5ICszMzA4LDkgQEAKICAgICAgIEZUX1NpemVfTWV0cmljcyogIG1ldHJpY3MgPSAmZmFjZS0+c2l6ZS0+bWV0cmljczsKIAogCi0gICAgICBGVF9UUkFDRTUoKCAiICB4IHNjYWxlOiAlZCAoJWYpXG4iLAorICAgICAgRlRfVFJBQ0U1KCggIiAgeCBzY2FsZTogJWxkICglZilcbiIsCiAgICAgICAgICAgICAgICAgICBtZXRyaWNzLT54X3NjYWxlLCBtZXRyaWNzLT54X3NjYWxlIC8gNjU1MzYuMCApKTsKLSAgICAgIEZUX1RSQUNFNSgoICIgIHkgc2NhbGU6ICVkICglZilcbiIsCisgICAgICBGVF9UUkFDRTUoKCAiICB5IHNjYWxlOiAlbGQgKCVmKVxuIiwKICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnlfc2NhbGUsIG1ldHJpY3MtPnlfc2NhbGUgLyA2NTUzNi4wICkpOwogICAgICAgRlRfVFJBQ0U1KCggIiAgYXNjZW5kZXI6ICVmXG4iLCAgICBtZXRyaWNzLT5hc2NlbmRlciAvIDY0LjAgKSk7CiAgICAgICBGVF9UUkFDRTUoKCAiICBkZXNjZW5kZXI6ICVmXG4iLCAgIG1ldHJpY3MtPmRlc2NlbmRlciAvIDY0LjAgKSk7CkBAIC0zNDUwLDcgKzM0NzAsNyBAQAogICAgICAgICAgICAgICBpZiAoIGFrZXJuaW5nLT54ICE9IG9yaWdfeF9yb3VuZGVkIHx8CiAgICAgICAgICAgICAgICAgICAgYWtlcm5pbmctPnkgIT0gb3JpZ195X3JvdW5kZWQgKQogICAgICAgICAgICAgICAgIEZUX1RSQUNFNSgoICJGVF9HZXRfS2VybmluZzogaG9yaXpvbnRhbCBrZXJuaW5nIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKCVkLCAlZCkgc2NhbGVkIGRvd24gdG8gKCVkLCAlZCkgcGl4ZWxzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKCVsZCwgJWxkKSBzY2FsZWQgZG93biB0byAoJWxkLCAlbGQpIHBpeGVsc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX3hfcm91bmRlZCAvIDY0LCBvcmlnX3lfcm91bmRlZCAvIDY0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFrZXJuaW5nLT54IC8gNjQsIGFrZXJuaW5nLT55IC8gNjQgKSk7CiAgICAgICAgICAgICB9CkBAIC0zNzIyLDcgKzM3NDIsNyBAQAogICAgICAgaWYgKCBjaGFyY29kZSA+IDB4RkZGRkZGRkZVTCApCiAgICAgICB7CiAgICAgICAgIEZUX1RSQUNFMSgoICJGVF9HZXRfQ2hhcl9JbmRleDogdG9vIGxhcmdlIGNoYXJjb2RlIiApKTsKLSAgICAgICAgRlRfVFJBQ0UxKCggIiAweCV4IGlzIHRydW5jYXRlZFxuIiwgY2hhcmNvZGUgKSk7CisgICAgICAgIEZUX1RSQUNFMSgoICIgMHglbHggaXMgdHJ1bmNhdGVkXG4iLCBjaGFyY29kZSApKTsKICAgICAgIH0KIAogICAgICAgcmVzdWx0ID0gY21hcC0+Y2xhenotPmNoYXJfaW5kZXgoIGNtYXAsIChGVF9VSW50MzIpY2hhcmNvZGUgKTsKQEAgLTM4OTgsMTMgKzM5MTgsMTMgQEAKICAgICAgICAgewogICAgICAgICAgIEZUX1RSQUNFMSgoICJGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXg6IgogICAgICAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIGNoYXJjb2RlIiApKTsKLSAgICAgICAgICBGVF9UUkFDRTEoKCAiIDB4JXggaXMgdHJ1bmNhdGVkXG4iLCBjaGFyY29kZSApKTsKKyAgICAgICAgICBGVF9UUkFDRTEoKCAiIDB4JWx4IGlzIHRydW5jYXRlZFxuIiwgY2hhcmNvZGUgKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCB2YXJpYW50U2VsZWN0b3IgPiAweEZGRkZGRkZGVUwgKQogICAgICAgICB7CiAgICAgICAgICAgRlRfVFJBQ0UxKCggIkZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJbmRleDoiCiAgICAgICAgICAgICAgICAgICAgICAgIiB0b28gbGFyZ2UgdmFyaWFudFNlbGVjdG9yIiApKTsKLSAgICAgICAgICBGVF9UUkFDRTEoKCAiIDB4JXggaXMgdHJ1bmNhdGVkXG4iLCB2YXJpYW50U2VsZWN0b3IgKSk7CisgICAgICAgICAgRlRfVFJBQ0UxKCggIiAweCVseCBpcyB0cnVuY2F0ZWRcbiIsIHZhcmlhbnRTZWxlY3RvciApKTsKICAgICAgICAgfQogCiAgICAgICAgIHJlc3VsdCA9IHZjbWFwLT5jbGF6ei0+Y2hhcl92YXJfaW5kZXgoIHZjbWFwLCB1Y21hcCwKQEAgLTM5NDEsMTMgKzM5NjEsMTMgQEAKICAgICAgICAgewogICAgICAgICAgIEZUX1RSQUNFMSgoICJGVF9GYWNlX0dldENoYXJWYXJpYW50SXNEZWZhdWx0OiIKICAgICAgICAgICAgICAgICAgICAgICAiIHRvbyBsYXJnZSBjaGFyY29kZSIgKSk7Ci0gICAgICAgICAgRlRfVFJBQ0UxKCggIiAweCV4IGlzIHRydW5jYXRlZFxuIiwgY2hhcmNvZGUgKSk7CisgICAgICAgICAgRlRfVFJBQ0UxKCggIiAweCVseCBpcyB0cnVuY2F0ZWRcbiIsIGNoYXJjb2RlICkpOwogICAgICAgICB9CiAgICAgICAgIGlmICggdmFyaWFudFNlbGVjdG9yID4gMHhGRkZGRkZGRlVMICkKICAgICAgICAgewogICAgICAgICAgIEZUX1RSQUNFMSgoICJGVF9GYWNlX0dldENoYXJWYXJpYW50SXNEZWZhdWx0OiIKICAgICAgICAgICAgICAgICAgICAgICAiIHRvbyBsYXJnZSB2YXJpYW50U2VsZWN0b3IiICkpOwotICAgICAgICAgIEZUX1RSQUNFMSgoICIgMHgleCBpcyB0cnVuY2F0ZWRcbiIsIHZhcmlhbnRTZWxlY3RvciApKTsKKyAgICAgICAgICBGVF9UUkFDRTEoKCAiIDB4JWx4IGlzIHRydW5jYXRlZFxuIiwgdmFyaWFudFNlbGVjdG9yICkpOwogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0ID0gdmNtYXAtPmNsYXp6LT5jaGFyX3Zhcl9kZWZhdWx0KCB2Y21hcCwKQEAgLTQwMTAsNyArNDAzMCw3IEBACiAgICAgICAgIGlmICggY2hhcmNvZGUgPiAweEZGRkZGRkZGVUwgKQogICAgICAgICB7CiAgICAgICAgICAgRlRfVFJBQ0UxKCggIkZUX0ZhY2VfR2V0VmFyaWFudHNPZkNoYXI6IHRvbyBsYXJnZSBjaGFyY29kZSIgKSk7Ci0gICAgICAgICAgRlRfVFJBQ0UxKCggIiAweCV4IGlzIHRydW5jYXRlZFxuIiwgY2hhcmNvZGUgKSk7CisgICAgICAgICAgRlRfVFJBQ0UxKCggIiAweCVseCBpcyB0cnVuY2F0ZWRcbiIsIGNoYXJjb2RlICkpOwogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0ID0gdmNtYXAtPmNsYXp6LT5jaGFydmFyaWFudF9saXN0KCB2Y21hcCwgbWVtb3J5LApAQCAtNDA0NCw3ICs0MDY0LDcgQEAKICAgICAgICAgaWYgKCB2YXJpYW50U2VsZWN0b3IgPiAweEZGRkZGRkZGVUwgKQogICAgICAgICB7CiAgICAgICAgICAgRlRfVFJBQ0UxKCggIkZUX0dldF9DaGFyX0luZGV4OiB0b28gbGFyZ2UgdmFyaWFudFNlbGVjdG9yIiApKTsKLSAgICAgICAgICBGVF9UUkFDRTEoKCAiIDB4JXggaXMgdHJ1bmNhdGVkXG4iLCB2YXJpYW50U2VsZWN0b3IgKSk7CisgICAgICAgICAgRlRfVFJBQ0UxKCggIiAweCVseCBpcyB0cnVuY2F0ZWRcbiIsIHZhcmlhbnRTZWxlY3RvciApKTsKICAgICAgICAgfQogCiAgICAgICAgIHJlc3VsdCA9IHZjbWFwLT5jbGF6ei0+dmFyaWFudGNoYXJfbGlzdCggdmNtYXAsIG1lbW9yeSwKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0b3R2YWwuYyBiL3NyYy9iYXNlL2Z0b3R2YWwuYwppbmRleCAwMDc1NzZjLi45MGE1ZGQ2IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdG90dmFsLmMKKysrIGIvc3JjL2Jhc2UvZnRvdHZhbC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgQVBJIGZvciB2YWxpZGF0aW5nIE9wZW5UeXBlIHRhYmxlcyAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTUsMTIgKzE1LDExIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX09QRU5UWVBFX1ZBTElEQVRFX0gKLSNpbmNsdWRlIEZUX09QRU5UWVBFX1ZBTElEQVRFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm90dmFsLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRvdHZhbC5oPgogCiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG90dmFsLmggKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0b3V0bG4uYyBiL3NyYy9iYXNlL2Z0b3V0bG4uYwppbmRleCAwZTJiYTM0Li4zMTFmMDk4IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdG91dGxuLmMKKysrIGIvc3JjL2Jhc2UvZnRvdXRsbi5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgb3V0bGluZSBtYW5hZ2VtZW50IChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxMiArMTYsMTEgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfT1VUTElORV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfVFJJR09OT01FVFJZX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdG91dGxuLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0dHJpZ29uLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI3NSw3ICsyNzQsNyBAQAogICAgICAgZmlyc3QgPSAoRlRfVUludClsYXN0ICsgMTsKICAgICB9CiAKLSAgICBGVF9UUkFDRTUoKCAiRlRfT3V0bGluZV9EZWNvbXBvc2U6IERvbmVcbiIsIG4gKSk7CisgICAgRlRfVFJBQ0U1KCggIkZUX091dGxpbmVfRGVjb21wb3NlOiBEb25lXG4iICkpOwogICAgIHJldHVybiBGVF9FcnJfT2s7CiAKICAgSW52YWxpZF9PdXRsaW5lOgpAQCAtNzExLDcgKzcxMCw3IEBACiAgICAgRlRfVmVjdG9yKiAgbGltaXQ7CiAKIAotICAgIGlmICggIW91dGxpbmUgfHwgIW1hdHJpeCApCisgICAgaWYgKCAhb3V0bGluZSB8fCAhbWF0cml4IHx8ICFvdXRsaW5lLT5wb2ludHMgKQogICAgICAgcmV0dXJuOwogCiAgICAgdmVjICAgPSBvdXRsaW5lLT5wb2ludHM7CkBAIC0xMDYxLDYgKzEwNjAsMTEgQEAKICAgICBpZiAoIGNib3gueE1pbiA9PSBjYm94LnhNYXggfHwgY2JveC55TWluID09IGNib3gueU1heCApCiAgICAgICByZXR1cm4gRlRfT1JJRU5UQVRJT05fTk9ORTsKIAorICAgIC8qIFJlamVjdCB2YWx1ZXMgbGFyZ2Ugb3V0bGluZXMuICovCisgICAgaWYgKCBjYm94LnhNaW4gPCAtMHgxMDAwMDAwTCB8fCBjYm94LnlNaW4gPCAtMHgxMDAwMDAwTCB8fAorICAgICAgICAgY2JveC54TWF4ID4gIDB4MTAwMDAwMEwgfHwgY2JveC55TWF4ID4gIDB4MTAwMDAwMEwgKQorICAgICAgcmV0dXJuIEZUX09SSUVOVEFUSU9OX05PTkU7CisKICAgICB4c2hpZnQgPSBGVF9NU0IoIChGVF9VSW50MzIpKCBGVF9BQlMoIGNib3gueE1heCApIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9BQlMoIGNib3gueE1pbiApICkgKSAtIDE0OwogICAgIHhzaGlmdCA9IEZUX01BWCggeHNoaWZ0LCAwICk7CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHBhdGVudC5jIGIvc3JjL2Jhc2UvZnRwYXRlbnQuYwppbmRleCAwMjBmNDY0Li5hMDJjNjM2IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHBhdGVudC5jCisrKyBiL3NyYy9iYXNlL2Z0cGF0ZW50LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgIEZyZWVUeXBlIEFQSSBmb3IgY2hlY2tpbmcgcGF0ZW50ZWQgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zCiAgKiAgIChib2R5KS4gIE9ic29sZXRlLCByZXRhaW5lZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lci4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxMyArMTYsMTIgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfU0ZOVF9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1RSVUVUWVBFX0dMWUZfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWdzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Z2x5Zi5oPgogCiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHBmci5jIGIvc3JjL2Jhc2UvZnRwZnIuYwppbmRleCBhZWZmMWRiLi5jNjU2ZmNkIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHBmci5jCisrKyBiL3NyYy9iYXNlL2Z0cGZyLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBQRlItc3BlY2lmaWMgZGF0YSAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTUsMTEgKzE1LDEwIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BGUl9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaD4KIAogCiAgIC8qIGNoZWNrIHRoZSBmb3JtYXQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0cHNwcm9wLmMgYi9zcmMvYmFzZS9mdHBzcHJvcC5jCmluZGV4IDUyYjlkNDUuLjhjMjlmNTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0cHNwcm9wLmMKKysrIGIvc3JjL2Jhc2UvZnRwc3Byb3AuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgR2V0IGFuZCBzZXQgcHJvcGVydGllcyBvZiBQb3N0U2NyaXB0IGRyaXZlcnMgKGJvZHkpLgogICogICBTZWUgYGZ0ZHJpdmVyLmgnIGZvciBhdmFpbGFibGUgcHJvcGVydGllcy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNywxMiArMTcsMTEgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRFJJVkVSX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9QUk9QU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRkcml2ZXIuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHBzcHJvcC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNjUsOSArMTY0LDkgQEAKICAgICAgICAgICBkcml2ZXItPmhpbnRpbmdfZW5naW5lID0gKmhpbnRpbmdfZW5naW5lOwogICAgICAgICBlbHNlCiAgICAgICAgICAgZXJyb3IgPSBGVF9FUlIoIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOwotCi0gICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgIH0KKworICAgICAgcmV0dXJuIGVycm9yOwogICAgIH0KIAogICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAibm8tc3RlbS1kYXJrZW5pbmciICkgKQpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRyZm9yay5jIGIvc3JjL2Jhc2UvZnRyZm9yay5jCmluZGV4IDczYjdlYjAuLmY5ODliZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0cmZvcmsuYworKysgYi9zcmMvYmFzZS9mdHJmb3JrLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBFbWJlZGRlZCByZXNvdXJjZSBmb3JrcyBhY2Nlc3NvciAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBNYXNhdGFrZSBZQU1BVE8gYW5kIFJlZGhhdCBLLksuCiAgKgogICogRlRfUmFjY2Vzc19HZXRfSGVhZGVySW5mbygpIGFuZCByYWNjZXNzX2d1ZXNzX2Rhcndpbl9oZnNwbHVzKCkgYXJlCkBAIC0yNCwxMCArMjQsOSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfUkZPUktfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0cmZvcmsuaD4KIAogI2luY2x1ZGUgImZ0YmFzZS5oIgogCkBAIC0yNDAsNyArMjM5LDcgQEAKICAgICAgICAgICAgICAgICAgIChjaGFyKSggMHhGRiAmICggdGFnX2ludGVybmFsID4+IDE2ICkgKSwKICAgICAgICAgICAgICAgICAgIChjaGFyKSggMHhGRiAmICggdGFnX2ludGVybmFsID4+ICA4ICkgKSwKICAgICAgICAgICAgICAgICAgIChjaGFyKSggMHhGRiAmICggdGFnX2ludGVybmFsID4+ICAwICkgKSApKTsKLSAgICAgIEZUX1RSQUNFMygoICIgICAgICAgICAgICAgOiBzdWJjb3VudD0lZCwgc3Vib2Zmc2V0PTB4JTA0eFxuIiwKKyAgICAgIEZUX1RSQUNFMygoICIgICAgICAgICAgICAgOiBzdWJjb3VudD0lZCwgc3Vib2Zmc2V0PTB4JTA0bHhcbiIsCiAgICAgICAgICAgICAgICAgICBzdWJjbnQsIHJwb3MgKSk7CiAKICAgICAgIGlmICggdGFnX2ludGVybmFsID09IHRhZyApCkBAIC0yODYsNyArMjg1LDcgQEAKICAgICAgICAgICByZWZbal0ub2Zmc2V0ID0gdGVtcCAmIDB4RkZGRkZGTDsKIAogICAgICAgICAgIEZUX1RSQUNFMygoICIgICAgICAgICAgICAgWyVkXToiCi0gICAgICAgICAgICAgICAgICAgICAgIiByZXNvdXJjZV9pZD0weCUwNHgsIG9mZnNldD0weCUwOHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIiByZXNvdXJjZV9pZD0weCUwNHgsIG9mZnNldD0weCUwOGx4XG4iLAogICAgICAgICAgICAgICAgICAgICAgIGosIChGVF9VU2hvcnQpcmVmW2pdLnJlc19pZCwgcmVmW2pdLm9mZnNldCApKTsKICAgICAgICAgfQogCkBAIC0zMDIsNyArMzAxLDcgQEAKIAogICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgKmNvdW50OyBqKysgKQogICAgICAgICAgICAgRlRfVFJBQ0UzKCggIiAgICAgICAgICAgICBbJWRdOiIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgcmVzb3VyY2VfaWQ9MHglMDR4LCBvZmZzZXQ9MHglMDh4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIiByZXNvdXJjZV9pZD0weCUwNHgsIG9mZnNldD0weCUwOGx4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgaiwgcmVmW2pdLnJlc19pZCwgcmVmW2pdLm9mZnNldCApKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHNuYW1lcy5jIGIvc3JjL2Jhc2UvZnRzbmFtZXMuYwppbmRleCA3YWIzZmUzLi44NTA3ZjI4IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHNuYW1lcy5jCisrKyBiL3NyYy9iYXNlL2Z0c25hbWVzLmMKQEAgLTcsNyArNyw3IEBACiAgKgogICogICBUaGlzIGlzIF9ub3RfIHVzZWQgdG8gcmV0cmlldmUgZ2x5cGggbmFtZXMhCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksMTIgKzE5LDExIEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CiAKLSNpbmNsdWRlIEZUX1NGTlRfTkFNRVNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdHNuYW1lcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgogCiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NGTlRfTkFNRVMKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0c3RyZWFtLmMgYi9zcmMvYmFzZS9mdHN0cmVhbS5jCmluZGV4IDRiMDg5MGQuLmQ5NDAyNTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0c3RyZWFtLmMKKysrIGIvc3JjL2Jhc2UvZnRzdHJlYW0uYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEkvTyBzdHJlYW0gc3VwcG9ydCAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsOSArMTYsOCBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yODYsNyArMjg1LDcgQEAKICAgICAgIH0KIAogICAgICAgc3RyZWFtLT5jdXJzb3IgPSBzdHJlYW0tPmJhc2U7Ci0gICAgICBzdHJlYW0tPmxpbWl0ICA9IHN0cmVhbS0+Y3Vyc29yICsgY291bnQ7CisgICAgICBzdHJlYW0tPmxpbWl0ICA9IEZUX09GRlNFVCggc3RyZWFtLT5jdXJzb3IsIGNvdW50ICk7CiAgICAgICBzdHJlYW0tPnBvcyAgICs9IHJlYWRfYnl0ZXM7CiAgICAgfQogICAgIGVsc2UKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0c3Ryb2tlLmMgYi9zcmMvYmFzZS9mdHN0cm9rZS5jCmluZGV4IDFiMmMwZjYuLjU2Zjk4ZTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0c3Ryb2tlLmMKKysrIGIvc3JjL2Jhc2UvZnRzdHJva2UuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIHBhdGggc3Ryb2tlciAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsMTMgKzE2LDEyIEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX1NUUk9LRVJfSAotI2luY2x1ZGUgRlRfVFJJR09OT01FVFJZX0gKLSNpbmNsdWRlIEZUX09VVExJTkVfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfTUVNT1JZX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0c3Ryb2tlLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnR0cmlnb24uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdG91dGxuLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CiAKIAogICAvKiBkZWNsYXJlIGFuIGV4dGVybiB0byBhY2Nlc3MgYGZ0X291dGxpbmVfZ2x5cGhfY2xhc3MnIGdsb2JhbGx5ICovCkBAIC01NDAsNjMgKzUzOSw1MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9BbmdsZSAgICAgICAgIGFuZ2xlX3N0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9BbmdsZSAgICAgICAgIGFuZ2xlX2RpZmYgKQogICB7Ci0gICAgRlRfQW5nbGUgICB0b3RhbCwgYW5nbGUsIHN0ZXAsIHJvdGF0ZSwgbmV4dCwgdGhldGE7Ci0gICAgRlRfVmVjdG9yICBhLCBiLCBhMiwgYjI7Ci0gICAgRlRfRml4ZWQgICBsZW5ndGg7CisgICAgRlRfRml4ZWQgICBjb2VmOworICAgIEZUX1ZlY3RvciAgYTAsIGExLCBhMiwgYTM7CisgICAgRlRfSW50ICAgICBpLCBhcmNzID0gMTsKICAgICBGVF9FcnJvciAgIGVycm9yID0gRlRfRXJyX09rOwogCiAKLSAgICAvKiBjb21wdXRlIHN0YXJ0IHBvaW50ICovCi0gICAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoICZhLCByYWRpdXMsIGFuZ2xlX3N0YXJ0ICk7Ci0gICAgYS54ICs9IGNlbnRlci0+eDsKLSAgICBhLnkgKz0gY2VudGVyLT55OworICAgIC8qIG51bWJlciBvZiBjdWJpYyBhcmNzIHRvIGRyYXcgKi8KKyAgICB3aGlsZSAoICBhbmdsZV9kaWZmID4gRlRfQVJDX0NVQklDX0FOR0xFICogYXJjcyB8fAorICAgICAgICAgICAgLWFuZ2xlX2RpZmYgPiBGVF9BUkNfQ1VCSUNfQU5HTEUgKiBhcmNzICkKKyAgICAgIGFyY3MrKzsKIAotICAgIHRvdGFsICA9IGFuZ2xlX2RpZmY7Ci0gICAgYW5nbGUgID0gYW5nbGVfc3RhcnQ7Ci0gICAgcm90YXRlID0gKCBhbmdsZV9kaWZmID49IDAgKSA/IEZUX0FOR0xFX1BJMiA6IC1GVF9BTkdMRV9QSTI7CisgICAgLyogY29udHJvbCB0YW5nZW50cyAqLworICAgIGNvZWYgID0gRlRfVGFuKCBhbmdsZV9kaWZmIC8gKCA0ICogYXJjcyApICk7CisgICAgY29lZiArPSBjb2VmIC8gMzsKIAotICAgIHdoaWxlICggdG90YWwgIT0gMCApCisgICAgLyogY29tcHV0ZSBzdGFydCBhbmQgZmlyc3QgY29udHJvbCBwb2ludCAqLworICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmYTAsIHJhZGl1cywgYW5nbGVfc3RhcnQgKTsKKyAgICBhMS54ID0gRlRfTXVsRml4KCAtYTAueSwgY29lZiApOworICAgIGExLnkgPSBGVF9NdWxGaXgoICBhMC54LCBjb2VmICk7CisKKyAgICBhMC54ICs9IGNlbnRlci0+eDsKKyAgICBhMC55ICs9IGNlbnRlci0+eTsKKyAgICBhMS54ICs9IGEwLng7CisgICAgYTEueSArPSBhMC55OworCisgICAgZm9yICggaSA9IDE7IGkgPD0gYXJjczsgaSsrICkKICAgICB7Ci0gICAgICBzdGVwID0gdG90YWw7Ci0gICAgICBpZiAoIHN0ZXAgPiBGVF9BUkNfQ1VCSUNfQU5HTEUgKQotICAgICAgICBzdGVwID0gRlRfQVJDX0NVQklDX0FOR0xFOworICAgICAgLyogY29tcHV0ZSBlbmQgYW5kIHNlY29uZCBjb250cm9sIHBvaW50ICovCisgICAgICBGVF9WZWN0b3JfRnJvbV9Qb2xhciggJmEzLCByYWRpdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVfc3RhcnQgKyBpICogYW5nbGVfZGlmZiAvIGFyY3MgKTsKKyAgICAgIGEyLnggPSBGVF9NdWxGaXgoICBhMy55LCBjb2VmICk7CisgICAgICBhMi55ID0gRlRfTXVsRml4KCAtYTMueCwgY29lZiApOwogCi0gICAgICBlbHNlIGlmICggc3RlcCA8IC1GVF9BUkNfQ1VCSUNfQU5HTEUgKQotICAgICAgICBzdGVwID0gLUZUX0FSQ19DVUJJQ19BTkdMRTsKLQotICAgICAgbmV4dCAgPSBhbmdsZSArIHN0ZXA7Ci0gICAgICB0aGV0YSA9IHN0ZXA7Ci0gICAgICBpZiAoIHRoZXRhIDwgMCApCi0gICAgICAgIHRoZXRhID0gLXRoZXRhOwotCi0gICAgICB0aGV0YSA+Pj0gMTsKLQotICAgICAgLyogY29tcHV0ZSBlbmQgcG9pbnQgKi8KLSAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmYiwgcmFkaXVzLCBuZXh0ICk7Ci0gICAgICBiLnggKz0gY2VudGVyLT54OwotICAgICAgYi55ICs9IGNlbnRlci0+eTsKLQotICAgICAgLyogY29tcHV0ZSBmaXJzdCBhbmQgc2Vjb25kIGNvbnRyb2wgcG9pbnRzICovCi0gICAgICBsZW5ndGggPSBGVF9NdWxEaXYoIHJhZGl1cywgRlRfU2luKCB0aGV0YSApICogNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEwMDAwTCArIEZUX0NvcyggdGhldGEgKSApICogMyApOwotCi0gICAgICBGVF9WZWN0b3JfRnJvbV9Qb2xhciggJmEyLCBsZW5ndGgsIGFuZ2xlICsgcm90YXRlICk7Ci0gICAgICBhMi54ICs9IGEueDsKLSAgICAgIGEyLnkgKz0gYS55OwotCi0gICAgICBGVF9WZWN0b3JfRnJvbV9Qb2xhciggJmIyLCBsZW5ndGgsIG5leHQgLSByb3RhdGUgKTsKLSAgICAgIGIyLnggKz0gYi54OwotICAgICAgYjIueSArPSBiLnk7CisgICAgICBhMy54ICs9IGNlbnRlci0+eDsKKyAgICAgIGEzLnkgKz0gY2VudGVyLT55OworICAgICAgYTIueCArPSBhMy54OworICAgICAgYTIueSArPSBhMy55OwogCiAgICAgICAvKiBhZGQgY3ViaWMgYXJjICovCi0gICAgICBlcnJvciA9IGZ0X3N0cm9rZV9ib3JkZXJfY3ViaWN0byggYm9yZGVyLCAmYTIsICZiMiwgJmIgKTsKKyAgICAgIGVycm9yID0gZnRfc3Ryb2tlX2JvcmRlcl9jdWJpY3RvKCBib3JkZXIsICZhMSwgJmEyLCAmYTMgKTsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICBicmVhazsKIAotICAgICAgLyogcHJvY2VzcyB0aGUgcmVzdCBvZiB0aGUgYXJjID8/ICovCi0gICAgICBhICAgICAgPSBiOwotICAgICAgdG90YWwgLT0gc3RlcDsKLSAgICAgIGFuZ2xlICA9IG5leHQ7CisgICAgICAvKiBhMCA9IGEzOyAqLworICAgICAgYTEueCA9IGEzLnggLSBhMi54ICsgYTMueDsKKyAgICAgIGExLnkgPSBhMy55IC0gYTIueSArIGEzLnk7CiAgICAgfQogCiAgICAgcmV0dXJuIGVycm9yOwpAQCAtOTM0LDU1ICs5MjIsNDAgQEAKIAogICAgICAgZXJyb3IgPSBmdF9zdHJva2VyX2FyY3RvKCBzdHJva2VyLCBzaWRlICk7CiAgICAgfQotICAgIGVsc2UgaWYgKCBzdHJva2VyLT5saW5lX2NhcCA9PSBGVF9TVFJPS0VSX0xJTkVDQVBfU1FVQVJFICkKKyAgICBlbHNlCiAgICAgewotICAgICAgLyogYWRkIGEgc3F1YXJlIGNhcCAqLwotICAgICAgRlRfVmVjdG9yICAgICAgICBkZWx0YSwgZGVsdGEyOwotICAgICAgRlRfQW5nbGUgICAgICAgICByb3RhdGUgPSBGVF9TSURFX1RPX1JPVEFURSggc2lkZSApOworICAgICAgLyogYWRkIGEgc3F1YXJlIG9yIGJ1dHQgY2FwICovCisgICAgICBGVF9WZWN0b3IgICAgICAgIG1pZGRsZSwgZGVsdGE7CiAgICAgICBGVF9GaXhlZCAgICAgICAgIHJhZGl1cyA9IHN0cm9rZXItPnJhZGl1czsKICAgICAgIEZUX1N0cm9rZUJvcmRlciAgYm9yZGVyID0gc3Ryb2tlci0+Ym9yZGVycyArIHNpZGU7CiAKIAotICAgICAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoICZkZWx0YTIsIHJhZGl1cywgYW5nbGUgKyByb3RhdGUgKTsKLSAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmZGVsdGEsICByYWRpdXMsIGFuZ2xlICk7CisgICAgICAvKiBjb21wdXRlIG1pZGRsZSBwb2ludCBhbmQgZmlyc3QgYW5nbGUgcG9pbnQgKi8KKyAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmbWlkZGxlLCByYWRpdXMsIGFuZ2xlICk7CisgICAgICBkZWx0YS54ID0gc2lkZSA/ICBtaWRkbGUueSA6IC1taWRkbGUueTsKKyAgICAgIGRlbHRhLnkgPSBzaWRlID8gLW1pZGRsZS54IDogIG1pZGRsZS54OwogCi0gICAgICBkZWx0YS54ICs9IHN0cm9rZXItPmNlbnRlci54ICsgZGVsdGEyLng7Ci0gICAgICBkZWx0YS55ICs9IHN0cm9rZXItPmNlbnRlci55ICsgZGVsdGEyLnk7CisgICAgICBpZiAoIHN0cm9rZXItPmxpbmVfY2FwID09IEZUX1NUUk9LRVJfTElORUNBUF9TUVVBUkUgKQorICAgICAgeworICAgICAgICBtaWRkbGUueCArPSBzdHJva2VyLT5jZW50ZXIueDsKKyAgICAgICAgbWlkZGxlLnkgKz0gc3Ryb2tlci0+Y2VudGVyLnk7CisgICAgICB9CisgICAgICBlbHNlICAvKiBGVF9TVFJPS0VSX0xJTkVDQVBfQlVUVCAqLworICAgICAgeworICAgICAgICBtaWRkbGUueCAgPSBzdHJva2VyLT5jZW50ZXIueDsKKyAgICAgICAgbWlkZGxlLnkgID0gc3Ryb2tlci0+Y2VudGVyLnk7CisgICAgICB9CisKKyAgICAgIGRlbHRhLnggICs9IG1pZGRsZS54OworICAgICAgZGVsdGEueSAgKz0gbWlkZGxlLnk7CiAKICAgICAgIGVycm9yID0gZnRfc3Ryb2tlX2JvcmRlcl9saW5ldG8oIGJvcmRlciwgJmRlbHRhLCBGQUxTRSApOwogICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgIGdvdG8gRXhpdDsKIAotICAgICAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoICZkZWx0YTIsIHJhZGl1cywgYW5nbGUgLSByb3RhdGUgKTsKLSAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmZGVsdGEsICByYWRpdXMsIGFuZ2xlICk7Ci0KLSAgICAgIGRlbHRhLnggKz0gZGVsdGEyLnggKyBzdHJva2VyLT5jZW50ZXIueDsKLSAgICAgIGRlbHRhLnkgKz0gZGVsdGEyLnkgKyBzdHJva2VyLT5jZW50ZXIueTsKLQotICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2xpbmV0byggYm9yZGVyLCAmZGVsdGEsIEZBTFNFICk7Ci0gICAgfQotICAgIGVsc2UgaWYgKCBzdHJva2VyLT5saW5lX2NhcCA9PSBGVF9TVFJPS0VSX0xJTkVDQVBfQlVUVCApCi0gICAgewotICAgICAgLyogYWRkIGEgYnV0dCBlbmRpbmcgKi8KLSAgICAgIEZUX1ZlY3RvciAgICAgICAgZGVsdGE7Ci0gICAgICBGVF9BbmdsZSAgICAgICAgIHJvdGF0ZSA9IEZUX1NJREVfVE9fUk9UQVRFKCBzaWRlICk7Ci0gICAgICBGVF9GaXhlZCAgICAgICAgIHJhZGl1cyA9IHN0cm9rZXItPnJhZGl1czsKLSAgICAgIEZUX1N0cm9rZUJvcmRlciAgYm9yZGVyID0gc3Ryb2tlci0+Ym9yZGVycyArIHNpZGU7Ci0KLQotICAgICAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoICZkZWx0YSwgcmFkaXVzLCBhbmdsZSArIHJvdGF0ZSApOwotCi0gICAgICBkZWx0YS54ICs9IHN0cm9rZXItPmNlbnRlci54OwotICAgICAgZGVsdGEueSArPSBzdHJva2VyLT5jZW50ZXIueTsKLQotICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2xpbmV0byggYm9yZGVyLCAmZGVsdGEsIEZBTFNFICk7Ci0gICAgICBpZiAoIGVycm9yICkKLSAgICAgICAgZ290byBFeGl0OwotCi0gICAgICBGVF9WZWN0b3JfRnJvbV9Qb2xhciggJmRlbHRhLCByYWRpdXMsIGFuZ2xlIC0gcm90YXRlICk7Ci0KLSAgICAgIGRlbHRhLnggKz0gc3Ryb2tlci0+Y2VudGVyLng7Ci0gICAgICBkZWx0YS55ICs9IHN0cm9rZXItPmNlbnRlci55OworICAgICAgLyogY29tcHV0ZSBzZWNvbmQgYW5nbGUgcG9pbnQgKi8KKyAgICAgIGRlbHRhLnggPSBtaWRkbGUueCAtIGRlbHRhLnggKyBtaWRkbGUueDsKKyAgICAgIGRlbHRhLnkgPSBtaWRkbGUueSAtIGRlbHRhLnkgKyBtaWRkbGUueTsKIAogICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2xpbmV0byggYm9yZGVyLCAmZGVsdGEsIEZBTFNFICk7CiAgICAgfQpAQCAtMTAwMCw4ICs5NzMsOCBAQAogICB7CiAgICAgRlRfU3Ryb2tlQm9yZGVyICBib3JkZXIgPSBzdHJva2VyLT5ib3JkZXJzICsgc2lkZTsKICAgICBGVF9BbmdsZSAgICAgICAgIHBoaSwgdGhldGEsIHJvdGF0ZTsKLSAgICBGVF9GaXhlZCAgICAgICAgIGxlbmd0aCwgdGhjb3M7Ci0gICAgRlRfVmVjdG9yICAgICAgICBkZWx0YTsKKyAgICBGVF9GaXhlZCAgICAgICAgIGxlbmd0aDsKKyAgICBGVF9WZWN0b3IgICAgICAgIHNpZ21hLCBkZWx0YTsKICAgICBGVF9FcnJvciAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOwogICAgIEZUX0Jvb2wgICAgICAgICAgaW50ZXJzZWN0OyAgICAgICAgICAvKiB1c2UgaW50ZXJzZWN0aW9uIG9mIGxpbmVzPyAqLwogCkBAIC0xMDE5LDEwICs5OTIsMTMgQEAKICAgICBlbHNlCiAgICAgewogICAgICAgLyogY29tcHV0ZSBtaW5pbXVtIHJlcXVpcmVkIGxlbmd0aCBvZiBsaW5lcyAqLwotICAgICAgRlRfRml4ZWQgIG1pbl9sZW5ndGggPSBmdF9wb3NfYWJzKCBGVF9NdWxGaXgoIHN0cm9rZXItPnJhZGl1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9UYW4oIHRoZXRhICkgKSApOworICAgICAgRlRfRml4ZWQgIG1pbl9sZW5ndGg7CiAKIAorICAgICAgRlRfVmVjdG9yX1VuaXQoICZzaWdtYSwgdGhldGEgKTsKKyAgICAgIG1pbl9sZW5ndGggPQorICAgICAgICBmdF9wb3NfYWJzKCBGVF9NdWxEaXYoIHN0cm9rZXItPnJhZGl1cywgc2lnbWEueSwgc2lnbWEueCApICk7CisKICAgICAgIGludGVyc2VjdCA9IEZUX0JPT0woIG1pbl9sZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZXItPmxpbmVfbGVuZ3RoID49IG1pbl9sZW5ndGggJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbGVuZ3RoICAgICAgICAgID49IG1pbl9sZW5ndGggKTsKQEAgLTEwNDAsMTMgKzEwMTYsMTEgQEAKICAgICBlbHNlCiAgICAgewogICAgICAgLyogY29tcHV0ZSBtZWRpYW4gYW5nbGUgKi8KLSAgICAgIHBoaSA9IHN0cm9rZXItPmFuZ2xlX2luICsgdGhldGE7CisgICAgICBwaGkgPSBzdHJva2VyLT5hbmdsZV9pbiArIHRoZXRhICsgcm90YXRlOwogCi0gICAgICB0aGNvcyA9IEZUX0NvcyggdGhldGEgKTsKKyAgICAgIGxlbmd0aCA9IEZUX0RpdkZpeCggc3Ryb2tlci0+cmFkaXVzLCBzaWdtYS54ICk7CiAKLSAgICAgIGxlbmd0aCA9IEZUX0RpdkZpeCggc3Ryb2tlci0+cmFkaXVzLCB0aGNvcyApOwotCi0gICAgICBGVF9WZWN0b3JfRnJvbV9Qb2xhciggJmRlbHRhLCBsZW5ndGgsIHBoaSArIHJvdGF0ZSApOworICAgICAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoICZkZWx0YSwgbGVuZ3RoLCBwaGkgKTsKICAgICAgIGRlbHRhLnggKz0gc3Ryb2tlci0+Y2VudGVyLng7CiAgICAgICBkZWx0YS55ICs9IHN0cm9rZXItPmNlbnRlci55OwogICAgIH0KQEAgLTEwNzMsMTAgKzEwNDcsMTAgQEAKICAgICBlbHNlCiAgICAgewogICAgICAgLyogdGhpcyBpcyBhIG1pdGVyZWQgKHBvaW50ZWQpIG9yIGJldmVsZWQgKHRydW5jYXRlZCkgY29ybmVyICovCi0gICAgICBGVF9GaXhlZCAgc2lnbWEgPSAwLCByYWRpdXMgPSBzdHJva2VyLT5yYWRpdXM7Ci0gICAgICBGVF9BbmdsZSAgdGhldGEgPSAwLCBwaGkgPSAwOwotICAgICAgRlRfRml4ZWQgIHRoY29zID0gMDsKLSAgICAgIEZUX0Jvb2wgICBiZXZlbCwgZml4ZWRfYmV2ZWw7CisgICAgICBGVF9GaXhlZCAgIHJhZGl1cyA9IHN0cm9rZXItPnJhZGl1czsKKyAgICAgIEZUX1ZlY3RvciAgc2lnbWE7CisgICAgICBGVF9BbmdsZSAgIHRoZXRhID0gMCwgcGhpID0gMDsKKyAgICAgIEZUX0Jvb2wgICAgYmV2ZWwsIGZpeGVkX2JldmVsOwogCiAKICAgICAgIHJvdGF0ZSA9IEZUX1NJREVfVE9fUk9UQVRFKCBzaWRlICk7CkBAIC0xMDg3LDI2ICsxMDYxLDIwIEBACiAgICAgICBmaXhlZF9iZXZlbCA9CiAgICAgICAgIEZUX0JPT0woIHN0cm9rZXItPmxpbmVfam9pbiAhPSBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSX1ZBUklBQkxFICk7CiAKKyAgICAgIC8qIGNoZWNrIG1pdGVyIGxpbWl0IGZpcnN0ICovCiAgICAgICBpZiAoICFiZXZlbCApCiAgICAgICB7Ci0gICAgICAgIHRoZXRhID0gRlRfQW5nbGVfRGlmZiggc3Ryb2tlci0+YW5nbGVfaW4sIHN0cm9rZXItPmFuZ2xlX291dCApOworICAgICAgICB0aGV0YSA9IEZUX0FuZ2xlX0RpZmYoIHN0cm9rZXItPmFuZ2xlX2luLCBzdHJva2VyLT5hbmdsZV9vdXQgKSAvIDI7CiAKLSAgICAgICAgaWYgKCB0aGV0YSA9PSBGVF9BTkdMRV9QSSApCi0gICAgICAgIHsKLSAgICAgICAgICB0aGV0YSA9IHJvdGF0ZTsKLSAgICAgICAgICBwaGkgICA9IHN0cm9rZXItPmFuZ2xlX2luOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHRoZXRhIC89IDI7Ci0gICAgICAgICAgcGhpICAgID0gc3Ryb2tlci0+YW5nbGVfaW4gKyB0aGV0YSArIHJvdGF0ZTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIHRoZXRhID09IEZUX0FOR0xFX1BJMiApCisgICAgICAgICAgdGhldGEgPSAtcm90YXRlOwogCi0gICAgICAgIHRoY29zID0gRlRfQ29zKCB0aGV0YSApOwotICAgICAgICBzaWdtYSA9IEZUX011bEZpeCggc3Ryb2tlci0+bWl0ZXJfbGltaXQsIHRoY29zICk7CisgICAgICAgIHBoaSAgICA9IHN0cm9rZXItPmFuZ2xlX2luICsgdGhldGEgKyByb3RhdGU7CisKKyAgICAgICAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoICZzaWdtYSwgc3Ryb2tlci0+bWl0ZXJfbGltaXQsIHRoZXRhICk7CiAKICAgICAgICAgLyogaXMgbWl0ZXIgbGltaXQgZXhjZWVkZWQ/ICovCi0gICAgICAgIGlmICggc2lnbWEgPCAweDEwMDAwTCApCisgICAgICAgIGlmICggc2lnbWEueCA8IDB4MTAwMDBMICkKICAgICAgICAgewogICAgICAgICAgIC8qIGRvbid0IGNyZWF0ZSB2YXJpYWJsZSBiZXZlbHMgZm9yIHZlcnkgc21hbGwgZGV2aWF0aW9uczsgKi8KICAgICAgICAgICAvKiBGVF9TaW4oeCkgPSAwIGZvciB4IDw9IDU3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMTMzLDM2ICsxMTAxLDM0IEBACiAgICAgICAgICAgYm9yZGVyLT5tb3ZhYmxlID0gRkFMU0U7CiAgICAgICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2xpbmV0byggYm9yZGVyLCAmZGVsdGEsIEZBTFNFICk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSAvKiB2YXJpYWJsZSBiZXZlbCAqLworICAgICAgICBlbHNlIC8qIHZhcmlhYmxlIGJldmVsIG9yIGNsaXBwZWQgbWl0ZXIgKi8KICAgICAgICAgewogICAgICAgICAgIC8qIHRoZSBtaXRlciBpcyB0cnVuY2F0ZWQgKi8KICAgICAgICAgICBGVF9WZWN0b3IgIG1pZGRsZSwgZGVsdGE7Ci0gICAgICAgICAgRlRfRml4ZWQgICBsZW5ndGg7CisgICAgICAgICAgRlRfRml4ZWQgICBjb2VmOwogCiAKLSAgICAgICAgICAvKiBjb21wdXRlIG1pZGRsZSBwb2ludCAqLworICAgICAgICAgIC8qIGNvbXB1dGUgbWlkZGxlIHBvaW50IGFuZCBmaXJzdCBhbmdsZSBwb2ludCAqLwogICAgICAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoIHJhZGl1cywgc3Ryb2tlci0+bWl0ZXJfbGltaXQgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhpICk7CisKKyAgICAgICAgICBjb2VmICAgID0gRlRfRGl2Rml4KCAgMHgxMDAwMEwgLSBzaWdtYS54LCBzaWdtYS55ICk7CisgICAgICAgICAgZGVsdGEueCA9IEZUX011bEZpeCggIG1pZGRsZS55LCBjb2VmICk7CisgICAgICAgICAgZGVsdGEueSA9IEZUX011bEZpeCggLW1pZGRsZS54LCBjb2VmICk7CisKICAgICAgICAgICBtaWRkbGUueCArPSBzdHJva2VyLT5jZW50ZXIueDsKICAgICAgICAgICBtaWRkbGUueSArPSBzdHJva2VyLT5jZW50ZXIueTsKLQotICAgICAgICAgIC8qIGNvbXB1dGUgZmlyc3QgYW5nbGUgcG9pbnQgKi8KLSAgICAgICAgICBsZW5ndGggPSBGVF9NdWxEaXYoIHJhZGl1cywgMHgxMDAwMEwgLSBzaWdtYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0X3Bvc19hYnMoIEZUX1NpbiggdGhldGEgKSApICk7Ci0KLSAgICAgICAgICBGVF9WZWN0b3JfRnJvbV9Qb2xhciggJmRlbHRhLCBsZW5ndGgsIHBoaSArIHJvdGF0ZSApOwotICAgICAgICAgIGRlbHRhLnggKz0gbWlkZGxlLng7Ci0gICAgICAgICAgZGVsdGEueSArPSBtaWRkbGUueTsKKyAgICAgICAgICBkZWx0YS54ICArPSBtaWRkbGUueDsKKyAgICAgICAgICBkZWx0YS55ICArPSBtaWRkbGUueTsKIAogICAgICAgICAgIGVycm9yID0gZnRfc3Ryb2tlX2JvcmRlcl9saW5ldG8oIGJvcmRlciwgJmRlbHRhLCBGQUxTRSApOwogICAgICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICAgICAgZ290byBFeGl0OwogCiAgICAgICAgICAgLyogY29tcHV0ZSBzZWNvbmQgYW5nbGUgcG9pbnQgKi8KLSAgICAgICAgICBGVF9WZWN0b3JfRnJvbV9Qb2xhciggJmRlbHRhLCBsZW5ndGgsIHBoaSAtIHJvdGF0ZSApOwotICAgICAgICAgIGRlbHRhLnggKz0gbWlkZGxlLng7Ci0gICAgICAgICAgZGVsdGEueSArPSBtaWRkbGUueTsKKyAgICAgICAgICBkZWx0YS54ID0gbWlkZGxlLnggLSBkZWx0YS54ICsgbWlkZGxlLng7CisgICAgICAgICAgZGVsdGEueSA9IG1pZGRsZS55IC0gZGVsdGEueSArIG1pZGRsZS55OwogCiAgICAgICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2xpbmV0byggYm9yZGVyLCAmZGVsdGEsIEZBTFNFICk7CiAgICAgICAgICAgaWYgKCBlcnJvciApCkBAIC0xMTg5LDcgKzExNTUsNyBAQAogICAgICAgICBGVF9WZWN0b3IgIGRlbHRhOwogCiAKLSAgICAgICAgbGVuZ3RoID0gRlRfRGl2Rml4KCBzdHJva2VyLT5yYWRpdXMsIHRoY29zICk7CisgICAgICAgIGxlbmd0aCA9IEZUX011bERpdiggc3Ryb2tlci0+cmFkaXVzLCBzdHJva2VyLT5taXRlcl9saW1pdCwgc2lnbWEueCApOwogCiAgICAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmZGVsdGEsIGxlbmd0aCwgcGhpICk7CiAgICAgICAgIGRlbHRhLnggKz0gc3Ryb2tlci0+Y2VudGVyLng7CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHN5bnRoLmMgYi9zcmMvYmFzZS9mdHN5bnRoLmMKaW5kZXggZjg3ZWQ2NS4uYTkxMTllMiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRzeW50aC5jCisrKyBiL3NyYy9iYXNlL2Z0c3ludGguYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIHN5bnRoZXNpemluZyBjb2RlIGZvciBlbWJvbGRlbmluZyBhbmQgc2xhbnRpbmcgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDEyICsxNiwxMSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9TWU5USEVTSVNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9PVVRMSU5FX0gKLSNpbmNsdWRlIEZUX0JJVE1BUF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRzeW50aC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdG91dGxuLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRiaXRtYXAuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTMwLDcgKzEyOSw3IEBACiAgICAgICBpZiAoICggeXN0ciA+PiA2ICkgPiBGVF9JTlRfTUFYIHx8ICggeXN0ciA+PiA2ICkgPCBGVF9JTlRfTUlOICkKICAgICAgIHsKICAgICAgICAgRlRfVFJBQ0UxKCggIkZUX0dseXBoU2xvdF9FbWJvbGRlbjoiICkpOwotICAgICAgICBGVF9UUkFDRTEoKCAidG9vIHN0cm9uZyBlbWJvbGRlbmluZyBwYXJhbWV0ZXIgeXN0cj0lZFxuIiwgeXN0ciApKTsKKyAgICAgICAgRlRfVFJBQ0UxKCggInRvbyBzdHJvbmcgZW1ib2xkZW5pbmcgcGFyYW1ldGVyIHlzdHI9JWxkXG4iLCB5c3RyICkpOwogICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgICBlcnJvciA9IEZUX0dseXBoU2xvdF9Pd25fQml0bWFwKCBzbG90ICk7CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHN5c3RlbS5jIGIvc3JjL2Jhc2UvZnRzeXN0ZW0uYwppbmRleCBmOTJiM2EwLi4zMDEzY2JkIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHN5c3RlbS5jCisrKyBiL3NyYy9iYXNlL2Z0c3lzdGVtLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBBTlNJLXNwZWNpZmljIEZyZWVUeXBlIGxvdy1sZXZlbCBzeXN0ZW0gaW50ZXJmYWNlIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNywxMSArMjcsMTEgQEAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9DT05GSUdfQ09ORklHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9TWVNURU1fSAotI2luY2x1ZGUgRlRfRVJST1JTX0gKLSNpbmNsdWRlIEZUX1RZUEVTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdHN5c3RlbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZXJyb3JzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnR0eXBlcy5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHRyaWdvbi5jIGIvc3JjL2Jhc2UvZnR0cmlnb24uYwppbmRleCAzODcyMTk3Li5jNmYwMjdjIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHRyaWdvbi5jCisrKyBiL3NyYy9iYXNlL2Z0dHJpZ29uLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSB0cmlnb25vbWV0cmljIGZ1bmN0aW9ucyAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjksMTAgKzI5LDkgQEAKICAgICoKICAgICovCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKLSNpbmNsdWRlIEZUX1RSSUdPTk9NRVRSWV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnR0cmlnb24uaD4KIAogCiAgIC8qIHRoZSBDb3JkaWMgc2hyaW5rIGZhY3RvciAwLjg1ODc4NTMzNjQ4MDQzNiAqIDJeMzIgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0dHlwZTEuYyBiL3NyYy9iYXNlL2Z0dHlwZTEuYwppbmRleCAyNmQ0ZjFjLi5iZTYwZWQ2IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHR5cGUxLmMKKysrIGIvc3JjL2Jhc2UvZnR0eXBlMS5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgdXRpbGl0eSBmaWxlIGZvciBQUyBuYW1lcyBzdXBwb3J0IChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxMSArMTYsMTAgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9JTkZPX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaD4KIAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gdDF0YWJsZXMuaCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnR1dGlsLmMgYi9zcmMvYmFzZS9mdHV0aWwuYwppbmRleCA5MmJkODU3Li5kOTBjZmJjIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHV0aWwuYworKysgYi9zcmMvYmFzZS9mdHV0aWwuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIHV0aWxpdHkgZmlsZSBmb3IgbWVtb3J5IGFuZCBsaXN0IG1hbmFnZW1lbnQgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDExICsxNiwxMCBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9NRU1PUllfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9MSVNUX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGxpc3QuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnR2ZXIucmMgYi9zcmMvYmFzZS9mdHZlci5yYwppbmRleCAxMzU0NDk3Li4wYjkyZTliIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHZlci5yYworKysgYi9zcmMvYmFzZS9mdHZlci5yYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBWRVJTSU9OSU5GTyByZXNvdXJjZSBmb3IgV2luZG93cyBETExzLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTgsOCArMTgsOCBAQAogCiAjaW5jbHVkZTx3aW5kb3dzLmg+CiAKLSNkZWZpbmUgRlRfVkVSU0lPTiAgICAgIDIsMTAsMSwwCi0jZGVmaW5lIEZUX1ZFUlNJT05fU1RSICAiMi4xMC4xIgorI2RlZmluZSBGVF9WRVJTSU9OICAgICAgMiwxMCw0LDAKKyNkZWZpbmUgRlRfVkVSU0lPTl9TVFIgICIyLjEwLjQiCiAKIFZTX1ZFUlNJT05fSU5GTyAgICAgIFZFUlNJT05JTkZPCiBGSUxFVkVSU0lPTiAgICAgICAgICBGVF9WRVJTSU9OCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCAgICAgIEZUX1ZFUlNJT05fU1RSCiAgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAgICAgICJGcmVlVHlwZSIKICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsICAgRlRfVkVSU0lPTl9TVFIKLSAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICAgIlwyNTEgMjAxOC0yMDE5IFRoZSBGcmVlVHlwZSBQcm9qZWN0IHd3dy5mcmVldHlwZS5vcmcuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIgorICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgICAiXDI1MSAyMDAwLTIwMjAgVGhlIEZyZWVUeXBlIFByb2plY3Qgd3d3LmZyZWV0eXBlLm9yZy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4iCiAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgICAgICJmcmVldHlwZSIKICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgRlRfRklMRU5BTUUKICAgICBFTkQKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0d2luZm50LmMgYi9zcmMvYmFzZS9mdHdpbmZudC5jCmluZGV4IDU5ZGFhNzcuLjY5OWRjM2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0d2luZm50LmMKKysrIGIvc3JjL2Jhc2UvZnR3aW5mbnQuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIFdpbmRvd3MgRk5UIHNwZWNpZmljIGluZm8gKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDExICsxNiwxMCBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9XSU5GT05UU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfV0lORk5UX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnR3aW5mbnQuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdndpbmZudC5oPgogCiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHdpbmZudC5oICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9ydWxlcy5tayBiL3NyYy9iYXNlL3J1bGVzLm1rCmluZGV4IDRiMjRjNmQuLjQxMWM0YzggMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL3J1bGVzLm1rCisrKyBiL3NyYy9iYXNlL3J1bGVzLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL2JkZi9KYW1maWxlIGIvc3JjL2JkZi9KYW1maWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDljN2Y1Li4wMDAwMDAwCi0tLSBhL3NyYy9iZGYvSmFtZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMgRnJlZVR5cGUgMiBzcmMvYmRmIEphbWZpbGUKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKLSMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgotIwotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAotIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCi0jIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91Ci0jIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0Ci0jIGZ1bGx5LgotCi1TdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgYmRmIDsKLQotewotICBsb2NhbCAgX3NvdXJjZXMgOwotCi0gIGlmICQoRlQyX01VTFRJKQotICB7Ci0gICAgX3NvdXJjZXMgPSBiZGZkcml2cgotICAgICAgICAgICAgICAgYmRmbGliCi0gICAgICAgICAgICAgICA7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgX3NvdXJjZXMgPSBiZGYgOwotICB9Ci0KLSAgTGlicmFyeSAgJChGVDJfTElCKSA6ICQoX3NvdXJjZXMpLmMgOwotfQotCi0jIGVuZCBvZiBzcmMvYmRmIEphbWZpbGUKZGlmZiAtLWdpdCBhL3NyYy9iZGYvYmRmLmMgYi9zcmMvYmRmL2JkZi5jCmluZGV4IGU1NGRmNjYuLjI0OTAxMmUgMTAwNjQ0Ci0tLSBhL3NyYy9iZGYvYmRmLmMKKysrIGIvc3JjL2JkZi9iZGYuYwpAQCAtMjYsNyArMjYsNiBAQAogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAKICNpbmNsdWRlICJiZGZsaWIuYyIKICNpbmNsdWRlICJiZGZkcml2ci5jIgpkaWZmIC0tZ2l0IGEvc3JjL2JkZi9iZGYuaCBiL3NyYy9iZGYvYmRmLmgKaW5kZXggZDlhYmQyMy4uNWFjYmQ1ZiAxMDA2NDQKLS0tIGEvc3JjL2JkZi9iZGYuaAorKysgYi9zcmMvYmRmL2JkZi5oCkBAIC0zMCwxMCArMzAsOSBAQAogICogQmFzZWQgb24gYmRmLmgsdiAxLjE2IDIwMDAvMDMvMTYgMjA6MDg6NTEgbWxlaXNoZXIKICAqLwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0hBU0hfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRoYXNoLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvYmRmL2JkZmRyaXZyLmMgYi9zcmMvYmRmL2JkZmRyaXZyLmMKaW5kZXggNjBlYjkzMy4uZDI5MTg4YiAxMDA2NDQKLS0tIGEvc3JjL2JkZi9iZGZkcml2ci5jCisrKyBiL3NyYy9iZGYvYmRmZHJpdnIuYwpAQCAtMjQsMTYgKzI0LDE1IEBACiBUSEUgU09GVFdBUkUuCiAqLwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfQkRGX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX0lEU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRiZGYuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90dG5hbWVpZC5oPgogCi0jaW5jbHVkZSBGVF9TRVJWSUNFX0JERl9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX0ZPTlRfRk9STUFUX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10Lmg+CiAKICNpbmNsdWRlICJiZGYuaCIKICNpbmNsdWRlICJiZGZkcml2ci5oIgpAQCAtMTg0LDcgKzE4Myw4IEBACiAgIEV4aXQ6CiAgICAgaWYgKCBjaGFyY29kZSA+IDB4RkZGRkZGRkZVTCApCiAgICAgewotICAgICAgRlRfVFJBQ0UxKCggImJkZl9jbWFwX2NoYXJfbmV4dDogY2hhcmNvZGUgMHgleCA+IDMyYml0IEFQSSIgKSk7CisgICAgICBGVF9UUkFDRTEoKCAiYmRmX2NtYXBfY2hhcl9uZXh0OiBjaGFyY29kZSAweCVseCA+IDMyYml0IEFQSSIsCisgICAgICAgICAgICAgICAgICBjaGFyY29kZSApKTsKICAgICAgICphY2hhcmNvZGUgPSAwOwogICAgICAgLyogWFhYOiByZXN1bHQgc2hvdWxkIGJlIGNoYW5nZWQgdG8gaW5kaWNhdGUgYW4gb3ZlcmZsb3cgZXJyb3IgKi8KICAgICB9CkBAIC00MDIsMTAgKzQwMiwxMCBAQAogICAgICAgYmRmX3Byb3BlcnR5X3QqICBwcm9wID0gTlVMTDsKIAogCi0gICAgICBGVF9UUkFDRTQoKCAiICBudW1iZXIgb2YgZ2x5cGhzOiBhbGxvY2F0ZWQgJWQgKHVzZWQgJWQpXG4iLAorICAgICAgRlRfVFJBQ0U0KCggIiAgbnVtYmVyIG9mIGdseXBoczogYWxsb2NhdGVkICVsZCAodXNlZCAlbGQpXG4iLAogICAgICAgICAgICAgICAgICAgZm9udC0+Z2x5cGhzX3NpemUsCiAgICAgICAgICAgICAgICAgICBmb250LT5nbHlwaHNfdXNlZCApKTsKLSAgICAgIEZUX1RSQUNFNCgoICIgIG51bWJlciBvZiB1bmVuY29kZWQgZ2x5cGhzOiBhbGxvY2F0ZWQgJWQgKHVzZWQgJWQpXG4iLAorICAgICAgRlRfVFJBQ0U0KCggIiAgbnVtYmVyIG9mIHVuZW5jb2RlZCBnbHlwaHM6IGFsbG9jYXRlZCAlbGQgKHVzZWQgJWxkKVxuIiwKICAgICAgICAgICAgICAgICAgIGZvbnQtPnVuZW5jb2RlZF9zaXplLAogICAgICAgICAgICAgICAgICAgZm9udC0+dW5lbmNvZGVkX3VzZWQgKSk7CiAKQEAgLTQ1NywxMyArNDU3LDEzIEBACiAgICAgICAgIGlmICggZm9udC0+Zm9udF9hc2NlbnQgPiAweDdGRkYgfHwgZm9udC0+Zm9udF9hc2NlbnQgPCAtMHg3RkZGICkKICAgICAgICAgewogICAgICAgICAgIGZvbnQtPmZvbnRfYXNjZW50ID0gZm9udC0+Zm9udF9hc2NlbnQgPCAwID8gLTB4N0ZGRiA6IDB4N0ZGRjsKLSAgICAgICAgICBGVF9UUkFDRTAoKCAiQkRGX0ZhY2VfSW5pdDogY2xhbXBpbmcgZm9udCBhc2NlbnQgdG8gdmFsdWUgJWRcbiIsCisgICAgICAgICAgRlRfVFJBQ0UwKCggIkJERl9GYWNlX0luaXQ6IGNsYW1waW5nIGZvbnQgYXNjZW50IHRvIHZhbHVlICVsZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICBmb250LT5mb250X2FzY2VudCApKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIGZvbnQtPmZvbnRfZGVzY2VudCA+IDB4N0ZGRiB8fCBmb250LT5mb250X2Rlc2NlbnQgPCAtMHg3RkZGICkKICAgICAgICAgewogICAgICAgICAgIGZvbnQtPmZvbnRfZGVzY2VudCA9IGZvbnQtPmZvbnRfZGVzY2VudCA8IDAgPyAtMHg3RkZGIDogMHg3RkZGOwotICAgICAgICAgIEZUX1RSQUNFMCgoICJCREZfRmFjZV9Jbml0OiBjbGFtcGluZyBmb250IGRlc2NlbnQgdG8gdmFsdWUgJWRcbiIsCisgICAgICAgICAgRlRfVFJBQ0UwKCggIkJERl9GYWNlX0luaXQ6IGNsYW1waW5nIGZvbnQgZGVzY2VudCB0byB2YWx1ZSAlbGRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgZm9udC0+Zm9udF9kZXNjZW50ICkpOwogICAgICAgICB9CiAKQEAgLTUwNCw3ICs1MDQsNyBAQAogICAgICAgICAgICAgICAgcHJvcC0+dmFsdWUubCA8IC0weDUwNEMyTCApCiAgICAgICAgICAgewogICAgICAgICAgICAgYnNpemUtPnNpemUgPSAweDdGRkY7Ci0gICAgICAgICAgICBGVF9UUkFDRTAoKCAiQkRGX0ZhY2VfSW5pdDogY2xhbXBpbmcgcG9pbnQgc2l6ZSB0byB2YWx1ZSAlZFxuIiwKKyAgICAgICAgICAgIEZUX1RSQUNFMCgoICJCREZfRmFjZV9Jbml0OiBjbGFtcGluZyBwb2ludCBzaXplIHRvIHZhbHVlICVsZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGJzaXplLT5zaXplICkpOwogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCkBAIC01MTcsNyArNTE3LDcgQEAKICAgICAgICAgICBpZiAoIGZvbnQtPnBvaW50X3NpemUgPiAweDdGRkYgKQogICAgICAgICAgIHsKICAgICAgICAgICAgIGJzaXplLT5zaXplID0gMHg3RkZGOwotICAgICAgICAgICAgRlRfVFJBQ0UwKCggIkJERl9GYWNlX0luaXQ6IGNsYW1waW5nIHBvaW50IHNpemUgdG8gdmFsdWUgJWRcbiIsCisgICAgICAgICAgICBGVF9UUkFDRTAoKCAiQkRGX0ZhY2VfSW5pdDogY2xhbXBpbmcgcG9pbnQgc2l6ZSB0byB2YWx1ZSAlbGRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBic2l6ZS0+c2l6ZSApKTsKICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQpAQCAtNTM5LDcgKzUzOSw3IEBACiAgICAgICAgICAgaWYgKCBwcm9wLT52YWx1ZS5sID4gMHg3RkZGIHx8IHByb3AtPnZhbHVlLmwgPCAtMHg3RkZGICkKICAgICAgICAgICB7CiAgICAgICAgICAgICBic2l6ZS0+eV9wcGVtID0gMHg3RkZGIDw8IDY7Ci0gICAgICAgICAgICBGVF9UUkFDRTAoKCAiQkRGX0ZhY2VfSW5pdDogY2xhbXBpbmcgcGl4ZWwgc2l6ZSB0byB2YWx1ZSAlZFxuIiwKKyAgICAgICAgICAgIEZUX1RSQUNFMCgoICJCREZfRmFjZV9Jbml0OiBjbGFtcGluZyBwaXhlbCBzaXplIHRvIHZhbHVlICVsZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGJzaXplLT55X3BwZW0gKSk7CiAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UKQEAgLTYxNSw3ICs2MTUsNyBAQAogICAgICAgICBmb3IgKCBuID0gMDsgbiA8IGZvbnQtPmdseXBoc19zaXplOyBuKysgKQogICAgICAgICB7CiAgICAgICAgICAgKGZhY2UtPmVuX3RhYmxlW25dKS5lbmMgPSBjdXJbbl0uZW5jb2Rpbmc7Ci0gICAgICAgICAgRlRfVFJBQ0U0KCggIiAgaWR4ICVkLCB2YWwgMHglbFhcbiIsIG4sIGN1cltuXS5lbmNvZGluZyApKTsKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiICBpZHggJWxkLCB2YWwgMHglbFhcbiIsIG4sIGN1cltuXS5lbmNvZGluZyApKTsKICAgICAgICAgICAoZmFjZS0+ZW5fdGFibGVbbl0pLmdseXBoID0gKEZUX1VTaG9ydCluOwogCiAgICAgICAgICAgaWYgKCBjdXJbbl0uZW5jb2RpbmcgPT0gZm9udC0+ZGVmYXVsdF9jaGFyICkKQEAgLTYyNCw3ICs2MjQsNyBAQAogICAgICAgICAgICAgICBmYWNlLT5kZWZhdWx0X2dseXBoID0gKEZUX1VJbnQpbjsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgRlRfVFJBQ0UxKCggIkJERl9GYWNlX0luaXQ6IgotICAgICAgICAgICAgICAgICAgICAgICAgICAiIGlkeCAlZCBpcyB0b28gbGFyZ2UgZm9yIHRoaXMgc3lzdGVtXG4iLCBuICkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAiIGlkeCAlbGQgaXMgdG9vIGxhcmdlIGZvciB0aGlzIHN5c3RlbVxuIiwgbiApKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTgyNSw3ICs4MjUsNyBAQAogICAgIGJpdG1hcC0+cm93cyAgPSBnbHlwaC5iYnguaGVpZ2h0OwogICAgIGJpdG1hcC0+d2lkdGggPSBnbHlwaC5iYngud2lkdGg7CiAgICAgaWYgKCBnbHlwaC5icHIgPiBGVF9JTlRfTUFYICkKLSAgICAgIEZUX1RSQUNFMSgoICJCREZfR2x5cGhfTG9hZDogdG9vIGxhcmdlIHBpdGNoICVkIGlzIHRydW5jYXRlZFxuIiwKKyAgICAgIEZUX1RSQUNFMSgoICJCREZfR2x5cGhfTG9hZDogdG9vIGxhcmdlIHBpdGNoICVsZCBpcyB0cnVuY2F0ZWRcbiIsCiAgICAgICAgICAgICAgICAgICAgZ2x5cGguYnByICkpOwogICAgIGJpdG1hcC0+cGl0Y2ggPSAoaW50KWdseXBoLmJwcjsgLyogc2FtZSBhcyBGVF9CaXRtYXAucGl0Y2ggKi8KIApAQCAtOTAyLDcgKzkwMiw4IEBACiAgICAgICAgIGlmICggcHJvcC0+dmFsdWUubCA+IDB4N0ZGRkZGRkZMIHx8IHByb3AtPnZhbHVlLmwgPCAoIC0xIC0gMHg3RkZGRkZGRkwgKSApCiAgICAgICAgIHsKICAgICAgICAgICBGVF9UUkFDRTEoKCAiYmRmX2dldF9iZGZfcHJvcGVydHk6IgotICAgICAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIGludGVnZXIgMHgleCBpcyB0cnVuY2F0ZWRcbiIgKSk7CisgICAgICAgICAgICAgICAgICAgICAgIiB0b28gbGFyZ2UgaW50ZWdlciAweCVseCBpcyB0cnVuY2F0ZWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgcHJvcC0+dmFsdWUubCApKTsKICAgICAgICAgfQogICAgICAgICBhcHJvcGVydHktPnR5cGUgICAgICA9IEJERl9QUk9QRVJUWV9UWVBFX0lOVEVHRVI7CiAgICAgICAgIGFwcm9wZXJ0eS0+dS5pbnRlZ2VyID0gKEZUX0ludDMyKXByb3AtPnZhbHVlLmw7CkBAIC05MTIsNyArOTEzLDggQEAKICAgICAgICAgaWYgKCBwcm9wLT52YWx1ZS51bCA+IDB4RkZGRkZGRkZVTCApCiAgICAgICAgIHsKICAgICAgICAgICBGVF9UUkFDRTEoKCAiYmRmX2dldF9iZGZfcHJvcGVydHk6IgotICAgICAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIGNhcmRpbmFsIDB4JXggaXMgdHJ1bmNhdGVkXG4iICkpOworICAgICAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIGNhcmRpbmFsIDB4JWx4IGlzIHRydW5jYXRlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBwcm9wLT52YWx1ZS51bCApKTsKICAgICAgICAgfQogICAgICAgICBhcHJvcGVydHktPnR5cGUgICAgICAgPSBCREZfUFJPUEVSVFlfVFlQRV9DQVJESU5BTDsKICAgICAgICAgYXByb3BlcnR5LT51LmNhcmRpbmFsID0gKEZUX1VJbnQzMilwcm9wLT52YWx1ZS51bDsKZGlmZiAtLWdpdCBhL3NyYy9iZGYvYmRmZHJpdnIuaCBiL3NyYy9iZGYvYmRmZHJpdnIuaAppbmRleCBiMzdiODRlLi41NGFhYTMzIDEwMDY0NAotLS0gYS9zcmMvYmRmL2JkZmRyaXZyLmgKKysrIGIvc3JjL2JkZi9iZGZkcml2ci5oCkBAIC0yOCw4ICsyOCw3IEBACiAjaWZuZGVmIEJERkRSSVZSX0hfCiAjZGVmaW5lIEJERkRSSVZSX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfRFJJVkVSX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRydi5oPgogCiAjaW5jbHVkZSAiYmRmLmgiCiAKZGlmZiAtLWdpdCBhL3NyYy9iZGYvYmRmZXJyb3IuaCBiL3NyYy9iZGYvYmRmZXJyb3IuaAppbmRleCBkYmU0MWMwLi5jMWI1NDQ0IDEwMDY0NAotLS0gYS9zcmMvYmRmL2JkZmVycm9yLmgKKysrIGIvc3JjL2JkZi9iZGZlcnJvci5oCkBAIC0yOSw3ICsyOSw3IEBACiAjaWZuZGVmIEJERkVSUk9SX0hfCiAjZGVmaW5lIEJERkVSUk9SX0hfCiAKLSNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kZXJyLmg+CiAKICN1bmRlZiBGVEVSUk9SU19IXwogCkBAIC0zNyw3ICszNyw3IEBACiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIEJERl9FcnJfCiAjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfQkRGCiAKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KIAogI2VuZGlmIC8qIEJERkVSUk9SX0hfICovCiAKZGlmZiAtLWdpdCBhL3NyYy9iZGYvYmRmbGliLmMgYi9zcmMvYmRmL2JkZmxpYi5jCmluZGV4IDYzODEzZjcuLmE0ZGRiOWEgMTAwNjQ0Ci0tLSBhL3NyYy9iZGYvYmRmbGliLmMKKysrIGIvc3JjL2JkZi9iZGZsaWIuYwpAQCAtMzEsMTIgKzMxLDExIEBACiAgICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogCi0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KIAogI2luY2x1ZGUgImJkZi5oIgogI2luY2x1ZGUgImJkZmVycm9yLmgiCmRpZmYgLS1naXQgYS9zcmMvYnppcDIvSmFtZmlsZSBiL3NyYy9iemlwMi9KYW1maWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yjc3OTE2Li4wMDAwMDAwCi0tLSBhL3NyYy9iemlwMi9KYW1maWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyBGcmVlVHlwZSAyIHNyYy9iemlwMiBKYW1maWxlCi0jCi0jIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IGJ5Ci0jIEpvZWwgS2xpbmdoZWQKLSMKLSMgYmFzZWQgb24gYHNyYy9sencvSmFtZmlsZScKLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKLSMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAotIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQotIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAotIyBmdWxseS4KLQotU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIGJ6aXAyIDsKLQotTGlicmFyeSAgJChGVDJfTElCKSA6IGZ0YnppcDIuYyA7Ci0KLSMgZW5kIG9mIHNyYy9iemlwMiBKYW1maWxlCmRpZmYgLS1naXQgYS9zcmMvYnppcDIvZnRiemlwMi5jIGIvc3JjL2J6aXAyL2Z0YnppcDIuYwppbmRleCAxZmRhNTliLi40MTFjNWQyIDEwMDY0NAotLS0gYS9zcmMvYnppcDIvZnRiemlwMi5jCisrKyBiL3NyYy9iemlwMi9mdGJ6aXAyLmMKQEAgLTgsNyArOCw3IEBACiAgKiBwYXJzZSBjb21wcmVzc2VkIFBDRiBmb250cywgYXMgZm91bmQgd2l0aCBtYW55IFgxMSBzZXJ2ZXIKICAqIGRpc3RyaWJ1dGlvbnMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIGJ5CiAgKiBKb2VsIEtsaW5naGVkLgogICoKICAqIGJhc2VkIG9uIGBzcmMvZ3ppcC9mdGd6aXAuYycKQEAgLTIyLDE1ICsyMiwxNCBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9NRU1PUllfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0JaSVAyX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0YnppcDIuaD4KICNpbmNsdWRlIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0gKIAogCi0jaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdG1vZGVyci5oPgogCiAjdW5kZWYgRlRFUlJPUlNfSF8KIApAQCAtMzgsNyArMzcsNyBAQAogI2RlZmluZSBGVF9FUlJfUFJFRklYICBCemlwMl9FcnJfCiAjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfQnppcDIKIAotI2luY2x1ZGUgRlRfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgogCiAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9CWklQMgpkaWZmIC0tZ2l0IGEvc3JjL2J6aXAyL3J1bGVzLm1rIGIvc3JjL2J6aXAyL3J1bGVzLm1rCmluZGV4IGYzNjVjMWYuLmVlZDBmNGIgMTAwNjQ0Ci0tLSBhL3NyYy9iemlwMi9ydWxlcy5taworKysgYi9zcmMvYnppcDIvcnVsZXMubWsKQEAgLTIsNyArMiw3IEBACiAjIEZyZWVUeXBlIDIgQlpJUDIgc3VwcG9ydCBjb25maWd1cmF0aW9uIHJ1bGVzCiAjCiAKLSMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgYnkKICMgSm9lbCBLbGluZ2hlZC4KICMKICMgYmFzZWQgb24gYHNyYy9sencvcnVsZXMubWsnCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvSmFtZmlsZSBiL3NyYy9jYWNoZS9KYW1maWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWY3MTk2Li4wMDAwMDAwCi0tLSBhL3NyYy9jYWNoZS9KYW1maWxlCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyBGcmVlVHlwZSAyIHNyYy9jYWNoZSBKYW1maWxlCi0jCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IGJ5Ci0jIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKLSMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAotIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQotIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAotIyBmdWxseS4KLQotU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIGNhY2hlIDsKLQotewotICBsb2NhbCAgX3NvdXJjZXMgOwotCi0gIGlmICQoRlQyX01VTFRJKQotICB7Ci0gICAgX3NvdXJjZXMgPSBmdGNiYXNpYwotICAgICAgICAgICAgICAgZnRjY2FjaGUKLSAgICAgICAgICAgICAgIGZ0Y2dseXBoCi0gICAgICAgICAgICAgICBmdGNpbWFnZQotICAgICAgICAgICAgICAgZnRjbWFuYWcKLSAgICAgICAgICAgICAgIGZ0Y2NtYXAKLSAgICAgICAgICAgICAgIGZ0Y21ydQotICAgICAgICAgICAgICAgZnRjc2JpdHMKLSAgICAgICAgICAgICAgIDsKLSAgfQotICBlbHNlCi0gIHsKLSAgICBfc291cmNlcyA9IGZ0Y2FjaGUgOwotICB9Ci0KLSAgTGlicmFyeSAgJChGVDJfTElCKSA6ICQoX3NvdXJjZXMpLmMgOwotfQotCi0jIGVuZCBvZiBzcmMvY2FjaGUgSmFtZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y2FjaGUuYyBiL3NyYy9jYWNoZS9mdGNhY2hlLmMKaW5kZXggYTZhM2U2My4uZTkwZjQ2MyAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2FjaGUuYworKysgYi9zcmMvY2FjaGUvZnRjYWNoZS5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVGhlIEZyZWVUeXBlIENhY2hpbmcgc3ViLXN5c3RlbSAoYm9keSBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNyw3ICsxNyw2IEBACiAKIAogI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KIAogI2luY2x1ZGUgImZ0Y2Jhc2ljLmMiCiAjaW5jbHVkZSAiZnRjY2FjaGUuYyIKZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNiYXNpYy5jIGIvc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMKaW5kZXggYTQ3MzU4NS4uNDNlYTMxNCAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMKKysrIGIvc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUaGUgRnJlZVR5cGUgYmFzaWMgY2FjaGUgaW50ZXJmYWNlIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxMCArMTYsOSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0NBQ0hFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRjYWNoZS5oPgogI2luY2x1ZGUgImZ0Y2dseXBoLmgiCiAjaW5jbHVkZSAiZnRjaW1hZ2UuaCIKICNpbmNsdWRlICJmdGNzYml0cy5oIgpAQCAtMTExLDcgKzExMCw5IEBACiAKICAgICBpZiAoIChGVF9VTG9uZylmYWNlLT5udW1fZ2x5cGhzID4gRlRfVUlOVF9NQVggfHwgMCA+IGZhY2UtPm51bV9nbHlwaHMgKQogICAgICAgRlRfVFJBQ0UxKCggImZ0Y19iYXNpY19mYW1pbHlfZ2V0X2NvdW50OiIKLSAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIG51bWJlciBvZiBnbHlwaHMgaW4gdGhpcyBmYWNlLCB0cnVuY2F0ZWRcbiIsCisgICAgICAgICAgICAgICAgICAiIHRoZSBudW1iZXIgb2YgZ2x5cGhzIGluIHRoaXMgZmFjZSBpcyAlbGQsXG4iCisgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgICAgIiB3aGljaCBpcyB0b28gbXVjaCBhbmQgdGh1cyB0cnVuY2F0ZWRcbiIsCiAgICAgICAgICAgICAgICAgICBmYWNlLT5udW1fZ2x5cGhzICkpOwogCiAgICAgaWYgKCAhZXJyb3IgKQpAQCAtMzk0LDcgKzM5NSw3IEBACiAjaWYgRlRfVUxPTkdfTUFYID4gRlRfVUlOVF9NQVgKICAgICBpZiAoIGxvYWRfZmxhZ3MgPiBGVF9VSU5UX01BWCApCiAgICAgICBGVF9UUkFDRTEoKCAiRlRDX0ltYWdlQ2FjaGVfTG9va3VwU2NhbGVyOiIKLSAgICAgICAgICAgICAgICAgICIgaGlnaGVyIGJpdHMgaW4gbG9hZF9mbGFncyAweCV4IGFyZSBkcm9wcGVkXG4iLAorICAgICAgICAgICAgICAgICAgIiBoaWdoZXIgYml0cyBpbiBsb2FkX2ZsYWdzIDB4JWx4IGFyZSBkcm9wcGVkXG4iLAogICAgICAgICAgICAgICAgICAgbG9hZF9mbGFncyAmIH4oKEZUX1VMb25nKUZUX1VJTlRfTUFYKSApKTsKICNlbmRpZgogCkBAIC01OTQsNyArNTk1LDcgQEAKICNpZiBGVF9VTE9OR19NQVggPiBGVF9VSU5UX01BWAogICAgIGlmICggbG9hZF9mbGFncyA+IEZUX1VJTlRfTUFYICkKICAgICAgIEZUX1RSQUNFMSgoICJGVENfSW1hZ2VDYWNoZV9Mb29rdXBTY2FsZXI6IgotICAgICAgICAgICAgICAgICAgIiBoaWdoZXIgYml0cyBpbiBsb2FkX2ZsYWdzIDB4JXggYXJlIGRyb3BwZWRcbiIsCisgICAgICAgICAgICAgICAgICAiIGhpZ2hlciBiaXRzIGluIGxvYWRfZmxhZ3MgMHglbHggYXJlIGRyb3BwZWRcbiIsCiAgICAgICAgICAgICAgICAgICBsb2FkX2ZsYWdzICYgfigoRlRfVUxvbmcpRlRfVUlOVF9NQVgpICkpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNjYWNoZS5jIGIvc3JjL2NhY2hlL2Z0Y2NhY2hlLmMKaW5kZXggZjM4Y2E0NC4uMWM4ZTBmMyAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2NhY2hlLmMKKysrIGIvc3JjL2NhY2hlL2Z0Y2NhY2hlLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUaGUgRnJlZVR5cGUgaW50ZXJuYWwgY2FjaGUgaW50ZXJmYWNlIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxMCArMTYsOSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSAiZnRjbWFuYWcuaCIKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAogI2luY2x1ZGUgImZ0Y2NiYWNrLmgiCiAjaW5jbHVkZSAiZnRjZXJyb3IuaCIKZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNjYWNoZS5oIGIvc3JjL2NhY2hlL2Z0Y2NhY2hlLmgKaW5kZXggMTQwY2VhZC4uMTE2OThiYiAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2NhY2hlLmgKKysrIGIvc3JjL2NhY2hlL2Z0Y2NhY2hlLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBpbnRlcm5hbCBjYWNoZSBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDcgKzE5LDcgQEAKICNpZm5kZWYgRlRDQ0FDSEVfSF8KICNkZWZpbmUgRlRDQ0FDSEVfSF8KIAotCisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvY29tcGlsZXItbWFjcm9zLmg+CiAjaW5jbHVkZSAiZnRjbXJ1LmgiCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y2NiYWNrLmggYi9zcmMvY2FjaGUvZnRjY2JhY2suaAppbmRleCA5MzIxYmMzLi41NDJhY2IxIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjY2JhY2suaAorKysgYi9zcmMvY2FjaGUvZnRjY2JhY2suaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIENhbGxiYWNrIGZ1bmN0aW9ucyBvZiB0aGUgY2FjaGluZyBzdWItc3lzdGVtIChzcGVjaWZpY2F0aW9uIG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE4LDE0ICsxOCwxNCBAQAogI2lmbmRlZiBGVENDQkFDS19IXwogI2RlZmluZSBGVENDQkFDS19IXwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0NBQ0hFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGNhY2hlLmg+CiAjaW5jbHVkZSAiZnRjbXJ1LmgiCiAjaW5jbHVkZSAiZnRjaW1hZ2UuaCIKICNpbmNsdWRlICJmdGNtYW5hZy5oIgogI2luY2x1ZGUgImZ0Y2dseXBoLmgiCiAjaW5jbHVkZSAiZnRjc2JpdHMuaCIKIAorRlRfQkVHSU5fSEVBREVSCiAKICAgRlRfTE9DQUwoIHZvaWQgKQogICBmdGNfaW5vZGVfZnJlZSggRlRDX05vZGUgICBpbm9kZSwKQEAgLTg1LDYgKzg1LDcgQEAKICAgZnRjX25vZGVfZGVzdHJveSggRlRDX05vZGUgICAgIG5vZGUsCiAgICAgICAgICAgICAgICAgICAgIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICk7CiAKK0ZUX0VORF9IRUFERVIKIAogI2VuZGlmIC8qIEZUQ0NCQUNLX0hfICovCiAKZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNjbWFwLmMgYi9zcmMvY2FjaGUvZnRjY21hcC5jCmluZGV4IDc2YmExMGUuLjQ2OGMwMDggMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNjbWFwLmMKKysrIGIvc3JjL2NhY2hlL2Z0Y2NtYXAuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIENoYXJNYXAgY2FjaGUgKGJvZHkpCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsMTMgKzE2LDEyIEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX0NBQ0hFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0Y2FjaGUuaD4KICNpbmNsdWRlICJmdGNtYW5hZy5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfTUVNT1JZX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogCiAjaW5jbHVkZSAiZnRjY2JhY2suaCIKICNpbmNsdWRlICJmdGNlcnJvci5oIgpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y2Vycm9yLmggYi9zcmMvY2FjaGUvZnRjZXJyb3IuaAppbmRleCBlMmQ2NDE3Li5iZWRmZDI4IDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjZXJyb3IuaAorKysgYi9zcmMvY2FjaGUvZnRjZXJyb3IuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIENhY2hpbmcgc3ViLXN5c3RlbSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIEZUQ0VSUk9SX0hfCiAjZGVmaW5lIEZUQ0VSUk9SX0hfCiAKLSNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kZXJyLmg+CiAKICN1bmRlZiBGVEVSUk9SU19IXwogCkBAIC0zNCw3ICszNCw3IEBACiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIEZUQ19FcnJfCiAjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfQ2FjaGUKIAotI2luY2x1ZGUgRlRfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgogCiAjZW5kaWYgLyogRlRDRVJST1JfSF8gKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y2dseXBoLmMgYi9zcmMvY2FjaGUvZnRjZ2x5cGguYwppbmRleCAyYTBlOTdkLi43ZjU0MzhhIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjZ2x5cGguYworKysgYi9zcmMvY2FjaGUvZnRjZ2x5cGguYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIEdseXBoIEltYWdlIChGVF9HbHlwaCkgY2FjaGUgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDExICsxNiwxMCBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlIEZUX0NBQ0hFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGNhY2hlLmg+CiAjaW5jbHVkZSAiZnRjZ2x5cGguaCIKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KIAogI2luY2x1ZGUgImZ0Y2NiYWNrLmgiCiAjaW5jbHVkZSAiZnRjZXJyb3IuaCIKZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNnbHlwaC5oIGIvc3JjL2NhY2hlL2Z0Y2dseXBoLmgKaW5kZXggNWExZjBlMi4uNTYyOTU0NSAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2dseXBoLmgKKysrIGIvc3JjL2NhY2hlL2Z0Y2dseXBoLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBhYnN0cmFjdCBnbHlwaCBjYWNoZSAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTE3LDcgKzExNyw2IEBACiAjZGVmaW5lIEZUQ0dMWVBIX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSAiZnRjbWFuYWcuaCIKIAogCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjaW1hZ2UuYyBiL3NyYy9jYWNoZS9mdGNpbWFnZS5jCmluZGV4IDllNjRkNTEuLjU4ZWJhZDggMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNpbWFnZS5jCisrKyBiL3NyYy9jYWNoZS9mdGNpbWFnZS5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgSW1hZ2UgY2FjaGUgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDExICsxNiwxMCBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9DQUNIRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRjYWNoZS5oPgogI2luY2x1ZGUgImZ0Y2ltYWdlLmgiCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9NRU1PUllfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KIAogI2luY2x1ZGUgImZ0Y2NiYWNrLmgiCiAjaW5jbHVkZSAiZnRjZXJyb3IuaCIKZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNpbWFnZS5oIGIvc3JjL2NhY2hlL2Z0Y2ltYWdlLmgKaW5kZXggZGNiMTAxZi4uYTQwMDc4OCAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2ltYWdlLmgKKysrIGIvc3JjL2NhY2hlL2Z0Y2ltYWdlLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBHZW5lcmljIEltYWdlIGNhY2hlIChzcGVjaWZpY2F0aW9uKQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTM2LDggKzM2LDcgQEAKICNkZWZpbmUgRlRDSU1BR0VfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0NBQ0hFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGNhY2hlLmg+CiAjaW5jbHVkZSAiZnRjZ2x5cGguaCIKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjbWFuYWcuYyBiL3NyYy9jYWNoZS9mdGNtYW5hZy5jCmluZGV4IGJkNTg1OTYuLjQzNmQ0MWYgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNtYW5hZy5jCisrKyBiL3NyYy9jYWNoZS9mdGNtYW5hZy5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgQ2FjaGUgTWFuYWdlciAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsMTIgKzE2LDExIEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0NBQ0hFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGNhY2hlLmg+CiAjaW5jbHVkZSAiZnRjbWFuYWcuaCIKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfU0laRVNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdHNpemVzLmg+CiAKICNpbmNsdWRlICJmdGNjYmFjay5oIgogI2luY2x1ZGUgImZ0Y2Vycm9yLmgiCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjbWFuYWcuaCBiL3NyYy9jYWNoZS9mdGNtYW5hZy5oCmluZGV4IDYwYzY2YzguLjZjNmVjNjggMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNtYW5hZy5oCisrKyBiL3NyYy9jYWNoZS9mdGNtYW5hZy5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgQ2FjaGUgTWFuYWdlciAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtNjMsOCArNjMsNyBAQAogI2RlZmluZSBGVENNQU5BR19IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfQ0FDSEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0Y2FjaGUuaD4KICNpbmNsdWRlICJmdGNtcnUuaCIKICNpbmNsdWRlICJmdGNjYWNoZS5oIgogCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjbXJ1LmMgYi9zcmMvY2FjaGUvZnRjbXJ1LmMKaW5kZXggMThhN2I4MC4uOGZlZWQ0NSAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y21ydS5jCisrKyBiL3NyYy9jYWNoZS9mdGNtcnUuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIE1SVSBzdXBwb3J0IChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxMSArMTYsMTAgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfQ0FDSEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0Y2FjaGUuaD4KICNpbmNsdWRlICJmdGNtcnUuaCIKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAogI2luY2x1ZGUgImZ0Y2Vycm9yLmgiCiAKZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNtcnUuaCBiL3NyYy9jYWNoZS9mdGNtcnUuaAppbmRleCA1ODcyMWVkLi5hYzRmOWIxIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjbXJ1LmgKKysrIGIvc3JjL2NhY2hlL2Z0Y21ydS5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgU2ltcGxlIE1SVSBsaXN0LWNhY2hlIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC00NCw4ICs0NCw4IEBACiAjZGVmaW5lIEZUQ01SVV9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvY29tcGlsZXItbWFjcm9zLmg+CiAKICNpZmRlZiBGUkVFVFlQRV9ICiAjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y3NiaXRzLmMgYi9zcmMvY2FjaGUvZnRjc2JpdHMuYwppbmRleCAwNmI0NmM4Li5lMGRiOTMwIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjc2JpdHMuYworKysgYi9zcmMvY2FjaGUvZnRjc2JpdHMuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIHNiaXRzIG1hbmFnZXIgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDEyICsxNiwxMSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9DQUNIRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRjYWNoZS5oPgogI2luY2x1ZGUgImZ0Y3NiaXRzLmgiCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZXJyb3JzLmg+CiAKICNpbmNsdWRlICJmdGNjYmFjay5oIgogI2luY2x1ZGUgImZ0Y2Vycm9yLmgiCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjc2JpdHMuaCBiL3NyYy9jYWNoZS9mdGNzYml0cy5oCmluZGV4IGYxYjcxYzIuLjQ2Zjc5N2UgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNzYml0cy5oCisrKyBiL3NyYy9jYWNoZS9mdGNzYml0cy5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQSBzbWFsbC1iaXRtYXAgY2FjaGUgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDggKzIwLDcgQEAKICNkZWZpbmUgRlRDU0JJVFNfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0NBQ0hFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGNhY2hlLmg+CiAjaW5jbHVkZSAiZnRjZ2x5cGguaCIKIAogCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvcnVsZXMubWsgYi9zcmMvY2FjaGUvcnVsZXMubWsKaW5kZXggMTYxOGQ5OC4uNDczOGI1MSAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL3J1bGVzLm1rCisrKyBiL3NyYy9jYWNoZS9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMjAwMC0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwMC0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9jZmYvSmFtZmlsZSBiL3NyYy9jZmYvSmFtZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBmNDljZS4uMDAwMDAwMAotLS0gYS9zcmMvY2ZmL0phbWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jIEZyZWVUeXBlIDIgc3JjL2NmZiBKYW1maWxlCi0jCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IGJ5Ci0jIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKLSMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAotIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQotIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAotIyBmdWxseS4KLQotU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIGNmZiA7Ci0KLXsKLSAgbG9jYWwgIF9zb3VyY2VzIDsKLQotICBpZiAkKEZUMl9NVUxUSSkKLSAgewotICAgIF9zb3VyY2VzID0gY2ZmY21hcAotICAgICAgICAgICAgICAgY2ZmZHJpdnIKLSAgICAgICAgICAgICAgIGNmZmdsb2FkCi0gICAgICAgICAgICAgICBjZmZsb2FkCi0gICAgICAgICAgICAgICBjZmZvYmpzCi0gICAgICAgICAgICAgICBjZmZwYXJzZQotICAgICAgICAgICAgICAgY2ZmcGljCi0gICAgICAgICAgICAgICA7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgX3NvdXJjZXMgPSBjZmYgOwotICB9Ci0KLSAgTGlicmFyeSAgJChGVDJfTElCKSA6ICQoX3NvdXJjZXMpLmMgOwotfQotCi0jIGVuZCBvZiBzcmMvY2ZmIEphbWZpbGUKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmLmMgYi9zcmMvY2ZmL2NmZi5jCmluZGV4IGEzNGJhOWIuLjBmYTZjODcgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmLmMKKysrIGIvc3JjL2NmZi9jZmYuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIE9wZW5UeXBlIGRyaXZlciBjb21wb25lbnQgKGJvZHkgb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTcsNyArMTcsNiBAQAogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAKICNpbmNsdWRlICJjZmZjbWFwLmMiCiAjaW5jbHVkZSAiY2ZmZHJpdnIuYyIKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmY21hcC5jIGIvc3JjL2NmZi9jZmZjbWFwLmMKaW5kZXggMTVjYzk0Yy4uNmQxNmVkNCAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZjbWFwLmMKKysrIGIvc3JjL2NmZi9jZmZjbWFwLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBDRkYgY2hhcmFjdGVyIG1hcHBpbmcgdGFibGUgKGNtYXApIHN1cHBvcnQgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDggKzE2LDcgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KICNpbmNsdWRlICJjZmZjbWFwLmgiCiAjaW5jbHVkZSAiY2ZmbG9hZC5oIgogCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmNtYXAuaCBiL3NyYy9jZmYvY2ZmY21hcC5oCmluZGV4IDA3MzY2YmMuLjY5ZmFiOGQgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmY21hcC5oCisrKyBiL3NyYy9jZmYvY2ZmY21hcC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQ0ZGIGNoYXJhY3RlciBtYXBwaW5nIHRhYmxlIChjbWFwKSBzdXBwb3J0IChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOSw3ICsxOSw3IEBACiAjaWZuZGVmIENGRkNNQVBfSF8KICNkZWZpbmUgQ0ZGQ01BUF9IXwogCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9DRkZfT0JKRUNUU19UWVBFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvY2Zmb3R5cGVzLmg+CiAKIEZUX0JFR0lOX0hFQURFUgogCkBAIC00Myw3ICs0Myw3IEBACiAgIH0gQ0ZGX0NNYXBTdGRSZWM7CiAKIAotICBGVF9ERUNMQVJFX0NNQVBfQ0xBU1MoY2ZmX2NtYXBfZW5jb2RpbmdfY2xhc3NfcmVjKQorICBGVF9ERUNMQVJFX0NNQVBfQ0xBU1MoIGNmZl9jbWFwX2VuY29kaW5nX2NsYXNzX3JlYyApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTU2LDcgKzU2LDcgQEAKIAogICAvKiB1bmljb2RlIChzeW50aGV0aWMpIGNtYXBzICovCiAKLSAgRlRfREVDTEFSRV9DTUFQX0NMQVNTKGNmZl9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjKQorICBGVF9ERUNMQVJFX0NNQVBfQ0xBU1MoIGNmZl9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjICkKIAogCiBGVF9FTkRfSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmRyaXZyLmMgYi9zcmMvY2ZmL2NmZmRyaXZyLmMKaW5kZXggMjMyNDk4OS4uNDg2YWIyNCAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZkcml2ci5jCisrKyBiL3NyYy9jZmYvY2ZmZHJpdnIuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIE9wZW5UeXBlIGZvbnQgZHJpdmVyIGltcGxlbWVudGF0aW9uIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxOCArMTYsMTcgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9QUk9QU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX0NJRF9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfSU5GT19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRV9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1RUX0NNQVBfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9DRkZfVEFCTEVfTE9BRF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZm50Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHBzcHJvcC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBvc3RubS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjZmZ0bC5oPgogCiAjaW5jbHVkZSAiY2ZmZHJpdnIuaCIKICNpbmNsdWRlICJjZmZnbG9hZC5oIgpAQCAtMzcsMTYgKzM2LDE2IEBACiAjaW5jbHVkZSAiY2Zmb2Jqcy5oIgogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAotI2luY2x1ZGUgRlRfU0VSVklDRV9NVUxUSVBMRV9NQVNURVJTX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfTUVUUklDU19WQVJJQVRJT05TX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtZXRyaWMuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiY2ZmZXJycy5oIgogCi0jaW5jbHVkZSBGVF9TRVJWSUNFX0ZPTlRfRk9STUFUX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSAotI2luY2x1ZGUgRlRfRFJJVkVSX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmZudGZtdC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRkcml2ZXIuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzM4LDcgKzczNyw3IEBACiAgICAgICB7CiAgICAgICAgIGlmICggZGljdC0+Y2lkX3N1cHBsZW1lbnQgPCBGVF9JTlRfTUlOIHx8CiAgICAgICAgICAgICAgZGljdC0+Y2lkX3N1cHBsZW1lbnQgPiBGVF9JTlRfTUFYICkKLSAgICAgICAgICBGVF9UUkFDRTEoKCAiY2ZmX2dldF9yb3M6IHRvbyBsYXJnZSBzdXBwbGVtZW50ICVkIGlzIHRydW5jYXRlZFxuIiwKKyAgICAgICAgICBGVF9UUkFDRTEoKCAiY2ZmX2dldF9yb3M6IHRvbyBsYXJnZSBzdXBwbGVtZW50ICVsZCBpcyB0cnVuY2F0ZWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgZGljdC0+Y2lkX3N1cHBsZW1lbnQgKSk7CiAgICAgICAgICpzdXBwbGVtZW50ID0gKEZUX0ludClkaWN0LT5jaWRfc3VwcGxlbWVudDsKICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmZHJpdnIuaCBiL3NyYy9jZmYvY2ZmZHJpdnIuaAppbmRleCBmMmJiY2ZlLi5kMTk4ZGQzIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZmRyaXZyLmgKKysrIGIvc3JjL2NmZi9jZmZkcml2ci5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgSGlnaC1sZXZlbCBPcGVuVHlwZSBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw3IEBACiAjZGVmaW5lIENGRkRSSVZFUl9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfRFJJVkVSX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRydi5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZlcnJzLmggYi9zcmMvY2ZmL2NmZmVycnMuaAppbmRleCA3OGQ0N2ExLi41YjAwYTNmIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZmVycnMuaAorKysgYi9zcmMvY2ZmL2NmZmVycnMuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIENGRiBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZuZGVmIENGRkVSUlNfSF8KICNkZWZpbmUgQ0ZGRVJSU19IXwogCi0jaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdG1vZGVyci5oPgogCiAjdW5kZWYgRlRFUlJPUlNfSF8KIApAQCAtMzQsNyArMzQsNyBAQAogI2RlZmluZSBGVF9FUlJfQkFTRSAgICBGVF9Nb2RfRXJyX0NGRgogCiAKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KIAogI2VuZGlmIC8qIENGRkVSUlNfSF8gKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZnbG9hZC5jIGIvc3JjL2NmZi9jZmZnbG9hZC5jCmluZGV4IDM2YWE3ZDEuLmZlZWUzOGEgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmZ2xvYWQuYworKysgYi9zcmMvY2ZmL2NmZmdsb2FkLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBPcGVuVHlwZSBHbHlwaCBMb2FkZXIgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDE0ICsxNiwxMyBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0ZOVF9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKLSNpbmNsdWRlIEZUX09VVExJTkVfSAotI2luY2x1ZGUgRlRfRFJJVkVSX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZm50Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdG91dGxuLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRkcml2ZXIuaD4KIAogI2luY2x1ZGUgImNmZmxvYWQuaCIKICNpbmNsdWRlICJjZmZnbG9hZC5oIgpAQCAtMjA3LDggKzIwNiw4IEBACiAgICAgUFNBdXhfU2VydmljZSAgICAgICAgICAgIHBzYXV4ICAgICAgICAgPSAoUFNBdXhfU2VydmljZSlmYWNlLT5wc2F1eDsKICAgICBjb25zdCBDRkZfRGVjb2Rlcl9GdW5jcyAgZGVjb2Rlcl9mdW5jcyA9IHBzYXV4LT5jZmZfZGVjb2Rlcl9mdW5jczsKIAotICAgIEZUX01hdHJpeCAgICBmb250X21hdHJpeDsKLSAgICBGVF9WZWN0b3IgICAgZm9udF9vZmZzZXQ7CisgICAgRlRfTWF0cml4ICBmb250X21hdHJpeDsKKyAgICBGVF9WZWN0b3IgIGZvbnRfb2Zmc2V0OwogCiAKICAgICBmb3JjZV9zY2FsaW5nID0gRkFMU0U7CkBAIC0zNjQsNyArMzYzLDYgQEAKICAgICAgIHRvcF91cG0gPSAoRlRfTG9uZyljZmYtPnRvcF9mb250LmZvbnRfZGljdC51bml0c19wZXJfZW07CiAgICAgICBzdWJfdXBtID0gKEZUX0xvbmcpY2ZmLT5zdWJmb250c1tmZF9pbmRleF0tPmZvbnRfZGljdC51bml0c19wZXJfZW07CiAKLQogICAgICAgZm9udF9tYXRyaXggPSBjZmYtPnN1YmZvbnRzW2ZkX2luZGV4XS0+Zm9udF9kaWN0LmZvbnRfbWF0cml4OwogICAgICAgZm9udF9vZmZzZXQgPSBjZmYtPnN1YmZvbnRzW2ZkX2luZGV4XS0+Zm9udF9kaWN0LmZvbnRfb2Zmc2V0OwogCkBAIC0zOTksNyArMzk3LDYgQEAKICAgICAgIFBTX0RyaXZlciAgZHJpdmVyID0gKFBTX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggZmFjZSApOwogI2VuZGlmCiAKLQogICAgICAgRlRfQnl0ZSogIGNoYXJzdHJpbmc7CiAgICAgICBGVF9VTG9uZyAgY2hhcnN0cmluZ19sZW47CiAKQEAgLTY2NSw4ICs2NjIsMTIgQEAKICAgICAgICAgbWV0cmljcy0+aG9yaUJlYXJpbmdZID0gY2JveC55TWF4OwogCiAgICAgICAgIGlmICggaGFzX3ZlcnRpY2FsX2luZm8gKQorICAgICAgICB7CiAgICAgICAgICAgbWV0cmljcy0+dmVydEJlYXJpbmdYID0gbWV0cmljcy0+aG9yaUJlYXJpbmdYIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlIC8gMjsKKyAgICAgICAgICBtZXRyaWNzLT52ZXJ0QmVhcmluZ1kgPSBGVF9NdWxGaXgoIG1ldHJpY3MtPnZlcnRCZWFyaW5nWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoLT55X3NjYWxlICk7CisgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgaWYgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQgKQpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZnbG9hZC5oIGIvc3JjL2NmZi9jZmZnbG9hZC5oCmluZGV4IDc1NGM1NWEuLjNiMzEyZjQgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmZ2xvYWQuaAorKysgYi9zcmMvY2ZmL2NmZmdsb2FkLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBPcGVuVHlwZSBHbHlwaCBMb2FkZXIgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDkgKzIwLDggQEAKICNkZWZpbmUgQ0ZGR0xPQURfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0NGRl9PQkpFQ1RTX1RZUEVTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2NmZm90eXBlcy5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZsb2FkLmMgYi9zcmMvY2ZmL2NmZmxvYWQuYwppbmRleCAxMmVmZDE4Li43M2QzZWVjIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZmxvYWQuYworKysgYi9zcmMvY2ZmL2NmZmxvYWQuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIE9wZW5UeXBlIGFuZCBDRkYgZGF0YS9wcm9ncmFtIHRhYmxlcyBsb2FkZXIgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDE3ICsxNiwxNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKLSNpbmNsdWRlIEZUX1RZUEUxX1RBQkxFU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWdzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdDF0YWJsZXMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oPgogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAotI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImNmZmxvYWQuaCIKQEAgLTQxMSw3ICs0MTAsNyBAQAogICAgIEZUX0Vycm9yICAgZXJyb3IgICAgID0gRlRfRXJyX09rOwogICAgIEZUX01lbW9yeSAgbWVtb3J5ICAgID0gaWR4LT5zdHJlYW0tPm1lbW9yeTsKIAotICAgIEZUX0J5dGUqKiAgdCAgICAgICAgID0gTlVMTDsKKyAgICBGVF9CeXRlKiogIHRibCAgICAgICA9IE5VTEw7CiAgICAgRlRfQnl0ZSogICBuZXdfYnl0ZXMgPSBOVUxMOwogICAgIEZUX1VMb25nICAgbmV3X3NpemU7CiAKQEAgLTQyOCwxMSArNDI3LDExIEBACiAgICAgbmV3X3NpemUgPSBpZHgtPmRhdGFfc2l6ZSArIGlkeC0+Y291bnQ7CiAKICAgICBpZiAoIGlkeC0+Y291bnQgPiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgIUZUX05FV19BUlJBWSggdCwgaWR4LT5jb3VudCArIDEgKSAgICAgICAgICAgICYmCisgICAgICAgICAhRlRfTkVXX0FSUkFZKCB0YmwsIGlkeC0+Y291bnQgKyAxICkgICAgICAgICAgJiYKICAgICAgICAgICggIXBvb2wgfHwgIUZUX0FMTE9DKCBuZXdfYnl0ZXMsIG5ld19zaXplICkgKSApCiAgICAgewogICAgICAgRlRfVUxvbmcgIG4sIGN1cl9vZmZzZXQ7Ci0gICAgICBGVF9VTG9uZyAgZXh0cmEgPSAwOworICAgICAgRlRfVUxvbmcgIGV4dHJhICAgICA9IDA7CiAgICAgICBGVF9CeXRlKiAgb3JnX2J5dGVzID0gaWR4LT5ieXRlczsKIAogCkBAIC00NDMsMTUgKzQ0MiwxNSBAQAogICAgICAgaWYgKCBjdXJfb2Zmc2V0ICE9IDAgKQogICAgICAgewogICAgICAgICBGVF9UUkFDRTAoKCAiY2ZmX2luZGV4X2dldF9wb2ludGVyczoiCi0gICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBmaXJzdCBvZmZzZXQgdmFsdWUgJWQgc2V0IHRvIHplcm9cbiIsCisgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBmaXJzdCBvZmZzZXQgdmFsdWUgJWxkIHNldCB0byB6ZXJvXG4iLAogICAgICAgICAgICAgICAgICAgICBjdXJfb2Zmc2V0ICkpOwogICAgICAgICBjdXJfb2Zmc2V0ID0gMDsKICAgICAgIH0KIAogICAgICAgaWYgKCAhcG9vbCApCi0gICAgICAgIHRbMF0gPSBvcmdfYnl0ZXMgKyBjdXJfb2Zmc2V0OworICAgICAgICB0YmxbMF0gPSBvcmdfYnl0ZXMgKyBjdXJfb2Zmc2V0OwogICAgICAgZWxzZQotICAgICAgICB0WzBdID0gbmV3X2J5dGVzICsgY3VyX29mZnNldDsKKyAgICAgICAgdGJsWzBdID0gbmV3X2J5dGVzICsgY3VyX29mZnNldDsKIAogICAgICAgZm9yICggbiA9IDE7IG4gPD0gaWR4LT5jb3VudDsgbisrICkKICAgICAgIHsKQEAgLTQ2NSwyMyArNDY0LDI1IEBACiAgICAgICAgICAgbmV4dF9vZmZzZXQgPSBpZHgtPmRhdGFfc2l6ZTsKIAogICAgICAgICBpZiAoICFwb29sICkKLSAgICAgICAgICB0W25dID0gb3JnX2J5dGVzICsgbmV4dF9vZmZzZXQ7CisgICAgICAgICAgdGJsW25dID0gb3JnX2J5dGVzICsgbmV4dF9vZmZzZXQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgIHRbbl0gPSBuZXdfYnl0ZXMgKyBuZXh0X29mZnNldCArIGV4dHJhOworICAgICAgICAgIHRibFtuXSA9IG5ld19ieXRlcyArIG5leHRfb2Zmc2V0ICsgZXh0cmE7CiAKICAgICAgICAgICBpZiAoIG5leHRfb2Zmc2V0ICE9IGN1cl9vZmZzZXQgKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIEZUX01FTV9DT1BZKCB0W24gLSAxXSwgb3JnX2J5dGVzICsgY3VyX29mZnNldCwgdFtuXSAtIHRbbiAtIDFdICk7Ci0gICAgICAgICAgICB0W25dWzBdID0gJ1wwJzsKLSAgICAgICAgICAgIHRbbl0gICArPSAxOworICAgICAgICAgICAgRlRfTUVNX0NPUFkoIHRibFtuIC0gMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgb3JnX2J5dGVzICsgY3VyX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0Ymxbbl0gLSB0YmxbbiAtIDFdICk7CisgICAgICAgICAgICB0Ymxbbl1bMF0gPSAnXDAnOworICAgICAgICAgICAgdGJsW25dICAgKz0gMTsKICAgICAgICAgICAgIGV4dHJhKys7CiAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgY3VyX29mZnNldCA9IG5leHRfb2Zmc2V0OwogICAgICAgfQotICAgICAgKnRhYmxlID0gdDsKKyAgICAgICp0YWJsZSA9IHRibDsKIAogICAgICAgaWYgKCBwb29sICkKICAgICAgICAgKnBvb2wgPSBuZXdfYnl0ZXM7CkBAIC00OTAsNiArNDkxLDExIEBACiAgICAgfQogCiAgIEV4aXQ6CisgICAgaWYgKCBlcnJvciAmJiBuZXdfYnl0ZXMgKQorICAgICAgRlRfRlJFRSggbmV3X2J5dGVzICk7CisgICAgaWYgKCBlcnJvciAmJiB0YmwgKQorICAgICAgRlRfRlJFRSggdGJsICk7CisKICAgICByZXR1cm4gZXJyb3I7CiAgIH0KIApAQCAtNTUzLDggKzU1OSw4IEBACiAgICAgICAgICAgIGlkeC0+ZGF0YV9vZmZzZXQgPiBzdHJlYW0tPnNpemUgLSBvZmYyICsgMSApCiAgICAgICB7CiAgICAgICAgIEZUX0VSUk9SKCggImNmZl9pbmRleF9hY2Nlc3NfZWxlbWVudDoiCi0gICAgICAgICAgICAgICAgICAgIiBvZmZzZXQgdG8gbmV4dCBlbnRyeSAoJWQpIgotICAgICAgICAgICAgICAgICAgICIgZXhjZWVkcyB0aGUgZW5kIG9mIHN0cmVhbSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICIgb2Zmc2V0IHRvIG5leHQgZW50cnkgKCVsZCkiCisgICAgICAgICAgICAgICAgICAgIiBleGNlZWRzIHRoZSBlbmQgb2Ygc3RyZWFtICglbGQpXG4iLAogICAgICAgICAgICAgICAgICAgIG9mZjIsIHN0cmVhbS0+c2l6ZSAtIGlkeC0+ZGF0YV9vZmZzZXQgKyAxICkpOwogICAgICAgICBvZmYyID0gc3RyZWFtLT5zaXplIC0gaWR4LT5kYXRhX29mZnNldCArIDE7CiAgICAgICB9CkBAIC05NzgsNyArOTg0LDcgQEAKICAgICAgICAgICAgIGlmICggZ2x5cGhfc2lkID4gMHhGRkZGTCAtIG5sZWZ0ICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgRlRfRVJST1IoKCAiY2ZmX2NoYXJzZXRfbG9hZDogaW52YWxpZCBTSUQgcmFuZ2UgdHJpbW1lZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiIG5sZWZ0PSVkIC0+ICVkXG4iLCBubGVmdCwgMHhGRkZGTCAtIGdseXBoX3NpZCApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIG5sZWZ0PSVkIC0+ICVsZFxuIiwgbmxlZnQsIDB4RkZGRkwgLSBnbHlwaF9zaWQgKSk7CiAgICAgICAgICAgICAgIG5sZWZ0ID0gKCBGVF9VSW50ICkoIDB4RkZGRkwgLSBnbHlwaF9zaWQgKTsKICAgICAgICAgICAgIH0KIApAQCAtMTk0NSw3ICsxOTUxLDcgQEAKICAgICBpZiAoIHByaXYtPmJsdWVfc2hpZnQgPiAxMDAwIHx8IHByaXYtPmJsdWVfc2hpZnQgPCAwICkKICAgICB7CiAgICAgICBGVF9UUkFDRTIoKCAiY2ZmX2xvYWRfcHJpdmF0ZV9kaWN0OiIKLSAgICAgICAgICAgICAgICAgICIgc2V0dGluZyB1bmxpa2VseSBCbHVlU2hpZnQgdmFsdWUgJWQgdG8gZGVmYXVsdCAoNylcbiIsCisgICAgICAgICAgICAgICAgICAiIHNldHRpbmcgdW5saWtlbHkgQmx1ZVNoaWZ0IHZhbHVlICVsZCB0byBkZWZhdWx0ICg3KVxuIiwKICAgICAgICAgICAgICAgICAgIHByaXYtPmJsdWVfc2hpZnQgKSk7CiAgICAgICBwcml2LT5ibHVlX3NoaWZ0ID0gNzsKICAgICB9CkBAIC0xOTUzLDcgKzE5NTksNyBAQAogICAgIGlmICggcHJpdi0+Ymx1ZV9mdXp6ID4gMTAwMCB8fCBwcml2LT5ibHVlX2Z1enogPCAwICkKICAgICB7CiAgICAgICBGVF9UUkFDRTIoKCAiY2ZmX2xvYWRfcHJpdmF0ZV9kaWN0OiIKLSAgICAgICAgICAgICAgICAgICIgc2V0dGluZyB1bmxpa2VseSBCbHVlRnV6eiB2YWx1ZSAlZCB0byBkZWZhdWx0ICgxKVxuIiwKKyAgICAgICAgICAgICAgICAgICIgc2V0dGluZyB1bmxpa2VseSBCbHVlRnV6eiB2YWx1ZSAlbGQgdG8gZGVmYXVsdCAoMSlcbiIsCiAgICAgICAgICAgICAgICAgICBwcml2LT5ibHVlX2Z1enogKSk7CiAgICAgICBwcml2LT5ibHVlX2Z1enogPSAxOwogICAgIH0KQEAgLTIwNTcsNyArMjA2Myw3IEBACiAgICAgaWYgKCAhZXJyb3IgKQogICAgIHsKICAgICAgIEZUX1RSQUNFNCgoICIgdG9wIGRpY3Rpb25hcnk6XG4iICkpOwotICAgICAgZXJyb3IgPSBjZmZfcGFyc2VyX3J1biggJnBhcnNlciwgZGljdCwgZGljdCArIGRpY3RfbGVuICk7CisgICAgICBlcnJvciA9IGNmZl9wYXJzZXJfcnVuKCAmcGFyc2VyLCBkaWN0LCBGVF9PRkZTRVQoIGRpY3QsIGRpY3RfbGVuICkgKTsKICAgICB9CiAKICAgICAvKiBjbGVhbiB1cCByZWdhcmRsZXNzIG9mIGVycm9yICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmxvYWQuaCBiL3NyYy9jZmYvY2ZmbG9hZC5oCmluZGV4IDQyZDI2OTYuLmZjOTk4ZGIgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmbG9hZC5oCisrKyBiL3NyYy9jZmYvY2ZmbG9hZC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgT3BlblR5cGUgJiBDRkYgZGF0YS9wcm9ncmFtIHRhYmxlcyBsb2FkZXIgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDEwICsyMCw5IEBACiAjZGVmaW5lIENGRkxPQURfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0NGRl9UWVBFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvY2ZmdHlwZXMuaD4KICNpbmNsdWRlICJjZmZwYXJzZS5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0ZGX09CSkVDVFNfVFlQRVNfSCAgLyogZm9yIENGRl9GYWNlICovCisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvY2Zmb3R5cGVzLmg+ICAvKiBmb3IgQ0ZGX0ZhY2UgKi8KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2Zmb2Jqcy5jIGIvc3JjL2NmZi9jZmZvYmpzLmMKaW5kZXggZjc2MjQ1Zi4uZDU1NWQ1MiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZvYmpzLmMKKysrIGIvc3JjL2NmZi9jZmZvYmpzLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBPcGVuVHlwZSBvYmplY3RzIG1hbmFnZXIgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDMyICsxNiwzMSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX0VSUk9SU19ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9JRFNfSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TRk5UX0gKLSNpbmNsdWRlIEZUX0RSSVZFUl9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90dG5hbWVpZC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL3R0dGFncy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NmbnQuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGRyaXZlci5oPgogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAotI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9NRVRSSUNTX1ZBUklBVElPTlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtZXRyaWMuaD4KICNlbmRpZgogCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9DRkZfT0JKRUNUU19UWVBFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvY2Zmb3R5cGVzLmg+CiAjaW5jbHVkZSAiY2Zmb2Jqcy5oIgogI2luY2x1ZGUgImNmZmxvYWQuaCIKICNpbmNsdWRlICJjZmZjbWFwLmgiCiAKICNpbmNsdWRlICJjZmZlcnJzLmgiCiAKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfQ0ZGX1RBQkxFX0xPQURfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3BzYXV4Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjZmZ0bC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNjcsNDYgKzE2Niw1NiBAQAogICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKICAgICBQU0hfR2xvYmFsc19GdW5jcyAgZnVuY3MgPSBjZmZfc2l6ZV9nZXRfZ2xvYmFsc19mdW5jcyggc2l6ZSApOwogCisgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgICA9IGNmZnNpemUtPmZhY2UtPm1lbW9yeTsKKyAgICBDRkZfSW50ZXJuYWwgIGludGVybmFsID0gTlVMTDsKKyAgICBDRkZfRmFjZSAgICAgIGZhY2UgICAgID0gKENGRl9GYWNlKWNmZnNpemUtPmZhY2U7CisgICAgQ0ZGX0ZvbnQgICAgICBmb250ICAgICA9IChDRkZfRm9udClmYWNlLT5leHRyYS5kYXRhOwogCi0gICAgaWYgKCBmdW5jcyApCi0gICAgewotICAgICAgQ0ZGX0ZhY2UgICAgICBmYWNlICAgICA9IChDRkZfRmFjZSljZmZzaXplLT5mYWNlOwotICAgICAgQ0ZGX0ZvbnQgICAgICBmb250ICAgICA9IChDRkZfRm9udClmYWNlLT5leHRyYS5kYXRhOwotICAgICAgQ0ZGX0ludGVybmFsICBpbnRlcm5hbCA9IE5VTEw7CisgICAgUFNfUHJpdmF0ZVJlYyBwcml2OwogCi0gICAgICBQU19Qcml2YXRlUmVjICBwcml2OwotICAgICAgRlRfTWVtb3J5ICAgICAgbWVtb3J5ID0gY2Zmc2l6ZS0+ZmFjZS0+bWVtb3J5OworICAgIEZUX1VJbnQgICAgICAgaTsKIAotICAgICAgRlRfVUludCAgaTsKKyAgICBpZiAoICFmdW5jcyApCisgICAgICBnb3RvIEV4aXQ7CiAKKyAgICBpZiAoIEZUX05FVyggaW50ZXJuYWwgKSApCisgICAgICBnb3RvIEV4aXQ7CiAKLSAgICAgIGlmICggRlRfTkVXKCBpbnRlcm5hbCApICkKLSAgICAgICAgZ290byBFeGl0OwotCi0gICAgICBjZmZfbWFrZV9wcml2YXRlX2RpY3QoICZmb250LT50b3BfZm9udCwgJnByaXYgKTsKLSAgICAgIGVycm9yID0gZnVuY3MtPmNyZWF0ZSggY2Zmc2l6ZS0+ZmFjZS0+bWVtb3J5LCAmcHJpdiwKKyAgICBjZmZfbWFrZV9wcml2YXRlX2RpY3QoICZmb250LT50b3BfZm9udCwgJnByaXYgKTsKKyAgICBlcnJvciA9IGZ1bmNzLT5jcmVhdGUoIGNmZnNpemUtPmZhY2UtPm1lbW9yeSwgJnByaXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcm5hbC0+dG9wZm9udCApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgZm9yICggaSA9IGZvbnQtPm51bV9zdWJmb250czsgaSA+IDA7IGktLSApCisgICAgeworICAgICAgQ0ZGX1N1YkZvbnQgIHN1YiA9IGZvbnQtPnN1YmZvbnRzW2kgLSAxXTsKKworCisgICAgICBjZmZfbWFrZV9wcml2YXRlX2RpY3QoIHN1YiwgJnByaXYgKTsKKyAgICAgIGVycm9yID0gZnVuY3MtPmNyZWF0ZSggY2Zmc2l6ZS0+ZmFjZS0+bWVtb3J5LCAmcHJpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJuYWwtPnN1YmZvbnRzW2kgLSAxXSApOwogICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgIGdvdG8gRXhpdDsKLQotICAgICAgZm9yICggaSA9IGZvbnQtPm51bV9zdWJmb250czsgaSA+IDA7IGktLSApCi0gICAgICB7Ci0gICAgICAgIENGRl9TdWJGb250ICBzdWIgPSBmb250LT5zdWJmb250c1tpIC0gMV07Ci0KLQotICAgICAgICBjZmZfbWFrZV9wcml2YXRlX2RpY3QoIHN1YiwgJnByaXYgKTsKLSAgICAgICAgZXJyb3IgPSBmdW5jcy0+Y3JlYXRlKCBjZmZzaXplLT5mYWNlLT5tZW1vcnksICZwcml2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcm5hbC0+c3ViZm9udHNbaSAtIDFdICk7Ci0gICAgICAgIGlmICggZXJyb3IgKQotICAgICAgICAgIGdvdG8gRXhpdDsKLSAgICAgIH0KLQotICAgICAgY2Zmc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhID0gaW50ZXJuYWw7CiAgICAgfQogCisgICAgY2Zmc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhID0gaW50ZXJuYWw7CisKICAgICBzaXplLT5zdHJpa2VfaW5kZXggPSAweEZGRkZGRkZGVUw7CiAKICAgRXhpdDoKKyAgICBpZiAoIGVycm9yICkKKyAgICB7CisgICAgICBpZiAoIGludGVybmFsICkKKyAgICAgIHsKKyAgICAgICAgZm9yICggaSA9IGZvbnQtPm51bV9zdWJmb250czsgaSA+IDA7IGktLSApCisgICAgICAgICAgRlRfRlJFRSggaW50ZXJuYWwtPnN1YmZvbnRzW2kgLSAxXSApOworICAgICAgICBGVF9GUkVFKCBpbnRlcm5hbC0+dG9wZm9udCApOworICAgICAgfQorCisgICAgICBGVF9GUkVFKCBpbnRlcm5hbCApOworICAgIH0KKwogICAgIHJldHVybiBlcnJvcjsKICAgfQogCkBAIC0zNDksNyArMzU4LDggQEAKICAgRlRfTE9DQUxfREVGKCB2b2lkICkKICAgY2ZmX3Nsb3RfZG9uZSggRlRfR2x5cGhTbG90ICBzbG90ICkKICAgewotICAgIHNsb3QtPmludGVybmFsLT5nbHlwaF9oaW50cyA9IE5VTEw7CisgICAgaWYgKCBzbG90LT5pbnRlcm5hbCApCisgICAgICBzbG90LT5pbnRlcm5hbC0+Z2x5cGhfaGludHMgPSBOVUxMOwogICB9CiAKIApAQCAtOTQwLDcgKzk1MCw4IEBACiAgICAgICAgICAgICAgICAgc3R5bGVfbmFtZSA9IGNmZl9zdHJjcHkoIG1lbW9yeSwgZnVsbHAgKTsKIAogICAgICAgICAgICAgICAgIC8qIHJlbW92ZSB0aGUgc3R5bGUgcGFydCBmcm9tIHRoZSBmYW1pbHkgbmFtZSAoaWYgcHJlc2VudCkgKi8KLSAgICAgICAgICAgICAgICByZW1vdmVfc3R5bGUoIGNmZmZhY2UtPmZhbWlseV9uYW1lLCBzdHlsZV9uYW1lICk7CisgICAgICAgICAgICAgICAgaWYgKCBzdHlsZV9uYW1lICkKKyAgICAgICAgICAgICAgICAgIHJlbW92ZV9zdHlsZSggY2ZmZmFjZS0+ZmFtaWx5X25hbWUsIHN0eWxlX25hbWUgKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTEwMTgsOSArMTAyOSw5IEBACiAgICAgICB9CiAKICNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9OT19HTFlQSF9OQU1FUwotICAgICAgLyogQ0lELWtleWVkIENGRiBmb250cyBkb24ndCBoYXZlIGdseXBoIG5hbWVzIC0tIHRoZSBTRk5UIGxvYWRlciAqLwotICAgICAgLyogaGFzIHVuc2V0IHRoaXMgZmxhZyBiZWNhdXNlIG9mIHRoZSAzLjAgYHBvc3QnIHRhYmxlLiAgICAgICAgICAqLwotICAgICAgaWYgKCBkaWN0LT5jaWRfcmVnaXN0cnkgPT0gMHhGRkZGVSApCisgICAgICAvKiBDSUQta2V5ZWQgQ0ZGIG9yIENGRjIgZm9udHMgZG9uJ3QgaGF2ZSBnbHlwaCBuYW1lcyAtLSB0aGUgU0ZOVCAqLworICAgICAgLyogbG9hZGVyIGhhcyB1bnNldCB0aGlzIGZsYWcgYmVjYXVzZSBvZiB0aGUgMy4wIGBwb3N0JyB0YWJsZS4gICAgKi8KKyAgICAgIGlmICggZGljdC0+Y2lkX3JlZ2lzdHJ5ID09IDB4RkZGRlUgJiYgIWNmZjIgKQogICAgICAgICBjZmZmYWNlLT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUzsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZm9ianMuaCBiL3NyYy9jZmYvY2Zmb2Jqcy5oCmluZGV4IDAzYmM3OGEuLjg0NWJkOTAgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2Zmb2Jqcy5oCisrKyBiL3NyYy9jZmYvY2Zmb2Jqcy5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgT3BlblR5cGUgb2JqZWN0cyBtYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw3ICsyMCw2IEBACiAjZGVmaW5lIENGRk9CSlNfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmcGFyc2UuYyBiL3NyYy9jZmYvY2ZmcGFyc2UuYwppbmRleCAwMDg3NTJjLi42OWJjZDVkIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZnBhcnNlLmMKKysrIGIvc3JjL2NmZi9jZmZwYXJzZS5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQ0ZGIHRva2VuIHN0cmVhbSBwYXJzZXIgKGJvZHkpCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsMTMgKzE2LDEyIEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlICJjZmZwYXJzZS5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAotI2luY2x1ZGUgRlRfTElTVF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGxpc3QuaD4KIAogI2luY2x1ZGUgImNmZmVycnMuaCIKICNpbmNsdWRlICJjZmZsb2FkLmgiCkBAIC03MTQsNyArNzEzLDcgQEAKICAgICAgICAgICAgKCBtYXhfc2NhbGluZyAtIG1pbl9zY2FsaW5nICkgPiA5ICkKICAgICAgIHsKICAgICAgICAgRlRfVFJBQ0UxKCggImNmZl9wYXJzZV9mb250X21hdHJpeDoiCi0gICAgICAgICAgICAgICAgICAgICIgc3RyYW5nZSBzY2FsaW5nIHZhbHVlcyAobWluaW11bSAlZCwgbWF4aW11bSAlZCksXG4iCisgICAgICAgICAgICAgICAgICAgICIgc3RyYW5nZSBzY2FsaW5nIHZhbHVlcyAobWluaW11bSAlbGQsIG1heGltdW0gJWxkKSxcbiIKICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICIgdXNpbmcgZGVmYXVsdCBtYXRyaXhcbiIsIG1pbl9zY2FsaW5nLCBtYXhfc2NhbGluZyApKTsKICAgICAgICAgZ290byBVbmxpa2VseTsKQEAgLTgxMSw3ICs4MTAsNyBAQAogICAgICAgYmJveC0+eU1heCA9IEZUX1JvdW5kRml4KCBjZmZfcGFyc2VfZml4ZWQoIHBhcnNlciwgZGF0YSAgICkgKTsKICAgICAgIGVycm9yID0gRlRfRXJyX09rOwogCi0gICAgICBGVF9UUkFDRTQoKCAiIFslZCAlZCAlZCAlZF1cbiIsCisgICAgICBGVF9UUkFDRTQoKCAiIFslbGQgJWxkICVsZCAlbGRdXG4iLAogICAgICAgICAgICAgICAgICAgYmJveC0+eE1pbiAvIDY1NTM2LAogICAgICAgICAgICAgICAgICAgYmJveC0+eU1pbiAvIDY1NTM2LAogICAgICAgICAgICAgICAgICAgYmJveC0+eE1heCAvIDY1NTM2LApAQCAtOTM0LDExICs5MzMsMTEgQEAKICAgICAgICAgRlRfVFJBQ0UxKCggImNmZl9wYXJzZV9jaWRfcm9zOiByZWFsIHN1cHBsZW1lbnQgaXMgcm91bmRlZFxuIiApKTsKICAgICAgIGRpY3QtPmNpZF9zdXBwbGVtZW50ID0gY2ZmX3BhcnNlX251bSggcGFyc2VyLCBkYXRhICk7CiAgICAgICBpZiAoIGRpY3QtPmNpZF9zdXBwbGVtZW50IDwgMCApCi0gICAgICAgIEZUX1RSQUNFMSgoICJjZmZfcGFyc2VfY2lkX3JvczogbmVnYXRpdmUgc3VwcGxlbWVudCAlZCBpcyBmb3VuZFxuIiwKKyAgICAgICAgRlRfVFJBQ0UxKCggImNmZl9wYXJzZV9jaWRfcm9zOiBuZWdhdGl2ZSBzdXBwbGVtZW50ICVsZCBpcyBmb3VuZFxuIiwKICAgICAgICAgICAgICAgICAgICBkaWN0LT5jaWRfc3VwcGxlbWVudCApKTsKICAgICAgIGVycm9yID0gRlRfRXJyX09rOwogCi0gICAgICBGVF9UUkFDRTQoKCAiICVkICVkICVkXG4iLAorICAgICAgRlRfVFJBQ0U0KCggIiAlZCAlZCAlbGRcbiIsCiAgICAgICAgICAgICAgICAgICBkaWN0LT5jaWRfcmVnaXN0cnksCiAgICAgICAgICAgICAgICAgICBkaWN0LT5jaWRfb3JkZXJpbmcsCiAgICAgICAgICAgICAgICAgICBkaWN0LT5jaWRfc3VwcGxlbWVudCApKTsKQEAgLTEyNjQsMTEgKzEyNjMsMTEgQEAKICAgICAgICAgRlRfQnl0ZSogICAgIGNoYXJzdHJpbmdfYmFzZTsKICAgICAgICAgRlRfVUxvbmcgICAgIGNoYXJzdHJpbmdfbGVuOwogCi0gICAgICAgIEZUX0ZpeGVkKiAgICAgc3RhY2s7Ci0gICAgICAgIEZUX0xpc3ROb2RlICAgbm9kZTsKLSAgICAgICAgQ0ZGX1QyX1N0cmluZyB0MjsKLSAgICAgICAgc2l6ZV90ICAgICAgICB0Ml9zaXplOwotICAgICAgICBGVF9CeXRlKiAgICAgIHE7CisgICAgICAgIEZUX0ZpeGVkKiAgICAgIHN0YWNrOworICAgICAgICBGVF9MaXN0Tm9kZSAgICBub2RlOworICAgICAgICBDRkZfVDJfU3RyaW5nICB0MjsKKyAgICAgICAgRlRfRml4ZWQgICAgICAgdDJfc2l6ZTsKKyAgICAgICAgRlRfQnl0ZSogICAgICAgcTsKIAogCiAgICAgICAgIGNoYXJzdHJpbmdfYmFzZSA9ICsrcDsKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmcGFyc2UuaCBiL3NyYy9jZmYvY2ZmcGFyc2UuaAppbmRleCA0ZTc0NzA5Li42ZjNmYmIzIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZnBhcnNlLmgKKysrIGIvc3JjL2NmZi9jZmZwYXJzZS5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQ0ZGIHRva2VuIHN0cmVhbSBwYXJzZXIgKHNwZWNpZmljYXRpb24pCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsOSArMjAsOCBAQAogI2RlZmluZSBDRkZQQVJTRV9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0ZGX1RZUEVTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2NmZnR5cGVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZnRva2VuLmggYi9zcmMvY2ZmL2NmZnRva2VuLmgKaW5kZXggMDYzYTdiMy4uNGM2YTUzZSAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZ0b2tlbi5oCisrKyBiL3NyYy9jZmYvY2ZmdG9rZW4uaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIENGRiB0b2tlbiBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCmRpZmYgLS1naXQgYS9zcmMvY2ZmL21vZHVsZS5tayBiL3NyYy9jZmYvbW9kdWxlLm1rCmluZGV4IDhjNjEwOTUuLmJkNzI4YzYgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvbW9kdWxlLm1rCisrKyBiL3NyYy9jZmYvbW9kdWxlLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL2NmZi9ydWxlcy5tayBiL3NyYy9jZmYvcnVsZXMubWsKaW5kZXggNmUyZGM0Ny4uNzBiYjkyZCAxMDA2NDQKLS0tIGEvc3JjL2NmZi9ydWxlcy5taworKysgYi9zcmMvY2ZmL3J1bGVzLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL2NpZC9KYW1maWxlIGIvc3JjL2NpZC9KYW1maWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2ZiNzAyLi4wMDAwMDAwCi0tLSBhL3NyYy9jaWQvSmFtZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMgRnJlZVR5cGUgMiBzcmMvY2lkIEphbWZpbGUKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgYnkKLSMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgotIwotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAotIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCi0jIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91Ci0jIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0Ci0jIGZ1bGx5LgotCi1TdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgY2lkIDsKLQotewotICBsb2NhbCAgX3NvdXJjZXMgOwotCi0gIGlmICQoRlQyX01VTFRJKQotICB7Ci0gICAgX3NvdXJjZXMgPSBjaWRnbG9hZAotICAgICAgICAgICAgICAgY2lkbG9hZAotICAgICAgICAgICAgICAgY2lkb2JqcwotICAgICAgICAgICAgICAgY2lkcGFyc2UKLSAgICAgICAgICAgICAgIGNpZHJpdmVyCi0gICAgICAgICAgICAgICA7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgX3NvdXJjZXMgPSB0eXBlMWNpZCA7Ci0gIH0KLQotICBMaWJyYXJ5ICAkKEZUMl9MSUIpIDogJChfc291cmNlcykuYyA7Ci19Ci0KLSMgZW5kIG9mIHNyYy9jaWQgSmFtZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2NpZC9jaWRlcnJzLmggYi9zcmMvY2lkL2NpZGVycnMuaAppbmRleCBiZTgwYmVkLi5mNjk4YmIyIDEwMDY0NAotLS0gYS9zcmMvY2lkL2NpZGVycnMuaAorKysgYi9zcmMvY2lkL2NpZGVycnMuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIENJRCBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZuZGVmIENJREVSUlNfSF8KICNkZWZpbmUgQ0lERVJSU19IXwogCi0jaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdG1vZGVyci5oPgogCiAjdW5kZWYgRlRFUlJPUlNfSF8KIApAQCAtMzMsNyArMzMsNyBAQAogI2RlZmluZSBGVF9FUlJfUFJFRklYICBDSURfRXJyXwogI2RlZmluZSBGVF9FUlJfQkFTRSAgICBGVF9Nb2RfRXJyX0NJRAogCi0jaW5jbHVkZSBGVF9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZXJyb3JzLmg+CiAKICNlbmRpZiAvKiBDSURFUlJTX0hfICovCiAKZGlmZiAtLWdpdCBhL3NyYy9jaWQvY2lkZ2xvYWQuYyBiL3NyYy9jaWQvY2lkZ2xvYWQuYwppbmRleCBmNTlmMjg4Li41NGFhNjJmIDEwMDY0NAotLS0gYS9zcmMvY2lkL2NpZGdsb2FkLmMKKysrIGIvc3JjL2NpZC9jaWRnbG9hZC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQ0lELWtleWVkIFR5cGUxIEdseXBoIExvYWRlciAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsMTcgKzE2LDE2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlICJjaWRsb2FkLmgiCiAjaW5jbHVkZSAiY2lkZ2xvYWQuaCIKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9PVVRMSU5FX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0b3V0bG4uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaD4KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0ZGX1RZUEVTX0gKLSNpbmNsdWRlIEZUX0RSSVZFUl9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9jZmZ0eXBlcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZHJpdmVyLmg+CiAKICNpbmNsdWRlICJjaWRlcnJzLmgiCiAKZGlmZiAtLWdpdCBhL3NyYy9jaWQvY2lkZ2xvYWQuaCBiL3NyYy9jaWQvY2lkZ2xvYWQuaAppbmRleCAzN2ViYTdjLi5kYTM2ZTM3IDEwMDY0NAotLS0gYS9zcmMvY2lkL2NpZGdsb2FkLmgKKysrIGIvc3JjL2NpZC9jaWRnbG9hZC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgT3BlblR5cGUgR2x5cGggTG9hZGVyIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw3ICsyMCw2IEBACiAjZGVmaW5lIENJREdMT0FEX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSAiY2lkb2Jqcy5oIgogCiAKZGlmZiAtLWdpdCBhL3NyYy9jaWQvY2lkbG9hZC5jIGIvc3JjL2NpZC9jaWRsb2FkLmMKaW5kZXggZmNlM2UzNy4uYmI5MTM2YSAxMDA2NDQKLS0tIGEvc3JjL2NpZC9jaWRsb2FkLmMKKysrIGIvc3JjL2NpZC9jaWRsb2FkLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBDSUQta2V5ZWQgVHlwZTEgZm9udCBsb2FkZXIgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE3LDExICsxNywxMSBAQAogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KICNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAotI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRtbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oPgogCiAjaW5jbHVkZSAiY2lkbG9hZC5oIgogCkBAIC0yNTQsNyArMjU0LDcgQEAKICAgICAgIGdvdG8gRXhpdDsKICAgICB9CiAKLSAgICBGVF9UUkFDRTQoKCAiICVkXG4iLCBudW1fZGljdHMgKSk7CisgICAgRlRfVFJBQ0U0KCggIiAlbGRcbiIsIG51bV9kaWN0cyApKTsKIAogICAgIC8qCiAgICAgICogQSBzaW5nbGUgZW50cnkgaW4gdGhlIEZEQXJyYXkgbXVzdCAoYXQgbGVhc3QpIGNvbnRhaW4gdGhlIGZvbGxvd2luZwpAQCAtMjc1LDcgKzI3NSw3IEBACiAgICAgaWYgKCAoRlRfVUxvbmcpbnVtX2RpY3RzID4gc3RyZWFtLT5zaXplIC8gMTAwICkKICAgICB7CiAgICAgICBGVF9UUkFDRTAoKCAicGFyc2VfZmRfYXJyYXk6IGFkanVzdGluZyBGREFycmF5IHNpemUiCi0gICAgICAgICAgICAgICAgICAiIChmcm9tICVkIHRvICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICIgKGZyb20gJWxkIHRvICVsZClcbiIsCiAgICAgICAgICAgICAgICAgICBudW1fZGljdHMsCiAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnNpemUgLyAxMDAgKSk7CiAgICAgICBudW1fZGljdHMgPSAoRlRfTG9uZykoIHN0cmVhbS0+c2l6ZSAvIDEwMCApOwpAQCAtMzI5LDcgKzMyOSw3IEBACiAgICAgICBkaWN0LT5leHBhbnNpb25fZmFjdG9yICAgICAgICAgICAgICA9IGNpZF9wYXJzZXJfdG9fZml4ZWQoIHBhcnNlciwgMCApOwogICAgICAgZGljdC0+cHJpdmF0ZV9kaWN0LmV4cGFuc2lvbl9mYWN0b3IgPSBkaWN0LT5leHBhbnNpb25fZmFjdG9yOwogCi0gICAgICBGVF9UUkFDRTQoKCAiJWRcbiIsIGRpY3QtPmV4cGFuc2lvbl9mYWN0b3IgKSk7CisgICAgICBGVF9UUkFDRTQoKCAiJWxkXG4iLCBkaWN0LT5leHBhbnNpb25fZmFjdG9yICkpOwogICAgIH0KIAogICAgIHJldHVybjsKQEAgLTcxNSw3ICs3MTUsNyBAQAogICAgICAgaWYgKCBmdF9pc2RpZ2l0KCAqcCApICkKICAgICAgICAgdmFsID0gKEZUX0J5dGUpKCAqcCAtICcwJyApOwogICAgICAgZWxzZSBpZiAoICpwID49ICdhJyAmJiAqcCA8PSAnZicgKQotICAgICAgICB2YWwgPSAoRlRfQnl0ZSkoICpwIC0gJ2EnICk7CisgICAgICAgIHZhbCA9IChGVF9CeXRlKSggKnAgLSAnYScgKyAxMCApOwogICAgICAgZWxzZSBpZiAoICpwID49ICdBJyAmJiAqcCA8PSAnRicgKQogICAgICAgICB2YWwgPSAoRlRfQnl0ZSkoICpwIC0gJ0EnICsgMTAgKTsKICAgICAgIGVsc2UgaWYgKCAqcCA9PSAnICcgIHx8CkBAIC04MDQsNyArODA0LDcgQEAKICAgICAgICAgICAgICBmYWNlLT5yb290LnN0cmVhbS0+c2l6ZSAtIHBhcnNlci0+ZGF0YV9vZmZzZXQgKQogICAgICAgewogICAgICAgICBGVF9UUkFDRTAoKCAiY2lkX2ZhY2Vfb3BlbjogYWRqdXN0aW5nIGxlbmd0aCBvZiBiaW5hcnkgZGF0YVxuIgotICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgKGZyb20gJWQgdG8gJWQgYnl0ZXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgKGZyb20gJWxkIHRvICVsZCBieXRlcylcbiIsCiAgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+YmluYXJ5X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgZmFjZS0+cm9vdC5zdHJlYW0tPnNpemUgLSBwYXJzZXItPmRhdGFfb2Zmc2V0ICkpOwogICAgICAgICBwYXJzZXItPmJpbmFyeV9sZW5ndGggPSBmYWNlLT5yb290LnN0cmVhbS0+c2l6ZSAtCmRpZmYgLS1naXQgYS9zcmMvY2lkL2NpZGxvYWQuaCBiL3NyYy9jaWQvY2lkbG9hZC5oCmluZGV4IGZiOWQ0NjIuLjA2ZmI5ZWYgMTAwNjQ0Ci0tLSBhL3NyYy9jaWQvY2lkbG9hZC5oCisrKyBiL3NyYy9jaWQvY2lkbG9hZC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQ0lELWtleWVkIFR5cGUxIGZvbnQgbG9hZGVyIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw3IEBACiAjZGVmaW5lIENJRExPQURfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KICNpbmNsdWRlICJjaWRwYXJzZS5oIgogCiAKZGlmZiAtLWdpdCBhL3NyYy9jaWQvY2lkb2Jqcy5jIGIvc3JjL2NpZC9jaWRvYmpzLmMKaW5kZXggNGU5NzI4Ny4uMDRiMjk1ZSAxMDA2NDQKLS0tIGEvc3JjL2NpZC9jaWRvYmpzLmMKKysrIGIvc3JjL2NpZC9jaWRvYmpzLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBDSUQgb2JqZWN0cyBtYW5hZ2VyIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxNyArMTYsMTYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KIAogI2luY2x1ZGUgImNpZGdsb2FkLmgiCiAjaW5jbHVkZSAiY2lkbG9hZC5oIgogCi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9ISU5UU19ICi0jaW5jbHVkZSBGVF9EUklWRVJfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9wc2hpbnRzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRkcml2ZXIuaD4KIAogI2luY2x1ZGUgImNpZGVycnMuaCIKIApAQCAtNTAsNyArNDksOCBAQAogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQogICBjaWRfc2xvdF9kb25lKCBGVF9HbHlwaFNsb3QgIHNsb3QgKQogICB7Ci0gICAgc2xvdC0+aW50ZXJuYWwtPmdseXBoX2hpbnRzID0gTlVMTDsKKyAgICBpZiAoIHNsb3QtPmludGVybmFsICkKKyAgICAgIHNsb3QtPmludGVybmFsLT5nbHlwaF9oaW50cyA9IE5VTEw7CiAgIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvY2lkL2NpZG9ianMuaCBiL3NyYy9jaWQvY2lkb2Jqcy5oCmluZGV4IDg5YzlhYTcuLjZhZTMwNjEgMTAwNjQ0Ci0tLSBhL3NyYy9jaWQvY2lkb2Jqcy5oCisrKyBiL3NyYy9jaWQvY2lkb2Jqcy5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQ0lEIG9iamVjdHMgbWFuYWdlciAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjEsOSArMjEsOSBAQAogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CiAjaW5jbHVkZSBGVF9DT05GSUdfQ09ORklHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvY2lkL2NpZHBhcnNlLmMgYi9zcmMvY2lkL2NpZHBhcnNlLmMKaW5kZXggMWJlNDZlYy4uMWZjMDk4YiAxMDA2NDQKLS0tIGEvc3JjL2NpZC9jaWRwYXJzZS5jCisrKyBiL3NyYy9jaWQvY2lkcGFyc2UuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIENJRC1rZXllZCBUeXBlMSBwYXJzZXIgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDEwICsxNiw5IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KIAogI2luY2x1ZGUgImNpZHBhcnNlLmgiCiAKZGlmZiAtLWdpdCBhL3NyYy9jaWQvY2lkcGFyc2UuaCBiL3NyYy9jaWQvY2lkcGFyc2UuaAppbmRleCBlYzFmNmEzLi4wYjQ5YmViIDEwMDY0NAotLS0gYS9zcmMvY2lkL2NpZHBhcnNlLmgKKysrIGIvc3JjL2NpZC9jaWRwYXJzZS5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQ0lELWtleWVkIFR5cGUxIHBhcnNlciAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsMTAgKzIwLDkgQEAKICNkZWZpbmUgQ0lEUEFSU0VfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9jaWQvY2lkcml2ZXIuYyBiL3NyYy9jaWQvY2lkcml2ZXIuYwppbmRleCA0ZDkxZTg3Li5kMDhjZWExIDEwMDY0NAotLS0gYS9zcmMvY2lkL2NpZHJpdmVyLmMKKysrIGIvc3JjL2NpZC9jaWRyaXZlci5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQ0lEIGRyaXZlciBpbnRlcmZhY2UgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDIyICsxNiwyMSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSAiY2lkcml2ZXIuaCIKICNpbmNsdWRlICJjaWRnbG9hZC5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9QUk9QU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0cHNwcm9wLmg+CiAKICNpbmNsdWRlICJjaWRlcnJzLmgiCiAKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfRk9OVF9GT1JNQVRfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSAotI2luY2x1ZGUgRlRfU0VSVklDRV9DSURfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0gKLSNpbmNsdWRlIEZUX0RSSVZFUl9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmZudGZtdC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNpbmZvLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjaWQuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGRyaXZlci5oPgogCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvc3JjL2NpZC9jaWRyaXZlci5oIGIvc3JjL2NpZC9jaWRyaXZlci5oCmluZGV4IDM0MDJmZDcuLjBmYzhlZDMgMTAwNjQ0Ci0tLSBhL3NyYy9jaWQvY2lkcml2ZXIuaAorKysgYi9zcmMvY2lkL2NpZHJpdmVyLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBIaWdoLWxldmVsIENJRCBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw3IEBACiAjZGVmaW5lIENJRFJJVkVSX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9EUklWRVJfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZHJ2Lmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvY2lkL2NpZHRva2VuLmggYi9zcmMvY2lkL2NpZHRva2VuLmgKaW5kZXggZjUwNWM5ZS4uZTlmMDY4YiAxMDA2NDQKLS0tIGEvc3JjL2NpZC9jaWR0b2tlbi5oCisrKyBiL3NyYy9jaWQvY2lkdG9rZW4uaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIENJRCB0b2tlbiBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCmRpZmYgLS1naXQgYS9zcmMvY2lkL21vZHVsZS5tayBiL3NyYy9jaWQvbW9kdWxlLm1rCmluZGV4IDg3NWM2ODMuLjlmYjAyMjMgMTAwNjQ0Ci0tLSBhL3NyYy9jaWQvbW9kdWxlLm1rCisrKyBiL3NyYy9jaWQvbW9kdWxlLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL2NpZC9ydWxlcy5tayBiL3NyYy9jaWQvcnVsZXMubWsKaW5kZXggMmI2OGRkNC4uOTRmNjYzYyAxMDA2NDQKLS0tIGEvc3JjL2NpZC9ydWxlcy5taworKysgYi9zcmMvY2lkL3J1bGVzLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL2NpZC90eXBlMWNpZC5jIGIvc3JjL2NpZC90eXBlMWNpZC5jCmluZGV4IGQyMTgwMWMuLjA4MmU4YmYgMTAwNjQ0Ci0tLSBhL3NyYy9jaWQvdHlwZTFjaWQuYworKysgYi9zcmMvY2lkL3R5cGUxY2lkLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBPcGVuVHlwZSBkcml2ZXIgY29tcG9uZW50IChib2R5IG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE3LDcgKzE3LDYgQEAKIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogCiAjaW5jbHVkZSAiY2lkZ2xvYWQuYyIKICNpbmNsdWRlICJjaWRsb2FkLmMiCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9KYW1maWxlIGIvc3JjL2d4dmFsaWQvSmFtZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA4ZTdhOS4uMDAwMDAwMAotLS0gYS9zcmMvZ3h2YWxpZC9KYW1maWxlCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotIyBGcmVlVHlwZSAyIHNyYy9neHZhbGlkIEphbWZpbGUKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkKLSMgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTyBhbmQgUmVkIEhhdCBLLksuCi0jCi0jIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCi0jIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKLSMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKLSMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKLSMgZnVsbHkuCi0KLVN1YkRpciAgRlQyX1RPUCAkKEZUMl9TUkNfRElSKSBneHZhbGlkIDsKLQotCi17Ci0gIGxvY2FsICBfc291cmNlcyA7Ci0KLSAgaWYgJChGVDJfTVVMVEkpCi0gIHsKLSAgICBfc291cmNlcyA9IGd4dmJzbG4KLSAgICAgICAgICAgICAgIGd4dmNvbW1uCi0gICAgICAgICAgICAgICBneHZmZWF0Ci0gICAgICAgICAgICAgICBneHZqdXN0Ci0gICAgICAgICAgICAgICBneHZrZXJuCi0gICAgICAgICAgICAgICBneHZsY2FyCi0gICAgICAgICAgICAgICBneHZtb2QKLSAgICAgICAgICAgICAgIGd4dm1vcnQKLSAgICAgICAgICAgICAgIGd4dm1vcnQwCi0gICAgICAgICAgICAgICBneHZtb3J0MQotICAgICAgICAgICAgICAgZ3h2bW9ydDIKLSAgICAgICAgICAgICAgIGd4dm1vcnQ0Ci0gICAgICAgICAgICAgICBneHZtb3J0NQotICAgICAgICAgICAgICAgZ3h2bW9yeAotICAgICAgICAgICAgICAgZ3h2bW9yeDAKLSAgICAgICAgICAgICAgIGd4dm1vcngxCi0gICAgICAgICAgICAgICBneHZtb3J4MgotICAgICAgICAgICAgICAgZ3h2bW9yeDQKLSAgICAgICAgICAgICAgIGd4dm1vcng1Ci0gICAgICAgICAgICAgICBneHZvcGJkCi0gICAgICAgICAgICAgICBneHZwcm9wCi0gICAgICAgICAgICAgICBneHZ0cmFrCi0gICAgICAgICAgICAgICA7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgX3NvdXJjZXMgPSBneHZhbGlkIDsKLSAgfQotCi0gIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKLX0KLQotIyBlbmQgb2Ygc3JjL2d4dmFsaWQgSmFtZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvUkVBRE1FIGIvc3JjL2d4dmFsaWQvUkVBRE1FCmluZGV4IGQ0OTM1ODcuLjJhMzJiYWIgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL1JFQURNRQorKysgYi9zcmMvZ3h2YWxpZC9SRUFETUUKQEAgLTUxOCw3ICs1MTgsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKK0NvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgaGF0IEsuSy4sCiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dmFsaWQuYyBiL3NyYy9neHZhbGlkL2d4dmFsaWQuYwppbmRleCA0NjJlNDYxLi42ODNiOGE2IDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZhbGlkLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2YWxpZC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgdmFsaWRhdG9yIGZvciBUcnVlVHlwZUdYL0FBVCB0YWJsZXMgKGJvZHkgb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiAgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgpAQCAtMTgsNyArMTgsNiBAQAogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAKICNpbmNsdWRlICJneHZic2xuLmMiCiAjaW5jbHVkZSAiZ3h2Y29tbW4uYyIKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dmFsaWQuaCBiL3NyYy9neHZhbGlkL2d4dmFsaWQuaAppbmRleCA5NjljZDA5Li5mZjI4MTJkIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZhbGlkLmgKKysrIGIvc3JjL2d4dmFsaWQvZ3h2YWxpZC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHJ1ZVR5cGVHWC9BQVQgdGFibGUgdmFsaWRhdGlvbiAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgYnkKICAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCkBAIC0yOCwxMyArMjgsMTIgQEAKICNpZm5kZWYgR1hWQUxJRF9IXwogI2RlZmluZSBHWFZBTElEX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CiAKLSNpbmNsdWRlICJneHZlcnJvci5oIiAgICAgICAgICAvKiBtdXN0IGNvbWUgYmVmb3JlIEZUX0lOVEVSTkFMX1ZBTElEQVRFX0ggKi8KKyNpbmNsdWRlICJneHZlcnJvci5oIiAgICAgICAgICAgICAgICAgICAgIC8qIG11c3QgY29tZSBiZWZvcmUgYGZ0dmFsaWQuaCcgKi8KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfVkFMSURBVEVfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHZhbGlkLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dmJzbG4uYyBiL3NyYy9neHZhbGlkL2d4dmJzbG4uYwppbmRleCBmMjJmMjU0Li5hYzU4ZDQ2IDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZic2xuLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2YnNsbi5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHJ1ZVR5cGVHWC9BQVQgYnNsbiB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgYnkKICAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZjb21tbi5jIGIvc3JjL2d4dmFsaWQvZ3h2Y29tbW4uYwppbmRleCBjNWNiOGViLi5lYWQwZjI0IDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZjb21tbi5jCisrKyBiL3NyYy9neHZhbGlkL2d4dmNvbW1uLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUcnVlVHlwZUdYL0FBVCBjb21tb24gdGFibGVzIHZhbGlkYXRpb24gKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dmNvbW1uLmggYi9zcmMvZ3h2YWxpZC9neHZjb21tbi5oCmluZGV4IDMzNGRjOWQuLjU5ZDE0OTIgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dmNvbW1uLmgKKysrIGIvc3JjL2d4dmFsaWQvZ3h2Y29tbW4uaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlR1gvQUFUIGNvbW1vbiB0YWJsZXMgdmFsaWRhdGlvbiAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgpAQCAtNDMsMTAgKzQzLDkgQEAKICNkZWZpbmUgR1hWQ09NTU5fSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlICJneHZhbGlkLmgiCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9TRk5UX05BTUVTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRzbmFtZXMuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dmVycm9yLmggYi9zcmMvZ3h2YWxpZC9neHZlcnJvci5oCmluZGV4IGRhMGVkYjMuLjVkOGYwYjYgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dmVycm9yLmgKKysrIGIvc3JjL2d4dmFsaWQvZ3h2ZXJyb3IuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlR1gvQUFUIHZhbGlkYXRpb24gbW9kdWxlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKQEAgLTM1LDcgKzM1LDcgQEAKICNpZm5kZWYgR1hWRVJST1JfSF8KICNkZWZpbmUgR1hWRVJST1JfSF8KIAotI2luY2x1ZGUgRlRfTU9EVUxFX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRtb2RlcnIuaD4KIAogI3VuZGVmIEZURVJST1JTX0hfCiAKQEAgLTQzLDcgKzQzLDcgQEAKICNkZWZpbmUgRlRfRVJSX1BSRUZJWCAgR1hWX0Vycl8KICNkZWZpbmUgRlRfRVJSX0JBU0UgICAgRlRfTW9kX0Vycl9HWHZhbGlkCiAKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KIAogI2VuZGlmIC8qIEdYVkVSUk9SX0hfICovCiAKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dmZlYXQuYyBiL3NyYy9neHZhbGlkL2d4dmZlYXQuYwppbmRleCBlMWExMmExLi40MDBlYzhhIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZmZWF0LmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2ZmVhdC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHJ1ZVR5cGVHWC9BQVQgZmVhdCB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgYnkKICAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZmZWF0LmggYi9zcmMvZ3h2YWxpZC9neHZmZWF0LmgKaW5kZXggNmM5ODkyOS4uNDM1ZGNlZiAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2ZmVhdC5oCisrKyBiL3NyYy9neHZhbGlkL2d4dmZlYXQuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlR1gvQUFUIGZlYXQgdGFibGUgdmFsaWRhdGlvbiAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2Zmdlbi5jIGIvc3JjL2d4dmFsaWQvZ3h2Zmdlbi5jCmluZGV4IDVlY2I5NDQuLmZlMDVhNmYgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dmZnZW4uYworKysgYi9zcmMvZ3h2YWxpZC9neHZmZ2VuLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgIEdlbmVyYXRlIGZlYXR1cmUgcmVnaXN0cnkgZGF0YSBmb3IgZ3h2IGBmZWF0JyB2YWxpZGF0b3IuCiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkZXJpdmVkIGZyb20gZ3hmZWF0cmVnLmMgaW4gZ3hsYXlvdXQuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBNYXNhdGFrZSBZQU1BVE8gYW5kIFJlZGhhdCBLLksuCiAgKgogICogVGhpcyBmaWxlIG1heSBvbmx5IGJlIHVzZWQsCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZqdXN0LmMgYi9zcmMvZ3h2YWxpZC9neHZqdXN0LmMKaW5kZXggYTU4MjM3Ny4uM2M3ZjFmOSAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2anVzdC5jCisrKyBiL3NyYy9neHZhbGlkL2d4dmp1c3QuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlR1gvQUFUIGp1c3QgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiAgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgImd4dmFsaWQuaCIKICNpbmNsdWRlICJneHZjb21tbi5oIgogCi0jaW5jbHVkZSBGVF9TRk5UX05BTUVTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdHNuYW1lcy5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZrZXJuLmMgYi9zcmMvZ3h2YWxpZC9neHZrZXJuLmMKaW5kZXggYTc1MzIzMy4uY2MwYjNkZiAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2a2Vybi5jCisrKyBiL3NyYy9neHZhbGlkL2d4dmtlcm4uYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlR1gvQUFUIGtlcm4gdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgpAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUgImd4dmFsaWQuaCIKICNpbmNsdWRlICJneHZjb21tbi5oIgogCi0jaW5jbHVkZSBGVF9TRk5UX05BTUVTX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfR1hfVkFMSURBVEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0c25hbWVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZneHZhbC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZsY2FyLmMgYi9zcmMvZ3h2YWxpZC9neHZsY2FyLmMKaW5kZXggMTNiM2RlMy4uODJhYzE5MCAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bGNhci5jCisrKyBiL3NyYy9neHZhbGlkL2d4dmxjYXIuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlR1gvQUFUIGxjYXIgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2bW9kLmMgYi9zcmMvZ3h2YWxpZC9neHZtb2QuYwppbmRleCBlZWFkZWIzLi5hNDY3ZTg3IDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb2QuYworKysgYi9zcmMvZ3h2YWxpZC9neHZtb2QuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlJ3MgVHJ1ZVR5cGVHWC9BQVQgdmFsaWRhdGlvbiBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKQEAgLTI1LDEyICsyNSwxMSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUJMRVNfSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICi0jaW5jbHVkZSBGVF9HWF9WQUxJREFURV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfR1hfVkFMSURBVEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL3R0dGFibGVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWdzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRneHZhbC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaD4KIAogI2luY2x1ZGUgImd4dm1vZC5oIgogI2luY2x1ZGUgImd4dmFsaWQuaCIKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vZC5oIGIvc3JjL2d4dmFsaWQvZ3h2bW9kLmgKaW5kZXggNmVjZDczMS4uZjI5ODJjOSAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9kLmgKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9kLmgKQEAgLTUsNyArNSw3IEBACiAgKiAgIEZyZWVUeXBlJ3MgVHJ1ZVR5cGVHWC9BQVQgdmFsaWRhdGlvbiBtb2R1bGUgaW1wbGVtZW50YXRpb24KICAqICAgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKQEAgLTI5LDggKzI5LDcgQEAKICNpZm5kZWYgR1hWTU9EX0hfCiAjZGVmaW5lIEdYVk1PRF9IXwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX01PRFVMRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRtb2RhcGkuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vcnQuYyBiL3NyYy9neHZhbGlkL2d4dm1vcnQuYwppbmRleCAyODhlZjY5Li5hYWU3ZjAxIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J0LmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHJ1ZVR5cGVHWC9BQVQgbW9ydCB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgYnkKICAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J0LmggYi9zcmMvZ3h2YWxpZC9neHZtb3J0LmgKaW5kZXggMDYxOWUyNC4uNzIzN2M1OCAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9ydC5oCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcnQuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlR1gvQUFUIGNvbW1vbiBkZWZpbml0aW9uIGZvciBtb3J0IHRhYmxlIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgYnkKICAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCkBAIC0zMSw3ICszMSwxMCBAQAogI2luY2x1ZGUgImd4dmFsaWQuaCIKICNpbmNsdWRlICJneHZjb21tbi5oIgogCi0jaW5jbHVkZSBGVF9TRk5UX05BTUVTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdHNuYW1lcy5oPgorCisKK0ZUX0JFR0lOX0hFQURFUgogCiAKICAgdHlwZWRlZiBzdHJ1Y3QgIEdYVl9tb3J0X2ZlYXR1cmVSZWNfCkBAIC04OCw2ICs5MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICk7CiAKIAorRlRfRU5EX0hFQURFUgorCiAjZW5kaWYgLyogR1hWTU9SVF9IXyAqLwogCiAKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vcnQwLmMgYi9zcmMvZ3h2YWxpZC9neHZtb3J0MC5jCmluZGV4IDJjMDFiZjkuLmQ0NTJjMWMgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dm1vcnQwLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydDAuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgVHJ1ZVR5cGVHWC9BQVQgbW9ydCB0YWJsZSB2YWxpZGF0aW9uCiAgKiAgIGJvZHkgZm9yIHR5cGUwIChJbmRpYyBTY3JpcHQgUmVhcnJhbmdlbWVudCkgc3VidGFibGUuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiAgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2bW9ydDEuYyBiL3NyYy9neHZhbGlkL2d4dm1vcnQxLmMKaW5kZXggYzcxYmExMy4uZDc0M2Y4OSAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9ydDEuYworKysgYi9zcmMvZ3h2YWxpZC9neHZtb3J0MS5jCkBAIC01LDcgKzUsNyBAQAogICogICBUcnVlVHlwZUdYL0FBVCBtb3J0IHRhYmxlIHZhbGlkYXRpb24KICAqICAgYm9keSBmb3IgdHlwZTEgKENvbnRleHR1YWwgU3Vic3RpdHV0aW9uKSBzdWJ0YWJsZS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgYnkKICAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J0Mi5jIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydDIuYwppbmRleCA4ODlkM2JkLi45ZTY5ZTEyIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J0Mi5jCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcnQyLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgIFRydWVUeXBlR1gvQUFUIG1vcnQgdGFibGUgdmFsaWRhdGlvbgogICogICBib2R5IGZvciB0eXBlMiAoTGlnYXR1cmUgU3Vic3RpdHV0aW9uKSBzdWJ0YWJsZS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgYnkKICAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J0NC5jIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydDQuYwppbmRleCBmOGNlNmNmLi40NTg0ZDIwIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J0NC5jCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcnQ0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgIFRydWVUeXBlR1gvQUFUIG1vcnQgdGFibGUgdmFsaWRhdGlvbgogICogICBib2R5IGZvciB0eXBlNCAoTm9uLUNvbnRleHR1YWwgR2x5cGggU3Vic3RpdHV0aW9uKSBzdWJ0YWJsZS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgYnkKICAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J0NS5jIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydDUuYwppbmRleCAxYmExZTVkLi5hMTVhMjRmIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J0NS5jCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcnQ1LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgIFRydWVUeXBlR1gvQUFUIG1vcnQgdGFibGUgdmFsaWRhdGlvbgogICogICBib2R5IGZvciB0eXBlNSAoQ29udGV4dHVhbCBHbHlwaCBJbnNlcnRpb24pIHN1YnRhYmxlLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMCBieQogICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vcnguYyBiL3NyYy9neHZhbGlkL2d4dm1vcnguYwppbmRleCA4YmQ0NWMyLi43NTRkOWY4IDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J4LmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9yeC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHJ1ZVR5cGVHWC9BQVQgbW9yeCB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgYnkKICAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J4LmggYi9zcmMvZ3h2YWxpZC9neHZtb3J4LmgKaW5kZXggZTI1NzI3MC4uZjc0N2IxZCAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9yeC5oCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcnguaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlR1gvQUFUIGNvbW1vbiBkZWZpbml0aW9uIGZvciBtb3J4IHRhYmxlIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgYnkKICAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCkBAIC0zMyw3ICszMywxMCBAQAogI2luY2x1ZGUgImd4dmNvbW1uLmgiCiAjaW5jbHVkZSAiZ3h2bW9ydC5oIgogCi0jaW5jbHVkZSBGVF9TRk5UX05BTUVTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdHNuYW1lcy5oPgorCisKK0ZUX0JFR0lOX0hFQURFUgogCiAKICAgRlRfTE9DQUwoIHZvaWQgKQpAQCAtNjIsNiArNjUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApOwogCiAKK0ZUX0VORF9IRUFERVIKKwogI2VuZGlmIC8qIEdYVk1PUlhfSF8gKi8KIAogCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J4MC5jIGIvc3JjL2d4dmFsaWQvZ3h2bW9yeDAuYwppbmRleCBkNzc2NGEwLi41YTQyZTU1IDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J4MC5jCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcngwLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgIFRydWVUeXBlR1gvQUFUIG1vcnggdGFibGUgdmFsaWRhdGlvbgogICogICBib2R5IGZvciB0eXBlMCAoSW5kaWMgU2NyaXB0IFJlYXJyYW5nZW1lbnQpIHN1YnRhYmxlLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMCBieQogICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vcngxLmMgYi9zcmMvZ3h2YWxpZC9neHZtb3J4MS5jCmluZGV4IDViNDFiMzYuLjlmOGI2OTAgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dm1vcngxLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9yeDEuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgVHJ1ZVR5cGVHWC9BQVQgbW9yeCB0YWJsZSB2YWxpZGF0aW9uCiAgKiAgIGJvZHkgZm9yIHR5cGUxIChDb250ZXh0dWFsIFN1YnN0aXR1dGlvbikgc3VidGFibGUuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiAgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2bW9yeDIuYyBiL3NyYy9neHZhbGlkL2d4dm1vcngyLmMKaW5kZXggZWM0YzgxMi4uOThiNWM0OSAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9yeDIuYworKysgYi9zcmMvZ3h2YWxpZC9neHZtb3J4Mi5jCkBAIC01LDcgKzUsNyBAQAogICogICBUcnVlVHlwZUdYL0FBVCBtb3J4IHRhYmxlIHZhbGlkYXRpb24KICAqICAgYm9keSBmb3IgdHlwZTIgKExpZ2F0dXJlIFN1YnN0aXR1dGlvbikgc3VidGFibGUuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiAgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2bW9yeDQuYyBiL3NyYy9neHZhbGlkL2d4dm1vcng0LmMKaW5kZXggN2IwNDE1My4uODU3ZTRkNCAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9yeDQuYworKysgYi9zcmMvZ3h2YWxpZC9neHZtb3J4NC5jCkBAIC01LDcgKzUsNyBAQAogICogICBUcnVlVHlwZUdYL0FBVCBtb3J4IHRhYmxlIHZhbGlkYXRpb24KICAqICAgYm9keSBmb3IgIm1vcngiIHR5cGU0IChOb24tQ29udGV4dHVhbCBHbHlwaCBTdWJzdGl0dXRpb24pIHN1YnRhYmxlLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMCBieQogICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vcng1LmMgYi9zcmMvZ3h2YWxpZC9neHZtb3J4NS5jCmluZGV4IDcwYTQ2MjMuLjdjZWJhMDcgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dm1vcng1LmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9yeDUuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgVHJ1ZVR5cGVHWC9BQVQgbW9yeCB0YWJsZSB2YWxpZGF0aW9uCiAgKiAgIGJvZHkgZm9yIHR5cGU1IChDb250ZXh0dWFsIEdseXBoIEluc2VydGlvbikgc3VidGFibGUuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiAgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2b3BiZC5jIGIvc3JjL2d4dmFsaWQvZ3h2b3BiZC5jCmluZGV4IGYwNTVhMjIuLmEzOThmZTAgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dm9wYmQuYworKysgYi9zcmMvZ3h2YWxpZC9neHZvcGJkLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUcnVlVHlwZUdYL0FBVCBvcGJkIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dnByb3AuYyBiL3NyYy9neHZhbGlkL2d4dnByb3AuYwppbmRleCBlMTkxMWVkLi5iZWU4YmFiIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZwcm9wLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2cHJvcC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHJ1ZVR5cGVHWC9BQVQgcHJvcCB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgYnkKICAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZ0cmFrLmMgYi9zcmMvZ3h2YWxpZC9neHZ0cmFrLmMKaW5kZXggYjc3OTRiNy4uNThhNjMxYyAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2dHJhay5jCisrKyBiL3NyYy9neHZhbGlkL2d4dnRyYWsuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlR1gvQUFUIHRyYWsgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvbW9kdWxlLm1rIGIvc3JjL2d4dmFsaWQvbW9kdWxlLm1rCmluZGV4IDA0MDY3Y2UuLmU3ZDQwOGQgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL21vZHVsZS5taworKysgYi9zcmMvZ3h2YWxpZC9tb2R1bGUubWsKQEAgLTIsNyArMiw3IEBACiAjIEZyZWVUeXBlIDIgZ3h2YWxpZCBtb2R1bGUgZGVmaW5pdGlvbgogIwogCi0jIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAjIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvcnVsZXMubWsgYi9zcmMvZ3h2YWxpZC9ydWxlcy5tawppbmRleCA0ZWY0NjNiLi5kNTVhNDkzIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9ydWxlcy5taworKysgYi9zcmMvZ3h2YWxpZC9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAjIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwpkaWZmIC0tZ2l0IGEvc3JjL2d6aXAvSmFtZmlsZSBiL3NyYy9nemlwL0phbWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjODA4YjcuLjAwMDAwMDAKLS0tIGEvc3JjL2d6aXAvSmFtZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMgRnJlZVR5cGUgMiBzcmMvZ3ppcCBKYW1maWxlCi0jCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IGJ5Ci0jIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKLSMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAotIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQotIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAotIyBmdWxseS4KLQotU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIGd6aXAgOwotCi1MaWJyYXJ5ICAkKEZUMl9MSUIpIDogZnRnemlwLmMgOwotCi0jIGVuZCBvZiBzcmMvcGNmIEphbWZpbGUKZGlmZiAtLWdpdCBhL3NyYy9nemlwL2Z0Z3ppcC5jIGIvc3JjL2d6aXAvZnRnemlwLmMKaW5kZXggNWU3OGJjNi4uZGU3ZDBmZCAxMDA2NDQKLS0tIGEvc3JjL2d6aXAvZnRnemlwLmMKKysrIGIvc3JjL2d6aXAvZnRnemlwLmMKQEAgLTgsNyArOCw3IEBACiAgKiBwYXJzZSBjb21wcmVzc2VkIFBDRiBmb250cywgYXMgZm91bmQgd2l0aCBtYW55IFgxMSBzZXJ2ZXIKICAqIGRpc3RyaWJ1dGlvbnMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsMTUgKzIwLDE0IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX01FTU9SWV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfR1pJUF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGd6aXAuaD4KICNpbmNsdWRlIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0gKIAogCi0jaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdG1vZGVyci5oPgogCiAjdW5kZWYgRlRFUlJPUlNfSF8KIApAQCAtMzYsNyArMzUsNyBAQAogI2RlZmluZSBGVF9FUlJfUFJFRklYICBHemlwX0Vycl8KICNkZWZpbmUgRlRfRVJSX0JBU0UgICAgRlRfTW9kX0Vycl9HemlwCiAKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KIAogCiAjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfWkxJQgpAQCAtNzQ2LDcgKzc0NSwxNyBAQAogICAgIHN0cmVhbS56ZnJlZSAgPSAoZnJlZV9mdW5jKSBmdF9nemlwX2ZyZWU7CiAgICAgc3RyZWFtLm9wYXF1ZSA9IG1lbW9yeTsKIAorICAgIC8qIFRoaXMgaXMgYSB0ZW1wb3JhcnkgZml4IGFuZCB3aWxsIGJlIHJlbW92ZWQgb25jZSB0aGUgaW50ZXJuYWwKKyAgICAgKiBjb3B5IG9mIHpsaWIgaXMgdXBkYXRlZCB0byB0aGUgbmV3ZXN0IHZlcnNpb24uIFRoZSBgfDMyJyBmbGFnCisgICAgICogaXMgb25seSBzdXBwb3J0ZWQgaW4gdGhlIG5ldyB2ZXJzaW9ucyBvZiB6bGliIHRvIGVuYWJsZSBnemlwCisgICAgICogZW5jb2RlZCBoZWFkZXIuCisgICAgICovCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQgogICAgIGVyciA9IGluZmxhdGVJbml0MiggJnN0cmVhbSwgTUFYX1dCSVRTfDMyICk7CisjZWxzZQorICAgIGVyciA9IGluZmxhdGVJbml0MiggJnN0cmVhbSwgTUFYX1dCSVRTICk7CisjZW5kaWYKKwogICAgIGlmICggZXJyICE9IFpfT0sgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CiAKZGlmZiAtLWdpdCBhL3NyYy9nemlwL2luZnV0aWwuaCBiL3NyYy9nemlwL2luZnV0aWwuaAppbmRleCA3MTc0YjZkLi5jZGYxOGI0IDEwMDY0NAotLS0gYS9zcmMvZ3ppcC9pbmZ1dGlsLmgKKysrIGIvc3JjL2d6aXAvaW5mdXRpbC5oCkBAIC04Niw3ICs4Niw3IEBACiAKIC8qIG1hc2tzIGZvciBsb3dlciBiaXRzIChzaXplIGdpdmVuIHRvIGF2b2lkIHNpbGx5IHdhcm5pbmdzIHdpdGggVmlzdWFsIEMrKykgKi8KICNpZm5kZWYgTk9fSU5GTEFURV9NQVNLCi1sb2NhbCB1SW50IGluZmxhdGVfbWFza1sxN107Citsb2NhbCBjb25zdCB1SW50IGluZmxhdGVfbWFza1sxN107CiAjZW5kaWYKIAogLyogY29weSBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIHNsaWRpbmcgd2luZG93IHRvIHRoZSBvdXRwdXQgYXJlYSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d6aXAvcnVsZXMubWsgYi9zcmMvZ3ppcC9ydWxlcy5tawppbmRleCA0NDIwNmExLi40ZWE4MjNmIDEwMDY0NAotLS0gYS9zcmMvZ3ppcC9ydWxlcy5taworKysgYi9zcmMvZ3ppcC9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9sencvSmFtZmlsZSBiL3NyYy9sencvSmFtZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEyZDZlYi4uMDAwMDAwMAotLS0gYS9zcmMvbHp3L0phbWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIEZyZWVUeXBlIDIgc3JjL2x6dyBKYW1maWxlCi0jCi0jIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5Ci0jIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKLSMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAotIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQotIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAotIyBmdWxseS4KLQotU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIGx6dyA7Ci0KLUxpYnJhcnkgICQoRlQyX0xJQikgOiBmdGx6dy5jIDsKLQotIyBlbmQgb2Ygc3JjL2x6dyBKYW1maWxlCmRpZmYgLS1naXQgYS9zcmMvbHp3L2Z0bHp3LmMgYi9zcmMvbHp3L2Z0bHp3LmMKaW5kZXggOTgwNWExZS4uZGRiODFlNiAxMDA2NDQKLS0tIGEvc3JjL2x6dy9mdGx6dy5jCisrKyBiL3NyYy9sencvZnRsencuYwpAQCAtOCw3ICs4LDcgQEAKICAqIGJlIHVzZWQgdG8gcGFyc2UgY29tcHJlc3NlZCBQQ0YgZm9udHMsIGFzIGZvdW5kIHdpdGggbWFueSBYMTEgc2VydmVyCiAgKiBkaXN0cmlidXRpb25zLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogQWxiZXJ0IENoaW4tQS1Zb3VuZy4KICAqCiAgKiBiYXNlZCBvbiBjb2RlIGluIGBzcmMvZ3ppcC9mdGd6aXAuYycKQEAgLTIxLDE1ICsyMSwxNCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX01FTU9SWV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfTFpXX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bHp3Lmg+CiAjaW5jbHVkZSBGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9ICiAKIAotI2luY2x1ZGUgRlRfTU9EVUxFX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRtb2RlcnIuaD4KIAogI3VuZGVmIEZURVJST1JTX0hfCiAKQEAgLTM3LDcgKzM2LDcgQEAKICNkZWZpbmUgRlRfRVJSX1BSRUZJWCAgTFpXX0Vycl8KICNkZWZpbmUgRlRfRVJSX0JBU0UgICAgRlRfTW9kX0Vycl9MWlcKIAotI2luY2x1ZGUgRlRfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgogCiAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9MWlcKZGlmZiAtLWdpdCBhL3NyYy9sencvZnR6b3Blbi5jIGIvc3JjL2x6dy9mdHpvcGVuLmMKaW5kZXggNjdlNjc2MC4uODg0ZDJlYyAxMDA2NDQKLS0tIGEvc3JjL2x6dy9mdHpvcGVuLmMKKysrIGIvc3JjL2x6dy9mdHpvcGVuLmMKQEAgLTgsNyArOCw3IEBACiAgKiBiZSB1c2VkIHRvIHBhcnNlIGNvbXByZXNzZWQgUENGIGZvbnRzLCBhcyBmb3VuZCB3aXRoIG1hbnkgWDExIHNlcnZlcgogICogZGlzdHJpYnV0aW9ucy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lci4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw5ICsyMCw5IEBACiAgKi8KIAogI2luY2x1ZGUgImZ0em9wZW4uaCIKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX01FTU9SWV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CiAKIAogICBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9zcmMvbHp3L2Z0em9wZW4uaCBiL3NyYy9sencvZnR6b3Blbi5oCmluZGV4IDQ0ZmUzNmQuLmQ4NzY4ZjcgMTAwNjQ0Ci0tLSBhL3NyYy9sencvZnR6b3Blbi5oCisrKyBiL3NyYy9sencvZnR6b3Blbi5oCkBAIC04LDcgKzgsNyBAQAogICogYmUgdXNlZCB0byBwYXJzZSBjb21wcmVzc2VkIFBDRiBmb250cywgYXMgZm91bmQgd2l0aCBtYW55IFgxMSBzZXJ2ZXIKICAqIGRpc3RyaWJ1dGlvbnMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjIsOSArMjIsOSBAQAogI2lmbmRlZiBGVFpPUEVOX0hfCiAjZGVmaW5lIEZUWk9QRU5fSF8KIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAorRlRfQkVHSU5fSEVBREVSCiAKICAgLyoKICAgICogVGhpcyBpcyBhIGNvbXBsZXRlIHJlLWltcGxlbWVudGF0aW9uIG9mIHRoZSBMWlcgZmlsZSByZWFkZXIsCkBAIC0xNjYsNiArMTY2LDggQEAKIAogLyogKi8KIAorRlRfRU5EX0hFQURFUgorCiAjZW5kaWYgLyogRlRaT1BFTl9IXyAqLwogCiAKZGlmZiAtLWdpdCBhL3NyYy9sencvcnVsZXMubWsgYi9zcmMvbHp3L3J1bGVzLm1rCmluZGV4IDkzMGIzMmUuLjM0NjhlZTAgMTAwNjQ0Ci0tLSBhL3NyYy9sencvcnVsZXMubWsKKysrIGIvc3JjL2x6dy9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAjIEFsYmVydCBDaGluLUEtWW91bmcuCiAjCiAjIGJhc2VkIG9uIGBzcmMvbHp3L3J1bGVzLm1rJwpkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvSmFtZmlsZSBiL3NyYy9vdHZhbGlkL0phbWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2ZGIwZTEuLjAwMDAwMDAKLS0tIGEvc3JjL290dmFsaWQvSmFtZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSMgRnJlZVR5cGUgMiBzcmMvb3R2YWxpZCBKYW1maWxlCi0jCi0jIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5Ci0jIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKLSMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAotIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQotIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAotIyBmdWxseS4KLQotU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIG90dmFsaWQgOwotCi17Ci0gIGxvY2FsICBfc291cmNlcyA7Ci0KLSAgaWYgJChGVDJfTVVMVEkpCi0gIHsKLSAgICBfc291cmNlcyA9IG90dmJhc2UKLSAgICAgICAgICAgICAgIG90dmNvbW1uCi0gICAgICAgICAgICAgICBvdHZnZGVmCi0gICAgICAgICAgICAgICBvdHZncG9zCi0gICAgICAgICAgICAgICBvdHZnc3ViCi0gICAgICAgICAgICAgICBvdHZqc3RmCi0gICAgICAgICAgICAgICBvdHZtYXRoCi0gICAgICAgICAgICAgICBvdHZtb2QKLSAgICAgICAgICAgICAgIDsKLSAgfQotICBlbHNlCi0gIHsKLSAgICBfc291cmNlcyA9IG90dmFsaWQgOwotICB9Ci0KLSAgTGlicmFyeSAgJChGVDJfTElCKSA6ICQoX3NvdXJjZXMpLmMgOwotfQotCi0jIGVuZCBvZiBzcmMvb3R2YWxpZCBKYW1maWxlCmRpZmYgLS1naXQgYS9zcmMvb3R2YWxpZC9tb2R1bGUubWsgYi9zcmMvb3R2YWxpZC9tb2R1bGUubWsKaW5kZXggNWVhNWI3Yi4uNjdiOTgyMCAxMDA2NDQKLS0tIGEvc3JjL290dmFsaWQvbW9kdWxlLm1rCisrKyBiL3NyYy9vdHZhbGlkL21vZHVsZS5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dmFsaWQuYyBiL3NyYy9vdHZhbGlkL290dmFsaWQuYwppbmRleCBlMzk2NGI5Li5kNjQwMjA5IDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZhbGlkLmMKKysrIGIvc3JjL290dmFsaWQvb3R2YWxpZC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgdmFsaWRhdG9yIGZvciBPcGVuVHlwZSB0YWJsZXMgKGJvZHkgb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTcsNyArMTcsNiBAQAogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAKICNpbmNsdWRlICJvdHZiYXNlLmMiCiAjaW5jbHVkZSAib3R2Y29tbW4uYyIKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dmFsaWQuaCBiL3NyYy9vdHZhbGlkL290dmFsaWQuaAppbmRleCA1Y2E4MTlmLi44MjA4ZmYwIDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZhbGlkLmgKKysrIGIvc3JjL290dmFsaWQvb3R2YWxpZC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgT3BlblR5cGUgdGFibGUgdmFsaWRhdGlvbiAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCwxMyArMjAsMTIgQEAKICNkZWZpbmUgT1RWQUxJRF9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CiAKLSNpbmNsdWRlICJvdHZlcnJvci5oIiAgICAgICAgICAgLyogbXVzdCBjb21lIGJlZm9yZSBGVF9JTlRFUk5BTF9WQUxJREFURV9IICovCisjaW5jbHVkZSAib3R2ZXJyb3IuaCIgICAgICAgICAgICAgICAgICAgICAgLyogbXVzdCBjb21lIGJlZm9yZSBgZnR2YWxpZC5oJyAqLwogCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9WQUxJREFURV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0dmFsaWQuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2YmFzZS5jIGIvc3JjL290dmFsaWQvb3R2YmFzZS5jCmluZGV4IGJlNjlkN2MuLjI1MGFlOTggMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dmJhc2UuYworKysgYi9zcmMvb3R2YWxpZC9vdHZiYXNlLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBPcGVuVHlwZSBCQVNFIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dmNvbW1uLmMgYi9zcmMvb3R2YWxpZC9vdHZjb21tbi5jCmluZGV4IDVlZDE3MjMuLmZhYWE4NDYgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dmNvbW1uLmMKKysrIGIvc3JjL290dmFsaWQvb3R2Y29tbW4uYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIE9wZW5UeXBlIGNvbW1vbiB0YWJsZXMgdmFsaWRhdGlvbiAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTUxLDYgKzE1MSw5IEBACiAgICAgRlRfVUludCAgIHJlc3VsdCA9IDA7CiAKIAorICAgIGlmICggIWNvdW50ICkKKyAgICAgIHJldHVybiByZXN1bHQ7CisKICAgICBzd2l0Y2ggKCBDb3ZlcmFnZUZvcm1hdCApCiAgICAgewogICAgIGNhc2UgMToKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dmNvbW1uLmggYi9zcmMvb3R2YWxpZC9vdHZjb21tbi5oCmluZGV4IGJmY2M1YjkuLmY5OTI2MDMgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dmNvbW1uLmgKKysrIGIvc3JjL290dmFsaWQvb3R2Y29tbW4uaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIE9wZW5UeXBlIGNvbW1vbiB0YWJsZXMgdmFsaWRhdGlvbiAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsOSArMjAsOCBAQAogI2RlZmluZSBPVFZDT01NTl9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgIm90dmFsaWQuaCIKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvb3R2YWxpZC9vdHZlcnJvci5oIGIvc3JjL290dmFsaWQvb3R2ZXJyb3IuaAppbmRleCBhN2QzNWFjLi45NzllOWNiIDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZlcnJvci5oCisrKyBiL3NyYy9vdHZhbGlkL290dmVycm9yLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBPcGVuVHlwZSB2YWxpZGF0aW9uIG1vZHVsZSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIE9UVkVSUk9SX0hfCiAjZGVmaW5lIE9UVkVSUk9SX0hfCiAKLSNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kZXJyLmg+CiAKICN1bmRlZiBGVEVSUk9SU19IXwogCkBAIC0zNCw3ICszNCw3IEBACiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIE9UVl9FcnJfCiAjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfT1R2YWxpZAogCi0jaW5jbHVkZSBGVF9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZXJyb3JzLmg+CiAKICNlbmRpZiAvKiBPVFZFUlJPUl9IXyAqLwogCmRpZmYgLS1naXQgYS9zcmMvb3R2YWxpZC9vdHZnZGVmLmMgYi9zcmMvb3R2YWxpZC9vdHZnZGVmLmMKaW5kZXggMjUyOWI1NC4uODg4NzRiOCAxMDA2NDQKLS0tIGEvc3JjL290dmFsaWQvb3R2Z2RlZi5jCisrKyBiL3NyYy9vdHZhbGlkL290dmdkZWYuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIE9wZW5UeXBlIEdERUYgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2Z3Bvcy5jIGIvc3JjL290dmFsaWQvb3R2Z3Bvcy5jCmluZGV4IGYzYmRkZWEuLjI5ZDU2ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dmdwb3MuYworKysgYi9zcmMvb3R2YWxpZC9vdHZncG9zLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBPcGVuVHlwZSBHUE9TIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dmdwb3MuaCBiL3NyYy9vdHZhbGlkL290dmdwb3MuaAppbmRleCBiMzE1NDMxLi4wNmEwM2EwIDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZncG9zLmgKKysrIGIvc3JjL290dmFsaWQvb3R2Z3Bvcy5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgT3BlblR5cGUgR1BPUyB0YWJsZSB2YWxpZGF0b3IgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dmdzdWIuYyBiL3NyYy9vdHZhbGlkL290dmdzdWIuYwppbmRleCA5N2RhOTk3Li5mMGQ1NjNiIDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZnc3ViLmMKKysrIGIvc3JjL290dmFsaWQvb3R2Z3N1Yi5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgT3BlblR5cGUgR1NVQiB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCmRpZmYgLS1naXQgYS9zcmMvb3R2YWxpZC9vdHZqc3RmLmMgYi9zcmMvb3R2YWxpZC9vdHZqc3RmLmMKaW5kZXggZDRlNmQ4Ny4uNzlkZTdiOCAxMDA2NDQKLS0tIGEvc3JjL290dmFsaWQvb3R2anN0Zi5jCisrKyBiL3NyYy9vdHZhbGlkL290dmpzdGYuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIE9wZW5UeXBlIEpTVEYgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2bWF0aC5jIGIvc3JjL290dmFsaWQvb3R2bWF0aC5jCmluZGV4IDNhYWYwZWMuLmRmZGVhYWIgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dm1hdGguYworKysgYi9zcmMvb3R2YWxpZC9vdHZtYXRoLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBPcGVuVHlwZSBNQVRIIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFdyaXR0ZW4gYnkgR2VvcmdlIFdpbGxpYW1zLgpkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2bW9kLmMgYi9zcmMvb3R2YWxpZC9vdHZtb2QuYwppbmRleCBmNDE3YmQyLi4wMTg4YjI3IDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZtb2QuYworKysgYi9zcmMvb3R2YWxpZC9vdHZtb2QuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlJ3MgT3BlblR5cGUgdmFsaWRhdGlvbiBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDEyICsxNiwxMSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUJMRVNfSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICi0jaW5jbHVkZSBGVF9PUEVOVFlQRV9WQUxJREFURV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfT1BFTlRZUEVfVkFMSURBVEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL3R0dGFibGVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWdzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRvdHZhbC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaD4KIAogI2luY2x1ZGUgIm90dm1vZC5oIgogI2luY2x1ZGUgIm90dmFsaWQuaCIKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dm1vZC5oIGIvc3JjL290dmFsaWQvb3R2bW9kLmgKaW5kZXggNTUzOWRlNy4uZWZkNmRhMCAxMDA2NDQKLS0tIGEvc3JjL290dmFsaWQvb3R2bW9kLmgKKysrIGIvc3JjL290dmFsaWQvb3R2bW9kLmgKQEAgLTUsNyArNSw3IEBACiAgKiAgIEZyZWVUeXBlJ3MgT3BlblR5cGUgdmFsaWRhdGlvbiBtb2R1bGUgaW1wbGVtZW50YXRpb24KICAqICAgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIxLDggKzIxLDcgQEAKICNkZWZpbmUgT1RWTU9EX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9NT0RVTEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kYXBpLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvb3R2YWxpZC9ydWxlcy5tayBiL3NyYy9vdHZhbGlkL3J1bGVzLm1rCmluZGV4IDNjNmVjZTEuLjdmMDE2OWYgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL3J1bGVzLm1rCisrKyBiL3NyYy9vdHZhbGlkL3J1bGVzLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3BjZi9KYW1maWxlIGIvc3JjL3BjZi9KYW1maWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDE3ZDUzLi4wMDAwMDAwCi0tLSBhL3NyYy9wY2YvSmFtZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSMgRnJlZVR5cGUgMiBzcmMvcGNmIEphbWZpbGUKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgYnkKLSMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgotIwotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAotIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCi0jIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91Ci0jIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0Ci0jIGZ1bGx5LgotCi1TdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgcGNmIDsKLQotewotICBsb2NhbCAgX3NvdXJjZXMgOwotCi0gIGlmICQoRlQyX01VTFRJKQotICB7Ci0gICAgX3NvdXJjZXMgPSBwY2Zkcml2cgotICAgICAgICAgICAgICAgcGNmcmVhZAotICAgICAgICAgICAgICAgcGNmdXRpbAotICAgICAgICAgICAgICAgOwotICB9Ci0gIGVsc2UKLSAgewotICAgIF9zb3VyY2VzID0gcGNmIDsKLSAgfQotCi0gIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKLX0KLQotIyBlbmQgb2Ygc3JjL3BjZiBKYW1maWxlCmRpZmYgLS1naXQgYS9zcmMvcGNmL3BjZi5jIGIvc3JjL3BjZi9wY2YuYwppbmRleCA4ZmZkNmUyLi42YjMwZmIyIDEwMDY0NAotLS0gYS9zcmMvcGNmL3BjZi5jCisrKyBiL3NyYy9wY2YvcGNmLmMKQEAgLTI2LDcgKzI2LDYgQEAKIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogCiAjaW5jbHVkZSAicGNmZHJpdnIuYyIKICNpbmNsdWRlICJwY2ZyZWFkLmMiCmRpZmYgLS1naXQgYS9zcmMvcGNmL3BjZi5oIGIvc3JjL3BjZi9wY2YuaAppbmRleCAzM2JlNGJjLi4zMTM0Y2MzIDEwMDY0NAotLS0gYS9zcmMvcGNmL3BjZi5oCisrKyBiL3NyYy9wY2YvcGNmLmgKQEAgLTI5LDkgKzI5LDggQEAKICNkZWZpbmUgUENGX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9EUklWRVJfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRydi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvcGNmL3BjZmRyaXZyLmMgYi9zcmMvcGNmL3BjZmRyaXZyLmMKaW5kZXggYjM5NTkyYy4uZTlkZDUxNyAxMDA2NDQKLS0tIGEvc3JjL3BjZi9wY2Zkcml2ci5jCisrKyBiL3NyYy9wY2YvcGNmZHJpdnIuYwpAQCAtMjUsMTcgKzI1LDE2IEBACiAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9HWklQX0gKLSNpbmNsdWRlIEZUX0xaV19ICi0jaW5jbHVkZSBGVF9CWklQMl9ICi0jaW5jbHVkZSBGVF9FUlJPUlNfSAotI2luY2x1ZGUgRlRfQkRGX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX0lEU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRnemlwLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRsencuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGJ6aXAyLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGJkZi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL3R0bmFtZWlkLmg+CiAKICNpbmNsdWRlICJwY2YuaCIKICNpbmNsdWRlICJwY2Zkcml2ci5oIgpAQCAtNDcsMTAgKzQ2LDEwIEBACiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHBjZnJlYWQKIAotI2luY2x1ZGUgRlRfU0VSVklDRV9CREZfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSAotI2luY2x1ZGUgRlRfRFJJVkVSX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRkcml2ZXIuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTM3LDcgKzEzNiw3IEBACiAgICAgRlRfVUludDMyICBjaGFyY29kZSAgPSAqYWNoYXJjb2RlOwogICAgIEZUX1VTaG9ydCAgY2hhcmNvZGVSb3c7CiAgICAgRlRfVVNob3J0ICBjaGFyY29kZUNvbDsKLSAgICBGVF9JbnQgICAgIHJlc3VsdCA9IDA7CisgICAgRlRfVUludCAgICByZXN1bHQgPSAwOwogCiAKICAgICB3aGlsZSAoIGNoYXJjb2RlIDwgKEZUX1VJbnQzMikoIGVuYy0+bGFzdFJvdyAqIDI1NiArIGVuYy0+bGFzdENvbCApICkKQEAgLTYwNyw4ICs2MDYsOSBAQAogICAgICAgICBpZiAoIHByb3AtPnZhbHVlLmwgPiAweDdGRkZGRkZGTCAgICAgICAgICB8fAogICAgICAgICAgICAgIHByb3AtPnZhbHVlLmwgPCAoIC0xIC0gMHg3RkZGRkZGRkwgKSApCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9UUkFDRTEoKCAicGNmX2dldF9iZGZfcHJvcGVydHk6IiApKTsKLSAgICAgICAgICBGVF9UUkFDRTEoKCAiIHRvbyBsYXJnZSBpbnRlZ2VyIDB4JXggaXMgdHJ1bmNhdGVkXG4iICkpOworICAgICAgICAgIEZUX1RSQUNFMSgoICJwY2ZfZ2V0X2JkZl9wcm9wZXJ0eToiCisgICAgICAgICAgICAgICAgICAgICAgIiB0b28gbGFyZ2UgaW50ZWdlciAweCVseCBpcyB0cnVuY2F0ZWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgcHJvcC0+dmFsdWUubCApKTsKICAgICAgICAgfQogCiAgICAgICAgIC8qCmRpZmYgLS1naXQgYS9zcmMvcGNmL3BjZmRyaXZyLmggYi9zcmMvcGNmL3BjZmRyaXZyLmgKaW5kZXggNzNkYjA4Mi4uZDQ2NTM5MyAxMDA2NDQKLS0tIGEvc3JjL3BjZi9wY2Zkcml2ci5oCisrKyBiL3NyYy9wY2YvcGNmZHJpdnIuaApAQCAtMjgsOCArMjgsNyBAQAogI2lmbmRlZiBQQ0ZEUklWUl9IXwogI2RlZmluZSBQQ0ZEUklWUl9IXwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RSSVZFUl9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkcnYuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9wY2YvcGNmZXJyb3IuaCBiL3NyYy9wY2YvcGNmZXJyb3IuaAppbmRleCAyZTY5ZDFkLi44YjllOTkwIDEwMDY0NAotLS0gYS9zcmMvcGNmL3BjZmVycm9yLmgKKysrIGIvc3JjL3BjZi9wY2ZlcnJvci5oCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZuZGVmIFBDRkVSUk9SX0hfCiAjZGVmaW5lIFBDRkVSUk9SX0hfCiAKLSNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kZXJyLmg+CiAKICN1bmRlZiBGVEVSUk9SU19IXwogCkBAIC0zMyw3ICszMyw3IEBACiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFBDRl9FcnJfCiAjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfUENGCiAKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KIAogI2VuZGlmIC8qIFBDRkVSUk9SX0hfICovCiAKZGlmZiAtLWdpdCBhL3NyYy9wY2YvcGNmcmVhZC5jIGIvc3JjL3BjZi9wY2ZyZWFkLmMKaW5kZXggMmZmZTIyZC4uODgxNzY4MiAxMDA2NDQKLS0tIGEvc3JjL3BjZi9wY2ZyZWFkLmMKKysrIGIvc3JjL3BjZi9wY2ZyZWFkLmMKQEAgLTI1LDExICsyNSwxMCBAQAogKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgogCiAjaW5jbHVkZSAicGNmLmgiCiAjaW5jbHVkZSAicGNmcmVhZC5oIgpAQCAtMTIyLDcgKzEyMSw3IEBACiAgICAgICAgICB0b2MtPmNvdW50ID4gOSAgICAgICAgICAgICAgICAgICAgICkKICAgICB7CiAgICAgICBGVF9UUkFDRTAoKCAicGNmX3JlYWRfVE9DOiBhZGp1c3RpbmcgbnVtYmVyIG9mIHRhYmxlcyIKLSAgICAgICAgICAgICAgICAgICIgKGZyb20gJWQgdG8gJWQpXG4iLAorICAgICAgICAgICAgICAgICAgIiAoZnJvbSAlbGQgdG8gJWxkKVxuIiwKICAgICAgICAgICAgICAgICAgIHRvYy0+Y291bnQsCiAgICAgICAgICAgICAgICAgICBGVF9NSU4oIHN0cmVhbS0+c2l6ZSA+PiA0LCA5ICkgKSk7CiAgICAgICB0b2MtPmNvdW50ID0gRlRfTUlOKCBzdHJlYW0tPnNpemUgPj4gNCwgOSApOwpAQCAtMjQyLDcgKzI0MSw3IEBACiAgICAgICAgICAgaWYgKCB0YWJsZXNbaV0udHlwZSA9PSAoRlRfVUludCkoIDEgPDwgaiApICkKICAgICAgICAgICAgIG5hbWUgPSB0YWJsZU5hbWVzW2pdOwogCi0gICAgICAgIEZUX1RSQUNFNCgoICIgICVkOiB0eXBlPSVzLCBmb3JtYXQ9MHglWCwiCisgICAgICAgIEZUX1RSQUNFNCgoICIgICVkOiB0eXBlPSVzLCBmb3JtYXQ9MHglbFgsIgogICAgICAgICAgICAgICAgICAgICAiIHNpemU9JWxkICgweCVsWCksIG9mZnNldD0lbGQgKDB4JWxYKVxuIiwKICAgICAgICAgICAgICAgICAgICAgaSwgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgdGFibGVzW2ldLmZvcm1hdCwKQEAgLTY2MSw3ICs2NjAsNyBAQAogICAgICAgewogICAgICAgICBwcm9wZXJ0aWVzW2ldLnZhbHVlLmwgPSBwcm9wc1tpXS52YWx1ZTsKIAotICAgICAgICBGVF9UUkFDRTQoKCAiICVkXG4iLCBwcm9wZXJ0aWVzW2ldLnZhbHVlLmwgKSk7CisgICAgICAgIEZUX1RSQUNFNCgoICIgJWxkXG4iLCBwcm9wZXJ0aWVzW2ldLnZhbHVlLmwgKSk7CiAgICAgICB9CiAgICAgfQogCkBAIC03OTgsNyArNzk3LDcgQEAKICAgICAgICAgbWV0cmljcy0+ZGVzY2VudCAgICAgICAgICA9IDA7CiAKICAgICAgICAgRlRfVFJBQ0UwKCggInBjZl9nZXRfbWV0cmljczoiCi0gICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBtZXRyaWNzIGZvciBnbHlwaCAlZFxuIiwgaSApKTsKKyAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIG1ldHJpY3MgZm9yIGdseXBoICVsZFxuIiwgaSApKTsKICAgICAgIH0KICAgICB9CiAKQEAgLTkxOCwxMSArOTE3LDExIEBACiAKICAgICAgIHNpemViaXRtYXBzID0gYml0bWFwU2l6ZXNbUENGX0dMWVBIX1BBRF9JTkRFWCggZm9ybWF0ICldOwogCi0gICAgICBGVF9UUkFDRTQoKCAiICAlbGQtYml0IHBhZGRpbmcgaW1wbGllcyBhIHNpemUgb2YgJWx1XG4iLAorICAgICAgRlRfVFJBQ0U0KCggIiAgJWQtYml0IHBhZGRpbmcgaW1wbGllcyBhIHNpemUgb2YgJWx1XG4iLAogICAgICAgICAgICAgICAgICAgOCA8PCBpLCBiaXRtYXBTaXplc1tpXSApKTsKICAgICB9CiAKLSAgICBGVF9UUkFDRTQoKCAiICAlbHUgYml0bWFwcywgdXNpbmcgJWxkLWJpdCBwYWRkaW5nXG4iLAorICAgIEZUX1RSQUNFNCgoICIgICVsdSBiaXRtYXBzLCB1c2luZyAlZC1iaXQgcGFkZGluZ1xuIiwKICAgICAgICAgICAgICAgICBuYml0bWFwcywKICAgICAgICAgICAgICAgICA4IDw8IFBDRl9HTFlQSF9QQURfSU5ERVgoIGZvcm1hdCApICkpOwogICAgIEZUX1RSQUNFNCgoICIgIGJpdG1hcCBzaXplOiAlbHVcbiIsIHNpemViaXRtYXBzICkpOwpAQCAtMTI1MiwxMyArMTI1MSwxMyBAQAogICAgIGlmICggRlRfQUJTKCBhY2NlbC0+Zm9udEFzY2VudCApID4gMHg3RkZGICkKICAgICB7CiAgICAgICBhY2NlbC0+Zm9udEFzY2VudCA9IGFjY2VsLT5mb250QXNjZW50IDwgMCA/IC0weDdGRkYgOiAweDdGRkY7Ci0gICAgICBGVF9UUkFDRTAoKCAicGZjX2dldF9hY2NlbDogY2xhbXBpbmcgZm9udCBhc2NlbnQgdG8gdmFsdWUgJWRcbiIsCisgICAgICBGVF9UUkFDRTAoKCAicGZjX2dldF9hY2NlbDogY2xhbXBpbmcgZm9udCBhc2NlbnQgdG8gdmFsdWUgJWxkXG4iLAogICAgICAgICAgICAgICAgICAgYWNjZWwtPmZvbnRBc2NlbnQgKSk7CiAgICAgfQogICAgIGlmICggRlRfQUJTKCBhY2NlbC0+Zm9udERlc2NlbnQgKSA+IDB4N0ZGRiApCiAgICAgewogICAgICAgYWNjZWwtPmZvbnREZXNjZW50ID0gYWNjZWwtPmZvbnREZXNjZW50IDwgMCA/IC0weDdGRkYgOiAweDdGRkY7Ci0gICAgICBGVF9UUkFDRTAoKCAicGZjX2dldF9hY2NlbDogY2xhbXBpbmcgZm9udCBkZXNjZW50IHRvIHZhbHVlICVkXG4iLAorICAgICAgRlRfVFJBQ0UwKCggInBmY19nZXRfYWNjZWw6IGNsYW1waW5nIGZvbnQgZGVzY2VudCB0byB2YWx1ZSAlbGRcbiIsCiAgICAgICAgICAgICAgICAgICBhY2NlbC0+Zm9udERlc2NlbnQgKSk7CiAgICAgfQogCkBAIC0xNjMxLDcgKzE2MzAsNyBAQAogICAgICAgICAgIGlmICggRlRfQUJTKCBwcm9wLT52YWx1ZS5sICkgPiAweDUwNEMyTCApIC8qIDB4N0ZGRiAqIDcyMjcwLzcyMDAgKi8KICAgICAgICAgICB7CiAgICAgICAgICAgICBic2l6ZS0+c2l6ZSA9IDB4N0ZGRjsKLSAgICAgICAgICAgIEZUX1RSQUNFMCgoICJwY2ZfbG9hZF9mb250OiBjbGFtcGluZyBwb2ludCBzaXplIHRvIHZhbHVlICVkXG4iLAorICAgICAgICAgICAgRlRfVFJBQ0UwKCggInBjZl9sb2FkX2ZvbnQ6IGNsYW1waW5nIHBvaW50IHNpemUgdG8gdmFsdWUgJWxkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgYnNpemUtPnNpemUgKSk7CiAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UKQEAgLTE2NTAsNyArMTY0OSw3IEBACiAgICAgICAgICAgaWYgKCBGVF9BQlMoIHByb3AtPnZhbHVlLmwgKSA+IDB4N0ZGRiApCiAgICAgICAgICAgewogICAgICAgICAgICAgYnNpemUtPnlfcHBlbSA9IDB4N0ZGRiA8PCA2OwotICAgICAgICAgICAgRlRfVFJBQ0UwKCggInBjZl9sb2FkX2ZvbnQ6IGNsYW1waW5nIHBpeGVsIHNpemUgdG8gdmFsdWUgJWRcbiIsCisgICAgICAgICAgICBGVF9UUkFDRTAoKCAicGNmX2xvYWRfZm9udDogY2xhbXBpbmcgcGl4ZWwgc2l6ZSB0byB2YWx1ZSAlbGRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBic2l6ZS0+eV9wcGVtICkpOwogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9zcmMvcGNmL3BjZnJlYWQuaCBiL3NyYy9wY2YvcGNmcmVhZC5oCmluZGV4IGJlZDMwZTUuLmE1NDY0OGYgMTAwNjQ0Ci0tLSBhL3NyYy9wY2YvcGNmcmVhZC5oCisrKyBiL3NyYy9wY2YvcGNmcmVhZC5oCkBAIC0yOSw3ICsyOSw2IEBACiAjZGVmaW5lIFBDRlJFQURfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KIAogRlRfQkVHSU5fSEVBREVSCiAKZGlmZiAtLWdpdCBhL3NyYy9wY2YvcGNmdXRpbC5jIGIvc3JjL3BjZi9wY2Z1dGlsLmMKaW5kZXggMDQ1YzQyZC4uNWQzYzAwNyAxMDA2NDQKLS0tIGEvc3JjL3BjZi9wY2Z1dGlsLmMKKysrIGIvc3JjL3BjZi9wY2Z1dGlsLmMKQEAgLTMyLDcgKzMyLDYgQEAKIC8qIE1vZGlmaWVkIGZvciB1c2Ugd2l0aCBGcmVlVHlwZSAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgInBjZnV0aWwuaCIKIAogCmRpZmYgLS1naXQgYS9zcmMvcGNmL3BjZnV0aWwuaCBiL3NyYy9wY2YvcGNmdXRpbC5oCmluZGV4IGJlOTg2ZTcuLmExOTdjMTUgMTAwNjQ0Ci0tLSBhL3NyYy9wY2YvcGNmdXRpbC5oCisrKyBiL3NyYy9wY2YvcGNmdXRpbC5oCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ICi0KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9jb21waWxlci1tYWNyb3MuaD4KIAogRlRfQkVHSU5fSEVBREVSCiAKZGlmZiAtLWdpdCBhL3NyYy9wZnIvSmFtZmlsZSBiL3NyYy9wZnIvSmFtZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJjYTgwNi4uMDAwMDAwMAotLS0gYS9zcmMvcGZyL0phbWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIEZyZWVUeXBlIDIgc3JjL3BmciBKYW1maWxlCi0jCi0jIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5Ci0jIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKLSMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAotIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQotIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAotIyBmdWxseS4KLQotU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIHBmciA7Ci0KLXsKLSAgbG9jYWwgIF9zb3VyY2VzIDsKLQotICBpZiAkKEZUMl9NVUxUSSkKLSAgewotICAgIF9zb3VyY2VzID0gcGZyY21hcAotICAgICAgICAgICAgICAgcGZyZHJpdnIKLSAgICAgICAgICAgICAgIHBmcmdsb2FkCi0gICAgICAgICAgICAgICBwZnJsb2FkCi0gICAgICAgICAgICAgICBwZnJvYmpzCi0gICAgICAgICAgICAgICBwZnJzYml0Ci0gICAgICAgICAgICAgICA7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgX3NvdXJjZXMgPSBwZnIgOwotICB9Ci0KLSAgTGlicmFyeSAgJChGVDJfTElCKSA6ICQoX3NvdXJjZXMpLmMgOwotfQotCi0jIGVuZCBvZiBzcmMvcGZyIEphbWZpbGUKZGlmZiAtLWdpdCBhL3NyYy9wZnIvbW9kdWxlLm1rIGIvc3JjL3Bmci9tb2R1bGUubWsKaW5kZXggMzBkODc2ZC4uNzYyMzUzZCAxMDA2NDQKLS0tIGEvc3JjL3Bmci9tb2R1bGUubWsKKysrIGIvc3JjL3Bmci9tb2R1bGUubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvcGZyL3Bmci5jIGIvc3JjL3Bmci9wZnIuYwppbmRleCA2ZDg4NWVhLi45MjY0Yzc3IDEwMDY0NAotLS0gYS9zcmMvcGZyL3Bmci5jCisrKyBiL3NyYy9wZnIvcGZyLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBQRlIgZHJpdmVyIGNvbXBvbmVudC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNyw3ICsxNyw2IEBACiAKIAogI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KIAogI2luY2x1ZGUgInBmcmNtYXAuYyIKICNpbmNsdWRlICJwZnJkcml2ci5jIgpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJjbWFwLmMgYi9zcmMvcGZyL3BmcmNtYXAuYwppbmRleCBiZmExYjllLi5lYmM3Yjg0IDEwMDY0NAotLS0gYS9zcmMvcGZyL3BmcmNtYXAuYworKysgYi9zcmMvcGZyL3BmcmNtYXAuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIFBGUiBjbWFwIGhhbmRsaW5nIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiw4ICsxNiw3IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CiAjaW5jbHVkZSAicGZyY21hcC5oIgogI2luY2x1ZGUgInBmcm9ianMuaCIKIApkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJjbWFwLmggYi9zcmMvcGZyL3BmcmNtYXAuaAppbmRleCAxZTIwM2EwLi5hNmQ5MjBjIDEwMDY0NAotLS0gYS9zcmMvcGZyL3BmcmNtYXAuaAorKysgYi9zcmMvcGZyL3BmcmNtYXAuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIFBGUiBjbWFwIGhhbmRsaW5nIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOSw4ICsxOSw3IEBACiAjaWZuZGVmIFBGUkNNQVBfSF8KICNkZWZpbmUgUEZSQ01BUF9IXwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgogI2luY2x1ZGUgInBmcnR5cGVzLmgiCiAKIApkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJkcml2ci5jIGIvc3JjL3Bmci9wZnJkcml2ci5jCmluZGV4IGY2N2VlYmYuLmIxNDMyMDggMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcGZyZHJpdnIuYworKysgYi9zcmMvcGZyL3BmcmRyaXZyLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBQRlIgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsMTEgKzE2LDEwIEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BGUl9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX0ZPTlRfRk9STUFUX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10Lmg+CiAjaW5jbHVkZSAicGZyZHJpdnIuaCIKICNpbmNsdWRlICJwZnJvYmpzLmgiCiAKZGlmZiAtLWdpdCBhL3NyYy9wZnIvcGZyZHJpdnIuaCBiL3NyYy9wZnIvcGZyZHJpdnIuaAppbmRleCAzM2I3Yjk0Li43NjQ2YjRkIDEwMDY0NAotLS0gYS9zcmMvcGZyL3BmcmRyaXZyLmgKKysrIGIvc3JjL3Bmci9wZnJkcml2ci5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgSGlnaC1sZXZlbCBUeXBlIFBGUiBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw3IEBACiAjZGVmaW5lIFBGUkRSSVZSX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9EUklWRVJfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZHJ2Lmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvcGZyL3BmcmVycm9yLmggYi9zcmMvcGZyL3BmcmVycm9yLmgKaW5kZXggNDgyOWNmYy4uMzM0NjBlZiAxMDA2NDQKLS0tIGEvc3JjL3Bmci9wZnJlcnJvci5oCisrKyBiL3NyYy9wZnIvcGZyZXJyb3IuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFBGUiBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZuZGVmIFBGUkVSUk9SX0hfCiAjZGVmaW5lIFBGUkVSUk9SX0hfCiAKLSNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kZXJyLmg+CiAKICN1bmRlZiBGVEVSUk9SU19IXwogCkBAIC0zMyw3ICszMyw3IEBACiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFBGUl9FcnJfCiAjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfUEZSCiAKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KIAogI2VuZGlmIC8qIFBGUkVSUk9SX0hfICovCiAKZGlmZiAtLWdpdCBhL3NyYy9wZnIvcGZyZ2xvYWQuYyBiL3NyYy9wZnIvcGZyZ2xvYWQuYwppbmRleCA2ZWY1ODU2Li5hYTY0MGMzIDEwMDY0NAotLS0gYS9zcmMvcGZyL3Bmcmdsb2FkLmMKKysrIGIvc3JjL3Bmci9wZnJnbG9hZC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgUEZSIGdseXBoIGxvYWRlciAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgInBmcmdsb2FkLmgiCiAjaW5jbHVkZSAicGZyc2JpdC5oIgogI2luY2x1ZGUgInBmcmxvYWQuaCIgICAgICAgICAgICAvKiBmb3IgbWFjcm8gZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CiAKICNpbmNsdWRlICJwZnJlcnJvci5oIgogCkBAIC00NTEsNyArNDUxLDcgQEAKICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTYtYml0IGFic29sdXRlIHZhbHVlICovCiAgICAgICAgICAgICBQRlJfQ0hFQ0soIDIgKTsKICAgICAgICAgICAgIGN1ci0+eCA9IFBGUl9ORVhUX1NIT1JUKCBwICk7Ci0gICAgICAgICAgICBGVF9UUkFDRTcoKCAiIHguJWQiLCBjdXItPnggKSk7CisgICAgICAgICAgICBGVF9UUkFDRTcoKCAiIHguJWxkIiwgY3VyLT54ICkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOC1iaXQgZGVsdGEgKi8KQEAgLTQ4MSw3ICs0ODEsNyBAQAogICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNi1iaXQgYWJzb2x1dGUgdmFsdWUgKi8KICAgICAgICAgICAgIFBGUl9DSEVDSyggMiApOwogICAgICAgICAgICAgY3VyLT55ID0gUEZSX05FWFRfU0hPUlQoIHAgKTsKLSAgICAgICAgICAgIEZUX1RSQUNFNygoICIgeS4lZCIsIGN1ci0+eSApKTsKKyAgICAgICAgICAgIEZUX1RSQUNFNygoICIgeS4lbGQiLCBjdXItPnkgKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4LWJpdCBkZWx0YSAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJnbG9hZC5oIGIvc3JjL3Bmci9wZnJnbG9hZC5oCmluZGV4IGQwZTE0MjAuLmYzNTZiNGMgMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcGZyZ2xvYWQuaAorKysgYi9zcmMvcGZyL3Bmcmdsb2FkLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBQRlIgZ2x5cGggbG9hZGVyIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCmRpZmYgLS1naXQgYS9zcmMvcGZyL3BmcmxvYWQuYyBiL3NyYy9wZnIvcGZybG9hZC5jCmluZGV4IGNjZjBiN2UuLmEyODMyZTUgMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcGZybG9hZC5jCisrKyBiL3NyYy9wZnIvcGZybG9hZC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgUEZSIGxvYWRlciAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTcsOCArMTcsOCBAQAogCiAKICNpbmNsdWRlICJwZnJsb2FkLmgiCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgogCiAjaW5jbHVkZSAicGZyZXJyb3IuaCIKIApkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJsb2FkLmggYi9zcmMvcGZyL3BmcmxvYWQuaAppbmRleCAyZTdmZmQwLi43NjE1YjljIDEwMDY0NAotLS0gYS9zcmMvcGZyL3BmcmxvYWQuaAorKysgYi9zcmMvcGZyL3BmcmxvYWQuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIFBGUiBsb2FkZXIgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDcgKzIwLDcgQEAKICNkZWZpbmUgUEZSTE9BRF9IXwogCiAjaW5jbHVkZSAicGZyb2Jqcy5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJvYmpzLmMgYi9zcmMvcGZyL3Bmcm9ianMuYwppbmRleCA5NzY1Zjk1Li45MThlN2ZkIDEwMDY0NAotLS0gYS9zcmMvcGZyL3Bmcm9ianMuYworKysgYi9zcmMvcGZyL3Bmcm9ianMuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIFBGUiBvYmplY3QgbWV0aG9kcyAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjEsMTAgKzIxLDEwIEBACiAjaW5jbHVkZSAicGZyZ2xvYWQuaCIKICNpbmNsdWRlICJwZnJjbWFwLmgiCiAjaW5jbHVkZSAicGZyc2JpdC5oIgotI2luY2x1ZGUgRlRfT1VUTElORV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX0lEU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRvdXRsbi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90dG5hbWVpZC5oPgogCiAjaW5jbHVkZSAicGZyZXJyb3IuaCIKIApkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJvYmpzLmggYi9zcmMvcGZyL3Bmcm9ianMuaAppbmRleCAzOWNmZmQwLi44MDg4MjJmIDEwMDY0NAotLS0gYS9zcmMvcGZyL3Bmcm9ianMuaAorKysgYi9zcmMvcGZyL3Bmcm9ianMuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIFBGUiBvYmplY3QgbWV0aG9kcyAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJzYml0LmMgYi9zcmMvcGZyL3BmcnNiaXQuYwppbmRleCAwMGE5NjE2Li5hNjY5MWU2IDEwMDY0NAotLS0gYS9zcmMvcGZyL3BmcnNiaXQuYworKysgYi9zcmMvcGZyL3BmcnNiaXQuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIFBGUiBiaXRtYXAgbG9hZGVyIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOCw4ICsxOCw4IEBACiAKICNpbmNsdWRlICJwZnJzYml0LmgiCiAjaW5jbHVkZSAicGZybG9hZC5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KIAogI2luY2x1ZGUgInBmcmVycm9yLmgiCiAKQEAgLTc0NSw3ICs3NDUsNyBAQAogICAgICAgICAgICB5cG9zICsgKEZUX0xvbmcpeXNpemUgPCBGVF9JTlRfTUlOICkKICAgICAgIHsKICAgICAgICAgRlRfVFJBQ0UxKCggInBmcl9zbG90X2xvYWRfYml0bWFwOiIgKSk7Ci0gICAgICAgIEZUX1RSQUNFMSgoICJodWdlIGJpdG1hcCBnbHlwaCAlZHglZCBvdmVyIEZUX0dseXBoU2xvdFxuIiwKKyAgICAgICAgRlRfVFJBQ0UxKCggImh1Z2UgYml0bWFwIGdseXBoICVsZHglbGQgb3ZlciBGVF9HbHlwaFNsb3RcbiIsCiAgICAgICAgICAgICAgICAgICAgICB4cG9zLCB5cG9zICkpOwogICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1BpeGVsX1NpemUgKTsKICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9wZnIvcGZyc2JpdC5oIGIvc3JjL3Bmci9wZnJzYml0LmgKaW5kZXggNjU2OGI5MC4uOGNiMGRlMCAxMDA2NDQKLS0tIGEvc3JjL3Bmci9wZnJzYml0LmgKKysrIGIvc3JjL3Bmci9wZnJzYml0LmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBQRlIgYml0bWFwIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJ0eXBlcy5oIGIvc3JjL3Bmci9wZnJ0eXBlcy5oCmluZGV4IDZhNWY5ZDUuLjA2ZmI4MmQgMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcGZydHlwZXMuaAorKysgYi9zcmMvcGZyL3BmcnR5cGVzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBQRlIgZGF0YSBzdHJ1Y3R1cmVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE5LDggKzE5LDcgQEAKICNpZm5kZWYgUEZSVFlQRVNfSF8KICNkZWZpbmUgUEZSVFlQRVNfSF8KIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KIAogRlRfQkVHSU5fSEVBREVSCiAKZGlmZiAtLWdpdCBhL3NyYy9wZnIvcnVsZXMubWsgYi9zcmMvcGZyL3J1bGVzLm1rCmluZGV4IGYxNGNhNjkuLmExZmU4MmIgMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcnVsZXMubWsKKysrIGIvc3JjL3Bmci9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9KYW1maWxlIGIvc3JjL3BzYXV4L0phbWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYmNjMWMuLjAwMDAwMDAKLS0tIGEvc3JjL3BzYXV4L0phbWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0jIEZyZWVUeXBlIDIgc3JjL3BzYXV4IEphbWZpbGUKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgYnkKLSMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgotIwotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAotIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCi0jIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91Ci0jIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0Ci0jIGZ1bGx5LgotCi1TdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgcHNhdXggOwotCi17Ci0gIGxvY2FsICBfc291cmNlcyA7Ci0KLSAgaWYgJChGVDJfTVVMVEkpCi0gIHsKLSAgICBfc291cmNlcyA9IGFmbXBhcnNlCi0gICAgICAgICAgICAgICBwc2F1eG1vZAotICAgICAgICAgICAgICAgcHNjb252Ci0gICAgICAgICAgICAgICBwc29ianMKLSAgICAgICAgICAgICAgIHQxY21hcAotICAgICAgICAgICAgICAgdDFkZWNvZGUKLSAgICAgICAgICAgICAgIGNmZmRlY29kZQotICAgICAgICAgICAgICAgcHNhcnJzdAotICAgICAgICAgICAgICAgcHNibHVlcwotICAgICAgICAgICAgICAgcHNlcnJvcgotICAgICAgICAgICAgICAgcHNmb250Ci0gICAgICAgICAgICAgICBwc2Z0Ci0gICAgICAgICAgICAgICBwc2hpbnRzCi0gICAgICAgICAgICAgICBwc2ludHJwCi0gICAgICAgICAgICAgICBwc3JlYWQKLSAgICAgICAgICAgICAgIHBzc3RhY2sKLSAgICAgICAgICAgICAgIDsKLSAgfQotICBlbHNlCi0gIHsKLSAgICBfc291cmNlcyA9IHBzYXV4IDsKLSAgfQotCi0gIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKLX0KLQotIyBlbmQgb2Ygc3JjL3BzYXV4IEphbWZpbGUKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9hZm1wYXJzZS5jIGIvc3JjL3BzYXV4L2FmbXBhcnNlLmMKaW5kZXggZjc4YWRiYi4uMmQ2YTBkOSAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L2FmbXBhcnNlLmMKKysrIGIvc3JjL3BzYXV4L2FmbXBhcnNlLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBBRk0gcGFyc2VyIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNSwxMCArMTUsOSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oPgogCiAjaWZuZGVmIFQxX0NPTkZJR19PUFRJT05fTk9fQUZNCiAKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9hZm1wYXJzZS5oIGIvc3JjL3BzYXV4L2FmbXBhcnNlLmgKaW5kZXggMmNlYjc3NS4uMTZhM2EzZSAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L2FmbXBhcnNlLmgKKysrIGIvc3JjL3BzYXV4L2FmbXBhcnNlLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBBRk0gcGFyc2VyIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw3IEBACiAjZGVmaW5lIEFGTVBBUlNFX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9jZmZkZWNvZGUuYyBiL3NyYy9wc2F1eC9jZmZkZWNvZGUuYwppbmRleCAxN2NjY2Y4Li4zZDJkYTFlIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvY2ZmZGVjb2RlLmMKKysrIGIvc3JjL3BzYXV4L2NmZmRlY29kZS5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgUG9zdFNjcmlwdCBDRkYgKFR5cGUgMikgZGVjb2Rpbmcgcm91dGluZXMgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDExICsxNiwxMCBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfQ0ZGX1RBQkxFX0xPQURfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2ZmdGwuaD4KIAogI2luY2x1ZGUgImNmZmRlY29kZS5oIgogI2luY2x1ZGUgInBzb2Jqcy5oIgpAQCAtMzMwLDcgKzMyOSw3IEBACiAgICAgYnVpbGRlci0+bGVmdF9iZWFyaW5nLnggPSAwOwogICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy55ID0gMDsKIAotICAgIGJ1aWxkZXItPnBvc194ID0gYWR4IC0gYXNiOworICAgIGJ1aWxkZXItPnBvc194ID0gU1VCX0xPTkcoIGFkeCwgYXNiICk7CiAgICAgYnVpbGRlci0+cG9zX3kgPSBhZHk7CiAKICAgICAvKiBOb3cgbG9hZCBgYWNoYXInIG9uIHRvcCBvZiB0aGUgYmFzZSBvdXRsaW5lLiAqLwpAQCAtNTMwLDYgKzUyOSw5IEBACiAKICAgICBidWlsZGVyLT5wYXRoX2JlZ3VuID0gMDsKIAorICAgIGlmICggIWNoYXJzdHJpbmdfYmFzZSApCisgICAgICByZXR1cm4gRlRfRXJyX09rOworCiAgICAgem9uZS0+YmFzZSAgICAgICAgICAgPSBjaGFyc3RyaW5nX2Jhc2U7CiAgICAgbGltaXQgPSB6b25lLT5saW1pdCAgPSBjaGFyc3RyaW5nX2Jhc2UgKyBjaGFyc3RyaW5nX2xlbjsKICAgICBpcCAgICA9IHpvbmUtPmN1cnNvciA9IHpvbmUtPmJhc2U7CmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvY2ZmZGVjb2RlLmggYi9zcmMvcHNhdXgvY2ZmZGVjb2RlLmgKaW5kZXggYTY2OTE5Ny4uNzdhNDk2MiAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L2NmZmRlY29kZS5oCisrKyBiL3NyYy9wc2F1eC9jZmZkZWNvZGUuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFBvc3RTY3JpcHQgQ0ZGIChUeXBlIDIpIGRlY29kaW5nIHJvdXRpbmVzIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw3IEBACiAjZGVmaW5lIENGRkRFQ09ERV9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3BzYXV4Lmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvbW9kdWxlLm1rIGIvc3JjL3BzYXV4L21vZHVsZS5tawppbmRleCBiYjA4ODZhLi42NTFkYjAxIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvbW9kdWxlLm1rCisrKyBiL3NyYy9wc2F1eC9tb2R1bGUubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNhcnJzdC5jIGIvc3JjL3BzYXV4L3BzYXJyc3QuYwppbmRleCAwMTE4MDNiLi44NzUxZDI3IDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNhcnJzdC5jCisrKyBiL3NyYy9wc2F1eC9wc2FycnN0LmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogCiAjaW5jbHVkZSAicHNmdC5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAogI2luY2x1ZGUgInBzZ2x1ZS5oIgogI2luY2x1ZGUgInBzYXJyc3QuaCIKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2F1eC5jIGIvc3JjL3BzYXV4L3BzYXV4LmMKaW5kZXggMWRiMDQ2Mi4uZjQyODIyMiAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzYXV4LmMKKysrIGIvc3JjL3BzYXV4L3BzYXV4LmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBhdXhpbGlhcnkgUG9zdFNjcmlwdCBkcml2ZXIgY29tcG9uZW50IChib2R5IG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE3LDcgKzE3LDYgQEAKIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogCiAjaW5jbHVkZSAiYWZtcGFyc2UuYyIKICNpbmNsdWRlICJwc2F1eG1vZC5jIgpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3BzYXV4ZXJyLmggYi9zcmMvcHNhdXgvcHNhdXhlcnIuaAppbmRleCA1MjNlMTg4Li44YjlhOTU4IDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNhdXhlcnIuaAorKysgYi9zcmMvcHNhdXgvcHNhdXhlcnIuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFBTIGF1eGlsaWFyeSBtb2R1bGUgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBQU0FVWEVSUl9IXwogI2RlZmluZSBQU0FVWEVSUl9IXwogCi0jaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdG1vZGVyci5oPgogCiAjdW5kZWYgRlRFUlJPUlNfSF8KIApAQCAtMzQsNyArMzQsNyBAQAogI2RlZmluZSBGVF9FUlJfUFJFRklYICBQU2F1eF9FcnJfCiAjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfUFNhdXgKIAotI2luY2x1ZGUgRlRfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgogCiAjZW5kaWYgLyogUFNBVVhFUlJfSF8gKi8KIApkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3BzYXV4bW9kLmMgYi9zcmMvcHNhdXgvcHNhdXhtb2QuYwppbmRleCA1ZGY4ZTY5Li5lNzNiYTIyIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNhdXhtb2QuYworKysgYi9zcmMvcHNhdXgvcHNhdXhtb2QuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIGF1eGlsaWFyeSBQb3N0U2NyaXB0IG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsNyArMTYsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSAicHNhdXhtb2QuaCIKICNpbmNsdWRlICJwc29ianMuaCIKICNpbmNsdWRlICJ0MWRlY29kZS5oIgpAQCAtMTcxLDkgKzE3MCw5IEBACiAgIH07CiAKIAotICBGVF9DQUxMQkFDS19UQUJMRV9ERUYKLSAgY29uc3QgRlRfTW9kdWxlX0NsYXNzICBwc2F1eF9tb2R1bGVfY2xhc3MgPQotICB7CisgIEZUX0RFRklORV9NT0RVTEUoCisgICAgcHNhdXhfbW9kdWxlX2NsYXNzLAorCiAgICAgMCwKICAgICBzaXplb2YgKCBGVF9Nb2R1bGVSZWMgKSwKICAgICAicHNhdXgiLApAQCAtMTg1LDcgKzE4NCw3IEBACiAgICAgKEZUX01vZHVsZV9Db25zdHJ1Y3RvcilOVUxMLCAgLyogbW9kdWxlX2luaXQgICAqLwogICAgIChGVF9Nb2R1bGVfRGVzdHJ1Y3RvcikgTlVMTCwgIC8qIG1vZHVsZV9kb25lICAgKi8KICAgICAoRlRfTW9kdWxlX1JlcXVlc3RlcikgIE5VTEwgICAvKiBnZXRfaW50ZXJmYWNlICovCi0gIH07CisgICkKIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2F1eG1vZC5oIGIvc3JjL3BzYXV4L3BzYXV4bW9kLmgKaW5kZXggYTBlZGEwYi4uYTZiZWJlNCAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzYXV4bW9kLmgKKysrIGIvc3JjL3BzYXV4L3BzYXV4bW9kLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBhdXhpbGlhcnkgUG9zdFNjcmlwdCBtb2R1bGUgaW1wbGVtZW50YXRpb24gKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDEwICsyMCw5IEBACiAjZGVmaW5lIFBTQVVYTU9EX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9NT0RVTEVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kYXBpLmg+CiAKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpAQCAtMzUsMTAgKzM0LDI0IEBACiAgIEZUX0NBTExCQUNLX1RBQkxFCiAgIGNvbnN0IFBTX0J1aWxkZXJfRnVuY3NSZWMgICBwc19idWlsZGVyX2Z1bmNzOwogCisjaWZuZGVmIFQxX0NPTkZJR19PUFRJT05fTk9fQUZNCisgIEZUX0NBTExCQUNLX1RBQkxFCisgIGNvbnN0IEFGTV9QYXJzZXJfRnVuY3NSZWMgIGFmbV9wYXJzZXJfZnVuY3M7CisjZW5kaWYKKworICBGVF9DQUxMQkFDS19UQUJMRQorICBjb25zdCBUMV9DTWFwX0NsYXNzZXNSZWMgIHQxX2NtYXBfY2xhc3NlczsKKworICBGVF9DQUxMQkFDS19UQUJMRQorICBjb25zdCBDRkZfRGVjb2Rlcl9GdW5jc1JlYyAgY2ZmX2RlY29kZXJfZnVuY3M7CisKIAogICBGVF9FWFBPUlRfVkFSKCBjb25zdCBGVF9Nb2R1bGVfQ2xhc3MgKSAgcHNhdXhfZHJpdmVyX2NsYXNzOwogCiAKKyAgRlRfREVDTEFSRV9NT0RVTEUoIHBzYXV4X21vZHVsZV9jbGFzcyApCisKKwogRlRfRU5EX0hFQURFUgogCiAjZW5kaWYgLyogUFNBVVhNT0RfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2JsdWVzLmMgYi9zcmMvcHNhdXgvcHNibHVlcy5jCmluZGV4IDg5NzM4Y2UuLjM4NzhlOWIgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc2JsdWVzLmMKKysrIGIvc3JjL3BzYXV4L3BzYmx1ZXMuYwpAQCAtMzcsNyArMzcsNyBAQAogCiAKICNpbmNsdWRlICJwc2Z0LmgiCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogCiAjaW5jbHVkZSAicHNibHVlcy5oIgogI2luY2x1ZGUgInBzaGludHMuaCIKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2NvbnYuYyBiL3NyYy9wc2F1eC9wc2NvbnYuYwppbmRleCBjODg3NjE2Li40Y2Y1Y2Q1IDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNjb252LmMKKysrIGIvc3JjL3BzYXV4L3BzY29udi5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgU29tZSBjb252ZW5pZW5jZSBjb252ZXJzaW9ucyAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsOSArMTYsOCBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CiAKICNpbmNsdWRlICJwc2NvbnYuaCIKICNpbmNsdWRlICJwc2F1eGVyci5oIgpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3BzY29udi5oIGIvc3JjL3BzYXV4L3BzY29udi5oCmluZGV4IDZiMjRiZjYuLjgzM2U4MjcgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc2NvbnYuaAorKysgYi9zcmMvcHNhdXgvcHNjb252LmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBTb21lIGNvbnZlbmllbmNlIGNvbnZlcnNpb25zIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw3IEBACiAjZGVmaW5lIFBTQ09OVl9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3BzYXV4Lmg+CiAKIEZUX0JFR0lOX0hFQURFUgogCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNlcnJvci5oIGIvc3JjL3BzYXV4L3BzZXJyb3IuaAppbmRleCBiMjE1NmIzLi41NzM4ODUzIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNlcnJvci5oCisrKyBiL3NyYy9wc2F1eC9wc2Vycm9yLmgKQEAgLTQwLDcgKzQwLDcgQEAKICNkZWZpbmUgUFNFUlJPUl9IXwogCiAKLSNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kZXJyLmg+CiAKICN1bmRlZiBGVEVSUk9SU19IXwogCkBAIC00OSw3ICs0OSw4IEBACiAjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfQ0YyCiAKIAotI2luY2x1ZGUgRlRfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2NvbXBpbGVyLW1hY3Jvcy5oPgogI2luY2x1ZGUgInBzZnQuaCIKIAogCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNmb250LmMgYi9zcmMvcHNhdXgvcHNmb250LmMKaW5kZXggMDBlNDIxMC4uMGRiMWYwYyAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzZm9udC5jCisrKyBiL3NyYy9wc2F1eC9wc2ZvbnQuYwpAQCAtMzYsOCArMzYsNyBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaD4KIAogI2luY2x1ZGUgInBzZnQuaCIKIApkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3BzZm9udC5oIGIvc3JjL3BzYXV4L3BzZm9udC5oCmluZGV4IDhmYmFjYmIuLjgzNmZjZTQgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc2ZvbnQuaAorKysgYi9zcmMvcHNhdXgvcHNmb250LmgKQEAgLTQwLDcgKzQwLDcgQEAKICNkZWZpbmUgUFNGT05UX0hfCiAKIAotI2luY2x1ZGUgRlRfU0VSVklDRV9DRkZfVEFCTEVfTE9BRF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjZmZ0bC5oPgogCiAjaW5jbHVkZSAicHNmdC5oIgogI2luY2x1ZGUgInBzYmx1ZXMuaCIKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2Z0LmMgYi9zcmMvcHNhdXgvcHNmdC5jCmluZGV4IDU0YmU0NjguLjQxYzE2NTQgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc2Z0LmMKKysrIGIvc3JjL3BzYXV4L3BzZnQuYwpAQCAtMzcsNyArMzcsNyBAQAogCiAKICNpbmNsdWRlICJwc2Z0LmgiCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogCiAjaW5jbHVkZSAicHNmb250LmgiCiAjaW5jbHVkZSAicHNlcnJvci5oIgpAQCAtNDUsMTEgKzQ1LDExIEBACiAjaW5jbHVkZSAiY2ZmZGVjb2RlLmgiCiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCi0jaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRtbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bW0uaD4KICNlbmRpZgogCi0jaW5jbHVkZSBGVF9TRVJWSUNFX0NGRl9UQUJMRV9MT0FEX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNmZnRsLmg+CiAKIAogI2RlZmluZSBDRjJfTUFYX1NJWkUgIGNmMl9pbnRUb0ZpeGVkKCAyMDAwICkgICAgLyogbWF4IHBwZW0gKi8KQEAgLTMxMyw3ICszMTMsNyBAQAogICAgIEZUX0Vycm9yICAgZXJyb3IgPSBGVF9FcnJfT2s7CiAgICAgQ0YyX0ZvbnQgICBmb250OwogCi0gICAgRlRfQm9vbCAgICBpc190MSA9IGRlY29kZXItPmJ1aWxkZXIuaXNfdDE7CisgICAgRlRfQm9vbCAgaXNfdDEgPSBkZWNvZGVyLT5idWlsZGVyLmlzX3QxOwogCiAKICAgICBGVF9BU1NFUlQoIGRlY29kZXIgJiYKQEAgLTM4NSw3ICszODUsNyBAQAogICAgICAgRlRfWkVSTyggJmJ1ZiApOwogICAgICAgYnVmLnN0YXJ0ID0KICAgICAgIGJ1Zi5wdHIgICA9IGNoYXJzdHJpbmdfYmFzZTsKLSAgICAgIGJ1Zi5lbmQgICA9IGNoYXJzdHJpbmdfYmFzZSArIGNoYXJzdHJpbmdfbGVuOworICAgICAgYnVmLmVuZCAgID0gRlRfT0ZGU0VUKCBjaGFyc3RyaW5nX2Jhc2UsIGNoYXJzdHJpbmdfbGVuICk7CiAKICAgICAgIEZUX1pFUk8oICZ0cmFuc2Zvcm0gKTsKIApAQCAtNjk3LDcgKzY5Nyw3IEBACiAgICAgRlRfQVNTRVJUKCBjaGFyc3RyaW5nICsgbGVuID49IGNoYXJzdHJpbmcgKTsKIAogICAgIGJ1Zi0+c3RhcnQgPSBjaGFyc3RyaW5nOwotICAgIGJ1Zi0+ZW5kICAgPSBjaGFyc3RyaW5nICsgbGVuOworICAgIGJ1Zi0+ZW5kICAgPSBGVF9PRkZTRVQoIGNoYXJzdHJpbmcsIGxlbiApOwogICAgIGJ1Zi0+cHRyICAgPSBidWYtPnN0YXJ0OwogCiAgICAgcmV0dXJuIEZUX0Vycl9PazsKQEAgLTgyMCw3ICs4MjAsNyBAQAogICAgICAgLyogVGhlIENJRCBkcml2ZXIgc3RvcmVzIHN1YnJvdXRpbmVzIHdpdGggc2VlZCBieXRlcy4gIFRoaXMgICAgICovCiAgICAgICAvKiBjYXNlIGlzIHRha2VuIGNhcmUgb2Ygd2hlbiBkZWNvZGVyLT5zdWJyc19sZW4gPT0gMC4gICAgICAgICAgKi8KICAgICAgIGlmICggZGVjb2Rlci0+bG9jYWxzX2xlbiApCi0gICAgICAgIGJ1Zi0+ZW5kID0gYnVmLT5zdGFydCArIGRlY29kZXItPmxvY2Fsc19sZW5baWR4XTsKKyAgICAgICAgYnVmLT5lbmQgPSBGVF9PRkZTRVQoIGJ1Zi0+c3RhcnQsIGRlY29kZXItPmxvY2Fsc19sZW5baWR4XSApOwogICAgICAgZWxzZQogICAgICAgewogICAgICAgICAvKiBXZSBhcmUgdXNpbmcgc3Vicm91dGluZXMgZnJvbSBhIENJRCBmb250LiAgV2UgbXVzdCBhZGp1c3QgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2Z0LmggYi9zcmMvcHNhdXgvcHNmdC5oCmluZGV4IDRjOTMwZjAuLjNkYTQ1NGUgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc2Z0LmgKKysrIGIvc3JjL3BzYXV4L3BzZnQuaApAQCAtNDAsMTcgKzQwLDE3IEBACiAjZGVmaW5lIFBTRlRfSF8KIAogCisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvY29tcGlsZXItbWFjcm9zLmg+CiAjaW5jbHVkZSAicHN0eXBlcy5oIgogCi0KICAgLyogVE9ETzogZGlzYWJsZSBhc3NlcnRzIGZvciBub3cgKi8KICNkZWZpbmUgQ0YyX05ERUJVRwogCiAKLSNpbmNsdWRlIEZUX1NZU1RFTV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRzeXN0ZW0uaD4KIAogI2luY2x1ZGUgInBzZ2x1ZS5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSCAgICAvKiBmb3IgUFNfRGVjb2RlciAqLworI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3BzYXV4Lmg+ICAgIC8qIGZvciBQU19EZWNvZGVyICovCiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNoaW50cy5jIGIvc3JjL3BzYXV4L3BzaGludHMuYwppbmRleCAxY2JlY2QyLi5jZThjZmNhIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNoaW50cy5jCisrKyBiL3NyYy9wc2F1eC9wc2hpbnRzLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogCiAjaW5jbHVkZSAicHNmdC5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAogI2luY2x1ZGUgInBzZ2x1ZS5oIgogI2luY2x1ZGUgInBzZm9udC5oIgpAQCAtMzEwLDcgKzMxMCw3IEBACiAgICAgICBDRjJfSGludCAgaGludCA9ICZoaW50bWFwLT5lZGdlW2ldOwogCiAKLSAgICAgIEZUX1RSQUNFNigoICIgICUzZCAgICAlNy4yZiAgJTcuMmYgICU1ZCAgJXMlcyVzJXNcbiIsCisgICAgICBGVF9UUkFDRTYoKCAiICAlM2xkICAgICU3LjJmICAlNy4yZiAgJTVkICAlcyVzJXMlc1xuIiwKICAgICAgICAgICAgICAgICAgIGhpbnQtPmluZGV4LAogICAgICAgICAgICAgICAgICAgaGludC0+Y3NDb29yZCAvIDY1NTM2LjAsCiAgICAgICAgICAgICAgICAgICBoaW50LT5kc0Nvb3JkIC8gKCBoaW50LT5zY2FsZSAqIDEuMCApLApkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3BzaW50cnAuYyBiL3NyYy9wc2F1eC9wc2ludHJwLmMKaW5kZXggZTJmM2FjYy4uNTE5YzY5NCAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzaW50cnAuYworKysgYi9zcmMvcHNhdXgvcHNpbnRycC5jCkBAIC0zNyw4ICszNyw4IEBACiAKIAogI2luY2x1ZGUgInBzZnQuaCIKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfQ0ZGX1RBQkxFX0xPQURfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNmZnRsLmg+CiAKICNpbmNsdWRlICJwc2dsdWUuaCIKICNpbmNsdWRlICJwc2ZvbnQuaCIKQEAgLTE0MzMsNiArMTQzMywxMyBAQAogICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGVycm9yMjsgLyogcGFzcyBGcmVlVHlwZSBlcnJvciB0aHJvdWdoICovCiAgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLyogc2F2ZSB0aGUgbGVmdCBiZWFyaW5nIGFuZCB3aWR0aCBvZiB0aGUgU0VBQyAgICovCisgICAgICAgICAgICAgICAgICAgIC8qIGdseXBoIGFzIHRoZXkgd2lsbCBiZSBlcmFzZWQgYnkgdGhlIG5leHQgbG9hZCAqLworCisgICAgICAgICAgICAgICAgICAgIGxlZnRfYmVhcmluZyA9ICpkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZzsKKyAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSAgICAgID0gKmRlY29kZXItPmJ1aWxkZXIuYWR2YW5jZTsKKwogICAgICAgICAgICAgICAgICAgICBjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKCBmb250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcG9uZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MsCkBAIC0xNDQzLDExICsxNDUwLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teVdpZHRoICk7CiAgICAgICAgICAgICAgICAgICAgIGNmMl9mcmVlVDFTZWFjQ29tcG9uZW50KCBkZWNvZGVyLCAmY29tcG9uZW50ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgLyogc2F2ZSB0aGUgbGVmdCBiZWFyaW5nIGFuZCB3aWR0aCBvZiB0aGUgYmFzZSAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAvKiBjaGFyYWN0ZXIgYXMgdGhleSB3aWxsIGJlIGVyYXNlZCBieSB0aGUgbmV4dCBsb2FkICovCisgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZSBTRUFDIGdseXBoIGRvZXNuJ3QgaGF2ZSBhIChIKVNCVyBvZiBpdHMgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogb3duIHVzZSB0aGUgdmFsdWVzIGZyb20gdGhlIGJhc2UgZ2x5cGguICAgICAgICAqLwogCi0gICAgICAgICAgICAgICAgICAgIGxlZnRfYmVhcmluZyA9ICpkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZzsKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSAgICAgID0gKmRlY29kZXItPmJ1aWxkZXIuYWR2YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhaGF2ZVdpZHRoICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGxlZnRfYmVhcmluZyA9ICpkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZzsKKyAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICAgICAgPSAqZGVjb2Rlci0+YnVpbGRlci5hZHZhbmNlOworICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmctPnggPSAwOwogICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZy0+eSA9IDA7CkBAIC0xNDczLDggKzE0ODMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVtbXlXaWR0aCApOwogICAgICAgICAgICAgICAgICAgICBjZjJfZnJlZVQxU2VhY0NvbXBvbmVudCggZGVjb2RlciwgJmNvbXBvbmVudCApOwogCi0gICAgICAgICAgICAgICAgICAgIC8qIHJlc3RvcmUgdGhlIGxlZnQgc2lkZSBiZWFyaW5nIGFuZCAgICovCi0gICAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2Ugd2lkdGggb2YgdGhlIGJhc2UgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgICAgIC8qIHJlc3RvcmUgdGhlIGxlZnQgc2lkZSBiZWFyaW5nIGFuZCBhZHZhbmNlIHdpZHRoICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogb2YgdGhlIFNFQUMgZ2x5cGggb3IgYmFzZSBjaGFyYWN0ZXIgKHNhdmVkIGFib3ZlKSAqLwogCiAgICAgICAgICAgICAgICAgICAgICpkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZyA9IGxlZnRfYmVhcmluZzsKICAgICAgICAgICAgICAgICAgICAgKmRlY29kZXItPmJ1aWxkZXIuYWR2YW5jZSAgICAgID0gYWR2YW5jZTsKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc29ianMuYyBiL3NyYy9wc2F1eC9wc29ianMuYwppbmRleCA4YmZkYjkyLi5kZWZjNGQ0IDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNvYmpzLmMKKysrIGIvc3JjL3BzYXV4L3Bzb2Jqcy5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQXV4aWxpYXJ5IGZ1bmN0aW9ucyBmb3IgUG9zdFNjcmlwdCBmb250cyAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsMTEgKzE2LDEwIEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAotI2luY2x1ZGUgRlRfRFJJVkVSX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGRyaXZlci5oPgogCiAjaW5jbHVkZSAicHNvYmpzLmgiCiAjaW5jbHVkZSAicHNjb252LmgiCkBAIC0yMTQsNyArMjEzLDcgQEAKICAgICB9CiAKICAgICAvKiBhZGQgdGhlIG9iamVjdCB0byB0aGUgYmFzZSBibG9jayBhbmQgYWRqdXN0IG9mZnNldCAqLwotICAgIHRhYmxlLT5lbGVtZW50c1tpZHhdID0gdGFibGUtPmJsb2NrICsgdGFibGUtPmN1cnNvcjsKKyAgICB0YWJsZS0+ZWxlbWVudHNbaWR4XSA9IEZUX09GRlNFVCggdGFibGUtPmJsb2NrLCB0YWJsZS0+Y3Vyc29yICk7CiAgICAgdGFibGUtPmxlbmd0aHMgW2lkeF0gPSBsZW5ndGg7CiAgICAgRlRfTUVNX0NPUFkoIHRhYmxlLT5ibG9jayArIHRhYmxlLT5jdXJzb3IsIG9iamVjdCwgbGVuZ3RoICk7CiAKQEAgLTEyMzMsNyArMTIzMiw3IEBACiAgICAgICAgICAgYmJveC0+eE1heCA9IEZUX1JvdW5kRml4KCB0ZW1wWzJdICk7CiAgICAgICAgICAgYmJveC0+eU1heCA9IEZUX1JvdW5kRml4KCB0ZW1wWzNdICk7CiAKLSAgICAgICAgICBGVF9UUkFDRTQoKCAiIFslZCAlZCAlZCAlZF0iLAorICAgICAgICAgIEZUX1RSQUNFNCgoICIgWyVsZCAlbGQgJWxkICVsZF0iLAogICAgICAgICAgICAgICAgICAgICAgIGJib3gtPnhNaW4gLyA2NTUzNiwKICAgICAgICAgICAgICAgICAgICAgICBiYm94LT55TWluIC8gNjU1MzYsCiAgICAgICAgICAgICAgICAgICAgICAgYmJveC0+eE1heCAvIDY1NTM2LApAQCAtMTI4Nyw3ICsxMjg2LDcgQEAKICAgICAgICAgICAgIGJib3gtPnhNYXggPSBGVF9Sb3VuZEZpeCggdGVtcFtpICsgMiAqIG1heF9vYmplY3RzXSApOwogICAgICAgICAgICAgYmJveC0+eU1heCA9IEZUX1JvdW5kRml4KCB0ZW1wW2kgKyAzICogbWF4X29iamVjdHNdICk7CiAKLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgWyVkICVkICVkICVkXSIsCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIFslbGQgJWxkICVsZCAlbGRdIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGJib3gtPnhNaW4gLyA2NTUzNiwKICAgICAgICAgICAgICAgICAgICAgICAgIGJib3gtPnlNaW4gLyA2NTUzNiwKICAgICAgICAgICAgICAgICAgICAgICAgIGJib3gtPnhNYXggLyA2NTUzNiwKQEAgLTI1NzcsNyArMjU3Niw3IEBACiAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgc2VlZCApCiAgIHsKICAgICBQU19Db252X0VleGVjRGVjb2RlKCAmYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PRkZTRVQoIGJ1ZmZlciwgbGVuZ3RoICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAmc2VlZCApOwpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3Bzb2Jqcy5oIGIvc3JjL3BzYXV4L3Bzb2Jqcy5oCmluZGV4IGM0NGRjNDUuLmZkYWQ2NzIgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc29ianMuaAorKysgYi9zcmMvcHNhdXgvcHNvYmpzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBBdXhpbGlhcnkgZnVuY3Rpb25zIGZvciBQb3N0U2NyaXB0IGZvbnRzIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw5ICsyMCw4IEBACiAjZGVmaW5lIFBTT0JKU19IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0ZGX09CSkVDVFNfVFlQRVNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3BzYXV4Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvY2Zmb3R5cGVzLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNyZWFkLmMgYi9zcmMvcHNhdXgvcHNyZWFkLmMKaW5kZXggODZiZmMwMy4uN2Y2NTdmMiAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzcmVhZC5jCisrKyBiL3NyYy9wc2F1eC9wc3JlYWQuYwpAQCAtMzcsNyArMzcsNyBAQAogCiAKICNpbmNsdWRlICJwc2Z0LmgiCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogCiAjaW5jbHVkZSAicHNnbHVlLmgiCiAKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc3N0YWNrLmMgYi9zcmMvcHNhdXgvcHNzdGFjay5jCmluZGV4IDY2NTkwNjguLjdhZTUyNTYgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc3N0YWNrLmMKKysrIGIvc3JjL3BzYXV4L3Bzc3RhY2suYwpAQCAtMzcsNyArMzcsNyBAQAogCiAKICNpbmNsdWRlICJwc2Z0LmgiCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogCiAjaW5jbHVkZSAicHNnbHVlLmgiCiAjaW5jbHVkZSAicHNmb250LmgiCkBAIC01OSwxMiArNTksMTIgQEAKICAgICBDRjJfU3RhY2sgIHN0YWNrID0gTlVMTDsKIAogCi0gICAgaWYgKCAhRlRfTkVXKCBzdGFjayApICkKLSAgICB7Ci0gICAgICAvKiBpbml0aWFsaXplIHRoZSBzdHJ1Y3R1cmU7IEZUX05FVyB6ZXJvZXMgaXQgKi8KLSAgICAgIHN0YWNrLT5tZW1vcnkgPSBtZW1vcnk7Ci0gICAgICBzdGFjay0+ZXJyb3IgID0gZTsKLSAgICB9CisgICAgaWYgKCBGVF9ORVcoIHN0YWNrICkgKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBpbml0aWFsaXplIHRoZSBzdHJ1Y3R1cmU7IEZUX05FVyB6ZXJvZXMgaXQgKi8KKyAgICBzdGFjay0+bWVtb3J5ID0gbWVtb3J5OworICAgIHN0YWNrLT5lcnJvciAgPSBlOwogCiAgICAgLyogYWxsb2NhdGUgdGhlIHN0YWNrIGJ1ZmZlciAqLwogICAgIGlmICggRlRfTkVXX0FSUkFZKCBzdGFjay0+YnVmZmVyLCBzdGFja1NpemUgKSApCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNzdGFjay5oIGIvc3JjL3BzYXV4L3Bzc3RhY2suaAppbmRleCAxOGNkMzliLi5iOWVmOWVkIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNzdGFjay5oCisrKyBiL3NyYy9wc2F1eC9wc3N0YWNrLmgKQEAgLTM5LDYgKzM5LDcgQEAKICNpZm5kZWYgUFNTVEFDS19IXwogI2RlZmluZSBQU1NUQUNLX0hfCiAKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9jb21waWxlci1tYWNyb3MuaD4KIAogRlRfQkVHSU5fSEVBREVSCiAKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc3R5cGVzLmggYi9zcmMvcHNhdXgvcHN0eXBlcy5oCmluZGV4IDA0MTI4N2UuLjQzNWVmN2UgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc3R5cGVzLmgKKysrIGIvc3JjL3BzYXV4L3BzdHlwZXMuaApAQCAtMzksOCArMzksNyBAQAogI2lmbmRlZiBQU1RZUEVTX0hfCiAjZGVmaW5lIFBTVFlQRVNfSF8KIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9ydWxlcy5tayBiL3NyYy9wc2F1eC9ydWxlcy5tawppbmRleCAyZGU3MzRkLi5mNDlhZWNiIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcnVsZXMubWsKKysrIGIvc3JjL3BzYXV4L3J1bGVzLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3QxY21hcC5jIGIvc3JjL3BzYXV4L3QxY21hcC5jCmluZGV4IGQ2MmQyZDUuLmUyMWU5M2MgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC90MWNtYXAuYworKysgYi9zcmMvcHNhdXgvdDFjbWFwLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUeXBlIDEgY2hhcmFjdGVyIG1hcCBzdXBwb3J0IChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOCw3ICsxOCw3IEBACiAKICNpbmNsdWRlICJ0MWNtYXAuaCIKIAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAogI2luY2x1ZGUgInBzYXV4ZXJyLmgiCiAKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC90MWNtYXAuaCBiL3NyYy9wc2F1eC90MWNtYXAuaAppbmRleCBkMzI1ZTdiLi4wMzE3OTY1IDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvdDFjbWFwLmgKKysrIGIvc3JjL3BzYXV4L3QxY21hcC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHlwZSAxIGNoYXJhY3RlciBtYXAgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksOSArMTksOCBAQAogI2lmbmRlZiBUMUNNQVBfSF8KICNkZWZpbmUgVDFDTUFQX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oPgogCiBGVF9CRUdJTl9IRUFERVIKIApkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3QxZGVjb2RlLmMgYi9zcmMvcHNhdXgvdDFkZWNvZGUuYwppbmRleCBjMmIzNzI5Li4yZWQyN2NhIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvdDFkZWNvZGUuYworKysgYi9zcmMvcHNhdXgvdDFkZWNvZGUuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFBvc3RTY3JpcHQgVHlwZSAxIGRlY29kaW5nIHJvdXRpbmVzIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxMiArMTYsMTEgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0hBU0hfSAotI2luY2x1ZGUgRlRfT1VUTElORV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGhhc2guaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdG91dGxuLmg+CiAKICNpbmNsdWRlICJ0MWRlY29kZS5oIgogI2luY2x1ZGUgInBzb2Jqcy5oIgpAQCAtMzY3LDYgKzM2NiwxMiBAQAogCiAgICAgRlRfR2x5cGhMb2FkZXJfUHJlcGFyZSggZGVjb2Rlci0+YnVpbGRlci5sb2FkZXIgKTsgIC8qIHByZXBhcmUgbG9hZGVyICovCiAKKyAgICAvKiBzYXZlIHRoZSBsZWZ0IGJlYXJpbmcgYW5kIHdpZHRoIG9mIHRoZSBTRUFDICAgKi8KKyAgICAvKiBnbHlwaCBhcyB0aGV5IHdpbGwgYmUgZXJhc2VkIGJ5IHRoZSBuZXh0IGxvYWQgKi8KKworICAgIGxlZnRfYmVhcmluZyA9IGRlY29kZXItPmJ1aWxkZXIubGVmdF9iZWFyaW5nOworICAgIGFkdmFuY2UgICAgICA9IGRlY29kZXItPmJ1aWxkZXIuYWR2YW5jZTsKKwogICAgIC8qIHRoZSBzZWFjIG9wZXJhdG9yIG11c3Qgbm90IGJlIG5lc3RlZCAqLwogICAgIGRlY29kZXItPnNlYWMgPSBUUlVFOwogICAgIGVycm9yID0gdDFfZGVjb2Rlcl9wYXJzZV9nbHlwaCggZGVjb2RlciwgKEZUX1VJbnQpYmNoYXJfaW5kZXggKTsKQEAgLTM3NCwxMSArMzc5LDE0IEBACiAgICAgaWYgKCBlcnJvciApCiAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICAvKiBzYXZlIHRoZSBsZWZ0IGJlYXJpbmcgYW5kIHdpZHRoIG9mIHRoZSBiYXNlIGNoYXJhY3RlciAqLwotICAgIC8qIGFzIHRoZXkgd2lsbCBiZSBlcmFzZWQgYnkgdGhlIG5leHQgbG9hZC4gICAgICAgICAgICAgICovCisgICAgLyogSWYgdGhlIFNFQUMgZ2x5cGggZG9lc24ndCBoYXZlIGEgKEgpU0JXIG9mIGl0cyAqLworICAgIC8qIG93biB1c2UgdGhlIHZhbHVlcyBmcm9tIHRoZSBiYXNlIGdseXBoLiAgICAgICAgKi8KIAotICAgIGxlZnRfYmVhcmluZyA9IGRlY29kZXItPmJ1aWxkZXIubGVmdF9iZWFyaW5nOwotICAgIGFkdmFuY2UgICAgICA9IGRlY29kZXItPmJ1aWxkZXIuYWR2YW5jZTsKKyAgICBpZiAoIGRlY29kZXItPmJ1aWxkZXIucGFyc2Vfc3RhdGUgIT0gVDFfUGFyc2VfSGF2ZV9XaWR0aCApCisgICAgeworICAgICAgbGVmdF9iZWFyaW5nID0gZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmc7CisgICAgICBhZHZhbmNlICAgICAgPSBkZWNvZGVyLT5idWlsZGVyLmFkdmFuY2U7CisgICAgfQogCiAgICAgZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcueCA9IDA7CiAgICAgZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcueSA9IDA7CkBAIC0zOTYsOCArNDA0LDggQEAKICAgICBpZiAoIGVycm9yICkKICAgICAgIGdvdG8gRXhpdDsKIAotICAgIC8qIHJlc3RvcmUgdGhlIGxlZnQgc2lkZSBiZWFyaW5nIGFuZCAgICovCi0gICAgLyogYWR2YW5jZSB3aWR0aCBvZiB0aGUgYmFzZSBjaGFyYWN0ZXIgKi8KKyAgICAvKiByZXN0b3JlIHRoZSBsZWZ0IHNpZGUgYmVhcmluZyBhbmQgYWR2YW5jZSB3aWR0aCAgICovCisgICAgLyogb2YgdGhlIFNFQUMgZ2x5cGggb3IgYmFzZSBjaGFyYWN0ZXIgKHNhdmVkIGFib3ZlKSAqLwogCiAgICAgZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcgPSBsZWZ0X2JlYXJpbmc7CiAgICAgZGVjb2Rlci0+YnVpbGRlci5hZHZhbmNlICAgICAgPSBhZHZhbmNlOwpAQCAtNjUwLDEwICs2NTgsOCBAQAogICAgICAgICBpZiAoIHZhbHVlID4gMzIwMDAgfHwgdmFsdWUgPCAtMzIwMDAgKQogICAgICAgICB7CiAgICAgICAgICAgaWYgKCBsYXJnZV9pbnQgKQotICAgICAgICAgIHsKICAgICAgICAgICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IgogICAgICAgICAgICAgICAgICAgICAgICAiIG5vIGBkaXYnIGFmdGVyIGxhcmdlIGludGVnZXJcbiIgKSk7Ci0gICAgICAgICAgfQogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxhcmdlX2ludCA9IFRSVUU7CiAgICAgICAgIH0KQEAgLTEyMzEsOCArMTIzNyw4IEBACiAKICAgICAgICAgICBGVF9VTlVTRUQoIG9yaWdfeSApOwogCi0gICAgICAgICAgLyogdGhlIGBtZXRyaWNzX29ubHknIGluZGljYXRlcyB0aGF0IHdlIG9ubHkgd2FudCB0byBjb21wdXRlICovCi0gICAgICAgICAgLyogdGhlIGdseXBoJ3MgbWV0cmljcyAobHNiICsgYWR2YW5jZSB3aWR0aCksIG5vdCBsb2FkIHRoZSAgICovCisgICAgICAgICAgLyogYG1ldHJpY3Nfb25seScgaW5kaWNhdGVzIHRoYXQgd2Ugb25seSB3YW50IHRvIGNvbXB1dGUgdGhlICovCisgICAgICAgICAgLyogZ2x5cGgncyBtZXRyaWNzIChsc2IgKyBhZHZhbmNlIHdpZHRoKSB3aXRob3V0IGxvYWRpbmcgdGhlICovCiAgICAgICAgICAgLyogcmVzdCBvZiBpdDsgc28gZXhpdCBpbW1lZGlhdGVseSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgaWYgKCBidWlsZGVyLT5tZXRyaWNzX29ubHkgKQogICAgICAgICAgIHsKQEAgLTEyNjYsOCArMTI3Miw4IEBACiAgICAgICAgICAgeCA9IEFERF9MT05HKCBidWlsZGVyLT5wb3NfeCwgdG9wWzBdICk7CiAgICAgICAgICAgeSA9IEFERF9MT05HKCBidWlsZGVyLT5wb3NfeSwgdG9wWzFdICk7CiAKLSAgICAgICAgICAvKiB0aGUgYG1ldHJpY3Nfb25seScgaW5kaWNhdGVzIHRoYXQgd2Ugb25seSB3YW50IHRvIGNvbXB1dGUgKi8KLSAgICAgICAgICAvKiB0aGUgZ2x5cGgncyBtZXRyaWNzIChsc2IgKyBhZHZhbmNlIHdpZHRoKSwgbm90IGxvYWQgdGhlICAgKi8KKyAgICAgICAgICAvKiBgbWV0cmljc19vbmx5JyBpbmRpY2F0ZXMgdGhhdCB3ZSBvbmx5IHdhbnQgdG8gY29tcHV0ZSB0aGUgKi8KKyAgICAgICAgICAvKiBnbHlwaCdzIG1ldHJpY3MgKGxzYiArIGFkdmFuY2Ugd2lkdGgpIHdpdGhvdXQgbG9hZGluZyB0aGUgKi8KICAgICAgICAgICAvKiByZXN0IG9mIGl0OyBzbyBleGl0IGltbWVkaWF0ZWx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICBpZiAoIGJ1aWxkZXItPm1ldHJpY3Nfb25seSApCiAgICAgICAgICAgewpAQCAtMTY5MCw2ICsxNjk2LDcgQEAKICAgICBGVF9CeXRlKiAgICAgICAgIGlwOwogICAgIEZUX0J5dGUqICAgICAgICAgbGltaXQ7CiAgICAgVDFfQnVpbGRlciAgICAgICBidWlsZGVyID0gJmRlY29kZXItPmJ1aWxkZXI7CisgICAgRlRfQm9vbCAgICAgICAgICBsYXJnZV9pbnQ7CiAKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQogICAgIEZUX0Jvb2wgICAgICAgICAgYm9sID0gVFJVRTsKQEAgLTE3MDcsNiArMTcxNCw4IEBACiAgICAgbGltaXQgPSB6b25lLT5saW1pdCAgPSBjaGFyc3RyaW5nX2Jhc2UgKyBjaGFyc3RyaW5nX2xlbjsKICAgICBpcCAgICA9IHpvbmUtPmN1cnNvciA9IHpvbmUtPmJhc2U7CiAKKyAgICBsYXJnZV9pbnQgPSBGQUxTRTsKKwogICAgIC8qIG5vdywgZXhlY3V0ZSBsb29wICovCiAgICAgd2hpbGUgKCBpcCA8IGxpbWl0ICkKICAgICB7CkBAIC0xNzE4LDcgKzE3MjcsNyBAQAogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCiAgICAgICBpZiAoIGJvbCApCiAgICAgICB7Ci0gICAgICAgIEZUX1RSQUNFNSgoICIgKCVkKSIsIGRlY29kZXItPnRvcCAtIGRlY29kZXItPnN0YWNrICkpOworICAgICAgICBGVF9UUkFDRTUoKCAiICglbGQpIiwgZGVjb2Rlci0+dG9wIC0gZGVjb2Rlci0+c3RhY2sgKSk7CiAgICAgICAgIGJvbCA9IEZBTFNFOwogICAgICAgfQogI2VuZGlmCkBAIC0xNzQwLDggKzE3NDksNiBAQAogICAgICAgY2FzZSA3OgogICAgICAgY2FzZSA4OgogICAgICAgY2FzZSA5OgotICAgICAgY2FzZSAxMDoKLSAgICAgIGNhc2UgMTE6CiAgICAgICBjYXNlIDE0OgogICAgICAgY2FzZSAxNToKICAgICAgIGNhc2UgMjE6CkBAIC0xNzUwLDYgKzE3NTcsMTMgQEAKICAgICAgIGNhc2UgMzE6CiAgICAgICAgIGdvdG8gTm9fV2lkdGg7CiAKKyAgICAgIGNhc2UgMTA6CisgICAgICAgIG9wID0gb3BfY2FsbHN1YnI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAxMToKKyAgICAgICAgb3AgPSBvcF9yZXR1cm47CisgICAgICAgIGJyZWFrOworCiAgICAgICBjYXNlIDEzOgogICAgICAgICBvcCA9IG9wX2hzYnc7CiAgICAgICAgIGJyZWFrOwpAQCAtMTc2Nyw2ICsxNzgxLDkgQEAKICAgICAgICAgY2FzZSA3OgogICAgICAgICAgIG9wID0gb3Bfc2J3OwogICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDEyOgorICAgICAgICAgIG9wID0gb3BfZGl2OworICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgZ290byBOb19XaWR0aDsKQEAgLTE3OTYsMTMgKzE4MTMsMTkgQEAKICAgICAgICAgLyogYW55d2F5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgIGlmICggdmFsdWUgPiAzMjAwMCB8fCB2YWx1ZSA8IC0zMjAwMCApCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX21ldHJpY3M6IgotICAgICAgICAgICAgICAgICAgICAgIiBsYXJnZSBpbnRlZ2VyIGZvdW5kIGZvciB3aWR0aFxuIiApKTsKLSAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICBpZiAoIGxhcmdlX2ludCApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfRVJST1IoKCAidDFfZGVjb2Rlcl9wYXJzZV9tZXRyaWNzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiBubyBgZGl2JyBhZnRlciBsYXJnZSBpbnRlZ2VyXG4iICkpOworICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxhcmdlX2ludCA9IFRSVUU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgdmFsdWUgPSAoRlRfSW50MzIpKCAoRlRfVUludDMyKXZhbHVlIDw8IDE2ICk7CisgICAgICAgICAgaWYgKCAhbGFyZ2VfaW50ICkKKyAgICAgICAgICAgIHZhbHVlID0gKEZUX0ludDMyKSggKEZUX1VJbnQzMil2YWx1ZSA8PCAxNiApOwogICAgICAgICB9CiAKICAgICAgICAgYnJlYWs7CkBAIC0xODI3LDcgKzE4NTAsOCBAQAogICAgICAgICAgICAgICB2YWx1ZSA9IC0oICggKCBpcFstMl0gLSAyNTEgKSAqIDI1NiApICsgaXBbLTFdICsgMTA4ICk7CiAgICAgICAgICAgfQogCi0gICAgICAgICAgdmFsdWUgPSAoRlRfSW50MzIpKCAoRlRfVUludDMyKXZhbHVlIDw8IDE2ICk7CisgICAgICAgICAgaWYgKCAhbGFyZ2VfaW50ICkKKyAgICAgICAgICAgIHZhbHVlID0gKEZUX0ludDMyKSggKEZUX1VJbnQzMil2YWx1ZSA8PCAxNiApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMTgzNyw2ICsxODYxLDEzIEBACiAgICAgICAgIH0KICAgICAgIH0KIAorICAgICAgaWYgKCBsYXJnZV9pbnQgJiYgISggb3AgPT0gb3Bfbm9uZSB8fCBvcCA9PSBvcF9kaXYgKSApCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfcGFyc2VfbWV0cmljczoiCisgICAgICAgICAgICAgICAgICAgIiBubyBgZGl2JyBhZnRlciBsYXJnZSBpbnRlZ2VyXG4iICkpOworICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgIH0KKwogICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAqCiAgICAgICAgKiBQdXNoIHZhbHVlIG9uIHN0YWNrLCBvciBwcm9jZXNzIG9wZXJhdG9yCkBAIC0xODUxLDYgKzE4ODIsOSBAQAogICAgICAgICB9CiAKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICBpZiAoIGxhcmdlX2ludCApCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiAlZCIsIHZhbHVlICkpOworICAgICAgICBlbHNlCiAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAlZCIsIHZhbHVlIC8gNjU1MzYgKSk7CiAjZW5kaWYKIApAQCAtMTg2OSwxMSArMTkwMywyMSBAQAogCiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKIAotICAgICAgICBpZiAoIHRvcCAtIGRlY29kZXItPnN0YWNrICE9IG51bV9hcmdzICkKLSAgICAgICAgICBGVF9UUkFDRTAoKCAidDFfZGVjb2Rlcl9wYXJzZV9tZXRyaWNzOiIKLSAgICAgICAgICAgICAgICAgICAgICAiIHRvbyBtdWNoIG9wZXJhbmRzIG9uIHRoZSBzdGFjayIKLSAgICAgICAgICAgICAgICAgICAgICAiIChzZWVuICVkLCBleHBlY3RlZCAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgdG9wIC0gZGVjb2Rlci0+c3RhY2ssIG51bV9hcmdzICkpOworICAgICAgICBzd2l0Y2ggKCBvcCApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBvcF9jYWxsc3VicjoKKyAgICAgICAgY2FzZSBvcF9kaXY6CisgICAgICAgIGNhc2Ugb3BfcmV0dXJuOgorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgaWYgKCB0b3AgLSBkZWNvZGVyLT5zdGFjayAhPSBudW1fYXJncyApCisgICAgICAgICAgICBGVF9UUkFDRTAoKCAidDFfZGVjb2Rlcl9wYXJzZV9tZXRyaWNzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgdG9vIG11Y2ggb3BlcmFuZHMgb24gdGhlIHN0YWNrIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAoc2VlbiAlbGQsIGV4cGVjdGVkICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAtIGRlY29kZXItPnN0YWNrLCBudW1fYXJncyApKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAjZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KIApAQCAtMTg5Myw4ICsxOTM3LDggQEAKICAgICAgICAgICBidWlsZGVyLT5hZHZhbmNlLnkgPSAwOwogCiAgICAgICAgICAgLyogd2Ugb25seSB3YW50IHRvIGNvbXB1dGUgdGhlIGdseXBoJ3MgbWV0cmljcyAqLwotICAgICAgICAgIC8qIChsc2IgKyBhZHZhbmNlIHdpZHRoKSwgbm90IGxvYWQgdGhlIHJlc3Qgb2YgKi8KLSAgICAgICAgICAvKiBpdDsgc28gZXhpdCBpbW1lZGlhdGVseSAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogKGxzYiArIGFkdmFuY2Ugd2lkdGgpIHdpdGhvdXQgbG9hZGluZyB0aGUgICAqLworICAgICAgICAgIC8qIHJlc3Qgb2YgaXQ7IHNvIGV4aXQgaW1tZWRpYXRlbHkgICAgICAgICAgICAgKi8KICAgICAgICAgICBGVF9UUkFDRTQoKCAiXG4iICkpOwogICAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CiAKQEAgLTE5MTIsMTcgKzE5NTYsMTE2IEBACiAgICAgICAgICAgYnVpbGRlci0+YWR2YW5jZS55ID0gdG9wWzNdOwogCiAgICAgICAgICAgLyogd2Ugb25seSB3YW50IHRvIGNvbXB1dGUgdGhlIGdseXBoJ3MgbWV0cmljcyAqLwotICAgICAgICAgIC8qIChsc2IgKyBhZHZhbmNlIHdpZHRoKSwgbm90IGxvYWQgdGhlIHJlc3Qgb2YgKi8KLSAgICAgICAgICAvKiBpdDsgc28gZXhpdCBpbW1lZGlhdGVseSAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogKGxzYiArIGFkdmFuY2Ugd2lkdGgpLCB3aXRob3V0IGxvYWRpbmcgdGhlICAqLworICAgICAgICAgIC8qIHJlc3Qgb2YgaXQ7IHNvIGV4aXQgaW1tZWRpYXRlbHkgICAgICAgICAgICAgKi8KICAgICAgICAgICBGVF9UUkFDRTQoKCAiXG4iICkpOwogICAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CiAKKyAgICAgICAgY2FzZSBvcF9kaXY6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBkaXYiICkpOworCisgICAgICAgICAgLyogaWYgYGxhcmdlX2ludCcgaXMgc2V0LCB3ZSBkaXZpZGUgdW5zY2FsZWQgbnVtYmVyczsgKi8KKyAgICAgICAgICAvKiBvdGhlcndpc2UsIHdlIGRpdmlkZSBudW1iZXJzIGluIDE2LjE2IGZvcm1hdCAtLSAgICAqLworICAgICAgICAgIC8qIGluIGJvdGggY2FzZXMsIGl0IGlzIHRoZSBzYW1lIG9wZXJhdGlvbiAgICAgICAgICAgICovCisgICAgICAgICAgKnRvcCA9IEZUX0RpdkZpeCggdG9wWzBdLCB0b3BbMV0gKTsKKyAgICAgICAgICB0b3ArKzsKKworICAgICAgICAgIGxhcmdlX2ludCA9IEZBTFNFOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ugb3BfY2FsbHN1YnI6CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICBpZHg7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBjYWxsc3ViciIgKSk7CisKKyAgICAgICAgICAgIGlkeCA9IEZpeDJJbnQoIHRvcFswXSApOworCisgICAgICAgICAgICBpZiAoIGRlY29kZXItPnN1YnJzX2hhc2ggKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzaXplX3QqICB2YWwgPSBmdF9oYXNoX251bV9sb29rdXAoIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLT5zdWJyc19oYXNoICk7CisKKworICAgICAgICAgICAgICBpZiAoIHZhbCApCisgICAgICAgICAgICAgICAgaWR4ID0gKnZhbDsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlkeCA9IC0xOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGlkeCA8IDAgfHwgaWR4ID49IGRlY29kZXItPm51bV9zdWJycyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfcGFyc2VfbWV0cmljczoiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIHN1YnJzIGluZGV4XG4iICkpOworICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCB6b25lIC0gZGVjb2Rlci0+em9uZXMgPj0gVDFfTUFYX1NVQlJTX0NBTExTICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfRVJST1IoKCAidDFfZGVjb2Rlcl9wYXJzZV9tZXRyaWNzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvbyBtYW55IG5lc3RlZCBzdWJyc1xuIiApKTsKKyAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHpvbmUtPmN1cnNvciA9IGlwOyAgLyogc2F2ZSBjdXJyZW50IGluc3RydWN0aW9uIHBvaW50ZXIgKi8KKworICAgICAgICAgICAgem9uZSsrOworCisgICAgICAgICAgICAvKiBUaGUgVHlwZSAxIGRyaXZlciBzdG9yZXMgc3Vicm91dGluZXMgd2l0aG91dCB0aGUgc2VlZCBieXRlcy4gKi8KKyAgICAgICAgICAgIC8qIFRoZSBDSUQgZHJpdmVyIHN0b3JlcyBzdWJyb3V0aW5lcyB3aXRoIHNlZWQgYnl0ZXMuICBUaGlzICAgICAqLworICAgICAgICAgICAgLyogY2FzZSBpcyB0YWtlbiBjYXJlIG9mIHdoZW4gZGVjb2Rlci0+c3VicnNfbGVuID09IDAuICAgICAgICAgICovCisgICAgICAgICAgICB6b25lLT5iYXNlID0gZGVjb2Rlci0+c3VicnNbaWR4XTsKKworICAgICAgICAgICAgaWYgKCBkZWNvZGVyLT5zdWJyc19sZW4gKQorICAgICAgICAgICAgICB6b25lLT5saW1pdCA9IHpvbmUtPmJhc2UgKyBkZWNvZGVyLT5zdWJyc19sZW5baWR4XTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogV2UgYXJlIHVzaW5nIHN1YnJvdXRpbmVzIGZyb20gYSBDSUQgZm9udC4gIFdlIG11c3QgYWRqdXN0ICovCisgICAgICAgICAgICAgIC8qIGZvciB0aGUgc2VlZCBieXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICB6b25lLT5iYXNlICArPSAoIGRlY29kZXItPmxlbklWID49IDAgPyBkZWNvZGVyLT5sZW5JViA6IDAgKTsKKyAgICAgICAgICAgICAgem9uZS0+bGltaXQgID0gZGVjb2Rlci0+c3VicnNbaWR4ICsgMV07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHpvbmUtPmN1cnNvciA9IHpvbmUtPmJhc2U7CisKKyAgICAgICAgICAgIGlmICggIXpvbmUtPmJhc2UgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX21ldHJpY3M6IgorICAgICAgICAgICAgICAgICAgICAgICAgICIgaW52b2tpbmcgZW1wdHkgc3VicnNcbiIgKSk7CisgICAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWNvZGVyLT56b25lID0gem9uZTsKKyAgICAgICAgICAgIGlwICAgICAgICAgICAgPSB6b25lLT5iYXNlOworICAgICAgICAgICAgbGltaXQgICAgICAgICA9IHpvbmUtPmxpbWl0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfcmV0dXJuOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgcmV0dXJuIiApKTsKKworICAgICAgICAgIGlmICggem9uZSA8PSBkZWNvZGVyLT56b25lcyApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfRVJST1IoKCAidDFfZGVjb2Rlcl9wYXJzZV9tZXRyaWNzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiB1bmV4cGVjdGVkIHJldHVyblxuIiApKTsKKyAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICAgIH0KKworICAgICAgICAgIHpvbmUtLTsKKyAgICAgICAgICBpcCAgICAgICAgICAgID0gem9uZS0+Y3Vyc29yOworICAgICAgICAgIGxpbWl0ICAgICAgICAgPSB6b25lLT5saW1pdDsKKyAgICAgICAgICBkZWNvZGVyLT56b25lID0gem9uZTsKKyAgICAgICAgICBicmVhazsKKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfcGFyc2VfbWV0cmljczoiCiAgICAgICAgICAgICAgICAgICAgICAiIHVuaGFuZGxlZCBvcGNvZGUgJWRcbiIsIG9wICkpOwogICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOwogICAgICAgICB9CiAKKyAgICAgICAgZGVjb2Rlci0+dG9wID0gdG9wOworCiAgICAgICB9IC8qIGdlbmVyYWwgb3BlcmF0b3IgcHJvY2Vzc2luZyAqLwogCiAgICAgfSAvKiB3aGlsZSBpcCA8IGxpbWl0ICovCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvdDFkZWNvZGUuaCBiL3NyYy9wc2F1eC90MWRlY29kZS5oCmluZGV4IDFiNWQ2MjYuLmI3OTM1MDQgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC90MWRlY29kZS5oCisrKyBiL3NyYy9wc2F1eC90MWRlY29kZS5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgUG9zdFNjcmlwdCBUeXBlIDEgZGVjb2Rpbmcgcm91dGluZXMgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDkgKzIwLDggQEAKICNkZWZpbmUgVDFERUNPREVfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9KYW1maWxlIGIvc3JjL3BzaGludGVyL0phbWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNDRjMTkuLjAwMDAwMDAKLS0tIGEvc3JjL3BzaGludGVyL0phbWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIEZyZWVUeXBlIDIgc3JjL3BzaGludGVyIEphbWZpbGUKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgYnkKLSMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgotIwotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAotIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCi0jIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91Ci0jIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0Ci0jIGZ1bGx5LgotCi1TdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgcHNoaW50ZXIgOwotCi17Ci0gIGxvY2FsICBfc291cmNlcyA7Ci0KLSAgaWYgJChGVDJfTVVMVEkpCi0gIHsKLSAgICBfc291cmNlcyA9IHBzaGFsZ28KLSAgICAgICAgICAgICAgIHBzaGdsb2IKLSAgICAgICAgICAgICAgIHBzaG1vZAotICAgICAgICAgICAgICAgcHNocGljCi0gICAgICAgICAgICAgICBwc2hyZWMKLSAgICAgICAgICAgICAgIDsKLSAgfQotICBlbHNlCi0gIHsKLSAgICBfc291cmNlcyA9IHBzaGludGVyIDsKLSAgfQotCi0gIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKLX0KLQotIyBlbmQgb2Ygc3JjL3BzaGludGVyIEphbWZpbGUKZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9tb2R1bGUubWsgYi9zcmMvcHNoaW50ZXIvbW9kdWxlLm1rCmluZGV4IDBhMTJhMjYuLmI0NDBkMmUgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9tb2R1bGUubWsKKysrIGIvc3JjL3BzaGludGVyL21vZHVsZS5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hhbGdvLmMgYi9zcmMvcHNoaW50ZXIvcHNoYWxnby5jCmluZGV4IDBjNWFlNjIuLjkyMGI5YTcgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hhbGdvLmMKKysrIGIvc3JjL3BzaGludGVyL3BzaGFsZ28uYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFBvc3RTY3JpcHQgaGludGluZyBhbGdvcml0aG0gKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZApAQCAtMTYsMTAgKzE2LDkgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CiAjaW5jbHVkZSAicHNoYWxnby5oIgogCiAjaW5jbHVkZSAicHNobnRlcnIuaCIKZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hhbGdvLmggYi9zcmMvcHNoaW50ZXIvcHNoYWxnby5oCmluZGV4IDY4NTllOTUuLjUzNjdhNWQgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hhbGdvLmgKKysrIGIvc3JjL3BzaGludGVyL3BzaGFsZ28uaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFBvc3RTY3JpcHQgaGludGluZyBhbGdvcml0aG0gKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hnbG9iLmMgYi9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5jCmluZGV4IGIwMjFlNmUuLmNkYzFjM2EgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hnbG9iLmMKKysrIGIvc3JjL3BzaGludGVyL3BzaGdsb2IuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgUG9zdFNjcmlwdCBoaW50ZXIgZ2xvYmFsIGhpbnRpbmcgbWFuYWdlbWVudCAoYm9keSkuCiAgKiAgIEluc3BpcmVkIGJ5IHRoZSBuZXcgYXV0by1oaW50ZXIgbW9kdWxlLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZApAQCAtMTcsMTAgKzE3LDkgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oPgogI2luY2x1ZGUgInBzaGdsb2IuaCIKIAogI2lmZGVmIERFQlVHX0hJTlRFUgpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaGdsb2IuaCBiL3NyYy9wc2hpbnRlci9wc2hnbG9iLmgKaW5kZXggMDA0OWQ0Yy4uODE4MTMyNCAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaGdsb2IuaAorKysgYi9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgUG9zdFNjcmlwdCBoaW50ZXIgZ2xvYmFsIGhpbnRpbmcgbWFuYWdlbWVudC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw4IEBACiAjZGVmaW5lIFBTSEdMT0JfSF8KIAogCi0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hpbnRlci5jIGIvc3JjL3BzaGludGVyL3BzaGludGVyLmMKaW5kZXggMTZjM2EwYS4uM2NjYTBhZCAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaGludGVyLmMKKysrIGIvc3JjL3BzaGludGVyL3BzaGludGVyLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBQb3N0U2NyaXB0IEhpbnRpbmcgbW9kdWxlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTcsNyArMTcsNiBAQAogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAKICNpbmNsdWRlICJwc2hhbGdvLmMiCiAjaW5jbHVkZSAicHNoZ2xvYi5jIgpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaG1vZC5jIGIvc3JjL3BzaGludGVyL3BzaG1vZC5jCmluZGV4IDJkMzZlYTIuLmUwYWJkMzggMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2htb2QuYworKysgYi9zcmMvcHNoaW50ZXIvcHNobW9kLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBQb3N0U2NyaXB0IGhpbnRlciBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDEwICsxNiwxMCBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KICNpbmNsdWRlICJwc2hyZWMuaCIKICNpbmNsdWRlICJwc2hhbGdvLmgiCisjaW5jbHVkZSAicHNobW9kLmgiCiAKIAogICAvKiB0aGUgUG9zdHNjcmlwdCBIaW50ZXIgbW9kdWxlIHN0cnVjdHVyZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaG1vZC5oIGIvc3JjL3BzaGludGVyL3BzaG1vZC5oCmluZGV4IGVhODc3MTMuLjJhNmViMWMgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2htb2QuaAorKysgYi9zcmMvcHNoaW50ZXIvcHNobW9kLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBQb3N0U2NyaXB0IGhpbnRlciBtb2R1bGUgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw3IEBACiAjZGVmaW5lIFBTSE1PRF9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfTU9EVUxFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdG1vZGFwaS5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaG50ZXJyLmggYi9zcmMvcHNoaW50ZXIvcHNobnRlcnIuaAppbmRleCBmYjlkYmNhLi5kNjc5NTVjIDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNobnRlcnIuaAorKysgYi9zcmMvcHNoaW50ZXIvcHNobnRlcnIuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFBTIEhpbnRlciBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZuZGVmIFBTSE5URVJSX0hfCiAjZGVmaW5lIFBTSE5URVJSX0hfCiAKLSNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kZXJyLmg+CiAKICN1bmRlZiBGVEVSUk9SU19IXwogCkBAIC0zMyw3ICszMyw3IEBACiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFBTSF9FcnJfCiAjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfUFNoaW50ZXIKIAotI2luY2x1ZGUgRlRfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgogCiAjZW5kaWYgLyogUFNITlRFUlJfSF8gKi8KIApkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaHJlYy5jIGIvc3JjL3BzaGludGVyL3BzaHJlYy5jCmluZGV4IDlkZDA5ZWYuLmJkZGNjZjIgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hyZWMuYworKysgYi9zcmMvcHNoaW50ZXIvcHNocmVjLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBQb3N0U2NyaXB0IGhpbnRzIHJlY29yZGVyIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxMSArMTYsMTAgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaD4KIAogI2luY2x1ZGUgInBzaHJlYy5oIgogI2luY2x1ZGUgInBzaGFsZ28uaCIKQEAgLTg3NSw3ICs4NzQsNyBAQAogICAgICAgaWYgKCBlcnJvciApCiAgICAgICB7CiAgICAgICAgIEZUX0VSUk9SKCggInBzX2hpbnRzX3N0ZW06IGNvdWxkIG5vdCBhZGQgc3RlbSIKLSAgICAgICAgICAgICAgICAgICAiICglZCwlZCkgdG8gaGludHMgdGFibGVcbiIsIHN0ZW1zWzBdLCBzdGVtc1sxXSApKTsKKyAgICAgICAgICAgICAgICAgICAiICglbGQsJWxkKSB0byBoaW50cyB0YWJsZVxuIiwgc3RlbXNbMF0sIHN0ZW1zWzFdICkpOwogCiAgICAgICAgIGhpbnRzLT5lcnJvciA9IGVycm9yOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNocmVjLmggYi9zcmMvcHNoaW50ZXIvcHNocmVjLmgKaW5kZXggMDJjYzIxMC4uYjEzYzdiZSAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaHJlYy5oCisrKyBiL3NyYy9wc2hpbnRlci9wc2hyZWMuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFBvc3RzY3JpcHQgKFR5cGUxL1R5cGUyKSBoaW50cyByZWNvcmRlciAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMzIsOCArMzIsNyBAQAogI2RlZmluZSBQU0hSRUNfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfSElOVFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaD4KICNpbmNsdWRlICJwc2hnbG9iLmgiCiAKIApkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3J1bGVzLm1rIGIvc3JjL3BzaGludGVyL3J1bGVzLm1rCmluZGV4IDU4MjI3ZDEuLmM4NDVjMjUgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9ydWxlcy5taworKysgYi9zcmMvcHNoaW50ZXIvcnVsZXMubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvcHNuYW1lcy9KYW1maWxlIGIvc3JjL3BzbmFtZXMvSmFtZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU5NzhhOC4uMDAwMDAwMAotLS0gYS9zcmMvcHNuYW1lcy9KYW1maWxlCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBGcmVlVHlwZSAyIHNyYy9wc25hbWVzIEphbWZpbGUKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgYnkKLSMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgotIwotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAotIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCi0jIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91Ci0jIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0Ci0jIGZ1bGx5LgotCi1TdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgcHNuYW1lcyA7Ci0KLXsKLSAgbG9jYWwgIF9zb3VyY2VzIDsKLQotICBpZiAkKEZUMl9NVUxUSSkKLSAgewotICAgIF9zb3VyY2VzID0gcHNtb2R1bGUKLSAgICAgICAgICAgICAgIHBzcGljCi0gICAgICAgICAgICAgICA7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgX3NvdXJjZXMgPSBwc25hbWVzIDsKLSAgfQotCi0gIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKLX0KLQotIyBlbmQgb2Ygc3JjL3BzbmFtZXMgSmFtZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3BzbmFtZXMvbW9kdWxlLm1rIGIvc3JjL3BzbmFtZXMvbW9kdWxlLm1rCmluZGV4IDA4MDZhMzEuLjY3NWJiMzcgMTAwNjQ0Ci0tLSBhL3NyYy9wc25hbWVzL21vZHVsZS5taworKysgYi9zcmMvcHNuYW1lcy9tb2R1bGUubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvcHNuYW1lcy9wc21vZHVsZS5jIGIvc3JjL3BzbmFtZXMvcHNtb2R1bGUuYwppbmRleCAwZWM0NDBlLi5iMzhmOWQzIDEwMDY0NAotLS0gYS9zcmMvcHNuYW1lcy9wc21vZHVsZS5jCisrKyBiL3NyYy9wc25hbWVzL3BzbW9kdWxlLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBwc25hbWVzIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsMTAgKzE2LDkgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oPgogCiAjaW5jbHVkZSAicHNtb2R1bGUuaCIKIApkaWZmIC0tZ2l0IGEvc3JjL3BzbmFtZXMvcHNtb2R1bGUuaCBiL3NyYy9wc25hbWVzL3BzbW9kdWxlLmgKaW5kZXggMGRmOWE3ZC4uYzg1YTllYyAxMDA2NDQKLS0tIGEvc3JjL3BzbmFtZXMvcHNtb2R1bGUuaAorKysgYi9zcmMvcHNuYW1lcy9wc21vZHVsZS5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgSGlnaC1sZXZlbCBwc25hbWVzIG1vZHVsZSBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDggKzIwLDcgQEAKICNkZWZpbmUgUFNNT0RVTEVfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX01PRFVMRV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRtb2RhcGkuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3BzbmFtZXJyLmggYi9zcmMvcHNuYW1lcy9wc25hbWVyci5oCmluZGV4IDY3YWIxNzYuLjE1NGM3MDEgMTAwNjQ0Ci0tLSBhL3NyYy9wc25hbWVzL3BzbmFtZXJyLmgKKysrIGIvc3JjL3BzbmFtZXMvcHNuYW1lcnIuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFBTIG5hbWVzIG1vZHVsZSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFBTTkFNRVJSX0hfCiAjZGVmaW5lIFBTTkFNRVJSX0hfCiAKLSNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kZXJyLmg+CiAKICN1bmRlZiBGVEVSUk9SU19IXwogCkBAIC0zNCw3ICszNCw3IEBACiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFBTbmFtZXNfRXJyXwogI2RlZmluZSBGVF9FUlJfQkFTRSAgICBGVF9Nb2RfRXJyX1BTbmFtZXMKIAotI2luY2x1ZGUgRlRfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgogCiAjZW5kaWYgLyogUFNOQU1FUlJfSF8gKi8KIApkaWZmIC0tZ2l0IGEvc3JjL3BzbmFtZXMvcHNuYW1lcy5jIGIvc3JjL3BzbmFtZXMvcHNuYW1lcy5jCmluZGV4IDQ3MjJmOTguLmNmZjM2ODUgMTAwNjQ0Ci0tLSBhL3NyYy9wc25hbWVzL3BzbmFtZXMuYworKysgYi9zcmMvcHNuYW1lcy9wc25hbWVzLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBwc25hbWVzIG1vZHVsZSBjb21wb25lbnQgKGJvZHkgb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTcsNyArMTcsNiBAQAogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAKICNpbmNsdWRlICJwc21vZHVsZS5jIgogCmRpZmYgLS1naXQgYS9zcmMvcHNuYW1lcy9wc3RhYmxlcy5oIGIvc3JjL3BzbmFtZXMvcHN0YWJsZXMuaAppbmRleCBjMDEzOWJiLi5jMjE1ZjE2IDEwMDY0NAotLS0gYS9zcmMvcHNuYW1lcy9wc3RhYmxlcy5oCisrKyBiL3NyYy9wc25hbWVzL3BzdGFibGVzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBQb3N0U2NyaXB0IGdseXBoIG5hbWVzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3J1bGVzLm1rIGIvc3JjL3BzbmFtZXMvcnVsZXMubWsKaW5kZXggZGNjMjAzZS4uMTRjZGRhMyAxMDA2NDQKLS0tIGEvc3JjL3BzbmFtZXMvcnVsZXMubWsKKysrIGIvc3JjL3BzbmFtZXMvcnVsZXMubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvcmFzdGVyL0phbWZpbGUgYi9zcmMvcmFzdGVyL0phbWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5OTBjMDUuLjAwMDAwMDAKLS0tIGEvc3JjL3Jhc3Rlci9KYW1maWxlCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotIyBGcmVlVHlwZSAyIHNyYy9yYXN0ZXIgSmFtZmlsZQotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQotIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCi0jCi0jIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCi0jIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKLSMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKLSMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKLSMgZnVsbHkuCi0KLVN1YkRpciAgRlQyX1RPUCAkKEZUMl9TUkNfRElSKSByYXN0ZXIgOwotCi17Ci0gIGxvY2FsICBfc291cmNlcyA7Ci0KLSAgaWYgJChGVDJfTVVMVEkpCi0gIHsKLSAgICBfc291cmNlcyA9IGZ0cmFzdGVyCi0gICAgICAgICAgICAgICBmdHJlbmQxCi0gICAgICAgICAgICAgICByYXN0cGljCi0gICAgICAgICAgICAgICA7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgX3NvdXJjZXMgPSByYXN0ZXIgOwotICB9Ci0KLSAgTGlicmFyeSAgJChGVDJfTElCKSA6ICQoX3NvdXJjZXMpLmMgOwotfQotCi0jIGVuZCBvZiBzcmMvcmFzdGVyIEphbWZpbGUKZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvZnRtaXNjLmggYi9zcmMvcmFzdGVyL2Z0bWlzYy5oCmluZGV4IGEyNDY1NjkuLjZlZmU0YTkgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvZnRtaXNjLmgKKysrIGIvc3JjL3Jhc3Rlci9mdG1pc2MuaApAQCAtNSw3ICs1LDcgQEAKICAqICAgTWlzY2VsbGFuZW91cyBtYWNyb3MgZm9yIHN0YW5kLWFsb25lIHJhc3Rlcml6ZXIgKHNwZWNpZmljYXRpb24KICAqICAgb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkCmRpZmYgLS1naXQgYS9zcmMvcmFzdGVyL2Z0cmFzdGVyLmMgYi9zcmMvcmFzdGVyL2Z0cmFzdGVyLmMKaW5kZXggMDIzYjZjMS4uOWYwYTc5NyAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9mdHJhc3Rlci5jCisrKyBiL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRoZSBGcmVlVHlwZSBnbHlwaCByYXN0ZXJpemVyIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC02MiwxMCArNjIsOSBAQAogCiAjZWxzZSAvKiAhU1RBTkRBTE9ORV8gKi8KIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSAiZnRyYXN0ZXIuaCIKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSCAgIC8qIGZvciBGVF9NdWxEaXYgYW5kIEZUX011bERpdl9Ob19Sb3VuZCAqLwotI2luY2x1ZGUgRlRfT1VUTElORV9IICAgICAgICAgLyogZm9yIEZUX091dGxpbmVfR2V0X0NCb3ggICAgICAgICAgICAgICovCisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+IC8qIGZvciBGVF9NdWxEaXYgYW5kIEZUX011bERpdl9Ob19Sb3VuZCAqLworI2luY2x1ZGUgPGZyZWV0eXBlL2Z0b3V0bG4uaD4gICAgICAgICAvKiBmb3IgRlRfT3V0bGluZV9HZXRfQ0JveCAgICAgICAgICAgICAgKi8KIAogI2VuZGlmIC8qICFTVEFOREFMT05FXyAqLwogCkBAIC0yMjYsOCArMjI1LDggQEAKICNlbHNlIC8qICFTVEFOREFMT05FXyAqLwogCiAKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSCAgICAgICAvKiBmb3IgRlRfVFJBQ0UsIEZUX0VSUk9SLCBhbmQgRlRfVEhST1cgKi8KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+IC8qIGZvciBGVF9UUkFDRSwgRlRfRVJST1IsIGFuZCBGVF9USFJPVyAqLwogCiAjaW5jbHVkZSAicmFzdGVycnMuaCIKIApAQCAtNDYwLDYgKzQ1OSwxMSBAQAogI2RlZmluZSBJU19UT1BfT1ZFUlNIT09UKCB4ICkgICAgXAogICAgICAgICAgIChCb29sKSggeCAtIEZMT09SKCB4ICkgPj0gcmFzLnByZWNpc2lvbl9oYWxmICkKIAorICAvKiBTbWFydCBkcm9wb3V0IHJvdW5kaW5nIHRvIGZpbmQgd2hpY2ggcGl4ZWwgaXMgY2xvc2VyIHRvIHNwYW4gZW5kcy4gKi8KKyAgLyogVG8gbWltaWNrIFdpbmRvd3MsIHN5bW1ldHJpYyBjYXNlcyBicmVhayBkb3duIGluZGVwZW5lbnRseSBvZiB0aGUgICovCisgIC8qIHByZWNpc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTTUFSVCggcCwgcSApICBGTE9PUiggKCAocCkgKyAocSkgKyByYXMucHJlY2lzaW9uICogNjMgLyA2NCApID4+IDEgKQorCiAjaWYgRlRfUkVOREVSX1BPT0xfU0laRSA+IDIwNDgKICNkZWZpbmUgRlRfTUFYX0JMQUNLX1BPT0wgICggRlRfUkVOREVSX1BPT0xfU0laRSAvIHNpemVvZiAoIExvbmcgKSApCiAjZWxzZQpAQCAtNjc0LDEzICs2NzgsMTMgQEAKICAgICAgIGlmICggb3ZlcnNob290ICkKICAgICAgICAgcmFzLmNQcm9maWxlLT5mbGFncyB8PSBPdmVyc2hvb3RfQm90dG9tOwogCi0gICAgICBGVF9UUkFDRTYoKCAiICBuZXcgYXNjZW5kaW5nIHByb2ZpbGUgPSAlcFxuIiwgcmFzLmNQcm9maWxlICkpOworICAgICAgRlRfVFJBQ0U2KCggIiAgbmV3IGFzY2VuZGluZyBwcm9maWxlID0gJXBcbiIsICh2b2lkICopcmFzLmNQcm9maWxlICkpOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIERlc2NlbmRpbmdfU3RhdGU6CiAgICAgICBpZiAoIG92ZXJzaG9vdCApCiAgICAgICAgIHJhcy5jUHJvZmlsZS0+ZmxhZ3MgfD0gT3ZlcnNob290X1RvcDsKLSAgICAgIEZUX1RSQUNFNigoICIgIG5ldyBkZXNjZW5kaW5nIHByb2ZpbGUgPSAlcFxuIiwgcmFzLmNQcm9maWxlICkpOworICAgICAgRlRfVFJBQ0U2KCggIiAgbmV3IGRlc2NlbmRpbmcgcHJvZmlsZSA9ICVwXG4iLCAodm9pZCAqKXJhcy5jUHJvZmlsZSApKTsKICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKQEAgLTczNyw3ICs3NDEsNyBAQAogCiAKICAgICAgIEZUX1RSQUNFNigoICIgIGVuZGluZyBwcm9maWxlICVwLCBzdGFydCA9ICVsZCwgaGVpZ2h0ID0gJWxkXG4iLAotICAgICAgICAgICAgICAgICAgcmFzLmNQcm9maWxlLCByYXMuY1Byb2ZpbGUtPnN0YXJ0LCBoICkpOworICAgICAgICAgICAgICAgICAgKHZvaWQgKilyYXMuY1Byb2ZpbGUsIHJhcy5jUHJvZmlsZS0+c3RhcnQsIGggKSk7CiAKICAgICAgIHJhcy5jUHJvZmlsZS0+aGVpZ2h0ID0gaDsKICAgICAgIGlmICggb3ZlcnNob290ICkKQEAgLTIyNDIsMTEgKzIyNDYsMTAgQEAKIAogICAgIC8qIGluIGhpZ2gtcHJlY2lzaW9uIG1vZGUsIHdlIG5lZWQgMTIgZGlnaXRzIGFmdGVyIHRoZSBjb21tYSB0byAqLwogICAgIC8qIHJlcHJlc2VudCBtdWx0aXBsZXMgb2YgMS8oMTw8MTIpID0gMS80MDk2ICAgICAgICAgICAgICAgICAgICAqLwotICAgIEZUX1RSQUNFNygoICIgIHk9JWQgeD1bJS4xMmY7JS4xMmZdLCBkcm9wLW91dD0lZCIsCisgICAgRlRfVFJBQ0U3KCggIiAgeT0lZCB4PVslIC4xMmY7JSAuMTJmXSIsCiAgICAgICAgICAgICAgICAgeSwKICAgICAgICAgICAgICAgICB4MSAvIChkb3VibGUpcmFzLnByZWNpc2lvbiwKLSAgICAgICAgICAgICAgICB4MiAvIChkb3VibGUpcmFzLnByZWNpc2lvbiwKLSAgICAgICAgICAgICAgICBkcm9wT3V0Q29udHJvbCApKTsKKyAgICAgICAgICAgICAgICB4MiAvIChkb3VibGUpcmFzLnByZWNpc2lvbiApKTsKIAogICAgIC8qIERyb3Atb3V0IGNvbnRyb2wgKi8KIApAQCAtMjI3NCw3ICsyMjc3LDcgQEAKICAgICAgIGlmICggZTIgPj0gcmFzLmJXaWR0aCApCiAgICAgICAgIGUyID0gcmFzLmJXaWR0aCAtIDE7CiAKLSAgICAgIEZUX1RSQUNFNygoICIgLT4geD1bJWQ7JWRdIiwgZTEsIGUyICkpOworICAgICAgRlRfVFJBQ0U3KCggIiAtPiB4PVslbGQ7JWxkXSIsIGUxLCBlMiApKTsKIAogICAgICAgYzEgPSAoU2hvcnQpKCBlMSA+PiAzICk7CiAgICAgICBjMiA9IChTaG9ydCkoIGUyID4+IDMgKTsKQEAgLTIzMTYsNyArMjMxOSw3IEBACiAgICAgU2hvcnQgIGMxLCBmMTsKIAogCi0gICAgRlRfVFJBQ0U3KCggIiAgeT0lZCB4PVslLjEyZjslLjEyZl0iLAorICAgIEZUX1RSQUNFNygoICIgIHk9JWQgeD1bJSAuMTJmOyUgLjEyZl0iLAogICAgICAgICAgICAgICAgIHksCiAgICAgICAgICAgICAgICAgeDEgLyAoZG91YmxlKXJhcy5wcmVjaXNpb24sCiAgICAgICAgICAgICAgICAgeDIgLyAoZG91YmxlKXJhcy5wcmVjaXNpb24gKSk7CkBAIC0yMzUzLDggKzIzNTYsNiBAQAogICAgICAgSW50ICBkcm9wT3V0Q29udHJvbCA9IGxlZnQtPmZsYWdzICYgNzsKIAogCi0gICAgICBGVF9UUkFDRTcoKCAiLCBkcm9wLW91dD0lZCIsIGRyb3BPdXRDb250cm9sICkpOwotCiAgICAgICBpZiAoIGUxID09IGUyICsgcmFzLnByZWNpc2lvbiApCiAgICAgICB7CiAgICAgICAgIHN3aXRjaCAoIGRyb3BPdXRDb250cm9sICkKQEAgLTIzNjQsNyArMjM2NSw3IEBACiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSA0OiAvKiBzbWFydCBkcm9wLW91dHMgaW5jbHVkaW5nIHN0dWJzICovCi0gICAgICAgICAgcHhsID0gRkxPT1IoICggeDEgKyB4MiAtIDEgKSAvIDIgKyByYXMucHJlY2lzaW9uX2hhbGYgKTsKKyAgICAgICAgICBweGwgPSBTTUFSVCggeDEsIHgyICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAxOiAvKiBzaW1wbGUgZHJvcC1vdXRzIGV4Y2x1ZGluZyBzdHVicyAqLwpAQCAtMjQxMyw3ICsyNDE0LDcgQEAKICAgICAgICAgICBpZiAoIGRyb3BPdXRDb250cm9sID09IDEgKQogICAgICAgICAgICAgcHhsID0gZTI7CiAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgcHhsID0gRkxPT1IoICggeDEgKyB4MiAtIDEgKSAvIDIgKyByYXMucHJlY2lzaW9uX2hhbGYgKTsKKyAgICAgICAgICAgIHB4bCA9IFNNQVJUKCB4MSwgeDIgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBkZWZhdWx0OiAvKiBtb2RlcyAyLCAzLCA2LCA3ICovCkBAIC0yNDQ4LDcgKzI0NDksNyBAQAogCiAgICAgaWYgKCBlMSA+PSAwICYmIGUxIDwgcmFzLmJXaWR0aCApCiAgICAgewotICAgICAgRlRfVFJBQ0U3KCggIiAtPiB4PSVkIChkcm9wLW91dCkiLCBlMSApKTsKKyAgICAgIEZUX1RSQUNFNygoICIgLT4geD0lbGQiLCBlMSApKTsKIAogICAgICAgYzEgPSAoU2hvcnQpKCBlMSA+PiAzICk7CiAgICAgICBmMSA9IChTaG9ydCkoIGUxICYgNyApOwpAQCAtMjQ1Nyw3ICsyNDU4LDcgQEAKICAgICB9CiAKICAgRXhpdDoKLSAgICBGVF9UUkFDRTcoKCAiXG4iICkpOworICAgIEZUX1RSQUNFNygoICIgZHJvcG91dD0lZFxuIiwgbGVmdC0+ZmxhZ3MgJiA3ICkpOwogICB9CiAKIApAQCAtMjQ5NSw0NCArMjQ5Niw2OCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQcm9maWxlICAgIGxlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFByb2ZpbGUgICAgcmlnaHQgKQogICB7CisgICAgTG9uZyAgZTEsIGUyOworCiAgICAgRlRfVU5VU0VEKCBsZWZ0ICk7CiAgICAgRlRfVU5VU0VEKCByaWdodCApOwogCiAKLSAgICBpZiAoIHgyIC0geDEgPCByYXMucHJlY2lzaW9uICkKKyAgICBGVF9UUkFDRTcoKCAiICB4PSVkIHk9WyUgLjEyZjslIC4xMmZdIiwKKyAgICAgICAgICAgICAgICB5LAorICAgICAgICAgICAgICAgIHgxIC8gKGRvdWJsZSlyYXMucHJlY2lzaW9uLAorICAgICAgICAgICAgICAgIHgyIC8gKGRvdWJsZSlyYXMucHJlY2lzaW9uICkpOworCisgICAgLyogV2Ugc2hvdWxkIG5vdCBuZWVkIHRoaXMgcHJvY2VkdXJlIGJ1dCB0aGUgdmVydGljYWwgc3dlZXAgICAqLworICAgIC8qIG1pc2hhbmRsZXMgaG9yaXpvbnRhbCBsaW5lcyB0aHJvdWdoIHBpeGVsIGNlbnRlcnMuICBTbyB3ZSAgKi8KKyAgICAvKiBoYXZlIHRvIGNoZWNrIHBlcmZlY3RseSBhbGlnbmVkIHNwYW4gZWRnZXMgaGVyZS4gICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIFhYWDogQ2FuIHdlIGhhbmRsZSBob3Jpem9udGFsIGxpbmVzIGJldHRlciBhbmQgZHJvcCB0aGlzPyAgKi8KKworICAgIGUxID0gQ0VJTElORyggeDEgKTsKKworICAgIGlmICggeDEgPT0gZTEgKQogICAgIHsKLSAgICAgIExvbmcgIGUxLCBlMjsKKyAgICAgIGUxID0gVFJVTkMoIGUxICk7CiAKLQotICAgICAgRlRfVFJBQ0U3KCggIiAgeD0lZCB5PVslLjEyZjslLjEyZl0iLAotICAgICAgICAgICAgICAgICAgeSwKLSAgICAgICAgICAgICAgICAgIHgxIC8gKGRvdWJsZSlyYXMucHJlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgeDIgLyAoZG91YmxlKXJhcy5wcmVjaXNpb24gKSk7Ci0KLSAgICAgIGUxID0gQ0VJTElORyggeDEgKTsKLSAgICAgIGUyID0gRkxPT1IgICggeDIgKTsKLQotICAgICAgaWYgKCBlMSA9PSBlMiApCisgICAgICBpZiAoIGUxID49IDAgJiYgKFVMb25nKWUxIDwgcmFzLnRhcmdldC5yb3dzICkKICAgICAgIHsKLSAgICAgICAgZTEgPSBUUlVOQyggZTEgKTsKLQotICAgICAgICBpZiAoIGUxID49IDAgJiYgKFVMb25nKWUxIDwgcmFzLnRhcmdldC5yb3dzICkKLSAgICAgICAgewotICAgICAgICAgIEJ5dGUgICBmMTsKLSAgICAgICAgICBQQnl0ZSAgYml0czsKKyAgICAgICAgQnl0ZSAgIGYxOworICAgICAgICBQQnl0ZSAgYml0czsKIAogCi0gICAgICAgICAgRlRfVFJBQ0U3KCggIiAtPiB5PSVkIChkcm9wLW91dCkiLCBlMSApKTsKKyAgICAgICAgYml0cyA9IHJhcy5iT3JpZ2luICsgKCB5ID4+IDMgKSAtIGUxICogcmFzLnRhcmdldC5waXRjaDsKKyAgICAgICAgZjEgICA9IChCeXRlKSggMHg4MCA+PiAoIHkgJiA3ICkgKTsKIAotICAgICAgICAgIGJpdHMgPSByYXMuYk9yaWdpbiArICggeSA+PiAzICkgLSBlMSAqIHJhcy50YXJnZXQucGl0Y2g7Ci0gICAgICAgICAgZjEgICA9IChCeXRlKSggMHg4MCA+PiAoIHkgJiA3ICkgKTsKKyAgICAgICAgRlRfVFJBQ0U3KCggYml0c1swXSAmIGYxID8gIiByZWR1bmRhbnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIgLT4geT0lbGQgZWRnZSIsIGUxICkpOwogCi0gICAgICAgICAgYml0c1swXSB8PSBmMTsKLSAgICAgICAgfQorICAgICAgICBiaXRzWzBdIHw9IGYxOwogICAgICAgfQotCi0gICAgICBGVF9UUkFDRTcoKCAiXG4iICkpOwogICAgIH0KKworICAgIGUyID0gRkxPT1IgICggeDIgKTsKKworICAgIGlmICggeDIgPT0gZTIgKQorICAgIHsKKyAgICAgIGUyID0gVFJVTkMoIGUyICk7CisKKyAgICAgIGlmICggZTIgPj0gMCAmJiAoVUxvbmcpZTIgPCByYXMudGFyZ2V0LnJvd3MgKQorICAgICAgeworICAgICAgICBCeXRlICAgZjE7CisgICAgICAgIFBCeXRlICBiaXRzOworCisKKyAgICAgICAgYml0cyA9IHJhcy5iT3JpZ2luICsgKCB5ID4+IDMgKSAtIGUyICogcmFzLnRhcmdldC5waXRjaDsKKyAgICAgICAgZjEgICA9IChCeXRlKSggMHg4MCA+PiAoIHkgJiA3ICkgKTsKKworICAgICAgICBGVF9UUkFDRTcoKCBiaXRzWzBdICYgZjEgPyAiIHJlZHVuZGFudCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiAtPiB5PSVsZCBlZGdlIiwgZTIgKSk7CisKKyAgICAgICAgYml0c1swXSB8PSBmMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBGVF9UUkFDRTcoKCAiXG4iICkpOwogICB9CiAKIApAQCAtMjU0OCw3ICsyNTczLDcgQEAKICAgICBCeXRlICAgZjE7CiAKIAotICAgIEZUX1RSQUNFNygoICIgIHg9JWQgeT1bJS4xMmY7JS4xMmZdIiwKKyAgICBGVF9UUkFDRTcoKCAiICB4PSVkIHk9WyUgLjEyZjslIC4xMmZdIiwKICAgICAgICAgICAgICAgICB5LAogICAgICAgICAgICAgICAgIHgxIC8gKGRvdWJsZSlyYXMucHJlY2lzaW9uLAogICAgICAgICAgICAgICAgIHgyIC8gKGRvdWJsZSlyYXMucHJlY2lzaW9uICkpOwpAQCAtMjU3NCw4ICsyNTk5LDYgQEAKICAgICAgIEludCAgZHJvcE91dENvbnRyb2wgPSBsZWZ0LT5mbGFncyAmIDc7CiAKIAotICAgICAgRlRfVFJBQ0U3KCggIiwgZHJvcG91dD0lZCIsIGRyb3BPdXRDb250cm9sICkpOwotCiAgICAgICBpZiAoIGUxID09IGUyICsgcmFzLnByZWNpc2lvbiApCiAgICAgICB7CiAgICAgICAgIHN3aXRjaCAoIGRyb3BPdXRDb250cm9sICkKQEAgLTI1ODUsNyArMjYwOCw3IEBACiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSA0OiAvKiBzbWFydCBkcm9wLW91dHMgaW5jbHVkaW5nIHN0dWJzICovCi0gICAgICAgICAgcHhsID0gRkxPT1IoICggeDEgKyB4MiAtIDEgKSAvIDIgKyByYXMucHJlY2lzaW9uX2hhbGYgKTsKKyAgICAgICAgICBweGwgPSBTTUFSVCggeDEsIHgyICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAxOiAvKiBzaW1wbGUgZHJvcC1vdXRzIGV4Y2x1ZGluZyBzdHVicyAqLwpAQCAtMjYwOSw3ICsyNjMyLDcgQEAKICAgICAgICAgICBpZiAoIGRyb3BPdXRDb250cm9sID09IDEgKQogICAgICAgICAgICAgcHhsID0gZTI7CiAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgcHhsID0gRkxPT1IoICggeDEgKyB4MiAtIDEgKSAvIDIgKyByYXMucHJlY2lzaW9uX2hhbGYgKTsKKyAgICAgICAgICAgIHB4bCA9IFNNQVJUKCB4MSwgeDIgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBkZWZhdWx0OiAvKiBtb2RlcyAyLCAzLCA2LCA3ICovCkBAIC0yNjQ1LDcgKzI2NjgsNyBAQAogCiAgICAgaWYgKCBlMSA+PSAwICYmIChVTG9uZyllMSA8IHJhcy50YXJnZXQucm93cyApCiAgICAgewotICAgICAgRlRfVFJBQ0U3KCggIiAtPiB5PSVkIChkcm9wLW91dCkiLCBlMSApKTsKKyAgICAgIEZUX1RSQUNFNygoICIgLT4geT0lbGQiLCBlMSApKTsKIAogICAgICAgYml0cyAgPSByYXMuYk9yaWdpbiArICggeSA+PiAzICkgLSBlMSAqIHJhcy50YXJnZXQucGl0Y2g7CiAgICAgICBmMSAgICA9IChCeXRlKSggMHg4MCA+PiAoIHkgJiA3ICkgKTsKQEAgLTI2NTQsNyArMjY3Nyw3IEBACiAgICAgfQogCiAgIEV4aXQ6Ci0gICAgRlRfVFJBQ0U3KCggIlxuIiApKTsKKyAgICBGVF9UUkFDRTcoKCAiIGRyb3BvdXQ9JWRcbiIsIGxlZnQtPmZsYWdzICYgNyApKTsKICAgfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuaCBiL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuaAppbmRleCA1MGQzNDIwLi4xYjJlZTNjIDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL2Z0cmFzdGVyLmgKKysrIGIvc3JjL3Jhc3Rlci9mdHJhc3Rlci5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVGhlIEZyZWVUeXBlIGdseXBoIHJhc3Rlcml6ZXIgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZApAQCAtMjIsOCArMjIsOSBAQAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAotI2luY2x1ZGUgRlRfSU1BR0VfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0aW1hZ2UuaD4KIAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2NvbXBpbGVyLW1hY3Jvcy5oPgogCiBGVF9CRUdJTl9IRUFERVIKIApkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9mdHJlbmQxLmMgYi9zcmMvcmFzdGVyL2Z0cmVuZDEuYwppbmRleCA2MmM3MjcxLi41N2ZlZDliIDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL2Z0cmVuZDEuYworKysgYi9zcmMvcmFzdGVyL2Z0cmVuZDEuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRoZSBGcmVlVHlwZSBnbHlwaCByYXN0ZXJpemVyIGludGVyZmFjZSAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsMTAgKzE2LDkgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9PVVRMSU5FX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRvdXRsbi5oPgogI2luY2x1ZGUgImZ0cmVuZDEuaCIKICNpbmNsdWRlICJmdHJhc3Rlci5oIgogCmRpZmYgLS1naXQgYS9zcmMvcmFzdGVyL2Z0cmVuZDEuaCBiL3NyYy9yYXN0ZXIvZnRyZW5kMS5oCmluZGV4IDgyZWNhYzYuLjNmNmJlNTMgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvZnRyZW5kMS5oCisrKyBiL3NyYy9yYXN0ZXIvZnRyZW5kMS5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVGhlIEZyZWVUeXBlIGdseXBoIHJhc3Rlcml6ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw4ICsyMCw3IEBACiAjZGVmaW5lIEZUUkVORDFfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX1JFTkRFUl9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRyZW5kZXIuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvbW9kdWxlLm1rIGIvc3JjL3Jhc3Rlci9tb2R1bGUubWsKaW5kZXggMGE2ZDRiMC4uMzYwMDczMiAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9tb2R1bGUubWsKKysrIGIvc3JjL3Jhc3Rlci9tb2R1bGUubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvcmFzdGVyL3Jhc3Rlci5jIGIvc3JjL3Jhc3Rlci9yYXN0ZXIuYwppbmRleCBlM2FjOWU1Li5jZDM3OTQzIDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL3Jhc3Rlci5jCisrKyBiL3NyYy9yYXN0ZXIvcmFzdGVyLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBtb25vY2hyb21lIHJhc3RlcmVyIG1vZHVsZSBjb21wb25lbnQgKGJvZHkgb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTcsNyArMTcsNiBAQAogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAKICNpbmNsdWRlICJmdHJhc3Rlci5jIgogI2luY2x1ZGUgImZ0cmVuZDEuYyIKZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvcmFzdGVycnMuaCBiL3NyYy9yYXN0ZXIvcmFzdGVycnMuaAppbmRleCA3MjY2NDA3Li5hMjk2NTFhIDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL3Jhc3RlcnJzLmgKKysrIGIvc3JjL3Jhc3Rlci9yYXN0ZXJycy5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgbW9ub2Nocm9tZSByZW5kZXJlciBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFJBU1RFUlJTX0hfCiAjZGVmaW5lIFJBU1RFUlJTX0hfCiAKLSNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kZXJyLmg+CiAKICN1bmRlZiBGVEVSUk9SU19IXwogCkBAIC0zNCw3ICszNCw3IEBACiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFJhc3Rlcl9FcnJfCiAjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfUmFzdGVyCiAKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KIAogI2VuZGlmIC8qIFJBU1RFUlJTX0hfICovCiAKZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvcnVsZXMubWsgYi9zcmMvcmFzdGVyL3J1bGVzLm1rCmluZGV4IDc2NjQ2NzEuLjNlOTQ5ZDcgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvcnVsZXMubWsKKysrIGIvc3JjL3Jhc3Rlci9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9zZm50L0phbWZpbGUgYi9zcmMvc2ZudC9KYW1maWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjQ2YjM1Li4wMDAwMDAwCi0tLSBhL3NyYy9zZm50L0phbWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0jIEZyZWVUeXBlIDIgc3JjL3NmbnQgSmFtZmlsZQotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQotIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCi0jCi0jIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCi0jIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKLSMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKLSMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKLSMgZnVsbHkuCi0KLVN1YkRpciAgRlQyX1RPUCAkKEZUMl9TUkNfRElSKSBzZm50IDsKLQotewotICBsb2NhbCAgX3NvdXJjZXMgOwotCi0gIGlmICQoRlQyX01VTFRJKQotICB7Ci0gICAgX3NvdXJjZXMgPSBwbmdzaGltCi0gICAgICAgICAgICAgICBzZmRyaXZlcgotICAgICAgICAgICAgICAgc2ZudHBpYwotICAgICAgICAgICAgICAgc2ZvYmpzCi0gICAgICAgICAgICAgICB0dGJkZgotICAgICAgICAgICAgICAgdHRjbWFwCi0gICAgICAgICAgICAgICB0dGNvbHIKLSAgICAgICAgICAgICAgIHR0Y3BhbAotICAgICAgICAgICAgICAgdHRrZXJuCi0gICAgICAgICAgICAgICB0dGxvYWQKLSAgICAgICAgICAgICAgIHR0bXR4Ci0gICAgICAgICAgICAgICB0dHBvc3QKLSAgICAgICAgICAgICAgIHR0c2JpdAotICAgICAgICAgICAgICAgOwotICB9Ci0gIGVsc2UKLSAgewotICAgIF9zb3VyY2VzID0gc2ZudCA7Ci0gIH0KLQotICBMaWJyYXJ5ICAkKEZUMl9MSUIpIDogJChfc291cmNlcykuYyA7Ci19Ci0KLSMgZW5kIG9mIHNyYy9zZm50IEphbWZpbGUKZGlmZiAtLWdpdCBhL3NyYy9zZm50L21vZHVsZS5tayBiL3NyYy9zZm50L21vZHVsZS5tawppbmRleCA4YzNiNDRmLi4wZjQ1OWQ4IDEwMDY0NAotLS0gYS9zcmMvc2ZudC9tb2R1bGUubWsKKysrIGIvc3JjL3NmbnQvbW9kdWxlLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvcG5nc2hpbS5jIGIvc3JjL3NmbnQvcG5nc2hpbS5jCmluZGV4IDE1ZjRlMTYuLmY1NTAxNjEgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3BuZ3NoaW0uYworKysgYi9zcmMvc2ZudC9wbmdzaGltLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBQTkcgQml0bWFwIGdseXBoIHN1cHBvcnQuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIGJ5CiAgKiBHb29nbGUsIEluYy4KICAqIFdyaXR0ZW4gYnkgU3R1YXJ0IEdpbGwgYW5kIEJlaGRhZCBFc2ZhaGJvZC4KICAqCkBAIC0xNywxMCArMTcsOSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWdzLmg+CiAjaW5jbHVkZSBGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9ICiAKIApAQCAtNjEsMTMgKzYwLDE5IEBACiAgICAgLyogcHJlZGF0ZXMgY2xhbmc7IHRoZSBgX19CWVRFX09SREVSX18nIHByZXByb2Nlc3NvciBzeW1ib2wgd2FzICovCiAgICAgLyogaW50cm9kdWNlZCBpbiBnY2MgNC42IGFuZCBjbGFuZyAzLjIsIHJlc3BlY3RpdmVseS4gICAgICAgICAgICovCiAgICAgLyogYF9fYnVpbHRpbl9zaHVmZmxlJyBmb3IgZ2NjIHdhcyBpbnRyb2R1Y2VkIGluIGdjYyA0LjcuMC4gICAgICovCi0jaWYgKCAoIGRlZmluZWQoIF9fR05VQ19fICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICAgICAgICAgICAgIFwKKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBJbnRlbCBjb21waWxlcnMgZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0IF9fYnVpbHRpbl9zaHVmZmxlOyAgKi8KKworICAgIC8qIFRoZSBJbnRlbCBjaGVjayBtdXN0IGJlIGZpcnN0LiAqLworI2lmICFkZWZpbmVkKCBfX0lOVEVMX0NPTVBJTEVSICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBcCisgICAgKCAoIGRlZmluZWQoIF9fR05VQ19fICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICAgICAgICAgICAgIFwKICAgICAgICAgKCAoIF9fR05VQ19fID49IDUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICAgICAgICAgICAgICAgXAogICAgICAgICAoICggX19HTlVDX18gPT0gNCApICYmICggX19HTlVDX01JTk9SX18gPj0gNyApICkgKSApICAgICAgICAgfHwgICBcCiAgICAgICAoIGRlZmluZWQoIF9fY2xhbmdfXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgICAgIFwKICAgICAgICAgKCAoIF9fY2xhbmdfbWFqb3JfXyA+PSA0ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgICAgICAgXAogICAgICAgICAoICggX19jbGFuZ19tYWpvcl9fID09IDMgKSAmJiAoIF9fY2xhbmdfbWlub3JfXyA+PSAyICkgKSApICkgKSAmJiBcCiAgICAgZGVmaW5lZCggX19PUFRJTUlaRV9fICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFwKKyAgICBkZWZpbmVkKCBfX1NTRV9fICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgXAogICAgIF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfTElUVExFX0VORElBTl9fCiAKICNpZmRlZiBfX2NsYW5nX18KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3BuZ3NoaW0uaCBiL3NyYy9zZm50L3BuZ3NoaW0uaAppbmRleCAwNmM2ZjZiLi4yZDZlODNkIDEwMDY0NAotLS0gYS9zcmMvc2ZudC9wbmdzaGltLmgKKysrIGIvc3JjL3NmbnQvcG5nc2hpbS5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgUE5HIEJpdG1hcCBnbHlwaCBzdXBwb3J0LgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBieQogICogR29vZ2xlLCBJbmMuCiAgKiBXcml0dGVuIGJ5IFN0dWFydCBHaWxsIGFuZCBCZWhkYWQgRXNmYWhib2QuCiAgKgpAQCAtMjEsNyArMjEsNiBAQAogI2RlZmluZSBQTkdTSElNX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSAidHRsb2FkLmgiCiAKIApkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvcnVsZXMubWsgYi9zcmMvc2ZudC9ydWxlcy5tawppbmRleCBlZTMzMTRlLi5mNTZlZjA2IDEwMDY0NAotLS0gYS9zcmMvc2ZudC9ydWxlcy5taworKysgYi9zcmMvc2ZudC9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTI4LDE5ICsyOCwyMSBAQAogCiAjIFNGTlQgZHJpdmVyIHNvdXJjZXMgKGkuZS4sIEMgZmlsZXMpCiAjCi1TRk5UX0RSVl9TUkMgOj0gJChTRk5UX0RJUikvcG5nc2hpbS5jICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvc2Zkcml2ZXIuYyBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvc2ZvYmpzLmMgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvc2Z3b2ZmLmMgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRiZGYuYyAgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRjbWFwLmMgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRjb2xyLmMgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRjcGFsLmMgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRrZXJuLmMgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRsb2FkLmMgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRtdHguYyAgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRwb3N0LmMgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRzYml0LmMKK1NGTlRfRFJWX1NSQyA6PSAkKFNGTlRfRElSKS9wbmdzaGltLmMgICBcCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvc2Zkcml2ZXIuYyAgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3Nmb2Jqcy5jICAgIFwKKyAgICAgICAgICAgICAgICAkKFNGTlRfRElSKS9zZndvZmYuYyAgICBcCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvc2Z3b2ZmMi5jICAgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3R0YmRmLmMgICAgIFwKKyAgICAgICAgICAgICAgICAkKFNGTlRfRElSKS90dGNtYXAuYyAgICBcCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRjb2xyLmMgICAgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3R0Y3BhbC5jICAgIFwKKyAgICAgICAgICAgICAgICAkKFNGTlRfRElSKS90dGtlcm4uYyAgICBcCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRsb2FkLmMgICAgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3R0bXR4LmMgICAgIFwKKyAgICAgICAgICAgICAgICAkKFNGTlRfRElSKS90dHBvc3QuYyAgICBcCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRzYml0LmMgICAgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3dvZmYydGFncy5jCiAKICMgU0ZOVCBkcml2ZXIgaGVhZGVycwogIwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2Zkcml2ZXIuYyBiL3NyYy9zZm50L3NmZHJpdmVyLmMKaW5kZXggMjYxMTY4NS4uMDQ2MDMzOSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2Zkcml2ZXIuYworKysgYi9zcmMvc2ZudC9zZmRyaXZlci5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgSGlnaC1sZXZlbCBTRk5UIGRyaXZlciBpbnRlcmZhY2UgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDExICsxNiwxMCBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TRk5UX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfSURTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL3R0bmFtZWlkLmg+CiAKICNpbmNsdWRlICJzZmRyaXZlci5oIgogI2luY2x1ZGUgInR0bG9hZC5oIgpAQCAtNDMsMjEgKzQyLDIxIEBACiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0JERgogI2luY2x1ZGUgInR0YmRmLmgiCi0jaW5jbHVkZSBGVF9TRVJWSUNFX0JERl9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZiZGYuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAidHRjbWFwLmgiCiAjaW5jbHVkZSAidHRrZXJuLmgiCiAjaW5jbHVkZSAidHRtdHguaCIKIAotI2luY2x1ZGUgRlRfU0VSVklDRV9HTFlQSF9ESUNUX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfU0ZOVF9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1RUX0NNQVBfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Y21hcC5oPgogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAotI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmg+CiAjZW5kaWYKIAogCkBAIC0xOTUsNyArMTk0LDcgQEAKICAgICBlbHNlIGlmICggKEZUX1VMb25nKWZhY2UtPm51bV9nbHlwaHMgPCBGVF9VSU5UX01BWCApCiAgICAgICBtYXhfZ2lkID0gKEZUX1VJbnQpZmFjZS0+bnVtX2dseXBoczsKICAgICBlbHNlCi0gICAgICBGVF9UUkFDRTAoKCAiSWdub3JlIGdseXBoIG5hbWVzIGZvciBpbnZhbGlkIEdJRCAweCUwOHggLSAweCUwOHhcbiIsCisgICAgICBGVF9UUkFDRTAoKCAiSWdub3JlIGdseXBoIG5hbWVzIGZvciBpbnZhbGlkIEdJRCAweCUwOHggLSAweCUwOGx4XG4iLAogICAgICAgICAgICAgICAgICAgRlRfVUlOVF9NQVgsIGZhY2UtPm51bV9nbHlwaHMgKSk7CiAKICAgICBmb3IgKCBpID0gMDsgaSA8IG1heF9naWQ7IGkrKyApCmRpZmYgLS1naXQgYS9zcmMvc2ZudC9zZmRyaXZlci5oIGIvc3JjL3NmbnQvc2Zkcml2ZXIuaAppbmRleCA4YzE3NDYzLi4xYWMyNzA2IDEwMDY0NAotLS0gYS9zcmMvc2ZudC9zZmRyaXZlci5oCisrKyBiL3NyYy9zZm50L3NmZHJpdmVyLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBIaWdoLWxldmVsIFNGTlQgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsOCArMjAsNyBAQAogI2RlZmluZSBTRkRSSVZFUl9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfTU9EVUxFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdG1vZGFwaS5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2ZlcnJvcnMuaCBiL3NyYy9zZm50L3NmZXJyb3JzLmgKaW5kZXggNDNlMTQ4ZC4uNTVjM2U3NiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2ZlcnJvcnMuaAorKysgYi9zcmMvc2ZudC9zZmVycm9ycy5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgU0ZOVCBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZuZGVmIFNGRVJST1JTX0hfCiAjZGVmaW5lIFNGRVJST1JTX0hfCiAKLSNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kZXJyLmg+CiAKICN1bmRlZiBGVEVSUk9SU19IXwogCkBAIC0zMyw3ICszMyw3IEBACiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFNGTlRfRXJyXwogI2RlZmluZSBGVF9FUlJfQkFTRSAgICBGVF9Nb2RfRXJyX1NGTlQKIAotI2luY2x1ZGUgRlRfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgogCiAjZW5kaWYgLyogU0ZFUlJPUlNfSF8gKi8KIApkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2ZudC5jIGIvc3JjL3NmbnQvc2ZudC5jCmluZGV4IGI0ZmFmMzQuLjQ3MTIzOWYgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3NmbnQuYworKysgYi9zcmMvc2ZudC9zZm50LmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBTaW5nbGUgb2JqZWN0IGxpYnJhcnkgY29tcG9uZW50LgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE3LDEyICsxNywxMiBAQAogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAKICNpbmNsdWRlICJwbmdzaGltLmMiCiAjaW5jbHVkZSAic2Zkcml2ZXIuYyIKICNpbmNsdWRlICJzZm9ianMuYyIKICNpbmNsdWRlICJzZndvZmYuYyIKKyNpbmNsdWRlICJzZndvZmYyLmMiCiAjaW5jbHVkZSAidHRiZGYuYyIKICNpbmNsdWRlICJ0dGNtYXAuYyIKICNpbmNsdWRlICJ0dGNvbHIuYyIKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJ0dG10eC5jIgogI2luY2x1ZGUgInR0cG9zdC5jIgogI2luY2x1ZGUgInR0c2JpdC5jIgorI2luY2x1ZGUgIndvZmYydGFncy5jIgogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2ZvYmpzLmMgYi9zcmMvc2ZudC9zZm9ianMuYwppbmRleCA2ZWRmM2FlLi4zOTQ2MGJlIDEwMDY0NAotLS0gYS9zcmMvc2ZudC9zZm9ianMuYworKysgYi9zcmMvc2ZudC9zZm9ianMuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFNGTlQgb2JqZWN0IG1hbmFnZW1lbnQgKGJhc2UpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDIyICsxNiwyMiBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSAic2ZvYmpzLmgiCiAjaW5jbHVkZSAidHRsb2FkLmgiCiAjaW5jbHVkZSAidHRjbWFwLmgiCiAjaW5jbHVkZSAidHRrZXJuLmgiCiAjaW5jbHVkZSAic2Z3b2ZmLmgiCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TRk5UX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX0lEU19ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9DTUFQU19ICi0jaW5jbHVkZSBGVF9TRk5UX05BTUVTX0gKKyNpbmNsdWRlICJzZndvZmYyLmgiCisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90dG5hbWVpZC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL3R0dGFncy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRzbmFtZXMuaD4KIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX01FVFJJQ1NfVkFSSUFUSU9OU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bWV0cmljLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgInNmZXJyb3JzLmgiCkBAIC0zNDEsNyArMzQxLDkgQEAKICAgLyogc3ludGhlc2l6ZWQgaW50byBhIFRUQyB3aXRoIG9uZSBvZmZzZXQgdGFibGUuICAgICAgICAgICAgICAqLwogICBzdGF0aWMgRlRfRXJyb3IKICAgc2ZudF9vcGVuX2ZvbnQoIEZUX1N0cmVhbSAgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgVFRfRmFjZSAgICBmYWNlICkKKyAgICAgICAgICAgICAgICAgIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIEZUX0ludCogICAgZmFjZV9pbnN0YW5jZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgd29mZjJfbnVtX2ZhY2VzICkKICAgewogICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CiAgICAgRlRfRXJyb3IgICBlcnJvcjsKQEAgLTM4NSw2ICszODcsMjUgQEAKICAgICAgIGdvdG8gcmV0cnk7CiAgICAgfQogCisgICAgaWYgKCB0YWcgPT0gVFRBR193T0YyICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAic2ZudF9vcGVuX2ZvbnQ6IGZpbGUgaXMgYSBXT0ZGMjsgc3ludGhlc2l6aW5nIFNGTlRcbiIgKSk7CisKKyAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIG9mZnNldCApICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICBlcnJvciA9IHdvZmYyX29wZW5fZm9udCggc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZV9pbnN0YW5jZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2ZmMl9udW1fZmFjZXMgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAgIC8qIFN3YXAgb3V0IHN0cmVhbSBhbmQgcmV0cnkhICovCisgICAgICBzdHJlYW0gPSBmYWNlLT5yb290LnN0cmVhbTsKKyAgICAgIGdvdG8gcmV0cnk7CisgICAgfQorCiAgICAgaWYgKCB0YWcgIT0gMHgwMDAxMDAwMFVMICYmCiAgICAgICAgICB0YWcgIT0gVFRBR190dGNmICAgICYmCiAgICAgICAgICB0YWcgIT0gVFRBR19PVFRPICAgICYmCkBAIC00NjEsOSArNDgyLDEwIEBACiAgICAgICAgICAgICAgICAgICBGVF9QYXJhbWV0ZXIqICBwYXJhbXMgKQogICB7CiAgICAgRlRfRXJyb3IgICAgICBlcnJvcjsKLSAgICBGVF9MaWJyYXJ5ICAgIGxpYnJhcnkgPSBmYWNlLT5yb290LmRyaXZlci0+cm9vdC5saWJyYXJ5OworICAgIEZUX0xpYnJhcnkgICAgbGlicmFyeSAgICAgICAgID0gZmFjZS0+cm9vdC5kcml2ZXItPnJvb3QubGlicmFyeTsKICAgICBTRk5UX1NlcnZpY2UgIHNmbnQ7CiAgICAgRlRfSW50ICAgICAgICBmYWNlX2luZGV4OworICAgIEZUX0xvbmcgICAgICAgd29mZjJfbnVtX2ZhY2VzID0gMDsKIAogCiAgICAgLyogZm9yIG5vdywgcGFyYW1ldGVycyBhcmUgdW51c2VkICovCkBAIC01MTQsMTUgKzUzNiwxOCBAQAogCiAgICAgRlRfVFJBQ0UyKCggIlNGTlQgZHJpdmVyXG4iICkpOwogCi0gICAgZXJyb3IgPSBzZm50X29wZW5fZm9udCggc3RyZWFtLCBmYWNlICk7CisgICAgZXJyb3IgPSBzZm50X29wZW5fZm9udCggc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhY2VfaW5zdGFuY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndvZmYyX251bV9mYWNlcyApOwogICAgIGlmICggZXJyb3IgKQogICAgICAgcmV0dXJuIGVycm9yOwogCiAgICAgLyogU3RyZWFtIG1heSBoYXZlIGNoYW5nZWQgaW4gc2ZudF9vcGVuX2ZvbnQuICovCiAgICAgc3RyZWFtID0gZmFjZS0+cm9vdC5zdHJlYW07CiAKLSAgICBGVF9UUkFDRTIoKCAic2ZudF9pbml0X2ZhY2U6ICUwOHAgKGluZGV4ICVkKVxuIiwKLSAgICAgICAgICAgICAgICBmYWNlLAorICAgIEZUX1RSQUNFMigoICJzZm50X2luaXRfZmFjZTogJXAgKGluZGV4ICVkKVxuIiwKKyAgICAgICAgICAgICAgICAodm9pZCAqKWZhY2UsCiAgICAgICAgICAgICAgICAgZmFjZV9pbnN0YW5jZV9pbmRleCApKTsKIAogICAgIGZhY2VfaW5kZXggPSBGVF9BQlMoIGZhY2VfaW5zdGFuY2VfaW5kZXggKSAmIDB4RkZGRjsKQEAgLTY4OSw2ICs3MTQsMTAgQEAKICAgICBmYWNlLT5yb290Lm51bV9mYWNlcyAgPSBmYWNlLT50dGNfaGVhZGVyLmNvdW50OwogICAgIGZhY2UtPnJvb3QuZmFjZV9pbmRleCA9IGZhY2VfaW5zdGFuY2VfaW5kZXg7CiAKKyAgICAvKiBgbnVtX2ZhY2VzJyBmb3IgYSBXT0ZGMiBuZWVkcyB0byBiZSBoYW5kbGVkIHNlcGFyYXRlbHkuICovCisgICAgaWYgKCB3b2ZmMl9udW1fZmFjZXMgKQorICAgICAgZmFjZS0+cm9vdC5udW1fZmFjZXMgPSB3b2ZmMl9udW1fZmFjZXM7CisKICAgICByZXR1cm4gZXJyb3I7CiAgIH0KIApAQCAtNzkxLDcgKzgyMCw3IEBACiAgICAgLyogaXQgZG9lc24ndCBjb250YWluIG91dGxpbmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgRlRfVFJBQ0UyKCggInNmbnRfbG9hZF9mYWNlOiAlMDhwXG5cbiIsIGZhY2UgKSk7CisgICAgRlRfVFJBQ0UyKCggInNmbnRfbG9hZF9mYWNlOiAlcFxuXG4iLCAodm9pZCAqKWZhY2UgKSk7CiAKICAgICAvKiBkbyB3ZSBoYXZlIG91dGxpbmVzIGluIHRoZXJlPyAqLwogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3Nmb2Jqcy5oIGIvc3JjL3NmbnQvc2ZvYmpzLmgKaW5kZXggM2ZiZjJkZC4uZThlMzA0MiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2ZvYmpzLmgKKysrIGIvc3JjL3NmbnQvc2ZvYmpzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBTRk5UIG9iamVjdCBtYW5hZ2VtZW50IChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw5ICsyMCw4IEBACiAjZGVmaW5lIFNGT0JKU19IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0ZOVF9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZm50Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvc2ZudC9zZndvZmYuYyBiL3NyYy9zZm50L3Nmd29mZi5jCmluZGV4IGNhNDgyMWEuLmYwYTMyZTEgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3Nmd29mZi5jCisrKyBiL3NyYy9zZm50L3Nmd29mZi5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgV09GRiBmb3JtYXQgbWFuYWdlbWVudCAoYmFzZSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsMTIgKzE2LDExIEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlICJzZndvZmYuaCIKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBR1NfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX0daSVBfSAorI2luY2x1ZGUgPGZyZWV0eXBlL3R0dGFncy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0Z3ppcC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNzEsMTggKzM3MCwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ZudCArIHRhYmxlLT5PcmlnT2Zmc2V0LCAmb3V0cHV0X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+Y3Vyc29yLCB0YWJsZS0+Q29tcExlbmd0aCApOwogICAgICAgICBpZiAoIGVycm9yICkKLSAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgZ290byBFeGl0MTsKICAgICAgICAgaWYgKCBvdXRwdXRfbGVuICE9IHRhYmxlLT5PcmlnTGVuZ3RoICkKICAgICAgICAgewogICAgICAgICAgIEZUX0VSUk9SKCggIndvZmZfZm9udF9vcGVuOiBjb21wcmVzc2VkIHRhYmxlIGxlbmd0aCBtaXNtYXRjaFxuIiApKTsKICAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7Ci0gICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgIGdvdG8gRXhpdDE7CiAgICAgICAgIH0KIAogI2Vsc2UgLyogIUZUX0NPTkZJR19PUFRJT05fVVNFX1pMSUIgKi8KIAogICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKLSAgICAgICAgZ290byBFeGl0OworICAgICAgICBnb3RvIEV4aXQxOwogCiAjZW5kaWYgLyogIUZUX0NPTkZJR19PUFRJT05fVVNFX1pMSUIgKi8KICAgICAgIH0KQEAgLTQyNCw2ICs0MjMsMTAgQEAKICAgICB9CiAKICAgICByZXR1cm4gZXJyb3I7CisKKyAgRXhpdDE6CisgICAgRlRfRlJBTUVfRVhJVCgpOworICAgIGdvdG8gRXhpdDsKICAgfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3Nmd29mZi5oIGIvc3JjL3NmbnQvc2Z3b2ZmLmgKaW5kZXggMTU0OTVjMy4uZDE3N2FiMSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2Z3b2ZmLmgKKysrIGIvc3JjL3NmbnQvc2Z3b2ZmLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBXT0ZGRiBmb3JtYXQgbWFuYWdlbWVudCAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsOSArMjAsOCBAQAogI2RlZmluZSBTRldPRkZfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2Z3b2ZmMi5jIGIvc3JjL3NmbnQvc2Z3b2ZmMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjODIwMmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc2ZudC9zZndvZmYyLmMKQEAgLTAsMCArMSwyMzM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNmd29mZjIuYworICoKKyAqICAgV09GRjIgZm9ybWF0IG1hbmFnZW1lbnQgKGJhc2UpLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIGJ5CisgKiBOaWtoaWwgUmFtYWtyaXNobmFuLCBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCisKKyNpbmNsdWRlICJzZndvZmYyLmgiCisjaW5jbHVkZSAid29mZjJ0YWdzLmgiCisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWdzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX0JST1RMSQorCisjaW5jbHVkZSA8YnJvdGxpL2RlY29kZS5oPgorCisjZW5kaWYKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICBzZndvZmYyCisKKworI2RlZmluZSBSRUFEXzI1NVVTSE9SVCggdmFyICkgIEZUX1NFVF9FUlJPUiggUmVhZDI1NVVTaG9ydCggc3RyZWFtLCAmdmFyICkgKQorCisjZGVmaW5lIFJFQURfQkFTRTEyOCggdmFyICkgICAgRlRfU0VUX0VSUk9SKCBSZWFkQmFzZTEyOCggc3RyZWFtLCAmdmFyICkgKQorCisgIC8qIGB2YXInIHNob3VsZCBiZSBGVF9VTG9uZyAqLworI2RlZmluZSBST1VORDQoIHZhciApICAgICAgICAgICggKCB2YXIgKyAzICkgJiB+M1VMICkKKworI2RlZmluZSBXUklURV9VU0hPUlQoIHAsIHYgKSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKihwKSsrID0gKEZUX0J5dGUpKCAodikgPj4gOCApOyBcCisgICAgICAgICAgICAqKHApKysgPSAoRlRfQnl0ZSkoICh2KSA+PiAwICk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIH0gd2hpbGUgKCAwICkKKworI2RlZmluZSBXUklURV9VTE9ORyggcCwgdiApICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKihwKSsrID0gKEZUX0J5dGUpKCAodikgPj4gMjQgKTsgXAorICAgICAgICAgICAgKihwKSsrID0gKEZUX0J5dGUpKCAodikgPj4gMTYgKTsgXAorICAgICAgICAgICAgKihwKSsrID0gKEZUX0J5dGUpKCAodikgPj4gIDggKTsgXAorICAgICAgICAgICAgKihwKSsrID0gKEZUX0J5dGUpKCAodikgPj4gIDAgKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIH0gd2hpbGUgKCAwICkKKworI2RlZmluZSBXUklURV9TSE9SVCggcCwgdiApICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKihwKSsrID0gKEZUX0J5dGUpKCAodikgPj4gOCApOyBcCisgICAgICAgICAgICAqKHApKysgPSAoRlRfQnl0ZSkoICh2KSA+PiAwICk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIH0gd2hpbGUgKCAwICkKKworI2RlZmluZSBXUklURV9TRk5UX0JVRiggYnVmLCBzICkgXAorICAgICAgICAgIHdyaXRlX2J1ZiggJnNmbnQsIHNmbnRfc2l6ZSwgJmRlc3Rfb2Zmc2V0LCBidWYsIHMsIG1lbW9yeSApCisKKyNkZWZpbmUgV1JJVEVfU0ZOVF9CVUZfQVQoIG9mZnNldCwgYnVmLCBzICkgXAorICAgICAgICAgIHdyaXRlX2J1ZiggJnNmbnQsIHNmbnRfc2l6ZSwgJm9mZnNldCwgYnVmLCBzLCBtZW1vcnkgKQorCisjZGVmaW5lIE5fQ09OVE9VUl9TVFJFQU0gICAgMAorI2RlZmluZSBOX1BPSU5UU19TVFJFQU0gICAgIDEKKyNkZWZpbmUgRkxBR19TVFJFQU0gICAgICAgICAyCisjZGVmaW5lIEdMWVBIX1NUUkVBTSAgICAgICAgMworI2RlZmluZSBDT01QT1NJVEVfU1RSRUFNICAgIDQKKyNkZWZpbmUgQkJPWF9TVFJFQU0gICAgICAgICA1CisjZGVmaW5lIElOU1RSVUNUSU9OX1NUUkVBTSAgNgorCisKKyAgc3RhdGljIHZvaWQKKyAgc3RyZWFtX2Nsb3NlKCBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworCisKKyAgICBGVF9GUkVFKCBzdHJlYW0tPmJhc2UgKTsKKworICAgIHN0cmVhbS0+c2l6ZSAgPSAwOworICAgIHN0cmVhbS0+YmFzZSAgPSBOVUxMOworICAgIHN0cmVhbS0+Y2xvc2UgPSBOVUxMOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIGludCApCisgIGNvbXBhcmVfdGFncyggY29uc3Qgdm9pZCogIGEsCisgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogIGIgKQorICB7CisgICAgV09GRjJfVGFibGUgIHRhYmxlMSA9ICooV09GRjJfVGFibGUqKWE7CisgICAgV09GRjJfVGFibGUgIHRhYmxlMiA9ICooV09GRjJfVGFibGUqKWI7CisKKyAgICBGVF9VTG9uZyAgdGFnMSA9IHRhYmxlMS0+VGFnOworICAgIEZUX1VMb25nICB0YWcyID0gdGFibGUyLT5UYWc7CisKKworICAgIGlmICggdGFnMSA+IHRhZzIgKQorICAgICAgcmV0dXJuIDE7CisgICAgZWxzZSBpZiAoIHRhZzEgPCB0YWcyICkKKyAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlCisgICAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIFJlYWQyNTVVU2hvcnQoIEZUX1N0cmVhbSAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgdmFsdWUgKQorICB7CisgICAgY29uc3QgRlRfQnl0ZSAgICBvbmVNb3JlQnl0ZUNvZGUxID0gMjU1OworICAgIGNvbnN0IEZUX0J5dGUgICAgb25lTW9yZUJ5dGVDb2RlMiA9IDI1NDsKKyAgICBjb25zdCBGVF9CeXRlICAgIHdvcmRDb2RlICAgICAgICAgPSAyNTM7CisgICAgY29uc3QgRlRfVVNob3J0ICBsb3dlc3RVQ29kZSAgICAgID0gMjUzOworCisgICAgRlRfRXJyb3IgICBlcnJvciAgICAgICAgPSBGVF9FcnJfT2s7CisgICAgRlRfQnl0ZSAgICBjb2RlOworICAgIEZUX0J5dGUgICAgcmVzdWx0X2J5dGUgID0gMDsKKyAgICBGVF9VU2hvcnQgIHJlc3VsdF9zaG9ydCA9IDA7CisKKworICAgIGlmICggRlRfUkVBRF9CWVRFKCBjb2RlICkgKQorICAgICAgcmV0dXJuIGVycm9yOworICAgIGlmICggY29kZSA9PSB3b3JkQ29kZSApCisgICAgeworICAgICAgLyogUmVhZCBuZXh0IHR3byBieXRlcyBhbmQgc3RvcmUgYEZUX1VTaG9ydCcgdmFsdWUuICovCisgICAgICBpZiAoIEZUX1JFQURfVVNIT1JUKCByZXN1bHRfc2hvcnQgKSApCisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICp2YWx1ZSA9IHJlc3VsdF9zaG9ydDsKKyAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgfQorICAgIGVsc2UgaWYgKCBjb2RlID09IG9uZU1vcmVCeXRlQ29kZTEgKQorICAgIHsKKyAgICAgIGlmICggRlRfUkVBRF9CWVRFKCByZXN1bHRfYnl0ZSApICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgKnZhbHVlID0gcmVzdWx0X2J5dGUgKyBsb3dlc3RVQ29kZTsKKyAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgfQorICAgIGVsc2UgaWYgKCBjb2RlID09IG9uZU1vcmVCeXRlQ29kZTIgKQorICAgIHsKKyAgICAgIGlmICggRlRfUkVBRF9CWVRFKCByZXN1bHRfYnl0ZSApICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgKnZhbHVlID0gcmVzdWx0X2J5dGUgKyBsb3dlc3RVQ29kZSAqIDI7CisgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgKnZhbHVlID0gY29kZTsKKyAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgfQorICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgUmVhZEJhc2UxMjgoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgRlRfVUxvbmcqICB2YWx1ZSApCisgIHsKKyAgICBGVF9VTG9uZyAgcmVzdWx0ID0gMDsKKyAgICBGVF9JbnQgICAgaTsKKyAgICBGVF9CeXRlICAgY29kZTsKKyAgICBGVF9FcnJvciAgZXJyb3IgID0gRlRfRXJyX09rOworCisKKyAgICBmb3IgKCBpID0gMDsgaSA8IDU7ICsraSApCisgICAgeworICAgICAgY29kZSA9IDA7CisgICAgICBpZiAoIEZUX1JFQURfQllURSggY29kZSApICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICAvKiBMZWFkaW5nIHplcm9zIGFyZSBpbnZhbGlkLiAqLworICAgICAgaWYgKCBpID09IDAgJiYgY29kZSA9PSAweDgwICkKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisKKyAgICAgIC8qIElmIGFueSBvZiB0b3Agc2V2ZW4gYml0cyBhcmUgc2V0IHRoZW4gd2UncmUgYWJvdXQgdG8gb3ZlcmZsb3cuICovCisgICAgICBpZiAoIHJlc3VsdCAmIDB4ZmUwMDAwMDAgKQorICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKworICAgICAgcmVzdWx0ID0gKCByZXN1bHQgPDwgNyApIHwgKCBjb2RlICYgMHg3ZiApOworCisgICAgICAvKiBTcGluIHVudGlsIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGRhdGEgYnl0ZSBpcyBmYWxzZS4gKi8KKyAgICAgIGlmICggKCBjb2RlICYgMHg4MCApID09IDAgKQorICAgICAgeworICAgICAgICAqdmFsdWUgPSByZXN1bHQ7CisgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgICB9CisgICAgfQorCisgICAgLyogTWFrZSBzdXJlIG5vdCB0byBleGNlZWQgdGhlIHNpemUgYm91bmQuICovCisgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgIH0KKworCisgIC8qIEV4dGVuZCBtZW1vcnkgb2YgYGRzdF9ieXRlcycgYnVmZmVyIGFuZCBjb3B5IGRhdGEgZnJvbSBgc3JjJy4gKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHdyaXRlX2J1ZiggRlRfQnl0ZSoqICBkc3RfYnl0ZXMsCisgICAgICAgICAgICAgRlRfVUxvbmcqICBkc3Rfc2l6ZSwKKyAgICAgICAgICAgICBGVF9VTG9uZyogIG9mZnNldCwKKyAgICAgICAgICAgICBGVF9CeXRlKiAgIHNyYywKKyAgICAgICAgICAgICBGVF9VTG9uZyAgIHNpemUsCisgICAgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworICAgIC8qIFdlIGFyZSByZWFsbG9jYXRpbmcgbWVtb3J5IGZvciBgZHN0Jywgc28gaXRzIHBvaW50ZXIgbWF5IGNoYW5nZS4gKi8KKyAgICBGVF9CeXRlKiAgZHN0ICAgPSAqZHN0X2J5dGVzOworCisKKyAgICAvKiBDaGVjayB3aGV0aGVyIHdlIGFyZSB3aXRoaW4gbGltaXRzLiAqLworICAgIGlmICggKCAqb2Zmc2V0ICsgc2l6ZSApID4gV09GRjJfREVGQVVMVF9NQVhfU0laRSAgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBBcnJheV9Ub29fTGFyZ2UgKTsKKworICAgIC8qIFJlYWxsb2NhdGUgYGRzdCcuICovCisgICAgaWYgKCAoICpvZmZzZXQgKyBzaXplICkgPiAqZHN0X3NpemUgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFNigoICJSZWFsbG9jYXRpbmcgJWx1IHRvICVsdS5cbiIsCisgICAgICAgICAgICAgICAgICAqZHN0X3NpemUsICgqb2Zmc2V0ICsgc2l6ZSkgKSk7CisgICAgICBpZiAoIEZUX1JFQUxMT0MoIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VMb25nKSggKmRzdF9zaXplICksCisgICAgICAgICAgICAgICAgICAgICAgIChGVF9VTG9uZykoICpvZmZzZXQgKyBzaXplICkgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgKmRzdF9zaXplID0gKm9mZnNldCArIHNpemU7CisgICAgfQorCisgICAgLyogQ29weSBkYXRhLiAqLworICAgIGZ0X21lbWNweSggZHN0ICsgKm9mZnNldCwgc3JjLCBzaXplICk7CisKKyAgICAqb2Zmc2V0ICs9IHNpemU7CisgICAgLyogU2V0IHBvaW50ZXIgb2YgYGRzdCcgdG8gaXRzIGNvcnJlY3QgdmFsdWUuICovCisgICAgKmRzdF9ieXRlcyA9IGRzdDsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogUGFkIGJ1ZmZlciB0byBjbG9zZXN0IG11bHRpcGxlIG9mIDQuICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBwYWQ0KCBGVF9CeXRlKiogIHNmbnRfYnl0ZXMsCisgICAgICAgIEZUX1VMb25nKiAgc2ZudF9zaXplLAorICAgICAgICBGVF9VTG9uZyogIG91dF9vZmZzZXQsCisgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ICkKKyAgeworICAgIEZUX0J5dGUqICBzZm50ICAgICAgICA9ICpzZm50X2J5dGVzOworICAgIEZUX1VMb25nICBkZXN0X29mZnNldCA9ICpvdXRfb2Zmc2V0OworCisgICAgRlRfQnl0ZSAgIHplcm9lc1tdID0geyAwLCAwLCAwIH07CisgICAgRlRfVUxvbmcgIHBhZF9ieXRlczsKKworCisgICAgaWYgKCBkZXN0X29mZnNldCArIDMgPCBkZXN0X29mZnNldCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKworICAgIHBhZF9ieXRlcyA9IFJPVU5ENCggZGVzdF9vZmZzZXQgKSAtIGRlc3Rfb2Zmc2V0OworICAgIGlmICggcGFkX2J5dGVzID4gMCApCisgICAgeworICAgICAgaWYgKCBXUklURV9TRk5UX0JVRiggJnplcm9lc1swXSwgcGFkX2J5dGVzICkgKQorICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICB9CisKKyAgICAqc2ZudF9ieXRlcyA9IHNmbnQ7CisgICAgKm91dF9vZmZzZXQgPSBkZXN0X29mZnNldDsKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKiBDYWxjdWxhdGUgdGFibGUgY2hlY2tzdW0gb2YgYGJ1ZicuICovCisgIHN0YXRpYyBGVF9VTG9uZworICBjb21wdXRlX1VMb25nX3N1bSggRlRfQnl0ZSogIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBzaXplICkKKyAgeworICAgIEZUX1VMb25nICBjaGVja3N1bSAgICAgPSAwOworICAgIEZUX1VMb25nICBhbGlnbmVkX3NpemUgPSBzaXplICYgfjNVTDsKKyAgICBGVF9VTG9uZyAgaTsKKyAgICBGVF9VTG9uZyAgdjsKKworCisgICAgZm9yICggaSA9IDA7IGkgPCBhbGlnbmVkX3NpemU7IGkgKz0gNCApCisgICAgICBjaGVja3N1bSArPSAoIChGVF9VTG9uZylidWZbaSAgICBdIDw8IDI0ICkgfAorICAgICAgICAgICAgICAgICAgKCAoRlRfVUxvbmcpYnVmW2kgKyAxXSA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICAgICggKEZUX1VMb25nKWJ1ZltpICsgMl0gPDwgIDggKSB8CisgICAgICAgICAgICAgICAgICAoIChGVF9VTG9uZylidWZbaSArIDNdIDw8ICAwICk7CisKKyAgICAvKiBJZiBzaXplIGlzIG5vdCBhbGlnbmVkIHRvIDQsIHRyZWF0IGFzIGlmIGl0IGlzIHBhZGRlZCB3aXRoIDBzLiAqLworICAgIGlmICggc2l6ZSAhPSBhbGlnbmVkX3NpemUgKQorICAgIHsKKyAgICAgIHYgPSAwOworICAgICAgZm9yICggaSA9IGFsaWduZWRfc2l6ZSA7IGkgPCBzaXplOyArK2kgKQorICAgICAgICB2IHw9IChGVF9VTG9uZylidWZbaV0gPDwgKCAyNCAtIDggKiAoIGkgJiAzICkgKTsKKyAgICAgIGNoZWNrc3VtICs9IHY7CisgICAgfQorCisgICAgcmV0dXJuIGNoZWNrc3VtOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgd29mZjJfZGVjb21wcmVzcyggRlRfQnl0ZSogICAgICAgIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgIGRzdF9zaXplLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9CeXRlKiAgc3JjLAorICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgc3JjX3NpemUgKQorICB7CisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfQlJPVExJCisKKyAgICAvKiB0aGlzIGNhc3QgaXMgb25seSBvZiBpbXBvcnRhbmNlIG9uIDMyYml0IHN5c3RlbXM7ICovCisgICAgLyogd2UgZG9uJ3QgdmFsaWRhdGUgaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEZUX09mZnNldCAgICAgICAgICAgIHVuY29tcHJlc3NlZF9zaXplID0gKEZUX09mZnNldClkc3Rfc2l6ZTsKKyAgICBCcm90bGlEZWNvZGVyUmVzdWx0ICByZXN1bHQ7CisKKworICAgIHJlc3VsdCA9IEJyb3RsaURlY29kZXJEZWNvbXByZXNzKCBzcmNfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdW5jb21wcmVzc2VkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdCApOworCisgICAgaWYgKCByZXN1bHQgIT0gQlJPVExJX0RFQ09ERVJfUkVTVUxUX1NVQ0NFU1MgfHwKKyAgICAgICAgIHVuY29tcHJlc3NlZF9zaXplICE9IGRzdF9zaXplICAgICAgICAgICApCisgICAgeworICAgICAgRlRfRVJST1IoKCAid29mZjJfZGVjb21wcmVzczogU3RyZWFtIGxlbmd0aCBtaXNtYXRjaC5cbiIgKSk7CisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICB9CisKKyAgICBGVF9UUkFDRTIoKCAid29mZjJfZGVjb21wcmVzczogQnJvdGxpIHN0cmVhbSBkZWNvbXByZXNzZWQuXG4iICkpOworICAgIHJldHVybiBGVF9FcnJfT2s7CisKKyNlbHNlIC8qICFGVF9DT05GSUdfT1BUSU9OX1VTRV9CUk9UTEkgKi8KKworICAgIEZUX0VSUk9SKCggIndvZmYyX2RlY29tcHJlc3M6IEJyb3RsaSBzdXBwb3J0IG5vdCBhdmFpbGFibGUuXG4iICkpOworICAgIHJldHVybiBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisKKyNlbmRpZiAvKiAhRlRfQ09ORklHX09QVElPTl9VU0VfQlJPVExJICovCisgIH0KKworCisgIHN0YXRpYyBXT0ZGMl9UYWJsZQorICBmaW5kX3RhYmxlKCBXT0ZGMl9UYWJsZSogIHRhYmxlcywKKyAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICBudW1fdGFibGVzLAorICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgIHRhZyApCisgIHsKKyAgICBGVF9JbnQgIGk7CisKKworICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX3RhYmxlczsgaSsrICkKKyAgICB7CisgICAgICBpZiAoIHRhYmxlc1tpXS0+VGFnID09IHRhZyApCisgICAgICAgIHJldHVybiB0YWJsZXNbaV07CisgICAgfQorICAgIHJldHVybiBOVUxMOworICB9CisKKworICAvKiBSZWFkIGBudW1iZXJPZkhNZXRyaWNzJyBmaWVsZCBmcm9tIGBoaGVhJyB0YWJsZS4gKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHJlYWRfbnVtX2htZXRyaWNzKCBGVF9TdHJlYW0gICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICBudW1faG1ldHJpY3MgKQorICB7CisgICAgRlRfRXJyb3IgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBGVF9VU2hvcnQgIG51bV9tZXRyaWNzOworCisKKyAgICBpZiAoIEZUX1NUUkVBTV9TS0lQKCAzNCApICApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKworICAgIGlmICggRlRfUkVBRF9VU0hPUlQoIG51bV9tZXRyaWNzICkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisKKyAgICAqbnVtX2htZXRyaWNzID0gbnVtX21ldHJpY3M7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIEFuIGF1eGlsaWFyeSBmdW5jdGlvbiBmb3Igb3ZlcmZsb3ctc2FmZSBhZGRpdGlvbi4gKi8KKyAgc3RhdGljIEZUX0ludAorICB3aXRoX3NpZ24oIEZUX0J5dGUgIGZsYWcsCisgICAgICAgICAgICAgRlRfSW50ICAgYmFzZV92YWwgKQorICB7CisgICAgLyogUHJlY29uZGl0aW9uOiAwIDw9IGJhc2VfdmFsIDwgNjU1MzYgKHRvIGF2b2lkIG92ZXJmbG93KS4gKi8KKyAgICByZXR1cm4gKCBmbGFnICYgMSApID8gYmFzZV92YWwgOiAtYmFzZV92YWw7CisgIH0KKworCisgIC8qIEFuIGF1eGlsaWFyeSBmdW5jdGlvbiBmb3Igb3ZlcmZsb3ctc2FmZSBhZGRpdGlvbi4gKi8KKyAgc3RhdGljIEZUX0ludAorICBzYWZlX2ludF9hZGRpdGlvbiggRlRfSW50ICAgYSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgIGIsCisgICAgICAgICAgICAgICAgICAgICBGVF9JbnQqICByZXN1bHQgKQorICB7CisgICAgaWYgKCAoICggYSA+IDAgKSAmJiAoIGIgPiBGVF9JTlRfTUFYIC0gYSApICkgfHwKKyAgICAgICAgICggKCBhIDwgMCApICYmICggYiA8IEZUX0lOVF9NSU4gLSBhICkgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKworICAgICpyZXN1bHQgPSBhICsgYjsKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKgorICAgKiBEZWNvZGUgdmFyaWFibGUtbGVuZ3RoIChmbGFnLCB4Q29vcmRpbmF0ZSwgeUNvb3JkaW5hdGUpIHRyaXBsZXQgZm9yIGEKKyAgICogc2ltcGxlIGdseXBoLiAgU2VlCisgICAqCisgICAqICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dPRkYyLyN0cmlwbGV0X2RlY29kaW5nCisgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgdHJpcGxldF9kZWNvZGUoIGNvbnN0IEZUX0J5dGUqICBmbGFnc19pbiwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0J5dGUqICBpbiwKKyAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICBpbl9zaXplLAorICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgIG5fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgV09GRjJfUG9pbnQgICAgIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgICBpbl9ieXRlc191c2VkICkKKyAgeworICAgIEZUX0ludCAgeCA9IDA7CisgICAgRlRfSW50ICB5ID0gMDsKKyAgICBGVF9JbnQgIGR4OworICAgIEZUX0ludCAgZHk7CisgICAgRlRfSW50ICBiMCwgYjEsIGIyOworCisgICAgRlRfVUxvbmcgIHRyaXBsZXRfaW5kZXggPSAwOworICAgIEZUX1VMb25nICBkYXRhX2J5dGVzOworCisgICAgRlRfVUludCAgaTsKKworCisgICAgaWYgKCBuX3BvaW50cyA+IGluX3NpemUgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG5fcG9pbnRzOyArK2kgKQorICAgIHsKKyAgICAgIEZUX0J5dGUgIGZsYWcgICAgID0gZmxhZ3NfaW5baV07CisgICAgICBGVF9Cb29sICBvbl9jdXJ2ZSA9ICEoIGZsYWcgPj4gNyApOworCisKKyAgICAgIGZsYWcgJj0gMHg3ZjsKKyAgICAgIGlmICggZmxhZyA8IDg0ICkKKyAgICAgICAgZGF0YV9ieXRlcyA9IDE7CisgICAgICBlbHNlIGlmICggZmxhZyA8IDEyMCApCisgICAgICAgIGRhdGFfYnl0ZXMgPSAyOworICAgICAgZWxzZSBpZiAoIGZsYWcgPCAxMjQgKQorICAgICAgICBkYXRhX2J5dGVzID0gMzsKKyAgICAgIGVsc2UKKyAgICAgICAgZGF0YV9ieXRlcyA9IDQ7CisKKyAgICAgIC8qIE92ZXJmbG93IGNoZWNrcyAqLworICAgICAgaWYgKCB0cmlwbGV0X2luZGV4ICsgZGF0YV9ieXRlcyA+IGluX3NpemUgICAgICAgfHwKKyAgICAgICAgICAgdHJpcGxldF9pbmRleCArIGRhdGFfYnl0ZXMgPCB0cmlwbGV0X2luZGV4ICkKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisKKyAgICAgIGlmICggZmxhZyA8IDEwICkKKyAgICAgIHsKKyAgICAgICAgZHggPSAwOworICAgICAgICBkeSA9IHdpdGhfc2lnbiggZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICggKCBmbGFnICYgMTQgKSA8PCA3ICkgKyBpblt0cmlwbGV0X2luZGV4XSApOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIGZsYWcgPCAyMCApCisgICAgICB7CisgICAgICAgIGR4ID0gd2l0aF9zaWduKCBmbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgKCAoICggZmxhZyAtIDEwICkgJiAxNCApIDw8IDcgKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluW3RyaXBsZXRfaW5kZXhdICk7CisgICAgICAgIGR5ID0gMDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBmbGFnIDwgODQgKQorICAgICAgeworICAgICAgICBiMCA9IGZsYWcgLSAyMDsKKyAgICAgICAgYjEgPSBpblt0cmlwbGV0X2luZGV4XTsKKyAgICAgICAgZHggPSB3aXRoX3NpZ24oIGZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAxICsgKCBiMCAmIDB4MzAgKSArICggYjEgPj4gNCApICk7CisgICAgICAgIGR5ID0gd2l0aF9zaWduKCBmbGFnID4+IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAxICsgKCAoIGIwICYgMHgwYyApIDw8IDIgKSArICggYjEgJiAweDBmICkgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBmbGFnIDwgMTIwICkKKyAgICAgIHsKKyAgICAgICAgYjAgPSBmbGFnIC0gODQ7CisgICAgICAgIGR4ID0gd2l0aF9zaWduKCBmbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgMSArICggKCBiMCAvIDEyICkgPDwgOCApICsgaW5bdHJpcGxldF9pbmRleF0gKTsKKyAgICAgICAgZHkgPSB3aXRoX3NpZ24oIGZsYWcgPj4gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDEgKyAoICggKCBiMCAlIDEyICkgPj4gMiApIDw8IDggKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluW3RyaXBsZXRfaW5kZXggKyAxXSApOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIGZsYWcgPCAxMjQgKQorICAgICAgeworICAgICAgICBiMiA9IGluW3RyaXBsZXRfaW5kZXggKyAxXTsKKyAgICAgICAgZHggPSB3aXRoX3NpZ24oIGZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAoIGluW3RyaXBsZXRfaW5kZXhdIDw8IDQgKSArICggYjIgPj4gNCApICk7CisgICAgICAgIGR5ID0gd2l0aF9zaWduKCBmbGFnID4+IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAoICggYjIgJiAweDBmICkgPDwgOCApICsgaW5bdHJpcGxldF9pbmRleCArIDJdICk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGR4ID0gd2l0aF9zaWduKCBmbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgKCBpblt0cmlwbGV0X2luZGV4XSA8PCA4ICkgKworICAgICAgICAgICAgICAgICAgICAgICAgICBpblt0cmlwbGV0X2luZGV4ICsgMV0gKTsKKyAgICAgICAgZHkgPSB3aXRoX3NpZ24oIGZsYWcgPj4gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICggaW5bdHJpcGxldF9pbmRleCArIDJdIDw8IDggKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluW3RyaXBsZXRfaW5kZXggKyAzXSApOworICAgICAgfQorCisgICAgICB0cmlwbGV0X2luZGV4ICs9IGRhdGFfYnl0ZXM7CisKKyAgICAgIGlmICggc2FmZV9pbnRfYWRkaXRpb24oIHgsIGR4LCAmeCApICkKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisKKyAgICAgIGlmICggc2FmZV9pbnRfYWRkaXRpb24oIHksIGR5LCAmeSApICkKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisKKyAgICAgIHJlc3VsdFtpXS54ICAgICAgICA9IHg7CisgICAgICByZXN1bHRbaV0ueSAgICAgICAgPSB5OworICAgICAgcmVzdWx0W2ldLm9uX2N1cnZlID0gb25fY3VydmU7CisgICAgfQorCisgICAgKmluX2J5dGVzX3VzZWQgPSB0cmlwbGV0X2luZGV4OworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qIFN0b3JlIGRlY29kZWQgcG9pbnRzIGluIGdseXBoIGJ1ZmZlci4gKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHN0b3JlX3BvaW50cyggRlRfVUxvbmcgICAgICAgICAgIG5fcG9pbnRzLAorICAgICAgICAgICAgICAgIGNvbnN0IFdPRkYyX1BvaW50ICBwb2ludHMsCisgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgICAgIG5fY29udG91cnMsCisgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgICAgIGluc3RydWN0aW9uX2xlbiwKKyAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgICAgZHN0LAorICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAgICBkc3Rfc2l6ZSwKKyAgICAgICAgICAgICAgICBGVF9VTG9uZyogICAgICAgICAgZ2x5cGhfc2l6ZSApCisgIHsKKyAgICBGVF9VSW50ICAgZmxhZ19vZmZzZXQgID0gMTAgKyAoIDIgKiBuX2NvbnRvdXJzICkgKyAyICsgaW5zdHJ1Y3Rpb25fbGVuOworICAgIEZUX0J5dGUgICBsYXN0X2ZsYWcgICAgPSAweEZGVTsKKyAgICBGVF9CeXRlICAgcmVwZWF0X2NvdW50ID0gMDsKKyAgICBGVF9JbnQgICAgbGFzdF94ICAgICAgID0gMDsKKyAgICBGVF9JbnQgICAgbGFzdF95ICAgICAgID0gMDsKKyAgICBGVF9VSW50ICAgeF9ieXRlcyAgICAgID0gMDsKKyAgICBGVF9VSW50ICAgeV9ieXRlcyAgICAgID0gMDsKKyAgICBGVF9VSW50ICAgeHlfYnl0ZXM7CisgICAgRlRfVUludCAgIGk7CisgICAgRlRfVUludCAgIHhfb2Zmc2V0OworICAgIEZUX1VJbnQgICB5X29mZnNldDsKKyAgICBGVF9CeXRlKiAgcG9pbnRlcjsKKworCisgICAgZm9yICggaSA9IDA7IGkgPCBuX3BvaW50czsgKytpICkKKyAgICB7CisgICAgICBjb25zdCBXT0ZGMl9Qb2ludFJlYyAgcG9pbnQgPSBwb2ludHNbaV07CisKKyAgICAgIEZUX0J5dGUgIGZsYWcgPSBwb2ludC5vbl9jdXJ2ZSA/IEdMWUZfT05fQ1VSVkUgOiAwOworICAgICAgRlRfSW50ICAgZHggICA9IHBvaW50LnggLSBsYXN0X3g7CisgICAgICBGVF9JbnQgICBkeSAgID0gcG9pbnQueSAtIGxhc3RfeTsKKworCisgICAgICBpZiAoIGR4ID09IDAgKQorICAgICAgICBmbGFnIHw9IEdMWUZfVEhJU19YX0lTX1NBTUU7CisgICAgICBlbHNlIGlmICggZHggPiAtMjU2ICYmIGR4IDwgMjU2ICkKKyAgICAgIHsKKyAgICAgICAgZmxhZyB8PSBHTFlGX1hfU0hPUlQgfCAoIGR4ID4gMCA/IEdMWUZfVEhJU19YX0lTX1NBTUUgOiAwICk7CisgICAgICAgIHhfYnl0ZXMgKz0gMTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeF9ieXRlcyArPSAyOworCisgICAgICBpZiAoIGR5ID09IDAgKQorICAgICAgICBmbGFnIHw9IEdMWUZfVEhJU19ZX0lTX1NBTUU7CisgICAgICBlbHNlIGlmICggZHkgPiAtMjU2ICYmIGR5IDwgMjU2ICkKKyAgICAgIHsKKyAgICAgICAgZmxhZyB8PSBHTFlGX1lfU0hPUlQgfCAoIGR5ID4gMCA/IEdMWUZfVEhJU19ZX0lTX1NBTUUgOiAwICk7CisgICAgICAgIHlfYnl0ZXMgKz0gMTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeV9ieXRlcyArPSAyOworCisgICAgICBpZiAoIGZsYWcgPT0gbGFzdF9mbGFnICYmIHJlcGVhdF9jb3VudCAhPSAyNTUgKQorICAgICAgeworICAgICAgICBkc3RbZmxhZ19vZmZzZXQgLSAxXSB8PSBHTFlGX1JFUEVBVDsKKyAgICAgICAgcmVwZWF0X2NvdW50Kys7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGlmICggcmVwZWF0X2NvdW50ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBmbGFnX29mZnNldCA+PSBkc3Rfc2l6ZSApCisgICAgICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKworICAgICAgICAgIGRzdFtmbGFnX29mZnNldCsrXSA9IHJlcGVhdF9jb3VudDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGZsYWdfb2Zmc2V0ID49IGRzdF9zaXplICkKKyAgICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKworICAgICAgICBkc3RbZmxhZ19vZmZzZXQrK10gPSBmbGFnOworICAgICAgICByZXBlYXRfY291bnQgICAgICAgPSAwOworICAgICAgfQorCisgICAgICBsYXN0X3ggICAgPSBwb2ludC54OworICAgICAgbGFzdF95ICAgID0gcG9pbnQueTsKKyAgICAgIGxhc3RfZmxhZyA9IGZsYWc7CisgICAgfQorCisgICAgaWYgKCByZXBlYXRfY291bnQgIT0gMCApCisgICAgeworICAgICAgaWYgKCBmbGFnX29mZnNldCA+PSBkc3Rfc2l6ZSApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworCisgICAgICBkc3RbZmxhZ19vZmZzZXQrK10gPSByZXBlYXRfY291bnQ7CisgICAgfQorCisgICAgeHlfYnl0ZXMgPSB4X2J5dGVzICsgeV9ieXRlczsKKyAgICBpZiAoIHh5X2J5dGVzIDwgeF9ieXRlcyAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgZmxhZ19vZmZzZXQgKyB4eV9ieXRlcyA8IGZsYWdfb2Zmc2V0IHx8CisgICAgICAgICBmbGFnX29mZnNldCArIHh5X2J5dGVzID4gZHN0X3NpemUgICAgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisKKyAgICB4X29mZnNldCA9IGZsYWdfb2Zmc2V0OworICAgIHlfb2Zmc2V0ID0gZmxhZ19vZmZzZXQgKyB4X2J5dGVzOworICAgIGxhc3RfeCA9IDA7CisgICAgbGFzdF95ID0gMDsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgbl9wb2ludHM7ICsraSApCisgICAgeworICAgICAgRlRfSW50ICBkeCA9IHBvaW50c1tpXS54IC0gbGFzdF94OworICAgICAgRlRfSW50ICBkeSA9IHBvaW50c1tpXS55IC0gbGFzdF95OworCisKKyAgICAgIGlmICggZHggPT0gMCApCisgICAgICAgIDsKKyAgICAgIGVsc2UgaWYgKCBkeCA+IC0yNTYgJiYgZHggPCAyNTYgKQorICAgICAgICBkc3RbeF9vZmZzZXQrK10gPSAoRlRfQnl0ZSlGVF9BQlMoIGR4ICk7CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHBvaW50ZXIgPSBkc3QgKyB4X29mZnNldDsKKyAgICAgICAgV1JJVEVfU0hPUlQoIHBvaW50ZXIsIGR4ICk7CisgICAgICAgIHhfb2Zmc2V0ICs9IDI7CisgICAgICB9CisKKyAgICAgIGxhc3RfeCArPSBkeDsKKworICAgICAgaWYgKCBkeSA9PSAwICkKKyAgICAgICAgOworICAgICAgZWxzZSBpZiAoIGR5ID4gLTI1NiAmJiBkeSA8IDI1NiApCisgICAgICAgIGRzdFt5X29mZnNldCsrXSA9IChGVF9CeXRlKUZUX0FCUyggZHkgKTsKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgcG9pbnRlciA9IGRzdCArIHlfb2Zmc2V0OworICAgICAgICBXUklURV9TSE9SVCggcG9pbnRlciwgZHkgKTsKKyAgICAgICAgeV9vZmZzZXQgKz0gMjsKKyAgICAgIH0KKworICAgICAgbGFzdF95ICs9IGR5OworICAgIH0KKworICAgICpnbHlwaF9zaXplID0geV9vZmZzZXQ7CisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgY29tcHV0ZV9iYm94KCBGVF9VTG9uZyAgICAgICAgICAgbl9wb2ludHMsCisgICAgICAgICAgICAgICAgY29uc3QgV09GRjJfUG9pbnQgIHBvaW50cywKKyAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgICAgZHN0LAorICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgICAgICBzcmNfeF9taW4gKQorICB7CisgICAgRlRfSW50ICB4X21pbiA9IDA7CisgICAgRlRfSW50ICB5X21pbiA9IDA7CisgICAgRlRfSW50ICB4X21heCA9IDA7CisgICAgRlRfSW50ICB5X21heCA9IDA7CisKKyAgICBGVF9VSW50ICBpOworCisgICAgRlRfVUxvbmcgIG9mZnNldDsKKyAgICBGVF9CeXRlKiAgcG9pbnRlcjsKKworCisgICAgaWYgKCBuX3BvaW50cyA+IDAgKQorICAgIHsKKyAgICAgIHhfbWluID0gcG9pbnRzWzBdLng7CisgICAgICB5X21pbiA9IHBvaW50c1swXS55OworICAgICAgeF9tYXggPSBwb2ludHNbMF0ueDsKKyAgICAgIHlfbWF4ID0gcG9pbnRzWzBdLnk7CisgICAgfQorCisgICAgZm9yICggaSA9IDE7IGkgPCBuX3BvaW50czsgKytpICkKKyAgICB7CisgICAgICBGVF9JbnQgIHggPSBwb2ludHNbaV0ueDsKKyAgICAgIEZUX0ludCAgeSA9IHBvaW50c1tpXS55OworCisKKyAgICAgIHhfbWluID0gRlRfTUlOKCB4LCB4X21pbiApOworICAgICAgeV9taW4gPSBGVF9NSU4oIHksIHlfbWluICk7CisgICAgICB4X21heCA9IEZUX01BWCggeCwgeF9tYXggKTsKKyAgICAgIHlfbWF4ID0gRlRfTUFYKCB5LCB5X21heCApOworICAgIH0KKworICAgIC8qIFdyaXRlIHZhbHVlcyB0byBgZ2x5ZicgcmVjb3JkLiAqLworICAgIG9mZnNldCAgPSAyOworICAgIHBvaW50ZXIgPSBkc3QgKyBvZmZzZXQ7CisKKyAgICBXUklURV9TSE9SVCggcG9pbnRlciwgeF9taW4gKTsKKyAgICBXUklURV9TSE9SVCggcG9pbnRlciwgeV9taW4gKTsKKyAgICBXUklURV9TSE9SVCggcG9pbnRlciwgeF9tYXggKTsKKyAgICBXUklURV9TSE9SVCggcG9pbnRlciwgeV9tYXggKTsKKworICAgICpzcmNfeF9taW4gPSAoRlRfVVNob3J0KXhfbWluOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgY29tcG9zaXRlR2x5cGhfc2l6ZSggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wqICAgaGF2ZV9pbnN0cnVjdGlvbnMgKQorICB7CisgICAgRlRfRXJyb3IgICBlcnJvciAgICAgICAgPSBGVF9FcnJfT2s7CisgICAgRlRfVUxvbmcgICBzdGFydF9vZmZzZXQgPSBvZmZzZXQ7CisgICAgRlRfQm9vbCAgICB3ZV9oYXZlX2luc3QgPSBGQUxTRTsKKyAgICBGVF9VU2hvcnQgIGZsYWdzICAgICAgICA9IEZMQUdfTU9SRV9DT01QT05FTlRTOworCisKKyAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBzdGFydF9vZmZzZXQgKSApCisgICAgICBnb3RvIEV4aXQ7CisgICAgd2hpbGUgKCBmbGFncyAmIEZMQUdfTU9SRV9DT01QT05FTlRTICkKKyAgICB7CisgICAgICBGVF9VTG9uZyAgYXJnX3NpemU7CisKKworICAgICAgaWYgKCBGVF9SRUFEX1VTSE9SVCggZmxhZ3MgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIHdlX2hhdmVfaW5zdCB8PSAoIGZsYWdzICYgRkxBR19XRV9IQVZFX0lOU1RSVUNUSU9OUyApICE9IDA7CisgICAgICAvKiBnbHlwaCBpbmRleCAqLworICAgICAgYXJnX3NpemUgPSAyOworICAgICAgaWYgKCBmbGFncyAmIEZMQUdfQVJHXzFfQU5EXzJfQVJFX1dPUkRTICkKKyAgICAgICAgYXJnX3NpemUgKz0gNDsKKyAgICAgIGVsc2UKKyAgICAgICAgYXJnX3NpemUgKz0gMjsKKworICAgICAgaWYgKCBmbGFncyAmIEZMQUdfV0VfSEFWRV9BX1NDQUxFICkKKyAgICAgICAgYXJnX3NpemUgKz0gMjsKKyAgICAgIGVsc2UgaWYgKCBmbGFncyAmIEZMQUdfV0VfSEFWRV9BTl9YX0FORF9ZX1NDQUxFICkKKyAgICAgICAgYXJnX3NpemUgKz0gNDsKKyAgICAgIGVsc2UgaWYgKCBmbGFncyAmIEZMQUdfV0VfSEFWRV9BX1RXT19CWV9UV08gKQorICAgICAgICBhcmdfc2l6ZSArPSA4OworCisgICAgICBpZiAoIEZUX1NUUkVBTV9TS0lQKCBhcmdfc2l6ZSApICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgICpzaXplICAgICAgICAgICAgICA9IEZUX1NUUkVBTV9QT1MoKSAtIHN0YXJ0X29mZnNldDsKKyAgICAqaGF2ZV9pbnN0cnVjdGlvbnMgPSB3ZV9oYXZlX2luc3Q7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIFN0b3JlIGxvY2EgdmFsdWVzIChwcm92aWRlZCBieSBgcmVjb25zdHJ1Y3RfZ2x5ZicpIHRvIG91dHB1dCBzdHJlYW0uICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBzdG9yZV9sb2NhKCBGVF9VTG9uZyogIGxvY2FfdmFsdWVzLAorICAgICAgICAgICAgICBGVF9VTG9uZyAgIGxvY2FfdmFsdWVzX3NpemUsCisgICAgICAgICAgICAgIEZUX1VTaG9ydCAgaW5kZXhfZm9ybWF0LAorICAgICAgICAgICAgICBGVF9VTG9uZyogIGNoZWNrc3VtLAorICAgICAgICAgICAgICBGVF9CeXRlKiogIHNmbnRfYnl0ZXMsCisgICAgICAgICAgICAgIEZUX1VMb25nKiAgc2ZudF9zaXplLAorICAgICAgICAgICAgICBGVF9VTG9uZyogIG91dF9vZmZzZXQsCisgICAgICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciAgICAgICA9IEZUX0Vycl9PazsKKyAgICBGVF9CeXRlKiAgc2ZudCAgICAgICAgPSAqc2ZudF9ieXRlczsKKyAgICBGVF9VTG9uZyAgZGVzdF9vZmZzZXQgPSAqb3V0X29mZnNldDsKKworICAgIEZUX0J5dGUqICBsb2NhX2J1ZiA9IE5VTEw7CisgICAgRlRfQnl0ZSogIGRzdCAgICAgID0gTlVMTDsKKworICAgIEZUX1VJbnQgICBpID0gMDsKKyAgICBGVF9VTG9uZyAgbG9jYV9idWZfc2l6ZTsKKworICAgIGNvbnN0IEZUX1VMb25nICBvZmZzZXRfc2l6ZSA9IGluZGV4X2Zvcm1hdCA/IDQgOiAyOworCisKKyAgICBpZiAoICggbG9jYV92YWx1ZXNfc2l6ZSA8PCAyICkgPj4gMiAhPSBsb2NhX3ZhbHVlc19zaXplICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIGxvY2FfYnVmX3NpemUgPSBsb2NhX3ZhbHVlc19zaXplICogb2Zmc2V0X3NpemU7CisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGxvY2FfYnVmLCBsb2NhX2J1Zl9zaXplICkgKQorICAgICAgZ290byBGYWlsOworCisgICAgZHN0ID0gbG9jYV9idWY7CisgICAgZm9yICggaSA9IDA7IGkgPCBsb2NhX3ZhbHVlc19zaXplOyBpKysgKQorICAgIHsKKyAgICAgIEZUX1VMb25nICB2YWx1ZSA9IGxvY2FfdmFsdWVzW2ldOworCisKKyAgICAgIGlmICggaW5kZXhfZm9ybWF0ICkKKyAgICAgICAgV1JJVEVfVUxPTkcoIGRzdCwgdmFsdWUgKTsKKyAgICAgIGVsc2UKKyAgICAgICAgV1JJVEVfVVNIT1JUKCBkc3QsICggdmFsdWUgPj4gMSApICk7CisgICAgfQorCisgICAgKmNoZWNrc3VtID0gY29tcHV0ZV9VTG9uZ19zdW0oIGxvY2FfYnVmLCBsb2NhX2J1Zl9zaXplICk7CisgICAgLyogV3JpdGUgYGxvY2EnIHRhYmxlIHRvIHNmbnQgYnVmZmVyLiAqLworICAgIGlmICggV1JJVEVfU0ZOVF9CVUYoIGxvY2FfYnVmLCBsb2NhX2J1Zl9zaXplICkgKQorICAgICAgZ290byBGYWlsOworCisgICAgLyogU2V0IHBvaW50ZXIgYHNmbnRfYnl0ZXMnIHRvIGl0cyBjb3JyZWN0IHZhbHVlLiAqLworICAgICpzZm50X2J5dGVzID0gc2ZudDsKKyAgICAqb3V0X29mZnNldCA9IGRlc3Rfb2Zmc2V0OworCisgICAgRlRfRlJFRSggbG9jYV9idWYgKTsKKyAgICByZXR1cm4gZXJyb3I7CisKKyAgRmFpbDoKKyAgICBpZiAoICFlcnJvciApCisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisKKyAgICBGVF9GUkVFKCBsb2NhX2J1ZiApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcmVjb25zdHJ1Y3RfZ2x5ZiggRlRfU3RyZWFtICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgIGdseWZfY2hlY2tzdW0sCisgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICBsb2NhX2NoZWNrc3VtLAorICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiogICAgc2ZudF9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgIHNmbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgIG91dF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIFdPRkYyX0luZm8gICBpbmZvLAorICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgbWVtb3J5ICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBGVF9CeXRlKiAgc2ZudCAgPSAqc2ZudF9ieXRlczsKKworICAgIC8qIGN1cnJlbnQgcG9zaXRpb24gaW4gc3RyZWFtICovCisgICAgY29uc3QgRlRfVUxvbmcgIHBvcyA9IEZUX1NUUkVBTV9QT1MoKTsKKworICAgIEZUX1VJbnQgIG51bV9zdWJzdHJlYW1zID0gNzsKKworICAgIEZUX1VTaG9ydCAgbnVtX2dseXBoczsKKyAgICBGVF9VU2hvcnQgIGluZGV4X2Zvcm1hdDsKKyAgICBGVF9VTG9uZyAgIGV4cGVjdGVkX2xvY2FfbGVuZ3RoOworICAgIEZUX1VJbnQgICAgb2Zmc2V0OworICAgIEZUX1VJbnQgICAgaTsKKyAgICBGVF9VTG9uZyAgIHBvaW50c19zaXplOworICAgIEZUX1VMb25nICAgYml0bWFwX2xlbmd0aDsKKyAgICBGVF9VTG9uZyAgIGdseXBoX2J1Zl9zaXplOworICAgIEZUX1VMb25nICAgYmJveF9iaXRtYXBfb2Zmc2V0OworCisgICAgY29uc3QgRlRfVUxvbmcgIGdseWZfc3RhcnQgID0gKm91dF9vZmZzZXQ7CisgICAgRlRfVUxvbmcgICAgICAgIGRlc3Rfb2Zmc2V0ID0gKm91dF9vZmZzZXQ7CisKKyAgICBXT0ZGMl9TdWJzdHJlYW0gIHN1YnN0cmVhbXMgPSBOVUxMOworCisgICAgRlRfVUxvbmcqICAgIGxvY2FfdmFsdWVzICA9IE5VTEw7CisgICAgRlRfVVNob3J0KiAgIG5fcG9pbnRzX2FyciA9IE5VTEw7CisgICAgRlRfQnl0ZSogICAgIGdseXBoX2J1ZiAgICA9IE5VTEw7CisgICAgV09GRjJfUG9pbnQgIHBvaW50cyAgICAgICA9IE5VTEw7CisKKworICAgIGlmICggRlRfTkVXX0FSUkFZKCBzdWJzdHJlYW1zLCBudW1fc3Vic3RyZWFtcyApICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIGlmICggRlRfU1RSRUFNX1NLSVAoIDQgKSApCisgICAgICBnb3RvIEZhaWw7CisgICAgaWYgKCBGVF9SRUFEX1VTSE9SVCggbnVtX2dseXBocyApICkKKyAgICAgIGdvdG8gRmFpbDsKKyAgICBpZiAoIEZUX1JFQURfVVNIT1JUKCBpbmRleF9mb3JtYXQgKSApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICBGVF9UUkFDRTQoKCAibnVtX2dseXBocyA9ICV1OyBpbmRleF9mb3JtYXQgPSAldVxuIiwKKyAgICAgICAgICAgICAgICBudW1fZ2x5cGhzLCBpbmRleF9mb3JtYXQgKSk7CisKKyAgICBpbmZvLT5udW1fZ2x5cGhzID0gbnVtX2dseXBoczsKKworICAgIC8qIENhbGN1bGF0ZSBleHBlY3RlZCBsZW5ndGggb2YgbG9jYSBhbmQgY29tcGFyZS4gICAgICAgICAgKi8KKyAgICAvKiBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dPRkYyLyNjb25mb3JtLW11c3RSZWplY3RMb2NhICovCisgICAgLyogaW5kZXhfZm9ybWF0ID0gMCA9PiBTaG9ydCB2ZXJzaW9uIGBsb2NhJy4gICAgICAgICAgICAgICAqLworICAgIC8qIGluZGV4X2Zvcm1hdCA9IDEgPT4gTG9uZyB2ZXJzaW9uIGBsb2NhJy4gICAgICAgICAgICAgICAgKi8KKyAgICBleHBlY3RlZF9sb2NhX2xlbmd0aCA9ICggaW5kZXhfZm9ybWF0ID8gNCA6IDIgKSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKEZUX1VMb25nKW51bV9nbHlwaHMgKyAxICk7CisgICAgaWYgKCBpbmZvLT5sb2NhX3RhYmxlLT5kc3RfbGVuZ3RoICE9IGV4cGVjdGVkX2xvY2FfbGVuZ3RoICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIG9mZnNldCA9ICggMiArIG51bV9zdWJzdHJlYW1zICkgKiA0OworICAgIGlmICggb2Zmc2V0ID4gaW5mby0+Z2x5Zl90YWJsZS0+VHJhbnNmb3JtTGVuZ3RoICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX3N1YnN0cmVhbXM7ICsraSApCisgICAgeworICAgICAgRlRfVUxvbmcgIHN1YnN0cmVhbV9zaXplOworCisKKyAgICAgIGlmICggRlRfUkVBRF9VTE9ORyggc3Vic3RyZWFtX3NpemUgKSApCisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIGlmICggc3Vic3RyZWFtX3NpemUgPiBpbmZvLT5nbHlmX3RhYmxlLT5UcmFuc2Zvcm1MZW5ndGggLSBvZmZzZXQgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIHN1YnN0cmVhbXNbaV0uc3RhcnQgID0gcG9zICsgb2Zmc2V0OworICAgICAgc3Vic3RyZWFtc1tpXS5vZmZzZXQgPSBwb3MgKyBvZmZzZXQ7CisgICAgICBzdWJzdHJlYW1zW2ldLnNpemUgICA9IHN1YnN0cmVhbV9zaXplOworCisgICAgICBGVF9UUkFDRTUoKCAiICBTdWJzdHJlYW0gJWQ6IG9mZnNldCA9ICVsdTsgc2l6ZSA9ICVsdTtcbiIsCisgICAgICAgICAgICAgICAgICBpLCBzdWJzdHJlYW1zW2ldLm9mZnNldCwgc3Vic3RyZWFtc1tpXS5zaXplICkpOworICAgICAgb2Zmc2V0ICs9IHN1YnN0cmVhbV9zaXplOworICAgIH0KKworICAgIGlmICggRlRfTkVXX0FSUkFZKCBsb2NhX3ZhbHVlcywgbnVtX2dseXBocyArIDEgKSApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICBwb2ludHNfc2l6ZSAgICAgICAgPSAwOworICAgIGJib3hfYml0bWFwX29mZnNldCA9IHN1YnN0cmVhbXNbQkJPWF9TVFJFQU1dLm9mZnNldDsKKworICAgIC8qIFNpemUgb2YgYmJveEJpdG1hcCA9IDQgKiBmbG9vcigobnVtR2x5cGhzICsgMzEpIC8gMzIpICovCisgICAgYml0bWFwX2xlbmd0aCAgICAgICAgICAgICAgICAgICA9ICggKCBudW1fZ2x5cGhzICsgMzFVICkgPj4gNSApIDw8IDI7CisgICAgc3Vic3RyZWFtc1tCQk9YX1NUUkVBTV0ub2Zmc2V0ICs9IGJpdG1hcF9sZW5ndGg7CisKKyAgICBnbHlwaF9idWZfc2l6ZSA9IFdPRkYyX0RFRkFVTFRfR0xZUEhfQlVGOworICAgIGlmICggRlRfTkVXX0FSUkFZKCBnbHlwaF9idWYsIGdseXBoX2J1Zl9zaXplICkgKQorICAgICAgZ290byBGYWlsOworCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGluZm8tPnhfbWlucywgbnVtX2dseXBocyApICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2dseXBoczsgKytpICkKKyAgICB7CisgICAgICBGVF9VTG9uZyAgIGdseXBoX3NpemUgPSAwOworICAgICAgRlRfVVNob3J0ICBuX2NvbnRvdXJzID0gMDsKKyAgICAgIEZUX0Jvb2wgICAgaGF2ZV9iYm94ICA9IEZBTFNFOworICAgICAgRlRfQnl0ZSAgICBiYm94X2JpdG1hcDsKKyAgICAgIEZUX1VMb25nICAgYmJveF9vZmZzZXQ7CisgICAgICBGVF9VU2hvcnQgIHhfbWluICAgICAgPSAwOworCisKKyAgICAgIC8qIFNldCBgaGF2ZV9iYm94Jy4gKi8KKyAgICAgIGJib3hfb2Zmc2V0ID0gYmJveF9iaXRtYXBfb2Zmc2V0ICsgKCBpID4+IDMgKTsKKyAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGJib3hfb2Zmc2V0ICkgfHwKKyAgICAgICAgICAgRlRfUkVBRF9CWVRFKCBiYm94X2JpdG1hcCApICAgKQorICAgICAgICBnb3RvIEZhaWw7CisgICAgICBpZiAoIGJib3hfYml0bWFwICYgKCAweDgwID4+ICggaSAmIDcgKSApICkKKyAgICAgICAgaGF2ZV9iYm94ID0gVFJVRTsKKworICAgICAgLyogUmVhZCB2YWx1ZSBmcm9tIGBuQ29udG91clN0cmVhbScuICovCisgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBzdWJzdHJlYW1zW05fQ09OVE9VUl9TVFJFQU1dLm9mZnNldCApIHx8CisgICAgICAgICAgIEZUX1JFQURfVVNIT1JUKCBuX2NvbnRvdXJzICkgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgZ290byBGYWlsOworICAgICAgc3Vic3RyZWFtc1tOX0NPTlRPVVJfU1RSRUFNXS5vZmZzZXQgKz0gMjsKKworICAgICAgaWYgKCBuX2NvbnRvdXJzID09IDB4ZmZmZiApCisgICAgICB7CisgICAgICAgIC8qIGNvbXBvc2l0ZSBnbHlwaCAqLworICAgICAgICBGVF9Cb29sICAgIGhhdmVfaW5zdHJ1Y3Rpb25zID0gRkFMU0U7CisgICAgICAgIEZUX1VTaG9ydCAgaW5zdHJ1Y3Rpb25fc2l6ZSAgPSAwOworICAgICAgICBGVF9VTG9uZyAgIGNvbXBvc2l0ZV9zaXplOworICAgICAgICBGVF9VTG9uZyAgIHNpemVfbmVlZGVkOworICAgICAgICBGVF9CeXRlKiAgIHBvaW50ZXIgICAgICAgICAgID0gTlVMTDsKKworCisgICAgICAgIC8qIENvbXBvc2l0ZSBnbHlwaHMgbXVzdCBoYXZlIGV4cGxpY2l0IGJib3guICovCisgICAgICAgIGlmICggIWhhdmVfYmJveCApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIGlmICggY29tcG9zaXRlR2x5cGhfc2l6ZSggc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0cmVhbXNbQ09NUE9TSVRFX1NUUkVBTV0ub2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb21wb3NpdGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGF2ZV9pbnN0cnVjdGlvbnMpICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgaWYgKCBoYXZlX2luc3RydWN0aW9ucyApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBzdWJzdHJlYW1zW0dMWVBIX1NUUkVBTV0ub2Zmc2V0ICkgfHwKKyAgICAgICAgICAgICAgIFJFQURfMjU1VVNIT1JUKCBpbnN0cnVjdGlvbl9zaXplICkgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZ290byBGYWlsOworICAgICAgICAgIHN1YnN0cmVhbXNbR0xZUEhfU1RSRUFNXS5vZmZzZXQgPSBGVF9TVFJFQU1fUE9TKCk7CisgICAgICAgIH0KKworICAgICAgICBzaXplX25lZWRlZCA9IDEyICsgY29tcG9zaXRlX3NpemUgKyBpbnN0cnVjdGlvbl9zaXplOworICAgICAgICBpZiAoIGdseXBoX2J1Zl9zaXplIDwgc2l6ZV9uZWVkZWQgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBGVF9SRU5FV19BUlJBWSggZ2x5cGhfYnVmLCBnbHlwaF9idWZfc2l6ZSwgc2l6ZV9uZWVkZWQgKSApCisgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgICAgZ2x5cGhfYnVmX3NpemUgPSBzaXplX25lZWRlZDsKKyAgICAgICAgfQorCisgICAgICAgIHBvaW50ZXIgPSBnbHlwaF9idWYgKyBnbHlwaF9zaXplOworICAgICAgICBXUklURV9VU0hPUlQoIHBvaW50ZXIsIG5fY29udG91cnMgKTsKKyAgICAgICAgZ2x5cGhfc2l6ZSArPSAyOworCisgICAgICAgIC8qIFJlYWQgeF9taW4gZm9yIGN1cnJlbnQgZ2x5cGguICovCisgICAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIHN1YnN0cmVhbXNbQkJPWF9TVFJFQU1dLm9mZnNldCApIHx8CisgICAgICAgICAgICAgRlRfUkVBRF9VU0hPUlQoIHhfbWluICkgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgIC8qIE5vIGluY3JlbWVudCBoZXJlIGJlY2F1c2Ugd2UgcmVhZCBhZ2Fpbi4gKi8KKworICAgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBzdWJzdHJlYW1zW0JCT1hfU1RSRUFNXS5vZmZzZXQgKSB8fAorICAgICAgICAgICAgIEZUX1NUUkVBTV9SRUFEKCBnbHlwaF9idWYgKyBnbHlwaF9zaXplLCA4ICkgICAgICApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIHN1YnN0cmVhbXNbQkJPWF9TVFJFQU1dLm9mZnNldCArPSA4OworICAgICAgICBnbHlwaF9zaXplICAgICAgICAgICAgICAgICAgICAgKz0gODsKKworICAgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBzdWJzdHJlYW1zW0NPTVBPU0lURV9TVFJFQU1dLm9mZnNldCApICAgIHx8CisgICAgICAgICAgICAgRlRfU1RSRUFNX1JFQUQoIGdseXBoX2J1ZiArIGdseXBoX3NpemUsIGNvbXBvc2l0ZV9zaXplICkgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICBzdWJzdHJlYW1zW0NPTVBPU0lURV9TVFJFQU1dLm9mZnNldCArPSBjb21wb3NpdGVfc2l6ZTsKKyAgICAgICAgZ2x5cGhfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gY29tcG9zaXRlX3NpemU7CisKKyAgICAgICAgaWYgKCBoYXZlX2luc3RydWN0aW9ucyApCisgICAgICAgIHsKKyAgICAgICAgICBwb2ludGVyID0gZ2x5cGhfYnVmICsgZ2x5cGhfc2l6ZTsKKyAgICAgICAgICBXUklURV9VU0hPUlQoIHBvaW50ZXIsIGluc3RydWN0aW9uX3NpemUgKTsKKyAgICAgICAgICBnbHlwaF9zaXplICs9IDI7CisKKyAgICAgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBzdWJzdHJlYW1zW0lOU1RSVUNUSU9OX1NUUkVBTV0ub2Zmc2V0ICkgICAgfHwKKyAgICAgICAgICAgICAgIEZUX1NUUkVBTV9SRUFEKCBnbHlwaF9idWYgKyBnbHlwaF9zaXplLCBpbnN0cnVjdGlvbl9zaXplICkgKQorICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgc3Vic3RyZWFtc1tJTlNUUlVDVElPTl9TVFJFQU1dLm9mZnNldCArPSBpbnN0cnVjdGlvbl9zaXplOworICAgICAgICAgIGdseXBoX3NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gaW5zdHJ1Y3Rpb25fc2l6ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAoIG5fY29udG91cnMgPiAwICkKKyAgICAgIHsKKyAgICAgICAgLyogc2ltcGxlIGdseXBoICovCisgICAgICAgIEZUX1VMb25nICAgdG90YWxfbl9wb2ludHMgPSAwOworICAgICAgICBGVF9VU2hvcnQgIG5fcG9pbnRzX2NvbnRvdXI7CisgICAgICAgIEZUX1VJbnQgICAgajsKKyAgICAgICAgRlRfVUxvbmcgICBmbGFnX3NpemU7CisgICAgICAgIEZUX1VMb25nICAgdHJpcGxldF9zaXplOworICAgICAgICBGVF9VTG9uZyAgIHRyaXBsZXRfYnl0ZXNfdXNlZDsKKyAgICAgICAgRlRfQnl0ZSogICBmbGFnc19idWYgICA9IE5VTEw7CisgICAgICAgIEZUX0J5dGUqICAgdHJpcGxldF9idWYgPSBOVUxMOworICAgICAgICBGVF9VU2hvcnQgIGluc3RydWN0aW9uX3NpemU7CisgICAgICAgIEZUX1VMb25nICAgc2l6ZV9uZWVkZWQ7CisgICAgICAgIEZUX0ludCAgICAgZW5kX3BvaW50OworICAgICAgICBGVF9VSW50ICAgIGNvbnRvdXJfaXg7CisKKyAgICAgICAgRlRfQnl0ZSogICBwb2ludGVyID0gTlVMTDsKKworCisgICAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBuX3BvaW50c19hcnIsIG5fY29udG91cnMgKSApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIHN1YnN0cmVhbXNbTl9QT0lOVFNfU1RSRUFNXS5vZmZzZXQgKSApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgbl9jb250b3VyczsgKytqICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggUkVBRF8yNTVVU0hPUlQoIG5fcG9pbnRzX2NvbnRvdXIgKSApCisgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgICAgbl9wb2ludHNfYXJyW2pdID0gbl9wb2ludHNfY29udG91cjsKKyAgICAgICAgICAvKiBQcmV2ZW50IG5lZ2F0aXZlL292ZXJmbG93LiAqLworICAgICAgICAgIGlmICggdG90YWxfbl9wb2ludHMgKyBuX3BvaW50c19jb250b3VyIDwgdG90YWxfbl9wb2ludHMgKQorICAgICAgICAgICAgZ290byBGYWlsOworICAgICAgICAgIHRvdGFsX25fcG9pbnRzICs9IG5fcG9pbnRzX2NvbnRvdXI7CisgICAgICAgIH0KKyAgICAgICAgc3Vic3RyZWFtc1tOX1BPSU5UU19TVFJFQU1dLm9mZnNldCA9IEZUX1NUUkVBTV9QT1MoKTsKKworICAgICAgICBmbGFnX3NpemUgPSB0b3RhbF9uX3BvaW50czsKKyAgICAgICAgaWYgKCBmbGFnX3NpemUgPiBzdWJzdHJlYW1zW0ZMQUdfU1RSRUFNXS5zaXplICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgZmxhZ3NfYnVmICAgPSBzdHJlYW0tPmJhc2UgKyBzdWJzdHJlYW1zW0ZMQUdfU1RSRUFNXS5vZmZzZXQ7CisgICAgICAgIHRyaXBsZXRfYnVmID0gc3RyZWFtLT5iYXNlICsgc3Vic3RyZWFtc1tHTFlQSF9TVFJFQU1dLm9mZnNldDsKKworICAgICAgICBpZiAoIHN1YnN0cmVhbXNbR0xZUEhfU1RSRUFNXS5zaXplIDwKKyAgICAgICAgICAgICAgICggc3Vic3RyZWFtc1tHTFlQSF9TVFJFQU1dLm9mZnNldCAtCisgICAgICAgICAgICAgICAgIHN1YnN0cmVhbXNbR0xZUEhfU1RSRUFNXS5zdGFydCApICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgdHJpcGxldF9zaXplICAgICAgID0gc3Vic3RyZWFtc1tHTFlQSF9TVFJFQU1dLnNpemUgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3Vic3RyZWFtc1tHTFlQSF9TVFJFQU1dLm9mZnNldCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdHJlYW1zW0dMWVBIX1NUUkVBTV0uc3RhcnQgKTsKKyAgICAgICAgdHJpcGxldF9ieXRlc191c2VkID0gMDsKKworICAgICAgICAvKiBDcmVhdGUgYXJyYXkgdG8gc3RvcmUgcG9pbnQgaW5mb3JtYXRpb24uICovCisgICAgICAgIHBvaW50c19zaXplID0gdG90YWxfbl9wb2ludHM7CisgICAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBwb2ludHMsIHBvaW50c19zaXplICkgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICBpZiAoIHRyaXBsZXRfZGVjb2RlKCBmbGFnc19idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaXBsZXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlwbGV0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX25fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmlwbGV0X2J5dGVzX3VzZWQgKSApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIHN1YnN0cmVhbXNbRkxBR19TVFJFQU1dLm9mZnNldCAgKz0gZmxhZ19zaXplOworICAgICAgICBzdWJzdHJlYW1zW0dMWVBIX1NUUkVBTV0ub2Zmc2V0ICs9IHRyaXBsZXRfYnl0ZXNfdXNlZDsKKworICAgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBzdWJzdHJlYW1zW0dMWVBIX1NUUkVBTV0ub2Zmc2V0ICkgfHwKKyAgICAgICAgICAgICBSRUFEXzI1NVVTSE9SVCggaW5zdHJ1Y3Rpb25fc2l6ZSApICAgICAgICAgICAgICAgICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgc3Vic3RyZWFtc1tHTFlQSF9TVFJFQU1dLm9mZnNldCA9IEZUX1NUUkVBTV9QT1MoKTsKKworICAgICAgICBpZiAoIHRvdGFsX25fcG9pbnRzID49ICggMSA8PCAyNyApICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgc2l6ZV9uZWVkZWQgPSAxMiArCisgICAgICAgICAgICAgICAgICAgICAgKCAyICogbl9jb250b3VycyApICsKKyAgICAgICAgICAgICAgICAgICAgICAoIDUgKiB0b3RhbF9uX3BvaW50cyApICsKKyAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbl9zaXplOworICAgICAgICBpZiAoIGdseXBoX2J1Zl9zaXplIDwgc2l6ZV9uZWVkZWQgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBGVF9SRU5FV19BUlJBWSggZ2x5cGhfYnVmLCBnbHlwaF9idWZfc2l6ZSwgc2l6ZV9uZWVkZWQgKSApCisgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgICAgZ2x5cGhfYnVmX3NpemUgPSBzaXplX25lZWRlZDsKKyAgICAgICAgfQorCisgICAgICAgIHBvaW50ZXIgPSBnbHlwaF9idWYgKyBnbHlwaF9zaXplOworICAgICAgICBXUklURV9VU0hPUlQoIHBvaW50ZXIsIG5fY29udG91cnMgKTsKKyAgICAgICAgZ2x5cGhfc2l6ZSArPSAyOworCisgICAgICAgIGlmICggaGF2ZV9iYm94ICkKKyAgICAgICAgeworICAgICAgICAgIC8qIFJlYWQgeF9taW4gZm9yIGN1cnJlbnQgZ2x5cGguICovCisgICAgICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggc3Vic3RyZWFtc1tCQk9YX1NUUkVBTV0ub2Zmc2V0ICkgfHwKKyAgICAgICAgICAgICAgIEZUX1JFQURfVVNIT1JUKCB4X21pbiApICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgICAgLyogTm8gaW5jcmVtZW50IGhlcmUgYmVjYXVzZSB3ZSByZWFkIGFnYWluLiAqLworCisgICAgICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggc3Vic3RyZWFtc1tCQk9YX1NUUkVBTV0ub2Zmc2V0ICkgfHwKKyAgICAgICAgICAgICAgIEZUX1NUUkVBTV9SRUFEKCBnbHlwaF9idWYgKyBnbHlwaF9zaXplLCA4ICkgICAgICApCisgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgICAgc3Vic3RyZWFtc1tCQk9YX1NUUkVBTV0ub2Zmc2V0ICs9IDg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGNvbXB1dGVfYmJveCggdG90YWxfbl9wb2ludHMsIHBvaW50cywgZ2x5cGhfYnVmLCAmeF9taW4gKTsKKworICAgICAgICBnbHlwaF9zaXplID0gQ09OVE9VUl9PRkZTRVRfRU5EX1BPSU5UOworCisgICAgICAgIHBvaW50ZXIgICA9IGdseXBoX2J1ZiArIGdseXBoX3NpemU7CisgICAgICAgIGVuZF9wb2ludCA9IC0xOworCisgICAgICAgIGZvciAoIGNvbnRvdXJfaXggPSAwOyBjb250b3VyX2l4IDwgbl9jb250b3VyczsgKytjb250b3VyX2l4ICkKKyAgICAgICAgeworICAgICAgICAgIGVuZF9wb2ludCArPSBuX3BvaW50c19hcnJbY29udG91cl9peF07CisgICAgICAgICAgaWYgKCBlbmRfcG9pbnQgPj0gNjU1MzYgKQorICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgV1JJVEVfU0hPUlQoIHBvaW50ZXIsIGVuZF9wb2ludCApOworICAgICAgICAgIGdseXBoX3NpemUgKz0gMjsKKyAgICAgICAgfQorCisgICAgICAgIFdSSVRFX1VTSE9SVCggcG9pbnRlciwgaW5zdHJ1Y3Rpb25fc2l6ZSApOworICAgICAgICBnbHlwaF9zaXplICs9IDI7CisKKyAgICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggc3Vic3RyZWFtc1tJTlNUUlVDVElPTl9TVFJFQU1dLm9mZnNldCApICAgIHx8CisgICAgICAgICAgICAgRlRfU1RSRUFNX1JFQUQoIGdseXBoX2J1ZiArIGdseXBoX3NpemUsIGluc3RydWN0aW9uX3NpemUgKSApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIHN1YnN0cmVhbXNbSU5TVFJVQ1RJT05fU1RSRUFNXS5vZmZzZXQgKz0gaW5zdHJ1Y3Rpb25fc2l6ZTsKKyAgICAgICAgZ2x5cGhfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBpbnN0cnVjdGlvbl9zaXplOworCisgICAgICAgIGlmICggc3RvcmVfcG9pbnRzKCB0b3RhbF9uX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY29udG91cnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfYnVmX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhfc2l6ZSApICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgRlRfRlJFRSggcG9pbnRzICk7CisgICAgICAgIEZUX0ZSRUUoIG5fcG9pbnRzX2FyciApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBFbXB0eSBnbHlwaC4gICAgICAgICAgKi8KKyAgICAgICAgLyogTXVzdCBub3QgaGF2ZSBhIGJib3guICovCisgICAgICAgIGlmICggaGF2ZV9iYm94ICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0VSUk9SKCggIkVtcHR5IGdseXBoIGhhcyBhIGJib3guXG4iICkpOworICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBsb2NhX3ZhbHVlc1tpXSA9IGRlc3Rfb2Zmc2V0IC0gZ2x5Zl9zdGFydDsKKworICAgICAgaWYgKCBXUklURV9TRk5UX0JVRiggZ2x5cGhfYnVmLCBnbHlwaF9zaXplICkgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIGlmICggcGFkNCggJnNmbnQsIHNmbnRfc2l6ZSwgJmRlc3Rfb2Zmc2V0LCBtZW1vcnkgKSApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgKmdseWZfY2hlY2tzdW0gKz0gY29tcHV0ZV9VTG9uZ19zdW0oIGdseXBoX2J1ZiwgZ2x5cGhfc2l6ZSApOworCisgICAgICAvKiBTdG9yZSB4X21pbnMsIG1heSBiZSByZXF1aXJlZCB0byByZWNvbnN0cnVjdCBgaG10eCcuICovCisgICAgICBpZiAoIG5fY29udG91cnMgPiAwICkKKyAgICAgICAgaW5mby0+eF9taW5zW2ldID0gKEZUX1Nob3J0KXhfbWluOworICAgIH0KKworICAgIGluZm8tPmdseWZfdGFibGUtPmRzdF9sZW5ndGggPSBkZXN0X29mZnNldCAtIGluZm8tPmdseWZfdGFibGUtPmRzdF9vZmZzZXQ7CisgICAgaW5mby0+bG9jYV90YWJsZS0+ZHN0X29mZnNldCA9IGRlc3Rfb2Zmc2V0OworCisgICAgLyogYGxvY2Fbbl0nIHdpbGwgYmUgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiB0aGUgYGdseWYnIHRhYmxlLiAqLworICAgIGxvY2FfdmFsdWVzW251bV9nbHlwaHNdID0gaW5mby0+Z2x5Zl90YWJsZS0+ZHN0X2xlbmd0aDsKKworICAgIGlmICggc3RvcmVfbG9jYSggbG9jYV92YWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICBudW1fZ2x5cGhzICsgMSwKKyAgICAgICAgICAgICAgICAgICAgIGluZGV4X2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgIGxvY2FfY2hlY2tzdW0sCisgICAgICAgICAgICAgICAgICAgICAmc2ZudCwKKyAgICAgICAgICAgICAgICAgICAgIHNmbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICZkZXN0X29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSApICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIGluZm8tPmxvY2FfdGFibGUtPmRzdF9sZW5ndGggPSBkZXN0X29mZnNldCAtIGluZm8tPmxvY2FfdGFibGUtPmRzdF9vZmZzZXQ7CisKKyAgICBGVF9UUkFDRTQoKCAiICBsb2NhIHRhYmxlIGluZm86XG4iICkpOworICAgIEZUX1RSQUNFNCgoICIgICAgZHN0X29mZnNldCA9ICVsdVxuIiwgaW5mby0+bG9jYV90YWJsZS0+ZHN0X29mZnNldCApKTsKKyAgICBGVF9UUkFDRTQoKCAiICAgIGRzdF9sZW5ndGggPSAlbHVcbiIsIGluZm8tPmxvY2FfdGFibGUtPmRzdF9sZW5ndGggKSk7CisgICAgRlRfVFJBQ0U0KCggIiAgICBjaGVja3N1bSA9ICUwOWx4XG4iLCAqbG9jYV9jaGVja3N1bSApKTsKKworICAgIC8qIFNldCBwb2ludGVyIGBzZm50X2J5dGVzJyB0byBpdHMgY29ycmVjdCB2YWx1ZS4gKi8KKyAgICAqc2ZudF9ieXRlcyA9IHNmbnQ7CisgICAgKm91dF9vZmZzZXQgPSBkZXN0X29mZnNldDsKKworICAgIEZUX0ZSRUUoIHN1YnN0cmVhbXMgKTsKKyAgICBGVF9GUkVFKCBsb2NhX3ZhbHVlcyApOworICAgIEZUX0ZSRUUoIG5fcG9pbnRzX2FyciApOworICAgIEZUX0ZSRUUoIGdseXBoX2J1ZiApOworICAgIEZUX0ZSRUUoIHBvaW50cyApOworCisgICAgcmV0dXJuIGVycm9yOworCisgIEZhaWw6CisgICAgaWYgKCAhZXJyb3IgKQorICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworCisgICAgLyogU2V0IHBvaW50ZXIgYHNmbnRfYnl0ZXMnIHRvIGl0cyBjb3JyZWN0IHZhbHVlLiAqLworICAgICpzZm50X2J5dGVzID0gc2ZudDsKKworICAgIEZUX0ZSRUUoIHN1YnN0cmVhbXMgKTsKKyAgICBGVF9GUkVFKCBsb2NhX3ZhbHVlcyApOworICAgIEZUX0ZSRUUoIG5fcG9pbnRzX2FyciApOworICAgIEZUX0ZSRUUoIGdseXBoX2J1ZiApOworICAgIEZUX0ZSRUUoIHBvaW50cyApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBHZXQgYHhfbWlucycgZm9yIHVudHJhbnNmb3JtZWQgYGdseWYnIHRhYmxlLiAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgZ2V0X3hfbWlucyggRlRfU3RyZWFtICAgICBzdHJlYW0sCisgICAgICAgICAgICAgIFdPRkYyX1RhYmxlKiAgdGFibGVzLAorICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgIG51bV90YWJsZXMsCisgICAgICAgICAgICAgIFdPRkYyX0luZm8gICAgaW5mbywKKyAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgKQorICB7CisgICAgRlRfVVNob3J0ICBudW1fZ2x5cGhzOworICAgIEZUX1VTaG9ydCAgaW5kZXhfZm9ybWF0OworICAgIEZUX1VMb25nICAgZ2x5Zl9vZmZzZXQ7CisgICAgRlRfVVNob3J0ICBnbHlmX29mZnNldF9zaG9ydDsKKyAgICBGVF9VTG9uZyAgIGxvY2Ffb2Zmc2V0OworICAgIEZUX0ludCAgICAgaTsKKyAgICBGVF9FcnJvciAgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX1VMb25nICAgb2Zmc2V0X3NpemU7CisKKyAgICAvKiBBdCB0aGlzIHBvaW50IG9mIHRpbWUgdGhvc2UgdGFibGVzIG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVhZCB5ZXQuICovCisgICAgY29uc3QgV09GRjJfVGFibGUgIG1heHBfdGFibGUgPSBmaW5kX3RhYmxlKCB0YWJsZXMsIG51bV90YWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVEFHX21heHAgKTsKKyAgICBjb25zdCBXT0ZGMl9UYWJsZSAgaGVhZF90YWJsZSA9IGZpbmRfdGFibGUoIHRhYmxlcywgbnVtX3RhYmxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUQUdfaGVhZCApOworCisKKyAgICBpZiAoICFtYXhwX3RhYmxlICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJgbWF4cCcgdGFibGUgaXMgbWlzc2luZy5cbiIgKSk7CisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICB9CisKKyAgICBpZiAoICFoZWFkX3RhYmxlICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJgaGVhZCcgdGFibGUgaXMgbWlzc2luZy5cbiIgKSk7CisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICB9CisKKyAgICBpZiAoICFpbmZvLT5sb2NhX3RhYmxlICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJgbG9jYScgdGFibGUgaXMgbWlzc2luZy5cbiIgKSk7CisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICB9CisKKyAgICAvKiBSZWFkIGBudW1HbHlwaHMnIGZpZWxkIGZyb20gYG1heHAnIHRhYmxlLiAqLworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIG1heHBfdGFibGUtPnNyY19vZmZzZXQgKSB8fCBGVF9TVFJFQU1fU0tJUCggOCApICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIGlmICggRlRfUkVBRF9VU0hPUlQoIG51bV9nbHlwaHMgKSApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICBpbmZvLT5udW1fZ2x5cGhzID0gbnVtX2dseXBoczsKKworICAgIC8qIFJlYWQgYGluZGV4VG9Mb2NGb3JtYXQnIGZpZWxkIGZyb20gYGhlYWQnIHRhYmxlLiAqLworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGhlYWRfdGFibGUtPnNyY19vZmZzZXQgKSB8fAorICAgICAgICAgRlRfU1RSRUFNX1NLSVAoIDUwICkgICAgICAgICAgICAgICAgICAgICApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICBpZiAoIEZUX1JFQURfVVNIT1JUKCBpbmRleF9mb3JtYXQgKSApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICBvZmZzZXRfc2l6ZSA9IGluZGV4X2Zvcm1hdCA/IDQgOiAyOworCisgICAgLyogQ3JlYXRlIGB4X21pbnMnIGFycmF5LiAqLworICAgIGlmICggRlRfTkVXX0FSUkFZKCBpbmZvLT54X21pbnMsIG51bV9nbHlwaHMgKSApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICBsb2NhX29mZnNldCA9IGluZm8tPmxvY2FfdGFibGUtPnNyY19vZmZzZXQ7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG51bV9nbHlwaHM7ICsraSApCisgICAgeworICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggbG9jYV9vZmZzZXQgKSApCisgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgbG9jYV9vZmZzZXQgKz0gb2Zmc2V0X3NpemU7CisKKyAgICAgIGlmICggaW5kZXhfZm9ybWF0ICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBGVF9SRUFEX1VMT05HKCBnbHlmX29mZnNldCApICkKKyAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGlmICggRlRfUkVBRF9VU0hPUlQoIGdseWZfb2Zmc2V0X3Nob3J0ICkgKQorICAgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgICBnbHlmX29mZnNldCA9IChGVF9VTG9uZykoIGdseWZfb2Zmc2V0X3Nob3J0ICk7CisgICAgICAgIGdseWZfb2Zmc2V0ID0gZ2x5Zl9vZmZzZXQgPDwgMTsKKyAgICAgIH0KKworICAgICAgZ2x5Zl9vZmZzZXQgKz0gaW5mby0+Z2x5Zl90YWJsZS0+c3JjX29mZnNldDsKKworICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggZ2x5Zl9vZmZzZXQgKSB8fCBGVF9TVFJFQU1fU0tJUCggMiApICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICBpZiAoIEZUX1JFQURfU0hPUlQoIGluZm8tPnhfbWluc1tpXSApICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHJlY29uc3RydWN0X2htdHgoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgIG51bV9nbHlwaHMsCisgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgbnVtX2htZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICBGVF9TaG9ydCogIHhfbWlucywKKyAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICBjaGVja3N1bSwKKyAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSoqICBzZm50X2J5dGVzLAorICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogIHNmbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICBvdXRfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgICAgICAgPSBGVF9FcnJfT2s7CisgICAgRlRfQnl0ZSogIHNmbnQgICAgICAgID0gKnNmbnRfYnl0ZXM7CisgICAgRlRfVUxvbmcgIGRlc3Rfb2Zmc2V0ID0gKm91dF9vZmZzZXQ7CisKKyAgICBGVF9CeXRlICAgaG10eF9mbGFnczsKKyAgICBGVF9Cb29sICAgaGFzX3Byb3BvcnRpb25hbF9sc2JzLCBoYXNfbW9ub3NwYWNlX2xzYnM7CisgICAgRlRfVUxvbmcgIGhtdHhfdGFibGVfc2l6ZTsKKyAgICBGVF9JbnQgICAgaTsKKworICAgIEZUX1VTaG9ydCogIGFkdmFuY2Vfd2lkdGhzID0gTlVMTDsKKyAgICBGVF9TaG9ydCogICBsc2JzICAgICAgICAgICA9IE5VTEw7CisgICAgRlRfQnl0ZSogICAgaG10eF90YWJsZSAgICAgPSBOVUxMOworICAgIEZUX0J5dGUqICAgIGRzdCAgICAgICAgICAgID0gTlVMTDsKKworCisgICAgaWYgKCBGVF9SRUFEX0JZVEUoIGhtdHhfZmxhZ3MgKSApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICBoYXNfcHJvcG9ydGlvbmFsX2xzYnMgPSAoIGhtdHhfZmxhZ3MgJiAxICkgPT0gMDsKKyAgICBoYXNfbW9ub3NwYWNlX2xzYnMgICAgPSAoIGhtdHhfZmxhZ3MgJiAyICkgPT0gMDsKKworICAgIC8qIEJpdHMgMi03IGFyZSByZXNlcnZlZCBhbmQgTVVTVCBiZSB6ZXJvLiAqLworICAgIGlmICggKCBobXR4X2ZsYWdzICYgMHhGQyApICE9IDAgKQorICAgICAgZ290byBGYWlsOworCisgICAgLyogQXJlIHlvdSBSRUFMTFkgdHJhbnNmb3JtZWQ/ICovCisgICAgaWYgKCBoYXNfcHJvcG9ydGlvbmFsX2xzYnMgJiYgaGFzX21vbm9zcGFjZV9sc2JzICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIC8qIENhbm5vdCBoYXZlIGEgdHJhbnNmb3JtZWQgYGhtdHgnIHdpdGhvdXQgYGdseWYnLiAqLworICAgIGlmICggKCBudW1faG1ldHJpY3MgPiBudW1fZ2x5cGhzICkgfHwKKyAgICAgICAgICggbnVtX2htZXRyaWNzIDwgMSApICAgICAgICAgICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIC8qIE11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZW50cnkuICovCisgICAgaWYgKCBudW1faG1ldHJpY3MgPCAxICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIGlmICggRlRfTkVXX0FSUkFZKCBhZHZhbmNlX3dpZHRocywgbnVtX2htZXRyaWNzICkgfHwKKyAgICAgICAgIEZUX05FV19BUlJBWSggbHNicywgbnVtX2dseXBocyApICAgICAgICAgICAgICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIC8qIFJlYWQgYGFkdmFuY2VXaWR0aCcgc3RyZWFtLiAgQWx3YXlzIHByZXNlbnQuICovCisgICAgZm9yICggaSA9IDA7IGkgPCBudW1faG1ldHJpY3M7IGkrKyApCisgICAgeworICAgICAgRlRfVVNob3J0ICBhZHZhbmNlX3dpZHRoOworCisKKyAgICAgIGlmICggRlRfUkVBRF9VU0hPUlQoIGFkdmFuY2Vfd2lkdGggKSApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgYWR2YW5jZV93aWR0aHNbaV0gPSBhZHZhbmNlX3dpZHRoOworICAgIH0KKworICAgIC8qIGxzYiB2YWx1ZXMgZm9yIHByb3BvcnRpb25hbCBnbHlwaHMuICovCisgICAgZm9yICggaSA9IDA7IGkgPCBudW1faG1ldHJpY3M7IGkrKyApCisgICAgeworICAgICAgRlRfU2hvcnQgIGxzYjsKKworCisgICAgICBpZiAoIGhhc19wcm9wb3J0aW9uYWxfbHNicyApCisgICAgICB7CisgICAgICAgIGlmICggRlRfUkVBRF9TSE9SVCggbHNiICkgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgbHNiID0geF9taW5zW2ldOworCisgICAgICBsc2JzW2ldID0gbHNiOworICAgIH0KKworICAgIC8qIGxzYiB2YWx1ZXMgZm9yIG1vbm9zcGFjZWQgZ2x5cGhzLiAqLworICAgIGZvciAoIGkgPSBudW1faG1ldHJpY3M7IGkgPCBudW1fZ2x5cGhzOyBpKysgKQorICAgIHsKKyAgICAgIEZUX1Nob3J0ICBsc2I7CisKKworICAgICAgaWYgKCBoYXNfbW9ub3NwYWNlX2xzYnMgKQorICAgICAgeworICAgICAgICBpZiAoIEZUX1JFQURfU0hPUlQoIGxzYiApICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGxzYiA9IHhfbWluc1tpXTsKKworICAgICAgbHNic1tpXSA9IGxzYjsKKyAgICB9CisKKyAgICAvKiBCdWlsZCB0aGUgaG10eCB0YWJsZS4gKi8KKyAgICBobXR4X3RhYmxlX3NpemUgPSAyICogbnVtX2htZXRyaWNzICsgMiAqIG51bV9nbHlwaHM7CisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGhtdHhfdGFibGUsIGhtdHhfdGFibGVfc2l6ZSApICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIGRzdCA9IGhtdHhfdGFibGU7CisgICAgRlRfVFJBQ0U2KCggImhtdHggdmFsdWVzOiBcbiIgKSk7CisgICAgZm9yICggaSA9IDA7IGkgPCBudW1fZ2x5cGhzOyBpKysgKQorICAgIHsKKyAgICAgIGlmICggaSA8IG51bV9obWV0cmljcyApCisgICAgICB7CisgICAgICAgIFdSSVRFX1NIT1JUKCBkc3QsIGFkdmFuY2Vfd2lkdGhzW2ldICk7CisgICAgICAgIEZUX1RSQUNFNigoICIlZCAiLCBhZHZhbmNlX3dpZHRoc1tpXSApKTsKKyAgICAgIH0KKworICAgICAgV1JJVEVfU0hPUlQoIGRzdCwgbHNic1tpXSApOworICAgICAgRlRfVFJBQ0U2KCggIiVkICIsIGxzYnNbaV0gKSk7CisgICAgfQorICAgIEZUX1RSQUNFNigoICJcbiIgKSk7CisKKyAgICAqY2hlY2tzdW0gPSBjb21wdXRlX1VMb25nX3N1bSggaG10eF90YWJsZSwgaG10eF90YWJsZV9zaXplICk7CisgICAgLyogV3JpdGUgYGhtdHgnIHRhYmxlIHRvIHNmbnQgYnVmZmVyLiAqLworICAgIGlmICggV1JJVEVfU0ZOVF9CVUYoIGhtdHhfdGFibGUsIGhtdHhfdGFibGVfc2l6ZSApICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIC8qIFNldCBwb2ludGVyIGBzZm50X2J5dGVzJyB0byBpdHMgY29ycmVjdCB2YWx1ZS4gKi8KKyAgICAqc2ZudF9ieXRlcyA9IHNmbnQ7CisgICAgKm91dF9vZmZzZXQgPSBkZXN0X29mZnNldDsKKworICAgIEZUX0ZSRUUoIGFkdmFuY2Vfd2lkdGhzICk7CisgICAgRlRfRlJFRSggbHNicyApOworICAgIEZUX0ZSRUUoIGhtdHhfdGFibGUgKTsKKworICAgIHJldHVybiBlcnJvcjsKKworICBGYWlsOgorICAgIEZUX0ZSRUUoIGFkdmFuY2Vfd2lkdGhzICk7CisgICAgRlRfRlJFRSggbHNicyApOworICAgIEZUX0ZSRUUoIGhtdHhfdGFibGUgKTsKKworICAgIGlmICggIWVycm9yICkKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHJlY29uc3RydWN0X2ZvbnQoIEZUX0J5dGUqICAgICAgdHJhbnNmb3JtZWRfYnVmLAorICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgIHRyYW5zZm9ybWVkX2J1Zl9zaXplLAorICAgICAgICAgICAgICAgICAgICBXT0ZGMl9UYWJsZSogIGluZGljZXMsCisgICAgICAgICAgICAgICAgICAgIFdPRkYyX0hlYWRlciAgd29mZjIsCisgICAgICAgICAgICAgICAgICAgIFdPRkYyX0luZm8gICAgaW5mbywKKyAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSoqICAgICBzZm50X2J5dGVzLAorICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogICAgIHNmbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgKQorICB7CisgICAgLyogTWVtb3J5IG1hbmFnZW1lbnQgb2YgYHRyYW5zZm9ybWVkX2J1ZicgaXMgaGFuZGxlZCBieSB0aGUgY2FsbGVyLiAqLworCisgICAgRlRfRXJyb3IgICBlcnJvciAgICAgICA9IEZUX0Vycl9PazsKKyAgICBGVF9TdHJlYW0gIHN0cmVhbSAgICAgID0gTlVMTDsKKyAgICBGVF9CeXRlKiAgIGJ1Zl9jdXJzb3IgID0gTlVMTDsKKyAgICBGVF9CeXRlKiAgIHRhYmxlX2VudHJ5ID0gTlVMTDsKKworICAgIC8qIFdlIGFyZSByZWFsbG9jYXRpbmcgbWVtb3J5IGZvciBgc2ZudCcsIHNvIGl0cyBwb2ludGVyIG1heSBjaGFuZ2UuICovCisgICAgRlRfQnl0ZSogICBzZm50ID0gKnNmbnRfYnl0ZXM7CisKKyAgICBGVF9VU2hvcnQgIG51bV90YWJsZXMgID0gd29mZjItPm51bV90YWJsZXM7CisgICAgRlRfVUxvbmcgICBkZXN0X29mZnNldCA9IDEyICsgbnVtX3RhYmxlcyAqIDE2VUw7CisKKyAgICBGVF9VTG9uZyAgIGNoZWNrc3VtICAgICAgPSAwOworICAgIEZUX1VMb25nICAgbG9jYV9jaGVja3N1bSA9IDA7CisgICAgRlRfSW50ICAgICBubiAgICAgICAgICAgID0gMDsKKyAgICBGVF9VU2hvcnQgIG51bV9obWV0cmljcyAgPSAwOworICAgIEZUX1VMb25nICAgZm9udF9jaGVja3N1bSA9IGluZm8tPmhlYWRlcl9jaGVja3N1bTsKKyAgICBGVF9Cb29sICAgIGlzX2dseWZfeGZvcm0gPSBGQUxTRTsKKworICAgIEZUX1VMb25nICB0YWJsZV9lbnRyeV9vZmZzZXQgPSAxMjsKKworCisgICAgLyogQSBmZXcgdGFibGUgY2hlY2tzIGJlZm9yZSByZWNvbnN0cnVjdGlvbi4gKi8KKyAgICAvKiBgZ2x5ZicgbXVzdCBiZSBwcmVzZW50IHdpdGggYGxvY2EnLiAgICAgICAqLworICAgIGluZm8tPmdseWZfdGFibGUgPSBmaW5kX3RhYmxlKCBpbmRpY2VzLCBudW1fdGFibGVzLCBUVEFHX2dseWYgKTsKKyAgICBpbmZvLT5sb2NhX3RhYmxlID0gZmluZF90YWJsZSggaW5kaWNlcywgbnVtX3RhYmxlcywgVFRBR19sb2NhICk7CisKKyAgICBpZiAoICggaW5mby0+Z2x5Zl90YWJsZSA9PSBOVUxMICkgXiAoIGluZm8tPmxvY2FfdGFibGUgPT0gTlVMTCApICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJPbmUgb2YgYGdseWYnL2Bsb2NhJyB0YWJsZXMgbWlzc2luZy5cbiIgKSk7CisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICB9CisKKyAgICAvKiBCb3RoIGBnbHlmJyBhbmQgYGxvY2EnIG11c3QgaGF2ZSBzYW1lIHRyYW5zZm9ybWF0aW9uLiAqLworICAgIGlmICggaW5mby0+Z2x5Zl90YWJsZSAhPSBOVUxMICkKKyAgICB7CisgICAgICBpZiAoICggaW5mby0+Z2x5Zl90YWJsZS0+ZmxhZ3MgJiBXT0ZGMl9GTEFHU19UUkFOU0ZPUk0gKSAhPQorICAgICAgICAgICAoIGluZm8tPmxvY2FfdGFibGUtPmZsYWdzICYgV09GRjJfRkxBR1NfVFJBTlNGT1JNICkgKQorICAgICAgeworICAgICAgICBGVF9FUlJPUigoICJUcmFuc2Zvcm1hdGlvbiBtaXNtYXRjaCIKKyAgICAgICAgICAgICAgICAgICAiIGJldHdlZW4gYGdseWYnIGFuZCBgbG9jYScgdGFibGUuIiApKTsKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICB9CisgICAgfQorCisgICAgLyogQ3JlYXRlIGJ1ZmZlciBmb3IgdGFibGUgZW50cmllcy4gKi8KKyAgICBpZiAoIEZUX05FV19BUlJBWSggdGFibGVfZW50cnksIDE2ICkgKQorICAgICAgZ290byBGYWlsOworCisgICAgLyogQ3JlYXRlIGEgc3RyZWFtIGZvciB0aGUgdW5jb21wcmVzc2VkIGJ1ZmZlci4gKi8KKyAgICBpZiAoIEZUX05FVyggc3RyZWFtICkgKQorICAgICAgZ290byBGYWlsOworICAgIEZUX1N0cmVhbV9PcGVuTWVtb3J5KCBzdHJlYW0sIHRyYW5zZm9ybWVkX2J1ZiwgdHJhbnNmb3JtZWRfYnVmX3NpemUgKTsKKworICAgIEZUX0FTU0VSVCggRlRfU1RSRUFNX1BPUygpID09IDAgKTsKKworICAgIC8qIFJlY29uc3RydWN0L2NvcHkgdGFibGVzIHRvIG91dHB1dCBzdHJlYW0uICovCisgICAgZm9yICggbm4gPSAwOyBubiA8IG51bV90YWJsZXM7IG5uKysgKQorICAgIHsKKyAgICAgIFdPRkYyX1RhYmxlUmVjICB0YWJsZSA9ICooIGluZGljZXNbbm5dICk7CisKKworICAgICAgRlRfVFJBQ0UzKCggIlNlZWtpbmcgdG8gJWxkIHdpdGggdGFibGUgc2l6ZSAlbGQuXG4iLAorICAgICAgICAgICAgICAgICAgdGFibGUuc3JjX29mZnNldCwgdGFibGUuc3JjX2xlbmd0aCApKTsKKyAgICAgIEZUX1RSQUNFMygoICJUYWJsZSB0YWc6ICVjJWMlYyVjLlxuIiwKKyAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggdGFibGUuVGFnID4+IDI0ICksCisgICAgICAgICAgICAgICAgICAoRlRfQ2hhcikoIHRhYmxlLlRhZyA+PiAxNiApLAorICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCB0YWJsZS5UYWcgPj4gOCAgKSwKKyAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggdGFibGUuVGFnICAgICAgICkgKSk7CisKKyAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIHRhYmxlLnNyY19vZmZzZXQgKSApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgaWYgKCB0YWJsZS5zcmNfb2Zmc2V0ICsgdGFibGUuc3JjX2xlbmd0aCA+IHRyYW5zZm9ybWVkX2J1Zl9zaXplICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICAvKiBHZXQgc3RyZWFtIHNpemUgZm9yIGZpZWxkcyBvZiBgaG10eCcgdGFibGUuICovCisgICAgICBpZiAoIHRhYmxlLlRhZyA9PSBUVEFHX2hoZWEgKQorICAgICAgeworICAgICAgICBpZiAoIHJlYWRfbnVtX2htZXRyaWNzKCBzdHJlYW0sICZudW1faG1ldHJpY3MgKSApCisgICAgICAgICAgZ290byBGYWlsOworICAgICAgfQorCisgICAgICBpbmZvLT5udW1faG1ldHJpY3MgPSBudW1faG1ldHJpY3M7CisKKyAgICAgIGNoZWNrc3VtID0gMDsKKyAgICAgIGlmICggKCB0YWJsZS5mbGFncyAmIFdPRkYyX0ZMQUdTX1RSQU5TRk9STSApICE9IFdPRkYyX0ZMQUdTX1RSQU5TRk9STSApCisgICAgICB7CisgICAgICAgIC8qIENoZWNrIHdoZXRoZXIgYGhlYWQnIGlzIGF0IGxlYXN0IDEyIGJ5dGVzLiAqLworICAgICAgICBpZiAoIHRhYmxlLlRhZyA9PSBUVEFHX2hlYWQgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCB0YWJsZS5zcmNfbGVuZ3RoIDwgMTIgKQorICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgYnVmX2N1cnNvciA9IHRyYW5zZm9ybWVkX2J1ZiArIHRhYmxlLnNyY19vZmZzZXQgKyA4OworICAgICAgICAgIC8qIFNldCBjaGVja1N1bUFkanVzdG1lbnQgPSAwICovCisgICAgICAgICAgV1JJVEVfVUxPTkcoIGJ1Zl9jdXJzb3IsIDAgKTsKKyAgICAgICAgfQorCisgICAgICAgIHRhYmxlLmRzdF9vZmZzZXQgPSBkZXN0X29mZnNldDsKKworICAgICAgICBjaGVja3N1bSA9IGNvbXB1dGVfVUxvbmdfc3VtKCB0cmFuc2Zvcm1lZF9idWYgKyB0YWJsZS5zcmNfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS5zcmNfbGVuZ3RoICk7CisgICAgICAgIEZUX1RSQUNFNCgoICJDaGVja3N1bSA9ICUwOWx4LlxuIiwgY2hlY2tzdW0gKSk7CisKKyAgICAgICAgaWYgKCBXUklURV9TRk5UX0JVRiggdHJhbnNmb3JtZWRfYnVmICsgdGFibGUuc3JjX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUuc3JjX2xlbmd0aCApICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMygoICJUaGlzIHRhYmxlIGlzIHRyYW5zZm9ybWVkLlxuIiApKTsKKworICAgICAgICBpZiAoIHRhYmxlLlRhZyA9PSBUVEFHX2dseWYgKQorICAgICAgICB7CisgICAgICAgICAgaXNfZ2x5Zl94Zm9ybSAgICA9IFRSVUU7CisgICAgICAgICAgdGFibGUuZHN0X29mZnNldCA9IGRlc3Rfb2Zmc2V0OworCisgICAgICAgICAgaWYgKCByZWNvbnN0cnVjdF9nbHlmKCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hlY2tzdW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYV9jaGVja3N1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZm50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ZudF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlc3Rfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSApICkKKyAgICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICAgIEZUX1RSQUNFNCgoICJDaGVja3N1bSA9ICUwOWx4LlxuIiwgY2hlY2tzdW0gKSk7CisgICAgICAgIH0KKworICAgICAgICBlbHNlIGlmICggdGFibGUuVGFnID09IFRUQUdfbG9jYSApCisgICAgICAgICAgY2hlY2tzdW0gPSBsb2NhX2NoZWNrc3VtOworCisgICAgICAgIGVsc2UgaWYgKCB0YWJsZS5UYWcgPT0gVFRBR19obXR4ICkKKyAgICAgICAgeworICAgICAgICAgIC8qIElmIGdseWYgaXMgbm90IHRyYW5zZm9ybWVkIGFuZCBobXR4IGlzLCBoYW5kbGUgc2VwYXJhdGVseS4gKi8KKyAgICAgICAgICBpZiAoICFpc19nbHlmX3hmb3JtICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGdldF94X21pbnMoIHN0cmVhbSwgaW5kaWNlcywgbnVtX3RhYmxlcywgaW5mbywgbWVtb3J5ICkgKQorICAgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgICAgfQorCisgICAgICAgICAgdGFibGUuZHN0X29mZnNldCA9IGRlc3Rfb2Zmc2V0OworCisgICAgICAgICAgaWYgKCByZWNvbnN0cnVjdF9obXR4KCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5udW1fZ2x5cGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+bnVtX2htZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+eF9taW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoZWNrc3VtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNmbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZm50X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVzdF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgKSApCisgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogVW5rbm93biB0cmFuc2Zvcm0uICovCisgICAgICAgICAgRlRfRVJST1IoKCAiVW5rbm93biB0YWJsZSB0cmFuc2Zvcm0uXG4iICkpOworICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBmb250X2NoZWNrc3VtICs9IGNoZWNrc3VtOworCisgICAgICBidWZfY3Vyc29yID0gJnRhYmxlX2VudHJ5WzBdOworICAgICAgV1JJVEVfVUxPTkcoIGJ1Zl9jdXJzb3IsIHRhYmxlLlRhZyApOworICAgICAgV1JJVEVfVUxPTkcoIGJ1Zl9jdXJzb3IsIGNoZWNrc3VtICk7CisgICAgICBXUklURV9VTE9ORyggYnVmX2N1cnNvciwgdGFibGUuZHN0X29mZnNldCApOworICAgICAgV1JJVEVfVUxPTkcoIGJ1Zl9jdXJzb3IsIHRhYmxlLmRzdF9sZW5ndGggKTsKKworICAgICAgV1JJVEVfU0ZOVF9CVUZfQVQoIHRhYmxlX2VudHJ5X29mZnNldCwgdGFibGVfZW50cnksIDE2ICk7CisKKyAgICAgIC8qIFVwZGF0ZSBjaGVja3N1bS4gKi8KKyAgICAgIGZvbnRfY2hlY2tzdW0gKz0gY29tcHV0ZV9VTG9uZ19zdW0oIHRhYmxlX2VudHJ5LCAxNiApOworCisgICAgICBpZiAoIHBhZDQoICZzZm50LCBzZm50X3NpemUsICZkZXN0X29mZnNldCwgbWVtb3J5ICkgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIC8qIFNhbml0eSBjaGVjay4gKi8KKyAgICAgIGlmICggKEZUX1VMb25nKSggdGFibGUuZHN0X29mZnNldCArIHRhYmxlLmRzdF9sZW5ndGggKSA+IGRlc3Rfb2Zmc2V0ICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiVGFibGUgd2FzIHBhcnRpYWxseSB3cml0dGVuLlxuIiApKTsKKyAgICAgICAgZ290byBGYWlsOworICAgICAgfQorICAgIH0KKworICAgIC8qIFVwZGF0ZSBgaGVhZCcgY2hlY2tTdW1BZGp1c3RtZW50LiAqLworICAgIGluZm8tPmhlYWRfdGFibGUgPSBmaW5kX3RhYmxlKCBpbmRpY2VzLCBudW1fdGFibGVzLCBUVEFHX2hlYWQgKTsKKyAgICBpZiAoICFpbmZvLT5oZWFkX3RhYmxlICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJgaGVhZCcgdGFibGUgaXMgbWlzc2luZy5cbiIgKSk7CisgICAgICBnb3RvIEZhaWw7CisgICAgfQorCisgICAgaWYgKCBpbmZvLT5oZWFkX3RhYmxlLT5kc3RfbGVuZ3RoIDwgMTIgKQorICAgICAgZ290byBGYWlsOworCisgICAgYnVmX2N1cnNvciAgICA9IHNmbnQgKyBpbmZvLT5oZWFkX3RhYmxlLT5kc3Rfb2Zmc2V0ICsgODsKKyAgICBmb250X2NoZWNrc3VtID0gMHhCMUIwQUZCQSAtIGZvbnRfY2hlY2tzdW07CisKKyAgICBXUklURV9VTE9ORyggYnVmX2N1cnNvciwgZm9udF9jaGVja3N1bSApOworCisgICAgRlRfVFJBQ0UyKCggIkZpbmFsIGNoZWNrc3VtID0gJTA5bHguXG4iLCBmb250X2NoZWNrc3VtICkpOworCisgICAgd29mZjItPmFjdHVhbF9zZm50X3NpemUgPSBkZXN0X29mZnNldDsKKworICAgIC8qIFNldCBwb2ludGVyIG9mIHNmbnQgc3RyZWFtIHRvIGl0cyBjb3JyZWN0IHZhbHVlLiAqLworICAgICpzZm50X2J5dGVzID0gc2ZudDsKKworICAgIEZUX0ZSRUUoIHRhYmxlX2VudHJ5ICk7CisgICAgRlRfU3RyZWFtX0Nsb3NlKCBzdHJlYW0gKTsKKyAgICBGVF9GUkVFKCBzdHJlYW0gKTsKKworICAgIHJldHVybiBlcnJvcjsKKworICBGYWlsOgorICAgIGlmICggIWVycm9yICkKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKworICAgIC8qIFNldCBwb2ludGVyIG9mIHNmbnQgc3RyZWFtIHRvIGl0cyBjb3JyZWN0IHZhbHVlLiAqLworICAgICpzZm50X2J5dGVzID0gc2ZudDsKKworICAgIEZUX0ZSRUUoIHRhYmxlX2VudHJ5ICk7CisgICAgRlRfU3RyZWFtX0Nsb3NlKCBzdHJlYW0gKTsKKyAgICBGVF9GUkVFKCBzdHJlYW0gKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogUmVwbGFjZSBgZmFjZS0+cm9vdC5zdHJlYW0nIHdpdGggYSBzdHJlYW0gY29udGFpbmluZyB0aGUgZXh0cmFjdGVkICovCisgIC8qIFNGTlQgb2YgYSBXT0ZGMiBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB3b2ZmMl9vcGVuX2ZvbnQoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBGVF9JbnQqICAgIGZhY2VfaW5zdGFuY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgRlRfTG9uZyogICBudW1fZmFjZXMgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKKyAgICBGVF9FcnJvciAgIGVycm9yICA9IEZUX0Vycl9PazsKKyAgICBGVF9JbnQgICAgIGZhY2VfaW5kZXg7CisKKyAgICBXT0ZGMl9IZWFkZXJSZWMgIHdvZmYyOworICAgIFdPRkYyX0luZm9SZWMgICAgaW5mbyAgICAgICAgID0geyAwLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisgICAgV09GRjJfVGFibGUgICAgICB0YWJsZXMgICAgICAgPSBOVUxMOworICAgIFdPRkYyX1RhYmxlKiAgICAgaW5kaWNlcyAgICAgID0gTlVMTDsKKyAgICBXT0ZGMl9UYWJsZSogICAgIHRlbXBfaW5kaWNlcyA9IE5VTEw7CisgICAgV09GRjJfVGFibGUgICAgICBsYXN0X3RhYmxlOworCisgICAgRlRfSW50ICAgICBubjsKKyAgICBGVF9VTG9uZyAgIGo7CisgICAgRlRfVUxvbmcgICBmbGFnczsKKyAgICBGVF9VU2hvcnQgIHhmb3JtX3ZlcnNpb247CisgICAgRlRfVUxvbmcgICBzcmNfb2Zmc2V0ID0gMDsKKworICAgIEZUX1VJbnQgICAgZ2x5Zl9pbmRleDsKKyAgICBGVF9VSW50ICAgIGxvY2FfaW5kZXg7CisgICAgRlRfVUludDMyICBmaWxlX29mZnNldDsKKworICAgIEZUX0J5dGUqICAgc2ZudCAgICAgICAgPSBOVUxMOworICAgIEZUX1N0cmVhbSAgc2ZudF9zdHJlYW0gPSBOVUxMOworICAgIEZUX0J5dGUqICAgc2ZudF9oZWFkZXI7CisgICAgRlRfVUxvbmcgICBzZm50X3NpemU7CisKKyAgICBGVF9CeXRlKiAgdW5jb21wcmVzc2VkX2J1ZiA9IE5VTEw7CisKKyAgICBzdGF0aWMgY29uc3QgRlRfRnJhbWVfRmllbGQgIHdvZmYyX2hlYWRlcl9maWVsZHNbXSA9CisgICAgeworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBXT0ZGMl9IZWFkZXJSZWMKKworICAgICAgRlRfRlJBTUVfU1RBUlQoIDQ4ICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HICAgICAoIHNpZ25hdHVyZSApLAorICAgICAgICBGVF9GUkFNRV9VTE9ORyAgICAgKCBmbGF2b3IgKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcgICAgICggbGVuZ3RoICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCAgICAoIG51bV90YWJsZXMgKSwKKyAgICAgICAgRlRfRlJBTUVfU0tJUF9CWVRFUyggMiApLAorICAgICAgICBGVF9GUkFNRV9VTE9ORyAgICAgKCB0b3RhbFNmbnRTaXplICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HICAgICAoIHRvdGFsQ29tcHJlc3NlZFNpemUgKSwKKyAgICAgICAgRlRfRlJBTUVfU0tJUF9CWVRFUyggMiAqIDIgKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcgICAgICggbWV0YU9mZnNldCApLAorICAgICAgICBGVF9GUkFNRV9VTE9ORyAgICAgKCBtZXRhTGVuZ3RoICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HICAgICAoIG1ldGFPcmlnTGVuZ3RoICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HICAgICAoIHByaXZPZmZzZXQgKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcgICAgICggcHJpdkxlbmd0aCApLAorICAgICAgRlRfRlJBTUVfRU5ECisgICAgfTsKKworCisgICAgRlRfQVNTRVJUKCBzdHJlYW0gPT0gZmFjZS0+cm9vdC5zdHJlYW0gKTsKKyAgICBGVF9BU1NFUlQoIEZUX1NUUkVBTV9QT1MoKSA9PSAwICk7CisKKyAgICBmYWNlX2luZGV4ID0gRlRfQUJTKCAqZmFjZV9pbnN0YW5jZV9pbmRleCApICYgMHhGRkZGOworCisgICAgLyogUmVhZCBXT0ZGMiBIZWFkZXIuICovCisgICAgaWYgKCBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIHdvZmYyX2hlYWRlcl9maWVsZHMsICZ3b2ZmMiApICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIEZUX1RSQUNFNCgoICJzaWduYXR1cmUgICAgIC0+IDB4JWxYXG4iLCB3b2ZmMi5zaWduYXR1cmUgKSk7CisgICAgRlRfVFJBQ0UyKCggImZsYXZvciAgICAgICAgLT4gMHglMDhseFxuIiwgd29mZjIuZmxhdm9yICkpOworICAgIEZUX1RSQUNFNCgoICJsZW5ndGggICAgICAgIC0+ICVsdVxuIiwgd29mZjIubGVuZ3RoICkpOworICAgIEZUX1RSQUNFMigoICJudW1fdGFibGVzICAgIC0+ICVodVxuIiwgd29mZjIubnVtX3RhYmxlcyApKTsKKyAgICBGVF9UUkFDRTQoKCAidG90YWxTZm50U2l6ZSAtPiAlbHVcbiIsIHdvZmYyLnRvdGFsU2ZudFNpemUgKSk7CisgICAgRlRfVFJBQ0U0KCggIm1ldGFPZmZzZXQgICAgLT4gJWx1XG4iLCB3b2ZmMi5tZXRhT2Zmc2V0ICkpOworICAgIEZUX1RSQUNFNCgoICJtZXRhTGVuZ3RoICAgIC0+ICVsdVxuIiwgd29mZjIubWV0YUxlbmd0aCApKTsKKyAgICBGVF9UUkFDRTQoKCAicHJpdk9mZnNldCAgICAtPiAlbHVcbiIsIHdvZmYyLnByaXZPZmZzZXQgKSk7CisgICAgRlRfVFJBQ0U0KCggInByaXZMZW5ndGggICAgLT4gJWx1XG4iLCB3b2ZmMi5wcml2TGVuZ3RoICkpOworCisgICAgLyogTWFrZSBzdXJlIHdlIGRvbid0IHJlY3Vyc2UgYmFjayBoZXJlLiAqLworICAgIGlmICggd29mZjIuZmxhdm9yID09IFRUQUdfd09GMiApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKworICAgIC8qIE1pc2NlbGxhbmVvdXMgY2hlY2tzLiAqLworICAgIGlmICggd29mZjIubGVuZ3RoICE9IHN0cmVhbS0+c2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgd29mZjIubnVtX3RhYmxlcyA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgNDggKyB3b2ZmMi5udW1fdGFibGVzICogMjBVTCA+PSB3b2ZmMi5sZW5ndGggICAgICAgICAgICAgICB8fAorICAgICAgICAgKCB3b2ZmMi5tZXRhT2Zmc2V0ID09IDAgJiYgKCB3b2ZmMi5tZXRhTGVuZ3RoICE9IDAgICAgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvZmYyLm1ldGFPcmlnTGVuZ3RoICE9IDAgKSApIHx8CisgICAgICAgICAoIHdvZmYyLm1ldGFMZW5ndGggIT0gMCAmJiB3b2ZmMi5tZXRhT3JpZ0xlbmd0aCA9PSAwICkgICAgIHx8CisgICAgICAgICAoIHdvZmYyLm1ldGFPZmZzZXQgPj0gd29mZjIubGVuZ3RoICkgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAoIHdvZmYyLmxlbmd0aCAtIHdvZmYyLm1ldGFPZmZzZXQgPCB3b2ZmMi5tZXRhTGVuZ3RoICkgICAgIHx8CisgICAgICAgICAoIHdvZmYyLnByaXZPZmZzZXQgPT0gMCAmJiB3b2ZmMi5wcml2TGVuZ3RoICE9IDAgKSAgICAgICAgIHx8CisgICAgICAgICAoIHdvZmYyLnByaXZPZmZzZXQgPj0gd29mZjIubGVuZ3RoICkgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAoIHdvZmYyLmxlbmd0aCAtIHdvZmYyLnByaXZPZmZzZXQgPCB3b2ZmMi5wcml2TGVuZ3RoICkgICAgICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJ3b2ZmMl9vcGVuX2ZvbnQ6IGludmFsaWQgV09GRjIgaGVhZGVyXG4iICkpOworICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgfQorCisgICAgRlRfVFJBQ0UyKCggIndvZmYyX29wZW5fZm9udDogV09GRjIgSGVhZGVyIGlzIHZhbGlkLlxuIiApKTsKKworICAgIHdvZmYyLnR0Y19mb250cyA9IE5VTEw7CisKKyAgICAvKiBSZWFkIHRhYmxlIGRpcmVjdG9yeS4gKi8KKyAgICBpZiAoIEZUX05FV19BUlJBWSggdGFibGVzLCB3b2ZmMi5udW1fdGFibGVzICkgIHx8CisgICAgICAgICBGVF9ORVdfQVJSQVkoIGluZGljZXMsIHdvZmYyLm51bV90YWJsZXMgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBGVF9UUkFDRTIoKAorICAgICAgIlxuIgorICAgICAgIiAgdGFnICAgIGZsYWdzICAgIHRyYW5zZm9ybSAgb3JpZ0xlbiAgIHRyYW5zZm9ybUxlbiAgIG9mZnNldFxuIgorICAgICAgIiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIgKSk7CisgICAvKiAiICBYWFhYICBYWFhYWFhYWCAgWFhYWFhYWFggICBYWFhYWFhYWCAgICBYWFhYWFhYWCAgICBYWFhYWFhYWCIgKi8KKworICAgIGZvciAoIG5uID0gMDsgbm4gPCB3b2ZmMi5udW1fdGFibGVzOyBubisrICkKKyAgICB7CisgICAgICBXT0ZGMl9UYWJsZSAgdGFibGUgPSB0YWJsZXMgKyBubjsKKworCisgICAgICBpZiAoIEZUX1JFQURfQllURSggdGFibGUtPkZsYWdCeXRlICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGlmICggKCB0YWJsZS0+RmxhZ0J5dGUgJiAweDNmICkgPT0gMHgzZiApCisgICAgICB7CisgICAgICAgIGlmICggRlRfUkVBRF9VTE9ORyggdGFibGUtPlRhZyApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHRhYmxlLT5UYWcgPSB3b2ZmMl9rbm93bl90YWdzKCB0YWJsZS0+RmxhZ0J5dGUgJiAweDNmICk7CisgICAgICAgIGlmICggIXRhYmxlLT5UYWcgKQorICAgICAgICB7CisgICAgICAgICAgRlRfRVJST1IoKCAid29mZjJfb3Blbl9mb250OiBVbmtub3duIHRhYmxlIHRhZy4iICkpOworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZmxhZ3MgPSAwOworICAgICAgeGZvcm1fdmVyc2lvbiA9ICggdGFibGUtPkZsYWdCeXRlID4+IDYgKSAmIDB4MDM7CisKKyAgICAgIC8qIDAgbWVhbnMgeGZvcm0gZm9yIGdseXBoL2xvY2EsIG5vbi0wIGZvciBvdGhlcnMuICovCisgICAgICBpZiAoIHRhYmxlLT5UYWcgPT0gVFRBR19nbHlmIHx8IHRhYmxlLT5UYWcgPT0gVFRBR19sb2NhICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCB4Zm9ybV92ZXJzaW9uID09IDAgKQorICAgICAgICAgIGZsYWdzIHw9IFdPRkYyX0ZMQUdTX1RSQU5TRk9STTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCB4Zm9ybV92ZXJzaW9uICE9IDAgKQorICAgICAgICBmbGFncyB8PSBXT0ZGMl9GTEFHU19UUkFOU0ZPUk07CisKKyAgICAgIGZsYWdzIHw9IHhmb3JtX3ZlcnNpb247CisKKyAgICAgIGlmICggUkVBRF9CQVNFMTI4KCB0YWJsZS0+ZHN0X2xlbmd0aCApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICB0YWJsZS0+VHJhbnNmb3JtTGVuZ3RoID0gdGFibGUtPmRzdF9sZW5ndGg7CisKKyAgICAgIGlmICggKCBmbGFncyAmIFdPRkYyX0ZMQUdTX1RSQU5TRk9STSApICE9IDAgKQorICAgICAgeworICAgICAgICBpZiAoIFJFQURfQkFTRTEyOCggdGFibGUtPlRyYW5zZm9ybUxlbmd0aCApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgaWYgKCB0YWJsZS0+VGFnID09IFRUQUdfbG9jYSAmJiB0YWJsZS0+VHJhbnNmb3JtTGVuZ3RoICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0VSUk9SKCggIndvZmYyX29wZW5fZm9udDogSW52YWxpZCBsb2NhIGB0cmFuc2Zvcm1MZW5ndGgnLlxuIiApKTsKKyAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICggc3JjX29mZnNldCArIHRhYmxlLT5UcmFuc2Zvcm1MZW5ndGggPCBzcmNfb2Zmc2V0ICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAid29mZjJfb3Blbl9mb250OiBpbnZhbGlkIFdPRkYyIHRhYmxlIGRpcmVjdG9yeS5cbiIgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICB0YWJsZS0+c3JjX29mZnNldCA9IHNyY19vZmZzZXQ7CisgICAgICB0YWJsZS0+c3JjX2xlbmd0aCA9IHRhYmxlLT5UcmFuc2Zvcm1MZW5ndGg7CisgICAgICBzcmNfb2Zmc2V0ICAgICAgICs9IHRhYmxlLT5UcmFuc2Zvcm1MZW5ndGg7CisgICAgICB0YWJsZS0+ZmxhZ3MgICAgICA9IGZsYWdzOworCisgICAgICBGVF9UUkFDRTIoKCAiICAlYyVjJWMlYyAgJTA4ZCAgJTA4ZCAgICUwOGxkICAgICUwOGxkICAgICUwOGxkXG4iLAorICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCB0YWJsZS0+VGFnID4+IDI0ICksCisgICAgICAgICAgICAgICAgICAoRlRfQ2hhcikoIHRhYmxlLT5UYWcgPj4gMTYgKSwKKyAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggdGFibGUtPlRhZyA+PiA4ICApLAorICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCB0YWJsZS0+VGFnICAgICAgICksCisgICAgICAgICAgICAgICAgICB0YWJsZS0+RmxhZ0J5dGUgJiAweDNmLAorICAgICAgICAgICAgICAgICAgKCB0YWJsZS0+RmxhZ0J5dGUgPj4gNiApICYgMHgwMywKKyAgICAgICAgICAgICAgICAgIHRhYmxlLT5kc3RfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgdGFibGUtPlRyYW5zZm9ybUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgIHRhYmxlLT5zcmNfb2Zmc2V0ICkpOworCisgICAgICBpbmRpY2VzW25uXSA9IHRhYmxlOworICAgIH0KKworICAgIC8qIEVuZCBvZiBsYXN0IHRhYmxlIGlzIHVuY29tcHJlc3NlZCBzaXplLiAqLworICAgIGxhc3RfdGFibGUgPSBpbmRpY2VzW3dvZmYyLm51bV90YWJsZXMgLSAxXTsKKworICAgIHdvZmYyLnVuY29tcHJlc3NlZF9zaXplID0gbGFzdF90YWJsZS0+c3JjX29mZnNldCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3RhYmxlLT5zcmNfbGVuZ3RoOworICAgIGlmICggd29mZjIudW5jb21wcmVzc2VkX3NpemUgPCBsYXN0X3RhYmxlLT5zcmNfb2Zmc2V0ICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgRlRfVFJBQ0UyKCggIlRhYmxlIGRpcmVjdG9yeSBwYXJzZWQuXG4iICkpOworCisgICAgLyogQ2hlY2sgZm9yIGFuZCByZWFkIGNvbGxlY3Rpb24gZGlyZWN0b3J5LiAqLworICAgIHdvZmYyLm51bV9mb250cyAgICAgID0gMTsKKyAgICB3b2ZmMi5oZWFkZXJfdmVyc2lvbiA9IDA7CisKKyAgICBpZiAoIHdvZmYyLmZsYXZvciA9PSBUVEFHX3R0Y2YgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMigoICJGb250IGlzIGEgVFRDLCByZWFkaW5nIGNvbGxlY3Rpb24gZGlyZWN0b3J5LlxuIiApKTsKKworICAgICAgaWYgKCBGVF9SRUFEX1VMT05HKCB3b2ZmMi5oZWFkZXJfdmVyc2lvbiApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBpZiAoIHdvZmYyLmhlYWRlcl92ZXJzaW9uICE9IDB4MDAwMTAwMDAgJiYKKyAgICAgICAgICAgd29mZjIuaGVhZGVyX3ZlcnNpb24gIT0gMHgwMDAyMDAwMCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBpZiAoIFJFQURfMjU1VVNIT1JUKCB3b2ZmMi5udW1fZm9udHMgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgaWYgKCAhd29mZjIubnVtX2ZvbnRzICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIEZUX1RSQUNFNCgoICJOdW1iZXIgb2YgZm9udHMgaW4gVFRDOiAlZFxuIiwgd29mZjIubnVtX2ZvbnRzICkpOworCisgICAgICBpZiAoIEZUX05FV19BUlJBWSggd29mZjIudHRjX2ZvbnRzLCB3b2ZmMi5udW1fZm9udHMgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgZm9yICggbm4gPSAwOyBubiA8IHdvZmYyLm51bV9mb250czsgbm4rKyApCisgICAgICB7CisgICAgICAgIFdPRkYyX1R0Y0ZvbnQgIHR0Y19mb250ID0gd29mZjIudHRjX2ZvbnRzICsgbm47CisKKworICAgICAgICBpZiAoIFJFQURfMjU1VVNIT1JUKCB0dGNfZm9udC0+bnVtX3RhYmxlcyApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIGlmICggRlRfUkVBRF9VTE9ORyggdHRjX2ZvbnQtPmZsYXZvciApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHR0Y19mb250LT50YWJsZV9pbmRpY2VzLCB0dGNfZm9udC0+bnVtX3RhYmxlcyApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgRlRfVFJBQ0U1KCggIk51bWJlciBvZiB0YWJsZXMgaW4gZm9udCAlZDogJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIG5uLCB0dGNfZm9udC0+bnVtX3RhYmxlcyApKTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIGlmICggdHRjX2ZvbnQtPm51bV90YWJsZXMgKQorICAgICAgICAgIEZUX1RSQUNFNigoICIgIEluZGljZXM6ICIgKSk7CisjZW5kaWYKKworICAgICAgICBnbHlmX2luZGV4ID0gMDsKKyAgICAgICAgbG9jYV9pbmRleCA9IDA7CisKKyAgICAgICAgZm9yICggaiA9IDA7IGogPCB0dGNfZm9udC0+bnVtX3RhYmxlczsgaisrICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1VTaG9ydCAgICB0YWJsZV9pbmRleDsKKyAgICAgICAgICBXT0ZGMl9UYWJsZSAgdGFibGU7CisKKworICAgICAgICAgIGlmICggUkVBRF8yNTVVU0hPUlQoIHRhYmxlX2luZGV4ICkgKQorICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgRlRfVFJBQ0U2KCggIiVodSAiLCB0YWJsZV9pbmRleCApKTsKKyAgICAgICAgICBpZiAoIHRhYmxlX2luZGV4ID49IHdvZmYyLm51bV90YWJsZXMgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0VSUk9SKCggIndvZmYyX29wZW5fZm9udDogaW52YWxpZCB0YWJsZSBpbmRleFxuIiApKTsKKyAgICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB0dGNfZm9udC0+dGFibGVfaW5kaWNlc1tqXSA9IHRhYmxlX2luZGV4OworCisgICAgICAgICAgdGFibGUgPSBpbmRpY2VzW3RhYmxlX2luZGV4XTsKKyAgICAgICAgICBpZiAoIHRhYmxlLT5UYWcgPT0gVFRBR19sb2NhICkKKyAgICAgICAgICAgIGxvY2FfaW5kZXggPSB0YWJsZV9pbmRleDsKKyAgICAgICAgICBpZiAoIHRhYmxlLT5UYWcgPT0gVFRBR19nbHlmICkKKyAgICAgICAgICAgIGdseWZfaW5kZXggPSB0YWJsZV9pbmRleDsKKyAgICAgICAgfQorCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgaWYgKCB0dGNfZm9udC0+bnVtX3RhYmxlcyApCisgICAgICAgICAgRlRfVFJBQ0U2KCggIlxuIiApKTsKKyNlbmRpZgorCisgICAgICAgIC8qIGdseWYgYW5kIGxvY2EgbXVzdCBiZSBjb25zZWN1dGl2ZSAqLworICAgICAgICBpZiAoIGdseWZfaW5kZXggPiAwIHx8IGxvY2FfaW5kZXggPiAwICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggZ2x5Zl9pbmRleCA+IGxvY2FfaW5kZXggICAgICB8fAorICAgICAgICAgICAgICAgbG9jYV9pbmRleCAtIGdseWZfaW5kZXggIT0gMSApCisgICAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBDb2xsZWN0aW9uIGRpcmVjdG9yeSByZWFkaW5nIGNvbXBsZXRlLiAqLworICAgICAgRlRfVFJBQ0UyKCggIldPRkYyIGNvbGxlY3Rpb24gZGlyZWN0b3J5IGlzIHZhbGlkLlxuIiApKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgd29mZjIudHRjX2ZvbnRzID0gTlVMTDsKKworICAgIHdvZmYyLmNvbXByZXNzZWRfb2Zmc2V0ID0gRlRfU1RSRUFNX1BPUygpOworICAgIGZpbGVfb2Zmc2V0ICAgICAgICAgICAgID0gUk9VTkQ0KCB3b2ZmMi5jb21wcmVzc2VkX29mZnNldCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvZmYyLnRvdGFsQ29tcHJlc3NlZFNpemUgKTsKKworICAgIC8qIFNvbWUgbW9yZSBjaGVja3MgYmVmb3JlIHdlIHN0YXJ0IHJlYWRpbmcgdGhlIHRhYmxlcy4gKi8KKyAgICBpZiAoIGZpbGVfb2Zmc2V0ID4gd29mZjIubGVuZ3RoICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCB3b2ZmMi5tZXRhT2Zmc2V0ICkKKyAgICB7CisgICAgICBpZiAoIGZpbGVfb2Zmc2V0ICE9IHdvZmYyLm1ldGFPZmZzZXQgKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKyAgICAgIGZpbGVfb2Zmc2V0ID0gUk9VTkQ0KHdvZmYyLm1ldGFPZmZzZXQgKyB3b2ZmMi5tZXRhTGVuZ3RoKTsKKyAgICB9CisKKyAgICBpZiAoIHdvZmYyLnByaXZPZmZzZXQgKQorICAgIHsKKyAgICAgIGlmICggZmlsZV9vZmZzZXQgIT0gd29mZjIucHJpdk9mZnNldCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgICAgZmlsZV9vZmZzZXQgPSBST1VORDQod29mZjIucHJpdk9mZnNldCArIHdvZmYyLnByaXZMZW5ndGgpOworICAgIH0KKworICAgIGlmICggZmlsZV9vZmZzZXQgIT0gKCBST1VORDQoIHdvZmYyLmxlbmd0aCApICkgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBWYWxpZGF0ZSByZXF1ZXN0ZWQgZmFjZSBpbmRleC4gKi8KKyAgICAqbnVtX2ZhY2VzID0gd29mZjIubnVtX2ZvbnRzOworICAgIC8qIHZhbHVlIC0oTisxKSByZXF1ZXN0cyBpbmZvcm1hdGlvbiBvbiBpbmRleCBOICovCisgICAgaWYgKCAqZmFjZV9pbnN0YW5jZV9pbmRleCA8IDAgKQorICAgICAgZmFjZV9pbmRleC0tOworCisgICAgaWYgKCBmYWNlX2luZGV4ID49IHdvZmYyLm51bV9mb250cyApCisgICAgeworICAgICAgaWYgKCAqZmFjZV9pbnN0YW5jZV9pbmRleCA+PSAwICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGZhY2VfaW5kZXggPSAwOworICAgIH0KKworICAgIC8qIE9ubHkgcmV0YWluIHRhYmxlcyBvZiB0aGUgcmVxdWVzdGVkIGZhY2UgaW4gYSBUVEMuICovCisgICAgaWYgKCB3b2ZmMi5oZWFkZXJfdmVyc2lvbiApCisgICAgeworICAgICAgV09GRjJfVHRjRm9udCAgdHRjX2ZvbnQgPSB3b2ZmMi50dGNfZm9udHMgKyBmYWNlX2luZGV4OworCisKKyAgICAgIC8qIENyZWF0ZSBhIHRlbXBvcmFyeSBhcnJheS4gKi8KKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCB0ZW1wX2luZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgdHRjX2ZvbnQtPm51bV90YWJsZXMgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgRlRfVFJBQ0U0KCggIlN0b3JpbmcgdGFibGVzIGZvciBUVEMgZmFjZSBpbmRleCAlZC5cbiIsIGZhY2VfaW5kZXggKSk7CisgICAgICBmb3IgKCBubiA9IDA7IG5uIDwgdHRjX2ZvbnQtPm51bV90YWJsZXM7IG5uKysgKQorICAgICAgICB0ZW1wX2luZGljZXNbbm5dID0gaW5kaWNlc1t0dGNfZm9udC0+dGFibGVfaW5kaWNlc1tubl1dOworCisgICAgICAvKiBSZXNpemUgYXJyYXkgdG8gcmVxdWlyZWQgc2l6ZS4gKi8KKyAgICAgIGlmICggRlRfUkVORVdfQVJSQVkoIGluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2ZmMi5udW1fdGFibGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRjX2ZvbnQtPm51bV90YWJsZXMgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgZm9yICggbm4gPSAwOyBubiA8IHR0Y19mb250LT5udW1fdGFibGVzOyBubisrICkKKyAgICAgICAgaW5kaWNlc1tubl0gPSB0ZW1wX2luZGljZXNbbm5dOworCisgICAgICBGVF9GUkVFKCB0ZW1wX2luZGljZXMgKTsKKworICAgICAgLyogQ2hhbmdlIGhlYWRlciB2YWx1ZXMuICovCisgICAgICB3b2ZmMi5mbGF2b3IgICAgID0gdHRjX2ZvbnQtPmZsYXZvcjsKKyAgICAgIHdvZmYyLm51bV90YWJsZXMgPSB0dGNfZm9udC0+bnVtX3RhYmxlczsKKyAgICB9CisKKyAgICAvKiBXZSBuZWVkIHRvIGFsbG9jYXRlIHRoaXMgbXVjaCBhdCB0aGUgbWluaW11bS4gKi8KKyAgICBzZm50X3NpemUgPSAxMiArIHdvZmYyLm51bV90YWJsZXMgKiAxNlVMOworICAgIC8qIFRoaXMgaXMgd2hhdCB3ZSBub3JtYWxseSBleHBlY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBJbml0aWFsbHkgdHJ1c3QgYHRvdGFsU2ZudFNpemUnIGFuZCBjaGFuZ2UgbGF0ZXIgYXMgcmVxdWlyZWQuICovCisgICAgaWYgKCB3b2ZmMi50b3RhbFNmbnRTaXplID4gc2ZudF9zaXplICkKKyAgICB7CisgICAgICAvKiBIb3dldmVyLCBhZGp1c3QgdGhlIHZhbHVlIHRvIHNvbWV0aGluZyByZWFzb25hYmxlLiAqLworCisgICAgICAvKiBGYWN0b3IgNjQgaXMgaGV1cmlzdGljLiAqLworICAgICAgaWYgKCAoIHdvZmYyLnRvdGFsU2ZudFNpemUgPj4gNiApID4gd29mZjIubGVuZ3RoICkKKyAgICAgICAgc2ZudF9zaXplID0gd29mZjIubGVuZ3RoIDw8IDY7CisgICAgICBlbHNlCisgICAgICAgIHNmbnRfc2l6ZSA9IHdvZmYyLnRvdGFsU2ZudFNpemU7CisKKyAgICAgIC8qIFZhbHVlIDE8PDI2ID0gNjcxMDg4NjQgaXMgaGV1cmlzdGljLiAqLworICAgICAgaWYgKHNmbnRfc2l6ZSA+PSAoMSA8PCAyNikpCisgICAgICAgIHNmbnRfc2l6ZSA9IDEgPDwgMjY7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgaWYgKCBzZm50X3NpemUgIT0gd29mZjIudG90YWxTZm50U2l6ZSApCisgICAgICAgIEZUX1RSQUNFNCgoICJhZGp1c3RpbmcgZXN0aW1hdGUgb2YgdW5jb21wcmVzc2VkIGZvbnQgc2l6ZSIKKyAgICAgICAgICAgICAgICAgICAgIiB0byAlbHUgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHNmbnRfc2l6ZSApKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8qIFdyaXRlIHNmbnQgaGVhZGVyLiAqLworICAgIGlmICggRlRfQUxMT0MoIHNmbnQsIHNmbnRfc2l6ZSApIHx8CisgICAgICAgICBGVF9ORVcoIHNmbnRfc3RyZWFtICkgICAgICAgKQorICAgICAgZ290byBFeGl0OworCisgICAgc2ZudF9oZWFkZXIgPSBzZm50OworCisgICAgV1JJVEVfVUxPTkcoIHNmbnRfaGVhZGVyLCB3b2ZmMi5mbGF2b3IgKTsKKworICAgIGlmICggd29mZjIubnVtX3RhYmxlcyApCisgICAgeworICAgICAgRlRfVUludCAgc2VhcmNoUmFuZ2UsIGVudHJ5U2VsZWN0b3IsIHJhbmdlU2hpZnQsIHg7CisKKworICAgICAgeCAgICAgICAgICAgICA9IHdvZmYyLm51bV90YWJsZXM7CisgICAgICBlbnRyeVNlbGVjdG9yID0gMDsKKyAgICAgIHdoaWxlICggeCApCisgICAgICB7CisgICAgICAgIHggICAgICAgICAgICA+Pj0gMTsKKyAgICAgICAgZW50cnlTZWxlY3RvciArPSAxOworICAgICAgfQorICAgICAgZW50cnlTZWxlY3Rvci0tOworCisgICAgICBzZWFyY2hSYW5nZSA9ICggMSA8PCBlbnRyeVNlbGVjdG9yICkgKiAxNjsKKyAgICAgIHJhbmdlU2hpZnQgID0gKCB3b2ZmMi5udW1fdGFibGVzICogMTYgKSAtIHNlYXJjaFJhbmdlOworCisgICAgICBXUklURV9VU0hPUlQoIHNmbnRfaGVhZGVyLCB3b2ZmMi5udW1fdGFibGVzICk7CisgICAgICBXUklURV9VU0hPUlQoIHNmbnRfaGVhZGVyLCBzZWFyY2hSYW5nZSApOworICAgICAgV1JJVEVfVVNIT1JUKCBzZm50X2hlYWRlciwgZW50cnlTZWxlY3RvciApOworICAgICAgV1JJVEVfVVNIT1JUKCBzZm50X2hlYWRlciwgcmFuZ2VTaGlmdCApOworICAgIH0KKworICAgIGluZm8uaGVhZGVyX2NoZWNrc3VtID0gY29tcHV0ZV9VTG9uZ19zdW0oIHNmbnQsIDEyICk7CisKKyAgICAvKiBTb3J0IHRhYmxlcyBieSB0YWcuICovCisgICAgZnRfcXNvcnQoIGluZGljZXMsCisgICAgICAgICAgICAgIHdvZmYyLm51bV90YWJsZXMsCisgICAgICAgICAgICAgIHNpemVvZiAoIFdPRkYyX1RhYmxlICksCisgICAgICAgICAgICAgIGNvbXBhcmVfdGFncyApOworCisgICAgaWYgKCB3b2ZmMi51bmNvbXByZXNzZWRfc2l6ZSA8IDEgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIHdvZmYyLnVuY29tcHJlc3NlZF9zaXplID4gc2ZudF9zaXplICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJ3b2ZmMl9vcGVuX2ZvbnQ6IFNGTlQgdGFibGUgbGVuZ3RocyBhcmUgdG9vIGxhcmdlLlxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHVuY29tcHJlc3NlZCB0YWJsZSBkYXRhLiAqLworICAgIGlmICggRlRfQUxMT0MoIHVuY29tcHJlc3NlZF9idWYsIHdvZmYyLnVuY29tcHJlc3NlZF9zaXplICkgfHwKKyAgICAgICAgIEZUX0ZSQU1FX0VOVEVSKCB3b2ZmMi50b3RhbENvbXByZXNzZWRTaXplICkgICAgICAgICAgICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIFVuY29tcHJlc3MgdGhlIHN0cmVhbS4gKi8KKyAgICBlcnJvciA9IHdvZmYyX2RlY29tcHJlc3MoIHVuY29tcHJlc3NlZF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2ZmMi51bmNvbXByZXNzZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+Y3Vyc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29mZjIudG90YWxDb21wcmVzc2VkU2l6ZSApOworCisgICAgRlRfRlJBTUVfRVhJVCgpOworCisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBlcnJvciA9IHJlY29uc3RydWN0X2ZvbnQoIHVuY29tcHJlc3NlZF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b2ZmMi51bmNvbXByZXNzZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd29mZjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZm50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNmbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSApOworCisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBSZXNpemUgYHNmbnQnIHRvIGFjdHVhbCBzaXplIG9mIHNmbnQgc3RyZWFtLiAqLworICAgIGlmICggd29mZjIuYWN0dWFsX3NmbnRfc2l6ZSA8IHNmbnRfc2l6ZSApCisgICAgeworICAgICAgRlRfVFJBQ0U1KCggIlRyaW1taW5nIHNmbnQgc3RyZWFtIGZyb20gJWx1IHRvICVsdS5cbiIsCisgICAgICAgICAgICAgICAgICBzZm50X3NpemUsIHdvZmYyLmFjdHVhbF9zZm50X3NpemUgKSk7CisgICAgICBpZiAoIEZUX1JFQUxMT0MoIHNmbnQsCisgICAgICAgICAgICAgICAgICAgICAgIChGVF9VTG9uZykoIHNmbnRfc2l6ZSApLAorICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUxvbmcpKCB3b2ZmMi5hY3R1YWxfc2ZudF9zaXplICkgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBgcmVjb25zdHJ1Y3RfZm9udCcgaGFzIGRvbmUgYWxsIHRoZSB3b3JrLiAqLworICAgIC8qIFN3YXAgb3V0IHN0cmVhbSBhbmQgcmV0dXJuLiAgICAgICAgICAgICAgICovCisgICAgRlRfU3RyZWFtX09wZW5NZW1vcnkoIHNmbnRfc3RyZWFtLCBzZm50LCB3b2ZmMi5hY3R1YWxfc2ZudF9zaXplICk7CisgICAgc2ZudF9zdHJlYW0tPm1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworICAgIHNmbnRfc3RyZWFtLT5jbG9zZSAgPSBzdHJlYW1fY2xvc2U7CisKKyAgICBGVF9TdHJlYW1fRnJlZSgKKyAgICAgIGZhY2UtPnJvb3Quc3RyZWFtLAorICAgICAgKCBmYWNlLT5yb290LmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfRVhURVJOQUxfU1RSRUFNICkgIT0gMCApOworCisgICAgZmFjZS0+cm9vdC5zdHJlYW0gICAgICA9IHNmbnRfc3RyZWFtOworICAgIGZhY2UtPnJvb3QuZmFjZV9mbGFncyAmPSB+RlRfRkFDRV9GTEFHX0VYVEVSTkFMX1NUUkVBTTsKKworICAgIC8qIFNldCBmYWNlX2luZGV4IHRvIDAgb3IgLTEuICovCisgICAgaWYgKCAqZmFjZV9pbnN0YW5jZV9pbmRleCA+PSAwICkKKyAgICAgICpmYWNlX2luc3RhbmNlX2luZGV4ID0gMDsKKyAgICBlbHNlCisgICAgICAqZmFjZV9pbnN0YW5jZV9pbmRleCA9IC0xOworCisgICAgRlRfVFJBQ0UyKCggIndvZmYyX29wZW5fZm9udDogU0ZOVCBzeW50aGVzaXplZC5cbiIgKSk7CisKKyAgRXhpdDoKKyAgICBGVF9GUkVFKCB0YWJsZXMgKTsKKyAgICBGVF9GUkVFKCBpbmRpY2VzICk7CisgICAgRlRfRlJFRSggdW5jb21wcmVzc2VkX2J1ZiApOworICAgIEZUX0ZSRUUoIGluZm8ueF9taW5zICk7CisKKyAgICBpZiAoIHdvZmYyLnR0Y19mb250cyApCisgICAgeworICAgICAgV09GRjJfVHRjRm9udCAgdHRjX2ZvbnQgPSB3b2ZmMi50dGNfZm9udHM7CisKKworICAgICAgZm9yICggbm4gPSAwOyBubiA8IHdvZmYyLm51bV9mb250czsgbm4rKyApCisgICAgICB7CisgICAgICAgIEZUX0ZSRUUoIHR0Y19mb250LT50YWJsZV9pbmRpY2VzICk7CisgICAgICAgIHR0Y19mb250Kys7CisgICAgICB9CisKKyAgICAgIEZUX0ZSRUUoIHdvZmYyLnR0Y19mb250cyApOworICAgIH0KKworICAgIGlmICggZXJyb3IgKQorICAgIHsKKyAgICAgIEZUX0ZSRUUoIHNmbnQgKTsKKyAgICAgIGlmICggc2ZudF9zdHJlYW0gKQorICAgICAgeworICAgICAgICBGVF9TdHJlYW1fQ2xvc2UoIHNmbnRfc3RyZWFtICk7CisgICAgICAgIEZUX0ZSRUUoIHNmbnRfc3RyZWFtICk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworI3VuZGVmIFJFQURfMjU1VVNIT1JUCisjdW5kZWYgUkVBRF9CQVNFMTI4CisjdW5kZWYgUk9VTkQ0CisjdW5kZWYgV1JJVEVfVVNIT1JUCisjdW5kZWYgV1JJVEVfVUxPTkcKKyN1bmRlZiBXUklURV9TSE9SVAorI3VuZGVmIFdSSVRFX1NGTlRfQlVGCisjdW5kZWYgV1JJVEVfU0ZOVF9CVUZfQVQKKworI3VuZGVmIE5fQ09OVE9VUl9TVFJFQU0KKyN1bmRlZiBOX1BPSU5UU19TVFJFQU0KKyN1bmRlZiBGTEFHX1NUUkVBTQorI3VuZGVmIEdMWVBIX1NUUkVBTQorI3VuZGVmIENPTVBPU0lURV9TVFJFQU0KKyN1bmRlZiBCQk9YX1NUUkVBTQorI3VuZGVmIElOU1RSVUNUSU9OX1NUUkVBTQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2Z3b2ZmMi5oIGIvc3JjL3NmbnQvc2Z3b2ZmMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OGY2NmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc2ZudC9zZndvZmYyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzZndvZmYyLmgKKyAqCisgKiAgIFdPRkZGMiBmb3JtYXQgbWFuYWdlbWVudCAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgYnkKKyAqIE5pa2hpbCBSYW1ha3Jpc2huYW4sIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KKworCisjaWZuZGVmIFNGV09GRjJfSF8KKyNkZWZpbmUgU0ZXT0ZGMl9IXworCisKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZm50Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKiBMZWF2ZSB0aGUgZmlyc3QgYnl0ZSBvcGVuIHRvIHN0b3JlIGBmbGFnX2J5dGUnLiAqLworI2RlZmluZSBXT0ZGMl9GTEFHU19UUkFOU0ZPUk0gICAxIDw8IDgKKworI2RlZmluZSBXT0ZGMl9TRk5UX0hFQURFUl9TSVpFICAxMgorI2RlZmluZSBXT0ZGMl9TRk5UX0VOVFJZX1NJWkUgICAxNgorCisgIC8qIFN1Z2dlc3RlZCBtYXhpbXVtIHNpemUgZm9yIG91dHB1dC4gKi8KKyNkZWZpbmUgV09GRjJfREVGQVVMVF9NQVhfU0laRSAgMzAgKiAxMDI0ICogMTAyNAorCisgIC8qIDk4JSBvZiBHb29nbGUgRm9udHMgaGF2ZSBubyBnbHlwaCBhYm92ZSA1ayBieXRlcy4gKi8KKyNkZWZpbmUgV09GRjJfREVGQVVMVF9HTFlQSF9CVUYgIDUxMjAKKworICAvKiBDb21wb3NpdGUgZ2x5cGggZmxhZ3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTZWUgYENvbXBvc2l0ZUdseXBoLmphdmEnIGluIGBzZm50bHknIGZvciBmdWxsIGRlZmluaXRpb25zLiAqLworI2RlZmluZSBGTEFHX0FSR18xX0FORF8yX0FSRV9XT1JEUyAgICAgMSA8PCAwCisjZGVmaW5lIEZMQUdfV0VfSEFWRV9BX1NDQUxFICAgICAgICAgICAxIDw8IDMKKyNkZWZpbmUgRkxBR19NT1JFX0NPTVBPTkVOVFMgICAgICAgICAgIDEgPDwgNQorI2RlZmluZSBGTEFHX1dFX0hBVkVfQU5fWF9BTkRfWV9TQ0FMRSAgMSA8PCA2CisjZGVmaW5lIEZMQUdfV0VfSEFWRV9BX1RXT19CWV9UV08gICAgICAxIDw8IDcKKyNkZWZpbmUgRkxBR19XRV9IQVZFX0lOU1RSVUNUSU9OUyAgICAgIDEgPDwgOAorCisgIC8qIFNpbXBsZSBnbHlwaCBmbGFncyAqLworI2RlZmluZSBHTFlGX09OX0NVUlZFICAgICAgICAxIDw8IDAKKyNkZWZpbmUgR0xZRl9YX1NIT1JUICAgICAgICAgMSA8PCAxCisjZGVmaW5lIEdMWUZfWV9TSE9SVCAgICAgICAgIDEgPDwgMgorI2RlZmluZSBHTFlGX1JFUEVBVCAgICAgICAgICAxIDw8IDMKKyNkZWZpbmUgR0xZRl9USElTX1hfSVNfU0FNRSAgMSA8PCA0CisjZGVmaW5lIEdMWUZfVEhJU19ZX0lTX1NBTUUgIDEgPDwgNQorCisgIC8qIE90aGVyIGNvbnN0YW50cyAqLworI2RlZmluZSBDT05UT1VSX09GRlNFVF9FTkRfUE9JTlQgIDEwCisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB3b2ZmMl9vcGVuX2ZvbnQoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBGVF9JbnQqICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgRlRfTG9uZyogICBudW1fZmFjZXMgKTsKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBTRldPRkYyX0hfICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dGJkZi5jIGIvc3JjL3NmbnQvdHRiZGYuYwppbmRleCA4NTM1OTlmLi5hMjg3ZDNhIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGJkZi5jCisrKyBiL3NyYy9zZm50L3R0YmRmLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZW1iZWRkZWQgQkRGIHByb3BlcnRpZXMgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDEwICsxNiw5IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90dHRhZ3MuaD4KICNpbmNsdWRlICJ0dGJkZi5oIgogCiAjaW5jbHVkZSAic2ZlcnJvcnMuaCIKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0YmRmLmggYi9zcmMvc2ZudC90dGJkZi5oCmluZGV4IGU0MTY0ZTYuLmU2MGMwMWMgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0YmRmLmgKKysrIGIvc3JjL3NmbnQvdHRiZGYuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBlbWJlZGRlZCBCREYgcHJvcGVydGllcyAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsOSArMjAsOCBAQAogI2RlZmluZSBUVEJERl9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgInR0bG9hZC5oIgotI2luY2x1ZGUgRlRfQkRGX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGJkZi5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRjbWFwLmMgYi9zcmMvc2ZudC90dGNtYXAuYwppbmRleCA2ODNmM2IxLi41NTZhNzEyIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGNtYXAuYworKysgYi9zcmMvc2ZudC90dGNtYXAuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlIGNoYXJhY3RlciBtYXBwaW5nIHRhYmxlIChjbWFwKSBzdXBwb3J0IChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxNCArMTYsMTMgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KIAotI2luY2x1ZGUgInNmZXJyb3JzLmgiICAgICAgICAgICAvKiBtdXN0IGNvbWUgYmVmb3JlIEZUX0lOVEVSTkFMX1ZBTElEQVRFX0ggKi8KKyNpbmNsdWRlICJzZmVycm9ycy5oIiAgICAgICAgICAgICAgICAgICAgICAvKiBtdXN0IGNvbWUgYmVmb3JlIGBmdHZhbGlkLmgnICovCiAKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1ZBTElEQVRFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0dmFsaWQuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmg+CiAjaW5jbHVkZSAidHRsb2FkLmgiCiAjaW5jbHVkZSAidHRjbWFwLmgiCiAjaW5jbHVkZSAidHRwb3N0LmgiCkBAIC0zNzUyLDYgKzM3NTEsNyBAQAogCiAgIHN0YXRpYyBjb25zdCBUVF9DTWFwX0NsYXNzICB0dF9jbWFwX2NsYXNzZXNbXSA9CiAgIHsKKyN1bmRlZiAgVFRDTUFQQ0lURU0KICNkZWZpbmUgVFRDTUFQQ0lURU0oIGEgKSAgJmEsCiAjaW5jbHVkZSAidHRjbWFwYy5oIgogICAgIE5VTEwsCkBAIC0zNzY0LDI5ICszNzY0LDMzIEBACiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICB0dF9mYWNlX2J1aWxkX2NtYXBzKCBUVF9GYWNlICBmYWNlICkKICAgewotICAgIEZUX0J5dGUqICAgICAgICAgICB0YWJsZSA9IGZhY2UtPmNtYXBfdGFibGU7Ci0gICAgRlRfQnl0ZSogICAgICAgICAgIGxpbWl0ID0gdGFibGUgKyBmYWNlLT5jbWFwX3NpemU7CisgICAgRlRfQnl0ZSogY29uc3QgICAgIHRhYmxlICAgPSBmYWNlLT5jbWFwX3RhYmxlOworICAgIEZUX0J5dGUqICAgICAgICAgICBsaW1pdDsKICAgICBGVF9VSW50IHZvbGF0aWxlICAgbnVtX2NtYXBzOwotICAgIEZUX0J5dGUqIHZvbGF0aWxlICBwICAgICA9IHRhYmxlOworICAgIEZUX0J5dGUqIHZvbGF0aWxlICBwICAgICAgID0gdGFibGU7CiAgICAgRlRfTGlicmFyeSAgICAgICAgIGxpYnJhcnkgPSBGVF9GQUNFX0xJQlJBUlkoIGZhY2UgKTsKIAogICAgIEZUX1VOVVNFRCggbGlicmFyeSApOwogCiAKLSAgICBpZiAoICFwIHx8IHAgKyA0ID4gbGltaXQgKQorICAgIGlmICggIXAgfHwgZmFjZS0+Y21hcF9zaXplIDwgNCApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKIAotICAgIC8qIG9ubHkgcmVjb2duaXplIGZvcm1hdCAwICovCi0gICAgaWYgKCBUVF9ORVhUX1VTSE9SVCggcCApICE9IDAgKQotICAgIHsKLSAgICAgIEZUX0VSUk9SKCggInR0X2ZhY2VfYnVpbGRfY21hcHM6IgotICAgICAgICAgICAgICAgICAiIHVuc3VwcG9ydGVkIGBjbWFwJyB0YWJsZSBmb3JtYXQgPSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgVFRfUEVFS19VU0hPUlQoIHAgLSAyICkgKSk7Ci0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKLSAgICB9CisgICAgLyogVmVyc2lvbiAxLjguMyBvZiB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbiBjb250YWlucyB0aGUgZm9sbG93aW5nICovCisgICAgLyogKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3R5cG9ncmFwaHkvb3BlbnR5cGUvc3BlYy9jbWFwKTogICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICBUaGUgJ2NtYXAnIHRhYmxlIHZlcnNpb24gbnVtYmVyIHJlbWFpbnMgYXQgMHgwMDAwIGZvciBmb250cyB0aGF0ICovCisgICAgLyogICBtYWtlIHVzZSBvZiB0aGUgbmV3ZXIgc3VidGFibGUgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogVGhpcyBlc3NlbnRpYWxseSBtZWFucyB0aGF0IGEgdmVyc2lvbiBmb3JtYXQgdGVzdCBpcyB1c2VsZXNzLiAgICAgICovCisKKyAgICAvKiBpZ25vcmUgZm9ybWF0ICovCisgICAgcCArPSAyOwogCiAgICAgbnVtX2NtYXBzID0gVFRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBGVF9UUkFDRTQoKCAidHRfZmFjZV9idWlsZF9jbWFwczogJWQgY21hcHNcbiIsIG51bV9jbWFwcyApKTsKIAorICAgIGxpbWl0ID0gdGFibGUgKyBmYWNlLT5jbWFwX3NpemU7CiAgICAgZm9yICggOyBudW1fY21hcHMgPiAwICYmIHAgKyA4IDw9IGxpbWl0OyBudW1fY21hcHMtLSApCiAgICAgewogICAgICAgRlRfQ2hhck1hcFJlYyAgY2hhcm1hcDsKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0Y21hcC5oIGIvc3JjL3NmbnQvdHRjbWFwLmgKaW5kZXggMzY4MDFjOS4uYzdkN2MyMSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRjbWFwLmgKKysrIGIvc3JjL3NmbnQvdHRjbWFwLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUcnVlVHlwZSBjaGFyYWN0ZXIgbWFwcGluZyB0YWJsZSAoY21hcCkgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsMTAgKzIwLDkgQEAKICNkZWZpbmUgVFRDTUFQX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9UUlVFVFlQRV9UWVBFU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9WQUxJREFURV9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1RUX0NNQVBfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHZhbGlkLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaD4KIAogRlRfQkVHSU5fSEVBREVSCiAKQEAgLTkxLDYgKzkwLDExIEBACiAgIH07CiAKIAorI3VuZGVmICBUVENNQVBDSVRFTQorI2RlZmluZSBUVENNQVBDSVRFTSggYSApICBGVF9DQUxMQkFDS19UQUJMRSAgY29uc3QgVFRfQ01hcF9DbGFzc1JlYyAgYTsKKyNpbmNsdWRlICJ0dGNtYXBjLmgiCisKKwogICB0eXBlZGVmIHN0cnVjdCAgVFRfVmFsaWRhdG9yUmVjXwogICB7CiAgICAgRlRfVmFsaWRhdG9yUmVjICB2YWxpZGF0b3I7CmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dGNtYXBjLmggYi9zcmMvc2ZudC90dGNtYXBjLmgKaW5kZXggYWNlOWU2OS4uMmU0Y2U1MCAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRjbWFwYy5oCisrKyBiL3NyYy9zZm50L3R0Y21hcGMuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRUIENNQVAgY2xhc3NlcyBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjAgYnkKICAqIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0Y29sci5jIGIvc3JjL3NmbnQvdHRjb2xyLmMKaW5kZXggNmI1MzdkOS4uOTAyNWUzNSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRjb2xyLmMKKysrIGIvc3JjL3NmbnQvdHRjb2xyLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUcnVlVHlwZSBhbmQgT3BlblR5cGUgY29sb3JlZCBnbHlwaCBsYXllciBzdXBwb3J0IChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgU2hhbyBZdSBaaGFuZyA8c2hhb3poYW5nQGZiLmNvbT4uCkBAIC0yNywxMSArMjcsMTAgQEAKICAgICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICi0jaW5jbHVkZSBGVF9DT0xPUl9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWdzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRjb2xvci5oPgogCiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSUwpAQCAtNDAsOSArMzksOSBAQAogCiAKICAgLyogTk9URTogVGhlc2UgYXJlIHRoZSB0YWJsZSBzaXplcyBjYWxjdWxhdGVkIHRocm91Z2ggdGhlIHNwZWNzLiAqLwotI2RlZmluZSBCQVNFX0dMWVBIX1NJWkUgICAgICAgICAgICA2Ci0jZGVmaW5lIExBWUVSX1NJWkUgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgQ09MUl9IRUFERVJfU0laRSAgICAgICAgICAxNAorI2RlZmluZSBCQVNFX0dMWVBIX1NJWkUgICAgICAgICAgICA2VQorI2RlZmluZSBMQVlFUl9TSVpFICAgICAgICAgICAgICAgICA0VQorI2RlZmluZSBDT0xSX0hFQURFUl9TSVpFICAgICAgICAgIDE0VQogCiAKICAgdHlwZWRlZiBzdHJ1Y3QgQmFzZUdseXBoUmVjb3JkXwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRjb2xyLmggYi9zcmMvc2ZudC90dGNvbHIuaAppbmRleCA4MTc0ODlhLi42NDEyMTYyIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGNvbHIuaAorKysgYi9zcmMvc2ZudC90dGNvbHIuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBjb2xvcmVkIGdseXBoIGxheWVyIHN1cHBvcnQgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBTaGFvIFl1IFpoYW5nIDxzaGFvemhhbmdAZmIuY29tPi4KQEAgLTIyLDcgKzIyLDYgQEAKICNkZWZpbmUgX19UVENPTFJfSF9fCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSAidHRsb2FkLmgiCiAKIApkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRjcGFsLmMgYi9zcmMvc2ZudC90dGNwYWwuYwppbmRleCAzNDgyMTY5Li45YzUxNGJhIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGNwYWwuYworKysgYi9zcmMvc2ZudC90dGNwYWwuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBjb2xvciBwYWxldHRlIHN1cHBvcnQgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBTaGFvIFl1IFpoYW5nIDxzaGFvemhhbmdAZmIuY29tPi4KQEAgLTI3LDExICsyNywxMCBAQAogICAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKLSNpbmNsdWRlIEZUX0NPTE9SX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90dHRhZ3MuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGNvbG9yLmg+CiAKIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQ09MT1JfTEFZRVJTCkBAIC00MCw4ICszOSw4IEBACiAKIAogICAvKiBOT1RFOiBUaGVzZSBhcmUgdGhlIHRhYmxlIHNpemVzIGNhbGN1bGF0ZWQgdGhyb3VnaCB0aGUgc3BlY3MuICovCi0jZGVmaW5lIENQQUxfVjBfSEVBREVSX0JBU0VfU0laRSAgMTIKLSNkZWZpbmUgQ09MT1JfU0laRSAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUEFMX1YwX0hFQURFUl9CQVNFX1NJWkUgIDEyVQorI2RlZmluZSBDT0xPUl9TSVpFICAgICAgICAgICAgICAgICA0VQogCiAKICAgLyogYWxsIGRhdGEgZnJvbSBgQ1BBTCcgbm90IGNvdmVyZWQgaW4gRlRfUGFsZXR0ZV9EYXRhICovCkBAIC0xNDAsNyArMTM5LDcgQEAKICAgICAgICAgICAgM1UgKiA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gdGFibGVfc2l6ZSApCiAgICAgICAgIGdvdG8gSW52YWxpZFRhYmxlOwogCi0gICAgICBwICs9IGZhY2UtPnBhbGV0dGVfZGF0YS5udW1fcGFsZXR0ZXMgKiAyOworICAgICAgcCArPSBmYWNlLT5wYWxldHRlX2RhdGEubnVtX3BhbGV0dGVzICogMlU7CiAKICAgICAgIHR5cGVfb2Zmc2V0ICAgICAgICA9IEZUX05FWFRfVUxPTkcoIHAgKTsKICAgICAgIGxhYmVsX29mZnNldCAgICAgICA9IEZUX05FWFRfVUxPTkcoIHAgKTsKQEAgLTE1MCw3ICsxNDksNyBAQAogICAgICAgewogICAgICAgICBpZiAoIHR5cGVfb2Zmc2V0ID49IHRhYmxlX3NpemUgKQogICAgICAgICAgIGdvdG8gSW52YWxpZFRhYmxlOwotICAgICAgICBpZiAoIGZhY2UtPnBhbGV0dGVfZGF0YS5udW1fcGFsZXR0ZXMgKiAyID4KKyAgICAgICAgaWYgKCBmYWNlLT5wYWxldHRlX2RhdGEubnVtX3BhbGV0dGVzICogMlUgPgogICAgICAgICAgICAgICAgdGFibGVfc2l6ZSAtIHR5cGVfb2Zmc2V0ICkKICAgICAgICAgICBnb3RvIEludmFsaWRUYWJsZTsKIApAQCAtMTcxLDcgKzE3MCw3IEBACiAgICAgICB7CiAgICAgICAgIGlmICggbGFiZWxfb2Zmc2V0ID49IHRhYmxlX3NpemUgKQogICAgICAgICAgIGdvdG8gSW52YWxpZFRhYmxlOwotICAgICAgICBpZiAoIGZhY2UtPnBhbGV0dGVfZGF0YS5udW1fcGFsZXR0ZXMgKiAyID4KKyAgICAgICAgaWYgKCBmYWNlLT5wYWxldHRlX2RhdGEubnVtX3BhbGV0dGVzICogMlUgPgogICAgICAgICAgICAgICAgdGFibGVfc2l6ZSAtIGxhYmVsX29mZnNldCApCiAgICAgICAgICAgZ290byBJbnZhbGlkVGFibGU7CiAKQEAgLTE5Miw3ICsxOTEsNyBAQAogICAgICAgewogICAgICAgICBpZiAoIGVudHJ5X2xhYmVsX29mZnNldCA+PSB0YWJsZV9zaXplICkKICAgICAgICAgICBnb3RvIEludmFsaWRUYWJsZTsKLSAgICAgICAgaWYgKCBmYWNlLT5wYWxldHRlX2RhdGEubnVtX3BhbGV0dGVfZW50cmllcyAqIDIgPgorICAgICAgICBpZiAoIGZhY2UtPnBhbGV0dGVfZGF0YS5udW1fcGFsZXR0ZV9lbnRyaWVzICogMlUgPgogICAgICAgICAgICAgICAgdGFibGVfc2l6ZSAtIGVudHJ5X2xhYmVsX29mZnNldCApCiAgICAgICAgICAgZ290byBJbnZhbGlkVGFibGU7CiAKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0Y3BhbC5oIGIvc3JjL3NmbnQvdHRjcGFsLmgKaW5kZXggZDFiMjQ0Zi4uYjU0NGJlNiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRjcGFsLmgKKysrIGIvc3JjL3NmbnQvdHRjcGFsLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUcnVlVHlwZSBhbmQgT3BlblR5cGUgY29sb3IgcGFsZXR0ZSBzdXBwb3J0IChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgU2hhbyBZdSBaaGFuZyA8c2hhb3poYW5nQGZiLmNvbT4uCkBAIC0yMiw3ICsyMiw2IEBACiAjZGVmaW5lIF9fVFRDUEFMX0hfXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgInR0bG9hZC5oIgogCiAKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0a2Vybi5jIGIvc3JjL3NmbnQvdHRrZXJuLmMKaW5kZXggOGQxYjc4MS4uZDRhNzBjNyAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRrZXJuLmMKKysrIGIvc3JjL3NmbnQvdHRrZXJuLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgIExvYWQgdGhlIGJhc2ljIFRydWVUeXBlIGtlcm5pbmcgdGFibGUuICBUaGlzIGRvZXNuJ3QgaGFuZGxlCiAgKiAgIGtlcm5pbmcgZGF0YSB3aXRoaW4gdGhlIEdQT1MgdGFibGUgYXQgdGhlIG1vbWVudC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNywxMCArMTcsOSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWdzLmg+CiAjaW5jbHVkZSAidHRrZXJuLmgiCiAKICNpbmNsdWRlICJzZmVycm9ycy5oIgpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRrZXJuLmggYi9zcmMvc2ZudC90dGtlcm4uaAppbmRleCA1ZjI4M2U1Li5mNDRiNWJkIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGtlcm4uaAorKysgYi9zcmMvc2ZudC90dGtlcm4uaApAQCAtNSw3ICs1LDcgQEAKICAqICAgTG9hZCB0aGUgYmFzaWMgVHJ1ZVR5cGUga2VybmluZyB0YWJsZS4gIFRoaXMgZG9lc24ndCBoYW5kbGUKICAqICAga2VybmluZyBkYXRhIHdpdGhpbiB0aGUgR1BPUyB0YWJsZSBhdCB0aGUgbW9tZW50LgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIxLDkgKzIxLDggQEAKICNkZWZpbmUgVFRLRVJOX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRsb2FkLmMgYi9zcmMvc2ZudC90dGxvYWQuYwppbmRleCA1NDQzYmY0Li40YjQ2ZjQxIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGxvYWQuYworKysgYi9zcmMvc2ZudC90dGxvYWQuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgTG9hZCB0aGUgYmFzaWMgVHJ1ZVR5cGUgdGFibGVzLCBpLmUuLCB0YWJsZXMgdGhhdCBjYW4gYmUgZWl0aGVyIGluCiAgKiAgIFRURiBvciBPVEYgZm9udHMgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE3LDEwICsxNyw5IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90dHRhZ3MuaD4KICNpbmNsdWRlICJ0dGxvYWQuaCIKIAogI2luY2x1ZGUgInNmZXJyb3JzLmgiCkBAIC02NSw4ICs2NCw4IEBACiAjZW5kaWYKIAogCi0gICAgRlRfVFJBQ0U0KCggInR0X2ZhY2VfbG9va3VwX3RhYmxlOiAlMDhwLCBgJWMlYyVjJWMnIC0tICIsCi0gICAgICAgICAgICAgICAgZmFjZSwKKyAgICBGVF9UUkFDRTQoKCAidHRfZmFjZV9sb29rdXBfdGFibGU6ICVwLCBgJWMlYyVjJWMnIC0tICIsCisgICAgICAgICAgICAgICAgKHZvaWQgKilmYWNlLAogICAgICAgICAgICAgICAgIChGVF9DaGFyKSggdGFnID4+IDI0ICksCiAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCB0YWcgPj4gMTYgKSwKICAgICAgICAgICAgICAgICAoRlRfQ2hhcikoIHRhZyA+PiA4ICApLApAQCAtMzYzLDcgKzM2Miw3IEBACiAgICAgfTsKIAogCi0gICAgRlRfVFJBQ0UyKCggInR0X2ZhY2VfbG9hZF9mb250X2RpcjogJTA4cFxuIiwgZmFjZSApKTsKKyAgICBGVF9UUkFDRTIoKCAidHRfZmFjZV9sb2FkX2ZvbnRfZGlyOiAlcFxuIiwgKHZvaWQgKilmYWNlICkpOwogCiAgICAgLyogcmVhZCB0aGUgb2Zmc2V0IHRhYmxlICovCiAKQEAgLTM5Nyw3ICszOTYsMTUgQEAKICAgICAgIH0KICAgICB9CiAgICAgZWxzZQorICAgIHsKICAgICAgIHZhbGlkX2VudHJpZXMgPSBzZm50Lm51bV90YWJsZXM7CisgICAgICBpZiAoICF2YWxpZF9lbnRyaWVzICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UyKCggInR0X2ZhY2VfbG9hZF9mb250X2Rpcjogbm8gdmFsaWQgdGFibGVzIGZvdW5kXG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKyAgICB9CiAKICAgICBmYWNlLT5udW1fdGFibGVzID0gdmFsaWRfZW50cmllczsKICAgICBmYWNlLT5mb3JtYXRfdGFnID0gc2ZudC5mb3JtYXRfdGFnOwpAQCAtOTE2LDcgKzkyMyw3IEBACiAgICAgICAvKiBsb2FkIGxhbmd1YWdlIHRhZ3MgKi8KICAgICAgIHsKICAgICAgICAgVFRfTGFuZ1RhZyAgZW50cnkgPSB0YWJsZS0+bGFuZ1RhZ3M7Ci0gICAgICAgIFRUX0xhbmdUYWcgIGxpbWl0ID0gZW50cnkgKyB0YWJsZS0+bnVtTGFuZ1RhZ1JlY29yZHM7CisgICAgICAgIFRUX0xhbmdUYWcgIGxpbWl0ID0gRlRfT0ZGU0VUKCBlbnRyeSwgdGFibGUtPm51bUxhbmdUYWdSZWNvcmRzICk7CiAKIAogICAgICAgICBmb3IgKCA7IGVudHJ5IDwgbGltaXQ7IGVudHJ5KysgKQpAQCAtMTMwNyw3ICsxMzE0LDcgQEAKICAgICAvKiB3ZSBkb24ndCBsb2FkIHRoZSBnbHlwaCBuYW1lcywgd2UgZG8gdGhhdCBpbiBhbm90aGVyICovCiAgICAgLyogbW9kdWxlICh0dHBvc3QpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgRlRfVFJBQ0UzKCggIkZvcm1hdFR5cGU6ICAgMHgleFxuIiwgcG9zdC0+Rm9ybWF0VHlwZSApKTsKKyAgICBGVF9UUkFDRTMoKCAiRm9ybWF0VHlwZTogICAweCVseFxuIiwgcG9zdC0+Rm9ybWF0VHlwZSApKTsKICAgICBGVF9UUkFDRTMoKCAiaXNGaXhlZFBpdGNoOiAgICVzXG4iLCBwb3N0LT5pc0ZpeGVkUGl0Y2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICIgIHllcyIgOiAiICAgbm8iICkpOwogCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dGxvYWQuaCBiL3NyYy9zZm50L3R0bG9hZC5oCmluZGV4IGNjMThjMTguLjRlNTNkOGIgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0bG9hZC5oCisrKyBiL3NyYy9zZm50L3R0bG9hZC5oCkBAIC01LDcgKzUsNyBAQAogICogICBMb2FkIHRoZSBiYXNpYyBUcnVlVHlwZSB0YWJsZXMsIGkuZS4sIHRhYmxlcyB0aGF0IGNhbiBiZSBlaXRoZXIgaW4KICAqICAgVFRGIG9yIE9URiBmb250cyAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjEsOSArMjEsOCBAQAogI2RlZmluZSBUVExPQURfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9UUlVFVFlQRV9UWVBFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dG10eC5jIGIvc3JjL3NmbnQvdHRtdHguYwppbmRleCBiNjcyNWM5Li4wMjExMjMzIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dG10eC5jCisrKyBiL3NyYy9zZm50L3R0bXR4LmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBMb2FkIHRoZSBtZXRyaWNzIHRhYmxlcyBjb21tb24gdG8gVFRGIGFuZCBPVEYgZm9udHMgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDEzICsxNiwxMiBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWdzLmg+CiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCi0jaW5jbHVkZSBGVF9TRVJWSUNFX01FVFJJQ1NfVkFSSUFUSU9OU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtZXRyaWMuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAidHRtdHguaCIKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0bXR4LmggYi9zcmMvc2ZudC90dG10eC5oCmluZGV4IDViMGI2MGIuLmRiYTY1Y2EgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0bXR4LmgKKysrIGIvc3JjL3NmbnQvdHRtdHguaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIExvYWQgdGhlIG1ldHJpY3MgdGFibGVzIGNvbW1vbiB0byBUVEYgYW5kIE9URiBmb250cyAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsOSArMjAsOCBAQAogI2RlZmluZSBUVE1UWF9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1RSVUVUWVBFX1RZUEVTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0cG9zdC5jIGIvc3JjL3NmbnQvdHRwb3N0LmMKaW5kZXggNjM2YTBhMC4uZTkzYTRiZiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRwb3N0LmMKKysrIGIvc3JjL3NmbnQvdHRwb3N0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgIFBvc3RTY3JpcHQgbmFtZSB0YWJsZSBwcm9jZXNzaW5nIGZvciBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZm9udHMKICAqICAgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTI1LDEwICsyNSw5IEBACiAgICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBR1NfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL3R0dGFncy5oPgogCiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1BPU1RTQ1JJUFRfTkFNRVMKQEAgLTU0LDcgKzUzLDcgQEAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BPU1RTQ1JJUFRfTkFNRVMKIAogCi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmg+CiAKICNkZWZpbmUgTUFDX05BTUUoIHggKSAgKEZUX1N0cmluZyopcHNuYW1lcy0+bWFjaW50b3NoX25hbWUoIChGVF9VSW50KSh4KSApCiAKQEAgLTI0MCw3ICsyMzksNyBAQAogICAgICAgICAgIGJyZWFrOwogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9UUkFDRTYoKCAibG9hZF9mb3JtYXRfMjA6ICVkIGJ5dGUgbGVmdCBpbiBwb3N0IHRhYmxlXG4iLAorICAgICAgICAgIEZUX1RSQUNFNigoICJsb2FkX2Zvcm1hdF8yMDogJWxkIGJ5dGUgbGVmdCBpbiBwb3N0IHRhYmxlXG4iLAogICAgICAgICAgICAgICAgICAgICAgIHBvc3RfbGltaXQgLSBGVF9TVFJFQU1fUE9TKCkgKSk7CiAKICAgICAgICAgICBpZiAoIEZUX1JFQURfQllURSggbGVuICkgKQpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRwb3N0LmggYi9zcmMvc2ZudC90dHBvc3QuaAppbmRleCA4MTJhMGZjLi45NGM3ZDE2IDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dHBvc3QuaAorKysgYi9zcmMvc2ZudC90dHBvc3QuaApAQCAtNSw3ICs1LDcgQEAKICAqICAgUG9zdFNjcmlwdCBuYW1lIHRhYmxlIHByb2Nlc3NpbmcgZm9yIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBmb250cwogICogICAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjMsNyArMjMsNyBAQAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0c2JpdC5jIGIvc3JjL3NmbnQvdHRzYml0LmMKaW5kZXggMjNiZDlkNy4uOWRkNDQxOSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRzYml0LmMKKysrIGIvc3JjL3NmbnQvdHRzYml0LmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZW1iZWRkZWQgYml0bWFwIHN1cHBvcnQgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIENvcHlyaWdodCAyMDEzIGJ5IEdvb2dsZSwgSW5jLgpAQCAtMTksMTEgKzE5LDEwIEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKLSNpbmNsdWRlIEZUX0JJVE1BUF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWdzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRiaXRtYXAuaD4KIAogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTCkBAIC0zNDgsNyArMzQ3LDcgQEAKICAgICAgICAgICAgIEZUX1RSQUNFMigoICJ0dF9mYWNlX2xvYWRfc3RyaWtlX21ldHJpY3M6IgogICAgICAgICAgICAgICAgICAgICAgICAgIiBzYW5pdGl6aW5nIGludmFsaWQgYXNjZW5kZXIgYW5kIGRlc2NlbmRlclxuIgogICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiIHZhbHVlcyBmb3Igc3RyaWtlICVkICglZHBwZW0sICVkcHBlbSlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiIHZhbHVlcyBmb3Igc3RyaWtlICVsZCAoJWRwcGVtLCAlZHBwZW0pXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWtlX2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+eF9wcGVtLCBtZXRyaWNzLT55X3BwZW0gKSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0c2JpdC5oIGIvc3JjL3NmbnQvdHRzYml0LmgKaW5kZXggNWFiOGZmNS4uYjg2N2U0MyAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRzYml0LmgKKysrIGIvc3JjL3NmbnQvdHRzYml0LmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZW1iZWRkZWQgYml0bWFwIHN1cHBvcnQgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDcgKzIwLDYgQEAKICNkZWZpbmUgVFRTQklUX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSAidHRsb2FkLmgiCiAKIApkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvd29mZjJ0YWdzLmMgYi9zcmMvc2ZudC93b2ZmMnRhZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDlmMmU2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3NmbnQvd29mZjJ0YWdzLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogd29mZjJ0YWdzLmMKKyAqCisgKiAgIFdPRkYyIEZvbnQgdGFibGUgdGFncyAoYmFzZSkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgYnkKKyAqIE5pa2hpbCBSYW1ha3Jpc2huYW4sIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWdzLmg+CisjaW5jbHVkZSAid29mZjJ0YWdzLmgiCisKKyAgLyoKKyAgICogUmV0dXJuIHRhZyBmcm9tIGluZGV4IGluIHRoZSBvcmRlciBnaXZlbiBpbiBXT0ZGMiBzcGVjaWZpY2F0aW9uLgorICAgKgorICAgKiBTZWUKKyAgICoKKyAgICogICAgICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dPRkYyLyN0YWJsZV9kaXJfZm9ybWF0CisgICAqCisgICAqIGZvciBkZXRhaWxzLgorICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9VTG9uZyApCisgIHdvZmYyX2tub3duX3RhZ3MoIEZUX0J5dGUgIGluZGV4ICkKKyAgeworICAgIGNvbnN0IEZUX1VMb25nICBrbm93bl90YWdzWzYzXSA9CisgICAgeworICAgICAgRlRfTUFLRV9UQUcoJ2MnLCAnbScsICdhJywgJ3AnKSwgIC8qICAwICAqLworICAgICAgRlRfTUFLRV9UQUcoJ2gnLCAnZScsICdhJywgJ2QnKSwgIC8qICAxICAqLworICAgICAgRlRfTUFLRV9UQUcoJ2gnLCAnaCcsICdlJywgJ2EnKSwgIC8qICAyICAqLworICAgICAgRlRfTUFLRV9UQUcoJ2gnLCAnbScsICd0JywgJ3gnKSwgIC8qICAzICAqLworICAgICAgRlRfTUFLRV9UQUcoJ20nLCAnYScsICd4JywgJ3AnKSwgIC8qICA0ICAqLworICAgICAgRlRfTUFLRV9UQUcoJ24nLCAnYScsICdtJywgJ2UnKSwgIC8qICA1ICAqLworICAgICAgRlRfTUFLRV9UQUcoJ08nLCAnUycsICcvJywgJzInKSwgIC8qICA2ICAqLworICAgICAgRlRfTUFLRV9UQUcoJ3AnLCAnbycsICdzJywgJ3QnKSwgIC8qICA3ICAqLworICAgICAgRlRfTUFLRV9UQUcoJ2MnLCAndicsICd0JywgJyAnKSwgIC8qICA4ICAqLworICAgICAgRlRfTUFLRV9UQUcoJ2YnLCAncCcsICdnJywgJ20nKSwgIC8qICA5ICAqLworICAgICAgRlRfTUFLRV9UQUcoJ2cnLCAnbCcsICd5JywgJ2YnKSwgIC8qICAxMCAqLworICAgICAgRlRfTUFLRV9UQUcoJ2wnLCAnbycsICdjJywgJ2EnKSwgIC8qICAxMSAqLworICAgICAgRlRfTUFLRV9UQUcoJ3AnLCAncicsICdlJywgJ3AnKSwgIC8qICAxMiAqLworICAgICAgRlRfTUFLRV9UQUcoJ0MnLCAnRicsICdGJywgJyAnKSwgIC8qICAxMyAqLworICAgICAgRlRfTUFLRV9UQUcoJ1YnLCAnTycsICdSJywgJ0cnKSwgIC8qICAxNCAqLworICAgICAgRlRfTUFLRV9UQUcoJ0UnLCAnQicsICdEJywgJ1QnKSwgIC8qICAxNSAqLworICAgICAgRlRfTUFLRV9UQUcoJ0UnLCAnQicsICdMJywgJ0MnKSwgIC8qICAxNiAqLworICAgICAgRlRfTUFLRV9UQUcoJ2cnLCAnYScsICdzJywgJ3AnKSwgIC8qICAxNyAqLworICAgICAgRlRfTUFLRV9UQUcoJ2gnLCAnZCcsICdtJywgJ3gnKSwgIC8qICAxOCAqLworICAgICAgRlRfTUFLRV9UQUcoJ2snLCAnZScsICdyJywgJ24nKSwgIC8qICAxOSAqLworICAgICAgRlRfTUFLRV9UQUcoJ0wnLCAnVCcsICdTJywgJ0gnKSwgIC8qICAyMCAqLworICAgICAgRlRfTUFLRV9UQUcoJ1AnLCAnQycsICdMJywgJ1QnKSwgIC8qICAyMSAqLworICAgICAgRlRfTUFLRV9UQUcoJ1YnLCAnRCcsICdNJywgJ1gnKSwgIC8qICAyMiAqLworICAgICAgRlRfTUFLRV9UQUcoJ3YnLCAnaCcsICdlJywgJ2EnKSwgIC8qICAyMyAqLworICAgICAgRlRfTUFLRV9UQUcoJ3YnLCAnbScsICd0JywgJ3gnKSwgIC8qICAyNCAqLworICAgICAgRlRfTUFLRV9UQUcoJ0InLCAnQScsICdTJywgJ0UnKSwgIC8qICAyNSAqLworICAgICAgRlRfTUFLRV9UQUcoJ0cnLCAnRCcsICdFJywgJ0YnKSwgIC8qICAyNiAqLworICAgICAgRlRfTUFLRV9UQUcoJ0cnLCAnUCcsICdPJywgJ1MnKSwgIC8qICAyNyAqLworICAgICAgRlRfTUFLRV9UQUcoJ0cnLCAnUycsICdVJywgJ0InKSwgIC8qICAyOCAqLworICAgICAgRlRfTUFLRV9UQUcoJ0UnLCAnQicsICdTJywgJ0MnKSwgIC8qICAyOSAqLworICAgICAgRlRfTUFLRV9UQUcoJ0onLCAnUycsICdUJywgJ0YnKSwgIC8qICAzMCAqLworICAgICAgRlRfTUFLRV9UQUcoJ00nLCAnQScsICdUJywgJ0gnKSwgIC8qICAzMSAqLworICAgICAgRlRfTUFLRV9UQUcoJ0MnLCAnQicsICdEJywgJ1QnKSwgIC8qICAzMiAqLworICAgICAgRlRfTUFLRV9UQUcoJ0MnLCAnQicsICdMJywgJ0MnKSwgIC8qICAzMyAqLworICAgICAgRlRfTUFLRV9UQUcoJ0MnLCAnTycsICdMJywgJ1InKSwgIC8qICAzNCAqLworICAgICAgRlRfTUFLRV9UQUcoJ0MnLCAnUCcsICdBJywgJ0wnKSwgIC8qICAzNSAqLworICAgICAgRlRfTUFLRV9UQUcoJ1MnLCAnVicsICdHJywgJyAnKSwgIC8qICAzNiAqLworICAgICAgRlRfTUFLRV9UQUcoJ3MnLCAnYicsICdpJywgJ3gnKSwgIC8qICAzNyAqLworICAgICAgRlRfTUFLRV9UQUcoJ2EnLCAnYycsICduJywgJ3QnKSwgIC8qICAzOCAqLworICAgICAgRlRfTUFLRV9UQUcoJ2EnLCAndicsICdhJywgJ3InKSwgIC8qICAzOSAqLworICAgICAgRlRfTUFLRV9UQUcoJ2InLCAnZCcsICdhJywgJ3QnKSwgIC8qICA0MCAqLworICAgICAgRlRfTUFLRV9UQUcoJ2InLCAnbCcsICdvJywgJ2MnKSwgIC8qICA0MSAqLworICAgICAgRlRfTUFLRV9UQUcoJ2InLCAncycsICdsJywgJ24nKSwgIC8qICA0MiAqLworICAgICAgRlRfTUFLRV9UQUcoJ2MnLCAndicsICdhJywgJ3InKSwgIC8qICA0MyAqLworICAgICAgRlRfTUFLRV9UQUcoJ2YnLCAnZCcsICdzJywgJ2MnKSwgIC8qICA0NCAqLworICAgICAgRlRfTUFLRV9UQUcoJ2YnLCAnZScsICdhJywgJ3QnKSwgIC8qICA0NSAqLworICAgICAgRlRfTUFLRV9UQUcoJ2YnLCAnbScsICd0JywgJ3gnKSwgIC8qICA0NiAqLworICAgICAgRlRfTUFLRV9UQUcoJ2YnLCAndicsICdhJywgJ3InKSwgIC8qICA0NyAqLworICAgICAgRlRfTUFLRV9UQUcoJ2cnLCAndicsICdhJywgJ3InKSwgIC8qICA0OCAqLworICAgICAgRlRfTUFLRV9UQUcoJ2gnLCAncycsICd0JywgJ3knKSwgIC8qICA0OSAqLworICAgICAgRlRfTUFLRV9UQUcoJ2onLCAndScsICdzJywgJ3QnKSwgIC8qICA1MCAqLworICAgICAgRlRfTUFLRV9UQUcoJ2wnLCAnYycsICdhJywgJ3InKSwgIC8qICA1MSAqLworICAgICAgRlRfTUFLRV9UQUcoJ20nLCAnbycsICdyJywgJ3QnKSwgIC8qICA1MiAqLworICAgICAgRlRfTUFLRV9UQUcoJ20nLCAnbycsICdyJywgJ3gnKSwgIC8qICA1MyAqLworICAgICAgRlRfTUFLRV9UQUcoJ28nLCAncCcsICdiJywgJ2QnKSwgIC8qICA1NCAqLworICAgICAgRlRfTUFLRV9UQUcoJ3AnLCAncicsICdvJywgJ3AnKSwgIC8qICA1NSAqLworICAgICAgRlRfTUFLRV9UQUcoJ3QnLCAncicsICdhJywgJ2snKSwgIC8qICA1NiAqLworICAgICAgRlRfTUFLRV9UQUcoJ1onLCAnYScsICdwJywgJ2YnKSwgIC8qICA1NyAqLworICAgICAgRlRfTUFLRV9UQUcoJ1MnLCAnaScsICdsJywgJ2YnKSwgIC8qICA1OCAqLworICAgICAgRlRfTUFLRV9UQUcoJ0cnLCAnbCcsICdhJywgJ3QnKSwgIC8qICA1OSAqLworICAgICAgRlRfTUFLRV9UQUcoJ0cnLCAnbCcsICdvJywgJ2MnKSwgIC8qICA2MCAqLworICAgICAgRlRfTUFLRV9UQUcoJ0YnLCAnZScsICdhJywgJ3QnKSwgIC8qICA2MSAqLworICAgICAgRlRfTUFLRV9UQUcoJ1MnLCAnaScsICdsJywgJ2wnKSwgIC8qICA2MiAqLworICAgIH07CisKKworICAgIGlmICggaW5kZXggPiA2MiApCisgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBrbm93bl90YWdzW2luZGV4XTsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvd29mZjJ0YWdzLmggYi9zcmMvc2ZudC93b2ZmMnRhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDM3Yzc3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3NmbnQvd29mZjJ0YWdzLmgKQEAgLTAsMCArMSwzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB3b2ZmMnRhZ3MuaAorICoKKyAqICAgV09GRkYyIEZvbnQgdGFibGUgdGFncyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgYnkKKyAqIE5pa2hpbCBSYW1ha3Jpc2huYW4sIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KKworCisjaWZuZGVmIFdPRkYyVEFHU19ICisjZGVmaW5lIFdPRkYyVEFHU19ICisKKworI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2NvbXBpbGVyLW1hY3Jvcy5oPgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgRlRfTE9DQUwoIEZUX1VMb25nICkKKyAgd29mZjJfa25vd25fdGFncyggRlRfQnl0ZSAgaW5kZXggKTsKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBXT0ZGMlRBR1NfSCAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9KYW1maWxlIGIvc3JjL3Ntb290aC9KYW1maWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2ExY2VkLi4wMDAwMDAwCi0tLSBhL3NyYy9zbW9vdGgvSmFtZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSMgRnJlZVR5cGUgMiBzcmMvc21vb3RoIEphbWZpbGUKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgYnkKLSMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgotIwotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAotIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCi0jIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91Ci0jIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0Ci0jIGZ1bGx5LgotCi1TdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgc21vb3RoIDsKLQotewotICBsb2NhbCAgX3NvdXJjZXMgOwotCi0gIGlmICQoRlQyX01VTFRJKQotICB7Ci0gICAgX3NvdXJjZXMgPSBmdGdyYXlzCi0gICAgICAgICAgICAgICBmdHNtb290aAotICAgICAgICAgICAgICAgZnRzcGljCi0gICAgICAgICAgICAgICA7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgX3NvdXJjZXMgPSBzbW9vdGggOwotICB9Ci0KLSAgTGlicmFyeSAgJChGVDJfTElCKSA6ICQoX3NvdXJjZXMpLmMgOwotfQotCi0jIGVuZCBvZiBzcmMvc21vb3RoIEphbWZpbGUKZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvZnRncmF5cy5jIGIvc3JjL3Ntb290aC9mdGdyYXlzLmMKaW5kZXggZmQzNTdhNS4uNjgxOTAwZiAxMDA2NDQKLS0tIGEvc3JjL3Ntb290aC9mdGdyYXlzLmMKKysrIGIvc3JjL3Ntb290aC9mdGdyYXlzLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBBIG5ldyBgcGVyZmVjdCcgYW50aS1hbGlhc2luZyByZW5kZXJlciAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjc4LDEyICsyNzgsMTEgQEAKICNlbHNlIC8qICFTVEFOREFMT05FXyAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgImZ0Z3JheXMuaCIKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICi0jaW5jbHVkZSBGVF9PVVRMSU5FX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRvdXRsbi5oPgogCiAjaW5jbHVkZSAiZnRzbWVycnMuaCIKIApAQCAtMTY0OSw3ICsxNjQ4LDcgQEAKICAgICAgIGlmICggIXJhcy5pbnZhbGlkICkKICAgICAgICAgZ3JheV9yZWNvcmRfY2VsbCggUkFTX1ZBUiApOwogCi0gICAgICBGVF9UUkFDRTcoKCAiYmFuZCBbJWQuLiVkXTogJWQgY2VsbCVzXG4iLAorICAgICAgRlRfVFJBQ0U3KCggImJhbmQgWyVkLi4lZF06ICVsZCBjZWxsJXNcbiIsCiAgICAgICAgICAgICAgICAgICByYXMubWluX2V5LAogICAgICAgICAgICAgICAgICAgcmFzLm1heF9leSwKICAgICAgICAgICAgICAgICAgIHJhcy5udW1fY2VsbHMsCmRpZmYgLS1naXQgYS9zcmMvc21vb3RoL2Z0Z3JheXMuaCBiL3NyYy9zbW9vdGgvZnRncmF5cy5oCmluZGV4IGU5ZjljN2EuLmNhYmE2MzIgMTAwNjQ0Ci0tLSBhL3NyYy9zbW9vdGgvZnRncmF5cy5oCisrKyBiL3NyYy9zbW9vdGgvZnRncmF5cy5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgRnJlZVR5cGUgc21vb3RoIHJlbmRlcmVyIGRlY2xhcmF0aW9uCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgImZ0aW1hZ2UuaCIKICNlbHNlCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lNQUdFX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGltYWdlLmg+CiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9zcmMvc21vb3RoL2Z0c21lcnJzLmggYi9zcmMvc21vb3RoL2Z0c21lcnJzLmgKaW5kZXggZDUyYzBkZC4uZTkzZjNkZiAxMDA2NDQKLS0tIGEvc3JjL3Ntb290aC9mdHNtZXJycy5oCisrKyBiL3NyYy9zbW9vdGgvZnRzbWVycnMuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIHNtb290aCByZW5kZXJlciBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIEZUU01FUlJTX0hfCiAjZGVmaW5lIEZUU01FUlJTX0hfCiAKLSNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kZXJyLmg+CiAKICN1bmRlZiBGVEVSUk9SU19IXwogCkBAIC0zNCw3ICszNCw3IEBACiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFNtb290aF9FcnJfCiAjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfU21vb3RoCiAKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KIAogI2VuZGlmIC8qIEZUU01FUlJTX0hfICovCiAKZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvZnRzbW9vdGguYyBiL3NyYy9zbW9vdGgvZnRzbW9vdGguYwppbmRleCBjZDAzNGQyLi41ZDY2YmQ2IDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL2Z0c21vb3RoLmMKKysrIGIvc3JjL3Ntb290aC9mdHNtb290aC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgQW50aS1hbGlhc2luZyByZW5kZXJlciBpbnRlcmZhY2UgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDQ2ICsxNiwxNSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlIEZUX09VVExJTkVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdG91dGxuLmg+CiAjaW5jbHVkZSAiZnRzbW9vdGguaCIKICNpbmNsdWRlICJmdGdyYXlzLmgiCiAKICNpbmNsdWRlICJmdHNtZXJycy5oIgogCiAKLSAgLyogaW5pdGlhbGl6ZSByZW5kZXJlciAtLSBpbml0IGl0cyByYXN0ZXIgKi8KLSAgc3RhdGljIEZUX0Vycm9yCi0gIGZ0X3Ntb290aF9pbml0KCBGVF9SZW5kZXJlciAgcmVuZGVyICkKLSAgewotCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HCi0KLSAgICBGVF9WZWN0b3IqICBzdWIgPSByZW5kZXItPnJvb3QubGlicmFyeS0+bGNkX2dlb21ldHJ5OwotCi0KLSAgICAvKiBzZXQgdXAgZGVmYXVsdCBzdWJwaXhlbCBnZW9tZXRyeSBmb3Igc3RyaXBlZCBSR0IgcGFuZWxzLiAqLwotICAgIHN1YlswXS54ID0gLTIxOwotICAgIHN1YlswXS55ID0gMDsKLSAgICBzdWJbMV0ueCA9IDA7Ci0gICAgc3ViWzFdLnkgPSAwOwotICAgIHN1YlsyXS54ID0gMjE7Ci0gICAgc3ViWzJdLnkgPSAwOwotCi0jZWxpZiAwICAgLyogb3IgZWxzZSwgb25jZSBDbGVhclR5cGUgcGF0ZW50cyBleHBpcmUgKi8KLQotICAgIEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyKCByZW5kZXItPnJvb3QubGlicmFyeSwgRlRfTENEX0ZJTFRFUl9ERUZBVUxUICk7Ci0KLSNlbmRpZgotCi0gICAgcmVuZGVyLT5jbGF6ei0+cmFzdGVyX2NsYXNzLT5yYXN0ZXJfcmVzZXQoIHJlbmRlci0+cmFzdGVyLCBOVUxMLCAwICk7Ci0KLSAgICByZXR1cm4gMDsKLSAgfQotCi0KICAgLyogc2V0cyByZW5kZXItc3BlY2lmaWMgbW9kZSAqLwogICBzdGF0aWMgRlRfRXJyb3IKICAgZnRfc21vb3RoX3NldF9tb2RlKCBGVF9SZW5kZXJlciAgcmVuZGVyLApAQCAtMTA3LDE0ICs3NiwzNTkgQEAKICAgICAgIEZUX091dGxpbmVfR2V0X0NCb3goICZzbG90LT5vdXRsaW5lLCBjYm94ICk7CiAgIH0KIAorICB0eXBlZGVmIHN0cnVjdCBUT3JpZ2luXworICB7CisgICAgdW5zaWduZWQgY2hhciogIG9yaWdpbjsgIC8qIHBpeG1hcCBvcmlnaW4gYXQgdGhlIGJvdHRvbS1sZWZ0ICovCisgICAgaW50ICAgICAgICAgICAgIHBpdGNoOyAgIC8qIHBpdGNoIHRvIGdvIGRvd24gb25lIHJvdyAqLwogCi0gIC8qIGNvbnZlcnQgYSBzbG90J3MgZ2x5cGggaW1hZ2UgaW50byBhIGJpdG1hcCAqLworICB9IFRPcmlnaW47CisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcKKworICAvKiBpbml0aWFsaXplIHJlbmRlcmVyIC0tIGluaXQgaXRzIHJhc3RlciAqLwogICBzdGF0aWMgRlRfRXJyb3IKLSAgZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKCBGVF9SZW5kZXJlciAgICAgICByZW5kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICAgICAgc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgICBtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogIG9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgICByZXF1aXJlZF9tb2RlICkKKyAgZnRfc21vb3RoX2luaXQoIEZUX1JlbmRlcmVyICByZW5kZXIgKQorICB7CisgICAgRlRfVmVjdG9yKiAgc3ViID0gcmVuZGVyLT5yb290LmxpYnJhcnktPmxjZF9nZW9tZXRyeTsKKworCisgICAgLyogc2V0IHVwIGRlZmF1bHQgc3VicGl4ZWwgZ2VvbWV0cnkgZm9yIHN0cmlwZWQgUkdCIHBhbmVscy4gKi8KKyAgICBzdWJbMF0ueCA9IC0yMTsKKyAgICBzdWJbMF0ueSA9IDA7CisgICAgc3ViWzFdLnggPSAwOworICAgIHN1YlsxXS55ID0gMDsKKyAgICBzdWJbMl0ueCA9IDIxOworICAgIHN1YlsyXS55ID0gMDsKKworICAgIHJlbmRlci0+Y2xhenotPnJhc3Rlcl9jbGFzcy0+cmFzdGVyX3Jlc2V0KCByZW5kZXItPnJhc3RlciwgTlVMTCwgMCApOworCisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIC8qIFRoaXMgZnVuY3Rpb24gd3JpdGVzIGV2ZXJ5IHRoaXJkIGJ5dGUgaW4gZGlyZWN0IHJlbmRlcmluZyBtb2RlICovCisgIHN0YXRpYyB2b2lkCisgIGZ0X3Ntb290aF9sY2Rfc3BhbnMoIGludCAgICAgICAgICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1NwYW4qICBzcGFucywKKyAgICAgICAgICAgICAgICAgICAgICAgVE9yaWdpbiogICAgICAgIHRhcmdldCApCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyKiAgZHN0X2xpbmUgPSB0YXJnZXQtPm9yaWdpbiAtIHkgKiB0YXJnZXQtPnBpdGNoOworICAgIHVuc2lnbmVkIGNoYXIqICBkc3Q7CisgICAgdW5zaWduZWQgc2hvcnQgIHc7CisKKworICAgIGZvciAoIDsgY291bnQtLTsgc3BhbnMrKyApCisgICAgICBmb3IgKCBkc3QgPSBkc3RfbGluZSArIHNwYW5zLT54ICogMywgdyA9IHNwYW5zLT5sZW47IHctLTsgZHN0ICs9IDMgKQorICAgICAgICAqZHN0ID0gc3BhbnMtPmNvdmVyYWdlOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfc21vb3RoX3Jhc3Rlcl9sY2QoIEZUX1JlbmRlcmVyICByZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCogICBiaXRtYXAgKQorICB7CisgICAgRlRfRXJyb3IgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBGVF9WZWN0b3IqICAgIHN1YiAgID0gcmVuZGVyLT5yb290LmxpYnJhcnktPmxjZF9nZW9tZXRyeTsKKyAgICBGVF9Qb3MgICAgICAgIHgsIHk7CisKKyAgICBGVF9SYXN0ZXJfUGFyYW1zICAgcGFyYW1zOworICAgIFRPcmlnaW4gICAgICAgICAgICB0YXJnZXQ7CisKKworICAgIC8qIFJlbmRlciAzIHNlcGFyYXRlIGNvdmVyYWdlIGJpdG1hcHMsIHNoaWZ0aW5nIHRoZSBvdXRsaW5lLiAgKi8KKyAgICAvKiBTZXQgdXAgZGlyZWN0IHJlbmRlcmluZyB0byByZWNvcmQgdGhlbSBvbiBlYWNoIHRoaXJkIGJ5dGUuICovCisgICAgcGFyYW1zLnNvdXJjZSAgICAgPSBvdXRsaW5lOworICAgIHBhcmFtcy5mbGFncyAgICAgID0gRlRfUkFTVEVSX0ZMQUdfQUEgfCBGVF9SQVNURVJfRkxBR19ESVJFQ1Q7CisgICAgcGFyYW1zLmdyYXlfc3BhbnMgPSAoRlRfU3BhbkZ1bmMpZnRfc21vb3RoX2xjZF9zcGFuczsKKyAgICBwYXJhbXMudXNlciAgICAgICA9ICZ0YXJnZXQ7CisKKyAgICBwYXJhbXMuY2xpcF9ib3gueE1pbiA9IDA7CisgICAgcGFyYW1zLmNsaXBfYm94LnlNaW4gPSAwOworICAgIHBhcmFtcy5jbGlwX2JveC54TWF4ID0gYml0bWFwLT53aWR0aDsKKyAgICBwYXJhbXMuY2xpcF9ib3gueU1heCA9IGJpdG1hcC0+cm93czsKKworICAgIGlmICggYml0bWFwLT5waXRjaCA8IDAgKQorICAgICAgdGFyZ2V0Lm9yaWdpbiA9IGJpdG1hcC0+YnVmZmVyOworICAgIGVsc2UKKyAgICAgIHRhcmdldC5vcmlnaW4gPSBiaXRtYXAtPmJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICsgKCBiaXRtYXAtPnJvd3MgLSAxICkgKiAodW5zaWduZWQgaW50KWJpdG1hcC0+cGl0Y2g7CisKKyAgICB0YXJnZXQucGl0Y2ggPSBiaXRtYXAtPnBpdGNoOworCisgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdWJbMF0ueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLXN1YlswXS55ICk7CisgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7CisgICAgeCA9IHN1YlswXS54OworICAgIHkgPSBzdWJbMF0ueTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHRhcmdldC5vcmlnaW4rKzsKKyAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViWzBdLnggLSBzdWJbMV0ueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViWzBdLnkgLSBzdWJbMV0ueSApOworICAgIGVycm9yID0gcmVuZGVyLT5yYXN0ZXJfcmVuZGVyKCByZW5kZXItPnJhc3RlciwgJnBhcmFtcyApOworICAgIHggPSBzdWJbMV0ueDsKKyAgICB5ID0gc3ViWzFdLnk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICB0YXJnZXQub3JpZ2luKys7CisgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlsxXS54IC0gc3ViWzJdLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlsxXS55IC0gc3ViWzJdLnkgKTsKKyAgICBlcnJvciA9IHJlbmRlci0+cmFzdGVyX3JlbmRlciggcmVuZGVyLT5yYXN0ZXIsICZwYXJhbXMgKTsKKyAgICB4ID0gc3ViWzJdLng7CisgICAgeSA9IHN1YlsyXS55OworCisgIEV4aXQ6CisgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsIHgsIHkgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X3Ntb290aF9yYXN0ZXJfbGNkdiggRlRfUmVuZGVyZXIgIHJlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CaXRtYXAqICAgYml0bWFwICkKKyAgeworICAgIEZUX0Vycm9yICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBpbnQgICAgICAgICAgcGl0Y2ggPSBiaXRtYXAtPnBpdGNoOworICAgIEZUX1ZlY3RvciogICBzdWIgICA9IHJlbmRlci0+cm9vdC5saWJyYXJ5LT5sY2RfZ2VvbWV0cnk7CisgICAgRlRfUG9zICAgICAgIHgsIHk7CisKKyAgICBGVF9SYXN0ZXJfUGFyYW1zICBwYXJhbXM7CisKKworICAgIHBhcmFtcy50YXJnZXQgPSBiaXRtYXA7CisgICAgcGFyYW1zLnNvdXJjZSA9IG91dGxpbmU7CisgICAgcGFyYW1zLmZsYWdzICA9IEZUX1JBU1RFUl9GTEFHX0FBOworCisgICAgLyogUmVuZGVyIDMgc2VwYXJhdGUgY292ZXJhZ2UgYml0bWFwcywgc2hpZnRpbmcgdGhlIG91dGxpbmUuICovCisgICAgLyogTm90aWNlIHRoYXQgdGhlIHN1YnBpeGVsIGdlb21ldHJ5IHZlY3RvcnMgYXJlIHJvdGF0ZWQuICAgICovCisgICAgLyogVHJpcGxlIHRoZSBwaXRjaCB0byByZW5kZXIgb24gZWFjaCB0aGlyZCByb3cuICAgICAgICAgICAgKi8KKyAgICBiaXRtYXAtPnBpdGNoICo9IDM7CisgICAgYml0bWFwLT5yb3dzICAvPSAzOworCisgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdWJbMF0ueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViWzBdLnggKTsKKyAgICBlcnJvciA9IHJlbmRlci0+cmFzdGVyX3JlbmRlciggcmVuZGVyLT5yYXN0ZXIsICZwYXJhbXMgKTsKKyAgICB4ID0gc3ViWzBdLnk7CisgICAgeSA9IC1zdWJbMF0ueDsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGJpdG1hcC0+YnVmZmVyICs9IHBpdGNoOworICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJbMF0ueSAtIHN1YlsxXS55LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJbMV0ueCAtIHN1YlswXS54ICk7CisgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7CisgICAgeCA9IHN1YlsxXS55OworICAgIHkgPSAtc3ViWzFdLng7CisgICAgYml0bWFwLT5idWZmZXIgLT0gcGl0Y2g7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBiaXRtYXAtPmJ1ZmZlciArPSAyICogcGl0Y2g7CisgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlsxXS55IC0gc3ViWzJdLnksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlsyXS54IC0gc3ViWzFdLnggKTsKKyAgICBlcnJvciA9IHJlbmRlci0+cmFzdGVyX3JlbmRlciggcmVuZGVyLT5yYXN0ZXIsICZwYXJhbXMgKTsKKyAgICB4ID0gc3ViWzJdLnk7CisgICAgeSA9IC1zdWJbMl0ueDsKKyAgICBiaXRtYXAtPmJ1ZmZlciAtPSAyICogcGl0Y2g7CisKKyAgRXhpdDoKKyAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggb3V0bGluZSwgeCwgeSApOworCisgICAgYml0bWFwLT5waXRjaCAvPSAzOworICAgIGJpdG1hcC0+cm93cyAgKj0gMzsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisjZWxzZSAgIC8qIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HICovCisKKyAgLyogaW5pdGlhbGl6ZSByZW5kZXJlciAtLSBpbml0IGl0cyByYXN0ZXIgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X3Ntb290aF9pbml0KCBGVF9SZW5kZXJlciAgcmVuZGVyICkKKyAgeworICAgIC8qIHNldCB1cCBkZWZhdWx0IExDRCBmaWx0ZXJpbmcgKi8KKyAgICBGVF9MaWJyYXJ5X1NldExjZEZpbHRlciggcmVuZGVyLT5yb290LmxpYnJhcnksIEZUX0xDRF9GSUxURVJfREVGQVVMVCApOworCisgICAgcmVuZGVyLT5jbGF6ei0+cmFzdGVyX2NsYXNzLT5yYXN0ZXJfcmVzZXQoIHJlbmRlci0+cmFzdGVyLCBOVUxMLCAwICk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X3Ntb290aF9yYXN0ZXJfbGNkKCBGVF9SZW5kZXJlciAgcmVuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CaXRtYXAqICAgYml0bWFwICkKKyAgeworICAgIEZUX0Vycm9yICAgIGVycm9yICAgICAgPSBGVF9FcnJfT2s7CisgICAgRlRfVmVjdG9yKiAgcG9pbnRzICAgICA9IG91dGxpbmUtPnBvaW50czsKKyAgICBGVF9WZWN0b3IqICBwb2ludHNfZW5kID0gRlRfT0ZGU0VUKCBwb2ludHMsIG91dGxpbmUtPm5fcG9pbnRzICk7CisgICAgRlRfVmVjdG9yKiAgdmVjOworCisgICAgRlRfUmFzdGVyX1BhcmFtcyAgcGFyYW1zOworCisKKyAgICBwYXJhbXMudGFyZ2V0ID0gYml0bWFwOworICAgIHBhcmFtcy5zb3VyY2UgPSBvdXRsaW5lOworICAgIHBhcmFtcy5mbGFncyAgPSBGVF9SQVNURVJfRkxBR19BQTsKKworICAgIC8qIGltcGxvZGUgb3V0bGluZSAqLworICAgIGZvciAoIHZlYyA9IHBvaW50czsgdmVjIDwgcG9pbnRzX2VuZDsgdmVjKysgKQorICAgICAgdmVjLT54ICo9IDM7CisKKyAgICAvKiByZW5kZXIgb3V0bGluZSBpbnRvIHRoZSBiaXRtYXAgKi8KKyAgICBlcnJvciA9IHJlbmRlci0+cmFzdGVyX3JlbmRlciggcmVuZGVyLT5yYXN0ZXIsICZwYXJhbXMgKTsKKworICAgIC8qIGRlZmxhdGUgb3V0bGluZSAqLworICAgIGZvciAoIHZlYyA9IHBvaW50czsgdmVjIDwgcG9pbnRzX2VuZDsgdmVjKysgKQorICAgICAgdmVjLT54IC89IDM7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9zbW9vdGhfcmFzdGVyX2xjZHYoIEZUX1JlbmRlcmVyICByZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQml0bWFwKiAgIGJpdG1hcCApCisgIHsKKyAgICBGVF9FcnJvciAgICBlcnJvciAgICAgID0gRlRfRXJyX09rOworICAgIEZUX1ZlY3RvciogIHBvaW50cyAgICAgPSBvdXRsaW5lLT5wb2ludHM7CisgICAgRlRfVmVjdG9yKiAgcG9pbnRzX2VuZCA9IEZUX09GRlNFVCggcG9pbnRzLCBvdXRsaW5lLT5uX3BvaW50cyApOworICAgIEZUX1ZlY3RvciogIHZlYzsKKworICAgIEZUX1Jhc3Rlcl9QYXJhbXMgIHBhcmFtczsKKworCisgICAgcGFyYW1zLnRhcmdldCA9IGJpdG1hcDsKKyAgICBwYXJhbXMuc291cmNlID0gb3V0bGluZTsKKyAgICBwYXJhbXMuZmxhZ3MgID0gRlRfUkFTVEVSX0ZMQUdfQUE7CisKKyAgICAvKiBpbXBsb2RlIG91dGxpbmUgKi8KKyAgICBmb3IgKCB2ZWMgPSBwb2ludHM7IHZlYyA8IHBvaW50c19lbmQ7IHZlYysrICkKKyAgICAgIHZlYy0+eSAqPSAzOworCisgICAgLyogcmVuZGVyIG91dGxpbmUgaW50byB0aGUgYml0bWFwICovCisgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7CisKKyAgICAvKiBkZWZsYXRlIG91dGxpbmUgKi8KKyAgICBmb3IgKCB2ZWMgPSBwb2ludHM7IHZlYyA8IHBvaW50c19lbmQ7IHZlYysrICkKKyAgICAgIHZlYy0+eSAvPSAzOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKyNlbmRpZiAgLyogRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgKi8KKworLyogT3ZlcnNhbXBsaW5nIHNjYWxlIHRvIGJlIHVzZWQgaW4gcmVuZGVyaW5nIG92ZXJsYXBzICovCisjZGVmaW5lIFNDQUxFICAoIDEgPDwgMiApCisKKyAgLyogVGhpcyBmdW5jdGlvbiBhdmVyYWdlcyBpbmZsYXRlZCBzcGFucyBpbiBkaXJlY3QgcmVuZGVyaW5nIG1vZGUgKi8KKyAgc3RhdGljIHZvaWQKKyAgZnRfc21vb3RoX292ZXJsYXBfc3BhbnMoIGludCAgICAgICAgICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3BhbiogIHNwYW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVE9yaWdpbiogICAgICAgIHRhcmdldCApCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyKiAgZHN0ID0gdGFyZ2V0LT5vcmlnaW4gLSAoIHkgLyBTQ0FMRSApICogdGFyZ2V0LT5waXRjaDsKKyAgICB1bnNpZ25lZCBzaG9ydCAgeDsKKyAgICB1bnNpZ25lZCBpbnQgICAgY292ZXIsIHN1bTsKKworCisgICAgLyogV2hlbiBhY2N1bXVsYXRpbmcgdGhlIG92ZXJzYW1wbGVkIHNwYW5zIHdlIG5lZWQgdG8gYXNzdXJlIHRoYXQgICovCisgICAgLyogZnVsbHkgY292ZXJlZCBwaXhlbHMgYXJlIGVxdWFsIHRvIDI1NSBhbmQgZG8gbm90IG92ZXJmbG93LiAgICAgICovCisgICAgLyogSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIFNDQUxFIGlzIGEgcG93ZXIgb2YgMiwgZWFjaCBzdWJwaXhlbCAgICovCisgICAgLyogY292ZXIgY2FuIGFsc28gcmVhY2ggYSBwb3dlciBvZiAyIGFmdGVyIHJvdW5kaW5nLCBhbmQgdGhlIHRvdGFsICovCisgICAgLyogaXMgY2xhbXBlZCB0byAyNTUgd2hlbiBpdCBhZGRzIHVwIHRvIDI1Ni4gICAgICAgICAgICAgICAgICAgICAgICovCisgICAgZm9yICggOyBjb3VudC0tOyBzcGFucysrICkKKyAgICB7CisgICAgICBjb3ZlciA9ICggc3BhbnMtPmNvdmVyYWdlICsgU0NBTEUgKiBTQ0FMRSAvIDIgKSAvICggU0NBTEUgKiBTQ0FMRSApOworICAgICAgZm9yICggeCA9IDA7IHggPCBzcGFucy0+bGVuOyB4KysgKQorICAgICAgeworICAgICAgICBzdW0gICAgICAgICAgICAgICAgICAgICAgICAgICA9IGRzdFsoIHNwYW5zLT54ICsgeCApIC8gU0NBTEVdICsgY292ZXI7CisgICAgICAgIGRzdFsoIHNwYW5zLT54ICsgeCApIC8gU0NBTEVdID0gKHVuc2lnbmVkIGNoYXIpKCBzdW0gLSAoIHN1bSA+PiA4ICkgKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9zbW9vdGhfcmFzdGVyX292ZXJsYXAoIEZUX1JlbmRlcmVyICByZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQml0bWFwKiAgIGJpdG1hcCApCisgIHsKKyAgICBGVF9FcnJvciAgICBlcnJvciAgICAgID0gRlRfRXJyX09rOworICAgIEZUX1ZlY3RvciogIHBvaW50cyAgICAgPSBvdXRsaW5lLT5wb2ludHM7CisgICAgRlRfVmVjdG9yKiAgcG9pbnRzX2VuZCA9IEZUX09GRlNFVCggcG9pbnRzLCBvdXRsaW5lLT5uX3BvaW50cyApOworICAgIEZUX1ZlY3RvciogIHZlYzsKKworICAgIEZUX1Jhc3Rlcl9QYXJhbXMgICBwYXJhbXM7CisgICAgVE9yaWdpbiAgICAgICAgICAgIHRhcmdldDsKKworCisgICAgLyogUmVqZWN0IG91dGxpbmVzIHRoYXQgYXJlIHRvbyB3aWRlIGZvciAxNi1iaXQgRlRfU3Bhbi4gICAgICAgKi8KKyAgICAvKiBPdGhlciBsaW1pdHMgYXJlIGFwcGxpZWQgdXBzdHJlYW0gd2l0aCB0aGUgc2FtZSBlcnJvciBjb2RlLiAqLworICAgIGlmICggYml0bWFwLT53aWR0aCAqIFNDQUxFID4gMHg3RkZGICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggUmFzdGVyX092ZXJmbG93ICk7CisKKyAgICAvKiBTZXQgdXAgZGlyZWN0IHJlbmRlcmluZyB0byBhdmVyYWdlIG92ZXJzYW1wbGVkIHNwYW5zLiAqLworICAgIHBhcmFtcy5zb3VyY2UgICAgID0gb3V0bGluZTsKKyAgICBwYXJhbXMuZmxhZ3MgICAgICA9IEZUX1JBU1RFUl9GTEFHX0FBIHwgRlRfUkFTVEVSX0ZMQUdfRElSRUNUOworICAgIHBhcmFtcy5ncmF5X3NwYW5zID0gKEZUX1NwYW5GdW5jKWZ0X3Ntb290aF9vdmVybGFwX3NwYW5zOworICAgIHBhcmFtcy51c2VyICAgICAgID0gJnRhcmdldDsKKworICAgIHBhcmFtcy5jbGlwX2JveC54TWluID0gMDsKKyAgICBwYXJhbXMuY2xpcF9ib3gueU1pbiA9IDA7CisgICAgcGFyYW1zLmNsaXBfYm94LnhNYXggPSBiaXRtYXAtPndpZHRoICogU0NBTEU7CisgICAgcGFyYW1zLmNsaXBfYm94LnlNYXggPSBiaXRtYXAtPnJvd3MgICogU0NBTEU7CisKKyAgICBpZiAoIGJpdG1hcC0+cGl0Y2ggPCAwICkKKyAgICAgIHRhcmdldC5vcmlnaW4gPSBiaXRtYXAtPmJ1ZmZlcjsKKyAgICBlbHNlCisgICAgICB0YXJnZXQub3JpZ2luID0gYml0bWFwLT5idWZmZXIKKyAgICAgICAgICAgICAgICAgICAgICArICggYml0bWFwLT5yb3dzIC0gMSApICogKHVuc2lnbmVkIGludCliaXRtYXAtPnBpdGNoOworCisgICAgdGFyZ2V0LnBpdGNoID0gYml0bWFwLT5waXRjaDsKKworICAgIC8qIGluZmxhdGUgb3V0bGluZSAqLworICAgIGZvciAoIHZlYyA9IHBvaW50czsgdmVjIDwgcG9pbnRzX2VuZDsgdmVjKysgKQorICAgIHsKKyAgICAgIHZlYy0+eCAqPSBTQ0FMRTsKKyAgICAgIHZlYy0+eSAqPSBTQ0FMRTsKKyAgICB9CisKKyAgICAvKiByZW5kZXIgb3V0bGluZSBpbnRvIHRoZSBiaXRtYXAgKi8KKyAgICBlcnJvciA9IHJlbmRlci0+cmFzdGVyX3JlbmRlciggcmVuZGVyLT5yYXN0ZXIsICZwYXJhbXMgKTsKKworICAgIC8qIGRlZmxhdGUgb3V0bGluZSAqLworICAgIGZvciAoIHZlYyA9IHBvaW50czsgdmVjIDwgcG9pbnRzX2VuZDsgdmVjKysgKQorICAgIHsKKyAgICAgIHZlYy0+eCAvPSBTQ0FMRTsKKyAgICAgIHZlYy0+eSAvPSBTQ0FMRTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworI3VuZGVmIFNDQUxFCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X3Ntb290aF9yZW5kZXIoIEZUX1JlbmRlcmVyICAgICAgIHJlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICAgICAgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgICAgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgb3JpZ2luICkKICAgewogICAgIEZUX0Vycm9yICAgICBlcnJvciAgID0gRlRfRXJyX09rOwogICAgIEZUX091dGxpbmUqICBvdXRsaW5lID0gJnNsb3QtPm91dGxpbmU7CkBAIC0xMjIsMTAgKzQzNiw2IEBACiAgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSAgPSByZW5kZXItPnJvb3QubWVtb3J5OwogICAgIEZUX1BvcyAgICAgICB4X3NoaWZ0ID0gMDsKICAgICBGVF9Qb3MgICAgICAgeV9zaGlmdCA9IDA7Ci0gICAgRlRfSW50ICAgICAgIGhtdWwgICAgPSAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTENEICk7Ci0gICAgRlRfSW50ICAgICAgIHZtdWwgICAgPSAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTENEX1YgKTsKLQotICAgIEZUX1Jhc3Rlcl9QYXJhbXMgIHBhcmFtczsKIAogCiAgICAgLyogY2hlY2sgZ2x5cGggaW1hZ2UgZm9ybWF0ICovCkBAIC0xMzYsNyArNDQ2LDEwIEBACiAgICAgfQogCiAgICAgLyogY2hlY2sgbW9kZSAqLwotICAgIGlmICggbW9kZSAhPSByZXF1aXJlZF9tb2RlICkKKyAgICBpZiAoIG1vZGUgIT0gRlRfUkVOREVSX01PREVfTk9STUFMICYmCisgICAgICAgICBtb2RlICE9IEZUX1JFTkRFUl9NT0RFX0xJR0hUICAmJgorICAgICAgICAgbW9kZSAhPSBGVF9SRU5ERVJfTU9ERV9MQ0QgICAgJiYKKyAgICAgICAgIG1vZGUgIT0gRlRfUkVOREVSX01PREVfTENEX1YgICkKICAgICB7CiAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBDYW5ub3RfUmVuZGVyX0dseXBoICk7CiAgICAgICBnb3RvIEV4aXQ7CkBAIC0xNTUsNiArNDY4LDkgQEAKICAgICAgIGdvdG8gRXhpdDsKICAgICB9CiAKKyAgICBpZiAoICFiaXRtYXAtPnJvd3MgfHwgIWJpdG1hcC0+cGl0Y2ggKQorICAgICAgZ290byBFeGl0OworCiAgICAgLyogYWxsb2NhdGUgbmV3IG9uZSAqLwogICAgIGlmICggRlRfQUxMT0NfTVVMVCggYml0bWFwLT5idWZmZXIsIGJpdG1hcC0+cm93cywgYml0bWFwLT5waXRjaCApICkKICAgICAgIGdvdG8gRXhpdDsKQEAgLTE3OCwxODggKzQ5NCw1NyBAQAogICAgIGlmICggeF9zaGlmdCB8fCB5X3NoaWZ0ICkKICAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBvdXRsaW5lLCB4X3NoaWZ0LCB5X3NoaWZ0ICk7CiAKLSAgICAvKiBzZXQgdXAgcGFyYW1ldGVycyAqLwotICAgIHBhcmFtcy50YXJnZXQgPSBiaXRtYXA7Ci0gICAgcGFyYW1zLnNvdXJjZSA9IG91dGxpbmU7Ci0gICAgcGFyYW1zLmZsYWdzICA9IEZUX1JBU1RFUl9GTEFHX0FBOworICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgfHwKKyAgICAgICAgIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTElHSFQgICkKKyAgICB7CisgICAgICBpZiAoIG91dGxpbmUtPmZsYWdzICYgRlRfT1VUTElORV9PVkVSTEFQICkKKyAgICAgICAgZXJyb3IgPSBmdF9zbW9vdGhfcmFzdGVyX292ZXJsYXAoIHJlbmRlciwgb3V0bGluZSwgYml0bWFwICk7CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIEZUX1Jhc3Rlcl9QYXJhbXMgIHBhcmFtczsKKworCisgICAgICAgIHBhcmFtcy50YXJnZXQgPSBiaXRtYXA7CisgICAgICAgIHBhcmFtcy5zb3VyY2UgPSBvdXRsaW5lOworICAgICAgICBwYXJhbXMuZmxhZ3MgID0gRlRfUkFTVEVSX0ZMQUdfQUE7CisKKyAgICAgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTENEICkKKyAgICAgICAgZXJyb3IgPSBmdF9zbW9vdGhfcmFzdGVyX2xjZCAoIHJlbmRlciwgb3V0bGluZSwgYml0bWFwICk7CisgICAgICBlbHNlIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0RfViApCisgICAgICAgIGVycm9yID0gZnRfc21vb3RoX3Jhc3Rlcl9sY2R2KCByZW5kZXIsIG91dGxpbmUsIGJpdG1hcCApOwogCiAjaWZkZWYgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcKIAotICAgIC8qIGltcGxvZGUgb3V0bGluZSBpZiBuZWVkZWQgKi8KLSAgICB7Ci0gICAgICBGVF9WZWN0b3IqICBwb2ludHMgICAgID0gb3V0bGluZS0+cG9pbnRzOwotICAgICAgRlRfVmVjdG9yKiAgcG9pbnRzX2VuZCA9IHBvaW50cyArIG91dGxpbmUtPm5fcG9pbnRzOwotICAgICAgRlRfVmVjdG9yKiAgdmVjOwotCi0KLSAgICAgIGlmICggaG11bCApCi0gICAgICAgIGZvciAoIHZlYyA9IHBvaW50czsgdmVjIDwgcG9pbnRzX2VuZDsgdmVjKysgKQotICAgICAgICAgIHZlYy0+eCAqPSAzOwotCi0gICAgICBpZiAoIHZtdWwgKQotICAgICAgICBmb3IgKCB2ZWMgPSBwb2ludHM7IHZlYyA8IHBvaW50c19lbmQ7IHZlYysrICkKLSAgICAgICAgICB2ZWMtPnkgKj0gMzsKLSAgICB9Ci0KLSAgICAvKiByZW5kZXIgb3V0bGluZSBpbnRvIHRoZSBiaXRtYXAgKi8KLSAgICBlcnJvciA9IHJlbmRlci0+cmFzdGVyX3JlbmRlciggcmVuZGVyLT5yYXN0ZXIsICZwYXJhbXMgKTsKLQotICAgIC8qIGRlZmxhdGUgb3V0bGluZSBpZiBuZWVkZWQgKi8KLSAgICB7Ci0gICAgICBGVF9WZWN0b3IqICBwb2ludHMgICAgID0gb3V0bGluZS0+cG9pbnRzOwotICAgICAgRlRfVmVjdG9yKiAgcG9pbnRzX2VuZCA9IHBvaW50cyArIG91dGxpbmUtPm5fcG9pbnRzOwotICAgICAgRlRfVmVjdG9yKiAgdmVjOwotCi0KLSAgICAgIGlmICggaG11bCApCi0gICAgICAgIGZvciAoIHZlYyA9IHBvaW50czsgdmVjIDwgcG9pbnRzX2VuZDsgdmVjKysgKQotICAgICAgICAgIHZlYy0+eCAvPSAzOwotCi0gICAgICBpZiAoIHZtdWwgKQotICAgICAgICBmb3IgKCB2ZWMgPSBwb2ludHM7IHZlYyA8IHBvaW50c19lbmQ7IHZlYysrICkKLSAgICAgICAgICB2ZWMtPnkgLz0gMzsKLSAgICB9Ci0KLSAgICBpZiAoIGVycm9yICkKLSAgICAgIGdvdG8gRXhpdDsKLQotICAgIC8qIGZpbmFsbHkgYXBwbHkgZmlsdGVyaW5nICovCi0gICAgaWYgKCBobXVsIHx8IHZtdWwgKQotICAgIHsKLSAgICAgIEZUX0J5dGUqICAgICAgICAgICAgICAgICBsY2Rfd2VpZ2h0czsKLSAgICAgIEZUX0JpdG1hcF9MY2RGaWx0ZXJGdW5jICBsY2RfZmlsdGVyX2Z1bmM7Ci0KLQotICAgICAgLyogUGVyLWZhY2UgTENEIGZpbHRlcmluZyB0YWtlcyBwcmlvcml0eSBpZiBzZXQgdXAuICovCi0gICAgICBpZiAoIHNsb3QtPmZhY2UgJiYgc2xvdC0+ZmFjZS0+aW50ZXJuYWwtPmxjZF9maWx0ZXJfZnVuYyApCisgICAgICAvKiBmaW5hbGx5IGFwcGx5IGZpbHRlcmluZyAqLwogICAgICAgewotICAgICAgICBsY2Rfd2VpZ2h0cyAgICAgPSBzbG90LT5mYWNlLT5pbnRlcm5hbC0+bGNkX3dlaWdodHM7Ci0gICAgICAgIGxjZF9maWx0ZXJfZnVuYyA9IHNsb3QtPmZhY2UtPmludGVybmFsLT5sY2RfZmlsdGVyX2Z1bmM7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGxjZF93ZWlnaHRzICAgICA9IHNsb3QtPmxpYnJhcnktPmxjZF93ZWlnaHRzOwotICAgICAgICBsY2RfZmlsdGVyX2Z1bmMgPSBzbG90LT5saWJyYXJ5LT5sY2RfZmlsdGVyX2Z1bmM7Ci0gICAgICB9Ci0KLSAgICAgIGlmICggbGNkX2ZpbHRlcl9mdW5jICkKLSAgICAgICAgbGNkX2ZpbHRlcl9mdW5jKCBiaXRtYXAsIGxjZF93ZWlnaHRzICk7Ci0gICAgfQotCi0jZWxzZSAvKiAhRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgKi8KLQotICAgIGlmICggaG11bCApICAvKiBsY2QgKi8KLSAgICB7Ci0gICAgICBGVF9CeXRlKiAgbGluZTsKLSAgICAgIEZUX0J5dGUqICB0ZW1wID0gTlVMTDsKLSAgICAgIEZUX1VJbnQgICBpLCBqOwotCi0gICAgICB1bnNpZ25lZCBpbnQgIGhlaWdodCA9IGJpdG1hcC0+cm93czsKLSAgICAgIHVuc2lnbmVkIGludCAgd2lkdGggID0gYml0bWFwLT53aWR0aDsKLSAgICAgIGludCAgICAgICAgICAgcGl0Y2ggID0gYml0bWFwLT5waXRjaDsKLQotICAgICAgRlRfVmVjdG9yKiAgc3ViID0gc2xvdC0+bGlicmFyeS0+bGNkX2dlb21ldHJ5OworICAgICAgICBGVF9CeXRlKiAgICAgICAgICAgICAgICAgbGNkX3dlaWdodHM7CisgICAgICAgIEZUX0JpdG1hcF9MY2RGaWx0ZXJGdW5jICBsY2RfZmlsdGVyX2Z1bmM7CiAKIAotICAgICAgLyogUmVuZGVyIDMgc2VwYXJhdGUgbW9ub2Nocm9tZSBiaXRtYXBzLCBzaGlmdGluZyB0aGUgb3V0bGluZS4gICovCi0gICAgICB3aWR0aCAvPSAzOwotCi0gICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggb3V0bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAtc3ViWzBdLngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLXN1YlswXS55ICk7Ci0gICAgICBlcnJvciA9IHJlbmRlci0+cmFzdGVyX3JlbmRlciggcmVuZGVyLT5yYXN0ZXIsICZwYXJhbXMgKTsKLSAgICAgIGlmICggZXJyb3IgKQotICAgICAgICBnb3RvIEV4aXQ7Ci0KLSAgICAgIGJpdG1hcC0+YnVmZmVyICs9IHdpZHRoOwotICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViWzBdLnggLSBzdWJbMV0ueCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJbMF0ueSAtIHN1YlsxXS55ICk7Ci0gICAgICBlcnJvciA9IHJlbmRlci0+cmFzdGVyX3JlbmRlciggcmVuZGVyLT5yYXN0ZXIsICZwYXJhbXMgKTsKLSAgICAgIGJpdG1hcC0+YnVmZmVyIC09IHdpZHRoOwotICAgICAgaWYgKCBlcnJvciApCi0gICAgICAgIGdvdG8gRXhpdDsKLQotICAgICAgYml0bWFwLT5idWZmZXIgKz0gMiAqIHdpZHRoOwotICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViWzFdLnggLSBzdWJbMl0ueCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJbMV0ueSAtIHN1YlsyXS55ICk7Ci0gICAgICBlcnJvciA9IHJlbmRlci0+cmFzdGVyX3JlbmRlciggcmVuZGVyLT5yYXN0ZXIsICZwYXJhbXMgKTsKLSAgICAgIGJpdG1hcC0+YnVmZmVyIC09IDIgKiB3aWR0aDsKLSAgICAgIGlmICggZXJyb3IgKQotICAgICAgICBnb3RvIEV4aXQ7Ci0KLSAgICAgIHhfc2hpZnQgLT0gc3ViWzJdLng7Ci0gICAgICB5X3NoaWZ0IC09IHN1YlsyXS55OwotCi0gICAgICAvKiBYWFg6IFJlYXJyYW5nZSB0aGUgYnl0ZXMgYWNjb3JkaW5nIHRvIEZUX1BJWEVMX01PREVfTENELiAgICAqLwotICAgICAgLyogWFhYOiBJdCBpcyBtb3JlIGVmZmljaWVudCB0byByZW5kZXIgZXZlcnkgdGhpcmQgYnl0ZSBhYm92ZS4gKi8KLQotICAgICAgaWYgKCBGVF9BTExPQyggdGVtcCwgKEZUX1VMb25nKXBpdGNoICkgKQotICAgICAgICBnb3RvIEV4aXQ7Ci0KLSAgICAgIGZvciAoIGkgPSAwOyBpIDwgaGVpZ2h0OyBpKysgKQotICAgICAgewotICAgICAgICBsaW5lID0gYml0bWFwLT5idWZmZXIgKyBpICogKEZUX1VMb25nKXBpdGNoOwotICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHdpZHRoOyBqKysgKQorICAgICAgICAvKiBQZXItZmFjZSBMQ0QgZmlsdGVyaW5nIHRha2VzIHByaW9yaXR5IGlmIHNldCB1cC4gKi8KKyAgICAgICAgaWYgKCBzbG90LT5mYWNlICYmIHNsb3QtPmZhY2UtPmludGVybmFsLT5sY2RfZmlsdGVyX2Z1bmMgKQogICAgICAgICB7Ci0gICAgICAgICAgdGVtcFszICogaiAgICBdID0gbGluZVtqXTsKLSAgICAgICAgICB0ZW1wWzMgKiBqICsgMV0gPSBsaW5lW2ogKyB3aWR0aF07Ci0gICAgICAgICAgdGVtcFszICogaiArIDJdID0gbGluZVtqICsgd2lkdGggKyB3aWR0aF07CisgICAgICAgICAgbGNkX3dlaWdodHMgICAgID0gc2xvdC0+ZmFjZS0+aW50ZXJuYWwtPmxjZF93ZWlnaHRzOworICAgICAgICAgIGxjZF9maWx0ZXJfZnVuYyA9IHNsb3QtPmZhY2UtPmludGVybmFsLT5sY2RfZmlsdGVyX2Z1bmM7CiAgICAgICAgIH0KLSAgICAgICAgRlRfTUVNX0NPUFkoIGxpbmUsIHRlbXAsIHBpdGNoICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGxjZF93ZWlnaHRzICAgICA9IHNsb3QtPmxpYnJhcnktPmxjZF93ZWlnaHRzOworICAgICAgICAgIGxjZF9maWx0ZXJfZnVuYyA9IHNsb3QtPmxpYnJhcnktPmxjZF9maWx0ZXJfZnVuYzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggbGNkX2ZpbHRlcl9mdW5jICkKKyAgICAgICAgICBsY2RfZmlsdGVyX2Z1bmMoIGJpdG1hcCwgbGNkX3dlaWdodHMgKTsKICAgICAgIH0KIAotICAgICAgRlRfRlJFRSggdGVtcCApOworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HICovCisKICAgICB9Ci0gICAgZWxzZSBpZiAoIHZtdWwgKSAgLyogbGNkX3YgKi8KLSAgICB7Ci0gICAgICBpbnQgIHBpdGNoICA9IGJpdG1hcC0+cGl0Y2g7Ci0KLSAgICAgIEZUX1ZlY3RvciogIHN1YiA9IHNsb3QtPmxpYnJhcnktPmxjZF9nZW9tZXRyeTsKLQotCi0gICAgICAvKiBSZW5kZXIgMyBzZXBhcmF0ZSBtb25vY2hyb21lIGJpdG1hcHMsIHNoaWZ0aW5nIHRoZSBvdXRsaW5lLiAqLwotICAgICAgLyogTm90aWNlIHRoYXQgdGhlIHN1YnBpeGVsIGdlb21ldHJ5IHZlY3RvcnMgYXJlIHJvdGF0ZWQuICAgICAgKi8KLSAgICAgIC8qIFRyaXBsZSB0aGUgcGl0Y2ggdG8gcmVuZGVyIG9uIGVhY2ggdGhpcmQgcm93LiAgICAgICAgICAgICAgICovCi0gICAgICBiaXRtYXAtPnBpdGNoICo9IDM7Ci0gICAgICBiaXRtYXAtPnJvd3MgIC89IDM7Ci0KLSAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBvdXRsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdWJbMF0ueSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJbMF0ueCApOwotICAgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7Ci0gICAgICBpZiAoIGVycm9yICkKLSAgICAgICAgZ290byBFeGl0OwotCi0gICAgICBiaXRtYXAtPmJ1ZmZlciArPSBwaXRjaDsKLSAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBvdXRsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlswXS55IC0gc3ViWzFdLnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViWzFdLnggLSBzdWJbMF0ueCApOwotICAgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7Ci0gICAgICBiaXRtYXAtPmJ1ZmZlciAtPSBwaXRjaDsKLSAgICAgIGlmICggZXJyb3IgKQotICAgICAgICBnb3RvIEV4aXQ7Ci0KLSAgICAgIGJpdG1hcC0+YnVmZmVyICs9IDIgKiBwaXRjaDsKLSAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBvdXRsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlsxXS55IC0gc3ViWzJdLnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViWzJdLnggLSBzdWJbMV0ueCApOwotICAgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7Ci0gICAgICBiaXRtYXAtPmJ1ZmZlciAtPSAyICogcGl0Y2g7Ci0gICAgICBpZiAoIGVycm9yICkKLSAgICAgICAgZ290byBFeGl0OwotCi0gICAgICB4X3NoaWZ0IC09IHN1YlsyXS55OwotICAgICAgeV9zaGlmdCArPSBzdWJbMl0ueDsKLQotICAgICAgYml0bWFwLT5waXRjaCAvPSAzOwotICAgICAgYml0bWFwLT5yb3dzICAqPSAzOwotICAgIH0KLSAgICBlbHNlICAvKiBncmF5c2NhbGUgKi8KLSAgICAgIGVycm9yID0gcmVuZGVyLT5yYXN0ZXJfcmVuZGVyKCByZW5kZXItPnJhc3RlciwgJnBhcmFtcyApOwotCi0jZW5kaWYgLyogIUZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HICovCiAKICAgRXhpdDoKICAgICBpZiAoICFlcnJvciApCkBAIC0zODAsNDUgKzU2NSw2IEBACiAgIH0KIAogCi0gIC8qIGNvbnZlcnQgYSBzbG90J3MgZ2x5cGggaW1hZ2UgaW50byBhIGJpdG1hcCAqLwotICBzdGF0aWMgRlRfRXJyb3IKLSAgZnRfc21vb3RoX3JlbmRlciggRlRfUmVuZGVyZXIgICAgICAgcmVuZGVyLAotICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgICAgICBzbG90LAotICAgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgICBtb2RlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICBvcmlnaW4gKQotICB7Ci0gICAgaWYgKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xJR0hUICkKLSAgICAgIG1vZGUgPSBGVF9SRU5ERVJfTU9ERV9OT1JNQUw7Ci0KLSAgICByZXR1cm4gZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKCByZW5kZXIsIHNsb3QsIG1vZGUsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgKTsKLSAgfQotCi0KLSAgLyogY29udmVydCBhIHNsb3QncyBnbHlwaCBpbWFnZSBpbnRvIGEgaG9yaXpvbnRhbCBMQ0QgYml0bWFwICovCi0gIHN0YXRpYyBGVF9FcnJvcgotICBmdF9zbW9vdGhfcmVuZGVyX2xjZCggRlRfUmVuZGVyZXIgICAgICAgcmVuZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICAgICAgc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICAgIG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICBvcmlnaW4gKQotICB7Ci0gICAgcmV0dXJuIGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyggcmVuZGVyLCBzbG90LCBtb2RlLCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUkVOREVSX01PREVfTENEICk7Ci0gIH0KLQotCi0gIC8qIGNvbnZlcnQgYSBzbG90J3MgZ2x5cGggaW1hZ2UgaW50byBhIHZlcnRpY2FsIExDRCBiaXRtYXAgKi8KLSAgc3RhdGljIEZUX0Vycm9yCi0gIGZ0X3Ntb290aF9yZW5kZXJfbGNkX3YoIEZUX1JlbmRlcmVyICAgICAgIHJlbmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICAgICAgc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgICAgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgb3JpZ2luICkKLSAgewotICAgIHJldHVybiBmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMoIHJlbmRlciwgc2xvdCwgbW9kZSwgb3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JFTkRFUl9NT0RFX0xDRF9WICk7Ci0gIH0KLQotCiAgIEZUX0RFRklORV9SRU5ERVJFUigKICAgICBmdF9zbW9vdGhfcmVuZGVyZXJfY2xhc3MsCiAKQEAgLTQ0Niw1OCArNTkyLDQgQEAKICAgKQogCiAKLSAgRlRfREVGSU5FX1JFTkRFUkVSKAotICAgIGZ0X3Ntb290aF9sY2RfcmVuZGVyZXJfY2xhc3MsCi0KLSAgICAgIEZUX01PRFVMRV9SRU5ERVJFUiwKLSAgICAgIHNpemVvZiAoIEZUX1JlbmRlcmVyUmVjICksCi0KLSAgICAgICJzbW9vdGgtbGNkIiwKLSAgICAgIDB4MTAwMDBMLAotICAgICAgMHgyMDAwMEwsCi0KLSAgICAgIE5VTEwsICAgIC8qIG1vZHVsZSBzcGVjaWZpYyBpbnRlcmZhY2UgKi8KLQotICAgICAgKEZUX01vZHVsZV9Db25zdHJ1Y3RvcilmdF9zbW9vdGhfaW5pdCwgIC8qIG1vZHVsZV9pbml0ICAgKi8KLSAgICAgIChGVF9Nb2R1bGVfRGVzdHJ1Y3RvcikgTlVMTCwgICAgICAgICAgICAvKiBtb2R1bGVfZG9uZSAgICovCi0gICAgICAoRlRfTW9kdWxlX1JlcXVlc3RlcikgIE5VTEwsICAgICAgICAgICAgLyogZ2V0X2ludGVyZmFjZSAqLwotCi0gICAgRlRfR0xZUEhfRk9STUFUX09VVExJTkUsCi0KLSAgICAoRlRfUmVuZGVyZXJfUmVuZGVyRnVuYykgICBmdF9zbW9vdGhfcmVuZGVyX2xjZCwgIC8qIHJlbmRlcl9nbHlwaCAgICAqLwotICAgIChGVF9SZW5kZXJlcl9UcmFuc2Zvcm1GdW5jKWZ0X3Ntb290aF90cmFuc2Zvcm0sICAgLyogdHJhbnNmb3JtX2dseXBoICovCi0gICAgKEZUX1JlbmRlcmVyX0dldENCb3hGdW5jKSAgZnRfc21vb3RoX2dldF9jYm94LCAgICAvKiBnZXRfZ2x5cGhfY2JveCAgKi8KLSAgICAoRlRfUmVuZGVyZXJfU2V0TW9kZUZ1bmMpICBmdF9zbW9vdGhfc2V0X21vZGUsICAgIC8qIHNldF9tb2RlICAgICAgICAqLwotCi0gICAgKEZUX1Jhc3Rlcl9GdW5jcyopJmZ0X2dyYXlzX3Jhc3RlciAgICAgICAgICAgICAgICAvKiByYXN0ZXJfY2xhc3MgICAgKi8KLSAgKQotCi0KLSAgRlRfREVGSU5FX1JFTkRFUkVSKAotICAgIGZ0X3Ntb290aF9sY2R2X3JlbmRlcmVyX2NsYXNzLAotCi0gICAgICBGVF9NT0RVTEVfUkVOREVSRVIsCi0gICAgICBzaXplb2YgKCBGVF9SZW5kZXJlclJlYyApLAotCi0gICAgICAic21vb3RoLWxjZHYiLAotICAgICAgMHgxMDAwMEwsCi0gICAgICAweDIwMDAwTCwKLQotICAgICAgTlVMTCwgICAgLyogbW9kdWxlIHNwZWNpZmljIGludGVyZmFjZSAqLwotCi0gICAgICAoRlRfTW9kdWxlX0NvbnN0cnVjdG9yKWZ0X3Ntb290aF9pbml0LCAgLyogbW9kdWxlX2luaXQgICAqLwotICAgICAgKEZUX01vZHVsZV9EZXN0cnVjdG9yKSBOVUxMLCAgICAgICAgICAgIC8qIG1vZHVsZV9kb25lICAgKi8KLSAgICAgIChGVF9Nb2R1bGVfUmVxdWVzdGVyKSAgTlVMTCwgICAgICAgICAgICAvKiBnZXRfaW50ZXJmYWNlICovCi0KLSAgICBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSwKLQotICAgIChGVF9SZW5kZXJlcl9SZW5kZXJGdW5jKSAgIGZ0X3Ntb290aF9yZW5kZXJfbGNkX3YsICAvKiByZW5kZXJfZ2x5cGggICAgKi8KLSAgICAoRlRfUmVuZGVyZXJfVHJhbnNmb3JtRnVuYylmdF9zbW9vdGhfdHJhbnNmb3JtLCAgICAgLyogdHJhbnNmb3JtX2dseXBoICovCi0gICAgKEZUX1JlbmRlcmVyX0dldENCb3hGdW5jKSAgZnRfc21vb3RoX2dldF9jYm94LCAgICAgIC8qIGdldF9nbHlwaF9jYm94ICAqLwotICAgIChGVF9SZW5kZXJlcl9TZXRNb2RlRnVuYykgIGZ0X3Ntb290aF9zZXRfbW9kZSwgICAgICAvKiBzZXRfbW9kZSAgICAgICAgKi8KLQotICAgIChGVF9SYXN0ZXJfRnVuY3MqKSZmdF9ncmF5c19yYXN0ZXIgICAgICAgICAgICAgICAgICAvKiByYXN0ZXJfY2xhc3MgICAgKi8KLSAgKQotCi0KIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9mdHNtb290aC5oIGIvc3JjL3Ntb290aC9mdHNtb290aC5oCmluZGV4IGZiYjIxYTMuLjIyYTg4ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9zbW9vdGgvZnRzbW9vdGguaAorKysgYi9zcmMvc21vb3RoL2Z0c21vb3RoLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBBbnRpLWFsaWFzaW5nIHJlbmRlcmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsOCArMjAsNyBAQAogI2RlZmluZSBGVFNNT09USF9IXwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfUkVOREVSX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdHJlbmRlci5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpAQCAtMjksMTAgKzI4LDYgQEAKIAogICBGVF9ERUNMQVJFX1JFTkRFUkVSKCBmdF9zbW9vdGhfcmVuZGVyZXJfY2xhc3MgKQogCi0gIEZUX0RFQ0xBUkVfUkVOREVSRVIoIGZ0X3Ntb290aF9sY2RfcmVuZGVyZXJfY2xhc3MgKQotCi0gIEZUX0RFQ0xBUkVfUkVOREVSRVIoIGZ0X3Ntb290aF9sY2R2X3JlbmRlcmVyX2NsYXNzICkKLQogCiBGVF9FTkRfSEVBREVSCiAKZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvbW9kdWxlLm1rIGIvc3JjL3Ntb290aC9tb2R1bGUubWsKaW5kZXggNDRiNzZkZi4uOWIxNTA3ZiAxMDA2NDQKLS0tIGEvc3JjL3Ntb290aC9tb2R1bGUubWsKKysrIGIvc3JjL3Ntb290aC9tb2R1bGUubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCkBAIC0xOCwxMCArMTgsNiBAQAogZGVmaW5lIFNNT09USF9SRU5ERVJFUgogJChPUEVOX0RSSVZFUikgRlRfUmVuZGVyZXJfQ2xhc3MsIGZ0X3Ntb290aF9yZW5kZXJlcl9jbGFzcyAkKENMT1NFX0RSSVZFUikKICQoRUNIT19EUklWRVIpc21vb3RoICAgICQoRUNIT19EUklWRVJfREVTQylhbnRpLWFsaWFzZWQgYml0bWFwIHJlbmRlcmVyJChFQ0hPX0RSSVZFUl9ET05FKQotJChPUEVOX0RSSVZFUikgRlRfUmVuZGVyZXJfQ2xhc3MsIGZ0X3Ntb290aF9sY2RfcmVuZGVyZXJfY2xhc3MgJChDTE9TRV9EUklWRVIpCi0kKEVDSE9fRFJJVkVSKXNtb290aCAgICAkKEVDSE9fRFJJVkVSX0RFU0MpYW50aS1hbGlhc2VkIGJpdG1hcCByZW5kZXJlciBmb3IgTENEcyQoRUNIT19EUklWRVJfRE9ORSkKLSQoT1BFTl9EUklWRVIpIEZUX1JlbmRlcmVyX0NsYXNzLCBmdF9zbW9vdGhfbGNkdl9yZW5kZXJlcl9jbGFzcyAkKENMT1NFX0RSSVZFUikKLSQoRUNIT19EUklWRVIpc21vb3RoICAgICQoRUNIT19EUklWRVJfREVTQylhbnRpLWFsaWFzZWQgYml0bWFwIHJlbmRlcmVyIGZvciB2ZXJ0aWNhbCBMQ0RzJChFQ0hPX0RSSVZFUl9ET05FKQogZW5kZWYKIAogIyBFT0YKZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvcnVsZXMubWsgYi9zcmMvc21vb3RoL3J1bGVzLm1rCmluZGV4IDAxNTNhYzIuLmIwODA1NmYgMTAwNjQ0Ci0tLSBhL3NyYy9zbW9vdGgvcnVsZXMubWsKKysrIGIvc3JjL3Ntb290aC9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvc21vb3RoLmMgYi9zcmMvc21vb3RoL3Ntb290aC5jCmluZGV4IDljNTQzZDMuLjA0YjUzMWMgMTAwNjQ0Ci0tLSBhL3NyYy9zbW9vdGgvc21vb3RoLmMKKysrIGIvc3JjL3Ntb290aC9zbW9vdGguYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIGFudGktYWxpYXNpbmcgcmFzdGVyZXIgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNyw3ICsxNyw2IEBACiAKIAogI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KIAogI2luY2x1ZGUgImZ0Z3JheXMuYyIKICNpbmNsdWRlICJmdHNtb290aC5jIgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL0phbWZpbGUgYi9zcmMvdG9vbHMvSmFtZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc1MTYxZS4uMDAwMDAwMAotLS0gYS9zcmMvdG9vbHMvSmFtZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIyBKYW1maWxlIGZvciBzcmMvdG9vbHMKLSMKLVN1YkRpciBGVDJfVE9QIHNyYyB0b29scyA7Ci0KLU1haW4gIGFwaW5hbWVzIDogYXBpbmFtZXMuYyA7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvYWZibHVlLnBsIGIvc3JjL3Rvb2xzL2FmYmx1ZS5wbAppbmRleCA5MzdkNGVjLi5iYmM0ZjQ3IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvYWZibHVlLnBsCisrKyBiL3NyYy90b29scy9hZmJsdWUucGwKQEAgLTUsNyArNSw3IEBACiAjCiAjIFByb2Nlc3MgYSBibHVlIHpvbmUgY2hhcmFjdGVyIGRhdGEgZmlsZS4KICMKLSMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvZnRyYW5kb20vZnRyYW5kb20uYyBiL3NyYy90b29scy9mdHJhbmRvbS9mdHJhbmRvbS5jCmluZGV4IGFiNWNmYzkuLmFiNjI0MjkgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9mdHJhbmRvbS9mdHJhbmRvbS5jCisrKyBiL3NyYy90b29scy9mdHJhbmRvbS9mdHJhbmRvbS5jCkBAIC00NSw4ICs0NSw4IEBACiAjaW5jbHVkZSA8dGltZS5oPgogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX09VVExJTkVfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRvdXRsbi5oPgogCiAjZGVmaW5lIHRydWUgICAgIDEKICNkZWZpbmUgZmFsc2UgICAgMApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL2dsbmFtZXMucHkgYi9zcmMvdG9vbHMvZ2xuYW1lcy5weQppbmRleCBlMWI2MTNkLi5hMTljZTE3IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvZ2xuYW1lcy5weQorKysgYi9zcmMvdG9vbHMvZ2xuYW1lcy5weQpAQCAtNiw3ICs2LDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9tYWtlX2Rpc3RyaWJ1dGlvbl9hcmNoaXZlcy5weSBiL3NyYy90b29scy9tYWtlX2Rpc3RyaWJ1dGlvbl9hcmNoaXZlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMjllYjEyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rvb2xzL21ha2VfZGlzdHJpYnV0aW9uX2FyY2hpdmVzLnB5CkBAIC0wLDAgKzEsMjA4IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisiIiJHZW5lcmF0ZSBkaXN0cmlidXRpb24gYXJjaGl2ZXMgZm9yIGEgZ2l2ZW4gRnJlZVR5cGUgMiByZWxlYXNlLiIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGF0ZXhpdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCisKK19UT1BfRElSID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihfX2ZpbGVfXywgIi4uIiwgIi4uIiwgIi4uIikpCitfU0NSSVBUX0RJUiA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmpvaW4oX1RPUF9ESVIsICJidWlsZHMiLCAibWVzb24iLCAiIikpCisKKworZGVmIGdldF9jbWRfb3V0cHV0KGNtZCwgY3dkPU5vbmUpOgorICAgICIiIlJ1biBhIGNvbW1hbmQgYW5kIHJldHVybiBpdHMgb3V0cHV0IGFzIGEgc3RyaW5nLiIiIgorICAgIGlmIGN3ZCBpcyBub3QgTm9uZToKKyAgICAgICAgb3V0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBjd2Q9Y3dkKQorICAgIGVsc2U6CisgICAgICAgIG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCkKKyAgICByZXR1cm4gb3V0LmRlY29kZSgidXRmLTgiKS5yc3RyaXAoKQorCisKK2RlZiBpc19naXRfZGlyX2NsZWFuKGdpdF9kaXIpOgorICAgICIiIlJldHVybiBUcnVlIGlmZiB8Z2l0X2RpcnwgaXMgYSBnaXQgZGlyZWN0b3J5IGluIGNsZWFuIHN0YXRlLiIiIgorICAgIG91dCA9IGdldF9jbWRfb3V0cHV0KFsiZ2l0IiwgInN0YXR1cyIsICItLXBvcmNlbGFpbiJdLCBjd2Q9Z2l0X2RpcikKKyAgICByZXR1cm4gbGVuKG91dCkgPT0gMAorCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249X19kb2NfXykKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLXNvdXJjZV9kaXIiLCBkZWZhdWx0PV9UT1BfRElSLCBoZWxwPSJTb3VyY2UgZGlyZWN0b3J5IHBhdGguIgorICAgICkKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLXZlcnNpb24iLAorICAgICAgICBoZWxwPSgKKyAgICAgICAgICAgICJTcGVjaWZ5IGFsdGVybmF0ZSBGcmVlVHlwZSB2ZXJzaW9uIChpdCBpcyBvdGhlcndpc2UgZXh0cmFjdGVkIgorICAgICAgICAgICAgIiBmcm9tIGN1cnJlbnQgc291cmNlcyBieSBkZWZhdWx0KS4iCisgICAgICAgICksCisgICAgKQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tZ251LWNvbmZpZy1kaXIiLAorICAgICAgICBoZWxwPSgKKyAgICAgICAgICAgICJQYXRoIG9mIGlucHV0IGRpcmVjdG9yeSBjb250YWluaW5nIHJlY2VudCBgY29uZmlnLmd1ZXNzYCBhbmQiCisgICAgICAgICAgICAiIGBjb25maWcuc3ViYCBmaWxlcyBmcm9tIEdOVSBjb25maWcuIgorICAgICAgICApLAorICAgICkKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLWJ1aWxkLWRpciIsCisgICAgICAgIGhlbHA9IlNwZWNpZnkgYnVpbGQgZGlyZWN0b3J5LiBPbmx5IHVzZWQgZm9yIGRlYnVnZ2luZyB0aGlzIHNjcmlwdC4iLAorICAgICkKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLWlnbm9yZS1jbGVhbi1jaGVjayIsCisgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGhlbHA9KAorICAgICAgICAgICAgIkRvIG5vdCBjaGVjayBmb3IgYSBjbGVhbiBzb3VyY2UgZ2l0IHJlcG9zaXRvcnkuIE9ubHkgdXNlZCBmb3IiCisgICAgICAgICAgICAiIGRlYnVnZ2luZyB0aGlzIHNjcmlwdC4iCisgICAgICAgICksCisgICAgKQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIm91dHB1dF9kaXIiLCBoZWxwPSJPdXRwdXQgZGlyZWN0b3J5IGZvciBnZW5lcmF0ZWQgYXJjaGl2ZXMuIgorICAgICkKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBnaXRfZGlyID0gYXJncy5zb3VyY2VfZGlyIGlmIGFyZ3Muc291cmNlX2RpciBlbHNlIF9UT1BfRElSCisgICAgaWYgbm90IGFyZ3MuaWdub3JlX2NsZWFuX2NoZWNrIGFuZCBub3QgaXNfZ2l0X2Rpcl9jbGVhbihnaXRfZGlyKToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKKyAgICAgICAgICAgICJFUlJPUjogWW91ciBnaXQgcmVwb3NpdG9yeSBpcyBub3QgaW4gYSBjbGVhbiBzdGF0ZTogJXNcbiIKKyAgICAgICAgICAgICUgZ2l0X2RpcgorICAgICAgICApCisgICAgICAgIHJldHVybiAxCisKKyAgICBpZiBhcmdzLnZlcnNpb246CisgICAgICAgIHZlcnNpb24gPSBhcmdzLnZlcnNpb24KKyAgICBlbHNlOgorICAgICAgICAjIEV4dHJhY3QgRnJlZVR5cGUgdmVyc2lvbiBmcm9tIHNvdXJjZXMuCisgICAgICAgIHZlcnNpb24gPSBnZXRfY21kX291dHB1dCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1NDUklQVF9ESVIsICJleHRyYWN0X2ZyZWV0eXBlX3ZlcnNpb24ucHkiKSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RPUF9ESVIsICJpbmNsdWRlIiwgImZyZWV0eXBlIiwgImZyZWV0eXBlLmgiKSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgKQorCisgICAgIyBEZXRlcm1pbmUgdGhlIGJ1aWxkIGRpcmVjdG9yeS4gVGhpcyB3aWxsIGJlIGEgdGVtcG9yYXJ5IGZpbGUgdGhhdCBpcworICAgICMgY2xlYW5lZCB1cCBvbiBzY3JpcHQgZXhpdCBieSBkZWZhdWx0LCB1bmxlc3MgLS1idWlsZC1kaXI9RElSIGlzIHVzZWQsCisgICAgIyBpbiB3aGljaCBjYXNlIHdlIG9ubHkgY3JlYXRlIGFuZCBlbXB0eSB0aGUgZGlyZWN0b3J5LCBidXQgbmV2ZXIgcmVtb3ZlCisgICAgIyBpdHMgY29udGVudCBvbiBleGl0LgorICAgIGlmIGFyZ3MuYnVpbGRfZGlyOgorICAgICAgICBidWlsZF9kaXIgPSBhcmdzLmJ1aWxkX2RpcgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYnVpbGRfZGlyKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKGJ1aWxkX2RpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUmVtb3ZlIGFueXRoaW5nIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeSwgaWYgYW55LgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gb3MubGlzdGRpcihidWlsZF9kaXIpOgorICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihidWlsZF9kaXIsIGl0ZW0pCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGZpbGVfcGF0aCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZV9wYXRoKQorICAgIGVsc2U6CisgICAgICAgICMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgYW5kIGVuc3VyZSBpdCBpcyByZW1vdmVkIG9uIGV4aXQuCisgICAgICAgIGJ1aWxkX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSJmcmVldHlwZS1kaXN0LSIpCisKKyAgICAgICAgZGVmIGNsZWFuX2J1aWxkX2RpcigpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShidWlsZF9kaXIpCisKKyAgICAgICAgYXRleGl0LnJlZ2lzdGVyKGNsZWFuX2J1aWxkX2RpcikKKworICAgICMgQ29weSBhbGwgc291cmNlIGZpbGVzIGtub3duIHRvIGdpdCBpbnRvICRCVUlMRF9ESVIvZnJlZXR5cGUtJFZFUlNJT04KKyAgICAjIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiAuZ2l0aWdub3JlIGFuZCAubWFpbG1hcCBmaWxlcy4KKyAgICBzb3VyY2VfZmlsZXMgPSBbCisgICAgICAgIGYKKyAgICAgICAgZm9yIGYgaW4gZ2V0X2NtZF9vdXRwdXQoWyJnaXQiLCAibHMtZmlsZXMiXSwgY3dkPWdpdF9kaXIpLnNwbGl0KCJcbiIpCisgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUoZikgbm90IGluICgiLmdpdGlnbm9yZSIsICIubWFpbG1hcCIpCisgICAgXQorCisgICAgZnJlZXR5cGVfZGlyID0gImZyZWV0eXBlLSIgKyB2ZXJzaW9uCisgICAgdG1wX3NyY19kaXIgPSBvcy5wYXRoLmpvaW4oYnVpbGRfZGlyLCBmcmVldHlwZV9kaXIpCisgICAgb3MubWFrZWRpcnModG1wX3NyY19kaXIpCisKKyAgICBmb3Igc3JjIGluIHNvdXJjZV9maWxlczoKKyAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKHRtcF9zcmNfZGlyLCBzcmMpCisgICAgICAgIGRzdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoZHN0KQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZHN0X2Rpcik6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhkc3RfZGlyKQorICAgICAgICBzaHV0aWwuY29weShvcy5wYXRoLmpvaW4oZ2l0X2Rpciwgc3JjKSwgZHN0KQorCisgICAgIyBSdW4gYXV0b2dlbi5zaCBpbiBkaXJlY3RvcnkuCisgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsiL2Jpbi9zaCIsICJhdXRvZ2VuLnNoIl0sIGN3ZD10bXBfc3JjX2RpcikKKyAgICBzaHV0aWwucm10cmVlKAorICAgICAgICBvcy5wYXRoLmpvaW4odG1wX3NyY19kaXIsICJidWlsZHMiLCAidW5peCIsICJhdXRvbTR0ZS5jYWNoZSIpCisgICAgKQorCisgICAgIyBDb3B5IGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiBpZiBwb3NzaWJsZSEKKyAgICBpZiBhcmdzLmdudV9jb25maWdfZGlyOgorICAgICAgICBmb3IgZiBpbiAoImNvbmZpZy5ndWVzcyIsICJjb25maWcuc3ViIik6CisgICAgICAgICAgICBzaHV0aWwuY29weSgKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oYXJncy5nbnVfY29uZmlnX2RpciwgZiksCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRtcF9zcmNfZGlyLCAiYnVpbGRzIiwgInVuaXgiLCBmKSwKKyAgICAgICAgICAgICkKKworICAgICMgR2VuZXJhdGUgcmVmZXJlbmNlIGRvY3VtZW50YXRpb24gdW5kZXIgZG9jcy8KKyAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoCisgICAgICAgIFsKKyAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLAorICAgICAgICAgICAgb3MucGF0aC5qb2luKF9TQ1JJUFRfRElSLCAiZ2VuZXJhdGVfcmVmZXJlbmNlX2RvY3MucHkiKSwKKyAgICAgICAgICAgICItLWlucHV0LWRpciIsCisgICAgICAgICAgICB0bXBfc3JjX2RpciwKKyAgICAgICAgICAgICItLXZlcnNpb24iLAorICAgICAgICAgICAgdmVyc2lvbiwKKyAgICAgICAgICAgICItLW91dHB1dC1kaXIiLAorICAgICAgICAgICAgb3MucGF0aC5qb2luKHRtcF9zcmNfZGlyLCAiZG9jcyIpLAorICAgICAgICBdCisgICAgKQorCisgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmpvaW4odG1wX3NyY19kaXIsICJkb2NzIiwgIm1hcmtkb3duIikpCisgICAgb3MudW5saW5rKG9zLnBhdGguam9pbih0bXBfc3JjX2RpciwgImRvY3MiLCAibWtkb2NzLnltbCIpKQorCisgICAgIyBHZW5lcmF0ZSBvdXIgYXJjaGl2ZXMKKyAgICBmcmVldHlwZV90YXIgPSBmcmVldHlwZV9kaXIgKyAiLnRhciIKKworICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbCgKKyAgICAgICAgWyJ0YXIiLCAiLUgiLCAidXN0YXIiLCAiLWNoZiIsIGZyZWV0eXBlX3RhciwgZnJlZXR5cGVfZGlyXSwKKyAgICAgICAgY3dkPWJ1aWxkX2RpciwKKyAgICApCisKKyAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoCisgICAgICAgIFsiZ3ppcCIsICItOSIsICItLWtlZXAiLCBmcmVldHlwZV90YXJdLCBjd2Q9YnVpbGRfZGlyCisgICAgKQorCisgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsieHoiLCAiLS1rZWVwIiwgZnJlZXR5cGVfdGFyXSwgY3dkPWJ1aWxkX2RpcikKKworICAgIGZ0d2ludmVyc2lvbiA9ICJmdCIgKyAiIi5qb2luKHZlcnNpb24uc3BsaXQoIi4iKSkKKyAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoCisgICAgICAgIFsiemlwIiwgIi1xbHI5IiwgZnR3aW52ZXJzaW9uICsgIi56aXAiLCBmcmVldHlwZV9kaXJdLCBjd2Q9YnVpbGRfZGlyCisgICAgKQorCisgICAgIyBDb3B5IGZpbGUgdG8gb3V0cHV0IGRpcmVjdG9yeSBub3cuCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFyZ3Mub3V0cHV0X2Rpcik6CisgICAgICAgIG9zLm1ha2VkaXJzKGFyZ3Mub3V0cHV0X2RpcikKKworICAgIGZvciBmIGluICgKKyAgICAgICAgZnJlZXR5cGVfdGFyICsgIi5neiIsCisgICAgICAgIGZyZWV0eXBlX3RhciArICIueHoiLAorICAgICAgICBmdHdpbnZlcnNpb24gKyAiLnppcCIsCisgICAgKToKKyAgICAgICAgc2h1dGlsLmNvcHkoCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oYnVpbGRfZGlyLCBmKSwgb3MucGF0aC5qb2luKGFyZ3Mub3V0cHV0X2RpciwgZikKKyAgICAgICAgKQorCisgICAgIyBEb25lIQorICAgIHJldHVybiAwCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvdGVzdF9hZm0uYyBiL3NyYy90b29scy90ZXN0X2FmbS5jCmluZGV4IDhkZTYxOWIuLmE0YjIyNjggMTAwNjQ0Ci0tLSBhL3NyYy90b29scy90ZXN0X2FmbS5jCisrKyBiL3NyYy90b29scy90ZXN0X2FmbS5jCkBAIC0yLDEwICsyLDkgQEAKICAqIGdjYyAtREZUMl9CVUlMRF9MSUJSQVJZIC1JLi4vLi4vaW5jbHVkZSAtbyB0ZXN0X2FmbSB0ZXN0X2FmbS5jIFwKICAqICAgICAtTC4uLy4uL29ianMvLmxpYnMgLWxmcmVldHlwZSAtbHogLXN0YXRpYwogICovCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3BzYXV4Lmg+CiAKICAgdm9pZCBkdW1wX2ZvbnRpbmZvKCBBRk1fRm9udEluZm8gIGZpICkKICAgewpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3Rlc3RfYmJveC5jIGIvc3JjL3Rvb2xzL3Rlc3RfYmJveC5jCmluZGV4IDY0YjgyYzMuLmQ5ZmQ5MzIgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy90ZXN0X2Jib3guYworKysgYi9zcmMvdG9vbHMvdGVzdF9iYm94LmMKQEAgLTEsNiArMSw1IEBACi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX0JCT1hfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRiYm94Lmg+CiAKIAogI2luY2x1ZGUgPHRpbWUuaD4gICAgLyogZm9yIGNsb2NrKCkgKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy90ZXN0X3RyaWcuYyBiL3NyYy90b29scy90ZXN0X3RyaWcuYwppbmRleCA5OWFjMWNmLi40ZjM0MTBhIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvdGVzdF90cmlnLmMKKysrIGIvc3JjL3Rvb2xzL3Rlc3RfdHJpZy5jCkBAIC0xLDYgKzEsNSBAQAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0jaW5jbHVkZSBGVF9UUklHT05PTUVUUllfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnR0cmlnb24uaD4KIAogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5oPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3VwZGF0ZS1jb3B5cmlnaHQteWVhciBiL3NyYy90b29scy91cGRhdGUtY29weXJpZ2h0LXllYXIKaW5kZXggMmFlNTBkNi4uYzY1OWJiYSAxMDA3NTUKLS0tIGEvc3JjL3Rvb2xzL3VwZGF0ZS1jb3B5cmlnaHQteWVhcgorKysgYi9zcmMvdG9vbHMvdXBkYXRlLWNvcHlyaWdodC15ZWFyCkBAIC0yLDcgKzIsNyBAQAogICAmIGV2YWwgJ2V4ZWMgcGVybCAtd1MgLWkgIiQwIiAkYXJndjpxJwogICAgIGlmIDA7CiAKLSMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgYnkKICMgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvSmFtZmlsZSBiL3NyYy90cnVldHlwZS9KYW1maWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGU2M2E3Li4wMDAwMDAwCi0tLSBhL3NyYy90cnVldHlwZS9KYW1maWxlCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyBGcmVlVHlwZSAyIHNyYy90cnVldHlwZSBKYW1maWxlCi0jCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IGJ5Ci0jIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKLSMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAotIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQotIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAotIyBmdWxseS4KLQotU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIHRydWV0eXBlIDsKLQotewotICBsb2NhbCAgX3NvdXJjZXMgOwotCi0gIGlmICQoRlQyX01VTFRJKQotICB7Ci0gICAgX3NvdXJjZXMgPSB0dGRyaXZlcgotICAgICAgICAgICAgICAgdHRnbG9hZAotICAgICAgICAgICAgICAgdHRneHZhcgotICAgICAgICAgICAgICAgdHRpbnRlcnAKLSAgICAgICAgICAgICAgIHR0b2JqcwotICAgICAgICAgICAgICAgdHRwaWMKLSAgICAgICAgICAgICAgIHR0cGxvYWQKLSAgICAgICAgICAgICAgIHR0c3VicGl4Ci0gICAgICAgICAgICAgICA7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgX3NvdXJjZXMgPSB0cnVldHlwZSA7Ci0gIH0KLQotICBMaWJyYXJ5ICAkKEZUMl9MSUIpIDogJChfc291cmNlcykuYyA7Ci19Ci0KLSMgZW5kIG9mIHNyYy90cnVldHlwZSBKYW1maWxlCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvbW9kdWxlLm1rIGIvc3JjL3RydWV0eXBlL21vZHVsZS5tawppbmRleCA4YTg0MWNjLi4yZDhkMzlkIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvbW9kdWxlLm1rCisrKyBiL3NyYy90cnVldHlwZS9tb2R1bGUubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvcnVsZXMubWsgYi9zcmMvdHJ1ZXR5cGUvcnVsZXMubWsKaW5kZXggZGY4ZGNkNC4uMmY2ZmVjZiAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3J1bGVzLm1rCisrKyBiL3NyYy90cnVldHlwZS9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90cnVldHlwZS5jIGIvc3JjL3RydWV0eXBlL3RydWV0eXBlLmMKaW5kZXggODQ5MjhlNy4uNDFiNjgwOCAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3RydWV0eXBlLmMKKysrIGIvc3JjL3RydWV0eXBlL3RydWV0eXBlLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBUcnVlVHlwZSBkcml2ZXIgY29tcG9uZW50IChib2R5IG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE3LDcgKzE3LDYgQEAKIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogCiAjaW5jbHVkZSAidHRkcml2ZXIuYyIgICAvKiBkcml2ZXIgaW50ZXJmYWNlICAgICovCiAjaW5jbHVkZSAidHRnbG9hZC5jIiAgICAvKiBnbHlwaCBsb2FkZXIgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyBiL3NyYy90cnVldHlwZS90dGRyaXZlci5jCmluZGV4IGZmNjI2ZDUuLmJmODMwYjEgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dGRyaXZlci5jCisrKyBiL3NyYy90cnVldHlwZS90dGRyaXZlci5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHJ1ZVR5cGUgZm9udCBkcml2ZXIgaW1wbGVtZW50YXRpb24gKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDIyICsxNiwyMSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0ZOVF9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX0ZPTlRfRk9STUFUX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZm50Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaD4KIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKLSNpbmNsdWRlIEZUX01VTFRJUExFX01BU1RFUlNfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9NVUxUSVBMRV9NQVNURVJTX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfTUVUUklDU19WQVJJQVRJT05TX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdG1tLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bWV0cmljLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgRlRfU0VSVklDRV9UUlVFVFlQRV9FTkdJTkVfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9UUlVFVFlQRV9HTFlGX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfUFJPUEVSVElFU19ICi0jaW5jbHVkZSBGVF9EUklWRVJfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Z2x5Zi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHJvcC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZHJpdmVyLmg+CiAKICNpbmNsdWRlICJ0dGRyaXZlci5oIgogI2luY2x1ZGUgInR0Z2xvYWQuaCIKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dGRyaXZlci5oIGIvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmgKaW5kZXggMzkzNmM2YS4uZWUxNDM4ZSAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmgKKysrIGIvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBIaWdoLWxldmVsIFRydWVUeXBlIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDggKzIwLDcgQEAKICNkZWZpbmUgVFREUklWRVJfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RSSVZFUl9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkcnYuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dGVycm9ycy5oIGIvc3JjL3RydWV0eXBlL3R0ZXJyb3JzLmgKaW5kZXggNTYwOWQyOC4uZWZlYWZkMyAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0ZXJyb3JzLmgKKysrIGIvc3JjL3RydWV0eXBlL3R0ZXJyb3JzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUcnVlVHlwZSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFRURVJST1JTX0hfCiAjZGVmaW5lIFRURVJST1JTX0hfCiAKLSNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kZXJyLmg+CiAKICN1bmRlZiBGVEVSUk9SU19IXwogCkBAIC0zNCw3ICszNCw3IEBACiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFRUX0Vycl8KICNkZWZpbmUgRlRfRVJSX0JBU0UgICAgRlRfTW9kX0Vycl9UcnVlVHlwZQogCi0jaW5jbHVkZSBGVF9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZXJyb3JzLmg+CiAKICNlbmRpZiAvKiBUVEVSUk9SU19IXyAqLwogCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIGIvc3JjL3RydWV0eXBlL3R0Z2xvYWQuYwppbmRleCBhMDQ2ODQwLi4xZGQzMTlkIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jCisrKyBiL3NyYy90cnVldHlwZS90dGdsb2FkLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUcnVlVHlwZSBHbHlwaCBMb2FkZXIgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE3LDE1ICsxNywxNSBAQAogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KICNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0ZOVF9ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKLSNpbmNsdWRlIEZUX09VVExJTkVfSAotI2luY2x1ZGUgRlRfRFJJVkVSX0gKLSNpbmNsdWRlIEZUX0xJU1RfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL3R0dGFncy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0b3V0bG4uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdGRyaXZlci5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bGlzdC5oPgogCiAjaW5jbHVkZSAidHRnbG9hZC5oIgogI2luY2x1ZGUgInR0cGxvYWQuaCIKQEAgLTYwLDcgKzYwLDcgQEAKICNkZWZpbmUgU0FNRV9YICAgICAgICAgIDB4MTAKICNkZWZpbmUgWV9QT1NJVElWRSAgICAgIDB4MjAgIC8qIHR3byBtZWFuaW5ncyBkZXBlbmRpbmcgb24gWV9TSE9SVF9WRUNUT1IgKi8KICNkZWZpbmUgU0FNRV9ZICAgICAgICAgIDB4MjAKLSNkZWZpbmUgT1ZFUkxBUF9TSU1QTEUgIDB4NDAgIC8qIHdlIGlnbm9yZSB0aGlzIHZhbHVlICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1ZFUkxBUF9TSU1QTEUgIDB4NDAgIC8qIHJldGFpbmVkIGFzIEZUX09VVExJTkVfT1ZFUkxBUCAgICAgICAgICAgKi8KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzcsNyArNzcsNyBAQAogI2RlZmluZSBXRV9IQVZFX0FfMlgyICAgICAgICAgICAgICAweDAwODAKICNkZWZpbmUgV0VfSEFWRV9JTlNUUiAgICAgICAgICAgICAgMHgwMTAwCiAjZGVmaW5lIFVTRV9NWV9NRVRSSUNTICAgICAgICAgICAgIDB4MDIwMAotI2RlZmluZSBPVkVSTEFQX0NPTVBPVU5EICAgICAgICAgICAweDA0MDAgIC8qIHdlIGlnbm9yZSB0aGlzIHZhbHVlICovCisjZGVmaW5lIE9WRVJMQVBfQ09NUE9VTkQgICAgICAgICAgIDB4MDQwMCAgLyogcmV0YWluZWQgYXMgRlRfT1VUTElORV9PVkVSTEFQICovCiAjZGVmaW5lIFNDQUxFRF9DT01QT05FTlRfT0ZGU0VUICAgIDB4MDgwMAogI2RlZmluZSBVTlNDQUxFRF9DT01QT05FTlRfT0ZGU0VUICAweDEwMDAKIApAQCAtMTM3LDYgKzEzNywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5ob3Jpem9udGFsLkRlc2NlbmRlciApOwogICAgIH0KIAorI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgaWYgKCAhZmFjZS0+dmVydGljYWxfaW5mbyApCisgICAgICBGVF9UUkFDRTUoKCAiICBbdmVydGljYWwgbWV0cmljcyBtaXNzaW5nLCBjb21wdXRpbmcgdmFsdWVzXVxuIiApKTsKKyNlbmRpZgorCiAgICAgRlRfVFJBQ0U1KCggIiAgYWR2YW5jZSBoZWlnaHQgKGZvbnQgdW5pdHMpOiAlZFxuIiwgKmFoICkpOwogICAgIEZUX1RSQUNFNSgoICIgIHRvcCBzaWRlIGJlYXJpbmcgKGZvbnQgdW5pdHMpOiAlZFxuIiwgKnRzYiApKTsKICAgfQpAQCAtMzMzLDkgKzMzOCw5IEBACiAgICAgbG9hZGVyLT5iYm94LnlNYXggPSBGVF9ORVhUX1NIT1JUKCBwICk7CiAKICAgICBGVF9UUkFDRTUoKCAiICAjIG9mIGNvbnRvdXJzOiAlZFxuIiwgbG9hZGVyLT5uX2NvbnRvdXJzICkpOwotICAgIEZUX1RSQUNFNSgoICIgIHhNaW46ICU0ZCAgeE1heDogJTRkXG4iLCBsb2FkZXItPmJib3gueE1pbiwKKyAgICBGVF9UUkFDRTUoKCAiICB4TWluOiAlNGxkICB4TWF4OiAlNGxkXG4iLCBsb2FkZXItPmJib3gueE1pbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLT5iYm94LnhNYXggKSk7Ci0gICAgRlRfVFJBQ0U1KCggIiAgeU1pbjogJTRkICB5TWF4OiAlNGRcbiIsIGxvYWRlci0+YmJveC55TWluLAorICAgIEZUX1RSQUNFNSgoICIgIHlNaW46ICU0bGQgIHlNYXg6ICU0bGRcbiIsIGxvYWRlci0+YmJveC55TWluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXItPmJib3gueU1heCApKTsKICAgICBsb2FkZXItPmN1cnNvciA9IHA7CiAKQEAgLTQ4OSw2ICs0OTQsMTAgQEAKICAgICAgIH0KICAgICB9CiAKKyAgICAvKiByZXRhaW4gdGhlIG92ZXJsYXAgZmxhZyAqLworICAgIGlmICggbl9wb2ludHMgJiYgb3V0bGluZS0+dGFnc1swXSAmIE9WRVJMQVBfU0lNUExFICkKKyAgICAgIGdsb2FkZXItPmJhc2Uub3V0bGluZS5mbGFncyB8PSBGVF9PVVRMSU5FX09WRVJMQVA7CisKICAgICAvKiByZWFkaW5nIHRoZSBYIGNvb3JkaW5hdGVzICovCiAKICAgICB2ZWMgICAgICAgPSBvdXRsaW5lLT5wb2ludHM7CkBAIC0xMTAyLDkgKzExMTEsMTYgQEAKICAgICAgIH0KIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKLSAgICAgIC8qIGlmIHdlIGhhdmUgYSBIVkFSIHRhYmxlLCBgcHAxJyBhbmQvb3IgYHBwMicgYXJlIGFscmVhZHkgYWRqdXN0ZWQgKi8KLSAgICAgIGlmICggISggbG9hZGVyLT5mYWNlLT52YXJpYXRpb25fc3VwcG9ydCAmIFRUX0ZBQ0VfRkxBR19WQVJfSEFEVkFOQ0UgKSB8fAotICAgICAgICAgICAhSVNfSElOVEVEKCBsb2FkZXItPmxvYWRfZmxhZ3MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgIC8qIGlmIHdlIGhhdmUgYSBIVkFSIHRhYmxlLCBgcHAxJyBhbmQvb3IgYHBwMicgKi8KKyAgICAgIC8qIGFyZSBhbHJlYWR5IGFkanVzdGVkIGJ1dCB1bnNjYWxlZCAgICAgICAgICAgKi8KKyAgICAgIGlmICggKCBsb2FkZXItPmZhY2UtPnZhcmlhdGlvbl9zdXBwb3J0ICYgVFRfRkFDRV9GTEFHX1ZBUl9IQURWQU5DRSApICYmCisgICAgICAgICAgIElTX0hJTlRFRCggbG9hZGVyLT5sb2FkX2ZsYWdzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICB7CisgICAgICAgIGxvYWRlci0+cHAxLnggPSBGVF9NdWxGaXgoIGxvYWRlci0+cHAxLngsIHhfc2NhbGUgKTsKKyAgICAgICAgbG9hZGVyLT5wcDIueCA9IEZUX011bEZpeCggbG9hZGVyLT5wcDIueCwgeF9zY2FsZSApOworICAgICAgICAvKiBwcDEueSBhbmQgcHAyLnkgYXJlIGFsd2F5cyB6ZXJvICovCisgICAgICB9CisgICAgICBlbHNlCiAjZW5kaWYKICAgICAgIHsKICAgICAgICAgbG9hZGVyLT5wcDEgPSBvdXRsaW5lLT5wb2ludHNbbl9wb2ludHMgLSA0XTsKQEAgLTExMTIsOSArMTEyOCwxNyBAQAogICAgICAgfQogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAotICAgICAgLyogaWYgd2UgaGF2ZSBhIFZWQVIgdGFibGUsIGBwcDMnIGFuZC9vciBgcHA0JyBhcmUgYWxyZWFkeSBhZGp1c3RlZCAqLwotICAgICAgaWYgKCAhKCBsb2FkZXItPmZhY2UtPnZhcmlhdGlvbl9zdXBwb3J0ICYgVFRfRkFDRV9GTEFHX1ZBUl9WQURWQU5DRSApIHx8Ci0gICAgICAgICAgICFJU19ISU5URUQoIGxvYWRlci0+bG9hZF9mbGFncyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgLyogaWYgd2UgaGF2ZSBhIFZWQVIgdGFibGUsIGBwcDMnIGFuZC9vciBgcHA0JyAqLworICAgICAgLyogYXJlIGFscmVhZHkgYWRqdXN0ZWQgYnV0IHVuc2NhbGVkICAgICAgICAgICAqLworICAgICAgaWYgKCAoIGxvYWRlci0+ZmFjZS0+dmFyaWF0aW9uX3N1cHBvcnQgJiBUVF9GQUNFX0ZMQUdfVkFSX1ZBRFZBTkNFICkgJiYKKyAgICAgICAgICAgSVNfSElOVEVEKCBsb2FkZXItPmxvYWRfZmxhZ3MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgIHsKKyAgICAgICAgbG9hZGVyLT5wcDMueCA9IEZUX011bEZpeCggbG9hZGVyLT5wcDMueCwgeF9zY2FsZSApOworICAgICAgICBsb2FkZXItPnBwMy55ID0gRlRfTXVsRml4KCBsb2FkZXItPnBwMy55LCB5X3NjYWxlICk7CisgICAgICAgIGxvYWRlci0+cHA0LnggPSBGVF9NdWxGaXgoIGxvYWRlci0+cHA0LngsIHhfc2NhbGUgKTsKKyAgICAgICAgbG9hZGVyLT5wcDQueSA9IEZUX011bEZpeCggbG9hZGVyLT5wcDQueSwgeV9zY2FsZSApOworICAgICAgfQorICAgICAgZWxzZQogI2VuZGlmCiAgICAgICB7CiAgICAgICAgIGxvYWRlci0+cHAzID0gb3V0bGluZS0+cG9pbnRzW25fcG9pbnRzIC0gMl07CkBAIC0yMTY4LDYgKzIxOTIsMTEgQEAKICAgICAgICAgICAgIGdvdG8gRXhpdDsKICAgICAgICAgfQogICAgICAgfQorCisgICAgICAvKiByZXRhaW4gdGhlIG92ZXJsYXAgZmxhZyAqLworICAgICAgaWYgKCBnbG9hZGVyLT5iYXNlLm51bV9zdWJnbHlwaHMgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgZ2xvYWRlci0+YmFzZS5zdWJnbHlwaHNbMF0uZmxhZ3MgJiBPVkVSTEFQX0NPTVBPVU5EICkKKyAgICAgICAgZ2xvYWRlci0+YmFzZS5vdXRsaW5lLmZsYWdzIHw9IEZUX09VVExJTkVfT1ZFUkxBUDsKICAgICB9CiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjg3LDEzICsyMzE2LDE0IEBACiAgICAgICBpZiAoIGZhY2UtPnZlcnRpY2FsX2luZm8gICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgZmFjZS0+dmVydGljYWwubnVtYmVyX09mX1ZNZXRyaWNzID4gMCApCiAgICAgICB7Ci0gICAgICAgIHRvcCA9IChGVF9TaG9ydClGVF9EaXZGaXgoIGxvYWRlci0+cHAzLnkgLSBiYm94LnlNYXgsCisgICAgICAgIHRvcCA9IChGVF9TaG9ydClGVF9EaXZGaXgoIFNVQl9MT05HKCBsb2FkZXItPnBwMy55LCBiYm94LnlNYXggKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeV9zY2FsZSApOwogCiAgICAgICAgIGlmICggbG9hZGVyLT5wcDMueSA8PSBsb2FkZXItPnBwNC55ICkKICAgICAgICAgICBhZHZhbmNlID0gMDsKICAgICAgICAgZWxzZQotICAgICAgICAgIGFkdmFuY2UgPSAoRlRfVVNob3J0KUZUX0RpdkZpeCggbG9hZGVyLT5wcDMueSAtIGxvYWRlci0+cHA0LnksCisgICAgICAgICAgYWR2YW5jZSA9IChGVF9VU2hvcnQpRlRfRGl2Rml4KCBTVUJfTE9ORyggbG9hZGVyLT5wcDMueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXItPnBwNC55ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5X3NjYWxlICk7CiAgICAgICB9CiAgICAgICBlbHNlCkBAIC0yOTY1LDggKzI5OTUsNiBAQAogICAgICAgZXJyb3IgPSBjb21wdXRlX2dseXBoX21ldHJpY3MoICZsb2FkZXIsIGdseXBoX2luZGV4ICk7CiAgICAgfQogCi0gICAgdHRfbG9hZGVyX2RvbmUoICZsb2FkZXIgKTsKLQogICAgIC8qIFNldCB0aGUgYGhpZ2ggcHJlY2lzaW9uJyBiaXQgZmxhZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIC8qIFRoaXMgaXMgX2NyaXRpY2FsXyB0byBnZXQgY29ycmVjdCBvdXRwdXQgZm9yIG1vbm9jaHJvbWUgICAgICAqLwogICAgIC8qIFRydWVUeXBlIGdseXBocyBhdCBhbGwgc2l6ZXMgdXNpbmcgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyLiAqLwpAQCAtMjk3NSw2ICszMDAzLDE1IEBACiAgICAgICAgICBzaXplLT5tZXRyaWNzLT55X3BwZW0gPCAyNCAgICAgICAgICkKICAgICAgIGdseXBoLT5vdXRsaW5lLmZsYWdzIHw9IEZUX09VVExJTkVfSElHSF9QUkVDSVNJT047CiAKKyAgICBGVF9UUkFDRTEoKCAiICBzdWJnbHlwaHMgPSAldSwgY29udG91cnMgPSAlaGQsIHBvaW50cyA9ICVoZCwiCisgICAgICAgICAgICAgICAgIiBmbGFncyA9IDB4JS4zeFxuIiwKKyAgICAgICAgICAgICAgICBsb2FkZXIuZ2xvYWRlci0+YmFzZS5udW1fc3ViZ2x5cGhzLAorICAgICAgICAgICAgICAgIGdseXBoLT5vdXRsaW5lLm5fY29udG91cnMsCisgICAgICAgICAgICAgICAgZ2x5cGgtPm91dGxpbmUubl9wb2ludHMsCisgICAgICAgICAgICAgICAgZ2x5cGgtPm91dGxpbmUuZmxhZ3MgKSk7CisKKyAgICB0dF9sb2FkZXJfZG9uZSggJmxvYWRlciApOworCiAgIEV4aXQ6CiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKICAgICBpZiAoIGVycm9yICkKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dGdsb2FkLmggYi9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5oCmluZGV4IGYxMzI0YmMuLjhmNzJjZDUgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dGdsb2FkLmgKKysrIGIvc3JjL3RydWV0eXBlL3R0Z2xvYWQuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlIEdseXBoIExvYWRlciAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsNyArMjAsNiBAQAogI2RlZmluZSBUVEdMT0FEX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSAidHRvYmpzLmgiCiAKICNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dGd4dmFyLmMgYi9zcmMvdHJ1ZXR5cGUvdHRneHZhci5jCmluZGV4IDc4ZDg3ZGMuLmI0NjIyNjMgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dGd4dmFyLmMKKysrIGIvc3JjL3RydWV0eXBlL3R0Z3h2YXIuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlIEdYIEZvbnQgVmFyaWF0aW9uIGxvYWRlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgV2VybmVyIExlbWJlcmcsIGFuZCBHZW9yZ2UgV2lsbGlhbXMuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtNDAsMTQgKzQwLDE0IEBACiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogI2luY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0ZOVF9ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX0lEU19ICi0jaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKLSNpbmNsdWRlIEZUX0xJU1RfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL3R0dGFncy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL3R0bmFtZWlkLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRtbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bGlzdC5oPgogCiAjaW5jbHVkZSAidHRwbG9hZC5oIgogI2luY2x1ZGUgInR0Z3h2YXIuaCIKQEAgLTE0NzAsNiArMTQ3MCw3IEBACiAgICAgRlRfVUxvbmcgICAgICB0YWJsZV9sZW47CiAgICAgRlRfVUxvbmcgICAgICBndmFyX3N0YXJ0OwogICAgIEZUX1VMb25nICAgICAgb2Zmc2V0VG9EYXRhOworICAgIEZUX1VMb25nICAgICAgb2Zmc2V0c19sZW47CiAgICAgR1hfR1Zhcl9IZWFkICBndmFyX2hlYWQ7CiAKICAgICBzdGF0aWMgY29uc3QgRlRfRnJhbWVfRmllbGQgIGd2YXJfZmllbGRzW10gPQpAQCAtMTUzMCw5ICsxNTMxLDEzIEBACiAgICAgICBnb3RvIEV4aXQ7CiAgICAgfQogCi0gICAgLyogcm91Z2ggc2FuaXR5IGNoZWNrOiBvZmZzZXRzIGNhbiBiZSBlaXRoZXIgMiBvciA0IGJ5dGVzICovCi0gICAgaWYgKCAoRlRfVUxvbmcpZ3Zhcl9oZWFkLmdseXBoQ291bnQgKgotICAgICAgICAgICAoICggZ3Zhcl9oZWFkLmZsYWdzICYgMSApID8gNCA6IDIgKSA+IHRhYmxlX2xlbiApCisgICAgLyogb2Zmc2V0cyBjYW4gYmUgZWl0aGVyIDIgb3IgNCBieXRlcyAgICAgICAgICAgICAgICAgICovCisgICAgLyogKG9uZSBtb3JlIG9mZnNldCB0aGFuIGdseXBocywgdG8gbWFyayBzaXplIG9mIGxhc3QpICovCisgICAgb2Zmc2V0c19sZW4gPSAoIGd2YXJfaGVhZC5nbHlwaENvdW50ICsgMSApICoKKyAgICAgICAgICAgICAgICAgICggKCBndmFyX2hlYWQuZmxhZ3MgJiAxICkgPyA0TCA6IDJMICk7CisKKyAgICAvKiByb3VnaCBzYW5pdHkgY2hlY2sgKi8KKyAgICBpZiAob2Zmc2V0c19sZW4gPiB0YWJsZV9sZW4gKQogICAgIHsKICAgICAgIEZUX1RSQUNFMSgoICJmdF92YXJfbG9hZF9ndmFyOiBpbnZhbGlkIG51bWJlciBvZiBnbHlwaHNcbiIgKSk7CiAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CkBAIC0xNTQxLDgxICsxNTQ2LDEwMiBAQAogCiAgICAgRlRfVFJBQ0UyKCggImxvYWRlZFxuIiApKTsKIAotICAgIGJsZW5kLT5ndmFyX3NpemUgICA9IHRhYmxlX2xlbjsKLSAgICBibGVuZC0+dHVwbGVjb3VudCAgPSBndmFyX2hlYWQuZ2xvYmFsQ29vcmRDb3VudDsKLSAgICBibGVuZC0+Z3ZfZ2x5cGhjbnQgPSBndmFyX2hlYWQuZ2x5cGhDb3VudDsKLSAgICBvZmZzZXRUb0RhdGEgICAgICAgPSBndmFyX3N0YXJ0ICsgZ3Zhcl9oZWFkLm9mZnNldFRvRGF0YTsKKyAgICBibGVuZC0+Z3Zhcl9zaXplID0gdGFibGVfbGVuOworICAgIG9mZnNldFRvRGF0YSAgICAgPSBndmFyX3N0YXJ0ICsgZ3Zhcl9oZWFkLm9mZnNldFRvRGF0YTsKIAogICAgIEZUX1RSQUNFNSgoICJndmFyOiB0aGVyZSAlcyAlZCBzaGFyZWQgY29vcmRpbmF0ZSVzOlxuIiwKLSAgICAgICAgICAgICAgICBibGVuZC0+dHVwbGVjb3VudCA9PSAxID8gImlzIiA6ICJhcmUiLAotICAgICAgICAgICAgICAgIGJsZW5kLT50dXBsZWNvdW50LAotICAgICAgICAgICAgICAgIGJsZW5kLT50dXBsZWNvdW50ID09IDEgPyAiIiA6ICJzIiApKTsKKyAgICAgICAgICAgICAgICBndmFyX2hlYWQuZ2xvYmFsQ29vcmRDb3VudCA9PSAxID8gImlzIiA6ICJhcmUiLAorICAgICAgICAgICAgICAgIGd2YXJfaGVhZC5nbG9iYWxDb29yZENvdW50LAorICAgICAgICAgICAgICAgIGd2YXJfaGVhZC5nbG9iYWxDb29yZENvdW50ID09IDEgPyAiIiA6ICJzIiApKTsKIAotICAgIGlmICggRlRfTkVXX0FSUkFZKCBibGVuZC0+Z2x5cGhvZmZzZXRzLCBibGVuZC0+Z3ZfZ2x5cGhjbnQgKyAxICkgKQorICAgIGlmICggRlRfRlJBTUVfRU5URVIoIG9mZnNldHNfbGVuICkgKQogICAgICAgZ290byBFeGl0OwogCisgICAgLyogb2Zmc2V0cyAob25lIG1vcmUgb2Zmc2V0IHRoYW4gZ2x5cGhzLCB0byBtYXJrIHNpemUgb2YgbGFzdCkgKi8KKyAgICBpZiAoIEZUX05FV19BUlJBWSggYmxlbmQtPmdseXBob2Zmc2V0cywgZ3Zhcl9oZWFkLmdseXBoQ291bnQgKyAxICkgKQorICAgICAgZ290byBGYWlsMjsKKwogICAgIGlmICggZ3Zhcl9oZWFkLmZsYWdzICYgMSApCiAgICAgewotICAgICAgRlRfVUxvbmcgIGxpbWl0ID0gZ3Zhcl9zdGFydCArIHRhYmxlX2xlbjsKKyAgICAgIEZUX1VMb25nICBsaW1pdCAgICAgID0gZ3Zhcl9zdGFydCArIHRhYmxlX2xlbjsKKyAgICAgIEZUX1VMb25nICBtYXhfb2Zmc2V0ID0gMDsKIAogCi0gICAgICAvKiBsb25nIG9mZnNldHMgKG9uZSBtb3JlIG9mZnNldCB0aGFuIGdseXBocywgdG8gbWFyayBzaXplIG9mIGxhc3QpICovCi0gICAgICBpZiAoIEZUX0ZSQU1FX0VOVEVSKCAoIGJsZW5kLT5ndl9nbHlwaGNudCArIDEgKSAqIDRMICkgKQotICAgICAgICBnb3RvIEV4aXQ7Ci0KLSAgICAgIGZvciAoIGkgPSAwOyBpIDw9IGJsZW5kLT5ndl9nbHlwaGNudDsgaSsrICkKKyAgICAgIGZvciAoIGkgPSAwOyBpIDw9IGd2YXJfaGVhZC5nbHlwaENvdW50OyBpKysgKQogICAgICAgewogICAgICAgICBibGVuZC0+Z2x5cGhvZmZzZXRzW2ldID0gb2Zmc2V0VG9EYXRhICsgRlRfR0VUX1VMT05HKCk7Ci0gICAgICAgIC8qIHVzZSBgPicsIG5vdCBgPj0nICovCi0gICAgICAgIGlmICggYmxlbmQtPmdseXBob2Zmc2V0c1tpXSA+IGxpbWl0ICkKKworICAgICAgICBpZiAoIG1heF9vZmZzZXQgPD0gYmxlbmQtPmdseXBob2Zmc2V0c1tpXSApCisgICAgICAgICAgbWF4X29mZnNldCA9IGJsZW5kLT5nbHlwaG9mZnNldHNbaV07CisgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgIEZUX1RSQUNFMigoICJmdF92YXJfbG9hZF9ndmFyOiIKLSAgICAgICAgICAgICAgICAgICAgICAiIGludmFsaWQgZ2x5cGggdmFyaWF0aW9uIGRhdGEgb2Zmc2V0IGZvciBpbmRleCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAiIGdseXBoIHZhcmlhdGlvbiBkYXRhIG9mZnNldCAlZCBub3QgbW9ub3RvbmljXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGkgKSk7Ci0gICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOwotICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGJsZW5kLT5nbHlwaG9mZnNldHNbaV0gPSBtYXhfb2Zmc2V0OworICAgICAgICB9CisKKyAgICAgICAgLyogdXNlIGA8Jywgbm90IGA8PScgKi8KKyAgICAgICAgaWYgKCBsaW1pdCA8IGJsZW5kLT5nbHlwaG9mZnNldHNbaV0gKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UyKCggImZ0X3Zhcl9sb2FkX2d2YXI6IgorICAgICAgICAgICAgICAgICAgICAgICIgZ2x5cGggdmFyaWF0aW9uIGRhdGEgb2Zmc2V0ICVkIG91dCBvZiByYW5nZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBpICkpOworICAgICAgICAgIGJsZW5kLT5nbHlwaG9mZnNldHNbaV0gPSBsaW1pdDsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgRlRfVUxvbmcgIGxpbWl0ID0gZ3Zhcl9zdGFydCArIHRhYmxlX2xlbjsKKyAgICAgIEZUX1VMb25nICBsaW1pdCAgICAgID0gZ3Zhcl9zdGFydCArIHRhYmxlX2xlbjsKKyAgICAgIEZUX1VMb25nICBtYXhfb2Zmc2V0ID0gMDsKIAogCi0gICAgICAvKiBzaG9ydCBvZmZzZXRzIChvbmUgbW9yZSBvZmZzZXQgdGhhbiBnbHlwaHMsIHRvIG1hcmsgc2l6ZSBvZiBsYXN0KSAqLwotICAgICAgaWYgKCBGVF9GUkFNRV9FTlRFUiggKCBibGVuZC0+Z3ZfZ2x5cGhjbnQgKyAxICkgKiAyTCApICkKLSAgICAgICAgZ290byBFeGl0OwotCi0gICAgICBmb3IgKCBpID0gMDsgaSA8PSBibGVuZC0+Z3ZfZ2x5cGhjbnQ7IGkrKyApCisgICAgICBmb3IgKCBpID0gMDsgaSA8PSBndmFyX2hlYWQuZ2x5cGhDb3VudDsgaSsrICkKICAgICAgIHsKICAgICAgICAgYmxlbmQtPmdseXBob2Zmc2V0c1tpXSA9IG9mZnNldFRvRGF0YSArIEZUX0dFVF9VU0hPUlQoKSAqIDI7Ci0gICAgICAgIC8qIHVzZSBgPicsIG5vdCBgPj0nICovCi0gICAgICAgIGlmICggYmxlbmQtPmdseXBob2Zmc2V0c1tpXSA+IGxpbWl0ICkKKworICAgICAgICBpZiAoIG1heF9vZmZzZXQgPD0gYmxlbmQtPmdseXBob2Zmc2V0c1tpXSApCisgICAgICAgICAgbWF4X29mZnNldCA9IGJsZW5kLT5nbHlwaG9mZnNldHNbaV07CisgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgIEZUX1RSQUNFMigoICJmdF92YXJfbG9hZF9ndmFyOiIKLSAgICAgICAgICAgICAgICAgICAgICAiIGludmFsaWQgZ2x5cGggdmFyaWF0aW9uIGRhdGEgb2Zmc2V0IGZvciBpbmRleCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAiIGdseXBoIHZhcmlhdGlvbiBkYXRhIG9mZnNldCAlZCBub3QgbW9ub3RvbmljXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGkgKSk7Ci0gICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOwotICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGJsZW5kLT5nbHlwaG9mZnNldHNbaV0gPSBtYXhfb2Zmc2V0OworICAgICAgICB9CisKKyAgICAgICAgLyogdXNlIGA8Jywgbm90IGA8PScgKi8KKyAgICAgICAgaWYgKCBsaW1pdCA8IGJsZW5kLT5nbHlwaG9mZnNldHNbaV0gKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UyKCggImZ0X3Zhcl9sb2FkX2d2YXI6IgorICAgICAgICAgICAgICAgICAgICAgICIgZ2x5cGggdmFyaWF0aW9uIGRhdGEgb2Zmc2V0ICVkIG91dCBvZiByYW5nZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBpICkpOworICAgICAgICAgIGJsZW5kLT5nbHlwaG9mZnNldHNbaV0gPSBsaW1pdDsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KIAorICAgIGJsZW5kLT5ndl9nbHlwaGNudCA9IGd2YXJfaGVhZC5nbHlwaENvdW50OworCiAgICAgRlRfRlJBTUVfRVhJVCgpOwotICAgIGlmICggZXJyb3IgKQotICAgICAgZ290byBFeGl0OwogCi0gICAgaWYgKCBibGVuZC0+dHVwbGVjb3VudCAhPSAwICkKKyAgICBpZiAoIGd2YXJfaGVhZC5nbG9iYWxDb29yZENvdW50ICE9IDAgKQogICAgIHsKKyAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGd2YXJfc3RhcnQgKyBndmFyX2hlYWQub2Zmc2V0VG9Db29yZCApIHx8CisgICAgICAgICAgIEZUX0ZSQU1FX0VOVEVSKCBndmFyX2hlYWQuZ2xvYmFsQ29vcmRDb3VudCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICBndmFyX2hlYWQuYXhpc0NvdW50ICogMkwgKSAgICAgICAgICAgICApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMigoICJmdF92YXJfbG9hZF9ndmFyOiIKKyAgICAgICAgICAgICAgICAgICAgIiBnbHlwaCB2YXJpYXRpb24gc2hhcmVkIHR1cGxlcyBtaXNzaW5nXG4iICkpOworICAgICAgICBnb3RvIEZhaWw7CisgICAgICB9CisKICAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBibGVuZC0+dHVwbGVjb29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ3Zhcl9oZWFkLmF4aXNDb3VudCAqIGJsZW5kLT50dXBsZWNvdW50ICkgKQotICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgZ3Zhcl9oZWFkLmF4aXNDb3VudCAqIGd2YXJfaGVhZC5nbG9iYWxDb29yZENvdW50ICkgKQorICAgICAgICBnb3RvIEZhaWwyOwogCi0gICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBndmFyX3N0YXJ0ICsgZ3Zhcl9oZWFkLm9mZnNldFRvQ29vcmQgKSAgICAgICAgIHx8Ci0gICAgICAgICAgIEZUX0ZSQU1FX0VOVEVSKCBibGVuZC0+dHVwbGVjb3VudCAqIGd2YXJfaGVhZC5heGlzQ291bnQgKiAyTCApICkKLSAgICAgICAgZ290byBFeGl0OwotCi0gICAgICBmb3IgKCBpID0gMDsgaSA8IGJsZW5kLT50dXBsZWNvdW50OyBpKysgKQorICAgICAgZm9yICggaSA9IDA7IGkgPCBndmFyX2hlYWQuZ2xvYmFsQ29vcmRDb3VudDsgaSsrICkKICAgICAgIHsKICAgICAgICAgRlRfVFJBQ0U1KCggIiAgWyAiICkpOwogICAgICAgICBmb3IgKCBqID0gMDsgaiA8IChGVF9VSW50KWd2YXJfaGVhZC5heGlzQ291bnQ7IGorKyApCkBAIC0xNjI4LDYgKzE2NTQsOCBAQAogICAgICAgICBGVF9UUkFDRTUoKCAiXVxuIiApKTsKICAgICAgIH0KIAorICAgICAgYmxlbmQtPnR1cGxlY291bnQgPSBndmFyX2hlYWQuZ2xvYmFsQ29vcmRDb3VudDsKKwogICAgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKIAogICAgICAgRlRfRlJBTUVfRVhJVCgpOwpAQCAtMTYzNSw2ICsxNjYzLDE0IEBACiAKICAgRXhpdDoKICAgICByZXR1cm4gZXJyb3I7CisKKyAgRmFpbDI6CisgICAgRlRfRlJBTUVfRVhJVCgpOworCisgIEZhaWw6CisgICAgRlRfRlJFRSggYmxlbmQtPmdseXBob2Zmc2V0cyApOworICAgIGJsZW5kLT5ndl9nbHlwaGNudCA9IDA7CisgICAgZ290byBFeGl0OwogICB9CiAKIApAQCAtMTY5Myw3ICsxNzI5LDcgQEAKIAogICAgICAgaWYgKCB0dXBsZV9jb29yZHNbaV0gPT0gMCApCiAgICAgICB7Ci0gICAgICAgIEZUX1RSQUNFNigoICIgICAgICB0dXBsZSBjb29yZGluYXRlIGlzIHplcm8sIGlnbm9yZVxuIiwgaSApKTsKKyAgICAgICAgRlRfVFJBQ0U2KCggIiAgICAgIHR1cGxlIGNvb3JkaW5hdGUgaXMgemVybywgaWdub3JlXG4iICkpOwogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KIApAQCAtMjEyNyw3ICsyMTYzLDcgQEAKICAgICAvKiBgZnZhcicgdGFibGUgdmFsaWRpdHkgY2hlY2sgaW4gYHNmbnRfaW5pdF9mYWNlJyAgICAgICAgICAqLwogCiAgICAgLyogdGhlIHZhcmlvdXMgYCpfc2l6ZScgdmFyaWFibGVzLCB3aGljaCB3ZSBhbHNvIHVzZSBhcyAgICAgKi8KLSAgICAvKiBvZmZzZXRzIGludG8gdGhlIGBtbWxlbicgYXJyYXksIG11c3QgYmUgbXVsdGlwbGVzIG9mIHRoZSAqLworICAgIC8qIG9mZnNldHMgaW50byB0aGUgYG1tdmFyJyBhcnJheSwgbXVzdCBiZSBtdWx0aXBsZXMgb2YgdGhlICovCiAgICAgLyogcG9pbnRlciBzaXplIChleGNlcHQgdGhlIGxhc3Qgb25lKTsgd2l0aG91dCBzdWNoIGFuICAgICAgKi8KICAgICAvKiBhbGlnbm1lbnQgdGhlcmUgbWlnaHQgYmUgcnVudGltZSBlcnJvcnMgZHVlIHRvICAgICAgICAgICAqLwogICAgIC8qIG1pc2FsaWduZWQgYWRkcmVzc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zMDM3LDcgKzMwNzMsNyBAQAogICBUVF9TZXRfTmFtZWRfSW5zdGFuY2UoIFRUX0ZhY2UgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgaW5zdGFuY2VfaW5kZXggKQogICB7Ci0gICAgRlRfRXJyb3IgICAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICBGVF9FcnJvciAgICBlcnJvcjsKICAgICBHWF9CbGVuZCAgICBibGVuZDsKICAgICBGVF9NTV9WYXIqICBtbXZhcjsKIApAQCAtMzA1Nyw3ICszMDkzLDEwIEBACiAKICAgICAvKiBgaW5zdGFuY2VfaW5kZXgnIHN0YXJ0cyB3aXRoIHZhbHVlIDEsIHRodXMgYD4nICovCiAgICAgaWYgKCBpbnN0YW5jZV9pbmRleCA+IG51bV9pbnN0YW5jZXMgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0FyZ3VtZW50ICk7CiAgICAgICBnb3RvIEV4aXQ7CisgICAgfQogCiAgICAgaWYgKCBpbnN0YW5jZV9pbmRleCA+IDAgKQogICAgIHsKQEAgLTM3NjYsNyArMzgwNSw3IEBACiAgICAgICAgICAgIGJsZW5kLT5nbHlwaG9mZnNldHNbZ2x5cGhfaW5kZXggKyAxXSApCiAgICAgewogICAgICAgRlRfVFJBQ0UyKCggIlRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzOiIKLSAgICAgICAgICAgICAgICAgICIgbm8gdmFyaWF0aW9uIGRhdGEgZm9yIHRoaXMgZ2x5cGhcbiIgKSk7CisgICAgICAgICAgICAgICAgICAiIG5vIHZhcmlhdGlvbiBkYXRhIGZvciBnbHlwaCAlZFxuIiwgZ2x5cGhfaW5kZXggKSk7CiAgICAgICByZXR1cm4gRlRfRXJyX09rOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0Z3h2YXIuaCBiL3NyYy90cnVldHlwZS90dGd4dmFyLmgKaW5kZXggMDdjOTliNi4uMjZlODliYyAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0Z3h2YXIuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRneHZhci5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHJ1ZVR5cGUgR1ggRm9udCBWYXJpYXRpb24gbG9hZGVyIChzcGVjaWZpY2F0aW9uKQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgV2VybmVyIExlbWJlcmcgYW5kIEdlb3JnZSBXaWxsaWFtcy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw3ICsyMCw2IEBACiAjZGVmaW5lIFRUR1hWQVJfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlICJ0dG9ianMuaCIKIAogCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyBiL3NyYy90cnVldHlwZS90dGludGVycC5jCmluZGV4IDcwNDM0ZTEuLjBjM2NiMTAgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dGludGVycC5jCisrKyBiL3NyYy90cnVldHlwZS90dGludGVycC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDEzICsyMCwxMiBAQAogLyogaXNzdWVzOyBtYW55IHRoYW5rcyEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICi0jaW5jbHVkZSBGVF9UUklHT05PTUVUUllfSAotI2luY2x1ZGUgRlRfU1lTVEVNX0gKLSNpbmNsdWRlIEZUX0RSSVZFUl9ICi0jaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnR0cmlnb24uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9mdHN5c3RlbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZHJpdmVyLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRtbS5oPgogCiAjaW5jbHVkZSAidHRpbnRlcnAuaCIKICNpbmNsdWRlICJ0dGVycm9ycy5oIgpAQCAtMjk0LDcgKzI5Myw3IEBACiAgICAgRlRfRXJyb3IgIGVycm9yOwogCiAKLSAgICBGVF9UUkFDRTEoKCAiSW5pdF9Db250ZXh0OiBuZXcgb2JqZWN0IGF0IDB4JTA4cFxuIiwgZXhlYyApKTsKKyAgICBGVF9UUkFDRTEoKCAiSW5pdF9Db250ZXh0OiBuZXcgb2JqZWN0IGF0ICVwXG4iLCAodm9pZCAqKWV4ZWMgKSk7CiAKICAgICBleGVjLT5tZW1vcnkgICA9IG1lbW9yeTsKICAgICBleGVjLT5jYWxsU2l6ZSA9IDMyOwpAQCAtMzE5LDcgKzMxOCw3IEBACiAgICAgcmV0dXJuIEZUX0Vycl9PazsKIAogICBGYWlsX01lbW9yeToKLSAgICBGVF9FUlJPUigoICJJbml0X0NvbnRleHQ6IG5vdCBlbm91Z2ggbWVtb3J5IGZvciAlcFxuIiwgZXhlYyApKTsKKyAgICBGVF9FUlJPUigoICJJbml0X0NvbnRleHQ6IG5vdCBlbm91Z2ggbWVtb3J5IGZvciAlcFxuIiwgKHZvaWQgKilleGVjICkpOwogICAgIFRUX0RvbmVfQ29udGV4dCggZXhlYyApOwogCiAgICAgcmV0dXJuIGVycm9yOwpAQCAtMTk1Niw4ICsxOTU1LDggQEAKICAgICogICBkaXN0YW5jZSA6OgogICAgKiAgICAgVGhlIGRpc3RhbmNlIChub3QpIHRvIHJvdW5kLgogICAgKgotICAgKiAgIGNvbXBlbnNhdGlvbiA6OgotICAgKiAgICAgVGhlIGVuZ2luZSBjb21wZW5zYXRpb24uCisgICAqICAgY29sb3IgOjoKKyAgICogICAgIFRoZSBlbmdpbmUgY29tcGVuc2F0aW9uIGNvbG9yLgogICAgKgogICAgKiBAUmV0dXJuOgogICAgKiAgIFRoZSBjb21wZW5zYXRlZCBkaXN0YW5jZS4KQEAgLTE5NjUsMTIgKzE5NjQsMTEgQEAKICAgc3RhdGljIEZUX0YyNkRvdDYKICAgUm91bmRfTm9uZSggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlLAotICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgY29tcGVuc2F0aW9uICkKKyAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIGNvbG9yICkKICAgeworICAgIEZUX0YyNkRvdDYgIGNvbXBlbnNhdGlvbiA9IGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zW2NvbG9yXTsKICAgICBGVF9GMjZEb3Q2ICB2YWw7CiAKLSAgICBGVF9VTlVTRUQoIGV4YyApOwotCiAKICAgICBpZiAoIGRpc3RhbmNlID49IDAgKQogICAgIHsKQEAgLTIwMDAsOCArMTk5OCw4IEBACiAgICAqICAgZGlzdGFuY2UgOjoKICAgICogICAgIFRoZSBkaXN0YW5jZSB0byByb3VuZC4KICAgICoKLSAgICogICBjb21wZW5zYXRpb24gOjoKLSAgICogICAgIFRoZSBlbmdpbmUgY29tcGVuc2F0aW9uLgorICAgKiAgIGNvbG9yIDo6CisgICAqICAgICBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbiBjb2xvci4KICAgICoKICAgICogQFJldHVybjoKICAgICogICBSb3VuZGVkIGRpc3RhbmNlLgpAQCAtMjAwOSwxMiArMjAwNywxMSBAQAogICBzdGF0aWMgRlRfRjI2RG90NgogICBSb3VuZF9Ub19HcmlkKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UsCi0gICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBjb21wZW5zYXRpb24gKQorICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgY29sb3IgKQogICB7CisgICAgRlRfRjI2RG90NiAgY29tcGVuc2F0aW9uID0gZXhjLT50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbY29sb3JdOwogICAgIEZUX0YyNkRvdDYgIHZhbDsKIAotICAgIEZUX1VOVVNFRCggZXhjICk7Ci0KIAogICAgIGlmICggZGlzdGFuY2UgPj0gMCApCiAgICAgewpAQCAtMjA0Niw4ICsyMDQzLDggQEAKICAgICogICBkaXN0YW5jZSA6OgogICAgKiAgICAgVGhlIGRpc3RhbmNlIHRvIHJvdW5kLgogICAgKgotICAgKiAgIGNvbXBlbnNhdGlvbiA6OgotICAgKiAgICAgVGhlIGVuZ2luZSBjb21wZW5zYXRpb24uCisgICAqICAgY29sb3IgOjoKKyAgICogICAgIFRoZSBlbmdpbmUgY29tcGVuc2F0aW9uIGNvbG9yLgogICAgKgogICAgKiBAUmV0dXJuOgogICAgKiAgIFJvdW5kZWQgZGlzdGFuY2UuCkBAIC0yMDU1LDEyICsyMDUyLDExIEBACiAgIHN0YXRpYyBGVF9GMjZEb3Q2CiAgIFJvdW5kX1RvX0hhbGZfR3JpZCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGNvbXBlbnNhdGlvbiApCisgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIGNvbG9yICkKICAgeworICAgIEZUX0YyNkRvdDYgIGNvbXBlbnNhdGlvbiA9IGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zW2NvbG9yXTsKICAgICBGVF9GMjZEb3Q2ICB2YWw7CiAKLSAgICBGVF9VTlVTRUQoIGV4YyApOwotCiAKICAgICBpZiAoIGRpc3RhbmNlID49IDAgKQogICAgIHsKQEAgLTIwOTQsOCArMjA5MCw4IEBACiAgICAqICAgZGlzdGFuY2UgOjoKICAgICogICAgIFRoZSBkaXN0YW5jZSB0byByb3VuZC4KICAgICoKLSAgICogICBjb21wZW5zYXRpb24gOjoKLSAgICogICAgIFRoZSBlbmdpbmUgY29tcGVuc2F0aW9uLgorICAgKiAgIGNvbG9yIDo6CisgICAqICAgICBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbiBjb2xvci4KICAgICoKICAgICogQFJldHVybjoKICAgICogICBSb3VuZGVkIGRpc3RhbmNlLgpAQCAtMjEwMywxMiArMjA5OSwxMSBAQAogICBzdGF0aWMgRlRfRjI2RG90NgogICBSb3VuZF9Eb3duX1RvX0dyaWQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBjb21wZW5zYXRpb24gKQorICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICBjb2xvciApCiAgIHsKKyAgICBGVF9GMjZEb3Q2ICBjb21wZW5zYXRpb24gPSBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1tjb2xvcl07CiAgICAgRlRfRjI2RG90NiAgdmFsOwogCi0gICAgRlRfVU5VU0VEKCBleGMgKTsKLQogCiAgICAgaWYgKCBkaXN0YW5jZSA+PSAwICkKICAgICB7CkBAIC0yMTM5LDggKzIxMzQsOCBAQAogICAgKiAgIGRpc3RhbmNlIDo6CiAgICAqICAgICBUaGUgZGlzdGFuY2UgdG8gcm91bmQuCiAgICAqCi0gICAqICAgY29tcGVuc2F0aW9uIDo6Ci0gICAqICAgICBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbi4KKyAgICogICBjb2xvciA6OgorICAgKiAgICAgVGhlIGVuZ2luZSBjb21wZW5zYXRpb24gY29sb3IuCiAgICAqCiAgICAqIEBSZXR1cm46CiAgICAqICAgUm91bmRlZCBkaXN0YW5jZS4KQEAgLTIxNDgsMTIgKzIxNDMsMTEgQEAKICAgc3RhdGljIEZUX0YyNkRvdDYKICAgUm91bmRfVXBfVG9fR3JpZCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgY29tcGVuc2F0aW9uICkKKyAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIGNvbG9yICkKICAgeworICAgIEZUX0YyNkRvdDYgIGNvbXBlbnNhdGlvbiA9IGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zW2NvbG9yXTsKICAgICBGVF9GMjZEb3Q2ICB2YWw7CiAKLSAgICBGVF9VTlVTRUQoIGV4YyApOwotCiAKICAgICBpZiAoIGRpc3RhbmNlID49IDAgKQogICAgIHsKQEAgLTIxODUsOCArMjE3OSw4IEBACiAgICAqICAgZGlzdGFuY2UgOjoKICAgICogICAgIFRoZSBkaXN0YW5jZSB0byByb3VuZC4KICAgICoKLSAgICogICBjb21wZW5zYXRpb24gOjoKLSAgICogICAgIFRoZSBlbmdpbmUgY29tcGVuc2F0aW9uLgorICAgKiAgIGNvbG9yIDo6CisgICAqICAgICBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbiBjb2xvci4KICAgICoKICAgICogQFJldHVybjoKICAgICogICBSb3VuZGVkIGRpc3RhbmNlLgpAQCAtMjE5NCwxMiArMjE4OCwxMSBAQAogICBzdGF0aWMgRlRfRjI2RG90NgogICBSb3VuZF9Ub19Eb3VibGVfR3JpZCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkaXN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBjb21wZW5zYXRpb24gKQorICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIGNvbG9yICkKICAgeworICAgIEZUX0YyNkRvdDYgIGNvbXBlbnNhdGlvbiA9IGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zW2NvbG9yXTsKICAgICBGVF9GMjZEb3Q2ICB2YWw7CiAKLSAgICBGVF9VTlVTRUQoIGV4YyApOwotCiAKICAgICBpZiAoIGRpc3RhbmNlID49IDAgKQogICAgIHsKQEAgLTIyMzEsOCArMjIyNCw4IEBACiAgICAqICAgZGlzdGFuY2UgOjoKICAgICogICAgIFRoZSBkaXN0YW5jZSB0byByb3VuZC4KICAgICoKLSAgICogICBjb21wZW5zYXRpb24gOjoKLSAgICogICAgIFRoZSBlbmdpbmUgY29tcGVuc2F0aW9uLgorICAgKiAgIGNvbG9yIDo6CisgICAqICAgICBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbiBjb2xvci4KICAgICoKICAgICogQFJldHVybjoKICAgICogICBSb3VuZGVkIGRpc3RhbmNlLgpAQCAtMjI0Niw4ICsyMjM5LDkgQEAKICAgc3RhdGljIEZUX0YyNkRvdDYKICAgUm91bmRfU3VwZXIoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UsCi0gICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgY29tcGVuc2F0aW9uICkKKyAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICBjb2xvciApCiAgIHsKKyAgICBGVF9GMjZEb3Q2ICBjb21wZW5zYXRpb24gPSBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1tjb2xvcl07CiAgICAgRlRfRjI2RG90NiAgdmFsOwogCiAKQEAgLTIyODYsOCArMjI4MCw4IEBACiAgICAqICAgZGlzdGFuY2UgOjoKICAgICogICAgIFRoZSBkaXN0YW5jZSB0byByb3VuZC4KICAgICoKLSAgICogICBjb21wZW5zYXRpb24gOjoKLSAgICogICAgIFRoZSBlbmdpbmUgY29tcGVuc2F0aW9uLgorICAgKiAgIGNvbG9yIDo6CisgICAqICAgICBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbiBjb2xvci4KICAgICoKICAgICogQFJldHVybjoKICAgICogICBSb3VuZGVkIGRpc3RhbmNlLgpAQCAtMjI5OSw4ICsyMjkzLDkgQEAKICAgc3RhdGljIEZUX0YyNkRvdDYKICAgUm91bmRfU3VwZXJfNDUoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UsCi0gICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgY29tcGVuc2F0aW9uICkKKyAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICBjb2xvciApCiAgIHsKKyAgICBGVF9GMjZEb3Q2ICBjb21wZW5zYXRpb24gPSBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1tjb2xvcl07CiAgICAgRlRfRjI2RG90NiAgdmFsOwogCiAKQEAgLTI4OTksNyArMjg5NCw3IEBACiAgIEluc19PREQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewotICAgIGFyZ3NbMF0gPSAoICggZXhjLT5mdW5jX3JvdW5kKCBleGMsIGFyZ3NbMF0sIDAgKSAmIDEyNyApID09IDY0ICk7CisgICAgYXJnc1swXSA9ICggKCBleGMtPmZ1bmNfcm91bmQoIGV4YywgYXJnc1swXSwgMyApICYgMTI3ICkgPT0gNjQgKTsKICAgfQogCiAKQEAgLTI5MTMsNyArMjkwOCw3IEBACiAgIEluc19FVkVOKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7Ci0gICAgYXJnc1swXSA9ICggKCBleGMtPmZ1bmNfcm91bmQoIGV4YywgYXJnc1swXSwgMCApICYgMTI3ICkgPT0gMCApOworICAgIGFyZ3NbMF0gPSAoICggZXhjLT5mdW5jX3JvdW5kKCBleGMsIGFyZ3NbMF0sIDMgKSAmIDEyNyApID09IDAgKTsKICAgfQogCiAKQEAgLTMyNDMsMTAgKzMyMzgsNyBAQAogICBJbnNfUk9VTkQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7Ci0gICAgYXJnc1swXSA9IGV4Yy0+ZnVuY19yb3VuZCgKLSAgICAgICAgICAgICAgICBleGMsCi0gICAgICAgICAgICAgICAgYXJnc1swXSwKLSAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1tleGMtPm9wY29kZSAtIDB4NjhdICk7CisgICAgYXJnc1swXSA9IGV4Yy0+ZnVuY19yb3VuZCggZXhjLCBhcmdzWzBdLCBleGMtPm9wY29kZSAmIDMgKTsKICAgfQogCiAKQEAgLTMyNjAsMTAgKzMyNTIsNyBAQAogICBJbnNfTlJPVU5EKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSAgICBhcmdzWzBdID0gUm91bmRfTm9uZSgKLSAgICAgICAgICAgICAgICBleGMsCi0gICAgICAgICAgICAgICAgYXJnc1swXSwKLSAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1tleGMtPm9wY29kZSAtIDB4NkNdICk7CisgICAgYXJnc1swXSA9IFJvdW5kX05vbmUoIGV4YywgYXJnc1swXSwgZXhjLT5vcGNvZGUgJiAzICk7CiAgIH0KIAogCkBAIC0zNzE4LDcgKzM3MDcsNyBAQAogICAgIC8qIFdlIHdpbGwgdGhlbiBwYXJzZSB0aGUgY3VycmVudCB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgICByZWMgICA9IGV4Yy0+RkRlZnM7Ci0gICAgbGltaXQgPSByZWMgKyBleGMtPm51bUZEZWZzOworICAgIGxpbWl0ID0gRlRfT0ZGU0VUKCByZWMsIGV4Yy0+bnVtRkRlZnMgKTsKICAgICBuICAgICA9IChGVF9VTG9uZylhcmdzWzBdOwogCiAgICAgZm9yICggOyByZWMgPCBsaW1pdDsgcmVjKysgKQpAQCAtMzk2NSw2ICszOTU0LDkgQEAKICAgICBpZiAoIEJPVU5EU0woIEYsIGV4Yy0+bWF4RnVuYyArIDEgKSApCiAgICAgICBnb3RvIEZhaWw7CiAKKyAgICBpZiAoICFleGMtPkZEZWZzICkKKyAgICAgIGdvdG8gRmFpbDsKKwogICAgIC8qIEV4Y2VwdCBmb3Igc29tZSBvbGQgQXBwbGUgZm9udHMsIGFsbCBmdW5jdGlvbnMgaW4gYSBUcnVlVHlwZSAqLwogICAgIC8qIGZvbnQgYXJlIGRlZmluZWQgaW4gaW5jcmVhc2luZyBvcmRlciwgc3RhcnRpbmcgZnJvbSAwLiAgVGhpcyAqLwogICAgIC8qIG1lYW5zIHRoYXQgd2Ugbm9ybWFsbHkgaGF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDA2Miw3ICs0MDU0LDcgQEAKICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiBJZiB0aGlzIGlzbid0IHRydWUsIHdlIG5lZWQgdG8gbG9vayB1cCB0aGUgZnVuY3Rpb24gdGFibGUuICAgKi8KIAotICAgIGRlZiA9IGV4Yy0+RkRlZnMgKyBGOworICAgIGRlZiA9IEZUX09GRlNFVCggZXhjLT5GRGVmcywgRiApOwogICAgIGlmICggZXhjLT5tYXhGdW5jICsgMSAhPSBleGMtPm51bUZEZWZzIHx8IGRlZi0+b3BjICE9IEYgKQogICAgIHsKICAgICAgIC8qIGxvb2sgdXAgdGhlIEZEZWZzIHRhYmxlICovCkBAIC00MDcwLDcgKzQwNjIsNyBAQAogCiAKICAgICAgIGRlZiAgID0gZXhjLT5GRGVmczsKLSAgICAgIGxpbWl0ID0gZGVmICsgZXhjLT5udW1GRGVmczsKKyAgICAgIGxpbWl0ID0gRlRfT0ZGU0VUKCBkZWYsIGV4Yy0+bnVtRkRlZnMgKTsKIAogICAgICAgd2hpbGUgKCBkZWYgPCBsaW1pdCAmJiBkZWYtPm9wYyAhPSBGICkKICAgICAgICAgZGVmKys7CkBAIC00MTUwLDcgKzQxNDIsNyBAQAogICAgIC8qICBGaXJzdCBvZiBhbGwsIGxvb2sgZm9yIHRoZSBzYW1lIGZ1bmN0aW9uIGluIG91ciB0YWJsZSAqLwogCiAgICAgZGVmICAgPSBleGMtPklEZWZzOwotICAgIGxpbWl0ID0gZGVmICsgZXhjLT5udW1JRGVmczsKKyAgICBsaW1pdCA9IEZUX09GRlNFVCggZGVmLCBleGMtPm51bUlEZWZzICk7CiAKICAgICBmb3IgKCA7IGRlZiA8IGxpbWl0OyBkZWYrKyApCiAgICAgICBpZiAoIGRlZi0+b3BjID09IChGVF9VTG9uZylhcmdzWzBdICkKQEAgLTU3MzAsOSArNTcyMiw2IEBACiAgIHsKICAgICBGVF9GMjZEb3Q2ICBkeCwgZHk7CiAgICAgRlRfVVNob3J0ICAgcG9pbnQ7Ci0jaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKLSAgICBGVF9JbnQgICAgICBCMSwgQjI7Ci0jZW5kaWYKICNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAogICAgIEZUX0Jvb2wgICAgIGluX3R3aWxpZ2h0ID0gRlRfQk9PTCggZXhjLT5HUy5nZXAwID09IDAgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MuZ2VwMSA9PSAwIHx8CkBAIC01NzY3LDggKzU3NTYsMTIgQEAKICAgICAgIH0KICAgICAgIGVsc2UKICNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQotICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKQorICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgJiYKKyAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICkKICAgICAgIHsKKyAgICAgICAgRlRfSW50ICBCMSwgQjI7CisKKwogICAgICAgICAvKiAgSWYgbm90IHVzaW5nIGlnbm9yZV94X21vZGUgcmVuZGVyaW5nLCBhbGxvdyBaUDIgbW92ZS4gICAgICAgICovCiAgICAgICAgIC8qICBJZiBpbmxpbmUgZGVsdGFzIGFyZW4ndCBhbGxvd2VkLCBza2lwIFpQMiBtb3ZlLiAgICAgICAgICAgICAgKi8KICAgICAgICAgLyogIElmIHVzaW5nIGlnbm9yZV94X21vZGUgcmVuZGVyaW5nLCBhbGxvdyBaUDIgcG9pbnQgbW92ZSBpZjogICAqLwpAQCAtNTc3Nyw3MiArNTc3MCw1NyBAQAogICAgICAgICAvKiAgIC0gdGhlIGdseXBoIGlzIHNwZWNpZmljYWxseSBzZXQgdG8gYWxsb3cgU0hQSVggbW92ZXMgICAgICAgICovCiAgICAgICAgIC8qICAgLSB0aGUgbW92ZSBpcyBvbiBhIHByZXZpb3VzbHkgWS10b3VjaGVkIHBvaW50ICAgICAgICAgICAgICAgKi8KIAotICAgICAgICBpZiAoIGV4Yy0+aWdub3JlX3hfbW9kZSApCisgICAgICAgIC8qIHNhdmUgcG9pbnQgZm9yIGxhdGVyIGNvbXBhcmlzb24gKi8KKyAgICAgICAgQjEgPSBleGMtPnpwMi5jdXJbcG9pbnRdLnk7CisKKyAgICAgICAgaWYgKCBleGMtPmZhY2UtPnNwaF9jb21wYXRpYmlsaXR5X21vZGUgKQogICAgICAgICB7Ci0gICAgICAgICAgLyogc2F2ZSBwb2ludCBmb3IgbGF0ZXIgY29tcGFyaXNvbiAqLworICAgICAgICAgIGlmICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfUk9VTkRfTk9OUElYRUxfWV9NT1ZFUyApCisgICAgICAgICAgICBkeSA9IEZUX1BJWF9ST1VORCggQjEgKyBkeSApIC0gQjE7CisKKyAgICAgICAgICAvKiBza2lwIHBvc3QtaXVwIGRlbHRhcyAqLworICAgICAgICAgIGlmICggZXhjLT5pdXBfY2FsbGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICggKCBleGMtPnNwaF9pbl9mdW5jX2ZsYWdzICYgU1BIX0ZERUZfSU5MSU5FX0RFTFRBXzEgKSB8fAorICAgICAgICAgICAgICAgICAoIGV4Yy0+c3BoX2luX2Z1bmNfZmxhZ3MgJiBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMiApICkgKQorICAgICAgICAgICAgZ290byBTa2lwOworCisgICAgICAgICAgaWYgKCAhKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19BTFdBWVNfU0tJUF9ERUxUQVAgKSAmJgorICAgICAgICAgICAgICAgICggKCBleGMtPmlzX2NvbXBvc2l0ZSAmJiBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICkgfHwKKyAgICAgICAgICAgICAgICAgICggZXhjLT56cDIudGFnc1twb2ludF0gJiBGVF9DVVJWRV9UQUdfVE9VQ0hfWSApICAgIHx8CisgICAgICAgICAgICAgICAgICAoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX0RPX1NIUElYICkgICAgICApICApCisgICAgICAgICAgICBNb3ZlX1pwMl9Qb2ludCggZXhjLCBwb2ludCwgMCwgZHksIFRSVUUgKTsKKworICAgICAgICAgIC8qIHNhdmUgbmV3IHBvaW50ICovCiAgICAgICAgICAgaWYgKCBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICkKLSAgICAgICAgICAgIEIxID0gZXhjLT56cDIuY3VyW3BvaW50XS55OwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIEIxID0gZXhjLT56cDIuY3VyW3BvaW50XS54OwotCi0gICAgICAgICAgaWYgKCAhZXhjLT5mYWNlLT5zcGhfY29tcGF0aWJpbGl0eV9tb2RlICYmCi0gICAgICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICAgICAgICAgICkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBNb3ZlX1pwMl9Qb2ludCggZXhjLCBwb2ludCwgZHgsIGR5LCBUUlVFICk7CisgICAgICAgICAgICBCMiA9IGV4Yy0+enAyLmN1cltwb2ludF0ueTsKIAotICAgICAgICAgICAgLyogc2F2ZSBuZXcgcG9pbnQgKi8KLSAgICAgICAgICAgIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnkgIT0gMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEIyID0gZXhjLT56cDIuY3VyW3BvaW50XS55OwotCi0gICAgICAgICAgICAgIC8qIHJldmVyc2UgYW55IGRpc2FsbG93ZWQgbW92ZXMgKi8KLSAgICAgICAgICAgICAgaWYgKCAoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX1NLSVBfTk9OUElYRUxfWV9NT1ZFUyApICYmCi0gICAgICAgICAgICAgICAgICAgKCBCMSAmIDYzICkgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICAgICAgICggQjIgJiA2MyApICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgICAgICAgICBCMSAhPSBCMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICBNb3ZlX1pwMl9Qb2ludCggZXhjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVHX0xPTkcoIGR4ICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FR19MT05HKCBkeSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFICk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAvKiByZXZlcnNlIGFueSBkaXNhbGxvd2VkIG1vdmVzICovCisgICAgICAgICAgICBpZiAoICggQjEgJiA2MyApID09IDAgJiYKKyAgICAgICAgICAgICAgICAgKCBCMiAmIDYzICkgIT0gMCAmJgorICAgICAgICAgICAgICAgICBCMSAhPSBCMiAgICAgICAgICkKKyAgICAgICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIDAsIE5FR19MT05HKCBkeSApLCBUUlVFICk7CiAgICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKCBleGMtPmZhY2UtPnNwaF9jb21wYXRpYmlsaXR5X21vZGUgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfUk9VTkRfTk9OUElYRUxfWV9NT1ZFUyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGR4ID0gRlRfUElYX1JPVU5EKCBCMSArIGR4ICkgLSBCMTsKLSAgICAgICAgICAgICAgZHkgPSBGVF9QSVhfUk9VTkQoIEIxICsgZHkgKSAtIEIxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBza2lwIHBvc3QtaXVwIGRlbHRhcyAqLwotICAgICAgICAgICAgaWYgKCBleGMtPml1cF9jYWxsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICAgICAoICggZXhjLT5zcGhfaW5fZnVuY19mbGFncyAmIFNQSF9GREVGX0lOTElORV9ERUxUQV8xICkgfHwKLSAgICAgICAgICAgICAgICAgICAoIGV4Yy0+c3BoX2luX2Z1bmNfZmxhZ3MgJiBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMiApICkgKQotICAgICAgICAgICAgICBnb3RvIFNraXA7Ci0KLSAgICAgICAgICAgIGlmICggISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfQUxXQVlTX1NLSVBfREVMVEFQICkgJiYKLSAgICAgICAgICAgICAgICAgICggKCBleGMtPmlzX2NvbXBvc2l0ZSAmJiBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICkgfHwKLSAgICAgICAgICAgICAgICAgICAgKCBleGMtPnpwMi50YWdzW3BvaW50XSAmIEZUX0NVUlZFX1RBR19UT1VDSF9ZICkgICAgfHwKLSAgICAgICAgICAgICAgICAgICAgKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19ET19TSFBJWCApICAgICAgKSAgKQotICAgICAgICAgICAgICBNb3ZlX1pwMl9Qb2ludCggZXhjLCBwb2ludCwgMCwgZHksIFRSVUUgKTsKLQotICAgICAgICAgICAgLyogc2F2ZSBuZXcgcG9pbnQgKi8KLSAgICAgICAgICAgIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnkgIT0gMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEIyID0gZXhjLT56cDIuY3VyW3BvaW50XS55OwotCi0gICAgICAgICAgICAgIC8qIHJldmVyc2UgYW55IGRpc2FsbG93ZWQgbW92ZXMgKi8KLSAgICAgICAgICAgICAgaWYgKCAoIEIxICYgNjMgKSA9PSAwICYmCi0gICAgICAgICAgICAgICAgICAgKCBCMiAmIDYzICkgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgIEIxICE9IEIyICAgICAgICAgKQotICAgICAgICAgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsIHBvaW50LCAwLCBORUdfTE9ORyggZHkgKSwgVFJVRSApOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmICggZXhjLT5zcGhfaW5fZnVuY19mbGFncyAmIFNQSF9GREVGX1RZUEVNQU5fRElBR0VORENUUkwgKQotICAgICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIGR4LCBkeSwgVFJVRSApOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIGR4LCBkeSwgVFJVRSApOworCisgICAgICAgICAgLyogc2F2ZSBuZXcgcG9pbnQgKi8KKyAgICAgICAgICBCMiA9IGV4Yy0+enAyLmN1cltwb2ludF0ueTsKKworICAgICAgICAgIC8qIHJldmVyc2UgYW55IGRpc2FsbG93ZWQgbW92ZXMgKi8KKyAgICAgICAgICBpZiAoICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfU0tJUF9OT05QSVhFTF9ZX01PVkVTICkgJiYKKyAgICAgICAgICAgICAgICggQjEgJiA2MyApICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICggQjIgJiA2MyApICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgIEIxICE9IEIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORUdfTE9ORyggZHggKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORUdfTE9ORyggZHkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGV4Yy0+c3BoX2luX2Z1bmNfZmxhZ3MgJiBTUEhfRkRFRl9UWVBFTUFOX0RJQUdFTkRDVFJMICkKICAgICAgICAgICBNb3ZlX1pwMl9Qb2ludCggZXhjLCBwb2ludCwgZHgsIGR5LCBUUlVFICk7CiAgICAgICB9CiAgICAgICBlbHNlCkBAIC01ODkwLDIyICs1ODY4LDggQEAKICAgewogICAgIEZUX1VTaG9ydCAgIHBvaW50ID0gMDsKICAgICBGVF9GMjZEb3Q2ICBkaXN0YW5jZTsKLSNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQotICAgIEZUX0YyNkRvdDYgIGNvbnRyb2xfdmFsdWVfY3V0aW4gPSAwOwotICAgIEZUX0YyNkRvdDYgIGRlbHRhOwogCiAKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSApCi0gICAgewotICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IGV4Yy0+R1MuY29udHJvbF92YWx1ZV9jdXRpbjsKLQotICAgICAgaWYgKCBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAhKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19OT1JNQUxfUk9VTkQgKSApCi0gICAgICAgIGNvbnRyb2xfdmFsdWVfY3V0aW4gPSAwOwotICAgIH0KLSNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwotCiAgICAgcG9pbnQgPSAoRlRfVVNob3J0KWFyZ3NbMF07CiAKICAgICBpZiAoIEJPVU5EUyggcG9pbnQsICAgICAgIGV4Yy0+enAxLm5fcG9pbnRzICkgfHwKQEAgLTU5MjgsMTYgKzU4OTIsMjUgQEAKICAgICBkaXN0YW5jZSA9IFBST0pFQ1QoIGV4Yy0+enAxLmN1ciArIHBvaW50LCBleGMtPnpwMC5jdXIgKyBleGMtPkdTLnJwMCApOwogCiAjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKLSAgICBkZWx0YSA9IFNVQl9MT05HKCBkaXN0YW5jZSwgYXJnc1sxXSApOwotICAgIGlmICggZGVsdGEgPCAwICkKLSAgICAgIGRlbHRhID0gTkVHX0xPTkcoIGRlbHRhICk7Ci0KICAgICAvKiBzdWJwaXhlbCBoaW50aW5nIC0gbWFrZSBNU0lSUCByZXNwZWN0IENWVCBjdXQtaW47ICovCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgICYmCi0gICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICYmCi0gICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICYmCi0gICAgICAgICBkZWx0YSA+PSBjb250cm9sX3ZhbHVlX2N1dGluICkKLSAgICAgIGRpc3RhbmNlID0gYXJnc1sxXTsKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICYmCisgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgKQorICAgIHsKKyAgICAgIEZUX0YyNkRvdDYgIGNvbnRyb2xfdmFsdWVfY3V0aW4gPSBleGMtPkdTLmNvbnRyb2xfdmFsdWVfY3V0aW47CisgICAgICBGVF9GMjZEb3Q2ICBkZWx0YTsKKworCisgICAgICBpZiAoICEoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX05PUk1BTF9ST1VORCApICkKKyAgICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IDA7CisKKyAgICAgIGRlbHRhID0gU1VCX0xPTkcoIGRpc3RhbmNlLCBhcmdzWzFdICk7CisgICAgICBpZiAoIGRlbHRhIDwgMCApCisgICAgICAgIGRlbHRhID0gTkVHX0xPTkcoIGRlbHRhICk7CisKKyAgICAgIGlmICggZGVsdGEgPj0gY29udHJvbF92YWx1ZV9jdXRpbiApCisgICAgICAgIGRpc3RhbmNlID0gYXJnc1sxXTsKKyAgICB9CiAjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsCkBAIC01OTg0LDE4ICs1OTU3LDEwIEBACiAgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAmJgogICAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgJiYKICAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggIT0gMCAgICkKLSAgICAgICAgZGlzdGFuY2UgPSBTVUJfTE9ORygKLSAgICAgICAgICAgICAgICAgICAgIFJvdW5kX05vbmUoIGV4YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9kaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbMF0gKSwKLSAgICAgICAgICAgICAgICAgICAgIGN1cl9kaXN0ICk7CisgICAgICAgIGRpc3RhbmNlID0gU1VCX0xPTkcoIFJvdW5kX05vbmUoIGV4YywgY3VyX2Rpc3QsIDMgKSwgY3VyX2Rpc3QgKTsKICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICBkaXN0YW5jZSA9IFNVQl9MT05HKAotICAgICAgICAgICAgICAgICAgICAgZXhjLT5mdW5jX3JvdW5kKCBleGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9kaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1swXSApLAotICAgICAgICAgICAgICAgICAgICAgY3VyX2Rpc3QgKTsKKyAgICAgICAgZGlzdGFuY2UgPSBTVUJfTE9ORyggZXhjLT5mdW5jX3JvdW5kKCBleGMsIGN1cl9kaXN0LCAzICksIGN1cl9kaXN0ICk7CiAgICAgfQogICAgIGVsc2UKICAgICAgIGRpc3RhbmNlID0gMDsKQEAgLTYwMjEsMjEgKzU5ODYsMTAgQEAKICAgICBGVF9VU2hvcnQgICBwb2ludDsKICAgICBGVF9GMjZEb3Q2ICBkaXN0YW5jZTsKICAgICBGVF9GMjZEb3Q2ICBvcmdfZGlzdDsKLSAgICBGVF9GMjZEb3Q2ICBjb250cm9sX3ZhbHVlX2N1dGluOwogCiAKLSAgICBjb250cm9sX3ZhbHVlX2N1dGluID0gZXhjLT5HUy5jb250cm9sX3ZhbHVlX2N1dGluOwotICAgIGN2dEVudHJ5ICAgICAgICAgICAgPSAoRlRfVUxvbmcpYXJnc1sxXTsKLSAgICBwb2ludCAgICAgICAgICAgICAgID0gKEZUX1VTaG9ydClhcmdzWzBdOwotCi0jaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAhKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19OT1JNQUxfUk9VTkQgKSApCi0gICAgICBjb250cm9sX3ZhbHVlX2N1dGluID0gMDsKLSNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLworICAgIGN2dEVudHJ5ID0gKEZUX1VMb25nKWFyZ3NbMV07CisgICAgcG9pbnQgICAgPSAoRlRfVVNob3J0KWFyZ3NbMF07CiAKICAgICBpZiAoIEJPVU5EUyggcG9pbnQsICAgICBleGMtPnpwMC5uX3BvaW50cyApIHx8CiAgICAgICAgICBCT1VORFNMKCBjdnRFbnRyeSwgZXhjLT5jdnRTaXplICkgICAgICApCkBAIC02MDc5LDcgKzYwMzMsNyBAQAogICAgICAgICBleGMtPnpwMC5vcmdbcG9pbnRdLnggPSBUVF9NdWxGaXgxNCggZGlzdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCApOwogICAgICAgZXhjLT56cDAub3JnW3BvaW50XS55ID0gVFRfTXVsRml4MTQoIGRpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnkgKTsKICAgICAgIGV4Yy0+enAwLmN1cltwb2ludF0gICA9IGV4Yy0+enAwLm9yZ1twb2ludF07CiAgICAgfQogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCkBAIC02MDk1LDkgKzYwNDksMTkgQEAKIAogICAgIGlmICggKCBleGMtPm9wY29kZSAmIDEgKSAhPSAwICkgICAvKiByb3VuZGluZyBhbmQgY29udHJvbCBjdXQtaW4gZmxhZyAqLwogICAgIHsKKyAgICAgIEZUX0YyNkRvdDYgIGNvbnRyb2xfdmFsdWVfY3V0aW4gPSBleGMtPkdTLmNvbnRyb2xfdmFsdWVfY3V0aW47CiAgICAgICBGVF9GMjZEb3Q2ICBkZWx0YTsKIAogCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnkgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQorICAgICAgICBjb250cm9sX3ZhbHVlX2N1dGluID0gMDsKKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLworCiAgICAgICBkZWx0YSA9IFNVQl9MT05HKCBkaXN0YW5jZSwgb3JnX2Rpc3QgKTsKICAgICAgIGlmICggZGVsdGEgPCAwICkKICAgICAgICAgZGVsdGEgPSBORUdfTE9ORyggZGVsdGEgKTsKQEAgLTYxMDksMTQgKzYwNzMsMTAgQEAKICAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICYmCiAgICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAmJgogICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgKQotICAgICAgICBkaXN0YW5jZSA9IFJvdW5kX05vbmUoIGV4YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1swXSApOworICAgICAgICBkaXN0YW5jZSA9IFJvdW5kX05vbmUoIGV4YywgZGlzdGFuY2UsIDMgKTsKICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICBkaXN0YW5jZSA9IGV4Yy0+ZnVuY19yb3VuZCggZXhjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1swXSApOworICAgICAgICBkaXN0YW5jZSA9IGV4Yy0+ZnVuY19yb3VuZCggZXhjLCBkaXN0YW5jZSwgMyApOwogICAgIH0KIAogICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMCwgcG9pbnQsIFNVQl9MT05HKCBkaXN0YW5jZSwgb3JnX2Rpc3QgKSApOwpAQCAtNjEzOCwxOSArNjA5OCw5IEBACiAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKICAgICBGVF9VU2hvcnQgICBwb2ludCA9IDA7Ci0gICAgRlRfRjI2RG90NiAgb3JnX2Rpc3QsIGRpc3RhbmNlLCBtaW5pbXVtX2Rpc3RhbmNlOworICAgIEZUX0YyNkRvdDYgIG9yZ19kaXN0LCBkaXN0YW5jZTsKIAogCi0gICAgbWluaW11bV9kaXN0YW5jZSA9IGV4Yy0+R1MubWluaW11bV9kaXN0YW5jZTsKLQotI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAhKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19OT1JNQUxfUk9VTkQgKSApCi0gICAgICBtaW5pbXVtX2Rpc3RhbmNlID0gMDsKLSNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwotCiAgICAgcG9pbnQgPSAoRlRfVVNob3J0KWFyZ3NbMF07CiAKICAgICBpZiAoIEJPVU5EUyggcG9pbnQsICAgICAgIGV4Yy0+enAxLm5fcG9pbnRzICkgfHwKQEAgLTYyMjMsMjcgKzYxNzMsMjkgQEAKICAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICYmCiAgICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAmJgogICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgKQotICAgICAgICBkaXN0YW5jZSA9IFJvdW5kX05vbmUoCi0gICAgICAgICAgICAgICAgICAgICBleGMsCi0gICAgICAgICAgICAgICAgICAgICBvcmdfZGlzdCwKLSAgICAgICAgICAgICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zW2V4Yy0+b3Bjb2RlICYgM10gKTsKKyAgICAgICAgZGlzdGFuY2UgPSBSb3VuZF9Ob25lKCBleGMsIG9yZ19kaXN0LCBleGMtPm9wY29kZSAmIDMgKTsKICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICBkaXN0YW5jZSA9IGV4Yy0+ZnVuY19yb3VuZCgKLSAgICAgICAgICAgICAgICAgICAgIGV4YywKLSAgICAgICAgICAgICAgICAgICAgIG9yZ19kaXN0LAotICAgICAgICAgICAgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbZXhjLT5vcGNvZGUgJiAzXSApOworICAgICAgICBkaXN0YW5jZSA9IGV4Yy0+ZnVuY19yb3VuZCggZXhjLCBvcmdfZGlzdCwgZXhjLT5vcGNvZGUgJiAzICk7CiAgICAgfQogICAgIGVsc2UKLSAgICAgIGRpc3RhbmNlID0gUm91bmRfTm9uZSgKLSAgICAgICAgICAgICAgICAgICBleGMsCi0gICAgICAgICAgICAgICAgICAgb3JnX2Rpc3QsCi0gICAgICAgICAgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbZXhjLT5vcGNvZGUgJiAzXSApOworICAgICAgZGlzdGFuY2UgPSBSb3VuZF9Ob25lKCBleGMsIG9yZ19kaXN0LCBleGMtPm9wY29kZSAmIDMgKTsKIAogICAgIC8qIG1pbmltdW0gZGlzdGFuY2UgZmxhZyAqLwogCiAgICAgaWYgKCAoIGV4Yy0+b3Bjb2RlICYgOCApICE9IDAgKQogICAgIHsKKyAgICAgIEZUX0YyNkRvdDYgIG1pbmltdW1fZGlzdGFuY2UgPSBleGMtPkdTLm1pbmltdW1fZGlzdGFuY2U7CisKKworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCisgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICEoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX05PUk1BTF9ST1VORCApICkKKyAgICAgICAgbWluaW11bV9kaXN0YW5jZSA9IDA7CisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KKwogICAgICAgaWYgKCBvcmdfZGlzdCA+PSAwICkKICAgICAgIHsKICAgICAgICAgaWYgKCBkaXN0YW5jZSA8IG1pbmltdW1fZGlzdGFuY2UgKQpAQCAtNjI4NywzMCArNjIzOSwxMyBAQAogICAgIEZUX0YyNkRvdDYgIGN2dF9kaXN0LAogICAgICAgICAgICAgICAgIGRpc3RhbmNlLAogICAgICAgICAgICAgICAgIGN1cl9kaXN0LAotICAgICAgICAgICAgICAgIG9yZ19kaXN0LAotICAgICAgICAgICAgICAgIGNvbnRyb2xfdmFsdWVfY3V0aW4sCi0gICAgICAgICAgICAgICAgbWluaW11bV9kaXN0YW5jZTsKLSNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQotICAgIEZUX0ludCAgICAgIEIxICAgICAgICAgICA9IDA7IC8qIHBhY2lmeSBjb21waWxlciAqLwotICAgIEZUX0ludCAgICAgIEIyICAgICAgICAgICA9IDA7Ci0gICAgRlRfQm9vbCAgICAgcmV2ZXJzZV9tb3ZlID0gRkFMU0U7Ci0jZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KKyAgICAgICAgICAgICAgICBvcmdfZGlzdDsKIAogICAgIEZUX0YyNkRvdDYgIGRlbHRhOwogCiAKLSAgICBtaW5pbXVtX2Rpc3RhbmNlICAgID0gZXhjLT5HUy5taW5pbXVtX2Rpc3RhbmNlOwotICAgIGNvbnRyb2xfdmFsdWVfY3V0aW4gPSBleGMtPkdTLmNvbnRyb2xfdmFsdWVfY3V0aW47Ci0gICAgcG9pbnQgICAgICAgICAgICAgICA9IChGVF9VU2hvcnQpYXJnc1swXTsKLSAgICBjdnRFbnRyeSAgICAgICAgICAgID0gKEZUX1VMb25nKSggQUREX0xPTkcoIGFyZ3NbMV0sIDEgKSApOwotCi0jaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICEoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX05PUk1BTF9ST1VORCApICkKLSAgICAgIGNvbnRyb2xfdmFsdWVfY3V0aW4gPSBtaW5pbXVtX2Rpc3RhbmNlID0gMDsKLSNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLworICAgIHBvaW50ICAgID0gKEZUX1VTaG9ydClhcmdzWzBdOworICAgIGN2dEVudHJ5ID0gKEZUX1VMb25nKSggQUREX0xPTkcoIGFyZ3NbMV0sIDEgKSApOwogCiAgICAgLyogWFhYOiBVTkRPQ1VNRU5URUQhIGN2dFstMV0gPSAwIGFsd2F5cyAqLwogCkBAIC02MzQ2LDEyICs2MjgxLDE0IEBACiAgICAgLyogdHdpbGlnaHQgcG9pbnRzIChjb25maXJtZWQgYnkgR3JlZyBIaXRjaGNvY2spICAgKi8KICAgICBpZiAoIGV4Yy0+R1MuZ2VwMSA9PSAwICkKICAgICB7Ci0gICAgICBleGMtPnpwMS5vcmdbcG9pbnRdLnggPSBleGMtPnpwMC5vcmdbZXhjLT5HUy5ycDBdLnggKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfTXVsRml4MTQoIGN2dF9kaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICk7Ci0gICAgICBleGMtPnpwMS5vcmdbcG9pbnRdLnkgPSBleGMtPnpwMC5vcmdbZXhjLT5HUy5ycDBdLnkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfTXVsRml4MTQoIGN2dF9kaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICk7CisgICAgICBleGMtPnpwMS5vcmdbcG9pbnRdLnggPSBBRERfTE9ORygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT56cDAub3JnW2V4Yy0+R1MucnAwXS54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9NdWxGaXgxNCggY3Z0X2Rpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCApICk7CisgICAgICBleGMtPnpwMS5vcmdbcG9pbnRdLnkgPSBBRERfTE9ORygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT56cDAub3JnW2V4Yy0+R1MucnAwXS55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9NdWxGaXgxNCggY3Z0X2Rpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSApICk7CiAgICAgICBleGMtPnpwMS5jdXJbcG9pbnRdICAgPSBleGMtPnpwMS5vcmdbcG9pbnRdOwogICAgIH0KIApAQCAtNjM2NiwxOSArNjMwMyw2IEBACiAgICAgICAgIGN2dF9kaXN0ID0gTkVHX0xPTkcoIGN2dF9kaXN0ICk7CiAgICAgfQogCi0jaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfVElNRVNfTkVXX1JPTUFOX0hBQ0sgKSApCi0gICAgewotICAgICAgaWYgKCBjdXJfZGlzdCA8IC02NCApCi0gICAgICAgIGN2dF9kaXN0IC09IDE2OwotICAgICAgZWxzZSBpZiAoIGN1cl9kaXN0ID4gNjQgJiYgY3VyX2Rpc3QgPCA4NCApCi0gICAgICAgIGN2dF9kaXN0ICs9IDMyOwotICAgIH0KLSNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwotCiAgICAgLyogY29udHJvbCB2YWx1ZSBjdXQtaW4gYW5kIHJvdW5kICovCiAKICAgICBpZiAoICggZXhjLT5vcGNvZGUgJiA0ICkgIT0gMCApCkBAIC02Mzg4LDYgKzYzMTIsOSBAQAogCiAgICAgICBpZiAoIGV4Yy0+R1MuZ2VwMCA9PSBleGMtPkdTLmdlcDEgKQogICAgICAgeworICAgICAgICBGVF9GMjZEb3Q2ICBjb250cm9sX3ZhbHVlX2N1dGluID0gZXhjLT5HUy5jb250cm9sX3ZhbHVlX2N1dGluOworCisKICAgICAgICAgLyogWFhYOiBBY2NvcmRpbmcgdG8gR3JlZyBIaXRjaGNvY2ssIHRoZSBmb2xsb3dpbmcgd29yZGluZyBpcyAqLwogICAgICAgICAvKiAgICAgIHRoZSByaWdodCBvbmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTY0MDgsMTAgKzYzMzUsNyBAQAogICAgICAgICAgIGN2dF9kaXN0ID0gb3JnX2Rpc3Q7CiAgICAgICB9CiAKLSAgICAgIGRpc3RhbmNlID0gZXhjLT5mdW5jX3JvdW5kKAotICAgICAgICAgICAgICAgICAgIGV4YywKLSAgICAgICAgICAgICAgICAgICBjdnRfZGlzdCwKLSAgICAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1tleGMtPm9wY29kZSAmIDNdICk7CisgICAgICBkaXN0YW5jZSA9IGV4Yy0+ZnVuY19yb3VuZCggZXhjLCBjdnRfZGlzdCwgZXhjLT5vcGNvZGUgJiAzICk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC02NDIyLDYgKzYzNDYsMjIgQEAKICAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAmJgogICAgICAgICAgICBleGMtPkdTLmdlcDAgPT0gZXhjLT5HUy5nZXAxICkKICAgICAgIHsKKyAgICAgICAgRlRfRjI2RG90NiAgY29udHJvbF92YWx1ZV9jdXRpbiA9IGV4Yy0+R1MuY29udHJvbF92YWx1ZV9jdXRpbjsKKworCisgICAgICAgIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnggIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAhKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19OT1JNQUxfUk9VTkQgKSApCisgICAgICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IDA7CisKKyAgICAgICAgaWYgKCBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX1RJTUVTX05FV19ST01BTl9IQUNLICkgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBjdXJfZGlzdCA8IC02NCApCisgICAgICAgICAgICBjdnRfZGlzdCAtPSAxNjsKKyAgICAgICAgICBlbHNlIGlmICggY3VyX2Rpc3QgPiA2NCAmJiBjdXJfZGlzdCA8IDg0ICkKKyAgICAgICAgICAgIGN2dF9kaXN0ICs9IDMyOworICAgICAgICB9CisKICAgICAgICAgZGVsdGEgPSBTVUJfTE9ORyggY3Z0X2Rpc3QsIG9yZ19kaXN0ICk7CiAgICAgICAgIGlmICggZGVsdGEgPCAwICkKICAgICAgICAgICBkZWx0YSA9IE5FR19MT05HKCBkZWx0YSApOwpAQCAtNjQzMSwxNiArNjM3MSwyNCBAQAogICAgICAgfQogI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKLSAgICAgIGRpc3RhbmNlID0gUm91bmRfTm9uZSgKLSAgICAgICAgICAgICAgICAgICBleGMsCi0gICAgICAgICAgICAgICAgICAgY3Z0X2Rpc3QsCi0gICAgICAgICAgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbZXhjLT5vcGNvZGUgJiAzXSApOworICAgICAgZGlzdGFuY2UgPSBSb3VuZF9Ob25lKCBleGMsIGN2dF9kaXN0LCBleGMtPm9wY29kZSAmIDMgKTsKICAgICB9CiAKICAgICAvKiBtaW5pbXVtIGRpc3RhbmNlIHRlc3QgKi8KIAogICAgIGlmICggKCBleGMtPm9wY29kZSAmIDggKSAhPSAwICkKICAgICB7CisgICAgICBGVF9GMjZEb3Q2ICBtaW5pbXVtX2Rpc3RhbmNlICAgID0gZXhjLT5HUy5taW5pbXVtX2Rpc3RhbmNlOworCisKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAhKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19OT1JNQUxfUk9VTkQgKSApCisgICAgICAgIG1pbmltdW1fZGlzdGFuY2UgPSAwOworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCisKICAgICAgIGlmICggb3JnX2Rpc3QgPj0gMCApCiAgICAgICB7CiAgICAgICAgIGlmICggZGlzdGFuY2UgPCBtaW5pbXVtX2Rpc3RhbmNlICkKQEAgLTY0NTQsNjAgKzY0MDIsNTEgQEAKICAgICB9CiAKICNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQotICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICYmCisgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICAgKQogICAgIHsKKyAgICAgIEZUX0ludCAgIEIxLCBCMjsKKworCiAgICAgICBCMSA9IGV4Yy0+enAxLmN1cltwb2ludF0ueTsKIAogICAgICAgLyogUm91bmQgbW92ZXMgaWYgbmVjZXNzYXJ5ICovCi0gICAgICBpZiAoIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfUk9VTkRfTk9OUElYRUxfWV9NT1ZFUyApICkKKyAgICAgIGlmICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfUk9VTkRfTk9OUElYRUxfWV9NT1ZFUyApCiAgICAgICAgIGRpc3RhbmNlID0gRlRfUElYX1JPVU5EKCBCMSArIGRpc3RhbmNlIC0gY3VyX2Rpc3QgKSAtIEIxICsgY3VyX2Rpc3Q7CiAKLSAgICAgIGlmICggZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICggZXhjLT5vcGNvZGUgJiAxNiApID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgIGlmICggKCBleGMtPm9wY29kZSAmIDE2ICkgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAoIGV4Yy0+b3Bjb2RlICYgOCApID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfQ09VUklFUl9ORVdfMl9IQUNLICkgKQogICAgICAgICBkaXN0YW5jZSArPSA2NDsKLSAgICB9Ci0jZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAotICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsCi0gICAgICAgICAgICAgICAgICAgICZleGMtPnpwMSwKLSAgICAgICAgICAgICAgICAgICAgcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgIFNVQl9MT05HKCBkaXN0YW5jZSwgY3VyX2Rpc3QgKSApOworICAgICAgZXhjLT5mdW5jX21vdmUoIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAmZXhjLT56cDEsCisgICAgICAgICAgICAgICAgICAgICAgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgU1VCX0xPTkcoIGRpc3RhbmNlLCBjdXJfZGlzdCApICk7CiAKLSNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQotICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICkKLSAgICB7CiAgICAgICBCMiA9IGV4Yy0+enAxLmN1cltwb2ludF0ueTsKIAogICAgICAgLyogUmV2ZXJzZSBtb3ZlIGlmIG5lY2Vzc2FyeSAqLwotICAgICAgaWYgKCBleGMtPmlnbm9yZV94X21vZGUgKQotICAgICAgewotICAgICAgICBpZiAoIGV4Yy0+ZmFjZS0+c3BoX2NvbXBhdGliaWxpdHlfbW9kZSAmJgotICAgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgICAgICAgICAmJgorICAgICAgaWYgKCAoIGV4Yy0+ZmFjZS0+c3BoX2NvbXBhdGliaWxpdHlfbW9kZSAmJgogICAgICAgICAgICAgICggQjEgJiA2MyApID09IDAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICggQjIgJiA2MyApICE9IDAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgcmV2ZXJzZV9tb3ZlID0gVFJVRTsKLQotICAgICAgICBpZiAoICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfU0tJUF9OT05QSVhFTF9ZX01PVkVTICkgJiYKLSAgICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICAgKCBCMiAmIDYzICkgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICggQjEgJiA2MyApICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgIHJldmVyc2VfbW92ZSA9IFRSVUU7Ci0gICAgICB9Ci0KLSAgICAgIGlmICggcmV2ZXJzZV9tb3ZlICkKKyAgICAgICAgICAgICAoIEIyICYgNjMgKSAhPSAwICAgICAgICAgICAgICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgKCAoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX1NLSVBfTk9OUElYRUxfWV9NT1ZFUyApICYmCisgICAgICAgICAgICAgKCBCMSAmIDYzICkgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICggQjIgJiA2MyApICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSApCiAgICAgICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAmZXhjLT56cDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgIFNVQl9MT05HKCBjdXJfZGlzdCwgZGlzdGFuY2UgKSApOwogICAgIH0KLQorICAgIGVsc2UKICNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCisgICAgICBleGMtPmZ1bmNfbW92ZSggZXhjLAorICAgICAgICAgICAgICAgICAgICAgICZleGMtPnpwMSwKKyAgICAgICAgICAgICAgICAgICAgICBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICBTVUJfTE9ORyggZGlzdGFuY2UsIGN1cl9kaXN0ICkgKTsKKwogICBGYWlsOgogICAgIGV4Yy0+R1MucnAxID0gZXhjLT5HUy5ycDA7CiAKQEAgLTcxODAsMTAgKzcxMTksOSBAQAogICAgIEZUX1VTaG9ydCAgQTsKICAgICBGVF9VTG9uZyAgIEMsIFA7CiAgICAgRlRfTG9uZyAgICBCOworCisKICNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQotICAgIEZUX1VTaG9ydCAgQjEsIEIyOwotCi0KICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgZXhjLT5pdXBfY2FsbGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKQEAgLTcyNjQsNiArNzIwMiw5IEBACiAgICAgICAgICAgICAvKiBydWxlcywgYWx3YXlzIHNraXBwaW5nIGRlbHRhcyBpbiBzdWJwaXhlbCBkaXJlY3Rpb24uICAgICAqLwogICAgICAgICAgICAgZWxzZSBpZiAoIGV4Yy0+aWdub3JlX3hfbW9kZSAmJiBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICkKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfVVNob3J0ICBCMSwgQjI7CisKKwogICAgICAgICAgICAgICAvKiBzYXZlIHRoZSB5IHZhbHVlIG9mIHRoZSBwb2ludCBub3c7IGNvbXBhcmUgYWZ0ZXIgbW92ZSAqLwogICAgICAgICAgICAgICBCMSA9IChGVF9VU2hvcnQpZXhjLT56cDAuY3VyW0FdLnk7CiAKQEAgLTc3MTUsNyArNzY1Niw3IEBACiAgIEluc19VTktOT1dOKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewogICAgIFRUX0RlZlJlY29yZCogIGRlZiAgID0gZXhjLT5JRGVmczsKLSAgICBUVF9EZWZSZWNvcmQqICBsaW1pdCA9IGRlZiArIGV4Yy0+bnVtSURlZnM7CisgICAgVFRfRGVmUmVjb3JkKiAgbGltaXQgPSBGVF9PRkZTRVQoIGRlZiwgZXhjLT5udW1JRGVmcyApOwogCiAKICAgICBmb3IgKCA7IGRlZiA8IGxpbWl0OyBkZWYrKyApCkBAIC03ODQxLDcgKzc3ODIsNyBAQAogICAgICAgICBudW1fdHdpbGlnaHRfcG9pbnRzID0gMHhGRkZGVTsKIAogICAgICAgRlRfVFJBQ0U1KCggIlRUX1J1bkluczogUmVzZXR0aW5nIG51bWJlciBvZiB0d2lsaWdodCBwb2ludHNcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgICAgICAgIGZyb20gJWQgdG8gdGhlIG1vcmUgcmVhc29uYWJsZSB2YWx1ZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICIgICAgICAgICAgIGZyb20gJWQgdG8gdGhlIG1vcmUgcmVhc29uYWJsZSB2YWx1ZSAlbGRcbiIsCiAgICAgICAgICAgICAgICAgICBleGMtPnR3aWxpZ2h0Lm5fcG9pbnRzLAogICAgICAgICAgICAgICAgICAgbnVtX3R3aWxpZ2h0X3BvaW50cyApKTsKICAgICAgIGV4Yy0+dHdpbGlnaHQubl9wb2ludHMgPSAoRlRfVVNob3J0KW51bV90d2lsaWdodF9wb2ludHM7CkBAIC03ODY3LDcgKzc4MDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01BWCggNTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPmN2dFNpemUgLyAxMCApOwogICAgIGVsc2UKLSAgICAgIGV4Yy0+bG9vcGNhbGxfY291bnRlcl9tYXggPSAzMDAgKyA4ICogZXhjLT5jdnRTaXplOworICAgICAgZXhjLT5sb29wY2FsbF9jb3VudGVyX21heCA9IDMwMCArIDIyICogZXhjLT5jdnRTaXplOwogCiAgICAgLyogYXMgYSBwcm90ZWN0aW9uIGFnYWluc3QgYW4gdW5yZWFzb25hYmxlIG51bWJlciBvZiBDVlQgZW50cmllcyAgKi8KICAgICAvKiB3ZSBhc3N1bWUgYXQgbW9zdCAxMDAgY29udHJvbCB2YWx1ZXMgcGVyIGdseXBoIGZvciB0aGUgY291bnRlciAqLwpAQCAtNzg3NiwxMSArNzgxNywxMSBAQAogICAgICAgZXhjLT5sb29wY2FsbF9jb3VudGVyX21heCA9IDEwMCAqIChGVF9VTG9uZylleGMtPmZhY2UtPnJvb3QubnVtX2dseXBoczsKIAogICAgIEZUX1RSQUNFNSgoICJUVF9SdW5JbnM6IExpbWl0aW5nIHRvdGFsIG51bWJlciBvZiBsb29wcyBpbiBMT09QQ0FMTCIKLSAgICAgICAgICAgICAgICAiIHRvICVkXG4iLCBleGMtPmxvb3BjYWxsX2NvdW50ZXJfbWF4ICkpOworICAgICAgICAgICAgICAgICIgdG8gJWxkXG4iLCBleGMtPmxvb3BjYWxsX2NvdW50ZXJfbWF4ICkpOwogCiAgICAgZXhjLT5uZWdfanVtcF9jb3VudGVyX21heCA9IGV4Yy0+bG9vcGNhbGxfY291bnRlcl9tYXg7CiAgICAgRlRfVFJBQ0U1KCggIlRUX1J1bkluczogTGltaXRpbmcgdG90YWwgbnVtYmVyIG9mIGJhY2t3YXJkIGp1bXBzIgotICAgICAgICAgICAgICAgICIgdG8gJWRcbiIsIGV4Yy0+bmVnX2p1bXBfY291bnRlcl9tYXggKSk7CisgICAgICAgICAgICAgICAgIiB0byAlbGRcbiIsIGV4Yy0+bmVnX2p1bXBfY291bnRlcl9tYXggKSk7CiAKICAgICAvKiBzZXQgUFBFTSBhbmQgQ1ZUIGZ1bmN0aW9ucyAqLwogICAgIGV4Yy0+dHRfbWV0cmljcy5yYXRpbyA9IDA7CkBAIC03OTE3LDE0ICs3ODU4LDE0IEBACiAgICAgICAgIC8qIGlmIHRyYWNpbmcgbGV2ZWwgaXMgNywgc2hvdyBjdXJyZW50IGNvZGUgcG9zaXRpb24gKi8KICAgICAgICAgLyogYW5kIHRoZSBmaXJzdCBmZXcgc3RhY2sgZWxlbWVudHMgYWxzbyAgICAgICAgICAgICAqLwogICAgICAgICBGVF9UUkFDRTYoKCAiICAiICkpOwotICAgICAgICBGVF9UUkFDRTcoKCAiJTA2ZCAiLCBleGMtPklQICkpOworICAgICAgICBGVF9UUkFDRTcoKCAiJTA2bGQgIiwgZXhjLT5JUCApKTsKICAgICAgICAgRlRfVFJBQ0U2KCggIiVzIiwgb3Bjb2RlX25hbWVbZXhjLT5vcGNvZGVdICsgMiApKTsKICAgICAgICAgRlRfVFJBQ0U3KCggIiUqcyIsICpvcGNvZGVfbmFtZVtleGMtPm9wY29kZV0gPT0gJ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMTIgLSAoICpvcGNvZGVfbmFtZVtleGMtPm9wY29kZV0gLSAnMCcgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjIiApKTsKICAgICAgICAgZm9yICggbiA9IDE7IG4gPD0gY250OyBuKysgKQotICAgICAgICAgIEZUX1RSQUNFNygoICIgJWQiLCBleGMtPnN0YWNrW2V4Yy0+dG9wIC0gbl0gKSk7CisgICAgICAgICAgRlRfVFJBQ0U3KCggIiAlbGQiLCBleGMtPnN0YWNrW2V4Yy0+dG9wIC0gbl0gKSk7CiAgICAgICAgIEZUX1RSQUNFNigoICJcbiIgKSk7CiAgICAgICB9CiAjZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KQEAgLTg1NjcsNyArODUwOCw3IEBACiAgICAgICAgIGNhc2UgRlRfRVJSKCBJbnZhbGlkX09wY29kZSApOgogICAgICAgICAgIHsKICAgICAgICAgICAgIFRUX0RlZlJlY29yZCogIGRlZiAgID0gZXhjLT5JRGVmczsKLSAgICAgICAgICAgIFRUX0RlZlJlY29yZCogIGxpbWl0ID0gZGVmICsgZXhjLT5udW1JRGVmczsKKyAgICAgICAgICAgIFRUX0RlZlJlY29yZCogIGxpbWl0ID0gRlRfT0ZGU0VUKCBkZWYsIGV4Yy0+bnVtSURlZnMgKTsKIAogCiAgICAgICAgICAgICBmb3IgKCA7IGRlZiA8IGxpbWl0OyBkZWYrKyApCkBAIC04NjQyLDcgKzg1ODMsNyBAQAogICAgIH0gd2hpbGUgKCAhZXhjLT5pbnN0cnVjdGlvbl90cmFwICk7CiAKICAgTE5vX0Vycm9yXzoKLSAgICBGVF9UUkFDRTQoKCAiICAlZCBpbnN0cnVjdGlvbiVzIGV4ZWN1dGVkXG4iLAorICAgIEZUX1RSQUNFNCgoICIgICVsZCBpbnN0cnVjdGlvbiVzIGV4ZWN1dGVkXG4iLAogICAgICAgICAgICAgICAgIGluc19jb3VudGVyLAogICAgICAgICAgICAgICAgIGluc19jb3VudGVyID09IDEgPyAiIiA6ICJzIiApKTsKICAgICByZXR1cm4gRlRfRXJyX09rOwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmggYi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaAppbmRleCAwY2IxZTg5Li42YTgzNzA1IDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlIGJ5dGVjb2RlIGludGVycHJldGVyIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOSw3ICsxOSw2IEBACiAjaWZuZGVmIFRUSU5URVJQX0hfCiAjZGVmaW5lIFRUSU5URVJQX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgInR0b2Jqcy5oIgogCiAKQEAgLTUyLDcgKzUxLDcgQEAKICAgdHlwZWRlZiBGVF9GMjZEb3Q2CiAgICgqVFRfUm91bmRfRnVuYykoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkaXN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGNvbXBlbnNhdGlvbiApOworICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgY29sb3IgKTsKIAogICAvKiBQb2ludCBkaXNwbGFjZW1lbnQgYWxvbmcgdGhlIGZyZWVkb20gdmVjdG9yIHJvdXRpbmUgKi8KICAgdHlwZWRlZiB2b2lkCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgYi9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmMKaW5kZXggZTQ3NzVhNS4uMDZkNDU2OSAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0b2Jqcy5jCisrKyBiL3NyYy90cnVldHlwZS90dG9ianMuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIE9iamVjdHMgbWFuYWdlciAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsMTIgKzE2LDExIEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSAotI2luY2x1ZGUgRlRfRFJJVkVSX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90dHRhZ3MuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZm50Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRkcml2ZXIuaD4KIAogI2luY2x1ZGUgInR0Z2xvYWQuaCIKICNpbmNsdWRlICJ0dHBsb2FkLmgiCkBAIC0xMTE2LDEwICsxMTE1LDEwIEBACiAgICAgICAvKiBUaGUgQXBwbGUgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgdGhlIGNvbXBlbnNhdGlvbiBmb3IgICAgICovCiAgICAgICAvKiBgZ3JheScgaXMgYWx3YXlzIHplcm8uICBGcmVlVHlwZSBkb2Vzbid0IGRvIGFueSAgICAgICAgICAgICovCiAgICAgICAvKiBjb21wZW5zYXRpb24gYXQgYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICB0dF9tZXRyaWNzLT5jb21wZW5zYXRpb25zWzBdID0gMDsgICAvKiBncmF5ICAgICAgICAgICAgICovCi0gICAgICB0dF9tZXRyaWNzLT5jb21wZW5zYXRpb25zWzFdID0gMDsgICAvKiBibGFjayAgICAgICAgICAgICovCi0gICAgICB0dF9tZXRyaWNzLT5jb21wZW5zYXRpb25zWzJdID0gMDsgICAvKiB3aGl0ZSAgICAgICAgICAgICovCi0gICAgICB0dF9tZXRyaWNzLT5jb21wZW5zYXRpb25zWzNdID0gMDsgICAvKiB0aGUgc2FtZSBhcyBncmF5ICovCisgICAgICB0dF9tZXRyaWNzLT5jb21wZW5zYXRpb25zWzBdID0gMDsgICAvKiBncmF5ICAqLworICAgICAgdHRfbWV0cmljcy0+Y29tcGVuc2F0aW9uc1sxXSA9IDA7ICAgLyogYmxhY2sgKi8KKyAgICAgIHR0X21ldHJpY3MtPmNvbXBlbnNhdGlvbnNbMl0gPSAwOyAgIC8qIHdoaXRlICovCisgICAgICB0dF9tZXRyaWNzLT5jb21wZW5zYXRpb25zWzNdID0gMDsgICAvKiB6ZXJvICAqLwogICAgIH0KIAogICAgIC8qIGFsbG9jYXRlIGZ1bmN0aW9uIGRlZnMsIGluc3RydWN0aW9uIGRlZnMsIGN2dCwgYW5kIHN0b3JhZ2UgYXJlYSAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0b2Jqcy5oIGIvc3JjL3RydWV0eXBlL3R0b2Jqcy5oCmluZGV4IDlmYzY1NGQuLmQ5ODZkZWEgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dG9ianMuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBPYmplY3RzIG1hbmFnZXIgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDkgKzIwLDggQEAKICNkZWZpbmUgVFRPQkpTX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1RSVUVUWVBFX1RZUEVTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jIGIvc3JjL3RydWV0eXBlL3R0cGxvYWQuYwppbmRleCBiYzk1NGMyLi5iMTI1NWI4IDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jCisrKyBiL3NyYy90cnVldHlwZS90dHBsb2FkLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUcnVlVHlwZS1zcGVjaWZpYyB0YWJsZXMgbG9hZGVyIChib2R5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNiwxMSArMTYsMTAgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWdzLmg+CiAKICNpbmNsdWRlICJ0dHBsb2FkLmgiCiAKQEAgLTEyNCw3ICsxMjMsNyBAQAogCiAgICAgaWYgKCBmYWNlLT5udW1fbG9jYXRpb25zICE9IChGVF9VTG9uZylmYWNlLT5yb290Lm51bV9nbHlwaHMgKyAxICkKICAgICB7Ci0gICAgICBGVF9UUkFDRTIoKCAiZ2x5cGggY291bnQgbWlzbWF0Y2ghICBsb2NhOiAlZCwgbWF4cDogJWRcbiIsCisgICAgICBGVF9UUkFDRTIoKCAiZ2x5cGggY291bnQgbWlzbWF0Y2ghICBsb2NhOiAlbGQsIG1heHA6ICVsZFxuIiwKICAgICAgICAgICAgICAgICAgIGZhY2UtPm51bV9sb2NhdGlvbnMgLSAxLCBmYWNlLT5yb290Lm51bV9nbHlwaHMgKSk7CiAKICAgICAgIC8qIHdlIG9ubHkgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGBtYXhwJyBnaXZlcyBhIGxhcmdlciB2YWx1ZSAqLwpAQCAtMTY1LDcgKzE2NCw3IEBACiAgICAgICAgICAgZmFjZS0+bnVtX2xvY2F0aW9ucyA9IChGVF9VTG9uZylmYWNlLT5yb290Lm51bV9nbHlwaHMgKyAxOwogICAgICAgICAgIHRhYmxlX2xlbiAgICAgICAgICAgPSBuZXdfbG9jYV9sZW47CiAKLSAgICAgICAgICBGVF9UUkFDRTIoKCAiYWRqdXN0aW5nIG51bV9sb2NhdGlvbnMgdG8gJWRcbiIsCisgICAgICAgICAgRlRfVFJBQ0UyKCggImFkanVzdGluZyBudW1fbG9jYXRpb25zIHRvICVsZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5udW1fbG9jYXRpb25zICkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTE3Myw3ICsxNzIsNyBAQAogICAgICAgICAgIGZhY2UtPnJvb3QubnVtX2dseXBocyA9IGZhY2UtPm51bV9sb2NhdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKEZUX0xvbmcpZmFjZS0+bnVtX2xvY2F0aW9ucyAtIDEgOiAwOwogCi0gICAgICAgICAgRlRfVFJBQ0UyKCggImFkanVzdGluZyBudW1fZ2x5cGhzIHRvICVkXG4iLAorICAgICAgICAgIEZUX1RSQUNFMigoICJhZGp1c3RpbmcgbnVtX2dseXBocyB0byAlbGRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+cm9vdC5udW1fZ2x5cGhzICkpOwogICAgICAgICB9CiAgICAgICB9CkBAIC0yMzgsNyArMjM3LDcgQEAKICAgICBpZiAoIHBvczEgPiBmYWNlLT5nbHlmX2xlbiApCiAgICAgewogICAgICAgRlRfVFJBQ0UxKCggInR0X2ZhY2VfZ2V0X2xvY2F0aW9uOiIKLSAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIG9mZnNldCAoMHglMDhseCkgZm91bmQgZm9yIGdseXBoIGluZGV4ICVsZCxcbiIKKyAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIG9mZnNldCAoMHglMDhseCkgZm91bmQgZm9yIGdseXBoIGluZGV4ICVkLFxuIgogICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICIKICAgICAgICAgICAgICAgICAgICIgZXhjZWVkaW5nIHRoZSBlbmQgb2YgYGdseWYnIHRhYmxlICgweCUwOGx4KVxuIiwKICAgICAgICAgICAgICAgICAgIHBvczEsIGdpbmRleCwgZmFjZS0+Z2x5Zl9sZW4gKSk7CkBAIC0yNTIsNyArMjUxLDcgQEAKICAgICAgIGlmICggZ2luZGV4ID09IGZhY2UtPm51bV9sb2NhdGlvbnMgLSAyICkKICAgICAgIHsKICAgICAgICAgRlRfVFJBQ0UxKCggInR0X2ZhY2VfZ2V0X2xvY2F0aW9uOiIKLSAgICAgICAgICAgICAgICAgICAgIiB0b28gbGFyZ2Ugc2l6ZSAoJWxkIGJ5dGVzKSBmb3VuZCBmb3IgZ2x5cGggaW5kZXggJWxkLFxuIgorICAgICAgICAgICAgICAgICAgICAiIHRvbyBsYXJnZSBzaXplICglbGQgYnl0ZXMpIGZvdW5kIGZvciBnbHlwaCBpbmRleCAlZCxcbiIKICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgIiB0cnVuY2F0aW5nIGF0IHRoZSBlbmQgb2YgYGdseWYnIHRhYmxlIHRvICVsZCBieXRlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgcG9zMiAtIHBvczEsIGdpbmRleCwgZmFjZS0+Z2x5Zl9sZW4gLSBwb3MxICkpOwpAQCAtMjYxLDcgKzI2MCw3IEBACiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgIEZUX1RSQUNFMSgoICJ0dF9mYWNlX2dldF9sb2NhdGlvbjoiCi0gICAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIG9mZnNldCAoMHglMDhseCkgZm91bmQgZm9yIGdseXBoIGluZGV4ICVsZCxcbiIKKyAgICAgICAgICAgICAgICAgICAgIiB0b28gbGFyZ2Ugb2Zmc2V0ICgweCUwOGx4KSBmb3VuZCBmb3IgZ2x5cGggaW5kZXggJWQsXG4iCiAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICIgZXhjZWVkaW5nIHRoZSBlbmQgb2YgYGdseWYnIHRhYmxlICgweCUwOGx4KVxuIiwKICAgICAgICAgICAgICAgICAgICAgcG9zMiwgZ2luZGV4ICsgMSwgZmFjZS0+Z2x5Zl9sZW4gKSk7CkBAIC00MjksNyArNDI4LDcgQEAKICAgICAgIGlmICggRlRfRlJBTUVfRVhUUkFDVCggdGFibGVfbGVuLCBmYWNlLT5mb250X3Byb2dyYW0gKSApCiAgICAgICAgIGdvdG8gRXhpdDsKIAotICAgICAgRlRfVFJBQ0UyKCggImxvYWRlZCwgJTEyZCBieXRlc1xuIiwgZmFjZS0+Zm9udF9wcm9ncmFtX3NpemUgKSk7CisgICAgICBGVF9UUkFDRTIoKCAibG9hZGVkLCAlMTJsZCBieXRlc1xuIiwgZmFjZS0+Zm9udF9wcm9ncmFtX3NpemUgKSk7CiAgICAgfQogCiAgIEV4aXQ6CkBAIC00OTIsNyArNDkxLDcgQEAKICAgICAgIGlmICggRlRfRlJBTUVfRVhUUkFDVCggdGFibGVfbGVuLCBmYWNlLT5jdnRfcHJvZ3JhbSApICkKICAgICAgICAgZ290byBFeGl0OwogCi0gICAgICBGVF9UUkFDRTIoKCAibG9hZGVkLCAlMTJkIGJ5dGVzXG4iLCBmYWNlLT5jdnRfcHJvZ3JhbV9zaXplICkpOworICAgICAgRlRfVFJBQ0UyKCggImxvYWRlZCwgJTEybGQgYnl0ZXNcbiIsIGZhY2UtPmN2dF9wcm9ncmFtX3NpemUgKSk7CiAgICAgfQogCiAgIEV4aXQ6CkBAIC02MzMsNyArNjMyLDcgQEAKICAgICBGVF9VSW50ICAgbm47CiAgICAgRlRfQnl0ZSogIHJlc3VsdCAgICAgID0gTlVMTDsKICAgICBGVF9VTG9uZyAgcmVjb3JkX3NpemUgPSBmYWNlLT5oZG14X3JlY29yZF9zaXplOwotICAgIEZUX0J5dGUqICByZWNvcmQgICAgICA9IGZhY2UtPmhkbXhfdGFibGUgKyA4OworICAgIEZUX0J5dGUqICByZWNvcmQgICAgICA9IEZUX09GRlNFVCggZmFjZS0+aGRteF90YWJsZSwgOCApOwogCiAKICAgICBmb3IgKCBubiA9IDA7IG5uIDwgZmFjZS0+aGRteF9yZWNvcmRfY291bnQ7IG5uKysgKQpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0cGxvYWQuaCBiL3NyYy90cnVldHlwZS90dHBsb2FkLmgKaW5kZXggMDIyNzUwZS4uYmI2NjllMCAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0cGxvYWQuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHJ1ZVR5cGUtc3BlY2lmaWMgdGFibGVzIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjAsOCArMjAsNyBAQAogI2RlZmluZSBUVFBMT0FEX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9UUlVFVFlQRV9UWVBFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0c3VicGl4LmMgYi9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYwppbmRleCAyM2EyZTViLi41NjY2N2RlIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFRydWVUeXBlIFN1YnBpeGVsIEhpbnRpbmcuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTUsMTQgKzE1LDEzIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU0ZOVF9ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKLSNpbmNsdWRlIEZUX09VVExJTkVfSAotI2luY2x1ZGUgRlRfRFJJVkVSX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZm50Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWdzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRvdXRsbi5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZHJpdmVyLmg+CiAKICNpbmNsdWRlICJ0dHN1YnBpeC5oIgogCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguaCBiL3NyYy90cnVldHlwZS90dHN1YnBpeC5oCmluZGV4IDQ5NjY4MDAuLjIyOWE2Y2YgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dHN1YnBpeC5oCisrKyBiL3NyYy90cnVldHlwZS90dHN1YnBpeC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHJ1ZVR5cGUgU3VicGl4ZWwgSGludGluZy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOSw3ICsxOSw2IEBACiAjaWZuZGVmIFRUU1VCUElYX0hfCiAjZGVmaW5lIFRUU1VCUElYX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgInR0b2Jqcy5oIgogI2luY2x1ZGUgInR0aW50ZXJwLmgiCiAKZGlmZiAtLWdpdCBhL3NyYy90eXBlMS9KYW1maWxlIGIvc3JjL3R5cGUxL0phbWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiY2ZiMmUuLjAwMDAwMDAKLS0tIGEvc3JjL3R5cGUxL0phbWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIEZyZWVUeXBlIDIgc3JjL3R5cGUxIEphbWZpbGUKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgYnkKLSMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgotIwotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAotIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCi0jIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91Ci0jIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0Ci0jIGZ1bGx5LgotCi1TdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgdHlwZTEgOwotCi17Ci0gIGxvY2FsICBfc291cmNlcyA7Ci0KLSAgaWYgJChGVDJfTVVMVEkpCi0gIHsKLSAgICBfc291cmNlcyA9IHQxYWZtCi0gICAgICAgICAgICAgICB0MWRyaXZlcgotICAgICAgICAgICAgICAgdDFnbG9hZAotICAgICAgICAgICAgICAgdDFsb2FkCi0gICAgICAgICAgICAgICB0MW9ianMKLSAgICAgICAgICAgICAgIHQxcGFyc2UKLSAgICAgICAgICAgICAgIDsKLSAgfQotICBlbHNlCi0gIHsKLSAgICBfc291cmNlcyA9IHR5cGUxIDsKLSAgfQotCi0gIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKLX0KLQotIyBlbmQgb2Ygc3JjL3R5cGUxIEphbWZpbGUKZGlmZiAtLWdpdCBhL3NyYy90eXBlMS9tb2R1bGUubWsgYi9zcmMvdHlwZTEvbW9kdWxlLm1rCmluZGV4IDJmNDhjNjUuLmNmZmI3NzQgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS9tb2R1bGUubWsKKysrIGIvc3JjL3R5cGUxL21vZHVsZS5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy90eXBlMS9ydWxlcy5tayBiL3NyYy90eXBlMS9ydWxlcy5tawppbmRleCA5MDExNjljLi4yMTNlNjE5IDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvcnVsZXMubWsKKysrIGIvc3JjL3R5cGUxL3J1bGVzLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3QxYWZtLmMgYi9zcmMvdHlwZTEvdDFhZm0uYwppbmRleCA2ODQxMTg0Li5iOWNkNjZiIDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdDFhZm0uYworKysgYi9zcmMvdHlwZTEvdDFhZm0uYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEFGTSBzdXBwb3J0IGZvciBUeXBlIDEgZm9udHMgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDExICsxNiwxMCBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSAidDFhZm0uaCIKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KICNpbmNsdWRlICJ0MWVycm9ycy5oIgogCiAKZGlmZiAtLWdpdCBhL3NyYy90eXBlMS90MWFmbS5oIGIvc3JjL3R5cGUxL3QxYWZtLmgKaW5kZXggYThlNmE1NC4uZWRmOTE5YyAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3QxYWZtLmgKKysrIGIvc3JjL3R5cGUxL3QxYWZtLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBBRk0gc3VwcG9ydCBmb3IgVHlwZSAxIGZvbnRzIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xOSw5ICsxOSw4IEBACiAjaWZuZGVmIFQxQUZNX0hfCiAjZGVmaW5lIFQxQUZNX0hfCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgInQxb2Jqcy5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfVFlQRTFfVFlQRVNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaD4KIAogRlRfQkVHSU5fSEVBREVSCiAKZGlmZiAtLWdpdCBhL3NyYy90eXBlMS90MWRyaXZlci5jIGIvc3JjL3R5cGUxL3QxZHJpdmVyLmMKaW5kZXggNTU3NzMzZC4uYjc4NmE4NyAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3QxZHJpdmVyLmMKKysrIGIvc3JjL3R5cGUxL3QxZHJpdmVyLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUeXBlIDEgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsNyArMTYsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSAidDFkcml2ZXIuaCIKICNpbmNsdWRlICJ0MWdsb2FkLmgiCiAjaW5jbHVkZSAidDFsb2FkLmgiCkBAIC0yNywyMCArMjYsMjAgQEAKICNpbmNsdWRlICJ0MWFmbS5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9IQVNIX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfUFJPUFNfSAotI2luY2x1ZGUgRlRfRFJJVkVSX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGhhc2guaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHBzcHJvcC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZHJpdmVyLmg+CiAKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX0dMWVBIX0RJQ1RfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRV9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSAotI2luY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfS0VSTklOR19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBvc3RubS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmtlcm4uaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3QxZHJpdmVyLmggYi9zcmMvdHlwZTEvdDFkcml2ZXIuaAppbmRleCAyMDZmNjRhLi5lN2VhZTBiIDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdDFkcml2ZXIuaAorKysgYi9zcmMvdHlwZTEvdDFkcml2ZXIuaApAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEhpZ2gtbGV2ZWwgVHlwZSAxIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDggKzIwLDcgQEAKICNkZWZpbmUgVDFEUklWRVJfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RSSVZFUl9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkcnYuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy90eXBlMS90MWVycm9ycy5oIGIvc3JjL3R5cGUxL3QxZXJyb3JzLmgKaW5kZXggYjM1ZjY3YS4uYWQwM2EzZCAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3QxZXJyb3JzLmgKKysrIGIvc3JjL3R5cGUxL3QxZXJyb3JzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUeXBlIDEgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMjUsNyArMjUsNyBAQAogI2lmbmRlZiBUMUVSUk9SU19IXwogI2RlZmluZSBUMUVSUk9SU19IXwogCi0jaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdG1vZGVyci5oPgogCiAjdW5kZWYgRlRFUlJPUlNfSF8KIApAQCAtMzMsNyArMzMsNyBAQAogI2RlZmluZSBGVF9FUlJfUFJFRklYICBUMV9FcnJfCiAjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfVHlwZTEKIAotI2luY2x1ZGUgRlRfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgogCiAjZW5kaWYgLyogVDFFUlJPUlNfSF8gKi8KIApkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3QxZ2xvYWQuYyBiL3NyYy90eXBlMS90MWdsb2FkLmMKaW5kZXggZjliMTE1Yi4uZDE2YjgxZiAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3QxZ2xvYWQuYworKysgYi9zcmMvdHlwZTEvdDFnbG9hZC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHlwZSAxIEdseXBoIExvYWRlciAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTYsMTUgKzE2LDE0IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlICJ0MWdsb2FkLmgiCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9PVVRMSU5FX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0NGRl9UWVBFU19ICi0jaW5jbHVkZSBGVF9EUklWRVJfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0b3V0bG4uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2NmZnR5cGVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRkcml2ZXIuaD4KIAogI2luY2x1ZGUgInQxZXJyb3JzLmgiCiAKQEAgLTMzNCw3ICszMzMsNyBAQAogICAgICAgZWxzZQogICAgICAgICBhZHZhbmNlc1tubl0gPSAwOwogCi0gICAgICBGVF9UUkFDRTUoKCAiICBpZHggJWQ6IGFkdmFuY2Ugd2lkdGggJWQgZm9udCB1bml0JXNcbiIsCisgICAgICBGVF9UUkFDRTUoKCAiICBpZHggJWQ6IGFkdmFuY2Ugd2lkdGggJWxkIGZvbnQgdW5pdCVzXG4iLAogICAgICAgICAgICAgICAgICAgZmlyc3QgKyBubiwKICAgICAgICAgICAgICAgICAgIGFkdmFuY2VzW25uXSwKICAgICAgICAgICAgICAgICAgIGFkdmFuY2VzW25uXSA9PSAxID8gIiIgOiAicyIgKSk7CmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDFnbG9hZC5oIGIvc3JjL3R5cGUxL3QxZ2xvYWQuaAppbmRleCA4MDQ0MDM2Li45OTQ3NTA3IDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdDFnbG9hZC5oCisrKyBiL3NyYy90eXBlMS90MWdsb2FkLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUeXBlIDEgR2x5cGggTG9hZGVyIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw3ICsyMCw2IEBACiAjZGVmaW5lIFQxR0xPQURfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlICJ0MW9ianMuaCIKIAogCmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDFsb2FkLmMgYi9zcmMvdHlwZTEvdDFsb2FkLmMKaW5kZXggNWNmZmRmYS4uODQ5ODYwMCAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3QxbG9hZC5jCisrKyBiL3NyYy90eXBlMS90MWxvYWQuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFR5cGUgMSBmb250IGxvYWRlciAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtNjEsMTIgKzYxLDEyIEBACiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogI2luY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ICi0jaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfSEFTSF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRtbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGhhc2guaD4KIAogI2luY2x1ZGUgInQxbG9hZC5oIgogI2luY2x1ZGUgInQxZXJyb3JzLmgiCkBAIC0zMDksMzEgKzMwOSw1NSBAQAogICAgIEZUX1VJbnQgICAgICAgICAgaTsKICAgICBGVF9GaXhlZCAgICAgICAgIGF4aXNjb29yZHNbVDFfTUFYX01NX0FYSVNdOwogICAgIFBTX0JsZW5kICAgICAgICAgYmxlbmQgPSBmYWNlLT5ibGVuZDsKKyAgICBGVF9VU2hvcnQqICAgICAgIGF4aXNfZmxhZ3M7CisKKyAgICBGVF9PZmZzZXQgIG1tdmFyX3NpemU7CisgICAgRlRfT2Zmc2V0ICBheGlzX2ZsYWdzX3NpemU7CisgICAgRlRfT2Zmc2V0ICBheGlzX3NpemU7CiAKIAogICAgIGVycm9yID0gVDFfR2V0X011bHRpX01hc3RlciggZmFjZSwgJm1tYXN0ZXIgKTsKICAgICBpZiAoIGVycm9yICkKICAgICAgIGdvdG8gRXhpdDsKLSAgICBpZiAoIEZUX0FMTE9DKCBtbXZhciwKLSAgICAgICAgICAgICAgICAgICBzaXplb2YgKCBGVF9NTV9WYXIgKSArCi0gICAgICAgICAgICAgICAgICAgICBtbWFzdGVyLm51bV9heGlzICogc2l6ZW9mICggRlRfVmFyX0F4aXMgKSApICkKKworICAgIC8qIHRoZSB2YXJpb3VzIGAqX3NpemUnIHZhcmlhYmxlcywgd2hpY2ggd2UgYWxzbyB1c2UgYXMgICAgICovCisgICAgLyogb2Zmc2V0cyBpbnRvIHRoZSBgbW12YXInIGFycmF5LCBtdXN0IGJlIG11bHRpcGxlcyBvZiB0aGUgKi8KKyAgICAvKiBwb2ludGVyIHNpemUgKGV4Y2VwdCB0aGUgbGFzdCBvbmUpOyB3aXRob3V0IHN1Y2ggYW4gICAgICAqLworICAgIC8qIGFsaWdubWVudCB0aGVyZSBtaWdodCBiZSBydW50aW1lIGVycm9ycyBkdWUgdG8gICAgICAgICAgICovCisgICAgLyogbWlzYWxpZ25lZCBhZGRyZXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgQUxJR05fU0laRQorI2RlZmluZSBBTElHTl9TSVpFKCBuICkgXAorICAgICAgICAgICggKCAobikgKyBzaXplb2YgKHZvaWQqKSAtIDEgKSAmIH4oIHNpemVvZiAodm9pZCopIC0gMSApICkKKworICAgIG1tdmFyX3NpemUgICAgICA9IEFMSUdOX1NJWkUoIHNpemVvZiAoIEZUX01NX1ZhciApICk7CisgICAgYXhpc19mbGFnc19zaXplID0gQUxJR05fU0laRSggbW1hc3Rlci5udW1fYXhpcyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggRlRfVVNob3J0ICkgKTsKKyAgICBheGlzX3NpemUgICAgICAgPSBtbWFzdGVyLm51bV9heGlzICogc2l6ZW9mICggRlRfVmFyX0F4aXMgKTsKKworICAgIGlmICggRlRfQUxMT0MoIG1tdmFyLCBtbXZhcl9zaXplICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpc19mbGFnc19zaXplICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpc19zaXplICkgKQogICAgICAgZ290byBFeGl0OwogCiAgICAgbW12YXItPm51bV9heGlzICAgICAgICA9IG1tYXN0ZXIubnVtX2F4aXM7CiAgICAgbW12YXItPm51bV9kZXNpZ25zICAgICA9IG1tYXN0ZXIubnVtX2Rlc2lnbnM7CiAgICAgbW12YXItPm51bV9uYW1lZHN0eWxlcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IHN1cHBvcnRlZCAqLwotICAgIG1tdmFyLT5heGlzICAgICAgICAgICAgPSAoRlRfVmFyX0F4aXMqKSZtbXZhclsxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gYXhlcyBhZnRlciBNTV9WYXIgc3RydWN0ICovCi0gICAgbW12YXItPm5hbWVkc3R5bGUgICAgICA9IE5VTEw7CisKKyAgICAvKiB3aGlsZSBheGlzIGZsYWdzIGFyZSBtZWFuaW5nbGVzcyBoZXJlLCB3ZSBoYXZlIHRvIHByb3ZpZGUgdGhlIGFycmF5ICovCisgICAgLyogdG8gbWFrZSBgRlRfR2V0X1Zhcl9BeGlzX0ZsYWdzJyB3b3JrOiB0aGUgZnVuY3Rpb24gZXhwZWN0cyB0aGF0IHRoZSAqLworICAgIC8qIHZhbHVlcyBkaXJlY3RseSBmb2xsb3cgdGhlIGRhdGEgb2YgYEZUX01NX1ZhcicgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBheGlzX2ZsYWdzID0gKEZUX1VTaG9ydCopKCAoY2hhciopbW12YXIgKyBtbXZhcl9zaXplICk7CisgICAgZm9yICggaSA9IDA7IGkgPCBtbWFzdGVyLm51bV9heGlzOyBpKysgKQorICAgICAgYXhpc19mbGFnc1tpXSA9IDA7CisKKyAgICBtbXZhci0+YXhpcyAgICAgICA9IChGVF9WYXJfQXhpcyopKCAoY2hhciopYXhpc19mbGFncyArIGF4aXNfZmxhZ3Nfc2l6ZSApOworICAgIG1tdmFyLT5uYW1lZHN0eWxlID0gTlVMTDsKIAogICAgIGZvciAoIGkgPSAwOyBpIDwgbW1hc3Rlci5udW1fYXhpczsgaSsrICkKICAgICB7CiAgICAgICBtbXZhci0+YXhpc1tpXS5uYW1lICAgID0gbW1hc3Rlci5heGlzW2ldLm5hbWU7CiAgICAgICBtbXZhci0+YXhpc1tpXS5taW5pbXVtID0gSU5UX1RPX0ZJWEVEKCBtbWFzdGVyLmF4aXNbaV0ubWluaW11bSApOwogICAgICAgbW12YXItPmF4aXNbaV0ubWF4aW11bSA9IElOVF9UT19GSVhFRCggbW1hc3Rlci5heGlzW2ldLm1heGltdW0gKTsKLSAgICAgIG1tdmFyLT5heGlzW2ldLmRlZiAgICAgPSAoIG1tdmFyLT5heGlzW2ldLm1pbmltdW0gKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbXZhci0+YXhpc1tpXS5tYXhpbXVtICkgLyAyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvZXMgbm90IGFwcGx5LiAgQnV0IHRoaXMgdmFsdWUgaXMgaW4gcmFuZ2UgKi8KICAgICAgIG1tdmFyLT5heGlzW2ldLnN0cmlkICAgPSB+MFU7ICAgICAgICAgICAgICAgICAgICAgIC8qIERvZXMgbm90IGFwcGx5ICovCiAgICAgICBtbXZhci0+YXhpc1tpXS50YWcgICAgID0gfjBVOyAgICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIG5vdCBhcHBseSAqLwogCkBAIC0xMDM5LDcgKzEwNjMsNyBAQAogICAgICAgICBtYXAtPmRlc2lnbl9wb2ludHNbcF0gPSBUMV9Ub0ludCggcGFyc2VyICk7CiAgICAgICAgIG1hcC0+YmxlbmRfcG9pbnRzIFtwXSA9IFQxX1RvRml4ZWQoIHBhcnNlciwgMCApOwogCi0gICAgICAgIEZUX1RSQUNFNCgoICIgWyVkICVmXSIsCisgICAgICAgIEZUX1RSQUNFNCgoICIgWyVsZCAlZl0iLAogICAgICAgICAgICAgICAgICAgICBtYXAtPmRlc2lnbl9wb2ludHNbcF0sCiAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpbWFwLT5ibGVuZF9wb2ludHNbcF0gLyA2NTUzNiApKTsKICAgICAgIH0KQEAgLTE3MzEsNyArMTc1NSw3IEBACiAgICAgICAgKi8KIAogICAgICAgRlRfVFJBQ0UwKCggInBhcnNlX3N1YnJzOiBhZGp1c3RpbmcgbnVtYmVyIG9mIHN1YnJvdXRpbmVzIgotICAgICAgICAgICAgICAgICAgIiAoZnJvbSAlZCB0byAlZClcbiIsCisgICAgICAgICAgICAgICAgICAiIChmcm9tICVkIHRvICVsZClcbiIsCiAgICAgICAgICAgICAgICAgICBudW1fc3VicnMsCiAgICAgICAgICAgICAgICAgICAoIHBhcnNlci0+cm9vdC5saW1pdCAtIHBhcnNlci0+cm9vdC5jdXJzb3IgKSA+PiAzICkpOwogICAgICAgbnVtX3N1YnJzID0gKCBwYXJzZXItPnJvb3QubGltaXQgLSBwYXJzZXItPnJvb3QuY3Vyc29yICkgPj4gMzsKQEAgLTE5MDIsNyArMTkyNiw3IEBACiAgICAgaWYgKCBudW1fZ2x5cGhzID4gKCBsaW1pdCAtIGN1ciApID4+IDMgKQogICAgIHsKICAgICAgIEZUX1RSQUNFMCgoICJwYXJzZV9jaGFyc3RyaW5nczogYWRqdXN0aW5nIG51bWJlciBvZiBnbHlwaHMiCi0gICAgICAgICAgICAgICAgICAiIChmcm9tICVkIHRvICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICIgKGZyb20gJWQgdG8gJWxkKVxuIiwKICAgICAgICAgICAgICAgICAgIG51bV9nbHlwaHMsICggbGltaXQgLSBjdXIgKSA+PiAzICkpOwogICAgICAgbnVtX2dseXBocyA9ICggbGltaXQgLSBjdXIgKSA+PiAzOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy90eXBlMS90MWxvYWQuaCBiL3NyYy90eXBlMS90MWxvYWQuaAppbmRleCA0NGY4MzViLi40Mzk2NDE1IDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdDFsb2FkLmgKKysrIGIvc3JjL3R5cGUxL3QxbG9hZC5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHlwZSAxIGZvbnQgbG9hZGVyIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCwxMCArMjAsOSBAQAogI2RlZmluZSBUMUxPQURfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICi0jaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3BzYXV4Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRtbS5oPgogCiAjaW5jbHVkZSAidDFwYXJzZS5oIgogCmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDFvYmpzLmMgYi9zcmMvdHlwZTEvdDFvYmpzLmMKaW5kZXggNzQxMzg4YS4uM2I5MThiNyAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3Qxb2Jqcy5jCisrKyBiL3NyYy90eXBlMS90MW9ianMuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFR5cGUgMSBvYmplY3RzIG1hbmFnZXIgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE2LDEyICsxNiwxMSBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9JRFNfSAotI2luY2x1ZGUgRlRfRFJJVkVSX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90dG5hbWVpZC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZHJpdmVyLmg+CiAKICNpbmNsdWRlICJ0MWdsb2FkLmgiCiAjaW5jbHVkZSAidDFsb2FkLmgiCkBAIC0zMiw4ICszMSw4IEBACiAjaW5jbHVkZSAidDFhZm0uaCIKICNlbmRpZgogCi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzQ3LDggKzM0Niw4IEBACiAgICAgaWYgKCBlcnJvciApCiAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICBGVF9UUkFDRTIoKCAiVDFfRmFjZV9Jbml0OiAlMDhwIChpbmRleCAlZClcbiIsCi0gICAgICAgICAgICAgICAgZmFjZSwKKyAgICBGVF9UUkFDRTIoKCAiVDFfRmFjZV9Jbml0OiAlcCAoaW5kZXggJWQpXG4iLAorICAgICAgICAgICAgICAgICh2b2lkICopZmFjZSwKICAgICAgICAgICAgICAgICBmYWNlX2luZGV4ICkpOwogCiAgICAgLyogaWYgd2UganVzdCB3YW50ZWQgdG8gY2hlY2sgdGhlIGZvcm1hdCwgbGVhdmUgc3VjY2Vzc2Z1bGx5IG5vdyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3Qxb2Jqcy5oIGIvc3JjL3R5cGUxL3Qxb2Jqcy5oCmluZGV4IDIxNjEwOTEuLjUzNmJlOGIgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS90MW9ianMuaAorKysgYi9zcmMvdHlwZTEvdDFvYmpzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUeXBlIDEgb2JqZWN0cyBtYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMSw5ICsyMSw5IEBACiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KICNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfVFlQRTFfVFlQRVNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy90eXBlMS90MXBhcnNlLmMgYi9zcmMvdHlwZTEvdDFwYXJzZS5jCmluZGV4IDU2Y2FlYjkuLjc0Y2YzOGIgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS90MXBhcnNlLmMKKysrIGIvc3JjL3R5cGUxL3QxcGFyc2UuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFR5cGUgMSBwYXJzZXIgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTMzLDEwICszMyw5IEBACiAgICAqLwogCiAKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oPgogCiAjaW5jbHVkZSAidDFwYXJzZS5oIgogCmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDFwYXJzZS5oIGIvc3JjL3R5cGUxL3QxcGFyc2UuaAppbmRleCBkYWI4ZmRkLi4xZWEwMTEwIDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdDFwYXJzZS5oCisrKyBiL3NyYy90eXBlMS90MXBhcnNlLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUeXBlIDEgcGFyc2VyIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCw5ICsyMCw4IEBACiAjZGVmaW5lIFQxUEFSU0VfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDF0b2tlbnMuaCBiL3NyYy90eXBlMS90MXRva2Vucy5oCmluZGV4IDk3ZjJkYmUuLmMwOTQyMDMgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS90MXRva2Vucy5oCisrKyBiL3NyYy90eXBlMS90MXRva2Vucy5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHlwZSAxIHRva2VuaXplciAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3R5cGUxLmMgYi9zcmMvdHlwZTEvdHlwZTEuYwppbmRleCBjZTg1NTdhLi5jYWRlZTc4IDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdHlwZTEuYworKysgYi9zcmMvdHlwZTEvdHlwZTEuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIFR5cGUgMSBkcml2ZXIgY29tcG9uZW50IChib2R5IG9ubHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE3LDcgKzE3LDYgQEAKIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKLSNpbmNsdWRlIDxmdDJidWlsZC5oPgogCiAjaW5jbHVkZSAidDFhZm0uYyIKICNpbmNsdWRlICJ0MWRyaXZlci5jIgpkaWZmIC0tZ2l0IGEvc3JjL3R5cGU0Mi9KYW1maWxlIGIvc3JjL3R5cGU0Mi9KYW1maWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTIzYjM1Li4wMDAwMDAwCi0tLSBhL3NyYy90eXBlNDIvSmFtZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSMgRnJlZVR5cGUgMiBzcmMvdHlwZTQyIEphbWZpbGUKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKLSMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgotIwotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAotIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCi0jIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91Ci0jIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0Ci0jIGZ1bGx5LgotCi1TdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgdHlwZTQyIDsKLQotewotICBsb2NhbCAgX3NvdXJjZXMgOwotCi0gIGlmICQoRlQyX01VTFRJKQotICB7Ci0gICAgX3NvdXJjZXMgPSB0NDJkcml2cgotICAgICAgICAgICAgICAgdDQyb2JqcwotICAgICAgICAgICAgICAgdDQycGFyc2UKLSAgICAgICAgICAgICAgIDsKLSAgfQotICBlbHNlCi0gIHsKLSAgICBfc291cmNlcyA9IHR5cGU0MiA7Ci0gIH0KLQotICBMaWJyYXJ5ICAkKEZUMl9MSUIpIDogJChfc291cmNlcykuYyA7Ci19Ci0KLSMgZW5kIG9mIHNyYy90eXBlNDIgSmFtZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3R5cGU0Mi9tb2R1bGUubWsgYi9zcmMvdHlwZTQyL21vZHVsZS5tawppbmRleCA5ZTlkMTU0Li42ZWYzYTk1IDEwMDY0NAotLS0gYS9zcmMvdHlwZTQyL21vZHVsZS5taworKysgYi9zcmMvdHlwZTQyL21vZHVsZS5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvcnVsZXMubWsgYi9zcmMvdHlwZTQyL3J1bGVzLm1rCmluZGV4IDlkNzFmNTMuLmY0Y2U5MWEgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlNDIvcnVsZXMubWsKKysrIGIvc3JjL3R5cGU0Mi9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisjIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvdDQyZHJpdnIuYyBiL3NyYy90eXBlNDIvdDQyZHJpdnIuYwppbmRleCAwOWFkNjMyLi45MDg5OGI0IDEwMDY0NAotLS0gYS9zcmMvdHlwZTQyL3Q0MmRyaXZyLmMKKysrIGIvc3JjL3R5cGU0Mi90NDJkcml2ci5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgSGlnaC1sZXZlbCBUeXBlIDQyIGRyaXZlciBpbnRlcmZhY2UgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMCBieQogICogUm9iZXJ0byBBbGFtZWRhLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTM5LDEyICszOSwxMiBAQAogI2luY2x1ZGUgInQ0MmRyaXZyLmgiCiAjaW5jbHVkZSAidDQyb2Jqcy5oIgogI2luY2x1ZGUgInQ0MmVycm9yLmgiCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgogCi0jaW5jbHVkZSBGVF9TRVJWSUNFX0ZPTlRfRk9STUFUX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRV9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfSU5GT19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmdsZGljdC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cG9zdG5tLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaD4KIAogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0NDIKZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvdDQyZHJpdnIuaCBiL3NyYy90eXBlNDIvdDQyZHJpdnIuaAppbmRleCBhMzVjYTI4Li44YmYyYWZjIDEwMDY0NAotLS0gYS9zcmMvdHlwZTQyL3Q0MmRyaXZyLmgKKysrIGIvc3JjL3R5cGU0Mi90NDJkcml2ci5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgSGlnaC1sZXZlbCBUeXBlIDQyIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMCBieQogICogUm9iZXJ0byBBbGFtZWRhLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTIwLDggKzIwLDcgQEAKICNkZWZpbmUgVDQyRFJJVlJfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RSSVZFUl9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkcnYuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvdDQyZXJyb3IuaCBiL3NyYy90eXBlNDIvdDQyZXJyb3IuaAppbmRleCA1ZmIyMTQzLi5lNDgxMzJlIDEwMDY0NAotLS0gYS9zcmMvdHlwZTQyL3Q0MmVycm9yLmgKKysrIGIvc3JjL3R5cGU0Mi90NDJlcnJvci5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICAgVHlwZSA0MiBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZuZGVmIFQ0MkVSUk9SX0hfCiAjZGVmaW5lIFQ0MkVSUk9SX0hfCiAKLSNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bW9kZXJyLmg+CiAKICN1bmRlZiBGVEVSUk9SU19IXwogCkBAIC0zMyw3ICszMyw3IEBACiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFQ0Ml9FcnJfCiAjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfVHlwZTQyCiAKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KIAogI2VuZGlmIC8qIFQ0MkVSUk9SX0hfICovCiAKZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvdDQyb2Jqcy5jIGIvc3JjL3R5cGU0Mi90NDJvYmpzLmMKaW5kZXggZDMxYmFjZS4uNmFjZmNkZiAxMDA2NDQKLS0tIGEvc3JjL3R5cGU0Mi90NDJvYmpzLmMKKysrIGIvc3JjL3R5cGU0Mi90NDJvYmpzLmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUeXBlIDQyIG9iamVjdHMgbWFuYWdlciAoYm9keSkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBSb2JlcnRvIEFsYW1lZGEuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksOSArMTksOSBAQAogI2luY2x1ZGUgInQ0Mm9ianMuaCIKICNpbmNsdWRlICJ0NDJwYXJzZS5oIgogI2luY2x1ZGUgInQ0MmVycm9yLmgiCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9MSVNUX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX0lEU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0bGlzdC5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL3R0bmFtZWlkLmg+CiAKIAogI3VuZGVmICBGVF9DT01QT05FTlQKZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvdDQyb2Jqcy5oIGIvc3JjL3R5cGU0Mi90NDJvYmpzLmgKaW5kZXggOTgzMDBjZi4uNjlmNWNmZiAxMDA2NDQKLS0tIGEvc3JjL3R5cGU0Mi90NDJvYmpzLmgKKysrIGIvc3JjL3R5cGU0Mi90NDJvYmpzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUeXBlIDQyIG9iamVjdHMgbWFuYWdlciAoc3BlY2lmaWNhdGlvbikuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDIwIGJ5CiAgKiBSb2JlcnRvIEFsYW1lZGEuCiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtMTksMTUgKzE5LDE0IEBACiAjaWZuZGVmIFQ0Mk9CSlNfSF8KICNkZWZpbmUgVDQyT0JKU19IXwogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX1RZUEUxX1RBQkxFU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS90MXRhYmxlcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaD4KICNpbmNsdWRlICJ0NDJ0eXBlcy5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9EUklWRVJfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfSElOVFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZHJ2Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9wc2hpbnRzLmg+CiAKIAogRlRfQkVHSU5fSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvdHlwZTQyL3Q0MnBhcnNlLmMgYi9zcmMvdHlwZTQyL3Q0MnBhcnNlLmMKaW5kZXggYzQ3YTc3Ny4uOTg1MDc2OSAxMDA2NDQKLS0tIGEvc3JjL3R5cGU0Mi90NDJwYXJzZS5jCisrKyBiL3NyYy90eXBlNDIvdDQycGFyc2UuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIFR5cGUgNDIgZm9udCBwYXJzZXIgKGJvZHkpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDE5IGJ5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMCBieQogICogUm9iZXJ0byBBbGFtZWRhLgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE4LDkgKzE4LDkgQEAKIAogI2luY2x1ZGUgInQ0MnBhcnNlLmgiCiAjaW5jbHVkZSAidDQyZXJyb3IuaCIKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtODI2LDcgKzgyNiw3IEBACiAgICAgICBpZiAoIGxvYWRlci0+bnVtX2dseXBocyA+ICggbGltaXQgLSBwYXJzZXItPnJvb3QuY3Vyc29yICkgPj4gMiApCiAgICAgICB7CiAgICAgICAgIEZUX1RSQUNFMCgoICJ0NDJfcGFyc2VfY2hhcnN0cmluZ3M6IGFkanVzdGluZyBudW1iZXIgb2YgZ2x5cGhzIgotICAgICAgICAgICAgICAgICAgICAiIChmcm9tICVkIHRvICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIiAoZnJvbSAlZCB0byAlbGQpXG4iLAogICAgICAgICAgICAgICAgICAgICBsb2FkZXItPm51bV9nbHlwaHMsCiAgICAgICAgICAgICAgICAgICAgICggbGltaXQgLSBwYXJzZXItPnJvb3QuY3Vyc29yICkgPj4gMiApKTsKICAgICAgICAgbG9hZGVyLT5udW1fZ2x5cGhzID0gKCBsaW1pdCAtIHBhcnNlci0+cm9vdC5jdXJzb3IgKSA+PiAyOwpkaWZmIC0tZ2l0IGEvc3JjL3R5cGU0Mi90NDJwYXJzZS5oIGIvc3JjL3R5cGU0Mi90NDJwYXJzZS5oCmluZGV4IDBjN2JiNDguLjJjY2YwNTIgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlNDIvdDQycGFyc2UuaAorKysgYi9zcmMvdHlwZTQyL3Q0MnBhcnNlLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUeXBlIDQyIGZvbnQgcGFyc2VyIChzcGVjaWZpY2F0aW9uKS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIFJvYmVydG8gQWxhbWVkYS4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMSw3ICsyMSw3IEBACiAKIAogI2luY2x1ZGUgInQ0Mm9ianMuaCIKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oPgogCiAKIEZUX0JFR0lOX0hFQURFUgpkaWZmIC0tZ2l0IGEvc3JjL3R5cGU0Mi90NDJ0eXBlcy5oIGIvc3JjL3R5cGU0Mi90NDJ0eXBlcy5oCmluZGV4IGEyNTgxNDQuLmJhMGNjMjEgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlNDIvdDQydHlwZXMuaAorKysgYi9zcmMvdHlwZTQyL3Q0MnR5cGVzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBUeXBlIDQyIGZvbnQgZGF0YSB0eXBlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIFJvYmVydG8gQWxhbWVkYS4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yMCwxMSArMjAsMTAgQEAKICNkZWZpbmUgVDQyVFlQRVNfSF8KIAogCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX1RZUEUxX1RBQkxFU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL3QxdGFibGVzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvdHlwZTQyLmMgYi9zcmMvdHlwZTQyL3R5cGU0Mi5jCmluZGV4IDBjYjdiNzcuLjAxMjU1OWUgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlNDIvdHlwZTQyLmMKKysrIGIvc3JjL3R5cGU0Mi90eXBlNDIuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIFR5cGUgNDIgZHJpdmVyIGNvbXBvbmVudC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0xNyw3ICsxNyw2IEBACiAKIAogI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KIAogI2luY2x1ZGUgInQ0MmRyaXZyLmMiCiAjaW5jbHVkZSAidDQyb2Jqcy5jIgpkaWZmIC0tZ2l0IGEvc3JjL3dpbmZvbnRzL0phbWZpbGUgYi9zcmMvd2luZm9udHMvSmFtZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI5MjIyNi4uMDAwMDAwMAotLS0gYS9zcmMvd2luZm9udHMvSmFtZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMgRnJlZVR5cGUgMiBzcmMvd2luZm9udHMgSmFtZmlsZQotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQotIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCi0jCi0jIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCi0jIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKLSMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKLSMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKLSMgZnVsbHkuCi0KLVN1YkRpciAgRlQyX1RPUCAkKEZUMl9TUkNfRElSKSB3aW5mb250cyA7Ci0KLUxpYnJhcnkgICQoRlQyX0xJQikgOiB3aW5mbnQuYyA7Ci0KLSMgZW5kIG9mIHNyYy93aW5mb250cyBKYW1maWxlCmRpZmYgLS1naXQgYS9zcmMvd2luZm9udHMvZm50ZXJycy5oIGIvc3JjL3dpbmZvbnRzL2ZudGVycnMuaAppbmRleCBhZjI5MzA3Li41NTBkZTM4IDEwMDY0NAotLS0gYS9zcmMvd2luZm9udHMvZm50ZXJycy5oCisrKyBiL3NyYy93aW5mb250cy9mbnRlcnJzLmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBXaW4gRk5UL0ZPTiBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIEZOVEVSUlNfSF8KICNkZWZpbmUgRk5URVJSU19IXwogCi0jaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKyNpbmNsdWRlIDxmcmVldHlwZS9mdG1vZGVyci5oPgogCiAjdW5kZWYgRlRFUlJPUlNfSF8KIApAQCAtMzQsNyArMzQsNyBAQAogI2RlZmluZSBGVF9FUlJfUFJFRklYICBGTlRfRXJyXwogI2RlZmluZSBGVF9FUlJfQkFTRSAgICBGVF9Nb2RfRXJyX1dpbmZvbnRzCiAKLSNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KIAogI2VuZGlmIC8qIEZOVEVSUlNfSF8gKi8KIApkaWZmIC0tZ2l0IGEvc3JjL3dpbmZvbnRzL21vZHVsZS5tayBiL3NyYy93aW5mb250cy9tb2R1bGUubWsKaW5kZXggODJmYjAxNS4uNDYxNGM1NSAxMDA2NDQKLS0tIGEvc3JjL3dpbmZvbnRzL21vZHVsZS5taworKysgYi9zcmMvd2luZm9udHMvbW9kdWxlLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3dpbmZvbnRzL3J1bGVzLm1rIGIvc3JjL3dpbmZvbnRzL3J1bGVzLm1rCmluZGV4IDk5OGQ0OWIuLmU3M2VmNWUgMTAwNjQ0Ci0tLSBhL3NyYy93aW5mb250cy9ydWxlcy5taworKysgYi9zcmMvd2luZm9udHMvcnVsZXMubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAyMCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvd2luZm9udHMvd2luZm50LmMgYi9zcmMvd2luZm9udHMvd2luZm50LmMKaW5kZXggMmQ3NzFiZS4uZTgzMzEyZCAxMDA2NDQKLS0tIGEvc3JjL3dpbmZvbnRzL3dpbmZudC5jCisrKyBiL3NyYy93aW5mb250cy93aW5mbnQuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiAgIEZyZWVUeXBlIGZvbnQgZHJpdmVyIGZvciBXaW5kb3dzIEZOVC9GT04gZmlsZXMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBieQorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjAgYnkKICAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICAqIENvcHlyaWdodCAyMDAzIEh1dyBEIE0gRGF2aWVzIGZvciBDb2Rld2VhdmVycwogICogQ29weXJpZ2h0IDIwMDcgRG1pdHJ5IFRpbW9zaGtvdiBmb3IgQ29kZXdlYXZlcnMKQEAgLTE4LDE3ICsxOCwxNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9XSU5GT05UU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9JRFNfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0d2luZm50Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHRuYW1laWQuaD4KIAogI2luY2x1ZGUgIndpbmZudC5oIgogI2luY2x1ZGUgImZudGVycnMuaCIKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfV0lORk5UX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfRk9OVF9GT1JNQVRfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2d2luZm50Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaD4KIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKQEAgLTMzMSw3ICszMzAsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgRlRfVFJBQ0UyKCggImludmFsaWQgYWxpZ25tZW50IHNoaWZ0IGNvdW50IGZvciByZXNvdXJjZSBkYXRhXG4iICkpOwogICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKLSAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgZ290byBFeGl0MTsKICAgICAgICAgfQogCiAKQEAgLTU5Nyw2ICs1OTYsMTAgQEAKIAogICBFeGl0OgogICAgIHJldHVybiBlcnJvcjsKKworICBFeGl0MToKKyAgICBGVF9GUkFNRV9FWElUKCk7CisgICAgZ290byBFeGl0OwogICB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL3dpbmZvbnRzL3dpbmZudC5oIGIvc3JjL3dpbmZvbnRzL3dpbmZudC5oCmluZGV4IGI2MjhhZDQuLjMzNjdjNzcgMTAwNjQ0Ci0tLSBhL3NyYy93aW5mb250cy93aW5mbnQuaAorKysgYi9zcmMvd2luZm9udHMvd2luZm50LmgKQEAgLTQsNyArNCw3IEBACiAgKgogICogICBGcmVlVHlwZSBmb250IGRyaXZlciBmb3IgV2luZG93cyBGTlQvRk9OIGZpbGVzCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgYnkKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDIwIGJ5CiAgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAgKiBDb3B5cmlnaHQgMjAwNyBEbWl0cnkgVGltb3Noa292IGZvciBDb2Rld2VhdmVycwogICoKQEAgLTIxLDkgKzIxLDggQEAKICNkZWZpbmUgV0lORk5UX0hfCiAKIAotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9XSU5GT05UU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9EUklWRVJfSAorI2luY2x1ZGUgPGZyZWV0eXBlL2Z0d2luZm50Lmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkcnYuaD4KIAogCiBGVF9CRUdJTl9IRUFERVIKZGlmZiAtLWdpdCBhL3Ztc19tYWtlLmNvbSBiL3Ztc19tYWtlLmNvbQppbmRleCBiNWRhNWY4Li5kMGY0OTA5IDEwMDY0NAotLS0gYS92bXNfbWFrZS5jb20KKysrIGIvdm1zX21ha2UuY29tCkBAIC0xLDYgKzEsNiBAQAogJCEgbWFrZSBGcmVlVHlwZSAyIHVuZGVyIE9wZW5WTVMKICQhCi0kISBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBieQorJCEgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgYnkKICQhIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICQhCiAkISBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAo=