ZGlmZiAtYXJ1TiBhL2luY2x1ZGUvQXNzZXJ0TWFjcm9zLmggYi9pbmNsdWRlL0Fzc2VydE1hY3Jvcy5oCi0tLSBhL2luY2x1ZGUvQXNzZXJ0TWFjcm9zLmgJMjAwOS0wMi0wMyAyMToyODoyNi4wMDAwMDAwMDAgLTA4MDAKKysrIGIvaW5jbHVkZS9Bc3NlcnRNYWNyb3MuaAkyMDA5LTA0LTEzIDEwOjA4OjIzLjAwMDAwMDAwMCAtMDcwMApAQCAtMSwyNiArMSw1MSBAQAogLyoKLSAgICAgRmlsZTogICAgICAgQXNzZXJ0TWFjcm9zLmgKLSAKLSAgICAgQ29udGFpbnM6ICAgVGhpcyBmaWxlIGRlZmluZXMgc3RydWN0dXJlZCBlcnJvciBoYW5kbGluZyBhbmQgYXNzZXJ0aW9uIG1hY3JvcyBmb3IKLSAgICAgICAgICAgICAgICAgcHJvZ3JhbW1pbmcgaW4gQy4gT3JpZ2luYWxseSB1c2VkIGluIFF1aWNrRHJhdyBHWCBhbmQgbGF0ZXIgZW5oYW5jZWQuCi0gICAgICAgICAgICAgICAgIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCB0aHJvdWdob3V0IEFwcGxlJ3Mgc29mdHdhcmUuCi0KLSAgICAgICAgICAgICAgICAgU2VlICJMaXZpbmcgSW4gYW4gRXhjZXB0aW9uYWwgV29ybGQiIGJ5IFNlYW4gUGFyZW50Ci0gICAgICAgICAgICAgICAgIChkZXZlbG9wLCBUaGUgQXBwbGUgVGVjaG5pY2FsIEpvdXJuYWwsIElzc3VlIDExLCBBdWd1c3QvU2VwdGVtYmVyIDE5OTIpCi0gICAgICAgICAgICAgICAgIDxodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kZXYvdGVjaHN1cHBvcnQvZGV2ZWxvcC9pc3N1ZTExdG9jLnNodG1sPgotICAgICAgICAgICAgICAgICBmb3IgdGhlIG1ldGhvZG9sb2d5IGJlaGluZCB0aGVzZSBlcnJvciBoYW5kbGluZyBhbmQgYXNzZXJ0aW9uIG1hY3Jvcy4KLQotICAgICBDb3B5cmlnaHQ6ICCpIDIwMDIgYnkgQXBwbGUgQ29tcHV0ZXIsIEluYy4sIGFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gIAotICAgICBCdWdzPzogICAgICBGb3IgYnVnIHJlcG9ydHMsIGNvbnN1bHQgdGhlIGZvbGxvd2luZyBwYWdlIG9uCi0gICAgICAgICAgICAgICAgIHRoZSBXb3JsZCBXaWRlIFdlYjoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA4IGJ5IEFwcGxlIEluYy4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQEFQUExFX0xJQ0VOU0VfSEVBREVSX1NUQVJUQAorICogCisgKiBUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZiBPcmlnaW5hbCBDb2RlCisgKiBhcyBkZWZpbmVkIGluIGFuZCB0aGF0IGFyZSBzdWJqZWN0IHRvIHRoZSBBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UKKyAqIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KKyAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5hcHBsZS5jb20vYXBzbC8gYW5kIHJlYWQgaXQgYmVmb3JlIHVzaW5nIHRoaXMKKyAqIGZpbGUuCisgKiAKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlCisgKiBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywKKyAqIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBRVUlFVCBFTkpPWU1FTlQgT1IgTk9OLUlORlJJTkdFTUVOVC4KKyAqIFBsZWFzZSBzZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiAKKyAqIEBBUFBMRV9MSUNFTlNFX0hFQURFUl9FTkRACisgKi8KKworCisvKgorCUZpbGU6ICAgICAgIEFzc2VydE1hY3Jvcy5oCiAgCi0gICAgICAgICAgICAgICAgICAgICBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9idWdyZXBvcnRlci8gCisJQ29udGFpbnM6ICAgVGhpcyBmaWxlIGRlZmluZXMgc3RydWN0dXJlZCBlcnJvciBoYW5kbGluZyBhbmQgYXNzZXJ0aW9uIG1hY3JvcyBmb3IKKwkJCQlwcm9ncmFtbWluZyBpbiBDLiBPcmlnaW5hbGx5IHVzZWQgaW4gUXVpY2tEcmF3IEdYIGFuZCBsYXRlciBlbmhhbmNlZC4KKwkJCQlUaGVzZSBtYWNyb3MgYXJlIHVzZWQgdGhyb3VnaG91dCBBcHBsZSdzIHNvZnR3YXJlLgorCQorCQkJCU5ldyBjb2RlIG1heSBub3Qgd2FudCB0byBiZWdpbiBhZG9wdGluZyB0aGVzZSBtYWNyb3MgYW5kIGluc3RlYWQgdXNlCisJCQkJZXhpc3RpbmcgbGFuZ3VhZ2UgZnVuY3Rpb25hbGl0eS4KKwkKKwkJCQlTZWUgIkxpdmluZyBJbiBhbiBFeGNlcHRpb25hbCBXb3JsZCIgYnkgU2VhbiBQYXJlbnQKKwkJCQkoZGV2ZWxvcCwgVGhlIEFwcGxlIFRlY2huaWNhbCBKb3VybmFsLCBJc3N1ZSAxMSwgQXVndXN0L1NlcHRlbWJlciAxOTkyKQorCQkJCTxodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kZXYvdGVjaHN1cHBvcnQvZGV2ZWxvcC9pc3N1ZTExdG9jLnNodG1sPiBvcgorCQkJCTxodHRwOi8vd3d3Lm1hY3RlY2guY29tL2FydGljbGVzL2RldmVsb3AvaXNzdWVfMTEvUGFyZW50X2ZpbmFsLmh0bWw+CisJCQkJZm9yIHRoZSBtZXRob2RvbG9neSBiZWhpbmQgdGhlc2UgZXJyb3IgaGFuZGxpbmcgYW5kIGFzc2VydGlvbiBtYWNyb3MuCisJCisJQnVncz86ICAgICAgRm9yIGJ1ZyByZXBvcnRzLCBjb25zdWx0IHRoZSBmb2xsb3dpbmcgcGFnZSBvbgorCQkJCXRoZSBXb3JsZCBXaWRlIFdlYjoKKworCSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9idWdyZXBvcnRlci8gCiAqLwogI2lmbmRlZiBfX0FTU0VSVE1BQ1JPU19fCiAjZGVmaW5lIF9fQVNTRVJUTUFDUk9TX18KIAotCiAvKgogICogIE1hY3JvIG92ZXJ2aWV3OgogICogIApAQCAtNjAsNiArODUsMjcgQEAKICAqICAgICAgQnkgZGVmYXVsdCwgYWxsIG1lc3NhZ2VzIHdyaXRlIHRvIHN0ZGVyci4gIElmIHlvdSB3b3VsZCBsaWtlIHRvIHdyaXRlIGEgY3VzdG9tCiAgKiAgICAgIGVycm9yIG1lc3NhZ2UgZm9ybWF0ZXIsIGRlZmluZWQgREVCVUdfQVNTRVJUX01FU1NBR0UgdG8geW91ciBmdW5jdGlvbiBuYW1lLgogICoKKyAqICAgICAgRWFjaCBpbmRpdmlkdWFsIG1hY3JvIHdpbGwgb25seSBiZSBkZWZpbmVkIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGRlZmluZWQsIHNvCisgKiAgICAgIHlvdSBjYW4gcmVkZWZpbmUgdGhlaXIgYmVoYXZpb3Igc2luZ2x5IGJ5IHByb3ZpZGluZyB5b3VyIG93biBkZWZpbml0aW9uIGJlZm9yZQorICogICAgICB0aGlzIGZpbGUgaXMgaW5jbHVkZWQuCisgKgorICogICAgICBJZiB5b3UgZGVmaW5lIF9fQVNTRVJUTUFDUk9TX18gYmVmb3JlIHRoaXMgZmlsZSBpcyBpbmNsdWRlZCwgdGhlbiBub3RoaW5nIGluCisgKiAgICAgIHRoaXMgZmlsZSB3aWxsIHRha2UgZWZmZWN0LgorICoKKyAqICAgICAgUHJpb3IgdG8gTWFjIE9TIFggMTAuNiB0aGUgbWFjcm8gbmFtZXMgdXNlZCBpbiB0aGlzIGZpbGUgY29uZmxpY3RlZCB3aXRoIHNvbWUKKyAqICAgICAgdXNlciBjb2RlLCBpbmNsdWRpbmcgbGlicmFyaWVzIGluIGJvb3N0IGFuZCB0aGUgcHJvcG9zZWQgQysrIHN0YW5kYXJkcyBlZmZvcnRzLAorICogICAgICBhbmQgdGhlcmUgd2FzIG5vIHdheSBmb3IgYSBjbGllbnQgb2YgdGhpcyBoZWFkZXIgdG8gcmVzb2x2ZSB0aGlzIGNvbmZsaWN0LiBCZWNhdXNlCisgKiAgICAgIG9mIHRoaXMsIG1vc3Qgb2YgdGhlIG1hY3JvcyBoYXZlIGJlZW4gY2hhbmdlZCBzbyB0aGF0IHRoZXkgYXJlIHByZWZpeGVkIHdpdGggCisgKiAgICAgIF9fIGFuZCBjb250YWluIGF0IGxlYXN0IG9uZSBjYXBpdGFsIGxldHRlciwgd2hpY2ggc2hvdWxkIGFsbGV2aWF0ZSB0aGUgY3VycmVudAorICogICAgICBhbmQgZnV0dXJlIGNvbmZsaWN0cy4gIEhvd2V2ZXIsIHRvIGFsbG93IGN1cnJlbnQgc291cmNlcyB0byBjb250aW51ZSB0byBjb21waWxlLAorICogICAgICBjb21wYXRpYmlsaXR5IG1hY3JvcyBhcmUgZGVmaW5lZCBhdCB0aGUgZW5kIHdpdGggdGhlIG9sZCBuYW1lcy4gIEEgdG9wcyBzY3JpcHQgCisgKiAgICAgIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlIHdpbGwgY29udmVydCBhbGwgb2YgdGhlIG9sZCBtYWNybyBuYW1lcyB1c2VkIGluIGEgZGlyZWN0b3J5CisgKiAgICAgIHRvIHRoZSBuZXcgbmFtZXMuICBDbGllbnRzIGFyZSByZWNvbW1lbmRlZCB0byBtaWdyYXRlIG92ZXIgdG8gdGhlc2UgbmV3IG1hY3JvcyBhcworICogICAgICB0aGV5IHVwZGF0ZSB0aGVpciBzb3VyY2VzIGJlY2F1c2UgYSBmdXR1cmUgcmVsZWFzZSBvZiBNYWMgT1MgWCB3aWxsIHJlbW92ZSB0aGUKKyAqICAgICAgb2xkIG1hY3JvIGRlZmluaXRpb25zICggd2l0aG91dCB0aGUgZG91YmxlLXVuZGVyc2NvcmUgcHJlZml4ICkuICBDbGllbnRzIHdobworICogICAgICB3YW50IHRvIGNvbXBpbGUgd2l0aG91dCB0aGUgb2xkIG1hY3JvIGRlZmluaXRpb25zIGNhbiBkZWZpbmUgdGhlIG1hY3JvCisgKiAgICAgIF9fQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUyB0byAwIGJlZm9yZSB0aGlzIGZpbGUgaXMKKyAqICAgICAgaW5jbHVkZWQuCiAgKi8KIAogCkBAIC0xNjUsOSArMjExLDkgQEAKICAqLwogI2lmbmRlZiBERUJVR19BU1NFUlRfTUVTU0FHRQogICAgI2lmZGVmIEtFUk5FTAotICAgICAgI2luY2x1ZGUgPHN5c2xvZy5oPgorICAgICAgI2luY2x1ZGUgPGxpYmtlcm4vbGlia2Vybi5oPgogICAgICAgI2RlZmluZSBERUJVR19BU1NFUlRfTUVTU0FHRShuYW1lLCBhc3NlcnRpb24sIGxhYmVsLCBtZXNzYWdlLCBmaWxlLCBsaW5lLCB2YWx1ZSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfRVJSLCAiQXNzZXJ0TWFjcm9zOiAlcywgJXMgZmlsZTogJXMsIGxpbmU6ICVkXG4iLCBhc3NlcnRpb24sIChtZXNzYWdlIT0wKSA/IG1lc3NhZ2UgOiAiIiwgZmlsZSwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCAiQXNzZXJ0TWFjcm9zOiAlcywgJXMgZmlsZTogJXMsIGxpbmU6ICVkXG4iLCBhc3NlcnRpb24sIChtZXNzYWdlIT0wKSA/IG1lc3NhZ2UgOiAiIiwgZmlsZSwgbGluZSk7CiAgICAjZWxzZQogICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgICAgICAjZGVmaW5lIERFQlVHX0FTU0VSVF9NRVNTQUdFKG5hbWUsIGFzc2VydGlvbiwgbGFiZWwsIG1lc3NhZ2UsIGZpbGUsIGxpbmUsIHZhbHVlKSBcCkBAIC0xODAsNyArMjI2LDcgQEAKIAogCiAvKgotICogIGRlYnVnX3N0cmluZyhtZXNzYWdlKQorICogIF9fRGVidWdfU3RyaW5nKG1lc3NhZ2UpCiAgKgogICogIFN1bW1hcnk6CiAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogZG9lcyBub3RoaW5nIGFuZCBwcm9kdWNlcyBubyBjb2RlLgpAQCAtMTkzLDI2ICsyMzksMjcgQEAKICAqICAgICAgVGhlIEMgc3RyaW5nIHRvIGRpc3BsYXkuCiAgKgogICovCi0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQotICAgI2RlZmluZSBkZWJ1Z19zdHJpbmcobWVzc2FnZSkKLSNlbHNlCi0gICAjZGVmaW5lIGRlYnVnX3N0cmluZyhtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9IHdoaWxlICggMCApCisjaWZuZGVmIF9fRGVidWdfU3RyaW5nCisJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKwkgICAjZGVmaW5lIF9fRGVidWdfU3RyaW5nKG1lc3NhZ2UpCisJI2Vsc2UKKwkgICAjZGVmaW5lIF9fRGVidWdfU3RyaW5nKG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgbWVzc2FnZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9IHdoaWxlICggMCApCisJI2VuZGlmCiAjZW5kaWYKIAotCiAvKgotICogIGNoZWNrKGFzc2VydGlvbikKKyAqICBfX0NoZWNrKGFzc2VydGlvbikKICAqCiAgKiAgU3VtbWFyeToKICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBkb2VzIG5vdGhpbmcgYW5kIHByb2R1Y2VzIG5vIGNvZGUuCkBAIC0yMjUsMzIgKzI3MiwyOSBAQAogICogICAgYXNzZXJ0aW9uOgogICogICAgICBUaGUgYXNzZXJ0aW9uIGV4cHJlc3Npb24uCiAgKi8KLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCi0gICAjZGVmaW5lIGNoZWNrKGFzc2VydGlvbikKLSNlbHNlCi0gICAjZGVmaW5lIGNoZWNrKGFzc2VydGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAjYXNzZXJ0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9IHdoaWxlICggMCApCisjaWZuZGVmIF9fQ2hlY2sKKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorCSAgICNkZWZpbmUgX19DaGVjayhhc3NlcnRpb24pCisJI2Vsc2UKKwkgICAjZGVmaW5lIF9fQ2hlY2soYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgI2Fzc2VydGlvbiwgMCwgMCwgX19GSUxFX18sIF9fTElORV9fLCAwICk7ICAgICAgICAgICAgICAgICAgXAorCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9IHdoaWxlICggMCApCisJI2VuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBuY2hlY2soYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjaGVjayghKGFzc2VydGlvbikpCi0KKyNpZm5kZWYgX19uQ2hlY2sKKwkjZGVmaW5lIF9fbkNoZWNrKGFzc2VydGlvbikgIF9fQ2hlY2soIShhc3NlcnRpb24pKQorI2VuZGlmCiAKIC8qCi0gKiAgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkKKyAqICBfX0NoZWNrX1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpCiAgKgogICogIFN1bW1hcnk6CiAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogZG9lcyBub3RoaW5nIGFuZCBwcm9kdWNlcyBubyBjb2RlLgpAQCAtMjY2LDMyICszMTAsMjkgQEAKICAqICAgIG1lc3NhZ2U6CiAgKiAgICAgIFRoZSBDIHN0cmluZyB0byBkaXNwbGF5LgogICovCi0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQotICAgI2RlZmluZSBjaGVja19zdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQotI2Vsc2UKLSAgICNkZWZpbmUgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICNhc3NlcnRpb24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gd2hpbGUgKCAwICkKKyNpZm5kZWYgX19DaGVja19TdHJpbmcKKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorCSAgICNkZWZpbmUgX19DaGVja19TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQorCSNlbHNlCisJICAgI2RlZmluZSBfX0NoZWNrX1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgICNhc3NlcnRpb24sIDAsIG1lc3NhZ2UsIF9fRklMRV9fLCBfX0xJTkVfXywgMCApOyAgICAgICAgICAgIFwKKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgfSB3aGlsZSAoIDAgKQorCSNlbmRpZgogI2VuZGlmCiAKLSNkZWZpbmUgbmNoZWNrX3N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY2hlY2tfc3RyaW5nKCEoYXNzZXJ0aW9uKSwgbWVzc2FnZSkKLQorI2lmbmRlZiBfX25DaGVja19TdHJpbmcKKwkjZGVmaW5lIF9fbkNoZWNrX1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICBfX0NoZWNrX1N0cmluZyghKGFzc2VydGlvbiksIG1lc3NhZ2UpCisjZW5kaWYKIAogLyoKLSAqICBjaGVja19ub2VycihlcnJvckNvZGUpCisgKiAgX19DaGVja19ub0VycihlcnJvckNvZGUpCiAgKgogICogIFN1bW1hcnk6CiAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogZG9lcyBub3RoaW5nIGFuZCBwcm9kdWNlcyBubyBjb2RlLgpAQCAtMzA0LDMwICszNDUsMjYgQEAKICAqICAgIGVycm9yQ29kZToKICAqICAgICAgVGhlIGVycm9yQ29kZSBleHByZXNzaW9uIHRvIGNvbXBhcmUgd2l0aCAwLgogICovCi0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQotICAgI2RlZmluZSBjaGVja19ub2VycihlcnJvckNvZGUpCi0jZWxzZQotICAgI2RlZmluZSBjaGVja19ub2VycihlcnJvckNvZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGludCBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGlmICggMCAhPSBldmFsT25jZUVycm9yQ29kZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgZXZhbE9uY2VFcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSB3aGlsZSAoIDAgKQorI2lmbmRlZiBfX0NoZWNrX25vRXJyCisJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKwkgICAjZGVmaW5lIF9fQ2hlY2tfbm9FcnIoZXJyb3JDb2RlKQorCSNlbHNlCisJICAgI2RlZmluZSBfX0NoZWNrX25vRXJyKGVycm9yQ29kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIGxvbmcgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSAgICAgICAgICAgICAgICAgIFwKKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJICAjZXJyb3JDb2RlICIgPT0gMCAiLCAwLCAwLCBfX0ZJTEVfXywgX19MSU5FX18sIGV2YWxPbmNlRXJyb3JDb2RlICk7IFwKKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgfSB3aGlsZSAoIDAgKQorCSNlbmRpZgogI2VuZGlmCiAKLQogLyoKLSAqICBjaGVja19ub2Vycl9zdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorICogIF9fQ2hlY2tfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkKICAqCiAgKiAgU3VtbWFyeToKICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBjaGVja19ub2Vycl9zdHJpbmcoKSBkb2VzIG5vdGhpbmcgYW5kIHByb2R1Y2VzCkBAIC0zNDQsMzAgKzM4MSwyNiBAQAogICogICAgbWVzc2FnZToKICAqICAgICAgVGhlIEMgc3RyaW5nIHRvIGRpc3BsYXkuCiAgKi8KLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCi0gICAjZGVmaW5lIGNoZWNrX25vZXJyX3N0cmluZyhlcnJvckNvZGUsIG1lc3NhZ2UpCi0jZWxzZQotICAgI2RlZmluZSBjaGVja19ub2Vycl9zdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGludCBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGlmICggMCAhPSBldmFsT25jZUVycm9yQ29kZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgZXZhbE9uY2VFcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSB3aGlsZSAoIDAgKQorI2lmbmRlZiBfX0NoZWNrX25vRXJyX1N0cmluZworCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisJICAgI2RlZmluZSBfX0NoZWNrX25vRXJyX1N0cmluZyhlcnJvckNvZGUsIG1lc3NhZ2UpCisJI2Vsc2UKKwkgICAjZGVmaW5lIF9fQ2hlY2tfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IGV2YWxPbmNlRXJyb3JDb2RlLCAwKSApICAgICAgICAgICAgICAgICAgXAorCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsIDAsIG1lc3NhZ2UsIF9fRklMRV9fLCBfX0xJTkVfXywgZXZhbE9uY2VFcnJvckNvZGUgKTsgXAorCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9IHdoaWxlICggMCApCisJI2VuZGlmCiAjZW5kaWYKIAotCiAvKgotICogIHZlcmlmeShhc3NlcnRpb24pCisgKiAgX19WZXJpZnkoYXNzZXJ0aW9uKQogICoKICAqICBTdW1tYXJ5OgogICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGV2YWx1YXRlIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiwgYnV0IGlnbm9yZQpAQCAtMzgxLDM4ICs0MTQsMzUgQEAKICAqICAgIGFzc2VydGlvbjoKICAqICAgICAgVGhlIGFzc2VydGlvbiBleHByZXNzaW9uLgogICovCi0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQotICAgI2RlZmluZSB2ZXJpZnkoYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSB3aGlsZSAoIDAgKQotI2Vsc2UKLSAgICNkZWZpbmUgdmVyaWZ5KGFzc2VydGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICNhc3NlcnRpb24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gd2hpbGUgKCAwICkKKyNpZm5kZWYgX19WZXJpZnkKKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorCSAgICNkZWZpbmUgX19WZXJpZnkoYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gd2hpbGUgKCAwICkKKwkjZWxzZQorCSAgICNkZWZpbmUgX19WZXJpZnkoYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJICAjYXNzZXJ0aW9uLCAwLCAwLCBfX0ZJTEVfXywgX19MSU5FX18sIDAgKTsgICAgICAgICAgICAgICAgICBcCisJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gd2hpbGUgKCAwICkKKwkjZW5kaWYKICNlbmRpZgogCi0jZGVmaW5lIG52ZXJpZnkoYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHZlcmlmeSghKGFzc2VydGlvbikpCi0KKyNpZm5kZWYgX19uVmVyaWZ5CisJI2RlZmluZSBfX25WZXJpZnkoYXNzZXJ0aW9uKQlfX1ZlcmlmeSghKGFzc2VydGlvbikpCisjZW5kaWYKIAogLyoKLSAqICB2ZXJpZnlfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkKKyAqICBfX1ZlcmlmeV9TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQogICoKICAqICBTdW1tYXJ5OgogICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGV2YWx1YXRlIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiwgYnV0IGlnbm9yZQpAQCAtNDI5LDM4ICs0NTksMzUgQEAKICAqICAgIG1lc3NhZ2U6CiAgKiAgICAgIFRoZSBDIHN0cmluZyB0byBkaXNwbGF5LgogICovCi0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQotICAgI2RlZmluZSB2ZXJpZnlfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSB3aGlsZSAoIDAgKQotI2Vsc2UKLSAgICNkZWZpbmUgdmVyaWZ5X3N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICNhc3NlcnRpb24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gd2hpbGUgKCAwICkKKyNpZm5kZWYgX19WZXJpZnlfU3RyaW5nCisJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKwkgICAjZGVmaW5lIF9fVmVyaWZ5X1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9IHdoaWxlICggMCApCisJI2Vsc2UKKwkgICAjZGVmaW5lIF9fVmVyaWZ5X1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgI2Fzc2VydGlvbiwgMCwgbWVzc2FnZSwgX19GSUxFX18sIF9fTElORV9fLCAwICk7ICAgICAgICAgICAgXAorCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9IHdoaWxlICggMCApCisJI2VuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBudmVyaWZ5X3N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB2ZXJpZnlfc3RyaW5nKCEoYXNzZXJ0aW9uKSwgbWVzc2FnZSkKLQorI2lmbmRlZiBfX25WZXJpZnlfU3RyaW5nCisJI2RlZmluZSBfX25WZXJpZnlfU3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgIF9fVmVyaWZ5X1N0cmluZyghKGFzc2VydGlvbiksIG1lc3NhZ2UpCisjZW5kaWYKIAogLyoKLSAqICB2ZXJpZnlfbm9lcnIoZXJyb3JDb2RlKQorICogIF9fVmVyaWZ5X25vRXJyKGVycm9yQ29kZSkKICAqCiAgKiAgU3VtbWFyeToKICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBldmFsdWF0ZSB0aGUgZXJyb3JDb2RlIGV4cHJlc3Npb24sIGJ1dCBpZ25vcmUKQEAgLTQ3NCwzNiArNTAxLDMyIEBACiAgKiAgICBlcnJvckNvZGU6CiAgKiAgICAgIFRoZSBleHByZXNzaW9uIHRvIGNvbXBhcmUgdG8gMC4KICAqLwotI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKLSAgICNkZWZpbmUgdmVyaWZ5X25vZXJyKGVycm9yQ29kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpZiAoIDAgIT0gKGVycm9yQ29kZSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gd2hpbGUgKCAwICkKLSNlbHNlCi0gICAjZGVmaW5lIHZlcmlmeV9ub2VycihlcnJvckNvZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaW50IGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaWYgKCAwICE9IGV2YWxPbmNlRXJyb3JDb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAjZXJyb3JDb2RlICIgPT0gMCAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBldmFsT25jZUVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9IHdoaWxlICggMCApCisjaWZuZGVmIF9fVmVyaWZ5X25vRXJyCisJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKwkgICAjZGVmaW5lIF9fVmVyaWZ5X25vRXJyKGVycm9yQ29kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9IHdoaWxlICggMCApCisJI2Vsc2UKKwkgICAjZGVmaW5lIF9fVmVyaWZ5X25vRXJyKGVycm9yQ29kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IGV2YWxPbmNlRXJyb3JDb2RlLCAwKSApICAgICAgICAgICAgICAgICAgXAorCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsIDAsIDAsIF9fRklMRV9fLCBfX0xJTkVfXywgZXZhbE9uY2VFcnJvckNvZGUgKTsgXAorCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9IHdoaWxlICggMCApCisJI2VuZGlmCiAjZW5kaWYKIAotCiAvKgotICogIHZlcmlmeV9ub2Vycl9zdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorICogIF9fVmVyaWZ5X25vRXJyX1N0cmluZyhlcnJvckNvZGUsIG1lc3NhZ2UpCiAgKgogICogIFN1bW1hcnk6CiAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogZXZhbHVhdGUgdGhlIGVycm9yQ29kZSBleHByZXNzaW9uLCBidXQgaWdub3JlCkBAIC01MjAsMzYgKzU0Myw3MSBAQAogICogICAgbWVzc2FnZToKICAqICAgICAgVGhlIEMgc3RyaW5nIHRvIGRpc3BsYXkuCiAgKi8KLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCi0gICAjZGVmaW5lIHZlcmlmeV9ub2Vycl9zdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9IHdoaWxlICggMCApCi0jZWxzZQotICAgI2RlZmluZSB2ZXJpZnlfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGludCBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGlmICggMCAhPSBldmFsT25jZUVycm9yQ29kZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgZXZhbE9uY2VFcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSB3aGlsZSAoIDAgKQorI2lmbmRlZiBfX1ZlcmlmeV9ub0Vycl9TdHJpbmcKKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorCSAgICNkZWZpbmUgX19WZXJpZnlfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICBpZiAoIDAgIT0gKGVycm9yQ29kZSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gd2hpbGUgKCAwICkKKwkjZWxzZQorCSAgICNkZWZpbmUgX19WZXJpZnlfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICBsb25nIGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KDAgIT0gZXZhbE9uY2VFcnJvckNvZGUsIDApICkgICAgICAgICAgICAgICAgICBcCisJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgI2Vycm9yQ29kZSAiID09IDAgIiwgMCwgbWVzc2FnZSwgX19GSUxFX18sIF9fTElORV9fLCBldmFsT25jZUVycm9yQ29kZSApOyBcCisJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gd2hpbGUgKCAwICkKKwkjZW5kaWYKICNlbmRpZgogCisvKgorICogIF9fVmVyaWZ5X25vRXJyX0FjdGlvbihlcnJvckNvZGUsIGFjdGlvbikKKyAqCisgKiAgU3VtbWFyeToKKyAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBpZiB0aGUgZXJyb3JDb2RlIGV4cHJlc3Npb24gZG9lcyBub3QgZXF1YWwgMCAobm9FcnIpLAorICogICAgZXhlY3V0ZSB0aGUgYWN0aW9uIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgKGJsb2NrKS4KKyAqCisgKiAgICBOb24tcHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCisgKiAgICBjYWxsIERFQlVHX0FTU0VSVF9NRVNTQUdFIGFuZCB0aGVuIGV4ZWN1dGUgdGhlIGFjdGlvbiBzdGF0ZW1lbnQgb3IgY29tcG91bmQKKyAqICAgIHN0YXRlbWVudCAoYmxvY2spLgorICoKKyAqICBQYXJhbWV0ZXJzOgorICoKKyAqICAgIGVycm9yQ29kZToKKyAqICAgICAgVGhlIGV4cHJlc3Npb24gdG8gY29tcGFyZSB0byAwLgorICoKKyAqICAgIGFjdGlvbjoKKyAqICAgICAgVGhlIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgKGJsb2NrKS4KKyAqLworI2lmbmRlZiBfX1ZlcmlmeV9ub0Vycl9BY3Rpb24KKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorCSAgICNkZWZpbmUgX19WZXJpZnlfbm9FcnJfQWN0aW9uKGVycm9yQ29kZSwgYWN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIGlmICggMCAhPSAoZXJyb3JDb2RlKSApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIGVsc2UgZG8ge30gd2hpbGUgKDApCisJI2Vsc2UKKwkgICAjZGVmaW5lIF9fVmVyaWZ5X25vRXJyX0FjdGlvbihlcnJvckNvZGUsIGFjdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICBsb25nIGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSB7ICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsIDAsIDAsIF9fRklMRV9fLCBfX0xJTkVfXywgMCApOyAgICAgICAgICAgIFwKKwkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICBlbHNlIGRvIHt9IHdoaWxlICgwKQorCSNlbmRpZgorI2VuZGlmCiAKIC8qCi0gKiAgdmVyaWZ5X2FjdGlvbihhc3NlcnRpb24sIGFjdGlvbikKKyAqICBfX1ZlcmlmeV9BY3Rpb24oYXNzZXJ0aW9uLCBhY3Rpb24pCiAgKgogICogIFN1bW1hcnk6CiAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSwKQEAgLTU2NywzNyArNjI1LDI3IEBACiAgKiAgICBhY3Rpb246CiAgKiAgICAgIFRoZSBzdGF0ZW1lbnQgb3IgY29tcG91bmQgc3RhdGVtZW50IChibG9jaykuCiAgKi8KLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCi0gICAjZGVmaW5lIHZlcmlmeV9hY3Rpb24oYXNzZXJ0aW9uLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9IHdoaWxlICggMCApCi0jZWxzZQotICAgI2RlZmluZSB2ZXJpZnlfYWN0aW9uKGFzc2VydGlvbiwgYWN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAjYXNzZXJ0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgeyBhY3Rpb247IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICB9IHdoaWxlICggMCApCisjaWZuZGVmIF9fVmVyaWZ5X0FjdGlvbgorCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisJICAgI2RlZmluZSBfX1ZlcmlmeV9BY3Rpb24oYXNzZXJ0aW9uLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgZWxzZSBkbyB7fSB3aGlsZSAoMCkKKwkjZWxzZQorCSAgICNkZWZpbmUgX19WZXJpZnlfQWN0aW9uKGFzc2VydGlvbiwgYWN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgICNhc3NlcnRpb24sIDAsIDAsIF9fRklMRV9fLCBfX0xJTkVfXywgMCApOyAgICAgICAgICAgICAgICAgXAorCQkJICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIGVsc2UgZG8ge30gd2hpbGUgKDApCisJI2VuZGlmCiAjZW5kaWYKIAotCiAvKgotICogIHJlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkKKyAqICBfX1JlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkKICAqCiAgKiAgU3VtbWFyeToKICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBpZiB0aGUgYXNzZXJ0aW9uIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGZhbHNlLApAQCAtNjE0LDQwICs2NjIsMzYgQEAKICAqICAgIGV4Y2VwdGlvbkxhYmVsOgogICogICAgICBUaGUgbGFiZWwuCiAgKi8KLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCi0gICAjZGVmaW5lIHJlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9IHdoaWxlICggMCApCi0jZWxzZQotICAgI2RlZmluZSByZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2V4Y2VwdGlvbkxhYmVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSB3aGlsZSAoIDAgKQorI2lmbmRlZiBfX1JlcXVpcmUKKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorCSAgICNkZWZpbmUgX19SZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9IHdoaWxlICggMCApCisJI2Vsc2UKKwkgICAjZGVmaW5lIF9fUmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJICAjYXNzZXJ0aW9uLCAjZXhjZXB0aW9uTGFiZWwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXywgIDApOyAgICBcCisJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9IHdoaWxlICggMCApCisJI2VuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBucmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZXF1aXJlKCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwpCi0KKyNpZm5kZWYgX19uUmVxdWlyZQorCSNkZWZpbmUgX19uUmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgX19SZXF1aXJlKCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwpCisjZW5kaWYKIAogLyoKLSAqICByZXF1aXJlX2FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCisgKiAgX19SZXF1aXJlX0FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCiAgKgogICogIFN1bW1hcnk6CiAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSwKQEAgLTY2OSw0NiArNzEzLDQ0IEBACiAgKiAgICBhY3Rpb246CiAgKiAgICAgIFRoZSBzdGF0ZW1lbnQgb3IgY29tcG91bmQgc3RhdGVtZW50IChibG9jaykuCiAgKi8KLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCi0gICAjZGVmaW5lIHJlcXVpcmVfYWN0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgICAgICAgICAgICAgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9IHdoaWxlICggMCApCi0jZWxzZQotICAgI2RlZmluZSByZXF1aXJlX2FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2V4Y2VwdGlvbkxhYmVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSB3aGlsZSAoIDAgKQorI2lmbmRlZiBfX1JlcXVpcmVfQWN0aW9uCisJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9BY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgICAgICBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgfSB3aGlsZSAoIDAgKQorCSNlbHNlCisJICAgI2RlZmluZSBfX1JlcXVpcmVfQWN0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgICAgICAgICAgICAgICAgXAorCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgICNhc3NlcnRpb24sICNleGNlcHRpb25MYWJlbCwgMCwgICBfX0ZJTEVfXywgX19MSU5FX18sIDApOyAgIFwKKwkJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gd2hpbGUgKCAwICkKKwkjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9fblJlcXVpcmVfQWN0aW9uCisJI2RlZmluZSBfX25SZXF1aXJlX0FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgXAorCV9fUmVxdWlyZV9BY3Rpb24oIShhc3NlcnRpb24pLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQogI2VuZGlmCiAKLSNkZWZpbmUgbnJlcXVpcmVfYWN0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgICAgICAgICAgICAgICAgICAgIFwKLSAgcmVxdWlyZV9hY3Rpb24oIShhc3NlcnRpb24pLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQotCi0KIC8qCi0gKiAgcmVxdWlyZV9xdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKQorICogIF9fUmVxdWlyZV9RdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKQogICoKICAqICBTdW1tYXJ5OgogICogICAgSWYgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSwgZ290byBleGNlcHRpb25MYWJlbC4KQEAgLTcyMSwyMSArNzYzLDIzIEBACiAgKiAgICBleGNlcHRpb25MYWJlbDoKICAqICAgICAgVGhlIGxhYmVsLgogICovCi0jZGVmaW5lIHJlcXVpcmVfcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKCAwICkKLQotI2RlZmluZSBucmVxdWlyZV9xdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZXF1aXJlX3F1aWV0KCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwpCisjaWZuZGVmIF9fUmVxdWlyZV9RdWlldAorCSNkZWZpbmUgX19SZXF1aXJlX1F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIH0gd2hpbGUgKCAwICkKKyNlbmRpZgogCisjaWZuZGVmIF9fblJlcXVpcmVfUXVpZXQKKwkjZGVmaW5lIF9fblJlcXVpcmVfUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgIF9fUmVxdWlyZV9RdWlldCghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsKQorI2VuZGlmCiAKIC8qCi0gKiAgcmVxdWlyZV9hY3Rpb25fcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorICogIF9fUmVxdWlyZV9BY3Rpb25fUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQogICoKICAqICBTdW1tYXJ5OgogICogICAgSWYgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSwgZXhlY3V0ZSB0aGUgYWN0aW9uCkBAIC03NTIsMjQgKzc5NiwyNyBAQAogICogICAgYWN0aW9uOgogICogICAgICBUaGUgc3RhdGVtZW50IG9yIGNvbXBvdW5kIHN0YXRlbWVudCAoYmxvY2spLgogICovCi0jZGVmaW5lIHJlcXVpcmVfYWN0aW9uX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgICAgICAgICAgICAgICBcCi0gIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKCAwICkKLQotI2RlZmluZSBucmVxdWlyZV9hY3Rpb25fcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgICAgXAotICByZXF1aXJlX2FjdGlvbl9xdWlldCghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCi0KKyNpZm5kZWYgX19SZXF1aXJlX0FjdGlvbl9RdWlldAorCSNkZWZpbmUgX19SZXF1aXJlX0FjdGlvbl9RdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgIFwKKwkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIH0gd2hpbGUgKCAwICkKKyNlbmRpZgorCisjaWZuZGVmIF9fblJlcXVpcmVfQWN0aW9uX1F1aWV0CisJI2RlZmluZSBfX25SZXF1aXJlX0FjdGlvbl9RdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICBcCisJCV9fUmVxdWlyZV9BY3Rpb25fUXVpZXQoIShhc3NlcnRpb24pLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorI2VuZGlmCiAKIC8qCi0gKiAgcmVxdWlyZV9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkKKyAqICBfX1JlcXVpcmVfU3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpCiAgKgogICogIFN1bW1hcnk6CiAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSwKQEAgLTc4OSw0MCArODM2LDM4IEBACiAgKiAgICBtZXNzYWdlOgogICogICAgICBUaGUgQyBzdHJpbmcgdG8gZGlzcGxheS4KICAqLwotI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKLSAgICNkZWZpbmUgcmVxdWlyZV9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkgICAgICAgICAgICAgICAgIFwKLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gd2hpbGUgKCAwICkKLSNlbHNlCi0gICAjZGVmaW5lIHJlcXVpcmVfc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICAgICAgICAgICAgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAjYXNzZXJ0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAjZXhjZXB0aW9uTGFiZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBtZXNzYWdlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9IHdoaWxlICggMCApCisjaWZuZGVmIF9fUmVxdWlyZV9TdHJpbmcKKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorCSAgICNkZWZpbmUgX19SZXF1aXJlX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKSAgICAgICAgICAgICAgIFwKKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9IHdoaWxlICggMCApCisJI2Vsc2UKKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkgICAgICAgICAgICAgICBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgI2Fzc2VydGlvbiwgI2V4Y2VwdGlvbkxhYmVsLCAgbWVzc2FnZSwgIF9fRklMRV9fLCBfX0xJTkVfXywgMCk7IFwKKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gd2hpbGUgKCAwICkKKwkjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9fblJlcXVpcmVfU3RyaW5nCisJI2RlZmluZSBfX25SZXF1aXJlX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBzdHJpbmcpICAgICAgICAgICAgICAgICAgXAorCQlfX1JlcXVpcmVfU3RyaW5nKCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwsIHN0cmluZykKICNlbmRpZgogCi0jZGVmaW5lIG5yZXF1aXJlX3N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBzdHJpbmcpICAgICAgICAgICAgICAgICAgICBcCi0gIHJlcXVpcmVfc3RyaW5nKCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwsIHN0cmluZykKLQotCiAvKgotICogIHJlcXVpcmVfYWN0aW9uX3N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisgKiAgX19SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKQogICoKICAqICBTdW1tYXJ5OgogICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gZmFsc2UsCkBAIC04NDcsNDYgKzg5Miw0NCBAQAogICogICAgbWVzc2FnZToKICAqICAgICAgVGhlIEMgc3RyaW5nIHRvIGRpc3BsYXkuCiAgKi8KLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCi0gICAjZGVmaW5lIHJlcXVpcmVfYWN0aW9uX3N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9IHdoaWxlICggMCApCi0jZWxzZQotICAgI2RlZmluZSByZXF1aXJlX2FjdGlvbl9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2V4Y2VwdGlvbkxhYmVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSB3aGlsZSAoIDAgKQorI2lmbmRlZiBfX1JlcXVpcmVfQWN0aW9uX1N0cmluZworCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisJICAgI2RlZmluZSBfX1JlcXVpcmVfQWN0aW9uX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpICBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgfSB3aGlsZSAoIDAgKQorCSNlbHNlCisJICAgI2RlZmluZSBfX1JlcXVpcmVfQWN0aW9uX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpICBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgI2Fzc2VydGlvbiwgI2V4Y2VwdGlvbkxhYmVsLCAgbWVzc2FnZSwgIF9fRklMRV9fLCAgX19MSU5FX18sIDApOyBcCisJCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9IHdoaWxlICggMCApCisJI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfX25SZXF1aXJlX0FjdGlvbl9TdHJpbmcKKwkjZGVmaW5lIF9fblJlcXVpcmVfQWN0aW9uX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpICAgIFwKKwkJX19SZXF1aXJlX0FjdGlvbl9TdHJpbmcoIShhc3NlcnRpb24pLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKQogI2VuZGlmCiAKLSNkZWZpbmUgbnJlcXVpcmVfYWN0aW9uX3N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpICAgIFwKLSAgcmVxdWlyZV9hY3Rpb25fc3RyaW5nKCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkKLQotCiAvKgotICogIHJlcXVpcmVfbm9lcnIoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCkKKyAqICBfX1JlcXVpcmVfbm9FcnIoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCkKICAqCiAgKiAgU3VtbWFyeToKICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBpZiB0aGUgZXJyb3JDb2RlIGV4cHJlc3Npb24gZG9lcyBub3QgZXF1YWwgMCAobm9FcnIpLApAQCAtOTAzLDM3ICs5NDYsMzQgQEAKICAqICAgIGV4Y2VwdGlvbkxhYmVsOgogICogICAgICBUaGUgbGFiZWwuCiAgKi8KLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCi0gICAjZGVmaW5lIHJlcXVpcmVfbm9lcnIoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9IHdoaWxlICggMCApCi0jZWxzZQotICAgI2RlZmluZSByZXF1aXJlX25vZXJyKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGludCBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGlmICggMCAhPSBldmFsT25jZUVycm9yQ29kZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2V4Y2VwdGlvbkxhYmVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgZXZhbE9uY2VFcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSB3aGlsZSAoIDAgKQorI2lmbmRlZiBfX1JlcXVpcmVfbm9FcnIKKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSAoZXJyb3JDb2RlKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9IHdoaWxlICggMCApCisJI2Vsc2UKKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9ub0VycihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IGV2YWxPbmNlRXJyb3JDb2RlLCAwKSApICAgICAgICAgICAgICAgICAgXAorCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsICAjZXhjZXB0aW9uTGFiZWwsICAwLCAgX19GSUxFX18sIF9fTElORV9fLCBldmFsT25jZUVycm9yQ29kZSk7IFwKKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gd2hpbGUgKCAwICkKKwkjZW5kaWYKICNlbmRpZgogCiAvKgotICogIHJlcXVpcmVfbm9lcnJfYWN0aW9uKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKyAqICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKICAqCiAgKiAgU3VtbWFyeToKICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBpZiB0aGUgZXJyb3JDb2RlIGV4cHJlc3Npb24gZG9lcyBub3QgZXF1YWwgMCAobm9FcnIpLApAQCAtOTU1LDQ0ICs5OTUsNDAgQEAKICAqICAgIGFjdGlvbjoKICAqICAgICAgVGhlIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgKGJsb2NrKS4KICAqLwotI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKLSAgICNkZWZpbmUgcmVxdWlyZV9ub2Vycl9hY3Rpb24oZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgIFwKLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpZiAoIDAgIT0gKGVycm9yQ29kZSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gd2hpbGUgKCAwICkKLSNlbHNlCi0gICAjZGVmaW5lIHJlcXVpcmVfbm9lcnJfYWN0aW9uKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgICAgICAgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaW50IGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaWYgKCAwICE9IGV2YWxPbmNlRXJyb3JDb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAjZXJyb3JDb2RlICIgPT0gMCAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAjZXhjZXB0aW9uTGFiZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBldmFsT25jZUVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9IHdoaWxlICggMCApCisjaWZuZGVmIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb24KKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyX0FjdGlvbihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgIFwKKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSAoZXJyb3JDb2RlKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9IHdoaWxlICggMCApCisJI2Vsc2UKKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb24oZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IGV2YWxPbmNlRXJyb3JDb2RlLCAwKSApICAgICAgICAgICAgICAgICAgXAorCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsICNleGNlcHRpb25MYWJlbCwgIDAsICBfX0ZJTEVfXywgX19MSU5FX18sICBldmFsT25jZUVycm9yQ29kZSk7IFwKKwkJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gd2hpbGUgKCAwICkKKwkjZW5kaWYKICNlbmRpZgogCi0KIC8qCi0gKiAgcmVxdWlyZV9ub2Vycl9xdWlldChlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKQorICogIF9fUmVxdWlyZV9ub0Vycl9RdWlldChlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKQogICoKICAqICBTdW1tYXJ5OgogICogICAgSWYgdGhlIGVycm9yQ29kZSBleHByZXNzaW9uIGRvZXMgbm90IGVxdWFsIDAgKG5vRXJyKSwKQEAgLTEwMDYsMTggKzEwNDIsMTkgQEAKICAqICAgIGV4Y2VwdGlvbkxhYmVsOgogICogICAgICBUaGUgbGFiZWwuCiAgKi8KLSNkZWZpbmUgcmVxdWlyZV9ub2Vycl9xdWlldChlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmICggMCAhPSAoZXJyb3JDb2RlKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoIDAgKQotCisjaWZuZGVmIF9fUmVxdWlyZV9ub0Vycl9RdWlldAorCSNkZWZpbmUgX19SZXF1aXJlX25vRXJyX1F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IChlcnJvckNvZGUpLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIH0gd2hpbGUgKCAwICkKKyNlbmRpZgogCiAvKgotICogIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKyAqICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKICAqCiAgKiAgU3VtbWFyeToKICAqICAgIElmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCkBAIC0xMDM1LDIxICsxMDcyLDIyIEBACiAgKiAgICBhY3Rpb246CiAgKiAgICAgIFRoZSBzdGF0ZW1lbnQgb3IgY29tcG91bmQgc3RhdGVtZW50IChibG9jaykuCiAgKi8KLSNkZWZpbmUgcmVxdWlyZV9ub2Vycl9hY3Rpb25fcXVpZXQoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgIFwKLSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmICggMCAhPSAoZXJyb3JDb2RlKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoIDAgKQotCisjaWZuZGVmIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fUXVpZXQKKwkjZGVmaW5lIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fUXVpZXQoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICBcCisJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSAoZXJyb3JDb2RlKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICB9IHdoaWxlICggMCApCisjZW5kaWYKIAogLyoKLSAqICByZXF1aXJlX25vZXJyX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKQorICogIF9fUmVxdWlyZV9ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkKICAqCiAgKiAgU3VtbWFyeToKICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBpZiB0aGUgZXJyb3JDb2RlIGV4cHJlc3Npb24gZG9lcyBub3QgZXF1YWwgMCAobm9FcnIpLApAQCAtMTA2OSwzOCArMTEwNywzNCBAQAogICogICAgbWVzc2FnZToKICAqICAgICAgVGhlIEMgc3RyaW5nIHRvIGRpc3BsYXkuCiAgKi8KLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCi0gICAjZGVmaW5lIHJlcXVpcmVfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICAgICAgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9IHdoaWxlICggMCApCi0jZWxzZQotICAgI2RlZmluZSByZXF1aXJlX25vZXJyX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKSAgICAgICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGludCBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGlmICggMCAhPSBldmFsT25jZUVycm9yQ29kZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2V4Y2VwdGlvbkxhYmVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgZXZhbE9uY2VFcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSB3aGlsZSAoIDAgKQorI2lmbmRlZiBfX1JlcXVpcmVfbm9FcnJfU3RyaW5nCisJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkgICAgICAgICBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KDAgIT0gKGVycm9yQ29kZSksIDApICkgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgfSB3aGlsZSAoIDAgKQorCSNlbHNlCisJICAgI2RlZmluZSBfX1JlcXVpcmVfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICAgICAgICAgXAorCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIGxvbmcgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSAgICAgICAgICAgICAgICAgIFwKKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJICAjZXJyb3JDb2RlICIgPT0gMCAiLCAgI2V4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlLCBfX0ZJTEVfXywgIF9fTElORV9fLCAgZXZhbE9uY2VFcnJvckNvZGUpOyBcCisJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB9IHdoaWxlICggMCApCisJI2VuZGlmCiAjZW5kaWYKIAotCiAvKgotICogIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisgKiAgX19SZXF1aXJlX25vRXJyX0FjdGlvbl9TdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKQogICoKICAqICBTdW1tYXJ5OgogICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCkBAIC0xMTI1LDQxICsxMTU5LDI3MCBAQAogICogICAgbWVzc2FnZToKICAqICAgICAgVGhlIEMgc3RyaW5nIHRvIGRpc3BsYXkuCiAgKi8KLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCi0gICAjZGVmaW5lIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGlmICggMCAhPSAoZXJyb3JDb2RlKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSB3aGlsZSAoIDAgKQotI2Vsc2UKLSAgICNkZWZpbmUgcmVxdWlyZV9ub2Vycl9hY3Rpb25fc3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGludCBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGlmICggMCAhPSBldmFsT25jZUVycm9yQ29kZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgI2V4Y2VwdGlvbkxhYmVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgZXZhbE9uY2VFcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSB3aGlsZSAoIDAgKQotI2VuZGlmCisjaWZuZGVmIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fU3RyaW5nCisJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fU3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkgXAorCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IChlcnJvckNvZGUpLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gd2hpbGUgKCAwICkKKwkjZWxzZQorCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyX0FjdGlvbl9TdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSBcCisJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IGV2YWxPbmNlRXJyb3JDb2RlLCAwKSApICAgICAgICAgICAgICAgICAgXAorCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsICNleGNlcHRpb25MYWJlbCwgbWVzc2FnZSwgX19GSUxFX18sIF9fTElORV9fLCBldmFsT25jZUVycm9yQ29kZSk7IFwKKwkJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgIH0gd2hpbGUgKCAwICkKKwkjZW5kaWYKKyNlbmRpZgorCisvKgorICogIF9fQ2hlY2tfQ29tcGlsZV9UaW1lKGV4cHIpCisgKgorICogIFN1bW1hcnk6CisgKiAgICBhbnkgYnVpbGQ6IGlmIHRoZSBleHByZXNzaW9uIGlzIG5vdCB0cnVlLCBnZW5lcmF0ZWQgYSBjb21waWxlIHRpbWUgZXJyb3IuCisgKgorICogIFBhcmFtZXRlcnM6CisgKgorICogICAgZXhwcjoKKyAqICAgICAgVGhlIGNvbXBpbGUgdGltZSBleHByZXNzaW9uIHRoYXQgc2hvdWxkIGV2YWx1YXRlIHRvIG5vbi16ZXJvLgorICoKKyAqICBEaXNjdXNzaW9uOgorICogICAgIFRoaXMgZGVjbGFyZXMgYW4gYXJyYXkgd2l0aCBhIHNpemUgdGhhdCBpcyBkZXRlcm1pbmVkIGJ5IGEgY29tcGlsZS10aW1lIGV4cHJlc3Npb24uCisgKiAgICAgSWYgZmFsc2UsIGl0IGRlY2xhcmVzIGEgbmVnYXRpdmVseSBzaXplZCBhcnJheSwgd2hpY2ggZ2VuZXJhdGVzIGEgY29tcGlsZS10aW1lIGVycm9yLgorICoKKyAqIEV4YW1wbGVzOgorICogICAgIF9fQ2hlY2tfQ29tcGlsZV9UaW1lKCBzaXplb2YoIGludCApID09IDQgKTsKKyAqICAgICBfX0NoZWNrX0NvbXBpbGVfVGltZSggb2Zmc2V0b2YoIE15U3RydWN0LCBteUZpZWxkICkgPT0gNCApOworICogICAgIF9fQ2hlY2tfQ29tcGlsZV9UaW1lKCAoIGtNeUJ1ZmZlclNpemUgJSA1MTIgKSA9PSAwICk7CisgKgorICogIE5vdGU6IFRoaXMgb25seSB3b3JrcyB3aXRoIGNvbXBpbGUtdGltZSBleHByZXNzaW9ucy4KKyAqICBOb3RlOiBUaGlzIG9ubHkgd29ya3MgaW4gcGxhY2VzIHdoZXJlIGV4dGVybiBkZWNsYXJhdGlvbnMgYXJlIGFsbG93ZWQgKGUuZy4gZ2xvYmFsIHNjb3BlKS4KKyAqLworI2lmbmRlZiBfX0NoZWNrX0NvbXBpbGVfVGltZQorICAgICNpZmRlZiBfX0dOVUNfXyAKKyAgICAgICAgI2RlZmluZSBfX0NoZWNrX0NvbXBpbGVfVGltZSggZXhwciApICAgIFwKKyAgICAgICAgICAgIGV4dGVybiBpbnQgY29tcGlsZV90aW1lX2Fzc2VydF9mYWlsZWRbICggZXhwciApID8gMSA6IC0xIF0gX19hdHRyaWJ1dGVfXyggKCB1bnVzZWQgKSApCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBfX0NoZWNrX0NvbXBpbGVfVGltZSggZXhwciApICAgIFwKKyAgICAgICAgICAgIGV4dGVybiBpbnQgY29tcGlsZV90aW1lX2Fzc2VydF9mYWlsZWRbICggZXhwciApID8gMSA6IC0xIF0KKyAgICAjZW5kaWYKKyNlbmRpZgorCisvKgorICoJRm9yIHRpbWUgaW1tZW1vcmlhbCwgTWFjIE9TIFggaGFzIGRlZmluZWQgdmVyc2lvbiBvZiBtb3N0IG9mIHRoZXNlIG1hY3JvcyB3aXRob3V0IHRoZSBfXyBwcmVmaXgsIHdoaWNoCisgKgljb3VsZCBjb2xsaWRlIHdpdGggc2ltaWxhcmx5IG5hbWVkIGZ1bmN0aW9ucyBvciBtYWNyb3MgaW4gdXNlciBjb2RlLCBpbmNsdWRpbmcgbmV3IGZ1bmN0aW9uYWxpdHkgaW4KKyAqCUJvb3N0IGFuZCB0aGUgQysrIHN0YW5kYXJkIGxpYnJhcnkuCisgKgorICoJQSBmdXR1cmUgcmVsZWFzZSBvZiBNYWMgT1MgWCB3aWxsIG5vIGxvbmdlciBkbyB0aGlzLCBhbmQgd2lsbCByZXF1aXJlIHRoYXQgY2xpZW50cyBtb3ZlIHRvIHRoZQorICogIG5ldyBtYWNyb3MgYXMgZGVmaW5lZCBhYm92ZS4gIEhvd2V2ZXIsIGluIHRoZSBpbnRlcmltIGJvdGggdGhlIG5ldyBhbmQgb2xkIG1hY3JvcyB3aWxsIHdvcmssIHVubGVzcworICogIGNsaWVudHMgZGVmaW5lIGEgbWFjcm8gX19BU1NFUlRfTUFDUk9TX0RFRklORV9WRVJTSU9OU19XSVRIT1VUX1VOREVSU0NPUkVTIGJlZm9yZSB0aGlzIGZpbGUgaXMgaW5jbHVkZWQKKyAqICBpbiB0aGVpciBjb21waWxhdGlvbnMuICBDbGllbnRzIHdobyBkbyBub3Qgd2FudCB0aGUgb2xkZXIgbWFjcm9zIGRlZmluZWQgY2FuIGFjY29tcGxpc2ggdGhpcyBieSBhZGRpbmcKKyAqICAgICNkZWZpbmUgX19BU1NFUlRfTUFDUk9TX0RFRklORV9WRVJTSU9OU19XSVRIT1VUX1VOREVSU0NPUkVTIDAKKyAqICBhdCB0aGUgdG9wIG9mIHRoZWlyIHNvdXJjZXMsIG9yIG15IGFkZGluZyAtRF9fQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUz0wIHRvIHRoZQorICogIGdjYyBjb21waWxhdGlvbiBvcHRpb25zLgorICoKKyAqICBUbyBhaWQgdXNlcnMgb2YgdGhlc2UgbWFjcm9zIGluIGNvbnZlcnRpbmcgdGhlaXIgc291cmNlcywgdGhlIGZvbGxvd2luZyB0b3BzIHNjcmlwdCB3aWxsIGNvbnZlcnQgdXNhZ2VzCisgKiAgb2YgdGhlIG9sZCBtYWNyb3MgaW50byB0aGUgbmV3IGVxdWl2YWxlbnRzLiAgVG8gZG8gc28sIGluIFRlcm1pbmFsIGdvIGludG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZQorICogIHNvdXJjZXMgdG8gYmUgY29udmVydGVkIGFuZCBydW4gdGhpcyBjb21tYW5kLgorICoKKyAgICBmaW5kIC4gLW5hbWUgJyouW2N8Y2N8Y3B8Y3BwfG18bW18aF0nIC1wcmludDAgfCAgeGFyZ3MgLTAgdG9wcyAtdmVyYm9zZSBcCisgICAgICByZXBsYWNlICJjaGVjayg8YiBhcmdzPikiIHdpdGggIl9fQ2hlY2soPGFyZ3M+KSIgXAorICAgICAgcmVwbGFjZSAiY2hlY2tfbm9lcnIoPGIgYXJncz4pIiB3aXRoICJfX0NoZWNrX25vRXJyKDxhcmdzPikiIFwKKyAgICAgIHJlcGxhY2UgImNoZWNrX25vZXJyX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fQ2hlY2tfbm9FcnJfU3RyaW5nKDxhcmdzPikiIFwKKyAgICAgIHJlcGxhY2UgImNoZWNrX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fQ2hlY2tfU3RyaW5nKDxhcmdzPikiIFwKKyAgICAgIHJlcGxhY2UgInJlcXVpcmUoPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmUoPGFyZ3M+KSIgXAorICAgICAgcmVwbGFjZSAicmVxdWlyZV9hY3Rpb24oPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmVfQWN0aW9uKDxhcmdzPikiIFwKKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfYWN0aW9uX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9BY3Rpb25fU3RyaW5nKDxhcmdzPikiIFwKKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfbm9lcnIoPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmVfbm9FcnIoPGFyZ3M+KSIgXAorICAgICAgcmVwbGFjZSAicmVxdWlyZV9ub2Vycl9hY3Rpb24oPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmVfbm9FcnJfQWN0aW9uKDxhcmdzPikiIFwKKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fU3RyaW5nKDxhcmdzPikiIFwKKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfbm9lcnJfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19SZXF1aXJlX25vRXJyX1N0cmluZyg8YXJncz4pIiBcCisgICAgICByZXBsYWNlICJyZXF1aXJlX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9TdHJpbmcoPGFyZ3M+KSIgXAorICAgICAgcmVwbGFjZSAidmVyaWZ5KDxiIGFyZ3M+KSIgd2l0aCAiX19WZXJpZnkoPGFyZ3M+KSIgXAorICAgICAgcmVwbGFjZSAidmVyaWZ5X2FjdGlvbig8YiBhcmdzPikiIHdpdGggIl9fVmVyaWZ5X0FjdGlvbig8YXJncz4pIiBcCisgICAgICByZXBsYWNlICJ2ZXJpZnlfbm9lcnIoPGIgYXJncz4pIiB3aXRoICJfX1ZlcmlmeV9ub0Vycig8YXJncz4pIiBcCisgICAgICByZXBsYWNlICJ2ZXJpZnlfbm9lcnJfYWN0aW9uKDxiIGFyZ3M+KSIgd2l0aCAiX19WZXJpZnlfbm9FcnJfQWN0aW9uKDxhcmdzPikiIFwKKyAgICAgIHJlcGxhY2UgInZlcmlmeV9ub2Vycl9zdHJpbmcoPGIgYXJncz4pIiB3aXRoICJfX1ZlcmlmeV9ub0Vycl9TdHJpbmcoPGFyZ3M+KSIgXAorICAgICAgcmVwbGFjZSAidmVyaWZ5X3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fVmVyaWZ5X1N0cmluZyg8YXJncz4pIiBcCisgICAgICByZXBsYWNlICJuY2hlY2soPGIgYXJncz4pIiB3aXRoICJfX25DaGVjayg8YXJncz4pIiBcCisgICAgICByZXBsYWNlICJuY2hlY2tfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19uQ2hlY2tfU3RyaW5nKDxhcmdzPikiIFwKKyAgICAgIHJlcGxhY2UgIm5yZXF1aXJlKDxiIGFyZ3M+KSIgd2l0aCAiX19uUmVxdWlyZSg8YXJncz4pIiBcCisgICAgICByZXBsYWNlICJucmVxdWlyZV9hY3Rpb24oPGIgYXJncz4pIiB3aXRoICJfX25SZXF1aXJlX0FjdGlvbig8YXJncz4pIiBcCisgICAgICByZXBsYWNlICJucmVxdWlyZV9hY3Rpb25fcXVpZXQoPGIgYXJncz4pIiB3aXRoICJfX25SZXF1aXJlX0FjdGlvbl9RdWlldCg8YXJncz4pIiBcCisgICAgICByZXBsYWNlICJucmVxdWlyZV9hY3Rpb25fc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19uUmVxdWlyZV9BY3Rpb25fU3RyaW5nKDxhcmdzPikiIFwKKyAgICAgIHJlcGxhY2UgIm5yZXF1aXJlX3F1aWV0KDxiIGFyZ3M+KSIgd2l0aCAiX19uUmVxdWlyZV9RdWlldCg8YXJncz4pIiBcCisgICAgICByZXBsYWNlICJucmVxdWlyZV9zdHJpbmcoPGIgYXJncz4pIiB3aXRoICJfX25SZXF1aXJlX1N0cmluZyg8YXJncz4pIiBcCisgICAgICByZXBsYWNlICJudmVyaWZ5KDxiIGFyZ3M+KSIgd2l0aCAiX19uVmVyaWZ5KDxhcmdzPikiIFwKKyAgICAgIHJlcGxhY2UgIm52ZXJpZnlfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19uVmVyaWZ5X1N0cmluZyg8YXJncz4pIiBcCisgICAgICByZXBsYWNlICJyZXF1aXJlX2FjdGlvbl9xdWlldCg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9BY3Rpb25fUXVpZXQoPGFyZ3M+KSIgXAorICAgICAgcmVwbGFjZSAicmVxdWlyZV9ub2Vycl9hY3Rpb25fcXVpZXQoPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1F1aWV0KDxhcmdzPikiIFwKKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfbm9lcnJfcXVpZXQoPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmVfbm9FcnJfUXVpZXQoPGFyZ3M+KSIgXAorICAgICAgcmVwbGFjZSAicmVxdWlyZV9xdWlldCg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9RdWlldCg8YXJncz4pIiBcCisgICAgICByZXBsYWNlICJjaGVja19jb21waWxlX3RpbWUoPGIgYXJncz4pIiB3aXRoICJfX0NoZWNrX0NvbXBpbGVfVGltZSg8YXJncz4pIiBcCisgICAgICByZXBsYWNlICJkZWJ1Z19zdHJpbmcoPGIgYXJncz4pIiB3aXRoICJfX0RlYnVnX1N0cmluZyg8YXJncz4pIgorICoKKyAqLworCisjaWZuZGVmIF9fQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUworCS8qIElmIHdlIGhhdmVuJ3Qgc2V0IHRoaXMgeWV0LCBpdCBkZWZhdWx0cyB0byBvbi4gIEluIHRoZSBuZXh0IHJlbGVhc2UsIHRoaXMgd2lsbCBkZWZhdWx0IHRvIG9mZi4gKi8KKwkjZGVmaW5lCV9fQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUwkxCisjZW5kaWYKKworI2lmCV9fQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUworCisJI2lmbmRlZiBjaGVjaworCSNkZWZpbmUgY2hlY2soYXNzZXJ0aW9uKSAgX19DaGVjayhhc3NlcnRpb24pCisJI2VuZGlmCisKKwkjaWZuZGVmIGNoZWNrX25vZXJyCisJI2RlZmluZSBjaGVja19ub2VycihlcnJvckNvZGUpICBfX0NoZWNrX25vRXJyKGVycm9yQ29kZSkKKwkjZW5kaWYKKworCSNpZm5kZWYgY2hlY2tfbm9lcnJfc3RyaW5nCisJCSNkZWZpbmUgY2hlY2tfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgIF9fQ2hlY2tfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkKKwkjZW5kaWYKKworCSNpZm5kZWYgY2hlY2tfc3RyaW5nCisJCSNkZWZpbmUgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgIF9fQ2hlY2tfU3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkKKwkjZW5kaWYKKworCSNpZm5kZWYgcmVxdWlyZQorCQkjZGVmaW5lIHJlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgIF9fUmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKQorCSNlbmRpZgorCisJI2lmbmRlZiByZXF1aXJlX2FjdGlvbgorCQkjZGVmaW5lIHJlcXVpcmVfYWN0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgIF9fUmVxdWlyZV9BY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorCSNlbmRpZgorCisJI2lmbmRlZiByZXF1aXJlX2FjdGlvbl9zdHJpbmcKKwkJI2RlZmluZSByZXF1aXJlX2FjdGlvbl9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgX19SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKQorCSNlbmRpZgorCisJI2lmbmRlZiByZXF1aXJlX25vZXJyCisJCSNkZWZpbmUgcmVxdWlyZV9ub2VycihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKSAgX19SZXF1aXJlX25vRXJyKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpCisJI2VuZGlmCisKKwkjaWZuZGVmIHJlcXVpcmVfbm9lcnJfYWN0aW9uCisJCSNkZWZpbmUgcmVxdWlyZV9ub2Vycl9hY3Rpb24oZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgX19SZXF1aXJlX25vRXJyX0FjdGlvbihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCisJI2VuZGlmCisKKwkjaWZuZGVmIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZworCQkjZGVmaW5lIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisJI2VuZGlmCisKKwkjaWZuZGVmIHJlcXVpcmVfbm9lcnJfc3RyaW5nCisJCSNkZWZpbmUgcmVxdWlyZV9ub2Vycl9zdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkgIF9fUmVxdWlyZV9ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkKKwkjZW5kaWYKKworCSNpZm5kZWYgcmVxdWlyZV9zdHJpbmcKKwkJI2RlZmluZSByZXF1aXJlX3N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKSAgX19SZXF1aXJlX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKQorCSNlbmRpZgorCisJI2lmbmRlZiB2ZXJpZnkKKwkJI2RlZmluZSB2ZXJpZnkoYXNzZXJ0aW9uKSBfX1ZlcmlmeShhc3NlcnRpb24pCisJI2VuZGlmCisKKwkjaWZuZGVmIHZlcmlmeV9hY3Rpb24KKwkJI2RlZmluZSB2ZXJpZnlfYWN0aW9uKGFzc2VydGlvbiwgYWN0aW9uKSAgX19WZXJpZnlfQWN0aW9uKGFzc2VydGlvbiwgYWN0aW9uKQorCSNlbmRpZgorCisJI2lmbmRlZiB2ZXJpZnlfbm9lcnIKKwkJI2RlZmluZSB2ZXJpZnlfbm9lcnIoZXJyb3JDb2RlKSAgX19WZXJpZnlfbm9FcnIoZXJyb3JDb2RlKQorCSNlbmRpZgorCisJI2lmbmRlZiB2ZXJpZnlfbm9lcnJfYWN0aW9uCisJCSNkZWZpbmUgdmVyaWZ5X25vZXJyX2FjdGlvbihlcnJvckNvZGUsIGFjdGlvbikgIF9fVmVyaWZ5X25vRXJyX0FjdGlvbihlcnJvckNvZGUsIGFjdGlvbikKKwkjZW5kaWYKKworCSNpZm5kZWYgdmVyaWZ5X25vZXJyX3N0cmluZworCQkjZGVmaW5lIHZlcmlmeV9ub2Vycl9zdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKSAgX19WZXJpZnlfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkKKwkjZW5kaWYKKworCSNpZm5kZWYgdmVyaWZ5X3N0cmluZworCQkjZGVmaW5lIHZlcmlmeV9zdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgX19WZXJpZnlfU3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkKKwkjZW5kaWYKKworCSNpZm5kZWYgbmNoZWNrCisJCSNkZWZpbmUgbmNoZWNrKGFzc2VydGlvbikgIF9fbkNoZWNrKGFzc2VydGlvbikKKwkjZW5kaWYKKworCSNpZm5kZWYgbmNoZWNrX3N0cmluZworCQkjZGVmaW5lIG5jaGVja19zdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgX19uQ2hlY2tfU3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkKKwkjZW5kaWYKKworCSNpZm5kZWYgbnJlcXVpcmUKKwkJI2RlZmluZSBucmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgX19uUmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKQorCSNlbmRpZgorCisJI2lmbmRlZiBucmVxdWlyZV9hY3Rpb24KKwkJI2RlZmluZSBucmVxdWlyZV9hY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgX19uUmVxdWlyZV9BY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorCSNlbmRpZgorCisJI2lmbmRlZiBucmVxdWlyZV9hY3Rpb25fcXVpZXQKKwkJI2RlZmluZSBucmVxdWlyZV9hY3Rpb25fcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgX19uUmVxdWlyZV9BY3Rpb25fUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorCSNlbmRpZgorCisJI2lmbmRlZiBucmVxdWlyZV9hY3Rpb25fc3RyaW5nCisJCSNkZWZpbmUgbnJlcXVpcmVfYWN0aW9uX3N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpICBfX25SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKQorCSNlbmRpZgorCisJI2lmbmRlZiBucmVxdWlyZV9xdWlldAorCQkjZGVmaW5lIG5yZXF1aXJlX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICBfX25SZXF1aXJlX1F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpCisJI2VuZGlmCisKKwkjaWZuZGVmIG5yZXF1aXJlX3N0cmluZworCQkjZGVmaW5lIG5yZXF1aXJlX3N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBzdHJpbmcpICBfX25SZXF1aXJlX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBzdHJpbmcpCisJI2VuZGlmCisKKwkjaWZuZGVmIG52ZXJpZnkKKwkJI2RlZmluZSBudmVyaWZ5KGFzc2VydGlvbikgIF9fblZlcmlmeShhc3NlcnRpb24pCisJI2VuZGlmCisKKwkjaWZuZGVmIG52ZXJpZnlfc3RyaW5nCisJCSNkZWZpbmUgbnZlcmlmeV9zdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgX19uVmVyaWZ5X1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpCisJI2VuZGlmCisKKwkjaWZuZGVmIHJlcXVpcmVfYWN0aW9uX3F1aWV0CisJCSNkZWZpbmUgcmVxdWlyZV9hY3Rpb25fcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgX19SZXF1aXJlX0FjdGlvbl9RdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCisJI2VuZGlmCisKKwkjaWZuZGVmIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3F1aWV0CisJCSNkZWZpbmUgcmVxdWlyZV9ub2Vycl9hY3Rpb25fcXVpZXQoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgX19SZXF1aXJlX25vRXJyX0FjdGlvbl9RdWlldChlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCisJI2VuZGlmCisKKwkjaWZuZGVmIHJlcXVpcmVfbm9lcnJfcXVpZXQKKwkJI2RlZmluZSByZXF1aXJlX25vZXJyX3F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICBfX1JlcXVpcmVfbm9FcnJfUXVpZXQoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCkKKwkjZW5kaWYKKworCSNpZm5kZWYgcmVxdWlyZV9xdWlldAorCQkjZGVmaW5lIHJlcXVpcmVfcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgIF9fUmVxdWlyZV9RdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKQorCSNlbmRpZgorCisJI2lmbmRlZiBjaGVja19jb21waWxlX3RpbWUKKwkJI2RlZmluZSBjaGVja19jb21waWxlX3RpbWUoIGV4cHIgKSAgX19DaGVja19Db21waWxlX1RpbWUoIGV4cHIgKQorCSNlbmRpZgorCisJI2lmbmRlZiBkZWJ1Z19zdHJpbmcKKwkJI2RlZmluZSBkZWJ1Z19zdHJpbmcobWVzc2FnZSkgIF9fRGVidWdfU3RyaW5nKG1lc3NhZ2UpCisJI2VuZGlmCisJCisjZW5kaWYJLyogQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUyAqLwogCiAKICNlbmRpZiAvKiBfX0FTU0VSVE1BQ1JPU19fICovCi0K