Name: series-workflow47fq6 Phase: Failed StartedAt: 2026-09-01 00:23:14 +0000 UTC FinishedAt: 2026-09-01 00:39:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47fq6[0] Phase: Succeeded StartedAt: 2026-09-01 00:23:14 +0000 UTC FinishedAt: 2026-09-01 00:39:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47fq6[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 00:23:14 +0000 UTC FinishedAt: 2026-09-01 00:39:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBzZXJpZXMgKGljZSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIHBoeXNpY2FsIEludGVsIFBDSWUgbmV0d29yayBhZGFwdGVycyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiOWQ4Y2Y5YzdjYjBjODE1YWUxZDRkZWY5ODc4ODBkM2YzMjZkMWYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMDozODo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbmluZGV4IGRiM2M3MDE1YzU2YzQuLmMxNGJiMWViMjcxZTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuQEAgLTQwLDYgJiM0Mzs0MCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1X3JtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RpbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ25zcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuQEAgLTExNDgsMjYgJiM0MzsxMTQ5LDQ0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpY2VfcGZfc3JjX3Rtcl9vd25lZChzdHJ1Y3QgaWNlX3BmICpwZilcbiAgKiBpY2VfZ2V0X3ByaW1hcnlfaHcgLSBHZXQgcG9pbnRlciB0byBwcmltYXJ5IGljZV9odyBzdHJ1Y3R1cmVcbiAgKiBAcGY6IHBvaW50ZXIgdG8gUEYgc3RydWN0dXJlXG4gICpcbiYjNDM7ICogVGhlIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIG9yXG4mIzQzOyAqIHdoaWxlIGhvbGRpbmcgYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2suXG4mIzQzOyAqIGh3IGlzIGVtYmVkZGVkIGluIHN0cnVjdCBpY2VfcGYsIHNvIGVpdGhlciBtZWNoYW5pc20gcHJvdGVjdHMgaXRzIGxpZmV0aW1lLlxuJiM0MzsgKlxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIGljZV9odyBzdHJ1Y3R1cmUgd2l0aCBhY2Nlc3MgdG8gdGltZXN5bmNcbiAgKiByZWdpc3RlciBzcGFjZS5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpY2VfaHcgKmljZV9nZXRfcHJpbWFyeV9odyhzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4tXHRpZiAoIXBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZilcbiYjNDM7XHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmO1xuJiM0MztcbiYjNDM7XHRjdHJsX3BmID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZixcbiYjNDM7XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jaykpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWN0cmxfcGYpXG4gXHRcdHJldHVybiBcdTAwMjZwZi1cdTAwM2VodztcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZi1cdTAwM2VodztcbiYjNDM7XHRcdHJldHVybiBcdTAwMjZjdHJsX3BmLVx1MDAzZWh3O1xuIH1cbiBcbiAvKipcbiAgKiBpY2VfZ2V0X2N0cmxfcGYgLSBHZXQgcG9pbnRlciB0byBDb250cm9sIFBGIG9mIHRoZSBhZGFwdGVyXG4gICogQHBmOiBwb2ludGVyIHRvIHRoZSBjdXJyZW50IFBGIHN0cnVjdHVyZVxuICAqXG4mIzQzOyAqIFRoZSBjb250cm9sIFBGIGlzIHRoZSBQRiB3aGljaCBvd25zIHRoZSBQVFAgY2xvY2sgZm9yIHRoZSBhZGFwdGVyLlxuJiM0MzsgKiBPbmx5IHRoZSBjb250cm9sIFBGIGlzIGFsbG93ZWQgdG8gcGVyZm9ybSBjZXJ0YWluIG9wZXJhdGlvbnMgb24gdGhlXG4mIzQzOyAqIFBUUCBjbG9jayBzdWNoIGFzIGFkanVzdGluZyB0aGUgdGltZSBvciBjb25maWd1cmluZyB0aGUgcGlucy5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBvclxuJiM0MzsgKiB3aGlsZSBob2xkaW5nIGFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrLlxuJiM0MzsgKlxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIGljZV9wZiBzdHJ1Y3R1cmUgd2hpY2ggaXMgQ29udHJvbCBQRixcbiAgKiBOVUxMIGlmIGl0JiMzOTtzIG5vdCBpbml0aWFsaXplZCB5ZXQuXG4gICovXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgaWNlX3BmICppY2VfZ2V0X2N0cmxfcGYoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuLVx0cmV0dXJuICFwZi1cdTAwM2VhZGFwdGVyID8gTlVMTCA6IHBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZjtcbiYjNDM7XHRyZXR1cm4gIXBmLVx1MDAzZWFkYXB0ZXIgPyBOVUxMIDpcbiYjNDM7XHRcdHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGYsXG4mIzQzO1x0XHRcdFx0ICAgICAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKSk7XG4gfVxuICNlbmRpZiAvKiBfSUNFX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xuaW5kZXggMmRjMzYyOWQ2ZDBmNi4uODBjYjhkYzZiODFhMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xuQEAgLTY2LDYgJiM0Mzs2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmljZV9hZGFwdGVyX25ldyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZWNwaV9waHlfbG9ja1tpXSk7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2YWRhcHRlci1cdTAwM2VyZWZjb3VudCwgMSk7XG4gXG4mIzQzO1x0aW5pdF9yd3NlbShcdTAwMjZhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jayk7XG4gXHRtdXRleF9pbml0KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXG5pbmRleCA0ZjY5NWYzMmRhM2Q4Li5iMWFmNTk3MTg0ODIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXG5AQCAtNiw2ICYjNDM7Niw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcndzZW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrX3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudF90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMzYsNiAmIzQzOzM3LDcgQEAgc3RydWN0IGljZV9wb3J0X2xpc3Qge1xuICAqIEB0eHFfY3R4X2xvY2s6IFNwaW5sb2NrIHByb3RlY3RpbmcgYWNjZXNzIHRvIHRoZSBHTENPTU1fUVRYX0NOVFhfQ1RMIHJlZ2lzdGVyXG4gICogQGNwaV9waHlfbG9jazogUGVyLVBIWSBtdXRleCBzZXJpYWxpemluZyBDUEkgUkVRL0FDSyB0cmFuc2FjdGlvbnMuXG4gICogICAgICAgICAgICAgICBJbmRleCAwID0gUEhZMCwgaW5kZXggMSA9IFBIWTEuIFVzZWQgb24gRTgyNUMgZGV2aWNlcy5cbiYjNDM7ICogQGN0cmxfcGZfbG9jazogUHJvdGVjdCBjb250cm9sIFBGIGxpZmV0aW1lIGZvciBzbGVlcGFibGUgdXNlcnNcbiAgKiBAY3RybF9wZjogQ29udHJvbCBQRiBvZiB0aGUgYWRhcHRlclxuICAqIEBwb3J0czogUG9ydHMgbGlzdFxuICAqIEBpbmRleDogNjQtYml0IGluZGV4IGNhY2hlZCBmb3IgY29sbGlzaW9uIGRldGVjdGlvbiBvbiAzMmJpdCBzeXN0ZW1zXG5AQCAtNDksNyAmIzQzOzUxLDggQEAgc3RydWN0IGljZV9hZGFwdGVyIHtcbiBcdC8qIFNlcmlhbGl6ZSBDUEkgUkVRL0FDSyB0cmFuc2FjdGlvbnMgcGVyIFBIWSAoRTgyNUMgb25seSkgKi9cbiBcdHN0cnVjdCBtdXRleCBjcGlfcGh5X2xvY2tbSUNFX0U4MjVfTUFYX1BIWVNdO1xuIFxuLVx0c3RydWN0IGljZV9wZiAqY3RybF9wZjtcbiYjNDM7XHRzdHJ1Y3Qgcndfc2VtYXBob3JlIGN0cmxfcGZfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgaWNlX3BmIF9fcmN1ICpjdHJsX3BmO1xuIFx0c3RydWN0IGljZV9wb3J0X2xpc3QgcG9ydHM7XG4gXHR1NjQgaW5kZXg7XG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuaW5kZXggZWFlYzM2YWI2YWUzZi4uNDgyOTZhNGE4YWJkNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbkBAIC0xLDYgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodCAoQykgMjAyMSwgSW50ZWwgQ29ycG9yYXRpb24uICovXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpY2UuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2ljZV9saWIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2ljZV90cmFjZS5oXCYjMzQ7XG5AQCAtNTUsNiAmIzQzOzU2LDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX3B0cF9waW5fZGVzYyBpY2VfcGluX2Rlc2NfZHBsbFtdID0ge1xuIFx0eyAgU0RQMywgeyAgMywgLTEgfSwgeyAwLCAwIH19LFxuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfZ2V0X2N0cmxfcHRwIC0gR2V0IHRoZSBQVFAgc3RydWN0dXJlIGZvciB0aGUgY29udHJvbCBQRlxuJiM0MzsgKiBAcGY6IFRoZSBQRiBwb2ludGVyIHRvIGxvb2sgdXAgYXRcbiYjNDM7ICpcbiYjNDM7ICogVGhlIGNvbnRyb2wgUEYgaXMgdGhlIFBGIHdoaWNoIG93bnMgdGhlIFBUUCBjbG9jayBmb3IgdGhlIGFkYXB0ZXIuXG4mIzQzOyAqIE9ubHkgdGhlIGNvbnRyb2wgUEYgaXMgYWxsb3dlZCB0byBwZXJmb3JtIGNlcnRhaW4gb3BlcmF0aW9ucyBvbiB0aGVcbiYjNDM7ICogUFRQIGNsb2NrIHN1Y2ggYXMgYWRqdXN0aW5nIHRoZSB0aW1lIG9yIGNvbmZpZ3VyaW5nIHRoZSBwaW5zLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIG9yXG4mIzQzOyAqIHdoaWxlIGhvbGRpbmcgYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2suXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUG9pbnRlciB0byB0aGUgUFRQIHN0cnVjdHVyZSBvZiB0aGUgY29udHJvbCBQRiwgb3IgTlVMTCBpZiBub3QgZm91bmRcbiYjNDM7ICovXG4gc3RhdGljIHN0cnVjdCBpY2VfcHRwICppY2VfZ2V0X2N0cmxfcHRwKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbiBcdHN0cnVjdCBpY2VfcGYgKmN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpO1xuQEAgLTIwMywzOSAmIzQzOzIxNyw0MiBAQCB1NjQgaWNlX3B0cF9yZWFkX3NyY19jbGtfcmVnKHN0cnVjdCBpY2VfcGYgKnBmLFxuIFx0dTMyIGhpLCBsbywgbG8yO1xuIFx0dTggdG1yX2lkeDtcbiBcbi1cdGlmICghaWNlX2lzX3ByaW1hcnkoaHcpKVxuLVx0XHRodyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHJjdSkge1xuJiM0MztcdFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXG4mIzQzO1x0XHRcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcbiBcbi1cdHRtcl9pZHggPSBpY2VfZ2V0X3B0cF9zcmNfY2xvY2tfaW5kZXgoaHcpO1xuLVx0Z3VhcmQoc3BpbmxvY2spKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcHRwX2dsdHN5bl90aW1lX2xvY2spO1xuLVx0LyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwcmUgUEhDIHJlYWQgKi9cbi1cdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuLVxuLVx0aWYgKGh3LVx1MDAzZW1hY190eXBlID09IElDRV9NQUNfRTgzMCkge1xuLVx0XHR1NjQgY2xrX3RpbWUgPSByZDY0KGh3LCBFODMwX0dMVFNZTl9USU1FX0wodG1yX2lkeCkpO1xuLVxuLVx0XHQvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHBvc3QgUEhDIHJlYWQgKi9cbi1cdFx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuLVxuLVx0XHRyZXR1cm4gY2xrX3RpbWU7XG4tXHR9XG4mIzQzO1x0XHR0bXJfaWR4ID0gaWNlX2dldF9wdHBfc3JjX2Nsb2NrX2luZGV4KGh3KTtcbiYjNDM7XHRcdGd1YXJkKHNwaW5sb2NrKShcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXB0cF9nbHRzeW5fdGltZV9sb2NrKTtcbiYjNDM7XHRcdC8qIFJlYWQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgcHJlIFBIQyByZWFkICovXG4mIzQzO1x0XHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcbiBcbi1cdGxvID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XG4mIzQzO1x0XHRpZiAoaHctXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19FODMwKSB7XG4mIzQzO1x0XHRcdHU2NCBjbGtfdGltZSA9IHJkNjQoaHcsIEU4MzBfR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XG4gXG4tXHQvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHBvc3QgUEhDIHJlYWQgKi9cbi1cdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcbiYjNDM7XHRcdFx0LyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwb3N0IFBIQyByZWFkICovXG4mIzQzO1x0XHRcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcbiBcbi1cdGhpID0gcmQzMihodywgR0xUU1lOX1RJTUVfSCh0bXJfaWR4KSk7XG4tXHRsbzIgPSByZDMyKGh3LCBHTFRTWU5fVElNRV9MKHRtcl9pZHgpKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGNsa190aW1lO1xuJiM0MztcdFx0fVxuIFxuLVx0aWYgKGxvMiBcdTAwM2MgbG8pIHtcbi1cdFx0LyogaWYgVElNRV9MIHJvbGxlZCBvdmVyIHJlYWQgVElNRV9MIGFnYWluIGFuZCB1cGRhdGVcbi1cdFx0ICogc3lzdGVtIHRpbWVzdGFtcHNcbi1cdFx0ICovXG4tXHRcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuIFx0XHRsbyA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0wodG1yX2lkeCkpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJlYWQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgcG9zdCBQSEMgcmVhZCAqL1xuIFx0XHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4mIzQzO1xuIFx0XHRoaSA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0godG1yX2lkeCkpO1xuJiM0MztcdFx0bG8yID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxvMiBcdTAwM2MgbG8pIHtcbiYjNDM7XHRcdFx0LyogaWYgVElNRV9MIHJvbGxlZCBvdmVyIHJlYWQgVElNRV9MIGFnYWluIGFuZCB1cGRhdGVcbiYjNDM7XHRcdFx0ICogc3lzdGVtIHRpbWVzdGFtcHNcbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuJiM0MztcdFx0XHRsbyA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0wodG1yX2lkeCkpO1xuJiM0MztcdFx0XHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4mIzQzO1x0XHRcdGhpID0gcmQzMihodywgR0xUU1lOX1RJTUVfSCh0bXJfaWR4KSk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0fVxuIFxuIFx0cmV0dXJuICgodTY0KWhpIFx1MDAzY1x1MDAzYyAzMikgfCBsbztcbkBAIC0zMDY4LDE0ICYjNDM7MzA4NSwzMyBAQCB2b2lkIGljZV9wdHBfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4gXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9zZXR1cF9hZGFwdGVyKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbi1cdHBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZiA9IHBmO1xuJiM0MztcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGYsIHBmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIoc3RydWN0IGljZV9wZiAqcGYpXG4mIzQzO3tcbiYjNDM7XHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBaZXJvIG91dCBhZGFwdGVyLVx1MDAzZWN0cmxfcGYgcG9pbnRlciB3aGVuIHRoZSBjdHJsX3BmIGl0c2VsZlxuJiM0MztcdCAqIGlzIGJlaW5nIHJlbW92ZWQgdG8gcHJldmVudCBhbnkgc2Vjb25kYXJ5IFBGcyBmcm9tIGFjY2Vzc2luZ1xuJiM0MztcdCAqIGl0IGFmdGVyIGl0IGlzIGRlbGV0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNtcHhjaGcoXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2VjdHJsX3BmLFxuJiM0MztcdFx0ICAgIChzdHJ1Y3QgaWNlX3BmIF9fcmN1ICopcGYsIE5VTEwpID09XG4mIzQzO1x0XHRcdChzdHJ1Y3QgaWNlX3BmIF9fcmN1ICopcGYpXG4mIzQzO1x0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiB9XG4gXG4gc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbi1cdHN0cnVjdCBpY2VfcHRwICpjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xuIFx0c3RydWN0IGljZV9wdHAgKnB0cCA9IFx1MDAyNnBmLVx1MDAzZXB0cDtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3B0cCAqY3RybF9wdHA7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbiBcbiYjNDM7XHRjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xuIFx0aWYgKCFjdHJsX3B0cCkge1xuIFx0XHRkZXZfaW5mbyhpY2VfcGZfdG9fZGV2KHBmKSxcbiBcdFx0XHQgXCYjMzQ7UFRQIHVuYXZhaWxhYmxlOiBubyBjb250cm9sbGluZyBQRlxcblwmIzM0Oyk7XG5AQCAtMzEzMCwxMSAmIzQzOzMxNjYsMTUgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9jbGVhbnVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuICAqL1xuIGludCBpY2VfcHRwX2Nsb2NrX2luZGV4KHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbi1cdHN0cnVjdCBpY2VfcHRwICpjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xuJiM0MztcdHN0cnVjdCBpY2VfcHRwICpjdHJsX3B0cDtcbiBcdHN0cnVjdCBwdHBfY2xvY2sgKmNsb2NrO1xuIFxuJiM0MztcdGd1YXJkKHJjdSkoKTtcbiYjNDM7XG4mIzQzO1x0Y3RybF9wdHAgPSBpY2VfZ2V0X2N0cmxfcHRwKHBmKTtcbiBcdGlmICghY3RybF9wdHApXG4gXHRcdHJldHVybiAtMTtcbiYjNDM7XG4gXHRjbG9jayA9IGN0cmxfcHRwLVx1MDAzZWNsb2NrO1xuIFxuIFx0cmV0dXJuIGNsb2NrID8gcHRwX2Nsb2NrX2luZGV4KGNsb2NrKSA6IC0xO1xuQEAgLTMzNzMsNyAmIzQzOzM0MTMsOSBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBlcnJfY2xlYW5fcGY6XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnB0cC1cdTAwM2Vwb3J0LnBzX2xvY2spO1xuIFx0aWNlX3B0cF9jbGVhbnVwX3BmKHBmKTtcbiYjNDM7XG4gZXJyX2V4aXQ6XG4mIzQzO1x0aWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIocGYpO1xuIFx0LyogSWYgd2UgcmVnaXN0ZXJlZCBhIFBUUCBjbG9jaywgcmVsZWFzZSBpdCAqL1xuIFx0aWYgKHBmLVx1MDAzZXB0cC5jbG9jaykge1xuIFx0XHRwdHBfY2xvY2tfdW5yZWdpc3RlcihwdHAtXHUwMDNlY2xvY2spO1xuQEAgLTM0MDEsNiAmIzQzOzM0NDMsNyBAQCB2b2lkIGljZV9wdHBfcmVsZWFzZShzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdGlmIChwZi1cdTAwM2VwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSkge1xuIFx0XHRtdXRleF9kZXN0cm95KFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnBzX2xvY2spO1xuIFx0XHRpY2VfcHRwX2NsZWFudXBfcGYocGYpO1xuJiM0MztcdFx0aWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIocGYpO1xuIFx0XHRpZiAocGYtXHUwMDNlcHRwLmNsb2NrKSB7XG4gXHRcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIocGYtXHUwMDNlcHRwLmNsb2NrKTtcbiBcdFx0XHRwZi1cdTAwM2VwdHAuY2xvY2sgPSBOVUxMO1xuQEAgLTM0MTUsNiAmIzQzOzM0NTgsOCBAQCB2b2lkIGljZV9wdHBfcmVsZWFzZShzdHJ1Y3QgaWNlX3BmICpwZilcbiBcbiBcdGljZV9wdHBfY2xlYW51cF9wZihwZik7XG4gXG4mIzQzO1x0aWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIocGYpO1xuJiM0MztcbiBcdGljZV9wdHBfcmVsZWFzZV90eF90cmFja2VyKHBmLCBcdTAwMjZwZi1cdTAwM2VwdHAucG9ydC50eCk7XG4gXG4gXHRpY2VfcHRwX2Rpc2FibGVfYWxsX2V4dHRzKHBmKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuaW5kZXggM2E0MWM3MTFlNzUxYi4uNjJlMjc5YzE5MmFjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbkBAIC0xLDggJiM0MzsxLDEwIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEludGVsIENvcnBvcmF0aW9uLiAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aWNlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpY2VfY29tbW9uLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpY2VfcHRwX2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpY2VfcHRwX2NvbnN0cy5oXCYjMzQ7XG5AQCAtMzM1LDYgJiM0MzszMzcsOCBAQCB2b2lkIGljZV9wdHBfc3JjX2NtZChzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfcHRwX3Rtcl9jbWQgY21kKVxuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBpY2VfcGYsIGh3KTtcbiBcdHUzMiBjbWRfdmFsID0gaWNlX3B0cF90bXJfY21kX3RvX3NyY19yZWcoaHcsIGNtZCk7XG4gXG4mIzQzO1x0Z3VhcmQocmN1KSgpO1xuJiM0MztcbiBcdGlmICghaWNlX2lzX3ByaW1hcnkoaHcpKVxuIFx0XHRodyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7XG4gXG5AQCAtMzUzLDYgJiM0MzszNTcsOCBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX2V4ZWNfdG1yX2NtZChzdHJ1Y3QgaWNlX2h3ICpodylcbiB7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGljZV9wZiwgaHcpO1xuIFxuJiM0MztcdGd1YXJkKHJjdSkoKTtcbiYjNDM7XG4gXHRpZiAoIWljZV9pc19wcmltYXJ5KGh3KSlcbiBcdFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xuIFxuQEAgLTIwMDQsOCAmIzQzOzIwMTAsMTQgQEAgc3RhdGljIGludCBpY2VfcmVhZF9waHlfYW5kX3BoY190aW1lX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCxcbiBcdFx0em8gPSByZDMyKGh3LCBHTFRTWU5fU0hUSU1FXzAodG1yX2lkeCkpO1xuIFx0XHRsbyA9IHJkMzIoaHcsIEdMVFNZTl9TSFRJTUVfTCh0bXJfaWR4KSk7XG4gXHR9IGVsc2Uge1xuLVx0XHR6byA9IHJkMzIoaWNlX2dldF9wcmltYXJ5X2h3KHBmKSwgR0xUU1lOX1NIVElNRV8wKHRtcl9pZHgpKTtcbi1cdFx0bG8gPSByZDMyKGljZV9nZXRfcHJpbWFyeV9odyhwZiksIEdMVFNZTl9TSFRJTUVfTCh0bXJfaWR4KSk7XG4mIzQzO1x0XHRzdHJ1Y3QgaWNlX2h3ICpwcmlfaHc7XG4mIzQzO1xuJiM0MztcdFx0Z3VhcmQocmN1KSgpO1xuJiM0MztcbiYjNDM7XHRcdHByaV9odyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7XG4mIzQzO1xuJiM0MztcdFx0em8gPSByZDMyKHByaV9odywgR0xUU1lOX1NIVElNRV8wKHRtcl9pZHgpKTtcbiYjNDM7XHRcdGxvID0gcmQzMihwcmlfaHcsIEdMVFNZTl9TSFRJTUVfTCh0bXJfaWR4KSk7XG4gXHR9XG4gXHQqcGhjX3RpbWUgPSAodTY0KWxvIFx1MDAzY1x1MDAzYyAzMiB8IHpvO1xuIFxuQEAgLTIxNzMsOCAmIzQzOzIxODUsMTQgQEAgaW50IGljZV9zdGFydF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0KVxuIFx0XHRsbyA9IHJkMzIoaHcsIEdMVFNZTl9JTkNWQUxfTCh0bXJfaWR4KSk7XG4gXHRcdGhpID0gcmQzMihodywgR0xUU1lOX0lOQ1ZBTF9IKHRtcl9pZHgpKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGxvID0gcmQzMihpY2VfZ2V0X3ByaW1hcnlfaHcocGYpLCBHTFRTWU5fSU5DVkFMX0wodG1yX2lkeCkpO1xuLVx0XHRoaSA9IHJkMzIoaWNlX2dldF9wcmltYXJ5X2h3KHBmKSwgR0xUU1lOX0lOQ1ZBTF9IKHRtcl9pZHgpKTtcbiYjNDM7XHRcdHN0cnVjdCBpY2VfaHcgKnByaV9odztcbiYjNDM7XG4mIzQzO1x0XHRndWFyZChyY3UpKCk7XG4mIzQzO1xuJiM0MztcdFx0cHJpX2h3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcbiYjNDM7XG4mIzQzO1x0XHRsbyA9IHJkMzIocHJpX2h3LCBHTFRTWU5fSU5DVkFMX0wodG1yX2lkeCkpO1xuJiM0MztcdFx0aGkgPSByZDMyKHByaV9odywgR0xUU1lOX0lOQ1ZBTF9IKHRtcl9pZHgpKTtcbiBcdH1cbiBcdGluY3ZhbCA9ICh1NjQpaGkgXHUwMDNjXHUwMDNjIDMyIHwgbG87XG4gXG5AQCAtNTMwMCw2ICYjNDM7NTMxOCw5IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfaW5pdF9waHlfZTgzMChzdHJ1Y3QgaWNlX3B0cF9odyAqcHRwKVxuICAqXG4gICogU29mdHdhcmUgbXVzdCBjbGVhciB0aGUgYnVzeSBiaXQgd2l0aCBhIHdyaXRlIHRvIHJlbGVhc2UgdGhlIGxvY2sgZm9yIG90aGVyXG4gICogZnVuY3Rpb25zIHdoZW4gZG9uZS5cbiYjNDM7ICpcbiYjNDM7ICogQSBzdWNjZXNzZnVsIGNhbGwgaG9sZHMgYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2sgZm9yIHJlYWQgdW50aWxcbiYjNDM7ICogaWNlX3B0cF91bmxvY2soKSBpcyBjYWxsZWQuXG4gICovXG4gYm9vbCBpY2VfcHRwX2xvY2soc3RydWN0IGljZV9odyAqaHcpXG4ge1xuQEAgLTUzMDcsNiAmIzQzOzUzMjgsOCBAQCBib29sIGljZV9wdHBfbG9jayhzdHJ1Y3QgaWNlX2h3ICpodylcbiBcdHUzMiBod19sb2NrO1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0ZG93bl9yZWFkKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbiYjNDM7XG4gXHRpZiAoIWljZV9pc19wcmltYXJ5KGh3KSlcbiBcdFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xuIFxuQEAgLTUzMjQsNiAmIzQzOzUzNDcsOSBAQCBib29sIGljZV9wdHBfbG9jayhzdHJ1Y3QgaWNlX2h3ICpodylcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGh3X2xvY2spXG4mIzQzO1x0XHR1cF9yZWFkKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbiYjNDM7XG4gXHRyZXR1cm4gIWh3X2xvY2s7XG4gfVxuIFxuQEAgLTUzMzgsMTAgJiM0Mzs1MzY0LDEzIEBAIHZvaWQgaWNlX3B0cF91bmxvY2soc3RydWN0IGljZV9odyAqaHcpXG4ge1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBpY2VfcGYsIGh3KTtcbiBcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbiYjNDM7XG4gXHRpZiAoIWljZV9pc19wcmltYXJ5KGh3KSlcbiBcdFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xuIFxuIFx0d3IzMihodywgUEZUU1lOX1NFTSAmIzQzOyAoUEZUU1lOX1NFTV9CWVRFUyAqIGh3LVx1MDAzZXBmX2lkKSwgMCk7XG4mIzQzO1x0dXBfcmVhZChcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jayk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhjbGsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhjbGsuY1xuaW5kZXggNDg0NTlmOTcxY2JmOS4uNmQzMGQyZjNmMmE4YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhjbGsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eGNsay5jXG5AQCAtNDEsNiAmIzQzOzQxLDcgQEAgaWNlX3R4Y2xrX2dldF9waW4oc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgcmVmX2NsaylcbiAvKipcbiAgKiBpY2VfdHhjbGtfZW5hYmxlX3BlZXIgLSBFbmFibGUgcmVxdWlyZWQgVFggcmVmZXJlbmNlIGNsb2NrIG9uIHBlZXIgUEhZXG4gICogQHBmOiBwb2ludGVyIHRvIHRoZSBQRiBzdHJ1Y3R1cmVcbiYjNDM7ICogQGN0cmxfcGY6IGNvbnRyb2wgUEYgcHJvdGVjdGVkIGJ5IGFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrXG4gICogQGNsazogVFggcmVmZXJlbmNlIGNsb2NrIHRoYXQgbXVzdCBiZSBlbmFibGVkXG4gICpcbiAgKiBTb21lIFRYIHJlZmVyZW5jZSBjbG9ja3Mgb24gRTgyNS1jbGFzcyBkZXZpY2VzIChTeW5jRSBhbmQgRVJFRjApIG11c3RcbkBAIC01NCwxMyAmIzQzOzU1LDE1IEBAIGljZV90eGNsa19nZXRfcGluKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIHJlZl9jbGspXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4gICovXG4tc3RhdGljIGludCBpY2VfdHhjbGtfZW5hYmxlX3BlZXIoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKVxuJiM0MztzdGF0aWMgaW50IGljZV90eGNsa19lbmFibGVfcGVlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wZiAqY3RybF9wZixcbiYjNDM7XHRcdFx0XHQgZW51bSBpY2VfZTgyNWNfcmVmX2NsayBjbGspXG4ge1xuLVx0c3RydWN0IGljZV9wZiAqY3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7XG4gXHRib29sIHBlZXJfY2xrX2luX3VzZTtcbiBcdHU4IHBvcnRfbnVtLCBwaHk7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2spO1xuJiM0MztcbiBcdGlmIChjbGsgPT0gSUNFX1JFRl9DTEtfRU5FVClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTE4LDEyICYjNDM7MTIxLDE1IEBAIHN0YXRpYyBpbnQgaWNlX3R4Y2xrX2VuYWJsZV9wZWVyKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaylcbiAgKi9cbiBpbnQgaWNlX3R4Y2xrX3NldF9jbGsoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKVxuIHtcbi1cdHN0cnVjdCBpY2VfcGYgKmN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpO1xuIFx0c3RydWN0IGljZV9wb3J0X2luZm8gKnBvcnRfaW5mbztcbiYjNDM7XHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmO1xuIFx0Ym9vbCBjbGtfaW5fdXNlO1xuIFx0dTggcG9ydF9udW0sIHBoeTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2spO1xuJiM0MztcdGN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpO1xuJiM0MztcbiBcdGlmIChwZi1cdTAwM2VwdHAucG9ydC50eF9jbGsgPT0gY2xrKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0xNjQsNyAmIzQzOzE3MCw3IEBAIGludCBpY2VfdHhjbGtfc2V0X2NsayhzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfZTgyNWNfcmVmX2NsayBjbGspXG4gXHRtdXRleF91bmxvY2soXHUwMDI2Y3RybF9wZi1cdTAwM2VkcGxscy5sb2NrKTtcbiBcbiBcdGlmICghY2xrX2luX3VzZSkge1xuLVx0XHRlcnIgPSBpY2VfdHhjbGtfZW5hYmxlX3BlZXIocGYsIGNsayk7XG4mIzQzO1x0XHRlcnIgPSBpY2VfdHhjbGtfZW5hYmxlX3BlZXIocGYsIGN0cmxfcGYsIGNsayk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0yMTUsMTUgJiM0MzsyMjEsMTggQEAgaW50IGljZV90eGNsa19zZXRfY2xrKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaylcbiB2b2lkIGljZV90eGNsa191cGRhdGVfYW5kX25vdGlmeShzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydCA9IFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0O1xuLVx0c3RydWN0IGljZV9wZiAqY3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7XG4gXHRzdHJ1Y3QgZHBsbF9waW4gKm9sZF9waW4gPSBOVUxMO1xuIFx0c3RydWN0IGRwbGxfcGluICpuZXdfcGluID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmO1xuIFx0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbiBcdGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrO1xuIFx0Ym9vbCBub3RpZnlfZHBsbCA9IGZhbHNlO1xuIFx0aW50IGVycjtcbiBcdHU4IHBoeTtcbiBcbiYjNDM7XHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jayk7XG4mIzQzO1x0Y3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7XG4mIzQzO1xuIFx0cGh5ID0gcHRwX3BvcnQtXHUwMDNlcG9ydF9udW0gLyBody1cdTAwM2VwdHAucG9ydHNfcGVyX3BoeTtcbiBcbiBcdC8qIEhvbGQgdHhjbGtfbm90aWZ5X3J3c2VtIGZvciByZWFkIGFjcm9zcyB0aGUgZW50aXJlIGNyaXRpY2FsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBzZXJpZXMgKGljZSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIHBoeXNpY2FsIEludGVsIFBDSWUgbmV0d29yayBhZGFwdGVycyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiOWQ4Y2Y5YzdjYjBjODE1YWUxZDRkZWY5ODc4ODBkM2YzMjZkMWYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMSAwMDozODo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaAppbmRleCBkYjNjNzAxNWM1NmM0Li5jMTRiYjFlYjI3MWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oCkBAIC00MCw2ICYjNDM7NDAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NwdV9ybWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGltLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZ25zcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wa3RfY2xzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfbWlycmVkLmgmZ3Q7CkBAIC0xMTQ4LDI2ICYjNDM7MTE0OSw0NCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaWNlX3BmX3NyY190bXJfb3duZWQoc3RydWN0IGljZV9wZiAqcGYpCiAgKiBpY2VfZ2V0X3ByaW1hcnlfaHcgLSBHZXQgcG9pbnRlciB0byBwcmltYXJ5IGljZV9odyBzdHJ1Y3R1cmUKICAqIEBwZjogcG9pbnRlciB0byBQRiBzdHJ1Y3R1cmUKICAqCiYjNDM7ICogVGhlIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIG9yCiYjNDM7ICogd2hpbGUgaG9sZGluZyBhZGFwdGVyLSZndDtjdHJsX3BmX2xvY2suCiYjNDM7ICogaHcgaXMgZW1iZWRkZWQgaW4gc3RydWN0IGljZV9wZiwgc28gZWl0aGVyIG1lY2hhbmlzbSBwcm90ZWN0cyBpdHMgbGlmZXRpbWUuCiYjNDM7ICoKICAqIFJldHVybjogQSBwb2ludGVyIHRvIGljZV9odyBzdHJ1Y3R1cmUgd2l0aCBhY2Nlc3MgdG8gdGltZXN5bmMKICAqIHJlZ2lzdGVyIHNwYWNlLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpY2VfaHcgKmljZV9nZXRfcHJpbWFyeV9odyhzdHJ1Y3QgaWNlX3BmICpwZikKIHsKLQlpZiAoIXBmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmKQomIzQzOwlzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmOwomIzQzOwomIzQzOwljdHJsX3BmID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHBmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmLAomIzQzOwkJCQkJbG9ja2RlcF9pc19oZWxkKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGZfbG9jaykpOwomIzQzOwomIzQzOwlpZiAoIWN0cmxfcGYpCiAJCXJldHVybiAmYW1wO3BmLSZndDtodzsKIAllbHNlCi0JCXJldHVybiAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmLSZndDtodzsKJiM0MzsJCXJldHVybiAmYW1wO2N0cmxfcGYtJmd0O2h3OwogfQogCiAvKioKICAqIGljZV9nZXRfY3RybF9wZiAtIEdldCBwb2ludGVyIHRvIENvbnRyb2wgUEYgb2YgdGhlIGFkYXB0ZXIKICAqIEBwZjogcG9pbnRlciB0byB0aGUgY3VycmVudCBQRiBzdHJ1Y3R1cmUKICAqCiYjNDM7ICogVGhlIGNvbnRyb2wgUEYgaXMgdGhlIFBGIHdoaWNoIG93bnMgdGhlIFBUUCBjbG9jayBmb3IgdGhlIGFkYXB0ZXIuCiYjNDM7ICogT25seSB0aGUgY29udHJvbCBQRiBpcyBhbGxvd2VkIHRvIHBlcmZvcm0gY2VydGFpbiBvcGVyYXRpb25zIG9uIHRoZQomIzQzOyAqIFBUUCBjbG9jayBzdWNoIGFzIGFkanVzdGluZyB0aGUgdGltZSBvciBjb25maWd1cmluZyB0aGUgcGlucy4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gb3IKJiM0MzsgKiB3aGlsZSBob2xkaW5nIGFkYXB0ZXItJmd0O2N0cmxfcGZfbG9jay4KJiM0MzsgKgogICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gaWNlX3BmIHN0cnVjdHVyZSB3aGljaCBpcyBDb250cm9sIFBGLAogICogTlVMTCBpZiBpdCYjMzk7cyBub3QgaW5pdGlhbGl6ZWQgeWV0LgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpY2VfcGYgKmljZV9nZXRfY3RybF9wZihzdHJ1Y3QgaWNlX3BmICpwZikKIHsKLQlyZXR1cm4gIXBmLSZndDthZGFwdGVyID8gTlVMTCA6IHBmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmOwomIzQzOwlyZXR1cm4gIXBmLSZndDthZGFwdGVyID8gTlVMTCA6CiYjNDM7CQlyY3VfZGVyZWZlcmVuY2VfY2hlY2socGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGYsCiYjNDM7CQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmYW1wO3BmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmX2xvY2spKTsKIH0KICNlbmRpZiAvKiBfSUNFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jCmluZGV4IDJkYzM2MjlkNmQwZjYuLjgwY2I4ZGM2YjgxYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jCkBAIC02Niw2ICYjNDM7NjYsNyBAQCBzdGF0aWMgc3RydWN0IGljZV9hZGFwdGVyICppY2VfYWRhcHRlcl9uZXcoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCW11dGV4X2luaXQoJmFtcDthZGFwdGVyLSZndDtjcGlfcGh5X2xvY2tbaV0pOwogCXJlZmNvdW50X3NldCgmYW1wO2FkYXB0ZXItJmd0O3JlZmNvdW50LCAxKTsKIAomIzQzOwlpbml0X3J3c2VtKCZhbXA7YWRhcHRlci0mZ3Q7Y3RybF9wZl9sb2NrKTsKIAltdXRleF9pbml0KCZhbXA7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDthZGFwdGVyLSZndDtwb3J0cy5wb3J0cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmgKaW5kZXggNGY2OTVmMzJkYTNkOC4uYjFhZjU5NzE4NDgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmgKQEAgLTYsNiAmIzQzOzYsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yd3NlbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrX3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVmY291bnRfdHlwZXMuaCZndDsKIApAQCAtMzYsNiAmIzQzOzM3LDcgQEAgc3RydWN0IGljZV9wb3J0X2xpc3QgewogICogQHR4cV9jdHhfbG9jazogU3BpbmxvY2sgcHJvdGVjdGluZyBhY2Nlc3MgdG8gdGhlIEdMQ09NTV9RVFhfQ05UWF9DVEwgcmVnaXN0ZXIKICAqIEBjcGlfcGh5X2xvY2s6IFBlci1QSFkgbXV0ZXggc2VyaWFsaXppbmcgQ1BJIFJFUS9BQ0sgdHJhbnNhY3Rpb25zLgogICogICAgICAgICAgICAgICBJbmRleCAwID0gUEhZMCwgaW5kZXggMSA9IFBIWTEuIFVzZWQgb24gRTgyNUMgZGV2aWNlcy4KJiM0MzsgKiBAY3RybF9wZl9sb2NrOiBQcm90ZWN0IGNvbnRyb2wgUEYgbGlmZXRpbWUgZm9yIHNsZWVwYWJsZSB1c2VycwogICogQGN0cmxfcGY6IENvbnRyb2wgUEYgb2YgdGhlIGFkYXB0ZXIKICAqIEBwb3J0czogUG9ydHMgbGlzdAogICogQGluZGV4OiA2NC1iaXQgaW5kZXggY2FjaGVkIGZvciBjb2xsaXNpb24gZGV0ZWN0aW9uIG9uIDMyYml0IHN5c3RlbXMKQEAgLTQ5LDcgJiM0Mzs1MSw4IEBAIHN0cnVjdCBpY2VfYWRhcHRlciB7CiAJLyogU2VyaWFsaXplIENQSSBSRVEvQUNLIHRyYW5zYWN0aW9ucyBwZXIgUEhZIChFODI1QyBvbmx5KSAqLwogCXN0cnVjdCBtdXRleCBjcGlfcGh5X2xvY2tbSUNFX0U4MjVfTUFYX1BIWVNdOwogCi0Jc3RydWN0IGljZV9wZiAqY3RybF9wZjsKJiM0MzsJc3RydWN0IHJ3X3NlbWFwaG9yZSBjdHJsX3BmX2xvY2s7CiYjNDM7CXN0cnVjdCBpY2VfcGYgX19yY3UgKmN0cmxfcGY7CiAJc3RydWN0IGljZV9wb3J0X2xpc3QgcG9ydHM7CiAJdTY0IGluZGV4OwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jCmluZGV4IGVhZWMzNmFiNmFlM2YuLjQ4Mjk2YTRhOGFiZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYwpAQCAtMSw2ICYjNDM7MSw3IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogLyogQ29weXJpZ2h0IChDKSAyMDIxLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwogI2luY2x1ZGUgJiMzNDtpY2UuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2ljZV9saWIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2ljZV90cmFjZS5oJiMzNDsKQEAgLTU1LDYgJiM0Mzs1NiwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9wdHBfcGluX2Rlc2MgaWNlX3Bpbl9kZXNjX2RwbGxbXSA9IHsKIAl7ICBTRFAzLCB7ICAzLCAtMSB9LCB7IDAsIDAgfX0sCiB9OwogCiYjNDM7LyoqCiYjNDM7ICogaWNlX2dldF9jdHJsX3B0cCAtIEdldCB0aGUgUFRQIHN0cnVjdHVyZSBmb3IgdGhlIGNvbnRyb2wgUEYKJiM0MzsgKiBAcGY6IFRoZSBQRiBwb2ludGVyIHRvIGxvb2sgdXAgYXQKJiM0MzsgKgomIzQzOyAqIFRoZSBjb250cm9sIFBGIGlzIHRoZSBQRiB3aGljaCBvd25zIHRoZSBQVFAgY2xvY2sgZm9yIHRoZSBhZGFwdGVyLgomIzQzOyAqIE9ubHkgdGhlIGNvbnRyb2wgUEYgaXMgYWxsb3dlZCB0byBwZXJmb3JtIGNlcnRhaW4gb3BlcmF0aW9ucyBvbiB0aGUKJiM0MzsgKiBQVFAgY2xvY2sgc3VjaCBhcyBhZGp1c3RpbmcgdGhlIHRpbWUgb3IgY29uZmlndXJpbmcgdGhlIHBpbnMuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIG9yCiYjNDM7ICogd2hpbGUgaG9sZGluZyBhZGFwdGVyLSZndDtjdHJsX3BmX2xvY2suCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFBvaW50ZXIgdG8gdGhlIFBUUCBzdHJ1Y3R1cmUgb2YgdGhlIGNvbnRyb2wgUEYsIG9yIE5VTEwgaWYgbm90IGZvdW5kCiYjNDM7ICovCiBzdGF0aWMgc3RydWN0IGljZV9wdHAgKmljZV9nZXRfY3RybF9wdHAoc3RydWN0IGljZV9wZiAqcGYpCiB7CiAJc3RydWN0IGljZV9wZiAqY3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7CkBAIC0yMDMsMzkgJiM0MzsyMTcsNDIgQEAgdTY0IGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyhzdHJ1Y3QgaWNlX3BmICpwZiwKIAl1MzIgaGksIGxvLCBsbzI7CiAJdTggdG1yX2lkeDsKIAotCWlmICghaWNlX2lzX3ByaW1hcnkoaHcpKQotCQlodyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7CiYjNDM7CXNjb3BlZF9ndWFyZChyY3UpIHsKJiM0MzsJCWlmICghaWNlX2lzX3ByaW1hcnkoaHcpKQomIzQzOwkJCWh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTsKIAotCXRtcl9pZHggPSBpY2VfZ2V0X3B0cF9zcmNfY2xvY2tfaW5kZXgoaHcpOwotCWd1YXJkKHNwaW5sb2NrKSgmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwdHBfZ2x0c3luX3RpbWVfbG9jayk7Ci0JLyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwcmUgUEhDIHJlYWQgKi8KLQlwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTsKLQotCWlmIChody0mZ3Q7bWFjX3R5cGUgPT0gSUNFX01BQ19FODMwKSB7Ci0JCXU2NCBjbGtfdGltZSA9IHJkNjQoaHcsIEU4MzBfR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7Ci0KLQkJLyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwb3N0IFBIQyByZWFkICovCi0JCXB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTsKLQotCQlyZXR1cm4gY2xrX3RpbWU7Ci0JfQomIzQzOwkJdG1yX2lkeCA9IGljZV9nZXRfcHRwX3NyY19jbG9ja19pbmRleChodyk7CiYjNDM7CQlndWFyZChzcGlubG9jaykoJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cHRwX2dsdHN5bl90aW1lX2xvY2spOwomIzQzOwkJLyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwcmUgUEhDIHJlYWQgKi8KJiM0MzsJCXB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpOwogCi0JbG8gPSByZDMyKGh3LCBHTFRTWU5fVElNRV9MKHRtcl9pZHgpKTsKJiM0MzsJCWlmIChody0mZ3Q7bWFjX3R5cGUgPT0gSUNFX01BQ19FODMwKSB7CiYjNDM7CQkJdTY0IGNsa190aW1lID0gcmQ2NChodywgRTgzMF9HTFRTWU5fVElNRV9MKHRtcl9pZHgpKTsKIAotCS8qIFJlYWQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgcG9zdCBQSEMgcmVhZCAqLwotCXB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTsKJiM0MzsJCQkvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHBvc3QgUEhDIHJlYWQgKi8KJiM0MzsJCQlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiAKLQloaSA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0godG1yX2lkeCkpOwotCWxvMiA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0wodG1yX2lkeCkpOwomIzQzOwkJCXJldHVybiBjbGtfdGltZTsKJiM0MzsJCX0KIAotCWlmIChsbzIgJmx0OyBsbykgewotCQkvKiBpZiBUSU1FX0wgcm9sbGVkIG92ZXIgcmVhZCBUSU1FX0wgYWdhaW4gYW5kIHVwZGF0ZQotCQkgKiBzeXN0ZW0gdGltZXN0YW1wcwotCQkgKi8KLQkJcHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7CiAJCWxvID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7CiYjNDM7CiYjNDM7CQkvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHBvc3QgUEhDIHJlYWQgKi8KIAkJcHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpOwomIzQzOwogCQloaSA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0godG1yX2lkeCkpOwomIzQzOwkJbG8yID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7CiYjNDM7CiYjNDM7CQlpZiAobG8yICZsdDsgbG8pIHsKJiM0MzsJCQkvKiBpZiBUSU1FX0wgcm9sbGVkIG92ZXIgcmVhZCBUSU1FX0wgYWdhaW4gYW5kIHVwZGF0ZQomIzQzOwkJCSAqIHN5c3RlbSB0aW1lc3RhbXBzCiYjNDM7CQkJICovCiYjNDM7CQkJcHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7CiYjNDM7CQkJbG8gPSByZDMyKGh3LCBHTFRTWU5fVElNRV9MKHRtcl9pZHgpKTsKJiM0MzsJCQlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiYjNDM7CQkJaGkgPSByZDMyKGh3LCBHTFRTWU5fVElNRV9IKHRtcl9pZHgpKTsKJiM0MzsJCX0KJiM0MzsKIAl9CiAKIAlyZXR1cm4gKCh1NjQpaGkgJmx0OyZsdDsgMzIpIHwgbG87CkBAIC0zMDY4LDE0ICYjNDM7MzA4NSwzMyBAQCB2b2lkIGljZV9wdHBfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpCiAKIHN0YXRpYyB2b2lkIGljZV9wdHBfc2V0dXBfYWRhcHRlcihzdHJ1Y3QgaWNlX3BmICpwZikKIHsKLQlwZi0mZ3Q7YWRhcHRlci0mZ3Q7Y3RybF9wZiA9IHBmOwomIzQzOwlndWFyZChyd3NlbV93cml0ZSkoJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7Y3RybF9wZl9sb2NrKTsKJiM0MzsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKHBmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmLCBwZik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGljZV9wdHBfY2xlYW51cF9hZGFwdGVyKHN0cnVjdCBpY2VfcGYgKnBmKQomIzQzO3sKJiM0MzsJZ3VhcmQocndzZW1fd3JpdGUpKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGZfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFplcm8gb3V0IGFkYXB0ZXItJmd0O2N0cmxfcGYgcG9pbnRlciB3aGVuIHRoZSBjdHJsX3BmIGl0c2VsZgomIzQzOwkgKiBpcyBiZWluZyByZW1vdmVkIHRvIHByZXZlbnQgYW55IHNlY29uZGFyeSBQRnMgZnJvbSBhY2Nlc3NpbmcKJiM0MzsJICogaXQgYWZ0ZXIgaXQgaXMgZGVsZXRlZC4KJiM0MzsJICovCiYjNDM7CWlmIChjbXB4Y2hnKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGYsCiYjNDM7CQkgICAgKHN0cnVjdCBpY2VfcGYgX19yY3UgKilwZiwgTlVMTCkgPT0KJiM0MzsJCQkoc3RydWN0IGljZV9wZiBfX3JjdSAqKXBmKQomIzQzOwkJc3luY2hyb25pemVfcmN1KCk7CiB9CiAKIHN0YXRpYyBpbnQgaWNlX3B0cF9zZXR1cF9wZihzdHJ1Y3QgaWNlX3BmICpwZikKIHsKLQlzdHJ1Y3QgaWNlX3B0cCAqY3RybF9wdHAgPSBpY2VfZ2V0X2N0cmxfcHRwKHBmKTsKIAlzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gJmFtcDtwZi0mZ3Q7cHRwOwomIzQzOwlzdHJ1Y3QgaWNlX3B0cCAqY3RybF9wdHA7CiYjNDM7CiYjNDM7CWd1YXJkKHJ3c2VtX3JlYWQpKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGZfbG9jayk7CiAKJiM0MzsJY3RybF9wdHAgPSBpY2VfZ2V0X2N0cmxfcHRwKHBmKTsKIAlpZiAoIWN0cmxfcHRwKSB7CiAJCWRldl9pbmZvKGljZV9wZl90b19kZXYocGYpLAogCQkJICYjMzQ7UFRQIHVuYXZhaWxhYmxlOiBubyBjb250cm9sbGluZyBQRlxuJiMzNDspOwpAQCAtMzEzMCwxMSAmIzQzOzMxNjYsMTUgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9jbGVhbnVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKQogICovCiBpbnQgaWNlX3B0cF9jbG9ja19pbmRleChzdHJ1Y3QgaWNlX3BmICpwZikKIHsKLQlzdHJ1Y3QgaWNlX3B0cCAqY3RybF9wdHAgPSBpY2VfZ2V0X2N0cmxfcHRwKHBmKTsKJiM0MzsJc3RydWN0IGljZV9wdHAgKmN0cmxfcHRwOwogCXN0cnVjdCBwdHBfY2xvY2sgKmNsb2NrOwogCiYjNDM7CWd1YXJkKHJjdSkoKTsKJiM0MzsKJiM0MzsJY3RybF9wdHAgPSBpY2VfZ2V0X2N0cmxfcHRwKHBmKTsKIAlpZiAoIWN0cmxfcHRwKQogCQlyZXR1cm4gLTE7CiYjNDM7CiAJY2xvY2sgPSBjdHJsX3B0cC0mZ3Q7Y2xvY2s7CiAKIAlyZXR1cm4gY2xvY2sgPyBwdHBfY2xvY2tfaW5kZXgoY2xvY2spIDogLTE7CkBAIC0zMzczLDcgJiM0MzszNDEzLDkgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpCiBlcnJfY2xlYW5fcGY6CiAJbXV0ZXhfZGVzdHJveSgmYW1wO3B0cC0mZ3Q7cG9ydC5wc19sb2NrKTsKIAlpY2VfcHRwX2NsZWFudXBfcGYocGYpOwomIzQzOwogZXJyX2V4aXQ6CiYjNDM7CWljZV9wdHBfY2xlYW51cF9hZGFwdGVyKHBmKTsKIAkvKiBJZiB3ZSByZWdpc3RlcmVkIGEgUFRQIGNsb2NrLCByZWxlYXNlIGl0ICovCiAJaWYgKHBmLSZndDtwdHAuY2xvY2spIHsKIAkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIocHRwLSZndDtjbG9jayk7CkBAIC0zNDAxLDYgJiM0MzszNDQzLDcgQEAgdm9pZCBpY2VfcHRwX3JlbGVhc2Uoc3RydWN0IGljZV9wZiAqcGYpCiAJaWYgKHBmLSZndDtwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSkgewogCQltdXRleF9kZXN0cm95KCZhbXA7cGYtJmd0O3B0cC5wb3J0LnBzX2xvY2spOwogCQlpY2VfcHRwX2NsZWFudXBfcGYocGYpOwomIzQzOwkJaWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIocGYpOwogCQlpZiAocGYtJmd0O3B0cC5jbG9jaykgewogCQkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIocGYtJmd0O3B0cC5jbG9jayk7CiAJCQlwZi0mZ3Q7cHRwLmNsb2NrID0gTlVMTDsKQEAgLTM0MTUsNiAmIzQzOzM0NTgsOCBAQCB2b2lkIGljZV9wdHBfcmVsZWFzZShzdHJ1Y3QgaWNlX3BmICpwZikKIAogCWljZV9wdHBfY2xlYW51cF9wZihwZik7CiAKJiM0MzsJaWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIocGYpOwomIzQzOwogCWljZV9wdHBfcmVsZWFzZV90eF90cmFja2VyKHBmLCAmYW1wO3BmLSZndDtwdHAucG9ydC50eCk7CiAKIAlpY2VfcHRwX2Rpc2FibGVfYWxsX2V4dHRzKHBmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jCmluZGV4IDNhNDFjNzExZTc1MWIuLjYyZTI3OWMxOTJhY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYwpAQCAtMSw4ICYjNDM7MSwxMCBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qIENvcHlyaWdodCAoQykgMjAyMSwgSW50ZWwgQ29ycG9yYXRpb24uICovCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtpY2UuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2ljZV9jb21tb24uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2ljZV9wdHBfaHcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2ljZV9wdHBfY29uc3RzLmgmIzM0OwpAQCAtMzM1LDYgJiM0MzszMzcsOCBAQCB2b2lkIGljZV9wdHBfc3JjX2NtZChzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfcHRwX3Rtcl9jbWQgY21kKQogCXN0cnVjdCBpY2VfcGYgKnBmID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgaWNlX3BmLCBodyk7CiAJdTMyIGNtZF92YWwgPSBpY2VfcHRwX3Rtcl9jbWRfdG9fc3JjX3JlZyhodywgY21kKTsKIAomIzQzOwlndWFyZChyY3UpKCk7CiYjNDM7CiAJaWYgKCFpY2VfaXNfcHJpbWFyeShodykpCiAJCWh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTsKIApAQCAtMzUzLDYgJiM0MzszNTcsOCBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX2V4ZWNfdG1yX2NtZChzdHJ1Y3QgaWNlX2h3ICpodykKIHsKIAlzdHJ1Y3QgaWNlX3BmICpwZiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGljZV9wZiwgaHcpOwogCiYjNDM7CWd1YXJkKHJjdSkoKTsKJiM0MzsKIAlpZiAoIWljZV9pc19wcmltYXJ5KGh3KSkKIAkJaHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpOwogCkBAIC0yMDA0LDggJiM0MzsyMDEwLDE0IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcGh5X2FuZF9waGNfdGltZV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsCiAJCXpvID0gcmQzMihodywgR0xUU1lOX1NIVElNRV8wKHRtcl9pZHgpKTsKIAkJbG8gPSByZDMyKGh3LCBHTFRTWU5fU0hUSU1FX0wodG1yX2lkeCkpOwogCX0gZWxzZSB7Ci0JCXpvID0gcmQzMihpY2VfZ2V0X3ByaW1hcnlfaHcocGYpLCBHTFRTWU5fU0hUSU1FXzAodG1yX2lkeCkpOwotCQlsbyA9IHJkMzIoaWNlX2dldF9wcmltYXJ5X2h3KHBmKSwgR0xUU1lOX1NIVElNRV9MKHRtcl9pZHgpKTsKJiM0MzsJCXN0cnVjdCBpY2VfaHcgKnByaV9odzsKJiM0MzsKJiM0MzsJCWd1YXJkKHJjdSkoKTsKJiM0MzsKJiM0MzsJCXByaV9odyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7CiYjNDM7CiYjNDM7CQl6byA9IHJkMzIocHJpX2h3LCBHTFRTWU5fU0hUSU1FXzAodG1yX2lkeCkpOwomIzQzOwkJbG8gPSByZDMyKHByaV9odywgR0xUU1lOX1NIVElNRV9MKHRtcl9pZHgpKTsKIAl9CiAJKnBoY190aW1lID0gKHU2NClsbyAmbHQ7Jmx0OyAzMiB8IHpvOwogCkBAIC0yMTczLDggJiM0MzsyMTg1LDE0IEBAIGludCBpY2Vfc3RhcnRfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCkKIAkJbG8gPSByZDMyKGh3LCBHTFRTWU5fSU5DVkFMX0wodG1yX2lkeCkpOwogCQloaSA9IHJkMzIoaHcsIEdMVFNZTl9JTkNWQUxfSCh0bXJfaWR4KSk7CiAJfSBlbHNlIHsKLQkJbG8gPSByZDMyKGljZV9nZXRfcHJpbWFyeV9odyhwZiksIEdMVFNZTl9JTkNWQUxfTCh0bXJfaWR4KSk7Ci0JCWhpID0gcmQzMihpY2VfZ2V0X3ByaW1hcnlfaHcocGYpLCBHTFRTWU5fSU5DVkFMX0godG1yX2lkeCkpOwomIzQzOwkJc3RydWN0IGljZV9odyAqcHJpX2h3OwomIzQzOwomIzQzOwkJZ3VhcmQocmN1KSgpOwomIzQzOwomIzQzOwkJcHJpX2h3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTsKJiM0MzsKJiM0MzsJCWxvID0gcmQzMihwcmlfaHcsIEdMVFNZTl9JTkNWQUxfTCh0bXJfaWR4KSk7CiYjNDM7CQloaSA9IHJkMzIocHJpX2h3LCBHTFRTWU5fSU5DVkFMX0godG1yX2lkeCkpOwogCX0KIAlpbmN2YWwgPSAodTY0KWhpICZsdDsmbHQ7IDMyIHwgbG87CiAKQEAgLTUzMDAsNiAmIzQzOzUzMTgsOSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX2luaXRfcGh5X2U4MzAoc3RydWN0IGljZV9wdHBfaHcgKnB0cCkKICAqCiAgKiBTb2Z0d2FyZSBtdXN0IGNsZWFyIHRoZSBidXN5IGJpdCB3aXRoIGEgd3JpdGUgdG8gcmVsZWFzZSB0aGUgbG9jayBmb3Igb3RoZXIKICAqIGZ1bmN0aW9ucyB3aGVuIGRvbmUuCiYjNDM7ICoKJiM0MzsgKiBBIHN1Y2Nlc3NmdWwgY2FsbCBob2xkcyBhZGFwdGVyLSZndDtjdHJsX3BmX2xvY2sgZm9yIHJlYWQgdW50aWwKJiM0MzsgKiBpY2VfcHRwX3VubG9jaygpIGlzIGNhbGxlZC4KICAqLwogYm9vbCBpY2VfcHRwX2xvY2soc3RydWN0IGljZV9odyAqaHcpCiB7CkBAIC01MzA3LDYgJiM0Mzs1MzI4LDggQEAgYm9vbCBpY2VfcHRwX2xvY2soc3RydWN0IGljZV9odyAqaHcpCiAJdTMyIGh3X2xvY2s7CiAJaW50IGk7CiAKJiM0MzsJZG93bl9yZWFkKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGZfbG9jayk7CiYjNDM7CiAJaWYgKCFpY2VfaXNfcHJpbWFyeShodykpCiAJCWh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTsKIApAQCAtNTMyNCw2ICYjNDM7NTM0Nyw5IEBAIGJvb2wgaWNlX3B0cF9sb2NrKHN0cnVjdCBpY2VfaHcgKmh3KQogCQlicmVhazsKIAl9CiAKJiM0MzsJaWYgKGh3X2xvY2spCiYjNDM7CQl1cF9yZWFkKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGZfbG9jayk7CiYjNDM7CiAJcmV0dXJuICFod19sb2NrOwogfQogCkBAIC01MzM4LDEwICYjNDM7NTM2NCwxMyBAQCB2b2lkIGljZV9wdHBfdW5sb2NrKHN0cnVjdCBpY2VfaHcgKmh3KQogewogCXN0cnVjdCBpY2VfcGYgKnBmID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgaWNlX3BmLCBodyk7CiAKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3BmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmX2xvY2spOwomIzQzOwogCWlmICghaWNlX2lzX3ByaW1hcnkoaHcpKQogCQlodyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7CiAKIAl3cjMyKGh3LCBQRlRTWU5fU0VNICYjNDM7IChQRlRTWU5fU0VNX0JZVEVTICogaHctJmd0O3BmX2lkKSwgMCk7CiYjNDM7CXVwX3JlYWQoJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7Y3RybF9wZl9sb2NrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4Y2xrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4Y2xrLmMKaW5kZXggNDg0NTlmOTcxY2JmOS4uNmQzMGQyZjNmMmE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eGNsay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhjbGsuYwpAQCAtNDEsNiAmIzQzOzQxLDcgQEAgaWNlX3R4Y2xrX2dldF9waW4oc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgcmVmX2NsaykKIC8qKgogICogaWNlX3R4Y2xrX2VuYWJsZV9wZWVyIC0gRW5hYmxlIHJlcXVpcmVkIFRYIHJlZmVyZW5jZSBjbG9jayBvbiBwZWVyIFBIWQogICogQHBmOiBwb2ludGVyIHRvIHRoZSBQRiBzdHJ1Y3R1cmUKJiM0MzsgKiBAY3RybF9wZjogY29udHJvbCBQRiBwcm90ZWN0ZWQgYnkgYWRhcHRlci0mZ3Q7Y3RybF9wZl9sb2NrCiAgKiBAY2xrOiBUWCByZWZlcmVuY2UgY2xvY2sgdGhhdCBtdXN0IGJlIGVuYWJsZWQKICAqCiAgKiBTb21lIFRYIHJlZmVyZW5jZSBjbG9ja3Mgb24gRTgyNS1jbGFzcyBkZXZpY2VzIChTeW5jRSBhbmQgRVJFRjApIG11c3QKQEAgLTU0LDEzICYjNDM7NTUsMTUgQEAgaWNlX3R4Y2xrX2dldF9waW4oc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgcmVmX2NsaykKICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgaWNlX3R4Y2xrX2VuYWJsZV9wZWVyKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaykKJiM0MztzdGF0aWMgaW50IGljZV90eGNsa19lbmFibGVfcGVlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wZiAqY3RybF9wZiwKJiM0MzsJCQkJIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKQogewotCXN0cnVjdCBpY2VfcGYgKmN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpOwogCWJvb2wgcGVlcl9jbGtfaW5fdXNlOwogCXU4IHBvcnRfbnVtLCBwaHk7CiAJaW50IGVycjsKIAomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGZfbG9jayk7CiYjNDM7CiAJaWYgKGNsayA9PSBJQ0VfUkVGX0NMS19FTkVUKQogCQlyZXR1cm4gMDsKIApAQCAtMTE4LDEyICYjNDM7MTIxLDE1IEBAIHN0YXRpYyBpbnQgaWNlX3R4Y2xrX2VuYWJsZV9wZWVyKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaykKICAqLwogaW50IGljZV90eGNsa19zZXRfY2xrKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaykKIHsKLQlzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmID0gaWNlX2dldF9jdHJsX3BmKHBmKTsKIAlzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcG9ydF9pbmZvOwomIzQzOwlzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmOwogCWJvb2wgY2xrX2luX3VzZTsKIAl1OCBwb3J0X251bSwgcGh5OwogCWludCBlcnI7CiAKJiM0MzsJZ3VhcmQocndzZW1fcmVhZCkoJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7Y3RybF9wZl9sb2NrKTsKJiM0MzsJY3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7CiYjNDM7CiAJaWYgKHBmLSZndDtwdHAucG9ydC50eF9jbGsgPT0gY2xrKQogCQlyZXR1cm4gMDsKIApAQCAtMTY0LDcgJiM0MzsxNzAsNyBAQCBpbnQgaWNlX3R4Y2xrX3NldF9jbGsoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKQogCW11dGV4X3VubG9jaygmYW1wO2N0cmxfcGYtJmd0O2RwbGxzLmxvY2spOwogCiAJaWYgKCFjbGtfaW5fdXNlKSB7Ci0JCWVyciA9IGljZV90eGNsa19lbmFibGVfcGVlcihwZiwgY2xrKTsKJiM0MzsJCWVyciA9IGljZV90eGNsa19lbmFibGVfcGVlcihwZiwgY3RybF9wZiwgY2xrKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMjE1LDE1ICYjNDM7MjIxLDE4IEBAIGludCBpY2VfdHhjbGtfc2V0X2NsayhzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfZTgyNWNfcmVmX2NsayBjbGspCiB2b2lkIGljZV90eGNsa191cGRhdGVfYW5kX25vdGlmeShzdHJ1Y3QgaWNlX3BmICpwZikKIHsKIAlzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydCA9ICZhbXA7cGYtJmd0O3B0cC5wb3J0OwotCXN0cnVjdCBpY2VfcGYgKmN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpOwogCXN0cnVjdCBkcGxsX3BpbiAqb2xkX3BpbiA9IE5VTEw7CiAJc3RydWN0IGRwbGxfcGluICpuZXdfcGluID0gTlVMTDsKJiM0MzsJc3RydWN0IGljZV9wZiAqY3RybF9wZjsKIAlzdHJ1Y3QgaWNlX2h3ICpodyA9ICZhbXA7cGYtJmd0O2h3OwogCWVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrOwogCWJvb2wgbm90aWZ5X2RwbGwgPSBmYWxzZTsKIAlpbnQgZXJyOwogCXU4IHBoeTsKIAomIzQzOwlndWFyZChyd3NlbV9yZWFkKSgmYW1wO3BmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmX2xvY2spOwomIzQzOwljdHJsX3BmID0gaWNlX2dldF9jdHJsX3BmKHBmKTsKJiM0MzsKIAlwaHkgPSBwdHBfcG9ydC0mZ3Q7cG9ydF9udW0gLyBody0mZ3Q7cHRwLnBvcnRzX3Blcl9waHk7CiAKIAkvKiBIb2xkIHR4Y2xrX25vdGlmeV9yd3NlbSBmb3IgcmVhZCBhY3Jvc3MgdGhlIGVudGlyZSBjcml0aWNhbAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDUzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZywgYW5kIEkgaGF2ZSBhIHNldCBvZiBndWlkZWxpbmVzIHRvIGZvbGxvdy4gRmlyc3QsIEkgbmVlZCB0byBzZWUgaWYgaXQgdHJpZ2dlcnMgYW55IG9mIHRoZSBkaXNxdWFsaWZ5aW5nIGNvbmRpdGlvbnMuCgpUaGUgZ3VpZGVsaW5lcyBzdGF0ZSB0aGF0IHBhdGNoZXMgYXJlICpub3QqIHdvcnRoIGZ1enppbmcgaWYgdGhleSBpbnZvbHZlIGRvY3VtZW50YXRpb24gY2hhbmdlcywgZGVjb3JhdGl2ZSBtb2RpZmljYXRpb25zIChsaWtlIGxvZ2dpbmcpLCBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCBleGVjdXRpb24gZmxvdywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIENydWNpYWxseSwgaXQgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgcGF0Y2guIEl0IG1vZGlmaWVzIHNldmVyYWwgZmlsZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgZGlyZWN0b3J5LiBTbywgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaW5jbHVkZXMgY2hhbmdlcyBpbiB0aGUgYGljZS5oYCwgYGljZV9hZGFwdGVyLmNgLCBgaWNlX2FkYXB0ZXIuaGAsIGBpY2VfcHRwLmNgLCBgaWNlX3B0cF9ody5jYCwgYW5kIGBpY2VfdHhjbGsuY2AgZmlsZXMuIFRoaXMgaXMgYSB0ZWxsLgoKSSBrbm93IHRoYXQgYGljZWAgcmVmZXJzIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBDb250cm9sbGVyIEU4MDAgc2VyaWVzIGRyaXZlcnMsIHdoaWNoIGluY2x1ZGUgdGhlIEU4MTAsIEU4MjUsIGFuZCBFODMwLiBUaGVzZSBhcmUgaGlnaC1wZXJmb3JtYW5jZSAxMDBHYkUgTklDcyBvciBTbWFydE5JQ3MuICpDcml0aWNhbGx5KiwgSSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBkcml2ZXIgKnJlcXVpcmVzKiBwaHlzaWNhbCBJbnRlbCBFODAwIHNlcmllcyBQQ0llIGhhcmR3YXJlIGNhcmRzOyBpdCYjMzk7cyBub3Qgc29tZXRoaW5nIHlvdSBjYW4gZWFzaWx5IGVtdWxhdGUgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwIGxpa2UgeW91IGNhbiB3aXRoIGUxMDAwLCBlMTAwMGUsIGlnYiwgb3IgdmlydGlvLW5ldC4KClNvLCB0aGUga2V5IHRlc3QgaXMgd2hldGhlciB0aGlzIGBpY2VgIGRyaXZlciBmYWxscyB1bmRlciB0aGUgJiMzNDtyZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VJiMzNDsgZ3VpZGVsaW5lLiBJdCBkb2VzLCBpbmRlZWQuIEFzIGEgdmV0ZXJhbiBpbiB0aGlzIGZpZWxkLCBJIGNhbiBhc3NlcnQgdGhhdCB0aGUgYGljZWAgZHJpdmVyICpkb2VzKiBuZWVkIHRoZSBQQ0llIGhhcmR3YXJlLCBhbmQgdGhhdCB0aGVyZSBpcyBubyBzdGFuZGFyZCBRRU1VIGVtdWxhdGlvbi4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIGludm9sdmVzIGEgZHJpdmVyIHRoYXQgaXMgaW4gdGhlICYjMzQ7cmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7IGNhdGVnb3J5LCBJJiMzOTttIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyAqbm90KiB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZpbGUgZG9lcyBub3QgZXhpc3Q8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBmaWxlIGRvZXMgbm90IGV4aXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIG5ldHdvcmtpbmcgaGFyZHdhcmUgYW5kIGZhbWlsaWFyIHdpdGggdGhlIExpbnV4IGtlcm5lbDoKCioqRmluZGluZyB0aGUgQ29uZmlndXJhdGlvbiBNZW51IGZvciBJbnRlbCBFdGhlcm5ldCBEcml2ZXJzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBjb25maWd1cmluZyBvciB1bmRlcnN0YW5kaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUbyBkbyB0aGlzIHByb3Blcmx5LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGBLY29uZmlnYCBmaWxlLiBHaXZlbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIHRoYXQgZmlsZSBpcyB0aGUga2V5LiBUaGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIEV0aGVybmV0IGRyaXZlciBjb2RlIHdpdGhpbiB0aGUgTGludXgga2VybmVsIGlzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9gLiBTbywgbXkgdHJhaW4gb2YgdGhvdWdodCwgYW5kIHdoYXQgbXkgYWN0aW9ucyB3aWxsIHJlZmxlY3QsIGJlZ2lucyB3aXRoIHRoZSBjbGVhciBkaXJlY3RpdmU6IExvY2F0ZSB0aGF0IGBLY29uZmlnYCBmaWxlLiBJdCYjMzk7cyB0aGUgZmlsZSBJIG5lZWQgdG8gaW5zcGVjdCB0byBtYW5hZ2Ugb3IgY29uZmlndXJlIHRoYXQgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjY4PWNvbmZpZyBJNDBFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTI5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjkxOmNvbmZpZyBJQ0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMyMS1cdGJvb2wgXCYjMzQ7SW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzMxOmNvbmZpZyBJQ0VfU1dJVENIREVWXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMi1cdGJvb2wgXCYjMzQ7U3dpdGNoZGV2IFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzQ1OmNvbmZpZyBJQ0VfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1N1cHBvcnQgSFcgY3Jvc3MtdGltZXN0YW1wIG9uIHBsYXRmb3JtcyB3aXRoIFBUTSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEludGVsIEV0aGVybmV0IEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGVzZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlLCBwYXJ0aWN1bGFybHkgdGhlIG9uZSBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsYCBkaXJlY3RvcnkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyOTAuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3BvdCB0byBmaW5kIGEgc2VjdGlvbiBvZiBpbnRlcmVzdCwgbWF5YmUgcmVsYXRlZCB0byBhIHNwZWNpZmljIGRyaXZlciBtb2RlbCwgZmVhdHVyZSBzZXQsIG9yIGEgZ2xvYmFsIGNvbnRyb2wuIExldCYjMzk7cyBzZWUgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYmVpbmcgZXhwb3NlZCB0aGVyZS4uLiBJIGV4cGVjdCBpdCYjMzk7cyBsaWtlbHkgYSBjb21wbGV4IHN0cnVjdHVyZSwgc28gSSB3aWxsIGhhdmUgdG8gaW52ZXN0aWdhdGUgd2hhdCBkZXBlbmRzIG9uIHdoYXQuLi4gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGF0JiMzOTtzIGNvbnRyb2xsZWQgYnkgd2hpY2ggb2YgdGhlIGRyaXZlcnMgb3IgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTA6XHRcbiAyOTE6XHRjb25maWcgSUNFXG4gMjkyOlx0XHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIFN1cHBvcnRcJiMzNDtcbiAyOTM6XHRcdGRlZmF1bHQgblxuIDI5NDpcdFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG4gMjk1Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gMjk2Olx0XHRkZXBlbmRzIG9uIEdOU1MgfHwgR05TUyA9IG5cbiAyOTc6XHRcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4gMjk4Olx0XHRzZWxlY3QgRElNTElCXG4gMjk5Olx0XHRzZWxlY3QgTElCRVRIX1hEUFxuIDMwMDpcdFx0c2VsZWN0IExJQklFXG4gMzAxOlx0XHRzZWxlY3QgTElCSUVfQURNSU5RXG4gMzAyOlx0XHRzZWxlY3QgTElCSUVfRldMT0cgaWYgREVCVUdfRlNcbiAzMDM6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuIDMwNDpcdFx0c2VsZWN0IFBBQ0tJTkdcbiAzMDU6XHRcdHNlbGVjdCBQTERNRldcbiAzMDY6XHRcdHNlbGVjdCBEUExMXG4gMzA3Olx0XHRoZWxwXG4gMzA4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgb2ZcbiAzMDk6XHRcdCAgZGV2aWNlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvXG4gMzEwOlx0XHQgIHRvIHRoZSBBZGFwdGVyIFx1MDAyNiBEcml2ZXIgSUQgR3VpZGUgdGhhdCBjYW4gYmUgbG9jYXRlZCBhdDpcbiAzMTE6XHRcbiAzMTI6XHRcdCAgXHUwMDNjaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tXHUwMDNlXG4gMzEzOlx0XG4gMzE0Olx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuIDMxNTpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9pY2UucnN0XHUwMDNlLlxuIDMxNjpcdFxuIDMxNzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gMzE4Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGljZS5cbiAzMTk6XHRcbiAzMjA6XHRjb25maWcgSUNFX0hXTU9OXG4gMzIxOlx0XHRib29sIFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydCBIV01PTiBzdXBwb3J0XCYjMzQ7XG4gMzIyOlx0XHRkZWZhdWx0IHlcbiAzMjM6XHRcdGRlcGVuZHMgb24gSUNFIFx1MDAyNlx1MDAyNiBIV01PTiBcdTAwMjZcdTAwMjYgIShJQ0U9eSBcdTAwMjZcdTAwMjYgSFdNT049bSlcbiAzMjQ6XHRcdGhlbHBcbiAzMjU6XHRcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZXhwb3NlIHRoZXJtYWwgc2Vuc29yIGRhdGEgb24gSW50ZWwgZGV2aWNlcy5cbiAzMjY6XHRcbiAzMjc6XHRcdCAgU29tZSBvZiBvdXIgZGV2aWNlcyBjb250YWluIGludGVybmFsIHRoZXJtYWwgc2Vuc29ycy5cbiAzMjg6XHRcdCAgVGhpcyBkYXRhIGlzIGF2YWlsYWJsZSB2aWEgdGhlIGh3bW9uIHN5c2ZzIGludGVyZmFjZSBhbmQgZXhwb3Nlc1xuIDMyOTpcdFx0ICB0aGUgb25ib2FyZCBzZW5zb3JzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDg3CgkJCQkJCQlvdXRwdXQ6IDc5CgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgV29ydGgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIEludGVsIElDRSBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9gLiBMb29rcyBsaWtlIGl0JiMzOTtzIHR3ZWFraW5nIHRoZSBsb2NraW5nIGFuZCBSQ1Ugc2FmZXR5IGFyb3VuZCBhY2Nlc3MgdG8gdGhlIGNvbnRyb2wgUEYgYW5kIHRoZSBQVFAgaGFyZHdhcmUsIHJlcHJlc2VudGVkIGJ5IGBhZGFwdGVyLSZndDtjdHJsX3BmYC4gSSBrbm93IHRoZSBJQ0UgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgdGhvc2UgSW50ZWwgRTgwMCBzZXJpZXMgY2FyZHMg4oCTIEU4MTAsIEU4MjUsIEU4MzAsIHRoYXQgc29ydCBvZiB0aGluZy4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCAqdGhpcyBkcml2ZXIgaXMgZm9yIHBoeXNpY2FsIFBDSWUgbmV0d29yayBjYXJkcy4qIEFuZCB0aG9zZSBjYXJkcyBhcmVuJiMzOTt0IHR5cGljYWxseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIGluIHRoZSB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcyB3ZSB1c2UuCgpUaGF0JiMzOTtzIHRoZSBrZXkuIEkgcmVtZW1iZXIgdGhlIHJ1bGU6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IFRoaXMgYWJzb2x1dGVseSBmYWxscyB1bmRlciB0aGF0IGNhdGVnb3J5LiBUaGUgSUNFIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVyLiBJdCYjMzk7cyBkZXNpZ25lZCBmb3IgaGFyZHdhcmUgdGhhdCBpc24mIzM5O3QgcmVwbGljYXRlZCBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudHMgd2UgdXNlLgoKU28sIHRoaXMgaXMgYSBjbGVhciAmIzM0O25vJiMzNDsgb24gV29ydGhGdXp6aW5nLiBJdCYjMzk7cyBub3Qgd29ydGggdGhlIGVmZm9ydCBiZWNhdXNlIHdlIGNhbiYjMzk7dCBhZGVxdWF0ZWx5IHRlc3QgaXQgd2l0aGluIG91ciBzdGFuZGFyZCBpbmZyYXN0cnVjdHVyZS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY29uZmlndXJlIHRoZSByZXN1bHRzLgoKVGhlIHNldHRpbmdzIHdpbGwgYmU6CgoqICAgKipXb3J0aEZ1enppbmc6IGZhbHNlKioKKiAgICoqRm9jdXNTeW1ib2xzOiBcWyBdKiogKHdlIGRvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgYW55IGZvY3VzIHN5bWJvbHMgaGVyZSkKKiAgICoqRW5hYmxlQ29uZmlnczogXFsgXSoqIChubyBjb25maWdzIHRvIGVuYWJsZSkKKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvYCksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgTklDIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VL0dDRSkuIFRoZXJlZm9yZSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuCgpMZXQmIzM5O3MgcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgc2VyaWVzIChpY2UpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBwaHlzaWNhbCBJbnRlbCBQQ0llIG5ldHdvcmsgYWRhcHRlcnMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIHNlcmllcyAoaWNlKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgcGh5c2ljYWwgSW50ZWwgUENJZSBuZXR3b3JrIGFkYXB0ZXJzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjM4OjQ0Ljg4OTE2MDgxMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NTc5NzY4NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBzZXJpZXMgKGljZSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIHBoeXNpY2FsIEludGVsIFBDSWUgbmV0d29yayBhZGFwdGVycyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjM4OjQ0Ljg4OTE2NjYzMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4OTg1NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjlkOGNmOWM3Y2IwYzgxNWFlMWQ0ZGVmOTg3ODgwZDNmMzI2ZDFmMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDAwOjM4OjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxcbmluZGV4IGRiM2M3MDE1YzU2YzQuLmMxNGJiMWViMjcxZTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuQEAgLTQwLDYgKzQwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdV9ybWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kaW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2duc3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFxcdTAwM2VcXG5AQCAtMTE0OCwyNiArMTE0OSw0NCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaWNlX3BmX3NyY190bXJfb3duZWQoc3RydWN0IGljZV9wZiAqcGYpXFxuICAqIGljZV9nZXRfcHJpbWFyeV9odyAtIEdldCBwb2ludGVyIHRvIHByaW1hcnkgaWNlX2h3IHN0cnVjdHVyZVxcbiAgKiBAcGY6IHBvaW50ZXIgdG8gUEYgc3RydWN0dXJlXFxuICAqXFxuKyAqIFRoZSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBvclxcbisgKiB3aGlsZSBob2xkaW5nIGFkYXB0ZXItXFx1MDAzZWN0cmxfcGZfbG9jay5cXG4rICogaHcgaXMgZW1iZWRkZWQgaW4gc3RydWN0IGljZV9wZiwgc28gZWl0aGVyIG1lY2hhbmlzbSBwcm90ZWN0cyBpdHMgbGlmZXRpbWUuXFxuKyAqXFxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIGljZV9odyBzdHJ1Y3R1cmUgd2l0aCBhY2Nlc3MgdG8gdGltZXN5bmNcXG4gICogcmVnaXN0ZXIgc3BhY2UuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpY2VfaHcgKmljZV9nZXRfcHJpbWFyeV9odyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4ge1xcbi1cXHRpZiAoIXBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmKVxcbitcXHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmO1xcbitcXG4rXFx0Y3RybF9wZiA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlY3RybF9wZixcXG4rXFx0XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlY3RybF9wZl9sb2NrKSk7XFxuK1xcbitcXHRpZiAoIWN0cmxfcGYpXFxuIFxcdFxcdHJldHVybiBcXHUwMDI2cGYtXFx1MDAzZWh3O1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJldHVybiBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZWN0cmxfcGYtXFx1MDAzZWh3O1xcbitcXHRcXHRyZXR1cm4gXFx1MDAyNmN0cmxfcGYtXFx1MDAzZWh3O1xcbiB9XFxuIFxcbiAvKipcXG4gICogaWNlX2dldF9jdHJsX3BmIC0gR2V0IHBvaW50ZXIgdG8gQ29udHJvbCBQRiBvZiB0aGUgYWRhcHRlclxcbiAgKiBAcGY6IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgUEYgc3RydWN0dXJlXFxuICAqXFxuKyAqIFRoZSBjb250cm9sIFBGIGlzIHRoZSBQRiB3aGljaCBvd25zIHRoZSBQVFAgY2xvY2sgZm9yIHRoZSBhZGFwdGVyLlxcbisgKiBPbmx5IHRoZSBjb250cm9sIFBGIGlzIGFsbG93ZWQgdG8gcGVyZm9ybSBjZXJ0YWluIG9wZXJhdGlvbnMgb24gdGhlXFxuKyAqIFBUUCBjbG9jayBzdWNoIGFzIGFkanVzdGluZyB0aGUgdGltZSBvciBjb25maWd1cmluZyB0aGUgcGlucy5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBvclxcbisgKiB3aGlsZSBob2xkaW5nIGFkYXB0ZXItXFx1MDAzZWN0cmxfcGZfbG9jay5cXG4rICpcXG4gICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gaWNlX3BmIHN0cnVjdHVyZSB3aGljaCBpcyBDb250cm9sIFBGLFxcbiAgKiBOVUxMIGlmIGl0J3Mgbm90IGluaXRpYWxpemVkIHlldC5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGljZV9wZiAqaWNlX2dldF9jdHJsX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiB7XFxuLVxcdHJldHVybiAhcGYtXFx1MDAzZWFkYXB0ZXIgPyBOVUxMIDogcGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZWN0cmxfcGY7XFxuK1xcdHJldHVybiAhcGYtXFx1MDAzZWFkYXB0ZXIgPyBOVUxMIDpcXG4rXFx0XFx0cmN1X2RlcmVmZXJlbmNlX2NoZWNrKHBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmLFxcbitcXHRcXHRcXHRcXHQgICAgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmX2xvY2spKTtcXG4gfVxcbiAjZW5kaWYgLyogX0lDRV9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXFxuaW5kZXggMmRjMzYyOWQ2ZDBmNi4uODBjYjhkYzZiODFhMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXFxuQEAgLTY2LDYgKzY2LDcgQEAgc3RhdGljIHN0cnVjdCBpY2VfYWRhcHRlciAqaWNlX2FkYXB0ZXJfbmV3KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VjcGlfcGh5X2xvY2tbaV0pO1xcbiBcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJlZmNvdW50LCAxKTtcXG4gXFxuK1xcdGluaXRfcndzZW0oXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWN0cmxfcGZfbG9jayk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcG9ydHMucG9ydHMpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxcbmluZGV4IDRmNjk1ZjMyZGEzZDguLmIxYWY1OTcxODQ4MjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxcbkBAIC02LDYgKzYsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcndzZW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrX3R5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWZjb3VudF90eXBlcy5oXFx1MDAzZVxcbiBcXG5AQCAtMzYsNiArMzcsNyBAQCBzdHJ1Y3QgaWNlX3BvcnRfbGlzdCB7XFxuICAqIEB0eHFfY3R4X2xvY2s6IFNwaW5sb2NrIHByb3RlY3RpbmcgYWNjZXNzIHRvIHRoZSBHTENPTU1fUVRYX0NOVFhfQ1RMIHJlZ2lzdGVyXFxuICAqIEBjcGlfcGh5X2xvY2s6IFBlci1QSFkgbXV0ZXggc2VyaWFsaXppbmcgQ1BJIFJFUS9BQ0sgdHJhbnNhY3Rpb25zLlxcbiAgKiAgICAgICAgICAgICAgIEluZGV4IDAgPSBQSFkwLCBpbmRleCAxID0gUEhZMS4gVXNlZCBvbiBFODI1QyBkZXZpY2VzLlxcbisgKiBAY3RybF9wZl9sb2NrOiBQcm90ZWN0IGNvbnRyb2wgUEYgbGlmZXRpbWUgZm9yIHNsZWVwYWJsZSB1c2Vyc1xcbiAgKiBAY3RybF9wZjogQ29udHJvbCBQRiBvZiB0aGUgYWRhcHRlclxcbiAgKiBAcG9ydHM6IFBvcnRzIGxpc3RcXG4gICogQGluZGV4OiA2NC1iaXQgaW5kZXggY2FjaGVkIGZvciBjb2xsaXNpb24gZGV0ZWN0aW9uIG9uIDMyYml0IHN5c3RlbXNcXG5AQCAtNDksNyArNTEsOCBAQCBzdHJ1Y3QgaWNlX2FkYXB0ZXIge1xcbiBcXHQvKiBTZXJpYWxpemUgQ1BJIFJFUS9BQ0sgdHJhbnNhY3Rpb25zIHBlciBQSFkgKEU4MjVDIG9ubHkpICovXFxuIFxcdHN0cnVjdCBtdXRleCBjcGlfcGh5X2xvY2tbSUNFX0U4MjVfTUFYX1BIWVNdO1xcbiBcXG4tXFx0c3RydWN0IGljZV9wZiAqY3RybF9wZjtcXG4rXFx0c3RydWN0IHJ3X3NlbWFwaG9yZSBjdHJsX3BmX2xvY2s7XFxuK1xcdHN0cnVjdCBpY2VfcGYgX19yY3UgKmN0cmxfcGY7XFxuIFxcdHN0cnVjdCBpY2VfcG9ydF9saXN0IHBvcnRzO1xcbiBcXHR1NjQgaW5kZXg7XFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuaW5kZXggZWFlYzM2YWI2YWUzZi4uNDgyOTZhNGE4YWJkNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xcbkBAIC0xLDYgKzEsNyBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEludGVsIENvcnBvcmF0aW9uLiAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpY2UuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV9saWIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV90cmFjZS5oXFxcIlxcbkBAIC01NSw2ICs1NiwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9wdHBfcGluX2Rlc2MgaWNlX3Bpbl9kZXNjX2RwbGxbXSA9IHtcXG4gXFx0eyAgU0RQMywgeyAgMywgLTEgfSwgeyAwLCAwIH19LFxcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIGljZV9nZXRfY3RybF9wdHAgLSBHZXQgdGhlIFBUUCBzdHJ1Y3R1cmUgZm9yIHRoZSBjb250cm9sIFBGXFxuKyAqIEBwZjogVGhlIFBGIHBvaW50ZXIgdG8gbG9vayB1cCBhdFxcbisgKlxcbisgKiBUaGUgY29udHJvbCBQRiBpcyB0aGUgUEYgd2hpY2ggb3ducyB0aGUgUFRQIGNsb2NrIGZvciB0aGUgYWRhcHRlci5cXG4rICogT25seSB0aGUgY29udHJvbCBQRiBpcyBhbGxvd2VkIHRvIHBlcmZvcm0gY2VydGFpbiBvcGVyYXRpb25zIG9uIHRoZVxcbisgKiBQVFAgY2xvY2sgc3VjaCBhcyBhZGp1c3RpbmcgdGhlIHRpbWUgb3IgY29uZmlndXJpbmcgdGhlIHBpbnMuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gb3JcXG4rICogd2hpbGUgaG9sZGluZyBhZGFwdGVyLVxcdTAwM2VjdHJsX3BmX2xvY2suXFxuKyAqXFxuKyAqIFJldHVybjogUG9pbnRlciB0byB0aGUgUFRQIHN0cnVjdHVyZSBvZiB0aGUgY29udHJvbCBQRiwgb3IgTlVMTCBpZiBub3QgZm91bmRcXG4rICovXFxuIHN0YXRpYyBzdHJ1Y3QgaWNlX3B0cCAqaWNlX2dldF9jdHJsX3B0cChzdHJ1Y3QgaWNlX3BmICpwZilcXG4ge1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmID0gaWNlX2dldF9jdHJsX3BmKHBmKTtcXG5AQCAtMjAzLDM5ICsyMTcsNDIgQEAgdTY0IGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyhzdHJ1Y3QgaWNlX3BmICpwZixcXG4gXFx0dTMyIGhpLCBsbywgbG8yO1xcbiBcXHR1OCB0bXJfaWR4O1xcbiBcXG4tXFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXFxuLVxcdFxcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcXG4rXFx0c2NvcGVkX2d1YXJkKHJjdSkge1xcbitcXHRcXHRpZiAoIWljZV9pc19wcmltYXJ5KGh3KSlcXG4rXFx0XFx0XFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xcbiBcXG4tXFx0dG1yX2lkeCA9IGljZV9nZXRfcHRwX3NyY19jbG9ja19pbmRleChodyk7XFxuLVxcdGd1YXJkKHNwaW5sb2NrKShcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXB0cF9nbHRzeW5fdGltZV9sb2NrKTtcXG4tXFx0LyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwcmUgUEhDIHJlYWQgKi9cXG4tXFx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XFxuLVxcbi1cXHRpZiAoaHctXFx1MDAzZW1hY190eXBlID09IElDRV9NQUNfRTgzMCkge1xcbi1cXHRcXHR1NjQgY2xrX3RpbWUgPSByZDY0KGh3LCBFODMwX0dMVFNZTl9USU1FX0wodG1yX2lkeCkpO1xcbi1cXG4tXFx0XFx0LyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwb3N0IFBIQyByZWFkICovXFxuLVxcdFxcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcXG4tXFxuLVxcdFxcdHJldHVybiBjbGtfdGltZTtcXG4tXFx0fVxcbitcXHRcXHR0bXJfaWR4ID0gaWNlX2dldF9wdHBfc3JjX2Nsb2NrX2luZGV4KGh3KTtcXG4rXFx0XFx0Z3VhcmQoc3BpbmxvY2spKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcHRwX2dsdHN5bl90aW1lX2xvY2spO1xcbitcXHRcXHQvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHByZSBQSEMgcmVhZCAqL1xcbitcXHRcXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcXG4gXFxuLVxcdGxvID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XFxuK1xcdFxcdGlmIChody1cXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19FODMwKSB7XFxuK1xcdFxcdFxcdHU2NCBjbGtfdGltZSA9IHJkNjQoaHcsIEU4MzBfR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XFxuIFxcbi1cXHQvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHBvc3QgUEhDIHJlYWQgKi9cXG4tXFx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xcbitcXHRcXHRcXHQvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHBvc3QgUEhDIHJlYWQgKi9cXG4rXFx0XFx0XFx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xcbiBcXG4tXFx0aGkgPSByZDMyKGh3LCBHTFRTWU5fVElNRV9IKHRtcl9pZHgpKTtcXG4tXFx0bG8yID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XFxuK1xcdFxcdFxcdHJldHVybiBjbGtfdGltZTtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0aWYgKGxvMiBcXHUwMDNjIGxvKSB7XFxuLVxcdFxcdC8qIGlmIFRJTUVfTCByb2xsZWQgb3ZlciByZWFkIFRJTUVfTCBhZ2FpbiBhbmQgdXBkYXRlXFxuLVxcdFxcdCAqIHN5c3RlbSB0aW1lc3RhbXBzXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcXG4gXFx0XFx0bG8gPSByZDMyKGh3LCBHTFRTWU5fVElNRV9MKHRtcl9pZHgpKTtcXG4rXFxuK1xcdFxcdC8qIFJlYWQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgcG9zdCBQSEMgcmVhZCAqL1xcbiBcXHRcXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XFxuK1xcbiBcXHRcXHRoaSA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0godG1yX2lkeCkpO1xcbitcXHRcXHRsbzIgPSByZDMyKGh3LCBHTFRTWU5fVElNRV9MKHRtcl9pZHgpKTtcXG4rXFxuK1xcdFxcdGlmIChsbzIgXFx1MDAzYyBsbykge1xcbitcXHRcXHRcXHQvKiBpZiBUSU1FX0wgcm9sbGVkIG92ZXIgcmVhZCBUSU1FX0wgYWdhaW4gYW5kIHVwZGF0ZVxcbitcXHRcXHRcXHQgKiBzeXN0ZW0gdGltZXN0YW1wc1xcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XFxuK1xcdFxcdFxcdGxvID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XFxuK1xcdFxcdFxcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcXG4rXFx0XFx0XFx0aGkgPSByZDMyKGh3LCBHTFRTWU5fVElNRV9IKHRtcl9pZHgpKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuICgodTY0KWhpIFxcdTAwM2NcXHUwMDNjIDMyKSB8IGxvO1xcbkBAIC0zMDY4LDE0ICszMDg1LDMzIEBAIHZvaWQgaWNlX3B0cF9yZWJ1aWxkKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcXG4gXFxuIHN0YXRpYyB2b2lkIGljZV9wdHBfc2V0dXBfYWRhcHRlcihzdHJ1Y3QgaWNlX3BmICpwZilcXG4ge1xcbi1cXHRwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlY3RybF9wZiA9IHBmO1xcbitcXHRndWFyZChyd3NlbV93cml0ZSkoXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmX2xvY2spO1xcbitcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmLCBwZik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGljZV9wdHBfY2xlYW51cF9hZGFwdGVyKHN0cnVjdCBpY2VfcGYgKnBmKVxcbit7XFxuK1xcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZWN0cmxfcGZfbG9jayk7XFxuK1xcbitcXHQvKiBaZXJvIG91dCBhZGFwdGVyLVxcdTAwM2VjdHJsX3BmIHBvaW50ZXIgd2hlbiB0aGUgY3RybF9wZiBpdHNlbGZcXG4rXFx0ICogaXMgYmVpbmcgcmVtb3ZlZCB0byBwcmV2ZW50IGFueSBzZWNvbmRhcnkgUEZzIGZyb20gYWNjZXNzaW5nXFxuK1xcdCAqIGl0IGFmdGVyIGl0IGlzIGRlbGV0ZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoY21weGNoZyhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZWN0cmxfcGYsXFxuK1xcdFxcdCAgICAoc3RydWN0IGljZV9wZiBfX3JjdSAqKXBmLCBOVUxMKSA9PVxcbitcXHRcXHRcXHQoc3RydWN0IGljZV9wZiBfX3JjdSAqKXBmKVxcbitcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiB7XFxuLVxcdHN0cnVjdCBpY2VfcHRwICpjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xcbiBcXHRzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gXFx1MDAyNnBmLVxcdTAwM2VwdHA7XFxuK1xcdHN0cnVjdCBpY2VfcHRwICpjdHJsX3B0cDtcXG4rXFxuK1xcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlY3RybF9wZl9sb2NrKTtcXG4gXFxuK1xcdGN0cmxfcHRwID0gaWNlX2dldF9jdHJsX3B0cChwZik7XFxuIFxcdGlmICghY3RybF9wdHApIHtcXG4gXFx0XFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksXFxuIFxcdFxcdFxcdCBcXFwiUFRQIHVuYXZhaWxhYmxlOiBubyBjb250cm9sbGluZyBQRlxcXFxuXFxcIik7XFxuQEAgLTMxMzAsMTEgKzMxNjYsMTUgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9jbGVhbnVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiAgKi9cXG4gaW50IGljZV9wdHBfY2xvY2tfaW5kZXgoc3RydWN0IGljZV9wZiAqcGYpXFxuIHtcXG4tXFx0c3RydWN0IGljZV9wdHAgKmN0cmxfcHRwID0gaWNlX2dldF9jdHJsX3B0cChwZik7XFxuK1xcdHN0cnVjdCBpY2VfcHRwICpjdHJsX3B0cDtcXG4gXFx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XFxuIFxcbitcXHRndWFyZChyY3UpKCk7XFxuK1xcbitcXHRjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xcbiBcXHRpZiAoIWN0cmxfcHRwKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbiBcXHRjbG9jayA9IGN0cmxfcHRwLVxcdTAwM2VjbG9jaztcXG4gXFxuIFxcdHJldHVybiBjbG9jayA/IHB0cF9jbG9ja19pbmRleChjbG9jaykgOiAtMTtcXG5AQCAtMzM3Myw3ICszNDEzLDkgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpXFxuIGVycl9jbGVhbl9wZjpcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cHRwLVxcdTAwM2Vwb3J0LnBzX2xvY2spO1xcbiBcXHRpY2VfcHRwX2NsZWFudXBfcGYocGYpO1xcbitcXG4gZXJyX2V4aXQ6XFxuK1xcdGljZV9wdHBfY2xlYW51cF9hZGFwdGVyKHBmKTtcXG4gXFx0LyogSWYgd2UgcmVnaXN0ZXJlZCBhIFBUUCBjbG9jaywgcmVsZWFzZSBpdCAqL1xcbiBcXHRpZiAocGYtXFx1MDAzZXB0cC5jbG9jaykge1xcbiBcXHRcXHRwdHBfY2xvY2tfdW5yZWdpc3RlcihwdHAtXFx1MDAzZWNsb2NrKTtcXG5AQCAtMzQwMSw2ICszNDQzLDcgQEAgdm9pZCBpY2VfcHRwX3JlbGVhc2Uoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdGlmIChwZi1cXHUwMDNlcHRwLnN0YXRlICE9IElDRV9QVFBfUkVBRFkpIHtcXG4gXFx0XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cGYtXFx1MDAzZXB0cC5wb3J0LnBzX2xvY2spO1xcbiBcXHRcXHRpY2VfcHRwX2NsZWFudXBfcGYocGYpO1xcbitcXHRcXHRpY2VfcHRwX2NsZWFudXBfYWRhcHRlcihwZik7XFxuIFxcdFxcdGlmIChwZi1cXHUwMDNlcHRwLmNsb2NrKSB7XFxuIFxcdFxcdFxcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHBmLVxcdTAwM2VwdHAuY2xvY2spO1xcbiBcXHRcXHRcXHRwZi1cXHUwMDNlcHRwLmNsb2NrID0gTlVMTDtcXG5AQCAtMzQxNSw2ICszNDU4LDggQEAgdm9pZCBpY2VfcHRwX3JlbGVhc2Uoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcbiBcXHRpY2VfcHRwX2NsZWFudXBfcGYocGYpO1xcbiBcXG4rXFx0aWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIocGYpO1xcbitcXG4gXFx0aWNlX3B0cF9yZWxlYXNlX3R4X3RyYWNrZXIocGYsIFxcdTAwMjZwZi1cXHUwMDNlcHRwLnBvcnQudHgpO1xcbiBcXG4gXFx0aWNlX3B0cF9kaXNhYmxlX2FsbF9leHR0cyhwZik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXFxuaW5kZXggM2E0MWM3MTFlNzUxYi4uNjJlMjc5YzE5MmFjZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xcbkBAIC0xLDggKzEsMTAgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gLyogQ29weXJpZ2h0IChDKSAyMDIxLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJpY2UuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV9jb21tb24uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV9wdHBfaHcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV9wdHBfY29uc3RzLmhcXFwiXFxuQEAgLTMzNSw2ICszMzcsOCBAQCB2b2lkIGljZV9wdHBfc3JjX2NtZChzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfcHRwX3Rtcl9jbWQgY21kKVxcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGljZV9wZiwgaHcpO1xcbiBcXHR1MzIgY21kX3ZhbCA9IGljZV9wdHBfdG1yX2NtZF90b19zcmNfcmVnKGh3LCBjbWQpO1xcbiBcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbitcXG4gXFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXFxuIFxcdFxcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcXG4gXFxuQEAgLTM1Myw2ICszNTcsOCBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX2V4ZWNfdG1yX2NtZChzdHJ1Y3QgaWNlX2h3ICpodylcXG4ge1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGljZV9wZiwgaHcpO1xcbiBcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbitcXG4gXFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXFxuIFxcdFxcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcXG4gXFxuQEAgLTIwMDQsOCArMjAxMCwxNCBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3BoeV9hbmRfcGhjX3RpbWVfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LFxcbiBcXHRcXHR6byA9IHJkMzIoaHcsIEdMVFNZTl9TSFRJTUVfMCh0bXJfaWR4KSk7XFxuIFxcdFxcdGxvID0gcmQzMihodywgR0xUU1lOX1NIVElNRV9MKHRtcl9pZHgpKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0em8gPSByZDMyKGljZV9nZXRfcHJpbWFyeV9odyhwZiksIEdMVFNZTl9TSFRJTUVfMCh0bXJfaWR4KSk7XFxuLVxcdFxcdGxvID0gcmQzMihpY2VfZ2V0X3ByaW1hcnlfaHcocGYpLCBHTFRTWU5fU0hUSU1FX0wodG1yX2lkeCkpO1xcbitcXHRcXHRzdHJ1Y3QgaWNlX2h3ICpwcmlfaHc7XFxuK1xcbitcXHRcXHRndWFyZChyY3UpKCk7XFxuK1xcbitcXHRcXHRwcmlfaHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xcbitcXG4rXFx0XFx0em8gPSByZDMyKHByaV9odywgR0xUU1lOX1NIVElNRV8wKHRtcl9pZHgpKTtcXG4rXFx0XFx0bG8gPSByZDMyKHByaV9odywgR0xUU1lOX1NIVElNRV9MKHRtcl9pZHgpKTtcXG4gXFx0fVxcbiBcXHQqcGhjX3RpbWUgPSAodTY0KWxvIFxcdTAwM2NcXHUwMDNjIDMyIHwgem87XFxuIFxcbkBAIC0yMTczLDggKzIxODUsMTQgQEAgaW50IGljZV9zdGFydF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0KVxcbiBcXHRcXHRsbyA9IHJkMzIoaHcsIEdMVFNZTl9JTkNWQUxfTCh0bXJfaWR4KSk7XFxuIFxcdFxcdGhpID0gcmQzMihodywgR0xUU1lOX0lOQ1ZBTF9IKHRtcl9pZHgpKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0bG8gPSByZDMyKGljZV9nZXRfcHJpbWFyeV9odyhwZiksIEdMVFNZTl9JTkNWQUxfTCh0bXJfaWR4KSk7XFxuLVxcdFxcdGhpID0gcmQzMihpY2VfZ2V0X3ByaW1hcnlfaHcocGYpLCBHTFRTWU5fSU5DVkFMX0godG1yX2lkeCkpO1xcbitcXHRcXHRzdHJ1Y3QgaWNlX2h3ICpwcmlfaHc7XFxuK1xcbitcXHRcXHRndWFyZChyY3UpKCk7XFxuK1xcbitcXHRcXHRwcmlfaHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xcbitcXG4rXFx0XFx0bG8gPSByZDMyKHByaV9odywgR0xUU1lOX0lOQ1ZBTF9MKHRtcl9pZHgpKTtcXG4rXFx0XFx0aGkgPSByZDMyKHByaV9odywgR0xUU1lOX0lOQ1ZBTF9IKHRtcl9pZHgpKTtcXG4gXFx0fVxcbiBcXHRpbmN2YWwgPSAodTY0KWhpIFxcdTAwM2NcXHUwMDNjIDMyIHwgbG87XFxuIFxcbkBAIC01MzAwLDYgKzUzMTgsOSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX2luaXRfcGh5X2U4MzAoc3RydWN0IGljZV9wdHBfaHcgKnB0cClcXG4gICpcXG4gICogU29mdHdhcmUgbXVzdCBjbGVhciB0aGUgYnVzeSBiaXQgd2l0aCBhIHdyaXRlIHRvIHJlbGVhc2UgdGhlIGxvY2sgZm9yIG90aGVyXFxuICAqIGZ1bmN0aW9ucyB3aGVuIGRvbmUuXFxuKyAqXFxuKyAqIEEgc3VjY2Vzc2Z1bCBjYWxsIGhvbGRzIGFkYXB0ZXItXFx1MDAzZWN0cmxfcGZfbG9jayBmb3IgcmVhZCB1bnRpbFxcbisgKiBpY2VfcHRwX3VubG9jaygpIGlzIGNhbGxlZC5cXG4gICovXFxuIGJvb2wgaWNlX3B0cF9sb2NrKHN0cnVjdCBpY2VfaHcgKmh3KVxcbiB7XFxuQEAgLTUzMDcsNiArNTMyOCw4IEBAIGJvb2wgaWNlX3B0cF9sb2NrKHN0cnVjdCBpY2VfaHcgKmh3KVxcbiBcXHR1MzIgaHdfbG9jaztcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRkb3duX3JlYWQoXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmX2xvY2spO1xcbitcXG4gXFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXFxuIFxcdFxcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcXG4gXFxuQEAgLTUzMjQsNiArNTM0Nyw5IEBAIGJvb2wgaWNlX3B0cF9sb2NrKHN0cnVjdCBpY2VfaHcgKmh3KVxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKGh3X2xvY2spXFxuK1xcdFxcdHVwX3JlYWQoXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmX2xvY2spO1xcbitcXG4gXFx0cmV0dXJuICFod19sb2NrO1xcbiB9XFxuIFxcbkBAIC01MzM4LDEwICs1MzY0LDEzIEBAIHZvaWQgaWNlX3B0cF91bmxvY2soc3RydWN0IGljZV9odyAqaHcpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9wZiAqcGYgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBpY2VfcGYsIGh3KTtcXG4gXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmX2xvY2spO1xcbitcXG4gXFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXFxuIFxcdFxcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcXG4gXFxuIFxcdHdyMzIoaHcsIFBGVFNZTl9TRU0gKyAoUEZUU1lOX1NFTV9CWVRFUyAqIGh3LVxcdTAwM2VwZl9pZCksIDApO1xcbitcXHR1cF9yZWFkKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlY3RybF9wZl9sb2NrKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhjbGsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhjbGsuY1xcbmluZGV4IDQ4NDU5Zjk3MWNiZjkuLjZkMzBkMmYzZjJhOGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eGNsay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eGNsay5jXFxuQEAgLTQxLDYgKzQxLDcgQEAgaWNlX3R4Y2xrX2dldF9waW4oc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgcmVmX2NsaylcXG4gLyoqXFxuICAqIGljZV90eGNsa19lbmFibGVfcGVlciAtIEVuYWJsZSByZXF1aXJlZCBUWCByZWZlcmVuY2UgY2xvY2sgb24gcGVlciBQSFlcXG4gICogQHBmOiBwb2ludGVyIHRvIHRoZSBQRiBzdHJ1Y3R1cmVcXG4rICogQGN0cmxfcGY6IGNvbnRyb2wgUEYgcHJvdGVjdGVkIGJ5IGFkYXB0ZXItXFx1MDAzZWN0cmxfcGZfbG9ja1xcbiAgKiBAY2xrOiBUWCByZWZlcmVuY2UgY2xvY2sgdGhhdCBtdXN0IGJlIGVuYWJsZWRcXG4gICpcXG4gICogU29tZSBUWCByZWZlcmVuY2UgY2xvY2tzIG9uIEU4MjUtY2xhc3MgZGV2aWNlcyAoU3luY0UgYW5kIEVSRUYwKSBtdXN0XFxuQEAgLTU0LDEzICs1NSwxNSBAQCBpY2VfdHhjbGtfZ2V0X3BpbihzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfZTgyNWNfcmVmX2NsayByZWZfY2xrKVxcbiAgKlxcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuICAqL1xcbi1zdGF0aWMgaW50IGljZV90eGNsa19lbmFibGVfcGVlcihzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfZTgyNWNfcmVmX2NsayBjbGspXFxuK3N0YXRpYyBpbnQgaWNlX3R4Y2xrX2VuYWJsZV9wZWVyKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmLFxcbitcXHRcXHRcXHRcXHQgZW51bSBpY2VfZTgyNWNfcmVmX2NsayBjbGspXFxuIHtcXG4tXFx0c3RydWN0IGljZV9wZiAqY3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7XFxuIFxcdGJvb2wgcGVlcl9jbGtfaW5fdXNlO1xcbiBcXHR1OCBwb3J0X251bSwgcGh5O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZWN0cmxfcGZfbG9jayk7XFxuK1xcbiBcXHRpZiAoY2xrID09IElDRV9SRUZfQ0xLX0VORVQpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTE4LDEyICsxMjEsMTUgQEAgc3RhdGljIGludCBpY2VfdHhjbGtfZW5hYmxlX3BlZXIoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKVxcbiAgKi9cXG4gaW50IGljZV90eGNsa19zZXRfY2xrKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaylcXG4ge1xcbi1cXHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmID0gaWNlX2dldF9jdHJsX3BmKHBmKTtcXG4gXFx0c3RydWN0IGljZV9wb3J0X2luZm8gKnBvcnRfaW5mbztcXG4rXFx0c3RydWN0IGljZV9wZiAqY3RybF9wZjtcXG4gXFx0Ym9vbCBjbGtfaW5fdXNlO1xcbiBcXHR1OCBwb3J0X251bSwgcGh5O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0Z3VhcmQocndzZW1fcmVhZCkoXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmX2xvY2spO1xcbitcXHRjdHJsX3BmID0gaWNlX2dldF9jdHJsX3BmKHBmKTtcXG4rXFxuIFxcdGlmIChwZi1cXHUwMDNlcHRwLnBvcnQudHhfY2xrID09IGNsaylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xNjQsNyArMTcwLDcgQEAgaW50IGljZV90eGNsa19zZXRfY2xrKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaylcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHJsX3BmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4gXFxuIFxcdGlmICghY2xrX2luX3VzZSkge1xcbi1cXHRcXHRlcnIgPSBpY2VfdHhjbGtfZW5hYmxlX3BlZXIocGYsIGNsayk7XFxuK1xcdFxcdGVyciA9IGljZV90eGNsa19lbmFibGVfcGVlcihwZiwgY3RybF9wZiwgY2xrKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbkBAIC0yMTUsMTUgKzIyMSwxOCBAQCBpbnQgaWNlX3R4Y2xrX3NldF9jbGsoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKVxcbiB2b2lkIGljZV90eGNsa191cGRhdGVfYW5kX25vdGlmeShzdHJ1Y3QgaWNlX3BmICpwZilcXG4ge1xcbiBcXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydCA9IFxcdTAwMjZwZi1cXHUwMDNlcHRwLnBvcnQ7XFxuLVxcdHN0cnVjdCBpY2VfcGYgKmN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpO1xcbiBcXHRzdHJ1Y3QgZHBsbF9waW4gKm9sZF9waW4gPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZHBsbF9waW4gKm5ld19waW4gPSBOVUxMO1xcbitcXHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmO1xcbiBcXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuIFxcdGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrO1xcbiBcXHRib29sIG5vdGlmeV9kcGxsID0gZmFsc2U7XFxuIFxcdGludCBlcnI7XFxuIFxcdHU4IHBoeTtcXG4gXFxuK1xcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlY3RybF9wZl9sb2NrKTtcXG4rXFx0Y3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7XFxuK1xcbiBcXHRwaHkgPSBwdHBfcG9ydC1cXHUwMDNlcG9ydF9udW0gLyBody1cXHUwMDNlcHRwLnBvcnRzX3Blcl9waHk7XFxuIFxcbiBcXHQvKiBIb2xkIHR4Y2xrX25vdGlmeV9yd3NlbSBmb3IgcmVhZCBhY3Jvc3MgdGhlIGVudGlyZSBjcml0aWNhbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDozODo0NS4zNzg3OTM2NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjkwOTAxMjI1NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgc2VyaWVzIChpY2UpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBwaHlzaWNhbCBJbnRlbCBQQ0llIG5ldHdvcmsgYWRhcHRlcnMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiOWQ4Y2Y5YzdjYjBjODE1YWUxZDRkZWY5ODc4ODBkM2YzMjZkMWYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMDozODo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuaW5kZXggZGIzYzcwMTVjNTZjNC4uYzE0YmIxZWIyNzFlMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5AQCAtNDAsNiArNDAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdV9ybWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kaW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2duc3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuQEAgLTExNDgsMjYgKzExNDksNDQgQEAgc3RhdGljIGlubGluZSBib29sIGljZV9wZl9zcmNfdG1yX293bmVkKHN0cnVjdCBpY2VfcGYgKnBmKVxuICAqIGljZV9nZXRfcHJpbWFyeV9odyAtIEdldCBwb2ludGVyIHRvIHByaW1hcnkgaWNlX2h3IHN0cnVjdHVyZVxuICAqIEBwZjogcG9pbnRlciB0byBQRiBzdHJ1Y3R1cmVcbiAgKlxuKyAqIFRoZSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBvclxuKyAqIHdoaWxlIGhvbGRpbmcgYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2suXG4rICogaHcgaXMgZW1iZWRkZWQgaW4gc3RydWN0IGljZV9wZiwgc28gZWl0aGVyIG1lY2hhbmlzbSBwcm90ZWN0cyBpdHMgbGlmZXRpbWUuXG4rICpcbiAgKiBSZXR1cm46IEEgcG9pbnRlciB0byBpY2VfaHcgc3RydWN0dXJlIHdpdGggYWNjZXNzIHRvIHRpbWVzeW5jXG4gICogcmVnaXN0ZXIgc3BhY2UuXG4gICovXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgaWNlX2h3ICppY2VfZ2V0X3ByaW1hcnlfaHcoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuLVx0aWYgKCFwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGYpXG4rXHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmO1xuK1xuK1x0Y3RybF9wZiA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGYsXG4rXHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jaykpO1xuK1xuK1x0aWYgKCFjdHJsX3BmKVxuIFx0XHRyZXR1cm4gXHUwMDI2cGYtXHUwMDNlaHc7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGYtXHUwMDNlaHc7XG4rXHRcdHJldHVybiBcdTAwMjZjdHJsX3BmLVx1MDAzZWh3O1xuIH1cbiBcbiAvKipcbiAgKiBpY2VfZ2V0X2N0cmxfcGYgLSBHZXQgcG9pbnRlciB0byBDb250cm9sIFBGIG9mIHRoZSBhZGFwdGVyXG4gICogQHBmOiBwb2ludGVyIHRvIHRoZSBjdXJyZW50IFBGIHN0cnVjdHVyZVxuICAqXG4rICogVGhlIGNvbnRyb2wgUEYgaXMgdGhlIFBGIHdoaWNoIG93bnMgdGhlIFBUUCBjbG9jayBmb3IgdGhlIGFkYXB0ZXIuXG4rICogT25seSB0aGUgY29udHJvbCBQRiBpcyBhbGxvd2VkIHRvIHBlcmZvcm0gY2VydGFpbiBvcGVyYXRpb25zIG9uIHRoZVxuKyAqIFBUUCBjbG9jayBzdWNoIGFzIGFkanVzdGluZyB0aGUgdGltZSBvciBjb25maWd1cmluZyB0aGUgcGlucy5cbisgKlxuKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gb3JcbisgKiB3aGlsZSBob2xkaW5nIGFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrLlxuKyAqXG4gICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gaWNlX3BmIHN0cnVjdHVyZSB3aGljaCBpcyBDb250cm9sIFBGLFxuICAqIE5VTEwgaWYgaXQncyBub3QgaW5pdGlhbGl6ZWQgeWV0LlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGljZV9wZiAqaWNlX2dldF9jdHJsX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbi1cdHJldHVybiAhcGYtXHUwMDNlYWRhcHRlciA/IE5VTEwgOiBwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGY7XG4rXHRyZXR1cm4gIXBmLVx1MDAzZWFkYXB0ZXIgPyBOVUxMIDpcbitcdFx0cmN1X2RlcmVmZXJlbmNlX2NoZWNrKHBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZixcbitcdFx0XHRcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jaykpO1xuIH1cbiAjZW5kaWYgLyogX0lDRV9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcbmluZGV4IDJkYzM2MjlkNmQwZjYuLjgwY2I4ZGM2YjgxYTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcbkBAIC02Niw2ICs2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmljZV9hZGFwdGVyX25ldyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZWNwaV9waHlfbG9ja1tpXSk7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2YWRhcHRlci1cdTAwM2VyZWZjb3VudCwgMSk7XG4gXG4rXHRpbml0X3J3c2VtKFx1MDAyNmFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbiBcdG11dGV4X2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcbmluZGV4IDRmNjk1ZjMyZGEzZDguLmIxYWY1OTcxODQ4MjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcbkBAIC02LDYgKzYsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcndzZW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrX3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudF90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMzYsNiArMzcsNyBAQCBzdHJ1Y3QgaWNlX3BvcnRfbGlzdCB7XG4gICogQHR4cV9jdHhfbG9jazogU3BpbmxvY2sgcHJvdGVjdGluZyBhY2Nlc3MgdG8gdGhlIEdMQ09NTV9RVFhfQ05UWF9DVEwgcmVnaXN0ZXJcbiAgKiBAY3BpX3BoeV9sb2NrOiBQZXItUEhZIG11dGV4IHNlcmlhbGl6aW5nIENQSSBSRVEvQUNLIHRyYW5zYWN0aW9ucy5cbiAgKiAgICAgICAgICAgICAgIEluZGV4IDAgPSBQSFkwLCBpbmRleCAxID0gUEhZMS4gVXNlZCBvbiBFODI1QyBkZXZpY2VzLlxuKyAqIEBjdHJsX3BmX2xvY2s6IFByb3RlY3QgY29udHJvbCBQRiBsaWZldGltZSBmb3Igc2xlZXBhYmxlIHVzZXJzXG4gICogQGN0cmxfcGY6IENvbnRyb2wgUEYgb2YgdGhlIGFkYXB0ZXJcbiAgKiBAcG9ydHM6IFBvcnRzIGxpc3RcbiAgKiBAaW5kZXg6IDY0LWJpdCBpbmRleCBjYWNoZWQgZm9yIGNvbGxpc2lvbiBkZXRlY3Rpb24gb24gMzJiaXQgc3lzdGVtc1xuQEAgLTQ5LDcgKzUxLDggQEAgc3RydWN0IGljZV9hZGFwdGVyIHtcbiBcdC8qIFNlcmlhbGl6ZSBDUEkgUkVRL0FDSyB0cmFuc2FjdGlvbnMgcGVyIFBIWSAoRTgyNUMgb25seSkgKi9cbiBcdHN0cnVjdCBtdXRleCBjcGlfcGh5X2xvY2tbSUNFX0U4MjVfTUFYX1BIWVNdO1xuIFxuLVx0c3RydWN0IGljZV9wZiAqY3RybF9wZjtcbitcdHN0cnVjdCByd19zZW1hcGhvcmUgY3RybF9wZl9sb2NrO1xuK1x0c3RydWN0IGljZV9wZiBfX3JjdSAqY3RybF9wZjtcbiBcdHN0cnVjdCBpY2VfcG9ydF9saXN0IHBvcnRzO1xuIFx0dTY0IGluZGV4O1xuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbmluZGV4IGVhZWMzNmFiNmFlM2YuLjQ4Mjk2YTRhOGFiZDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG5AQCAtMSw2ICsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodCAoQykgMjAyMSwgSW50ZWwgQ29ycG9yYXRpb24uICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFwiaWNlLmhcIlxuICNpbmNsdWRlIFwiaWNlX2xpYi5oXCJcbiAjaW5jbHVkZSBcImljZV90cmFjZS5oXCJcbkBAIC01NSw2ICs1NiwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9wdHBfcGluX2Rlc2MgaWNlX3Bpbl9kZXNjX2RwbGxbXSA9IHtcbiBcdHsgIFNEUDMsIHsgIDMsIC0xIH0sIHsgMCwgMCB9fSxcbiB9O1xuIFxuKy8qKlxuKyAqIGljZV9nZXRfY3RybF9wdHAgLSBHZXQgdGhlIFBUUCBzdHJ1Y3R1cmUgZm9yIHRoZSBjb250cm9sIFBGXG4rICogQHBmOiBUaGUgUEYgcG9pbnRlciB0byBsb29rIHVwIGF0XG4rICpcbisgKiBUaGUgY29udHJvbCBQRiBpcyB0aGUgUEYgd2hpY2ggb3ducyB0aGUgUFRQIGNsb2NrIGZvciB0aGUgYWRhcHRlci5cbisgKiBPbmx5IHRoZSBjb250cm9sIFBGIGlzIGFsbG93ZWQgdG8gcGVyZm9ybSBjZXJ0YWluIG9wZXJhdGlvbnMgb24gdGhlXG4rICogUFRQIGNsb2NrIHN1Y2ggYXMgYWRqdXN0aW5nIHRoZSB0aW1lIG9yIGNvbmZpZ3VyaW5nIHRoZSBwaW5zLlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBvclxuKyAqIHdoaWxlIGhvbGRpbmcgYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2suXG4rICpcbisgKiBSZXR1cm46IFBvaW50ZXIgdG8gdGhlIFBUUCBzdHJ1Y3R1cmUgb2YgdGhlIGNvbnRyb2wgUEYsIG9yIE5VTEwgaWYgbm90IGZvdW5kXG4rICovXG4gc3RhdGljIHN0cnVjdCBpY2VfcHRwICppY2VfZ2V0X2N0cmxfcHRwKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbiBcdHN0cnVjdCBpY2VfcGYgKmN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpO1xuQEAgLTIwMywzOSArMjE3LDQyIEBAIHU2NCBpY2VfcHRwX3JlYWRfc3JjX2Nsa19yZWcoc3RydWN0IGljZV9wZiAqcGYsXG4gXHR1MzIgaGksIGxvLCBsbzI7XG4gXHR1OCB0bXJfaWR4O1xuIFxuLVx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXG4tXHRcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcbitcdHNjb3BlZF9ndWFyZChyY3UpIHtcbitcdFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXG4rXHRcdFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xuIFxuLVx0dG1yX2lkeCA9IGljZV9nZXRfcHRwX3NyY19jbG9ja19pbmRleChodyk7XG4tXHRndWFyZChzcGlubG9jaykoXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2VwdHBfZ2x0c3luX3RpbWVfbG9jayk7XG4tXHQvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHByZSBQSEMgcmVhZCAqL1xuLVx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4tXG4tXHRpZiAoaHctXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19FODMwKSB7XG4tXHRcdHU2NCBjbGtfdGltZSA9IHJkNjQoaHcsIEU4MzBfR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XG4tXG4tXHRcdC8qIFJlYWQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgcG9zdCBQSEMgcmVhZCAqL1xuLVx0XHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4tXG4tXHRcdHJldHVybiBjbGtfdGltZTtcbi1cdH1cbitcdFx0dG1yX2lkeCA9IGljZV9nZXRfcHRwX3NyY19jbG9ja19pbmRleChodyk7XG4rXHRcdGd1YXJkKHNwaW5sb2NrKShcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXB0cF9nbHRzeW5fdGltZV9sb2NrKTtcbitcdFx0LyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwcmUgUEhDIHJlYWQgKi9cbitcdFx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4gXG4tXHRsbyA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0wodG1yX2lkeCkpO1xuK1x0XHRpZiAoaHctXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19FODMwKSB7XG4rXHRcdFx0dTY0IGNsa190aW1lID0gcmQ2NChodywgRTgzMF9HTFRTWU5fVElNRV9MKHRtcl9pZHgpKTtcbiBcbi1cdC8qIFJlYWQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgcG9zdCBQSEMgcmVhZCAqL1xuLVx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuK1x0XHRcdC8qIFJlYWQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgcG9zdCBQSEMgcmVhZCAqL1xuK1x0XHRcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcbiBcbi1cdGhpID0gcmQzMihodywgR0xUU1lOX1RJTUVfSCh0bXJfaWR4KSk7XG4tXHRsbzIgPSByZDMyKGh3LCBHTFRTWU5fVElNRV9MKHRtcl9pZHgpKTtcbitcdFx0XHRyZXR1cm4gY2xrX3RpbWU7XG4rXHRcdH1cbiBcbi1cdGlmIChsbzIgXHUwMDNjIGxvKSB7XG4tXHRcdC8qIGlmIFRJTUVfTCByb2xsZWQgb3ZlciByZWFkIFRJTUVfTCBhZ2FpbiBhbmQgdXBkYXRlXG4tXHRcdCAqIHN5c3RlbSB0aW1lc3RhbXBzXG4tXHRcdCAqL1xuLVx0XHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcbiBcdFx0bG8gPSByZDMyKGh3LCBHTFRTWU5fVElNRV9MKHRtcl9pZHgpKTtcbitcbitcdFx0LyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwb3N0IFBIQyByZWFkICovXG4gXHRcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcbitcbiBcdFx0aGkgPSByZDMyKGh3LCBHTFRTWU5fVElNRV9IKHRtcl9pZHgpKTtcbitcdFx0bG8yID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XG4rXG4rXHRcdGlmIChsbzIgXHUwMDNjIGxvKSB7XG4rXHRcdFx0LyogaWYgVElNRV9MIHJvbGxlZCBvdmVyIHJlYWQgVElNRV9MIGFnYWluIGFuZCB1cGRhdGVcbitcdFx0XHQgKiBzeXN0ZW0gdGltZXN0YW1wc1xuK1x0XHRcdCAqL1xuK1x0XHRcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuK1x0XHRcdGxvID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XG4rXHRcdFx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuK1x0XHRcdGhpID0gcmQzMihodywgR0xUU1lOX1RJTUVfSCh0bXJfaWR4KSk7XG4rXHRcdH1cbitcbiBcdH1cbiBcbiBcdHJldHVybiAoKHU2NCloaSBcdTAwM2NcdTAwM2MgMzIpIHwgbG87XG5AQCAtMzA2OCwxNCArMzA4NSwzMyBAQCB2b2lkIGljZV9wdHBfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4gXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9zZXR1cF9hZGFwdGVyKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbi1cdHBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZiA9IHBmO1xuK1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbitcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGYsIHBmKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIoc3RydWN0IGljZV9wZiAqcGYpXG4re1xuK1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbitcbitcdC8qIFplcm8gb3V0IGFkYXB0ZXItXHUwMDNlY3RybF9wZiBwb2ludGVyIHdoZW4gdGhlIGN0cmxfcGYgaXRzZWxmXG4rXHQgKiBpcyBiZWluZyByZW1vdmVkIHRvIHByZXZlbnQgYW55IHNlY29uZGFyeSBQRnMgZnJvbSBhY2Nlc3NpbmdcbitcdCAqIGl0IGFmdGVyIGl0IGlzIGRlbGV0ZWQuXG4rXHQgKi9cbitcdGlmIChjbXB4Y2hnKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZixcbitcdFx0ICAgIChzdHJ1Y3QgaWNlX3BmIF9fcmN1ICopcGYsIE5VTEwpID09XG4rXHRcdFx0KHN0cnVjdCBpY2VfcGYgX19yY3UgKilwZilcbitcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaWNlX3B0cF9zZXR1cF9wZihzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4tXHRzdHJ1Y3QgaWNlX3B0cCAqY3RybF9wdHAgPSBpY2VfZ2V0X2N0cmxfcHRwKHBmKTtcbiBcdHN0cnVjdCBpY2VfcHRwICpwdHAgPSBcdTAwMjZwZi1cdTAwM2VwdHA7XG4rXHRzdHJ1Y3QgaWNlX3B0cCAqY3RybF9wdHA7XG4rXG4rXHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jayk7XG4gXG4rXHRjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xuIFx0aWYgKCFjdHJsX3B0cCkge1xuIFx0XHRkZXZfaW5mbyhpY2VfcGZfdG9fZGV2KHBmKSxcbiBcdFx0XHQgXCJQVFAgdW5hdmFpbGFibGU6IG5vIGNvbnRyb2xsaW5nIFBGXFxuXCIpO1xuQEAgLTMxMzAsMTEgKzMxNjYsMTUgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9jbGVhbnVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuICAqL1xuIGludCBpY2VfcHRwX2Nsb2NrX2luZGV4KHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbi1cdHN0cnVjdCBpY2VfcHRwICpjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xuK1x0c3RydWN0IGljZV9wdHAgKmN0cmxfcHRwO1xuIFx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XG4gXG4rXHRndWFyZChyY3UpKCk7XG4rXG4rXHRjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xuIFx0aWYgKCFjdHJsX3B0cClcbiBcdFx0cmV0dXJuIC0xO1xuK1xuIFx0Y2xvY2sgPSBjdHJsX3B0cC1cdTAwM2VjbG9jaztcbiBcbiBcdHJldHVybiBjbG9jayA/IHB0cF9jbG9ja19pbmRleChjbG9jaykgOiAtMTtcbkBAIC0zMzczLDcgKzM0MTMsOSBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBlcnJfY2xlYW5fcGY6XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnB0cC1cdTAwM2Vwb3J0LnBzX2xvY2spO1xuIFx0aWNlX3B0cF9jbGVhbnVwX3BmKHBmKTtcbitcbiBlcnJfZXhpdDpcbitcdGljZV9wdHBfY2xlYW51cF9hZGFwdGVyKHBmKTtcbiBcdC8qIElmIHdlIHJlZ2lzdGVyZWQgYSBQVFAgY2xvY2ssIHJlbGVhc2UgaXQgKi9cbiBcdGlmIChwZi1cdTAwM2VwdHAuY2xvY2spIHtcbiBcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIocHRwLVx1MDAzZWNsb2NrKTtcbkBAIC0zNDAxLDYgKzM0NDMsNyBAQCB2b2lkIGljZV9wdHBfcmVsZWFzZShzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdGlmIChwZi1cdTAwM2VwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSkge1xuIFx0XHRtdXRleF9kZXN0cm95KFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnBzX2xvY2spO1xuIFx0XHRpY2VfcHRwX2NsZWFudXBfcGYocGYpO1xuK1x0XHRpY2VfcHRwX2NsZWFudXBfYWRhcHRlcihwZik7XG4gXHRcdGlmIChwZi1cdTAwM2VwdHAuY2xvY2spIHtcbiBcdFx0XHRwdHBfY2xvY2tfdW5yZWdpc3RlcihwZi1cdTAwM2VwdHAuY2xvY2spO1xuIFx0XHRcdHBmLVx1MDAzZXB0cC5jbG9jayA9IE5VTEw7XG5AQCAtMzQxNSw2ICszNDU4LDggQEAgdm9pZCBpY2VfcHRwX3JlbGVhc2Uoc3RydWN0IGljZV9wZiAqcGYpXG4gXG4gXHRpY2VfcHRwX2NsZWFudXBfcGYocGYpO1xuIFxuK1x0aWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIocGYpO1xuK1xuIFx0aWNlX3B0cF9yZWxlYXNlX3R4X3RyYWNrZXIocGYsIFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnR4KTtcbiBcbiBcdGljZV9wdHBfZGlzYWJsZV9hbGxfZXh0dHMocGYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5pbmRleCAzYTQxYzcxMWU3NTFiLi42MmUyNzljMTkyYWNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuQEAgLTEsOCArMSwxMCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChDKSAyMDIxLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbisjaW5jbHVkZSBcImljZS5oXCJcbiAjaW5jbHVkZSBcImljZV9jb21tb24uaFwiXG4gI2luY2x1ZGUgXCJpY2VfcHRwX2h3LmhcIlxuICNpbmNsdWRlIFwiaWNlX3B0cF9jb25zdHMuaFwiXG5AQCAtMzM1LDYgKzMzNyw4IEBAIHZvaWQgaWNlX3B0cF9zcmNfY21kKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9wdHBfdG1yX2NtZCBjbWQpXG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGljZV9wZiwgaHcpO1xuIFx0dTMyIGNtZF92YWwgPSBpY2VfcHRwX3Rtcl9jbWRfdG9fc3JjX3JlZyhodywgY21kKTtcbiBcbitcdGd1YXJkKHJjdSkoKTtcbitcbiBcdGlmICghaWNlX2lzX3ByaW1hcnkoaHcpKVxuIFx0XHRodyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7XG4gXG5AQCAtMzUzLDYgKzM1Nyw4IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfZXhlY190bXJfY21kKHN0cnVjdCBpY2VfaHcgKmh3KVxuIHtcbiBcdHN0cnVjdCBpY2VfcGYgKnBmID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgaWNlX3BmLCBodyk7XG4gXG4rXHRndWFyZChyY3UpKCk7XG4rXG4gXHRpZiAoIWljZV9pc19wcmltYXJ5KGh3KSlcbiBcdFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xuIFxuQEAgLTIwMDQsOCArMjAxMCwxNCBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3BoeV9hbmRfcGhjX3RpbWVfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LFxuIFx0XHR6byA9IHJkMzIoaHcsIEdMVFNZTl9TSFRJTUVfMCh0bXJfaWR4KSk7XG4gXHRcdGxvID0gcmQzMihodywgR0xUU1lOX1NIVElNRV9MKHRtcl9pZHgpKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHpvID0gcmQzMihpY2VfZ2V0X3ByaW1hcnlfaHcocGYpLCBHTFRTWU5fU0hUSU1FXzAodG1yX2lkeCkpO1xuLVx0XHRsbyA9IHJkMzIoaWNlX2dldF9wcmltYXJ5X2h3KHBmKSwgR0xUU1lOX1NIVElNRV9MKHRtcl9pZHgpKTtcbitcdFx0c3RydWN0IGljZV9odyAqcHJpX2h3O1xuK1xuK1x0XHRndWFyZChyY3UpKCk7XG4rXG4rXHRcdHByaV9odyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7XG4rXG4rXHRcdHpvID0gcmQzMihwcmlfaHcsIEdMVFNZTl9TSFRJTUVfMCh0bXJfaWR4KSk7XG4rXHRcdGxvID0gcmQzMihwcmlfaHcsIEdMVFNZTl9TSFRJTUVfTCh0bXJfaWR4KSk7XG4gXHR9XG4gXHQqcGhjX3RpbWUgPSAodTY0KWxvIFx1MDAzY1x1MDAzYyAzMiB8IHpvO1xuIFxuQEAgLTIxNzMsOCArMjE4NSwxNCBAQCBpbnQgaWNlX3N0YXJ0X3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXG4gXHRcdGxvID0gcmQzMihodywgR0xUU1lOX0lOQ1ZBTF9MKHRtcl9pZHgpKTtcbiBcdFx0aGkgPSByZDMyKGh3LCBHTFRTWU5fSU5DVkFMX0godG1yX2lkeCkpO1xuIFx0fSBlbHNlIHtcbi1cdFx0bG8gPSByZDMyKGljZV9nZXRfcHJpbWFyeV9odyhwZiksIEdMVFNZTl9JTkNWQUxfTCh0bXJfaWR4KSk7XG4tXHRcdGhpID0gcmQzMihpY2VfZ2V0X3ByaW1hcnlfaHcocGYpLCBHTFRTWU5fSU5DVkFMX0godG1yX2lkeCkpO1xuK1x0XHRzdHJ1Y3QgaWNlX2h3ICpwcmlfaHc7XG4rXG4rXHRcdGd1YXJkKHJjdSkoKTtcbitcbitcdFx0cHJpX2h3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcbitcbitcdFx0bG8gPSByZDMyKHByaV9odywgR0xUU1lOX0lOQ1ZBTF9MKHRtcl9pZHgpKTtcbitcdFx0aGkgPSByZDMyKHByaV9odywgR0xUU1lOX0lOQ1ZBTF9IKHRtcl9pZHgpKTtcbiBcdH1cbiBcdGluY3ZhbCA9ICh1NjQpaGkgXHUwMDNjXHUwMDNjIDMyIHwgbG87XG4gXG5AQCAtNTMwMCw2ICs1MzE4LDkgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9pbml0X3BoeV9lODMwKHN0cnVjdCBpY2VfcHRwX2h3ICpwdHApXG4gICpcbiAgKiBTb2Z0d2FyZSBtdXN0IGNsZWFyIHRoZSBidXN5IGJpdCB3aXRoIGEgd3JpdGUgdG8gcmVsZWFzZSB0aGUgbG9jayBmb3Igb3RoZXJcbiAgKiBmdW5jdGlvbnMgd2hlbiBkb25lLlxuKyAqXG4rICogQSBzdWNjZXNzZnVsIGNhbGwgaG9sZHMgYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2sgZm9yIHJlYWQgdW50aWxcbisgKiBpY2VfcHRwX3VubG9jaygpIGlzIGNhbGxlZC5cbiAgKi9cbiBib29sIGljZV9wdHBfbG9jayhzdHJ1Y3QgaWNlX2h3ICpodylcbiB7XG5AQCAtNTMwNyw2ICs1MzI4LDggQEAgYm9vbCBpY2VfcHRwX2xvY2soc3RydWN0IGljZV9odyAqaHcpXG4gXHR1MzIgaHdfbG9jaztcbiBcdGludCBpO1xuIFxuK1x0ZG93bl9yZWFkKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbitcbiBcdGlmICghaWNlX2lzX3ByaW1hcnkoaHcpKVxuIFx0XHRodyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7XG4gXG5AQCAtNTMyNCw2ICs1MzQ3LDkgQEAgYm9vbCBpY2VfcHRwX2xvY2soc3RydWN0IGljZV9odyAqaHcpXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuK1x0aWYgKGh3X2xvY2spXG4rXHRcdHVwX3JlYWQoXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2spO1xuK1xuIFx0cmV0dXJuICFod19sb2NrO1xuIH1cbiBcbkBAIC01MzM4LDEwICs1MzY0LDEzIEBAIHZvaWQgaWNlX3B0cF91bmxvY2soc3RydWN0IGljZV9odyAqaHcpXG4ge1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBpY2VfcGYsIGh3KTtcbiBcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2spO1xuK1xuIFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXG4gXHRcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcbiBcbiBcdHdyMzIoaHcsIFBGVFNZTl9TRU0gKyAoUEZUU1lOX1NFTV9CWVRFUyAqIGh3LVx1MDAzZXBmX2lkKSwgMCk7XG4rXHR1cF9yZWFkKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eGNsay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eGNsay5jXG5pbmRleCA0ODQ1OWY5NzFjYmY5Li42ZDMwZDJmM2YyYThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eGNsay5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4Y2xrLmNcbkBAIC00MSw2ICs0MSw3IEBAIGljZV90eGNsa19nZXRfcGluKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIHJlZl9jbGspXG4gLyoqXG4gICogaWNlX3R4Y2xrX2VuYWJsZV9wZWVyIC0gRW5hYmxlIHJlcXVpcmVkIFRYIHJlZmVyZW5jZSBjbG9jayBvbiBwZWVyIFBIWVxuICAqIEBwZjogcG9pbnRlciB0byB0aGUgUEYgc3RydWN0dXJlXG4rICogQGN0cmxfcGY6IGNvbnRyb2wgUEYgcHJvdGVjdGVkIGJ5IGFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrXG4gICogQGNsazogVFggcmVmZXJlbmNlIGNsb2NrIHRoYXQgbXVzdCBiZSBlbmFibGVkXG4gICpcbiAgKiBTb21lIFRYIHJlZmVyZW5jZSBjbG9ja3Mgb24gRTgyNS1jbGFzcyBkZXZpY2VzIChTeW5jRSBhbmQgRVJFRjApIG11c3RcbkBAIC01NCwxMyArNTUsMTUgQEAgaWNlX3R4Y2xrX2dldF9waW4oc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgcmVmX2NsaylcbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbi1zdGF0aWMgaW50IGljZV90eGNsa19lbmFibGVfcGVlcihzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfZTgyNWNfcmVmX2NsayBjbGspXG4rc3RhdGljIGludCBpY2VfdHhjbGtfZW5hYmxlX3BlZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcGYgKmN0cmxfcGYsXG4rXHRcdFx0XHQgZW51bSBpY2VfZTgyNWNfcmVmX2NsayBjbGspXG4ge1xuLVx0c3RydWN0IGljZV9wZiAqY3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7XG4gXHRib29sIHBlZXJfY2xrX2luX3VzZTtcbiBcdHU4IHBvcnRfbnVtLCBwaHk7XG4gXHRpbnQgZXJyO1xuIFxuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jayk7XG4rXG4gXHRpZiAoY2xrID09IElDRV9SRUZfQ0xLX0VORVQpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTExOCwxMiArMTIxLDE1IEBAIHN0YXRpYyBpbnQgaWNlX3R4Y2xrX2VuYWJsZV9wZWVyKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaylcbiAgKi9cbiBpbnQgaWNlX3R4Y2xrX3NldF9jbGsoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKVxuIHtcbi1cdHN0cnVjdCBpY2VfcGYgKmN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpO1xuIFx0c3RydWN0IGljZV9wb3J0X2luZm8gKnBvcnRfaW5mbztcbitcdHN0cnVjdCBpY2VfcGYgKmN0cmxfcGY7XG4gXHRib29sIGNsa19pbl91c2U7XG4gXHR1OCBwb3J0X251bSwgcGh5O1xuIFx0aW50IGVycjtcbiBcbitcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbitcdGN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpO1xuK1xuIFx0aWYgKHBmLVx1MDAzZXB0cC5wb3J0LnR4X2NsayA9PSBjbGspXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTE2NCw3ICsxNzAsNyBAQCBpbnQgaWNlX3R4Y2xrX3NldF9jbGsoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0cmxfcGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXG4gXHRpZiAoIWNsa19pbl91c2UpIHtcbi1cdFx0ZXJyID0gaWNlX3R4Y2xrX2VuYWJsZV9wZWVyKHBmLCBjbGspO1xuK1x0XHRlcnIgPSBpY2VfdHhjbGtfZW5hYmxlX3BlZXIocGYsIGN0cmxfcGYsIGNsayk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0yMTUsMTUgKzIyMSwxOCBAQCBpbnQgaWNlX3R4Y2xrX3NldF9jbGsoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKVxuIHZvaWQgaWNlX3R4Y2xrX3VwZGF0ZV9hbmRfbm90aWZ5KHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbiBcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0ID0gXHUwMDI2cGYtXHUwMDNlcHRwLnBvcnQ7XG4tXHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmID0gaWNlX2dldF9jdHJsX3BmKHBmKTtcbiBcdHN0cnVjdCBkcGxsX3BpbiAqb2xkX3BpbiA9IE5VTEw7XG4gXHRzdHJ1Y3QgZHBsbF9waW4gKm5ld19waW4gPSBOVUxMO1xuK1x0c3RydWN0IGljZV9wZiAqY3RybF9wZjtcbiBcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXHUwMDI2cGYtXHUwMDNlaHc7XG4gXHRlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaztcbiBcdGJvb2wgbm90aWZ5X2RwbGwgPSBmYWxzZTtcbiBcdGludCBlcnI7XG4gXHR1OCBwaHk7XG4gXG4rXHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jayk7XG4rXHRjdHJsX3BmID0gaWNlX2dldF9jdHJsX3BmKHBmKTtcbitcbiBcdHBoeSA9IHB0cF9wb3J0LVx1MDAzZXBvcnRfbnVtIC8gaHctXHUwMDNlcHRwLnBvcnRzX3Blcl9waHk7XG4gXG4gXHQvKiBIb2xkIHR4Y2xrX25vdGlmeV9yd3NlbSBmb3IgcmVhZCBhY3Jvc3MgdGhlIGVudGlyZSBjcml0aWNhbFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6Mzg6NDUuMzc4Nzk3MDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDg0OTU1MTMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBhbmQgSSBoYXZlIGEgc2V0IG9mIGd1aWRlbGluZXMgdG8gZm9sbG93LiBGaXJzdCwgSSBuZWVkIHRvIHNlZSBpZiBpdCB0cmlnZ2VycyBhbnkgb2YgdGhlIGRpc3F1YWxpZnlpbmcgY29uZGl0aW9ucy5cblxuVGhlIGd1aWRlbGluZXMgc3RhdGUgdGhhdCBwYXRjaGVzIGFyZSAqbm90KiB3b3J0aCBmdXp6aW5nIGlmIHRoZXkgaW52b2x2ZSBkb2N1bWVudGF0aW9uIGNoYW5nZXMsIGRlY29yYXRpdmUgbW9kaWZpY2F0aW9ucyAobGlrZSBsb2dnaW5nKSwgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyB0aGF0IGRvbid0IGFmZmVjdCBleGVjdXRpb24gZmxvdywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIENydWNpYWxseSwgaXQgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIHBhdGNoLiBJdCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9gIGRpcmVjdG9yeS4gU28sIEkgc2VlIHRoYXQgdGhlIHBhdGNoIGluY2x1ZGVzIGNoYW5nZXMgaW4gdGhlIGBpY2UuaGAsIGBpY2VfYWRhcHRlci5jYCwgYGljZV9hZGFwdGVyLmhgLCBgaWNlX3B0cC5jYCwgYGljZV9wdHBfaHcuY2AsIGFuZCBgaWNlX3R4Y2xrLmNgIGZpbGVzLiBUaGlzIGlzIGEgdGVsbC5cblxuSSBrbm93IHRoYXQgYGljZWAgcmVmZXJzIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBDb250cm9sbGVyIEU4MDAgc2VyaWVzIGRyaXZlcnMsIHdoaWNoIGluY2x1ZGUgdGhlIEU4MTAsIEU4MjUsIGFuZCBFODMwLiBUaGVzZSBhcmUgaGlnaC1wZXJmb3JtYW5jZSAxMDBHYkUgTklDcyBvciBTbWFydE5JQ3MuICpDcml0aWNhbGx5KiwgSSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBkcml2ZXIgKnJlcXVpcmVzKiBwaHlzaWNhbCBJbnRlbCBFODAwIHNlcmllcyBQQ0llIGhhcmR3YXJlIGNhcmRzOyBpdCdzIG5vdCBzb21ldGhpbmcgeW91IGNhbiBlYXNpbHkgZW11bGF0ZSBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgbGlrZSB5b3UgY2FuIHdpdGggZTEwMDAsIGUxMDAwZSwgaWdiLCBvciB2aXJ0aW8tbmV0LlxuXG5TbywgdGhlIGtleSB0ZXN0IGlzIHdoZXRoZXIgdGhpcyBgaWNlYCBkcml2ZXIgZmFsbHMgdW5kZXIgdGhlIFwicmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiIGd1aWRlbGluZS4gSXQgZG9lcywgaW5kZWVkLiBBcyBhIHZldGVyYW4gaW4gdGhpcyBmaWVsZCwgSSBjYW4gYXNzZXJ0IHRoYXQgdGhlIGBpY2VgIGRyaXZlciAqZG9lcyogbmVlZCB0aGUgUENJZSBoYXJkd2FyZSwgYW5kIHRoYXQgdGhlcmUgaXMgbm8gc3RhbmRhcmQgUUVNVSBlbXVsYXRpb24uXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIGludm9sdmVzIGEgZHJpdmVyIHRoYXQgaXMgaW4gdGhlIFwicmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiIGNhdGVnb3J5LCBJJ20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzICpub3QqIHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NTMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDozOTowMC4yMjgzNTAzMjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDgzMCwiRXJyb3IiOiJ0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmaWxlIGRvZXMgbm90IGV4aXN0XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjM5OjAwLjIyODM5MTc5N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1Mzk4NTE3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbmV0d29ya2luZyBoYXJkd2FyZSBhbmQgZmFtaWxpYXIgd2l0aCB0aGUgTGludXgga2VybmVsOlxuXG4qKkZpbmRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTWVudSBmb3IgSW50ZWwgRXRoZXJuZXQgRHJpdmVycyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBjb25maWd1cmluZyBvciB1bmRlcnN0YW5kaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUbyBkbyB0aGlzIHByb3Blcmx5LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGBLY29uZmlnYCBmaWxlLiBHaXZlbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIHRoYXQgZmlsZSBpcyB0aGUga2V5LiBUaGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIEV0aGVybmV0IGRyaXZlciBjb2RlIHdpdGhpbiB0aGUgTGludXgga2VybmVsIGlzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9gLiBTbywgbXkgdHJhaW4gb2YgdGhvdWdodCwgYW5kIHdoYXQgbXkgYWN0aW9ucyB3aWxsIHJlZmxlY3QsIGJlZ2lucyB3aXRoIHRoZSBjbGVhciBkaXJlY3RpdmU6IExvY2F0ZSB0aGF0IGBLY29uZmlnYCBmaWxlLiBJdCdzIHRoZSBmaWxlIEkgbmVlZCB0byBpbnNwZWN0IHRvIG1hbmFnZSBvciBjb25maWd1cmUgdGhhdCBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcxNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6Mzk6MDUuNzY4MjQ1OTExWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDcyODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yNjg9Y29uZmlnIEk0MEVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyOTE6Y29uZmlnIElDRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMxOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMjEtXFx0Ym9vbCBcXFwiSW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMzMTpjb25maWcgSUNFX1NXSVRDSERFVlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzMyLVxcdGJvb2wgXFxcIlN3aXRjaGRldiBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozNDU6Y29uZmlnIElDRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBIVyBjcm9zcy10aW1lc3RhbXAgb24gcGxhdGZvcm1zIHdpdGggUFRNIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjM5OjA1LjgxODcyNDAzOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NDgwMjkxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJbnRlbCBFdGhlcm5ldCBLY29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGVzZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlLCBwYXJ0aWN1bGFybHkgdGhlIG9uZSBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsYCBkaXJlY3RvcnkuIEknbSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDI5MC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gZmluZCBhIHNlY3Rpb24gb2YgaW50ZXJlc3QsIG1heWJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBkcml2ZXIgbW9kZWwsIGZlYXR1cmUgc2V0LCBvciBhIGdsb2JhbCBjb250cm9sLiBMZXQncyBzZWUgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYmVpbmcgZXhwb3NlZCB0aGVyZS4uLiBJIGV4cGVjdCBpdCdzIGxpa2VseSBhIGNvbXBsZXggc3RydWN0dXJlLCBzbyBJIHdpbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB3aGF0IGRlcGVuZHMgb24gd2hhdC4uLiBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoYXQncyBjb250cm9sbGVkIGJ5IHdoaWNoIG9mIHRoZSBkcml2ZXJzIG9yIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI1NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjM5OjEwLjI2Njc1NTU4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdFxcbiAyOTE6XFx0Y29uZmlnIElDRVxcbiAyOTI6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydFxcXCJcXG4gMjkzOlxcdFxcdGRlZmF1bHQgblxcbiAyOTQ6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuIDI5NTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuIDI5NjpcXHRcXHRkZXBlbmRzIG9uIEdOU1MgfHwgR05TUyA9IG5cXG4gMjk3OlxcdFxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuIDI5ODpcXHRcXHRzZWxlY3QgRElNTElCXFxuIDI5OTpcXHRcXHRzZWxlY3QgTElCRVRIX1hEUFxcbiAzMDA6XFx0XFx0c2VsZWN0IExJQklFXFxuIDMwMTpcXHRcXHRzZWxlY3QgTElCSUVfQURNSU5RXFxuIDMwMjpcXHRcXHRzZWxlY3QgTElCSUVfRldMT0cgaWYgREVCVUdfRlNcXG4gMzAzOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAzMDQ6XFx0XFx0c2VsZWN0IFBBQ0tJTkdcXG4gMzA1OlxcdFxcdHNlbGVjdCBQTERNRldcXG4gMzA2OlxcdFxcdHNlbGVjdCBEUExMXFxuIDMwNzpcXHRcXHRoZWxwXFxuIDMwODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgb2ZcXG4gMzA5OlxcdFxcdCAgZGV2aWNlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvXFxuIDMxMDpcXHRcXHQgIHRvIHRoZSBBZGFwdGVyIFxcdTAwMjYgRHJpdmVyIElEIEd1aWRlIHRoYXQgY2FuIGJlIGxvY2F0ZWQgYXQ6XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly9zdXBwb3J0LmludGVsLmNvbVxcdTAwM2VcXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gMzE1OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3RcXHUwMDNlLlxcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gMzE4OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgaWNlLlxcbiAzMTk6XFx0XFxuIDMyMDpcXHRjb25maWcgSUNFX0hXTU9OXFxuIDMyMTpcXHRcXHRib29sIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIFN1cHBvcnQgSFdNT04gc3VwcG9ydFxcXCJcXG4gMzIyOlxcdFxcdGRlZmF1bHQgeVxcbiAzMjM6XFx0XFx0ZGVwZW5kcyBvbiBJQ0UgXFx1MDAyNlxcdTAwMjYgSFdNT04gXFx1MDAyNlxcdTAwMjYgIShJQ0U9eSBcXHUwMDI2XFx1MDAyNiBIV01PTj1tKVxcbiAzMjQ6XFx0XFx0aGVscFxcbiAzMjU6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byBleHBvc2UgdGhlcm1hbCBzZW5zb3IgZGF0YSBvbiBJbnRlbCBkZXZpY2VzLlxcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHQgIFNvbWUgb2Ygb3VyIGRldmljZXMgY29udGFpbiBpbnRlcm5hbCB0aGVybWFsIHNlbnNvcnMuXFxuIDMyODpcXHRcXHQgIFRoaXMgZGF0YSBpcyBhdmFpbGFibGUgdmlhIHRoZSBod21vbiBzeXNmcyBpbnRlcmZhY2UgYW5kIGV4cG9zZXNcXG4gMzI5OlxcdFxcdCAgdGhlIG9uYm9hcmQgc2Vuc29ycy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6Mzk6MTAuMjY2ODQxMjk5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIwMjA0ODg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgV29ydGgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgSW50ZWwgSUNFIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AuIExvb2tzIGxpa2UgaXQncyB0d2Vha2luZyB0aGUgbG9ja2luZyBhbmQgUkNVIHNhZmV0eSBhcm91bmQgYWNjZXNzIHRvIHRoZSBjb250cm9sIFBGIGFuZCB0aGUgUFRQIGhhcmR3YXJlLCByZXByZXNlbnRlZCBieSBgYWRhcHRlci1cdTAwM2VjdHJsX3BmYC4gSSBrbm93IHRoZSBJQ0UgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgdGhvc2UgSW50ZWwgRTgwMCBzZXJpZXMgY2FyZHMg4oCTIEU4MTAsIEU4MjUsIEU4MzAsIHRoYXQgc29ydCBvZiB0aGluZy4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCAqdGhpcyBkcml2ZXIgaXMgZm9yIHBoeXNpY2FsIFBDSWUgbmV0d29yayBjYXJkcy4qIEFuZCB0aG9zZSBjYXJkcyBhcmVuJ3QgdHlwaWNhbGx5IGVtdWxhdGVkIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgaW4gdGhlIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXBzIHdlIHVzZS5cblxuVGhhdCdzIHRoZSBrZXkuIEkgcmVtZW1iZXIgdGhlIHJ1bGU6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiIFRoaXMgYWJzb2x1dGVseSBmYWxscyB1bmRlciB0aGF0IGNhdGVnb3J5LiBUaGUgSUNFIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVyLiBJdCdzIGRlc2lnbmVkIGZvciBoYXJkd2FyZSB0aGF0IGlzbid0IHJlcGxpY2F0ZWQgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnRzIHdlIHVzZS5cblxuU28sIHRoaXMgaXMgYSBjbGVhciBcIm5vXCIgb24gV29ydGhGdXp6aW5nLiBJdCdzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IGJlY2F1c2Ugd2UgY2FuJ3QgYWRlcXVhdGVseSB0ZXN0IGl0IHdpdGhpbiBvdXIgc3RhbmRhcmQgaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgcmVzdWx0cy5cblxuVGhlIHNldHRpbmdzIHdpbGwgYmU6XG5cbiogICAqKldvcnRoRnV6emluZzogZmFsc2UqKlxuKiAgICoqRm9jdXNTeW1ib2xzOiBcXFsgXSoqICh3ZSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYW55IGZvY3VzIHN5bWJvbHMgaGVyZSlcbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcWyBdKiogKG5vIGNvbmZpZ3MgdG8gZW5hYmxlKVxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvYCksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgTklDIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VL0dDRSkuIFRoZXJlZm9yZSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuXG5cbkxldCdzIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwODcsIk91dHB1dFRva2VucyI6NzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDozOToxNC40Njg4OTI3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgc2VyaWVzIChpY2UpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBwaHlzaWNhbCBJbnRlbCBQQ0llIG5ldHdvcmsgYWRhcHRlcnMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIHNlcmllcyAoaWNlKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgcGh5c2ljYWwgSW50ZWwgUENJZSBuZXR3b3JrIGFkYXB0ZXJzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6Mzk6MTQuNDY4OTE4MTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow47fq6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 00:23:14 +0000 UTC FinishedAt: 2026-09-01 00:39:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBzZXJpZXMgKGljZSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIHBoeXNpY2FsIEludGVsIFBDSWUgbmV0d29yayBhZGFwdGVycyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiOWQ4Y2Y5YzdjYjBjODE1YWUxZDRkZWY5ODc4ODBkM2YzMjZkMWYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMDozODo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbmluZGV4IGRiM2M3MDE1YzU2YzQuLmMxNGJiMWViMjcxZTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuQEAgLTQwLDYgJiM0Mzs0MCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1X3JtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RpbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ25zcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuQEAgLTExNDgsMjYgJiM0MzsxMTQ5LDQ0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpY2VfcGZfc3JjX3Rtcl9vd25lZChzdHJ1Y3QgaWNlX3BmICpwZilcbiAgKiBpY2VfZ2V0X3ByaW1hcnlfaHcgLSBHZXQgcG9pbnRlciB0byBwcmltYXJ5IGljZV9odyBzdHJ1Y3R1cmVcbiAgKiBAcGY6IHBvaW50ZXIgdG8gUEYgc3RydWN0dXJlXG4gICpcbiYjNDM7ICogVGhlIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIG9yXG4mIzQzOyAqIHdoaWxlIGhvbGRpbmcgYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2suXG4mIzQzOyAqIGh3IGlzIGVtYmVkZGVkIGluIHN0cnVjdCBpY2VfcGYsIHNvIGVpdGhlciBtZWNoYW5pc20gcHJvdGVjdHMgaXRzIGxpZmV0aW1lLlxuJiM0MzsgKlxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIGljZV9odyBzdHJ1Y3R1cmUgd2l0aCBhY2Nlc3MgdG8gdGltZXN5bmNcbiAgKiByZWdpc3RlciBzcGFjZS5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpY2VfaHcgKmljZV9nZXRfcHJpbWFyeV9odyhzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4tXHRpZiAoIXBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZilcbiYjNDM7XHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmO1xuJiM0MztcbiYjNDM7XHRjdHJsX3BmID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZixcbiYjNDM7XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jaykpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWN0cmxfcGYpXG4gXHRcdHJldHVybiBcdTAwMjZwZi1cdTAwM2VodztcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZi1cdTAwM2VodztcbiYjNDM7XHRcdHJldHVybiBcdTAwMjZjdHJsX3BmLVx1MDAzZWh3O1xuIH1cbiBcbiAvKipcbiAgKiBpY2VfZ2V0X2N0cmxfcGYgLSBHZXQgcG9pbnRlciB0byBDb250cm9sIFBGIG9mIHRoZSBhZGFwdGVyXG4gICogQHBmOiBwb2ludGVyIHRvIHRoZSBjdXJyZW50IFBGIHN0cnVjdHVyZVxuICAqXG4mIzQzOyAqIFRoZSBjb250cm9sIFBGIGlzIHRoZSBQRiB3aGljaCBvd25zIHRoZSBQVFAgY2xvY2sgZm9yIHRoZSBhZGFwdGVyLlxuJiM0MzsgKiBPbmx5IHRoZSBjb250cm9sIFBGIGlzIGFsbG93ZWQgdG8gcGVyZm9ybSBjZXJ0YWluIG9wZXJhdGlvbnMgb24gdGhlXG4mIzQzOyAqIFBUUCBjbG9jayBzdWNoIGFzIGFkanVzdGluZyB0aGUgdGltZSBvciBjb25maWd1cmluZyB0aGUgcGlucy5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBvclxuJiM0MzsgKiB3aGlsZSBob2xkaW5nIGFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrLlxuJiM0MzsgKlxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIGljZV9wZiBzdHJ1Y3R1cmUgd2hpY2ggaXMgQ29udHJvbCBQRixcbiAgKiBOVUxMIGlmIGl0JiMzOTtzIG5vdCBpbml0aWFsaXplZCB5ZXQuXG4gICovXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgaWNlX3BmICppY2VfZ2V0X2N0cmxfcGYoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuLVx0cmV0dXJuICFwZi1cdTAwM2VhZGFwdGVyID8gTlVMTCA6IHBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZjtcbiYjNDM7XHRyZXR1cm4gIXBmLVx1MDAzZWFkYXB0ZXIgPyBOVUxMIDpcbiYjNDM7XHRcdHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGYsXG4mIzQzO1x0XHRcdFx0ICAgICAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKSk7XG4gfVxuICNlbmRpZiAvKiBfSUNFX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xuaW5kZXggMmRjMzYyOWQ2ZDBmNi4uODBjYjhkYzZiODFhMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xuQEAgLTY2LDYgJiM0Mzs2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmljZV9hZGFwdGVyX25ldyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZWNwaV9waHlfbG9ja1tpXSk7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2YWRhcHRlci1cdTAwM2VyZWZjb3VudCwgMSk7XG4gXG4mIzQzO1x0aW5pdF9yd3NlbShcdTAwMjZhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jayk7XG4gXHRtdXRleF9pbml0KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXG5pbmRleCA0ZjY5NWYzMmRhM2Q4Li5iMWFmNTk3MTg0ODIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXG5AQCAtNiw2ICYjNDM7Niw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcndzZW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrX3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudF90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMzYsNiAmIzQzOzM3LDcgQEAgc3RydWN0IGljZV9wb3J0X2xpc3Qge1xuICAqIEB0eHFfY3R4X2xvY2s6IFNwaW5sb2NrIHByb3RlY3RpbmcgYWNjZXNzIHRvIHRoZSBHTENPTU1fUVRYX0NOVFhfQ1RMIHJlZ2lzdGVyXG4gICogQGNwaV9waHlfbG9jazogUGVyLVBIWSBtdXRleCBzZXJpYWxpemluZyBDUEkgUkVRL0FDSyB0cmFuc2FjdGlvbnMuXG4gICogICAgICAgICAgICAgICBJbmRleCAwID0gUEhZMCwgaW5kZXggMSA9IFBIWTEuIFVzZWQgb24gRTgyNUMgZGV2aWNlcy5cbiYjNDM7ICogQGN0cmxfcGZfbG9jazogUHJvdGVjdCBjb250cm9sIFBGIGxpZmV0aW1lIGZvciBzbGVlcGFibGUgdXNlcnNcbiAgKiBAY3RybF9wZjogQ29udHJvbCBQRiBvZiB0aGUgYWRhcHRlclxuICAqIEBwb3J0czogUG9ydHMgbGlzdFxuICAqIEBpbmRleDogNjQtYml0IGluZGV4IGNhY2hlZCBmb3IgY29sbGlzaW9uIGRldGVjdGlvbiBvbiAzMmJpdCBzeXN0ZW1zXG5AQCAtNDksNyAmIzQzOzUxLDggQEAgc3RydWN0IGljZV9hZGFwdGVyIHtcbiBcdC8qIFNlcmlhbGl6ZSBDUEkgUkVRL0FDSyB0cmFuc2FjdGlvbnMgcGVyIFBIWSAoRTgyNUMgb25seSkgKi9cbiBcdHN0cnVjdCBtdXRleCBjcGlfcGh5X2xvY2tbSUNFX0U4MjVfTUFYX1BIWVNdO1xuIFxuLVx0c3RydWN0IGljZV9wZiAqY3RybF9wZjtcbiYjNDM7XHRzdHJ1Y3Qgcndfc2VtYXBob3JlIGN0cmxfcGZfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgaWNlX3BmIF9fcmN1ICpjdHJsX3BmO1xuIFx0c3RydWN0IGljZV9wb3J0X2xpc3QgcG9ydHM7XG4gXHR1NjQgaW5kZXg7XG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuaW5kZXggZWFlYzM2YWI2YWUzZi4uNDgyOTZhNGE4YWJkNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbkBAIC0xLDYgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodCAoQykgMjAyMSwgSW50ZWwgQ29ycG9yYXRpb24uICovXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpY2UuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2ljZV9saWIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2ljZV90cmFjZS5oXCYjMzQ7XG5AQCAtNTUsNiAmIzQzOzU2LDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX3B0cF9waW5fZGVzYyBpY2VfcGluX2Rlc2NfZHBsbFtdID0ge1xuIFx0eyAgU0RQMywgeyAgMywgLTEgfSwgeyAwLCAwIH19LFxuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfZ2V0X2N0cmxfcHRwIC0gR2V0IHRoZSBQVFAgc3RydWN0dXJlIGZvciB0aGUgY29udHJvbCBQRlxuJiM0MzsgKiBAcGY6IFRoZSBQRiBwb2ludGVyIHRvIGxvb2sgdXAgYXRcbiYjNDM7ICpcbiYjNDM7ICogVGhlIGNvbnRyb2wgUEYgaXMgdGhlIFBGIHdoaWNoIG93bnMgdGhlIFBUUCBjbG9jayBmb3IgdGhlIGFkYXB0ZXIuXG4mIzQzOyAqIE9ubHkgdGhlIGNvbnRyb2wgUEYgaXMgYWxsb3dlZCB0byBwZXJmb3JtIGNlcnRhaW4gb3BlcmF0aW9ucyBvbiB0aGVcbiYjNDM7ICogUFRQIGNsb2NrIHN1Y2ggYXMgYWRqdXN0aW5nIHRoZSB0aW1lIG9yIGNvbmZpZ3VyaW5nIHRoZSBwaW5zLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIG9yXG4mIzQzOyAqIHdoaWxlIGhvbGRpbmcgYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2suXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUG9pbnRlciB0byB0aGUgUFRQIHN0cnVjdHVyZSBvZiB0aGUgY29udHJvbCBQRiwgb3IgTlVMTCBpZiBub3QgZm91bmRcbiYjNDM7ICovXG4gc3RhdGljIHN0cnVjdCBpY2VfcHRwICppY2VfZ2V0X2N0cmxfcHRwKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbiBcdHN0cnVjdCBpY2VfcGYgKmN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpO1xuQEAgLTIwMywzOSAmIzQzOzIxNyw0MiBAQCB1NjQgaWNlX3B0cF9yZWFkX3NyY19jbGtfcmVnKHN0cnVjdCBpY2VfcGYgKnBmLFxuIFx0dTMyIGhpLCBsbywgbG8yO1xuIFx0dTggdG1yX2lkeDtcbiBcbi1cdGlmICghaWNlX2lzX3ByaW1hcnkoaHcpKVxuLVx0XHRodyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHJjdSkge1xuJiM0MztcdFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXG4mIzQzO1x0XHRcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcbiBcbi1cdHRtcl9pZHggPSBpY2VfZ2V0X3B0cF9zcmNfY2xvY2tfaW5kZXgoaHcpO1xuLVx0Z3VhcmQoc3BpbmxvY2spKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcHRwX2dsdHN5bl90aW1lX2xvY2spO1xuLVx0LyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwcmUgUEhDIHJlYWQgKi9cbi1cdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuLVxuLVx0aWYgKGh3LVx1MDAzZW1hY190eXBlID09IElDRV9NQUNfRTgzMCkge1xuLVx0XHR1NjQgY2xrX3RpbWUgPSByZDY0KGh3LCBFODMwX0dMVFNZTl9USU1FX0wodG1yX2lkeCkpO1xuLVxuLVx0XHQvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHBvc3QgUEhDIHJlYWQgKi9cbi1cdFx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuLVxuLVx0XHRyZXR1cm4gY2xrX3RpbWU7XG4tXHR9XG4mIzQzO1x0XHR0bXJfaWR4ID0gaWNlX2dldF9wdHBfc3JjX2Nsb2NrX2luZGV4KGh3KTtcbiYjNDM7XHRcdGd1YXJkKHNwaW5sb2NrKShcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXB0cF9nbHRzeW5fdGltZV9sb2NrKTtcbiYjNDM7XHRcdC8qIFJlYWQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgcHJlIFBIQyByZWFkICovXG4mIzQzO1x0XHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcbiBcbi1cdGxvID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XG4mIzQzO1x0XHRpZiAoaHctXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19FODMwKSB7XG4mIzQzO1x0XHRcdHU2NCBjbGtfdGltZSA9IHJkNjQoaHcsIEU4MzBfR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XG4gXG4tXHQvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHBvc3QgUEhDIHJlYWQgKi9cbi1cdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcbiYjNDM7XHRcdFx0LyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwb3N0IFBIQyByZWFkICovXG4mIzQzO1x0XHRcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcbiBcbi1cdGhpID0gcmQzMihodywgR0xUU1lOX1RJTUVfSCh0bXJfaWR4KSk7XG4tXHRsbzIgPSByZDMyKGh3LCBHTFRTWU5fVElNRV9MKHRtcl9pZHgpKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGNsa190aW1lO1xuJiM0MztcdFx0fVxuIFxuLVx0aWYgKGxvMiBcdTAwM2MgbG8pIHtcbi1cdFx0LyogaWYgVElNRV9MIHJvbGxlZCBvdmVyIHJlYWQgVElNRV9MIGFnYWluIGFuZCB1cGRhdGVcbi1cdFx0ICogc3lzdGVtIHRpbWVzdGFtcHNcbi1cdFx0ICovXG4tXHRcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuIFx0XHRsbyA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0wodG1yX2lkeCkpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJlYWQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgcG9zdCBQSEMgcmVhZCAqL1xuIFx0XHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4mIzQzO1xuIFx0XHRoaSA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0godG1yX2lkeCkpO1xuJiM0MztcdFx0bG8yID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxvMiBcdTAwM2MgbG8pIHtcbiYjNDM7XHRcdFx0LyogaWYgVElNRV9MIHJvbGxlZCBvdmVyIHJlYWQgVElNRV9MIGFnYWluIGFuZCB1cGRhdGVcbiYjNDM7XHRcdFx0ICogc3lzdGVtIHRpbWVzdGFtcHNcbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuJiM0MztcdFx0XHRsbyA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0wodG1yX2lkeCkpO1xuJiM0MztcdFx0XHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4mIzQzO1x0XHRcdGhpID0gcmQzMihodywgR0xUU1lOX1RJTUVfSCh0bXJfaWR4KSk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0fVxuIFxuIFx0cmV0dXJuICgodTY0KWhpIFx1MDAzY1x1MDAzYyAzMikgfCBsbztcbkBAIC0zMDY4LDE0ICYjNDM7MzA4NSwzMyBAQCB2b2lkIGljZV9wdHBfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4gXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9zZXR1cF9hZGFwdGVyKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbi1cdHBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZiA9IHBmO1xuJiM0MztcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGYsIHBmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIoc3RydWN0IGljZV9wZiAqcGYpXG4mIzQzO3tcbiYjNDM7XHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBaZXJvIG91dCBhZGFwdGVyLVx1MDAzZWN0cmxfcGYgcG9pbnRlciB3aGVuIHRoZSBjdHJsX3BmIGl0c2VsZlxuJiM0MztcdCAqIGlzIGJlaW5nIHJlbW92ZWQgdG8gcHJldmVudCBhbnkgc2Vjb25kYXJ5IFBGcyBmcm9tIGFjY2Vzc2luZ1xuJiM0MztcdCAqIGl0IGFmdGVyIGl0IGlzIGRlbGV0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNtcHhjaGcoXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2VjdHJsX3BmLFxuJiM0MztcdFx0ICAgIChzdHJ1Y3QgaWNlX3BmIF9fcmN1ICopcGYsIE5VTEwpID09XG4mIzQzO1x0XHRcdChzdHJ1Y3QgaWNlX3BmIF9fcmN1ICopcGYpXG4mIzQzO1x0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiB9XG4gXG4gc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbi1cdHN0cnVjdCBpY2VfcHRwICpjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xuIFx0c3RydWN0IGljZV9wdHAgKnB0cCA9IFx1MDAyNnBmLVx1MDAzZXB0cDtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3B0cCAqY3RybF9wdHA7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbiBcbiYjNDM7XHRjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xuIFx0aWYgKCFjdHJsX3B0cCkge1xuIFx0XHRkZXZfaW5mbyhpY2VfcGZfdG9fZGV2KHBmKSxcbiBcdFx0XHQgXCYjMzQ7UFRQIHVuYXZhaWxhYmxlOiBubyBjb250cm9sbGluZyBQRlxcblwmIzM0Oyk7XG5AQCAtMzEzMCwxMSAmIzQzOzMxNjYsMTUgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9jbGVhbnVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuICAqL1xuIGludCBpY2VfcHRwX2Nsb2NrX2luZGV4KHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbi1cdHN0cnVjdCBpY2VfcHRwICpjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xuJiM0MztcdHN0cnVjdCBpY2VfcHRwICpjdHJsX3B0cDtcbiBcdHN0cnVjdCBwdHBfY2xvY2sgKmNsb2NrO1xuIFxuJiM0MztcdGd1YXJkKHJjdSkoKTtcbiYjNDM7XG4mIzQzO1x0Y3RybF9wdHAgPSBpY2VfZ2V0X2N0cmxfcHRwKHBmKTtcbiBcdGlmICghY3RybF9wdHApXG4gXHRcdHJldHVybiAtMTtcbiYjNDM7XG4gXHRjbG9jayA9IGN0cmxfcHRwLVx1MDAzZWNsb2NrO1xuIFxuIFx0cmV0dXJuIGNsb2NrID8gcHRwX2Nsb2NrX2luZGV4KGNsb2NrKSA6IC0xO1xuQEAgLTMzNzMsNyAmIzQzOzM0MTMsOSBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBlcnJfY2xlYW5fcGY6XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnB0cC1cdTAwM2Vwb3J0LnBzX2xvY2spO1xuIFx0aWNlX3B0cF9jbGVhbnVwX3BmKHBmKTtcbiYjNDM7XG4gZXJyX2V4aXQ6XG4mIzQzO1x0aWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIocGYpO1xuIFx0LyogSWYgd2UgcmVnaXN0ZXJlZCBhIFBUUCBjbG9jaywgcmVsZWFzZSBpdCAqL1xuIFx0aWYgKHBmLVx1MDAzZXB0cC5jbG9jaykge1xuIFx0XHRwdHBfY2xvY2tfdW5yZWdpc3RlcihwdHAtXHUwMDNlY2xvY2spO1xuQEAgLTM0MDEsNiAmIzQzOzM0NDMsNyBAQCB2b2lkIGljZV9wdHBfcmVsZWFzZShzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdGlmIChwZi1cdTAwM2VwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSkge1xuIFx0XHRtdXRleF9kZXN0cm95KFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnBzX2xvY2spO1xuIFx0XHRpY2VfcHRwX2NsZWFudXBfcGYocGYpO1xuJiM0MztcdFx0aWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIocGYpO1xuIFx0XHRpZiAocGYtXHUwMDNlcHRwLmNsb2NrKSB7XG4gXHRcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIocGYtXHUwMDNlcHRwLmNsb2NrKTtcbiBcdFx0XHRwZi1cdTAwM2VwdHAuY2xvY2sgPSBOVUxMO1xuQEAgLTM0MTUsNiAmIzQzOzM0NTgsOCBAQCB2b2lkIGljZV9wdHBfcmVsZWFzZShzdHJ1Y3QgaWNlX3BmICpwZilcbiBcbiBcdGljZV9wdHBfY2xlYW51cF9wZihwZik7XG4gXG4mIzQzO1x0aWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIocGYpO1xuJiM0MztcbiBcdGljZV9wdHBfcmVsZWFzZV90eF90cmFja2VyKHBmLCBcdTAwMjZwZi1cdTAwM2VwdHAucG9ydC50eCk7XG4gXG4gXHRpY2VfcHRwX2Rpc2FibGVfYWxsX2V4dHRzKHBmKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuaW5kZXggM2E0MWM3MTFlNzUxYi4uNjJlMjc5YzE5MmFjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbkBAIC0xLDggJiM0MzsxLDEwIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEludGVsIENvcnBvcmF0aW9uLiAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aWNlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpY2VfY29tbW9uLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpY2VfcHRwX2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpY2VfcHRwX2NvbnN0cy5oXCYjMzQ7XG5AQCAtMzM1LDYgJiM0MzszMzcsOCBAQCB2b2lkIGljZV9wdHBfc3JjX2NtZChzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfcHRwX3Rtcl9jbWQgY21kKVxuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBpY2VfcGYsIGh3KTtcbiBcdHUzMiBjbWRfdmFsID0gaWNlX3B0cF90bXJfY21kX3RvX3NyY19yZWcoaHcsIGNtZCk7XG4gXG4mIzQzO1x0Z3VhcmQocmN1KSgpO1xuJiM0MztcbiBcdGlmICghaWNlX2lzX3ByaW1hcnkoaHcpKVxuIFx0XHRodyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7XG4gXG5AQCAtMzUzLDYgJiM0MzszNTcsOCBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX2V4ZWNfdG1yX2NtZChzdHJ1Y3QgaWNlX2h3ICpodylcbiB7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGljZV9wZiwgaHcpO1xuIFxuJiM0MztcdGd1YXJkKHJjdSkoKTtcbiYjNDM7XG4gXHRpZiAoIWljZV9pc19wcmltYXJ5KGh3KSlcbiBcdFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xuIFxuQEAgLTIwMDQsOCAmIzQzOzIwMTAsMTQgQEAgc3RhdGljIGludCBpY2VfcmVhZF9waHlfYW5kX3BoY190aW1lX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCxcbiBcdFx0em8gPSByZDMyKGh3LCBHTFRTWU5fU0hUSU1FXzAodG1yX2lkeCkpO1xuIFx0XHRsbyA9IHJkMzIoaHcsIEdMVFNZTl9TSFRJTUVfTCh0bXJfaWR4KSk7XG4gXHR9IGVsc2Uge1xuLVx0XHR6byA9IHJkMzIoaWNlX2dldF9wcmltYXJ5X2h3KHBmKSwgR0xUU1lOX1NIVElNRV8wKHRtcl9pZHgpKTtcbi1cdFx0bG8gPSByZDMyKGljZV9nZXRfcHJpbWFyeV9odyhwZiksIEdMVFNZTl9TSFRJTUVfTCh0bXJfaWR4KSk7XG4mIzQzO1x0XHRzdHJ1Y3QgaWNlX2h3ICpwcmlfaHc7XG4mIzQzO1xuJiM0MztcdFx0Z3VhcmQocmN1KSgpO1xuJiM0MztcbiYjNDM7XHRcdHByaV9odyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7XG4mIzQzO1xuJiM0MztcdFx0em8gPSByZDMyKHByaV9odywgR0xUU1lOX1NIVElNRV8wKHRtcl9pZHgpKTtcbiYjNDM7XHRcdGxvID0gcmQzMihwcmlfaHcsIEdMVFNZTl9TSFRJTUVfTCh0bXJfaWR4KSk7XG4gXHR9XG4gXHQqcGhjX3RpbWUgPSAodTY0KWxvIFx1MDAzY1x1MDAzYyAzMiB8IHpvO1xuIFxuQEAgLTIxNzMsOCAmIzQzOzIxODUsMTQgQEAgaW50IGljZV9zdGFydF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0KVxuIFx0XHRsbyA9IHJkMzIoaHcsIEdMVFNZTl9JTkNWQUxfTCh0bXJfaWR4KSk7XG4gXHRcdGhpID0gcmQzMihodywgR0xUU1lOX0lOQ1ZBTF9IKHRtcl9pZHgpKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGxvID0gcmQzMihpY2VfZ2V0X3ByaW1hcnlfaHcocGYpLCBHTFRTWU5fSU5DVkFMX0wodG1yX2lkeCkpO1xuLVx0XHRoaSA9IHJkMzIoaWNlX2dldF9wcmltYXJ5X2h3KHBmKSwgR0xUU1lOX0lOQ1ZBTF9IKHRtcl9pZHgpKTtcbiYjNDM7XHRcdHN0cnVjdCBpY2VfaHcgKnByaV9odztcbiYjNDM7XG4mIzQzO1x0XHRndWFyZChyY3UpKCk7XG4mIzQzO1xuJiM0MztcdFx0cHJpX2h3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcbiYjNDM7XG4mIzQzO1x0XHRsbyA9IHJkMzIocHJpX2h3LCBHTFRTWU5fSU5DVkFMX0wodG1yX2lkeCkpO1xuJiM0MztcdFx0aGkgPSByZDMyKHByaV9odywgR0xUU1lOX0lOQ1ZBTF9IKHRtcl9pZHgpKTtcbiBcdH1cbiBcdGluY3ZhbCA9ICh1NjQpaGkgXHUwMDNjXHUwMDNjIDMyIHwgbG87XG4gXG5AQCAtNTMwMCw2ICYjNDM7NTMxOCw5IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfaW5pdF9waHlfZTgzMChzdHJ1Y3QgaWNlX3B0cF9odyAqcHRwKVxuICAqXG4gICogU29mdHdhcmUgbXVzdCBjbGVhciB0aGUgYnVzeSBiaXQgd2l0aCBhIHdyaXRlIHRvIHJlbGVhc2UgdGhlIGxvY2sgZm9yIG90aGVyXG4gICogZnVuY3Rpb25zIHdoZW4gZG9uZS5cbiYjNDM7ICpcbiYjNDM7ICogQSBzdWNjZXNzZnVsIGNhbGwgaG9sZHMgYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2sgZm9yIHJlYWQgdW50aWxcbiYjNDM7ICogaWNlX3B0cF91bmxvY2soKSBpcyBjYWxsZWQuXG4gICovXG4gYm9vbCBpY2VfcHRwX2xvY2soc3RydWN0IGljZV9odyAqaHcpXG4ge1xuQEAgLTUzMDcsNiAmIzQzOzUzMjgsOCBAQCBib29sIGljZV9wdHBfbG9jayhzdHJ1Y3QgaWNlX2h3ICpodylcbiBcdHUzMiBod19sb2NrO1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0ZG93bl9yZWFkKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbiYjNDM7XG4gXHRpZiAoIWljZV9pc19wcmltYXJ5KGh3KSlcbiBcdFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xuIFxuQEAgLTUzMjQsNiAmIzQzOzUzNDcsOSBAQCBib29sIGljZV9wdHBfbG9jayhzdHJ1Y3QgaWNlX2h3ICpodylcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGh3X2xvY2spXG4mIzQzO1x0XHR1cF9yZWFkKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbiYjNDM7XG4gXHRyZXR1cm4gIWh3X2xvY2s7XG4gfVxuIFxuQEAgLTUzMzgsMTAgJiM0Mzs1MzY0LDEzIEBAIHZvaWQgaWNlX3B0cF91bmxvY2soc3RydWN0IGljZV9odyAqaHcpXG4ge1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBpY2VfcGYsIGh3KTtcbiBcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbiYjNDM7XG4gXHRpZiAoIWljZV9pc19wcmltYXJ5KGh3KSlcbiBcdFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xuIFxuIFx0d3IzMihodywgUEZUU1lOX1NFTSAmIzQzOyAoUEZUU1lOX1NFTV9CWVRFUyAqIGh3LVx1MDAzZXBmX2lkKSwgMCk7XG4mIzQzO1x0dXBfcmVhZChcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jayk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhjbGsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhjbGsuY1xuaW5kZXggNDg0NTlmOTcxY2JmOS4uNmQzMGQyZjNmMmE4YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhjbGsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eGNsay5jXG5AQCAtNDEsNiAmIzQzOzQxLDcgQEAgaWNlX3R4Y2xrX2dldF9waW4oc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgcmVmX2NsaylcbiAvKipcbiAgKiBpY2VfdHhjbGtfZW5hYmxlX3BlZXIgLSBFbmFibGUgcmVxdWlyZWQgVFggcmVmZXJlbmNlIGNsb2NrIG9uIHBlZXIgUEhZXG4gICogQHBmOiBwb2ludGVyIHRvIHRoZSBQRiBzdHJ1Y3R1cmVcbiYjNDM7ICogQGN0cmxfcGY6IGNvbnRyb2wgUEYgcHJvdGVjdGVkIGJ5IGFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrXG4gICogQGNsazogVFggcmVmZXJlbmNlIGNsb2NrIHRoYXQgbXVzdCBiZSBlbmFibGVkXG4gICpcbiAgKiBTb21lIFRYIHJlZmVyZW5jZSBjbG9ja3Mgb24gRTgyNS1jbGFzcyBkZXZpY2VzIChTeW5jRSBhbmQgRVJFRjApIG11c3RcbkBAIC01NCwxMyAmIzQzOzU1LDE1IEBAIGljZV90eGNsa19nZXRfcGluKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIHJlZl9jbGspXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4gICovXG4tc3RhdGljIGludCBpY2VfdHhjbGtfZW5hYmxlX3BlZXIoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKVxuJiM0MztzdGF0aWMgaW50IGljZV90eGNsa19lbmFibGVfcGVlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wZiAqY3RybF9wZixcbiYjNDM7XHRcdFx0XHQgZW51bSBpY2VfZTgyNWNfcmVmX2NsayBjbGspXG4ge1xuLVx0c3RydWN0IGljZV9wZiAqY3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7XG4gXHRib29sIHBlZXJfY2xrX2luX3VzZTtcbiBcdHU4IHBvcnRfbnVtLCBwaHk7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2spO1xuJiM0MztcbiBcdGlmIChjbGsgPT0gSUNFX1JFRl9DTEtfRU5FVClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTE4LDEyICYjNDM7MTIxLDE1IEBAIHN0YXRpYyBpbnQgaWNlX3R4Y2xrX2VuYWJsZV9wZWVyKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaylcbiAgKi9cbiBpbnQgaWNlX3R4Y2xrX3NldF9jbGsoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKVxuIHtcbi1cdHN0cnVjdCBpY2VfcGYgKmN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpO1xuIFx0c3RydWN0IGljZV9wb3J0X2luZm8gKnBvcnRfaW5mbztcbiYjNDM7XHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmO1xuIFx0Ym9vbCBjbGtfaW5fdXNlO1xuIFx0dTggcG9ydF9udW0sIHBoeTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2spO1xuJiM0MztcdGN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpO1xuJiM0MztcbiBcdGlmIChwZi1cdTAwM2VwdHAucG9ydC50eF9jbGsgPT0gY2xrKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0xNjQsNyAmIzQzOzE3MCw3IEBAIGludCBpY2VfdHhjbGtfc2V0X2NsayhzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfZTgyNWNfcmVmX2NsayBjbGspXG4gXHRtdXRleF91bmxvY2soXHUwMDI2Y3RybF9wZi1cdTAwM2VkcGxscy5sb2NrKTtcbiBcbiBcdGlmICghY2xrX2luX3VzZSkge1xuLVx0XHRlcnIgPSBpY2VfdHhjbGtfZW5hYmxlX3BlZXIocGYsIGNsayk7XG4mIzQzO1x0XHRlcnIgPSBpY2VfdHhjbGtfZW5hYmxlX3BlZXIocGYsIGN0cmxfcGYsIGNsayk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0yMTUsMTUgJiM0MzsyMjEsMTggQEAgaW50IGljZV90eGNsa19zZXRfY2xrKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaylcbiB2b2lkIGljZV90eGNsa191cGRhdGVfYW5kX25vdGlmeShzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydCA9IFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0O1xuLVx0c3RydWN0IGljZV9wZiAqY3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7XG4gXHRzdHJ1Y3QgZHBsbF9waW4gKm9sZF9waW4gPSBOVUxMO1xuIFx0c3RydWN0IGRwbGxfcGluICpuZXdfcGluID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmO1xuIFx0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbiBcdGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrO1xuIFx0Ym9vbCBub3RpZnlfZHBsbCA9IGZhbHNlO1xuIFx0aW50IGVycjtcbiBcdHU4IHBoeTtcbiBcbiYjNDM7XHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jayk7XG4mIzQzO1x0Y3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7XG4mIzQzO1xuIFx0cGh5ID0gcHRwX3BvcnQtXHUwMDNlcG9ydF9udW0gLyBody1cdTAwM2VwdHAucG9ydHNfcGVyX3BoeTtcbiBcbiBcdC8qIEhvbGQgdHhjbGtfbm90aWZ5X3J3c2VtIGZvciByZWFkIGFjcm9zcyB0aGUgZW50aXJlIGNyaXRpY2FsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBzZXJpZXMgKGljZSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIHBoeXNpY2FsIEludGVsIFBDSWUgbmV0d29yayBhZGFwdGVycyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiOWQ4Y2Y5YzdjYjBjODE1YWUxZDRkZWY5ODc4ODBkM2YzMjZkMWYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMSAwMDozODo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaAppbmRleCBkYjNjNzAxNWM1NmM0Li5jMTRiYjFlYjI3MWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oCkBAIC00MCw2ICYjNDM7NDAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NwdV9ybWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGltLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZ25zcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wa3RfY2xzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfbWlycmVkLmgmZ3Q7CkBAIC0xMTQ4LDI2ICYjNDM7MTE0OSw0NCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaWNlX3BmX3NyY190bXJfb3duZWQoc3RydWN0IGljZV9wZiAqcGYpCiAgKiBpY2VfZ2V0X3ByaW1hcnlfaHcgLSBHZXQgcG9pbnRlciB0byBwcmltYXJ5IGljZV9odyBzdHJ1Y3R1cmUKICAqIEBwZjogcG9pbnRlciB0byBQRiBzdHJ1Y3R1cmUKICAqCiYjNDM7ICogVGhlIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIG9yCiYjNDM7ICogd2hpbGUgaG9sZGluZyBhZGFwdGVyLSZndDtjdHJsX3BmX2xvY2suCiYjNDM7ICogaHcgaXMgZW1iZWRkZWQgaW4gc3RydWN0IGljZV9wZiwgc28gZWl0aGVyIG1lY2hhbmlzbSBwcm90ZWN0cyBpdHMgbGlmZXRpbWUuCiYjNDM7ICoKICAqIFJldHVybjogQSBwb2ludGVyIHRvIGljZV9odyBzdHJ1Y3R1cmUgd2l0aCBhY2Nlc3MgdG8gdGltZXN5bmMKICAqIHJlZ2lzdGVyIHNwYWNlLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpY2VfaHcgKmljZV9nZXRfcHJpbWFyeV9odyhzdHJ1Y3QgaWNlX3BmICpwZikKIHsKLQlpZiAoIXBmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmKQomIzQzOwlzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmOwomIzQzOwomIzQzOwljdHJsX3BmID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHBmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmLAomIzQzOwkJCQkJbG9ja2RlcF9pc19oZWxkKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGZfbG9jaykpOwomIzQzOwomIzQzOwlpZiAoIWN0cmxfcGYpCiAJCXJldHVybiAmYW1wO3BmLSZndDtodzsKIAllbHNlCi0JCXJldHVybiAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmLSZndDtodzsKJiM0MzsJCXJldHVybiAmYW1wO2N0cmxfcGYtJmd0O2h3OwogfQogCiAvKioKICAqIGljZV9nZXRfY3RybF9wZiAtIEdldCBwb2ludGVyIHRvIENvbnRyb2wgUEYgb2YgdGhlIGFkYXB0ZXIKICAqIEBwZjogcG9pbnRlciB0byB0aGUgY3VycmVudCBQRiBzdHJ1Y3R1cmUKICAqCiYjNDM7ICogVGhlIGNvbnRyb2wgUEYgaXMgdGhlIFBGIHdoaWNoIG93bnMgdGhlIFBUUCBjbG9jayBmb3IgdGhlIGFkYXB0ZXIuCiYjNDM7ICogT25seSB0aGUgY29udHJvbCBQRiBpcyBhbGxvd2VkIHRvIHBlcmZvcm0gY2VydGFpbiBvcGVyYXRpb25zIG9uIHRoZQomIzQzOyAqIFBUUCBjbG9jayBzdWNoIGFzIGFkanVzdGluZyB0aGUgdGltZSBvciBjb25maWd1cmluZyB0aGUgcGlucy4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gb3IKJiM0MzsgKiB3aGlsZSBob2xkaW5nIGFkYXB0ZXItJmd0O2N0cmxfcGZfbG9jay4KJiM0MzsgKgogICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gaWNlX3BmIHN0cnVjdHVyZSB3aGljaCBpcyBDb250cm9sIFBGLAogICogTlVMTCBpZiBpdCYjMzk7cyBub3QgaW5pdGlhbGl6ZWQgeWV0LgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpY2VfcGYgKmljZV9nZXRfY3RybF9wZihzdHJ1Y3QgaWNlX3BmICpwZikKIHsKLQlyZXR1cm4gIXBmLSZndDthZGFwdGVyID8gTlVMTCA6IHBmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmOwomIzQzOwlyZXR1cm4gIXBmLSZndDthZGFwdGVyID8gTlVMTCA6CiYjNDM7CQlyY3VfZGVyZWZlcmVuY2VfY2hlY2socGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGYsCiYjNDM7CQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmYW1wO3BmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmX2xvY2spKTsKIH0KICNlbmRpZiAvKiBfSUNFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jCmluZGV4IDJkYzM2MjlkNmQwZjYuLjgwY2I4ZGM2YjgxYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jCkBAIC02Niw2ICYjNDM7NjYsNyBAQCBzdGF0aWMgc3RydWN0IGljZV9hZGFwdGVyICppY2VfYWRhcHRlcl9uZXcoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCW11dGV4X2luaXQoJmFtcDthZGFwdGVyLSZndDtjcGlfcGh5X2xvY2tbaV0pOwogCXJlZmNvdW50X3NldCgmYW1wO2FkYXB0ZXItJmd0O3JlZmNvdW50LCAxKTsKIAomIzQzOwlpbml0X3J3c2VtKCZhbXA7YWRhcHRlci0mZ3Q7Y3RybF9wZl9sb2NrKTsKIAltdXRleF9pbml0KCZhbXA7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDthZGFwdGVyLSZndDtwb3J0cy5wb3J0cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmgKaW5kZXggNGY2OTVmMzJkYTNkOC4uYjFhZjU5NzE4NDgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmgKQEAgLTYsNiAmIzQzOzYsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yd3NlbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrX3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVmY291bnRfdHlwZXMuaCZndDsKIApAQCAtMzYsNiAmIzQzOzM3LDcgQEAgc3RydWN0IGljZV9wb3J0X2xpc3QgewogICogQHR4cV9jdHhfbG9jazogU3BpbmxvY2sgcHJvdGVjdGluZyBhY2Nlc3MgdG8gdGhlIEdMQ09NTV9RVFhfQ05UWF9DVEwgcmVnaXN0ZXIKICAqIEBjcGlfcGh5X2xvY2s6IFBlci1QSFkgbXV0ZXggc2VyaWFsaXppbmcgQ1BJIFJFUS9BQ0sgdHJhbnNhY3Rpb25zLgogICogICAgICAgICAgICAgICBJbmRleCAwID0gUEhZMCwgaW5kZXggMSA9IFBIWTEuIFVzZWQgb24gRTgyNUMgZGV2aWNlcy4KJiM0MzsgKiBAY3RybF9wZl9sb2NrOiBQcm90ZWN0IGNvbnRyb2wgUEYgbGlmZXRpbWUgZm9yIHNsZWVwYWJsZSB1c2VycwogICogQGN0cmxfcGY6IENvbnRyb2wgUEYgb2YgdGhlIGFkYXB0ZXIKICAqIEBwb3J0czogUG9ydHMgbGlzdAogICogQGluZGV4OiA2NC1iaXQgaW5kZXggY2FjaGVkIGZvciBjb2xsaXNpb24gZGV0ZWN0aW9uIG9uIDMyYml0IHN5c3RlbXMKQEAgLTQ5LDcgJiM0Mzs1MSw4IEBAIHN0cnVjdCBpY2VfYWRhcHRlciB7CiAJLyogU2VyaWFsaXplIENQSSBSRVEvQUNLIHRyYW5zYWN0aW9ucyBwZXIgUEhZIChFODI1QyBvbmx5KSAqLwogCXN0cnVjdCBtdXRleCBjcGlfcGh5X2xvY2tbSUNFX0U4MjVfTUFYX1BIWVNdOwogCi0Jc3RydWN0IGljZV9wZiAqY3RybF9wZjsKJiM0MzsJc3RydWN0IHJ3X3NlbWFwaG9yZSBjdHJsX3BmX2xvY2s7CiYjNDM7CXN0cnVjdCBpY2VfcGYgX19yY3UgKmN0cmxfcGY7CiAJc3RydWN0IGljZV9wb3J0X2xpc3QgcG9ydHM7CiAJdTY0IGluZGV4OwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jCmluZGV4IGVhZWMzNmFiNmFlM2YuLjQ4Mjk2YTRhOGFiZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYwpAQCAtMSw2ICYjNDM7MSw3IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogLyogQ29weXJpZ2h0IChDKSAyMDIxLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwogI2luY2x1ZGUgJiMzNDtpY2UuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2ljZV9saWIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2ljZV90cmFjZS5oJiMzNDsKQEAgLTU1LDYgJiM0Mzs1NiwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9wdHBfcGluX2Rlc2MgaWNlX3Bpbl9kZXNjX2RwbGxbXSA9IHsKIAl7ICBTRFAzLCB7ICAzLCAtMSB9LCB7IDAsIDAgfX0sCiB9OwogCiYjNDM7LyoqCiYjNDM7ICogaWNlX2dldF9jdHJsX3B0cCAtIEdldCB0aGUgUFRQIHN0cnVjdHVyZSBmb3IgdGhlIGNvbnRyb2wgUEYKJiM0MzsgKiBAcGY6IFRoZSBQRiBwb2ludGVyIHRvIGxvb2sgdXAgYXQKJiM0MzsgKgomIzQzOyAqIFRoZSBjb250cm9sIFBGIGlzIHRoZSBQRiB3aGljaCBvd25zIHRoZSBQVFAgY2xvY2sgZm9yIHRoZSBhZGFwdGVyLgomIzQzOyAqIE9ubHkgdGhlIGNvbnRyb2wgUEYgaXMgYWxsb3dlZCB0byBwZXJmb3JtIGNlcnRhaW4gb3BlcmF0aW9ucyBvbiB0aGUKJiM0MzsgKiBQVFAgY2xvY2sgc3VjaCBhcyBhZGp1c3RpbmcgdGhlIHRpbWUgb3IgY29uZmlndXJpbmcgdGhlIHBpbnMuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIG9yCiYjNDM7ICogd2hpbGUgaG9sZGluZyBhZGFwdGVyLSZndDtjdHJsX3BmX2xvY2suCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFBvaW50ZXIgdG8gdGhlIFBUUCBzdHJ1Y3R1cmUgb2YgdGhlIGNvbnRyb2wgUEYsIG9yIE5VTEwgaWYgbm90IGZvdW5kCiYjNDM7ICovCiBzdGF0aWMgc3RydWN0IGljZV9wdHAgKmljZV9nZXRfY3RybF9wdHAoc3RydWN0IGljZV9wZiAqcGYpCiB7CiAJc3RydWN0IGljZV9wZiAqY3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7CkBAIC0yMDMsMzkgJiM0MzsyMTcsNDIgQEAgdTY0IGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyhzdHJ1Y3QgaWNlX3BmICpwZiwKIAl1MzIgaGksIGxvLCBsbzI7CiAJdTggdG1yX2lkeDsKIAotCWlmICghaWNlX2lzX3ByaW1hcnkoaHcpKQotCQlodyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7CiYjNDM7CXNjb3BlZF9ndWFyZChyY3UpIHsKJiM0MzsJCWlmICghaWNlX2lzX3ByaW1hcnkoaHcpKQomIzQzOwkJCWh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTsKIAotCXRtcl9pZHggPSBpY2VfZ2V0X3B0cF9zcmNfY2xvY2tfaW5kZXgoaHcpOwotCWd1YXJkKHNwaW5sb2NrKSgmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwdHBfZ2x0c3luX3RpbWVfbG9jayk7Ci0JLyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwcmUgUEhDIHJlYWQgKi8KLQlwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTsKLQotCWlmIChody0mZ3Q7bWFjX3R5cGUgPT0gSUNFX01BQ19FODMwKSB7Ci0JCXU2NCBjbGtfdGltZSA9IHJkNjQoaHcsIEU4MzBfR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7Ci0KLQkJLyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwb3N0IFBIQyByZWFkICovCi0JCXB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTsKLQotCQlyZXR1cm4gY2xrX3RpbWU7Ci0JfQomIzQzOwkJdG1yX2lkeCA9IGljZV9nZXRfcHRwX3NyY19jbG9ja19pbmRleChodyk7CiYjNDM7CQlndWFyZChzcGlubG9jaykoJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cHRwX2dsdHN5bl90aW1lX2xvY2spOwomIzQzOwkJLyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwcmUgUEhDIHJlYWQgKi8KJiM0MzsJCXB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpOwogCi0JbG8gPSByZDMyKGh3LCBHTFRTWU5fVElNRV9MKHRtcl9pZHgpKTsKJiM0MzsJCWlmIChody0mZ3Q7bWFjX3R5cGUgPT0gSUNFX01BQ19FODMwKSB7CiYjNDM7CQkJdTY0IGNsa190aW1lID0gcmQ2NChodywgRTgzMF9HTFRTWU5fVElNRV9MKHRtcl9pZHgpKTsKIAotCS8qIFJlYWQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgcG9zdCBQSEMgcmVhZCAqLwotCXB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTsKJiM0MzsJCQkvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHBvc3QgUEhDIHJlYWQgKi8KJiM0MzsJCQlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiAKLQloaSA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0godG1yX2lkeCkpOwotCWxvMiA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0wodG1yX2lkeCkpOwomIzQzOwkJCXJldHVybiBjbGtfdGltZTsKJiM0MzsJCX0KIAotCWlmIChsbzIgJmx0OyBsbykgewotCQkvKiBpZiBUSU1FX0wgcm9sbGVkIG92ZXIgcmVhZCBUSU1FX0wgYWdhaW4gYW5kIHVwZGF0ZQotCQkgKiBzeXN0ZW0gdGltZXN0YW1wcwotCQkgKi8KLQkJcHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7CiAJCWxvID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7CiYjNDM7CiYjNDM7CQkvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHBvc3QgUEhDIHJlYWQgKi8KIAkJcHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpOwomIzQzOwogCQloaSA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0godG1yX2lkeCkpOwomIzQzOwkJbG8yID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7CiYjNDM7CiYjNDM7CQlpZiAobG8yICZsdDsgbG8pIHsKJiM0MzsJCQkvKiBpZiBUSU1FX0wgcm9sbGVkIG92ZXIgcmVhZCBUSU1FX0wgYWdhaW4gYW5kIHVwZGF0ZQomIzQzOwkJCSAqIHN5c3RlbSB0aW1lc3RhbXBzCiYjNDM7CQkJICovCiYjNDM7CQkJcHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7CiYjNDM7CQkJbG8gPSByZDMyKGh3LCBHTFRTWU5fVElNRV9MKHRtcl9pZHgpKTsKJiM0MzsJCQlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiYjNDM7CQkJaGkgPSByZDMyKGh3LCBHTFRTWU5fVElNRV9IKHRtcl9pZHgpKTsKJiM0MzsJCX0KJiM0MzsKIAl9CiAKIAlyZXR1cm4gKCh1NjQpaGkgJmx0OyZsdDsgMzIpIHwgbG87CkBAIC0zMDY4LDE0ICYjNDM7MzA4NSwzMyBAQCB2b2lkIGljZV9wdHBfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpCiAKIHN0YXRpYyB2b2lkIGljZV9wdHBfc2V0dXBfYWRhcHRlcihzdHJ1Y3QgaWNlX3BmICpwZikKIHsKLQlwZi0mZ3Q7YWRhcHRlci0mZ3Q7Y3RybF9wZiA9IHBmOwomIzQzOwlndWFyZChyd3NlbV93cml0ZSkoJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7Y3RybF9wZl9sb2NrKTsKJiM0MzsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKHBmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmLCBwZik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGljZV9wdHBfY2xlYW51cF9hZGFwdGVyKHN0cnVjdCBpY2VfcGYgKnBmKQomIzQzO3sKJiM0MzsJZ3VhcmQocndzZW1fd3JpdGUpKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGZfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFplcm8gb3V0IGFkYXB0ZXItJmd0O2N0cmxfcGYgcG9pbnRlciB3aGVuIHRoZSBjdHJsX3BmIGl0c2VsZgomIzQzOwkgKiBpcyBiZWluZyByZW1vdmVkIHRvIHByZXZlbnQgYW55IHNlY29uZGFyeSBQRnMgZnJvbSBhY2Nlc3NpbmcKJiM0MzsJICogaXQgYWZ0ZXIgaXQgaXMgZGVsZXRlZC4KJiM0MzsJICovCiYjNDM7CWlmIChjbXB4Y2hnKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGYsCiYjNDM7CQkgICAgKHN0cnVjdCBpY2VfcGYgX19yY3UgKilwZiwgTlVMTCkgPT0KJiM0MzsJCQkoc3RydWN0IGljZV9wZiBfX3JjdSAqKXBmKQomIzQzOwkJc3luY2hyb25pemVfcmN1KCk7CiB9CiAKIHN0YXRpYyBpbnQgaWNlX3B0cF9zZXR1cF9wZihzdHJ1Y3QgaWNlX3BmICpwZikKIHsKLQlzdHJ1Y3QgaWNlX3B0cCAqY3RybF9wdHAgPSBpY2VfZ2V0X2N0cmxfcHRwKHBmKTsKIAlzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gJmFtcDtwZi0mZ3Q7cHRwOwomIzQzOwlzdHJ1Y3QgaWNlX3B0cCAqY3RybF9wdHA7CiYjNDM7CiYjNDM7CWd1YXJkKHJ3c2VtX3JlYWQpKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGZfbG9jayk7CiAKJiM0MzsJY3RybF9wdHAgPSBpY2VfZ2V0X2N0cmxfcHRwKHBmKTsKIAlpZiAoIWN0cmxfcHRwKSB7CiAJCWRldl9pbmZvKGljZV9wZl90b19kZXYocGYpLAogCQkJICYjMzQ7UFRQIHVuYXZhaWxhYmxlOiBubyBjb250cm9sbGluZyBQRlxuJiMzNDspOwpAQCAtMzEzMCwxMSAmIzQzOzMxNjYsMTUgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9jbGVhbnVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKQogICovCiBpbnQgaWNlX3B0cF9jbG9ja19pbmRleChzdHJ1Y3QgaWNlX3BmICpwZikKIHsKLQlzdHJ1Y3QgaWNlX3B0cCAqY3RybF9wdHAgPSBpY2VfZ2V0X2N0cmxfcHRwKHBmKTsKJiM0MzsJc3RydWN0IGljZV9wdHAgKmN0cmxfcHRwOwogCXN0cnVjdCBwdHBfY2xvY2sgKmNsb2NrOwogCiYjNDM7CWd1YXJkKHJjdSkoKTsKJiM0MzsKJiM0MzsJY3RybF9wdHAgPSBpY2VfZ2V0X2N0cmxfcHRwKHBmKTsKIAlpZiAoIWN0cmxfcHRwKQogCQlyZXR1cm4gLTE7CiYjNDM7CiAJY2xvY2sgPSBjdHJsX3B0cC0mZ3Q7Y2xvY2s7CiAKIAlyZXR1cm4gY2xvY2sgPyBwdHBfY2xvY2tfaW5kZXgoY2xvY2spIDogLTE7CkBAIC0zMzczLDcgJiM0MzszNDEzLDkgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpCiBlcnJfY2xlYW5fcGY6CiAJbXV0ZXhfZGVzdHJveSgmYW1wO3B0cC0mZ3Q7cG9ydC5wc19sb2NrKTsKIAlpY2VfcHRwX2NsZWFudXBfcGYocGYpOwomIzQzOwogZXJyX2V4aXQ6CiYjNDM7CWljZV9wdHBfY2xlYW51cF9hZGFwdGVyKHBmKTsKIAkvKiBJZiB3ZSByZWdpc3RlcmVkIGEgUFRQIGNsb2NrLCByZWxlYXNlIGl0ICovCiAJaWYgKHBmLSZndDtwdHAuY2xvY2spIHsKIAkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIocHRwLSZndDtjbG9jayk7CkBAIC0zNDAxLDYgJiM0MzszNDQzLDcgQEAgdm9pZCBpY2VfcHRwX3JlbGVhc2Uoc3RydWN0IGljZV9wZiAqcGYpCiAJaWYgKHBmLSZndDtwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSkgewogCQltdXRleF9kZXN0cm95KCZhbXA7cGYtJmd0O3B0cC5wb3J0LnBzX2xvY2spOwogCQlpY2VfcHRwX2NsZWFudXBfcGYocGYpOwomIzQzOwkJaWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIocGYpOwogCQlpZiAocGYtJmd0O3B0cC5jbG9jaykgewogCQkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIocGYtJmd0O3B0cC5jbG9jayk7CiAJCQlwZi0mZ3Q7cHRwLmNsb2NrID0gTlVMTDsKQEAgLTM0MTUsNiAmIzQzOzM0NTgsOCBAQCB2b2lkIGljZV9wdHBfcmVsZWFzZShzdHJ1Y3QgaWNlX3BmICpwZikKIAogCWljZV9wdHBfY2xlYW51cF9wZihwZik7CiAKJiM0MzsJaWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIocGYpOwomIzQzOwogCWljZV9wdHBfcmVsZWFzZV90eF90cmFja2VyKHBmLCAmYW1wO3BmLSZndDtwdHAucG9ydC50eCk7CiAKIAlpY2VfcHRwX2Rpc2FibGVfYWxsX2V4dHRzKHBmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jCmluZGV4IDNhNDFjNzExZTc1MWIuLjYyZTI3OWMxOTJhY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYwpAQCAtMSw4ICYjNDM7MSwxMCBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qIENvcHlyaWdodCAoQykgMjAyMSwgSW50ZWwgQ29ycG9yYXRpb24uICovCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtpY2UuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2ljZV9jb21tb24uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2ljZV9wdHBfaHcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2ljZV9wdHBfY29uc3RzLmgmIzM0OwpAQCAtMzM1LDYgJiM0MzszMzcsOCBAQCB2b2lkIGljZV9wdHBfc3JjX2NtZChzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfcHRwX3Rtcl9jbWQgY21kKQogCXN0cnVjdCBpY2VfcGYgKnBmID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgaWNlX3BmLCBodyk7CiAJdTMyIGNtZF92YWwgPSBpY2VfcHRwX3Rtcl9jbWRfdG9fc3JjX3JlZyhodywgY21kKTsKIAomIzQzOwlndWFyZChyY3UpKCk7CiYjNDM7CiAJaWYgKCFpY2VfaXNfcHJpbWFyeShodykpCiAJCWh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTsKIApAQCAtMzUzLDYgJiM0MzszNTcsOCBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX2V4ZWNfdG1yX2NtZChzdHJ1Y3QgaWNlX2h3ICpodykKIHsKIAlzdHJ1Y3QgaWNlX3BmICpwZiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGljZV9wZiwgaHcpOwogCiYjNDM7CWd1YXJkKHJjdSkoKTsKJiM0MzsKIAlpZiAoIWljZV9pc19wcmltYXJ5KGh3KSkKIAkJaHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpOwogCkBAIC0yMDA0LDggJiM0MzsyMDEwLDE0IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcGh5X2FuZF9waGNfdGltZV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsCiAJCXpvID0gcmQzMihodywgR0xUU1lOX1NIVElNRV8wKHRtcl9pZHgpKTsKIAkJbG8gPSByZDMyKGh3LCBHTFRTWU5fU0hUSU1FX0wodG1yX2lkeCkpOwogCX0gZWxzZSB7Ci0JCXpvID0gcmQzMihpY2VfZ2V0X3ByaW1hcnlfaHcocGYpLCBHTFRTWU5fU0hUSU1FXzAodG1yX2lkeCkpOwotCQlsbyA9IHJkMzIoaWNlX2dldF9wcmltYXJ5X2h3KHBmKSwgR0xUU1lOX1NIVElNRV9MKHRtcl9pZHgpKTsKJiM0MzsJCXN0cnVjdCBpY2VfaHcgKnByaV9odzsKJiM0MzsKJiM0MzsJCWd1YXJkKHJjdSkoKTsKJiM0MzsKJiM0MzsJCXByaV9odyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7CiYjNDM7CiYjNDM7CQl6byA9IHJkMzIocHJpX2h3LCBHTFRTWU5fU0hUSU1FXzAodG1yX2lkeCkpOwomIzQzOwkJbG8gPSByZDMyKHByaV9odywgR0xUU1lOX1NIVElNRV9MKHRtcl9pZHgpKTsKIAl9CiAJKnBoY190aW1lID0gKHU2NClsbyAmbHQ7Jmx0OyAzMiB8IHpvOwogCkBAIC0yMTczLDggJiM0MzsyMTg1LDE0IEBAIGludCBpY2Vfc3RhcnRfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCkKIAkJbG8gPSByZDMyKGh3LCBHTFRTWU5fSU5DVkFMX0wodG1yX2lkeCkpOwogCQloaSA9IHJkMzIoaHcsIEdMVFNZTl9JTkNWQUxfSCh0bXJfaWR4KSk7CiAJfSBlbHNlIHsKLQkJbG8gPSByZDMyKGljZV9nZXRfcHJpbWFyeV9odyhwZiksIEdMVFNZTl9JTkNWQUxfTCh0bXJfaWR4KSk7Ci0JCWhpID0gcmQzMihpY2VfZ2V0X3ByaW1hcnlfaHcocGYpLCBHTFRTWU5fSU5DVkFMX0godG1yX2lkeCkpOwomIzQzOwkJc3RydWN0IGljZV9odyAqcHJpX2h3OwomIzQzOwomIzQzOwkJZ3VhcmQocmN1KSgpOwomIzQzOwomIzQzOwkJcHJpX2h3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTsKJiM0MzsKJiM0MzsJCWxvID0gcmQzMihwcmlfaHcsIEdMVFNZTl9JTkNWQUxfTCh0bXJfaWR4KSk7CiYjNDM7CQloaSA9IHJkMzIocHJpX2h3LCBHTFRTWU5fSU5DVkFMX0godG1yX2lkeCkpOwogCX0KIAlpbmN2YWwgPSAodTY0KWhpICZsdDsmbHQ7IDMyIHwgbG87CiAKQEAgLTUzMDAsNiAmIzQzOzUzMTgsOSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX2luaXRfcGh5X2U4MzAoc3RydWN0IGljZV9wdHBfaHcgKnB0cCkKICAqCiAgKiBTb2Z0d2FyZSBtdXN0IGNsZWFyIHRoZSBidXN5IGJpdCB3aXRoIGEgd3JpdGUgdG8gcmVsZWFzZSB0aGUgbG9jayBmb3Igb3RoZXIKICAqIGZ1bmN0aW9ucyB3aGVuIGRvbmUuCiYjNDM7ICoKJiM0MzsgKiBBIHN1Y2Nlc3NmdWwgY2FsbCBob2xkcyBhZGFwdGVyLSZndDtjdHJsX3BmX2xvY2sgZm9yIHJlYWQgdW50aWwKJiM0MzsgKiBpY2VfcHRwX3VubG9jaygpIGlzIGNhbGxlZC4KICAqLwogYm9vbCBpY2VfcHRwX2xvY2soc3RydWN0IGljZV9odyAqaHcpCiB7CkBAIC01MzA3LDYgJiM0Mzs1MzI4LDggQEAgYm9vbCBpY2VfcHRwX2xvY2soc3RydWN0IGljZV9odyAqaHcpCiAJdTMyIGh3X2xvY2s7CiAJaW50IGk7CiAKJiM0MzsJZG93bl9yZWFkKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGZfbG9jayk7CiYjNDM7CiAJaWYgKCFpY2VfaXNfcHJpbWFyeShodykpCiAJCWh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTsKIApAQCAtNTMyNCw2ICYjNDM7NTM0Nyw5IEBAIGJvb2wgaWNlX3B0cF9sb2NrKHN0cnVjdCBpY2VfaHcgKmh3KQogCQlicmVhazsKIAl9CiAKJiM0MzsJaWYgKGh3X2xvY2spCiYjNDM7CQl1cF9yZWFkKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGZfbG9jayk7CiYjNDM7CiAJcmV0dXJuICFod19sb2NrOwogfQogCkBAIC01MzM4LDEwICYjNDM7NTM2NCwxMyBAQCB2b2lkIGljZV9wdHBfdW5sb2NrKHN0cnVjdCBpY2VfaHcgKmh3KQogewogCXN0cnVjdCBpY2VfcGYgKnBmID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgaWNlX3BmLCBodyk7CiAKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3BmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmX2xvY2spOwomIzQzOwogCWlmICghaWNlX2lzX3ByaW1hcnkoaHcpKQogCQlodyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7CiAKIAl3cjMyKGh3LCBQRlRTWU5fU0VNICYjNDM7IChQRlRTWU5fU0VNX0JZVEVTICogaHctJmd0O3BmX2lkKSwgMCk7CiYjNDM7CXVwX3JlYWQoJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7Y3RybF9wZl9sb2NrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4Y2xrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4Y2xrLmMKaW5kZXggNDg0NTlmOTcxY2JmOS4uNmQzMGQyZjNmMmE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eGNsay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhjbGsuYwpAQCAtNDEsNiAmIzQzOzQxLDcgQEAgaWNlX3R4Y2xrX2dldF9waW4oc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgcmVmX2NsaykKIC8qKgogICogaWNlX3R4Y2xrX2VuYWJsZV9wZWVyIC0gRW5hYmxlIHJlcXVpcmVkIFRYIHJlZmVyZW5jZSBjbG9jayBvbiBwZWVyIFBIWQogICogQHBmOiBwb2ludGVyIHRvIHRoZSBQRiBzdHJ1Y3R1cmUKJiM0MzsgKiBAY3RybF9wZjogY29udHJvbCBQRiBwcm90ZWN0ZWQgYnkgYWRhcHRlci0mZ3Q7Y3RybF9wZl9sb2NrCiAgKiBAY2xrOiBUWCByZWZlcmVuY2UgY2xvY2sgdGhhdCBtdXN0IGJlIGVuYWJsZWQKICAqCiAgKiBTb21lIFRYIHJlZmVyZW5jZSBjbG9ja3Mgb24gRTgyNS1jbGFzcyBkZXZpY2VzIChTeW5jRSBhbmQgRVJFRjApIG11c3QKQEAgLTU0LDEzICYjNDM7NTUsMTUgQEAgaWNlX3R4Y2xrX2dldF9waW4oc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgcmVmX2NsaykKICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgaWNlX3R4Y2xrX2VuYWJsZV9wZWVyKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaykKJiM0MztzdGF0aWMgaW50IGljZV90eGNsa19lbmFibGVfcGVlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wZiAqY3RybF9wZiwKJiM0MzsJCQkJIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKQogewotCXN0cnVjdCBpY2VfcGYgKmN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpOwogCWJvb2wgcGVlcl9jbGtfaW5fdXNlOwogCXU4IHBvcnRfbnVtLCBwaHk7CiAJaW50IGVycjsKIAomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O2N0cmxfcGZfbG9jayk7CiYjNDM7CiAJaWYgKGNsayA9PSBJQ0VfUkVGX0NMS19FTkVUKQogCQlyZXR1cm4gMDsKIApAQCAtMTE4LDEyICYjNDM7MTIxLDE1IEBAIHN0YXRpYyBpbnQgaWNlX3R4Y2xrX2VuYWJsZV9wZWVyKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaykKICAqLwogaW50IGljZV90eGNsa19zZXRfY2xrKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaykKIHsKLQlzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmID0gaWNlX2dldF9jdHJsX3BmKHBmKTsKIAlzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcG9ydF9pbmZvOwomIzQzOwlzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmOwogCWJvb2wgY2xrX2luX3VzZTsKIAl1OCBwb3J0X251bSwgcGh5OwogCWludCBlcnI7CiAKJiM0MzsJZ3VhcmQocndzZW1fcmVhZCkoJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7Y3RybF9wZl9sb2NrKTsKJiM0MzsJY3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7CiYjNDM7CiAJaWYgKHBmLSZndDtwdHAucG9ydC50eF9jbGsgPT0gY2xrKQogCQlyZXR1cm4gMDsKIApAQCAtMTY0LDcgJiM0MzsxNzAsNyBAQCBpbnQgaWNlX3R4Y2xrX3NldF9jbGsoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKQogCW11dGV4X3VubG9jaygmYW1wO2N0cmxfcGYtJmd0O2RwbGxzLmxvY2spOwogCiAJaWYgKCFjbGtfaW5fdXNlKSB7Ci0JCWVyciA9IGljZV90eGNsa19lbmFibGVfcGVlcihwZiwgY2xrKTsKJiM0MzsJCWVyciA9IGljZV90eGNsa19lbmFibGVfcGVlcihwZiwgY3RybF9wZiwgY2xrKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMjE1LDE1ICYjNDM7MjIxLDE4IEBAIGludCBpY2VfdHhjbGtfc2V0X2NsayhzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfZTgyNWNfcmVmX2NsayBjbGspCiB2b2lkIGljZV90eGNsa191cGRhdGVfYW5kX25vdGlmeShzdHJ1Y3QgaWNlX3BmICpwZikKIHsKIAlzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydCA9ICZhbXA7cGYtJmd0O3B0cC5wb3J0OwotCXN0cnVjdCBpY2VfcGYgKmN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpOwogCXN0cnVjdCBkcGxsX3BpbiAqb2xkX3BpbiA9IE5VTEw7CiAJc3RydWN0IGRwbGxfcGluICpuZXdfcGluID0gTlVMTDsKJiM0MzsJc3RydWN0IGljZV9wZiAqY3RybF9wZjsKIAlzdHJ1Y3QgaWNlX2h3ICpodyA9ICZhbXA7cGYtJmd0O2h3OwogCWVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrOwogCWJvb2wgbm90aWZ5X2RwbGwgPSBmYWxzZTsKIAlpbnQgZXJyOwogCXU4IHBoeTsKIAomIzQzOwlndWFyZChyd3NlbV9yZWFkKSgmYW1wO3BmLSZndDthZGFwdGVyLSZndDtjdHJsX3BmX2xvY2spOwomIzQzOwljdHJsX3BmID0gaWNlX2dldF9jdHJsX3BmKHBmKTsKJiM0MzsKIAlwaHkgPSBwdHBfcG9ydC0mZ3Q7cG9ydF9udW0gLyBody0mZ3Q7cHRwLnBvcnRzX3Blcl9waHk7CiAKIAkvKiBIb2xkIHR4Y2xrX25vdGlmeV9yd3NlbSBmb3IgcmVhZCBhY3Jvc3MgdGhlIGVudGlyZSBjcml0aWNhbAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDUzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZywgYW5kIEkgaGF2ZSBhIHNldCBvZiBndWlkZWxpbmVzIHRvIGZvbGxvdy4gRmlyc3QsIEkgbmVlZCB0byBzZWUgaWYgaXQgdHJpZ2dlcnMgYW55IG9mIHRoZSBkaXNxdWFsaWZ5aW5nIGNvbmRpdGlvbnMuCgpUaGUgZ3VpZGVsaW5lcyBzdGF0ZSB0aGF0IHBhdGNoZXMgYXJlICpub3QqIHdvcnRoIGZ1enppbmcgaWYgdGhleSBpbnZvbHZlIGRvY3VtZW50YXRpb24gY2hhbmdlcywgZGVjb3JhdGl2ZSBtb2RpZmljYXRpb25zIChsaWtlIGxvZ2dpbmcpLCBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCBleGVjdXRpb24gZmxvdywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIENydWNpYWxseSwgaXQgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgcGF0Y2guIEl0IG1vZGlmaWVzIHNldmVyYWwgZmlsZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgZGlyZWN0b3J5LiBTbywgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaW5jbHVkZXMgY2hhbmdlcyBpbiB0aGUgYGljZS5oYCwgYGljZV9hZGFwdGVyLmNgLCBgaWNlX2FkYXB0ZXIuaGAsIGBpY2VfcHRwLmNgLCBgaWNlX3B0cF9ody5jYCwgYW5kIGBpY2VfdHhjbGsuY2AgZmlsZXMuIFRoaXMgaXMgYSB0ZWxsLgoKSSBrbm93IHRoYXQgYGljZWAgcmVmZXJzIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBDb250cm9sbGVyIEU4MDAgc2VyaWVzIGRyaXZlcnMsIHdoaWNoIGluY2x1ZGUgdGhlIEU4MTAsIEU4MjUsIGFuZCBFODMwLiBUaGVzZSBhcmUgaGlnaC1wZXJmb3JtYW5jZSAxMDBHYkUgTklDcyBvciBTbWFydE5JQ3MuICpDcml0aWNhbGx5KiwgSSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBkcml2ZXIgKnJlcXVpcmVzKiBwaHlzaWNhbCBJbnRlbCBFODAwIHNlcmllcyBQQ0llIGhhcmR3YXJlIGNhcmRzOyBpdCYjMzk7cyBub3Qgc29tZXRoaW5nIHlvdSBjYW4gZWFzaWx5IGVtdWxhdGUgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwIGxpa2UgeW91IGNhbiB3aXRoIGUxMDAwLCBlMTAwMGUsIGlnYiwgb3IgdmlydGlvLW5ldC4KClNvLCB0aGUga2V5IHRlc3QgaXMgd2hldGhlciB0aGlzIGBpY2VgIGRyaXZlciBmYWxscyB1bmRlciB0aGUgJiMzNDtyZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VJiMzNDsgZ3VpZGVsaW5lLiBJdCBkb2VzLCBpbmRlZWQuIEFzIGEgdmV0ZXJhbiBpbiB0aGlzIGZpZWxkLCBJIGNhbiBhc3NlcnQgdGhhdCB0aGUgYGljZWAgZHJpdmVyICpkb2VzKiBuZWVkIHRoZSBQQ0llIGhhcmR3YXJlLCBhbmQgdGhhdCB0aGVyZSBpcyBubyBzdGFuZGFyZCBRRU1VIGVtdWxhdGlvbi4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIGludm9sdmVzIGEgZHJpdmVyIHRoYXQgaXMgaW4gdGhlICYjMzQ7cmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7IGNhdGVnb3J5LCBJJiMzOTttIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyAqbm90KiB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZpbGUgZG9lcyBub3QgZXhpc3Q8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBmaWxlIGRvZXMgbm90IGV4aXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIG5ldHdvcmtpbmcgaGFyZHdhcmUgYW5kIGZhbWlsaWFyIHdpdGggdGhlIExpbnV4IGtlcm5lbDoKCioqRmluZGluZyB0aGUgQ29uZmlndXJhdGlvbiBNZW51IGZvciBJbnRlbCBFdGhlcm5ldCBEcml2ZXJzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBjb25maWd1cmluZyBvciB1bmRlcnN0YW5kaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUbyBkbyB0aGlzIHByb3Blcmx5LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGBLY29uZmlnYCBmaWxlLiBHaXZlbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIHRoYXQgZmlsZSBpcyB0aGUga2V5LiBUaGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIEV0aGVybmV0IGRyaXZlciBjb2RlIHdpdGhpbiB0aGUgTGludXgga2VybmVsIGlzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9gLiBTbywgbXkgdHJhaW4gb2YgdGhvdWdodCwgYW5kIHdoYXQgbXkgYWN0aW9ucyB3aWxsIHJlZmxlY3QsIGJlZ2lucyB3aXRoIHRoZSBjbGVhciBkaXJlY3RpdmU6IExvY2F0ZSB0aGF0IGBLY29uZmlnYCBmaWxlLiBJdCYjMzk7cyB0aGUgZmlsZSBJIG5lZWQgdG8gaW5zcGVjdCB0byBtYW5hZ2Ugb3IgY29uZmlndXJlIHRoYXQgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjY4PWNvbmZpZyBJNDBFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTI5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjkxOmNvbmZpZyBJQ0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMyMS1cdGJvb2wgXCYjMzQ7SW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzMxOmNvbmZpZyBJQ0VfU1dJVENIREVWXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMi1cdGJvb2wgXCYjMzQ7U3dpdGNoZGV2IFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzQ1OmNvbmZpZyBJQ0VfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1N1cHBvcnQgSFcgY3Jvc3MtdGltZXN0YW1wIG9uIHBsYXRmb3JtcyB3aXRoIFBUTSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEludGVsIEV0aGVybmV0IEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGVzZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlLCBwYXJ0aWN1bGFybHkgdGhlIG9uZSBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsYCBkaXJlY3RvcnkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyOTAuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3BvdCB0byBmaW5kIGEgc2VjdGlvbiBvZiBpbnRlcmVzdCwgbWF5YmUgcmVsYXRlZCB0byBhIHNwZWNpZmljIGRyaXZlciBtb2RlbCwgZmVhdHVyZSBzZXQsIG9yIGEgZ2xvYmFsIGNvbnRyb2wuIExldCYjMzk7cyBzZWUgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYmVpbmcgZXhwb3NlZCB0aGVyZS4uLiBJIGV4cGVjdCBpdCYjMzk7cyBsaWtlbHkgYSBjb21wbGV4IHN0cnVjdHVyZSwgc28gSSB3aWxsIGhhdmUgdG8gaW52ZXN0aWdhdGUgd2hhdCBkZXBlbmRzIG9uIHdoYXQuLi4gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGF0JiMzOTtzIGNvbnRyb2xsZWQgYnkgd2hpY2ggb2YgdGhlIGRyaXZlcnMgb3IgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTA6XHRcbiAyOTE6XHRjb25maWcgSUNFXG4gMjkyOlx0XHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIFN1cHBvcnRcJiMzNDtcbiAyOTM6XHRcdGRlZmF1bHQgblxuIDI5NDpcdFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG4gMjk1Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gMjk2Olx0XHRkZXBlbmRzIG9uIEdOU1MgfHwgR05TUyA9IG5cbiAyOTc6XHRcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4gMjk4Olx0XHRzZWxlY3QgRElNTElCXG4gMjk5Olx0XHRzZWxlY3QgTElCRVRIX1hEUFxuIDMwMDpcdFx0c2VsZWN0IExJQklFXG4gMzAxOlx0XHRzZWxlY3QgTElCSUVfQURNSU5RXG4gMzAyOlx0XHRzZWxlY3QgTElCSUVfRldMT0cgaWYgREVCVUdfRlNcbiAzMDM6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuIDMwNDpcdFx0c2VsZWN0IFBBQ0tJTkdcbiAzMDU6XHRcdHNlbGVjdCBQTERNRldcbiAzMDY6XHRcdHNlbGVjdCBEUExMXG4gMzA3Olx0XHRoZWxwXG4gMzA4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgb2ZcbiAzMDk6XHRcdCAgZGV2aWNlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvXG4gMzEwOlx0XHQgIHRvIHRoZSBBZGFwdGVyIFx1MDAyNiBEcml2ZXIgSUQgR3VpZGUgdGhhdCBjYW4gYmUgbG9jYXRlZCBhdDpcbiAzMTE6XHRcbiAzMTI6XHRcdCAgXHUwMDNjaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tXHUwMDNlXG4gMzEzOlx0XG4gMzE0Olx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuIDMxNTpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9pY2UucnN0XHUwMDNlLlxuIDMxNjpcdFxuIDMxNzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gMzE4Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGljZS5cbiAzMTk6XHRcbiAzMjA6XHRjb25maWcgSUNFX0hXTU9OXG4gMzIxOlx0XHRib29sIFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydCBIV01PTiBzdXBwb3J0XCYjMzQ7XG4gMzIyOlx0XHRkZWZhdWx0IHlcbiAzMjM6XHRcdGRlcGVuZHMgb24gSUNFIFx1MDAyNlx1MDAyNiBIV01PTiBcdTAwMjZcdTAwMjYgIShJQ0U9eSBcdTAwMjZcdTAwMjYgSFdNT049bSlcbiAzMjQ6XHRcdGhlbHBcbiAzMjU6XHRcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZXhwb3NlIHRoZXJtYWwgc2Vuc29yIGRhdGEgb24gSW50ZWwgZGV2aWNlcy5cbiAzMjY6XHRcbiAzMjc6XHRcdCAgU29tZSBvZiBvdXIgZGV2aWNlcyBjb250YWluIGludGVybmFsIHRoZXJtYWwgc2Vuc29ycy5cbiAzMjg6XHRcdCAgVGhpcyBkYXRhIGlzIGF2YWlsYWJsZSB2aWEgdGhlIGh3bW9uIHN5c2ZzIGludGVyZmFjZSBhbmQgZXhwb3Nlc1xuIDMyOTpcdFx0ICB0aGUgb25ib2FyZCBzZW5zb3JzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDg3CgkJCQkJCQlvdXRwdXQ6IDc5CgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgV29ydGgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIEludGVsIElDRSBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9gLiBMb29rcyBsaWtlIGl0JiMzOTtzIHR3ZWFraW5nIHRoZSBsb2NraW5nIGFuZCBSQ1Ugc2FmZXR5IGFyb3VuZCBhY2Nlc3MgdG8gdGhlIGNvbnRyb2wgUEYgYW5kIHRoZSBQVFAgaGFyZHdhcmUsIHJlcHJlc2VudGVkIGJ5IGBhZGFwdGVyLSZndDtjdHJsX3BmYC4gSSBrbm93IHRoZSBJQ0UgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgdGhvc2UgSW50ZWwgRTgwMCBzZXJpZXMgY2FyZHMg4oCTIEU4MTAsIEU4MjUsIEU4MzAsIHRoYXQgc29ydCBvZiB0aGluZy4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCAqdGhpcyBkcml2ZXIgaXMgZm9yIHBoeXNpY2FsIFBDSWUgbmV0d29yayBjYXJkcy4qIEFuZCB0aG9zZSBjYXJkcyBhcmVuJiMzOTt0IHR5cGljYWxseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIGluIHRoZSB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcyB3ZSB1c2UuCgpUaGF0JiMzOTtzIHRoZSBrZXkuIEkgcmVtZW1iZXIgdGhlIHJ1bGU6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IFRoaXMgYWJzb2x1dGVseSBmYWxscyB1bmRlciB0aGF0IGNhdGVnb3J5LiBUaGUgSUNFIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVyLiBJdCYjMzk7cyBkZXNpZ25lZCBmb3IgaGFyZHdhcmUgdGhhdCBpc24mIzM5O3QgcmVwbGljYXRlZCBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudHMgd2UgdXNlLgoKU28sIHRoaXMgaXMgYSBjbGVhciAmIzM0O25vJiMzNDsgb24gV29ydGhGdXp6aW5nLiBJdCYjMzk7cyBub3Qgd29ydGggdGhlIGVmZm9ydCBiZWNhdXNlIHdlIGNhbiYjMzk7dCBhZGVxdWF0ZWx5IHRlc3QgaXQgd2l0aGluIG91ciBzdGFuZGFyZCBpbmZyYXN0cnVjdHVyZS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY29uZmlndXJlIHRoZSByZXN1bHRzLgoKVGhlIHNldHRpbmdzIHdpbGwgYmU6CgoqICAgKipXb3J0aEZ1enppbmc6IGZhbHNlKioKKiAgICoqRm9jdXNTeW1ib2xzOiBcWyBdKiogKHdlIGRvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgYW55IGZvY3VzIHN5bWJvbHMgaGVyZSkKKiAgICoqRW5hYmxlQ29uZmlnczogXFsgXSoqIChubyBjb25maWdzIHRvIGVuYWJsZSkKKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvYCksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgTklDIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VL0dDRSkuIFRoZXJlZm9yZSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuCgpMZXQmIzM5O3MgcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgc2VyaWVzIChpY2UpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBwaHlzaWNhbCBJbnRlbCBQQ0llIG5ldHdvcmsgYWRhcHRlcnMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIHNlcmllcyAoaWNlKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgcGh5c2ljYWwgSW50ZWwgUENJZSBuZXR3b3JrIGFkYXB0ZXJzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjM4OjQ0Ljg4OTE2MDgxMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NTc5NzY4NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBzZXJpZXMgKGljZSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIHBoeXNpY2FsIEludGVsIFBDSWUgbmV0d29yayBhZGFwdGVycyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjM4OjQ0Ljg4OTE2NjYzMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4OTg1NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjlkOGNmOWM3Y2IwYzgxNWFlMWQ0ZGVmOTg3ODgwZDNmMzI2ZDFmMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDAwOjM4OjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxcbmluZGV4IGRiM2M3MDE1YzU2YzQuLmMxNGJiMWViMjcxZTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuQEAgLTQwLDYgKzQwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdV9ybWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kaW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2duc3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFxcdTAwM2VcXG5AQCAtMTE0OCwyNiArMTE0OSw0NCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaWNlX3BmX3NyY190bXJfb3duZWQoc3RydWN0IGljZV9wZiAqcGYpXFxuICAqIGljZV9nZXRfcHJpbWFyeV9odyAtIEdldCBwb2ludGVyIHRvIHByaW1hcnkgaWNlX2h3IHN0cnVjdHVyZVxcbiAgKiBAcGY6IHBvaW50ZXIgdG8gUEYgc3RydWN0dXJlXFxuICAqXFxuKyAqIFRoZSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBvclxcbisgKiB3aGlsZSBob2xkaW5nIGFkYXB0ZXItXFx1MDAzZWN0cmxfcGZfbG9jay5cXG4rICogaHcgaXMgZW1iZWRkZWQgaW4gc3RydWN0IGljZV9wZiwgc28gZWl0aGVyIG1lY2hhbmlzbSBwcm90ZWN0cyBpdHMgbGlmZXRpbWUuXFxuKyAqXFxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIGljZV9odyBzdHJ1Y3R1cmUgd2l0aCBhY2Nlc3MgdG8gdGltZXN5bmNcXG4gICogcmVnaXN0ZXIgc3BhY2UuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpY2VfaHcgKmljZV9nZXRfcHJpbWFyeV9odyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4ge1xcbi1cXHRpZiAoIXBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmKVxcbitcXHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmO1xcbitcXG4rXFx0Y3RybF9wZiA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlY3RybF9wZixcXG4rXFx0XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlY3RybF9wZl9sb2NrKSk7XFxuK1xcbitcXHRpZiAoIWN0cmxfcGYpXFxuIFxcdFxcdHJldHVybiBcXHUwMDI2cGYtXFx1MDAzZWh3O1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJldHVybiBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZWN0cmxfcGYtXFx1MDAzZWh3O1xcbitcXHRcXHRyZXR1cm4gXFx1MDAyNmN0cmxfcGYtXFx1MDAzZWh3O1xcbiB9XFxuIFxcbiAvKipcXG4gICogaWNlX2dldF9jdHJsX3BmIC0gR2V0IHBvaW50ZXIgdG8gQ29udHJvbCBQRiBvZiB0aGUgYWRhcHRlclxcbiAgKiBAcGY6IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgUEYgc3RydWN0dXJlXFxuICAqXFxuKyAqIFRoZSBjb250cm9sIFBGIGlzIHRoZSBQRiB3aGljaCBvd25zIHRoZSBQVFAgY2xvY2sgZm9yIHRoZSBhZGFwdGVyLlxcbisgKiBPbmx5IHRoZSBjb250cm9sIFBGIGlzIGFsbG93ZWQgdG8gcGVyZm9ybSBjZXJ0YWluIG9wZXJhdGlvbnMgb24gdGhlXFxuKyAqIFBUUCBjbG9jayBzdWNoIGFzIGFkanVzdGluZyB0aGUgdGltZSBvciBjb25maWd1cmluZyB0aGUgcGlucy5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBvclxcbisgKiB3aGlsZSBob2xkaW5nIGFkYXB0ZXItXFx1MDAzZWN0cmxfcGZfbG9jay5cXG4rICpcXG4gICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gaWNlX3BmIHN0cnVjdHVyZSB3aGljaCBpcyBDb250cm9sIFBGLFxcbiAgKiBOVUxMIGlmIGl0J3Mgbm90IGluaXRpYWxpemVkIHlldC5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGljZV9wZiAqaWNlX2dldF9jdHJsX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiB7XFxuLVxcdHJldHVybiAhcGYtXFx1MDAzZWFkYXB0ZXIgPyBOVUxMIDogcGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZWN0cmxfcGY7XFxuK1xcdHJldHVybiAhcGYtXFx1MDAzZWFkYXB0ZXIgPyBOVUxMIDpcXG4rXFx0XFx0cmN1X2RlcmVmZXJlbmNlX2NoZWNrKHBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmLFxcbitcXHRcXHRcXHRcXHQgICAgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmX2xvY2spKTtcXG4gfVxcbiAjZW5kaWYgLyogX0lDRV9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXFxuaW5kZXggMmRjMzYyOWQ2ZDBmNi4uODBjYjhkYzZiODFhMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXFxuQEAgLTY2LDYgKzY2LDcgQEAgc3RhdGljIHN0cnVjdCBpY2VfYWRhcHRlciAqaWNlX2FkYXB0ZXJfbmV3KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VjcGlfcGh5X2xvY2tbaV0pO1xcbiBcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJlZmNvdW50LCAxKTtcXG4gXFxuK1xcdGluaXRfcndzZW0oXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWN0cmxfcGZfbG9jayk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcG9ydHMucG9ydHMpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxcbmluZGV4IDRmNjk1ZjMyZGEzZDguLmIxYWY1OTcxODQ4MjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxcbkBAIC02LDYgKzYsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcndzZW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrX3R5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWZjb3VudF90eXBlcy5oXFx1MDAzZVxcbiBcXG5AQCAtMzYsNiArMzcsNyBAQCBzdHJ1Y3QgaWNlX3BvcnRfbGlzdCB7XFxuICAqIEB0eHFfY3R4X2xvY2s6IFNwaW5sb2NrIHByb3RlY3RpbmcgYWNjZXNzIHRvIHRoZSBHTENPTU1fUVRYX0NOVFhfQ1RMIHJlZ2lzdGVyXFxuICAqIEBjcGlfcGh5X2xvY2s6IFBlci1QSFkgbXV0ZXggc2VyaWFsaXppbmcgQ1BJIFJFUS9BQ0sgdHJhbnNhY3Rpb25zLlxcbiAgKiAgICAgICAgICAgICAgIEluZGV4IDAgPSBQSFkwLCBpbmRleCAxID0gUEhZMS4gVXNlZCBvbiBFODI1QyBkZXZpY2VzLlxcbisgKiBAY3RybF9wZl9sb2NrOiBQcm90ZWN0IGNvbnRyb2wgUEYgbGlmZXRpbWUgZm9yIHNsZWVwYWJsZSB1c2Vyc1xcbiAgKiBAY3RybF9wZjogQ29udHJvbCBQRiBvZiB0aGUgYWRhcHRlclxcbiAgKiBAcG9ydHM6IFBvcnRzIGxpc3RcXG4gICogQGluZGV4OiA2NC1iaXQgaW5kZXggY2FjaGVkIGZvciBjb2xsaXNpb24gZGV0ZWN0aW9uIG9uIDMyYml0IHN5c3RlbXNcXG5AQCAtNDksNyArNTEsOCBAQCBzdHJ1Y3QgaWNlX2FkYXB0ZXIge1xcbiBcXHQvKiBTZXJpYWxpemUgQ1BJIFJFUS9BQ0sgdHJhbnNhY3Rpb25zIHBlciBQSFkgKEU4MjVDIG9ubHkpICovXFxuIFxcdHN0cnVjdCBtdXRleCBjcGlfcGh5X2xvY2tbSUNFX0U4MjVfTUFYX1BIWVNdO1xcbiBcXG4tXFx0c3RydWN0IGljZV9wZiAqY3RybF9wZjtcXG4rXFx0c3RydWN0IHJ3X3NlbWFwaG9yZSBjdHJsX3BmX2xvY2s7XFxuK1xcdHN0cnVjdCBpY2VfcGYgX19yY3UgKmN0cmxfcGY7XFxuIFxcdHN0cnVjdCBpY2VfcG9ydF9saXN0IHBvcnRzO1xcbiBcXHR1NjQgaW5kZXg7XFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuaW5kZXggZWFlYzM2YWI2YWUzZi4uNDgyOTZhNGE4YWJkNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xcbkBAIC0xLDYgKzEsNyBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEludGVsIENvcnBvcmF0aW9uLiAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpY2UuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV9saWIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV90cmFjZS5oXFxcIlxcbkBAIC01NSw2ICs1NiwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9wdHBfcGluX2Rlc2MgaWNlX3Bpbl9kZXNjX2RwbGxbXSA9IHtcXG4gXFx0eyAgU0RQMywgeyAgMywgLTEgfSwgeyAwLCAwIH19LFxcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIGljZV9nZXRfY3RybF9wdHAgLSBHZXQgdGhlIFBUUCBzdHJ1Y3R1cmUgZm9yIHRoZSBjb250cm9sIFBGXFxuKyAqIEBwZjogVGhlIFBGIHBvaW50ZXIgdG8gbG9vayB1cCBhdFxcbisgKlxcbisgKiBUaGUgY29udHJvbCBQRiBpcyB0aGUgUEYgd2hpY2ggb3ducyB0aGUgUFRQIGNsb2NrIGZvciB0aGUgYWRhcHRlci5cXG4rICogT25seSB0aGUgY29udHJvbCBQRiBpcyBhbGxvd2VkIHRvIHBlcmZvcm0gY2VydGFpbiBvcGVyYXRpb25zIG9uIHRoZVxcbisgKiBQVFAgY2xvY2sgc3VjaCBhcyBhZGp1c3RpbmcgdGhlIHRpbWUgb3IgY29uZmlndXJpbmcgdGhlIHBpbnMuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gb3JcXG4rICogd2hpbGUgaG9sZGluZyBhZGFwdGVyLVxcdTAwM2VjdHJsX3BmX2xvY2suXFxuKyAqXFxuKyAqIFJldHVybjogUG9pbnRlciB0byB0aGUgUFRQIHN0cnVjdHVyZSBvZiB0aGUgY29udHJvbCBQRiwgb3IgTlVMTCBpZiBub3QgZm91bmRcXG4rICovXFxuIHN0YXRpYyBzdHJ1Y3QgaWNlX3B0cCAqaWNlX2dldF9jdHJsX3B0cChzdHJ1Y3QgaWNlX3BmICpwZilcXG4ge1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmID0gaWNlX2dldF9jdHJsX3BmKHBmKTtcXG5AQCAtMjAzLDM5ICsyMTcsNDIgQEAgdTY0IGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyhzdHJ1Y3QgaWNlX3BmICpwZixcXG4gXFx0dTMyIGhpLCBsbywgbG8yO1xcbiBcXHR1OCB0bXJfaWR4O1xcbiBcXG4tXFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXFxuLVxcdFxcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcXG4rXFx0c2NvcGVkX2d1YXJkKHJjdSkge1xcbitcXHRcXHRpZiAoIWljZV9pc19wcmltYXJ5KGh3KSlcXG4rXFx0XFx0XFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xcbiBcXG4tXFx0dG1yX2lkeCA9IGljZV9nZXRfcHRwX3NyY19jbG9ja19pbmRleChodyk7XFxuLVxcdGd1YXJkKHNwaW5sb2NrKShcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXB0cF9nbHRzeW5fdGltZV9sb2NrKTtcXG4tXFx0LyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwcmUgUEhDIHJlYWQgKi9cXG4tXFx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XFxuLVxcbi1cXHRpZiAoaHctXFx1MDAzZW1hY190eXBlID09IElDRV9NQUNfRTgzMCkge1xcbi1cXHRcXHR1NjQgY2xrX3RpbWUgPSByZDY0KGh3LCBFODMwX0dMVFNZTl9USU1FX0wodG1yX2lkeCkpO1xcbi1cXG4tXFx0XFx0LyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwb3N0IFBIQyByZWFkICovXFxuLVxcdFxcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcXG4tXFxuLVxcdFxcdHJldHVybiBjbGtfdGltZTtcXG4tXFx0fVxcbitcXHRcXHR0bXJfaWR4ID0gaWNlX2dldF9wdHBfc3JjX2Nsb2NrX2luZGV4KGh3KTtcXG4rXFx0XFx0Z3VhcmQoc3BpbmxvY2spKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcHRwX2dsdHN5bl90aW1lX2xvY2spO1xcbitcXHRcXHQvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHByZSBQSEMgcmVhZCAqL1xcbitcXHRcXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcXG4gXFxuLVxcdGxvID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XFxuK1xcdFxcdGlmIChody1cXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19FODMwKSB7XFxuK1xcdFxcdFxcdHU2NCBjbGtfdGltZSA9IHJkNjQoaHcsIEU4MzBfR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XFxuIFxcbi1cXHQvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHBvc3QgUEhDIHJlYWQgKi9cXG4tXFx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xcbitcXHRcXHRcXHQvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHBvc3QgUEhDIHJlYWQgKi9cXG4rXFx0XFx0XFx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xcbiBcXG4tXFx0aGkgPSByZDMyKGh3LCBHTFRTWU5fVElNRV9IKHRtcl9pZHgpKTtcXG4tXFx0bG8yID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XFxuK1xcdFxcdFxcdHJldHVybiBjbGtfdGltZTtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0aWYgKGxvMiBcXHUwMDNjIGxvKSB7XFxuLVxcdFxcdC8qIGlmIFRJTUVfTCByb2xsZWQgb3ZlciByZWFkIFRJTUVfTCBhZ2FpbiBhbmQgdXBkYXRlXFxuLVxcdFxcdCAqIHN5c3RlbSB0aW1lc3RhbXBzXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcXG4gXFx0XFx0bG8gPSByZDMyKGh3LCBHTFRTWU5fVElNRV9MKHRtcl9pZHgpKTtcXG4rXFxuK1xcdFxcdC8qIFJlYWQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgcG9zdCBQSEMgcmVhZCAqL1xcbiBcXHRcXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XFxuK1xcbiBcXHRcXHRoaSA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0godG1yX2lkeCkpO1xcbitcXHRcXHRsbzIgPSByZDMyKGh3LCBHTFRTWU5fVElNRV9MKHRtcl9pZHgpKTtcXG4rXFxuK1xcdFxcdGlmIChsbzIgXFx1MDAzYyBsbykge1xcbitcXHRcXHRcXHQvKiBpZiBUSU1FX0wgcm9sbGVkIG92ZXIgcmVhZCBUSU1FX0wgYWdhaW4gYW5kIHVwZGF0ZVxcbitcXHRcXHRcXHQgKiBzeXN0ZW0gdGltZXN0YW1wc1xcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XFxuK1xcdFxcdFxcdGxvID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XFxuK1xcdFxcdFxcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcXG4rXFx0XFx0XFx0aGkgPSByZDMyKGh3LCBHTFRTWU5fVElNRV9IKHRtcl9pZHgpKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuICgodTY0KWhpIFxcdTAwM2NcXHUwMDNjIDMyKSB8IGxvO1xcbkBAIC0zMDY4LDE0ICszMDg1LDMzIEBAIHZvaWQgaWNlX3B0cF9yZWJ1aWxkKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcXG4gXFxuIHN0YXRpYyB2b2lkIGljZV9wdHBfc2V0dXBfYWRhcHRlcihzdHJ1Y3QgaWNlX3BmICpwZilcXG4ge1xcbi1cXHRwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlY3RybF9wZiA9IHBmO1xcbitcXHRndWFyZChyd3NlbV93cml0ZSkoXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmX2xvY2spO1xcbitcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmLCBwZik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGljZV9wdHBfY2xlYW51cF9hZGFwdGVyKHN0cnVjdCBpY2VfcGYgKnBmKVxcbit7XFxuK1xcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZWN0cmxfcGZfbG9jayk7XFxuK1xcbitcXHQvKiBaZXJvIG91dCBhZGFwdGVyLVxcdTAwM2VjdHJsX3BmIHBvaW50ZXIgd2hlbiB0aGUgY3RybF9wZiBpdHNlbGZcXG4rXFx0ICogaXMgYmVpbmcgcmVtb3ZlZCB0byBwcmV2ZW50IGFueSBzZWNvbmRhcnkgUEZzIGZyb20gYWNjZXNzaW5nXFxuK1xcdCAqIGl0IGFmdGVyIGl0IGlzIGRlbGV0ZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoY21weGNoZyhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZWN0cmxfcGYsXFxuK1xcdFxcdCAgICAoc3RydWN0IGljZV9wZiBfX3JjdSAqKXBmLCBOVUxMKSA9PVxcbitcXHRcXHRcXHQoc3RydWN0IGljZV9wZiBfX3JjdSAqKXBmKVxcbitcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiB7XFxuLVxcdHN0cnVjdCBpY2VfcHRwICpjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xcbiBcXHRzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gXFx1MDAyNnBmLVxcdTAwM2VwdHA7XFxuK1xcdHN0cnVjdCBpY2VfcHRwICpjdHJsX3B0cDtcXG4rXFxuK1xcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlY3RybF9wZl9sb2NrKTtcXG4gXFxuK1xcdGN0cmxfcHRwID0gaWNlX2dldF9jdHJsX3B0cChwZik7XFxuIFxcdGlmICghY3RybF9wdHApIHtcXG4gXFx0XFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksXFxuIFxcdFxcdFxcdCBcXFwiUFRQIHVuYXZhaWxhYmxlOiBubyBjb250cm9sbGluZyBQRlxcXFxuXFxcIik7XFxuQEAgLTMxMzAsMTEgKzMxNjYsMTUgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9jbGVhbnVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiAgKi9cXG4gaW50IGljZV9wdHBfY2xvY2tfaW5kZXgoc3RydWN0IGljZV9wZiAqcGYpXFxuIHtcXG4tXFx0c3RydWN0IGljZV9wdHAgKmN0cmxfcHRwID0gaWNlX2dldF9jdHJsX3B0cChwZik7XFxuK1xcdHN0cnVjdCBpY2VfcHRwICpjdHJsX3B0cDtcXG4gXFx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XFxuIFxcbitcXHRndWFyZChyY3UpKCk7XFxuK1xcbitcXHRjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xcbiBcXHRpZiAoIWN0cmxfcHRwKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbiBcXHRjbG9jayA9IGN0cmxfcHRwLVxcdTAwM2VjbG9jaztcXG4gXFxuIFxcdHJldHVybiBjbG9jayA/IHB0cF9jbG9ja19pbmRleChjbG9jaykgOiAtMTtcXG5AQCAtMzM3Myw3ICszNDEzLDkgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpXFxuIGVycl9jbGVhbl9wZjpcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cHRwLVxcdTAwM2Vwb3J0LnBzX2xvY2spO1xcbiBcXHRpY2VfcHRwX2NsZWFudXBfcGYocGYpO1xcbitcXG4gZXJyX2V4aXQ6XFxuK1xcdGljZV9wdHBfY2xlYW51cF9hZGFwdGVyKHBmKTtcXG4gXFx0LyogSWYgd2UgcmVnaXN0ZXJlZCBhIFBUUCBjbG9jaywgcmVsZWFzZSBpdCAqL1xcbiBcXHRpZiAocGYtXFx1MDAzZXB0cC5jbG9jaykge1xcbiBcXHRcXHRwdHBfY2xvY2tfdW5yZWdpc3RlcihwdHAtXFx1MDAzZWNsb2NrKTtcXG5AQCAtMzQwMSw2ICszNDQzLDcgQEAgdm9pZCBpY2VfcHRwX3JlbGVhc2Uoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdGlmIChwZi1cXHUwMDNlcHRwLnN0YXRlICE9IElDRV9QVFBfUkVBRFkpIHtcXG4gXFx0XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cGYtXFx1MDAzZXB0cC5wb3J0LnBzX2xvY2spO1xcbiBcXHRcXHRpY2VfcHRwX2NsZWFudXBfcGYocGYpO1xcbitcXHRcXHRpY2VfcHRwX2NsZWFudXBfYWRhcHRlcihwZik7XFxuIFxcdFxcdGlmIChwZi1cXHUwMDNlcHRwLmNsb2NrKSB7XFxuIFxcdFxcdFxcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHBmLVxcdTAwM2VwdHAuY2xvY2spO1xcbiBcXHRcXHRcXHRwZi1cXHUwMDNlcHRwLmNsb2NrID0gTlVMTDtcXG5AQCAtMzQxNSw2ICszNDU4LDggQEAgdm9pZCBpY2VfcHRwX3JlbGVhc2Uoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcbiBcXHRpY2VfcHRwX2NsZWFudXBfcGYocGYpO1xcbiBcXG4rXFx0aWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIocGYpO1xcbitcXG4gXFx0aWNlX3B0cF9yZWxlYXNlX3R4X3RyYWNrZXIocGYsIFxcdTAwMjZwZi1cXHUwMDNlcHRwLnBvcnQudHgpO1xcbiBcXG4gXFx0aWNlX3B0cF9kaXNhYmxlX2FsbF9leHR0cyhwZik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXFxuaW5kZXggM2E0MWM3MTFlNzUxYi4uNjJlMjc5YzE5MmFjZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xcbkBAIC0xLDggKzEsMTAgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gLyogQ29weXJpZ2h0IChDKSAyMDIxLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJpY2UuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV9jb21tb24uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV9wdHBfaHcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV9wdHBfY29uc3RzLmhcXFwiXFxuQEAgLTMzNSw2ICszMzcsOCBAQCB2b2lkIGljZV9wdHBfc3JjX2NtZChzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfcHRwX3Rtcl9jbWQgY21kKVxcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGljZV9wZiwgaHcpO1xcbiBcXHR1MzIgY21kX3ZhbCA9IGljZV9wdHBfdG1yX2NtZF90b19zcmNfcmVnKGh3LCBjbWQpO1xcbiBcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbitcXG4gXFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXFxuIFxcdFxcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcXG4gXFxuQEAgLTM1Myw2ICszNTcsOCBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX2V4ZWNfdG1yX2NtZChzdHJ1Y3QgaWNlX2h3ICpodylcXG4ge1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGljZV9wZiwgaHcpO1xcbiBcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbitcXG4gXFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXFxuIFxcdFxcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcXG4gXFxuQEAgLTIwMDQsOCArMjAxMCwxNCBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3BoeV9hbmRfcGhjX3RpbWVfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LFxcbiBcXHRcXHR6byA9IHJkMzIoaHcsIEdMVFNZTl9TSFRJTUVfMCh0bXJfaWR4KSk7XFxuIFxcdFxcdGxvID0gcmQzMihodywgR0xUU1lOX1NIVElNRV9MKHRtcl9pZHgpKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0em8gPSByZDMyKGljZV9nZXRfcHJpbWFyeV9odyhwZiksIEdMVFNZTl9TSFRJTUVfMCh0bXJfaWR4KSk7XFxuLVxcdFxcdGxvID0gcmQzMihpY2VfZ2V0X3ByaW1hcnlfaHcocGYpLCBHTFRTWU5fU0hUSU1FX0wodG1yX2lkeCkpO1xcbitcXHRcXHRzdHJ1Y3QgaWNlX2h3ICpwcmlfaHc7XFxuK1xcbitcXHRcXHRndWFyZChyY3UpKCk7XFxuK1xcbitcXHRcXHRwcmlfaHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xcbitcXG4rXFx0XFx0em8gPSByZDMyKHByaV9odywgR0xUU1lOX1NIVElNRV8wKHRtcl9pZHgpKTtcXG4rXFx0XFx0bG8gPSByZDMyKHByaV9odywgR0xUU1lOX1NIVElNRV9MKHRtcl9pZHgpKTtcXG4gXFx0fVxcbiBcXHQqcGhjX3RpbWUgPSAodTY0KWxvIFxcdTAwM2NcXHUwMDNjIDMyIHwgem87XFxuIFxcbkBAIC0yMTczLDggKzIxODUsMTQgQEAgaW50IGljZV9zdGFydF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0KVxcbiBcXHRcXHRsbyA9IHJkMzIoaHcsIEdMVFNZTl9JTkNWQUxfTCh0bXJfaWR4KSk7XFxuIFxcdFxcdGhpID0gcmQzMihodywgR0xUU1lOX0lOQ1ZBTF9IKHRtcl9pZHgpKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0bG8gPSByZDMyKGljZV9nZXRfcHJpbWFyeV9odyhwZiksIEdMVFNZTl9JTkNWQUxfTCh0bXJfaWR4KSk7XFxuLVxcdFxcdGhpID0gcmQzMihpY2VfZ2V0X3ByaW1hcnlfaHcocGYpLCBHTFRTWU5fSU5DVkFMX0godG1yX2lkeCkpO1xcbitcXHRcXHRzdHJ1Y3QgaWNlX2h3ICpwcmlfaHc7XFxuK1xcbitcXHRcXHRndWFyZChyY3UpKCk7XFxuK1xcbitcXHRcXHRwcmlfaHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xcbitcXG4rXFx0XFx0bG8gPSByZDMyKHByaV9odywgR0xUU1lOX0lOQ1ZBTF9MKHRtcl9pZHgpKTtcXG4rXFx0XFx0aGkgPSByZDMyKHByaV9odywgR0xUU1lOX0lOQ1ZBTF9IKHRtcl9pZHgpKTtcXG4gXFx0fVxcbiBcXHRpbmN2YWwgPSAodTY0KWhpIFxcdTAwM2NcXHUwMDNjIDMyIHwgbG87XFxuIFxcbkBAIC01MzAwLDYgKzUzMTgsOSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX2luaXRfcGh5X2U4MzAoc3RydWN0IGljZV9wdHBfaHcgKnB0cClcXG4gICpcXG4gICogU29mdHdhcmUgbXVzdCBjbGVhciB0aGUgYnVzeSBiaXQgd2l0aCBhIHdyaXRlIHRvIHJlbGVhc2UgdGhlIGxvY2sgZm9yIG90aGVyXFxuICAqIGZ1bmN0aW9ucyB3aGVuIGRvbmUuXFxuKyAqXFxuKyAqIEEgc3VjY2Vzc2Z1bCBjYWxsIGhvbGRzIGFkYXB0ZXItXFx1MDAzZWN0cmxfcGZfbG9jayBmb3IgcmVhZCB1bnRpbFxcbisgKiBpY2VfcHRwX3VubG9jaygpIGlzIGNhbGxlZC5cXG4gICovXFxuIGJvb2wgaWNlX3B0cF9sb2NrKHN0cnVjdCBpY2VfaHcgKmh3KVxcbiB7XFxuQEAgLTUzMDcsNiArNTMyOCw4IEBAIGJvb2wgaWNlX3B0cF9sb2NrKHN0cnVjdCBpY2VfaHcgKmh3KVxcbiBcXHR1MzIgaHdfbG9jaztcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRkb3duX3JlYWQoXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmX2xvY2spO1xcbitcXG4gXFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXFxuIFxcdFxcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcXG4gXFxuQEAgLTUzMjQsNiArNTM0Nyw5IEBAIGJvb2wgaWNlX3B0cF9sb2NrKHN0cnVjdCBpY2VfaHcgKmh3KVxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKGh3X2xvY2spXFxuK1xcdFxcdHVwX3JlYWQoXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmX2xvY2spO1xcbitcXG4gXFx0cmV0dXJuICFod19sb2NrO1xcbiB9XFxuIFxcbkBAIC01MzM4LDEwICs1MzY0LDEzIEBAIHZvaWQgaWNlX3B0cF91bmxvY2soc3RydWN0IGljZV9odyAqaHcpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9wZiAqcGYgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBpY2VfcGYsIGh3KTtcXG4gXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmX2xvY2spO1xcbitcXG4gXFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXFxuIFxcdFxcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcXG4gXFxuIFxcdHdyMzIoaHcsIFBGVFNZTl9TRU0gKyAoUEZUU1lOX1NFTV9CWVRFUyAqIGh3LVxcdTAwM2VwZl9pZCksIDApO1xcbitcXHR1cF9yZWFkKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlY3RybF9wZl9sb2NrKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhjbGsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhjbGsuY1xcbmluZGV4IDQ4NDU5Zjk3MWNiZjkuLjZkMzBkMmYzZjJhOGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eGNsay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eGNsay5jXFxuQEAgLTQxLDYgKzQxLDcgQEAgaWNlX3R4Y2xrX2dldF9waW4oc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgcmVmX2NsaylcXG4gLyoqXFxuICAqIGljZV90eGNsa19lbmFibGVfcGVlciAtIEVuYWJsZSByZXF1aXJlZCBUWCByZWZlcmVuY2UgY2xvY2sgb24gcGVlciBQSFlcXG4gICogQHBmOiBwb2ludGVyIHRvIHRoZSBQRiBzdHJ1Y3R1cmVcXG4rICogQGN0cmxfcGY6IGNvbnRyb2wgUEYgcHJvdGVjdGVkIGJ5IGFkYXB0ZXItXFx1MDAzZWN0cmxfcGZfbG9ja1xcbiAgKiBAY2xrOiBUWCByZWZlcmVuY2UgY2xvY2sgdGhhdCBtdXN0IGJlIGVuYWJsZWRcXG4gICpcXG4gICogU29tZSBUWCByZWZlcmVuY2UgY2xvY2tzIG9uIEU4MjUtY2xhc3MgZGV2aWNlcyAoU3luY0UgYW5kIEVSRUYwKSBtdXN0XFxuQEAgLTU0LDEzICs1NSwxNSBAQCBpY2VfdHhjbGtfZ2V0X3BpbihzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfZTgyNWNfcmVmX2NsayByZWZfY2xrKVxcbiAgKlxcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuICAqL1xcbi1zdGF0aWMgaW50IGljZV90eGNsa19lbmFibGVfcGVlcihzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfZTgyNWNfcmVmX2NsayBjbGspXFxuK3N0YXRpYyBpbnQgaWNlX3R4Y2xrX2VuYWJsZV9wZWVyKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmLFxcbitcXHRcXHRcXHRcXHQgZW51bSBpY2VfZTgyNWNfcmVmX2NsayBjbGspXFxuIHtcXG4tXFx0c3RydWN0IGljZV9wZiAqY3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7XFxuIFxcdGJvb2wgcGVlcl9jbGtfaW5fdXNlO1xcbiBcXHR1OCBwb3J0X251bSwgcGh5O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZWN0cmxfcGZfbG9jayk7XFxuK1xcbiBcXHRpZiAoY2xrID09IElDRV9SRUZfQ0xLX0VORVQpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTE4LDEyICsxMjEsMTUgQEAgc3RhdGljIGludCBpY2VfdHhjbGtfZW5hYmxlX3BlZXIoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKVxcbiAgKi9cXG4gaW50IGljZV90eGNsa19zZXRfY2xrKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaylcXG4ge1xcbi1cXHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmID0gaWNlX2dldF9jdHJsX3BmKHBmKTtcXG4gXFx0c3RydWN0IGljZV9wb3J0X2luZm8gKnBvcnRfaW5mbztcXG4rXFx0c3RydWN0IGljZV9wZiAqY3RybF9wZjtcXG4gXFx0Ym9vbCBjbGtfaW5fdXNlO1xcbiBcXHR1OCBwb3J0X251bSwgcGh5O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0Z3VhcmQocndzZW1fcmVhZCkoXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2VjdHJsX3BmX2xvY2spO1xcbitcXHRjdHJsX3BmID0gaWNlX2dldF9jdHJsX3BmKHBmKTtcXG4rXFxuIFxcdGlmIChwZi1cXHUwMDNlcHRwLnBvcnQudHhfY2xrID09IGNsaylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xNjQsNyArMTcwLDcgQEAgaW50IGljZV90eGNsa19zZXRfY2xrKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaylcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHJsX3BmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4gXFxuIFxcdGlmICghY2xrX2luX3VzZSkge1xcbi1cXHRcXHRlcnIgPSBpY2VfdHhjbGtfZW5hYmxlX3BlZXIocGYsIGNsayk7XFxuK1xcdFxcdGVyciA9IGljZV90eGNsa19lbmFibGVfcGVlcihwZiwgY3RybF9wZiwgY2xrKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbkBAIC0yMTUsMTUgKzIyMSwxOCBAQCBpbnQgaWNlX3R4Y2xrX3NldF9jbGsoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKVxcbiB2b2lkIGljZV90eGNsa191cGRhdGVfYW5kX25vdGlmeShzdHJ1Y3QgaWNlX3BmICpwZilcXG4ge1xcbiBcXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydCA9IFxcdTAwMjZwZi1cXHUwMDNlcHRwLnBvcnQ7XFxuLVxcdHN0cnVjdCBpY2VfcGYgKmN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpO1xcbiBcXHRzdHJ1Y3QgZHBsbF9waW4gKm9sZF9waW4gPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZHBsbF9waW4gKm5ld19waW4gPSBOVUxMO1xcbitcXHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmO1xcbiBcXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuIFxcdGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrO1xcbiBcXHRib29sIG5vdGlmeV9kcGxsID0gZmFsc2U7XFxuIFxcdGludCBlcnI7XFxuIFxcdHU4IHBoeTtcXG4gXFxuK1xcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlY3RybF9wZl9sb2NrKTtcXG4rXFx0Y3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7XFxuK1xcbiBcXHRwaHkgPSBwdHBfcG9ydC1cXHUwMDNlcG9ydF9udW0gLyBody1cXHUwMDNlcHRwLnBvcnRzX3Blcl9waHk7XFxuIFxcbiBcXHQvKiBIb2xkIHR4Y2xrX25vdGlmeV9yd3NlbSBmb3IgcmVhZCBhY3Jvc3MgdGhlIGVudGlyZSBjcml0aWNhbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDozODo0NS4zNzg3OTM2NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjkwOTAxMjI1NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgc2VyaWVzIChpY2UpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBwaHlzaWNhbCBJbnRlbCBQQ0llIG5ldHdvcmsgYWRhcHRlcnMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiOWQ4Y2Y5YzdjYjBjODE1YWUxZDRkZWY5ODc4ODBkM2YzMjZkMWYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMDozODo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuaW5kZXggZGIzYzcwMTVjNTZjNC4uYzE0YmIxZWIyNzFlMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5AQCAtNDAsNiArNDAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdV9ybWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kaW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2duc3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuQEAgLTExNDgsMjYgKzExNDksNDQgQEAgc3RhdGljIGlubGluZSBib29sIGljZV9wZl9zcmNfdG1yX293bmVkKHN0cnVjdCBpY2VfcGYgKnBmKVxuICAqIGljZV9nZXRfcHJpbWFyeV9odyAtIEdldCBwb2ludGVyIHRvIHByaW1hcnkgaWNlX2h3IHN0cnVjdHVyZVxuICAqIEBwZjogcG9pbnRlciB0byBQRiBzdHJ1Y3R1cmVcbiAgKlxuKyAqIFRoZSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBvclxuKyAqIHdoaWxlIGhvbGRpbmcgYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2suXG4rICogaHcgaXMgZW1iZWRkZWQgaW4gc3RydWN0IGljZV9wZiwgc28gZWl0aGVyIG1lY2hhbmlzbSBwcm90ZWN0cyBpdHMgbGlmZXRpbWUuXG4rICpcbiAgKiBSZXR1cm46IEEgcG9pbnRlciB0byBpY2VfaHcgc3RydWN0dXJlIHdpdGggYWNjZXNzIHRvIHRpbWVzeW5jXG4gICogcmVnaXN0ZXIgc3BhY2UuXG4gICovXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgaWNlX2h3ICppY2VfZ2V0X3ByaW1hcnlfaHcoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuLVx0aWYgKCFwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGYpXG4rXHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmO1xuK1xuK1x0Y3RybF9wZiA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGYsXG4rXHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jaykpO1xuK1xuK1x0aWYgKCFjdHJsX3BmKVxuIFx0XHRyZXR1cm4gXHUwMDI2cGYtXHUwMDNlaHc7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGYtXHUwMDNlaHc7XG4rXHRcdHJldHVybiBcdTAwMjZjdHJsX3BmLVx1MDAzZWh3O1xuIH1cbiBcbiAvKipcbiAgKiBpY2VfZ2V0X2N0cmxfcGYgLSBHZXQgcG9pbnRlciB0byBDb250cm9sIFBGIG9mIHRoZSBhZGFwdGVyXG4gICogQHBmOiBwb2ludGVyIHRvIHRoZSBjdXJyZW50IFBGIHN0cnVjdHVyZVxuICAqXG4rICogVGhlIGNvbnRyb2wgUEYgaXMgdGhlIFBGIHdoaWNoIG93bnMgdGhlIFBUUCBjbG9jayBmb3IgdGhlIGFkYXB0ZXIuXG4rICogT25seSB0aGUgY29udHJvbCBQRiBpcyBhbGxvd2VkIHRvIHBlcmZvcm0gY2VydGFpbiBvcGVyYXRpb25zIG9uIHRoZVxuKyAqIFBUUCBjbG9jayBzdWNoIGFzIGFkanVzdGluZyB0aGUgdGltZSBvciBjb25maWd1cmluZyB0aGUgcGlucy5cbisgKlxuKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gb3JcbisgKiB3aGlsZSBob2xkaW5nIGFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrLlxuKyAqXG4gICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gaWNlX3BmIHN0cnVjdHVyZSB3aGljaCBpcyBDb250cm9sIFBGLFxuICAqIE5VTEwgaWYgaXQncyBub3QgaW5pdGlhbGl6ZWQgeWV0LlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGljZV9wZiAqaWNlX2dldF9jdHJsX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbi1cdHJldHVybiAhcGYtXHUwMDNlYWRhcHRlciA/IE5VTEwgOiBwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGY7XG4rXHRyZXR1cm4gIXBmLVx1MDAzZWFkYXB0ZXIgPyBOVUxMIDpcbitcdFx0cmN1X2RlcmVmZXJlbmNlX2NoZWNrKHBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZixcbitcdFx0XHRcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jaykpO1xuIH1cbiAjZW5kaWYgLyogX0lDRV9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcbmluZGV4IDJkYzM2MjlkNmQwZjYuLjgwY2I4ZGM2YjgxYTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcbkBAIC02Niw2ICs2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmljZV9hZGFwdGVyX25ldyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZWNwaV9waHlfbG9ja1tpXSk7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2YWRhcHRlci1cdTAwM2VyZWZjb3VudCwgMSk7XG4gXG4rXHRpbml0X3J3c2VtKFx1MDAyNmFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbiBcdG11dGV4X2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcbmluZGV4IDRmNjk1ZjMyZGEzZDguLmIxYWY1OTcxODQ4MjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcbkBAIC02LDYgKzYsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcndzZW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrX3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudF90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMzYsNiArMzcsNyBAQCBzdHJ1Y3QgaWNlX3BvcnRfbGlzdCB7XG4gICogQHR4cV9jdHhfbG9jazogU3BpbmxvY2sgcHJvdGVjdGluZyBhY2Nlc3MgdG8gdGhlIEdMQ09NTV9RVFhfQ05UWF9DVEwgcmVnaXN0ZXJcbiAgKiBAY3BpX3BoeV9sb2NrOiBQZXItUEhZIG11dGV4IHNlcmlhbGl6aW5nIENQSSBSRVEvQUNLIHRyYW5zYWN0aW9ucy5cbiAgKiAgICAgICAgICAgICAgIEluZGV4IDAgPSBQSFkwLCBpbmRleCAxID0gUEhZMS4gVXNlZCBvbiBFODI1QyBkZXZpY2VzLlxuKyAqIEBjdHJsX3BmX2xvY2s6IFByb3RlY3QgY29udHJvbCBQRiBsaWZldGltZSBmb3Igc2xlZXBhYmxlIHVzZXJzXG4gICogQGN0cmxfcGY6IENvbnRyb2wgUEYgb2YgdGhlIGFkYXB0ZXJcbiAgKiBAcG9ydHM6IFBvcnRzIGxpc3RcbiAgKiBAaW5kZXg6IDY0LWJpdCBpbmRleCBjYWNoZWQgZm9yIGNvbGxpc2lvbiBkZXRlY3Rpb24gb24gMzJiaXQgc3lzdGVtc1xuQEAgLTQ5LDcgKzUxLDggQEAgc3RydWN0IGljZV9hZGFwdGVyIHtcbiBcdC8qIFNlcmlhbGl6ZSBDUEkgUkVRL0FDSyB0cmFuc2FjdGlvbnMgcGVyIFBIWSAoRTgyNUMgb25seSkgKi9cbiBcdHN0cnVjdCBtdXRleCBjcGlfcGh5X2xvY2tbSUNFX0U4MjVfTUFYX1BIWVNdO1xuIFxuLVx0c3RydWN0IGljZV9wZiAqY3RybF9wZjtcbitcdHN0cnVjdCByd19zZW1hcGhvcmUgY3RybF9wZl9sb2NrO1xuK1x0c3RydWN0IGljZV9wZiBfX3JjdSAqY3RybF9wZjtcbiBcdHN0cnVjdCBpY2VfcG9ydF9saXN0IHBvcnRzO1xuIFx0dTY0IGluZGV4O1xuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbmluZGV4IGVhZWMzNmFiNmFlM2YuLjQ4Mjk2YTRhOGFiZDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG5AQCAtMSw2ICsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodCAoQykgMjAyMSwgSW50ZWwgQ29ycG9yYXRpb24uICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFwiaWNlLmhcIlxuICNpbmNsdWRlIFwiaWNlX2xpYi5oXCJcbiAjaW5jbHVkZSBcImljZV90cmFjZS5oXCJcbkBAIC01NSw2ICs1NiwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9wdHBfcGluX2Rlc2MgaWNlX3Bpbl9kZXNjX2RwbGxbXSA9IHtcbiBcdHsgIFNEUDMsIHsgIDMsIC0xIH0sIHsgMCwgMCB9fSxcbiB9O1xuIFxuKy8qKlxuKyAqIGljZV9nZXRfY3RybF9wdHAgLSBHZXQgdGhlIFBUUCBzdHJ1Y3R1cmUgZm9yIHRoZSBjb250cm9sIFBGXG4rICogQHBmOiBUaGUgUEYgcG9pbnRlciB0byBsb29rIHVwIGF0XG4rICpcbisgKiBUaGUgY29udHJvbCBQRiBpcyB0aGUgUEYgd2hpY2ggb3ducyB0aGUgUFRQIGNsb2NrIGZvciB0aGUgYWRhcHRlci5cbisgKiBPbmx5IHRoZSBjb250cm9sIFBGIGlzIGFsbG93ZWQgdG8gcGVyZm9ybSBjZXJ0YWluIG9wZXJhdGlvbnMgb24gdGhlXG4rICogUFRQIGNsb2NrIHN1Y2ggYXMgYWRqdXN0aW5nIHRoZSB0aW1lIG9yIGNvbmZpZ3VyaW5nIHRoZSBwaW5zLlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBvclxuKyAqIHdoaWxlIGhvbGRpbmcgYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2suXG4rICpcbisgKiBSZXR1cm46IFBvaW50ZXIgdG8gdGhlIFBUUCBzdHJ1Y3R1cmUgb2YgdGhlIGNvbnRyb2wgUEYsIG9yIE5VTEwgaWYgbm90IGZvdW5kXG4rICovXG4gc3RhdGljIHN0cnVjdCBpY2VfcHRwICppY2VfZ2V0X2N0cmxfcHRwKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbiBcdHN0cnVjdCBpY2VfcGYgKmN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpO1xuQEAgLTIwMywzOSArMjE3LDQyIEBAIHU2NCBpY2VfcHRwX3JlYWRfc3JjX2Nsa19yZWcoc3RydWN0IGljZV9wZiAqcGYsXG4gXHR1MzIgaGksIGxvLCBsbzI7XG4gXHR1OCB0bXJfaWR4O1xuIFxuLVx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXG4tXHRcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcbitcdHNjb3BlZF9ndWFyZChyY3UpIHtcbitcdFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXG4rXHRcdFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xuIFxuLVx0dG1yX2lkeCA9IGljZV9nZXRfcHRwX3NyY19jbG9ja19pbmRleChodyk7XG4tXHRndWFyZChzcGlubG9jaykoXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2VwdHBfZ2x0c3luX3RpbWVfbG9jayk7XG4tXHQvKiBSZWFkIHRoZSBzeXN0ZW0gdGltZXN0YW1wIHByZSBQSEMgcmVhZCAqL1xuLVx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4tXG4tXHRpZiAoaHctXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19FODMwKSB7XG4tXHRcdHU2NCBjbGtfdGltZSA9IHJkNjQoaHcsIEU4MzBfR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XG4tXG4tXHRcdC8qIFJlYWQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgcG9zdCBQSEMgcmVhZCAqL1xuLVx0XHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4tXG4tXHRcdHJldHVybiBjbGtfdGltZTtcbi1cdH1cbitcdFx0dG1yX2lkeCA9IGljZV9nZXRfcHRwX3NyY19jbG9ja19pbmRleChodyk7XG4rXHRcdGd1YXJkKHNwaW5sb2NrKShcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXB0cF9nbHRzeW5fdGltZV9sb2NrKTtcbitcdFx0LyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwcmUgUEhDIHJlYWQgKi9cbitcdFx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4gXG4tXHRsbyA9IHJkMzIoaHcsIEdMVFNZTl9USU1FX0wodG1yX2lkeCkpO1xuK1x0XHRpZiAoaHctXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19FODMwKSB7XG4rXHRcdFx0dTY0IGNsa190aW1lID0gcmQ2NChodywgRTgzMF9HTFRTWU5fVElNRV9MKHRtcl9pZHgpKTtcbiBcbi1cdC8qIFJlYWQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgcG9zdCBQSEMgcmVhZCAqL1xuLVx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuK1x0XHRcdC8qIFJlYWQgdGhlIHN5c3RlbSB0aW1lc3RhbXAgcG9zdCBQSEMgcmVhZCAqL1xuK1x0XHRcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcbiBcbi1cdGhpID0gcmQzMihodywgR0xUU1lOX1RJTUVfSCh0bXJfaWR4KSk7XG4tXHRsbzIgPSByZDMyKGh3LCBHTFRTWU5fVElNRV9MKHRtcl9pZHgpKTtcbitcdFx0XHRyZXR1cm4gY2xrX3RpbWU7XG4rXHRcdH1cbiBcbi1cdGlmIChsbzIgXHUwMDNjIGxvKSB7XG4tXHRcdC8qIGlmIFRJTUVfTCByb2xsZWQgb3ZlciByZWFkIFRJTUVfTCBhZ2FpbiBhbmQgdXBkYXRlXG4tXHRcdCAqIHN5c3RlbSB0aW1lc3RhbXBzXG4tXHRcdCAqL1xuLVx0XHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcbiBcdFx0bG8gPSByZDMyKGh3LCBHTFRTWU5fVElNRV9MKHRtcl9pZHgpKTtcbitcbitcdFx0LyogUmVhZCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBwb3N0IFBIQyByZWFkICovXG4gXHRcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMoc3RzKTtcbitcbiBcdFx0aGkgPSByZDMyKGh3LCBHTFRTWU5fVElNRV9IKHRtcl9pZHgpKTtcbitcdFx0bG8yID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XG4rXG4rXHRcdGlmIChsbzIgXHUwMDNjIGxvKSB7XG4rXHRcdFx0LyogaWYgVElNRV9MIHJvbGxlZCBvdmVyIHJlYWQgVElNRV9MIGFnYWluIGFuZCB1cGRhdGVcbitcdFx0XHQgKiBzeXN0ZW0gdGltZXN0YW1wc1xuK1x0XHRcdCAqL1xuK1x0XHRcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuK1x0XHRcdGxvID0gcmQzMihodywgR0xUU1lOX1RJTUVfTCh0bXJfaWR4KSk7XG4rXHRcdFx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuK1x0XHRcdGhpID0gcmQzMihodywgR0xUU1lOX1RJTUVfSCh0bXJfaWR4KSk7XG4rXHRcdH1cbitcbiBcdH1cbiBcbiBcdHJldHVybiAoKHU2NCloaSBcdTAwM2NcdTAwM2MgMzIpIHwgbG87XG5AQCAtMzA2OCwxNCArMzA4NSwzMyBAQCB2b2lkIGljZV9wdHBfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4gXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9zZXR1cF9hZGFwdGVyKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbi1cdHBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZiA9IHBmO1xuK1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbitcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGYsIHBmKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIoc3RydWN0IGljZV9wZiAqcGYpXG4re1xuK1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbitcbitcdC8qIFplcm8gb3V0IGFkYXB0ZXItXHUwMDNlY3RybF9wZiBwb2ludGVyIHdoZW4gdGhlIGN0cmxfcGYgaXRzZWxmXG4rXHQgKiBpcyBiZWluZyByZW1vdmVkIHRvIHByZXZlbnQgYW55IHNlY29uZGFyeSBQRnMgZnJvbSBhY2Nlc3NpbmdcbitcdCAqIGl0IGFmdGVyIGl0IGlzIGRlbGV0ZWQuXG4rXHQgKi9cbitcdGlmIChjbXB4Y2hnKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZixcbitcdFx0ICAgIChzdHJ1Y3QgaWNlX3BmIF9fcmN1ICopcGYsIE5VTEwpID09XG4rXHRcdFx0KHN0cnVjdCBpY2VfcGYgX19yY3UgKilwZilcbitcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaWNlX3B0cF9zZXR1cF9wZihzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4tXHRzdHJ1Y3QgaWNlX3B0cCAqY3RybF9wdHAgPSBpY2VfZ2V0X2N0cmxfcHRwKHBmKTtcbiBcdHN0cnVjdCBpY2VfcHRwICpwdHAgPSBcdTAwMjZwZi1cdTAwM2VwdHA7XG4rXHRzdHJ1Y3QgaWNlX3B0cCAqY3RybF9wdHA7XG4rXG4rXHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jayk7XG4gXG4rXHRjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xuIFx0aWYgKCFjdHJsX3B0cCkge1xuIFx0XHRkZXZfaW5mbyhpY2VfcGZfdG9fZGV2KHBmKSxcbiBcdFx0XHQgXCJQVFAgdW5hdmFpbGFibGU6IG5vIGNvbnRyb2xsaW5nIFBGXFxuXCIpO1xuQEAgLTMxMzAsMTEgKzMxNjYsMTUgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9jbGVhbnVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuICAqL1xuIGludCBpY2VfcHRwX2Nsb2NrX2luZGV4KHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbi1cdHN0cnVjdCBpY2VfcHRwICpjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xuK1x0c3RydWN0IGljZV9wdHAgKmN0cmxfcHRwO1xuIFx0c3RydWN0IHB0cF9jbG9jayAqY2xvY2s7XG4gXG4rXHRndWFyZChyY3UpKCk7XG4rXG4rXHRjdHJsX3B0cCA9IGljZV9nZXRfY3RybF9wdHAocGYpO1xuIFx0aWYgKCFjdHJsX3B0cClcbiBcdFx0cmV0dXJuIC0xO1xuK1xuIFx0Y2xvY2sgPSBjdHJsX3B0cC1cdTAwM2VjbG9jaztcbiBcbiBcdHJldHVybiBjbG9jayA/IHB0cF9jbG9ja19pbmRleChjbG9jaykgOiAtMTtcbkBAIC0zMzczLDcgKzM0MTMsOSBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBlcnJfY2xlYW5fcGY6XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnB0cC1cdTAwM2Vwb3J0LnBzX2xvY2spO1xuIFx0aWNlX3B0cF9jbGVhbnVwX3BmKHBmKTtcbitcbiBlcnJfZXhpdDpcbitcdGljZV9wdHBfY2xlYW51cF9hZGFwdGVyKHBmKTtcbiBcdC8qIElmIHdlIHJlZ2lzdGVyZWQgYSBQVFAgY2xvY2ssIHJlbGVhc2UgaXQgKi9cbiBcdGlmIChwZi1cdTAwM2VwdHAuY2xvY2spIHtcbiBcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIocHRwLVx1MDAzZWNsb2NrKTtcbkBAIC0zNDAxLDYgKzM0NDMsNyBAQCB2b2lkIGljZV9wdHBfcmVsZWFzZShzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdGlmIChwZi1cdTAwM2VwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSkge1xuIFx0XHRtdXRleF9kZXN0cm95KFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnBzX2xvY2spO1xuIFx0XHRpY2VfcHRwX2NsZWFudXBfcGYocGYpO1xuK1x0XHRpY2VfcHRwX2NsZWFudXBfYWRhcHRlcihwZik7XG4gXHRcdGlmIChwZi1cdTAwM2VwdHAuY2xvY2spIHtcbiBcdFx0XHRwdHBfY2xvY2tfdW5yZWdpc3RlcihwZi1cdTAwM2VwdHAuY2xvY2spO1xuIFx0XHRcdHBmLVx1MDAzZXB0cC5jbG9jayA9IE5VTEw7XG5AQCAtMzQxNSw2ICszNDU4LDggQEAgdm9pZCBpY2VfcHRwX3JlbGVhc2Uoc3RydWN0IGljZV9wZiAqcGYpXG4gXG4gXHRpY2VfcHRwX2NsZWFudXBfcGYocGYpO1xuIFxuK1x0aWNlX3B0cF9jbGVhbnVwX2FkYXB0ZXIocGYpO1xuK1xuIFx0aWNlX3B0cF9yZWxlYXNlX3R4X3RyYWNrZXIocGYsIFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnR4KTtcbiBcbiBcdGljZV9wdHBfZGlzYWJsZV9hbGxfZXh0dHMocGYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5pbmRleCAzYTQxYzcxMWU3NTFiLi42MmUyNzljMTkyYWNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuQEAgLTEsOCArMSwxMCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChDKSAyMDIxLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbisjaW5jbHVkZSBcImljZS5oXCJcbiAjaW5jbHVkZSBcImljZV9jb21tb24uaFwiXG4gI2luY2x1ZGUgXCJpY2VfcHRwX2h3LmhcIlxuICNpbmNsdWRlIFwiaWNlX3B0cF9jb25zdHMuaFwiXG5AQCAtMzM1LDYgKzMzNyw4IEBAIHZvaWQgaWNlX3B0cF9zcmNfY21kKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9wdHBfdG1yX2NtZCBjbWQpXG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGljZV9wZiwgaHcpO1xuIFx0dTMyIGNtZF92YWwgPSBpY2VfcHRwX3Rtcl9jbWRfdG9fc3JjX3JlZyhodywgY21kKTtcbiBcbitcdGd1YXJkKHJjdSkoKTtcbitcbiBcdGlmICghaWNlX2lzX3ByaW1hcnkoaHcpKVxuIFx0XHRodyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7XG4gXG5AQCAtMzUzLDYgKzM1Nyw4IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfZXhlY190bXJfY21kKHN0cnVjdCBpY2VfaHcgKmh3KVxuIHtcbiBcdHN0cnVjdCBpY2VfcGYgKnBmID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgaWNlX3BmLCBodyk7XG4gXG4rXHRndWFyZChyY3UpKCk7XG4rXG4gXHRpZiAoIWljZV9pc19wcmltYXJ5KGh3KSlcbiBcdFx0aHcgPSBpY2VfZ2V0X3ByaW1hcnlfaHcocGYpO1xuIFxuQEAgLTIwMDQsOCArMjAxMCwxNCBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3BoeV9hbmRfcGhjX3RpbWVfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LFxuIFx0XHR6byA9IHJkMzIoaHcsIEdMVFNZTl9TSFRJTUVfMCh0bXJfaWR4KSk7XG4gXHRcdGxvID0gcmQzMihodywgR0xUU1lOX1NIVElNRV9MKHRtcl9pZHgpKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHpvID0gcmQzMihpY2VfZ2V0X3ByaW1hcnlfaHcocGYpLCBHTFRTWU5fU0hUSU1FXzAodG1yX2lkeCkpO1xuLVx0XHRsbyA9IHJkMzIoaWNlX2dldF9wcmltYXJ5X2h3KHBmKSwgR0xUU1lOX1NIVElNRV9MKHRtcl9pZHgpKTtcbitcdFx0c3RydWN0IGljZV9odyAqcHJpX2h3O1xuK1xuK1x0XHRndWFyZChyY3UpKCk7XG4rXG4rXHRcdHByaV9odyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7XG4rXG4rXHRcdHpvID0gcmQzMihwcmlfaHcsIEdMVFNZTl9TSFRJTUVfMCh0bXJfaWR4KSk7XG4rXHRcdGxvID0gcmQzMihwcmlfaHcsIEdMVFNZTl9TSFRJTUVfTCh0bXJfaWR4KSk7XG4gXHR9XG4gXHQqcGhjX3RpbWUgPSAodTY0KWxvIFx1MDAzY1x1MDAzYyAzMiB8IHpvO1xuIFxuQEAgLTIxNzMsOCArMjE4NSwxNCBAQCBpbnQgaWNlX3N0YXJ0X3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXG4gXHRcdGxvID0gcmQzMihodywgR0xUU1lOX0lOQ1ZBTF9MKHRtcl9pZHgpKTtcbiBcdFx0aGkgPSByZDMyKGh3LCBHTFRTWU5fSU5DVkFMX0godG1yX2lkeCkpO1xuIFx0fSBlbHNlIHtcbi1cdFx0bG8gPSByZDMyKGljZV9nZXRfcHJpbWFyeV9odyhwZiksIEdMVFNZTl9JTkNWQUxfTCh0bXJfaWR4KSk7XG4tXHRcdGhpID0gcmQzMihpY2VfZ2V0X3ByaW1hcnlfaHcocGYpLCBHTFRTWU5fSU5DVkFMX0godG1yX2lkeCkpO1xuK1x0XHRzdHJ1Y3QgaWNlX2h3ICpwcmlfaHc7XG4rXG4rXHRcdGd1YXJkKHJjdSkoKTtcbitcbitcdFx0cHJpX2h3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcbitcbitcdFx0bG8gPSByZDMyKHByaV9odywgR0xUU1lOX0lOQ1ZBTF9MKHRtcl9pZHgpKTtcbitcdFx0aGkgPSByZDMyKHByaV9odywgR0xUU1lOX0lOQ1ZBTF9IKHRtcl9pZHgpKTtcbiBcdH1cbiBcdGluY3ZhbCA9ICh1NjQpaGkgXHUwMDNjXHUwMDNjIDMyIHwgbG87XG4gXG5AQCAtNTMwMCw2ICs1MzE4LDkgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9pbml0X3BoeV9lODMwKHN0cnVjdCBpY2VfcHRwX2h3ICpwdHApXG4gICpcbiAgKiBTb2Z0d2FyZSBtdXN0IGNsZWFyIHRoZSBidXN5IGJpdCB3aXRoIGEgd3JpdGUgdG8gcmVsZWFzZSB0aGUgbG9jayBmb3Igb3RoZXJcbiAgKiBmdW5jdGlvbnMgd2hlbiBkb25lLlxuKyAqXG4rICogQSBzdWNjZXNzZnVsIGNhbGwgaG9sZHMgYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2sgZm9yIHJlYWQgdW50aWxcbisgKiBpY2VfcHRwX3VubG9jaygpIGlzIGNhbGxlZC5cbiAgKi9cbiBib29sIGljZV9wdHBfbG9jayhzdHJ1Y3QgaWNlX2h3ICpodylcbiB7XG5AQCAtNTMwNyw2ICs1MzI4LDggQEAgYm9vbCBpY2VfcHRwX2xvY2soc3RydWN0IGljZV9odyAqaHcpXG4gXHR1MzIgaHdfbG9jaztcbiBcdGludCBpO1xuIFxuK1x0ZG93bl9yZWFkKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbitcbiBcdGlmICghaWNlX2lzX3ByaW1hcnkoaHcpKVxuIFx0XHRodyA9IGljZV9nZXRfcHJpbWFyeV9odyhwZik7XG4gXG5AQCAtNTMyNCw2ICs1MzQ3LDkgQEAgYm9vbCBpY2VfcHRwX2xvY2soc3RydWN0IGljZV9odyAqaHcpXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuK1x0aWYgKGh3X2xvY2spXG4rXHRcdHVwX3JlYWQoXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2spO1xuK1xuIFx0cmV0dXJuICFod19sb2NrO1xuIH1cbiBcbkBAIC01MzM4LDEwICs1MzY0LDEzIEBAIHZvaWQgaWNlX3B0cF91bmxvY2soc3RydWN0IGljZV9odyAqaHcpXG4ge1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBpY2VfcGYsIGh3KTtcbiBcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2VjdHJsX3BmX2xvY2spO1xuK1xuIFx0aWYgKCFpY2VfaXNfcHJpbWFyeShodykpXG4gXHRcdGh3ID0gaWNlX2dldF9wcmltYXJ5X2h3KHBmKTtcbiBcbiBcdHdyMzIoaHcsIFBGVFNZTl9TRU0gKyAoUEZUU1lOX1NFTV9CWVRFUyAqIGh3LVx1MDAzZXBmX2lkKSwgMCk7XG4rXHR1cF9yZWFkKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eGNsay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eGNsay5jXG5pbmRleCA0ODQ1OWY5NzFjYmY5Li42ZDMwZDJmM2YyYThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eGNsay5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4Y2xrLmNcbkBAIC00MSw2ICs0MSw3IEBAIGljZV90eGNsa19nZXRfcGluKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIHJlZl9jbGspXG4gLyoqXG4gICogaWNlX3R4Y2xrX2VuYWJsZV9wZWVyIC0gRW5hYmxlIHJlcXVpcmVkIFRYIHJlZmVyZW5jZSBjbG9jayBvbiBwZWVyIFBIWVxuICAqIEBwZjogcG9pbnRlciB0byB0aGUgUEYgc3RydWN0dXJlXG4rICogQGN0cmxfcGY6IGNvbnRyb2wgUEYgcHJvdGVjdGVkIGJ5IGFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrXG4gICogQGNsazogVFggcmVmZXJlbmNlIGNsb2NrIHRoYXQgbXVzdCBiZSBlbmFibGVkXG4gICpcbiAgKiBTb21lIFRYIHJlZmVyZW5jZSBjbG9ja3Mgb24gRTgyNS1jbGFzcyBkZXZpY2VzIChTeW5jRSBhbmQgRVJFRjApIG11c3RcbkBAIC01NCwxMyArNTUsMTUgQEAgaWNlX3R4Y2xrX2dldF9waW4oc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgcmVmX2NsaylcbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbi1zdGF0aWMgaW50IGljZV90eGNsa19lbmFibGVfcGVlcihzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfZTgyNWNfcmVmX2NsayBjbGspXG4rc3RhdGljIGludCBpY2VfdHhjbGtfZW5hYmxlX3BlZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcGYgKmN0cmxfcGYsXG4rXHRcdFx0XHQgZW51bSBpY2VfZTgyNWNfcmVmX2NsayBjbGspXG4ge1xuLVx0c3RydWN0IGljZV9wZiAqY3RybF9wZiA9IGljZV9nZXRfY3RybF9wZihwZik7XG4gXHRib29sIHBlZXJfY2xrX2luX3VzZTtcbiBcdHU4IHBvcnRfbnVtLCBwaHk7XG4gXHRpbnQgZXJyO1xuIFxuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jayk7XG4rXG4gXHRpZiAoY2xrID09IElDRV9SRUZfQ0xLX0VORVQpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTExOCwxMiArMTIxLDE1IEBAIHN0YXRpYyBpbnQgaWNlX3R4Y2xrX2VuYWJsZV9wZWVyKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaylcbiAgKi9cbiBpbnQgaWNlX3R4Y2xrX3NldF9jbGsoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKVxuIHtcbi1cdHN0cnVjdCBpY2VfcGYgKmN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpO1xuIFx0c3RydWN0IGljZV9wb3J0X2luZm8gKnBvcnRfaW5mbztcbitcdHN0cnVjdCBpY2VfcGYgKmN0cmxfcGY7XG4gXHRib29sIGNsa19pbl91c2U7XG4gXHR1OCBwb3J0X251bSwgcGh5O1xuIFx0aW50IGVycjtcbiBcbitcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlY3RybF9wZl9sb2NrKTtcbitcdGN0cmxfcGYgPSBpY2VfZ2V0X2N0cmxfcGYocGYpO1xuK1xuIFx0aWYgKHBmLVx1MDAzZXB0cC5wb3J0LnR4X2NsayA9PSBjbGspXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTE2NCw3ICsxNzAsNyBAQCBpbnQgaWNlX3R4Y2xrX3NldF9jbGsoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0cmxfcGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXG4gXHRpZiAoIWNsa19pbl91c2UpIHtcbi1cdFx0ZXJyID0gaWNlX3R4Y2xrX2VuYWJsZV9wZWVyKHBmLCBjbGspO1xuK1x0XHRlcnIgPSBpY2VfdHhjbGtfZW5hYmxlX3BlZXIocGYsIGN0cmxfcGYsIGNsayk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0yMTUsMTUgKzIyMSwxOCBAQCBpbnQgaWNlX3R4Y2xrX3NldF9jbGsoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX2U4MjVjX3JlZl9jbGsgY2xrKVxuIHZvaWQgaWNlX3R4Y2xrX3VwZGF0ZV9hbmRfbm90aWZ5KHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbiBcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0ID0gXHUwMDI2cGYtXHUwMDNlcHRwLnBvcnQ7XG4tXHRzdHJ1Y3QgaWNlX3BmICpjdHJsX3BmID0gaWNlX2dldF9jdHJsX3BmKHBmKTtcbiBcdHN0cnVjdCBkcGxsX3BpbiAqb2xkX3BpbiA9IE5VTEw7XG4gXHRzdHJ1Y3QgZHBsbF9waW4gKm5ld19waW4gPSBOVUxMO1xuK1x0c3RydWN0IGljZV9wZiAqY3RybF9wZjtcbiBcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXHUwMDI2cGYtXHUwMDNlaHc7XG4gXHRlbnVtIGljZV9lODI1Y19yZWZfY2xrIGNsaztcbiBcdGJvb2wgbm90aWZ5X2RwbGwgPSBmYWxzZTtcbiBcdGludCBlcnI7XG4gXHR1OCBwaHk7XG4gXG4rXHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZWN0cmxfcGZfbG9jayk7XG4rXHRjdHJsX3BmID0gaWNlX2dldF9jdHJsX3BmKHBmKTtcbitcbiBcdHBoeSA9IHB0cF9wb3J0LVx1MDAzZXBvcnRfbnVtIC8gaHctXHUwMDNlcHRwLnBvcnRzX3Blcl9waHk7XG4gXG4gXHQvKiBIb2xkIHR4Y2xrX25vdGlmeV9yd3NlbSBmb3IgcmVhZCBhY3Jvc3MgdGhlIGVudGlyZSBjcml0aWNhbFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6Mzg6NDUuMzc4Nzk3MDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDg0OTU1MTMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBhbmQgSSBoYXZlIGEgc2V0IG9mIGd1aWRlbGluZXMgdG8gZm9sbG93LiBGaXJzdCwgSSBuZWVkIHRvIHNlZSBpZiBpdCB0cmlnZ2VycyBhbnkgb2YgdGhlIGRpc3F1YWxpZnlpbmcgY29uZGl0aW9ucy5cblxuVGhlIGd1aWRlbGluZXMgc3RhdGUgdGhhdCBwYXRjaGVzIGFyZSAqbm90KiB3b3J0aCBmdXp6aW5nIGlmIHRoZXkgaW52b2x2ZSBkb2N1bWVudGF0aW9uIGNoYW5nZXMsIGRlY29yYXRpdmUgbW9kaWZpY2F0aW9ucyAobGlrZSBsb2dnaW5nKSwgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyB0aGF0IGRvbid0IGFmZmVjdCBleGVjdXRpb24gZmxvdywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIENydWNpYWxseSwgaXQgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIHBhdGNoLiBJdCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9gIGRpcmVjdG9yeS4gU28sIEkgc2VlIHRoYXQgdGhlIHBhdGNoIGluY2x1ZGVzIGNoYW5nZXMgaW4gdGhlIGBpY2UuaGAsIGBpY2VfYWRhcHRlci5jYCwgYGljZV9hZGFwdGVyLmhgLCBgaWNlX3B0cC5jYCwgYGljZV9wdHBfaHcuY2AsIGFuZCBgaWNlX3R4Y2xrLmNgIGZpbGVzLiBUaGlzIGlzIGEgdGVsbC5cblxuSSBrbm93IHRoYXQgYGljZWAgcmVmZXJzIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBDb250cm9sbGVyIEU4MDAgc2VyaWVzIGRyaXZlcnMsIHdoaWNoIGluY2x1ZGUgdGhlIEU4MTAsIEU4MjUsIGFuZCBFODMwLiBUaGVzZSBhcmUgaGlnaC1wZXJmb3JtYW5jZSAxMDBHYkUgTklDcyBvciBTbWFydE5JQ3MuICpDcml0aWNhbGx5KiwgSSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBkcml2ZXIgKnJlcXVpcmVzKiBwaHlzaWNhbCBJbnRlbCBFODAwIHNlcmllcyBQQ0llIGhhcmR3YXJlIGNhcmRzOyBpdCdzIG5vdCBzb21ldGhpbmcgeW91IGNhbiBlYXNpbHkgZW11bGF0ZSBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgbGlrZSB5b3UgY2FuIHdpdGggZTEwMDAsIGUxMDAwZSwgaWdiLCBvciB2aXJ0aW8tbmV0LlxuXG5TbywgdGhlIGtleSB0ZXN0IGlzIHdoZXRoZXIgdGhpcyBgaWNlYCBkcml2ZXIgZmFsbHMgdW5kZXIgdGhlIFwicmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiIGd1aWRlbGluZS4gSXQgZG9lcywgaW5kZWVkLiBBcyBhIHZldGVyYW4gaW4gdGhpcyBmaWVsZCwgSSBjYW4gYXNzZXJ0IHRoYXQgdGhlIGBpY2VgIGRyaXZlciAqZG9lcyogbmVlZCB0aGUgUENJZSBoYXJkd2FyZSwgYW5kIHRoYXQgdGhlcmUgaXMgbm8gc3RhbmRhcmQgUUVNVSBlbXVsYXRpb24uXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIGludm9sdmVzIGEgZHJpdmVyIHRoYXQgaXMgaW4gdGhlIFwicmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiIGNhdGVnb3J5LCBJJ20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzICpub3QqIHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NTMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDozOTowMC4yMjgzNTAzMjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDgzMCwiRXJyb3IiOiJ0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmaWxlIGRvZXMgbm90IGV4aXN0XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjM5OjAwLjIyODM5MTc5N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1Mzk4NTE3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbmV0d29ya2luZyBoYXJkd2FyZSBhbmQgZmFtaWxpYXIgd2l0aCB0aGUgTGludXgga2VybmVsOlxuXG4qKkZpbmRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTWVudSBmb3IgSW50ZWwgRXRoZXJuZXQgRHJpdmVycyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBjb25maWd1cmluZyBvciB1bmRlcnN0YW5kaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUbyBkbyB0aGlzIHByb3Blcmx5LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGBLY29uZmlnYCBmaWxlLiBHaXZlbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIHRoYXQgZmlsZSBpcyB0aGUga2V5LiBUaGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIEV0aGVybmV0IGRyaXZlciBjb2RlIHdpdGhpbiB0aGUgTGludXgga2VybmVsIGlzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9gLiBTbywgbXkgdHJhaW4gb2YgdGhvdWdodCwgYW5kIHdoYXQgbXkgYWN0aW9ucyB3aWxsIHJlZmxlY3QsIGJlZ2lucyB3aXRoIHRoZSBjbGVhciBkaXJlY3RpdmU6IExvY2F0ZSB0aGF0IGBLY29uZmlnYCBmaWxlLiBJdCdzIHRoZSBmaWxlIEkgbmVlZCB0byBpbnNwZWN0IHRvIG1hbmFnZSBvciBjb25maWd1cmUgdGhhdCBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcxNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6Mzk6MDUuNzY4MjQ1OTExWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDcyODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yNjg9Y29uZmlnIEk0MEVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyOTE6Y29uZmlnIElDRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMxOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMjEtXFx0Ym9vbCBcXFwiSW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMzMTpjb25maWcgSUNFX1NXSVRDSERFVlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzMyLVxcdGJvb2wgXFxcIlN3aXRjaGRldiBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozNDU6Y29uZmlnIElDRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBIVyBjcm9zcy10aW1lc3RhbXAgb24gcGxhdGZvcm1zIHdpdGggUFRNIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjM5OjA1LjgxODcyNDAzOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NDgwMjkxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJbnRlbCBFdGhlcm5ldCBLY29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGVzZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlLCBwYXJ0aWN1bGFybHkgdGhlIG9uZSBpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsYCBkaXJlY3RvcnkuIEknbSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDI5MC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gZmluZCBhIHNlY3Rpb24gb2YgaW50ZXJlc3QsIG1heWJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBkcml2ZXIgbW9kZWwsIGZlYXR1cmUgc2V0LCBvciBhIGdsb2JhbCBjb250cm9sLiBMZXQncyBzZWUgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYmVpbmcgZXhwb3NlZCB0aGVyZS4uLiBJIGV4cGVjdCBpdCdzIGxpa2VseSBhIGNvbXBsZXggc3RydWN0dXJlLCBzbyBJIHdpbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB3aGF0IGRlcGVuZHMgb24gd2hhdC4uLiBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoYXQncyBjb250cm9sbGVkIGJ5IHdoaWNoIG9mIHRoZSBkcml2ZXJzIG9yIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI1NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjM5OjEwLjI2Njc1NTU4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdFxcbiAyOTE6XFx0Y29uZmlnIElDRVxcbiAyOTI6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydFxcXCJcXG4gMjkzOlxcdFxcdGRlZmF1bHQgblxcbiAyOTQ6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuIDI5NTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuIDI5NjpcXHRcXHRkZXBlbmRzIG9uIEdOU1MgfHwgR05TUyA9IG5cXG4gMjk3OlxcdFxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuIDI5ODpcXHRcXHRzZWxlY3QgRElNTElCXFxuIDI5OTpcXHRcXHRzZWxlY3QgTElCRVRIX1hEUFxcbiAzMDA6XFx0XFx0c2VsZWN0IExJQklFXFxuIDMwMTpcXHRcXHRzZWxlY3QgTElCSUVfQURNSU5RXFxuIDMwMjpcXHRcXHRzZWxlY3QgTElCSUVfRldMT0cgaWYgREVCVUdfRlNcXG4gMzAzOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAzMDQ6XFx0XFx0c2VsZWN0IFBBQ0tJTkdcXG4gMzA1OlxcdFxcdHNlbGVjdCBQTERNRldcXG4gMzA2OlxcdFxcdHNlbGVjdCBEUExMXFxuIDMwNzpcXHRcXHRoZWxwXFxuIDMwODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgb2ZcXG4gMzA5OlxcdFxcdCAgZGV2aWNlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvXFxuIDMxMDpcXHRcXHQgIHRvIHRoZSBBZGFwdGVyIFxcdTAwMjYgRHJpdmVyIElEIEd1aWRlIHRoYXQgY2FuIGJlIGxvY2F0ZWQgYXQ6XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly9zdXBwb3J0LmludGVsLmNvbVxcdTAwM2VcXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gMzE1OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3RcXHUwMDNlLlxcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gMzE4OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgaWNlLlxcbiAzMTk6XFx0XFxuIDMyMDpcXHRjb25maWcgSUNFX0hXTU9OXFxuIDMyMTpcXHRcXHRib29sIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIFN1cHBvcnQgSFdNT04gc3VwcG9ydFxcXCJcXG4gMzIyOlxcdFxcdGRlZmF1bHQgeVxcbiAzMjM6XFx0XFx0ZGVwZW5kcyBvbiBJQ0UgXFx1MDAyNlxcdTAwMjYgSFdNT04gXFx1MDAyNlxcdTAwMjYgIShJQ0U9eSBcXHUwMDI2XFx1MDAyNiBIV01PTj1tKVxcbiAzMjQ6XFx0XFx0aGVscFxcbiAzMjU6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byBleHBvc2UgdGhlcm1hbCBzZW5zb3IgZGF0YSBvbiBJbnRlbCBkZXZpY2VzLlxcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHQgIFNvbWUgb2Ygb3VyIGRldmljZXMgY29udGFpbiBpbnRlcm5hbCB0aGVybWFsIHNlbnNvcnMuXFxuIDMyODpcXHRcXHQgIFRoaXMgZGF0YSBpcyBhdmFpbGFibGUgdmlhIHRoZSBod21vbiBzeXNmcyBpbnRlcmZhY2UgYW5kIGV4cG9zZXNcXG4gMzI5OlxcdFxcdCAgdGhlIG9uYm9hcmQgc2Vuc29ycy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6Mzk6MTAuMjY2ODQxMjk5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIwMjA0ODg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgV29ydGgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgSW50ZWwgSUNFIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AuIExvb2tzIGxpa2UgaXQncyB0d2Vha2luZyB0aGUgbG9ja2luZyBhbmQgUkNVIHNhZmV0eSBhcm91bmQgYWNjZXNzIHRvIHRoZSBjb250cm9sIFBGIGFuZCB0aGUgUFRQIGhhcmR3YXJlLCByZXByZXNlbnRlZCBieSBgYWRhcHRlci1cdTAwM2VjdHJsX3BmYC4gSSBrbm93IHRoZSBJQ0UgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgdGhvc2UgSW50ZWwgRTgwMCBzZXJpZXMgY2FyZHMg4oCTIEU4MTAsIEU4MjUsIEU4MzAsIHRoYXQgc29ydCBvZiB0aGluZy4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCAqdGhpcyBkcml2ZXIgaXMgZm9yIHBoeXNpY2FsIFBDSWUgbmV0d29yayBjYXJkcy4qIEFuZCB0aG9zZSBjYXJkcyBhcmVuJ3QgdHlwaWNhbGx5IGVtdWxhdGVkIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgaW4gdGhlIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXBzIHdlIHVzZS5cblxuVGhhdCdzIHRoZSBrZXkuIEkgcmVtZW1iZXIgdGhlIHJ1bGU6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiIFRoaXMgYWJzb2x1dGVseSBmYWxscyB1bmRlciB0aGF0IGNhdGVnb3J5LiBUaGUgSUNFIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVyLiBJdCdzIGRlc2lnbmVkIGZvciBoYXJkd2FyZSB0aGF0IGlzbid0IHJlcGxpY2F0ZWQgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnRzIHdlIHVzZS5cblxuU28sIHRoaXMgaXMgYSBjbGVhciBcIm5vXCIgb24gV29ydGhGdXp6aW5nLiBJdCdzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IGJlY2F1c2Ugd2UgY2FuJ3QgYWRlcXVhdGVseSB0ZXN0IGl0IHdpdGhpbiBvdXIgc3RhbmRhcmQgaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgcmVzdWx0cy5cblxuVGhlIHNldHRpbmdzIHdpbGwgYmU6XG5cbiogICAqKldvcnRoRnV6emluZzogZmFsc2UqKlxuKiAgICoqRm9jdXNTeW1ib2xzOiBcXFsgXSoqICh3ZSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYW55IGZvY3VzIHN5bWJvbHMgaGVyZSlcbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcWyBdKiogKG5vIGNvbmZpZ3MgdG8gZW5hYmxlKVxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvYCksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgTklDIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VL0dDRSkuIFRoZXJlZm9yZSwgaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuXG5cbkxldCdzIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwODcsIk91dHB1dFRva2VucyI6NzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDozOToxNC40Njg4OTI3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgc2VyaWVzIChpY2UpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBwaHlzaWNhbCBJbnRlbCBQQ0llIG5ldHdvcmsgYWRhcHRlcnMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIHNlcmllcyAoaWNlKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgcGh5c2ljYWwgSW50ZWwgUENJZSBuZXR3b3JrIGFkYXB0ZXJzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6Mzk6MTQuNDY4OTE4MTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow47fq6[1] Phase: Running StartedAt: 2026-09-01 00:39:25 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47fq6[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-01 00:39:25 +0000 UTC FinishedAt: 2026-09-01 00:39:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}