Name: series-workflowg57hz Phase: Failed StartedAt: 2026-09-04 23:52:12 +0000 UTC FinishedAt: 2026-09-05 00:18:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg57hz[0] Phase: Succeeded StartedAt: 2026-09-04 23:52:12 +0000 UTC FinishedAt: 2026-09-05 00:18:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg57hz[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 23:52:12 +0000 UTC FinishedAt: 2026-09-05 00:18:37 +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+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vKSwgd2hpY2ggaW50ZXJhY3RzIHdpdGggYSBzcGVjaWZpYyBwaHlzaWNhbCBNRElPLWNvbm5lY3RlZCBzd2l0Y2ggQVNJQy4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzIxN2EyNjI3NGU3NTkxNjI0Y2E3YTA4OTNkZDA2MDYzODlhMWZkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDA6MTc6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbmluZGV4IGFlYjEyY2I5MWY5MzUuLjVjMmQzNGVjMDVmYzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG5AQCAtMiw0ICYjNDM7Miw1IEBAXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiB5dDkyMXgtb2JqcyA6PSBjaGlwLm9cbiB5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMub1xuJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gbWliLm9cbiB5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCBkNjYzYWYwMTBmNDMxLi5iNDA1OTA1M2VmMTUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTksNiAmIzQzOzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvcnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91NjRfc3RhdHNfc3luYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzY3AuaFx1MDAzZVxuQEAgLTI3LDc1ICYjNDM7MjgsOSBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2xlZHMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDttaWIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4gXG4tc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG4tXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbi1cdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4tXHRjb25zdCBjaGFyICpuYW1lO1xuLX07XG4tXG4tI2RlZmluZSBNSUJfREVTQyhfc2l6ZSwgX29mZnNldCwgX25hbWUpIFxcXG4tXHR7X3NpemUsIF9vZmZzZXQsIF9uYW1lfVxuLVxuLS8qIE11c3QgYWdyZWUgd2l0aCB5dDkyMXhfbWliXG4tICpcbi0gKiBVbnN0cnVjdHVyZWQgZmllbGRzIChuYW1lICE9IE5VTEwpIHdpbGwgYXBwZWFyIGluIGdldF9ldGh0b29sX3N0YXRzKCksXG4tICogc3RydWN0dXJlZCBnbyB0byB0aGVpciAqX3N0YXRzKCkgbWV0aG9kcywgYnV0IHdlIG5lZWQgdGhlaXIgc2l6ZXMgYW5kIG9mZnNldHNcbi0gKiB0byBwZXJmb3JtIDMyYml0IE1JQiBvdmVyZmxvdyB3cmFwYXJvdW5kLlxuLSAqL1xuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHl0OTIxeF9taWJfZGVzY3NbXSA9IHtcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1QsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9NVUxUSUNBU1QsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0NSQ19FUlIsIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0FMSUdOX0VSUiwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfVU5ERVJTSVpFX0VSUiwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfRlJBR19FUlIsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NCwgTlVMTCksXG4tXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyNywgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEyOF9UT18yNTUsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8yNTZfVE9fNTExLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMDI0X1RPXzE1MTgsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksXG4tXHRNSUJfREVTQygyLCBZVDkyMVhfTUlCX0RBVEFfUlhfR09PRF9CWVRFUywgTlVMTCksXG4tXG4tXHRNSUJfREVTQygyLCBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTLCBcJiMzNDtSeEJhZEJ5dGVzXCYjMzQ7KSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9PVkVSU0laRV9FUlIsIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0RST1BQRUQsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0JST0FEQ0FTVCwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEFVU0UsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJQ0FTVCwgTlVMTCksXG4tXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUiwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY0LCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTI4X1RPXzI1NSwgTlVMTCksXG4tXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzI1Nl9UT181MTEsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyMywgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzE1MTlfVE9fTUFYLCBOVUxMKSxcbi1cbi1cdE1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9DT0xMSVNJT04sIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04sIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTiwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfU0lOR0xFX0NPTExJU0lPTiwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtULCBOVUxMKSxcbi1cbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9ERUZFUlJFRCwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTEFURV9DT0xMSVNJT04sIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX09BTSwgXCYjMzQ7UnhPQU1cJiMzNDspLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX09BTSwgXCYjMzQ7VHhPQU1cJiMzNDspLFxuLX07XG4tXG4gc3RydWN0IHl0OTIxeF9pbmZvIHtcbiBcdGNvbnN0IGNoYXIgKm5hbWU7XG4gXHR1MTYgbWFqb3I7XG5AQCAtMTU0LDE0ICYjNDM7ODksNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuIFxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcdDQwOTVcbiBcbi0vKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuLSAqXG4tICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuLSAqIHRoZXJlKSwgd2UgaGF2ZSB0byBwb2xsIHN0YXRzIG1vcmUgZnJlcXVlbnRseSB0aGVuIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC5cbi0gKiBGb3Igb3ZlcmZsb3cgcHJvdGVjdGlvbiwgbm9ybWFsbHksIDEwMCBzZWMgaW50ZXJ2YWwgc2hvdWxkIGhhdmUgYmVlbiBPSy5cbi0gKi9cbi0jZGVmaW5lIFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTXHQoMyAqIEhaKVxuLVxuIHN0cnVjdCB5dDkyMXhfcmVnX21kaW8ge1xuIFx0c3RydWN0IG1paV9idXMgKmJ1cztcbiBcdGludCBhZGRyO1xuQEAgLTU0NCwyOTQgJiM0Mzs0NzEsNiBAQCB5dDkyMXhfbWJ1c19leHRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qIFJlYWQgYW5kIGhhbmRsZSBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLiBNSUIgYnVmZmVyIG11c3QgYmUgemVyb2VkIGJlZm9yZS4gKi9cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWFkX21pYihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuLXtcbi1cdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuLVx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuLVx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbi1cdGludCByZXMgPSAwO1xuLVxuLVx0LyogUmVhZGluZyBvZiB5dDkyMXhfcG9ydDo6bWliIGlzIG5vdCBwcm90ZWN0ZWQgYnkgYSBsb2NrIGFuZCBpdCYjMzk7cyB2YWluXG4tXHQgKiB0byBrZWVwIGl0cyBjb25zaXN0ZW5jeSwgc2luY2Ugd2UgaGF2ZSB0byByZWFkIHJlZ2lzdGVycyBvbmUgYnkgb25lXG4tXHQgKiBhbmQgdGhlcmUgaXMgbm8gd2F5IHRvIG1ha2UgYSBzbmFwc2hvdCBvZiBNSUIgc3RhdHMuXG4tXHQgKlxuLVx0ICogV3JpdGluZyAoYnkgdGhpcyBmdW5jdGlvbiBvbmx5KSBpcyBhbmQgc2hvdWxkIGJlIHByb3RlY3RlZCBieVxuLVx0ICogcmVnX2xvY2suXG4tXHQgKi9cbi1cbi1cdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcbi1cdFx0dTMyIHJlZyA9IFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpICYjNDM7IGRlc2MtXHUwMDNlb2Zmc2V0O1xuLVx0XHR1NjQgKnZhbHAgPSBcdTAwMjYoKHU2NCAqKW1pYilbaV07XG4tXHRcdHUzMiB2YWwwO1xuLVx0XHR1NjQgdmFsO1xuLVxuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2YWwwKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0aWYgKGRlc2MtXHUwMDNlc2l6ZSBcdTAwM2M9IDEpIHtcbi1cdFx0XHR1NjQgb2xkX3ZhbCA9ICp2YWxwO1xuLVxuLVx0XHRcdHZhbCA9IChvbGRfdmFsIFx1MDAyNiB+KHU2NClVMzJfTUFYKSB8IHZhbDA7XG4tXHRcdFx0aWYgKHZhbCBcdTAwM2Mgb2xkX3ZhbClcbi1cdFx0XHRcdHZhbCAmIzQzOz0gMXVsbCBcdTAwM2NcdTAwM2MgMzI7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0dTMyIHZhbDE7XG4tXG4tXHRcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0LCBcdTAwMjZ2YWwxKTtcbi1cdFx0XHRpZiAocmVzKVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0dmFsID0gKCh1NjQpdmFsMSBcdTAwM2NcdTAwM2MgMzIpIHwgdmFsMDtcbi1cdFx0fVxuLVxuLVx0XHRXUklURV9PTkNFKCp2YWxwLCB2YWwpO1xuLVx0fVxuLVxuLVx0cHAtXHUwMDNlcnhfZnJhbWVzID0gbWliLVx1MDAzZXJ4XzY0Ynl0ZSAmIzQzOyBtaWItXHUwMDNlcnhfNjVfMTI3Ynl0ZSAmIzQzO1xuLVx0XHRcdG1pYi1cdTAwM2VyeF8xMjhfMjU1Ynl0ZSAmIzQzOyBtaWItXHUwMDNlcnhfMjU2XzUxMWJ5dGUgJiM0Mztcbi1cdFx0XHRtaWItXHUwMDNlcnhfNTEyXzEwMjNieXRlICYjNDM7IG1pYi1cdTAwM2VyeF8xMDI0XzE1MThieXRlICYjNDM7XG4tXHRcdFx0bWliLVx1MDAzZXJ4X2p1bWJvO1xuLVx0cHAtXHUwMDNldHhfZnJhbWVzID0gbWliLVx1MDAzZXR4XzY0Ynl0ZSAmIzQzOyBtaWItXHUwMDNldHhfNjVfMTI3Ynl0ZSAmIzQzO1xuLVx0XHRcdG1pYi1cdTAwM2V0eF8xMjhfMjU1Ynl0ZSAmIzQzOyBtaWItXHUwMDNldHhfMjU2XzUxMWJ5dGUgJiM0Mztcbi1cdFx0XHRtaWItXHUwMDNldHhfNTEyXzEwMjNieXRlICYjNDM7IG1pYi1cdTAwM2V0eF8xMDI0XzE1MThieXRlICYjNDM7XG4tXHRcdFx0bWliLVx1MDAzZXR4X2p1bWJvO1xuLVxuLVx0aWYgKHJlcylcbi1cdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxcblwmIzM0OywgXCYjMzQ7cmVhZCBzdGF0cyBmb3JcJiMzNDssXG4tXHRcdFx0cG9ydCwgcmVzKTtcbi1cdHJldHVybiByZXM7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHl0OTIxeF9wb2xsX21pYihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4te1xuLVx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IGNvbnRhaW5lcl9vZl9jb25zdCh3b3JrLCBzdHJ1Y3QgeXQ5MjF4X3BvcnQsXG4tXHRcdFx0XHRcdFx0ICAgIG1pYl9yZWFkLndvcmspO1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gKHZvaWQgKikocHAgLSBwcC1cdTAwM2VpbmRleCkgLVxuLVx0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0cyk7XG4tXHR1bnNpZ25lZCBsb25nIGRlbGF5ID0gWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVM7XG4tXHRpbnQgcG9ydCA9IHBwLVx1MDAzZWluZGV4O1xuLVx0aW50IHJlcztcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXHRyZXMgPSB5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXHRpZiAocmVzKVxuLVx0XHRkZWxheSAqPSA0O1xuLVxuLVx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkLCBkZWxheSk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkXG4teXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LFxuLVx0XHQgICAgICAgdWludDhfdCAqZGF0YSlcbi17XG4tXHRpZiAoc3RyaW5nc2V0ICE9IEVUSF9TU19TVEFUUylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuLVxuLVx0XHRpZiAoZGVzYy1cdTAwM2VuYW1lKVxuLVx0XHRcdGV0aHRvb2xfcHV0cyhcdTAwMjZkYXRhLCBkZXNjLVx1MDAzZW5hbWUpO1xuLVx0fVxuLX1cbi1cbi1zdGF0aWMgdm9pZFxuLXl0OTIxeF9kc2FfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdWludDY0X3QgKmRhdGEpXG4te1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuLVx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4tXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuLVx0c2l6ZV90IGo7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVxuLVx0aiA9IDA7XG4tXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG4tXG4tXHRcdGlmICghZGVzYy1cdTAwM2VuYW1lKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRkYXRhW2pdID0gKCh1NjQgKiltaWIpW2ldO1xuLVx0XHRqJiM0MzsmIzQzOztcbi1cdH1cbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxuLXtcbi1cdGludCBjbnQgPSAwO1xuLVxuLVx0aWYgKHNzZXQgIT0gRVRIX1NTX1NUQVRTKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcbi1cbi1cdFx0aWYgKGRlc2MtXHUwMDNlbmFtZSlcbi1cdFx0XHRjbnQmIzQzOyYjNDM7O1xuLVx0fVxuLVxuLVx0cmV0dXJuIGNudDtcbi19XG4tXG4tc3RhdGljIHZvaWRcbi15dDkyMXhfZHNhX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG4te1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuLVx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4tXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi1cdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi1cbi1cdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LID0gcHAtXHUwMDNldHhfZnJhbWVzO1xuLVx0bWFjX3N0YXRzLVx1MDAzZVNpbmdsZUNvbGxpc2lvbkZyYW1lcyA9IG1pYi1cdTAwM2V0eF9zaW5nbGVfY29sbGlzaW9ucztcbi1cdG1hY19zdGF0cy1cdTAwM2VNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyA9IG1pYi1cdTAwM2V0eF9tdWx0aXBsZV9jb2xsaXNpb25zO1xuLVx0bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1JlY2VpdmVkT0sgPSBwcC1cdTAwM2VyeF9mcmFtZXM7XG4tXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVDaGVja1NlcXVlbmNlRXJyb3JzID0gbWliLVx1MDAzZXJ4X2NyY19lcnJvcnM7XG4tXHRtYWNfc3RhdHMtXHUwMDNlQWxpZ25tZW50RXJyb3JzID0gbWliLVx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnM7XG4tXHRtYWNfc3RhdHMtXHUwMDNlT2N0ZXRzVHJhbnNtaXR0ZWRPSyA9IG1pYi1cdTAwM2V0eF9nb29kX2J5dGVzO1xuLVx0bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1dpdGhEZWZlcnJlZFhtaXNzaW9ucyA9IG1pYi1cdTAwM2V0eF9kZWZlcnJlZDtcbi1cdG1hY19zdGF0cy1cdTAwM2VMYXRlQ29sbGlzaW9ucyA9IG1pYi1cdTAwM2V0eF9sYXRlX2NvbGxpc2lvbnM7XG4tXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzQWJvcnRlZER1ZVRvWFNDb2xscyA9IG1pYi1cdTAwM2V0eF9hYm9ydGVkX2Vycm9ycztcbi1cdC8qIG1hY19zdGF0cy1cdTAwM2VGcmFtZXNMb3N0RHVlVG9JbnRNQUNYbWl0RXJyb3IgKi9cbi1cdC8qIG1hY19zdGF0cy1cdTAwM2VDYXJyaWVyU2Vuc2VFcnJvcnMgKi9cbi1cdG1hY19zdGF0cy1cdTAwM2VPY3RldHNSZWNlaXZlZE9LID0gbWliLVx1MDAzZXJ4X2dvb2RfYnl0ZXM7XG4tXHQvKiBtYWNfc3RhdHMtXHUwMDNlRnJhbWVzTG9zdER1ZVRvSW50TUFDUmN2RXJyb3IgKi9cbi1cdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0sgPSBtaWItXHUwMDNldHhfbXVsdGljYXN0O1xuLVx0bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyA9IG1pYi1cdTAwM2V0eF9icm9hZGNhc3Q7XG4tXHQvKiBtYWNfc3RhdHMtXHUwMDNlRnJhbWVzV2l0aEV4Y2Vzc2l2ZURlZmVycmFsICovXG4tXHRtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IG1pYi1cdTAwM2VyeF9tdWx0aWNhc3Q7XG4tXHRtYWNfc3RhdHMtXHUwMDNlQnJvYWRjYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IG1pYi1cdTAwM2VyeF9icm9hZGNhc3Q7XG4tXHQvKiBtYWNfc3RhdHMtXHUwMDNlSW5SYW5nZUxlbmd0aEVycm9ycyAqL1xuLVx0LyogbWFjX3N0YXRzLVx1MDAzZU91dE9mUmFuZ2VMZW5ndGhGaWVsZCAqL1xuLVx0bWFjX3N0YXRzLVx1MDAzZUZyYW1lVG9vTG9uZ0Vycm9ycyA9IG1pYi1cdTAwM2VyeF9vdmVyc2l6ZV9lcnJvcnM7XG4tfVxuLVxuLXN0YXRpYyB2b2lkXG4teXQ5MjF4X2RzYV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcbi17XG4tXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4tXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbi1cdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVxuLVx0Y3RybF9zdGF0cy1cdTAwM2VNQUNDb250cm9sRnJhbWVzVHJhbnNtaXR0ZWQgPSBtaWItXHUwMDNldHhfcGF1c2U7XG4tXHRjdHJsX3N0YXRzLVx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCA9IG1pYi1cdTAwM2VyeF9wYXVzZTtcbi1cdC8qIGN0cmxfc3RhdHMtXHUwMDNlVW5zdXBwb3J0ZWRPcGNvZGVzUmVjZWl2ZWQgKi9cbi19XG4tXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSB5dDkyMXhfcm1vbl9yYW5nZXNbXSA9IHtcbi1cdHsgMCwgNjQgfSxcbi1cdHsgNjUsIDEyNyB9LFxuLVx0eyAxMjgsIDI1NSB9LFxuLVx0eyAyNTYsIDUxMSB9LFxuLVx0eyA1MTIsIDEwMjMgfSxcbi1cdHsgMTAyNCwgMTUxOCB9LFxuLVx0eyAxNTE5LCBZVDkyMVhfRlJBTUVfU0laRV9NQVggfSxcbi1cdHt9XG4tfTtcbi1cbi1zdGF0aWMgdm9pZFxuLXl0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi1cdFx0XHQgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXG4tXHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXG4te1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuLVx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4tXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi1cdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi1cbi1cdCpyYW5nZXMgPSB5dDkyMXhfcm1vbl9yYW5nZXM7XG4tXG4tXHRybW9uX3N0YXRzLVx1MDAzZXVuZGVyc2l6ZV9wa3RzID0gbWliLVx1MDAzZXJ4X3VuZGVyc2l6ZV9lcnJvcnM7XG4tXHRybW9uX3N0YXRzLVx1MDAzZW92ZXJzaXplX3BrdHMgPSBtaWItXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VmcmFnbWVudHMgPSBtaWItXHUwMDNlcnhfYWxpZ25tZW50X2Vycm9ycztcbi1cdC8qIHJtb25fc3RhdHMtXHUwMDNlamFiYmVycyAqL1xuLVxuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzBdID0gbWliLVx1MDAzZXJ4XzY0Ynl0ZTtcbi1cdHJtb25fc3RhdHMtXHUwMDNlaGlzdFsxXSA9IG1pYi1cdTAwM2VyeF82NV8xMjdieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzJdID0gbWliLVx1MDAzZXJ4XzEyOF8yNTVieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzNdID0gbWliLVx1MDAzZXJ4XzI1Nl81MTFieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzRdID0gbWliLVx1MDAzZXJ4XzUxMl8xMDIzYnl0ZTtcbi1cdHJtb25fc3RhdHMtXHUwMDNlaGlzdFs1XSA9IG1pYi1cdTAwM2VyeF8xMDI0XzE1MThieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzZdID0gbWliLVx1MDAzZXJ4X2p1bWJvO1xuLVxuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzBdID0gbWliLVx1MDAzZXR4XzY0Ynl0ZTtcbi1cdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFsxXSA9IG1pYi1cdTAwM2V0eF82NV8xMjdieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzJdID0gbWliLVx1MDAzZXR4XzEyOF8yNTVieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzNdID0gbWliLVx1MDAzZXR4XzI1Nl81MTFieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzRdID0gbWliLVx1MDAzZXR4XzUxMl8xMDIzYnl0ZTtcbi1cdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs1XSA9IG1pYi1cdTAwM2V0eF8xMDI0XzE1MThieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzZdID0gbWliLVx1MDAzZXR4X2p1bWJvO1xuLX1cbi1cbi1zdGF0aWMgdm9pZFxuLXl0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi1cdFx0ICAgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4te1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuLVx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4tXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuLVxuLVx0c3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9IG1pYi1cdTAwM2VyeF91bmRlcnNpemVfZXJyb3JzICYjNDM7XG4tXHRcdFx0XHQgIG1pYi1cdTAwM2VyeF9mcmFnbWVudF9lcnJvcnM7XG4tXHRzdGF0cy1cdTAwM2VyeF9vdmVyX2Vycm9ycyA9IG1pYi1cdTAwM2VyeF9vdmVyc2l6ZV9lcnJvcnM7XG4tXHRzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzID0gbWliLVx1MDAzZXJ4X2NyY19lcnJvcnM7XG4tXHRzdGF0cy1cdTAwM2VyeF9mcmFtZV9lcnJvcnMgPSBtaWItXHUwMDNlcnhfYWxpZ25tZW50X2Vycm9ycztcbi1cdC8qIHN0YXRzLVx1MDAzZXJ4X2ZpZm9fZXJyb3JzICovXG4tXHQvKiBzdGF0cy1cdTAwM2VyeF9taXNzZWRfZXJyb3JzICovXG4tXG4tXHRzdGF0cy1cdTAwM2V0eF9hYm9ydGVkX2Vycm9ycyA9IG1pYi1cdTAwM2V0eF9hYm9ydGVkX2Vycm9ycztcbi1cdC8qIHN0YXRzLVx1MDAzZXR4X2NhcnJpZXJfZXJyb3JzICovXG4tXHRzdGF0cy1cdTAwM2V0eF9maWZvX2Vycm9ycyA9IG1pYi1cdTAwM2V0eF91bmRlcnNpemVfZXJyb3JzO1xuLVx0Lyogc3RhdHMtXHUwMDNldHhfaGVhcnRiZWF0X2Vycm9ycyAqL1xuLVx0c3RhdHMtXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IG1pYi1cdTAwM2V0eF9sYXRlX2NvbGxpc2lvbnM7XG4tXG4tXHRzdGF0cy1cdTAwM2VyeF9wYWNrZXRzID0gcHAtXHUwMDNlcnhfZnJhbWVzO1xuLVx0c3RhdHMtXHUwMDNldHhfcGFja2V0cyA9IHBwLVx1MDAzZXR4X2ZyYW1lcztcbi1cdHN0YXRzLVx1MDAzZXJ4X2J5dGVzID0gbWliLVx1MDAzZXJ4X2dvb2RfYnl0ZXMgLSBFVEhfRkNTX0xFTiAqIHN0YXRzLVx1MDAzZXJ4X3BhY2tldHM7XG4tXHRzdGF0cy1cdTAwM2V0eF9ieXRlcyA9IG1pYi1cdTAwM2V0eF9nb29kX2J5dGVzIC0gRVRIX0ZDU19MRU4gKiBzdGF0cy1cdTAwM2V0eF9wYWNrZXRzO1xuLVx0c3RhdHMtXHUwMDNlcnhfZXJyb3JzID0gc3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyAmIzQzOyBzdGF0cy1cdTAwM2VyeF9vdmVyX2Vycm9ycyAmIzQzO1xuLVx0XHRcdCAgIHN0YXRzLVx1MDAzZXJ4X2NyY19lcnJvcnMgJiM0Mzsgc3RhdHMtXHUwMDNlcnhfZnJhbWVfZXJyb3JzO1xuLVx0c3RhdHMtXHUwMDNldHhfZXJyb3JzID0gc3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgJiM0Mzsgc3RhdHMtXHUwMDNldHhfZmlmb19lcnJvcnMgJiM0Mztcbi1cdFx0XHQgICBzdGF0cy1cdTAwM2V0eF93aW5kb3dfZXJyb3JzO1xuLVx0c3RhdHMtXHUwMDNlcnhfZHJvcHBlZCA9IG1pYi1cdTAwM2VyeF9kcm9wcGVkO1xuLVx0Lyogc3RhdHMtXHUwMDNldHhfZHJvcHBlZCAqL1xuLVx0c3RhdHMtXHUwMDNlbXVsdGljYXN0ID0gbWliLVx1MDAzZXJ4X211bHRpY2FzdDtcbi1cdHN0YXRzLVx1MDAzZWNvbGxpc2lvbnMgPSBtaWItXHUwMDNldHhfY29sbGlzaW9ucztcbi19XG4tXG4tc3RhdGljIHZvaWRcbi15dDkyMXhfZHNhX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLVx0XHRcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcbi17XG4tXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4tXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbi1cdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVxuLVx0cGF1c2Vfc3RhdHMtXHUwMDNldHhfcGF1c2VfZnJhbWVzID0gbWliLVx1MDAzZXR4X3BhdXNlO1xuLVx0cGF1c2Vfc3RhdHMtXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gbWliLVx1MDAzZXJ4X3BhdXNlO1xuLX1cbi1cbiBzdGF0aWMgaW50XG4geXQ5MjF4X3NldF9lZWUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZSlcbiB7XG5AQCAtMzk1MywxMSAmIzQzOzM1OTIsMTQgQEAgeXQ5MjF4X3BoeWxpbmtfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG4ge1xuIFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV9waHlsaW5rX3RvX3BvcnQoY29uZmlnKTtcbiBcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRwLVx1MDAzZWRzKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG07XG4gXHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuIFx0aW50IHJlcztcbiBcbiBcdC8qIE5vIG5lZWQgdG8gc3luYzsgcG9ydCBjb250cm9sIGJsb2NrIGlzIGhvbGQgdW50aWwgZGV2aWNlIHJlbW92ZSAqL1xuLVx0Y2FuY2VsX2RlbGF5ZWRfd29yayhcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdLm1pYl9yZWFkKTtcbiYjNDM7XHRwbSA9IHByaXYtXHUwMDNlcG9ydHNbcG9ydF0ubWliO1xuJiM0MztcdGlmIChwbSlcbiYjNDM7XHRcdGNhbmNlbF9kZWxheWVkX3dvcmsoXHUwMDI2cG0tXHUwMDNld29yayk7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuIFx0cmVzID0geXQ5MjF4X3BvcnRfZG93bihwcml2LCBwb3J0KTtcbkBAIC0zOTc2LDYgJiM0MzszNjE4LDcgQEAgeXQ5MjF4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4ge1xuIFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV9waHlsaW5rX3RvX3BvcnQoY29uZmlnKTtcbiBcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRwLVx1MDAzZWRzKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG07XG4gXHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuIFx0aW50IHJlcztcbiBcbkBAIC0zOTg4LDcgJiM0MzszNjMxLDkgQEAgeXQ5MjF4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHRcdGRldl9lcnIoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcXG5cJiMzNDssIFwmIzM0O2JyaW5nIHVwXCYjMzQ7LFxuIFx0XHRcdHBvcnQsIHJlcyk7XG4gXG4tXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5taWJfcmVhZCwgMCk7XG4mIzQzO1x0cG0gPSBwcml2LVx1MDAzZXBvcnRzW3BvcnRdLm1pYjtcbiYjNDM7XHRpZiAocG0pXG4mIzQzO1x0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cG0tXHUwMDNld29yaywgMCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkXG5AQCAtNDEwOCwxMSAmIzQzOzM3NTMsMzYgQEAgeXQ5MjF4X2RzYV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRyZXR1cm4gRFNBX1RBR19QUk9UT19ZVDkyMVg7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB5dDkyMXhfZHNhX3BvcnRfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cdTAwM2VtaWI7XG4mIzQzO1xuJiM0MztcdGlmIChwbSlcbiYjNDM7XHRcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cG0tXHUwMDNld29yayk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB5dDkyMXhfZHNhX3BvcnRfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVx1MDAzZW1pYjtcbiBcdGludCByZXM7XG4gXG4mIzQzO1x0aWYgKCFwbSBcdTAwMjZcdTAwMjYgIShCSVQocG9ydCkgXHUwMDI2IChwcml2LVx1MDAzZWluZm8tXHUwMDNlaW50ZXJuYWxfbWFzayB8XG4mIzQzO1x0XHQgICAgIHByaXYtXHUwMDNlaW5mby1cdTAwM2VleHRlcm5hbF9tYXNrKSkpIHtcbiYjNDM7XHRcdHBtID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwbSksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFwbSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRwcC1cdTAwM2VtaWIgPSBwbTtcbiYjNDM7XG4mIzQzO1x0XHRwbS1cdTAwM2Vwb3J0ID0gcHA7XG4mIzQzO1x0XHR1NjRfc3RhdHNfaW5pdChcdTAwMjZwbS1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwbS1cdTAwM2V3b3JrLCB5dDkyMXhfbWliX3BvbGwpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuIFx0cmVzID0geXQ5MjF4X3BvcnRfc2V0dXAocHJpdiwgcG9ydCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5AQCAtNDY2Nyw2ICYjNDM7NDMzNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgeXQ5MjF4X2RzYV9zd2l0Y2hfb3BzID0ge1xuIFx0LyogcG9ydCAqL1xuIFx0LmdldF90YWdfcHJvdG9jb2xcdD0geXQ5MjF4X2RzYV9nZXRfdGFnX3Byb3RvY29sLFxuIFx0LnBoeWxpbmtfZ2V0X2NhcHNcdD0geXQ5MjF4X2RzYV9waHlsaW5rX2dldF9jYXBzLFxuJiM0MztcdC5wb3J0X3RlYXJkb3duXHRcdD0geXQ5MjF4X2RzYV9wb3J0X3RlYXJkb3duLFxuIFx0LnBvcnRfc2V0dXBcdFx0PSB5dDkyMXhfZHNhX3BvcnRfc2V0dXAsXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0RDQilcbiBcdC8qIGRzY3AgKi9cbkBAIC00Njk2LDEyICYjNDM7NDM2Nyw2IEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtXHUwMDNlcG9ydHMpOyBpLS0gXHUwMDNlIDA7ICkge1xuLVx0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbi1cbi1cdFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCk7XG4tXHR9XG4tXG4gXHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goXHUwMDI2cHJpdi1cdTAwM2Vkcyk7XG4gXG4gXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZWFjbF9ibGtzKTsgaSYjNDM7JiM0MzspIHtcbkBAIC00NzQ5LDcgJiM0Mzs0NDE0LDYgQEAgc3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuIFxuIFx0XHRwcC1cdTAwM2VpbmRleCA9IGk7XG4tXHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkLCB5dDkyMXhfcG9sbF9taWIpO1xuIFx0fVxuIFxuIFx0ZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbmluZGV4IDgzY2Q0NTQ5NTVkZGIuLmNlMjAxNTAyNjg0OWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbkBAIC0xNjcsNjkgJiM0MzsxNjcsNiBAQFxuICNkZWZpbmUgWVQ5MjFYX0VFRV9DVFJMXHRcdFx0MHhiMDAwMFxuICNkZWZpbmUgIFlUOTIxWF9FRUVfQ1RSTF9FTm4ocG9ydClcdFx0QklUKHBvcnQpXG4gXG4tI2RlZmluZSBZVDkyMVhfTUlCX0NUUkxcdFx0XHQweGMwMDA0XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX0NMRUFOXHRcdFx0QklUKDMwKVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9QT1JUX01cdFx0XHRHRU5NQVNLKDYsIDMpXG4tI2RlZmluZSAgIFlUOTIxWF9NSUJfQ1RSTF9QT1JUKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTUlCX0NUUkxfUE9SVF9NLCAoeCkpXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX09ORV9QT1JUXHRcdEJJVCgxKVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9BTExfUE9SVFx0XHRCSVQoMClcbi0jZGVmaW5lIFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpXHRcdCgweGMwMTAwICYjNDM7IDB4MTAwICogKHBvcnQpKVxuLSNkZWZpbmUgWVQ5MjFYX01JQm5fREFUQW0ocG9ydCwgeClcdChZVDkyMVhfTUlCbl9EQVRBMChwb3J0KSAmIzQzOyA0ICogKHgpKVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1RcdFx0MHgwMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QQVVTRVx0XHQweDA0XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX01VTFRJQ0FTVFx0XHQweDA4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0NSQ19FUlJcdFx0MHgwY1xuLVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9BTElHTl9FUlJcdFx0MHgxMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSXHQweDE0XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSXHRcdDB4MThcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY0XHRcdDB4MWNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyN1x0MHgyMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTI4X1RPXzI1NVx0MHgyNFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMVx0MHgyOFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjNcdDB4MmNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOFx0MHgzMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTUxOV9UT19NQVhcdDB4MzRcbi0vKiAweDM4OiB1bnVzZWQgKi9cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfR09PRF9CWVRFU1x0XHQweDNjXG4tXG4tLyogMHg0MDogNjQgYnl0ZXMgKi9cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTXHRcdDB4NDRcbi0vKiAweDQ4OiA2NCBieXRlcyAqL1xuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PVkVSU0laRV9FUlJcdDB4NGNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfRFJPUFBFRFx0XHQweDUwXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0JST0FEQ0FTVFx0XHQweDU0XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BBVVNFXHRcdDB4NThcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElDQVNUXHRcdDB4NWNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUlx0MHg2MFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjRcdFx0MHg2NFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3XHQweDY4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1XHQweDZjXG4tXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExXHQweDcwXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyM1x0MHg3NFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTAyNF9UT18xNTE4XHQweDc4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWFx0MHg3Y1xuLVxuLS8qIDB4ODA6IHVudXNlZCAqL1xuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTXHRcdDB4ODRcbi0vKiAweDg4OiA2NCBieXRlcyAqL1xuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9DT0xMSVNJT05cdFx0MHg4Y1xuLVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OXHQweDkwXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTlx0MHg5NFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OXHQweDk4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVFx0XHRcdDB4OWNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRURcdFx0MHhhMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9MQVRFX0NPTExJU0lPTlx0MHhhNFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PQU1cdFx0XHQweGE4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX09BTVx0XHRcdDB4YWNcbi1cbiAjZGVmaW5lIFlUOTIxWF9FREFUQV9DVFJMXHRcdDB4ZTAwMDBcbiAjZGVmaW5lICBZVDkyMVhfRURBVEFfQ1RSTF9BRERSX01cdFx0R0VOTUFTSygxNSwgOClcbiAjZGVmaW5lICAgWVQ5MjFYX0VEQVRBX0NUUkxfQUREUih4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0VEQVRBX0NUUkxfQUREUl9NLCAoeCkpXG5AQCAtODYxLDU4ICYjNDM7Nzk4LDYgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFx1MDAzYyA4KVxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKChwb3J0KSA9PSA4IHx8IChwb3J0KSA9PSA5KVxuIFxuLXN0cnVjdCB5dDkyMXhfbWliIHtcbi1cdHU2NCByeF9icm9hZGNhc3Q7XG4tXHR1NjQgcnhfcGF1c2U7XG4tXHR1NjQgcnhfbXVsdGljYXN0O1xuLVx0dTY0IHJ4X2NyY19lcnJvcnM7XG4tXG4tXHR1NjQgcnhfYWxpZ25tZW50X2Vycm9ycztcbi1cdHU2NCByeF91bmRlcnNpemVfZXJyb3JzO1xuLVx0dTY0IHJ4X2ZyYWdtZW50X2Vycm9ycztcbi1cdHU2NCByeF82NGJ5dGU7XG4tXG4tXHR1NjQgcnhfNjVfMTI3Ynl0ZTtcbi1cdHU2NCByeF8xMjhfMjU1Ynl0ZTtcbi1cdHU2NCByeF8yNTZfNTExYnl0ZTtcbi1cdHU2NCByeF81MTJfMTAyM2J5dGU7XG4tXG4tXHR1NjQgcnhfMTAyNF8xNTE4Ynl0ZTtcbi1cdHU2NCByeF9qdW1ibztcbi1cdHU2NCByeF9nb29kX2J5dGVzO1xuLVxuLVx0dTY0IHJ4X2JhZF9ieXRlcztcbi1cdHU2NCByeF9vdmVyc2l6ZV9lcnJvcnM7XG4tXG4tXHR1NjQgcnhfZHJvcHBlZDtcbi1cdHU2NCB0eF9icm9hZGNhc3Q7XG4tXHR1NjQgdHhfcGF1c2U7XG4tXHR1NjQgdHhfbXVsdGljYXN0O1xuLVxuLVx0dTY0IHR4X3VuZGVyc2l6ZV9lcnJvcnM7XG4tXHR1NjQgdHhfNjRieXRlO1xuLVx0dTY0IHR4XzY1XzEyN2J5dGU7XG4tXHR1NjQgdHhfMTI4XzI1NWJ5dGU7XG4tXG4tXHR1NjQgdHhfMjU2XzUxMWJ5dGU7XG4tXHR1NjQgdHhfNTEyXzEwMjNieXRlO1xuLVx0dTY0IHR4XzEwMjRfMTUxOGJ5dGU7XG4tXHR1NjQgdHhfanVtYm87XG4tXG4tXHR1NjQgdHhfZ29vZF9ieXRlcztcbi1cdHU2NCB0eF9jb2xsaXNpb25zO1xuLVxuLVx0dTY0IHR4X2Fib3J0ZWRfZXJyb3JzO1xuLVx0dTY0IHR4X211bHRpcGxlX2NvbGxpc2lvbnM7XG4tXHR1NjQgdHhfc2luZ2xlX2NvbGxpc2lvbnM7XG4tXHR1NjQgdHhfZ29vZDtcbi1cbi1cdHU2NCB0eF9kZWZlcnJlZDtcbi1cdHU2NCB0eF9sYXRlX2NvbGxpc2lvbnM7XG4tXHR1NjQgcnhfb2FtO1xuLVx0dTY0IHR4X29hbTtcbi19O1xuLVxuIHN0cnVjdCB5dDkyMXhfYWNsX2VudHJ5IHtcbiBcdHUzMiBrZXlbMl07XG4gXHR1MzIgbWFza1syXTtcbkBAIC05MzYsMTMgJiM0Mzs4MjEsOCBAQCBzdHJ1Y3QgeXQ5MjF4X2FjbF9ibGsge1xuIHN0cnVjdCB5dDkyMXhfcG9ydCB7XG4gXHR1bnNpZ25lZCBjaGFyIGluZGV4O1xuIFxuLVx0Ym9vbCBoYWlycGluO1xuLVx0Ym9vbCBpc29sYXRlZDtcbi1cbi1cdHN0cnVjdCBkZWxheWVkX3dvcmsgbWliX3JlYWQ7XG4tXHRzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7XG4tXHR1NjQgcnhfZnJhbWVzO1xuLVx0dTY0IHR4X2ZyYW1lcztcbiYjNDM7XHRib29sIGhhaXJwaW46MTtcbiYjNDM7XHRib29sIGlzb2xhdGVkOjE7XG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4gXHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuQEAgLTk1Myw2ICYjNDM7ODMzLDggQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcbiBcbiBcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcbiAjZW5kaWZcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9taWIgKm1pYjtcbiB9O1xuIFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zMDQ3OGNlNzFjMTA1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5jXG5AQCAtMCwwICYjNDM7MSw0MzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bWliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIG9mZnNldDtcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNSUJfREVTQyhfc2l6ZSwgX29mZnNldCwgX25hbWUpIHtfc2l6ZSwgX29mZnNldCwgX25hbWV9XG4mIzQzO1xuJiM0MzsvKiBNdXN0IGFncmVlIHdpdGggeXQ5MjF4X21pYlxuJiM0MzsgKlxuJiM0MzsgKiBVbnN0cnVjdHVyZWQgZmllbGRzIChuYW1lICE9IE5VTEwpIHdpbGwgYXBwZWFyIGluIGdldF9ldGh0b29sX3N0YXRzKCksXG4mIzQzOyAqIHN0cnVjdHVyZWQgZ28gdG8gdGhlaXIgKl9zdGF0cygpIG1ldGhvZHMsIGJ1dCB3ZSBuZWVkIHRoZWlyIHNpemVzIGFuZCBvZmZzZXRzXG4mIzQzOyAqIHRvIHBlcmZvcm0gMzJiaXQgTUlCIG92ZXJmbG93IHdyYXBhcm91bmQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyB5dDkyMXhfbWliX2Rlc2NzW10gPSB7XG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0JST0FEQ0FTVCwgTlVMTCksXG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFLCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfTVVMVElDQVNULCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfQ1JDX0VSUiwgTlVMTCksXG4mIzQzO1xuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9BTElHTl9FUlIsIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfRlJBR19FUlIsIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNjQsIE5VTEwpLFxuJiM0MztcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyNywgTlVMTCksXG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMjhfVE9fMjU1LCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzI1Nl9UT181MTEsIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxuJiM0MztcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksXG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksXG4mIzQzO1x0TUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0dPT0RfQllURVMsIE5VTEwpLFxuJiM0MztcbiYjNDM7XHRNSUJfREVTQygyLCBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTLCBcJiMzNDtSeEJhZEJ5dGVzXCYjMzQ7KSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfT1ZFUlNJWkVfRVJSLCBOVUxMKSxcbiYjNDM7XG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0RST1BQRUQsIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9CUk9BRENBU1QsIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QQVVTRSwgTlVMTCksXG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJQ0FTVCwgTlVMTCksXG4mIzQzO1xuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY0LCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY1X1RPXzEyNywgTlVMTCksXG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1LCBOVUxMKSxcbiYjNDM7XG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExLCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzUxMl9UT18xMDIzLCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksXG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksXG4mIzQzO1xuJiM0MztcdE1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTLCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfQ09MTElTSU9OLCBOVUxMKSxcbiYjNDM7XG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04sIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSVBMRV9DT0xMSVNJT04sIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OLCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtULCBOVUxMKSxcbiYjNDM7XG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0RFRkVSUkVELCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTEFURV9DT0xMSVNJT04sIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9PQU0sIFwmIzM0O1J4T0FNXCYjMzQ7KSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfT0FNLCBcJiMzNDtUeE9BTVwmIzM0OyksXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuJiM0MzsgKlxuJiM0MzsgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXG4mIzQzOyAqIHRoZXJlKSwgd2UgaGF2ZSB0byBwb2xsIHN0YXRzIG1vcmUgZnJlcXVlbnRseSB0aGVuIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC5cbiYjNDM7ICogRm9yIG92ZXJmbG93IHByb3RlY3Rpb24sIG5vcm1hbGx5LCAxMDAgc2VjIGludGVydmFsIHNob3VsZCBoYXZlIGJlZW4gT0suXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTXHQoMyAqIEhaKVxuJiM0MztcbiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihfZHMpIGNvbnRhaW5lcl9vZl9jb25zdChfZHMsIHN0cnVjdCB5dDkyMXhfcHJpdiwgZHMpXG4mIzQzOyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuJiM0MztcbiYjNDM7LyogUmVhZCBhbmQgaGFuZGxlIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuIE1JQiBidWZmZXIgbXVzdCBiZSB6ZXJvZWQgYmVmb3JlLiAqL1xuJiM0MztzdGF0aWMgaW50IHl0OTIxeF9taWJfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVx1MDAzZW1pYjtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliO1xuJiM0MztcdHU2NCAqYnVmID0gcG0tXHUwMDNlZGF0YTtcbiYjNDM7XHR1NjQgcnhfZnJhbWVzO1xuJiM0MztcdHU2NCB0eF9mcmFtZXM7XG4mIzQzO1x0aW50IHJlcyA9IDA7XG4mIzQzO1xuJiM0MztcdG1pYiA9IFx1MDAyNnBtLVx1MDAzZXN0YXRzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuJiM0MztcdFx0dTMyIHJlZyA9IFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpICYjNDM7IGRlc2MtXHUwMDNlb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRcdGlmIChkZXNjLVx1MDAzZXNpemUgXHUwMDNjPSAxKSB7XG4mIzQzO1x0XHRcdHU2NCBvbGRfdmFsID0gYnVmW2ldO1xuJiM0MztcdFx0XHR1MzIgdmFsMDtcbiYjNDM7XHRcdFx0dTY0IHZhbDtcbiYjNDM7XG4mIzQzO1x0XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnZhbDApO1xuJiM0MztcdFx0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdFx0dmFsID0gKG9sZF92YWwgXHUwMDI2IH4odTY0KVUzMl9NQVgpIHwgdmFsMDtcbiYjNDM7XHRcdFx0aWYgKHZhbCBcdTAwM2Mgb2xkX3ZhbClcbiYjNDM7XHRcdFx0XHR2YWwgJiM0Mzs9IDF1bGwgXHUwMDNjXHUwMDNjIDMyO1xuJiM0MztcbiYjNDM7XHRcdFx0YnVmW2ldID0gdmFsO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmVzID0geXQ5MjF4X2NvdW50ZXJfcmVhZChwcml2LCByZWcsIFx1MDAyNmJ1ZltpXSk7XG4mIzQzO1x0XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnBtLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR1NjRfc3RhdHNfc2V0KFx1MDAyNigodTY0X3N0YXRzX3QgKiltaWIpW2ldLCBidWZbaV0pO1xuJiM0MztcdHJ4X2ZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF82NGJ5dGUpICYjNDM7XG4mIzQzO1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzY1XzEyN2J5dGUpICYjNDM7XG4mIzQzO1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzEyOF8yNTVieXRlKSAmIzQzO1xuJiM0MztcdFx0ICAgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF8yNTZfNTExYnl0ZSkgJiM0MztcbiYjNDM7XHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfNTEyXzEwMjNieXRlKSAmIzQzO1xuJiM0MztcdFx0ICAgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF8xMDI0XzE1MThieXRlKSAmIzQzO1xuJiM0MztcdFx0ICAgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9qdW1ibyk7XG4mIzQzO1x0dHhfZnJhbWVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzY0Ynl0ZSkgJiM0MztcbiYjNDM7XHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfNjVfMTI3Ynl0ZSkgJiM0MztcbiYjNDM7XHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfMTI4XzI1NWJ5dGUpICYjNDM7XG4mIzQzO1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzI1Nl81MTFieXRlKSAmIzQzO1xuJiM0MztcdFx0ICAgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF81MTJfMTAyM2J5dGUpICYjNDM7XG4mIzQzO1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzEwMjRfMTUxOGJ5dGUpICYjNDM7XG4mIzQzO1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2p1bWJvKTtcbiYjNDM7XHR1NjRfc3RhdHNfc2V0KFx1MDAyNnBtLVx1MDAzZXJ4X2ZyYW1lcywgcnhfZnJhbWVzKTtcbiYjNDM7XHR1NjRfc3RhdHNfc2V0KFx1MDAyNnBtLVx1MDAzZXR4X2ZyYW1lcywgdHhfZnJhbWVzKTtcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZwbS1cdTAwM2VzeW5jcCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvICVzIHBvcnQgJWQ6ICVpXFxuXCYjMzQ7LCBcJiMzNDtyZWFkIHN0YXRzIGZvclwmIzM0OyxcbiYjNDM7XHRcdFx0cG9ydCwgcmVzKTtcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9taWJfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBjb250YWluZXJfb2ZfY29uc3Qod29yaywgc3RydWN0IHl0OTIxeF9taWIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHdvcmsud29yayk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHBtLVx1MDAzZXBvcnQ7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mX2NvbnN0KHBwLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHBvcnRzW3BwLVx1MDAzZWluZGV4XSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkZWxheSA9IFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTO1xuJiM0MztcdGludCBwb3J0ID0gcHAtXHUwMDNlaW5kZXg7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbWliX3JlYWQocHJpdiwgcG9ydCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRkZWxheSAqPSA0O1xuJiM0MztcbiYjNDM7XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cG0tXHUwMDNld29yaywgZGVsYXkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCxcbiYjNDM7XHRcdCAgICAgICB1aW50OF90ICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHN0cmluZ3NldCAhPSBFVEhfU1NfU1RBVFMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGRlc2MtXHUwMDNlbmFtZSlcbiYjNDM7XHRcdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIGRlc2MtXHUwMDNlbmFtZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdWludDY0X3QgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7XG4mIzQzO1x0dTY0ICpidWY7XG4mIzQzO1x0c2l6ZV90IGo7XG4mIzQzO1xuJiM0MztcdGlmICghcG0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bWliID0gXHUwMDI2cG0tXHUwMDNlc3RhdHM7XG4mIzQzO1x0YnVmID0gcG0tXHUwMDNlZGF0YTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0eXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpO1xuJiM0MztcbiYjNDM7XHRqID0gMDtcbiYjNDM7XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICghZGVzYy1cdTAwM2VuYW1lKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRkYXRhW2pdID0gYnVmW2ldO1xuJiM0MztcdFx0aiYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNudCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChzc2V0ICE9IEVUSF9TU19TVEFUUylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmIChkZXNjLVx1MDAzZW5hbWUpXG4mIzQzO1x0XHRcdGNudCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gY250O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7XG4mIzQzO1xuJiM0MztcdGlmICghcG0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bWliID0gXHUwMDI2cG0tXHUwMDNlc3RhdHM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTtcbiYjNDM7XG4mIzQzO1x0bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1RyYW5zbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZwbS1cdTAwM2V0eF9mcmFtZXMpO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VTaW5nbGVDb2xsaXNpb25GcmFtZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfc2luZ2xlX2NvbGxpc2lvbnMpO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9tdWx0aXBsZV9jb2xsaXNpb25zKTtcbiYjNDM7XHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNnBtLVx1MDAzZXJ4X2ZyYW1lcyk7XG4mIzQzO1x0bWFjX3N0YXRzLVx1MDAzZUZyYW1lQ2hlY2tTZXF1ZW5jZUVycm9ycyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9jcmNfZXJyb3JzKTtcbiYjNDM7XHRtYWNfc3RhdHMtXHUwMDNlQWxpZ25tZW50RXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnMpO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VPY3RldHNUcmFuc21pdHRlZE9LID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2dvb2RfYnl0ZXMpO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNXaXRoRGVmZXJyZWRYbWlzc2lvbnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfZGVmZXJyZWQpO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VMYXRlQ29sbGlzaW9ucyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9sYXRlX2NvbGxpc2lvbnMpO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNBYm9ydGVkRHVlVG9YU0NvbGxzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzKTtcbiYjNDM7XHQvKiBtYWNfc3RhdHMtXHUwMDNlRnJhbWVzTG9zdER1ZVRvSW50TUFDWG1pdEVycm9yICovXG4mIzQzO1x0LyogbWFjX3N0YXRzLVx1MDAzZUNhcnJpZXJTZW5zZUVycm9ycyAqL1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VPY3RldHNSZWNlaXZlZE9LID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2dvb2RfYnl0ZXMpO1xuJiM0MztcdC8qIG1hY19zdGF0cy1cdTAwM2VGcmFtZXNMb3N0RHVlVG9JbnRNQUNSY3ZFcnJvciAqL1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfbXVsdGljYXN0KTtcbiYjNDM7XHRtYWNfc3RhdHMtXHUwMDNlQnJvYWRjYXN0RnJhbWVzWG1pdHRlZE9LID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2Jyb2FkY2FzdCk7XG4mIzQzO1x0LyogbWFjX3N0YXRzLVx1MDAzZUZyYW1lc1dpdGhFeGNlc3NpdmVEZWZlcnJhbCAqL1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X211bHRpY2FzdCk7XG4mIzQzO1x0bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1JlY2VpdmVkT0sgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfYnJvYWRjYXN0KTtcbiYjNDM7XHQvKiBtYWNfc3RhdHMtXHUwMDNlSW5SYW5nZUxlbmd0aEVycm9ycyAqL1xuJiM0MztcdC8qIG1hY19zdGF0cy1cdTAwM2VPdXRPZlJhbmdlTGVuZ3RoRmllbGQgKi9cbiYjNDM7XHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVUb29Mb25nRXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X292ZXJzaXplX2Vycm9ycyk7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZFxuJiM0Mzt5dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cdTAwM2VtaWI7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRtaWIgPSBcdTAwMjZwbS1cdTAwM2VzdGF0cztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0eXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpO1xuJiM0MztcbiYjNDM7XHRjdHJsX3N0YXRzLVx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNUcmFuc21pdHRlZCA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9wYXVzZSk7XG4mIzQzO1x0Y3RybF9zdGF0cy1cdTAwM2VNQUNDb250cm9sRnJhbWVzUmVjZWl2ZWQgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfcGF1c2UpO1xuJiM0MztcdC8qIGN0cmxfc3RhdHMtXHUwMDNlVW5zdXBwb3J0ZWRPcGNvZGVzUmVjZWl2ZWQgKi9cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIHl0OTIxeF9ybW9uX3Jhbmdlc1tdID0ge1xuJiM0MztcdHsgMCwgNjQgfSxcbiYjNDM7XHR7IDY1LCAxMjcgfSxcbiYjNDM7XHR7IDEyOCwgMjU1IH0sXG4mIzQzO1x0eyAyNTYsIDUxMSB9LFxuJiM0MztcdHsgNTEyLCAxMDIzIH0sXG4mIzQzO1x0eyAxMDI0LCAxNTE4IH0sXG4mIzQzO1x0eyAxNTE5LCBZVDkyMVhfRlJBTUVfU0laRV9NQVggfSxcbiYjNDM7XHR7fVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dm9pZFxuJiM0Mzt5dDkyMXhfZHNhX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbiYjNDM7XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7XG4mIzQzO1xuJiM0MztcdGlmICghcG0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bWliID0gXHUwMDI2cG0tXHUwMDNlc3RhdHM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTtcbiYjNDM7XG4mIzQzO1x0KnJhbmdlcyA9IHl0OTIxeF9ybW9uX3JhbmdlcztcbiYjNDM7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2V1bmRlcnNpemVfcGt0cyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF91bmRlcnNpemVfZXJyb3JzKTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZW92ZXJzaXplX3BrdHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzKTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWZyYWdtZW50cyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9hbGlnbm1lbnRfZXJyb3JzKTtcbiYjNDM7XHQvKiBybW9uX3N0YXRzLVx1MDAzZWphYmJlcnMgKi9cbiYjNDM7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzBdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzY0Ynl0ZSk7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzFdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzY1XzEyN2J5dGUpO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFsyXSA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF8xMjhfMjU1Ynl0ZSk7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzNdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzI1Nl81MTFieXRlKTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbNF0gPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfNTEyXzEwMjNieXRlKTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbNV0gPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfMTAyNF8xNTE4Ynl0ZSk7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzZdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2p1bWJvKTtcbiYjNDM7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzBdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzY0Ynl0ZSk7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzFdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzY1XzEyN2J5dGUpO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFsyXSA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF8xMjhfMjU1Ynl0ZSk7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzNdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzI1Nl81MTFieXRlKTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbNF0gPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfNTEyXzEwMjNieXRlKTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbNV0gPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfMTAyNF8xNTE4Ynl0ZSk7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzZdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2p1bWJvKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVx1MDAzZW1pYjtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliO1xuJiM0MztcdHVuc2lnbmVkIGludCBzdGFydDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRtaWIgPSBcdTAwMjZwbS1cdTAwM2VzdGF0cztcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2cG0tXHUwMDNlc3luY3ApO1xuJiM0MztcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfdW5kZXJzaXplX2Vycm9ycykgJiM0MztcbiYjNDM7XHRcdFx0XHRcdCAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2ZyYWdtZW50X2Vycm9ycyk7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9vdmVyX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9vdmVyc2l6ZV9lcnJvcnMpO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9jcmNfZXJyb3JzKTtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXJ4X2ZyYW1lX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9hbGlnbm1lbnRfZXJyb3JzKTtcbiYjNDM7XHRcdC8qIHN0YXRzLVx1MDAzZXJ4X2ZpZm9fZXJyb3JzICovXG4mIzQzO1x0XHQvKiBzdGF0cy1cdTAwM2VyeF9taXNzZWRfZXJyb3JzICovXG4mIzQzO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMpO1xuJiM0MztcdFx0Lyogc3RhdHMtXHUwMDNldHhfY2Fycmllcl9lcnJvcnMgKi9cbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXR4X2ZpZm9fZXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X3VuZGVyc2l6ZV9lcnJvcnMpO1xuJiM0MztcdFx0Lyogc3RhdHMtXHUwMDNldHhfaGVhcnRiZWF0X2Vycm9ycyAqL1xuJiM0MztcdFx0c3RhdHMtXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9sYXRlX2NvbGxpc2lvbnMpO1xuJiM0MztcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZwbS1cdTAwM2VyeF9mcmFtZXMpO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNldHhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNnBtLVx1MDAzZXR4X2ZyYW1lcyk7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9nb29kX2J5dGVzKSAtXG4mIzQzO1x0XHRcdFx0ICBFVEhfRkNTX0xFTiAqIHN0YXRzLVx1MDAzZXJ4X3BhY2tldHM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2V0eF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9nb29kX2J5dGVzKSAtXG4mIzQzO1x0XHRcdFx0ICBFVEhfRkNTX0xFTiAqIHN0YXRzLVx1MDAzZXR4X3BhY2tldHM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9kcm9wcGVkID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2Ryb3BwZWQpO1xuJiM0MztcdFx0Lyogc3RhdHMtXHUwMDNldHhfZHJvcHBlZCAqL1xuJiM0MztcdFx0c3RhdHMtXHUwMDNlbXVsdGljYXN0ID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X211bHRpY2FzdCk7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2Vjb2xsaXNpb25zID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2NvbGxpc2lvbnMpO1xuJiM0MztcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZwbS1cdTAwM2VzeW5jcCwgc3RhcnQpKTtcbiYjNDM7XG4mIzQzO1x0c3RhdHMtXHUwMDNlcnhfZXJyb3JzID0gc3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyAmIzQzOyBzdGF0cy1cdTAwM2VyeF9vdmVyX2Vycm9ycyAmIzQzO1xuJiM0MztcdFx0XHQgICBzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzICYjNDM7IHN0YXRzLVx1MDAzZXJ4X2ZyYW1lX2Vycm9ycztcbiYjNDM7XHRzdGF0cy1cdTAwM2V0eF9lcnJvcnMgPSBzdGF0cy1cdTAwM2V0eF9hYm9ydGVkX2Vycm9ycyAmIzQzOyBzdGF0cy1cdTAwM2V0eF9maWZvX2Vycm9ycyAmIzQzO1xuJiM0MztcdFx0XHQgICBzdGF0cy1cdTAwM2V0eF93aW5kb3dfZXJyb3JzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cdTAwM2VtaWI7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRtaWIgPSBcdTAwMjZwbS1cdTAwM2VzdGF0cztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0eXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpO1xuJiM0MztcbiYjNDM7XHRwYXVzZV9zdGF0cy1cdTAwM2V0eF9wYXVzZV9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfcGF1c2UpO1xuJiM0MztcdHBhdXNlX3N0YXRzLVx1MDAzZXJ4X3BhdXNlX2ZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9wYXVzZSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzM5OTJhNWY5YmRjMVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuaFxuQEAgLTAsMCAmIzQzOzEsMTY3IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfWVRfTUlCX0hcbiYjNDM7I2RlZmluZSBfWVRfTUlCX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTUlCX0NUUkxcdFx0XHQweGMwMDA0XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9DTEVBTlx0XHRcdEJJVCgzMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX1BPUlRfTVx0XHRcdEdFTk1BU0soNiwgMylcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9NSUJfQ1RSTF9QT1JUKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTUlCX0NUUkxfUE9SVF9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9PTkVfUE9SVFx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX0FMTF9QT1JUXHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpXHRcdCgweGMwMTAwICYjNDM7IDB4MTAwICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9NSUJuX0RBVEFtKHBvcnQsIHgpXHQoWVQ5MjFYX01JQm5fREFUQTAocG9ydCkgJiM0MzsgNCAqICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0JST0FEQ0FTVFx0XHQweDAwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QQVVTRVx0XHQweDA0XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9NVUxUSUNBU1RcdFx0MHgwOFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQ1JDX0VSUlx0XHQweDBjXG4mIzQzO1xuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQUxJR05fRVJSXHRcdDB4MTBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1VOREVSU0laRV9FUlJcdDB4MTRcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSXHRcdDB4MThcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NFx0XHQweDFjXG4mIzQzO1xuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyN1x0MHgyMFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEyOF9UT18yNTVcdDB4MjRcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8yNTZfVE9fNTExXHQweDI4XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjNcdDB4MmNcbiYjNDM7XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTAyNF9UT18xNTE4XHQweDMwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTUxOV9UT19NQVhcdDB4MzRcbiYjNDM7LyogMHgzODogdW51c2VkICovXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9HT09EX0JZVEVTXHRcdDB4M2NcbiYjNDM7XG4mIzQzOy8qIDB4NDA6IDY0IGJ5dGVzICovXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9CQURfQllURVNcdFx0MHg0NFxuJiM0MzsvKiAweDQ4OiA2NCBieXRlcyAqL1xuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfT1ZFUlNJWkVfRVJSXHQweDRjXG4mIzQzO1xuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfRFJPUFBFRFx0XHQweDUwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9CUk9BRENBU1RcdFx0MHg1NFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEFVU0VcdFx0MHg1OFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElDQVNUXHRcdDB4NWNcbiYjNDM7XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9VTkRFUlNJWkVfRVJSXHQweDYwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjRcdFx0MHg2NFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY1X1RPXzEyN1x0MHg2OFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEyOF9UT18yNTVcdDB4NmNcbiYjNDM7XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMjU2X1RPXzUxMVx0MHg3MFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzUxMl9UT18xMDIzXHQweDc0XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTAyNF9UT18xNTE4XHQweDc4XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTUxOV9UT19NQVhcdDB4N2NcbiYjNDM7XG4mIzQzOy8qIDB4ODA6IHVudXNlZCAqL1xuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfR09PRF9CWVRFU1x0XHQweDg0XG4mIzQzOy8qIDB4ODg6IDY0IGJ5dGVzICovXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9DT0xMSVNJT05cdFx0MHg4Y1xuJiM0MztcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT05cdDB4OTBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTlx0MHg5NFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfU0lOR0xFX0NPTExJU0lPTlx0MHg5OFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUXHRcdFx0MHg5Y1xuJiM0MztcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0RFRkVSUkVEXHRcdDB4YTBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0xBVEVfQ09MTElTSU9OXHQweGE0XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PQU1cdFx0XHQweGE4XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9PQU1cdFx0XHQweGFjXG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyB7XG4mIzQzO1x0dTY0X3N0YXRzX3QgcnhfYnJvYWRjYXN0O1xuJiM0MztcdHU2NF9zdGF0c190IHJ4X3BhdXNlO1xuJiM0MztcdHU2NF9zdGF0c190IHJ4X211bHRpY2FzdDtcbiYjNDM7XHR1NjRfc3RhdHNfdCByeF9jcmNfZXJyb3JzO1xuJiM0MztcbiYjNDM7XHR1NjRfc3RhdHNfdCByeF9hbGlnbm1lbnRfZXJyb3JzO1xuJiM0MztcdHU2NF9zdGF0c190IHJ4X3VuZGVyc2l6ZV9lcnJvcnM7XG4mIzQzO1x0dTY0X3N0YXRzX3QgcnhfZnJhZ21lbnRfZXJyb3JzO1xuJiM0MztcdHU2NF9zdGF0c190IHJ4XzY0Ynl0ZTtcbiYjNDM7XG4mIzQzO1x0dTY0X3N0YXRzX3QgcnhfNjVfMTI3Ynl0ZTtcbiYjNDM7XHR1NjRfc3RhdHNfdCByeF8xMjhfMjU1Ynl0ZTtcbiYjNDM7XHR1NjRfc3RhdHNfdCByeF8yNTZfNTExYnl0ZTtcbiYjNDM7XHR1NjRfc3RhdHNfdCByeF81MTJfMTAyM2J5dGU7XG4mIzQzO1xuJiM0MztcdHU2NF9zdGF0c190IHJ4XzEwMjRfMTUxOGJ5dGU7XG4mIzQzO1x0dTY0X3N0YXRzX3QgcnhfanVtYm87XG4mIzQzO1x0dTY0X3N0YXRzX3QgcnhfZ29vZF9ieXRlcztcbiYjNDM7XG4mIzQzO1x0dTY0X3N0YXRzX3QgcnhfYmFkX2J5dGVzO1xuJiM0MztcdHU2NF9zdGF0c190IHJ4X292ZXJzaXplX2Vycm9ycztcbiYjNDM7XG4mIzQzO1x0dTY0X3N0YXRzX3QgcnhfZHJvcHBlZDtcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF9icm9hZGNhc3Q7XG4mIzQzO1x0dTY0X3N0YXRzX3QgdHhfcGF1c2U7XG4mIzQzO1x0dTY0X3N0YXRzX3QgdHhfbXVsdGljYXN0O1xuJiM0MztcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF91bmRlcnNpemVfZXJyb3JzO1xuJiM0MztcdHU2NF9zdGF0c190IHR4XzY0Ynl0ZTtcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF82NV8xMjdieXRlO1xuJiM0MztcdHU2NF9zdGF0c190IHR4XzEyOF8yNTVieXRlO1xuJiM0MztcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF8yNTZfNTExYnl0ZTtcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF81MTJfMTAyM2J5dGU7XG4mIzQzO1x0dTY0X3N0YXRzX3QgdHhfMTAyNF8xNTE4Ynl0ZTtcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF9qdW1ibztcbiYjNDM7XG4mIzQzO1x0dTY0X3N0YXRzX3QgdHhfZ29vZF9ieXRlcztcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF9jb2xsaXNpb25zO1xuJiM0MztcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF9hYm9ydGVkX2Vycm9ycztcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF9tdWx0aXBsZV9jb2xsaXNpb25zO1xuJiM0MztcdHU2NF9zdGF0c190IHR4X3NpbmdsZV9jb2xsaXNpb25zO1xuJiM0MztcdHU2NF9zdGF0c190IHR4X2dvb2Q7XG4mIzQzO1xuJiM0MztcdHU2NF9zdGF0c190IHR4X2RlZmVycmVkO1xuJiM0MztcdHU2NF9zdGF0c190IHR4X2xhdGVfY29sbGlzaW9ucztcbiYjNDM7XHR1NjRfc3RhdHNfdCByeF9vYW07XG4mIzQzO1x0dTY0X3N0YXRzX3QgdHhfb2FtO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTUlCX05VTVx0KHNpemVvZihzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cykgLyBzaXplb2YodTY0X3N0YXRzX3QpKVxuJiM0MztcbiYjNDM7c3RydWN0IHl0OTIxeF9taWIge1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IGRlbGF5ZWRfd29yayB3b3JrO1xuJiM0MztcdHN0cnVjdCB1NjRfc3RhdHNfc3luYyBzeW5jcDtcbiYjNDM7XHQvKiBwcm90ZWN0ZWQgYnkgc3luY3AgT1IgcHJpdi1cdTAwM2VyZWdfbG9jayAqL1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzIHN0YXRzO1xuJiM0MztcdHU2NF9zdGF0c190IHJ4X2ZyYW1lcztcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF9mcmFtZXM7XG4mIzQzO1x0LyogcHJvdGVjdGVkIGJ5IHByaXYtXHUwMDNlcmVnX2xvY2sgKi9cbiYjNDM7XHR1NjQgZGF0YVtZVDkyMVhfTUlCX05VTV07XG4mIzQzO307XG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9taWJfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCxcbiYjNDM7XHRcdCAgICAgICB1aW50OF90ICpkYXRhKTtcbiYjNDM7dm9pZFxuJiM0Mzt5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKTtcbiYjNDM7aW50IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKTtcbiYjNDM7dm9pZFxuJiM0Mzt5dDkyMXhfZHNhX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbiYjNDM7XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKTtcbiYjNDM7dm9pZFxuJiM0Mzt5dDkyMXhfZHNhX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpO1xuJiM0MztcbiYjNDM7I2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbmluZGV4IGJmM2FkZmQ2NDE2NWEuLjI3MDg2NjAyOTk3YmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5AQCAtNjMsNiAmIzQzOzYzLDM2IEBAIGludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4gXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuIH1cbiBcbiYjNDM7LyogUmVsaWFibHkgcmVhZCBhIDY0Yml0IGNvdW50ZXIgKi9cbiYjNDM7aW50IHl0OTIxeF9jb3VudGVyX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1NjQgKnZhbHApXG4mIzQzO3tcbiYjNDM7XHR1MzIgb2xkX2xvO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1x0dTMyIGhpO1xuJiM0MztcdHUzMiBsbztcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2b2xkX2xvKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIDE2OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0LCBcdTAwMjZoaSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2bG8pO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0XHRpZiAobG8gXHUwMDNlPSBvbGRfbG8pIHtcbiYjNDM7XHRcdFx0KnZhbHAgPSAoKHU2NCloaSBcdTAwM2NcdTAwM2MgMzIpIHwgbG87XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0b2xkX2xvID0gbG87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50XG4geXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbiBcdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxuaW5kZXggMjEyZTIwZjcxZDgwNi4uZDM0MjQwNTQ4YWY3ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbkBAIC0zNSw2ICYjNDM7MzUsOCBAQCB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuIFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuIH1cbiBcbiYjNDM7aW50IHl0OTIxeF9jb3VudGVyX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1NjQgKnZhbHApO1xuJiM0MztcbiAvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4gICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZVxuICAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgb25seSBtb2RpZmllcyB0aGUgTW90b3Jjb21tIFlUOTIxNSBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS8pLCB3aGljaCBpbnRlcmFjdHMgd2l0aCBhIHNwZWNpZmljIHBoeXNpY2FsIE1ESU8tY29ubmVjdGVkIHN3aXRjaCBBU0lDLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MjE3YTI2Mjc0ZTc1OTE2MjRjYTdhMDg5M2RkMDYwNjM4OWExZmQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwMDoxNzo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlCmluZGV4IGFlYjEyY2I5MWY5MzUuLjVjMmQzNGVjMDVmYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZQpAQCAtMiw0ICYjNDM7Miw1IEBACiBvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgubwogeXQ5MjF4LW9ianMgOj0gY2hpcC5vCiB5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMubwomIzQzO3l0OTIxeC1vYmpzICYjNDM7PSBtaWIubwogeXQ5MjF4LW9ianMgJiM0Mzs9IHNtaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCmluZGV4IGQ2NjNhZjAxMGY0MzEuLmI0MDU5MDUzZWYxNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCkBAIC0xOSw2ICYjNDM7MTksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L29mX21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZl9uZXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zb3J0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3U2NF9zdGF0c19zeW5jLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2RzY3AuaCZndDsKQEAgLTI3LDc1ICYjNDM7MjgsOSBAQAogCiAjaW5jbHVkZSAmIzM0O2NoaXAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDttaWIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKIAotc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7Ci0JdW5zaWduZWQgaW50IHNpemU7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLQljb25zdCBjaGFyICpuYW1lOwotfTsKLQotI2RlZmluZSBNSUJfREVTQyhfc2l6ZSwgX29mZnNldCwgX25hbWUpIFwKLQl7X3NpemUsIF9vZmZzZXQsIF9uYW1lfQotCi0vKiBNdXN0IGFncmVlIHdpdGggeXQ5MjF4X21pYgotICoKLSAqIFVuc3RydWN0dXJlZCBmaWVsZHMgKG5hbWUgIT0gTlVMTCkgd2lsbCBhcHBlYXIgaW4gZ2V0X2V0aHRvb2xfc3RhdHMoKSwKLSAqIHN0cnVjdHVyZWQgZ28gdG8gdGhlaXIgKl9zdGF0cygpIG1ldGhvZHMsIGJ1dCB3ZSBuZWVkIHRoZWlyIHNpemVzIGFuZCBvZmZzZXRzCi0gKiB0byBwZXJmb3JtIDMyYml0IE1JQiBvdmVyZmxvdyB3cmFwYXJvdW5kLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyB5dDkyMXhfbWliX2Rlc2NzW10gPSB7Ci0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0JST0FEQ0FTVCwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFLCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfTVVMVElDQVNULCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfQ1JDX0VSUiwgTlVMTCksCi0KLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfQUxJR05fRVJSLCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfVU5ERVJTSVpFX0VSUiwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSLCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY0LCBOVUxMKSwKLQotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEyOF9UT18yNTUsIE5VTEwpLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMSwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl81MTJfVE9fMTAyMywgTlVMTCksCi0KLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksCi0JTUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0dPT0RfQllURVMsIE5VTEwpLAotCi0JTUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0JBRF9CWVRFUywgJiMzNDtSeEJhZEJ5dGVzJiMzNDspLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9PVkVSU0laRV9FUlIsIE5VTEwpLAotCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0RST1BQRUQsIE5VTEwpLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9CUk9BRENBU1QsIE5VTEwpLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QQVVTRSwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJQ0FTVCwgTlVMTCksCi0KLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUiwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NCwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NV9UT18xMjcsIE5VTEwpLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTI4X1RPXzI1NSwgTlVMTCksCi0KLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzI1Nl9UT181MTEsIE5VTEwpLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTAyNF9UT18xNTE4LCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzE1MTlfVE9fTUFYLCBOVUxMKSwKLQotCU1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTLCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfQ09MTElTSU9OLCBOVUxMKSwKLQotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OLCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElQTEVfQ09MTElTSU9OLCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfU0lOR0xFX0NPTExJU0lPTiwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVCwgTlVMTCksCi0KLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRUQsIE5VTEwpLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9MQVRFX0NPTExJU0lPTiwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX09BTSwgJiMzNDtSeE9BTSYjMzQ7KSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfT0FNLCAmIzM0O1R4T0FNJiMzNDspLAotfTsKLQogc3RydWN0IHl0OTIxeF9pbmZvIHsKIAljb25zdCBjaGFyICpuYW1lOwogCXUxNiBtYWpvcjsKQEAgLTE1NCwxNCAmIzQzOzg5LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHsKIAogI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRQk0MDk1CiAKLS8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuCi0gKgotICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcAotICogdGhlcmUpLCB3ZSBoYXZlIHRvIHBvbGwgc3RhdHMgbW9yZSBmcmVxdWVudGx5IHRoZW4gaXQgaXMgYWN0dWFsbHkgbmVlZGVkLgotICogRm9yIG92ZXJmbG93IHByb3RlY3Rpb24sIG5vcm1hbGx5LCAxMDAgc2VjIGludGVydmFsIHNob3VsZCBoYXZlIGJlZW4gT0suCi0gKi8KLSNkZWZpbmUgWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVMJKDMgKiBIWikKLQogc3RydWN0IHl0OTIxeF9yZWdfbWRpbyB7CiAJc3RydWN0IG1paV9idXMgKmJ1czsKIAlpbnQgYWRkcjsKQEAgLTU0NCwyOTQgJiM0Mzs0NzEsNiBAQCB5dDkyMXhfbWJ1c19leHRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKQogCXJldHVybiAwOwogfQogCi0vKiBSZWFkIGFuZCBoYW5kbGUgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy4gTUlCIGJ1ZmZlciBtdXN0IGJlIHplcm9lZCBiZWZvcmUuICovCi1zdGF0aWMgaW50IHl0OTIxeF9yZWFkX21pYihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KQotewotCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKLQlzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gJmFtcDtwcC0mZ3Q7bWliOwotCWludCByZXMgPSAwOwotCi0JLyogUmVhZGluZyBvZiB5dDkyMXhfcG9ydDo6bWliIGlzIG5vdCBwcm90ZWN0ZWQgYnkgYSBsb2NrIGFuZCBpdCYjMzk7cyB2YWluCi0JICogdG8ga2VlcCBpdHMgY29uc2lzdGVuY3ksIHNpbmNlIHdlIGhhdmUgdG8gcmVhZCByZWdpc3RlcnMgb25lIGJ5IG9uZQotCSAqIGFuZCB0aGVyZSBpcyBubyB3YXkgdG8gbWFrZSBhIHNuYXBzaG90IG9mIE1JQiBzdGF0cy4KLQkgKgotCSAqIFdyaXRpbmcgKGJ5IHRoaXMgZnVuY3Rpb24gb25seSkgaXMgYW5kIHNob3VsZCBiZSBwcm90ZWN0ZWQgYnkKLQkgKiByZWdfbG9jay4KLQkgKi8KLQotCWZvciAoc2l6ZV90IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHsKLQkJY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9ICZhbXA7eXQ5MjF4X21pYl9kZXNjc1tpXTsKLQkJdTMyIHJlZyA9IFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpICYjNDM7IGRlc2MtJmd0O29mZnNldDsKLQkJdTY0ICp2YWxwID0gJmFtcDsoKHU2NCAqKW1pYilbaV07Ci0JCXUzMiB2YWwwOwotCQl1NjQgdmFsOwotCi0JCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsICZhbXA7dmFsMCk7Ci0JCWlmIChyZXMpCi0JCQlicmVhazsKLQotCQlpZiAoZGVzYy0mZ3Q7c2l6ZSAmbHQ7PSAxKSB7Ci0JCQl1NjQgb2xkX3ZhbCA9ICp2YWxwOwotCi0JCQl2YWwgPSAob2xkX3ZhbCAmYW1wOyB+KHU2NClVMzJfTUFYKSB8IHZhbDA7Ci0JCQlpZiAodmFsICZsdDsgb2xkX3ZhbCkKLQkJCQl2YWwgJiM0Mzs9IDF1bGwgJmx0OyZsdDsgMzI7Ci0JCX0gZWxzZSB7Ci0JCQl1MzIgdmFsMTsKLQotCQkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0LCAmYW1wO3ZhbDEpOwotCQkJaWYgKHJlcykKLQkJCQlicmVhazsKLQkJCXZhbCA9ICgodTY0KXZhbDEgJmx0OyZsdDsgMzIpIHwgdmFsMDsKLQkJfQotCi0JCVdSSVRFX09OQ0UoKnZhbHAsIHZhbCk7Ci0JfQotCi0JcHAtJmd0O3J4X2ZyYW1lcyA9IG1pYi0mZ3Q7cnhfNjRieXRlICYjNDM7IG1pYi0mZ3Q7cnhfNjVfMTI3Ynl0ZSAmIzQzOwotCQkJbWliLSZndDtyeF8xMjhfMjU1Ynl0ZSAmIzQzOyBtaWItJmd0O3J4XzI1Nl81MTFieXRlICYjNDM7Ci0JCQltaWItJmd0O3J4XzUxMl8xMDIzYnl0ZSAmIzQzOyBtaWItJmd0O3J4XzEwMjRfMTUxOGJ5dGUgJiM0MzsKLQkJCW1pYi0mZ3Q7cnhfanVtYm87Ci0JcHAtJmd0O3R4X2ZyYW1lcyA9IG1pYi0mZ3Q7dHhfNjRieXRlICYjNDM7IG1pYi0mZ3Q7dHhfNjVfMTI3Ynl0ZSAmIzQzOwotCQkJbWliLSZndDt0eF8xMjhfMjU1Ynl0ZSAmIzQzOyBtaWItJmd0O3R4XzI1Nl81MTFieXRlICYjNDM7Ci0JCQltaWItJmd0O3R4XzUxMl8xMDIzYnl0ZSAmIzQzOyBtaWItJmd0O3R4XzEwMjRfMTUxOGJ5dGUgJiM0MzsKLQkJCW1pYi0mZ3Q7dHhfanVtYm87Ci0KLQlpZiAocmVzKQotCQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcbiYjMzQ7LCAmIzM0O3JlYWQgc3RhdHMgZm9yJiMzNDssCi0JCQlwb3J0LCByZXMpOwotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkIHl0OTIxeF9wb2xsX21pYihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IGNvbnRhaW5lcl9vZl9jb25zdCh3b3JrLCBzdHJ1Y3QgeXQ5MjF4X3BvcnQsCi0JCQkJCQkgICAgbWliX3JlYWQud29yayk7Ci0Jc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gKHZvaWQgKikocHAgLSBwcC0mZ3Q7aW5kZXgpIC0KLQkJCQkgICBvZmZzZXRvZihzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzKTsKLQl1bnNpZ25lZCBsb25nIGRlbGF5ID0gWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVM7Ci0JaW50IHBvcnQgPSBwcC0mZ3Q7aW5kZXg7Ci0JaW50IHJlczsKLQotCW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7Ci0JcmVzID0geXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpOwotCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKLQlpZiAocmVzKQotCQlkZWxheSAqPSA0OwotCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7cHAtJmd0O21pYl9yZWFkLCBkZWxheSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi15dDkyMXhfZHNhX2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHUzMiBzdHJpbmdzZXQsCi0JCSAgICAgICB1aW50OF90ICpkYXRhKQotewotCWlmIChzdHJpbmdzZXQgIT0gRVRIX1NTX1NUQVRTKQotCQlyZXR1cm47Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkmIzQzOyYjNDM7KSB7Ci0JCWNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSAmYW1wO3l0OTIxeF9taWJfZGVzY3NbaV07Ci0KLQkJaWYgKGRlc2MtJmd0O25hbWUpCi0JCQlldGh0b29sX3B1dHMoJmFtcDtkYXRhLCBkZXNjLSZndDtuYW1lKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi15dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKQotewotCXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKLQlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKLQlzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gJmFtcDtwcC0mZ3Q7bWliOwotCXNpemVfdCBqOwotCi0JbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKLQl5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwotCi0JaiA9IDA7Ci0JZm9yIChzaXplX3QgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykgewotCQljb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gJmFtcDt5dDkyMXhfbWliX2Rlc2NzW2ldOwotCi0JCWlmICghZGVzYy0mZ3Q7bmFtZSkKLQkJCWNvbnRpbnVlOwotCi0JCWRhdGFbal0gPSAoKHU2NCAqKW1pYilbaV07Ci0JCWomIzQzOyYjNDM7OwotCX0KLX0KLQotc3RhdGljIGludCB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KQotewotCWludCBjbnQgPSAwOwotCi0JaWYgKHNzZXQgIT0gRVRIX1NTX1NUQVRTKQotCQlyZXR1cm4gMDsKLQotCWZvciAoc2l6ZV90IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHsKLQkJY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9ICZhbXA7eXQ5MjF4X21pYl9kZXNjc1tpXTsKLQotCQlpZiAoZGVzYy0mZ3Q7bmFtZSkKLQkJCWNudCYjNDM7JiM0Mzs7Ci0JfQotCi0JcmV0dXJuIGNudDsKLX0KLQotc3RhdGljIHZvaWQKLXl0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKLQkJCSAgICAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKQotewotCXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKLQlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKLQlzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gJmFtcDtwcC0mZ3Q7bWliOwotCi0JbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKLQl5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwotCi0JbWFjX3N0YXRzLSZndDtGcmFtZXNUcmFuc21pdHRlZE9LID0gcHAtJmd0O3R4X2ZyYW1lczsKLQltYWNfc3RhdHMtJmd0O1NpbmdsZUNvbGxpc2lvbkZyYW1lcyA9IG1pYi0mZ3Q7dHhfc2luZ2xlX2NvbGxpc2lvbnM7Ci0JbWFjX3N0YXRzLSZndDtNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyA9IG1pYi0mZ3Q7dHhfbXVsdGlwbGVfY29sbGlzaW9uczsKLQltYWNfc3RhdHMtJmd0O0ZyYW1lc1JlY2VpdmVkT0sgPSBwcC0mZ3Q7cnhfZnJhbWVzOwotCW1hY19zdGF0cy0mZ3Q7RnJhbWVDaGVja1NlcXVlbmNlRXJyb3JzID0gbWliLSZndDtyeF9jcmNfZXJyb3JzOwotCW1hY19zdGF0cy0mZ3Q7QWxpZ25tZW50RXJyb3JzID0gbWliLSZndDtyeF9hbGlnbm1lbnRfZXJyb3JzOwotCW1hY19zdGF0cy0mZ3Q7T2N0ZXRzVHJhbnNtaXR0ZWRPSyA9IG1pYi0mZ3Q7dHhfZ29vZF9ieXRlczsKLQltYWNfc3RhdHMtJmd0O0ZyYW1lc1dpdGhEZWZlcnJlZFhtaXNzaW9ucyA9IG1pYi0mZ3Q7dHhfZGVmZXJyZWQ7Ci0JbWFjX3N0YXRzLSZndDtMYXRlQ29sbGlzaW9ucyA9IG1pYi0mZ3Q7dHhfbGF0ZV9jb2xsaXNpb25zOwotCW1hY19zdGF0cy0mZ3Q7RnJhbWVzQWJvcnRlZER1ZVRvWFNDb2xscyA9IG1pYi0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnM7Ci0JLyogbWFjX3N0YXRzLSZndDtGcmFtZXNMb3N0RHVlVG9JbnRNQUNYbWl0RXJyb3IgKi8KLQkvKiBtYWNfc3RhdHMtJmd0O0NhcnJpZXJTZW5zZUVycm9ycyAqLwotCW1hY19zdGF0cy0mZ3Q7T2N0ZXRzUmVjZWl2ZWRPSyA9IG1pYi0mZ3Q7cnhfZ29vZF9ieXRlczsKLQkvKiBtYWNfc3RhdHMtJmd0O0ZyYW1lc0xvc3REdWVUb0ludE1BQ1JjdkVycm9yICovCi0JbWFjX3N0YXRzLSZndDtNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0sgPSBtaWItJmd0O3R4X211bHRpY2FzdDsKLQltYWNfc3RhdHMtJmd0O0Jyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyA9IG1pYi0mZ3Q7dHhfYnJvYWRjYXN0OwotCS8qIG1hY19zdGF0cy0mZ3Q7RnJhbWVzV2l0aEV4Y2Vzc2l2ZURlZmVycmFsICovCi0JbWFjX3N0YXRzLSZndDtNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0gbWliLSZndDtyeF9tdWx0aWNhc3Q7Ci0JbWFjX3N0YXRzLSZndDtCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LID0gbWliLSZndDtyeF9icm9hZGNhc3Q7Ci0JLyogbWFjX3N0YXRzLSZndDtJblJhbmdlTGVuZ3RoRXJyb3JzICovCi0JLyogbWFjX3N0YXRzLSZndDtPdXRPZlJhbmdlTGVuZ3RoRmllbGQgKi8KLQltYWNfc3RhdHMtJmd0O0ZyYW1lVG9vTG9uZ0Vycm9ycyA9IG1pYi0mZ3Q7cnhfb3ZlcnNpemVfZXJyb3JzOwotfQotCi1zdGF0aWMgdm9pZAoteXQ5MjF4X2RzYV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKLQkJCSAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKQotewotCXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKLQlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKLQlzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gJmFtcDtwcC0mZ3Q7bWliOwotCi0JbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKLQl5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwotCi0JY3RybF9zdGF0cy0mZ3Q7TUFDQ29udHJvbEZyYW1lc1RyYW5zbWl0dGVkID0gbWliLSZndDt0eF9wYXVzZTsKLQljdHJsX3N0YXRzLSZndDtNQUNDb250cm9sRnJhbWVzUmVjZWl2ZWQgPSBtaWItJmd0O3J4X3BhdXNlOwotCS8qIGN0cmxfc3RhdHMtJmd0O1Vuc3VwcG9ydGVkT3Bjb2Rlc1JlY2VpdmVkICovCi19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgeXQ5MjF4X3Jtb25fcmFuZ2VzW10gPSB7Ci0JeyAwLCA2NCB9LAotCXsgNjUsIDEyNyB9LAotCXsgMTI4LCAyNTUgfSwKLQl7IDI1NiwgNTExIH0sCi0JeyA1MTIsIDEwMjMgfSwKLQl7IDEwMjQsIDE1MTggfSwKLQl7IDE1MTksIFlUOTIxWF9GUkFNRV9TSVpFX01BWCB9LAotCXt9Ci19OwotCi1zdGF0aWMgdm9pZAoteXQ5MjF4X2RzYV9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAotCQkJICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLAotCQkJICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpCi17Ci0Jc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpOwotCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwotCXN0cnVjdCB5dDkyMXhfbWliICptaWIgPSAmYW1wO3BwLSZndDttaWI7Ci0KLQltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwotCXl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTsKLQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7Ci0KLQkqcmFuZ2VzID0geXQ5MjF4X3Jtb25fcmFuZ2VzOwotCi0Jcm1vbl9zdGF0cy0mZ3Q7dW5kZXJzaXplX3BrdHMgPSBtaWItJmd0O3J4X3VuZGVyc2l6ZV9lcnJvcnM7Ci0Jcm1vbl9zdGF0cy0mZ3Q7b3ZlcnNpemVfcGt0cyA9IG1pYi0mZ3Q7cnhfb3ZlcnNpemVfZXJyb3JzOwotCXJtb25fc3RhdHMtJmd0O2ZyYWdtZW50cyA9IG1pYi0mZ3Q7cnhfYWxpZ25tZW50X2Vycm9yczsKLQkvKiBybW9uX3N0YXRzLSZndDtqYWJiZXJzICovCi0KLQlybW9uX3N0YXRzLSZndDtoaXN0WzBdID0gbWliLSZndDtyeF82NGJ5dGU7Ci0Jcm1vbl9zdGF0cy0mZ3Q7aGlzdFsxXSA9IG1pYi0mZ3Q7cnhfNjVfMTI3Ynl0ZTsKLQlybW9uX3N0YXRzLSZndDtoaXN0WzJdID0gbWliLSZndDtyeF8xMjhfMjU1Ynl0ZTsKLQlybW9uX3N0YXRzLSZndDtoaXN0WzNdID0gbWliLSZndDtyeF8yNTZfNTExYnl0ZTsKLQlybW9uX3N0YXRzLSZndDtoaXN0WzRdID0gbWliLSZndDtyeF81MTJfMTAyM2J5dGU7Ci0Jcm1vbl9zdGF0cy0mZ3Q7aGlzdFs1XSA9IG1pYi0mZ3Q7cnhfMTAyNF8xNTE4Ynl0ZTsKLQlybW9uX3N0YXRzLSZndDtoaXN0WzZdID0gbWliLSZndDtyeF9qdW1ibzsKLQotCXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbMF0gPSBtaWItJmd0O3R4XzY0Ynl0ZTsKLQlybW9uX3N0YXRzLSZndDtoaXN0X3R4WzFdID0gbWliLSZndDt0eF82NV8xMjdieXRlOwotCXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbMl0gPSBtaWItJmd0O3R4XzEyOF8yNTVieXRlOwotCXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbM10gPSBtaWItJmd0O3R4XzI1Nl81MTFieXRlOwotCXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbNF0gPSBtaWItJmd0O3R4XzUxMl8xMDIzYnl0ZTsKLQlybW9uX3N0YXRzLSZndDtoaXN0X3R4WzVdID0gbWliLSZndDt0eF8xMDI0XzE1MThieXRlOwotCXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbNl0gPSBtaWItJmd0O3R4X2p1bWJvOwotfQotCi1zdGF0aWMgdm9pZAoteXQ5MjF4X2RzYV9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAotCQkgICAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKLXsKLQlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7Ci0Jc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07Ci0Jc3RydWN0IHl0OTIxeF9taWIgKm1pYiA9ICZhbXA7cHAtJmd0O21pYjsKLQotCXN0YXRzLSZndDtyeF9sZW5ndGhfZXJyb3JzID0gbWliLSZndDtyeF91bmRlcnNpemVfZXJyb3JzICYjNDM7Ci0JCQkJICBtaWItJmd0O3J4X2ZyYWdtZW50X2Vycm9yczsKLQlzdGF0cy0mZ3Q7cnhfb3Zlcl9lcnJvcnMgPSBtaWItJmd0O3J4X292ZXJzaXplX2Vycm9yczsKLQlzdGF0cy0mZ3Q7cnhfY3JjX2Vycm9ycyA9IG1pYi0mZ3Q7cnhfY3JjX2Vycm9yczsKLQlzdGF0cy0mZ3Q7cnhfZnJhbWVfZXJyb3JzID0gbWliLSZndDtyeF9hbGlnbm1lbnRfZXJyb3JzOwotCS8qIHN0YXRzLSZndDtyeF9maWZvX2Vycm9ycyAqLwotCS8qIHN0YXRzLSZndDtyeF9taXNzZWRfZXJyb3JzICovCi0KLQlzdGF0cy0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnMgPSBtaWItJmd0O3R4X2Fib3J0ZWRfZXJyb3JzOwotCS8qIHN0YXRzLSZndDt0eF9jYXJyaWVyX2Vycm9ycyAqLwotCXN0YXRzLSZndDt0eF9maWZvX2Vycm9ycyA9IG1pYi0mZ3Q7dHhfdW5kZXJzaXplX2Vycm9yczsKLQkvKiBzdGF0cy0mZ3Q7dHhfaGVhcnRiZWF0X2Vycm9ycyAqLwotCXN0YXRzLSZndDt0eF93aW5kb3dfZXJyb3JzID0gbWliLSZndDt0eF9sYXRlX2NvbGxpc2lvbnM7Ci0KLQlzdGF0cy0mZ3Q7cnhfcGFja2V0cyA9IHBwLSZndDtyeF9mcmFtZXM7Ci0Jc3RhdHMtJmd0O3R4X3BhY2tldHMgPSBwcC0mZ3Q7dHhfZnJhbWVzOwotCXN0YXRzLSZndDtyeF9ieXRlcyA9IG1pYi0mZ3Q7cnhfZ29vZF9ieXRlcyAtIEVUSF9GQ1NfTEVOICogc3RhdHMtJmd0O3J4X3BhY2tldHM7Ci0Jc3RhdHMtJmd0O3R4X2J5dGVzID0gbWliLSZndDt0eF9nb29kX2J5dGVzIC0gRVRIX0ZDU19MRU4gKiBzdGF0cy0mZ3Q7dHhfcGFja2V0czsKLQlzdGF0cy0mZ3Q7cnhfZXJyb3JzID0gc3RhdHMtJmd0O3J4X2xlbmd0aF9lcnJvcnMgJiM0Mzsgc3RhdHMtJmd0O3J4X292ZXJfZXJyb3JzICYjNDM7Ci0JCQkgICBzdGF0cy0mZ3Q7cnhfY3JjX2Vycm9ycyAmIzQzOyBzdGF0cy0mZ3Q7cnhfZnJhbWVfZXJyb3JzOwotCXN0YXRzLSZndDt0eF9lcnJvcnMgPSBzdGF0cy0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnMgJiM0Mzsgc3RhdHMtJmd0O3R4X2ZpZm9fZXJyb3JzICYjNDM7Ci0JCQkgICBzdGF0cy0mZ3Q7dHhfd2luZG93X2Vycm9yczsKLQlzdGF0cy0mZ3Q7cnhfZHJvcHBlZCA9IG1pYi0mZ3Q7cnhfZHJvcHBlZDsKLQkvKiBzdGF0cy0mZ3Q7dHhfZHJvcHBlZCAqLwotCXN0YXRzLSZndDttdWx0aWNhc3QgPSBtaWItJmd0O3J4X211bHRpY2FzdDsKLQlzdGF0cy0mZ3Q7Y29sbGlzaW9ucyA9IG1pYi0mZ3Q7dHhfY29sbGlzaW9uczsKLX0KLQotc3RhdGljIHZvaWQKLXl0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCi0JCQkgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpCi17Ci0Jc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpOwotCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwotCXN0cnVjdCB5dDkyMXhfbWliICptaWIgPSAmYW1wO3BwLSZndDttaWI7Ci0KLQltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwotCXl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTsKLQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7Ci0KLQlwYXVzZV9zdGF0cy0mZ3Q7dHhfcGF1c2VfZnJhbWVzID0gbWliLSZndDt0eF9wYXVzZTsKLQlwYXVzZV9zdGF0cy0mZ3Q7cnhfcGF1c2VfZnJhbWVzID0gbWliLSZndDtyeF9wYXVzZTsKLX0KLQogc3RhdGljIGludAogeXQ5MjF4X3NldF9lZWUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZSkKIHsKQEAgLTM5NTMsMTEgJiM0MzszNTkyLDE0IEBAIHl0OTIxeF9waHlsaW5rX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLAogewogCXN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7CiAJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHAtJmd0O2RzKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9taWIgKnBtOwogCWludCBwb3J0ID0gZHAtJmd0O2luZGV4OwogCWludCByZXM7CiAKIAkvKiBObyBuZWVkIHRvIHN5bmM7IHBvcnQgY29udHJvbCBibG9jayBpcyBob2xkIHVudGlsIGRldmljZSByZW1vdmUgKi8KLQljYW5jZWxfZGVsYXllZF93b3JrKCZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF0ubWliX3JlYWQpOwomIzQzOwlwbSA9IHByaXYtJmd0O3BvcnRzW3BvcnRdLm1pYjsKJiM0MzsJaWYgKHBtKQomIzQzOwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmYW1wO3BtLSZndDt3b3JrKTsKIAogCW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiAJcmVzID0geXQ5MjF4X3BvcnRfZG93bihwcml2LCBwb3J0KTsKQEAgLTM5NzYsNiAmIzQzOzM2MTgsNyBAQCB5dDkyMXhfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIHsKIAlzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpOwogCXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRwLSZndDtkcyk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliICpwbTsKIAlpbnQgcG9ydCA9IGRwLSZndDtpbmRleDsKIAlpbnQgcmVzOwogCkBAIC0zOTg4LDcgJiM0MzszNjMxLDkgQEAgeXQ5MjF4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiAJCWRldl9lcnIoZHAtJmd0O2RzLSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvICVzIHBvcnQgJWQ6ICVpXG4mIzM0OywgJiMzNDticmluZyB1cCYjMzQ7LAogCQkJcG9ydCwgcmVzKTsKIAotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdLm1pYl9yZWFkLCAwKTsKJiM0MzsJcG0gPSBwcml2LSZndDtwb3J0c1twb3J0XS5taWI7CiYjNDM7CWlmIChwbSkKJiM0MzsJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO3BtLSZndDt3b3JrLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQxMDgsMTEgJiM0MzszNzUzLDM2IEBAIHl0OTIxeF9kc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCXJldHVybiBEU0FfVEFHX1BST1RPX1lUOTIxWDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHl0OTIxeF9kc2FfcG9ydF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtJmd0O21pYjsKJiM0MzsKJiM0MzsJaWYgKHBtKQomIzQzOwkJZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYygmYW1wO3BtLSZndDt3b3JrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHl0OTIxeF9kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQogewogCXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtJmd0O21pYjsKIAlpbnQgcmVzOwogCiYjNDM7CWlmICghcG0gJmFtcDsmYW1wOyAhKEJJVChwb3J0KSAmYW1wOyAocHJpdi0mZ3Q7aW5mby0mZ3Q7aW50ZXJuYWxfbWFzayB8CiYjNDM7CQkgICAgIHByaXYtJmd0O2luZm8tJmd0O2V4dGVybmFsX21hc2spKSkgewomIzQzOwkJcG0gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBtKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIXBtKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJcHAtJmd0O21pYiA9IHBtOwomIzQzOwomIzQzOwkJcG0tJmd0O3BvcnQgPSBwcDsKJiM0MzsJCXU2NF9zdGF0c19pbml0KCZhbXA7cG0tJmd0O3N5bmNwKTsKJiM0MzsJCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cG0tJmd0O3dvcmssIHl0OTIxeF9taWJfcG9sbCk7CiYjNDM7CX0KJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwogCXJlcyA9IHl0OTIxeF9wb3J0X3NldHVwKHByaXYsIHBvcnQpOwogCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKQEAgLTQ2NjcsNiAmIzQzOzQzMzcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHsKIAkvKiBwb3J0ICovCiAJLmdldF90YWdfcHJvdG9jb2wJPSB5dDkyMXhfZHNhX2dldF90YWdfcHJvdG9jb2wsCiAJLnBoeWxpbmtfZ2V0X2NhcHMJPSB5dDkyMXhfZHNhX3BoeWxpbmtfZ2V0X2NhcHMsCiYjNDM7CS5wb3J0X3RlYXJkb3duCQk9IHl0OTIxeF9kc2FfcG9ydF90ZWFyZG93biwKIAkucG9ydF9zZXR1cAkJPSB5dDkyMXhfZHNhX3BvcnRfc2V0dXAsCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRENCKQogCS8qIGRzY3AgKi8KQEAgLTQ2OTYsMTIgJiM0Mzs0MzY3LDYgQEAgc3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKIAlpZiAoIXByaXYpCiAJCXJldHVybjsKIAotCWZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtJmd0O3BvcnRzKTsgaS0tICZndDsgMDsgKSB7Ci0JCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW2ldOwotCi0JCWRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtwcC0mZ3Q7bWliX3JlYWQpOwotCX0KLQogCWRzYV91bnJlZ2lzdGVyX3N3aXRjaCgmYW1wO3ByaXYtJmd0O2RzKTsKIAogCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShwcml2LSZndDthY2xfYmxrcyk7IGkmIzQzOyYjNDM7KSB7CkBAIC00NzQ5LDcgJiM0Mzs0NDE0LDYgQEAgc3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiAJCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW2ldOwogCiAJCXBwLSZndDtpbmRleCA9IGk7Ci0JCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cHAtJmd0O21pYl9yZWFkLCB5dDkyMXhfcG9sbF9taWIpOwogCX0KIAogCWRzID0gJmFtcDtwcml2LSZndDtkczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKaW5kZXggODNjZDQ1NDk1NWRkYi4uY2UyMDE1MDI2ODQ5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKQEAgLTE2Nyw2OSAmIzQzOzE2Nyw2IEBACiAjZGVmaW5lIFlUOTIxWF9FRUVfQ1RSTAkJCTB4YjAwMDAKICNkZWZpbmUgIFlUOTIxWF9FRUVfQ1RSTF9FTm4ocG9ydCkJCUJJVChwb3J0KQogCi0jZGVmaW5lIFlUOTIxWF9NSUJfQ1RSTAkJCTB4YzAwMDQKLSNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9DTEVBTgkJCUJJVCgzMCkKLSNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9QT1JUX00JCQlHRU5NQVNLKDYsIDMpCi0jZGVmaW5lICAgWVQ5MjFYX01JQl9DVFJMX1BPUlQoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9NSUJfQ1RSTF9QT1JUX00sICh4KSkKLSNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9PTkVfUE9SVAkJQklUKDEpCi0jZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfQUxMX1BPUlQJCUJJVCgwKQotI2RlZmluZSBZVDkyMVhfTUlCbl9EQVRBMChwb3J0KQkJKDB4YzAxMDAgJiM0MzsgMHgxMDAgKiAocG9ydCkpCi0jZGVmaW5lIFlUOTIxWF9NSUJuX0RBVEFtKHBvcnQsIHgpCShZVDkyMVhfTUlCbl9EQVRBMChwb3J0KSAmIzQzOyA0ICogKHgpKQotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0JST0FEQ0FTVAkJMHgwMAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFCQkweDA0Ci0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfTVVMVElDQVNUCQkweDA4Ci0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQ1JDX0VSUgkJMHgwYwotCi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQUxJR05fRVJSCQkweDEwCi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfVU5ERVJTSVpFX0VSUgkweDE0Ci0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfRlJBR19FUlIJCTB4MTgKLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNjQJCTB4MWMKLQotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NV9UT18xMjcJMHgyMAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMjhfVE9fMjU1CTB4MjQKLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMQkweDI4Ci0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzUxMl9UT18xMDIzCTB4MmMKLQotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMDI0X1RPXzE1MTgJMHgzMAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWAkweDM0Ci0vKiAweDM4OiB1bnVzZWQgKi8KLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9HT09EX0JZVEVTCQkweDNjCi0KLS8qIDB4NDA6IDY0IGJ5dGVzICovCi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTCQkweDQ0Ci0vKiAweDQ4OiA2NCBieXRlcyAqLwotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX09WRVJTSVpFX0VSUgkweDRjCi0KLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9EUk9QUEVECQkweDUwCi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfQlJPQURDQVNUCQkweDU0Ci0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEFVU0UJCTB4NTgKLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSUNBU1QJCTB4NWMKLQotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1VOREVSU0laRV9FUlIJMHg2MAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NAkJMHg2NAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NV9UT18xMjcJMHg2OAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1CTB4NmMKLQotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExCTB4NzAKLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNTEyX1RPXzEwMjMJMHg3NAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMDI0X1RPXzE1MTgJMHg3OAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWAkweDdjCi0KLS8qIDB4ODA6IHVudXNlZCAqLwotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0dPT0RfQllURVMJCTB4ODQKLS8qIDB4ODg6IDY0IGJ5dGVzICovCi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfQ09MTElTSU9OCQkweDhjCi0KLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OCTB4OTAKLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSVBMRV9DT0xMSVNJT04JMHg5NAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1NJTkdMRV9DT0xMSVNJT04JMHg5OAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVAkJCTB4OWMKLQotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0RFRkVSUkVECQkweGEwCi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfTEFURV9DT0xMSVNJT04JMHhhNAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX09BTQkJCTB4YTgKLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9PQU0JCQkweGFjCi0KICNkZWZpbmUgWVQ5MjFYX0VEQVRBX0NUUkwJCTB4ZTAwMDAKICNkZWZpbmUgIFlUOTIxWF9FREFUQV9DVFJMX0FERFJfTQkJR0VOTUFTSygxNSwgOCkKICNkZWZpbmUgICBZVDkyMVhfRURBVEFfQ1RSTF9BRERSKHgpCQkJRklFTERfUFJFUChZVDkyMVhfRURBVEFfQ1RSTF9BRERSX00sICh4KSkKQEAgLTg2MSw1OCAmIzQzOzc5OCw2IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMgewogI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpICZsdDsgOCkKICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKChwb3J0KSA9PSA4IHx8IChwb3J0KSA9PSA5KQogCi1zdHJ1Y3QgeXQ5MjF4X21pYiB7Ci0JdTY0IHJ4X2Jyb2FkY2FzdDsKLQl1NjQgcnhfcGF1c2U7Ci0JdTY0IHJ4X211bHRpY2FzdDsKLQl1NjQgcnhfY3JjX2Vycm9yczsKLQotCXU2NCByeF9hbGlnbm1lbnRfZXJyb3JzOwotCXU2NCByeF91bmRlcnNpemVfZXJyb3JzOwotCXU2NCByeF9mcmFnbWVudF9lcnJvcnM7Ci0JdTY0IHJ4XzY0Ynl0ZTsKLQotCXU2NCByeF82NV8xMjdieXRlOwotCXU2NCByeF8xMjhfMjU1Ynl0ZTsKLQl1NjQgcnhfMjU2XzUxMWJ5dGU7Ci0JdTY0IHJ4XzUxMl8xMDIzYnl0ZTsKLQotCXU2NCByeF8xMDI0XzE1MThieXRlOwotCXU2NCByeF9qdW1ibzsKLQl1NjQgcnhfZ29vZF9ieXRlczsKLQotCXU2NCByeF9iYWRfYnl0ZXM7Ci0JdTY0IHJ4X292ZXJzaXplX2Vycm9yczsKLQotCXU2NCByeF9kcm9wcGVkOwotCXU2NCB0eF9icm9hZGNhc3Q7Ci0JdTY0IHR4X3BhdXNlOwotCXU2NCB0eF9tdWx0aWNhc3Q7Ci0KLQl1NjQgdHhfdW5kZXJzaXplX2Vycm9yczsKLQl1NjQgdHhfNjRieXRlOwotCXU2NCB0eF82NV8xMjdieXRlOwotCXU2NCB0eF8xMjhfMjU1Ynl0ZTsKLQotCXU2NCB0eF8yNTZfNTExYnl0ZTsKLQl1NjQgdHhfNTEyXzEwMjNieXRlOwotCXU2NCB0eF8xMDI0XzE1MThieXRlOwotCXU2NCB0eF9qdW1ibzsKLQotCXU2NCB0eF9nb29kX2J5dGVzOwotCXU2NCB0eF9jb2xsaXNpb25zOwotCi0JdTY0IHR4X2Fib3J0ZWRfZXJyb3JzOwotCXU2NCB0eF9tdWx0aXBsZV9jb2xsaXNpb25zOwotCXU2NCB0eF9zaW5nbGVfY29sbGlzaW9uczsKLQl1NjQgdHhfZ29vZDsKLQotCXU2NCB0eF9kZWZlcnJlZDsKLQl1NjQgdHhfbGF0ZV9jb2xsaXNpb25zOwotCXU2NCByeF9vYW07Ci0JdTY0IHR4X29hbTsKLX07Ci0KIHN0cnVjdCB5dDkyMXhfYWNsX2VudHJ5IHsKIAl1MzIga2V5WzJdOwogCXUzMiBtYXNrWzJdOwpAQCAtOTM2LDEzICYjNDM7ODIxLDggQEAgc3RydWN0IHl0OTIxeF9hY2xfYmxrIHsKIHN0cnVjdCB5dDkyMXhfcG9ydCB7CiAJdW5zaWduZWQgY2hhciBpbmRleDsKIAotCWJvb2wgaGFpcnBpbjsKLQlib29sIGlzb2xhdGVkOwotCi0Jc3RydWN0IGRlbGF5ZWRfd29yayBtaWJfcmVhZDsKLQlzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7Ci0JdTY0IHJ4X2ZyYW1lczsKLQl1NjQgdHhfZnJhbWVzOwomIzQzOwlib29sIGhhaXJwaW46MTsKJiM0MzsJYm9vbCBpc29sYXRlZDoxOwogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKIAl1bnNpZ25lZCBjaGFyIGxlZF9kdXR5OwpAQCAtOTUzLDYgJiM0Mzs4MzMsOCBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQgewogCiAJc3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dOwogI2VuZGlmCiYjNDM7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliICptaWI7CiB9OwogCiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMzA0NzhjZTcxYzEwNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmMKQEAgLTAsMCAmIzQzOzEsNDMwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjaGlwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bWliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21pLmgmIzM0OwomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfbWliX2Rlc2MgewomIzQzOwl1bnNpZ25lZCBjaGFyIHNpemU7CiYjNDM7CXVuc2lnbmVkIGNoYXIgb2Zmc2V0OwomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBNSUJfREVTQyhfc2l6ZSwgX29mZnNldCwgX25hbWUpIHtfc2l6ZSwgX29mZnNldCwgX25hbWV9CiYjNDM7CiYjNDM7LyogTXVzdCBhZ3JlZSB3aXRoIHl0OTIxeF9taWIKJiM0MzsgKgomIzQzOyAqIFVuc3RydWN0dXJlZCBmaWVsZHMgKG5hbWUgIT0gTlVMTCkgd2lsbCBhcHBlYXIgaW4gZ2V0X2V0aHRvb2xfc3RhdHMoKSwKJiM0MzsgKiBzdHJ1Y3R1cmVkIGdvIHRvIHRoZWlyICpfc3RhdHMoKSBtZXRob2RzLCBidXQgd2UgbmVlZCB0aGVpciBzaXplcyBhbmQgb2Zmc2V0cwomIzQzOyAqIHRvIHBlcmZvcm0gMzJiaXQgTUlCIG92ZXJmbG93IHdyYXBhcm91bmQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgeXQ5MjF4X21pYl9kZXNjc1tdID0gewomIzQzOwlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfQlJPQURDQVNULCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX01VTFRJQ0FTVCwgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9DUkNfRVJSLCBOVUxMKSwKJiM0MzsKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0FMSUdOX0VSUiwgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NCwgTlVMTCksCiYjNDM7CiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMjhfVE9fMjU1LCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8yNTZfVE9fNTExLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl81MTJfVE9fMTAyMywgTlVMTCksCiYjNDM7CiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTAyNF9UT18xNTE4LCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9SWF9HT09EX0JZVEVTLCBOVUxMKSwKJiM0MzsKJiM0MzsJTUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0JBRF9CWVRFUywgJiMzNDtSeEJhZEJ5dGVzJiMzNDspLAomIzQzOwlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfT1ZFUlNJWkVfRVJSLCBOVUxMKSwKJiM0MzsKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0RST1BQRUQsIE5VTEwpLAomIzQzOwlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfQlJPQURDQVNULCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BBVVNFLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJQ0FTVCwgTlVMTCksCiYjNDM7CiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NCwgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1LCBOVUxMKSwKJiM0MzsKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyMywgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTAyNF9UT18xNTE4LCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksCiYjNDM7CiYjNDM7CU1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0NPTExJU0lPTiwgTlVMTCksCiYjNDM7CiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTiwgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVCwgTlVMTCksCiYjNDM7CiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9ERUZFUlJFRCwgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9MQVRFX0NPTExJU0lPTiwgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9PQU0sICYjMzQ7UnhPQU0mIzM0OyksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9PQU0sICYjMzQ7VHhPQU0mIzM0OyksCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLgomIzQzOyAqCiYjNDM7ICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcAomIzQzOyAqIHRoZXJlKSwgd2UgaGF2ZSB0byBwb2xsIHN0YXRzIG1vcmUgZnJlcXVlbnRseSB0aGVuIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC4KJiM0MzsgKiBGb3Igb3ZlcmZsb3cgcHJvdGVjdGlvbiwgbm9ybWFsbHksIDEwMCBzZWMgaW50ZXJ2YWwgc2hvdWxkIGhhdmUgYmVlbiBPSy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTCSgzICogSFopCiYjNDM7CiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihfZHMpIGNvbnRhaW5lcl9vZl9jb25zdChfZHMsIHN0cnVjdCB5dDkyMXhfcHJpdiwgZHMpCiYjNDM7I2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS0mZ3Q7ZHMuZGV2KQomIzQzOwomIzQzOy8qIFJlYWQgYW5kIGhhbmRsZSBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLiBNSUIgYnVmZmVyIG11c3QgYmUgemVyb2VkIGJlZm9yZS4gKi8KJiM0MztzdGF0aWMgaW50IHl0OTIxeF9taWJfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtJmd0O21pYjsKJiM0MzsJc3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjsKJiM0MzsJdTY0ICpidWYgPSBwbS0mZ3Q7ZGF0YTsKJiM0MzsJdTY0IHJ4X2ZyYW1lczsKJiM0MzsJdTY0IHR4X2ZyYW1lczsKJiM0MzsJaW50IHJlcyA9IDA7CiYjNDM7CiYjNDM7CW1pYiA9ICZhbXA7cG0tJmd0O3N0YXRzOwomIzQzOwomIzQzOwlmb3IgKHNpemVfdCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gJmFtcDt5dDkyMXhfbWliX2Rlc2NzW2ldOwomIzQzOwkJdTMyIHJlZyA9IFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpICYjNDM7IGRlc2MtJmd0O29mZnNldDsKJiM0MzsKJiM0MzsJCWlmIChkZXNjLSZndDtzaXplICZsdDs9IDEpIHsKJiM0MzsJCQl1NjQgb2xkX3ZhbCA9IGJ1ZltpXTsKJiM0MzsJCQl1MzIgdmFsMDsKJiM0MzsJCQl1NjQgdmFsOwomIzQzOwomIzQzOwkJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsICZhbXA7dmFsMCk7CiYjNDM7CQkJaWYgKHJlcykKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJdmFsID0gKG9sZF92YWwgJmFtcDsgfih1NjQpVTMyX01BWCkgfCB2YWwwOwomIzQzOwkJCWlmICh2YWwgJmx0OyBvbGRfdmFsKQomIzQzOwkJCQl2YWwgJiM0Mzs9IDF1bGwgJmx0OyZsdDsgMzI7CiYjNDM7CiYjNDM7CQkJYnVmW2ldID0gdmFsOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXMgPSB5dDkyMXhfY291bnRlcl9yZWFkKHByaXYsIHJlZywgJmFtcDtidWZbaV0pOwomIzQzOwkJCWlmIChyZXMpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtwbS0mZ3Q7c3luY3ApOwomIzQzOwlmb3IgKHNpemVfdCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkmIzQzOyYjNDM7KQomIzQzOwkJdTY0X3N0YXRzX3NldCgmYW1wOygodTY0X3N0YXRzX3QgKiltaWIpW2ldLCBidWZbaV0pOwomIzQzOwlyeF9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfNjRieXRlKSAmIzQzOwomIzQzOwkJICAgIHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF82NV8xMjdieXRlKSAmIzQzOwomIzQzOwkJICAgIHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF8xMjhfMjU1Ynl0ZSkgJiM0MzsKJiM0MzsJCSAgICB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfMjU2XzUxMWJ5dGUpICYjNDM7CiYjNDM7CQkgICAgdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4XzUxMl8xMDIzYnl0ZSkgJiM0MzsKJiM0MzsJCSAgICB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfMTAyNF8xNTE4Ynl0ZSkgJiM0MzsKJiM0MzsJCSAgICB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfanVtYm8pOwomIzQzOwl0eF9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfNjRieXRlKSAmIzQzOwomIzQzOwkJICAgIHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF82NV8xMjdieXRlKSAmIzQzOwomIzQzOwkJICAgIHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF8xMjhfMjU1Ynl0ZSkgJiM0MzsKJiM0MzsJCSAgICB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfMjU2XzUxMWJ5dGUpICYjNDM7CiYjNDM7CQkgICAgdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3R4XzUxMl8xMDIzYnl0ZSkgJiM0MzsKJiM0MzsJCSAgICB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfMTAyNF8xNTE4Ynl0ZSkgJiM0MzsKJiM0MzsJCSAgICB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfanVtYm8pOwomIzQzOwl1NjRfc3RhdHNfc2V0KCZhbXA7cG0tJmd0O3J4X2ZyYW1lcywgcnhfZnJhbWVzKTsKJiM0MzsJdTY0X3N0YXRzX3NldCgmYW1wO3BtLSZndDt0eF9mcmFtZXMsIHR4X2ZyYW1lcyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cG0tJmd0O3N5bmNwKTsKJiM0MzsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxuJiMzNDssICYjMzQ7cmVhZCBzdGF0cyBmb3ImIzM0OywKJiM0MzsJCQlwb3J0LCByZXMpOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHl0OTIxeF9taWJfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBjb250YWluZXJfb2ZfY29uc3Qod29yaywgc3RydWN0IHl0OTIxeF9taWIsCiYjNDM7CQkJCQkJICAgd29yay53b3JrKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHBtLSZndDtwb3J0OwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2ZfY29uc3QocHAsIHN0cnVjdCB5dDkyMXhfcHJpdiwKJiM0MzsJCQkJCQkgICAgICBwb3J0c1twcC0mZ3Q7aW5kZXhdKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBkZWxheSA9IFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTOwomIzQzOwlpbnQgcG9ydCA9IHBwLSZndDtpbmRleDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlkZWxheSAqPSA0OwomIzQzOwomIzQzOwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtwbS0mZ3Q7d29yaywgZGVsYXkpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkCiYjNDM7eXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LAomIzQzOwkJICAgICAgIHVpbnQ4X3QgKmRhdGEpCiYjNDM7ewomIzQzOwlpZiAoc3RyaW5nc2V0ICE9IEVUSF9TU19TVEFUUykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChzaXplX3QgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9ICZhbXA7eXQ5MjF4X21pYl9kZXNjc1tpXTsKJiM0MzsKJiM0MzsJCWlmIChkZXNjLSZndDtuYW1lKQomIzQzOwkJCWV0aHRvb2xfcHV0cygmYW1wO2RhdGEsIGRlc2MtJmd0O25hbWUpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQKJiM0Mzt5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtJmd0O21pYjsKJiM0MzsJc3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjsKJiM0MzsJdTY0ICpidWY7CiYjNDM7CXNpemVfdCBqOwomIzQzOwomIzQzOwlpZiAoIXBtKQomIzQzOwkJcmV0dXJuOwomIzQzOwltaWIgPSAmYW1wO3BtLSZndDtzdGF0czsKJiM0MzsJYnVmID0gcG0tJmd0O2RhdGE7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTsKJiM0MzsKJiM0MzsJaiA9IDA7CiYjNDM7CWZvciAoc2l6ZV90IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSAmYW1wO3l0OTIxeF9taWJfZGVzY3NbaV07CiYjNDM7CiYjNDM7CQlpZiAoIWRlc2MtJmd0O25hbWUpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlkYXRhW2pdID0gYnVmW2ldOwomIzQzOwkJaiYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X2RzYV9nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldCkKJiM0Mzt7CiYjNDM7CWludCBjbnQgPSAwOwomIzQzOwomIzQzOwlpZiAoc3NldCAhPSBFVEhfU1NfU1RBVFMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZm9yIChzaXplX3QgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9ICZhbXA7eXQ5MjF4X21pYl9kZXNjc1tpXTsKJiM0MzsKJiM0MzsJCWlmIChkZXNjLSZndDtuYW1lKQomIzQzOwkJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNudDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZAomIzQzO3l0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLSZndDttaWI7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7CiYjNDM7CiYjNDM7CWlmICghcG0pCiYjNDM7CQlyZXR1cm47CiYjNDM7CW1pYiA9ICZhbXA7cG0tJmd0O3N0YXRzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwl5dDkyMXhfbWliX3JlYWQocHJpdiwgcG9ydCk7CiYjNDM7CiYjNDM7CW1hY19zdGF0cy0mZ3Q7RnJhbWVzVHJhbnNtaXR0ZWRPSyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7cG0tJmd0O3R4X2ZyYW1lcyk7CiYjNDM7CW1hY19zdGF0cy0mZ3Q7U2luZ2xlQ29sbGlzaW9uRnJhbWVzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3R4X3NpbmdsZV9jb2xsaXNpb25zKTsKJiM0MzsJbWFjX3N0YXRzLSZndDtNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF9tdWx0aXBsZV9jb2xsaXNpb25zKTsKJiM0MzsJbWFjX3N0YXRzLSZndDtGcmFtZXNSZWNlaXZlZE9LID0gdTY0X3N0YXRzX3JlYWQoJmFtcDtwbS0mZ3Q7cnhfZnJhbWVzKTsKJiM0MzsJbWFjX3N0YXRzLSZndDtGcmFtZUNoZWNrU2VxdWVuY2VFcnJvcnMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfY3JjX2Vycm9ycyk7CiYjNDM7CW1hY19zdGF0cy0mZ3Q7QWxpZ25tZW50RXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4X2FsaWdubWVudF9lcnJvcnMpOwomIzQzOwltYWNfc3RhdHMtJmd0O09jdGV0c1RyYW5zbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfZ29vZF9ieXRlcyk7CiYjNDM7CW1hY19zdGF0cy0mZ3Q7RnJhbWVzV2l0aERlZmVycmVkWG1pc3Npb25zID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3R4X2RlZmVycmVkKTsKJiM0MzsJbWFjX3N0YXRzLSZndDtMYXRlQ29sbGlzaW9ucyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF9sYXRlX2NvbGxpc2lvbnMpOwomIzQzOwltYWNfc3RhdHMtJmd0O0ZyYW1lc0Fib3J0ZWREdWVUb1hTQ29sbHMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnMpOwomIzQzOwkvKiBtYWNfc3RhdHMtJmd0O0ZyYW1lc0xvc3REdWVUb0ludE1BQ1htaXRFcnJvciAqLwomIzQzOwkvKiBtYWNfc3RhdHMtJmd0O0NhcnJpZXJTZW5zZUVycm9ycyAqLwomIzQzOwltYWNfc3RhdHMtJmd0O09jdGV0c1JlY2VpdmVkT0sgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfZ29vZF9ieXRlcyk7CiYjNDM7CS8qIG1hY19zdGF0cy0mZ3Q7RnJhbWVzTG9zdER1ZVRvSW50TUFDUmN2RXJyb3IgKi8KJiM0MzsJbWFjX3N0YXRzLSZndDtNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfbXVsdGljYXN0KTsKJiM0MzsJbWFjX3N0YXRzLSZndDtCcm9hZGNhc3RGcmFtZXNYbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfYnJvYWRjYXN0KTsKJiM0MzsJLyogbWFjX3N0YXRzLSZndDtGcmFtZXNXaXRoRXhjZXNzaXZlRGVmZXJyYWwgKi8KJiM0MzsJbWFjX3N0YXRzLSZndDtNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4X211bHRpY2FzdCk7CiYjNDM7CW1hY19zdGF0cy0mZ3Q7QnJvYWRjYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9icm9hZGNhc3QpOwomIzQzOwkvKiBtYWNfc3RhdHMtJmd0O0luUmFuZ2VMZW5ndGhFcnJvcnMgKi8KJiM0MzsJLyogbWFjX3N0YXRzLSZndDtPdXRPZlJhbmdlTGVuZ3RoRmllbGQgKi8KJiM0MzsJbWFjX3N0YXRzLSZndDtGcmFtZVRvb0xvbmdFcnJvcnMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfb3ZlcnNpemVfZXJyb3JzKTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkCiYjNDM7eXQ5MjF4X2RzYV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLSZndDttaWI7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7CiYjNDM7CiYjNDM7CWlmICghcG0pCiYjNDM7CQlyZXR1cm47CiYjNDM7CW1pYiA9ICZhbXA7cG0tJmd0O3N0YXRzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwl5dDkyMXhfbWliX3JlYWQocHJpdiwgcG9ydCk7CiYjNDM7CiYjNDM7CWN0cmxfc3RhdHMtJmd0O01BQ0NvbnRyb2xGcmFtZXNUcmFuc21pdHRlZCA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF9wYXVzZSk7CiYjNDM7CWN0cmxfc3RhdHMtJmd0O01BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9wYXVzZSk7CiYjNDM7CS8qIGN0cmxfc3RhdHMtJmd0O1Vuc3VwcG9ydGVkT3Bjb2Rlc1JlY2VpdmVkICovCiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSB5dDkyMXhfcm1vbl9yYW5nZXNbXSA9IHsKJiM0MzsJeyAwLCA2NCB9LAomIzQzOwl7IDY1LCAxMjcgfSwKJiM0MzsJeyAxMjgsIDI1NSB9LAomIzQzOwl7IDI1NiwgNTExIH0sCiYjNDM7CXsgNTEyLCAxMDIzIH0sCiYjNDM7CXsgMTAyNCwgMTUxOCB9LAomIzQzOwl7IDE1MTksIFlUOTIxWF9GUkFNRV9TSVpFX01BWCB9LAomIzQzOwl7fQomIzQzO307CiYjNDM7CiYjNDM7dm9pZAomIzQzO3l0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsCiYjNDM7CQkJICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC0mZ3Q7bWliOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliOwomIzQzOwomIzQzOwlpZiAoIXBtKQomIzQzOwkJcmV0dXJuOwomIzQzOwltaWIgPSAmYW1wO3BtLSZndDtzdGF0czsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJeXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpOwomIzQzOwomIzQzOwkqcmFuZ2VzID0geXQ5MjF4X3Jtb25fcmFuZ2VzOwomIzQzOwomIzQzOwlybW9uX3N0YXRzLSZndDt1bmRlcnNpemVfcGt0cyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF91bmRlcnNpemVfZXJyb3JzKTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7b3ZlcnNpemVfcGt0cyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9vdmVyc2l6ZV9lcnJvcnMpOwomIzQzOwlybW9uX3N0YXRzLSZndDtmcmFnbWVudHMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfYWxpZ25tZW50X2Vycm9ycyk7CiYjNDM7CS8qIHJtb25fc3RhdHMtJmd0O2phYmJlcnMgKi8KJiM0MzsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdFswXSA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF82NGJ5dGUpOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzFdID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4XzY1XzEyN2J5dGUpOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzJdID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4XzEyOF8yNTVieXRlKTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdFszXSA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF8yNTZfNTExYnl0ZSk7CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RbNF0gPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfNTEyXzEwMjNieXRlKTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdFs1XSA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF8xMDI0XzE1MThieXRlKTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdFs2XSA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9qdW1ibyk7CiYjNDM7CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbMF0gPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfNjRieXRlKTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdF90eFsxXSA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF82NV8xMjdieXRlKTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdF90eFsyXSA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF8xMjhfMjU1Ynl0ZSk7CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbM10gPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfMjU2XzUxMWJ5dGUpOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0X3R4WzRdID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3R4XzUxMl8xMDIzYnl0ZSk7CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbNV0gPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfMTAyNF8xNTE4Ynl0ZSk7CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbNl0gPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfanVtYm8pOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQKJiM0Mzt5dDkyMXhfZHNhX2dldF9zdGF0czY0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkgICAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLSZndDttaWI7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7CiYjNDM7CXVuc2lnbmVkIGludCBzdGFydDsKJiM0MzsKJiM0MzsJaWYgKCFwbSkKJiM0MzsJCXJldHVybjsKJiM0MzsJbWliID0gJmFtcDtwbS0mZ3Q7c3RhdHM7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKCZhbXA7cG0tJmd0O3N5bmNwKTsKJiM0MzsKJiM0MzsJCXN0YXRzLSZndDtyeF9sZW5ndGhfZXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4X3VuZGVyc2l6ZV9lcnJvcnMpICYjNDM7CiYjNDM7CQkJCQkgIHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9mcmFnbWVudF9lcnJvcnMpOwomIzQzOwkJc3RhdHMtJmd0O3J4X292ZXJfZXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4X292ZXJzaXplX2Vycm9ycyk7CiYjNDM7CQlzdGF0cy0mZ3Q7cnhfY3JjX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9jcmNfZXJyb3JzKTsKJiM0MzsJCXN0YXRzLSZndDtyeF9mcmFtZV9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfYWxpZ25tZW50X2Vycm9ycyk7CiYjNDM7CQkvKiBzdGF0cy0mZ3Q7cnhfZmlmb19lcnJvcnMgKi8KJiM0MzsJCS8qIHN0YXRzLSZndDtyeF9taXNzZWRfZXJyb3JzICovCiYjNDM7CiYjNDM7CQlzdGF0cy0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnMpOwomIzQzOwkJLyogc3RhdHMtJmd0O3R4X2NhcnJpZXJfZXJyb3JzICovCiYjNDM7CQlzdGF0cy0mZ3Q7dHhfZmlmb19lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfdW5kZXJzaXplX2Vycm9ycyk7CiYjNDM7CQkvKiBzdGF0cy0mZ3Q7dHhfaGVhcnRiZWF0X2Vycm9ycyAqLwomIzQzOwkJc3RhdHMtJmd0O3R4X3dpbmRvd19lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfbGF0ZV9jb2xsaXNpb25zKTsKJiM0MzsKJiM0MzsJCXN0YXRzLSZndDtyeF9wYWNrZXRzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDtwbS0mZ3Q7cnhfZnJhbWVzKTsKJiM0MzsJCXN0YXRzLSZndDt0eF9wYWNrZXRzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDtwbS0mZ3Q7dHhfZnJhbWVzKTsKJiM0MzsJCXN0YXRzLSZndDtyeF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9nb29kX2J5dGVzKSAtCiYjNDM7CQkJCSAgRVRIX0ZDU19MRU4gKiBzdGF0cy0mZ3Q7cnhfcGFja2V0czsKJiM0MzsJCXN0YXRzLSZndDt0eF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF9nb29kX2J5dGVzKSAtCiYjNDM7CQkJCSAgRVRIX0ZDU19MRU4gKiBzdGF0cy0mZ3Q7dHhfcGFja2V0czsKJiM0MzsJCXN0YXRzLSZndDtyeF9kcm9wcGVkID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4X2Ryb3BwZWQpOwomIzQzOwkJLyogc3RhdHMtJmd0O3R4X2Ryb3BwZWQgKi8KJiM0MzsJCXN0YXRzLSZndDttdWx0aWNhc3QgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfbXVsdGljYXN0KTsKJiM0MzsJCXN0YXRzLSZndDtjb2xsaXNpb25zID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3R4X2NvbGxpc2lvbnMpOwomIzQzOwl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoJmFtcDtwbS0mZ3Q7c3luY3AsIHN0YXJ0KSk7CiYjNDM7CiYjNDM7CXN0YXRzLSZndDtyeF9lcnJvcnMgPSBzdGF0cy0mZ3Q7cnhfbGVuZ3RoX2Vycm9ycyAmIzQzOyBzdGF0cy0mZ3Q7cnhfb3Zlcl9lcnJvcnMgJiM0MzsKJiM0MzsJCQkgICBzdGF0cy0mZ3Q7cnhfY3JjX2Vycm9ycyAmIzQzOyBzdGF0cy0mZ3Q7cnhfZnJhbWVfZXJyb3JzOwomIzQzOwlzdGF0cy0mZ3Q7dHhfZXJyb3JzID0gc3RhdHMtJmd0O3R4X2Fib3J0ZWRfZXJyb3JzICYjNDM7IHN0YXRzLSZndDt0eF9maWZvX2Vycm9ycyAmIzQzOwomIzQzOwkJCSAgIHN0YXRzLSZndDt0eF93aW5kb3dfZXJyb3JzOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkCiYjNDM7eXQ5MjF4X2RzYV9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC0mZ3Q7bWliOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliOwomIzQzOwomIzQzOwlpZiAoIXBtKQomIzQzOwkJcmV0dXJuOwomIzQzOwltaWIgPSAmYW1wO3BtLSZndDtzdGF0czsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJeXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpOwomIzQzOwomIzQzOwlwYXVzZV9zdGF0cy0mZ3Q7dHhfcGF1c2VfZnJhbWVzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3R4X3BhdXNlKTsKJiM0MzsJcGF1c2Vfc3RhdHMtJmd0O3J4X3BhdXNlX2ZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9wYXVzZSk7CiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zMzk5MmE1ZjliZGMxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuaApAQCAtMCwwICYjNDM7MSwxNjcgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9ZVF9NSUJfSAomIzQzOyNkZWZpbmUgX1lUX01JQl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3U2NF9zdGF0c19zeW5jLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc2EuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIFlUOTIxWF9NSUJfQ1RSTAkJCTB4YzAwMDQKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfQ0xFQU4JCQlCSVQoMzApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX1BPUlRfTQkJCUdFTk1BU0soNiwgMykKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX01JQl9DVFJMX1BPUlQoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9NSUJfQ1RSTF9QT1JUX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfT05FX1BPUlQJCUJJVCgxKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9BTExfUE9SVAkJQklUKDApCiYjNDM7I2RlZmluZSBZVDkyMVhfTUlCbl9EQVRBMChwb3J0KQkJKDB4YzAxMDAgJiM0MzsgMHgxMDAgKiAocG9ydCkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTUlCbl9EQVRBbShwb3J0LCB4KQkoWVQ5MjFYX01JQm5fREFUQTAocG9ydCkgJiM0MzsgNCAqICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQlJPQURDQVNUCQkweDAwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFCQkweDA0CiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX01VTFRJQ0FTVAkJMHgwOAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9DUkNfRVJSCQkweDBjCiYjNDM7CiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0FMSUdOX0VSUgkJMHgxMAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSCTB4MTQKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfRlJBR19FUlIJCTB4MTgKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY0CQkweDFjCiYjNDM7CiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NV9UT18xMjcJMHgyMAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTI4X1RPXzI1NQkweDI0CiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8yNTZfVE9fNTExCTB4MjgKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzUxMl9UT18xMDIzCTB4MmMKJiM0MzsKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOAkweDMwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWAkweDM0CiYjNDM7LyogMHgzODogdW51c2VkICovCiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0dPT0RfQllURVMJCTB4M2MKJiM0MzsKJiM0MzsvKiAweDQwOiA2NCBieXRlcyAqLwomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9CQURfQllURVMJCTB4NDQKJiM0MzsvKiAweDQ4OiA2NCBieXRlcyAqLwomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PVkVSU0laRV9FUlIJMHg0YwomIzQzOwomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9EUk9QUEVECQkweDUwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0JST0FEQ0FTVAkJMHg1NAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QQVVTRQkJMHg1OAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSUNBU1QJCTB4NWMKJiM0MzsKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUgkweDYwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NAkJMHg2NAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3CTB4NjgKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEyOF9UT18yNTUJMHg2YwomIzQzOwomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMjU2X1RPXzUxMQkweDcwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyMwkweDc0CiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMDI0X1RPXzE1MTgJMHg3OAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTUxOV9UT19NQVgJMHg3YwomIzQzOwomIzQzOy8qIDB4ODA6IHVudXNlZCAqLwomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTCQkweDg0CiYjNDM7LyogMHg4ODogNjQgYnl0ZXMgKi8KJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfQ09MTElTSU9OCQkweDhjCiYjNDM7CiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04JMHg5MAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSVBMRV9DT0xMSVNJT04JMHg5NAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OCTB4OTgKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUCQkJMHg5YwomIzQzOwomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9ERUZFUlJFRAkJMHhhMAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9MQVRFX0NPTExJU0lPTgkweGE0CiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX09BTQkJCTB4YTgKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfT0FNCQkJMHhhYwomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfbWliX3N0YXRzIHsKJiM0MzsJdTY0X3N0YXRzX3QgcnhfYnJvYWRjYXN0OwomIzQzOwl1NjRfc3RhdHNfdCByeF9wYXVzZTsKJiM0MzsJdTY0X3N0YXRzX3QgcnhfbXVsdGljYXN0OwomIzQzOwl1NjRfc3RhdHNfdCByeF9jcmNfZXJyb3JzOwomIzQzOwomIzQzOwl1NjRfc3RhdHNfdCByeF9hbGlnbm1lbnRfZXJyb3JzOwomIzQzOwl1NjRfc3RhdHNfdCByeF91bmRlcnNpemVfZXJyb3JzOwomIzQzOwl1NjRfc3RhdHNfdCByeF9mcmFnbWVudF9lcnJvcnM7CiYjNDM7CXU2NF9zdGF0c190IHJ4XzY0Ynl0ZTsKJiM0MzsKJiM0MzsJdTY0X3N0YXRzX3QgcnhfNjVfMTI3Ynl0ZTsKJiM0MzsJdTY0X3N0YXRzX3QgcnhfMTI4XzI1NWJ5dGU7CiYjNDM7CXU2NF9zdGF0c190IHJ4XzI1Nl81MTFieXRlOwomIzQzOwl1NjRfc3RhdHNfdCByeF81MTJfMTAyM2J5dGU7CiYjNDM7CiYjNDM7CXU2NF9zdGF0c190IHJ4XzEwMjRfMTUxOGJ5dGU7CiYjNDM7CXU2NF9zdGF0c190IHJ4X2p1bWJvOwomIzQzOwl1NjRfc3RhdHNfdCByeF9nb29kX2J5dGVzOwomIzQzOwomIzQzOwl1NjRfc3RhdHNfdCByeF9iYWRfYnl0ZXM7CiYjNDM7CXU2NF9zdGF0c190IHJ4X292ZXJzaXplX2Vycm9yczsKJiM0MzsKJiM0MzsJdTY0X3N0YXRzX3QgcnhfZHJvcHBlZDsKJiM0MzsJdTY0X3N0YXRzX3QgdHhfYnJvYWRjYXN0OwomIzQzOwl1NjRfc3RhdHNfdCB0eF9wYXVzZTsKJiM0MzsJdTY0X3N0YXRzX3QgdHhfbXVsdGljYXN0OwomIzQzOwomIzQzOwl1NjRfc3RhdHNfdCB0eF91bmRlcnNpemVfZXJyb3JzOwomIzQzOwl1NjRfc3RhdHNfdCB0eF82NGJ5dGU7CiYjNDM7CXU2NF9zdGF0c190IHR4XzY1XzEyN2J5dGU7CiYjNDM7CXU2NF9zdGF0c190IHR4XzEyOF8yNTVieXRlOwomIzQzOwomIzQzOwl1NjRfc3RhdHNfdCB0eF8yNTZfNTExYnl0ZTsKJiM0MzsJdTY0X3N0YXRzX3QgdHhfNTEyXzEwMjNieXRlOwomIzQzOwl1NjRfc3RhdHNfdCB0eF8xMDI0XzE1MThieXRlOwomIzQzOwl1NjRfc3RhdHNfdCB0eF9qdW1ibzsKJiM0MzsKJiM0MzsJdTY0X3N0YXRzX3QgdHhfZ29vZF9ieXRlczsKJiM0MzsJdTY0X3N0YXRzX3QgdHhfY29sbGlzaW9uczsKJiM0MzsKJiM0MzsJdTY0X3N0YXRzX3QgdHhfYWJvcnRlZF9lcnJvcnM7CiYjNDM7CXU2NF9zdGF0c190IHR4X211bHRpcGxlX2NvbGxpc2lvbnM7CiYjNDM7CXU2NF9zdGF0c190IHR4X3NpbmdsZV9jb2xsaXNpb25zOwomIzQzOwl1NjRfc3RhdHNfdCB0eF9nb29kOwomIzQzOwomIzQzOwl1NjRfc3RhdHNfdCB0eF9kZWZlcnJlZDsKJiM0MzsJdTY0X3N0YXRzX3QgdHhfbGF0ZV9jb2xsaXNpb25zOwomIzQzOwl1NjRfc3RhdHNfdCByeF9vYW07CiYjNDM7CXU2NF9zdGF0c190IHR4X29hbTsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX01JQl9OVU0JKHNpemVvZihzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cykgLyBzaXplb2YodTY0X3N0YXRzX3QpKQomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfbWliIHsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0OwomIzQzOwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiYjNDM7CXN0cnVjdCB1NjRfc3RhdHNfc3luYyBzeW5jcDsKJiM0MzsJLyogcHJvdGVjdGVkIGJ5IHN5bmNwIE9SIHByaXYtJmd0O3JlZ19sb2NrICovCiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliX3N0YXRzIHN0YXRzOwomIzQzOwl1NjRfc3RhdHNfdCByeF9mcmFtZXM7CiYjNDM7CXU2NF9zdGF0c190IHR4X2ZyYW1lczsKJiM0MzsJLyogcHJvdGVjdGVkIGJ5IHByaXYtJmd0O3JlZ19sb2NrICovCiYjNDM7CXU2NCBkYXRhW1lUOTIxWF9NSUJfTlVNXTsKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgeXQ5MjF4X21pYl9wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7dm9pZAomIzQzO3l0OTIxeF9kc2FfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCwKJiM0MzsJCSAgICAgICB1aW50OF90ICpkYXRhKTsKJiM0Mzt2b2lkCiYjNDM7eXQ5MjF4X2RzYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1aW50NjRfdCAqZGF0YSk7CiYjNDM7aW50IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpOwomIzQzO3ZvaWQKJiM0Mzt5dDkyMXhfZHNhX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpOwomIzQzO3ZvaWQKJiM0Mzt5dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKTsKJiM0Mzt2b2lkCiYjNDM7eXQ5MjF4X2RzYV9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCSAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cywKJiM0MzsJCQkgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcyk7CiYjNDM7dm9pZAomIzQzO3l0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCSAgICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKTsKJiM0Mzt2b2lkCiYjNDM7eXQ5MjF4X2RzYV9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpOwomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMKaW5kZXggYmYzYWRmZDY0MTY1YS4uMjcwODY2MDI5OTdiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jCkBAIC02Myw2ICYjNDM7NjMsMzYgQEAgaW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKIAlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwogfQogCiYjNDM7LyogUmVsaWFibHkgcmVhZCBhIDY0Yml0IGNvdW50ZXIgKi8KJiM0MztpbnQgeXQ5MjF4X2NvdW50ZXJfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHU2NCAqdmFscCkKJiM0Mzt7CiYjNDM7CXUzMiBvbGRfbG87CiYjNDM7CWludCByZXM7CiYjNDM7CXUzMiBoaTsKJiM0MzsJdTMyIGxvOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCAmYW1wO29sZF9sbyk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IDE2OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0LCAmYW1wO2hpKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsICZhbXA7bG8pOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkJaWYgKGxvICZndDs9IG9sZF9sbykgewomIzQzOwkJCSp2YWxwID0gKCh1NjQpaGkgJmx0OyZsdDsgMzIpIHwgbG87CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CQlvbGRfbG8gPSBsbzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50CiB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAogCQkgdW5zaWduZWQgaW50IG51bV9yZWdzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmgKaW5kZXggMjEyZTIwZjcxZDgwNi4uZDM0MjQwNTQ4YWY3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCkBAIC0zNSw2ICYjNDM7MzUsOCBAQCB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KQogCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTsKIH0KIAomIzQzO2ludCB5dDkyMXhfY291bnRlcl9yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTY0ICp2YWxwKTsKJiM0MzsKIC8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUKICAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWUKICAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyODMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHBhdGNoIHNlcmllcyBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIgZnV6emluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB0b3VjaGluZyBmaWxlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vYC4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGVzZSBmaWxlcyBhcmUgYmVpbmcgbW9kaWZpZWQ6CgoqICAgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVgCiogICBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNgCiogICBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhgCiogICBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuY2AKKiAgIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5oYAoqICAgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNgCiogICBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaGAKCkFscmlnaHQsIHRoZSBsb2NhdGlvbiBnaXZlcyBtZSBhIGdvb2Qgc3RhcnQuIEkgY2FuIHNlZSB0aGF0IHRoaXMgaXMgYSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIHN3aXRjaCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIFlUOTIxWCwgd2hpY2ggaXMgYSBNb3RvcmNvbW0gZGV2aWNlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgc2V0dXAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHBhcnRpY3VsYXIgc3dpdGNoIGlzIHByb2JlZCBhbmQgd2hhdCBoYXJkd2FyZSBvciBidXMgaXQmIzM5O3MgYm91bmQgdG8uIElzIGl0IEkyQywgU1BJLCBNRElPLCBzb21ldGhpbmcgZWxzZT8gS25vd2luZyB0aGlzIHdpbGwgc2lnbmlmaWNhbnRseSBpbmZvcm0gd2hldGhlciBpdCYjMzk7cyB2aWFibGUgZm9yIHN5emthbGxlci4KCkkmIzM5O2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3Igc2NhbiB0aHJvdWdoIHRoZSByZWxldmFudCBmaWxlcyB0byBmaWd1cmUgb3V0IHRoZSBwcm9iaW5nIG1lY2hhbmlzbSBhbmQgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORVRfRFNBX1lUOTIxWCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlLTMteXQ5MjF4LW9ianMgOj0gY2hpcC5vXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjQ6eXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICYjNDM7PSBsZWRzLm9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUtNS15dDkyMXgtb2JqcyAmIzQzOz0gbWliLm9cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zODk3PXN0YXRpYyB2b2lkIHl0OTIxeF9kc2FfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM5MDAtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozOTAxOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzkwMi1cdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00MjE2PXN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI2MS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyNjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjYzLVx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmg9ODIxPXN0cnVjdCB5dDkyMXhfcG9ydCB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgtODI2LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmg6ODI3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgtODI4LVx0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaD05Nj1zdHJ1Y3QgeXQ5MjF4X2xlZCB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgtMTAxLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmg6MTAyOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgtMTAzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgS2NvbmZpZyBGaWxlcyBmb3IgRFNBIERyaXZlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG5ldHdvcmsgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIChEU0EpIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIENvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgdmVuZG9yLXNwZWNpZmljIG5hdHVyZSBvZiB0aGUgZHJpdmVyLCBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnYCBmaWxlIGZpcnN0LiBNb3RvckNvbW0gaXMgYSB2ZW5kb3IsIGFuZCBpdCYjMzk7cyBsaWtlbHkgdGhleSBoYXZlIHRoZWlyIG93biBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGRlZmluZWQgd2l0aGluIGEgZGVkaWNhdGVkIHN1YmRpcmVjdG9yeS4gSWYsIGhvd2V2ZXIsIHRoZSBkcml2ZXIgaXMgYSBtb3JlIGdlbmVyaWMgRFNBIGltcGxlbWVudGF0aW9uLCBvciBpZiB0aGUgTW90b3JDb21tLXNwZWNpZmljIGZpbGUgaXMgbWlzc2luZyBvciBkb2VzbiYjMzk7dCB5aWVsZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLCBJJiMzOTtsbCB0aGVuIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBtYWluIERTQSBLY29uZmlnIGZpbGUsIHdoaWNoIGlzIGBkcml2ZXJzL25ldC9kc2EvS2NvbmZpZ2AuIFRoYXQgZmlsZSBzaG91bGQgcHJvdmlkZSBhIG1vcmUgZ2VuZXJhbCBvdmVydmlldyBvZiB0aGUgRFNBIGZyYW1ld29yayYjMzk7cyBjb25maWd1cmFibGUgYXNwZWN0cyBhbmQgcG90ZW50aWFsbHkgcG9pbnQgbWUgdG8gb3RoZXIgcmVsZXZhbnQgc3ViLWNvbmZpZ3VyYXRpb25zLiBFaXRoZXIgd2F5LCB0aGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIGRpZ2dpbmcgaW50byB0aGUgYnVpbGQgc3lzdGVtIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX0RTQV9ZVDkyMVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWc6Mjpjb25maWcgTkVUX0RTQV9ZVDkyMVhcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnLTktXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWc6MTA6Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7TEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZy0xMi1cdGRlZmF1bHQgeVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnOjEzOlx0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnOjE0Olx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnLTE1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUtMy15dDkyMXgtb2JqcyA6PSBjaGlwLm9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6NDp5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMub1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZS01LXl0OTIxeC1vYmpzICYjNDM7PSBtaWIub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTM4OTc9c3RhdGljIHZvaWQgeXQ5MjF4X2RzYV90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzkwMC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM5MDE6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zOTAyLVx0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyMTY9c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjYxLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDI2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyNjMtXHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaD04MjE9c3RydWN0IHl0OTIxeF9wb3J0IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaC04MjYtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaDo4Mjc6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaC04MjgtXHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oPTk2PXN0cnVjdCB5dDkyMXhfbGVkIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaC0xMDEtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaDoxMDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaC0xMDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBNb3RvcmNvbW0gRFNBIERyaXZlciBSZWdpc3RyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBNb3RvcmNvbW0gRFNBIGRyaXZlciBzaXR1YXRpb24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBpdCYjMzk7cyBiZWluZyBoYW5kbGVkIGF0IHRoZSBLY29uZmlnIGxldmVsIOKAkyBwYXJ0aWN1bGFybHkgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgb3B0aW9ucyBpbiBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnYC4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gYW5kIGlmIHRoZSBkcml2ZXIgaXMgY29ycmVjdGx5IGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQgcGxhdGZvcm0uIFRoZW4sIHRoZSByZWFsIG1lYXQgb2YgaXQ6IEkmIzM5O2xsIGp1bXAgaW50byBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgcHJvYmUgZnVuY3Rpb24sIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uIGl0c2VsZiwgYW5kIHRoZSBhc3NvY2lhdGVkIG1vZHVsZSBsb2FkaW5nIHNlcXVlbmNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBwcm9iZSBpcyBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgdGhlIGhhcmR3YXJlIGFuZCBiaW5kaW5nIHRvIGl0LiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHVzaW5nIGEgcHJvcGVyIGRldmljZSB0cmVlIGJpbmRpbmcsIG9yIHNvbWUgb3RoZXIgbWV0aG9kLCBhbmQgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcmVzb3VyY2UgYWxsb2NhdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgY2xvY2sgbWFuYWdlbWVudCB3aXRoaW4gdGhlIHByb2JlIGZ1bmN0aW9uLiBUaGUgcmVnaXN0cmF0aW9uIHBhcnQgaXMgY3JpdGljYWw7IEkmIzM5O2xsIGNoZWNrIGhvdyBpdCYjMzk7cyBsaW5rZWQgaW50byB0aGUgY29yZSBEU0EgZnJhbWV3b3JrLCBob3cgdGhlIGRyaXZlciYjMzk7cyBvcGVyYXRpb25zIGFyZSBiZWluZyBob29rZWQgaW4sIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0IHBvaW50cy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgb3Igd2hlcmUgdGhpbmdzIGNhbiBnbyB3cm9uZy4gSSYjMzk7bSBsb29raW5nIGZvciByb2J1c3RuZXNzLCBnb29kIGVycm9yIGhhbmRsaW5nLCBhbmQgYSBjbGVhbiBpbnRlcmZhY2UgdG8gdGhlIERTQSBjb3JlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBORVRfRFNBX1lUOTIxWFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4gICA1Olx0XHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4gICA4Olx0XHQgIGNoaXAuXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbiAgMTE6XHRcdGJvb2wgXCYjMzQ7TEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcJiMzNDtcbiAgMTI6XHRcdGRlZmF1bHQgeVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxuICAxNDpcdFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXG4gIDE3Olx0XHQgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NDc3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIERldmljZSBJbnRlZ3JhdGlvbioqCgpBbHJpZ2h0LCBzbyBhIG5ldyBgeXQ5MjF4YCBkZXZpY2UuLi4gbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBob3cgaXQgaW50ZXJmYWNlcy4gSXMgaXQgcmlkaW5nIHRoZSBNRElPIGJ1cywgaXMgaXQgSTJDLCBvciBpcyBpdCBTUEk/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjb25uZWN0aW9uIHByb3RvY29sIHRvIGtub3cgaG93IEkmIzM5O20gZ29pbmcgdG8gaW50ZXJhY3Qgd2l0aCBpdC4KClRoZW4sIHNpbmNlIHRoaXMgc2VlbXMgdG8gYmUgbmV0d29ya2luZyByZWxhdGVkLCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbW90b3Jjb21tIGRyaXZlcnMgd2l0aGluIHRoZSBuZXR3b3JraW5nIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGBjaGlwLmNgIGZpbGUuIENoYW5jZXMgYXJlLCB3aGF0ZXZlciBhcmNoaXRlY3R1cmUgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaGFzIGltcGxlbWVudGVkIGl0IHRoZXJlLiBNaWdodCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgZGVlcCBkaXZlIGFuZCB3b3JrIGJhY2t3YXJkcyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmZpbGUgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMgZG9lcyBub3QgaGF2ZSBsaW5lIDQ3NDAsIGl0IGhhcyBvbmx5IDQ0NTYgbGluZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2ZpbGUgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMgZG9lcyBub3QgaGF2ZSBsaW5lIDQ3NDAsIGl0IGhhcyBvbmx5IDQ0NTYgbGluZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Nzg4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgaW1hZ2luaW5nIG15c2VsZiBhcyBhbiBleHBlcnQgZGl2aW5nIGludG8gYGNoaXAuY2A6CgoqKkRpdmluZyBpbnRvIHRoZSBEZWVwIEVuZDogVGhlIFRhaWwgRW5kIG9mIGBjaGlwLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBza2lwIHRoZSBwcmVsaW1pbmFyaWVzIGFuZCBnZXQgcmlnaHQgdG8gdGhlIG1lYXR5IGJpdHMuIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBmb3IgdGhlIGVuZCBvZiBgY2hpcC5jYC4gTm8gbmVlZCB0byByZWhhc2ggdGhlIG9idmlvdXM7IEkmIzM5O20gYXNzdW1pbmcgdGhlIGdyb3VuZHdvcmsgYW5kIGNvcmUgZnVuY3Rpb25hbGl0eSBhcmUgYWxyZWFkeSB1bmRlcnN0b29kLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYywgb3IgdGhlIHRyb3VibGUsIHVzdWFsbHkgcmVzaWRlczogdGhlIGZpbmFsaXphdGlvbiByb3V0aW5lcywgdGhlIGludGVycnVwdCBoYW5kbGVycywgdGhlIGRlYnVnIGludGVyZmFjZXMsIG9yIG1heWJlIGp1c3Qgc29tZSBjbGV2ZXIgb3B0aW1pemF0aW9uIHRyaWNrZXJ5LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSAmIzM0O3NvIHdoYXQ/JiMzNDsg4oCTIHdoYXQmIzM5O3MgdGhlIHVsdGltYXRlIG91dGNvbWUgb2YgYWxsIHRoaXMgY29kZT8gV2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXMgYmVpbmcgaGFuZGxlZCwgb3IsIG1vcmUgaW50ZXJlc3RpbmdseSwgdGhlICp1bipoYW5kbGVkIG9uZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByZXNvdXJjZSBsZWFrcyBvciBjb25jdXJyZW5jeSBpc3N1ZXMganVzdCB3YWl0aW5nIHRvIGJpdGUgdXM/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlIGVuZCBvZnRlbiB0aWVzIGV2ZXJ5dGhpbmcgdG9nZXRoZXIsIHJldmVhbHMgdGhlIHRydWUgYXJjaGl0ZWN0dXJlLCBhbmQgZXhwb3NlcyB0aG9zZSBsaXR0bGUgd2FydHMgYW5kIHdvcmthcm91bmRzIHRoYXQgbWFrZSBhIHN5c3RlbSB0cnVseSBmYXNjaW5hdGluZy4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDAwOlx0XHRtZGlvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZGlvKSwgR0ZQX0tFUk5FTCk7XG40NDAxOlx0XHRpZiAoIW1kaW8pXG40NDAyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuNDQwMzpcdFxuNDQwNDpcdFx0bWRpby1cdTAwM2VidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbjQ0MDU6XHRcdG1kaW8tXHUwMDNlYWRkciA9IG1kaW9kZXYtXHUwMDNlYWRkcjtcbjQ0MDY6XHRcdG1kaW8tXHUwMDNlc3dpdGNoaWQgPSAwO1xuNDQwNzpcdFxuNDQwODpcdFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbjQ0MDk6XHRcbjQ0MTA6XHRcdHByaXYtXHUwMDNlcmVnX29wcyA9IFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XG40NDExOlx0XHRwcml2LVx1MDAzZXJlZ19jdHggPSBtZGlvO1xuNDQxMjpcdFxuNDQxMzpcdFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGkmIzQzOyYjNDM7KSB7XG40NDE0Olx0XHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuNDQxNTpcdFxuNDQxNjpcdFx0XHRwcC1cdTAwM2VpbmRleCA9IGk7XG40NDE3Olx0XHR9XG40NDE4Olx0XG40NDE5Olx0XHRkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG40NDIwOlx0XHRkcy1cdTAwM2VkZXYgPSBkZXY7XG40NDIxOlx0XHRkcy1cdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XG40NDIyOlx0XHRkcy1cdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xuNDQyMzpcdFx0ZHMtXHUwMDNlcHJpdiA9IHByaXY7XG40NDI0Olx0XHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZ5dDkyMXhfZHNhX3N3aXRjaF9vcHM7XG40NDI1Olx0XHRkcy1cdTAwM2VhZ2VpbmdfdGltZV9taW4gPSAxICogNTAwMDtcbjQ0MjY6XHRcdGRzLVx1MDAzZWFnZWluZ190aW1lX21heCA9IFUxNl9NQVggKiA1MDAwO1xuNDQyNzpcdFx0ZHMtXHUwMDNlcGh5bGlua19tYWNfb3BzID0gXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcztcbjQ0Mjg6XHRcdGRzLVx1MDAzZW51bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07XG40NDI5Olx0XHRkcy1cdTAwM2VudW1fcG9ydHMgPSBZVDkyMVhfUE9SVF9OVU07XG40NDMwOlx0XG40NDMxOlx0XHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIHByaXYpO1xuNDQzMjpcdFxuNDQzMzpcdFx0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpO1xuNDQzNDpcdH1cbjQ0MzU6XHRcbjQ0MzY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyMXhfb2ZfbWF0Y2hbXSA9IHtcbjQ0Mzc6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7IH0sXG40NDM4Olx0XHR7fVxuNDQzOTpcdH07XG40NDQwOlx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeXQ5MjF4X29mX21hdGNoKTtcbjQ0NDE6XHRcbjQ0NDI6XHRzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcbjQ0NDM6XHRcdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxuNDQ0NDpcdFx0LnJlbW92ZSA9IHl0OTIxeF9tZGlvX3JlbW92ZSxcbjQ0NDU6XHRcdC5zaHV0ZG93biA9IHl0OTIxeF9tZGlvX3NodXRkb3duLFxuNDQ0NjpcdFx0Lm1kaW9kcnYuZHJpdmVyID0ge1xuNDQ0NzpcdFx0XHQubmFtZSA9IFlUOTIxWF9OQU1FLFxuNDQ0ODpcdFx0XHQub2ZfbWF0Y2hfdGFibGUgPSB5dDkyMXhfb2ZfbWF0Y2gsXG40NDQ5Olx0XHR9LFxuNDQ1MDpcdH07XG40NDUxOlx0XG40NDUyOlx0bWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XG40NDUzOlx0XG40NDU0Olx0TU9EVUxFX0FVVEhPUihcJiMzNDtEYXZpZCBZYW5nIFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG40NDU1Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0RyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBTd2l0Y2hcJiMzNDspO1xuNDQ1NjpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDI1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoYWJpbGl0eSBBbmFseXNpczogQ2FuIGB5dDkyMXhfbWRpb19kcml2ZXJgIEJlIEZ1enplZD8qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgSSBjYW4gZnV6eiB0aGUgYHl0OTIxeF9tZGlvX2RyaXZlcmAuIEl0JiMzOTtzIGFuIE1ESU8gZGV2aWNlIGRyaXZlciwgYSBgbWRpb19kcml2ZXJgLCBhbmQgaXQmIzM5O3MgbWF0Y2hlZCB2aWEgRGV2aWNlIFRyZWUgd2l0aCB0aGUgYHl0OTIxeF9vZl9tYXRjaGAgZW50cnksIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIGNvbXBhdGlibGUgd2l0aCAmIzM0O21vdG9yY29tbSx5dDkyMTUuJiMzNDsgVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIEkgY2FuIGluc3RhbnRpYXRlIGFuZCBmdXp6IGFuIE1ESU8gc3dpdGNoIGRyaXZlciBsaWtlIHRoaXMgaW4gYSBzdGFuZGFyZCBRRU1VL0dDRSBzeXprYWxsZXIgZW52aXJvbm1lbnQuIENhbiBJIGRvIHRoaXMgd2l0aG91dCBwaHlzaWNhbGx5IGludGVyYWN0aW5nIHdpdGggdGhlIGhhcmR3YXJlPwoKSSBuZWVkIHRvIGFwcGx5IHRoZSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGNyaXRlcmlhIHRvIHJ1bGUgaXQgb3V0LiBUaGUgcnVsZSBzcGVjaWZpY2FsbHkgbWVudGlvbnMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBJdCBmbGFncyB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgQVNJQ3Mgb3IgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVmlydHVhbCBidXNlcywgbGlrZSB2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIGFuZCBzb2NrZXRzLCBhcmUgZXhjZXB0aW9ucy4KClRoZSBiaWcgcXVlc3Rpb24gbm93OiBjYW4gTURJTyBkZXZpY2VzIG9yIERTQSBzd2l0Y2hlcywgaW4gZ2VuZXJhbCwgYmUgaW5zdGFudGlhdGVkIHdpdGhvdXQgYW4gYWN0dWFsIHBoeXNpY2FsIE9GIGRldmljZSB0cmVlIG9yIGEgcGh5c2ljYWwgTURJTyBidXM/IE9yIGlzIHRoZXJlIGEgd2F5IHRvIGVtdWxhdGUgb3IgaW5zdGFudGlhdGUgdGhlbSBmcm9tIHVzZXJzcGFjZT8gUGVyaGFwcyBzb21ldGhpbmcgdXNpbmcgbmV0bGluaywgYSAmIzM0O2Zha2UgbWRpbywmIzM0OyBvciBzb21lIGtpbmQgb2YgbW9jayBpbXBsZW1lbnRhdGlvbj8gSSByZWFsbHkgbmVlZCB0byBjaGVjayBvdGhlciBEU0EgZHJpdmVycyB3aXRoaW4gdGhlIGtlcm5lbCBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgc29tZSBjbHVlcyBpbiB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucy4gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUmIzM5O3MgYW55IHByZWNlZGVudCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3RvcmNvbW0seXQ5MjE1JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbD0yNz1wcm9wZXJ0aWVzOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTI4LSAgY29tcGF0aWJsZTpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbDoyOTogICAgY29uc3Q6IG1vdG9yY29tbSx5dDkyMTVcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC0zMC1cbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw9NjI9ZXhhbXBsZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTcxLSAgICAgICAgc3dpdGNoQDFkIHtcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbDo3MjogICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0OTIxNVwmIzM0OztcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC03My0gICAgICAgICAgICAvKiBkZWZhdWx0IDB4MWQsIGFsdGVybmF0ZSAweDAgKi9cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NDM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDQzNzpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7IH0sXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDM4LVx0e31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwODMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNRElPIERldmljZSBDcmVhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBNRElPIGRldmljZXMgYXJlIGFjdHVhbGx5IGJyb3VnaHQgaW50byBleGlzdGVuY2Ugd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBzaWRlc3RlcCB0aGUgdHlwaWNhbCBoYXJkd2FyZS1jZW50cmljIGFwcHJvYWNoIOKAkyBkbyB3ZSBoYXZlIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBNRElPIGRldmljZXMgcHVyZWx5IHRocm91Z2ggc3lzZnMsIGlvY3RsIGNhbGxzLCBvciBuZXRsaW5rIG1lY2hhbmlzbXM/IENhbiBhIHVzZXIgc3BhY2UgYXBwbGljYXRpb24gaW5zdGFudGlhdGUgdGhlc2UgZGV2aWNlcywgbXVjaCBsaWtlIHdoYXQgd2Ugc2VlIHdpdGggSTJDICh1c2luZyB0aGUgYC9kZXYvbmV3X2RldmljZWAgYXBwcm9hY2gpPyBUaGUgZnVuZGFtZW50YWwgcXVlc3Rpb24gaXMgd2hldGhlciBNRElPIHN3aXRjaCBkcml2ZXJzIGFyZSAqcmVxdWlyZWQqLCBhbmQgd2hhdCByb2xlIHBoeXNpY2FsIG9yIE9GIGhhcmR3YXJlIHBsYXlzLCBvciBpZiB0aGVyZSYjMzk7cyBhIG1vcmUgc29mdHdhcmUtZGVmaW5lZCBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzcGVjdHJ1bSBvZiBpbnN0YW50aWF0aW9uIG1ldGhvZHMgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb19kZXZpY2VfY3JlYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQ0Nj1zdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Njc6XHRzd2l0Y2hfbWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIDMxKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ2OC1cdGlmIChJU19FUlIoc3dpdGNoX21kaW9kZXYpKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTUyPXN0YXRpYyBpbnQgb2ZfbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1paV9idXMgKm1kaW8sXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNTgtXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzo1OTpcdG1kaW9kZXYgPSBtZGlvX2RldmljZV9jcmVhdGUobWRpbywgYWRkcik7XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy02MC1cdGlmIChJU19FUlIobWRpb2RldikpXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1seW54LmM9MzEwPXN0cnVjdCBwaHlsaW5rX3BjcyAqbHlueF9wY3NfY3JlYXRlX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1seW54LmMtMzE0LVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1seW54LmM6MzE1Olx0bWRpbyA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIpO1xuZHJpdmVycy9uZXQvcGNzL3Bjcy1seW54LmMtMzE2LVx0aWYgKElTX0VSUihtZGlvKSlcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcGxhdC5jPTMzNz1zdGF0aWMgaW50IHhwY3NfcGxhdF9pbml0X2RldihzdHJ1Y3QgZHdfeHBjc19wbGF0ICpweHBjcylcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcGxhdC5jLTM0My1cdC8qIFRoZXJlIGlzIGEgc2luZ2xlIG1lbW9yeS1tYXBwZWQgRFcgWFBDUyBkZXZpY2UgKi9cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1wbGF0LmM6MzQ0Olx0bWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShweHBjcy1cdTAwM2VidXMsIDApO1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXBsYXQuYy0zNDUtXHRpZiAoSVNfRVJSKG1kaW9kZXYpKVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jPTE2MjE9c3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYyNS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2MjY6XHRtZGlvZGV2ID0gbWRpb19kZXZpY2VfY3JlYXRlKGJ1cywgYWRkcik7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjI3LVx0aWYgKElTX0VSUihtZGlvZGV2KSlcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xMDc0PXN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMDkyLVx0ICovXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDkzOlx0bWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShwaHlkZXYtXHUwMDNlbWRpby5idXMsXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMDk0LVx0XHRcdFx0ICAgICBwaHlkZXYtXHUwMDNlbWRpby5hZGRyICYjNDM7IEVOODgxMUhfUEJVU19BRERSX09GRlMpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTExMz1zdGF0aWMgdm9pZCBtZGlvX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xMTgtXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxMTk6c3RydWN0IG1kaW9fZGV2aWNlICptZGlvX2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xMjAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE0Mi19XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNDM6RVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9jcmVhdGUpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTQ0LVxuLS1cbmluY2x1ZGUvbGludXgvbWRpby5oPTk0PXZvaWQgbWRpb19kZXZpY2VfZnJlZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuaW5jbHVkZS9saW51eC9tZGlvLmg6OTU6c3RydWN0IG1kaW9fZGV2aWNlICptZGlvX2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xuaW5jbHVkZS9saW51eC9tZGlvLmgtOTYtaW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDM3CgkJCQkJCQlvdXRwdXQ6IDk5CgkJCQkJCQl0aG91Z2h0czogOTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE1vdG9yY29tbSBZVDkyMTUgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCwgd2hpY2ggc2VlbXMgdG8gZm9jdXMgb24gdGhlIE1vdG9yY29tbSBZVDkyMTUgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciwgaXMgZXZlbiAqZnV6emFibGUqIHdpdGhpbiB0aGUgY29uc3RyYWludHMgb2Ygb3VyIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBrZXkgaGVyZSBpcyByZWFjaGFiaWxpdHkuIFRoZSBgb2ZfbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2VgIGZ1bmN0aW9uIGNhbGwgc2VlbXMgdG8gYmUgdGhlIGVudHJ5IHBvaW50IHdoZW4gZGVhbGluZyB3aXRoIE9wZW5GaXJtd2FyZSBEZXZpY2UgVHJlZSBub2RlcywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZSBgeXQ5MjF4X21kaW9fZHJpdmVyYCBpcyB0cmlnZ2VyZWQgaW4gYW55IG90aGVyIHdheS4gUXVpY2tseSBjaGVja2luZywgdGhlIGRyaXZlciB1c2VzIGFuIGBvZl9tYXRjaF90YWJsZWAgKCBgeXQ5MjF4X29mX21hdGNoYCksIGJ1dCBubyBgaWRfdGFibGVgIG9yIGFueXRoaW5nIGVsc2UuCgpOb3csIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBNb3RvcmNvbW0gWVQ5MjE1IGlzIGEgKnBoeXNpY2FsKiBzd2l0Y2ggY2hpcCwgYW4gQVNJQyBjb250cm9sbGVkIHZpYSBNRElPLiBJdCYjMzk7cyB1c3VhbGx5IGZvdW5kIG9uIGVtYmVkZGVkIHN5c3RlbXMsIHNwZWNpZmljYWxseSBvbmVzIHVzaW5nIGRldmljZSB0cmVlcyB0byBkZXNjcmliZSB0aGUgaGFyZHdhcmUuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgUUVNVS9HQ0UsIG91ciBzdGFuZGFyZCBmdXp6aW5nIHBsYXRmb3JtcywgZW11bGF0ZSB0aGlzLiBJIGtub3cgdGhleSBkb24mIzM5O3Q7IGl0JiMzOTtzIGEgZGVkaWNhdGVkIHBpZWNlIG9mIGhhcmR3YXJlLgoKUmlnaHQsIHRpbWUgdG8gY29uc3VsdCB0aGUgcmVhY2hhYmlsaXR5IGd1aWRlbGluZXMuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBjcnVjaWFsLiBUaGUgZ3VpZGVsaW5lcyBjbGVhcmx5IHN0YXRlIHRoYXQgZnV6emluZyBjYW4gKm9ubHkqIGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0JiMzOTtzIGV4ZWN1dGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBDb2RlIHRoYXQmIzM5O3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHNob3VsZCAqbm90KiBiZSBmdXp6ZWQuIFRoZSAmIzM0O25lZ2F0aXZlIGNyaXRlcmlhJiMzNDsgc2VjdGlvbiBmdXJ0aGVyIGNsYXJpZmllcyB0aGlzIHdpdGggZXhhbXBsZXMuIFZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBsaWtlIHRoaXMsIHJlcXVpcmluZyBwaHlzaWNhbCBjYXJkcyBvciBBU0lDcywgYXJlIGV4cGxpY2l0bHkgZXhjbHVkZWQuIFRoZSBndWlkZWxpbmVzIHNwZWNpZmljYWxseSBjYWxsIG91dCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIGFuZCBQQ0llIHN3aXRjaGVzLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBJdCYjMzk7cyBtb2RpZnlpbmcgZmlsZXMgd2l0aGluIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2AsIHdoaWNoIGlzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IEV0aGVybmV0IHN3aXRjaCBkcml2ZXIuIFRoaXMgaXMgYSB2ZXJ5IHN0cm9uZyBpbmRpY2F0b3IuIFRoaXMgY29uZmlybXMgbXkgc3VzcGljaW9uIHRoYXQgaXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gZnVuY3Rpb24uIEl0IHRvdWNoZXMgdGhlIE1ha2VmaWxlLCBjaGlwLmMsIGNoaXAuaCwgbWliLmMsIG1pYi5oLCBzbWkuYyBhbmQgc21pLmguCgpTbyB0aGUgZHJpdmVyJiMzOTtzIGNvZGUgaXMgbm90IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudCwgSSBuZWVkIHRvIGNvbmZpcm0gSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLiBBIGNhcmVmdWwgZGlmZiBjb25maXJtcyB0aGlzOiB0aGUgY2hhbmdlcyBhZGQgYSBuZXcgTUlCIGhhbmRsaW5nLCBidXQgZXZlcnl0aGluZyBpcyBjb250YWluZWQgd2l0aGluIHRoYXQgc3BlY2lmaWMgZHJpdmVyIGRpcmVjdG9yeS4gSXQmIzM5O3MgbW92aW5nIE1JQiBoYW5kbGluZyB0byBtaWIuYy9oLCBhZGRpbmcgc29tZSBuZXcgYHl0OTIxeF9jb3VudGVyX3JlYWRgIGZ1bmN0aW9ucy4gQWxsIHdpdGhpbiB0aGUgaGFyZHdhcmUgc3dpdGNoLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgZHJpdmVyIHJlcXVpcmVzIGEgcGh5c2ljYWwgTURJTy1hdHRhY2hlZCBFdGhlcm5ldCBzd2l0Y2ggQVNJQywgd2hpY2ggaXMgbm90IGVtdWxhdGVkLCB0aGUgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgd2l0aGluIG91ciBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLiBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoICpzaG91bGQgbm90KiBiZSBmdXp6ZWQuCgpNeSBkZWNpc2lvbjoKCiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWAKKiAgIGBGb2N1c1N5bWJvbHM6IFtdYAoqICAgYEVuYWJsZUNvbmZpZ3M6IFtdYAoKVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiBUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvZGUgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyLCBhIGhhcmR3YXJlIGRyaXZlciBmb3IgYW4gZXh0ZXJuYWwgTURJTy1hdHRhY2hlZCBFdGhlcm5ldCBzd2l0Y2ggQVNJQy4gU3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMsIFFFTVUgYW5kIEdDRSwgZG8gbm90IGVtdWxhdGUgdGhpcyBoYXJkd2FyZSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4KCkxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vKSwgd2hpY2ggaW50ZXJhY3RzIHdpdGggYSBzcGVjaWZpYyBwaHlzaWNhbCBNRElPLWNvbm5lY3RlZCBzd2l0Y2ggQVNJQy4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgb25seSBtb2RpZmllcyB0aGUgTW90b3Jjb21tIFlUOTIxNSBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS8pLCB3aGljaCBpbnRlcmFjdHMgd2l0aCBhIHNwZWNpZmljIHBoeXNpY2FsIE1ESU8tY29ubmVjdGVkIHN3aXRjaCBBU0lDLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxNzo1Mi45OTQ2MDQ0ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzM3MzYwMjIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLyksIHdoaWNoIGludGVyYWN0cyB3aXRoIGEgc3BlY2lmaWMgcGh5c2ljYWwgTURJTy1jb25uZWN0ZWQgc3dpdGNoIEFTSUMuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTc6NTIuOTk0NjA5MjYzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzEzMzQyMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzIxN2EyNjI3NGU3NTkxNjI0Y2E3YTA4OTNkZDA2MDYzODlhMWZkMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjE3OjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxuaW5kZXggYWViMTJjYjkxZjkzNS4uNWMyZDM0ZWMwNWZjMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxcbkBAIC0yLDQgKzIsNSBAQFxcbiBvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXFxuIHl0OTIxeC1vYmpzIDo9IGNoaXAub1xcbiB5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgKz0gbGVkcy5vXFxuK3l0OTIxeC1vYmpzICs9IG1pYi5vXFxuIHl0OTIxeC1vYmpzICs9IHNtaS5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcXG5pbmRleCBkNjYzYWYwMTBmNDMxLi5iNDA1OTA1M2VmMTUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcXG5AQCAtMTksNiArMTksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbWRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbmV0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb3J0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91NjRfc3RhdHNfc3luYy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc2EuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc2NwLmhcXHUwMDNlXFxuQEAgLTI3LDc1ICsyOCw5IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiY2hpcC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibGVkcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwibWliLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4gXFxuLXN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xcbi1cXHR1bnNpZ25lZCBpbnQgc2l6ZTtcXG4tXFx0dW5zaWduZWQgaW50IG9mZnNldDtcXG4tXFx0Y29uc3QgY2hhciAqbmFtZTtcXG4tfTtcXG4tXFxuLSNkZWZpbmUgTUlCX0RFU0MoX3NpemUsIF9vZmZzZXQsIF9uYW1lKSBcXFxcXFxuLVxcdHtfc2l6ZSwgX29mZnNldCwgX25hbWV9XFxuLVxcbi0vKiBNdXN0IGFncmVlIHdpdGggeXQ5MjF4X21pYlxcbi0gKlxcbi0gKiBVbnN0cnVjdHVyZWQgZmllbGRzIChuYW1lICE9IE5VTEwpIHdpbGwgYXBwZWFyIGluIGdldF9ldGh0b29sX3N0YXRzKCksXFxuLSAqIHN0cnVjdHVyZWQgZ28gdG8gdGhlaXIgKl9zdGF0cygpIG1ldGhvZHMsIGJ1dCB3ZSBuZWVkIHRoZWlyIHNpemVzIGFuZCBvZmZzZXRzXFxuLSAqIHRvIHBlcmZvcm0gMzJiaXQgTUlCIG92ZXJmbG93IHdyYXBhcm91bmQuXFxuLSAqL1xcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyB5dDkyMXhfbWliX2Rlc2NzW10gPSB7XFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1QsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEFVU0UsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfTVVMVElDQVNULCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0NSQ19FUlIsIE5VTEwpLFxcbi1cXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0FMSUdOX0VSUiwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSLCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NCwgTlVMTCksXFxuLVxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyNywgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTI4X1RPXzI1NSwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMSwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxcbi1cXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMDI0X1RPXzE1MTgsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzE1MTlfVE9fTUFYLCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0dPT0RfQllURVMsIE5VTEwpLFxcbi1cXG4tXFx0TUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0JBRF9CWVRFUywgXFxcIlJ4QmFkQnl0ZXNcXFwiKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX09WRVJTSVpFX0VSUiwgTlVMTCksXFxuLVxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfRFJPUFBFRCwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9CUk9BRENBU1QsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEFVU0UsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElDQVNULCBOVUxMKSxcXG4tXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NCwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1LCBOVUxMKSxcXG4tXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMjU2X1RPXzUxMSwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTUxOV9UT19NQVgsIE5VTEwpLFxcbi1cXG4tXFx0TUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1RYX0dPT0RfQllURVMsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfQ09MTElTSU9OLCBOVUxMKSxcXG4tXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OLCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTiwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OLCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVCwgTlVMTCksXFxuLVxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRUQsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTEFURV9DT0xMSVNJT04sIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfT0FNLCBcXFwiUnhPQU1cXFwiKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX09BTSwgXFxcIlR4T0FNXFxcIiksXFxuLX07XFxuLVxcbiBzdHJ1Y3QgeXQ5MjF4X2luZm8ge1xcbiBcXHRjb25zdCBjaGFyICpuYW1lO1xcbiBcXHR1MTYgbWFqb3I7XFxuQEAgLTE1NCwxNCArODksNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xcbiBcXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVxcdDQwOTVcXG4gXFxuLS8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXFxuLSAqXFxuLSAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcXG4tICogdGhlcmUpLCB3ZSBoYXZlIHRvIHBvbGwgc3RhdHMgbW9yZSBmcmVxdWVudGx5IHRoZW4gaXQgaXMgYWN0dWFsbHkgbmVlZGVkLlxcbi0gKiBGb3Igb3ZlcmZsb3cgcHJvdGVjdGlvbiwgbm9ybWFsbHksIDEwMCBzZWMgaW50ZXJ2YWwgc2hvdWxkIGhhdmUgYmVlbiBPSy5cXG4tICovXFxuLSNkZWZpbmUgWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVNcXHQoMyAqIEhaKVxcbi1cXG4gc3RydWN0IHl0OTIxeF9yZWdfbWRpbyB7XFxuIFxcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuIFxcdGludCBhZGRyO1xcbkBAIC01NDQsMjk0ICs0NzEsNiBAQCB5dDkyMXhfbWJ1c19leHRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tLyogUmVhZCBhbmQgaGFuZGxlIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuIE1JQiBidWZmZXIgbXVzdCBiZSB6ZXJvZWQgYmVmb3JlLiAqL1xcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWFkX21pYihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxcbi17XFxuLVxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuLVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG4tXFx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFxcdTAwMjZwcC1cXHUwMDNlbWliO1xcbi1cXHRpbnQgcmVzID0gMDtcXG4tXFxuLVxcdC8qIFJlYWRpbmcgb2YgeXQ5MjF4X3BvcnQ6Om1pYiBpcyBub3QgcHJvdGVjdGVkIGJ5IGEgbG9jayBhbmQgaXQncyB2YWluXFxuLVxcdCAqIHRvIGtlZXAgaXRzIGNvbnNpc3RlbmN5LCBzaW5jZSB3ZSBoYXZlIHRvIHJlYWQgcmVnaXN0ZXJzIG9uZSBieSBvbmVcXG4tXFx0ICogYW5kIHRoZXJlIGlzIG5vIHdheSB0byBtYWtlIGEgc25hcHNob3Qgb2YgTUlCIHN0YXRzLlxcbi1cXHQgKlxcbi1cXHQgKiBXcml0aW5nIChieSB0aGlzIGZ1bmN0aW9uIG9ubHkpIGlzIGFuZCBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5XFxuLVxcdCAqIHJlZ19sb2NrLlxcbi1cXHQgKi9cXG4tXFxuLVxcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSsrKSB7XFxuLVxcdFxcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcXG4tXFx0XFx0dTMyIHJlZyA9IFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpICsgZGVzYy1cXHUwMDNlb2Zmc2V0O1xcbi1cXHRcXHR1NjQgKnZhbHAgPSBcXHUwMDI2KCh1NjQgKiltaWIpW2ldO1xcbi1cXHRcXHR1MzIgdmFsMDtcXG4tXFx0XFx0dTY0IHZhbDtcXG4tXFxuLVxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFxcdTAwMjZ2YWwwKTtcXG4tXFx0XFx0aWYgKHJlcylcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRcXHRpZiAoZGVzYy1cXHUwMDNlc2l6ZSBcXHUwMDNjPSAxKSB7XFxuLVxcdFxcdFxcdHU2NCBvbGRfdmFsID0gKnZhbHA7XFxuLVxcbi1cXHRcXHRcXHR2YWwgPSAob2xkX3ZhbCBcXHUwMDI2IH4odTY0KVUzMl9NQVgpIHwgdmFsMDtcXG4tXFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNjIG9sZF92YWwpXFxuLVxcdFxcdFxcdFxcdHZhbCArPSAxdWxsIFxcdTAwM2NcXHUwMDNjIDMyO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR1MzIgdmFsMTtcXG4tXFxuLVxcdFxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0LCBcXHUwMDI2dmFsMSk7XFxuLVxcdFxcdFxcdGlmIChyZXMpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR2YWwgPSAoKHU2NCl2YWwxIFxcdTAwM2NcXHUwMDNjIDMyKSB8IHZhbDA7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdFdSSVRFX09OQ0UoKnZhbHAsIHZhbCk7XFxuLVxcdH1cXG4tXFxuLVxcdHBwLVxcdTAwM2VyeF9mcmFtZXMgPSBtaWItXFx1MDAzZXJ4XzY0Ynl0ZSArIG1pYi1cXHUwMDNlcnhfNjVfMTI3Ynl0ZSArXFxuLVxcdFxcdFxcdG1pYi1cXHUwMDNlcnhfMTI4XzI1NWJ5dGUgKyBtaWItXFx1MDAzZXJ4XzI1Nl81MTFieXRlICtcXG4tXFx0XFx0XFx0bWliLVxcdTAwM2VyeF81MTJfMTAyM2J5dGUgKyBtaWItXFx1MDAzZXJ4XzEwMjRfMTUxOGJ5dGUgK1xcbi1cXHRcXHRcXHRtaWItXFx1MDAzZXJ4X2p1bWJvO1xcbi1cXHRwcC1cXHUwMDNldHhfZnJhbWVzID0gbWliLVxcdTAwM2V0eF82NGJ5dGUgKyBtaWItXFx1MDAzZXR4XzY1XzEyN2J5dGUgK1xcbi1cXHRcXHRcXHRtaWItXFx1MDAzZXR4XzEyOF8yNTVieXRlICsgbWliLVxcdTAwM2V0eF8yNTZfNTExYnl0ZSArXFxuLVxcdFxcdFxcdG1pYi1cXHUwMDNldHhfNTEyXzEwMjNieXRlICsgbWliLVxcdTAwM2V0eF8xMDI0XzE1MThieXRlICtcXG4tXFx0XFx0XFx0bWliLVxcdTAwM2V0eF9qdW1ibztcXG4tXFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvICVzIHBvcnQgJWQ6ICVpXFxcXG5cXFwiLCBcXFwicmVhZCBzdGF0cyBmb3JcXFwiLFxcbi1cXHRcXHRcXHRwb3J0LCByZXMpO1xcbi1cXHRyZXR1cm4gcmVzO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCB5dDkyMXhfcG9sbF9taWIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi17XFxuLVxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBjb250YWluZXJfb2ZfY29uc3Qod29yaywgc3RydWN0IHl0OTIxeF9wb3J0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbWliX3JlYWQud29yayk7XFxuLVxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9ICh2b2lkICopKHBwIC0gcHAtXFx1MDAzZWluZGV4KSAtXFxuLVxcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHMpO1xcbi1cXHR1bnNpZ25lZCBsb25nIGRlbGF5ID0gWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVM7XFxuLVxcdGludCBwb3J0ID0gcHAtXFx1MDAzZWluZGV4O1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi1cXHRyZXMgPSB5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRkZWxheSAqPSA0O1xcbi1cXG4tXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQsIGRlbGF5KTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWRcXG4teXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LFxcbi1cXHRcXHQgICAgICAgdWludDhfdCAqZGF0YSlcXG4te1xcbi1cXHRpZiAoc3RyaW5nc2V0ICE9IEVUSF9TU19TVEFUUylcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG4tXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbi1cXG4tXFx0XFx0aWYgKGRlc2MtXFx1MDAzZW5hbWUpXFxuLVxcdFxcdFxcdGV0aHRvb2xfcHV0cyhcXHUwMDI2ZGF0YSwgZGVzYy1cXHUwMDNlbmFtZSk7XFxuLVxcdH1cXG4tfVxcbi1cXG4tc3RhdGljIHZvaWRcXG4teXQ5MjF4X2RzYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1aW50NjRfdCAqZGF0YSlcXG4te1xcbi1cXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuLVxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuLVxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG4tXFx0c2l6ZV90IGo7XFxuLVxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuLVxcdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuLVxcbi1cXHRqID0gMDtcXG4tXFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG4tXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbi1cXG4tXFx0XFx0aWYgKCFkZXNjLVxcdTAwM2VuYW1lKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGRhdGFbal0gPSAoKHU2NCAqKW1pYilbaV07XFxuLVxcdFxcdGorKztcXG4tXFx0fVxcbi19XFxuLVxcbi1zdGF0aWMgaW50IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuLXtcXG4tXFx0aW50IGNudCA9IDA7XFxuLVxcbi1cXHRpZiAoc3NldCAhPSBFVEhfU1NfU1RBVFMpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG4tXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbi1cXG4tXFx0XFx0aWYgKGRlc2MtXFx1MDAzZW5hbWUpXFxuLVxcdFxcdFxcdGNudCsrO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gY250O1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZFxcbi15dDkyMXhfZHNhX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKVxcbi17XFxuLVxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG4tXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4tXFx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFxcdTAwMjZwcC1cXHUwMDNlbWliO1xcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi1cXHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi1cXG4tXFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LID0gcHAtXFx1MDAzZXR4X2ZyYW1lcztcXG4tXFx0bWFjX3N0YXRzLVxcdTAwM2VTaW5nbGVDb2xsaXNpb25GcmFtZXMgPSBtaWItXFx1MDAzZXR4X3NpbmdsZV9jb2xsaXNpb25zO1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZU11bHRpcGxlQ29sbGlzaW9uRnJhbWVzID0gbWliLVxcdTAwM2V0eF9tdWx0aXBsZV9jb2xsaXNpb25zO1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1JlY2VpdmVkT0sgPSBwcC1cXHUwMDNlcnhfZnJhbWVzO1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lQ2hlY2tTZXF1ZW5jZUVycm9ycyA9IG1pYi1cXHUwMDNlcnhfY3JjX2Vycm9ycztcXG4tXFx0bWFjX3N0YXRzLVxcdTAwM2VBbGlnbm1lbnRFcnJvcnMgPSBtaWItXFx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnM7XFxuLVxcdG1hY19zdGF0cy1cXHUwMDNlT2N0ZXRzVHJhbnNtaXR0ZWRPSyA9IG1pYi1cXHUwMDNldHhfZ29vZF9ieXRlcztcXG4tXFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNXaXRoRGVmZXJyZWRYbWlzc2lvbnMgPSBtaWItXFx1MDAzZXR4X2RlZmVycmVkO1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZUxhdGVDb2xsaXNpb25zID0gbWliLVxcdTAwM2V0eF9sYXRlX2NvbGxpc2lvbnM7XFxuLVxcdG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzQWJvcnRlZER1ZVRvWFNDb2xscyA9IG1pYi1cXHUwMDNldHhfYWJvcnRlZF9lcnJvcnM7XFxuLVxcdC8qIG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzTG9zdER1ZVRvSW50TUFDWG1pdEVycm9yICovXFxuLVxcdC8qIG1hY19zdGF0cy1cXHUwMDNlQ2FycmllclNlbnNlRXJyb3JzICovXFxuLVxcdG1hY19zdGF0cy1cXHUwMDNlT2N0ZXRzUmVjZWl2ZWRPSyA9IG1pYi1cXHUwMDNlcnhfZ29vZF9ieXRlcztcXG4tXFx0LyogbWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNMb3N0RHVlVG9JbnRNQUNSY3ZFcnJvciAqL1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyA9IG1pYi1cXHUwMDNldHhfbXVsdGljYXN0O1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyA9IG1pYi1cXHUwMDNldHhfYnJvYWRjYXN0O1xcbi1cXHQvKiBtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1dpdGhFeGNlc3NpdmVEZWZlcnJhbCAqL1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1JlY2VpdmVkT0sgPSBtaWItXFx1MDAzZXJ4X211bHRpY2FzdDtcXG4tXFx0bWFjX3N0YXRzLVxcdTAwM2VCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LID0gbWliLVxcdTAwM2VyeF9icm9hZGNhc3Q7XFxuLVxcdC8qIG1hY19zdGF0cy1cXHUwMDNlSW5SYW5nZUxlbmd0aEVycm9ycyAqL1xcbi1cXHQvKiBtYWNfc3RhdHMtXFx1MDAzZU91dE9mUmFuZ2VMZW5ndGhGaWVsZCAqL1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lVG9vTG9uZ0Vycm9ycyA9IG1pYi1cXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZFxcbi15dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcXG4te1xcbi1cXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuLVxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuLVxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG4tXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tXFx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tXFxuLVxcdGN0cmxfc3RhdHMtXFx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNUcmFuc21pdHRlZCA9IG1pYi1cXHUwMDNldHhfcGF1c2U7XFxuLVxcdGN0cmxfc3RhdHMtXFx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCA9IG1pYi1cXHUwMDNlcnhfcGF1c2U7XFxuLVxcdC8qIGN0cmxfc3RhdHMtXFx1MDAzZVVuc3VwcG9ydGVkT3Bjb2Rlc1JlY2VpdmVkICovXFxuLX1cXG4tXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgeXQ5MjF4X3Jtb25fcmFuZ2VzW10gPSB7XFxuLVxcdHsgMCwgNjQgfSxcXG4tXFx0eyA2NSwgMTI3IH0sXFxuLVxcdHsgMTI4LCAyNTUgfSxcXG4tXFx0eyAyNTYsIDUxMSB9LFxcbi1cXHR7IDUxMiwgMTAyMyB9LFxcbi1cXHR7IDEwMjQsIDE1MTggfSxcXG4tXFx0eyAxNTE5LCBZVDkyMVhfRlJBTUVfU0laRV9NQVggfSxcXG4tXFx0e31cXG4tfTtcXG4tXFxuLXN0YXRpYyB2b2lkXFxuLXl0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxcbi1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcXG4te1xcbi1cXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuLVxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuLVxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG4tXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tXFx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tXFxuLVxcdCpyYW5nZXMgPSB5dDkyMXhfcm1vbl9yYW5nZXM7XFxuLVxcbi1cXHRybW9uX3N0YXRzLVxcdTAwM2V1bmRlcnNpemVfcGt0cyA9IG1pYi1cXHUwMDNlcnhfdW5kZXJzaXplX2Vycm9ycztcXG4tXFx0cm1vbl9zdGF0cy1cXHUwMDNlb3ZlcnNpemVfcGt0cyA9IG1pYi1cXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzO1xcbi1cXHRybW9uX3N0YXRzLVxcdTAwM2VmcmFnbWVudHMgPSBtaWItXFx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnM7XFxuLVxcdC8qIHJtb25fc3RhdHMtXFx1MDAzZWphYmJlcnMgKi9cXG4tXFxuLVxcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbMF0gPSBtaWItXFx1MDAzZXJ4XzY0Ynl0ZTtcXG4tXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFsxXSA9IG1pYi1cXHUwMDNlcnhfNjVfMTI3Ynl0ZTtcXG4tXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFsyXSA9IG1pYi1cXHUwMDNlcnhfMTI4XzI1NWJ5dGU7XFxuLVxcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbM10gPSBtaWItXFx1MDAzZXJ4XzI1Nl81MTFieXRlO1xcbi1cXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzRdID0gbWliLVxcdTAwM2VyeF81MTJfMTAyM2J5dGU7XFxuLVxcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbNV0gPSBtaWItXFx1MDAzZXJ4XzEwMjRfMTUxOGJ5dGU7XFxuLVxcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbNl0gPSBtaWItXFx1MDAzZXJ4X2p1bWJvO1xcbi1cXG4tXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFswXSA9IG1pYi1cXHUwMDNldHhfNjRieXRlO1xcbi1cXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0X3R4WzFdID0gbWliLVxcdTAwM2V0eF82NV8xMjdieXRlO1xcbi1cXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0X3R4WzJdID0gbWliLVxcdTAwM2V0eF8xMjhfMjU1Ynl0ZTtcXG4tXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFszXSA9IG1pYi1cXHUwMDNldHhfMjU2XzUxMWJ5dGU7XFxuLVxcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbNF0gPSBtaWItXFx1MDAzZXR4XzUxMl8xMDIzYnl0ZTtcXG4tXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs1XSA9IG1pYi1cXHUwMDNldHhfMTAyNF8xNTE4Ynl0ZTtcXG4tXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs2XSA9IG1pYi1cXHUwMDNldHhfanVtYm87XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkXFxuLXl0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXFxuLXtcXG4tXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbi1cXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbi1cXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXFx1MDAyNnBwLVxcdTAwM2VtaWI7XFxuLVxcbi1cXHRzdGF0cy1cXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9IG1pYi1cXHUwMDNlcnhfdW5kZXJzaXplX2Vycm9ycyArXFxuLVxcdFxcdFxcdFxcdCAgbWliLVxcdTAwM2VyeF9mcmFnbWVudF9lcnJvcnM7XFxuLVxcdHN0YXRzLVxcdTAwM2VyeF9vdmVyX2Vycm9ycyA9IG1pYi1cXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzO1xcbi1cXHRzdGF0cy1cXHUwMDNlcnhfY3JjX2Vycm9ycyA9IG1pYi1cXHUwMDNlcnhfY3JjX2Vycm9ycztcXG4tXFx0c3RhdHMtXFx1MDAzZXJ4X2ZyYW1lX2Vycm9ycyA9IG1pYi1cXHUwMDNlcnhfYWxpZ25tZW50X2Vycm9ycztcXG4tXFx0Lyogc3RhdHMtXFx1MDAzZXJ4X2ZpZm9fZXJyb3JzICovXFxuLVxcdC8qIHN0YXRzLVxcdTAwM2VyeF9taXNzZWRfZXJyb3JzICovXFxuLVxcbi1cXHRzdGF0cy1cXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgPSBtaWItXFx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzO1xcbi1cXHQvKiBzdGF0cy1cXHUwMDNldHhfY2Fycmllcl9lcnJvcnMgKi9cXG4tXFx0c3RhdHMtXFx1MDAzZXR4X2ZpZm9fZXJyb3JzID0gbWliLVxcdTAwM2V0eF91bmRlcnNpemVfZXJyb3JzO1xcbi1cXHQvKiBzdGF0cy1cXHUwMDNldHhfaGVhcnRiZWF0X2Vycm9ycyAqL1xcbi1cXHRzdGF0cy1cXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IG1pYi1cXHUwMDNldHhfbGF0ZV9jb2xsaXNpb25zO1xcbi1cXG4tXFx0c3RhdHMtXFx1MDAzZXJ4X3BhY2tldHMgPSBwcC1cXHUwMDNlcnhfZnJhbWVzO1xcbi1cXHRzdGF0cy1cXHUwMDNldHhfcGFja2V0cyA9IHBwLVxcdTAwM2V0eF9mcmFtZXM7XFxuLVxcdHN0YXRzLVxcdTAwM2VyeF9ieXRlcyA9IG1pYi1cXHUwMDNlcnhfZ29vZF9ieXRlcyAtIEVUSF9GQ1NfTEVOICogc3RhdHMtXFx1MDAzZXJ4X3BhY2tldHM7XFxuLVxcdHN0YXRzLVxcdTAwM2V0eF9ieXRlcyA9IG1pYi1cXHUwMDNldHhfZ29vZF9ieXRlcyAtIEVUSF9GQ1NfTEVOICogc3RhdHMtXFx1MDAzZXR4X3BhY2tldHM7XFxuLVxcdHN0YXRzLVxcdTAwM2VyeF9lcnJvcnMgPSBzdGF0cy1cXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyArIHN0YXRzLVxcdTAwM2VyeF9vdmVyX2Vycm9ycyArXFxuLVxcdFxcdFxcdCAgIHN0YXRzLVxcdTAwM2VyeF9jcmNfZXJyb3JzICsgc3RhdHMtXFx1MDAzZXJ4X2ZyYW1lX2Vycm9ycztcXG4tXFx0c3RhdHMtXFx1MDAzZXR4X2Vycm9ycyA9IHN0YXRzLVxcdTAwM2V0eF9hYm9ydGVkX2Vycm9ycyArIHN0YXRzLVxcdTAwM2V0eF9maWZvX2Vycm9ycyArXFxuLVxcdFxcdFxcdCAgIHN0YXRzLVxcdTAwM2V0eF93aW5kb3dfZXJyb3JzO1xcbi1cXHRzdGF0cy1cXHUwMDNlcnhfZHJvcHBlZCA9IG1pYi1cXHUwMDNlcnhfZHJvcHBlZDtcXG4tXFx0Lyogc3RhdHMtXFx1MDAzZXR4X2Ryb3BwZWQgKi9cXG4tXFx0c3RhdHMtXFx1MDAzZW11bHRpY2FzdCA9IG1pYi1cXHUwMDNlcnhfbXVsdGljYXN0O1xcbi1cXHRzdGF0cy1cXHUwMDNlY29sbGlzaW9ucyA9IG1pYi1cXHUwMDNldHhfY29sbGlzaW9ucztcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWRcXG4teXQ5MjF4X2RzYV9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tXFx0XFx0XFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxcbi17XFxuLVxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG4tXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4tXFx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFxcdTAwMjZwcC1cXHUwMDNlbWliO1xcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi1cXHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi1cXG4tXFx0cGF1c2Vfc3RhdHMtXFx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9IG1pYi1cXHUwMDNldHhfcGF1c2U7XFxuLVxcdHBhdXNlX3N0YXRzLVxcdTAwM2VyeF9wYXVzZV9mcmFtZXMgPSBtaWItXFx1MDAzZXJ4X3BhdXNlO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50XFxuIHl0OTIxeF9zZXRfZWVlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmUpXFxuIHtcXG5AQCAtMzk1MywxMSArMzU5MiwxNCBAQCB5dDkyMXhfcGh5bGlua19tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4ge1xcbiBcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpO1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcC1cXHUwMDNlZHMpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG07XFxuIFxcdGludCBwb3J0ID0gZHAtXFx1MDAzZWluZGV4O1xcbiBcXHRpbnQgcmVzO1xcbiBcXG4gXFx0LyogTm8gbmVlZCB0byBzeW5jOyBwb3J0IGNvbnRyb2wgYmxvY2sgaXMgaG9sZCB1bnRpbCBkZXZpY2UgcmVtb3ZlICovXFxuLVxcdGNhbmNlbF9kZWxheWVkX3dvcmsoXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdLm1pYl9yZWFkKTtcXG4rXFx0cG0gPSBwcml2LVxcdTAwM2Vwb3J0c1twb3J0XS5taWI7XFxuK1xcdGlmIChwbSlcXG4rXFx0XFx0Y2FuY2VsX2RlbGF5ZWRfd29yayhcXHUwMDI2cG0tXFx1MDAzZXdvcmspO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbiBcXHRyZXMgPSB5dDkyMXhfcG9ydF9kb3duKHByaXYsIHBvcnQpO1xcbkBAIC0zOTc2LDYgKzM2MTgsNyBAQCB5dDkyMXhfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4ge1xcbiBcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpO1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcC1cXHUwMDNlZHMpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG07XFxuIFxcdGludCBwb3J0ID0gZHAtXFx1MDAzZWluZGV4O1xcbiBcXHRpbnQgcmVzO1xcbiBcXG5AQCAtMzk4OCw3ICszNjMxLDkgQEAgeXQ5MjF4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuIFxcdFxcdGRldl9lcnIoZHAtXFx1MDAzZWRzLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcXFxcblxcXCIsIFxcXCJicmluZyB1cFxcXCIsXFxuIFxcdFxcdFxcdHBvcnQsIHJlcyk7XFxuIFxcbi1cXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdLm1pYl9yZWFkLCAwKTtcXG4rXFx0cG0gPSBwcml2LVxcdTAwM2Vwb3J0c1twb3J0XS5taWI7XFxuK1xcdGlmIChwbSlcXG4rXFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZwbS1cXHUwMDNld29yaywgMCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkXFxuQEAgLTQxMDgsMTEgKzM3NTMsMzYgQEAgeXQ5MjF4X2RzYV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdHJldHVybiBEU0FfVEFHX1BST1RPX1lUOTIxWDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgeXQ5MjF4X2RzYV9wb3J0X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cXHUwMDNlbWliO1xcbitcXG4rXFx0aWYgKHBtKVxcbitcXHRcXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZwbS1cXHUwMDNld29yayk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9wb3J0X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuIHtcXG4gXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVxcdTAwM2VtaWI7XFxuIFxcdGludCByZXM7XFxuIFxcbitcXHRpZiAoIXBtIFxcdTAwMjZcXHUwMDI2ICEoQklUKHBvcnQpIFxcdTAwMjYgKHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWludGVybmFsX21hc2sgfFxcbitcXHRcXHQgICAgIHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWV4dGVybmFsX21hc2spKSkge1xcbitcXHRcXHRwbSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcG0pLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFwbSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdHBwLVxcdTAwM2VtaWIgPSBwbTtcXG4rXFxuK1xcdFxcdHBtLVxcdTAwM2Vwb3J0ID0gcHA7XFxuK1xcdFxcdHU2NF9zdGF0c19pbml0KFxcdTAwMjZwbS1cXHUwMDNlc3luY3ApO1xcbitcXHRcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cG0tXFx1MDAzZXdvcmssIHl0OTIxeF9taWJfcG9sbCk7XFxuK1xcdH1cXG4rXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4gXFx0cmVzID0geXQ5MjF4X3BvcnRfc2V0dXAocHJpdiwgcG9ydCk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbkBAIC00NjY3LDYgKzQzMzcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcXG4gXFx0LyogcG9ydCAqL1xcbiBcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0geXQ5MjF4X2RzYV9nZXRfdGFnX3Byb3RvY29sLFxcbiBcXHQucGh5bGlua19nZXRfY2Fwc1xcdD0geXQ5MjF4X2RzYV9waHlsaW5rX2dldF9jYXBzLFxcbitcXHQucG9ydF90ZWFyZG93blxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X3RlYXJkb3duLFxcbiBcXHQucG9ydF9zZXR1cFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X3NldHVwLFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRENCKVxcbiBcXHQvKiBkc2NwICovXFxuQEAgLTQ2OTYsMTIgKzQzNjcsNiBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbiBcXHRpZiAoIXByaXYpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXBvcnRzKTsgaS0tIFxcdTAwM2UgMDsgKSB7XFxuLVxcdFxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbaV07XFxuLVxcbi1cXHRcXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQpO1xcbi1cXHR9XFxuLVxcbiBcXHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goXFx1MDAyNnByaXYtXFx1MDAzZWRzKTtcXG4gXFxuIFxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwcml2LVxcdTAwM2VhY2xfYmxrcyk7IGkrKykge1xcbkBAIC00NzQ5LDcgKzQ0MTQsNiBAQCBzdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4gXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG4gXFxuIFxcdFxcdHBwLVxcdTAwM2VpbmRleCA9IGk7XFxuLVxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQsIHl0OTIxeF9wb2xsX21pYik7XFxuIFxcdH1cXG4gXFxuIFxcdGRzID0gXFx1MDAyNnByaXYtXFx1MDAzZWRzO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuaW5kZXggODNjZDQ1NDk1NWRkYi4uY2UyMDE1MDI2ODQ5YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuQEAgLTE2Nyw2OSArMTY3LDYgQEBcXG4gI2RlZmluZSBZVDkyMVhfRUVFX0NUUkxcXHRcXHRcXHQweGIwMDAwXFxuICNkZWZpbmUgIFlUOTIxWF9FRUVfQ1RSTF9FTm4ocG9ydClcXHRcXHRCSVQocG9ydClcXG4gXFxuLSNkZWZpbmUgWVQ5MjFYX01JQl9DVFJMXFx0XFx0XFx0MHhjMDAwNFxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfQ0xFQU5cXHRcXHRcXHRCSVQoMzApXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9QT1JUX01cXHRcXHRcXHRHRU5NQVNLKDYsIDMpXFxuLSNkZWZpbmUgICBZVDkyMVhfTUlCX0NUUkxfUE9SVCh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX01JQl9DVFJMX1BPUlRfTSwgKHgpKVxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfT05FX1BPUlRcXHRcXHRCSVQoMSlcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX0FMTF9QT1JUXFx0XFx0QklUKDApXFxuLSNkZWZpbmUgWVQ5MjFYX01JQm5fREFUQTAocG9ydClcXHRcXHQoMHhjMDEwMCArIDB4MTAwICogKHBvcnQpKVxcbi0jZGVmaW5lIFlUOTIxWF9NSUJuX0RBVEFtKHBvcnQsIHgpXFx0KFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpICsgNCAqICh4KSlcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0JST0FEQ0FTVFxcdFxcdDB4MDBcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFXFx0XFx0MHgwNFxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfTVVMVElDQVNUXFx0XFx0MHgwOFxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQ1JDX0VSUlxcdFxcdDB4MGNcXG4tXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9BTElHTl9FUlJcXHRcXHQweDEwXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSXFx0MHgxNFxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfRlJBR19FUlJcXHRcXHQweDE4XFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNjRcXHRcXHQweDFjXFxuLVxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyN1xcdDB4MjBcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMjhfVE9fMjU1XFx0MHgyNFxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzI1Nl9UT181MTFcXHQweDI4XFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjNcXHQweDJjXFxuLVxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOFxcdDB4MzBcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWFxcdDB4MzRcXG4tLyogMHgzODogdW51c2VkICovXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9HT09EX0JZVEVTXFx0XFx0MHgzY1xcbi1cXG4tLyogMHg0MDogNjQgYnl0ZXMgKi9cXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0JBRF9CWVRFU1xcdFxcdDB4NDRcXG4tLyogMHg0ODogNjQgYnl0ZXMgKi9cXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX09WRVJTSVpFX0VSUlxcdDB4NGNcXG4tXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9EUk9QUEVEXFx0XFx0MHg1MFxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfQlJPQURDQVNUXFx0XFx0MHg1NFxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEFVU0VcXHRcXHQweDU4XFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSUNBU1RcXHRcXHQweDVjXFxuLVxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUlxcdDB4NjBcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NFxcdFxcdDB4NjRcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NV9UT18xMjdcXHQweDY4XFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTI4X1RPXzI1NVxcdDB4NmNcXG4tXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMjU2X1RPXzUxMVxcdDB4NzBcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyM1xcdDB4NzRcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMDI0X1RPXzE1MThcXHQweDc4XFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTUxOV9UT19NQVhcXHQweDdjXFxuLVxcbi0vKiAweDgwOiB1bnVzZWQgKi9cXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0dPT0RfQllURVNcXHRcXHQweDg0XFxuLS8qIDB4ODg6IDY0IGJ5dGVzICovXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9DT0xMSVNJT05cXHRcXHQweDhjXFxuLVxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfRVhDRVNTSVZFX0NPTExJU0lPTlxcdDB4OTBcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTlxcdDB4OTRcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1NJTkdMRV9DT0xMSVNJT05cXHQweDk4XFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RcXHRcXHRcXHQweDljXFxuLVxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRURcXHRcXHQweGEwXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9MQVRFX0NPTExJU0lPTlxcdDB4YTRcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX09BTVxcdFxcdFxcdDB4YThcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX09BTVxcdFxcdFxcdDB4YWNcXG4tXFxuICNkZWZpbmUgWVQ5MjFYX0VEQVRBX0NUUkxcXHRcXHQweGUwMDAwXFxuICNkZWZpbmUgIFlUOTIxWF9FREFUQV9DVFJMX0FERFJfTVxcdFxcdEdFTk1BU0soMTUsIDgpXFxuICNkZWZpbmUgICBZVDkyMVhfRURBVEFfQ1RSTF9BRERSKHgpXFx0XFx0XFx0RklFTERfUFJFUChZVDkyMVhfRURBVEFfQ1RSTF9BRERSX00sICh4KSlcXG5AQCAtODYxLDU4ICs3OTgsNiBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFxcdTAwM2MgOClcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoKHBvcnQpID09IDggfHwgKHBvcnQpID09IDkpXFxuIFxcbi1zdHJ1Y3QgeXQ5MjF4X21pYiB7XFxuLVxcdHU2NCByeF9icm9hZGNhc3Q7XFxuLVxcdHU2NCByeF9wYXVzZTtcXG4tXFx0dTY0IHJ4X211bHRpY2FzdDtcXG4tXFx0dTY0IHJ4X2NyY19lcnJvcnM7XFxuLVxcbi1cXHR1NjQgcnhfYWxpZ25tZW50X2Vycm9ycztcXG4tXFx0dTY0IHJ4X3VuZGVyc2l6ZV9lcnJvcnM7XFxuLVxcdHU2NCByeF9mcmFnbWVudF9lcnJvcnM7XFxuLVxcdHU2NCByeF82NGJ5dGU7XFxuLVxcbi1cXHR1NjQgcnhfNjVfMTI3Ynl0ZTtcXG4tXFx0dTY0IHJ4XzEyOF8yNTVieXRlO1xcbi1cXHR1NjQgcnhfMjU2XzUxMWJ5dGU7XFxuLVxcdHU2NCByeF81MTJfMTAyM2J5dGU7XFxuLVxcbi1cXHR1NjQgcnhfMTAyNF8xNTE4Ynl0ZTtcXG4tXFx0dTY0IHJ4X2p1bWJvO1xcbi1cXHR1NjQgcnhfZ29vZF9ieXRlcztcXG4tXFxuLVxcdHU2NCByeF9iYWRfYnl0ZXM7XFxuLVxcdHU2NCByeF9vdmVyc2l6ZV9lcnJvcnM7XFxuLVxcbi1cXHR1NjQgcnhfZHJvcHBlZDtcXG4tXFx0dTY0IHR4X2Jyb2FkY2FzdDtcXG4tXFx0dTY0IHR4X3BhdXNlO1xcbi1cXHR1NjQgdHhfbXVsdGljYXN0O1xcbi1cXG4tXFx0dTY0IHR4X3VuZGVyc2l6ZV9lcnJvcnM7XFxuLVxcdHU2NCB0eF82NGJ5dGU7XFxuLVxcdHU2NCB0eF82NV8xMjdieXRlO1xcbi1cXHR1NjQgdHhfMTI4XzI1NWJ5dGU7XFxuLVxcbi1cXHR1NjQgdHhfMjU2XzUxMWJ5dGU7XFxuLVxcdHU2NCB0eF81MTJfMTAyM2J5dGU7XFxuLVxcdHU2NCB0eF8xMDI0XzE1MThieXRlO1xcbi1cXHR1NjQgdHhfanVtYm87XFxuLVxcbi1cXHR1NjQgdHhfZ29vZF9ieXRlcztcXG4tXFx0dTY0IHR4X2NvbGxpc2lvbnM7XFxuLVxcbi1cXHR1NjQgdHhfYWJvcnRlZF9lcnJvcnM7XFxuLVxcdHU2NCB0eF9tdWx0aXBsZV9jb2xsaXNpb25zO1xcbi1cXHR1NjQgdHhfc2luZ2xlX2NvbGxpc2lvbnM7XFxuLVxcdHU2NCB0eF9nb29kO1xcbi1cXG4tXFx0dTY0IHR4X2RlZmVycmVkO1xcbi1cXHR1NjQgdHhfbGF0ZV9jb2xsaXNpb25zO1xcbi1cXHR1NjQgcnhfb2FtO1xcbi1cXHR1NjQgdHhfb2FtO1xcbi19O1xcbi1cXG4gc3RydWN0IHl0OTIxeF9hY2xfZW50cnkge1xcbiBcXHR1MzIga2V5WzJdO1xcbiBcXHR1MzIgbWFza1syXTtcXG5AQCAtOTM2LDEzICs4MjEsOCBAQCBzdHJ1Y3QgeXQ5MjF4X2FjbF9ibGsge1xcbiBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xcbiBcXHR1bnNpZ25lZCBjaGFyIGluZGV4O1xcbiBcXG4tXFx0Ym9vbCBoYWlycGluO1xcbi1cXHRib29sIGlzb2xhdGVkO1xcbi1cXG4tXFx0c3RydWN0IGRlbGF5ZWRfd29yayBtaWJfcmVhZDtcXG4tXFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xcbi1cXHR1NjQgcnhfZnJhbWVzO1xcbi1cXHR1NjQgdHhfZnJhbWVzO1xcbitcXHRib29sIGhhaXJwaW46MTtcXG4rXFx0Ym9vbCBpc29sYXRlZDoxO1xcbiBcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuIFxcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XFxuQEAgLTk1Myw2ICs4MzMsOCBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xcbiBcXG4gXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xcbiAjZW5kaWZcXG4rXFxuK1xcdHN0cnVjdCB5dDkyMXhfbWliICptaWI7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzA0NzhjZTcxYzEwNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5jXFxuQEAgLTAsMCArMSw0MzAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXFwiY2hpcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibWliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuK3N0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xcbitcXHR1bnNpZ25lZCBjaGFyIHNpemU7XFxuK1xcdHVuc2lnbmVkIGNoYXIgb2Zmc2V0O1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbit9O1xcbitcXG4rI2RlZmluZSBNSUJfREVTQyhfc2l6ZSwgX29mZnNldCwgX25hbWUpIHtfc2l6ZSwgX29mZnNldCwgX25hbWV9XFxuK1xcbisvKiBNdXN0IGFncmVlIHdpdGggeXQ5MjF4X21pYlxcbisgKlxcbisgKiBVbnN0cnVjdHVyZWQgZmllbGRzIChuYW1lICE9IE5VTEwpIHdpbGwgYXBwZWFyIGluIGdldF9ldGh0b29sX3N0YXRzKCksXFxuKyAqIHN0cnVjdHVyZWQgZ28gdG8gdGhlaXIgKl9zdGF0cygpIG1ldGhvZHMsIGJ1dCB3ZSBuZWVkIHRoZWlyIHNpemVzIGFuZCBvZmZzZXRzXFxuKyAqIHRvIHBlcmZvcm0gMzJiaXQgTUlCIG92ZXJmbG93IHdyYXBhcm91bmQuXFxuKyAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyB5dDkyMXhfbWliX2Rlc2NzW10gPSB7XFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1QsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEFVU0UsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfTVVMVElDQVNULCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0NSQ19FUlIsIE5VTEwpLFxcbitcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0FMSUdOX0VSUiwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSLCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NCwgTlVMTCksXFxuK1xcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyNywgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTI4X1RPXzI1NSwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMSwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxcbitcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMDI0X1RPXzE1MTgsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzE1MTlfVE9fTUFYLCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0dPT0RfQllURVMsIE5VTEwpLFxcbitcXG4rXFx0TUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0JBRF9CWVRFUywgXFxcIlJ4QmFkQnl0ZXNcXFwiKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX09WRVJTSVpFX0VSUiwgTlVMTCksXFxuK1xcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfRFJPUFBFRCwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9CUk9BRENBU1QsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEFVU0UsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElDQVNULCBOVUxMKSxcXG4rXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NCwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1LCBOVUxMKSxcXG4rXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMjU2X1RPXzUxMSwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTUxOV9UT19NQVgsIE5VTEwpLFxcbitcXG4rXFx0TUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1RYX0dPT0RfQllURVMsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfQ09MTElTSU9OLCBOVUxMKSxcXG4rXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OLCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTiwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OLCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVCwgTlVMTCksXFxuK1xcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRUQsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTEFURV9DT0xMSVNJT04sIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfT0FNLCBcXFwiUnhPQU1cXFwiKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX09BTSwgXFxcIlR4T0FNXFxcIiksXFxuK307XFxuK1xcbisvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxcbisgKlxcbisgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXFxuKyAqIHRoZXJlKSwgd2UgaGF2ZSB0byBwb2xsIHN0YXRzIG1vcmUgZnJlcXVlbnRseSB0aGVuIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC5cXG4rICogRm9yIG92ZXJmbG93IHByb3RlY3Rpb24sIG5vcm1hbGx5LCAxMDAgc2VjIGludGVydmFsIHNob3VsZCBoYXZlIGJlZW4gT0suXFxuKyAqL1xcbisjZGVmaW5lIFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTXFx0KDMgKiBIWilcXG4rXFxuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYoX2RzKSBjb250YWluZXJfb2ZfY29uc3QoX2RzLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIGRzKVxcbisjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVxcdTAwM2Vkcy5kZXYpXFxuK1xcbisvKiBSZWFkIGFuZCBoYW5kbGUgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy4gTUlCIGJ1ZmZlciBtdXN0IGJlIHplcm9lZCBiZWZvcmUuICovXFxuK3N0YXRpYyBpbnQgeXQ5MjF4X21pYl9yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cXHUwMDNlbWliO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliO1xcbitcXHR1NjQgKmJ1ZiA9IHBtLVxcdTAwM2VkYXRhO1xcbitcXHR1NjQgcnhfZnJhbWVzO1xcbitcXHR1NjQgdHhfZnJhbWVzO1xcbitcXHRpbnQgcmVzID0gMDtcXG4rXFxuK1xcdG1pYiA9IFxcdTAwMjZwbS1cXHUwMDNlc3RhdHM7XFxuK1xcbitcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XFxuK1xcdFxcdHUzMiByZWcgPSBZVDkyMVhfTUlCbl9EQVRBMChwb3J0KSArIGRlc2MtXFx1MDAzZW9mZnNldDtcXG4rXFxuK1xcdFxcdGlmIChkZXNjLVxcdTAwM2VzaXplIFxcdTAwM2M9IDEpIHtcXG4rXFx0XFx0XFx0dTY0IG9sZF92YWwgPSBidWZbaV07XFxuK1xcdFxcdFxcdHUzMiB2YWwwO1xcbitcXHRcXHRcXHR1NjQgdmFsO1xcbitcXG4rXFx0XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXFx1MDAyNnZhbDApO1xcbitcXHRcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdFxcdHZhbCA9IChvbGRfdmFsIFxcdTAwMjYgfih1NjQpVTMyX01BWCkgfCB2YWwwO1xcbitcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2Mgb2xkX3ZhbClcXG4rXFx0XFx0XFx0XFx0dmFsICs9IDF1bGwgXFx1MDAzY1xcdTAwM2MgMzI7XFxuK1xcbitcXHRcXHRcXHRidWZbaV0gPSB2YWw7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJlcyA9IHl0OTIxeF9jb3VudGVyX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2YnVmW2ldKTtcXG4rXFx0XFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cG0tXFx1MDAzZXN5bmNwKTtcXG4rXFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspXFxuK1xcdFxcdHU2NF9zdGF0c19zZXQoXFx1MDAyNigodTY0X3N0YXRzX3QgKiltaWIpW2ldLCBidWZbaV0pO1xcbitcXHRyeF9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF82NGJ5dGUpICtcXG4rXFx0XFx0ICAgIHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4XzY1XzEyN2J5dGUpICtcXG4rXFx0XFx0ICAgIHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4XzEyOF8yNTVieXRlKSArXFxuK1xcdFxcdCAgICB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF8yNTZfNTExYnl0ZSkgK1xcbitcXHRcXHQgICAgdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfNTEyXzEwMjNieXRlKSArXFxuK1xcdFxcdCAgICB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF8xMDI0XzE1MThieXRlKSArXFxuK1xcdFxcdCAgICB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF9qdW1ibyk7XFxuK1xcdHR4X2ZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4XzY0Ynl0ZSkgK1xcbitcXHRcXHQgICAgdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNldHhfNjVfMTI3Ynl0ZSkgK1xcbitcXHRcXHQgICAgdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNldHhfMTI4XzI1NWJ5dGUpICtcXG4rXFx0XFx0ICAgIHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4XzI1Nl81MTFieXRlKSArXFxuK1xcdFxcdCAgICB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2V0eF81MTJfMTAyM2J5dGUpICtcXG4rXFx0XFx0ICAgIHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4XzEwMjRfMTUxOGJ5dGUpICtcXG4rXFx0XFx0ICAgIHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2p1bWJvKTtcXG4rXFx0dTY0X3N0YXRzX3NldChcXHUwMDI2cG0tXFx1MDAzZXJ4X2ZyYW1lcywgcnhfZnJhbWVzKTtcXG4rXFx0dTY0X3N0YXRzX3NldChcXHUwMDI2cG0tXFx1MDAzZXR4X2ZyYW1lcywgdHhfZnJhbWVzKTtcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnBtLVxcdTAwM2VzeW5jcCk7XFxuK1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxcXFxuXFxcIiwgXFxcInJlYWQgc3RhdHMgZm9yXFxcIixcXG4rXFx0XFx0XFx0cG9ydCwgcmVzKTtcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rdm9pZCB5dDkyMXhfbWliX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IGNvbnRhaW5lcl9vZl9jb25zdCh3b3JrLCBzdHJ1Y3QgeXQ5MjF4X21pYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgd29yay53b3JrKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHBtLVxcdTAwM2Vwb3J0O1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2ZfY29uc3QocHAsIHN0cnVjdCB5dDkyMXhfcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcG9ydHNbcHAtXFx1MDAzZWluZGV4XSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZGVsYXkgPSBZVDkyMVhfU1RBVFNfSU5URVJWQUxfSklGRklFUztcXG4rXFx0aW50IHBvcnQgPSBwcC1cXHUwMDNlaW5kZXg7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGRlbGF5ICo9IDQ7XFxuK1xcbitcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNnBtLVxcdTAwM2V3b3JrLCBkZWxheSk7XFxuK31cXG4rXFxuK3ZvaWRcXG4reXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LFxcbitcXHRcXHQgICAgICAgdWludDhfdCAqZGF0YSlcXG4re1xcbitcXHRpZiAoc3RyaW5nc2V0ICE9IEVUSF9TU19TVEFUUylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbitcXG4rXFx0XFx0aWYgKGRlc2MtXFx1MDAzZW5hbWUpXFxuK1xcdFxcdFxcdGV0aHRvb2xfcHV0cyhcXHUwMDI2ZGF0YSwgZGVzYy1cXHUwMDNlbmFtZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rdm9pZFxcbit5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXFx1MDAzZW1pYjtcXG4rXFx0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcXG4rXFx0dTY0ICpidWY7XFxuK1xcdHNpemVfdCBqO1xcbitcXG4rXFx0aWYgKCFwbSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRtaWIgPSBcXHUwMDI2cG0tXFx1MDAzZXN0YXRzO1xcbitcXHRidWYgPSBwbS1cXHUwMDNlZGF0YTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTtcXG4rXFxuK1xcdGogPSAwO1xcbitcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XFxuK1xcbitcXHRcXHRpZiAoIWRlc2MtXFx1MDAzZW5hbWUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZGF0YVtqXSA9IGJ1ZltpXTtcXG4rXFx0XFx0aisrO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuK3tcXG4rXFx0aW50IGNudCA9IDA7XFxuK1xcbitcXHRpZiAoc3NldCAhPSBFVEhfU1NfU1RBVFMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbitcXG4rXFx0XFx0aWYgKGRlc2MtXFx1MDAzZW5hbWUpXFxuK1xcdFxcdFxcdGNudCsrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gY250O1xcbit9XFxuK1xcbit2b2lkXFxuK3l0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cXHUwMDNlbWliO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliO1xcbitcXG4rXFx0aWYgKCFwbSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRtaWIgPSBcXHUwMDI2cG0tXFx1MDAzZXN0YXRzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0eXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpO1xcbitcXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNnBtLVxcdTAwM2V0eF9mcmFtZXMpO1xcbitcXHRtYWNfc3RhdHMtXFx1MDAzZVNpbmdsZUNvbGxpc2lvbkZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X3NpbmdsZV9jb2xsaXNpb25zKTtcXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X211bHRpcGxlX2NvbGxpc2lvbnMpO1xcbitcXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1JlY2VpdmVkT0sgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2cG0tXFx1MDAzZXJ4X2ZyYW1lcyk7XFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlRnJhbWVDaGVja1NlcXVlbmNlRXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfY3JjX2Vycm9ycyk7XFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlQWxpZ25tZW50RXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfYWxpZ25tZW50X2Vycm9ycyk7XFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlT2N0ZXRzVHJhbnNtaXR0ZWRPSyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2dvb2RfYnl0ZXMpO1xcbitcXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1dpdGhEZWZlcnJlZFhtaXNzaW9ucyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2RlZmVycmVkKTtcXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VMYXRlQ29sbGlzaW9ucyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2xhdGVfY29sbGlzaW9ucyk7XFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzQWJvcnRlZER1ZVRvWFNDb2xscyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzKTtcXG4rXFx0LyogbWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNMb3N0RHVlVG9JbnRNQUNYbWl0RXJyb3IgKi9cXG4rXFx0LyogbWFjX3N0YXRzLVxcdTAwM2VDYXJyaWVyU2Vuc2VFcnJvcnMgKi9cXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VPY3RldHNSZWNlaXZlZE9LID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfZ29vZF9ieXRlcyk7XFxuK1xcdC8qIG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzTG9zdER1ZVRvSW50TUFDUmN2RXJyb3IgKi9cXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2V0eF9tdWx0aWNhc3QpO1xcbitcXHRtYWNfc3RhdHMtXFx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2Jyb2FkY2FzdCk7XFxuK1xcdC8qIG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzV2l0aEV4Y2Vzc2l2ZURlZmVycmFsICovXFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X211bHRpY2FzdCk7XFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlQnJvYWRjYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X2Jyb2FkY2FzdCk7XFxuK1xcdC8qIG1hY19zdGF0cy1cXHUwMDNlSW5SYW5nZUxlbmd0aEVycm9ycyAqL1xcbitcXHQvKiBtYWNfc3RhdHMtXFx1MDAzZU91dE9mUmFuZ2VMZW5ndGhGaWVsZCAqL1xcbitcXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lVG9vTG9uZ0Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X292ZXJzaXplX2Vycm9ycyk7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rfVxcbitcXG4rdm9pZFxcbit5dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVxcdTAwM2VtaWI7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7XFxuK1xcbitcXHRpZiAoIXBtKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdG1pYiA9IFxcdTAwMjZwbS1cXHUwMDNlc3RhdHM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHR5dDkyMXhfbWliX3JlYWQocHJpdiwgcG9ydCk7XFxuK1xcbitcXHRjdHJsX3N0YXRzLVxcdTAwM2VNQUNDb250cm9sRnJhbWVzVHJhbnNtaXR0ZWQgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2V0eF9wYXVzZSk7XFxuK1xcdGN0cmxfc3RhdHMtXFx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X3BhdXNlKTtcXG4rXFx0LyogY3RybF9zdGF0cy1cXHUwMDNlVW5zdXBwb3J0ZWRPcGNvZGVzUmVjZWl2ZWQgKi9cXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIHl0OTIxeF9ybW9uX3Jhbmdlc1tdID0ge1xcbitcXHR7IDAsIDY0IH0sXFxuK1xcdHsgNjUsIDEyNyB9LFxcbitcXHR7IDEyOCwgMjU1IH0sXFxuK1xcdHsgMjU2LCA1MTEgfSxcXG4rXFx0eyA1MTIsIDEwMjMgfSxcXG4rXFx0eyAxMDI0LCAxNTE4IH0sXFxuK1xcdHsgMTUxOSwgWVQ5MjFYX0ZSQU1FX1NJWkVfTUFYIH0sXFxuK1xcdHt9XFxuK307XFxuK1xcbit2b2lkXFxuK3l0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxcbitcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVxcdTAwM2VtaWI7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7XFxuK1xcbitcXHRpZiAoIXBtKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdG1pYiA9IFxcdTAwMjZwbS1cXHUwMDNlc3RhdHM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHR5dDkyMXhfbWliX3JlYWQocHJpdiwgcG9ydCk7XFxuK1xcbitcXHQqcmFuZ2VzID0geXQ5MjF4X3Jtb25fcmFuZ2VzO1xcbitcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNldW5kZXJzaXplX3BrdHMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF91bmRlcnNpemVfZXJyb3JzKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlb3ZlcnNpemVfcGt0cyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X292ZXJzaXplX2Vycm9ycyk7XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWZyYWdtZW50cyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnMpO1xcbitcXHQvKiBybW9uX3N0YXRzLVxcdTAwM2VqYWJiZXJzICovXFxuK1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzBdID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfNjRieXRlKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFsxXSA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4XzY1XzEyN2J5dGUpO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzJdID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfMTI4XzI1NWJ5dGUpO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzNdID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfMjU2XzUxMWJ5dGUpO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzRdID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfNTEyXzEwMjNieXRlKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFs1XSA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4XzEwMjRfMTUxOGJ5dGUpO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzZdID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfanVtYm8pO1xcbitcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFswXSA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4XzY0Ynl0ZSk7XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbMV0gPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2V0eF82NV8xMjdieXRlKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFsyXSA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4XzEyOF8yNTVieXRlKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFszXSA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4XzI1Nl81MTFieXRlKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs0XSA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4XzUxMl8xMDIzYnl0ZSk7XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbNV0gPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2V0eF8xMDI0XzE1MThieXRlKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs2XSA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2p1bWJvKTtcXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbit9XFxuK1xcbit2b2lkXFxuK3l0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cXHUwMDNlbWliO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliO1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRpZiAoIXBtKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdG1pYiA9IFxcdTAwMjZwbS1cXHUwMDNlc3RhdHM7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFxcdTAwMjZwbS1cXHUwMDNlc3luY3ApO1xcbitcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF91bmRlcnNpemVfZXJyb3JzKSArXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfZnJhZ21lbnRfZXJyb3JzKTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X292ZXJfZXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzKTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2NyY19lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF9jcmNfZXJyb3JzKTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2ZyYW1lX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnMpO1xcbitcXHRcXHQvKiBzdGF0cy1cXHUwMDNlcnhfZmlmb19lcnJvcnMgKi9cXG4rXFx0XFx0Lyogc3RhdHMtXFx1MDAzZXJ4X21pc3NlZF9lcnJvcnMgKi9cXG4rXFxuK1xcdFxcdHN0YXRzLVxcdTAwM2V0eF9hYm9ydGVkX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzKTtcXG4rXFx0XFx0Lyogc3RhdHMtXFx1MDAzZXR4X2NhcnJpZXJfZXJyb3JzICovXFxuK1xcdFxcdHN0YXRzLVxcdTAwM2V0eF9maWZvX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X3VuZGVyc2l6ZV9lcnJvcnMpO1xcbitcXHRcXHQvKiBzdGF0cy1cXHUwMDNldHhfaGVhcnRiZWF0X2Vycm9ycyAqL1xcbitcXHRcXHRzdGF0cy1cXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2xhdGVfY29sbGlzaW9ucyk7XFxuK1xcbitcXHRcXHRzdGF0cy1cXHUwMDNlcnhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZwbS1cXHUwMDNlcnhfZnJhbWVzKTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXR4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2cG0tXFx1MDAzZXR4X2ZyYW1lcyk7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VyeF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X2dvb2RfYnl0ZXMpIC1cXG4rXFx0XFx0XFx0XFx0ICBFVEhfRkNTX0xFTiAqIHN0YXRzLVxcdTAwM2VyeF9wYWNrZXRzO1xcbitcXHRcXHRzdGF0cy1cXHUwMDNldHhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2V0eF9nb29kX2J5dGVzKSAtXFxuK1xcdFxcdFxcdFxcdCAgRVRIX0ZDU19MRU4gKiBzdGF0cy1cXHUwMDNldHhfcGFja2V0cztcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2Ryb3BwZWQgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF9kcm9wcGVkKTtcXG4rXFx0XFx0Lyogc3RhdHMtXFx1MDAzZXR4X2Ryb3BwZWQgKi9cXG4rXFx0XFx0c3RhdHMtXFx1MDAzZW11bHRpY2FzdCA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X211bHRpY2FzdCk7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2Vjb2xsaXNpb25zID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNldHhfY29sbGlzaW9ucyk7XFxuK1xcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcXHUwMDI2cG0tXFx1MDAzZXN5bmNwLCBzdGFydCkpO1xcbitcXG4rXFx0c3RhdHMtXFx1MDAzZXJ4X2Vycm9ycyA9IHN0YXRzLVxcdTAwM2VyeF9sZW5ndGhfZXJyb3JzICsgc3RhdHMtXFx1MDAzZXJ4X292ZXJfZXJyb3JzICtcXG4rXFx0XFx0XFx0ICAgc3RhdHMtXFx1MDAzZXJ4X2NyY19lcnJvcnMgKyBzdGF0cy1cXHUwMDNlcnhfZnJhbWVfZXJyb3JzO1xcbitcXHRzdGF0cy1cXHUwMDNldHhfZXJyb3JzID0gc3RhdHMtXFx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzICsgc3RhdHMtXFx1MDAzZXR4X2ZpZm9fZXJyb3JzICtcXG4rXFx0XFx0XFx0ICAgc3RhdHMtXFx1MDAzZXR4X3dpbmRvd19lcnJvcnM7XFxuK31cXG4rXFxuK3ZvaWRcXG4reXQ5MjF4X2RzYV9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXFx1MDAzZW1pYjtcXG4rXFx0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcXG4rXFxuK1xcdGlmICghcG0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0bWliID0gXFx1MDAyNnBtLVxcdTAwM2VzdGF0cztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTtcXG4rXFxuK1xcdHBhdXNlX3N0YXRzLVxcdTAwM2V0eF9wYXVzZV9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2V0eF9wYXVzZSk7XFxuK1xcdHBhdXNlX3N0YXRzLVxcdTAwM2VyeF9wYXVzZV9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF9wYXVzZSk7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzM5OTJhNWY5YmRjMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5oXFxuQEAgLTAsMCArMSwxNjcgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9NSUJfSFxcbisjZGVmaW5lIF9ZVF9NSUJfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBZVDkyMVhfTUlCX0NUUkxcXHRcXHRcXHQweGMwMDA0XFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9DTEVBTlxcdFxcdFxcdEJJVCgzMClcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX1BPUlRfTVxcdFxcdFxcdEdFTk1BU0soNiwgMylcXG4rI2RlZmluZSAgIFlUOTIxWF9NSUJfQ1RSTF9QT1JUKHgpXFx0XFx0XFx0RklFTERfUFJFUChZVDkyMVhfTUlCX0NUUkxfUE9SVF9NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9PTkVfUE9SVFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfQUxMX1BPUlRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDkyMVhfTUlCbl9EQVRBMChwb3J0KVxcdFxcdCgweGMwMTAwICsgMHgxMDAgKiAocG9ydCkpXFxuKyNkZWZpbmUgWVQ5MjFYX01JQm5fREFUQW0ocG9ydCwgeClcXHQoWVQ5MjFYX01JQm5fREFUQTAocG9ydCkgKyA0ICogKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQlJPQURDQVNUXFx0XFx0MHgwMFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEFVU0VcXHRcXHQweDA0XFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9NVUxUSUNBU1RcXHRcXHQweDA4XFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9DUkNfRVJSXFx0XFx0MHgwY1xcbitcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0FMSUdOX0VSUlxcdFxcdDB4MTBcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1VOREVSU0laRV9FUlJcXHQweDE0XFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9GUkFHX0VSUlxcdFxcdDB4MThcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NFxcdFxcdDB4MWNcXG4rXFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNjVfVE9fMTI3XFx0MHgyMFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEyOF9UT18yNTVcXHQweDI0XFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMVxcdDB4MjhcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl81MTJfVE9fMTAyM1xcdDB4MmNcXG4rXFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTAyNF9UT18xNTE4XFx0MHgzMFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzE1MTlfVE9fTUFYXFx0MHgzNFxcbisvKiAweDM4OiB1bnVzZWQgKi9cXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0dPT0RfQllURVNcXHRcXHQweDNjXFxuK1xcbisvKiAweDQwOiA2NCBieXRlcyAqL1xcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTXFx0XFx0MHg0NFxcbisvKiAweDQ4OiA2NCBieXRlcyAqL1xcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfT1ZFUlNJWkVfRVJSXFx0MHg0Y1xcbitcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0RST1BQRURcXHRcXHQweDUwXFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9CUk9BRENBU1RcXHRcXHQweDU0XFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QQVVTRVxcdFxcdDB4NThcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJQ0FTVFxcdFxcdDB4NWNcXG4rXFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9VTkRFUlNJWkVfRVJSXFx0MHg2MFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY0XFx0XFx0MHg2NFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY1X1RPXzEyN1xcdDB4NjhcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1XFx0MHg2Y1xcbitcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExXFx0MHg3MFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzUxMl9UT18xMDIzXFx0MHg3NFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEwMjRfVE9fMTUxOFxcdDB4NzhcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWFxcdDB4N2NcXG4rXFxuKy8qIDB4ODA6IHVudXNlZCAqL1xcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfR09PRF9CWVRFU1xcdFxcdDB4ODRcXG4rLyogMHg4ODogNjQgYnl0ZXMgKi9cXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0NPTExJU0lPTlxcdFxcdDB4OGNcXG4rXFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OXFx0MHg5MFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElQTEVfQ09MTElTSU9OXFx0MHg5NFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfU0lOR0xFX0NPTExJU0lPTlxcdDB4OThcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVFxcdFxcdFxcdDB4OWNcXG4rXFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9ERUZFUlJFRFxcdFxcdDB4YTBcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0xBVEVfQ09MTElTSU9OXFx0MHhhNFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfT0FNXFx0XFx0XFx0MHhhOFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfT0FNXFx0XFx0XFx0MHhhY1xcbitcXG4rc3RydWN0IHl0OTIxeF9taWJfc3RhdHMge1xcbitcXHR1NjRfc3RhdHNfdCByeF9icm9hZGNhc3Q7XFxuK1xcdHU2NF9zdGF0c190IHJ4X3BhdXNlO1xcbitcXHR1NjRfc3RhdHNfdCByeF9tdWx0aWNhc3Q7XFxuK1xcdHU2NF9zdGF0c190IHJ4X2NyY19lcnJvcnM7XFxuK1xcbitcXHR1NjRfc3RhdHNfdCByeF9hbGlnbm1lbnRfZXJyb3JzO1xcbitcXHR1NjRfc3RhdHNfdCByeF91bmRlcnNpemVfZXJyb3JzO1xcbitcXHR1NjRfc3RhdHNfdCByeF9mcmFnbWVudF9lcnJvcnM7XFxuK1xcdHU2NF9zdGF0c190IHJ4XzY0Ynl0ZTtcXG4rXFxuK1xcdHU2NF9zdGF0c190IHJ4XzY1XzEyN2J5dGU7XFxuK1xcdHU2NF9zdGF0c190IHJ4XzEyOF8yNTVieXRlO1xcbitcXHR1NjRfc3RhdHNfdCByeF8yNTZfNTExYnl0ZTtcXG4rXFx0dTY0X3N0YXRzX3QgcnhfNTEyXzEwMjNieXRlO1xcbitcXG4rXFx0dTY0X3N0YXRzX3QgcnhfMTAyNF8xNTE4Ynl0ZTtcXG4rXFx0dTY0X3N0YXRzX3QgcnhfanVtYm87XFxuK1xcdHU2NF9zdGF0c190IHJ4X2dvb2RfYnl0ZXM7XFxuK1xcbitcXHR1NjRfc3RhdHNfdCByeF9iYWRfYnl0ZXM7XFxuK1xcdHU2NF9zdGF0c190IHJ4X292ZXJzaXplX2Vycm9ycztcXG4rXFxuK1xcdHU2NF9zdGF0c190IHJ4X2Ryb3BwZWQ7XFxuK1xcdHU2NF9zdGF0c190IHR4X2Jyb2FkY2FzdDtcXG4rXFx0dTY0X3N0YXRzX3QgdHhfcGF1c2U7XFxuK1xcdHU2NF9zdGF0c190IHR4X211bHRpY2FzdDtcXG4rXFxuK1xcdHU2NF9zdGF0c190IHR4X3VuZGVyc2l6ZV9lcnJvcnM7XFxuK1xcdHU2NF9zdGF0c190IHR4XzY0Ynl0ZTtcXG4rXFx0dTY0X3N0YXRzX3QgdHhfNjVfMTI3Ynl0ZTtcXG4rXFx0dTY0X3N0YXRzX3QgdHhfMTI4XzI1NWJ5dGU7XFxuK1xcbitcXHR1NjRfc3RhdHNfdCB0eF8yNTZfNTExYnl0ZTtcXG4rXFx0dTY0X3N0YXRzX3QgdHhfNTEyXzEwMjNieXRlO1xcbitcXHR1NjRfc3RhdHNfdCB0eF8xMDI0XzE1MThieXRlO1xcbitcXHR1NjRfc3RhdHNfdCB0eF9qdW1ibztcXG4rXFxuK1xcdHU2NF9zdGF0c190IHR4X2dvb2RfYnl0ZXM7XFxuK1xcdHU2NF9zdGF0c190IHR4X2NvbGxpc2lvbnM7XFxuK1xcbitcXHR1NjRfc3RhdHNfdCB0eF9hYm9ydGVkX2Vycm9ycztcXG4rXFx0dTY0X3N0YXRzX3QgdHhfbXVsdGlwbGVfY29sbGlzaW9ucztcXG4rXFx0dTY0X3N0YXRzX3QgdHhfc2luZ2xlX2NvbGxpc2lvbnM7XFxuK1xcdHU2NF9zdGF0c190IHR4X2dvb2Q7XFxuK1xcbitcXHR1NjRfc3RhdHNfdCB0eF9kZWZlcnJlZDtcXG4rXFx0dTY0X3N0YXRzX3QgdHhfbGF0ZV9jb2xsaXNpb25zO1xcbitcXHR1NjRfc3RhdHNfdCByeF9vYW07XFxuK1xcdHU2NF9zdGF0c190IHR4X29hbTtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX01JQl9OVU1cXHQoc2l6ZW9mKHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzKSAvIHNpemVvZih1NjRfc3RhdHNfdCkpXFxuK1xcbitzdHJ1Y3QgeXQ5MjF4X21pYiB7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcXG4rXFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcXG4rXFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xcbitcXHQvKiBwcm90ZWN0ZWQgYnkgc3luY3AgT1IgcHJpdi1cXHUwMDNlcmVnX2xvY2sgKi9cXG4rXFx0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgc3RhdHM7XFxuK1xcdHU2NF9zdGF0c190IHJ4X2ZyYW1lcztcXG4rXFx0dTY0X3N0YXRzX3QgdHhfZnJhbWVzO1xcbitcXHQvKiBwcm90ZWN0ZWQgYnkgcHJpdi1cXHUwMDNlcmVnX2xvY2sgKi9cXG4rXFx0dTY0IGRhdGFbWVQ5MjFYX01JQl9OVU1dO1xcbit9O1xcbitcXG4rdm9pZCB5dDkyMXhfbWliX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4rdm9pZFxcbit5dDkyMXhfZHNhX2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHUzMiBzdHJpbmdzZXQsXFxuK1xcdFxcdCAgICAgICB1aW50OF90ICpkYXRhKTtcXG4rdm9pZFxcbit5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKTtcXG4raW50IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpO1xcbit2b2lkXFxuK3l0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpO1xcbit2b2lkXFxuK3l0OTIxeF9kc2FfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKTtcXG4rdm9pZFxcbit5dDkyMXhfZHNhX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcXG4rXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpO1xcbit2b2lkXFxuK3l0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpO1xcbit2b2lkXFxuK3l0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cyk7XFxuK1xcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG5pbmRleCBiZjNhZGZkNjQxNjVhLi4yNzA4NjYwMjk5N2JiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXFxuQEAgLTYzLDYgKzYzLDM2IEBAIGludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXFxuIFxcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XFxuIH1cXG4gXFxuKy8qIFJlbGlhYmx5IHJlYWQgYSA2NGJpdCBjb3VudGVyICovXFxuK2ludCB5dDkyMXhfY291bnRlcl9yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTY0ICp2YWxwKVxcbit7XFxuK1xcdHUzMiBvbGRfbG87XFxuK1xcdGludCByZXM7XFxuK1xcdHUzMiBoaTtcXG4rXFx0dTMyIGxvO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXFx1MDAyNm9sZF9sbyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIDE2OyBpKyspIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQsIFxcdTAwMjZoaSk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFxcdTAwMjZsbyk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRcXHRpZiAobG8gXFx1MDAzZT0gb2xkX2xvKSB7XFxuK1xcdFxcdFxcdCp2YWxwID0gKCh1NjQpaGkgXFx1MDAzY1xcdTAwM2MgMzIpIHwgbG87XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdG9sZF9sbyA9IGxvO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4gc3RhdGljIGludFxcbiB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbiBcXHRcXHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbmluZGV4IDIxMmUyMGY3MWQ4MDYuLmQzNDI0MDU0OGFmN2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcXG5AQCAtMzUsNiArMzUsOCBAQCB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxcbiBcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuIH1cXG4gXFxuK2ludCB5dDkyMXhfY291bnRlcl9yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTY0ICp2YWxwKTtcXG4rXFxuIC8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4gICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuICAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTc6NTQuMzA4NjY0NjEyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjA1OTUzMDI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vKSwgd2hpY2ggaW50ZXJhY3RzIHdpdGggYSBzcGVjaWZpYyBwaHlzaWNhbCBNRElPLWNvbm5lY3RlZCBzd2l0Y2ggQVNJQy4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcyMTdhMjYyNzRlNzU5MTYyNGNhN2EwODkzZGQwNjA2Mzg5YTFmZDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjE3OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbmluZGV4IGFlYjEyY2I5MWY5MzUuLjVjMmQzNGVjMDVmYzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG5AQCAtMiw0ICsyLDUgQEBcbiBvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXG4geXQ5MjF4LW9ianMgOj0gY2hpcC5vXG4geXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICs9IGxlZHMub1xuK3l0OTIxeC1vYmpzICs9IG1pYi5vXG4geXQ5MjF4LW9ianMgKz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCBkNjYzYWYwMTBmNDMxLi5iNDA1OTA1M2VmMTUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTksNiArMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX25ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2NwLmhcdTAwM2VcbkBAIC0yNyw3NSArMjgsOSBAQFxuIFxuICNpbmNsdWRlIFwiY2hpcC5oXCJcbiAjaW5jbHVkZSBcImxlZHMuaFwiXG4rI2luY2x1ZGUgXCJtaWIuaFwiXG4gI2luY2x1ZGUgXCJzbWkuaFwiXG4gXG4tc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG4tXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbi1cdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4tXHRjb25zdCBjaGFyICpuYW1lO1xuLX07XG4tXG4tI2RlZmluZSBNSUJfREVTQyhfc2l6ZSwgX29mZnNldCwgX25hbWUpIFxcXG4tXHR7X3NpemUsIF9vZmZzZXQsIF9uYW1lfVxuLVxuLS8qIE11c3QgYWdyZWUgd2l0aCB5dDkyMXhfbWliXG4tICpcbi0gKiBVbnN0cnVjdHVyZWQgZmllbGRzIChuYW1lICE9IE5VTEwpIHdpbGwgYXBwZWFyIGluIGdldF9ldGh0b29sX3N0YXRzKCksXG4tICogc3RydWN0dXJlZCBnbyB0byB0aGVpciAqX3N0YXRzKCkgbWV0aG9kcywgYnV0IHdlIG5lZWQgdGhlaXIgc2l6ZXMgYW5kIG9mZnNldHNcbi0gKiB0byBwZXJmb3JtIDMyYml0IE1JQiBvdmVyZmxvdyB3cmFwYXJvdW5kLlxuLSAqL1xuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHl0OTIxeF9taWJfZGVzY3NbXSA9IHtcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1QsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9NVUxUSUNBU1QsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0NSQ19FUlIsIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0FMSUdOX0VSUiwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfVU5ERVJTSVpFX0VSUiwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfRlJBR19FUlIsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NCwgTlVMTCksXG4tXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyNywgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEyOF9UT18yNTUsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8yNTZfVE9fNTExLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMDI0X1RPXzE1MTgsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksXG4tXHRNSUJfREVTQygyLCBZVDkyMVhfTUlCX0RBVEFfUlhfR09PRF9CWVRFUywgTlVMTCksXG4tXG4tXHRNSUJfREVTQygyLCBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTLCBcIlJ4QmFkQnl0ZXNcIiksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfT1ZFUlNJWkVfRVJSLCBOVUxMKSxcbi1cbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9EUk9QUEVELCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9CUk9BRENBU1QsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BBVVNFLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSUNBU1QsIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1VOREVSU0laRV9FUlIsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NCwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY1X1RPXzEyNywgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEyOF9UT18yNTUsIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMDI0X1RPXzE1MTgsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksXG4tXG4tXHRNSUJfREVTQygyLCBZVDkyMVhfTUlCX0RBVEFfVFhfR09PRF9CWVRFUywgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfQ09MTElTSU9OLCBOVUxMKSxcbi1cbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSVBMRV9DT0xMSVNJT04sIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1NJTkdMRV9DT0xMSVNJT04sIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVCwgTlVMTCksXG4tXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRUQsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0xBVEVfQ09MTElTSU9OLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9PQU0sIFwiUnhPQU1cIiksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfT0FNLCBcIlR4T0FNXCIpLFxuLX07XG4tXG4gc3RydWN0IHl0OTIxeF9pbmZvIHtcbiBcdGNvbnN0IGNoYXIgKm5hbWU7XG4gXHR1MTYgbWFqb3I7XG5AQCAtMTU0LDE0ICs4OSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuLS8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXG4tICpcbi0gKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXG4tICogdGhlcmUpLCB3ZSBoYXZlIHRvIHBvbGwgc3RhdHMgbW9yZSBmcmVxdWVudGx5IHRoZW4gaXQgaXMgYWN0dWFsbHkgbmVlZGVkLlxuLSAqIEZvciBvdmVyZmxvdyBwcm90ZWN0aW9uLCBub3JtYWxseSwgMTAwIHNlYyBpbnRlcnZhbCBzaG91bGQgaGF2ZSBiZWVuIE9LLlxuLSAqL1xuLSNkZWZpbmUgWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVNcdCgzICogSFopXG4tXG4gc3RydWN0IHl0OTIxeF9yZWdfbWRpbyB7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuIFx0aW50IGFkZHI7XG5AQCAtNTQ0LDI5NCArNDcxLDYgQEAgeXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKiBSZWFkIGFuZCBoYW5kbGUgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy4gTUlCIGJ1ZmZlciBtdXN0IGJlIHplcm9lZCBiZWZvcmUuICovXG4tc3RhdGljIGludCB5dDkyMXhfcmVhZF9taWIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbi17XG4tXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbi1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbi1cdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG4tXHRpbnQgcmVzID0gMDtcbi1cbi1cdC8qIFJlYWRpbmcgb2YgeXQ5MjF4X3BvcnQ6Om1pYiBpcyBub3QgcHJvdGVjdGVkIGJ5IGEgbG9jayBhbmQgaXQncyB2YWluXG4tXHQgKiB0byBrZWVwIGl0cyBjb25zaXN0ZW5jeSwgc2luY2Ugd2UgaGF2ZSB0byByZWFkIHJlZ2lzdGVycyBvbmUgYnkgb25lXG4tXHQgKiBhbmQgdGhlcmUgaXMgbm8gd2F5IHRvIG1ha2UgYSBzbmFwc2hvdCBvZiBNSUIgc3RhdHMuXG4tXHQgKlxuLVx0ICogV3JpdGluZyAoYnkgdGhpcyBmdW5jdGlvbiBvbmx5KSBpcyBhbmQgc2hvdWxkIGJlIHByb3RlY3RlZCBieVxuLVx0ICogcmVnX2xvY2suXG4tXHQgKi9cbi1cbi1cdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcbi1cdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG4tXHRcdHUzMiByZWcgPSBZVDkyMVhfTUlCbl9EQVRBMChwb3J0KSArIGRlc2MtXHUwMDNlb2Zmc2V0O1xuLVx0XHR1NjQgKnZhbHAgPSBcdTAwMjYoKHU2NCAqKW1pYilbaV07XG4tXHRcdHUzMiB2YWwwO1xuLVx0XHR1NjQgdmFsO1xuLVxuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2YWwwKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0aWYgKGRlc2MtXHUwMDNlc2l6ZSBcdTAwM2M9IDEpIHtcbi1cdFx0XHR1NjQgb2xkX3ZhbCA9ICp2YWxwO1xuLVxuLVx0XHRcdHZhbCA9IChvbGRfdmFsIFx1MDAyNiB+KHU2NClVMzJfTUFYKSB8IHZhbDA7XG4tXHRcdFx0aWYgKHZhbCBcdTAwM2Mgb2xkX3ZhbClcbi1cdFx0XHRcdHZhbCArPSAxdWxsIFx1MDAzY1x1MDAzYyAzMjtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHR1MzIgdmFsMTtcbi1cbi1cdFx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCwgXHUwMDI2dmFsMSk7XG4tXHRcdFx0aWYgKHJlcylcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdHZhbCA9ICgodTY0KXZhbDEgXHUwMDNjXHUwMDNjIDMyKSB8IHZhbDA7XG4tXHRcdH1cbi1cbi1cdFx0V1JJVEVfT05DRSgqdmFscCwgdmFsKTtcbi1cdH1cbi1cbi1cdHBwLVx1MDAzZXJ4X2ZyYW1lcyA9IG1pYi1cdTAwM2VyeF82NGJ5dGUgKyBtaWItXHUwMDNlcnhfNjVfMTI3Ynl0ZSArXG4tXHRcdFx0bWliLVx1MDAzZXJ4XzEyOF8yNTVieXRlICsgbWliLVx1MDAzZXJ4XzI1Nl81MTFieXRlICtcbi1cdFx0XHRtaWItXHUwMDNlcnhfNTEyXzEwMjNieXRlICsgbWliLVx1MDAzZXJ4XzEwMjRfMTUxOGJ5dGUgK1xuLVx0XHRcdG1pYi1cdTAwM2VyeF9qdW1ibztcbi1cdHBwLVx1MDAzZXR4X2ZyYW1lcyA9IG1pYi1cdTAwM2V0eF82NGJ5dGUgKyBtaWItXHUwMDNldHhfNjVfMTI3Ynl0ZSArXG4tXHRcdFx0bWliLVx1MDAzZXR4XzEyOF8yNTVieXRlICsgbWliLVx1MDAzZXR4XzI1Nl81MTFieXRlICtcbi1cdFx0XHRtaWItXHUwMDNldHhfNTEyXzEwMjNieXRlICsgbWliLVx1MDAzZXR4XzEwMjRfMTUxOGJ5dGUgK1xuLVx0XHRcdG1pYi1cdTAwM2V0eF9qdW1ibztcbi1cbi1cdGlmIChyZXMpXG4tXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxcblwiLCBcInJlYWQgc3RhdHMgZm9yXCIsXG4tXHRcdFx0cG9ydCwgcmVzKTtcbi1cdHJldHVybiByZXM7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHl0OTIxeF9wb2xsX21pYihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4te1xuLVx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IGNvbnRhaW5lcl9vZl9jb25zdCh3b3JrLCBzdHJ1Y3QgeXQ5MjF4X3BvcnQsXG4tXHRcdFx0XHRcdFx0ICAgIG1pYl9yZWFkLndvcmspO1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gKHZvaWQgKikocHAgLSBwcC1cdTAwM2VpbmRleCkgLVxuLVx0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0cyk7XG4tXHR1bnNpZ25lZCBsb25nIGRlbGF5ID0gWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVM7XG4tXHRpbnQgcG9ydCA9IHBwLVx1MDAzZWluZGV4O1xuLVx0aW50IHJlcztcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXHRyZXMgPSB5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXHRpZiAocmVzKVxuLVx0XHRkZWxheSAqPSA0O1xuLVxuLVx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkLCBkZWxheSk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkXG4teXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LFxuLVx0XHQgICAgICAgdWludDhfdCAqZGF0YSlcbi17XG4tXHRpZiAoc3RyaW5nc2V0ICE9IEVUSF9TU19TVEFUUylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkrKykge1xuLVx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcbi1cbi1cdFx0aWYgKGRlc2MtXHUwMDNlbmFtZSlcbi1cdFx0XHRldGh0b29sX3B1dHMoXHUwMDI2ZGF0YSwgZGVzYy1cdTAwM2VuYW1lKTtcbi1cdH1cbi19XG4tXG4tc3RhdGljIHZvaWRcbi15dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKVxuLXtcbi1cdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbi1cdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuLVx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbi1cdHNpemVfdCBqO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi1cdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi1cbi1cdGogPSAwO1xuLVx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkrKykge1xuLVx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcbi1cbi1cdFx0aWYgKCFkZXNjLVx1MDAzZW5hbWUpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGRhdGFbal0gPSAoKHU2NCAqKW1pYilbaV07XG4tXHRcdGorKztcbi1cdH1cbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxuLXtcbi1cdGludCBjbnQgPSAwO1xuLVxuLVx0aWYgKHNzZXQgIT0gRVRIX1NTX1NUQVRTKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcbi1cdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG4tXG4tXHRcdGlmIChkZXNjLVx1MDAzZW5hbWUpXG4tXHRcdFx0Y250Kys7XG4tXHR9XG4tXG4tXHRyZXR1cm4gY250O1xuLX1cbi1cbi1zdGF0aWMgdm9pZFxuLXl0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi1cdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcbi17XG4tXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4tXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbi1cdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVxuLVx0bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1RyYW5zbWl0dGVkT0sgPSBwcC1cdTAwM2V0eF9mcmFtZXM7XG4tXHRtYWNfc3RhdHMtXHUwMDNlU2luZ2xlQ29sbGlzaW9uRnJhbWVzID0gbWliLVx1MDAzZXR4X3NpbmdsZV9jb2xsaXNpb25zO1xuLVx0bWFjX3N0YXRzLVx1MDAzZU11bHRpcGxlQ29sbGlzaW9uRnJhbWVzID0gbWliLVx1MDAzZXR4X211bHRpcGxlX2NvbGxpc2lvbnM7XG4tXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyA9IHBwLVx1MDAzZXJ4X2ZyYW1lcztcbi1cdG1hY19zdGF0cy1cdTAwM2VGcmFtZUNoZWNrU2VxdWVuY2VFcnJvcnMgPSBtaWItXHUwMDNlcnhfY3JjX2Vycm9ycztcbi1cdG1hY19zdGF0cy1cdTAwM2VBbGlnbm1lbnRFcnJvcnMgPSBtaWItXHUwMDNlcnhfYWxpZ25tZW50X2Vycm9ycztcbi1cdG1hY19zdGF0cy1cdTAwM2VPY3RldHNUcmFuc21pdHRlZE9LID0gbWliLVx1MDAzZXR4X2dvb2RfYnl0ZXM7XG4tXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzV2l0aERlZmVycmVkWG1pc3Npb25zID0gbWliLVx1MDAzZXR4X2RlZmVycmVkO1xuLVx0bWFjX3N0YXRzLVx1MDAzZUxhdGVDb2xsaXNpb25zID0gbWliLVx1MDAzZXR4X2xhdGVfY29sbGlzaW9ucztcbi1cdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNBYm9ydGVkRHVlVG9YU0NvbGxzID0gbWliLVx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzO1xuLVx0LyogbWFjX3N0YXRzLVx1MDAzZUZyYW1lc0xvc3REdWVUb0ludE1BQ1htaXRFcnJvciAqL1xuLVx0LyogbWFjX3N0YXRzLVx1MDAzZUNhcnJpZXJTZW5zZUVycm9ycyAqL1xuLVx0bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1JlY2VpdmVkT0sgPSBtaWItXHUwMDNlcnhfZ29vZF9ieXRlcztcbi1cdC8qIG1hY19zdGF0cy1cdTAwM2VGcmFtZXNMb3N0RHVlVG9JbnRNQUNSY3ZFcnJvciAqL1xuLVx0bWFjX3N0YXRzLVx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyA9IG1pYi1cdTAwM2V0eF9tdWx0aWNhc3Q7XG4tXHRtYWNfc3RhdHMtXHUwMDNlQnJvYWRjYXN0RnJhbWVzWG1pdHRlZE9LID0gbWliLVx1MDAzZXR4X2Jyb2FkY2FzdDtcbi1cdC8qIG1hY19zdGF0cy1cdTAwM2VGcmFtZXNXaXRoRXhjZXNzaXZlRGVmZXJyYWwgKi9cbi1cdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0gbWliLVx1MDAzZXJ4X211bHRpY2FzdDtcbi1cdG1hY19zdGF0cy1cdTAwM2VCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LID0gbWliLVx1MDAzZXJ4X2Jyb2FkY2FzdDtcbi1cdC8qIG1hY19zdGF0cy1cdTAwM2VJblJhbmdlTGVuZ3RoRXJyb3JzICovXG4tXHQvKiBtYWNfc3RhdHMtXHUwMDNlT3V0T2ZSYW5nZUxlbmd0aEZpZWxkICovXG4tXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVUb29Mb25nRXJyb3JzID0gbWliLVx1MDAzZXJ4X292ZXJzaXplX2Vycm9ycztcbi19XG4tXG4tc3RhdGljIHZvaWRcbi15dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLVx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxuLXtcbi1cdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbi1cdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuLVx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXG4tXHRjdHJsX3N0YXRzLVx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNUcmFuc21pdHRlZCA9IG1pYi1cdTAwM2V0eF9wYXVzZTtcbi1cdGN0cmxfc3RhdHMtXHUwMDNlTUFDQ29udHJvbEZyYW1lc1JlY2VpdmVkID0gbWliLVx1MDAzZXJ4X3BhdXNlO1xuLVx0LyogY3RybF9zdGF0cy1cdTAwM2VVbnN1cHBvcnRlZE9wY29kZXNSZWNlaXZlZCAqL1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIHl0OTIxeF9ybW9uX3Jhbmdlc1tdID0ge1xuLVx0eyAwLCA2NCB9LFxuLVx0eyA2NSwgMTI3IH0sXG4tXHR7IDEyOCwgMjU1IH0sXG4tXHR7IDI1NiwgNTExIH0sXG4tXHR7IDUxMiwgMTAyMyB9LFxuLVx0eyAxMDI0LCAxNTE4IH0sXG4tXHR7IDE1MTksIFlUOTIxWF9GUkFNRV9TSVpFX01BWCB9LFxuLVx0e31cbi19O1xuLVxuLXN0YXRpYyB2b2lkXG4teXQ5MjF4X2RzYV9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLVx0XHRcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbi1cdFx0XHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcbi17XG4tXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4tXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbi1cdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVxuLVx0KnJhbmdlcyA9IHl0OTIxeF9ybW9uX3Jhbmdlcztcbi1cbi1cdHJtb25fc3RhdHMtXHUwMDNldW5kZXJzaXplX3BrdHMgPSBtaWItXHUwMDNlcnhfdW5kZXJzaXplX2Vycm9ycztcbi1cdHJtb25fc3RhdHMtXHUwMDNlb3ZlcnNpemVfcGt0cyA9IG1pYi1cdTAwM2VyeF9vdmVyc2l6ZV9lcnJvcnM7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWZyYWdtZW50cyA9IG1pYi1cdTAwM2VyeF9hbGlnbm1lbnRfZXJyb3JzO1xuLVx0Lyogcm1vbl9zdGF0cy1cdTAwM2VqYWJiZXJzICovXG4tXG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMF0gPSBtaWItXHUwMDNlcnhfNjRieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzFdID0gbWliLVx1MDAzZXJ4XzY1XzEyN2J5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMl0gPSBtaWItXHUwMDNlcnhfMTI4XzI1NWJ5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbM10gPSBtaWItXHUwMDNlcnhfMjU2XzUxMWJ5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbNF0gPSBtaWItXHUwMDNlcnhfNTEyXzEwMjNieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzVdID0gbWliLVx1MDAzZXJ4XzEwMjRfMTUxOGJ5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbNl0gPSBtaWItXHUwMDNlcnhfanVtYm87XG4tXG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbMF0gPSBtaWItXHUwMDNldHhfNjRieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzFdID0gbWliLVx1MDAzZXR4XzY1XzEyN2J5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbMl0gPSBtaWItXHUwMDNldHhfMTI4XzI1NWJ5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbM10gPSBtaWItXHUwMDNldHhfMjU2XzUxMWJ5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbNF0gPSBtaWItXHUwMDNldHhfNTEyXzEwMjNieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzVdID0gbWliLVx1MDAzZXR4XzEwMjRfMTUxOGJ5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbNl0gPSBtaWItXHUwMDNldHhfanVtYm87XG4tfVxuLVxuLXN0YXRpYyB2b2lkXG4teXQ5MjF4X2RzYV9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLVx0XHQgICAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcbi17XG4tXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4tXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbi1cdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG4tXG4tXHRzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzID0gbWliLVx1MDAzZXJ4X3VuZGVyc2l6ZV9lcnJvcnMgK1xuLVx0XHRcdFx0ICBtaWItXHUwMDNlcnhfZnJhZ21lbnRfZXJyb3JzO1xuLVx0c3RhdHMtXHUwMDNlcnhfb3Zlcl9lcnJvcnMgPSBtaWItXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzO1xuLVx0c3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyA9IG1pYi1cdTAwM2VyeF9jcmNfZXJyb3JzO1xuLVx0c3RhdHMtXHUwMDNlcnhfZnJhbWVfZXJyb3JzID0gbWliLVx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnM7XG4tXHQvKiBzdGF0cy1cdTAwM2VyeF9maWZvX2Vycm9ycyAqL1xuLVx0Lyogc3RhdHMtXHUwMDNlcnhfbWlzc2VkX2Vycm9ycyAqL1xuLVxuLVx0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgPSBtaWItXHUwMDNldHhfYWJvcnRlZF9lcnJvcnM7XG4tXHQvKiBzdGF0cy1cdTAwM2V0eF9jYXJyaWVyX2Vycm9ycyAqL1xuLVx0c3RhdHMtXHUwMDNldHhfZmlmb19lcnJvcnMgPSBtaWItXHUwMDNldHhfdW5kZXJzaXplX2Vycm9ycztcbi1cdC8qIHN0YXRzLVx1MDAzZXR4X2hlYXJ0YmVhdF9lcnJvcnMgKi9cbi1cdHN0YXRzLVx1MDAzZXR4X3dpbmRvd19lcnJvcnMgPSBtaWItXHUwMDNldHhfbGF0ZV9jb2xsaXNpb25zO1xuLVxuLVx0c3RhdHMtXHUwMDNlcnhfcGFja2V0cyA9IHBwLVx1MDAzZXJ4X2ZyYW1lcztcbi1cdHN0YXRzLVx1MDAzZXR4X3BhY2tldHMgPSBwcC1cdTAwM2V0eF9mcmFtZXM7XG4tXHRzdGF0cy1cdTAwM2VyeF9ieXRlcyA9IG1pYi1cdTAwM2VyeF9nb29kX2J5dGVzIC0gRVRIX0ZDU19MRU4gKiBzdGF0cy1cdTAwM2VyeF9wYWNrZXRzO1xuLVx0c3RhdHMtXHUwMDNldHhfYnl0ZXMgPSBtaWItXHUwMDNldHhfZ29vZF9ieXRlcyAtIEVUSF9GQ1NfTEVOICogc3RhdHMtXHUwMDNldHhfcGFja2V0cztcbi1cdHN0YXRzLVx1MDAzZXJ4X2Vycm9ycyA9IHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgKyBzdGF0cy1cdTAwM2VyeF9vdmVyX2Vycm9ycyArXG4tXHRcdFx0ICAgc3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyArIHN0YXRzLVx1MDAzZXJ4X2ZyYW1lX2Vycm9ycztcbi1cdHN0YXRzLVx1MDAzZXR4X2Vycm9ycyA9IHN0YXRzLVx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzICsgc3RhdHMtXHUwMDNldHhfZmlmb19lcnJvcnMgK1xuLVx0XHRcdCAgIHN0YXRzLVx1MDAzZXR4X3dpbmRvd19lcnJvcnM7XG4tXHRzdGF0cy1cdTAwM2VyeF9kcm9wcGVkID0gbWliLVx1MDAzZXJ4X2Ryb3BwZWQ7XG4tXHQvKiBzdGF0cy1cdTAwM2V0eF9kcm9wcGVkICovXG4tXHRzdGF0cy1cdTAwM2VtdWx0aWNhc3QgPSBtaWItXHUwMDNlcnhfbXVsdGljYXN0O1xuLVx0c3RhdHMtXHUwMDNlY29sbGlzaW9ucyA9IG1pYi1cdTAwM2V0eF9jb2xsaXNpb25zO1xuLX1cbi1cbi1zdGF0aWMgdm9pZFxuLXl0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tXHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxuLXtcbi1cdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbi1cdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuLVx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXG4tXHRwYXVzZV9zdGF0cy1cdTAwM2V0eF9wYXVzZV9mcmFtZXMgPSBtaWItXHUwMDNldHhfcGF1c2U7XG4tXHRwYXVzZV9zdGF0cy1cdTAwM2VyeF9wYXVzZV9mcmFtZXMgPSBtaWItXHUwMDNlcnhfcGF1c2U7XG4tfVxuLVxuIHN0YXRpYyBpbnRcbiB5dDkyMXhfc2V0X2VlZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKVxuIHtcbkBAIC0zOTUzLDExICszNTkyLDE0IEBAIHl0OTIxeF9waHlsaW5rX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuIHtcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcC1cdTAwM2Vkcyk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG07XG4gXHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuIFx0aW50IHJlcztcbiBcbiBcdC8qIE5vIG5lZWQgdG8gc3luYzsgcG9ydCBjb250cm9sIGJsb2NrIGlzIGhvbGQgdW50aWwgZGV2aWNlIHJlbW92ZSAqL1xuLVx0Y2FuY2VsX2RlbGF5ZWRfd29yayhcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdLm1pYl9yZWFkKTtcbitcdHBtID0gcHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG4rXHRpZiAocG0pXG4rXHRcdGNhbmNlbF9kZWxheWVkX3dvcmsoXHUwMDI2cG0tXHUwMDNld29yayk7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuIFx0cmVzID0geXQ5MjF4X3BvcnRfZG93bihwcml2LCBwb3J0KTtcbkBAIC0zOTc2LDYgKzM2MTgsNyBAQCB5dDkyMXhfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiB7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpO1xuIFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHAtXHUwMDNlZHMpO1xuK1x0c3RydWN0IHl0OTIxeF9taWIgKnBtO1xuIFx0aW50IHBvcnQgPSBkcC1cdTAwM2VpbmRleDtcbiBcdGludCByZXM7XG4gXG5AQCAtMzk4OCw3ICszNjMxLDkgQEAgeXQ5MjF4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHRcdGRldl9lcnIoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxcblwiLCBcImJyaW5nIHVwXCIsXG4gXHRcdFx0cG9ydCwgcmVzKTtcbiBcbi1cdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdLm1pYl9yZWFkLCAwKTtcbitcdHBtID0gcHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG4rXHRpZiAocG0pXG4rXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwbS1cdTAwM2V3b3JrLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWRcbkBAIC00MTA4LDExICszNzUzLDM2IEBAIHl0OTIxeF9kc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0cmV0dXJuIERTQV9UQUdfUFJPVE9fWVQ5MjFYO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB5dDkyMXhfZHNhX3BvcnRfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVx1MDAzZW1pYjtcbitcbitcdGlmIChwbSlcbitcdFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwbS1cdTAwM2V3b3JrKTtcbit9XG4rXG4gc3RhdGljIGludCB5dDkyMXhfZHNhX3BvcnRfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVx1MDAzZW1pYjtcbiBcdGludCByZXM7XG4gXG4rXHRpZiAoIXBtIFx1MDAyNlx1MDAyNiAhKEJJVChwb3J0KSBcdTAwMjYgKHByaXYtXHUwMDNlaW5mby1cdTAwM2VpbnRlcm5hbF9tYXNrIHxcbitcdFx0ICAgICBwcml2LVx1MDAzZWluZm8tXHUwMDNlZXh0ZXJuYWxfbWFzaykpKSB7XG4rXHRcdHBtID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwbSksIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXBtKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRwcC1cdTAwM2VtaWIgPSBwbTtcbitcbitcdFx0cG0tXHUwMDNlcG9ydCA9IHBwO1xuK1x0XHR1NjRfc3RhdHNfaW5pdChcdTAwMjZwbS1cdTAwM2VzeW5jcCk7XG4rXHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBtLVx1MDAzZXdvcmssIHl0OTIxeF9taWJfcG9sbCk7XG4rXHR9XG4rXG4gXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuIFx0cmVzID0geXQ5MjF4X3BvcnRfc2V0dXAocHJpdiwgcG9ydCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5AQCAtNDY2Nyw2ICs0MzM3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XG4gXHQvKiBwb3J0ICovXG4gXHQuZ2V0X3RhZ19wcm90b2NvbFx0PSB5dDkyMXhfZHNhX2dldF90YWdfcHJvdG9jb2wsXG4gXHQucGh5bGlua19nZXRfY2Fwc1x0PSB5dDkyMXhfZHNhX3BoeWxpbmtfZ2V0X2NhcHMsXG4rXHQucG9ydF90ZWFyZG93blx0XHQ9IHl0OTIxeF9kc2FfcG9ydF90ZWFyZG93bixcbiBcdC5wb3J0X3NldHVwXHRcdD0geXQ5MjF4X2RzYV9wb3J0X3NldHVwLFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19EQ0IpXG4gXHQvKiBkc2NwICovXG5AQCAtNDY5NiwxMiArNDM2Nyw2IEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtXHUwMDNlcG9ydHMpOyBpLS0gXHUwMDNlIDA7ICkge1xuLVx0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbi1cbi1cdFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCk7XG4tXHR9XG4tXG4gXHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goXHUwMDI2cHJpdi1cdTAwM2Vkcyk7XG4gXG4gXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZWFjbF9ibGtzKTsgaSsrKSB7XG5AQCAtNDc0OSw3ICs0NDE0LDYgQEAgc3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuIFxuIFx0XHRwcC1cdTAwM2VpbmRleCA9IGk7XG4tXHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkLCB5dDkyMXhfcG9sbF9taWIpO1xuIFx0fVxuIFxuIFx0ZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbmluZGV4IDgzY2Q0NTQ5NTVkZGIuLmNlMjAxNTAyNjg0OWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbkBAIC0xNjcsNjkgKzE2Nyw2IEBAXG4gI2RlZmluZSBZVDkyMVhfRUVFX0NUUkxcdFx0XHQweGIwMDAwXG4gI2RlZmluZSAgWVQ5MjFYX0VFRV9DVFJMX0VObihwb3J0KVx0XHRCSVQocG9ydClcbiBcbi0jZGVmaW5lIFlUOTIxWF9NSUJfQ1RSTFx0XHRcdDB4YzAwMDRcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfQ0xFQU5cdFx0XHRCSVQoMzApXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX1BPUlRfTVx0XHRcdEdFTk1BU0soNiwgMylcbi0jZGVmaW5lICAgWVQ5MjFYX01JQl9DVFJMX1BPUlQoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9NSUJfQ1RSTF9QT1JUX00sICh4KSlcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfT05FX1BPUlRcdFx0QklUKDEpXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX0FMTF9QT1JUXHRcdEJJVCgwKVxuLSNkZWZpbmUgWVQ5MjFYX01JQm5fREFUQTAocG9ydClcdFx0KDB4YzAxMDAgKyAweDEwMCAqIChwb3J0KSlcbi0jZGVmaW5lIFlUOTIxWF9NSUJuX0RBVEFtKHBvcnQsIHgpXHQoWVQ5MjFYX01JQm5fREFUQTAocG9ydCkgKyA0ICogKHgpKVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1RcdFx0MHgwMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QQVVTRVx0XHQweDA0XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX01VTFRJQ0FTVFx0XHQweDA4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0NSQ19FUlJcdFx0MHgwY1xuLVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9BTElHTl9FUlJcdFx0MHgxMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSXHQweDE0XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSXHRcdDB4MThcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY0XHRcdDB4MWNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyN1x0MHgyMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTI4X1RPXzI1NVx0MHgyNFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMVx0MHgyOFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjNcdDB4MmNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOFx0MHgzMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTUxOV9UT19NQVhcdDB4MzRcbi0vKiAweDM4OiB1bnVzZWQgKi9cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfR09PRF9CWVRFU1x0XHQweDNjXG4tXG4tLyogMHg0MDogNjQgYnl0ZXMgKi9cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTXHRcdDB4NDRcbi0vKiAweDQ4OiA2NCBieXRlcyAqL1xuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PVkVSU0laRV9FUlJcdDB4NGNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfRFJPUFBFRFx0XHQweDUwXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0JST0FEQ0FTVFx0XHQweDU0XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BBVVNFXHRcdDB4NThcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElDQVNUXHRcdDB4NWNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUlx0MHg2MFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjRcdFx0MHg2NFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3XHQweDY4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1XHQweDZjXG4tXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExXHQweDcwXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyM1x0MHg3NFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTAyNF9UT18xNTE4XHQweDc4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWFx0MHg3Y1xuLVxuLS8qIDB4ODA6IHVudXNlZCAqL1xuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTXHRcdDB4ODRcbi0vKiAweDg4OiA2NCBieXRlcyAqL1xuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9DT0xMSVNJT05cdFx0MHg4Y1xuLVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OXHQweDkwXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTlx0MHg5NFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OXHQweDk4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVFx0XHRcdDB4OWNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRURcdFx0MHhhMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9MQVRFX0NPTExJU0lPTlx0MHhhNFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PQU1cdFx0XHQweGE4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX09BTVx0XHRcdDB4YWNcbi1cbiAjZGVmaW5lIFlUOTIxWF9FREFUQV9DVFJMXHRcdDB4ZTAwMDBcbiAjZGVmaW5lICBZVDkyMVhfRURBVEFfQ1RSTF9BRERSX01cdFx0R0VOTUFTSygxNSwgOClcbiAjZGVmaW5lICAgWVQ5MjFYX0VEQVRBX0NUUkxfQUREUih4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0VEQVRBX0NUUkxfQUREUl9NLCAoeCkpXG5AQCAtODYxLDU4ICs3OTgsNiBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXHUwMDNjIDgpXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoKHBvcnQpID09IDggfHwgKHBvcnQpID09IDkpXG4gXG4tc3RydWN0IHl0OTIxeF9taWIge1xuLVx0dTY0IHJ4X2Jyb2FkY2FzdDtcbi1cdHU2NCByeF9wYXVzZTtcbi1cdHU2NCByeF9tdWx0aWNhc3Q7XG4tXHR1NjQgcnhfY3JjX2Vycm9ycztcbi1cbi1cdHU2NCByeF9hbGlnbm1lbnRfZXJyb3JzO1xuLVx0dTY0IHJ4X3VuZGVyc2l6ZV9lcnJvcnM7XG4tXHR1NjQgcnhfZnJhZ21lbnRfZXJyb3JzO1xuLVx0dTY0IHJ4XzY0Ynl0ZTtcbi1cbi1cdHU2NCByeF82NV8xMjdieXRlO1xuLVx0dTY0IHJ4XzEyOF8yNTVieXRlO1xuLVx0dTY0IHJ4XzI1Nl81MTFieXRlO1xuLVx0dTY0IHJ4XzUxMl8xMDIzYnl0ZTtcbi1cbi1cdHU2NCByeF8xMDI0XzE1MThieXRlO1xuLVx0dTY0IHJ4X2p1bWJvO1xuLVx0dTY0IHJ4X2dvb2RfYnl0ZXM7XG4tXG4tXHR1NjQgcnhfYmFkX2J5dGVzO1xuLVx0dTY0IHJ4X292ZXJzaXplX2Vycm9ycztcbi1cbi1cdHU2NCByeF9kcm9wcGVkO1xuLVx0dTY0IHR4X2Jyb2FkY2FzdDtcbi1cdHU2NCB0eF9wYXVzZTtcbi1cdHU2NCB0eF9tdWx0aWNhc3Q7XG4tXG4tXHR1NjQgdHhfdW5kZXJzaXplX2Vycm9ycztcbi1cdHU2NCB0eF82NGJ5dGU7XG4tXHR1NjQgdHhfNjVfMTI3Ynl0ZTtcbi1cdHU2NCB0eF8xMjhfMjU1Ynl0ZTtcbi1cbi1cdHU2NCB0eF8yNTZfNTExYnl0ZTtcbi1cdHU2NCB0eF81MTJfMTAyM2J5dGU7XG4tXHR1NjQgdHhfMTAyNF8xNTE4Ynl0ZTtcbi1cdHU2NCB0eF9qdW1ibztcbi1cbi1cdHU2NCB0eF9nb29kX2J5dGVzO1xuLVx0dTY0IHR4X2NvbGxpc2lvbnM7XG4tXG4tXHR1NjQgdHhfYWJvcnRlZF9lcnJvcnM7XG4tXHR1NjQgdHhfbXVsdGlwbGVfY29sbGlzaW9ucztcbi1cdHU2NCB0eF9zaW5nbGVfY29sbGlzaW9ucztcbi1cdHU2NCB0eF9nb29kO1xuLVxuLVx0dTY0IHR4X2RlZmVycmVkO1xuLVx0dTY0IHR4X2xhdGVfY29sbGlzaW9ucztcbi1cdHU2NCByeF9vYW07XG4tXHR1NjQgdHhfb2FtO1xuLX07XG4tXG4gc3RydWN0IHl0OTIxeF9hY2xfZW50cnkge1xuIFx0dTMyIGtleVsyXTtcbiBcdHUzMiBtYXNrWzJdO1xuQEAgLTkzNiwxMyArODIxLDggQEAgc3RydWN0IHl0OTIxeF9hY2xfYmxrIHtcbiBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0dW5zaWduZWQgY2hhciBpbmRleDtcbiBcbi1cdGJvb2wgaGFpcnBpbjtcbi1cdGJvb2wgaXNvbGF0ZWQ7XG4tXG4tXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG1pYl9yZWFkO1xuLVx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuLVx0dTY0IHJ4X2ZyYW1lcztcbi1cdHU2NCB0eF9mcmFtZXM7XG4rXHRib29sIGhhaXJwaW46MTtcbitcdGJvb2wgaXNvbGF0ZWQ6MTtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiBcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XG5AQCAtOTUzLDYgKzgzMyw4IEBAIHN0cnVjdCB5dDkyMXhfcG9ydCB7XG4gXG4gXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkc1tZVDkyMVhfTEVEX0dST1VQX05VTV07XG4gI2VuZGlmXG4rXG4rXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliO1xuIH07XG4gXG4gc3RydWN0IHl0OTIxeF9yZWdfb3BzIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjMwNDc4Y2U3MWMxMDVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmNcbkBAIC0wLDAgKzEsNDMwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibWliLmhcIlxuKyNpbmNsdWRlIFwic21pLmhcIlxuK1xuK3N0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xuK1x0dW5zaWduZWQgY2hhciBzaXplO1xuK1x0dW5zaWduZWQgY2hhciBvZmZzZXQ7XG4rXHRjb25zdCBjaGFyICpuYW1lO1xuK307XG4rXG4rI2RlZmluZSBNSUJfREVTQyhfc2l6ZSwgX29mZnNldCwgX25hbWUpIHtfc2l6ZSwgX29mZnNldCwgX25hbWV9XG4rXG4rLyogTXVzdCBhZ3JlZSB3aXRoIHl0OTIxeF9taWJcbisgKlxuKyAqIFVuc3RydWN0dXJlZCBmaWVsZHMgKG5hbWUgIT0gTlVMTCkgd2lsbCBhcHBlYXIgaW4gZ2V0X2V0aHRvb2xfc3RhdHMoKSxcbisgKiBzdHJ1Y3R1cmVkIGdvIHRvIHRoZWlyICpfc3RhdHMoKSBtZXRob2RzLCBidXQgd2UgbmVlZCB0aGVpciBzaXplcyBhbmQgb2Zmc2V0c1xuKyAqIHRvIHBlcmZvcm0gMzJiaXQgTUlCIG92ZXJmbG93IHdyYXBhcm91bmQuXG4rICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgeXQ5MjF4X21pYl9kZXNjc1tdID0ge1xuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0JST0FEQ0FTVCwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEFVU0UsIE5VTEwpLFxuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX01VTFRJQ0FTVCwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfQ1JDX0VSUiwgTlVMTCksXG4rXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfQUxJR05fRVJSLCBOVUxMKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9GUkFHX0VSUiwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY0LCBOVUxMKSxcbitcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTI4X1RPXzI1NSwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzI1Nl9UT181MTEsIE5VTEwpLFxuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl81MTJfVE9fMTAyMywgTlVMTCksXG4rXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzE1MTlfVE9fTUFYLCBOVUxMKSxcbitcdE1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9SWF9HT09EX0JZVEVTLCBOVUxMKSxcbitcbitcdE1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9SWF9CQURfQllURVMsIFwiUnhCYWRCeXRlc1wiKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9PVkVSU0laRV9FUlIsIE5VTEwpLFxuK1xuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0RST1BQRUQsIE5VTEwpLFxuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0JST0FEQ0FTVCwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEFVU0UsIE5VTEwpLFxuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJQ0FTVCwgTlVMTCksXG4rXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUiwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY0LCBOVUxMKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTI4X1RPXzI1NSwgTlVMTCksXG4rXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzI1Nl9UT181MTEsIE5VTEwpLFxuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyMywgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzE1MTlfVE9fTUFYLCBOVUxMKSxcbitcbitcdE1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTLCBOVUxMKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9DT0xMSVNJT04sIE5VTEwpLFxuK1xuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04sIE5VTEwpLFxuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTiwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfU0lOR0xFX0NPTExJU0lPTiwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtULCBOVUxMKSxcbitcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9ERUZFUlJFRCwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTEFURV9DT0xMSVNJT04sIE5VTEwpLFxuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX09BTSwgXCJSeE9BTVwiKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9PQU0sIFwiVHhPQU1cIiksXG4rfTtcbitcbisvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuKyAqXG4rICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuKyAqIHRoZXJlKSwgd2UgaGF2ZSB0byBwb2xsIHN0YXRzIG1vcmUgZnJlcXVlbnRseSB0aGVuIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC5cbisgKiBGb3Igb3ZlcmZsb3cgcHJvdGVjdGlvbiwgbm9ybWFsbHksIDEwMCBzZWMgaW50ZXJ2YWwgc2hvdWxkIGhhdmUgYmVlbiBPSy5cbisgKi9cbisjZGVmaW5lIFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTXHQoMyAqIEhaKVxuK1xuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYoX2RzKSBjb250YWluZXJfb2ZfY29uc3QoX2RzLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIGRzKVxuKyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuK1xuKy8qIFJlYWQgYW5kIGhhbmRsZSBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLiBNSUIgYnVmZmVyIG11c3QgYmUgemVyb2VkIGJlZm9yZS4gKi9cbitzdGF0aWMgaW50IHl0OTIxeF9taWJfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuK1x0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcbitcdHU2NCAqYnVmID0gcG0tXHUwMDNlZGF0YTtcbitcdHU2NCByeF9mcmFtZXM7XG4rXHR1NjQgdHhfZnJhbWVzO1xuK1x0aW50IHJlcyA9IDA7XG4rXG4rXHRtaWIgPSBcdTAwMjZwbS1cdTAwM2VzdGF0cztcbitcbitcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG4rXHRcdHUzMiByZWcgPSBZVDkyMVhfTUlCbl9EQVRBMChwb3J0KSArIGRlc2MtXHUwMDNlb2Zmc2V0O1xuK1xuK1x0XHRpZiAoZGVzYy1cdTAwM2VzaXplIFx1MDAzYz0gMSkge1xuK1x0XHRcdHU2NCBvbGRfdmFsID0gYnVmW2ldO1xuK1x0XHRcdHUzMiB2YWwwO1xuK1x0XHRcdHU2NCB2YWw7XG4rXG4rXHRcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dmFsMCk7XG4rXHRcdFx0aWYgKHJlcylcbitcdFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRcdHZhbCA9IChvbGRfdmFsIFx1MDAyNiB+KHU2NClVMzJfTUFYKSB8IHZhbDA7XG4rXHRcdFx0aWYgKHZhbCBcdTAwM2Mgb2xkX3ZhbClcbitcdFx0XHRcdHZhbCArPSAxdWxsIFx1MDAzY1x1MDAzYyAzMjtcbitcbitcdFx0XHRidWZbaV0gPSB2YWw7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmVzID0geXQ5MjF4X2NvdW50ZXJfcmVhZChwcml2LCByZWcsIFx1MDAyNmJ1ZltpXSk7XG4rXHRcdFx0aWYgKHJlcylcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnBtLVx1MDAzZXN5bmNwKTtcbitcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspXG4rXHRcdHU2NF9zdGF0c19zZXQoXHUwMDI2KCh1NjRfc3RhdHNfdCAqKW1pYilbaV0sIGJ1ZltpXSk7XG4rXHRyeF9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfNjRieXRlKSArXG4rXHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfNjVfMTI3Ynl0ZSkgK1xuK1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzEyOF8yNTVieXRlKSArXG4rXHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfMjU2XzUxMWJ5dGUpICtcbitcdFx0ICAgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF81MTJfMTAyM2J5dGUpICtcbitcdFx0ICAgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF8xMDI0XzE1MThieXRlKSArXG4rXHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfanVtYm8pO1xuK1x0dHhfZnJhbWVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzY0Ynl0ZSkgK1xuK1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzY1XzEyN2J5dGUpICtcbitcdFx0ICAgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF8xMjhfMjU1Ynl0ZSkgK1xuK1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzI1Nl81MTFieXRlKSArXG4rXHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfNTEyXzEwMjNieXRlKSArXG4rXHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfMTAyNF8xNTE4Ynl0ZSkgK1xuK1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2p1bWJvKTtcbitcdHU2NF9zdGF0c19zZXQoXHUwMDI2cG0tXHUwMDNlcnhfZnJhbWVzLCByeF9mcmFtZXMpO1xuK1x0dTY0X3N0YXRzX3NldChcdTAwMjZwbS1cdTAwM2V0eF9mcmFtZXMsIHR4X2ZyYW1lcyk7XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZwbS1cdTAwM2VzeW5jcCk7XG4rXG4rXHRpZiAocmVzKVxuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcXG5cIiwgXCJyZWFkIHN0YXRzIGZvclwiLFxuK1x0XHRcdHBvcnQsIHJlcyk7XG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbit2b2lkIHl0OTIxeF9taWJfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gY29udGFpbmVyX29mX2NvbnN0KHdvcmssIHN0cnVjdCB5dDkyMXhfbWliLFxuK1x0XHRcdFx0XHRcdCAgIHdvcmsud29yayk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gcG0tXHUwMDNlcG9ydDtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZl9jb25zdChwcCwgc3RydWN0IHl0OTIxeF9wcml2LFxuK1x0XHRcdFx0XHRcdCAgICAgIHBvcnRzW3BwLVx1MDAzZWluZGV4XSk7XG4rXHR1bnNpZ25lZCBsb25nIGRlbGF5ID0gWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVM7XG4rXHRpbnQgcG9ydCA9IHBwLVx1MDAzZWluZGV4O1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbWliX3JlYWQocHJpdiwgcG9ydCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRpZiAocmVzKVxuK1x0XHRkZWxheSAqPSA0O1xuK1xuK1x0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnBtLVx1MDAzZXdvcmssIGRlbGF5KTtcbit9XG4rXG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCxcbitcdFx0ICAgICAgIHVpbnQ4X3QgKmRhdGEpXG4re1xuK1x0aWYgKHN0cmluZ3NldCAhPSBFVEhfU1NfU1RBVFMpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG4rXG4rXHRcdGlmIChkZXNjLVx1MDAzZW5hbWUpXG4rXHRcdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIGRlc2MtXHUwMDNlbmFtZSk7XG4rXHR9XG4rfVxuK1xuK3ZvaWRcbit5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuK1x0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcbitcdHU2NCAqYnVmO1xuK1x0c2l6ZV90IGo7XG4rXG4rXHRpZiAoIXBtKVxuK1x0XHRyZXR1cm47XG4rXHRtaWIgPSBcdTAwMjZwbS1cdTAwM2VzdGF0cztcbitcdGJ1ZiA9IHBtLVx1MDAzZWRhdGE7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0eXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpO1xuK1xuK1x0aiA9IDA7XG4rXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuK1xuK1x0XHRpZiAoIWRlc2MtXHUwMDNlbmFtZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZGF0YVtqXSA9IGJ1ZltpXTtcbitcdFx0aisrO1xuK1x0fVxuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK31cbitcbitpbnQgeXQ5MjF4X2RzYV9nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldClcbit7XG4rXHRpbnQgY250ID0gMDtcbitcbitcdGlmIChzc2V0ICE9IEVUSF9TU19TVEFUUylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuK1xuK1x0XHRpZiAoZGVzYy1cdTAwM2VuYW1lKVxuK1x0XHRcdGNudCsrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGNudDtcbit9XG4rXG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVx1MDAzZW1pYjtcbitcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7XG4rXG4rXHRpZiAoIXBtKVxuK1x0XHRyZXR1cm47XG4rXHRtaWIgPSBcdTAwMjZwbS1cdTAwM2VzdGF0cztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHR5dDkyMXhfbWliX3JlYWQocHJpdiwgcG9ydCk7XG4rXG4rXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzVHJhbnNtaXR0ZWRPSyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNnBtLVx1MDAzZXR4X2ZyYW1lcyk7XG4rXHRtYWNfc3RhdHMtXHUwMDNlU2luZ2xlQ29sbGlzaW9uRnJhbWVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X3NpbmdsZV9jb2xsaXNpb25zKTtcbitcdG1hY19zdGF0cy1cdTAwM2VNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9tdWx0aXBsZV9jb2xsaXNpb25zKTtcbitcdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNSZWNlaXZlZE9LID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2cG0tXHUwMDNlcnhfZnJhbWVzKTtcbitcdG1hY19zdGF0cy1cdTAwM2VGcmFtZUNoZWNrU2VxdWVuY2VFcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfY3JjX2Vycm9ycyk7XG4rXHRtYWNfc3RhdHMtXHUwMDNlQWxpZ25tZW50RXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnMpO1xuK1x0bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1RyYW5zbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfZ29vZF9ieXRlcyk7XG4rXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzV2l0aERlZmVycmVkWG1pc3Npb25zID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2RlZmVycmVkKTtcbitcdG1hY19zdGF0cy1cdTAwM2VMYXRlQ29sbGlzaW9ucyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9sYXRlX2NvbGxpc2lvbnMpO1xuK1x0bWFjX3N0YXRzLVx1MDAzZUZyYW1lc0Fib3J0ZWREdWVUb1hTQ29sbHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMpO1xuK1x0LyogbWFjX3N0YXRzLVx1MDAzZUZyYW1lc0xvc3REdWVUb0ludE1BQ1htaXRFcnJvciAqL1xuK1x0LyogbWFjX3N0YXRzLVx1MDAzZUNhcnJpZXJTZW5zZUVycm9ycyAqL1xuK1x0bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1JlY2VpdmVkT0sgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfZ29vZF9ieXRlcyk7XG4rXHQvKiBtYWNfc3RhdHMtXHUwMDNlRnJhbWVzTG9zdER1ZVRvSW50TUFDUmN2RXJyb3IgKi9cbitcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfbXVsdGljYXN0KTtcbitcdG1hY19zdGF0cy1cdTAwM2VCcm9hZGNhc3RGcmFtZXNYbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfYnJvYWRjYXN0KTtcbitcdC8qIG1hY19zdGF0cy1cdTAwM2VGcmFtZXNXaXRoRXhjZXNzaXZlRGVmZXJyYWwgKi9cbitcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X211bHRpY2FzdCk7XG4rXHRtYWNfc3RhdHMtXHUwMDNlQnJvYWRjYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9icm9hZGNhc3QpO1xuK1x0LyogbWFjX3N0YXRzLVx1MDAzZUluUmFuZ2VMZW5ndGhFcnJvcnMgKi9cbitcdC8qIG1hY19zdGF0cy1cdTAwM2VPdXRPZlJhbmdlTGVuZ3RoRmllbGQgKi9cbitcdG1hY19zdGF0cy1cdTAwM2VGcmFtZVRvb0xvbmdFcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzKTtcbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbit9XG4rXG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cdTAwM2VtaWI7XG4rXHRzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliO1xuK1xuK1x0aWYgKCFwbSlcbitcdFx0cmV0dXJuO1xuK1x0bWliID0gXHUwMDI2cG0tXHUwMDNlc3RhdHM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0eXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpO1xuK1xuK1x0Y3RybF9zdGF0cy1cdTAwM2VNQUNDb250cm9sRnJhbWVzVHJhbnNtaXR0ZWQgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfcGF1c2UpO1xuK1x0Y3RybF9zdGF0cy1cdTAwM2VNQUNDb250cm9sRnJhbWVzUmVjZWl2ZWQgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfcGF1c2UpO1xuK1x0LyogY3RybF9zdGF0cy1cdTAwM2VVbnN1cHBvcnRlZE9wY29kZXNSZWNlaXZlZCAqL1xuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIHl0OTIxeF9ybW9uX3Jhbmdlc1tdID0ge1xuK1x0eyAwLCA2NCB9LFxuK1x0eyA2NSwgMTI3IH0sXG4rXHR7IDEyOCwgMjU1IH0sXG4rXHR7IDI1NiwgNTExIH0sXG4rXHR7IDUxMiwgMTAyMyB9LFxuK1x0eyAxMDI0LCAxNTE4IH0sXG4rXHR7IDE1MTksIFlUOTIxWF9GUkFNRV9TSVpFX01BWCB9LFxuK1x0e31cbit9O1xuK1xuK3ZvaWRcbit5dDkyMXhfZHNhX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuK1x0XHRcdCAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuK1x0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcbitcbitcdGlmICghcG0pXG4rXHRcdHJldHVybjtcbitcdG1pYiA9IFx1MDAyNnBtLVx1MDAzZXN0YXRzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTtcbitcbitcdCpyYW5nZXMgPSB5dDkyMXhfcm1vbl9yYW5nZXM7XG4rXG4rXHRybW9uX3N0YXRzLVx1MDAzZXVuZGVyc2l6ZV9wa3RzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X3VuZGVyc2l6ZV9lcnJvcnMpO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VvdmVyc2l6ZV9wa3RzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X292ZXJzaXplX2Vycm9ycyk7XG4rXHRybW9uX3N0YXRzLVx1MDAzZWZyYWdtZW50cyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9hbGlnbm1lbnRfZXJyb3JzKTtcbitcdC8qIHJtb25fc3RhdHMtXHUwMDNlamFiYmVycyAqL1xuK1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzBdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzY0Ynl0ZSk7XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMV0gPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfNjVfMTI3Ynl0ZSk7XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMl0gPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfMTI4XzI1NWJ5dGUpO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzNdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzI1Nl81MTFieXRlKTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFs0XSA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF81MTJfMTAyM2J5dGUpO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzVdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzEwMjRfMTUxOGJ5dGUpO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzZdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2p1bWJvKTtcbitcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFswXSA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF82NGJ5dGUpO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzFdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzY1XzEyN2J5dGUpO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzJdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzEyOF8yNTVieXRlKTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFszXSA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF8yNTZfNTExYnl0ZSk7XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbNF0gPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfNTEyXzEwMjNieXRlKTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs1XSA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF8xMDI0XzE1MThieXRlKTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs2XSA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9qdW1ibyk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rfVxuK1xuK3ZvaWRcbit5dDkyMXhfZHNhX2dldF9zdGF0czY0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdCAgICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuK1x0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcbitcdHVuc2lnbmVkIGludCBzdGFydDtcbitcbitcdGlmICghcG0pXG4rXHRcdHJldHVybjtcbitcdG1pYiA9IFx1MDAyNnBtLVx1MDAzZXN0YXRzO1xuK1xuK1x0ZG8ge1xuK1x0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZwbS1cdTAwM2VzeW5jcCk7XG4rXG4rXHRcdHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfdW5kZXJzaXplX2Vycm9ycykgK1xuK1x0XHRcdFx0XHQgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9mcmFnbWVudF9lcnJvcnMpO1xuK1x0XHRzdGF0cy1cdTAwM2VyeF9vdmVyX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9vdmVyc2l6ZV9lcnJvcnMpO1xuK1x0XHRzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2NyY19lcnJvcnMpO1xuK1x0XHRzdGF0cy1cdTAwM2VyeF9mcmFtZV9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfYWxpZ25tZW50X2Vycm9ycyk7XG4rXHRcdC8qIHN0YXRzLVx1MDAzZXJ4X2ZpZm9fZXJyb3JzICovXG4rXHRcdC8qIHN0YXRzLVx1MDAzZXJ4X21pc3NlZF9lcnJvcnMgKi9cbitcbitcdFx0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMpO1xuK1x0XHQvKiBzdGF0cy1cdTAwM2V0eF9jYXJyaWVyX2Vycm9ycyAqL1xuK1x0XHRzdGF0cy1cdTAwM2V0eF9maWZvX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF91bmRlcnNpemVfZXJyb3JzKTtcbitcdFx0Lyogc3RhdHMtXHUwMDNldHhfaGVhcnRiZWF0X2Vycm9ycyAqL1xuK1x0XHRzdGF0cy1cdTAwM2V0eF93aW5kb3dfZXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2xhdGVfY29sbGlzaW9ucyk7XG4rXG4rXHRcdHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZwbS1cdTAwM2VyeF9mcmFtZXMpO1xuK1x0XHRzdGF0cy1cdTAwM2V0eF9wYWNrZXRzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2cG0tXHUwMDNldHhfZnJhbWVzKTtcbitcdFx0c3RhdHMtXHUwMDNlcnhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfZ29vZF9ieXRlcykgLVxuK1x0XHRcdFx0ICBFVEhfRkNTX0xFTiAqIHN0YXRzLVx1MDAzZXJ4X3BhY2tldHM7XG4rXHRcdHN0YXRzLVx1MDAzZXR4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2dvb2RfYnl0ZXMpIC1cbitcdFx0XHRcdCAgRVRIX0ZDU19MRU4gKiBzdGF0cy1cdTAwM2V0eF9wYWNrZXRzO1xuK1x0XHRzdGF0cy1cdTAwM2VyeF9kcm9wcGVkID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2Ryb3BwZWQpO1xuK1x0XHQvKiBzdGF0cy1cdTAwM2V0eF9kcm9wcGVkICovXG4rXHRcdHN0YXRzLVx1MDAzZW11bHRpY2FzdCA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9tdWx0aWNhc3QpO1xuK1x0XHRzdGF0cy1cdTAwM2Vjb2xsaXNpb25zID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2NvbGxpc2lvbnMpO1xuK1x0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNnBtLVx1MDAzZXN5bmNwLCBzdGFydCkpO1xuK1xuK1x0c3RhdHMtXHUwMDNlcnhfZXJyb3JzID0gc3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyArIHN0YXRzLVx1MDAzZXJ4X292ZXJfZXJyb3JzICtcbitcdFx0XHQgICBzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzICsgc3RhdHMtXHUwMDNlcnhfZnJhbWVfZXJyb3JzO1xuK1x0c3RhdHMtXHUwMDNldHhfZXJyb3JzID0gc3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgKyBzdGF0cy1cdTAwM2V0eF9maWZvX2Vycm9ycyArXG4rXHRcdFx0ICAgc3RhdHMtXHUwMDNldHhfd2luZG93X2Vycm9ycztcbit9XG4rXG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuK1x0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcbitcbitcdGlmICghcG0pXG4rXHRcdHJldHVybjtcbitcdG1pYiA9IFx1MDAyNnBtLVx1MDAzZXN0YXRzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTtcbitcbitcdHBhdXNlX3N0YXRzLVx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9wYXVzZSk7XG4rXHRwYXVzZV9zdGF0cy1cdTAwM2VyeF9wYXVzZV9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfcGF1c2UpO1xuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjMzOTkyYTVmOWJkYzFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmhcbkBAIC0wLDAgKzEsMTY3IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2lmbmRlZiBfWVRfTUlCX0hcbisjZGVmaW5lIF9ZVF9NSUJfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbitcbisjZGVmaW5lIFlUOTIxWF9NSUJfQ1RSTFx0XHRcdDB4YzAwMDRcbisjZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfQ0xFQU5cdFx0XHRCSVQoMzApXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX1BPUlRfTVx0XHRcdEdFTk1BU0soNiwgMylcbisjZGVmaW5lICAgWVQ5MjFYX01JQl9DVFJMX1BPUlQoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9NSUJfQ1RSTF9QT1JUX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfT05FX1BPUlRcdFx0QklUKDEpXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX0FMTF9QT1JUXHRcdEJJVCgwKVxuKyNkZWZpbmUgWVQ5MjFYX01JQm5fREFUQTAocG9ydClcdFx0KDB4YzAxMDAgKyAweDEwMCAqIChwb3J0KSlcbisjZGVmaW5lIFlUOTIxWF9NSUJuX0RBVEFtKHBvcnQsIHgpXHQoWVQ5MjFYX01JQm5fREFUQTAocG9ydCkgKyA0ICogKHgpKVxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1RcdFx0MHgwMFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QQVVTRVx0XHQweDA0XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX01VTFRJQ0FTVFx0XHQweDA4XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0NSQ19FUlJcdFx0MHgwY1xuK1xuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9BTElHTl9FUlJcdFx0MHgxMFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSXHQweDE0XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSXHRcdDB4MThcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY0XHRcdDB4MWNcbitcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyN1x0MHgyMFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTI4X1RPXzI1NVx0MHgyNFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMVx0MHgyOFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjNcdDB4MmNcbitcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOFx0MHgzMFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTUxOV9UT19NQVhcdDB4MzRcbisvKiAweDM4OiB1bnVzZWQgKi9cbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfR09PRF9CWVRFU1x0XHQweDNjXG4rXG4rLyogMHg0MDogNjQgYnl0ZXMgKi9cbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTXHRcdDB4NDRcbisvKiAweDQ4OiA2NCBieXRlcyAqL1xuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PVkVSU0laRV9FUlJcdDB4NGNcbitcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfRFJPUFBFRFx0XHQweDUwXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0JST0FEQ0FTVFx0XHQweDU0XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BBVVNFXHRcdDB4NThcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElDQVNUXHRcdDB4NWNcbitcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUlx0MHg2MFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjRcdFx0MHg2NFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3XHQweDY4XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1XHQweDZjXG4rXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExXHQweDcwXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyM1x0MHg3NFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTAyNF9UT18xNTE4XHQweDc4XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWFx0MHg3Y1xuK1xuKy8qIDB4ODA6IHVudXNlZCAqL1xuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTXHRcdDB4ODRcbisvKiAweDg4OiA2NCBieXRlcyAqL1xuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9DT0xMSVNJT05cdFx0MHg4Y1xuK1xuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OXHQweDkwXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTlx0MHg5NFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OXHQweDk4XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVFx0XHRcdDB4OWNcbitcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRURcdFx0MHhhMFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9MQVRFX0NPTExJU0lPTlx0MHhhNFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PQU1cdFx0XHQweGE4XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX09BTVx0XHRcdDB4YWNcbitcbitzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyB7XG4rXHR1NjRfc3RhdHNfdCByeF9icm9hZGNhc3Q7XG4rXHR1NjRfc3RhdHNfdCByeF9wYXVzZTtcbitcdHU2NF9zdGF0c190IHJ4X211bHRpY2FzdDtcbitcdHU2NF9zdGF0c190IHJ4X2NyY19lcnJvcnM7XG4rXG4rXHR1NjRfc3RhdHNfdCByeF9hbGlnbm1lbnRfZXJyb3JzO1xuK1x0dTY0X3N0YXRzX3QgcnhfdW5kZXJzaXplX2Vycm9ycztcbitcdHU2NF9zdGF0c190IHJ4X2ZyYWdtZW50X2Vycm9ycztcbitcdHU2NF9zdGF0c190IHJ4XzY0Ynl0ZTtcbitcbitcdHU2NF9zdGF0c190IHJ4XzY1XzEyN2J5dGU7XG4rXHR1NjRfc3RhdHNfdCByeF8xMjhfMjU1Ynl0ZTtcbitcdHU2NF9zdGF0c190IHJ4XzI1Nl81MTFieXRlO1xuK1x0dTY0X3N0YXRzX3QgcnhfNTEyXzEwMjNieXRlO1xuK1xuK1x0dTY0X3N0YXRzX3QgcnhfMTAyNF8xNTE4Ynl0ZTtcbitcdHU2NF9zdGF0c190IHJ4X2p1bWJvO1xuK1x0dTY0X3N0YXRzX3QgcnhfZ29vZF9ieXRlcztcbitcbitcdHU2NF9zdGF0c190IHJ4X2JhZF9ieXRlcztcbitcdHU2NF9zdGF0c190IHJ4X292ZXJzaXplX2Vycm9ycztcbitcbitcdHU2NF9zdGF0c190IHJ4X2Ryb3BwZWQ7XG4rXHR1NjRfc3RhdHNfdCB0eF9icm9hZGNhc3Q7XG4rXHR1NjRfc3RhdHNfdCB0eF9wYXVzZTtcbitcdHU2NF9zdGF0c190IHR4X211bHRpY2FzdDtcbitcbitcdHU2NF9zdGF0c190IHR4X3VuZGVyc2l6ZV9lcnJvcnM7XG4rXHR1NjRfc3RhdHNfdCB0eF82NGJ5dGU7XG4rXHR1NjRfc3RhdHNfdCB0eF82NV8xMjdieXRlO1xuK1x0dTY0X3N0YXRzX3QgdHhfMTI4XzI1NWJ5dGU7XG4rXG4rXHR1NjRfc3RhdHNfdCB0eF8yNTZfNTExYnl0ZTtcbitcdHU2NF9zdGF0c190IHR4XzUxMl8xMDIzYnl0ZTtcbitcdHU2NF9zdGF0c190IHR4XzEwMjRfMTUxOGJ5dGU7XG4rXHR1NjRfc3RhdHNfdCB0eF9qdW1ibztcbitcbitcdHU2NF9zdGF0c190IHR4X2dvb2RfYnl0ZXM7XG4rXHR1NjRfc3RhdHNfdCB0eF9jb2xsaXNpb25zO1xuK1xuK1x0dTY0X3N0YXRzX3QgdHhfYWJvcnRlZF9lcnJvcnM7XG4rXHR1NjRfc3RhdHNfdCB0eF9tdWx0aXBsZV9jb2xsaXNpb25zO1xuK1x0dTY0X3N0YXRzX3QgdHhfc2luZ2xlX2NvbGxpc2lvbnM7XG4rXHR1NjRfc3RhdHNfdCB0eF9nb29kO1xuK1xuK1x0dTY0X3N0YXRzX3QgdHhfZGVmZXJyZWQ7XG4rXHR1NjRfc3RhdHNfdCB0eF9sYXRlX2NvbGxpc2lvbnM7XG4rXHR1NjRfc3RhdHNfdCByeF9vYW07XG4rXHR1NjRfc3RhdHNfdCB0eF9vYW07XG4rfTtcbitcbisjZGVmaW5lIFlUOTIxWF9NSUJfTlVNXHQoc2l6ZW9mKHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzKSAvIHNpemVvZih1NjRfc3RhdHNfdCkpXG4rXG4rc3RydWN0IHl0OTIxeF9taWIge1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xuK1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayB3b3JrO1xuK1x0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xuK1x0LyogcHJvdGVjdGVkIGJ5IHN5bmNwIE9SIHByaXYtXHUwMDNlcmVnX2xvY2sgKi9cbitcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzIHN0YXRzO1xuK1x0dTY0X3N0YXRzX3QgcnhfZnJhbWVzO1xuK1x0dTY0X3N0YXRzX3QgdHhfZnJhbWVzO1xuK1x0LyogcHJvdGVjdGVkIGJ5IHByaXYtXHUwMDNlcmVnX2xvY2sgKi9cbitcdHU2NCBkYXRhW1lUOTIxWF9NSUJfTlVNXTtcbit9O1xuK1xuK3ZvaWQgeXQ5MjF4X21pYl9wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCxcbitcdFx0ICAgICAgIHVpbnQ4X3QgKmRhdGEpO1xuK3ZvaWRcbit5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKTtcbitpbnQgeXQ5MjF4X2RzYV9nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldCk7XG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cyk7XG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpO1xuK3ZvaWRcbit5dDkyMXhfZHNhX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuK1x0XHRcdCAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKTtcbit2b2lkXG4reXQ5MjF4X2RzYV9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHQgICAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cyk7XG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKTtcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xuaW5kZXggYmYzYWRmZDY0MTY1YS4uMjcwODY2MDI5OTdiYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbkBAIC02Myw2ICs2MywzNiBAQCBpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuIFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbiB9XG4gXG4rLyogUmVsaWFibHkgcmVhZCBhIDY0Yml0IGNvdW50ZXIgKi9cbitpbnQgeXQ5MjF4X2NvdW50ZXJfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHU2NCAqdmFscClcbit7XG4rXHR1MzIgb2xkX2xvO1xuK1x0aW50IHJlcztcbitcdHUzMiBoaTtcbitcdHUzMiBsbztcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNm9sZF9sbyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIDE2OyBpKyspIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQsIFx1MDAyNmhpKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZsbyk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcbitcdFx0aWYgKGxvIFx1MDAzZT0gb2xkX2xvKSB7XG4rXHRcdFx0KnZhbHAgPSAoKHU2NCloaSBcdTAwM2NcdTAwM2MgMzIpIHwgbG87XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdFx0b2xkX2xvID0gbG87XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4gc3RhdGljIGludFxuIHl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4gXHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbmluZGV4IDIxMmUyMGY3MWQ4MDYuLmQzNDI0MDU0OGFmN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5AQCAtMzUsNiArMzUsOCBAQCB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuIFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuIH1cbiBcbitpbnQgeXQ5MjF4X2NvdW50ZXJfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHU2NCAqdmFscCk7XG4rXG4gLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuICAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxuICAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE3OjU0LjMwODY2NjI5MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MTUzNTM1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGFuYWx5emUgdGhlIGNoYW5nZXMgdGhlbXNlbHZlcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSB0b3VjaGluZyBmaWxlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vYC5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXNlIGZpbGVzIGFyZSBiZWluZyBtb2RpZmllZDpcblxuKiAgIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlYFxuKiAgIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY2BcbiogICBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhgXG4qICAgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmNgXG4qICAgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmhgXG4qICAgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNgXG4qICAgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhgXG5cbkFscmlnaHQsIHRoZSBsb2NhdGlvbiBnaXZlcyBtZSBhIGdvb2Qgc3RhcnQuIEkgY2FuIHNlZSB0aGF0IHRoaXMgaXMgYSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIHN3aXRjaCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIFlUOTIxWCwgd2hpY2ggaXMgYSBNb3RvcmNvbW0gZGV2aWNlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgc2V0dXAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHBhcnRpY3VsYXIgc3dpdGNoIGlzIHByb2JlZCBhbmQgd2hhdCBoYXJkd2FyZSBvciBidXMgaXQncyBib3VuZCB0by4gSXMgaXQgSTJDLCBTUEksIE1ESU8sIHNvbWV0aGluZyBlbHNlPyBLbm93aW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGluZm9ybSB3aGV0aGVyIGl0J3MgdmlhYmxlIGZvciBzeXprYWxsZXIuXG5cbkknbGwgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBzY2FuIHRocm91Z2ggdGhlIHJlbGV2YW50IGZpbGVzIHRvIGZpZ3VyZSBvdXQgdGhlIHByb2JpbmcgbWVjaGFuaXNtIGFuZCB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjgzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTc6NTcuNzI0MDIzMDk4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzczNjcxNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05FVF9EU0FfWVQ5MjFYXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlLTMteXQ5MjF4LW9ianMgOj0gY2hpcC5vXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZTo0Onl0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSArPSBsZWRzLm9cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlLTUteXQ5MjF4LW9ianMgKz0gbWliLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTM4OTc9c3RhdGljIHZvaWQgeXQ5MjF4X2RzYV90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zOTAwLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM5MDE6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzkwMi1cXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00MjE2PXN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjYxLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyNjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI2My1cXHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oPTgyMT1zdHJ1Y3QgeXQ5MjF4X3BvcnQge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgtODI2LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oOjgyNzojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaC04MjgtXFx0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oPTk2PXN0cnVjdCB5dDkyMXhfbGVkIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oLTEwMS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaDoxMDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgtMTAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxNzo1OS4zMDEzOTY0NjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTM4NDc0NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEtjb25maWcgRmlsZXMgZm9yIERTQSBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG5ldHdvcmsgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIChEU0EpIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIENvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgdmVuZG9yLXNwZWNpZmljIG5hdHVyZSBvZiB0aGUgZHJpdmVyLCBJJ20gZ29pbmcgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdgIGZpbGUgZmlyc3QuIE1vdG9yQ29tbSBpcyBhIHZlbmRvciwgYW5kIGl0J3MgbGlrZWx5IHRoZXkgaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBkZWZpbmVkIHdpdGhpbiBhIGRlZGljYXRlZCBzdWJkaXJlY3RvcnkuIElmLCBob3dldmVyLCB0aGUgZHJpdmVyIGlzIGEgbW9yZSBnZW5lcmljIERTQSBpbXBsZW1lbnRhdGlvbiwgb3IgaWYgdGhlIE1vdG9yQ29tbS1zcGVjaWZpYyBmaWxlIGlzIG1pc3Npbmcgb3IgZG9lc24ndCB5aWVsZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLCBJJ2xsIHRoZW4gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIG1haW4gRFNBIEtjb25maWcgZmlsZSwgd2hpY2ggaXMgYGRyaXZlcnMvbmV0L2RzYS9LY29uZmlnYC4gVGhhdCBmaWxlIHNob3VsZCBwcm92aWRlIGEgbW9yZSBnZW5lcmFsIG92ZXJ2aWV3IG9mIHRoZSBEU0EgZnJhbWV3b3JrJ3MgY29uZmlndXJhYmxlIGFzcGVjdHMgYW5kIHBvdGVudGlhbGx5IHBvaW50IG1lIHRvIG90aGVyIHJlbGV2YW50IHN1Yi1jb25maWd1cmF0aW9ucy4gRWl0aGVyIHdheSwgdGhpcyBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBkaWdnaW5nIGludG8gdGhlIGJ1aWxkIHN5c3RlbSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE4OjAyLjQzOTg3MjY1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAyODcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfRFNBX1lUOTIxWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnOjI6Y29uZmlnIE5FVF9EU0FfWVQ5MjFYXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZy05LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZzoxMDpjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEU1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZy0xMS1cXHRib29sIFxcXCJMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVxcXCJcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWctMTItXFx0ZGVmYXVsdCB5XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnOjEzOlxcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWc6MTQ6XFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZy0xNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6MjpvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZS0zLXl0OTIxeC1vYmpzIDo9IGNoaXAub1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6NDp5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgKz0gbGVkcy5vXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZS01LXl0OTIxeC1vYmpzICs9IG1pYi5vXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zODk3PXN0YXRpYyB2b2lkIHl0OTIxeF9kc2FfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzkwMC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozOTAxOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM5MDItXFx0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDIxNj1zdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI2MS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MjYyOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyNjMtXFx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaD04MjE9c3RydWN0IHl0OTIxeF9wb3J0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oLTgyNi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaDo4Mjc6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgtODI4LVxcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaD05Nj1zdHJ1Y3QgeXQ5MjF4X2xlZCB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaC0xMDEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmg6MTAyOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oLTEwMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTg6MDIuNDg4OTA1MTcyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY5MjE3MTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBNb3RvcmNvbW0gRFNBIERyaXZlciBSZWdpc3RyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgTW90b3Jjb21tIERTQSBkcml2ZXIgc2l0dWF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBob3cgaXQncyBiZWluZyBoYW5kbGVkIGF0IHRoZSBLY29uZmlnIGxldmVsIOKAkyBwYXJ0aWN1bGFybHkgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgb3B0aW9ucyBpbiBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnYC4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gYW5kIGlmIHRoZSBkcml2ZXIgaXMgY29ycmVjdGx5IGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQgcGxhdGZvcm0uIFRoZW4sIHRoZSByZWFsIG1lYXQgb2YgaXQ6IEknbGwganVtcCBpbnRvIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBwcm9iZSBmdW5jdGlvbiwgdGhlIGRyaXZlciByZWdpc3RyYXRpb24gaXRzZWxmLCBhbmQgdGhlIGFzc29jaWF0ZWQgbW9kdWxlIGxvYWRpbmcgc2VxdWVuY2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHByb2JlIGlzIGNvcnJlY3RseSBpZGVudGlmeWluZyB0aGUgaGFyZHdhcmUgYW5kIGJpbmRpbmcgdG8gaXQuIEkgd2FudCB0byBzZWUgaWYgdGhleSdyZSB1c2luZyBhIHByb3BlciBkZXZpY2UgdHJlZSBiaW5kaW5nLCBvciBzb21lIG90aGVyIG1ldGhvZCwgYW5kIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHJlc291cmNlIGFsbG9jYXRpb24sIGludGVycnVwdCBoYW5kbGluZywgYW5kIGNsb2NrIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBwcm9iZSBmdW5jdGlvbi4gVGhlIHJlZ2lzdHJhdGlvbiBwYXJ0IGlzIGNyaXRpY2FsOyBJJ2xsIGNoZWNrIGhvdyBpdCdzIGxpbmtlZCBpbnRvIHRoZSBjb3JlIERTQSBmcmFtZXdvcmssIGhvdyB0aGUgZHJpdmVyJ3Mgb3BlcmF0aW9ucyBhcmUgYmVpbmcgaG9va2VkIGluLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdCBwb2ludHMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIG9yIHdoZXJlIHRoaW5ncyBjYW4gZ28gd3JvbmcuIEknbSBsb29raW5nIGZvciByb2J1c3RuZXNzLCBnb29kIGVycm9yIGhhbmRsaW5nLCBhbmQgYSBjbGVhbiBpbnRlcmZhY2UgdG8gdGhlIERTQSBjb3JlLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODI5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTg6MDUuMTgxMDc5MTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBORVRfRFNBX1lUOTIxWFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcXG4gICA1OlxcdFxcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcXG4gICA4OlxcdFxcdCAgY2hpcC5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcXG4gIDExOlxcdFxcdGJvb2wgXFxcIkxFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XFxcIlxcbiAgMTI6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGVcXG4gIDE3OlxcdFxcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE4OjA1LjE4MTE1MjQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQyOTEwNjA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIERldmljZSBJbnRlZ3JhdGlvbioqXG5cbkFscmlnaHQsIHNvIGEgbmV3IGB5dDkyMXhgIGRldmljZS4uLiBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QgdGhpbmcsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gaG93IGl0IGludGVyZmFjZXMuIElzIGl0IHJpZGluZyB0aGUgTURJTyBidXMsIGlzIGl0IEkyQywgb3IgaXMgaXQgU1BJPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29ubmVjdGlvbiBwcm90b2NvbCB0byBrbm93IGhvdyBJJ20gZ29pbmcgdG8gaW50ZXJhY3Qgd2l0aCBpdC5cblxuVGhlbiwgc2luY2UgdGhpcyBzZWVtcyB0byBiZSBuZXR3b3JraW5nIHJlbGF0ZWQsIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIG1vdG9yY29tbSBkcml2ZXJzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBgY2hpcC5jYCBmaWxlLiBDaGFuY2VzIGFyZSwgd2hhdGV2ZXIgYXJjaGl0ZWN0dXJlIHdlJ3JlIHRhbGtpbmcgYWJvdXQgaGFzIGltcGxlbWVudGVkIGl0IHRoZXJlLiBNaWdodCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgZGVlcCBkaXZlIGFuZCB3b3JrIGJhY2t3YXJkcyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ3NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTg6MDcuNjEwMjYwMjcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDkwMCwiRXJyb3IiOiJmaWxlIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jIGRvZXMgbm90IGhhdmUgbGluZSA0NzQwLCBpdCBoYXMgb25seSA0NDU2IGxpbmVzIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDc0MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwiZmlsZSBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyBkb2VzIG5vdCBoYXZlIGxpbmUgNDc0MCwgaXQgaGFzIG9ubHkgNDQ1NiBsaW5lc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxODowNy42MTA0ODg4MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ3MTY2Njk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGltYWdpbmluZyBteXNlbGYgYXMgYW4gZXhwZXJ0IGRpdmluZyBpbnRvIGBjaGlwLmNgOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEZWVwIEVuZDogVGhlIFRhaWwgRW5kIG9mIGBjaGlwLmNgKipcblxuQWxyaWdodCwgbGV0J3Mgc2tpcCB0aGUgcHJlbGltaW5hcmllcyBhbmQgZ2V0IHJpZ2h0IHRvIHRoZSBtZWF0eSBiaXRzLiBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgdGhlIGVuZCBvZiBgY2hpcC5jYC4gTm8gbmVlZCB0byByZWhhc2ggdGhlIG9idmlvdXM7IEknbSBhc3N1bWluZyB0aGUgZ3JvdW5kd29yayBhbmQgY29yZSBmdW5jdGlvbmFsaXR5IGFyZSBhbHJlYWR5IHVuZGVyc3Rvb2QuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljLCBvciB0aGUgdHJvdWJsZSwgdXN1YWxseSByZXNpZGVzOiB0aGUgZmluYWxpemF0aW9uIHJvdXRpbmVzLCB0aGUgaW50ZXJydXB0IGhhbmRsZXJzLCB0aGUgZGVidWcgaW50ZXJmYWNlcywgb3IgbWF5YmUganVzdCBzb21lIGNsZXZlciBvcHRpbWl6YXRpb24gdHJpY2tlcnkuIEknbSBsb29raW5nIGZvciB0aGUgXCJzbyB3aGF0P1wiIOKAkyB3aGF0J3MgdGhlIHVsdGltYXRlIG91dGNvbWUgb2YgYWxsIHRoaXMgY29kZT8gV2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXMgYmVpbmcgaGFuZGxlZCwgb3IsIG1vcmUgaW50ZXJlc3RpbmdseSwgdGhlICp1bipoYW5kbGVkIG9uZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByZXNvdXJjZSBsZWFrcyBvciBjb25jdXJyZW5jeSBpc3N1ZXMganVzdCB3YWl0aW5nIHRvIGJpdGUgdXM/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlIGVuZCBvZnRlbiB0aWVzIGV2ZXJ5dGhpbmcgdG9nZXRoZXIsIHJldmVhbHMgdGhlIHRydWUgYXJjaGl0ZWN0dXJlLCBhbmQgZXhwb3NlcyB0aG9zZSBsaXR0bGUgd2FydHMgYW5kIHdvcmthcm91bmRzIHRoYXQgbWFrZSBhIHN5c3RlbSB0cnVseSBmYXNjaW5hdGluZy4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjc4OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTg6MTAuMDgyMTU4ODIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NDAwOlxcdFxcdG1kaW8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1kaW8pLCBHRlBfS0VSTkVMKTtcXG40NDAxOlxcdFxcdGlmICghbWRpbylcXG40NDAyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjQ0MDM6XFx0XFxuNDQwNDpcXHRcXHRtZGlvLVxcdTAwM2VidXMgPSBtZGlvZGV2LVxcdTAwM2VidXM7XFxuNDQwNTpcXHRcXHRtZGlvLVxcdTAwM2VhZGRyID0gbWRpb2Rldi1cXHUwMDNlYWRkcjtcXG40NDA2OlxcdFxcdG1kaW8tXFx1MDAzZXN3aXRjaGlkID0gMDtcXG40NDA3OlxcdFxcbjQ0MDg6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbjQ0MDk6XFx0XFxuNDQxMDpcXHRcXHRwcml2LVxcdTAwM2VyZWdfb3BzID0gXFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XFxuNDQxMTpcXHRcXHRwcml2LVxcdTAwM2VyZWdfY3R4ID0gbWRpbztcXG40NDEyOlxcdFxcbjQ0MTM6XFx0XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXBvcnRzKTsgaSsrKSB7XFxuNDQxNDpcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldO1xcbjQ0MTU6XFx0XFxuNDQxNjpcXHRcXHRcXHRwcC1cXHUwMDNlaW5kZXggPSBpO1xcbjQ0MTc6XFx0XFx0fVxcbjQ0MTg6XFx0XFxuNDQxOTpcXHRcXHRkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG40NDIwOlxcdFxcdGRzLVxcdTAwM2VkZXYgPSBkZXY7XFxuNDQyMTpcXHRcXHRkcy1cXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xcbjQ0MjI6XFx0XFx0ZHMtXFx1MDAzZWRzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7XFxuNDQyMzpcXHRcXHRkcy1cXHUwMDNlcHJpdiA9IHByaXY7XFxuNDQyNDpcXHRcXHRkcy1cXHUwMDNlb3BzID0gXFx1MDAyNnl0OTIxeF9kc2Ffc3dpdGNoX29wcztcXG40NDI1OlxcdFxcdGRzLVxcdTAwM2VhZ2VpbmdfdGltZV9taW4gPSAxICogNTAwMDtcXG40NDI2OlxcdFxcdGRzLVxcdTAwM2VhZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMDtcXG40NDI3OlxcdFxcdGRzLVxcdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcztcXG40NDI4OlxcdFxcdGRzLVxcdTAwM2VudW1fbGFnX2lkcyA9IFlUOTIxWF9MQUdfTlVNO1xcbjQ0Mjk6XFx0XFx0ZHMtXFx1MDAzZW51bV9wb3J0cyA9IFlUOTIxWF9QT1JUX05VTTtcXG40NDMwOlxcdFxcbjQ0MzE6XFx0XFx0bWRpb2Rldl9zZXRfZHJ2ZGF0YShtZGlvZGV2LCBwcml2KTtcXG40NDMyOlxcdFxcbjQ0MzM6XFx0XFx0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpO1xcbjQ0MzQ6XFx0fVxcbjQ0MzU6XFx0XFxuNDQzNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyMXhfb2ZfbWF0Y2hbXSA9IHtcXG40NDM3OlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwibW90b3Jjb21tLHl0OTIxNVxcXCIgfSxcXG40NDM4OlxcdFxcdHt9XFxuNDQzOTpcXHR9O1xcbjQ0NDA6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeXQ5MjF4X29mX21hdGNoKTtcXG40NDQxOlxcdFxcbjQ0NDI6XFx0c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7XFxuNDQ0MzpcXHRcXHQucHJvYmUgPSB5dDkyMXhfbWRpb19wcm9iZSxcXG40NDQ0OlxcdFxcdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXFxuNDQ0NTpcXHRcXHQuc2h1dGRvd24gPSB5dDkyMXhfbWRpb19zaHV0ZG93bixcXG40NDQ2OlxcdFxcdC5tZGlvZHJ2LmRyaXZlciA9IHtcXG40NDQ3OlxcdFxcdFxcdC5uYW1lID0gWVQ5MjFYX05BTUUsXFxuNDQ0ODpcXHRcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSB5dDkyMXhfb2ZfbWF0Y2gsXFxuNDQ0OTpcXHRcXHR9LFxcbjQ0NTA6XFx0fTtcXG40NDUxOlxcdFxcbjQ0NTI6XFx0bWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XFxuNDQ1MzpcXHRcXG40NDU0OlxcdE1PRFVMRV9BVVRIT1IoXFxcIkRhdmlkIFlhbmcgXFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG40NDU1OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiRHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IFN3aXRjaFxcXCIpO1xcbjQ0NTY6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxODoxMC4wODIzMzA3MDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ2MTQ2MTQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGFiaWxpdHkgQW5hbHlzaXM6IENhbiBgeXQ5MjF4X21kaW9fZHJpdmVyYCBCZSBGdXp6ZWQ/KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBJIGNhbiBmdXp6IHRoZSBgeXQ5MjF4X21kaW9fZHJpdmVyYC4gSXQncyBhbiBNRElPIGRldmljZSBkcml2ZXIsIGEgYG1kaW9fZHJpdmVyYCwgYW5kIGl0J3MgbWF0Y2hlZCB2aWEgRGV2aWNlIFRyZWUgd2l0aCB0aGUgYHl0OTIxeF9vZl9tYXRjaGAgZW50cnksIHdoaWNoIHRlbGxzIG1lIGl0J3MgY29tcGF0aWJsZSB3aXRoIFwibW90b3Jjb21tLHl0OTIxNS5cIiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgSSBjYW4gaW5zdGFudGlhdGUgYW5kIGZ1enogYW4gTURJTyBzd2l0Y2ggZHJpdmVyIGxpa2UgdGhpcyBpbiBhIHN0YW5kYXJkIFFFTVUvR0NFIHN5emthbGxlciBlbnZpcm9ubWVudC4gQ2FuIEkgZG8gdGhpcyB3aXRob3V0IHBoeXNpY2FsbHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFyZHdhcmU/XG5cbkkgbmVlZCB0byBhcHBseSB0aGUgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBjcml0ZXJpYSB0byBydWxlIGl0IG91dC4gVGhlIHJ1bGUgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gSXQgZmxhZ3MgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIEFTSUNzIG9yIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFZpcnR1YWwgYnVzZXMsIGxpa2UgdmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBhbmQgc29ja2V0cywgYXJlIGV4Y2VwdGlvbnMuXG5cblRoZSBiaWcgcXVlc3Rpb24gbm93OiBjYW4gTURJTyBkZXZpY2VzIG9yIERTQSBzd2l0Y2hlcywgaW4gZ2VuZXJhbCwgYmUgaW5zdGFudGlhdGVkIHdpdGhvdXQgYW4gYWN0dWFsIHBoeXNpY2FsIE9GIGRldmljZSB0cmVlIG9yIGEgcGh5c2ljYWwgTURJTyBidXM/IE9yIGlzIHRoZXJlIGEgd2F5IHRvIGVtdWxhdGUgb3IgaW5zdGFudGlhdGUgdGhlbSBmcm9tIHVzZXJzcGFjZT8gUGVyaGFwcyBzb21ldGhpbmcgdXNpbmcgbmV0bGluaywgYSBcImZha2UgbWRpbyxcIiBvciBzb21lIGtpbmQgb2YgbW9jayBpbXBsZW1lbnRhdGlvbj8gSSByZWFsbHkgbmVlZCB0byBjaGVjayBvdGhlciBEU0EgZHJpdmVycyB3aXRoaW4gdGhlIGtlcm5lbCBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgc29tZSBjbHVlcyBpbiB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucy4gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUncyBhbnkgcHJlY2VkZW50IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDI1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTg6MTMuNTQzNzk0MzU3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzMjQ0MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdG9yY29tbSx5dDkyMTVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sPTI3PXByb3BlcnRpZXM6XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTI4LSAgY29tcGF0aWJsZTpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6Mjk6ICAgIGNvbnN0OiBtb3RvcmNvbW0seXQ5MjE1XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTMwLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sPTYyPWV4YW1wbGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTcxLSAgICAgICAgc3dpdGNoQDFkIHtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6NzI6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIjtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwtNzMtICAgICAgICAgICAgLyogZGVmYXVsdCAweDFkLCBhbHRlcm5hdGUgMHgwICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NDM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ0Mzc6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIiB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0MzgtXFx0e31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTg6MTUuMTk3MDQ0MzAxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjM1MjY0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTURJTyBEZXZpY2UgQ3JlYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBNRElPIGRldmljZXMgYXJlIGFjdHVhbGx5IGJyb3VnaHQgaW50byBleGlzdGVuY2Ugd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBzaWRlc3RlcCB0aGUgdHlwaWNhbCBoYXJkd2FyZS1jZW50cmljIGFwcHJvYWNoIOKAkyBkbyB3ZSBoYXZlIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBNRElPIGRldmljZXMgcHVyZWx5IHRocm91Z2ggc3lzZnMsIGlvY3RsIGNhbGxzLCBvciBuZXRsaW5rIG1lY2hhbmlzbXM/IENhbiBhIHVzZXIgc3BhY2UgYXBwbGljYXRpb24gaW5zdGFudGlhdGUgdGhlc2UgZGV2aWNlcywgbXVjaCBsaWtlIHdoYXQgd2Ugc2VlIHdpdGggSTJDICh1c2luZyB0aGUgYC9kZXYvbmV3X2RldmljZWAgYXBwcm9hY2gpPyBUaGUgZnVuZGFtZW50YWwgcXVlc3Rpb24gaXMgd2hldGhlciBNRElPIHN3aXRjaCBkcml2ZXJzIGFyZSAqcmVxdWlyZWQqLCBhbmQgd2hhdCByb2xlIHBoeXNpY2FsIG9yIE9GIGhhcmR3YXJlIHBsYXlzLCBvciBpZiB0aGVyZSdzIGEgbW9yZSBzb2Z0d2FyZS1kZWZpbmVkIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNwZWN0cnVtIG9mIGluc3RhbnRpYXRpb24gbWV0aG9kcyB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA4MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE4OjE3LjQyMDU3NDMwNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2Mzg1MzA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvX2RldmljZV9jcmVhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NDQ2PXN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDY2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ2NzpcXHRzd2l0Y2hfbWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIDMxKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjgtXFx0aWYgKElTX0VSUihzd2l0Y2hfbWRpb2RldikpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz01Mj1zdGF0aWMgaW50IG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNTgtXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NTk6XFx0bWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShtZGlvLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy02MC1cXHRpZiAoSVNfRVJSKG1kaW9kZXYpKVxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1seW54LmM9MzEwPXN0cnVjdCBwaHlsaW5rX3BjcyAqbHlueF9wY3NfY3JlYXRlX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLWx5bnguYy0zMTQtXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1seW54LmM6MzE1OlxcdG1kaW8gPSBtZGlvX2RldmljZV9jcmVhdGUoYnVzLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLWx5bnguYy0zMTYtXFx0aWYgKElTX0VSUihtZGlvKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1wbGF0LmM9MzM3PXN0YXRpYyBpbnQgeHBjc19wbGF0X2luaXRfZGV2KHN0cnVjdCBkd194cGNzX3BsYXQgKnB4cGNzKVxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXBsYXQuYy0zNDMtXFx0LyogVGhlcmUgaXMgYSBzaW5nbGUgbWVtb3J5LW1hcHBlZCBEVyBYUENTIGRldmljZSAqL1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1wbGF0LmM6MzQ0OlxcdG1kaW9kZXYgPSBtZGlvX2RldmljZV9jcmVhdGUocHhwY3MtXFx1MDAzZWJ1cywgMCk7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXBsYXQuYy0zNDUtXFx0aWYgKElTX0VSUihtZGlvZGV2KSlcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jPTE2MjE9c3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjI1LVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2MjY6XFx0bWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIpO1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MjctXFx0aWYgKElTX0VSUihtZGlvZGV2KSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTEwNzQ9c3RhdGljIGludCBhbjg4MTFoYl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA5Mi1cXHQgKi9cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDkzOlxcdG1kaW9kZXYgPSBtZGlvX2RldmljZV9jcmVhdGUocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyxcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMDk0LVxcdFxcdFxcdFxcdCAgICAgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgKyBFTjg4MTFIX1BCVVNfQUREUl9PRkZTKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTExMz1zdGF0aWMgdm9pZCBtZGlvX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTExOC1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxMTk6c3RydWN0IG1kaW9fZGV2aWNlICptZGlvX2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTIwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE0Mi19XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MTQzOkVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfY3JlYXRlKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xNDQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21kaW8uaD05ND12b2lkIG1kaW9fZGV2aWNlX2ZyZWUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcXG5pbmNsdWRlL2xpbnV4L21kaW8uaDo5NTpzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcik7XFxuaW5jbHVkZS9saW51eC9tZGlvLmgtOTYtaW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE4OjE4Ljg4NDQzMzM2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDgzNzMzMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1vdG9yY29tbSBZVDkyMTUgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2gsIHdoaWNoIHNlZW1zIHRvIGZvY3VzIG9uIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IEV0aGVybmV0IHN3aXRjaCBkcml2ZXIsIGlzIGV2ZW4gKmZ1enphYmxlKiB3aXRoaW4gdGhlIGNvbnN0cmFpbnRzIG9mIG91ciBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUga2V5IGhlcmUgaXMgcmVhY2hhYmlsaXR5LiBUaGUgYG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlYCBmdW5jdGlvbiBjYWxsIHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCB3aGVuIGRlYWxpbmcgd2l0aCBPcGVuRmlybXdhcmUgRGV2aWNlIFRyZWUgbm9kZXMsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGUgYHl0OTIxeF9tZGlvX2RyaXZlcmAgaXMgdHJpZ2dlcmVkIGluIGFueSBvdGhlciB3YXkuIFF1aWNrbHkgY2hlY2tpbmcsIHRoZSBkcml2ZXIgdXNlcyBhbiBgb2ZfbWF0Y2hfdGFibGVgICggYHl0OTIxeF9vZl9tYXRjaGApLCBidXQgbm8gYGlkX3RhYmxlYCBvciBhbnl0aGluZyBlbHNlLlxuXG5Ob3csIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBNb3RvcmNvbW0gWVQ5MjE1IGlzIGEgKnBoeXNpY2FsKiBzd2l0Y2ggY2hpcCwgYW4gQVNJQyBjb250cm9sbGVkIHZpYSBNRElPLiBJdCdzIHVzdWFsbHkgZm91bmQgb24gZW1iZWRkZWQgc3lzdGVtcywgc3BlY2lmaWNhbGx5IG9uZXMgdXNpbmcgZGV2aWNlIHRyZWVzIHRvIGRlc2NyaWJlIHRoZSBoYXJkd2FyZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBRRU1VL0dDRSwgb3VyIHN0YW5kYXJkIGZ1enppbmcgcGxhdGZvcm1zLCBlbXVsYXRlIHRoaXMuIEkga25vdyB0aGV5IGRvbid0OyBpdCdzIGEgZGVkaWNhdGVkIHBpZWNlIG9mIGhhcmR3YXJlLlxuXG5SaWdodCwgdGltZSB0byBjb25zdWx0IHRoZSByZWFjaGFiaWxpdHkgZ3VpZGVsaW5lcy4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGNydWNpYWwuIFRoZSBndWlkZWxpbmVzIGNsZWFybHkgc3RhdGUgdGhhdCBmdXp6aW5nIGNhbiAqb25seSogZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQncyBleGVjdXRhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQ29kZSB0aGF0J3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHNob3VsZCAqbm90KiBiZSBmdXp6ZWQuIFRoZSBcIm5lZ2F0aXZlIGNyaXRlcmlhXCIgc2VjdGlvbiBmdXJ0aGVyIGNsYXJpZmllcyB0aGlzIHdpdGggZXhhbXBsZXMuIFZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBsaWtlIHRoaXMsIHJlcXVpcmluZyBwaHlzaWNhbCBjYXJkcyBvciBBU0lDcywgYXJlIGV4cGxpY2l0bHkgZXhjbHVkZWQuIFRoZSBndWlkZWxpbmVzIHNwZWNpZmljYWxseSBjYWxsIG91dCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIGFuZCBQQ0llIHN3aXRjaGVzLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBtb2RpZnlpbmcgZmlsZXMgd2l0aGluIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2AsIHdoaWNoIGlzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IEV0aGVybmV0IHN3aXRjaCBkcml2ZXIuIFRoaXMgaXMgYSB2ZXJ5IHN0cm9uZyBpbmRpY2F0b3IuIFRoaXMgY29uZmlybXMgbXkgc3VzcGljaW9uIHRoYXQgaXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gZnVuY3Rpb24uIEl0IHRvdWNoZXMgdGhlIE1ha2VmaWxlLCBjaGlwLmMsIGNoaXAuaCwgbWliLmMsIG1pYi5oLCBzbWkuYyBhbmQgc21pLmguXG5cblNvIHRoZSBkcml2ZXIncyBjb2RlIGlzIG5vdCByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnQsIEkgbmVlZCB0byBjb25maXJtIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLiBBIGNhcmVmdWwgZGlmZiBjb25maXJtcyB0aGlzOiB0aGUgY2hhbmdlcyBhZGQgYSBuZXcgTUlCIGhhbmRsaW5nLCBidXQgZXZlcnl0aGluZyBpcyBjb250YWluZWQgd2l0aGluIHRoYXQgc3BlY2lmaWMgZHJpdmVyIGRpcmVjdG9yeS4gSXQncyBtb3ZpbmcgTUlCIGhhbmRsaW5nIHRvIG1pYi5jL2gsIGFkZGluZyBzb21lIG5ldyBgeXQ5MjF4X2NvdW50ZXJfcmVhZGAgZnVuY3Rpb25zLiBBbGwgd2l0aGluIHRoZSBoYXJkd2FyZSBzd2l0Y2guXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGRyaXZlciByZXF1aXJlcyBhIHBoeXNpY2FsIE1ESU8tYXR0YWNoZWQgRXRoZXJuZXQgc3dpdGNoIEFTSUMsIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCwgdGhlIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHdpdGhpbiBvdXIgc3RhbmRhcmQgZnV6emluZyBzZXR1cC4gSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoICpzaG91bGQgbm90KiBiZSBmdXp6ZWQuXG5cbk15IGRlY2lzaW9uOlxuXG4qICAgYFdvcnRoRnV6emluZzogZmFsc2VgXG4qICAgYEZvY3VzU3ltYm9sczogW11gXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtdYFxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQ6IFRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgY29kZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIHN3aXRjaCBkcml2ZXIsIGEgaGFyZHdhcmUgZHJpdmVyIGZvciBhbiBleHRlcm5hbCBNRElPLWF0dGFjaGVkIEV0aGVybmV0IHN3aXRjaCBBU0lDLiBTdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cywgUUVNVSBhbmQgR0NFLCBkbyBub3QgZW11bGF0ZSB0aGlzIGhhcmR3YXJlLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlxuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDM3LCJPdXRwdXRUb2tlbnMiOjk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE4OjI2LjM2ODE2OTQ4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLyksIHdoaWNoIGludGVyYWN0cyB3aXRoIGEgc3BlY2lmaWMgcGh5c2ljYWwgTURJTy1jb25uZWN0ZWQgc3dpdGNoIEFTSUMuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vKSwgd2hpY2ggaW50ZXJhY3RzIHdpdGggYSBzcGVjaWZpYyBwaHlzaWNhbCBNRElPLWNvbm5lY3RlZCBzd2l0Y2ggQVNJQy4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxODoyNi4zNjgxOTY5MTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowg57hz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 23:52:12 +0000 UTC FinishedAt: 2026-09-05 00:18:28 +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+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vKSwgd2hpY2ggaW50ZXJhY3RzIHdpdGggYSBzcGVjaWZpYyBwaHlzaWNhbCBNRElPLWNvbm5lY3RlZCBzd2l0Y2ggQVNJQy4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzIxN2EyNjI3NGU3NTkxNjI0Y2E3YTA4OTNkZDA2MDYzODlhMWZkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDA6MTc6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbmluZGV4IGFlYjEyY2I5MWY5MzUuLjVjMmQzNGVjMDVmYzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG5AQCAtMiw0ICYjNDM7Miw1IEBAXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiB5dDkyMXgtb2JqcyA6PSBjaGlwLm9cbiB5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMub1xuJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gbWliLm9cbiB5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCBkNjYzYWYwMTBmNDMxLi5iNDA1OTA1M2VmMTUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTksNiAmIzQzOzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvcnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91NjRfc3RhdHNfc3luYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzY3AuaFx1MDAzZVxuQEAgLTI3LDc1ICYjNDM7MjgsOSBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2xlZHMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDttaWIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4gXG4tc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG4tXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbi1cdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4tXHRjb25zdCBjaGFyICpuYW1lO1xuLX07XG4tXG4tI2RlZmluZSBNSUJfREVTQyhfc2l6ZSwgX29mZnNldCwgX25hbWUpIFxcXG4tXHR7X3NpemUsIF9vZmZzZXQsIF9uYW1lfVxuLVxuLS8qIE11c3QgYWdyZWUgd2l0aCB5dDkyMXhfbWliXG4tICpcbi0gKiBVbnN0cnVjdHVyZWQgZmllbGRzIChuYW1lICE9IE5VTEwpIHdpbGwgYXBwZWFyIGluIGdldF9ldGh0b29sX3N0YXRzKCksXG4tICogc3RydWN0dXJlZCBnbyB0byB0aGVpciAqX3N0YXRzKCkgbWV0aG9kcywgYnV0IHdlIG5lZWQgdGhlaXIgc2l6ZXMgYW5kIG9mZnNldHNcbi0gKiB0byBwZXJmb3JtIDMyYml0IE1JQiBvdmVyZmxvdyB3cmFwYXJvdW5kLlxuLSAqL1xuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHl0OTIxeF9taWJfZGVzY3NbXSA9IHtcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1QsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9NVUxUSUNBU1QsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0NSQ19FUlIsIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0FMSUdOX0VSUiwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfVU5ERVJTSVpFX0VSUiwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfRlJBR19FUlIsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NCwgTlVMTCksXG4tXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyNywgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEyOF9UT18yNTUsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8yNTZfVE9fNTExLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMDI0X1RPXzE1MTgsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksXG4tXHRNSUJfREVTQygyLCBZVDkyMVhfTUlCX0RBVEFfUlhfR09PRF9CWVRFUywgTlVMTCksXG4tXG4tXHRNSUJfREVTQygyLCBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTLCBcJiMzNDtSeEJhZEJ5dGVzXCYjMzQ7KSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9PVkVSU0laRV9FUlIsIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0RST1BQRUQsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0JST0FEQ0FTVCwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEFVU0UsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJQ0FTVCwgTlVMTCksXG4tXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUiwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY0LCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTI4X1RPXzI1NSwgTlVMTCksXG4tXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzI1Nl9UT181MTEsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyMywgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzE1MTlfVE9fTUFYLCBOVUxMKSxcbi1cbi1cdE1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9DT0xMSVNJT04sIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04sIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTiwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfU0lOR0xFX0NPTExJU0lPTiwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtULCBOVUxMKSxcbi1cbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9ERUZFUlJFRCwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTEFURV9DT0xMSVNJT04sIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX09BTSwgXCYjMzQ7UnhPQU1cJiMzNDspLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX09BTSwgXCYjMzQ7VHhPQU1cJiMzNDspLFxuLX07XG4tXG4gc3RydWN0IHl0OTIxeF9pbmZvIHtcbiBcdGNvbnN0IGNoYXIgKm5hbWU7XG4gXHR1MTYgbWFqb3I7XG5AQCAtMTU0LDE0ICYjNDM7ODksNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuIFxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcdDQwOTVcbiBcbi0vKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuLSAqXG4tICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuLSAqIHRoZXJlKSwgd2UgaGF2ZSB0byBwb2xsIHN0YXRzIG1vcmUgZnJlcXVlbnRseSB0aGVuIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC5cbi0gKiBGb3Igb3ZlcmZsb3cgcHJvdGVjdGlvbiwgbm9ybWFsbHksIDEwMCBzZWMgaW50ZXJ2YWwgc2hvdWxkIGhhdmUgYmVlbiBPSy5cbi0gKi9cbi0jZGVmaW5lIFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTXHQoMyAqIEhaKVxuLVxuIHN0cnVjdCB5dDkyMXhfcmVnX21kaW8ge1xuIFx0c3RydWN0IG1paV9idXMgKmJ1cztcbiBcdGludCBhZGRyO1xuQEAgLTU0NCwyOTQgJiM0Mzs0NzEsNiBAQCB5dDkyMXhfbWJ1c19leHRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qIFJlYWQgYW5kIGhhbmRsZSBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLiBNSUIgYnVmZmVyIG11c3QgYmUgemVyb2VkIGJlZm9yZS4gKi9cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWFkX21pYihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuLXtcbi1cdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuLVx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuLVx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbi1cdGludCByZXMgPSAwO1xuLVxuLVx0LyogUmVhZGluZyBvZiB5dDkyMXhfcG9ydDo6bWliIGlzIG5vdCBwcm90ZWN0ZWQgYnkgYSBsb2NrIGFuZCBpdCYjMzk7cyB2YWluXG4tXHQgKiB0byBrZWVwIGl0cyBjb25zaXN0ZW5jeSwgc2luY2Ugd2UgaGF2ZSB0byByZWFkIHJlZ2lzdGVycyBvbmUgYnkgb25lXG4tXHQgKiBhbmQgdGhlcmUgaXMgbm8gd2F5IHRvIG1ha2UgYSBzbmFwc2hvdCBvZiBNSUIgc3RhdHMuXG4tXHQgKlxuLVx0ICogV3JpdGluZyAoYnkgdGhpcyBmdW5jdGlvbiBvbmx5KSBpcyBhbmQgc2hvdWxkIGJlIHByb3RlY3RlZCBieVxuLVx0ICogcmVnX2xvY2suXG4tXHQgKi9cbi1cbi1cdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcbi1cdFx0dTMyIHJlZyA9IFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpICYjNDM7IGRlc2MtXHUwMDNlb2Zmc2V0O1xuLVx0XHR1NjQgKnZhbHAgPSBcdTAwMjYoKHU2NCAqKW1pYilbaV07XG4tXHRcdHUzMiB2YWwwO1xuLVx0XHR1NjQgdmFsO1xuLVxuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2YWwwKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0aWYgKGRlc2MtXHUwMDNlc2l6ZSBcdTAwM2M9IDEpIHtcbi1cdFx0XHR1NjQgb2xkX3ZhbCA9ICp2YWxwO1xuLVxuLVx0XHRcdHZhbCA9IChvbGRfdmFsIFx1MDAyNiB+KHU2NClVMzJfTUFYKSB8IHZhbDA7XG4tXHRcdFx0aWYgKHZhbCBcdTAwM2Mgb2xkX3ZhbClcbi1cdFx0XHRcdHZhbCAmIzQzOz0gMXVsbCBcdTAwM2NcdTAwM2MgMzI7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0dTMyIHZhbDE7XG4tXG4tXHRcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0LCBcdTAwMjZ2YWwxKTtcbi1cdFx0XHRpZiAocmVzKVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0dmFsID0gKCh1NjQpdmFsMSBcdTAwM2NcdTAwM2MgMzIpIHwgdmFsMDtcbi1cdFx0fVxuLVxuLVx0XHRXUklURV9PTkNFKCp2YWxwLCB2YWwpO1xuLVx0fVxuLVxuLVx0cHAtXHUwMDNlcnhfZnJhbWVzID0gbWliLVx1MDAzZXJ4XzY0Ynl0ZSAmIzQzOyBtaWItXHUwMDNlcnhfNjVfMTI3Ynl0ZSAmIzQzO1xuLVx0XHRcdG1pYi1cdTAwM2VyeF8xMjhfMjU1Ynl0ZSAmIzQzOyBtaWItXHUwMDNlcnhfMjU2XzUxMWJ5dGUgJiM0Mztcbi1cdFx0XHRtaWItXHUwMDNlcnhfNTEyXzEwMjNieXRlICYjNDM7IG1pYi1cdTAwM2VyeF8xMDI0XzE1MThieXRlICYjNDM7XG4tXHRcdFx0bWliLVx1MDAzZXJ4X2p1bWJvO1xuLVx0cHAtXHUwMDNldHhfZnJhbWVzID0gbWliLVx1MDAzZXR4XzY0Ynl0ZSAmIzQzOyBtaWItXHUwMDNldHhfNjVfMTI3Ynl0ZSAmIzQzO1xuLVx0XHRcdG1pYi1cdTAwM2V0eF8xMjhfMjU1Ynl0ZSAmIzQzOyBtaWItXHUwMDNldHhfMjU2XzUxMWJ5dGUgJiM0Mztcbi1cdFx0XHRtaWItXHUwMDNldHhfNTEyXzEwMjNieXRlICYjNDM7IG1pYi1cdTAwM2V0eF8xMDI0XzE1MThieXRlICYjNDM7XG4tXHRcdFx0bWliLVx1MDAzZXR4X2p1bWJvO1xuLVxuLVx0aWYgKHJlcylcbi1cdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxcblwmIzM0OywgXCYjMzQ7cmVhZCBzdGF0cyBmb3JcJiMzNDssXG4tXHRcdFx0cG9ydCwgcmVzKTtcbi1cdHJldHVybiByZXM7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHl0OTIxeF9wb2xsX21pYihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4te1xuLVx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IGNvbnRhaW5lcl9vZl9jb25zdCh3b3JrLCBzdHJ1Y3QgeXQ5MjF4X3BvcnQsXG4tXHRcdFx0XHRcdFx0ICAgIG1pYl9yZWFkLndvcmspO1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gKHZvaWQgKikocHAgLSBwcC1cdTAwM2VpbmRleCkgLVxuLVx0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0cyk7XG4tXHR1bnNpZ25lZCBsb25nIGRlbGF5ID0gWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVM7XG4tXHRpbnQgcG9ydCA9IHBwLVx1MDAzZWluZGV4O1xuLVx0aW50IHJlcztcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXHRyZXMgPSB5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXHRpZiAocmVzKVxuLVx0XHRkZWxheSAqPSA0O1xuLVxuLVx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkLCBkZWxheSk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkXG4teXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LFxuLVx0XHQgICAgICAgdWludDhfdCAqZGF0YSlcbi17XG4tXHRpZiAoc3RyaW5nc2V0ICE9IEVUSF9TU19TVEFUUylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuLVxuLVx0XHRpZiAoZGVzYy1cdTAwM2VuYW1lKVxuLVx0XHRcdGV0aHRvb2xfcHV0cyhcdTAwMjZkYXRhLCBkZXNjLVx1MDAzZW5hbWUpO1xuLVx0fVxuLX1cbi1cbi1zdGF0aWMgdm9pZFxuLXl0OTIxeF9kc2FfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdWludDY0X3QgKmRhdGEpXG4te1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuLVx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4tXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuLVx0c2l6ZV90IGo7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVxuLVx0aiA9IDA7XG4tXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG4tXG4tXHRcdGlmICghZGVzYy1cdTAwM2VuYW1lKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRkYXRhW2pdID0gKCh1NjQgKiltaWIpW2ldO1xuLVx0XHRqJiM0MzsmIzQzOztcbi1cdH1cbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxuLXtcbi1cdGludCBjbnQgPSAwO1xuLVxuLVx0aWYgKHNzZXQgIT0gRVRIX1NTX1NUQVRTKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcbi1cbi1cdFx0aWYgKGRlc2MtXHUwMDNlbmFtZSlcbi1cdFx0XHRjbnQmIzQzOyYjNDM7O1xuLVx0fVxuLVxuLVx0cmV0dXJuIGNudDtcbi19XG4tXG4tc3RhdGljIHZvaWRcbi15dDkyMXhfZHNhX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG4te1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuLVx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4tXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi1cdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi1cbi1cdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LID0gcHAtXHUwMDNldHhfZnJhbWVzO1xuLVx0bWFjX3N0YXRzLVx1MDAzZVNpbmdsZUNvbGxpc2lvbkZyYW1lcyA9IG1pYi1cdTAwM2V0eF9zaW5nbGVfY29sbGlzaW9ucztcbi1cdG1hY19zdGF0cy1cdTAwM2VNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyA9IG1pYi1cdTAwM2V0eF9tdWx0aXBsZV9jb2xsaXNpb25zO1xuLVx0bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1JlY2VpdmVkT0sgPSBwcC1cdTAwM2VyeF9mcmFtZXM7XG4tXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVDaGVja1NlcXVlbmNlRXJyb3JzID0gbWliLVx1MDAzZXJ4X2NyY19lcnJvcnM7XG4tXHRtYWNfc3RhdHMtXHUwMDNlQWxpZ25tZW50RXJyb3JzID0gbWliLVx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnM7XG4tXHRtYWNfc3RhdHMtXHUwMDNlT2N0ZXRzVHJhbnNtaXR0ZWRPSyA9IG1pYi1cdTAwM2V0eF9nb29kX2J5dGVzO1xuLVx0bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1dpdGhEZWZlcnJlZFhtaXNzaW9ucyA9IG1pYi1cdTAwM2V0eF9kZWZlcnJlZDtcbi1cdG1hY19zdGF0cy1cdTAwM2VMYXRlQ29sbGlzaW9ucyA9IG1pYi1cdTAwM2V0eF9sYXRlX2NvbGxpc2lvbnM7XG4tXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzQWJvcnRlZER1ZVRvWFNDb2xscyA9IG1pYi1cdTAwM2V0eF9hYm9ydGVkX2Vycm9ycztcbi1cdC8qIG1hY19zdGF0cy1cdTAwM2VGcmFtZXNMb3N0RHVlVG9JbnRNQUNYbWl0RXJyb3IgKi9cbi1cdC8qIG1hY19zdGF0cy1cdTAwM2VDYXJyaWVyU2Vuc2VFcnJvcnMgKi9cbi1cdG1hY19zdGF0cy1cdTAwM2VPY3RldHNSZWNlaXZlZE9LID0gbWliLVx1MDAzZXJ4X2dvb2RfYnl0ZXM7XG4tXHQvKiBtYWNfc3RhdHMtXHUwMDNlRnJhbWVzTG9zdER1ZVRvSW50TUFDUmN2RXJyb3IgKi9cbi1cdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0sgPSBtaWItXHUwMDNldHhfbXVsdGljYXN0O1xuLVx0bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyA9IG1pYi1cdTAwM2V0eF9icm9hZGNhc3Q7XG4tXHQvKiBtYWNfc3RhdHMtXHUwMDNlRnJhbWVzV2l0aEV4Y2Vzc2l2ZURlZmVycmFsICovXG4tXHRtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IG1pYi1cdTAwM2VyeF9tdWx0aWNhc3Q7XG4tXHRtYWNfc3RhdHMtXHUwMDNlQnJvYWRjYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IG1pYi1cdTAwM2VyeF9icm9hZGNhc3Q7XG4tXHQvKiBtYWNfc3RhdHMtXHUwMDNlSW5SYW5nZUxlbmd0aEVycm9ycyAqL1xuLVx0LyogbWFjX3N0YXRzLVx1MDAzZU91dE9mUmFuZ2VMZW5ndGhGaWVsZCAqL1xuLVx0bWFjX3N0YXRzLVx1MDAzZUZyYW1lVG9vTG9uZ0Vycm9ycyA9IG1pYi1cdTAwM2VyeF9vdmVyc2l6ZV9lcnJvcnM7XG4tfVxuLVxuLXN0YXRpYyB2b2lkXG4teXQ5MjF4X2RzYV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcbi17XG4tXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4tXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbi1cdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVxuLVx0Y3RybF9zdGF0cy1cdTAwM2VNQUNDb250cm9sRnJhbWVzVHJhbnNtaXR0ZWQgPSBtaWItXHUwMDNldHhfcGF1c2U7XG4tXHRjdHJsX3N0YXRzLVx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCA9IG1pYi1cdTAwM2VyeF9wYXVzZTtcbi1cdC8qIGN0cmxfc3RhdHMtXHUwMDNlVW5zdXBwb3J0ZWRPcGNvZGVzUmVjZWl2ZWQgKi9cbi19XG4tXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSB5dDkyMXhfcm1vbl9yYW5nZXNbXSA9IHtcbi1cdHsgMCwgNjQgfSxcbi1cdHsgNjUsIDEyNyB9LFxuLVx0eyAxMjgsIDI1NSB9LFxuLVx0eyAyNTYsIDUxMSB9LFxuLVx0eyA1MTIsIDEwMjMgfSxcbi1cdHsgMTAyNCwgMTUxOCB9LFxuLVx0eyAxNTE5LCBZVDkyMVhfRlJBTUVfU0laRV9NQVggfSxcbi1cdHt9XG4tfTtcbi1cbi1zdGF0aWMgdm9pZFxuLXl0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi1cdFx0XHQgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXG4tXHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXG4te1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuLVx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4tXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi1cdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi1cbi1cdCpyYW5nZXMgPSB5dDkyMXhfcm1vbl9yYW5nZXM7XG4tXG4tXHRybW9uX3N0YXRzLVx1MDAzZXVuZGVyc2l6ZV9wa3RzID0gbWliLVx1MDAzZXJ4X3VuZGVyc2l6ZV9lcnJvcnM7XG4tXHRybW9uX3N0YXRzLVx1MDAzZW92ZXJzaXplX3BrdHMgPSBtaWItXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VmcmFnbWVudHMgPSBtaWItXHUwMDNlcnhfYWxpZ25tZW50X2Vycm9ycztcbi1cdC8qIHJtb25fc3RhdHMtXHUwMDNlamFiYmVycyAqL1xuLVxuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzBdID0gbWliLVx1MDAzZXJ4XzY0Ynl0ZTtcbi1cdHJtb25fc3RhdHMtXHUwMDNlaGlzdFsxXSA9IG1pYi1cdTAwM2VyeF82NV8xMjdieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzJdID0gbWliLVx1MDAzZXJ4XzEyOF8yNTVieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzNdID0gbWliLVx1MDAzZXJ4XzI1Nl81MTFieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzRdID0gbWliLVx1MDAzZXJ4XzUxMl8xMDIzYnl0ZTtcbi1cdHJtb25fc3RhdHMtXHUwMDNlaGlzdFs1XSA9IG1pYi1cdTAwM2VyeF8xMDI0XzE1MThieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzZdID0gbWliLVx1MDAzZXJ4X2p1bWJvO1xuLVxuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzBdID0gbWliLVx1MDAzZXR4XzY0Ynl0ZTtcbi1cdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFsxXSA9IG1pYi1cdTAwM2V0eF82NV8xMjdieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzJdID0gbWliLVx1MDAzZXR4XzEyOF8yNTVieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzNdID0gbWliLVx1MDAzZXR4XzI1Nl81MTFieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzRdID0gbWliLVx1MDAzZXR4XzUxMl8xMDIzYnl0ZTtcbi1cdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs1XSA9IG1pYi1cdTAwM2V0eF8xMDI0XzE1MThieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzZdID0gbWliLVx1MDAzZXR4X2p1bWJvO1xuLX1cbi1cbi1zdGF0aWMgdm9pZFxuLXl0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi1cdFx0ICAgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4te1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuLVx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4tXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuLVxuLVx0c3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9IG1pYi1cdTAwM2VyeF91bmRlcnNpemVfZXJyb3JzICYjNDM7XG4tXHRcdFx0XHQgIG1pYi1cdTAwM2VyeF9mcmFnbWVudF9lcnJvcnM7XG4tXHRzdGF0cy1cdTAwM2VyeF9vdmVyX2Vycm9ycyA9IG1pYi1cdTAwM2VyeF9vdmVyc2l6ZV9lcnJvcnM7XG4tXHRzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzID0gbWliLVx1MDAzZXJ4X2NyY19lcnJvcnM7XG4tXHRzdGF0cy1cdTAwM2VyeF9mcmFtZV9lcnJvcnMgPSBtaWItXHUwMDNlcnhfYWxpZ25tZW50X2Vycm9ycztcbi1cdC8qIHN0YXRzLVx1MDAzZXJ4X2ZpZm9fZXJyb3JzICovXG4tXHQvKiBzdGF0cy1cdTAwM2VyeF9taXNzZWRfZXJyb3JzICovXG4tXG4tXHRzdGF0cy1cdTAwM2V0eF9hYm9ydGVkX2Vycm9ycyA9IG1pYi1cdTAwM2V0eF9hYm9ydGVkX2Vycm9ycztcbi1cdC8qIHN0YXRzLVx1MDAzZXR4X2NhcnJpZXJfZXJyb3JzICovXG4tXHRzdGF0cy1cdTAwM2V0eF9maWZvX2Vycm9ycyA9IG1pYi1cdTAwM2V0eF91bmRlcnNpemVfZXJyb3JzO1xuLVx0Lyogc3RhdHMtXHUwMDNldHhfaGVhcnRiZWF0X2Vycm9ycyAqL1xuLVx0c3RhdHMtXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IG1pYi1cdTAwM2V0eF9sYXRlX2NvbGxpc2lvbnM7XG4tXG4tXHRzdGF0cy1cdTAwM2VyeF9wYWNrZXRzID0gcHAtXHUwMDNlcnhfZnJhbWVzO1xuLVx0c3RhdHMtXHUwMDNldHhfcGFja2V0cyA9IHBwLVx1MDAzZXR4X2ZyYW1lcztcbi1cdHN0YXRzLVx1MDAzZXJ4X2J5dGVzID0gbWliLVx1MDAzZXJ4X2dvb2RfYnl0ZXMgLSBFVEhfRkNTX0xFTiAqIHN0YXRzLVx1MDAzZXJ4X3BhY2tldHM7XG4tXHRzdGF0cy1cdTAwM2V0eF9ieXRlcyA9IG1pYi1cdTAwM2V0eF9nb29kX2J5dGVzIC0gRVRIX0ZDU19MRU4gKiBzdGF0cy1cdTAwM2V0eF9wYWNrZXRzO1xuLVx0c3RhdHMtXHUwMDNlcnhfZXJyb3JzID0gc3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyAmIzQzOyBzdGF0cy1cdTAwM2VyeF9vdmVyX2Vycm9ycyAmIzQzO1xuLVx0XHRcdCAgIHN0YXRzLVx1MDAzZXJ4X2NyY19lcnJvcnMgJiM0Mzsgc3RhdHMtXHUwMDNlcnhfZnJhbWVfZXJyb3JzO1xuLVx0c3RhdHMtXHUwMDNldHhfZXJyb3JzID0gc3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgJiM0Mzsgc3RhdHMtXHUwMDNldHhfZmlmb19lcnJvcnMgJiM0Mztcbi1cdFx0XHQgICBzdGF0cy1cdTAwM2V0eF93aW5kb3dfZXJyb3JzO1xuLVx0c3RhdHMtXHUwMDNlcnhfZHJvcHBlZCA9IG1pYi1cdTAwM2VyeF9kcm9wcGVkO1xuLVx0Lyogc3RhdHMtXHUwMDNldHhfZHJvcHBlZCAqL1xuLVx0c3RhdHMtXHUwMDNlbXVsdGljYXN0ID0gbWliLVx1MDAzZXJ4X211bHRpY2FzdDtcbi1cdHN0YXRzLVx1MDAzZWNvbGxpc2lvbnMgPSBtaWItXHUwMDNldHhfY29sbGlzaW9ucztcbi19XG4tXG4tc3RhdGljIHZvaWRcbi15dDkyMXhfZHNhX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLVx0XHRcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcbi17XG4tXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4tXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbi1cdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVxuLVx0cGF1c2Vfc3RhdHMtXHUwMDNldHhfcGF1c2VfZnJhbWVzID0gbWliLVx1MDAzZXR4X3BhdXNlO1xuLVx0cGF1c2Vfc3RhdHMtXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gbWliLVx1MDAzZXJ4X3BhdXNlO1xuLX1cbi1cbiBzdGF0aWMgaW50XG4geXQ5MjF4X3NldF9lZWUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZSlcbiB7XG5AQCAtMzk1MywxMSAmIzQzOzM1OTIsMTQgQEAgeXQ5MjF4X3BoeWxpbmtfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG4ge1xuIFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV9waHlsaW5rX3RvX3BvcnQoY29uZmlnKTtcbiBcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRwLVx1MDAzZWRzKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG07XG4gXHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuIFx0aW50IHJlcztcbiBcbiBcdC8qIE5vIG5lZWQgdG8gc3luYzsgcG9ydCBjb250cm9sIGJsb2NrIGlzIGhvbGQgdW50aWwgZGV2aWNlIHJlbW92ZSAqL1xuLVx0Y2FuY2VsX2RlbGF5ZWRfd29yayhcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdLm1pYl9yZWFkKTtcbiYjNDM7XHRwbSA9IHByaXYtXHUwMDNlcG9ydHNbcG9ydF0ubWliO1xuJiM0MztcdGlmIChwbSlcbiYjNDM7XHRcdGNhbmNlbF9kZWxheWVkX3dvcmsoXHUwMDI2cG0tXHUwMDNld29yayk7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuIFx0cmVzID0geXQ5MjF4X3BvcnRfZG93bihwcml2LCBwb3J0KTtcbkBAIC0zOTc2LDYgJiM0MzszNjE4LDcgQEAgeXQ5MjF4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4ge1xuIFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV9waHlsaW5rX3RvX3BvcnQoY29uZmlnKTtcbiBcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRwLVx1MDAzZWRzKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG07XG4gXHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuIFx0aW50IHJlcztcbiBcbkBAIC0zOTg4LDcgJiM0MzszNjMxLDkgQEAgeXQ5MjF4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHRcdGRldl9lcnIoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcXG5cJiMzNDssIFwmIzM0O2JyaW5nIHVwXCYjMzQ7LFxuIFx0XHRcdHBvcnQsIHJlcyk7XG4gXG4tXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5taWJfcmVhZCwgMCk7XG4mIzQzO1x0cG0gPSBwcml2LVx1MDAzZXBvcnRzW3BvcnRdLm1pYjtcbiYjNDM7XHRpZiAocG0pXG4mIzQzO1x0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cG0tXHUwMDNld29yaywgMCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkXG5AQCAtNDEwOCwxMSAmIzQzOzM3NTMsMzYgQEAgeXQ5MjF4X2RzYV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRyZXR1cm4gRFNBX1RBR19QUk9UT19ZVDkyMVg7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB5dDkyMXhfZHNhX3BvcnRfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cdTAwM2VtaWI7XG4mIzQzO1xuJiM0MztcdGlmIChwbSlcbiYjNDM7XHRcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cG0tXHUwMDNld29yayk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB5dDkyMXhfZHNhX3BvcnRfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVx1MDAzZW1pYjtcbiBcdGludCByZXM7XG4gXG4mIzQzO1x0aWYgKCFwbSBcdTAwMjZcdTAwMjYgIShCSVQocG9ydCkgXHUwMDI2IChwcml2LVx1MDAzZWluZm8tXHUwMDNlaW50ZXJuYWxfbWFzayB8XG4mIzQzO1x0XHQgICAgIHByaXYtXHUwMDNlaW5mby1cdTAwM2VleHRlcm5hbF9tYXNrKSkpIHtcbiYjNDM7XHRcdHBtID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwbSksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFwbSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRwcC1cdTAwM2VtaWIgPSBwbTtcbiYjNDM7XG4mIzQzO1x0XHRwbS1cdTAwM2Vwb3J0ID0gcHA7XG4mIzQzO1x0XHR1NjRfc3RhdHNfaW5pdChcdTAwMjZwbS1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwbS1cdTAwM2V3b3JrLCB5dDkyMXhfbWliX3BvbGwpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuIFx0cmVzID0geXQ5MjF4X3BvcnRfc2V0dXAocHJpdiwgcG9ydCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5AQCAtNDY2Nyw2ICYjNDM7NDMzNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgeXQ5MjF4X2RzYV9zd2l0Y2hfb3BzID0ge1xuIFx0LyogcG9ydCAqL1xuIFx0LmdldF90YWdfcHJvdG9jb2xcdD0geXQ5MjF4X2RzYV9nZXRfdGFnX3Byb3RvY29sLFxuIFx0LnBoeWxpbmtfZ2V0X2NhcHNcdD0geXQ5MjF4X2RzYV9waHlsaW5rX2dldF9jYXBzLFxuJiM0MztcdC5wb3J0X3RlYXJkb3duXHRcdD0geXQ5MjF4X2RzYV9wb3J0X3RlYXJkb3duLFxuIFx0LnBvcnRfc2V0dXBcdFx0PSB5dDkyMXhfZHNhX3BvcnRfc2V0dXAsXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0RDQilcbiBcdC8qIGRzY3AgKi9cbkBAIC00Njk2LDEyICYjNDM7NDM2Nyw2IEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtXHUwMDNlcG9ydHMpOyBpLS0gXHUwMDNlIDA7ICkge1xuLVx0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbi1cbi1cdFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCk7XG4tXHR9XG4tXG4gXHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goXHUwMDI2cHJpdi1cdTAwM2Vkcyk7XG4gXG4gXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZWFjbF9ibGtzKTsgaSYjNDM7JiM0MzspIHtcbkBAIC00NzQ5LDcgJiM0Mzs0NDE0LDYgQEAgc3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuIFxuIFx0XHRwcC1cdTAwM2VpbmRleCA9IGk7XG4tXHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkLCB5dDkyMXhfcG9sbF9taWIpO1xuIFx0fVxuIFxuIFx0ZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbmluZGV4IDgzY2Q0NTQ5NTVkZGIuLmNlMjAxNTAyNjg0OWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbkBAIC0xNjcsNjkgJiM0MzsxNjcsNiBAQFxuICNkZWZpbmUgWVQ5MjFYX0VFRV9DVFJMXHRcdFx0MHhiMDAwMFxuICNkZWZpbmUgIFlUOTIxWF9FRUVfQ1RSTF9FTm4ocG9ydClcdFx0QklUKHBvcnQpXG4gXG4tI2RlZmluZSBZVDkyMVhfTUlCX0NUUkxcdFx0XHQweGMwMDA0XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX0NMRUFOXHRcdFx0QklUKDMwKVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9QT1JUX01cdFx0XHRHRU5NQVNLKDYsIDMpXG4tI2RlZmluZSAgIFlUOTIxWF9NSUJfQ1RSTF9QT1JUKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTUlCX0NUUkxfUE9SVF9NLCAoeCkpXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX09ORV9QT1JUXHRcdEJJVCgxKVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9BTExfUE9SVFx0XHRCSVQoMClcbi0jZGVmaW5lIFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpXHRcdCgweGMwMTAwICYjNDM7IDB4MTAwICogKHBvcnQpKVxuLSNkZWZpbmUgWVQ5MjFYX01JQm5fREFUQW0ocG9ydCwgeClcdChZVDkyMVhfTUlCbl9EQVRBMChwb3J0KSAmIzQzOyA0ICogKHgpKVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1RcdFx0MHgwMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QQVVTRVx0XHQweDA0XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX01VTFRJQ0FTVFx0XHQweDA4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0NSQ19FUlJcdFx0MHgwY1xuLVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9BTElHTl9FUlJcdFx0MHgxMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSXHQweDE0XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSXHRcdDB4MThcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY0XHRcdDB4MWNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyN1x0MHgyMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTI4X1RPXzI1NVx0MHgyNFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMVx0MHgyOFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjNcdDB4MmNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOFx0MHgzMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTUxOV9UT19NQVhcdDB4MzRcbi0vKiAweDM4OiB1bnVzZWQgKi9cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfR09PRF9CWVRFU1x0XHQweDNjXG4tXG4tLyogMHg0MDogNjQgYnl0ZXMgKi9cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTXHRcdDB4NDRcbi0vKiAweDQ4OiA2NCBieXRlcyAqL1xuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PVkVSU0laRV9FUlJcdDB4NGNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfRFJPUFBFRFx0XHQweDUwXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0JST0FEQ0FTVFx0XHQweDU0XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BBVVNFXHRcdDB4NThcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElDQVNUXHRcdDB4NWNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUlx0MHg2MFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjRcdFx0MHg2NFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3XHQweDY4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1XHQweDZjXG4tXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExXHQweDcwXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyM1x0MHg3NFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTAyNF9UT18xNTE4XHQweDc4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWFx0MHg3Y1xuLVxuLS8qIDB4ODA6IHVudXNlZCAqL1xuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTXHRcdDB4ODRcbi0vKiAweDg4OiA2NCBieXRlcyAqL1xuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9DT0xMSVNJT05cdFx0MHg4Y1xuLVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OXHQweDkwXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTlx0MHg5NFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OXHQweDk4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVFx0XHRcdDB4OWNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRURcdFx0MHhhMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9MQVRFX0NPTExJU0lPTlx0MHhhNFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PQU1cdFx0XHQweGE4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX09BTVx0XHRcdDB4YWNcbi1cbiAjZGVmaW5lIFlUOTIxWF9FREFUQV9DVFJMXHRcdDB4ZTAwMDBcbiAjZGVmaW5lICBZVDkyMVhfRURBVEFfQ1RSTF9BRERSX01cdFx0R0VOTUFTSygxNSwgOClcbiAjZGVmaW5lICAgWVQ5MjFYX0VEQVRBX0NUUkxfQUREUih4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0VEQVRBX0NUUkxfQUREUl9NLCAoeCkpXG5AQCAtODYxLDU4ICYjNDM7Nzk4LDYgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFx1MDAzYyA4KVxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKChwb3J0KSA9PSA4IHx8IChwb3J0KSA9PSA5KVxuIFxuLXN0cnVjdCB5dDkyMXhfbWliIHtcbi1cdHU2NCByeF9icm9hZGNhc3Q7XG4tXHR1NjQgcnhfcGF1c2U7XG4tXHR1NjQgcnhfbXVsdGljYXN0O1xuLVx0dTY0IHJ4X2NyY19lcnJvcnM7XG4tXG4tXHR1NjQgcnhfYWxpZ25tZW50X2Vycm9ycztcbi1cdHU2NCByeF91bmRlcnNpemVfZXJyb3JzO1xuLVx0dTY0IHJ4X2ZyYWdtZW50X2Vycm9ycztcbi1cdHU2NCByeF82NGJ5dGU7XG4tXG4tXHR1NjQgcnhfNjVfMTI3Ynl0ZTtcbi1cdHU2NCByeF8xMjhfMjU1Ynl0ZTtcbi1cdHU2NCByeF8yNTZfNTExYnl0ZTtcbi1cdHU2NCByeF81MTJfMTAyM2J5dGU7XG4tXG4tXHR1NjQgcnhfMTAyNF8xNTE4Ynl0ZTtcbi1cdHU2NCByeF9qdW1ibztcbi1cdHU2NCByeF9nb29kX2J5dGVzO1xuLVxuLVx0dTY0IHJ4X2JhZF9ieXRlcztcbi1cdHU2NCByeF9vdmVyc2l6ZV9lcnJvcnM7XG4tXG4tXHR1NjQgcnhfZHJvcHBlZDtcbi1cdHU2NCB0eF9icm9hZGNhc3Q7XG4tXHR1NjQgdHhfcGF1c2U7XG4tXHR1NjQgdHhfbXVsdGljYXN0O1xuLVxuLVx0dTY0IHR4X3VuZGVyc2l6ZV9lcnJvcnM7XG4tXHR1NjQgdHhfNjRieXRlO1xuLVx0dTY0IHR4XzY1XzEyN2J5dGU7XG4tXHR1NjQgdHhfMTI4XzI1NWJ5dGU7XG4tXG4tXHR1NjQgdHhfMjU2XzUxMWJ5dGU7XG4tXHR1NjQgdHhfNTEyXzEwMjNieXRlO1xuLVx0dTY0IHR4XzEwMjRfMTUxOGJ5dGU7XG4tXHR1NjQgdHhfanVtYm87XG4tXG4tXHR1NjQgdHhfZ29vZF9ieXRlcztcbi1cdHU2NCB0eF9jb2xsaXNpb25zO1xuLVxuLVx0dTY0IHR4X2Fib3J0ZWRfZXJyb3JzO1xuLVx0dTY0IHR4X211bHRpcGxlX2NvbGxpc2lvbnM7XG4tXHR1NjQgdHhfc2luZ2xlX2NvbGxpc2lvbnM7XG4tXHR1NjQgdHhfZ29vZDtcbi1cbi1cdHU2NCB0eF9kZWZlcnJlZDtcbi1cdHU2NCB0eF9sYXRlX2NvbGxpc2lvbnM7XG4tXHR1NjQgcnhfb2FtO1xuLVx0dTY0IHR4X29hbTtcbi19O1xuLVxuIHN0cnVjdCB5dDkyMXhfYWNsX2VudHJ5IHtcbiBcdHUzMiBrZXlbMl07XG4gXHR1MzIgbWFza1syXTtcbkBAIC05MzYsMTMgJiM0Mzs4MjEsOCBAQCBzdHJ1Y3QgeXQ5MjF4X2FjbF9ibGsge1xuIHN0cnVjdCB5dDkyMXhfcG9ydCB7XG4gXHR1bnNpZ25lZCBjaGFyIGluZGV4O1xuIFxuLVx0Ym9vbCBoYWlycGluO1xuLVx0Ym9vbCBpc29sYXRlZDtcbi1cbi1cdHN0cnVjdCBkZWxheWVkX3dvcmsgbWliX3JlYWQ7XG4tXHRzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7XG4tXHR1NjQgcnhfZnJhbWVzO1xuLVx0dTY0IHR4X2ZyYW1lcztcbiYjNDM7XHRib29sIGhhaXJwaW46MTtcbiYjNDM7XHRib29sIGlzb2xhdGVkOjE7XG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4gXHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuQEAgLTk1Myw2ICYjNDM7ODMzLDggQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcbiBcbiBcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcbiAjZW5kaWZcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9taWIgKm1pYjtcbiB9O1xuIFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zMDQ3OGNlNzFjMTA1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5jXG5AQCAtMCwwICYjNDM7MSw0MzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bWliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIG9mZnNldDtcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNSUJfREVTQyhfc2l6ZSwgX29mZnNldCwgX25hbWUpIHtfc2l6ZSwgX29mZnNldCwgX25hbWV9XG4mIzQzO1xuJiM0MzsvKiBNdXN0IGFncmVlIHdpdGggeXQ5MjF4X21pYlxuJiM0MzsgKlxuJiM0MzsgKiBVbnN0cnVjdHVyZWQgZmllbGRzIChuYW1lICE9IE5VTEwpIHdpbGwgYXBwZWFyIGluIGdldF9ldGh0b29sX3N0YXRzKCksXG4mIzQzOyAqIHN0cnVjdHVyZWQgZ28gdG8gdGhlaXIgKl9zdGF0cygpIG1ldGhvZHMsIGJ1dCB3ZSBuZWVkIHRoZWlyIHNpemVzIGFuZCBvZmZzZXRzXG4mIzQzOyAqIHRvIHBlcmZvcm0gMzJiaXQgTUlCIG92ZXJmbG93IHdyYXBhcm91bmQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyB5dDkyMXhfbWliX2Rlc2NzW10gPSB7XG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0JST0FEQ0FTVCwgTlVMTCksXG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFLCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfTVVMVElDQVNULCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfQ1JDX0VSUiwgTlVMTCksXG4mIzQzO1xuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9BTElHTl9FUlIsIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfRlJBR19FUlIsIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNjQsIE5VTEwpLFxuJiM0MztcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyNywgTlVMTCksXG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMjhfVE9fMjU1LCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzI1Nl9UT181MTEsIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxuJiM0MztcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksXG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksXG4mIzQzO1x0TUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0dPT0RfQllURVMsIE5VTEwpLFxuJiM0MztcbiYjNDM7XHRNSUJfREVTQygyLCBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTLCBcJiMzNDtSeEJhZEJ5dGVzXCYjMzQ7KSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfT1ZFUlNJWkVfRVJSLCBOVUxMKSxcbiYjNDM7XG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0RST1BQRUQsIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9CUk9BRENBU1QsIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QQVVTRSwgTlVMTCksXG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJQ0FTVCwgTlVMTCksXG4mIzQzO1xuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY0LCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY1X1RPXzEyNywgTlVMTCksXG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1LCBOVUxMKSxcbiYjNDM7XG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExLCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzUxMl9UT18xMDIzLCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksXG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksXG4mIzQzO1xuJiM0MztcdE1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTLCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfQ09MTElTSU9OLCBOVUxMKSxcbiYjNDM7XG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04sIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSVBMRV9DT0xMSVNJT04sIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OLCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtULCBOVUxMKSxcbiYjNDM7XG4mIzQzO1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0RFRkVSUkVELCBOVUxMKSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTEFURV9DT0xMSVNJT04sIE5VTEwpLFxuJiM0MztcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9PQU0sIFwmIzM0O1J4T0FNXCYjMzQ7KSxcbiYjNDM7XHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfT0FNLCBcJiMzNDtUeE9BTVwmIzM0OyksXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuJiM0MzsgKlxuJiM0MzsgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXG4mIzQzOyAqIHRoZXJlKSwgd2UgaGF2ZSB0byBwb2xsIHN0YXRzIG1vcmUgZnJlcXVlbnRseSB0aGVuIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC5cbiYjNDM7ICogRm9yIG92ZXJmbG93IHByb3RlY3Rpb24sIG5vcm1hbGx5LCAxMDAgc2VjIGludGVydmFsIHNob3VsZCBoYXZlIGJlZW4gT0suXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTXHQoMyAqIEhaKVxuJiM0MztcbiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihfZHMpIGNvbnRhaW5lcl9vZl9jb25zdChfZHMsIHN0cnVjdCB5dDkyMXhfcHJpdiwgZHMpXG4mIzQzOyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuJiM0MztcbiYjNDM7LyogUmVhZCBhbmQgaGFuZGxlIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuIE1JQiBidWZmZXIgbXVzdCBiZSB6ZXJvZWQgYmVmb3JlLiAqL1xuJiM0MztzdGF0aWMgaW50IHl0OTIxeF9taWJfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVx1MDAzZW1pYjtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliO1xuJiM0MztcdHU2NCAqYnVmID0gcG0tXHUwMDNlZGF0YTtcbiYjNDM7XHR1NjQgcnhfZnJhbWVzO1xuJiM0MztcdHU2NCB0eF9mcmFtZXM7XG4mIzQzO1x0aW50IHJlcyA9IDA7XG4mIzQzO1xuJiM0MztcdG1pYiA9IFx1MDAyNnBtLVx1MDAzZXN0YXRzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuJiM0MztcdFx0dTMyIHJlZyA9IFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpICYjNDM7IGRlc2MtXHUwMDNlb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRcdGlmIChkZXNjLVx1MDAzZXNpemUgXHUwMDNjPSAxKSB7XG4mIzQzO1x0XHRcdHU2NCBvbGRfdmFsID0gYnVmW2ldO1xuJiM0MztcdFx0XHR1MzIgdmFsMDtcbiYjNDM7XHRcdFx0dTY0IHZhbDtcbiYjNDM7XG4mIzQzO1x0XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnZhbDApO1xuJiM0MztcdFx0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdFx0dmFsID0gKG9sZF92YWwgXHUwMDI2IH4odTY0KVUzMl9NQVgpIHwgdmFsMDtcbiYjNDM7XHRcdFx0aWYgKHZhbCBcdTAwM2Mgb2xkX3ZhbClcbiYjNDM7XHRcdFx0XHR2YWwgJiM0Mzs9IDF1bGwgXHUwMDNjXHUwMDNjIDMyO1xuJiM0MztcbiYjNDM7XHRcdFx0YnVmW2ldID0gdmFsO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmVzID0geXQ5MjF4X2NvdW50ZXJfcmVhZChwcml2LCByZWcsIFx1MDAyNmJ1ZltpXSk7XG4mIzQzO1x0XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnBtLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR1NjRfc3RhdHNfc2V0KFx1MDAyNigodTY0X3N0YXRzX3QgKiltaWIpW2ldLCBidWZbaV0pO1xuJiM0MztcdHJ4X2ZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF82NGJ5dGUpICYjNDM7XG4mIzQzO1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzY1XzEyN2J5dGUpICYjNDM7XG4mIzQzO1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzEyOF8yNTVieXRlKSAmIzQzO1xuJiM0MztcdFx0ICAgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF8yNTZfNTExYnl0ZSkgJiM0MztcbiYjNDM7XHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfNTEyXzEwMjNieXRlKSAmIzQzO1xuJiM0MztcdFx0ICAgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF8xMDI0XzE1MThieXRlKSAmIzQzO1xuJiM0MztcdFx0ICAgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9qdW1ibyk7XG4mIzQzO1x0dHhfZnJhbWVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzY0Ynl0ZSkgJiM0MztcbiYjNDM7XHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfNjVfMTI3Ynl0ZSkgJiM0MztcbiYjNDM7XHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfMTI4XzI1NWJ5dGUpICYjNDM7XG4mIzQzO1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzI1Nl81MTFieXRlKSAmIzQzO1xuJiM0MztcdFx0ICAgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF81MTJfMTAyM2J5dGUpICYjNDM7XG4mIzQzO1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzEwMjRfMTUxOGJ5dGUpICYjNDM7XG4mIzQzO1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2p1bWJvKTtcbiYjNDM7XHR1NjRfc3RhdHNfc2V0KFx1MDAyNnBtLVx1MDAzZXJ4X2ZyYW1lcywgcnhfZnJhbWVzKTtcbiYjNDM7XHR1NjRfc3RhdHNfc2V0KFx1MDAyNnBtLVx1MDAzZXR4X2ZyYW1lcywgdHhfZnJhbWVzKTtcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZwbS1cdTAwM2VzeW5jcCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvICVzIHBvcnQgJWQ6ICVpXFxuXCYjMzQ7LCBcJiMzNDtyZWFkIHN0YXRzIGZvclwmIzM0OyxcbiYjNDM7XHRcdFx0cG9ydCwgcmVzKTtcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9taWJfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBjb250YWluZXJfb2ZfY29uc3Qod29yaywgc3RydWN0IHl0OTIxeF9taWIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHdvcmsud29yayk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHBtLVx1MDAzZXBvcnQ7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mX2NvbnN0KHBwLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHBvcnRzW3BwLVx1MDAzZWluZGV4XSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkZWxheSA9IFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTO1xuJiM0MztcdGludCBwb3J0ID0gcHAtXHUwMDNlaW5kZXg7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbWliX3JlYWQocHJpdiwgcG9ydCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRkZWxheSAqPSA0O1xuJiM0MztcbiYjNDM7XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cG0tXHUwMDNld29yaywgZGVsYXkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCxcbiYjNDM7XHRcdCAgICAgICB1aW50OF90ICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHN0cmluZ3NldCAhPSBFVEhfU1NfU1RBVFMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGRlc2MtXHUwMDNlbmFtZSlcbiYjNDM7XHRcdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIGRlc2MtXHUwMDNlbmFtZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdWludDY0X3QgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7XG4mIzQzO1x0dTY0ICpidWY7XG4mIzQzO1x0c2l6ZV90IGo7XG4mIzQzO1xuJiM0MztcdGlmICghcG0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bWliID0gXHUwMDI2cG0tXHUwMDNlc3RhdHM7XG4mIzQzO1x0YnVmID0gcG0tXHUwMDNlZGF0YTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0eXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpO1xuJiM0MztcbiYjNDM7XHRqID0gMDtcbiYjNDM7XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICghZGVzYy1cdTAwM2VuYW1lKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRkYXRhW2pdID0gYnVmW2ldO1xuJiM0MztcdFx0aiYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNudCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChzc2V0ICE9IEVUSF9TU19TVEFUUylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmIChkZXNjLVx1MDAzZW5hbWUpXG4mIzQzO1x0XHRcdGNudCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gY250O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7XG4mIzQzO1xuJiM0MztcdGlmICghcG0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bWliID0gXHUwMDI2cG0tXHUwMDNlc3RhdHM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTtcbiYjNDM7XG4mIzQzO1x0bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1RyYW5zbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZwbS1cdTAwM2V0eF9mcmFtZXMpO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VTaW5nbGVDb2xsaXNpb25GcmFtZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfc2luZ2xlX2NvbGxpc2lvbnMpO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9tdWx0aXBsZV9jb2xsaXNpb25zKTtcbiYjNDM7XHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNnBtLVx1MDAzZXJ4X2ZyYW1lcyk7XG4mIzQzO1x0bWFjX3N0YXRzLVx1MDAzZUZyYW1lQ2hlY2tTZXF1ZW5jZUVycm9ycyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9jcmNfZXJyb3JzKTtcbiYjNDM7XHRtYWNfc3RhdHMtXHUwMDNlQWxpZ25tZW50RXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnMpO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VPY3RldHNUcmFuc21pdHRlZE9LID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2dvb2RfYnl0ZXMpO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNXaXRoRGVmZXJyZWRYbWlzc2lvbnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfZGVmZXJyZWQpO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VMYXRlQ29sbGlzaW9ucyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9sYXRlX2NvbGxpc2lvbnMpO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNBYm9ydGVkRHVlVG9YU0NvbGxzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzKTtcbiYjNDM7XHQvKiBtYWNfc3RhdHMtXHUwMDNlRnJhbWVzTG9zdER1ZVRvSW50TUFDWG1pdEVycm9yICovXG4mIzQzO1x0LyogbWFjX3N0YXRzLVx1MDAzZUNhcnJpZXJTZW5zZUVycm9ycyAqL1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VPY3RldHNSZWNlaXZlZE9LID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2dvb2RfYnl0ZXMpO1xuJiM0MztcdC8qIG1hY19zdGF0cy1cdTAwM2VGcmFtZXNMb3N0RHVlVG9JbnRNQUNSY3ZFcnJvciAqL1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfbXVsdGljYXN0KTtcbiYjNDM7XHRtYWNfc3RhdHMtXHUwMDNlQnJvYWRjYXN0RnJhbWVzWG1pdHRlZE9LID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2Jyb2FkY2FzdCk7XG4mIzQzO1x0LyogbWFjX3N0YXRzLVx1MDAzZUZyYW1lc1dpdGhFeGNlc3NpdmVEZWZlcnJhbCAqL1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X211bHRpY2FzdCk7XG4mIzQzO1x0bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1JlY2VpdmVkT0sgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfYnJvYWRjYXN0KTtcbiYjNDM7XHQvKiBtYWNfc3RhdHMtXHUwMDNlSW5SYW5nZUxlbmd0aEVycm9ycyAqL1xuJiM0MztcdC8qIG1hY19zdGF0cy1cdTAwM2VPdXRPZlJhbmdlTGVuZ3RoRmllbGQgKi9cbiYjNDM7XHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVUb29Mb25nRXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X292ZXJzaXplX2Vycm9ycyk7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZFxuJiM0Mzt5dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cdTAwM2VtaWI7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRtaWIgPSBcdTAwMjZwbS1cdTAwM2VzdGF0cztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0eXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpO1xuJiM0MztcbiYjNDM7XHRjdHJsX3N0YXRzLVx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNUcmFuc21pdHRlZCA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9wYXVzZSk7XG4mIzQzO1x0Y3RybF9zdGF0cy1cdTAwM2VNQUNDb250cm9sRnJhbWVzUmVjZWl2ZWQgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfcGF1c2UpO1xuJiM0MztcdC8qIGN0cmxfc3RhdHMtXHUwMDNlVW5zdXBwb3J0ZWRPcGNvZGVzUmVjZWl2ZWQgKi9cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIHl0OTIxeF9ybW9uX3Jhbmdlc1tdID0ge1xuJiM0MztcdHsgMCwgNjQgfSxcbiYjNDM7XHR7IDY1LCAxMjcgfSxcbiYjNDM7XHR7IDEyOCwgMjU1IH0sXG4mIzQzO1x0eyAyNTYsIDUxMSB9LFxuJiM0MztcdHsgNTEyLCAxMDIzIH0sXG4mIzQzO1x0eyAxMDI0LCAxNTE4IH0sXG4mIzQzO1x0eyAxNTE5LCBZVDkyMVhfRlJBTUVfU0laRV9NQVggfSxcbiYjNDM7XHR7fVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dm9pZFxuJiM0Mzt5dDkyMXhfZHNhX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbiYjNDM7XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7XG4mIzQzO1xuJiM0MztcdGlmICghcG0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bWliID0gXHUwMDI2cG0tXHUwMDNlc3RhdHM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTtcbiYjNDM7XG4mIzQzO1x0KnJhbmdlcyA9IHl0OTIxeF9ybW9uX3JhbmdlcztcbiYjNDM7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2V1bmRlcnNpemVfcGt0cyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF91bmRlcnNpemVfZXJyb3JzKTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZW92ZXJzaXplX3BrdHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzKTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWZyYWdtZW50cyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9hbGlnbm1lbnRfZXJyb3JzKTtcbiYjNDM7XHQvKiBybW9uX3N0YXRzLVx1MDAzZWphYmJlcnMgKi9cbiYjNDM7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzBdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzY0Ynl0ZSk7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzFdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzY1XzEyN2J5dGUpO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFsyXSA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF8xMjhfMjU1Ynl0ZSk7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzNdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzI1Nl81MTFieXRlKTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbNF0gPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfNTEyXzEwMjNieXRlKTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbNV0gPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfMTAyNF8xNTE4Ynl0ZSk7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzZdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2p1bWJvKTtcbiYjNDM7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzBdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzY0Ynl0ZSk7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzFdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzY1XzEyN2J5dGUpO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFsyXSA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF8xMjhfMjU1Ynl0ZSk7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzNdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzI1Nl81MTFieXRlKTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbNF0gPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfNTEyXzEwMjNieXRlKTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbNV0gPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfMTAyNF8xNTE4Ynl0ZSk7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzZdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2p1bWJvKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVx1MDAzZW1pYjtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliO1xuJiM0MztcdHVuc2lnbmVkIGludCBzdGFydDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRtaWIgPSBcdTAwMjZwbS1cdTAwM2VzdGF0cztcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2cG0tXHUwMDNlc3luY3ApO1xuJiM0MztcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfdW5kZXJzaXplX2Vycm9ycykgJiM0MztcbiYjNDM7XHRcdFx0XHRcdCAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2ZyYWdtZW50X2Vycm9ycyk7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9vdmVyX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9vdmVyc2l6ZV9lcnJvcnMpO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9jcmNfZXJyb3JzKTtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXJ4X2ZyYW1lX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9hbGlnbm1lbnRfZXJyb3JzKTtcbiYjNDM7XHRcdC8qIHN0YXRzLVx1MDAzZXJ4X2ZpZm9fZXJyb3JzICovXG4mIzQzO1x0XHQvKiBzdGF0cy1cdTAwM2VyeF9taXNzZWRfZXJyb3JzICovXG4mIzQzO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMpO1xuJiM0MztcdFx0Lyogc3RhdHMtXHUwMDNldHhfY2Fycmllcl9lcnJvcnMgKi9cbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXR4X2ZpZm9fZXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X3VuZGVyc2l6ZV9lcnJvcnMpO1xuJiM0MztcdFx0Lyogc3RhdHMtXHUwMDNldHhfaGVhcnRiZWF0X2Vycm9ycyAqL1xuJiM0MztcdFx0c3RhdHMtXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9sYXRlX2NvbGxpc2lvbnMpO1xuJiM0MztcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZwbS1cdTAwM2VyeF9mcmFtZXMpO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNldHhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNnBtLVx1MDAzZXR4X2ZyYW1lcyk7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9nb29kX2J5dGVzKSAtXG4mIzQzO1x0XHRcdFx0ICBFVEhfRkNTX0xFTiAqIHN0YXRzLVx1MDAzZXJ4X3BhY2tldHM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2V0eF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9nb29kX2J5dGVzKSAtXG4mIzQzO1x0XHRcdFx0ICBFVEhfRkNTX0xFTiAqIHN0YXRzLVx1MDAzZXR4X3BhY2tldHM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9kcm9wcGVkID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2Ryb3BwZWQpO1xuJiM0MztcdFx0Lyogc3RhdHMtXHUwMDNldHhfZHJvcHBlZCAqL1xuJiM0MztcdFx0c3RhdHMtXHUwMDNlbXVsdGljYXN0ID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X211bHRpY2FzdCk7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2Vjb2xsaXNpb25zID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2NvbGxpc2lvbnMpO1xuJiM0MztcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZwbS1cdTAwM2VzeW5jcCwgc3RhcnQpKTtcbiYjNDM7XG4mIzQzO1x0c3RhdHMtXHUwMDNlcnhfZXJyb3JzID0gc3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyAmIzQzOyBzdGF0cy1cdTAwM2VyeF9vdmVyX2Vycm9ycyAmIzQzO1xuJiM0MztcdFx0XHQgICBzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzICYjNDM7IHN0YXRzLVx1MDAzZXJ4X2ZyYW1lX2Vycm9ycztcbiYjNDM7XHRzdGF0cy1cdTAwM2V0eF9lcnJvcnMgPSBzdGF0cy1cdTAwM2V0eF9hYm9ydGVkX2Vycm9ycyAmIzQzOyBzdGF0cy1cdTAwM2V0eF9maWZvX2Vycm9ycyAmIzQzO1xuJiM0MztcdFx0XHQgICBzdGF0cy1cdTAwM2V0eF93aW5kb3dfZXJyb3JzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cdTAwM2VtaWI7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRtaWIgPSBcdTAwMjZwbS1cdTAwM2VzdGF0cztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0eXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpO1xuJiM0MztcbiYjNDM7XHRwYXVzZV9zdGF0cy1cdTAwM2V0eF9wYXVzZV9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfcGF1c2UpO1xuJiM0MztcdHBhdXNlX3N0YXRzLVx1MDAzZXJ4X3BhdXNlX2ZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9wYXVzZSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzM5OTJhNWY5YmRjMVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuaFxuQEAgLTAsMCAmIzQzOzEsMTY3IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfWVRfTUlCX0hcbiYjNDM7I2RlZmluZSBfWVRfTUlCX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTUlCX0NUUkxcdFx0XHQweGMwMDA0XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9DTEVBTlx0XHRcdEJJVCgzMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX1BPUlRfTVx0XHRcdEdFTk1BU0soNiwgMylcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9NSUJfQ1RSTF9QT1JUKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTUlCX0NUUkxfUE9SVF9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9PTkVfUE9SVFx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX0FMTF9QT1JUXHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpXHRcdCgweGMwMTAwICYjNDM7IDB4MTAwICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9NSUJuX0RBVEFtKHBvcnQsIHgpXHQoWVQ5MjFYX01JQm5fREFUQTAocG9ydCkgJiM0MzsgNCAqICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0JST0FEQ0FTVFx0XHQweDAwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QQVVTRVx0XHQweDA0XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9NVUxUSUNBU1RcdFx0MHgwOFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQ1JDX0VSUlx0XHQweDBjXG4mIzQzO1xuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQUxJR05fRVJSXHRcdDB4MTBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1VOREVSU0laRV9FUlJcdDB4MTRcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSXHRcdDB4MThcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NFx0XHQweDFjXG4mIzQzO1xuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyN1x0MHgyMFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEyOF9UT18yNTVcdDB4MjRcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8yNTZfVE9fNTExXHQweDI4XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjNcdDB4MmNcbiYjNDM7XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTAyNF9UT18xNTE4XHQweDMwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTUxOV9UT19NQVhcdDB4MzRcbiYjNDM7LyogMHgzODogdW51c2VkICovXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9HT09EX0JZVEVTXHRcdDB4M2NcbiYjNDM7XG4mIzQzOy8qIDB4NDA6IDY0IGJ5dGVzICovXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9CQURfQllURVNcdFx0MHg0NFxuJiM0MzsvKiAweDQ4OiA2NCBieXRlcyAqL1xuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfT1ZFUlNJWkVfRVJSXHQweDRjXG4mIzQzO1xuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfRFJPUFBFRFx0XHQweDUwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9CUk9BRENBU1RcdFx0MHg1NFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEFVU0VcdFx0MHg1OFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElDQVNUXHRcdDB4NWNcbiYjNDM7XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9VTkRFUlNJWkVfRVJSXHQweDYwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjRcdFx0MHg2NFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY1X1RPXzEyN1x0MHg2OFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEyOF9UT18yNTVcdDB4NmNcbiYjNDM7XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMjU2X1RPXzUxMVx0MHg3MFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzUxMl9UT18xMDIzXHQweDc0XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTAyNF9UT18xNTE4XHQweDc4XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTUxOV9UT19NQVhcdDB4N2NcbiYjNDM7XG4mIzQzOy8qIDB4ODA6IHVudXNlZCAqL1xuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfR09PRF9CWVRFU1x0XHQweDg0XG4mIzQzOy8qIDB4ODg6IDY0IGJ5dGVzICovXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9DT0xMSVNJT05cdFx0MHg4Y1xuJiM0MztcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT05cdDB4OTBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTlx0MHg5NFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfU0lOR0xFX0NPTExJU0lPTlx0MHg5OFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUXHRcdFx0MHg5Y1xuJiM0MztcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0RFRkVSUkVEXHRcdDB4YTBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0xBVEVfQ09MTElTSU9OXHQweGE0XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PQU1cdFx0XHQweGE4XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9PQU1cdFx0XHQweGFjXG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyB7XG4mIzQzO1x0dTY0X3N0YXRzX3QgcnhfYnJvYWRjYXN0O1xuJiM0MztcdHU2NF9zdGF0c190IHJ4X3BhdXNlO1xuJiM0MztcdHU2NF9zdGF0c190IHJ4X211bHRpY2FzdDtcbiYjNDM7XHR1NjRfc3RhdHNfdCByeF9jcmNfZXJyb3JzO1xuJiM0MztcbiYjNDM7XHR1NjRfc3RhdHNfdCByeF9hbGlnbm1lbnRfZXJyb3JzO1xuJiM0MztcdHU2NF9zdGF0c190IHJ4X3VuZGVyc2l6ZV9lcnJvcnM7XG4mIzQzO1x0dTY0X3N0YXRzX3QgcnhfZnJhZ21lbnRfZXJyb3JzO1xuJiM0MztcdHU2NF9zdGF0c190IHJ4XzY0Ynl0ZTtcbiYjNDM7XG4mIzQzO1x0dTY0X3N0YXRzX3QgcnhfNjVfMTI3Ynl0ZTtcbiYjNDM7XHR1NjRfc3RhdHNfdCByeF8xMjhfMjU1Ynl0ZTtcbiYjNDM7XHR1NjRfc3RhdHNfdCByeF8yNTZfNTExYnl0ZTtcbiYjNDM7XHR1NjRfc3RhdHNfdCByeF81MTJfMTAyM2J5dGU7XG4mIzQzO1xuJiM0MztcdHU2NF9zdGF0c190IHJ4XzEwMjRfMTUxOGJ5dGU7XG4mIzQzO1x0dTY0X3N0YXRzX3QgcnhfanVtYm87XG4mIzQzO1x0dTY0X3N0YXRzX3QgcnhfZ29vZF9ieXRlcztcbiYjNDM7XG4mIzQzO1x0dTY0X3N0YXRzX3QgcnhfYmFkX2J5dGVzO1xuJiM0MztcdHU2NF9zdGF0c190IHJ4X292ZXJzaXplX2Vycm9ycztcbiYjNDM7XG4mIzQzO1x0dTY0X3N0YXRzX3QgcnhfZHJvcHBlZDtcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF9icm9hZGNhc3Q7XG4mIzQzO1x0dTY0X3N0YXRzX3QgdHhfcGF1c2U7XG4mIzQzO1x0dTY0X3N0YXRzX3QgdHhfbXVsdGljYXN0O1xuJiM0MztcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF91bmRlcnNpemVfZXJyb3JzO1xuJiM0MztcdHU2NF9zdGF0c190IHR4XzY0Ynl0ZTtcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF82NV8xMjdieXRlO1xuJiM0MztcdHU2NF9zdGF0c190IHR4XzEyOF8yNTVieXRlO1xuJiM0MztcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF8yNTZfNTExYnl0ZTtcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF81MTJfMTAyM2J5dGU7XG4mIzQzO1x0dTY0X3N0YXRzX3QgdHhfMTAyNF8xNTE4Ynl0ZTtcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF9qdW1ibztcbiYjNDM7XG4mIzQzO1x0dTY0X3N0YXRzX3QgdHhfZ29vZF9ieXRlcztcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF9jb2xsaXNpb25zO1xuJiM0MztcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF9hYm9ydGVkX2Vycm9ycztcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF9tdWx0aXBsZV9jb2xsaXNpb25zO1xuJiM0MztcdHU2NF9zdGF0c190IHR4X3NpbmdsZV9jb2xsaXNpb25zO1xuJiM0MztcdHU2NF9zdGF0c190IHR4X2dvb2Q7XG4mIzQzO1xuJiM0MztcdHU2NF9zdGF0c190IHR4X2RlZmVycmVkO1xuJiM0MztcdHU2NF9zdGF0c190IHR4X2xhdGVfY29sbGlzaW9ucztcbiYjNDM7XHR1NjRfc3RhdHNfdCByeF9vYW07XG4mIzQzO1x0dTY0X3N0YXRzX3QgdHhfb2FtO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTUlCX05VTVx0KHNpemVvZihzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cykgLyBzaXplb2YodTY0X3N0YXRzX3QpKVxuJiM0MztcbiYjNDM7c3RydWN0IHl0OTIxeF9taWIge1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IGRlbGF5ZWRfd29yayB3b3JrO1xuJiM0MztcdHN0cnVjdCB1NjRfc3RhdHNfc3luYyBzeW5jcDtcbiYjNDM7XHQvKiBwcm90ZWN0ZWQgYnkgc3luY3AgT1IgcHJpdi1cdTAwM2VyZWdfbG9jayAqL1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzIHN0YXRzO1xuJiM0MztcdHU2NF9zdGF0c190IHJ4X2ZyYW1lcztcbiYjNDM7XHR1NjRfc3RhdHNfdCB0eF9mcmFtZXM7XG4mIzQzO1x0LyogcHJvdGVjdGVkIGJ5IHByaXYtXHUwMDNlcmVnX2xvY2sgKi9cbiYjNDM7XHR1NjQgZGF0YVtZVDkyMVhfTUlCX05VTV07XG4mIzQzO307XG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9taWJfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCxcbiYjNDM7XHRcdCAgICAgICB1aW50OF90ICpkYXRhKTtcbiYjNDM7dm9pZFxuJiM0Mzt5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKTtcbiYjNDM7aW50IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKTtcbiYjNDM7dm9pZFxuJiM0Mzt5dDkyMXhfZHNhX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbiYjNDM7XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpO1xuJiM0Mzt2b2lkXG4mIzQzO3l0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKTtcbiYjNDM7dm9pZFxuJiM0Mzt5dDkyMXhfZHNhX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpO1xuJiM0MztcbiYjNDM7I2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbmluZGV4IGJmM2FkZmQ2NDE2NWEuLjI3MDg2NjAyOTk3YmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5AQCAtNjMsNiAmIzQzOzYzLDM2IEBAIGludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4gXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuIH1cbiBcbiYjNDM7LyogUmVsaWFibHkgcmVhZCBhIDY0Yml0IGNvdW50ZXIgKi9cbiYjNDM7aW50IHl0OTIxeF9jb3VudGVyX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1NjQgKnZhbHApXG4mIzQzO3tcbiYjNDM7XHR1MzIgb2xkX2xvO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1x0dTMyIGhpO1xuJiM0MztcdHUzMiBsbztcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2b2xkX2xvKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIDE2OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0LCBcdTAwMjZoaSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2bG8pO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0XHRpZiAobG8gXHUwMDNlPSBvbGRfbG8pIHtcbiYjNDM7XHRcdFx0KnZhbHAgPSAoKHU2NCloaSBcdTAwM2NcdTAwM2MgMzIpIHwgbG87XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0b2xkX2xvID0gbG87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50XG4geXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbiBcdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxuaW5kZXggMjEyZTIwZjcxZDgwNi4uZDM0MjQwNTQ4YWY3ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbkBAIC0zNSw2ICYjNDM7MzUsOCBAQCB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuIFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuIH1cbiBcbiYjNDM7aW50IHl0OTIxeF9jb3VudGVyX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1NjQgKnZhbHApO1xuJiM0MztcbiAvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4gICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZVxuICAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgb25seSBtb2RpZmllcyB0aGUgTW90b3Jjb21tIFlUOTIxNSBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS8pLCB3aGljaCBpbnRlcmFjdHMgd2l0aCBhIHNwZWNpZmljIHBoeXNpY2FsIE1ESU8tY29ubmVjdGVkIHN3aXRjaCBBU0lDLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MjE3YTI2Mjc0ZTc1OTE2MjRjYTdhMDg5M2RkMDYwNjM4OWExZmQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwMDoxNzo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlCmluZGV4IGFlYjEyY2I5MWY5MzUuLjVjMmQzNGVjMDVmYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZQpAQCAtMiw0ICYjNDM7Miw1IEBACiBvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgubwogeXQ5MjF4LW9ianMgOj0gY2hpcC5vCiB5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMubwomIzQzO3l0OTIxeC1vYmpzICYjNDM7PSBtaWIubwogeXQ5MjF4LW9ianMgJiM0Mzs9IHNtaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCmluZGV4IGQ2NjNhZjAxMGY0MzEuLmI0MDU5MDUzZWYxNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCkBAIC0xOSw2ICYjNDM7MTksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L29mX21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZl9uZXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zb3J0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3U2NF9zdGF0c19zeW5jLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2RzY3AuaCZndDsKQEAgLTI3LDc1ICYjNDM7MjgsOSBAQAogCiAjaW5jbHVkZSAmIzM0O2NoaXAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDttaWIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKIAotc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7Ci0JdW5zaWduZWQgaW50IHNpemU7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLQljb25zdCBjaGFyICpuYW1lOwotfTsKLQotI2RlZmluZSBNSUJfREVTQyhfc2l6ZSwgX29mZnNldCwgX25hbWUpIFwKLQl7X3NpemUsIF9vZmZzZXQsIF9uYW1lfQotCi0vKiBNdXN0IGFncmVlIHdpdGggeXQ5MjF4X21pYgotICoKLSAqIFVuc3RydWN0dXJlZCBmaWVsZHMgKG5hbWUgIT0gTlVMTCkgd2lsbCBhcHBlYXIgaW4gZ2V0X2V0aHRvb2xfc3RhdHMoKSwKLSAqIHN0cnVjdHVyZWQgZ28gdG8gdGhlaXIgKl9zdGF0cygpIG1ldGhvZHMsIGJ1dCB3ZSBuZWVkIHRoZWlyIHNpemVzIGFuZCBvZmZzZXRzCi0gKiB0byBwZXJmb3JtIDMyYml0IE1JQiBvdmVyZmxvdyB3cmFwYXJvdW5kLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyB5dDkyMXhfbWliX2Rlc2NzW10gPSB7Ci0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0JST0FEQ0FTVCwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFLCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfTVVMVElDQVNULCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfQ1JDX0VSUiwgTlVMTCksCi0KLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfQUxJR05fRVJSLCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfVU5ERVJTSVpFX0VSUiwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSLCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY0LCBOVUxMKSwKLQotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEyOF9UT18yNTUsIE5VTEwpLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMSwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl81MTJfVE9fMTAyMywgTlVMTCksCi0KLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksCi0JTUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0dPT0RfQllURVMsIE5VTEwpLAotCi0JTUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0JBRF9CWVRFUywgJiMzNDtSeEJhZEJ5dGVzJiMzNDspLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9PVkVSU0laRV9FUlIsIE5VTEwpLAotCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0RST1BQRUQsIE5VTEwpLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9CUk9BRENBU1QsIE5VTEwpLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QQVVTRSwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJQ0FTVCwgTlVMTCksCi0KLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUiwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NCwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NV9UT18xMjcsIE5VTEwpLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTI4X1RPXzI1NSwgTlVMTCksCi0KLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzI1Nl9UT181MTEsIE5VTEwpLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTAyNF9UT18xNTE4LCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzE1MTlfVE9fTUFYLCBOVUxMKSwKLQotCU1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTLCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfQ09MTElTSU9OLCBOVUxMKSwKLQotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OLCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElQTEVfQ09MTElTSU9OLCBOVUxMKSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfU0lOR0xFX0NPTExJU0lPTiwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVCwgTlVMTCksCi0KLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRUQsIE5VTEwpLAotCU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9MQVRFX0NPTExJU0lPTiwgTlVMTCksCi0JTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX09BTSwgJiMzNDtSeE9BTSYjMzQ7KSwKLQlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfT0FNLCAmIzM0O1R4T0FNJiMzNDspLAotfTsKLQogc3RydWN0IHl0OTIxeF9pbmZvIHsKIAljb25zdCBjaGFyICpuYW1lOwogCXUxNiBtYWpvcjsKQEAgLTE1NCwxNCAmIzQzOzg5LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHsKIAogI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRQk0MDk1CiAKLS8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuCi0gKgotICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcAotICogdGhlcmUpLCB3ZSBoYXZlIHRvIHBvbGwgc3RhdHMgbW9yZSBmcmVxdWVudGx5IHRoZW4gaXQgaXMgYWN0dWFsbHkgbmVlZGVkLgotICogRm9yIG92ZXJmbG93IHByb3RlY3Rpb24sIG5vcm1hbGx5LCAxMDAgc2VjIGludGVydmFsIHNob3VsZCBoYXZlIGJlZW4gT0suCi0gKi8KLSNkZWZpbmUgWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVMJKDMgKiBIWikKLQogc3RydWN0IHl0OTIxeF9yZWdfbWRpbyB7CiAJc3RydWN0IG1paV9idXMgKmJ1czsKIAlpbnQgYWRkcjsKQEAgLTU0NCwyOTQgJiM0Mzs0NzEsNiBAQCB5dDkyMXhfbWJ1c19leHRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKQogCXJldHVybiAwOwogfQogCi0vKiBSZWFkIGFuZCBoYW5kbGUgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy4gTUlCIGJ1ZmZlciBtdXN0IGJlIHplcm9lZCBiZWZvcmUuICovCi1zdGF0aWMgaW50IHl0OTIxeF9yZWFkX21pYihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KQotewotCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKLQlzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gJmFtcDtwcC0mZ3Q7bWliOwotCWludCByZXMgPSAwOwotCi0JLyogUmVhZGluZyBvZiB5dDkyMXhfcG9ydDo6bWliIGlzIG5vdCBwcm90ZWN0ZWQgYnkgYSBsb2NrIGFuZCBpdCYjMzk7cyB2YWluCi0JICogdG8ga2VlcCBpdHMgY29uc2lzdGVuY3ksIHNpbmNlIHdlIGhhdmUgdG8gcmVhZCByZWdpc3RlcnMgb25lIGJ5IG9uZQotCSAqIGFuZCB0aGVyZSBpcyBubyB3YXkgdG8gbWFrZSBhIHNuYXBzaG90IG9mIE1JQiBzdGF0cy4KLQkgKgotCSAqIFdyaXRpbmcgKGJ5IHRoaXMgZnVuY3Rpb24gb25seSkgaXMgYW5kIHNob3VsZCBiZSBwcm90ZWN0ZWQgYnkKLQkgKiByZWdfbG9jay4KLQkgKi8KLQotCWZvciAoc2l6ZV90IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHsKLQkJY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9ICZhbXA7eXQ5MjF4X21pYl9kZXNjc1tpXTsKLQkJdTMyIHJlZyA9IFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpICYjNDM7IGRlc2MtJmd0O29mZnNldDsKLQkJdTY0ICp2YWxwID0gJmFtcDsoKHU2NCAqKW1pYilbaV07Ci0JCXUzMiB2YWwwOwotCQl1NjQgdmFsOwotCi0JCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsICZhbXA7dmFsMCk7Ci0JCWlmIChyZXMpCi0JCQlicmVhazsKLQotCQlpZiAoZGVzYy0mZ3Q7c2l6ZSAmbHQ7PSAxKSB7Ci0JCQl1NjQgb2xkX3ZhbCA9ICp2YWxwOwotCi0JCQl2YWwgPSAob2xkX3ZhbCAmYW1wOyB+KHU2NClVMzJfTUFYKSB8IHZhbDA7Ci0JCQlpZiAodmFsICZsdDsgb2xkX3ZhbCkKLQkJCQl2YWwgJiM0Mzs9IDF1bGwgJmx0OyZsdDsgMzI7Ci0JCX0gZWxzZSB7Ci0JCQl1MzIgdmFsMTsKLQotCQkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0LCAmYW1wO3ZhbDEpOwotCQkJaWYgKHJlcykKLQkJCQlicmVhazsKLQkJCXZhbCA9ICgodTY0KXZhbDEgJmx0OyZsdDsgMzIpIHwgdmFsMDsKLQkJfQotCi0JCVdSSVRFX09OQ0UoKnZhbHAsIHZhbCk7Ci0JfQotCi0JcHAtJmd0O3J4X2ZyYW1lcyA9IG1pYi0mZ3Q7cnhfNjRieXRlICYjNDM7IG1pYi0mZ3Q7cnhfNjVfMTI3Ynl0ZSAmIzQzOwotCQkJbWliLSZndDtyeF8xMjhfMjU1Ynl0ZSAmIzQzOyBtaWItJmd0O3J4XzI1Nl81MTFieXRlICYjNDM7Ci0JCQltaWItJmd0O3J4XzUxMl8xMDIzYnl0ZSAmIzQzOyBtaWItJmd0O3J4XzEwMjRfMTUxOGJ5dGUgJiM0MzsKLQkJCW1pYi0mZ3Q7cnhfanVtYm87Ci0JcHAtJmd0O3R4X2ZyYW1lcyA9IG1pYi0mZ3Q7dHhfNjRieXRlICYjNDM7IG1pYi0mZ3Q7dHhfNjVfMTI3Ynl0ZSAmIzQzOwotCQkJbWliLSZndDt0eF8xMjhfMjU1Ynl0ZSAmIzQzOyBtaWItJmd0O3R4XzI1Nl81MTFieXRlICYjNDM7Ci0JCQltaWItJmd0O3R4XzUxMl8xMDIzYnl0ZSAmIzQzOyBtaWItJmd0O3R4XzEwMjRfMTUxOGJ5dGUgJiM0MzsKLQkJCW1pYi0mZ3Q7dHhfanVtYm87Ci0KLQlpZiAocmVzKQotCQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcbiYjMzQ7LCAmIzM0O3JlYWQgc3RhdHMgZm9yJiMzNDssCi0JCQlwb3J0LCByZXMpOwotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkIHl0OTIxeF9wb2xsX21pYihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IGNvbnRhaW5lcl9vZl9jb25zdCh3b3JrLCBzdHJ1Y3QgeXQ5MjF4X3BvcnQsCi0JCQkJCQkgICAgbWliX3JlYWQud29yayk7Ci0Jc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gKHZvaWQgKikocHAgLSBwcC0mZ3Q7aW5kZXgpIC0KLQkJCQkgICBvZmZzZXRvZihzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzKTsKLQl1bnNpZ25lZCBsb25nIGRlbGF5ID0gWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVM7Ci0JaW50IHBvcnQgPSBwcC0mZ3Q7aW5kZXg7Ci0JaW50IHJlczsKLQotCW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7Ci0JcmVzID0geXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpOwotCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKLQlpZiAocmVzKQotCQlkZWxheSAqPSA0OwotCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7cHAtJmd0O21pYl9yZWFkLCBkZWxheSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi15dDkyMXhfZHNhX2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHUzMiBzdHJpbmdzZXQsCi0JCSAgICAgICB1aW50OF90ICpkYXRhKQotewotCWlmIChzdHJpbmdzZXQgIT0gRVRIX1NTX1NUQVRTKQotCQlyZXR1cm47Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkmIzQzOyYjNDM7KSB7Ci0JCWNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSAmYW1wO3l0OTIxeF9taWJfZGVzY3NbaV07Ci0KLQkJaWYgKGRlc2MtJmd0O25hbWUpCi0JCQlldGh0b29sX3B1dHMoJmFtcDtkYXRhLCBkZXNjLSZndDtuYW1lKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi15dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKQotewotCXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKLQlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKLQlzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gJmFtcDtwcC0mZ3Q7bWliOwotCXNpemVfdCBqOwotCi0JbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKLQl5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwotCi0JaiA9IDA7Ci0JZm9yIChzaXplX3QgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykgewotCQljb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gJmFtcDt5dDkyMXhfbWliX2Rlc2NzW2ldOwotCi0JCWlmICghZGVzYy0mZ3Q7bmFtZSkKLQkJCWNvbnRpbnVlOwotCi0JCWRhdGFbal0gPSAoKHU2NCAqKW1pYilbaV07Ci0JCWomIzQzOyYjNDM7OwotCX0KLX0KLQotc3RhdGljIGludCB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KQotewotCWludCBjbnQgPSAwOwotCi0JaWYgKHNzZXQgIT0gRVRIX1NTX1NUQVRTKQotCQlyZXR1cm4gMDsKLQotCWZvciAoc2l6ZV90IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHsKLQkJY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9ICZhbXA7eXQ5MjF4X21pYl9kZXNjc1tpXTsKLQotCQlpZiAoZGVzYy0mZ3Q7bmFtZSkKLQkJCWNudCYjNDM7JiM0Mzs7Ci0JfQotCi0JcmV0dXJuIGNudDsKLX0KLQotc3RhdGljIHZvaWQKLXl0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKLQkJCSAgICAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKQotewotCXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKLQlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKLQlzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gJmFtcDtwcC0mZ3Q7bWliOwotCi0JbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKLQl5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwotCi0JbWFjX3N0YXRzLSZndDtGcmFtZXNUcmFuc21pdHRlZE9LID0gcHAtJmd0O3R4X2ZyYW1lczsKLQltYWNfc3RhdHMtJmd0O1NpbmdsZUNvbGxpc2lvbkZyYW1lcyA9IG1pYi0mZ3Q7dHhfc2luZ2xlX2NvbGxpc2lvbnM7Ci0JbWFjX3N0YXRzLSZndDtNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyA9IG1pYi0mZ3Q7dHhfbXVsdGlwbGVfY29sbGlzaW9uczsKLQltYWNfc3RhdHMtJmd0O0ZyYW1lc1JlY2VpdmVkT0sgPSBwcC0mZ3Q7cnhfZnJhbWVzOwotCW1hY19zdGF0cy0mZ3Q7RnJhbWVDaGVja1NlcXVlbmNlRXJyb3JzID0gbWliLSZndDtyeF9jcmNfZXJyb3JzOwotCW1hY19zdGF0cy0mZ3Q7QWxpZ25tZW50RXJyb3JzID0gbWliLSZndDtyeF9hbGlnbm1lbnRfZXJyb3JzOwotCW1hY19zdGF0cy0mZ3Q7T2N0ZXRzVHJhbnNtaXR0ZWRPSyA9IG1pYi0mZ3Q7dHhfZ29vZF9ieXRlczsKLQltYWNfc3RhdHMtJmd0O0ZyYW1lc1dpdGhEZWZlcnJlZFhtaXNzaW9ucyA9IG1pYi0mZ3Q7dHhfZGVmZXJyZWQ7Ci0JbWFjX3N0YXRzLSZndDtMYXRlQ29sbGlzaW9ucyA9IG1pYi0mZ3Q7dHhfbGF0ZV9jb2xsaXNpb25zOwotCW1hY19zdGF0cy0mZ3Q7RnJhbWVzQWJvcnRlZER1ZVRvWFNDb2xscyA9IG1pYi0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnM7Ci0JLyogbWFjX3N0YXRzLSZndDtGcmFtZXNMb3N0RHVlVG9JbnRNQUNYbWl0RXJyb3IgKi8KLQkvKiBtYWNfc3RhdHMtJmd0O0NhcnJpZXJTZW5zZUVycm9ycyAqLwotCW1hY19zdGF0cy0mZ3Q7T2N0ZXRzUmVjZWl2ZWRPSyA9IG1pYi0mZ3Q7cnhfZ29vZF9ieXRlczsKLQkvKiBtYWNfc3RhdHMtJmd0O0ZyYW1lc0xvc3REdWVUb0ludE1BQ1JjdkVycm9yICovCi0JbWFjX3N0YXRzLSZndDtNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0sgPSBtaWItJmd0O3R4X211bHRpY2FzdDsKLQltYWNfc3RhdHMtJmd0O0Jyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyA9IG1pYi0mZ3Q7dHhfYnJvYWRjYXN0OwotCS8qIG1hY19zdGF0cy0mZ3Q7RnJhbWVzV2l0aEV4Y2Vzc2l2ZURlZmVycmFsICovCi0JbWFjX3N0YXRzLSZndDtNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0gbWliLSZndDtyeF9tdWx0aWNhc3Q7Ci0JbWFjX3N0YXRzLSZndDtCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LID0gbWliLSZndDtyeF9icm9hZGNhc3Q7Ci0JLyogbWFjX3N0YXRzLSZndDtJblJhbmdlTGVuZ3RoRXJyb3JzICovCi0JLyogbWFjX3N0YXRzLSZndDtPdXRPZlJhbmdlTGVuZ3RoRmllbGQgKi8KLQltYWNfc3RhdHMtJmd0O0ZyYW1lVG9vTG9uZ0Vycm9ycyA9IG1pYi0mZ3Q7cnhfb3ZlcnNpemVfZXJyb3JzOwotfQotCi1zdGF0aWMgdm9pZAoteXQ5MjF4X2RzYV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKLQkJCSAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKQotewotCXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKLQlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKLQlzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gJmFtcDtwcC0mZ3Q7bWliOwotCi0JbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKLQl5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwotCi0JY3RybF9zdGF0cy0mZ3Q7TUFDQ29udHJvbEZyYW1lc1RyYW5zbWl0dGVkID0gbWliLSZndDt0eF9wYXVzZTsKLQljdHJsX3N0YXRzLSZndDtNQUNDb250cm9sRnJhbWVzUmVjZWl2ZWQgPSBtaWItJmd0O3J4X3BhdXNlOwotCS8qIGN0cmxfc3RhdHMtJmd0O1Vuc3VwcG9ydGVkT3Bjb2Rlc1JlY2VpdmVkICovCi19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgeXQ5MjF4X3Jtb25fcmFuZ2VzW10gPSB7Ci0JeyAwLCA2NCB9LAotCXsgNjUsIDEyNyB9LAotCXsgMTI4LCAyNTUgfSwKLQl7IDI1NiwgNTExIH0sCi0JeyA1MTIsIDEwMjMgfSwKLQl7IDEwMjQsIDE1MTggfSwKLQl7IDE1MTksIFlUOTIxWF9GUkFNRV9TSVpFX01BWCB9LAotCXt9Ci19OwotCi1zdGF0aWMgdm9pZAoteXQ5MjF4X2RzYV9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAotCQkJICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLAotCQkJICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpCi17Ci0Jc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpOwotCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwotCXN0cnVjdCB5dDkyMXhfbWliICptaWIgPSAmYW1wO3BwLSZndDttaWI7Ci0KLQltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwotCXl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTsKLQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7Ci0KLQkqcmFuZ2VzID0geXQ5MjF4X3Jtb25fcmFuZ2VzOwotCi0Jcm1vbl9zdGF0cy0mZ3Q7dW5kZXJzaXplX3BrdHMgPSBtaWItJmd0O3J4X3VuZGVyc2l6ZV9lcnJvcnM7Ci0Jcm1vbl9zdGF0cy0mZ3Q7b3ZlcnNpemVfcGt0cyA9IG1pYi0mZ3Q7cnhfb3ZlcnNpemVfZXJyb3JzOwotCXJtb25fc3RhdHMtJmd0O2ZyYWdtZW50cyA9IG1pYi0mZ3Q7cnhfYWxpZ25tZW50X2Vycm9yczsKLQkvKiBybW9uX3N0YXRzLSZndDtqYWJiZXJzICovCi0KLQlybW9uX3N0YXRzLSZndDtoaXN0WzBdID0gbWliLSZndDtyeF82NGJ5dGU7Ci0Jcm1vbl9zdGF0cy0mZ3Q7aGlzdFsxXSA9IG1pYi0mZ3Q7cnhfNjVfMTI3Ynl0ZTsKLQlybW9uX3N0YXRzLSZndDtoaXN0WzJdID0gbWliLSZndDtyeF8xMjhfMjU1Ynl0ZTsKLQlybW9uX3N0YXRzLSZndDtoaXN0WzNdID0gbWliLSZndDtyeF8yNTZfNTExYnl0ZTsKLQlybW9uX3N0YXRzLSZndDtoaXN0WzRdID0gbWliLSZndDtyeF81MTJfMTAyM2J5dGU7Ci0Jcm1vbl9zdGF0cy0mZ3Q7aGlzdFs1XSA9IG1pYi0mZ3Q7cnhfMTAyNF8xNTE4Ynl0ZTsKLQlybW9uX3N0YXRzLSZndDtoaXN0WzZdID0gbWliLSZndDtyeF9qdW1ibzsKLQotCXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbMF0gPSBtaWItJmd0O3R4XzY0Ynl0ZTsKLQlybW9uX3N0YXRzLSZndDtoaXN0X3R4WzFdID0gbWliLSZndDt0eF82NV8xMjdieXRlOwotCXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbMl0gPSBtaWItJmd0O3R4XzEyOF8yNTVieXRlOwotCXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbM10gPSBtaWItJmd0O3R4XzI1Nl81MTFieXRlOwotCXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbNF0gPSBtaWItJmd0O3R4XzUxMl8xMDIzYnl0ZTsKLQlybW9uX3N0YXRzLSZndDtoaXN0X3R4WzVdID0gbWliLSZndDt0eF8xMDI0XzE1MThieXRlOwotCXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbNl0gPSBtaWItJmd0O3R4X2p1bWJvOwotfQotCi1zdGF0aWMgdm9pZAoteXQ5MjF4X2RzYV9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAotCQkgICAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKLXsKLQlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7Ci0Jc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07Ci0Jc3RydWN0IHl0OTIxeF9taWIgKm1pYiA9ICZhbXA7cHAtJmd0O21pYjsKLQotCXN0YXRzLSZndDtyeF9sZW5ndGhfZXJyb3JzID0gbWliLSZndDtyeF91bmRlcnNpemVfZXJyb3JzICYjNDM7Ci0JCQkJICBtaWItJmd0O3J4X2ZyYWdtZW50X2Vycm9yczsKLQlzdGF0cy0mZ3Q7cnhfb3Zlcl9lcnJvcnMgPSBtaWItJmd0O3J4X292ZXJzaXplX2Vycm9yczsKLQlzdGF0cy0mZ3Q7cnhfY3JjX2Vycm9ycyA9IG1pYi0mZ3Q7cnhfY3JjX2Vycm9yczsKLQlzdGF0cy0mZ3Q7cnhfZnJhbWVfZXJyb3JzID0gbWliLSZndDtyeF9hbGlnbm1lbnRfZXJyb3JzOwotCS8qIHN0YXRzLSZndDtyeF9maWZvX2Vycm9ycyAqLwotCS8qIHN0YXRzLSZndDtyeF9taXNzZWRfZXJyb3JzICovCi0KLQlzdGF0cy0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnMgPSBtaWItJmd0O3R4X2Fib3J0ZWRfZXJyb3JzOwotCS8qIHN0YXRzLSZndDt0eF9jYXJyaWVyX2Vycm9ycyAqLwotCXN0YXRzLSZndDt0eF9maWZvX2Vycm9ycyA9IG1pYi0mZ3Q7dHhfdW5kZXJzaXplX2Vycm9yczsKLQkvKiBzdGF0cy0mZ3Q7dHhfaGVhcnRiZWF0X2Vycm9ycyAqLwotCXN0YXRzLSZndDt0eF93aW5kb3dfZXJyb3JzID0gbWliLSZndDt0eF9sYXRlX2NvbGxpc2lvbnM7Ci0KLQlzdGF0cy0mZ3Q7cnhfcGFja2V0cyA9IHBwLSZndDtyeF9mcmFtZXM7Ci0Jc3RhdHMtJmd0O3R4X3BhY2tldHMgPSBwcC0mZ3Q7dHhfZnJhbWVzOwotCXN0YXRzLSZndDtyeF9ieXRlcyA9IG1pYi0mZ3Q7cnhfZ29vZF9ieXRlcyAtIEVUSF9GQ1NfTEVOICogc3RhdHMtJmd0O3J4X3BhY2tldHM7Ci0Jc3RhdHMtJmd0O3R4X2J5dGVzID0gbWliLSZndDt0eF9nb29kX2J5dGVzIC0gRVRIX0ZDU19MRU4gKiBzdGF0cy0mZ3Q7dHhfcGFja2V0czsKLQlzdGF0cy0mZ3Q7cnhfZXJyb3JzID0gc3RhdHMtJmd0O3J4X2xlbmd0aF9lcnJvcnMgJiM0Mzsgc3RhdHMtJmd0O3J4X292ZXJfZXJyb3JzICYjNDM7Ci0JCQkgICBzdGF0cy0mZ3Q7cnhfY3JjX2Vycm9ycyAmIzQzOyBzdGF0cy0mZ3Q7cnhfZnJhbWVfZXJyb3JzOwotCXN0YXRzLSZndDt0eF9lcnJvcnMgPSBzdGF0cy0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnMgJiM0Mzsgc3RhdHMtJmd0O3R4X2ZpZm9fZXJyb3JzICYjNDM7Ci0JCQkgICBzdGF0cy0mZ3Q7dHhfd2luZG93X2Vycm9yczsKLQlzdGF0cy0mZ3Q7cnhfZHJvcHBlZCA9IG1pYi0mZ3Q7cnhfZHJvcHBlZDsKLQkvKiBzdGF0cy0mZ3Q7dHhfZHJvcHBlZCAqLwotCXN0YXRzLSZndDttdWx0aWNhc3QgPSBtaWItJmd0O3J4X211bHRpY2FzdDsKLQlzdGF0cy0mZ3Q7Y29sbGlzaW9ucyA9IG1pYi0mZ3Q7dHhfY29sbGlzaW9uczsKLX0KLQotc3RhdGljIHZvaWQKLXl0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCi0JCQkgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpCi17Ci0Jc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpOwotCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwotCXN0cnVjdCB5dDkyMXhfbWliICptaWIgPSAmYW1wO3BwLSZndDttaWI7Ci0KLQltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwotCXl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTsKLQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7Ci0KLQlwYXVzZV9zdGF0cy0mZ3Q7dHhfcGF1c2VfZnJhbWVzID0gbWliLSZndDt0eF9wYXVzZTsKLQlwYXVzZV9zdGF0cy0mZ3Q7cnhfcGF1c2VfZnJhbWVzID0gbWliLSZndDtyeF9wYXVzZTsKLX0KLQogc3RhdGljIGludAogeXQ5MjF4X3NldF9lZWUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZSkKIHsKQEAgLTM5NTMsMTEgJiM0MzszNTkyLDE0IEBAIHl0OTIxeF9waHlsaW5rX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLAogewogCXN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7CiAJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHAtJmd0O2RzKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9taWIgKnBtOwogCWludCBwb3J0ID0gZHAtJmd0O2luZGV4OwogCWludCByZXM7CiAKIAkvKiBObyBuZWVkIHRvIHN5bmM7IHBvcnQgY29udHJvbCBibG9jayBpcyBob2xkIHVudGlsIGRldmljZSByZW1vdmUgKi8KLQljYW5jZWxfZGVsYXllZF93b3JrKCZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF0ubWliX3JlYWQpOwomIzQzOwlwbSA9IHByaXYtJmd0O3BvcnRzW3BvcnRdLm1pYjsKJiM0MzsJaWYgKHBtKQomIzQzOwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmYW1wO3BtLSZndDt3b3JrKTsKIAogCW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiAJcmVzID0geXQ5MjF4X3BvcnRfZG93bihwcml2LCBwb3J0KTsKQEAgLTM5NzYsNiAmIzQzOzM2MTgsNyBAQCB5dDkyMXhfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIHsKIAlzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpOwogCXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRwLSZndDtkcyk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliICpwbTsKIAlpbnQgcG9ydCA9IGRwLSZndDtpbmRleDsKIAlpbnQgcmVzOwogCkBAIC0zOTg4LDcgJiM0MzszNjMxLDkgQEAgeXQ5MjF4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiAJCWRldl9lcnIoZHAtJmd0O2RzLSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvICVzIHBvcnQgJWQ6ICVpXG4mIzM0OywgJiMzNDticmluZyB1cCYjMzQ7LAogCQkJcG9ydCwgcmVzKTsKIAotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdLm1pYl9yZWFkLCAwKTsKJiM0MzsJcG0gPSBwcml2LSZndDtwb3J0c1twb3J0XS5taWI7CiYjNDM7CWlmIChwbSkKJiM0MzsJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO3BtLSZndDt3b3JrLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQxMDgsMTEgJiM0MzszNzUzLDM2IEBAIHl0OTIxeF9kc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCXJldHVybiBEU0FfVEFHX1BST1RPX1lUOTIxWDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHl0OTIxeF9kc2FfcG9ydF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtJmd0O21pYjsKJiM0MzsKJiM0MzsJaWYgKHBtKQomIzQzOwkJZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYygmYW1wO3BtLSZndDt3b3JrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHl0OTIxeF9kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQogewogCXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtJmd0O21pYjsKIAlpbnQgcmVzOwogCiYjNDM7CWlmICghcG0gJmFtcDsmYW1wOyAhKEJJVChwb3J0KSAmYW1wOyAocHJpdi0mZ3Q7aW5mby0mZ3Q7aW50ZXJuYWxfbWFzayB8CiYjNDM7CQkgICAgIHByaXYtJmd0O2luZm8tJmd0O2V4dGVybmFsX21hc2spKSkgewomIzQzOwkJcG0gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBtKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIXBtKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJcHAtJmd0O21pYiA9IHBtOwomIzQzOwomIzQzOwkJcG0tJmd0O3BvcnQgPSBwcDsKJiM0MzsJCXU2NF9zdGF0c19pbml0KCZhbXA7cG0tJmd0O3N5bmNwKTsKJiM0MzsJCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cG0tJmd0O3dvcmssIHl0OTIxeF9taWJfcG9sbCk7CiYjNDM7CX0KJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwogCXJlcyA9IHl0OTIxeF9wb3J0X3NldHVwKHByaXYsIHBvcnQpOwogCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKQEAgLTQ2NjcsNiAmIzQzOzQzMzcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHsKIAkvKiBwb3J0ICovCiAJLmdldF90YWdfcHJvdG9jb2wJPSB5dDkyMXhfZHNhX2dldF90YWdfcHJvdG9jb2wsCiAJLnBoeWxpbmtfZ2V0X2NhcHMJPSB5dDkyMXhfZHNhX3BoeWxpbmtfZ2V0X2NhcHMsCiYjNDM7CS5wb3J0X3RlYXJkb3duCQk9IHl0OTIxeF9kc2FfcG9ydF90ZWFyZG93biwKIAkucG9ydF9zZXR1cAkJPSB5dDkyMXhfZHNhX3BvcnRfc2V0dXAsCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRENCKQogCS8qIGRzY3AgKi8KQEAgLTQ2OTYsMTIgJiM0Mzs0MzY3LDYgQEAgc3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKIAlpZiAoIXByaXYpCiAJCXJldHVybjsKIAotCWZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtJmd0O3BvcnRzKTsgaS0tICZndDsgMDsgKSB7Ci0JCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW2ldOwotCi0JCWRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtwcC0mZ3Q7bWliX3JlYWQpOwotCX0KLQogCWRzYV91bnJlZ2lzdGVyX3N3aXRjaCgmYW1wO3ByaXYtJmd0O2RzKTsKIAogCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShwcml2LSZndDthY2xfYmxrcyk7IGkmIzQzOyYjNDM7KSB7CkBAIC00NzQ5LDcgJiM0Mzs0NDE0LDYgQEAgc3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiAJCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW2ldOwogCiAJCXBwLSZndDtpbmRleCA9IGk7Ci0JCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cHAtJmd0O21pYl9yZWFkLCB5dDkyMXhfcG9sbF9taWIpOwogCX0KIAogCWRzID0gJmFtcDtwcml2LSZndDtkczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKaW5kZXggODNjZDQ1NDk1NWRkYi4uY2UyMDE1MDI2ODQ5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKQEAgLTE2Nyw2OSAmIzQzOzE2Nyw2IEBACiAjZGVmaW5lIFlUOTIxWF9FRUVfQ1RSTAkJCTB4YjAwMDAKICNkZWZpbmUgIFlUOTIxWF9FRUVfQ1RSTF9FTm4ocG9ydCkJCUJJVChwb3J0KQogCi0jZGVmaW5lIFlUOTIxWF9NSUJfQ1RSTAkJCTB4YzAwMDQKLSNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9DTEVBTgkJCUJJVCgzMCkKLSNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9QT1JUX00JCQlHRU5NQVNLKDYsIDMpCi0jZGVmaW5lICAgWVQ5MjFYX01JQl9DVFJMX1BPUlQoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9NSUJfQ1RSTF9QT1JUX00sICh4KSkKLSNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9PTkVfUE9SVAkJQklUKDEpCi0jZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfQUxMX1BPUlQJCUJJVCgwKQotI2RlZmluZSBZVDkyMVhfTUlCbl9EQVRBMChwb3J0KQkJKDB4YzAxMDAgJiM0MzsgMHgxMDAgKiAocG9ydCkpCi0jZGVmaW5lIFlUOTIxWF9NSUJuX0RBVEFtKHBvcnQsIHgpCShZVDkyMVhfTUlCbl9EQVRBMChwb3J0KSAmIzQzOyA0ICogKHgpKQotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0JST0FEQ0FTVAkJMHgwMAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFCQkweDA0Ci0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfTVVMVElDQVNUCQkweDA4Ci0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQ1JDX0VSUgkJMHgwYwotCi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQUxJR05fRVJSCQkweDEwCi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfVU5ERVJTSVpFX0VSUgkweDE0Ci0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfRlJBR19FUlIJCTB4MTgKLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNjQJCTB4MWMKLQotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NV9UT18xMjcJMHgyMAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMjhfVE9fMjU1CTB4MjQKLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMQkweDI4Ci0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzUxMl9UT18xMDIzCTB4MmMKLQotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMDI0X1RPXzE1MTgJMHgzMAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWAkweDM0Ci0vKiAweDM4OiB1bnVzZWQgKi8KLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9HT09EX0JZVEVTCQkweDNjCi0KLS8qIDB4NDA6IDY0IGJ5dGVzICovCi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTCQkweDQ0Ci0vKiAweDQ4OiA2NCBieXRlcyAqLwotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX09WRVJTSVpFX0VSUgkweDRjCi0KLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9EUk9QUEVECQkweDUwCi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfQlJPQURDQVNUCQkweDU0Ci0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEFVU0UJCTB4NTgKLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSUNBU1QJCTB4NWMKLQotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1VOREVSU0laRV9FUlIJMHg2MAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NAkJMHg2NAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NV9UT18xMjcJMHg2OAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1CTB4NmMKLQotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExCTB4NzAKLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNTEyX1RPXzEwMjMJMHg3NAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMDI0X1RPXzE1MTgJMHg3OAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWAkweDdjCi0KLS8qIDB4ODA6IHVudXNlZCAqLwotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0dPT0RfQllURVMJCTB4ODQKLS8qIDB4ODg6IDY0IGJ5dGVzICovCi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfQ09MTElTSU9OCQkweDhjCi0KLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OCTB4OTAKLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSVBMRV9DT0xMSVNJT04JMHg5NAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1NJTkdMRV9DT0xMSVNJT04JMHg5OAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVAkJCTB4OWMKLQotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0RFRkVSUkVECQkweGEwCi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfTEFURV9DT0xMSVNJT04JMHhhNAotI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX09BTQkJCTB4YTgKLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9PQU0JCQkweGFjCi0KICNkZWZpbmUgWVQ5MjFYX0VEQVRBX0NUUkwJCTB4ZTAwMDAKICNkZWZpbmUgIFlUOTIxWF9FREFUQV9DVFJMX0FERFJfTQkJR0VOTUFTSygxNSwgOCkKICNkZWZpbmUgICBZVDkyMVhfRURBVEFfQ1RSTF9BRERSKHgpCQkJRklFTERfUFJFUChZVDkyMVhfRURBVEFfQ1RSTF9BRERSX00sICh4KSkKQEAgLTg2MSw1OCAmIzQzOzc5OCw2IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMgewogI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpICZsdDsgOCkKICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKChwb3J0KSA9PSA4IHx8IChwb3J0KSA9PSA5KQogCi1zdHJ1Y3QgeXQ5MjF4X21pYiB7Ci0JdTY0IHJ4X2Jyb2FkY2FzdDsKLQl1NjQgcnhfcGF1c2U7Ci0JdTY0IHJ4X211bHRpY2FzdDsKLQl1NjQgcnhfY3JjX2Vycm9yczsKLQotCXU2NCByeF9hbGlnbm1lbnRfZXJyb3JzOwotCXU2NCByeF91bmRlcnNpemVfZXJyb3JzOwotCXU2NCByeF9mcmFnbWVudF9lcnJvcnM7Ci0JdTY0IHJ4XzY0Ynl0ZTsKLQotCXU2NCByeF82NV8xMjdieXRlOwotCXU2NCByeF8xMjhfMjU1Ynl0ZTsKLQl1NjQgcnhfMjU2XzUxMWJ5dGU7Ci0JdTY0IHJ4XzUxMl8xMDIzYnl0ZTsKLQotCXU2NCByeF8xMDI0XzE1MThieXRlOwotCXU2NCByeF9qdW1ibzsKLQl1NjQgcnhfZ29vZF9ieXRlczsKLQotCXU2NCByeF9iYWRfYnl0ZXM7Ci0JdTY0IHJ4X292ZXJzaXplX2Vycm9yczsKLQotCXU2NCByeF9kcm9wcGVkOwotCXU2NCB0eF9icm9hZGNhc3Q7Ci0JdTY0IHR4X3BhdXNlOwotCXU2NCB0eF9tdWx0aWNhc3Q7Ci0KLQl1NjQgdHhfdW5kZXJzaXplX2Vycm9yczsKLQl1NjQgdHhfNjRieXRlOwotCXU2NCB0eF82NV8xMjdieXRlOwotCXU2NCB0eF8xMjhfMjU1Ynl0ZTsKLQotCXU2NCB0eF8yNTZfNTExYnl0ZTsKLQl1NjQgdHhfNTEyXzEwMjNieXRlOwotCXU2NCB0eF8xMDI0XzE1MThieXRlOwotCXU2NCB0eF9qdW1ibzsKLQotCXU2NCB0eF9nb29kX2J5dGVzOwotCXU2NCB0eF9jb2xsaXNpb25zOwotCi0JdTY0IHR4X2Fib3J0ZWRfZXJyb3JzOwotCXU2NCB0eF9tdWx0aXBsZV9jb2xsaXNpb25zOwotCXU2NCB0eF9zaW5nbGVfY29sbGlzaW9uczsKLQl1NjQgdHhfZ29vZDsKLQotCXU2NCB0eF9kZWZlcnJlZDsKLQl1NjQgdHhfbGF0ZV9jb2xsaXNpb25zOwotCXU2NCByeF9vYW07Ci0JdTY0IHR4X29hbTsKLX07Ci0KIHN0cnVjdCB5dDkyMXhfYWNsX2VudHJ5IHsKIAl1MzIga2V5WzJdOwogCXUzMiBtYXNrWzJdOwpAQCAtOTM2LDEzICYjNDM7ODIxLDggQEAgc3RydWN0IHl0OTIxeF9hY2xfYmxrIHsKIHN0cnVjdCB5dDkyMXhfcG9ydCB7CiAJdW5zaWduZWQgY2hhciBpbmRleDsKIAotCWJvb2wgaGFpcnBpbjsKLQlib29sIGlzb2xhdGVkOwotCi0Jc3RydWN0IGRlbGF5ZWRfd29yayBtaWJfcmVhZDsKLQlzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7Ci0JdTY0IHJ4X2ZyYW1lczsKLQl1NjQgdHhfZnJhbWVzOwomIzQzOwlib29sIGhhaXJwaW46MTsKJiM0MzsJYm9vbCBpc29sYXRlZDoxOwogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKIAl1bnNpZ25lZCBjaGFyIGxlZF9kdXR5OwpAQCAtOTUzLDYgJiM0Mzs4MzMsOCBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQgewogCiAJc3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dOwogI2VuZGlmCiYjNDM7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliICptaWI7CiB9OwogCiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMzA0NzhjZTcxYzEwNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmMKQEAgLTAsMCAmIzQzOzEsNDMwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjaGlwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bWliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21pLmgmIzM0OwomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfbWliX2Rlc2MgewomIzQzOwl1bnNpZ25lZCBjaGFyIHNpemU7CiYjNDM7CXVuc2lnbmVkIGNoYXIgb2Zmc2V0OwomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBNSUJfREVTQyhfc2l6ZSwgX29mZnNldCwgX25hbWUpIHtfc2l6ZSwgX29mZnNldCwgX25hbWV9CiYjNDM7CiYjNDM7LyogTXVzdCBhZ3JlZSB3aXRoIHl0OTIxeF9taWIKJiM0MzsgKgomIzQzOyAqIFVuc3RydWN0dXJlZCBmaWVsZHMgKG5hbWUgIT0gTlVMTCkgd2lsbCBhcHBlYXIgaW4gZ2V0X2V0aHRvb2xfc3RhdHMoKSwKJiM0MzsgKiBzdHJ1Y3R1cmVkIGdvIHRvIHRoZWlyICpfc3RhdHMoKSBtZXRob2RzLCBidXQgd2UgbmVlZCB0aGVpciBzaXplcyBhbmQgb2Zmc2V0cwomIzQzOyAqIHRvIHBlcmZvcm0gMzJiaXQgTUlCIG92ZXJmbG93IHdyYXBhcm91bmQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgeXQ5MjF4X21pYl9kZXNjc1tdID0gewomIzQzOwlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfQlJPQURDQVNULCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX01VTFRJQ0FTVCwgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9DUkNfRVJSLCBOVUxMKSwKJiM0MzsKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0FMSUdOX0VSUiwgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NCwgTlVMTCksCiYjNDM7CiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMjhfVE9fMjU1LCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8yNTZfVE9fNTExLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl81MTJfVE9fMTAyMywgTlVMTCksCiYjNDM7CiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTAyNF9UT18xNTE4LCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9SWF9HT09EX0JZVEVTLCBOVUxMKSwKJiM0MzsKJiM0MzsJTUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0JBRF9CWVRFUywgJiMzNDtSeEJhZEJ5dGVzJiMzNDspLAomIzQzOwlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfT1ZFUlNJWkVfRVJSLCBOVUxMKSwKJiM0MzsKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0RST1BQRUQsIE5VTEwpLAomIzQzOwlNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfQlJPQURDQVNULCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BBVVNFLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJQ0FTVCwgTlVMTCksCiYjNDM7CiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NCwgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1LCBOVUxMKSwKJiM0MzsKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyMywgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTAyNF9UT18xNTE4LCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksCiYjNDM7CiYjNDM7CU1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0NPTExJU0lPTiwgTlVMTCksCiYjNDM7CiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTiwgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OLCBOVUxMKSwKJiM0MzsJTUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVCwgTlVMTCksCiYjNDM7CiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9ERUZFUlJFRCwgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9MQVRFX0NPTExJU0lPTiwgTlVMTCksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9PQU0sICYjMzQ7UnhPQU0mIzM0OyksCiYjNDM7CU1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9PQU0sICYjMzQ7VHhPQU0mIzM0OyksCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLgomIzQzOyAqCiYjNDM7ICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcAomIzQzOyAqIHRoZXJlKSwgd2UgaGF2ZSB0byBwb2xsIHN0YXRzIG1vcmUgZnJlcXVlbnRseSB0aGVuIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC4KJiM0MzsgKiBGb3Igb3ZlcmZsb3cgcHJvdGVjdGlvbiwgbm9ybWFsbHksIDEwMCBzZWMgaW50ZXJ2YWwgc2hvdWxkIGhhdmUgYmVlbiBPSy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTCSgzICogSFopCiYjNDM7CiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihfZHMpIGNvbnRhaW5lcl9vZl9jb25zdChfZHMsIHN0cnVjdCB5dDkyMXhfcHJpdiwgZHMpCiYjNDM7I2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS0mZ3Q7ZHMuZGV2KQomIzQzOwomIzQzOy8qIFJlYWQgYW5kIGhhbmRsZSBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLiBNSUIgYnVmZmVyIG11c3QgYmUgemVyb2VkIGJlZm9yZS4gKi8KJiM0MztzdGF0aWMgaW50IHl0OTIxeF9taWJfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtJmd0O21pYjsKJiM0MzsJc3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjsKJiM0MzsJdTY0ICpidWYgPSBwbS0mZ3Q7ZGF0YTsKJiM0MzsJdTY0IHJ4X2ZyYW1lczsKJiM0MzsJdTY0IHR4X2ZyYW1lczsKJiM0MzsJaW50IHJlcyA9IDA7CiYjNDM7CiYjNDM7CW1pYiA9ICZhbXA7cG0tJmd0O3N0YXRzOwomIzQzOwomIzQzOwlmb3IgKHNpemVfdCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gJmFtcDt5dDkyMXhfbWliX2Rlc2NzW2ldOwomIzQzOwkJdTMyIHJlZyA9IFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpICYjNDM7IGRlc2MtJmd0O29mZnNldDsKJiM0MzsKJiM0MzsJCWlmIChkZXNjLSZndDtzaXplICZsdDs9IDEpIHsKJiM0MzsJCQl1NjQgb2xkX3ZhbCA9IGJ1ZltpXTsKJiM0MzsJCQl1MzIgdmFsMDsKJiM0MzsJCQl1NjQgdmFsOwomIzQzOwomIzQzOwkJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsICZhbXA7dmFsMCk7CiYjNDM7CQkJaWYgKHJlcykKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJdmFsID0gKG9sZF92YWwgJmFtcDsgfih1NjQpVTMyX01BWCkgfCB2YWwwOwomIzQzOwkJCWlmICh2YWwgJmx0OyBvbGRfdmFsKQomIzQzOwkJCQl2YWwgJiM0Mzs9IDF1bGwgJmx0OyZsdDsgMzI7CiYjNDM7CiYjNDM7CQkJYnVmW2ldID0gdmFsOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXMgPSB5dDkyMXhfY291bnRlcl9yZWFkKHByaXYsIHJlZywgJmFtcDtidWZbaV0pOwomIzQzOwkJCWlmIChyZXMpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtwbS0mZ3Q7c3luY3ApOwomIzQzOwlmb3IgKHNpemVfdCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkmIzQzOyYjNDM7KQomIzQzOwkJdTY0X3N0YXRzX3NldCgmYW1wOygodTY0X3N0YXRzX3QgKiltaWIpW2ldLCBidWZbaV0pOwomIzQzOwlyeF9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfNjRieXRlKSAmIzQzOwomIzQzOwkJICAgIHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF82NV8xMjdieXRlKSAmIzQzOwomIzQzOwkJICAgIHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF8xMjhfMjU1Ynl0ZSkgJiM0MzsKJiM0MzsJCSAgICB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfMjU2XzUxMWJ5dGUpICYjNDM7CiYjNDM7CQkgICAgdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4XzUxMl8xMDIzYnl0ZSkgJiM0MzsKJiM0MzsJCSAgICB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfMTAyNF8xNTE4Ynl0ZSkgJiM0MzsKJiM0MzsJCSAgICB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfanVtYm8pOwomIzQzOwl0eF9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfNjRieXRlKSAmIzQzOwomIzQzOwkJICAgIHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF82NV8xMjdieXRlKSAmIzQzOwomIzQzOwkJICAgIHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF8xMjhfMjU1Ynl0ZSkgJiM0MzsKJiM0MzsJCSAgICB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfMjU2XzUxMWJ5dGUpICYjNDM7CiYjNDM7CQkgICAgdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3R4XzUxMl8xMDIzYnl0ZSkgJiM0MzsKJiM0MzsJCSAgICB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfMTAyNF8xNTE4Ynl0ZSkgJiM0MzsKJiM0MzsJCSAgICB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfanVtYm8pOwomIzQzOwl1NjRfc3RhdHNfc2V0KCZhbXA7cG0tJmd0O3J4X2ZyYW1lcywgcnhfZnJhbWVzKTsKJiM0MzsJdTY0X3N0YXRzX3NldCgmYW1wO3BtLSZndDt0eF9mcmFtZXMsIHR4X2ZyYW1lcyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cG0tJmd0O3N5bmNwKTsKJiM0MzsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxuJiMzNDssICYjMzQ7cmVhZCBzdGF0cyBmb3ImIzM0OywKJiM0MzsJCQlwb3J0LCByZXMpOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHl0OTIxeF9taWJfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBjb250YWluZXJfb2ZfY29uc3Qod29yaywgc3RydWN0IHl0OTIxeF9taWIsCiYjNDM7CQkJCQkJICAgd29yay53b3JrKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHBtLSZndDtwb3J0OwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2ZfY29uc3QocHAsIHN0cnVjdCB5dDkyMXhfcHJpdiwKJiM0MzsJCQkJCQkgICAgICBwb3J0c1twcC0mZ3Q7aW5kZXhdKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBkZWxheSA9IFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTOwomIzQzOwlpbnQgcG9ydCA9IHBwLSZndDtpbmRleDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlkZWxheSAqPSA0OwomIzQzOwomIzQzOwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtwbS0mZ3Q7d29yaywgZGVsYXkpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkCiYjNDM7eXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LAomIzQzOwkJICAgICAgIHVpbnQ4X3QgKmRhdGEpCiYjNDM7ewomIzQzOwlpZiAoc3RyaW5nc2V0ICE9IEVUSF9TU19TVEFUUykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChzaXplX3QgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9ICZhbXA7eXQ5MjF4X21pYl9kZXNjc1tpXTsKJiM0MzsKJiM0MzsJCWlmIChkZXNjLSZndDtuYW1lKQomIzQzOwkJCWV0aHRvb2xfcHV0cygmYW1wO2RhdGEsIGRlc2MtJmd0O25hbWUpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQKJiM0Mzt5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtJmd0O21pYjsKJiM0MzsJc3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjsKJiM0MzsJdTY0ICpidWY7CiYjNDM7CXNpemVfdCBqOwomIzQzOwomIzQzOwlpZiAoIXBtKQomIzQzOwkJcmV0dXJuOwomIzQzOwltaWIgPSAmYW1wO3BtLSZndDtzdGF0czsKJiM0MzsJYnVmID0gcG0tJmd0O2RhdGE7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTsKJiM0MzsKJiM0MzsJaiA9IDA7CiYjNDM7CWZvciAoc2l6ZV90IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSAmYW1wO3l0OTIxeF9taWJfZGVzY3NbaV07CiYjNDM7CiYjNDM7CQlpZiAoIWRlc2MtJmd0O25hbWUpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlkYXRhW2pdID0gYnVmW2ldOwomIzQzOwkJaiYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X2RzYV9nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldCkKJiM0Mzt7CiYjNDM7CWludCBjbnQgPSAwOwomIzQzOwomIzQzOwlpZiAoc3NldCAhPSBFVEhfU1NfU1RBVFMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZm9yIChzaXplX3QgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9ICZhbXA7eXQ5MjF4X21pYl9kZXNjc1tpXTsKJiM0MzsKJiM0MzsJCWlmIChkZXNjLSZndDtuYW1lKQomIzQzOwkJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNudDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZAomIzQzO3l0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLSZndDttaWI7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7CiYjNDM7CiYjNDM7CWlmICghcG0pCiYjNDM7CQlyZXR1cm47CiYjNDM7CW1pYiA9ICZhbXA7cG0tJmd0O3N0YXRzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwl5dDkyMXhfbWliX3JlYWQocHJpdiwgcG9ydCk7CiYjNDM7CiYjNDM7CW1hY19zdGF0cy0mZ3Q7RnJhbWVzVHJhbnNtaXR0ZWRPSyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7cG0tJmd0O3R4X2ZyYW1lcyk7CiYjNDM7CW1hY19zdGF0cy0mZ3Q7U2luZ2xlQ29sbGlzaW9uRnJhbWVzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3R4X3NpbmdsZV9jb2xsaXNpb25zKTsKJiM0MzsJbWFjX3N0YXRzLSZndDtNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF9tdWx0aXBsZV9jb2xsaXNpb25zKTsKJiM0MzsJbWFjX3N0YXRzLSZndDtGcmFtZXNSZWNlaXZlZE9LID0gdTY0X3N0YXRzX3JlYWQoJmFtcDtwbS0mZ3Q7cnhfZnJhbWVzKTsKJiM0MzsJbWFjX3N0YXRzLSZndDtGcmFtZUNoZWNrU2VxdWVuY2VFcnJvcnMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfY3JjX2Vycm9ycyk7CiYjNDM7CW1hY19zdGF0cy0mZ3Q7QWxpZ25tZW50RXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4X2FsaWdubWVudF9lcnJvcnMpOwomIzQzOwltYWNfc3RhdHMtJmd0O09jdGV0c1RyYW5zbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfZ29vZF9ieXRlcyk7CiYjNDM7CW1hY19zdGF0cy0mZ3Q7RnJhbWVzV2l0aERlZmVycmVkWG1pc3Npb25zID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3R4X2RlZmVycmVkKTsKJiM0MzsJbWFjX3N0YXRzLSZndDtMYXRlQ29sbGlzaW9ucyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF9sYXRlX2NvbGxpc2lvbnMpOwomIzQzOwltYWNfc3RhdHMtJmd0O0ZyYW1lc0Fib3J0ZWREdWVUb1hTQ29sbHMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnMpOwomIzQzOwkvKiBtYWNfc3RhdHMtJmd0O0ZyYW1lc0xvc3REdWVUb0ludE1BQ1htaXRFcnJvciAqLwomIzQzOwkvKiBtYWNfc3RhdHMtJmd0O0NhcnJpZXJTZW5zZUVycm9ycyAqLwomIzQzOwltYWNfc3RhdHMtJmd0O09jdGV0c1JlY2VpdmVkT0sgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfZ29vZF9ieXRlcyk7CiYjNDM7CS8qIG1hY19zdGF0cy0mZ3Q7RnJhbWVzTG9zdER1ZVRvSW50TUFDUmN2RXJyb3IgKi8KJiM0MzsJbWFjX3N0YXRzLSZndDtNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfbXVsdGljYXN0KTsKJiM0MzsJbWFjX3N0YXRzLSZndDtCcm9hZGNhc3RGcmFtZXNYbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfYnJvYWRjYXN0KTsKJiM0MzsJLyogbWFjX3N0YXRzLSZndDtGcmFtZXNXaXRoRXhjZXNzaXZlRGVmZXJyYWwgKi8KJiM0MzsJbWFjX3N0YXRzLSZndDtNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4X211bHRpY2FzdCk7CiYjNDM7CW1hY19zdGF0cy0mZ3Q7QnJvYWRjYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9icm9hZGNhc3QpOwomIzQzOwkvKiBtYWNfc3RhdHMtJmd0O0luUmFuZ2VMZW5ndGhFcnJvcnMgKi8KJiM0MzsJLyogbWFjX3N0YXRzLSZndDtPdXRPZlJhbmdlTGVuZ3RoRmllbGQgKi8KJiM0MzsJbWFjX3N0YXRzLSZndDtGcmFtZVRvb0xvbmdFcnJvcnMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfb3ZlcnNpemVfZXJyb3JzKTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkCiYjNDM7eXQ5MjF4X2RzYV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLSZndDttaWI7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7CiYjNDM7CiYjNDM7CWlmICghcG0pCiYjNDM7CQlyZXR1cm47CiYjNDM7CW1pYiA9ICZhbXA7cG0tJmd0O3N0YXRzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwl5dDkyMXhfbWliX3JlYWQocHJpdiwgcG9ydCk7CiYjNDM7CiYjNDM7CWN0cmxfc3RhdHMtJmd0O01BQ0NvbnRyb2xGcmFtZXNUcmFuc21pdHRlZCA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF9wYXVzZSk7CiYjNDM7CWN0cmxfc3RhdHMtJmd0O01BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9wYXVzZSk7CiYjNDM7CS8qIGN0cmxfc3RhdHMtJmd0O1Vuc3VwcG9ydGVkT3Bjb2Rlc1JlY2VpdmVkICovCiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSB5dDkyMXhfcm1vbl9yYW5nZXNbXSA9IHsKJiM0MzsJeyAwLCA2NCB9LAomIzQzOwl7IDY1LCAxMjcgfSwKJiM0MzsJeyAxMjgsIDI1NSB9LAomIzQzOwl7IDI1NiwgNTExIH0sCiYjNDM7CXsgNTEyLCAxMDIzIH0sCiYjNDM7CXsgMTAyNCwgMTUxOCB9LAomIzQzOwl7IDE1MTksIFlUOTIxWF9GUkFNRV9TSVpFX01BWCB9LAomIzQzOwl7fQomIzQzO307CiYjNDM7CiYjNDM7dm9pZAomIzQzO3l0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsCiYjNDM7CQkJICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC0mZ3Q7bWliOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliOwomIzQzOwomIzQzOwlpZiAoIXBtKQomIzQzOwkJcmV0dXJuOwomIzQzOwltaWIgPSAmYW1wO3BtLSZndDtzdGF0czsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJeXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpOwomIzQzOwomIzQzOwkqcmFuZ2VzID0geXQ5MjF4X3Jtb25fcmFuZ2VzOwomIzQzOwomIzQzOwlybW9uX3N0YXRzLSZndDt1bmRlcnNpemVfcGt0cyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF91bmRlcnNpemVfZXJyb3JzKTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7b3ZlcnNpemVfcGt0cyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9vdmVyc2l6ZV9lcnJvcnMpOwomIzQzOwlybW9uX3N0YXRzLSZndDtmcmFnbWVudHMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfYWxpZ25tZW50X2Vycm9ycyk7CiYjNDM7CS8qIHJtb25fc3RhdHMtJmd0O2phYmJlcnMgKi8KJiM0MzsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdFswXSA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF82NGJ5dGUpOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzFdID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4XzY1XzEyN2J5dGUpOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzJdID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4XzEyOF8yNTVieXRlKTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdFszXSA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF8yNTZfNTExYnl0ZSk7CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RbNF0gPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfNTEyXzEwMjNieXRlKTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdFs1XSA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF8xMDI0XzE1MThieXRlKTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdFs2XSA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9qdW1ibyk7CiYjNDM7CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbMF0gPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfNjRieXRlKTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdF90eFsxXSA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF82NV8xMjdieXRlKTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdF90eFsyXSA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF8xMjhfMjU1Ynl0ZSk7CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbM10gPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfMjU2XzUxMWJ5dGUpOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0X3R4WzRdID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3R4XzUxMl8xMDIzYnl0ZSk7CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbNV0gPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfMTAyNF8xNTE4Ynl0ZSk7CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbNl0gPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfanVtYm8pOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQKJiM0Mzt5dDkyMXhfZHNhX2dldF9zdGF0czY0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkgICAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLSZndDttaWI7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7CiYjNDM7CXVuc2lnbmVkIGludCBzdGFydDsKJiM0MzsKJiM0MzsJaWYgKCFwbSkKJiM0MzsJCXJldHVybjsKJiM0MzsJbWliID0gJmFtcDtwbS0mZ3Q7c3RhdHM7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKCZhbXA7cG0tJmd0O3N5bmNwKTsKJiM0MzsKJiM0MzsJCXN0YXRzLSZndDtyeF9sZW5ndGhfZXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4X3VuZGVyc2l6ZV9lcnJvcnMpICYjNDM7CiYjNDM7CQkJCQkgIHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9mcmFnbWVudF9lcnJvcnMpOwomIzQzOwkJc3RhdHMtJmd0O3J4X292ZXJfZXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4X292ZXJzaXplX2Vycm9ycyk7CiYjNDM7CQlzdGF0cy0mZ3Q7cnhfY3JjX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9jcmNfZXJyb3JzKTsKJiM0MzsJCXN0YXRzLSZndDtyeF9mcmFtZV9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfYWxpZ25tZW50X2Vycm9ycyk7CiYjNDM7CQkvKiBzdGF0cy0mZ3Q7cnhfZmlmb19lcnJvcnMgKi8KJiM0MzsJCS8qIHN0YXRzLSZndDtyeF9taXNzZWRfZXJyb3JzICovCiYjNDM7CiYjNDM7CQlzdGF0cy0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnMpOwomIzQzOwkJLyogc3RhdHMtJmd0O3R4X2NhcnJpZXJfZXJyb3JzICovCiYjNDM7CQlzdGF0cy0mZ3Q7dHhfZmlmb19lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfdW5kZXJzaXplX2Vycm9ycyk7CiYjNDM7CQkvKiBzdGF0cy0mZ3Q7dHhfaGVhcnRiZWF0X2Vycm9ycyAqLwomIzQzOwkJc3RhdHMtJmd0O3R4X3dpbmRvd19lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7dHhfbGF0ZV9jb2xsaXNpb25zKTsKJiM0MzsKJiM0MzsJCXN0YXRzLSZndDtyeF9wYWNrZXRzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDtwbS0mZ3Q7cnhfZnJhbWVzKTsKJiM0MzsJCXN0YXRzLSZndDt0eF9wYWNrZXRzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDtwbS0mZ3Q7dHhfZnJhbWVzKTsKJiM0MzsJCXN0YXRzLSZndDtyeF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9nb29kX2J5dGVzKSAtCiYjNDM7CQkJCSAgRVRIX0ZDU19MRU4gKiBzdGF0cy0mZ3Q7cnhfcGFja2V0czsKJiM0MzsJCXN0YXRzLSZndDt0eF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDt0eF9nb29kX2J5dGVzKSAtCiYjNDM7CQkJCSAgRVRIX0ZDU19MRU4gKiBzdGF0cy0mZ3Q7dHhfcGFja2V0czsKJiM0MzsJCXN0YXRzLSZndDtyeF9kcm9wcGVkID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3J4X2Ryb3BwZWQpOwomIzQzOwkJLyogc3RhdHMtJmd0O3R4X2Ryb3BwZWQgKi8KJiM0MzsJCXN0YXRzLSZndDttdWx0aWNhc3QgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO21pYi0mZ3Q7cnhfbXVsdGljYXN0KTsKJiM0MzsJCXN0YXRzLSZndDtjb2xsaXNpb25zID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3R4X2NvbGxpc2lvbnMpOwomIzQzOwl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoJmFtcDtwbS0mZ3Q7c3luY3AsIHN0YXJ0KSk7CiYjNDM7CiYjNDM7CXN0YXRzLSZndDtyeF9lcnJvcnMgPSBzdGF0cy0mZ3Q7cnhfbGVuZ3RoX2Vycm9ycyAmIzQzOyBzdGF0cy0mZ3Q7cnhfb3Zlcl9lcnJvcnMgJiM0MzsKJiM0MzsJCQkgICBzdGF0cy0mZ3Q7cnhfY3JjX2Vycm9ycyAmIzQzOyBzdGF0cy0mZ3Q7cnhfZnJhbWVfZXJyb3JzOwomIzQzOwlzdGF0cy0mZ3Q7dHhfZXJyb3JzID0gc3RhdHMtJmd0O3R4X2Fib3J0ZWRfZXJyb3JzICYjNDM7IHN0YXRzLSZndDt0eF9maWZvX2Vycm9ycyAmIzQzOwomIzQzOwkJCSAgIHN0YXRzLSZndDt0eF93aW5kb3dfZXJyb3JzOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkCiYjNDM7eXQ5MjF4X2RzYV9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC0mZ3Q7bWliOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliOwomIzQzOwomIzQzOwlpZiAoIXBtKQomIzQzOwkJcmV0dXJuOwomIzQzOwltaWIgPSAmYW1wO3BtLSZndDtzdGF0czsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJeXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpOwomIzQzOwomIzQzOwlwYXVzZV9zdGF0cy0mZ3Q7dHhfcGF1c2VfZnJhbWVzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDttaWItJmd0O3R4X3BhdXNlKTsKJiM0MzsJcGF1c2Vfc3RhdHMtJmd0O3J4X3BhdXNlX2ZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bWliLSZndDtyeF9wYXVzZSk7CiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zMzk5MmE1ZjliZGMxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuaApAQCAtMCwwICYjNDM7MSwxNjcgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9ZVF9NSUJfSAomIzQzOyNkZWZpbmUgX1lUX01JQl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3U2NF9zdGF0c19zeW5jLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc2EuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIFlUOTIxWF9NSUJfQ1RSTAkJCTB4YzAwMDQKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfQ0xFQU4JCQlCSVQoMzApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX1BPUlRfTQkJCUdFTk1BU0soNiwgMykKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX01JQl9DVFJMX1BPUlQoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9NSUJfQ1RSTF9QT1JUX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfT05FX1BPUlQJCUJJVCgxKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9BTExfUE9SVAkJQklUKDApCiYjNDM7I2RlZmluZSBZVDkyMVhfTUlCbl9EQVRBMChwb3J0KQkJKDB4YzAxMDAgJiM0MzsgMHgxMDAgKiAocG9ydCkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTUlCbl9EQVRBbShwb3J0LCB4KQkoWVQ5MjFYX01JQm5fREFUQTAocG9ydCkgJiM0MzsgNCAqICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQlJPQURDQVNUCQkweDAwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFCQkweDA0CiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX01VTFRJQ0FTVAkJMHgwOAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9DUkNfRVJSCQkweDBjCiYjNDM7CiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0FMSUdOX0VSUgkJMHgxMAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSCTB4MTQKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfRlJBR19FUlIJCTB4MTgKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY0CQkweDFjCiYjNDM7CiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NV9UT18xMjcJMHgyMAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTI4X1RPXzI1NQkweDI0CiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8yNTZfVE9fNTExCTB4MjgKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzUxMl9UT18xMDIzCTB4MmMKJiM0MzsKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOAkweDMwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWAkweDM0CiYjNDM7LyogMHgzODogdW51c2VkICovCiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0dPT0RfQllURVMJCTB4M2MKJiM0MzsKJiM0MzsvKiAweDQwOiA2NCBieXRlcyAqLwomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9CQURfQllURVMJCTB4NDQKJiM0MzsvKiAweDQ4OiA2NCBieXRlcyAqLwomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PVkVSU0laRV9FUlIJMHg0YwomIzQzOwomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9EUk9QUEVECQkweDUwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0JST0FEQ0FTVAkJMHg1NAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QQVVTRQkJMHg1OAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSUNBU1QJCTB4NWMKJiM0MzsKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUgkweDYwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NAkJMHg2NAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3CTB4NjgKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEyOF9UT18yNTUJMHg2YwomIzQzOwomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMjU2X1RPXzUxMQkweDcwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyMwkweDc0CiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMDI0X1RPXzE1MTgJMHg3OAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTUxOV9UT19NQVgJMHg3YwomIzQzOwomIzQzOy8qIDB4ODA6IHVudXNlZCAqLwomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTCQkweDg0CiYjNDM7LyogMHg4ODogNjQgYnl0ZXMgKi8KJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfQ09MTElTSU9OCQkweDhjCiYjNDM7CiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04JMHg5MAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSVBMRV9DT0xMSVNJT04JMHg5NAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OCTB4OTgKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUCQkJMHg5YwomIzQzOwomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9ERUZFUlJFRAkJMHhhMAomIzQzOyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9MQVRFX0NPTExJU0lPTgkweGE0CiYjNDM7I2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX09BTQkJCTB4YTgKJiM0MzsjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfT0FNCQkJMHhhYwomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfbWliX3N0YXRzIHsKJiM0MzsJdTY0X3N0YXRzX3QgcnhfYnJvYWRjYXN0OwomIzQzOwl1NjRfc3RhdHNfdCByeF9wYXVzZTsKJiM0MzsJdTY0X3N0YXRzX3QgcnhfbXVsdGljYXN0OwomIzQzOwl1NjRfc3RhdHNfdCByeF9jcmNfZXJyb3JzOwomIzQzOwomIzQzOwl1NjRfc3RhdHNfdCByeF9hbGlnbm1lbnRfZXJyb3JzOwomIzQzOwl1NjRfc3RhdHNfdCByeF91bmRlcnNpemVfZXJyb3JzOwomIzQzOwl1NjRfc3RhdHNfdCByeF9mcmFnbWVudF9lcnJvcnM7CiYjNDM7CXU2NF9zdGF0c190IHJ4XzY0Ynl0ZTsKJiM0MzsKJiM0MzsJdTY0X3N0YXRzX3QgcnhfNjVfMTI3Ynl0ZTsKJiM0MzsJdTY0X3N0YXRzX3QgcnhfMTI4XzI1NWJ5dGU7CiYjNDM7CXU2NF9zdGF0c190IHJ4XzI1Nl81MTFieXRlOwomIzQzOwl1NjRfc3RhdHNfdCByeF81MTJfMTAyM2J5dGU7CiYjNDM7CiYjNDM7CXU2NF9zdGF0c190IHJ4XzEwMjRfMTUxOGJ5dGU7CiYjNDM7CXU2NF9zdGF0c190IHJ4X2p1bWJvOwomIzQzOwl1NjRfc3RhdHNfdCByeF9nb29kX2J5dGVzOwomIzQzOwomIzQzOwl1NjRfc3RhdHNfdCByeF9iYWRfYnl0ZXM7CiYjNDM7CXU2NF9zdGF0c190IHJ4X292ZXJzaXplX2Vycm9yczsKJiM0MzsKJiM0MzsJdTY0X3N0YXRzX3QgcnhfZHJvcHBlZDsKJiM0MzsJdTY0X3N0YXRzX3QgdHhfYnJvYWRjYXN0OwomIzQzOwl1NjRfc3RhdHNfdCB0eF9wYXVzZTsKJiM0MzsJdTY0X3N0YXRzX3QgdHhfbXVsdGljYXN0OwomIzQzOwomIzQzOwl1NjRfc3RhdHNfdCB0eF91bmRlcnNpemVfZXJyb3JzOwomIzQzOwl1NjRfc3RhdHNfdCB0eF82NGJ5dGU7CiYjNDM7CXU2NF9zdGF0c190IHR4XzY1XzEyN2J5dGU7CiYjNDM7CXU2NF9zdGF0c190IHR4XzEyOF8yNTVieXRlOwomIzQzOwomIzQzOwl1NjRfc3RhdHNfdCB0eF8yNTZfNTExYnl0ZTsKJiM0MzsJdTY0X3N0YXRzX3QgdHhfNTEyXzEwMjNieXRlOwomIzQzOwl1NjRfc3RhdHNfdCB0eF8xMDI0XzE1MThieXRlOwomIzQzOwl1NjRfc3RhdHNfdCB0eF9qdW1ibzsKJiM0MzsKJiM0MzsJdTY0X3N0YXRzX3QgdHhfZ29vZF9ieXRlczsKJiM0MzsJdTY0X3N0YXRzX3QgdHhfY29sbGlzaW9uczsKJiM0MzsKJiM0MzsJdTY0X3N0YXRzX3QgdHhfYWJvcnRlZF9lcnJvcnM7CiYjNDM7CXU2NF9zdGF0c190IHR4X211bHRpcGxlX2NvbGxpc2lvbnM7CiYjNDM7CXU2NF9zdGF0c190IHR4X3NpbmdsZV9jb2xsaXNpb25zOwomIzQzOwl1NjRfc3RhdHNfdCB0eF9nb29kOwomIzQzOwomIzQzOwl1NjRfc3RhdHNfdCB0eF9kZWZlcnJlZDsKJiM0MzsJdTY0X3N0YXRzX3QgdHhfbGF0ZV9jb2xsaXNpb25zOwomIzQzOwl1NjRfc3RhdHNfdCByeF9vYW07CiYjNDM7CXU2NF9zdGF0c190IHR4X29hbTsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX01JQl9OVU0JKHNpemVvZihzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cykgLyBzaXplb2YodTY0X3N0YXRzX3QpKQomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfbWliIHsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0OwomIzQzOwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiYjNDM7CXN0cnVjdCB1NjRfc3RhdHNfc3luYyBzeW5jcDsKJiM0MzsJLyogcHJvdGVjdGVkIGJ5IHN5bmNwIE9SIHByaXYtJmd0O3JlZ19sb2NrICovCiYjNDM7CXN0cnVjdCB5dDkyMXhfbWliX3N0YXRzIHN0YXRzOwomIzQzOwl1NjRfc3RhdHNfdCByeF9mcmFtZXM7CiYjNDM7CXU2NF9zdGF0c190IHR4X2ZyYW1lczsKJiM0MzsJLyogcHJvdGVjdGVkIGJ5IHByaXYtJmd0O3JlZ19sb2NrICovCiYjNDM7CXU2NCBkYXRhW1lUOTIxWF9NSUJfTlVNXTsKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgeXQ5MjF4X21pYl9wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7dm9pZAomIzQzO3l0OTIxeF9kc2FfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCwKJiM0MzsJCSAgICAgICB1aW50OF90ICpkYXRhKTsKJiM0Mzt2b2lkCiYjNDM7eXQ5MjF4X2RzYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1aW50NjRfdCAqZGF0YSk7CiYjNDM7aW50IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpOwomIzQzO3ZvaWQKJiM0Mzt5dDkyMXhfZHNhX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpOwomIzQzO3ZvaWQKJiM0Mzt5dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKTsKJiM0Mzt2b2lkCiYjNDM7eXQ5MjF4X2RzYV9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCSAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cywKJiM0MzsJCQkgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcyk7CiYjNDM7dm9pZAomIzQzO3l0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCSAgICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKTsKJiM0Mzt2b2lkCiYjNDM7eXQ5MjF4X2RzYV9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpOwomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMKaW5kZXggYmYzYWRmZDY0MTY1YS4uMjcwODY2MDI5OTdiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jCkBAIC02Myw2ICYjNDM7NjMsMzYgQEAgaW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKIAlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwogfQogCiYjNDM7LyogUmVsaWFibHkgcmVhZCBhIDY0Yml0IGNvdW50ZXIgKi8KJiM0MztpbnQgeXQ5MjF4X2NvdW50ZXJfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHU2NCAqdmFscCkKJiM0Mzt7CiYjNDM7CXUzMiBvbGRfbG87CiYjNDM7CWludCByZXM7CiYjNDM7CXUzMiBoaTsKJiM0MzsJdTMyIGxvOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCAmYW1wO29sZF9sbyk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IDE2OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0LCAmYW1wO2hpKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsICZhbXA7bG8pOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkJaWYgKGxvICZndDs9IG9sZF9sbykgewomIzQzOwkJCSp2YWxwID0gKCh1NjQpaGkgJmx0OyZsdDsgMzIpIHwgbG87CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CQlvbGRfbG8gPSBsbzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50CiB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAogCQkgdW5zaWduZWQgaW50IG51bV9yZWdzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmgKaW5kZXggMjEyZTIwZjcxZDgwNi4uZDM0MjQwNTQ4YWY3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCkBAIC0zNSw2ICYjNDM7MzUsOCBAQCB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KQogCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTsKIH0KIAomIzQzO2ludCB5dDkyMXhfY291bnRlcl9yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTY0ICp2YWxwKTsKJiM0MzsKIC8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUKICAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWUKICAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyODMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHBhdGNoIHNlcmllcyBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIgZnV6emluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB0b3VjaGluZyBmaWxlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vYC4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGVzZSBmaWxlcyBhcmUgYmVpbmcgbW9kaWZpZWQ6CgoqICAgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVgCiogICBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNgCiogICBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhgCiogICBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuY2AKKiAgIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5oYAoqICAgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNgCiogICBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaGAKCkFscmlnaHQsIHRoZSBsb2NhdGlvbiBnaXZlcyBtZSBhIGdvb2Qgc3RhcnQuIEkgY2FuIHNlZSB0aGF0IHRoaXMgaXMgYSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIHN3aXRjaCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIFlUOTIxWCwgd2hpY2ggaXMgYSBNb3RvcmNvbW0gZGV2aWNlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgc2V0dXAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHBhcnRpY3VsYXIgc3dpdGNoIGlzIHByb2JlZCBhbmQgd2hhdCBoYXJkd2FyZSBvciBidXMgaXQmIzM5O3MgYm91bmQgdG8uIElzIGl0IEkyQywgU1BJLCBNRElPLCBzb21ldGhpbmcgZWxzZT8gS25vd2luZyB0aGlzIHdpbGwgc2lnbmlmaWNhbnRseSBpbmZvcm0gd2hldGhlciBpdCYjMzk7cyB2aWFibGUgZm9yIHN5emthbGxlci4KCkkmIzM5O2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3Igc2NhbiB0aHJvdWdoIHRoZSByZWxldmFudCBmaWxlcyB0byBmaWd1cmUgb3V0IHRoZSBwcm9iaW5nIG1lY2hhbmlzbSBhbmQgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORVRfRFNBX1lUOTIxWCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlLTMteXQ5MjF4LW9ianMgOj0gY2hpcC5vXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjQ6eXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICYjNDM7PSBsZWRzLm9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUtNS15dDkyMXgtb2JqcyAmIzQzOz0gbWliLm9cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zODk3PXN0YXRpYyB2b2lkIHl0OTIxeF9kc2FfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM5MDAtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozOTAxOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzkwMi1cdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00MjE2PXN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI2MS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyNjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjYzLVx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmg9ODIxPXN0cnVjdCB5dDkyMXhfcG9ydCB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgtODI2LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmg6ODI3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgtODI4LVx0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaD05Nj1zdHJ1Y3QgeXQ5MjF4X2xlZCB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgtMTAxLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmg6MTAyOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgtMTAzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgS2NvbmZpZyBGaWxlcyBmb3IgRFNBIERyaXZlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG5ldHdvcmsgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIChEU0EpIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIENvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgdmVuZG9yLXNwZWNpZmljIG5hdHVyZSBvZiB0aGUgZHJpdmVyLCBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnYCBmaWxlIGZpcnN0LiBNb3RvckNvbW0gaXMgYSB2ZW5kb3IsIGFuZCBpdCYjMzk7cyBsaWtlbHkgdGhleSBoYXZlIHRoZWlyIG93biBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGRlZmluZWQgd2l0aGluIGEgZGVkaWNhdGVkIHN1YmRpcmVjdG9yeS4gSWYsIGhvd2V2ZXIsIHRoZSBkcml2ZXIgaXMgYSBtb3JlIGdlbmVyaWMgRFNBIGltcGxlbWVudGF0aW9uLCBvciBpZiB0aGUgTW90b3JDb21tLXNwZWNpZmljIGZpbGUgaXMgbWlzc2luZyBvciBkb2VzbiYjMzk7dCB5aWVsZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLCBJJiMzOTtsbCB0aGVuIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBtYWluIERTQSBLY29uZmlnIGZpbGUsIHdoaWNoIGlzIGBkcml2ZXJzL25ldC9kc2EvS2NvbmZpZ2AuIFRoYXQgZmlsZSBzaG91bGQgcHJvdmlkZSBhIG1vcmUgZ2VuZXJhbCBvdmVydmlldyBvZiB0aGUgRFNBIGZyYW1ld29yayYjMzk7cyBjb25maWd1cmFibGUgYXNwZWN0cyBhbmQgcG90ZW50aWFsbHkgcG9pbnQgbWUgdG8gb3RoZXIgcmVsZXZhbnQgc3ViLWNvbmZpZ3VyYXRpb25zLiBFaXRoZXIgd2F5LCB0aGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIGRpZ2dpbmcgaW50byB0aGUgYnVpbGQgc3lzdGVtIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX0RTQV9ZVDkyMVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWc6Mjpjb25maWcgTkVUX0RTQV9ZVDkyMVhcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnLTktXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWc6MTA6Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7TEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZy0xMi1cdGRlZmF1bHQgeVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnOjEzOlx0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnOjE0Olx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnLTE1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUtMy15dDkyMXgtb2JqcyA6PSBjaGlwLm9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6NDp5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMub1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZS01LXl0OTIxeC1vYmpzICYjNDM7PSBtaWIub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTM4OTc9c3RhdGljIHZvaWQgeXQ5MjF4X2RzYV90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzkwMC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM5MDE6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zOTAyLVx0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyMTY9c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjYxLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDI2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyNjMtXHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaD04MjE9c3RydWN0IHl0OTIxeF9wb3J0IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaC04MjYtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaDo4Mjc6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaC04MjgtXHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oPTk2PXN0cnVjdCB5dDkyMXhfbGVkIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaC0xMDEtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaDoxMDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaC0xMDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBNb3RvcmNvbW0gRFNBIERyaXZlciBSZWdpc3RyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBNb3RvcmNvbW0gRFNBIGRyaXZlciBzaXR1YXRpb24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBpdCYjMzk7cyBiZWluZyBoYW5kbGVkIGF0IHRoZSBLY29uZmlnIGxldmVsIOKAkyBwYXJ0aWN1bGFybHkgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgb3B0aW9ucyBpbiBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnYC4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gYW5kIGlmIHRoZSBkcml2ZXIgaXMgY29ycmVjdGx5IGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQgcGxhdGZvcm0uIFRoZW4sIHRoZSByZWFsIG1lYXQgb2YgaXQ6IEkmIzM5O2xsIGp1bXAgaW50byBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgcHJvYmUgZnVuY3Rpb24sIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uIGl0c2VsZiwgYW5kIHRoZSBhc3NvY2lhdGVkIG1vZHVsZSBsb2FkaW5nIHNlcXVlbmNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBwcm9iZSBpcyBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgdGhlIGhhcmR3YXJlIGFuZCBiaW5kaW5nIHRvIGl0LiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHVzaW5nIGEgcHJvcGVyIGRldmljZSB0cmVlIGJpbmRpbmcsIG9yIHNvbWUgb3RoZXIgbWV0aG9kLCBhbmQgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcmVzb3VyY2UgYWxsb2NhdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgY2xvY2sgbWFuYWdlbWVudCB3aXRoaW4gdGhlIHByb2JlIGZ1bmN0aW9uLiBUaGUgcmVnaXN0cmF0aW9uIHBhcnQgaXMgY3JpdGljYWw7IEkmIzM5O2xsIGNoZWNrIGhvdyBpdCYjMzk7cyBsaW5rZWQgaW50byB0aGUgY29yZSBEU0EgZnJhbWV3b3JrLCBob3cgdGhlIGRyaXZlciYjMzk7cyBvcGVyYXRpb25zIGFyZSBiZWluZyBob29rZWQgaW4sIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0IHBvaW50cy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgb3Igd2hlcmUgdGhpbmdzIGNhbiBnbyB3cm9uZy4gSSYjMzk7bSBsb29raW5nIGZvciByb2J1c3RuZXNzLCBnb29kIGVycm9yIGhhbmRsaW5nLCBhbmQgYSBjbGVhbiBpbnRlcmZhY2UgdG8gdGhlIERTQSBjb3JlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBORVRfRFNBX1lUOTIxWFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4gICA1Olx0XHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4gICA4Olx0XHQgIGNoaXAuXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbiAgMTE6XHRcdGJvb2wgXCYjMzQ7TEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcJiMzNDtcbiAgMTI6XHRcdGRlZmF1bHQgeVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxuICAxNDpcdFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXG4gIDE3Olx0XHQgIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoIGNoaXBzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NDc3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIERldmljZSBJbnRlZ3JhdGlvbioqCgpBbHJpZ2h0LCBzbyBhIG5ldyBgeXQ5MjF4YCBkZXZpY2UuLi4gbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBob3cgaXQgaW50ZXJmYWNlcy4gSXMgaXQgcmlkaW5nIHRoZSBNRElPIGJ1cywgaXMgaXQgSTJDLCBvciBpcyBpdCBTUEk/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjb25uZWN0aW9uIHByb3RvY29sIHRvIGtub3cgaG93IEkmIzM5O20gZ29pbmcgdG8gaW50ZXJhY3Qgd2l0aCBpdC4KClRoZW4sIHNpbmNlIHRoaXMgc2VlbXMgdG8gYmUgbmV0d29ya2luZyByZWxhdGVkLCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbW90b3Jjb21tIGRyaXZlcnMgd2l0aGluIHRoZSBuZXR3b3JraW5nIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGBjaGlwLmNgIGZpbGUuIENoYW5jZXMgYXJlLCB3aGF0ZXZlciBhcmNoaXRlY3R1cmUgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaGFzIGltcGxlbWVudGVkIGl0IHRoZXJlLiBNaWdodCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgZGVlcCBkaXZlIGFuZCB3b3JrIGJhY2t3YXJkcyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmZpbGUgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMgZG9lcyBub3QgaGF2ZSBsaW5lIDQ3NDAsIGl0IGhhcyBvbmx5IDQ0NTYgbGluZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2ZpbGUgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMgZG9lcyBub3QgaGF2ZSBsaW5lIDQ3NDAsIGl0IGhhcyBvbmx5IDQ0NTYgbGluZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Nzg4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgaW1hZ2luaW5nIG15c2VsZiBhcyBhbiBleHBlcnQgZGl2aW5nIGludG8gYGNoaXAuY2A6CgoqKkRpdmluZyBpbnRvIHRoZSBEZWVwIEVuZDogVGhlIFRhaWwgRW5kIG9mIGBjaGlwLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBza2lwIHRoZSBwcmVsaW1pbmFyaWVzIGFuZCBnZXQgcmlnaHQgdG8gdGhlIG1lYXR5IGJpdHMuIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBmb3IgdGhlIGVuZCBvZiBgY2hpcC5jYC4gTm8gbmVlZCB0byByZWhhc2ggdGhlIG9idmlvdXM7IEkmIzM5O20gYXNzdW1pbmcgdGhlIGdyb3VuZHdvcmsgYW5kIGNvcmUgZnVuY3Rpb25hbGl0eSBhcmUgYWxyZWFkeSB1bmRlcnN0b29kLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYywgb3IgdGhlIHRyb3VibGUsIHVzdWFsbHkgcmVzaWRlczogdGhlIGZpbmFsaXphdGlvbiByb3V0aW5lcywgdGhlIGludGVycnVwdCBoYW5kbGVycywgdGhlIGRlYnVnIGludGVyZmFjZXMsIG9yIG1heWJlIGp1c3Qgc29tZSBjbGV2ZXIgb3B0aW1pemF0aW9uIHRyaWNrZXJ5LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSAmIzM0O3NvIHdoYXQ/JiMzNDsg4oCTIHdoYXQmIzM5O3MgdGhlIHVsdGltYXRlIG91dGNvbWUgb2YgYWxsIHRoaXMgY29kZT8gV2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXMgYmVpbmcgaGFuZGxlZCwgb3IsIG1vcmUgaW50ZXJlc3RpbmdseSwgdGhlICp1bipoYW5kbGVkIG9uZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByZXNvdXJjZSBsZWFrcyBvciBjb25jdXJyZW5jeSBpc3N1ZXMganVzdCB3YWl0aW5nIHRvIGJpdGUgdXM/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlIGVuZCBvZnRlbiB0aWVzIGV2ZXJ5dGhpbmcgdG9nZXRoZXIsIHJldmVhbHMgdGhlIHRydWUgYXJjaGl0ZWN0dXJlLCBhbmQgZXhwb3NlcyB0aG9zZSBsaXR0bGUgd2FydHMgYW5kIHdvcmthcm91bmRzIHRoYXQgbWFrZSBhIHN5c3RlbSB0cnVseSBmYXNjaW5hdGluZy4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDAwOlx0XHRtZGlvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZGlvKSwgR0ZQX0tFUk5FTCk7XG40NDAxOlx0XHRpZiAoIW1kaW8pXG40NDAyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuNDQwMzpcdFxuNDQwNDpcdFx0bWRpby1cdTAwM2VidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbjQ0MDU6XHRcdG1kaW8tXHUwMDNlYWRkciA9IG1kaW9kZXYtXHUwMDNlYWRkcjtcbjQ0MDY6XHRcdG1kaW8tXHUwMDNlc3dpdGNoaWQgPSAwO1xuNDQwNzpcdFxuNDQwODpcdFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbjQ0MDk6XHRcbjQ0MTA6XHRcdHByaXYtXHUwMDNlcmVnX29wcyA9IFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XG40NDExOlx0XHRwcml2LVx1MDAzZXJlZ19jdHggPSBtZGlvO1xuNDQxMjpcdFxuNDQxMzpcdFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGkmIzQzOyYjNDM7KSB7XG40NDE0Olx0XHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuNDQxNTpcdFxuNDQxNjpcdFx0XHRwcC1cdTAwM2VpbmRleCA9IGk7XG40NDE3Olx0XHR9XG40NDE4Olx0XG40NDE5Olx0XHRkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG40NDIwOlx0XHRkcy1cdTAwM2VkZXYgPSBkZXY7XG40NDIxOlx0XHRkcy1cdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XG40NDIyOlx0XHRkcy1cdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xuNDQyMzpcdFx0ZHMtXHUwMDNlcHJpdiA9IHByaXY7XG40NDI0Olx0XHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZ5dDkyMXhfZHNhX3N3aXRjaF9vcHM7XG40NDI1Olx0XHRkcy1cdTAwM2VhZ2VpbmdfdGltZV9taW4gPSAxICogNTAwMDtcbjQ0MjY6XHRcdGRzLVx1MDAzZWFnZWluZ190aW1lX21heCA9IFUxNl9NQVggKiA1MDAwO1xuNDQyNzpcdFx0ZHMtXHUwMDNlcGh5bGlua19tYWNfb3BzID0gXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcztcbjQ0Mjg6XHRcdGRzLVx1MDAzZW51bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07XG40NDI5Olx0XHRkcy1cdTAwM2VudW1fcG9ydHMgPSBZVDkyMVhfUE9SVF9OVU07XG40NDMwOlx0XG40NDMxOlx0XHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIHByaXYpO1xuNDQzMjpcdFxuNDQzMzpcdFx0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpO1xuNDQzNDpcdH1cbjQ0MzU6XHRcbjQ0MzY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyMXhfb2ZfbWF0Y2hbXSA9IHtcbjQ0Mzc6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7IH0sXG40NDM4Olx0XHR7fVxuNDQzOTpcdH07XG40NDQwOlx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeXQ5MjF4X29mX21hdGNoKTtcbjQ0NDE6XHRcbjQ0NDI6XHRzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcbjQ0NDM6XHRcdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxuNDQ0NDpcdFx0LnJlbW92ZSA9IHl0OTIxeF9tZGlvX3JlbW92ZSxcbjQ0NDU6XHRcdC5zaHV0ZG93biA9IHl0OTIxeF9tZGlvX3NodXRkb3duLFxuNDQ0NjpcdFx0Lm1kaW9kcnYuZHJpdmVyID0ge1xuNDQ0NzpcdFx0XHQubmFtZSA9IFlUOTIxWF9OQU1FLFxuNDQ0ODpcdFx0XHQub2ZfbWF0Y2hfdGFibGUgPSB5dDkyMXhfb2ZfbWF0Y2gsXG40NDQ5Olx0XHR9LFxuNDQ1MDpcdH07XG40NDUxOlx0XG40NDUyOlx0bWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XG40NDUzOlx0XG40NDU0Olx0TU9EVUxFX0FVVEhPUihcJiMzNDtEYXZpZCBZYW5nIFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG40NDU1Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0RyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBTd2l0Y2hcJiMzNDspO1xuNDQ1NjpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDI1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoYWJpbGl0eSBBbmFseXNpczogQ2FuIGB5dDkyMXhfbWRpb19kcml2ZXJgIEJlIEZ1enplZD8qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgSSBjYW4gZnV6eiB0aGUgYHl0OTIxeF9tZGlvX2RyaXZlcmAuIEl0JiMzOTtzIGFuIE1ESU8gZGV2aWNlIGRyaXZlciwgYSBgbWRpb19kcml2ZXJgLCBhbmQgaXQmIzM5O3MgbWF0Y2hlZCB2aWEgRGV2aWNlIFRyZWUgd2l0aCB0aGUgYHl0OTIxeF9vZl9tYXRjaGAgZW50cnksIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIGNvbXBhdGlibGUgd2l0aCAmIzM0O21vdG9yY29tbSx5dDkyMTUuJiMzNDsgVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIEkgY2FuIGluc3RhbnRpYXRlIGFuZCBmdXp6IGFuIE1ESU8gc3dpdGNoIGRyaXZlciBsaWtlIHRoaXMgaW4gYSBzdGFuZGFyZCBRRU1VL0dDRSBzeXprYWxsZXIgZW52aXJvbm1lbnQuIENhbiBJIGRvIHRoaXMgd2l0aG91dCBwaHlzaWNhbGx5IGludGVyYWN0aW5nIHdpdGggdGhlIGhhcmR3YXJlPwoKSSBuZWVkIHRvIGFwcGx5IHRoZSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGNyaXRlcmlhIHRvIHJ1bGUgaXQgb3V0LiBUaGUgcnVsZSBzcGVjaWZpY2FsbHkgbWVudGlvbnMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBJdCBmbGFncyB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgQVNJQ3Mgb3IgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVmlydHVhbCBidXNlcywgbGlrZSB2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIGFuZCBzb2NrZXRzLCBhcmUgZXhjZXB0aW9ucy4KClRoZSBiaWcgcXVlc3Rpb24gbm93OiBjYW4gTURJTyBkZXZpY2VzIG9yIERTQSBzd2l0Y2hlcywgaW4gZ2VuZXJhbCwgYmUgaW5zdGFudGlhdGVkIHdpdGhvdXQgYW4gYWN0dWFsIHBoeXNpY2FsIE9GIGRldmljZSB0cmVlIG9yIGEgcGh5c2ljYWwgTURJTyBidXM/IE9yIGlzIHRoZXJlIGEgd2F5IHRvIGVtdWxhdGUgb3IgaW5zdGFudGlhdGUgdGhlbSBmcm9tIHVzZXJzcGFjZT8gUGVyaGFwcyBzb21ldGhpbmcgdXNpbmcgbmV0bGluaywgYSAmIzM0O2Zha2UgbWRpbywmIzM0OyBvciBzb21lIGtpbmQgb2YgbW9jayBpbXBsZW1lbnRhdGlvbj8gSSByZWFsbHkgbmVlZCB0byBjaGVjayBvdGhlciBEU0EgZHJpdmVycyB3aXRoaW4gdGhlIGtlcm5lbCBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgc29tZSBjbHVlcyBpbiB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucy4gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUmIzM5O3MgYW55IHByZWNlZGVudCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3RvcmNvbW0seXQ5MjE1JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbD0yNz1wcm9wZXJ0aWVzOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTI4LSAgY29tcGF0aWJsZTpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbDoyOTogICAgY29uc3Q6IG1vdG9yY29tbSx5dDkyMTVcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC0zMC1cbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw9NjI9ZXhhbXBsZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTcxLSAgICAgICAgc3dpdGNoQDFkIHtcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbDo3MjogICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0OTIxNVwmIzM0OztcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC03My0gICAgICAgICAgICAvKiBkZWZhdWx0IDB4MWQsIGFsdGVybmF0ZSAweDAgKi9cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NDM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDQzNzpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7IH0sXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDM4LVx0e31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwODMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNRElPIERldmljZSBDcmVhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBNRElPIGRldmljZXMgYXJlIGFjdHVhbGx5IGJyb3VnaHQgaW50byBleGlzdGVuY2Ugd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBzaWRlc3RlcCB0aGUgdHlwaWNhbCBoYXJkd2FyZS1jZW50cmljIGFwcHJvYWNoIOKAkyBkbyB3ZSBoYXZlIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBNRElPIGRldmljZXMgcHVyZWx5IHRocm91Z2ggc3lzZnMsIGlvY3RsIGNhbGxzLCBvciBuZXRsaW5rIG1lY2hhbmlzbXM/IENhbiBhIHVzZXIgc3BhY2UgYXBwbGljYXRpb24gaW5zdGFudGlhdGUgdGhlc2UgZGV2aWNlcywgbXVjaCBsaWtlIHdoYXQgd2Ugc2VlIHdpdGggSTJDICh1c2luZyB0aGUgYC9kZXYvbmV3X2RldmljZWAgYXBwcm9hY2gpPyBUaGUgZnVuZGFtZW50YWwgcXVlc3Rpb24gaXMgd2hldGhlciBNRElPIHN3aXRjaCBkcml2ZXJzIGFyZSAqcmVxdWlyZWQqLCBhbmQgd2hhdCByb2xlIHBoeXNpY2FsIG9yIE9GIGhhcmR3YXJlIHBsYXlzLCBvciBpZiB0aGVyZSYjMzk7cyBhIG1vcmUgc29mdHdhcmUtZGVmaW5lZCBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzcGVjdHJ1bSBvZiBpbnN0YW50aWF0aW9uIG1ldGhvZHMgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb19kZXZpY2VfY3JlYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQ0Nj1zdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Njc6XHRzd2l0Y2hfbWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIDMxKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ2OC1cdGlmIChJU19FUlIoc3dpdGNoX21kaW9kZXYpKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTUyPXN0YXRpYyBpbnQgb2ZfbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1paV9idXMgKm1kaW8sXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNTgtXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzo1OTpcdG1kaW9kZXYgPSBtZGlvX2RldmljZV9jcmVhdGUobWRpbywgYWRkcik7XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy02MC1cdGlmIChJU19FUlIobWRpb2RldikpXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1seW54LmM9MzEwPXN0cnVjdCBwaHlsaW5rX3BjcyAqbHlueF9wY3NfY3JlYXRlX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1seW54LmMtMzE0LVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1seW54LmM6MzE1Olx0bWRpbyA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIpO1xuZHJpdmVycy9uZXQvcGNzL3Bjcy1seW54LmMtMzE2LVx0aWYgKElTX0VSUihtZGlvKSlcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcGxhdC5jPTMzNz1zdGF0aWMgaW50IHhwY3NfcGxhdF9pbml0X2RldihzdHJ1Y3QgZHdfeHBjc19wbGF0ICpweHBjcylcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcGxhdC5jLTM0My1cdC8qIFRoZXJlIGlzIGEgc2luZ2xlIG1lbW9yeS1tYXBwZWQgRFcgWFBDUyBkZXZpY2UgKi9cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1wbGF0LmM6MzQ0Olx0bWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShweHBjcy1cdTAwM2VidXMsIDApO1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXBsYXQuYy0zNDUtXHRpZiAoSVNfRVJSKG1kaW9kZXYpKVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jPTE2MjE9c3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYyNS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2MjY6XHRtZGlvZGV2ID0gbWRpb19kZXZpY2VfY3JlYXRlKGJ1cywgYWRkcik7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjI3LVx0aWYgKElTX0VSUihtZGlvZGV2KSlcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xMDc0PXN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMDkyLVx0ICovXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDkzOlx0bWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShwaHlkZXYtXHUwMDNlbWRpby5idXMsXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMDk0LVx0XHRcdFx0ICAgICBwaHlkZXYtXHUwMDNlbWRpby5hZGRyICYjNDM7IEVOODgxMUhfUEJVU19BRERSX09GRlMpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTExMz1zdGF0aWMgdm9pZCBtZGlvX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xMTgtXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxMTk6c3RydWN0IG1kaW9fZGV2aWNlICptZGlvX2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xMjAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE0Mi19XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNDM6RVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9jcmVhdGUpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTQ0LVxuLS1cbmluY2x1ZGUvbGludXgvbWRpby5oPTk0PXZvaWQgbWRpb19kZXZpY2VfZnJlZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuaW5jbHVkZS9saW51eC9tZGlvLmg6OTU6c3RydWN0IG1kaW9fZGV2aWNlICptZGlvX2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xuaW5jbHVkZS9saW51eC9tZGlvLmgtOTYtaW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDM3CgkJCQkJCQlvdXRwdXQ6IDk5CgkJCQkJCQl0aG91Z2h0czogOTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE1vdG9yY29tbSBZVDkyMTUgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCwgd2hpY2ggc2VlbXMgdG8gZm9jdXMgb24gdGhlIE1vdG9yY29tbSBZVDkyMTUgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciwgaXMgZXZlbiAqZnV6emFibGUqIHdpdGhpbiB0aGUgY29uc3RyYWludHMgb2Ygb3VyIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBrZXkgaGVyZSBpcyByZWFjaGFiaWxpdHkuIFRoZSBgb2ZfbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2VgIGZ1bmN0aW9uIGNhbGwgc2VlbXMgdG8gYmUgdGhlIGVudHJ5IHBvaW50IHdoZW4gZGVhbGluZyB3aXRoIE9wZW5GaXJtd2FyZSBEZXZpY2UgVHJlZSBub2RlcywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZSBgeXQ5MjF4X21kaW9fZHJpdmVyYCBpcyB0cmlnZ2VyZWQgaW4gYW55IG90aGVyIHdheS4gUXVpY2tseSBjaGVja2luZywgdGhlIGRyaXZlciB1c2VzIGFuIGBvZl9tYXRjaF90YWJsZWAgKCBgeXQ5MjF4X29mX21hdGNoYCksIGJ1dCBubyBgaWRfdGFibGVgIG9yIGFueXRoaW5nIGVsc2UuCgpOb3csIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBNb3RvcmNvbW0gWVQ5MjE1IGlzIGEgKnBoeXNpY2FsKiBzd2l0Y2ggY2hpcCwgYW4gQVNJQyBjb250cm9sbGVkIHZpYSBNRElPLiBJdCYjMzk7cyB1c3VhbGx5IGZvdW5kIG9uIGVtYmVkZGVkIHN5c3RlbXMsIHNwZWNpZmljYWxseSBvbmVzIHVzaW5nIGRldmljZSB0cmVlcyB0byBkZXNjcmliZSB0aGUgaGFyZHdhcmUuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgUUVNVS9HQ0UsIG91ciBzdGFuZGFyZCBmdXp6aW5nIHBsYXRmb3JtcywgZW11bGF0ZSB0aGlzLiBJIGtub3cgdGhleSBkb24mIzM5O3Q7IGl0JiMzOTtzIGEgZGVkaWNhdGVkIHBpZWNlIG9mIGhhcmR3YXJlLgoKUmlnaHQsIHRpbWUgdG8gY29uc3VsdCB0aGUgcmVhY2hhYmlsaXR5IGd1aWRlbGluZXMuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBjcnVjaWFsLiBUaGUgZ3VpZGVsaW5lcyBjbGVhcmx5IHN0YXRlIHRoYXQgZnV6emluZyBjYW4gKm9ubHkqIGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0JiMzOTtzIGV4ZWN1dGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBDb2RlIHRoYXQmIzM5O3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHNob3VsZCAqbm90KiBiZSBmdXp6ZWQuIFRoZSAmIzM0O25lZ2F0aXZlIGNyaXRlcmlhJiMzNDsgc2VjdGlvbiBmdXJ0aGVyIGNsYXJpZmllcyB0aGlzIHdpdGggZXhhbXBsZXMuIFZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBsaWtlIHRoaXMsIHJlcXVpcmluZyBwaHlzaWNhbCBjYXJkcyBvciBBU0lDcywgYXJlIGV4cGxpY2l0bHkgZXhjbHVkZWQuIFRoZSBndWlkZWxpbmVzIHNwZWNpZmljYWxseSBjYWxsIG91dCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIGFuZCBQQ0llIHN3aXRjaGVzLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBJdCYjMzk7cyBtb2RpZnlpbmcgZmlsZXMgd2l0aGluIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2AsIHdoaWNoIGlzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IEV0aGVybmV0IHN3aXRjaCBkcml2ZXIuIFRoaXMgaXMgYSB2ZXJ5IHN0cm9uZyBpbmRpY2F0b3IuIFRoaXMgY29uZmlybXMgbXkgc3VzcGljaW9uIHRoYXQgaXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gZnVuY3Rpb24uIEl0IHRvdWNoZXMgdGhlIE1ha2VmaWxlLCBjaGlwLmMsIGNoaXAuaCwgbWliLmMsIG1pYi5oLCBzbWkuYyBhbmQgc21pLmguCgpTbyB0aGUgZHJpdmVyJiMzOTtzIGNvZGUgaXMgbm90IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudCwgSSBuZWVkIHRvIGNvbmZpcm0gSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLiBBIGNhcmVmdWwgZGlmZiBjb25maXJtcyB0aGlzOiB0aGUgY2hhbmdlcyBhZGQgYSBuZXcgTUlCIGhhbmRsaW5nLCBidXQgZXZlcnl0aGluZyBpcyBjb250YWluZWQgd2l0aGluIHRoYXQgc3BlY2lmaWMgZHJpdmVyIGRpcmVjdG9yeS4gSXQmIzM5O3MgbW92aW5nIE1JQiBoYW5kbGluZyB0byBtaWIuYy9oLCBhZGRpbmcgc29tZSBuZXcgYHl0OTIxeF9jb3VudGVyX3JlYWRgIGZ1bmN0aW9ucy4gQWxsIHdpdGhpbiB0aGUgaGFyZHdhcmUgc3dpdGNoLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgZHJpdmVyIHJlcXVpcmVzIGEgcGh5c2ljYWwgTURJTy1hdHRhY2hlZCBFdGhlcm5ldCBzd2l0Y2ggQVNJQywgd2hpY2ggaXMgbm90IGVtdWxhdGVkLCB0aGUgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgd2l0aGluIG91ciBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLiBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoICpzaG91bGQgbm90KiBiZSBmdXp6ZWQuCgpNeSBkZWNpc2lvbjoKCiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWAKKiAgIGBGb2N1c1N5bWJvbHM6IFtdYAoqICAgYEVuYWJsZUNvbmZpZ3M6IFtdYAoKVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiBUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvZGUgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyLCBhIGhhcmR3YXJlIGRyaXZlciBmb3IgYW4gZXh0ZXJuYWwgTURJTy1hdHRhY2hlZCBFdGhlcm5ldCBzd2l0Y2ggQVNJQy4gU3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMsIFFFTVUgYW5kIEdDRSwgZG8gbm90IGVtdWxhdGUgdGhpcyBoYXJkd2FyZSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4KCkxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vKSwgd2hpY2ggaW50ZXJhY3RzIHdpdGggYSBzcGVjaWZpYyBwaHlzaWNhbCBNRElPLWNvbm5lY3RlZCBzd2l0Y2ggQVNJQy4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgb25seSBtb2RpZmllcyB0aGUgTW90b3Jjb21tIFlUOTIxNSBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS8pLCB3aGljaCBpbnRlcmFjdHMgd2l0aCBhIHNwZWNpZmljIHBoeXNpY2FsIE1ESU8tY29ubmVjdGVkIHN3aXRjaCBBU0lDLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxNzo1Mi45OTQ2MDQ0ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzM3MzYwMjIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLyksIHdoaWNoIGludGVyYWN0cyB3aXRoIGEgc3BlY2lmaWMgcGh5c2ljYWwgTURJTy1jb25uZWN0ZWQgc3dpdGNoIEFTSUMuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTc6NTIuOTk0NjA5MjYzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzEzMzQyMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzIxN2EyNjI3NGU3NTkxNjI0Y2E3YTA4OTNkZDA2MDYzODlhMWZkMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjE3OjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxuaW5kZXggYWViMTJjYjkxZjkzNS4uNWMyZDM0ZWMwNWZjMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxcbkBAIC0yLDQgKzIsNSBAQFxcbiBvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXFxuIHl0OTIxeC1vYmpzIDo9IGNoaXAub1xcbiB5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgKz0gbGVkcy5vXFxuK3l0OTIxeC1vYmpzICs9IG1pYi5vXFxuIHl0OTIxeC1vYmpzICs9IHNtaS5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcXG5pbmRleCBkNjYzYWYwMTBmNDMxLi5iNDA1OTA1M2VmMTUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcXG5AQCAtMTksNiArMTksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbWRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbmV0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb3J0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91NjRfc3RhdHNfc3luYy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc2EuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc2NwLmhcXHUwMDNlXFxuQEAgLTI3LDc1ICsyOCw5IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiY2hpcC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibGVkcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwibWliLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4gXFxuLXN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xcbi1cXHR1bnNpZ25lZCBpbnQgc2l6ZTtcXG4tXFx0dW5zaWduZWQgaW50IG9mZnNldDtcXG4tXFx0Y29uc3QgY2hhciAqbmFtZTtcXG4tfTtcXG4tXFxuLSNkZWZpbmUgTUlCX0RFU0MoX3NpemUsIF9vZmZzZXQsIF9uYW1lKSBcXFxcXFxuLVxcdHtfc2l6ZSwgX29mZnNldCwgX25hbWV9XFxuLVxcbi0vKiBNdXN0IGFncmVlIHdpdGggeXQ5MjF4X21pYlxcbi0gKlxcbi0gKiBVbnN0cnVjdHVyZWQgZmllbGRzIChuYW1lICE9IE5VTEwpIHdpbGwgYXBwZWFyIGluIGdldF9ldGh0b29sX3N0YXRzKCksXFxuLSAqIHN0cnVjdHVyZWQgZ28gdG8gdGhlaXIgKl9zdGF0cygpIG1ldGhvZHMsIGJ1dCB3ZSBuZWVkIHRoZWlyIHNpemVzIGFuZCBvZmZzZXRzXFxuLSAqIHRvIHBlcmZvcm0gMzJiaXQgTUlCIG92ZXJmbG93IHdyYXBhcm91bmQuXFxuLSAqL1xcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyB5dDkyMXhfbWliX2Rlc2NzW10gPSB7XFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1QsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEFVU0UsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfTVVMVElDQVNULCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0NSQ19FUlIsIE5VTEwpLFxcbi1cXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0FMSUdOX0VSUiwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSLCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NCwgTlVMTCksXFxuLVxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyNywgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTI4X1RPXzI1NSwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMSwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxcbi1cXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMDI0X1RPXzE1MTgsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzE1MTlfVE9fTUFYLCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0dPT0RfQllURVMsIE5VTEwpLFxcbi1cXG4tXFx0TUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0JBRF9CWVRFUywgXFxcIlJ4QmFkQnl0ZXNcXFwiKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX09WRVJTSVpFX0VSUiwgTlVMTCksXFxuLVxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfRFJPUFBFRCwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9CUk9BRENBU1QsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEFVU0UsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElDQVNULCBOVUxMKSxcXG4tXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NCwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1LCBOVUxMKSxcXG4tXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMjU2X1RPXzUxMSwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTUxOV9UT19NQVgsIE5VTEwpLFxcbi1cXG4tXFx0TUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1RYX0dPT0RfQllURVMsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfQ09MTElTSU9OLCBOVUxMKSxcXG4tXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OLCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTiwgTlVMTCksXFxuLVxcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OLCBOVUxMKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVCwgTlVMTCksXFxuLVxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRUQsIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTEFURV9DT0xMSVNJT04sIE5VTEwpLFxcbi1cXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfT0FNLCBcXFwiUnhPQU1cXFwiKSxcXG4tXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX09BTSwgXFxcIlR4T0FNXFxcIiksXFxuLX07XFxuLVxcbiBzdHJ1Y3QgeXQ5MjF4X2luZm8ge1xcbiBcXHRjb25zdCBjaGFyICpuYW1lO1xcbiBcXHR1MTYgbWFqb3I7XFxuQEAgLTE1NCwxNCArODksNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xcbiBcXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVxcdDQwOTVcXG4gXFxuLS8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXFxuLSAqXFxuLSAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcXG4tICogdGhlcmUpLCB3ZSBoYXZlIHRvIHBvbGwgc3RhdHMgbW9yZSBmcmVxdWVudGx5IHRoZW4gaXQgaXMgYWN0dWFsbHkgbmVlZGVkLlxcbi0gKiBGb3Igb3ZlcmZsb3cgcHJvdGVjdGlvbiwgbm9ybWFsbHksIDEwMCBzZWMgaW50ZXJ2YWwgc2hvdWxkIGhhdmUgYmVlbiBPSy5cXG4tICovXFxuLSNkZWZpbmUgWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVNcXHQoMyAqIEhaKVxcbi1cXG4gc3RydWN0IHl0OTIxeF9yZWdfbWRpbyB7XFxuIFxcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuIFxcdGludCBhZGRyO1xcbkBAIC01NDQsMjk0ICs0NzEsNiBAQCB5dDkyMXhfbWJ1c19leHRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tLyogUmVhZCBhbmQgaGFuZGxlIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuIE1JQiBidWZmZXIgbXVzdCBiZSB6ZXJvZWQgYmVmb3JlLiAqL1xcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWFkX21pYihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxcbi17XFxuLVxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuLVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG4tXFx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFxcdTAwMjZwcC1cXHUwMDNlbWliO1xcbi1cXHRpbnQgcmVzID0gMDtcXG4tXFxuLVxcdC8qIFJlYWRpbmcgb2YgeXQ5MjF4X3BvcnQ6Om1pYiBpcyBub3QgcHJvdGVjdGVkIGJ5IGEgbG9jayBhbmQgaXQncyB2YWluXFxuLVxcdCAqIHRvIGtlZXAgaXRzIGNvbnNpc3RlbmN5LCBzaW5jZSB3ZSBoYXZlIHRvIHJlYWQgcmVnaXN0ZXJzIG9uZSBieSBvbmVcXG4tXFx0ICogYW5kIHRoZXJlIGlzIG5vIHdheSB0byBtYWtlIGEgc25hcHNob3Qgb2YgTUlCIHN0YXRzLlxcbi1cXHQgKlxcbi1cXHQgKiBXcml0aW5nIChieSB0aGlzIGZ1bmN0aW9uIG9ubHkpIGlzIGFuZCBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5XFxuLVxcdCAqIHJlZ19sb2NrLlxcbi1cXHQgKi9cXG4tXFxuLVxcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSsrKSB7XFxuLVxcdFxcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcXG4tXFx0XFx0dTMyIHJlZyA9IFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpICsgZGVzYy1cXHUwMDNlb2Zmc2V0O1xcbi1cXHRcXHR1NjQgKnZhbHAgPSBcXHUwMDI2KCh1NjQgKiltaWIpW2ldO1xcbi1cXHRcXHR1MzIgdmFsMDtcXG4tXFx0XFx0dTY0IHZhbDtcXG4tXFxuLVxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFxcdTAwMjZ2YWwwKTtcXG4tXFx0XFx0aWYgKHJlcylcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRcXHRpZiAoZGVzYy1cXHUwMDNlc2l6ZSBcXHUwMDNjPSAxKSB7XFxuLVxcdFxcdFxcdHU2NCBvbGRfdmFsID0gKnZhbHA7XFxuLVxcbi1cXHRcXHRcXHR2YWwgPSAob2xkX3ZhbCBcXHUwMDI2IH4odTY0KVUzMl9NQVgpIHwgdmFsMDtcXG4tXFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNjIG9sZF92YWwpXFxuLVxcdFxcdFxcdFxcdHZhbCArPSAxdWxsIFxcdTAwM2NcXHUwMDNjIDMyO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR1MzIgdmFsMTtcXG4tXFxuLVxcdFxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0LCBcXHUwMDI2dmFsMSk7XFxuLVxcdFxcdFxcdGlmIChyZXMpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR2YWwgPSAoKHU2NCl2YWwxIFxcdTAwM2NcXHUwMDNjIDMyKSB8IHZhbDA7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdFdSSVRFX09OQ0UoKnZhbHAsIHZhbCk7XFxuLVxcdH1cXG4tXFxuLVxcdHBwLVxcdTAwM2VyeF9mcmFtZXMgPSBtaWItXFx1MDAzZXJ4XzY0Ynl0ZSArIG1pYi1cXHUwMDNlcnhfNjVfMTI3Ynl0ZSArXFxuLVxcdFxcdFxcdG1pYi1cXHUwMDNlcnhfMTI4XzI1NWJ5dGUgKyBtaWItXFx1MDAzZXJ4XzI1Nl81MTFieXRlICtcXG4tXFx0XFx0XFx0bWliLVxcdTAwM2VyeF81MTJfMTAyM2J5dGUgKyBtaWItXFx1MDAzZXJ4XzEwMjRfMTUxOGJ5dGUgK1xcbi1cXHRcXHRcXHRtaWItXFx1MDAzZXJ4X2p1bWJvO1xcbi1cXHRwcC1cXHUwMDNldHhfZnJhbWVzID0gbWliLVxcdTAwM2V0eF82NGJ5dGUgKyBtaWItXFx1MDAzZXR4XzY1XzEyN2J5dGUgK1xcbi1cXHRcXHRcXHRtaWItXFx1MDAzZXR4XzEyOF8yNTVieXRlICsgbWliLVxcdTAwM2V0eF8yNTZfNTExYnl0ZSArXFxuLVxcdFxcdFxcdG1pYi1cXHUwMDNldHhfNTEyXzEwMjNieXRlICsgbWliLVxcdTAwM2V0eF8xMDI0XzE1MThieXRlICtcXG4tXFx0XFx0XFx0bWliLVxcdTAwM2V0eF9qdW1ibztcXG4tXFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvICVzIHBvcnQgJWQ6ICVpXFxcXG5cXFwiLCBcXFwicmVhZCBzdGF0cyBmb3JcXFwiLFxcbi1cXHRcXHRcXHRwb3J0LCByZXMpO1xcbi1cXHRyZXR1cm4gcmVzO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCB5dDkyMXhfcG9sbF9taWIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi17XFxuLVxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBjb250YWluZXJfb2ZfY29uc3Qod29yaywgc3RydWN0IHl0OTIxeF9wb3J0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbWliX3JlYWQud29yayk7XFxuLVxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9ICh2b2lkICopKHBwIC0gcHAtXFx1MDAzZWluZGV4KSAtXFxuLVxcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHMpO1xcbi1cXHR1bnNpZ25lZCBsb25nIGRlbGF5ID0gWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVM7XFxuLVxcdGludCBwb3J0ID0gcHAtXFx1MDAzZWluZGV4O1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi1cXHRyZXMgPSB5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRkZWxheSAqPSA0O1xcbi1cXG4tXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQsIGRlbGF5KTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWRcXG4teXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LFxcbi1cXHRcXHQgICAgICAgdWludDhfdCAqZGF0YSlcXG4te1xcbi1cXHRpZiAoc3RyaW5nc2V0ICE9IEVUSF9TU19TVEFUUylcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG4tXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbi1cXG4tXFx0XFx0aWYgKGRlc2MtXFx1MDAzZW5hbWUpXFxuLVxcdFxcdFxcdGV0aHRvb2xfcHV0cyhcXHUwMDI2ZGF0YSwgZGVzYy1cXHUwMDNlbmFtZSk7XFxuLVxcdH1cXG4tfVxcbi1cXG4tc3RhdGljIHZvaWRcXG4teXQ5MjF4X2RzYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1aW50NjRfdCAqZGF0YSlcXG4te1xcbi1cXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuLVxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuLVxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG4tXFx0c2l6ZV90IGo7XFxuLVxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuLVxcdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuLVxcbi1cXHRqID0gMDtcXG4tXFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG4tXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbi1cXG4tXFx0XFx0aWYgKCFkZXNjLVxcdTAwM2VuYW1lKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGRhdGFbal0gPSAoKHU2NCAqKW1pYilbaV07XFxuLVxcdFxcdGorKztcXG4tXFx0fVxcbi19XFxuLVxcbi1zdGF0aWMgaW50IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuLXtcXG4tXFx0aW50IGNudCA9IDA7XFxuLVxcbi1cXHRpZiAoc3NldCAhPSBFVEhfU1NfU1RBVFMpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG4tXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbi1cXG4tXFx0XFx0aWYgKGRlc2MtXFx1MDAzZW5hbWUpXFxuLVxcdFxcdFxcdGNudCsrO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gY250O1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZFxcbi15dDkyMXhfZHNhX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKVxcbi17XFxuLVxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG4tXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4tXFx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFxcdTAwMjZwcC1cXHUwMDNlbWliO1xcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi1cXHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi1cXG4tXFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LID0gcHAtXFx1MDAzZXR4X2ZyYW1lcztcXG4tXFx0bWFjX3N0YXRzLVxcdTAwM2VTaW5nbGVDb2xsaXNpb25GcmFtZXMgPSBtaWItXFx1MDAzZXR4X3NpbmdsZV9jb2xsaXNpb25zO1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZU11bHRpcGxlQ29sbGlzaW9uRnJhbWVzID0gbWliLVxcdTAwM2V0eF9tdWx0aXBsZV9jb2xsaXNpb25zO1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1JlY2VpdmVkT0sgPSBwcC1cXHUwMDNlcnhfZnJhbWVzO1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lQ2hlY2tTZXF1ZW5jZUVycm9ycyA9IG1pYi1cXHUwMDNlcnhfY3JjX2Vycm9ycztcXG4tXFx0bWFjX3N0YXRzLVxcdTAwM2VBbGlnbm1lbnRFcnJvcnMgPSBtaWItXFx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnM7XFxuLVxcdG1hY19zdGF0cy1cXHUwMDNlT2N0ZXRzVHJhbnNtaXR0ZWRPSyA9IG1pYi1cXHUwMDNldHhfZ29vZF9ieXRlcztcXG4tXFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNXaXRoRGVmZXJyZWRYbWlzc2lvbnMgPSBtaWItXFx1MDAzZXR4X2RlZmVycmVkO1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZUxhdGVDb2xsaXNpb25zID0gbWliLVxcdTAwM2V0eF9sYXRlX2NvbGxpc2lvbnM7XFxuLVxcdG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzQWJvcnRlZER1ZVRvWFNDb2xscyA9IG1pYi1cXHUwMDNldHhfYWJvcnRlZF9lcnJvcnM7XFxuLVxcdC8qIG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzTG9zdER1ZVRvSW50TUFDWG1pdEVycm9yICovXFxuLVxcdC8qIG1hY19zdGF0cy1cXHUwMDNlQ2FycmllclNlbnNlRXJyb3JzICovXFxuLVxcdG1hY19zdGF0cy1cXHUwMDNlT2N0ZXRzUmVjZWl2ZWRPSyA9IG1pYi1cXHUwMDNlcnhfZ29vZF9ieXRlcztcXG4tXFx0LyogbWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNMb3N0RHVlVG9JbnRNQUNSY3ZFcnJvciAqL1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyA9IG1pYi1cXHUwMDNldHhfbXVsdGljYXN0O1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyA9IG1pYi1cXHUwMDNldHhfYnJvYWRjYXN0O1xcbi1cXHQvKiBtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1dpdGhFeGNlc3NpdmVEZWZlcnJhbCAqL1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1JlY2VpdmVkT0sgPSBtaWItXFx1MDAzZXJ4X211bHRpY2FzdDtcXG4tXFx0bWFjX3N0YXRzLVxcdTAwM2VCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LID0gbWliLVxcdTAwM2VyeF9icm9hZGNhc3Q7XFxuLVxcdC8qIG1hY19zdGF0cy1cXHUwMDNlSW5SYW5nZUxlbmd0aEVycm9ycyAqL1xcbi1cXHQvKiBtYWNfc3RhdHMtXFx1MDAzZU91dE9mUmFuZ2VMZW5ndGhGaWVsZCAqL1xcbi1cXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lVG9vTG9uZ0Vycm9ycyA9IG1pYi1cXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZFxcbi15dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcXG4te1xcbi1cXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuLVxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuLVxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG4tXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tXFx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tXFxuLVxcdGN0cmxfc3RhdHMtXFx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNUcmFuc21pdHRlZCA9IG1pYi1cXHUwMDNldHhfcGF1c2U7XFxuLVxcdGN0cmxfc3RhdHMtXFx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCA9IG1pYi1cXHUwMDNlcnhfcGF1c2U7XFxuLVxcdC8qIGN0cmxfc3RhdHMtXFx1MDAzZVVuc3VwcG9ydGVkT3Bjb2Rlc1JlY2VpdmVkICovXFxuLX1cXG4tXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgeXQ5MjF4X3Jtb25fcmFuZ2VzW10gPSB7XFxuLVxcdHsgMCwgNjQgfSxcXG4tXFx0eyA2NSwgMTI3IH0sXFxuLVxcdHsgMTI4LCAyNTUgfSxcXG4tXFx0eyAyNTYsIDUxMSB9LFxcbi1cXHR7IDUxMiwgMTAyMyB9LFxcbi1cXHR7IDEwMjQsIDE1MTggfSxcXG4tXFx0eyAxNTE5LCBZVDkyMVhfRlJBTUVfU0laRV9NQVggfSxcXG4tXFx0e31cXG4tfTtcXG4tXFxuLXN0YXRpYyB2b2lkXFxuLXl0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxcbi1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcXG4te1xcbi1cXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuLVxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuLVxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG4tXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tXFx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tXFxuLVxcdCpyYW5nZXMgPSB5dDkyMXhfcm1vbl9yYW5nZXM7XFxuLVxcbi1cXHRybW9uX3N0YXRzLVxcdTAwM2V1bmRlcnNpemVfcGt0cyA9IG1pYi1cXHUwMDNlcnhfdW5kZXJzaXplX2Vycm9ycztcXG4tXFx0cm1vbl9zdGF0cy1cXHUwMDNlb3ZlcnNpemVfcGt0cyA9IG1pYi1cXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzO1xcbi1cXHRybW9uX3N0YXRzLVxcdTAwM2VmcmFnbWVudHMgPSBtaWItXFx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnM7XFxuLVxcdC8qIHJtb25fc3RhdHMtXFx1MDAzZWphYmJlcnMgKi9cXG4tXFxuLVxcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbMF0gPSBtaWItXFx1MDAzZXJ4XzY0Ynl0ZTtcXG4tXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFsxXSA9IG1pYi1cXHUwMDNlcnhfNjVfMTI3Ynl0ZTtcXG4tXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFsyXSA9IG1pYi1cXHUwMDNlcnhfMTI4XzI1NWJ5dGU7XFxuLVxcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbM10gPSBtaWItXFx1MDAzZXJ4XzI1Nl81MTFieXRlO1xcbi1cXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzRdID0gbWliLVxcdTAwM2VyeF81MTJfMTAyM2J5dGU7XFxuLVxcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbNV0gPSBtaWItXFx1MDAzZXJ4XzEwMjRfMTUxOGJ5dGU7XFxuLVxcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbNl0gPSBtaWItXFx1MDAzZXJ4X2p1bWJvO1xcbi1cXG4tXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFswXSA9IG1pYi1cXHUwMDNldHhfNjRieXRlO1xcbi1cXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0X3R4WzFdID0gbWliLVxcdTAwM2V0eF82NV8xMjdieXRlO1xcbi1cXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0X3R4WzJdID0gbWliLVxcdTAwM2V0eF8xMjhfMjU1Ynl0ZTtcXG4tXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFszXSA9IG1pYi1cXHUwMDNldHhfMjU2XzUxMWJ5dGU7XFxuLVxcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbNF0gPSBtaWItXFx1MDAzZXR4XzUxMl8xMDIzYnl0ZTtcXG4tXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs1XSA9IG1pYi1cXHUwMDNldHhfMTAyNF8xNTE4Ynl0ZTtcXG4tXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs2XSA9IG1pYi1cXHUwMDNldHhfanVtYm87XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkXFxuLXl0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXFxuLXtcXG4tXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbi1cXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbi1cXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXFx1MDAyNnBwLVxcdTAwM2VtaWI7XFxuLVxcbi1cXHRzdGF0cy1cXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9IG1pYi1cXHUwMDNlcnhfdW5kZXJzaXplX2Vycm9ycyArXFxuLVxcdFxcdFxcdFxcdCAgbWliLVxcdTAwM2VyeF9mcmFnbWVudF9lcnJvcnM7XFxuLVxcdHN0YXRzLVxcdTAwM2VyeF9vdmVyX2Vycm9ycyA9IG1pYi1cXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzO1xcbi1cXHRzdGF0cy1cXHUwMDNlcnhfY3JjX2Vycm9ycyA9IG1pYi1cXHUwMDNlcnhfY3JjX2Vycm9ycztcXG4tXFx0c3RhdHMtXFx1MDAzZXJ4X2ZyYW1lX2Vycm9ycyA9IG1pYi1cXHUwMDNlcnhfYWxpZ25tZW50X2Vycm9ycztcXG4tXFx0Lyogc3RhdHMtXFx1MDAzZXJ4X2ZpZm9fZXJyb3JzICovXFxuLVxcdC8qIHN0YXRzLVxcdTAwM2VyeF9taXNzZWRfZXJyb3JzICovXFxuLVxcbi1cXHRzdGF0cy1cXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgPSBtaWItXFx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzO1xcbi1cXHQvKiBzdGF0cy1cXHUwMDNldHhfY2Fycmllcl9lcnJvcnMgKi9cXG4tXFx0c3RhdHMtXFx1MDAzZXR4X2ZpZm9fZXJyb3JzID0gbWliLVxcdTAwM2V0eF91bmRlcnNpemVfZXJyb3JzO1xcbi1cXHQvKiBzdGF0cy1cXHUwMDNldHhfaGVhcnRiZWF0X2Vycm9ycyAqL1xcbi1cXHRzdGF0cy1cXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IG1pYi1cXHUwMDNldHhfbGF0ZV9jb2xsaXNpb25zO1xcbi1cXG4tXFx0c3RhdHMtXFx1MDAzZXJ4X3BhY2tldHMgPSBwcC1cXHUwMDNlcnhfZnJhbWVzO1xcbi1cXHRzdGF0cy1cXHUwMDNldHhfcGFja2V0cyA9IHBwLVxcdTAwM2V0eF9mcmFtZXM7XFxuLVxcdHN0YXRzLVxcdTAwM2VyeF9ieXRlcyA9IG1pYi1cXHUwMDNlcnhfZ29vZF9ieXRlcyAtIEVUSF9GQ1NfTEVOICogc3RhdHMtXFx1MDAzZXJ4X3BhY2tldHM7XFxuLVxcdHN0YXRzLVxcdTAwM2V0eF9ieXRlcyA9IG1pYi1cXHUwMDNldHhfZ29vZF9ieXRlcyAtIEVUSF9GQ1NfTEVOICogc3RhdHMtXFx1MDAzZXR4X3BhY2tldHM7XFxuLVxcdHN0YXRzLVxcdTAwM2VyeF9lcnJvcnMgPSBzdGF0cy1cXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyArIHN0YXRzLVxcdTAwM2VyeF9vdmVyX2Vycm9ycyArXFxuLVxcdFxcdFxcdCAgIHN0YXRzLVxcdTAwM2VyeF9jcmNfZXJyb3JzICsgc3RhdHMtXFx1MDAzZXJ4X2ZyYW1lX2Vycm9ycztcXG4tXFx0c3RhdHMtXFx1MDAzZXR4X2Vycm9ycyA9IHN0YXRzLVxcdTAwM2V0eF9hYm9ydGVkX2Vycm9ycyArIHN0YXRzLVxcdTAwM2V0eF9maWZvX2Vycm9ycyArXFxuLVxcdFxcdFxcdCAgIHN0YXRzLVxcdTAwM2V0eF93aW5kb3dfZXJyb3JzO1xcbi1cXHRzdGF0cy1cXHUwMDNlcnhfZHJvcHBlZCA9IG1pYi1cXHUwMDNlcnhfZHJvcHBlZDtcXG4tXFx0Lyogc3RhdHMtXFx1MDAzZXR4X2Ryb3BwZWQgKi9cXG4tXFx0c3RhdHMtXFx1MDAzZW11bHRpY2FzdCA9IG1pYi1cXHUwMDNlcnhfbXVsdGljYXN0O1xcbi1cXHRzdGF0cy1cXHUwMDNlY29sbGlzaW9ucyA9IG1pYi1cXHUwMDNldHhfY29sbGlzaW9ucztcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWRcXG4teXQ5MjF4X2RzYV9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tXFx0XFx0XFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxcbi17XFxuLVxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG4tXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4tXFx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFxcdTAwMjZwcC1cXHUwMDNlbWliO1xcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi1cXHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi1cXG4tXFx0cGF1c2Vfc3RhdHMtXFx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9IG1pYi1cXHUwMDNldHhfcGF1c2U7XFxuLVxcdHBhdXNlX3N0YXRzLVxcdTAwM2VyeF9wYXVzZV9mcmFtZXMgPSBtaWItXFx1MDAzZXJ4X3BhdXNlO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50XFxuIHl0OTIxeF9zZXRfZWVlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmUpXFxuIHtcXG5AQCAtMzk1MywxMSArMzU5MiwxNCBAQCB5dDkyMXhfcGh5bGlua19tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4ge1xcbiBcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpO1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcC1cXHUwMDNlZHMpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG07XFxuIFxcdGludCBwb3J0ID0gZHAtXFx1MDAzZWluZGV4O1xcbiBcXHRpbnQgcmVzO1xcbiBcXG4gXFx0LyogTm8gbmVlZCB0byBzeW5jOyBwb3J0IGNvbnRyb2wgYmxvY2sgaXMgaG9sZCB1bnRpbCBkZXZpY2UgcmVtb3ZlICovXFxuLVxcdGNhbmNlbF9kZWxheWVkX3dvcmsoXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdLm1pYl9yZWFkKTtcXG4rXFx0cG0gPSBwcml2LVxcdTAwM2Vwb3J0c1twb3J0XS5taWI7XFxuK1xcdGlmIChwbSlcXG4rXFx0XFx0Y2FuY2VsX2RlbGF5ZWRfd29yayhcXHUwMDI2cG0tXFx1MDAzZXdvcmspO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbiBcXHRyZXMgPSB5dDkyMXhfcG9ydF9kb3duKHByaXYsIHBvcnQpO1xcbkBAIC0zOTc2LDYgKzM2MTgsNyBAQCB5dDkyMXhfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4ge1xcbiBcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpO1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcC1cXHUwMDNlZHMpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG07XFxuIFxcdGludCBwb3J0ID0gZHAtXFx1MDAzZWluZGV4O1xcbiBcXHRpbnQgcmVzO1xcbiBcXG5AQCAtMzk4OCw3ICszNjMxLDkgQEAgeXQ5MjF4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuIFxcdFxcdGRldl9lcnIoZHAtXFx1MDAzZWRzLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcXFxcblxcXCIsIFxcXCJicmluZyB1cFxcXCIsXFxuIFxcdFxcdFxcdHBvcnQsIHJlcyk7XFxuIFxcbi1cXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdLm1pYl9yZWFkLCAwKTtcXG4rXFx0cG0gPSBwcml2LVxcdTAwM2Vwb3J0c1twb3J0XS5taWI7XFxuK1xcdGlmIChwbSlcXG4rXFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZwbS1cXHUwMDNld29yaywgMCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkXFxuQEAgLTQxMDgsMTEgKzM3NTMsMzYgQEAgeXQ5MjF4X2RzYV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdHJldHVybiBEU0FfVEFHX1BST1RPX1lUOTIxWDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgeXQ5MjF4X2RzYV9wb3J0X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cXHUwMDNlbWliO1xcbitcXG4rXFx0aWYgKHBtKVxcbitcXHRcXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZwbS1cXHUwMDNld29yayk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9wb3J0X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuIHtcXG4gXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVxcdTAwM2VtaWI7XFxuIFxcdGludCByZXM7XFxuIFxcbitcXHRpZiAoIXBtIFxcdTAwMjZcXHUwMDI2ICEoQklUKHBvcnQpIFxcdTAwMjYgKHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWludGVybmFsX21hc2sgfFxcbitcXHRcXHQgICAgIHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWV4dGVybmFsX21hc2spKSkge1xcbitcXHRcXHRwbSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcG0pLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFwbSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdHBwLVxcdTAwM2VtaWIgPSBwbTtcXG4rXFxuK1xcdFxcdHBtLVxcdTAwM2Vwb3J0ID0gcHA7XFxuK1xcdFxcdHU2NF9zdGF0c19pbml0KFxcdTAwMjZwbS1cXHUwMDNlc3luY3ApO1xcbitcXHRcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cG0tXFx1MDAzZXdvcmssIHl0OTIxeF9taWJfcG9sbCk7XFxuK1xcdH1cXG4rXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4gXFx0cmVzID0geXQ5MjF4X3BvcnRfc2V0dXAocHJpdiwgcG9ydCk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbkBAIC00NjY3LDYgKzQzMzcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcXG4gXFx0LyogcG9ydCAqL1xcbiBcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0geXQ5MjF4X2RzYV9nZXRfdGFnX3Byb3RvY29sLFxcbiBcXHQucGh5bGlua19nZXRfY2Fwc1xcdD0geXQ5MjF4X2RzYV9waHlsaW5rX2dldF9jYXBzLFxcbitcXHQucG9ydF90ZWFyZG93blxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X3RlYXJkb3duLFxcbiBcXHQucG9ydF9zZXR1cFxcdFxcdD0geXQ5MjF4X2RzYV9wb3J0X3NldHVwLFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRENCKVxcbiBcXHQvKiBkc2NwICovXFxuQEAgLTQ2OTYsMTIgKzQzNjcsNiBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbiBcXHRpZiAoIXByaXYpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXBvcnRzKTsgaS0tIFxcdTAwM2UgMDsgKSB7XFxuLVxcdFxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbaV07XFxuLVxcbi1cXHRcXHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQpO1xcbi1cXHR9XFxuLVxcbiBcXHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goXFx1MDAyNnByaXYtXFx1MDAzZWRzKTtcXG4gXFxuIFxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwcml2LVxcdTAwM2VhY2xfYmxrcyk7IGkrKykge1xcbkBAIC00NzQ5LDcgKzQ0MTQsNiBAQCBzdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4gXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG4gXFxuIFxcdFxcdHBwLVxcdTAwM2VpbmRleCA9IGk7XFxuLVxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQsIHl0OTIxeF9wb2xsX21pYik7XFxuIFxcdH1cXG4gXFxuIFxcdGRzID0gXFx1MDAyNnByaXYtXFx1MDAzZWRzO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuaW5kZXggODNjZDQ1NDk1NWRkYi4uY2UyMDE1MDI2ODQ5YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuQEAgLTE2Nyw2OSArMTY3LDYgQEBcXG4gI2RlZmluZSBZVDkyMVhfRUVFX0NUUkxcXHRcXHRcXHQweGIwMDAwXFxuICNkZWZpbmUgIFlUOTIxWF9FRUVfQ1RSTF9FTm4ocG9ydClcXHRcXHRCSVQocG9ydClcXG4gXFxuLSNkZWZpbmUgWVQ5MjFYX01JQl9DVFJMXFx0XFx0XFx0MHhjMDAwNFxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfQ0xFQU5cXHRcXHRcXHRCSVQoMzApXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9QT1JUX01cXHRcXHRcXHRHRU5NQVNLKDYsIDMpXFxuLSNkZWZpbmUgICBZVDkyMVhfTUlCX0NUUkxfUE9SVCh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX01JQl9DVFJMX1BPUlRfTSwgKHgpKVxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfT05FX1BPUlRcXHRcXHRCSVQoMSlcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX0FMTF9QT1JUXFx0XFx0QklUKDApXFxuLSNkZWZpbmUgWVQ5MjFYX01JQm5fREFUQTAocG9ydClcXHRcXHQoMHhjMDEwMCArIDB4MTAwICogKHBvcnQpKVxcbi0jZGVmaW5lIFlUOTIxWF9NSUJuX0RBVEFtKHBvcnQsIHgpXFx0KFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpICsgNCAqICh4KSlcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0JST0FEQ0FTVFxcdFxcdDB4MDBcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFXFx0XFx0MHgwNFxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfTVVMVElDQVNUXFx0XFx0MHgwOFxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQ1JDX0VSUlxcdFxcdDB4MGNcXG4tXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9BTElHTl9FUlJcXHRcXHQweDEwXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSXFx0MHgxNFxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfRlJBR19FUlJcXHRcXHQweDE4XFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNjRcXHRcXHQweDFjXFxuLVxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyN1xcdDB4MjBcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMjhfVE9fMjU1XFx0MHgyNFxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzI1Nl9UT181MTFcXHQweDI4XFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjNcXHQweDJjXFxuLVxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOFxcdDB4MzBcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWFxcdDB4MzRcXG4tLyogMHgzODogdW51c2VkICovXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9HT09EX0JZVEVTXFx0XFx0MHgzY1xcbi1cXG4tLyogMHg0MDogNjQgYnl0ZXMgKi9cXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0JBRF9CWVRFU1xcdFxcdDB4NDRcXG4tLyogMHg0ODogNjQgYnl0ZXMgKi9cXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX09WRVJTSVpFX0VSUlxcdDB4NGNcXG4tXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9EUk9QUEVEXFx0XFx0MHg1MFxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfQlJPQURDQVNUXFx0XFx0MHg1NFxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEFVU0VcXHRcXHQweDU4XFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSUNBU1RcXHRcXHQweDVjXFxuLVxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUlxcdDB4NjBcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NFxcdFxcdDB4NjRcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NV9UT18xMjdcXHQweDY4XFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTI4X1RPXzI1NVxcdDB4NmNcXG4tXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMjU2X1RPXzUxMVxcdDB4NzBcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyM1xcdDB4NzRcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMDI0X1RPXzE1MThcXHQweDc4XFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTUxOV9UT19NQVhcXHQweDdjXFxuLVxcbi0vKiAweDgwOiB1bnVzZWQgKi9cXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0dPT0RfQllURVNcXHRcXHQweDg0XFxuLS8qIDB4ODg6IDY0IGJ5dGVzICovXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9DT0xMSVNJT05cXHRcXHQweDhjXFxuLVxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfRVhDRVNTSVZFX0NPTExJU0lPTlxcdDB4OTBcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTlxcdDB4OTRcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1NJTkdMRV9DT0xMSVNJT05cXHQweDk4XFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RcXHRcXHRcXHQweDljXFxuLVxcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRURcXHRcXHQweGEwXFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9MQVRFX0NPTExJU0lPTlxcdDB4YTRcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX09BTVxcdFxcdFxcdDB4YThcXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX09BTVxcdFxcdFxcdDB4YWNcXG4tXFxuICNkZWZpbmUgWVQ5MjFYX0VEQVRBX0NUUkxcXHRcXHQweGUwMDAwXFxuICNkZWZpbmUgIFlUOTIxWF9FREFUQV9DVFJMX0FERFJfTVxcdFxcdEdFTk1BU0soMTUsIDgpXFxuICNkZWZpbmUgICBZVDkyMVhfRURBVEFfQ1RSTF9BRERSKHgpXFx0XFx0XFx0RklFTERfUFJFUChZVDkyMVhfRURBVEFfQ1RSTF9BRERSX00sICh4KSlcXG5AQCAtODYxLDU4ICs3OTgsNiBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFxcdTAwM2MgOClcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoKHBvcnQpID09IDggfHwgKHBvcnQpID09IDkpXFxuIFxcbi1zdHJ1Y3QgeXQ5MjF4X21pYiB7XFxuLVxcdHU2NCByeF9icm9hZGNhc3Q7XFxuLVxcdHU2NCByeF9wYXVzZTtcXG4tXFx0dTY0IHJ4X211bHRpY2FzdDtcXG4tXFx0dTY0IHJ4X2NyY19lcnJvcnM7XFxuLVxcbi1cXHR1NjQgcnhfYWxpZ25tZW50X2Vycm9ycztcXG4tXFx0dTY0IHJ4X3VuZGVyc2l6ZV9lcnJvcnM7XFxuLVxcdHU2NCByeF9mcmFnbWVudF9lcnJvcnM7XFxuLVxcdHU2NCByeF82NGJ5dGU7XFxuLVxcbi1cXHR1NjQgcnhfNjVfMTI3Ynl0ZTtcXG4tXFx0dTY0IHJ4XzEyOF8yNTVieXRlO1xcbi1cXHR1NjQgcnhfMjU2XzUxMWJ5dGU7XFxuLVxcdHU2NCByeF81MTJfMTAyM2J5dGU7XFxuLVxcbi1cXHR1NjQgcnhfMTAyNF8xNTE4Ynl0ZTtcXG4tXFx0dTY0IHJ4X2p1bWJvO1xcbi1cXHR1NjQgcnhfZ29vZF9ieXRlcztcXG4tXFxuLVxcdHU2NCByeF9iYWRfYnl0ZXM7XFxuLVxcdHU2NCByeF9vdmVyc2l6ZV9lcnJvcnM7XFxuLVxcbi1cXHR1NjQgcnhfZHJvcHBlZDtcXG4tXFx0dTY0IHR4X2Jyb2FkY2FzdDtcXG4tXFx0dTY0IHR4X3BhdXNlO1xcbi1cXHR1NjQgdHhfbXVsdGljYXN0O1xcbi1cXG4tXFx0dTY0IHR4X3VuZGVyc2l6ZV9lcnJvcnM7XFxuLVxcdHU2NCB0eF82NGJ5dGU7XFxuLVxcdHU2NCB0eF82NV8xMjdieXRlO1xcbi1cXHR1NjQgdHhfMTI4XzI1NWJ5dGU7XFxuLVxcbi1cXHR1NjQgdHhfMjU2XzUxMWJ5dGU7XFxuLVxcdHU2NCB0eF81MTJfMTAyM2J5dGU7XFxuLVxcdHU2NCB0eF8xMDI0XzE1MThieXRlO1xcbi1cXHR1NjQgdHhfanVtYm87XFxuLVxcbi1cXHR1NjQgdHhfZ29vZF9ieXRlcztcXG4tXFx0dTY0IHR4X2NvbGxpc2lvbnM7XFxuLVxcbi1cXHR1NjQgdHhfYWJvcnRlZF9lcnJvcnM7XFxuLVxcdHU2NCB0eF9tdWx0aXBsZV9jb2xsaXNpb25zO1xcbi1cXHR1NjQgdHhfc2luZ2xlX2NvbGxpc2lvbnM7XFxuLVxcdHU2NCB0eF9nb29kO1xcbi1cXG4tXFx0dTY0IHR4X2RlZmVycmVkO1xcbi1cXHR1NjQgdHhfbGF0ZV9jb2xsaXNpb25zO1xcbi1cXHR1NjQgcnhfb2FtO1xcbi1cXHR1NjQgdHhfb2FtO1xcbi19O1xcbi1cXG4gc3RydWN0IHl0OTIxeF9hY2xfZW50cnkge1xcbiBcXHR1MzIga2V5WzJdO1xcbiBcXHR1MzIgbWFza1syXTtcXG5AQCAtOTM2LDEzICs4MjEsOCBAQCBzdHJ1Y3QgeXQ5MjF4X2FjbF9ibGsge1xcbiBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xcbiBcXHR1bnNpZ25lZCBjaGFyIGluZGV4O1xcbiBcXG4tXFx0Ym9vbCBoYWlycGluO1xcbi1cXHRib29sIGlzb2xhdGVkO1xcbi1cXG4tXFx0c3RydWN0IGRlbGF5ZWRfd29yayBtaWJfcmVhZDtcXG4tXFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xcbi1cXHR1NjQgcnhfZnJhbWVzO1xcbi1cXHR1NjQgdHhfZnJhbWVzO1xcbitcXHRib29sIGhhaXJwaW46MTtcXG4rXFx0Ym9vbCBpc29sYXRlZDoxO1xcbiBcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuIFxcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XFxuQEAgLTk1Myw2ICs4MzMsOCBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xcbiBcXG4gXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xcbiAjZW5kaWZcXG4rXFxuK1xcdHN0cnVjdCB5dDkyMXhfbWliICptaWI7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzA0NzhjZTcxYzEwNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5jXFxuQEAgLTAsMCArMSw0MzAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXFwiY2hpcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibWliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuK3N0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xcbitcXHR1bnNpZ25lZCBjaGFyIHNpemU7XFxuK1xcdHVuc2lnbmVkIGNoYXIgb2Zmc2V0O1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbit9O1xcbitcXG4rI2RlZmluZSBNSUJfREVTQyhfc2l6ZSwgX29mZnNldCwgX25hbWUpIHtfc2l6ZSwgX29mZnNldCwgX25hbWV9XFxuK1xcbisvKiBNdXN0IGFncmVlIHdpdGggeXQ5MjF4X21pYlxcbisgKlxcbisgKiBVbnN0cnVjdHVyZWQgZmllbGRzIChuYW1lICE9IE5VTEwpIHdpbGwgYXBwZWFyIGluIGdldF9ldGh0b29sX3N0YXRzKCksXFxuKyAqIHN0cnVjdHVyZWQgZ28gdG8gdGhlaXIgKl9zdGF0cygpIG1ldGhvZHMsIGJ1dCB3ZSBuZWVkIHRoZWlyIHNpemVzIGFuZCBvZmZzZXRzXFxuKyAqIHRvIHBlcmZvcm0gMzJiaXQgTUlCIG92ZXJmbG93IHdyYXBhcm91bmQuXFxuKyAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyB5dDkyMXhfbWliX2Rlc2NzW10gPSB7XFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1QsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEFVU0UsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfTVVMVElDQVNULCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0NSQ19FUlIsIE5VTEwpLFxcbitcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0FMSUdOX0VSUiwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSLCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NCwgTlVMTCksXFxuK1xcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyNywgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTI4X1RPXzI1NSwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMSwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxcbitcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMDI0X1RPXzE1MTgsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzE1MTlfVE9fTUFYLCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0dPT0RfQllURVMsIE5VTEwpLFxcbitcXG4rXFx0TUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1JYX0JBRF9CWVRFUywgXFxcIlJ4QmFkQnl0ZXNcXFwiKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX09WRVJTSVpFX0VSUiwgTlVMTCksXFxuK1xcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfRFJPUFBFRCwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9CUk9BRENBU1QsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEFVU0UsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElDQVNULCBOVUxMKSxcXG4rXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NCwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1LCBOVUxMKSxcXG4rXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMjU2X1RPXzUxMSwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTUxOV9UT19NQVgsIE5VTEwpLFxcbitcXG4rXFx0TUlCX0RFU0MoMiwgWVQ5MjFYX01JQl9EQVRBX1RYX0dPT0RfQllURVMsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfQ09MTElTSU9OLCBOVUxMKSxcXG4rXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OLCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTiwgTlVMTCksXFxuK1xcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OLCBOVUxMKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVCwgTlVMTCksXFxuK1xcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRUQsIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTEFURV9DT0xMSVNJT04sIE5VTEwpLFxcbitcXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfT0FNLCBcXFwiUnhPQU1cXFwiKSxcXG4rXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX09BTSwgXFxcIlR4T0FNXFxcIiksXFxuK307XFxuK1xcbisvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxcbisgKlxcbisgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXFxuKyAqIHRoZXJlKSwgd2UgaGF2ZSB0byBwb2xsIHN0YXRzIG1vcmUgZnJlcXVlbnRseSB0aGVuIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC5cXG4rICogRm9yIG92ZXJmbG93IHByb3RlY3Rpb24sIG5vcm1hbGx5LCAxMDAgc2VjIGludGVydmFsIHNob3VsZCBoYXZlIGJlZW4gT0suXFxuKyAqL1xcbisjZGVmaW5lIFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTXFx0KDMgKiBIWilcXG4rXFxuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYoX2RzKSBjb250YWluZXJfb2ZfY29uc3QoX2RzLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIGRzKVxcbisjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVxcdTAwM2Vkcy5kZXYpXFxuK1xcbisvKiBSZWFkIGFuZCBoYW5kbGUgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy4gTUlCIGJ1ZmZlciBtdXN0IGJlIHplcm9lZCBiZWZvcmUuICovXFxuK3N0YXRpYyBpbnQgeXQ5MjF4X21pYl9yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cXHUwMDNlbWliO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliO1xcbitcXHR1NjQgKmJ1ZiA9IHBtLVxcdTAwM2VkYXRhO1xcbitcXHR1NjQgcnhfZnJhbWVzO1xcbitcXHR1NjQgdHhfZnJhbWVzO1xcbitcXHRpbnQgcmVzID0gMDtcXG4rXFxuK1xcdG1pYiA9IFxcdTAwMjZwbS1cXHUwMDNlc3RhdHM7XFxuK1xcbitcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XFxuK1xcdFxcdHUzMiByZWcgPSBZVDkyMVhfTUlCbl9EQVRBMChwb3J0KSArIGRlc2MtXFx1MDAzZW9mZnNldDtcXG4rXFxuK1xcdFxcdGlmIChkZXNjLVxcdTAwM2VzaXplIFxcdTAwM2M9IDEpIHtcXG4rXFx0XFx0XFx0dTY0IG9sZF92YWwgPSBidWZbaV07XFxuK1xcdFxcdFxcdHUzMiB2YWwwO1xcbitcXHRcXHRcXHR1NjQgdmFsO1xcbitcXG4rXFx0XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXFx1MDAyNnZhbDApO1xcbitcXHRcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdFxcdHZhbCA9IChvbGRfdmFsIFxcdTAwMjYgfih1NjQpVTMyX01BWCkgfCB2YWwwO1xcbitcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2Mgb2xkX3ZhbClcXG4rXFx0XFx0XFx0XFx0dmFsICs9IDF1bGwgXFx1MDAzY1xcdTAwM2MgMzI7XFxuK1xcbitcXHRcXHRcXHRidWZbaV0gPSB2YWw7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJlcyA9IHl0OTIxeF9jb3VudGVyX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2YnVmW2ldKTtcXG4rXFx0XFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cG0tXFx1MDAzZXN5bmNwKTtcXG4rXFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspXFxuK1xcdFxcdHU2NF9zdGF0c19zZXQoXFx1MDAyNigodTY0X3N0YXRzX3QgKiltaWIpW2ldLCBidWZbaV0pO1xcbitcXHRyeF9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF82NGJ5dGUpICtcXG4rXFx0XFx0ICAgIHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4XzY1XzEyN2J5dGUpICtcXG4rXFx0XFx0ICAgIHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4XzEyOF8yNTVieXRlKSArXFxuK1xcdFxcdCAgICB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF8yNTZfNTExYnl0ZSkgK1xcbitcXHRcXHQgICAgdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfNTEyXzEwMjNieXRlKSArXFxuK1xcdFxcdCAgICB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF8xMDI0XzE1MThieXRlKSArXFxuK1xcdFxcdCAgICB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF9qdW1ibyk7XFxuK1xcdHR4X2ZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4XzY0Ynl0ZSkgK1xcbitcXHRcXHQgICAgdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNldHhfNjVfMTI3Ynl0ZSkgK1xcbitcXHRcXHQgICAgdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNldHhfMTI4XzI1NWJ5dGUpICtcXG4rXFx0XFx0ICAgIHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4XzI1Nl81MTFieXRlKSArXFxuK1xcdFxcdCAgICB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2V0eF81MTJfMTAyM2J5dGUpICtcXG4rXFx0XFx0ICAgIHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4XzEwMjRfMTUxOGJ5dGUpICtcXG4rXFx0XFx0ICAgIHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2p1bWJvKTtcXG4rXFx0dTY0X3N0YXRzX3NldChcXHUwMDI2cG0tXFx1MDAzZXJ4X2ZyYW1lcywgcnhfZnJhbWVzKTtcXG4rXFx0dTY0X3N0YXRzX3NldChcXHUwMDI2cG0tXFx1MDAzZXR4X2ZyYW1lcywgdHhfZnJhbWVzKTtcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnBtLVxcdTAwM2VzeW5jcCk7XFxuK1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxcXFxuXFxcIiwgXFxcInJlYWQgc3RhdHMgZm9yXFxcIixcXG4rXFx0XFx0XFx0cG9ydCwgcmVzKTtcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rdm9pZCB5dDkyMXhfbWliX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IGNvbnRhaW5lcl9vZl9jb25zdCh3b3JrLCBzdHJ1Y3QgeXQ5MjF4X21pYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgd29yay53b3JrKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHBtLVxcdTAwM2Vwb3J0O1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2ZfY29uc3QocHAsIHN0cnVjdCB5dDkyMXhfcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcG9ydHNbcHAtXFx1MDAzZWluZGV4XSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZGVsYXkgPSBZVDkyMVhfU1RBVFNfSU5URVJWQUxfSklGRklFUztcXG4rXFx0aW50IHBvcnQgPSBwcC1cXHUwMDNlaW5kZXg7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGRlbGF5ICo9IDQ7XFxuK1xcbitcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNnBtLVxcdTAwM2V3b3JrLCBkZWxheSk7XFxuK31cXG4rXFxuK3ZvaWRcXG4reXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LFxcbitcXHRcXHQgICAgICAgdWludDhfdCAqZGF0YSlcXG4re1xcbitcXHRpZiAoc3RyaW5nc2V0ICE9IEVUSF9TU19TVEFUUylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbitcXG4rXFx0XFx0aWYgKGRlc2MtXFx1MDAzZW5hbWUpXFxuK1xcdFxcdFxcdGV0aHRvb2xfcHV0cyhcXHUwMDI2ZGF0YSwgZGVzYy1cXHUwMDNlbmFtZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rdm9pZFxcbit5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXFx1MDAzZW1pYjtcXG4rXFx0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcXG4rXFx0dTY0ICpidWY7XFxuK1xcdHNpemVfdCBqO1xcbitcXG4rXFx0aWYgKCFwbSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRtaWIgPSBcXHUwMDI2cG0tXFx1MDAzZXN0YXRzO1xcbitcXHRidWYgPSBwbS1cXHUwMDNlZGF0YTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTtcXG4rXFxuK1xcdGogPSAwO1xcbitcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XFxuK1xcbitcXHRcXHRpZiAoIWRlc2MtXFx1MDAzZW5hbWUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZGF0YVtqXSA9IGJ1ZltpXTtcXG4rXFx0XFx0aisrO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuK3tcXG4rXFx0aW50IGNudCA9IDA7XFxuK1xcbitcXHRpZiAoc3NldCAhPSBFVEhfU1NfU1RBVFMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbitcXG4rXFx0XFx0aWYgKGRlc2MtXFx1MDAzZW5hbWUpXFxuK1xcdFxcdFxcdGNudCsrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gY250O1xcbit9XFxuK1xcbit2b2lkXFxuK3l0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cXHUwMDNlbWliO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliO1xcbitcXG4rXFx0aWYgKCFwbSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRtaWIgPSBcXHUwMDI2cG0tXFx1MDAzZXN0YXRzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0eXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpO1xcbitcXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNnBtLVxcdTAwM2V0eF9mcmFtZXMpO1xcbitcXHRtYWNfc3RhdHMtXFx1MDAzZVNpbmdsZUNvbGxpc2lvbkZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X3NpbmdsZV9jb2xsaXNpb25zKTtcXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X211bHRpcGxlX2NvbGxpc2lvbnMpO1xcbitcXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1JlY2VpdmVkT0sgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2cG0tXFx1MDAzZXJ4X2ZyYW1lcyk7XFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlRnJhbWVDaGVja1NlcXVlbmNlRXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfY3JjX2Vycm9ycyk7XFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlQWxpZ25tZW50RXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfYWxpZ25tZW50X2Vycm9ycyk7XFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlT2N0ZXRzVHJhbnNtaXR0ZWRPSyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2dvb2RfYnl0ZXMpO1xcbitcXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1dpdGhEZWZlcnJlZFhtaXNzaW9ucyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2RlZmVycmVkKTtcXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VMYXRlQ29sbGlzaW9ucyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2xhdGVfY29sbGlzaW9ucyk7XFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzQWJvcnRlZER1ZVRvWFNDb2xscyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzKTtcXG4rXFx0LyogbWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNMb3N0RHVlVG9JbnRNQUNYbWl0RXJyb3IgKi9cXG4rXFx0LyogbWFjX3N0YXRzLVxcdTAwM2VDYXJyaWVyU2Vuc2VFcnJvcnMgKi9cXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VPY3RldHNSZWNlaXZlZE9LID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfZ29vZF9ieXRlcyk7XFxuK1xcdC8qIG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzTG9zdER1ZVRvSW50TUFDUmN2RXJyb3IgKi9cXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2V0eF9tdWx0aWNhc3QpO1xcbitcXHRtYWNfc3RhdHMtXFx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2Jyb2FkY2FzdCk7XFxuK1xcdC8qIG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzV2l0aEV4Y2Vzc2l2ZURlZmVycmFsICovXFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X211bHRpY2FzdCk7XFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlQnJvYWRjYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X2Jyb2FkY2FzdCk7XFxuK1xcdC8qIG1hY19zdGF0cy1cXHUwMDNlSW5SYW5nZUxlbmd0aEVycm9ycyAqL1xcbitcXHQvKiBtYWNfc3RhdHMtXFx1MDAzZU91dE9mUmFuZ2VMZW5ndGhGaWVsZCAqL1xcbitcXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lVG9vTG9uZ0Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X292ZXJzaXplX2Vycm9ycyk7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rfVxcbitcXG4rdm9pZFxcbit5dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVxcdTAwM2VtaWI7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7XFxuK1xcbitcXHRpZiAoIXBtKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdG1pYiA9IFxcdTAwMjZwbS1cXHUwMDNlc3RhdHM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHR5dDkyMXhfbWliX3JlYWQocHJpdiwgcG9ydCk7XFxuK1xcbitcXHRjdHJsX3N0YXRzLVxcdTAwM2VNQUNDb250cm9sRnJhbWVzVHJhbnNtaXR0ZWQgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2V0eF9wYXVzZSk7XFxuK1xcdGN0cmxfc3RhdHMtXFx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X3BhdXNlKTtcXG4rXFx0LyogY3RybF9zdGF0cy1cXHUwMDNlVW5zdXBwb3J0ZWRPcGNvZGVzUmVjZWl2ZWQgKi9cXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIHl0OTIxeF9ybW9uX3Jhbmdlc1tdID0ge1xcbitcXHR7IDAsIDY0IH0sXFxuK1xcdHsgNjUsIDEyNyB9LFxcbitcXHR7IDEyOCwgMjU1IH0sXFxuK1xcdHsgMjU2LCA1MTEgfSxcXG4rXFx0eyA1MTIsIDEwMjMgfSxcXG4rXFx0eyAxMDI0LCAxNTE4IH0sXFxuK1xcdHsgMTUxOSwgWVQ5MjFYX0ZSQU1FX1NJWkVfTUFYIH0sXFxuK1xcdHt9XFxuK307XFxuK1xcbit2b2lkXFxuK3l0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxcbitcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVxcdTAwM2VtaWI7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7XFxuK1xcbitcXHRpZiAoIXBtKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdG1pYiA9IFxcdTAwMjZwbS1cXHUwMDNlc3RhdHM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHR5dDkyMXhfbWliX3JlYWQocHJpdiwgcG9ydCk7XFxuK1xcbitcXHQqcmFuZ2VzID0geXQ5MjF4X3Jtb25fcmFuZ2VzO1xcbitcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNldW5kZXJzaXplX3BrdHMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF91bmRlcnNpemVfZXJyb3JzKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlb3ZlcnNpemVfcGt0cyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X292ZXJzaXplX2Vycm9ycyk7XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWZyYWdtZW50cyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnMpO1xcbitcXHQvKiBybW9uX3N0YXRzLVxcdTAwM2VqYWJiZXJzICovXFxuK1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzBdID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfNjRieXRlKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFsxXSA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4XzY1XzEyN2J5dGUpO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzJdID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfMTI4XzI1NWJ5dGUpO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzNdID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfMjU2XzUxMWJ5dGUpO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzRdID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfNTEyXzEwMjNieXRlKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFs1XSA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4XzEwMjRfMTUxOGJ5dGUpO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzZdID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfanVtYm8pO1xcbitcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFswXSA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4XzY0Ynl0ZSk7XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbMV0gPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2V0eF82NV8xMjdieXRlKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFsyXSA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4XzEyOF8yNTVieXRlKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFszXSA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4XzI1Nl81MTFieXRlKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs0XSA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4XzUxMl8xMDIzYnl0ZSk7XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbNV0gPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2V0eF8xMDI0XzE1MThieXRlKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs2XSA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2p1bWJvKTtcXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbit9XFxuK1xcbit2b2lkXFxuK3l0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cXHUwMDNlbWliO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliO1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRpZiAoIXBtKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdG1pYiA9IFxcdTAwMjZwbS1cXHUwMDNlc3RhdHM7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFxcdTAwMjZwbS1cXHUwMDNlc3luY3ApO1xcbitcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF91bmRlcnNpemVfZXJyb3JzKSArXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfZnJhZ21lbnRfZXJyb3JzKTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X292ZXJfZXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzKTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2NyY19lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF9jcmNfZXJyb3JzKTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2ZyYW1lX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnMpO1xcbitcXHRcXHQvKiBzdGF0cy1cXHUwMDNlcnhfZmlmb19lcnJvcnMgKi9cXG4rXFx0XFx0Lyogc3RhdHMtXFx1MDAzZXJ4X21pc3NlZF9lcnJvcnMgKi9cXG4rXFxuK1xcdFxcdHN0YXRzLVxcdTAwM2V0eF9hYm9ydGVkX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzKTtcXG4rXFx0XFx0Lyogc3RhdHMtXFx1MDAzZXR4X2NhcnJpZXJfZXJyb3JzICovXFxuK1xcdFxcdHN0YXRzLVxcdTAwM2V0eF9maWZvX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X3VuZGVyc2l6ZV9lcnJvcnMpO1xcbitcXHRcXHQvKiBzdGF0cy1cXHUwMDNldHhfaGVhcnRiZWF0X2Vycm9ycyAqL1xcbitcXHRcXHRzdGF0cy1cXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXR4X2xhdGVfY29sbGlzaW9ucyk7XFxuK1xcbitcXHRcXHRzdGF0cy1cXHUwMDNlcnhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZwbS1cXHUwMDNlcnhfZnJhbWVzKTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXR4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2cG0tXFx1MDAzZXR4X2ZyYW1lcyk7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VyeF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X2dvb2RfYnl0ZXMpIC1cXG4rXFx0XFx0XFx0XFx0ICBFVEhfRkNTX0xFTiAqIHN0YXRzLVxcdTAwM2VyeF9wYWNrZXRzO1xcbitcXHRcXHRzdGF0cy1cXHUwMDNldHhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2V0eF9nb29kX2J5dGVzKSAtXFxuK1xcdFxcdFxcdFxcdCAgRVRIX0ZDU19MRU4gKiBzdGF0cy1cXHUwMDNldHhfcGFja2V0cztcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2Ryb3BwZWQgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF9kcm9wcGVkKTtcXG4rXFx0XFx0Lyogc3RhdHMtXFx1MDAzZXR4X2Ryb3BwZWQgKi9cXG4rXFx0XFx0c3RhdHMtXFx1MDAzZW11bHRpY2FzdCA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZtaWItXFx1MDAzZXJ4X211bHRpY2FzdCk7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2Vjb2xsaXNpb25zID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNm1pYi1cXHUwMDNldHhfY29sbGlzaW9ucyk7XFxuK1xcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcXHUwMDI2cG0tXFx1MDAzZXN5bmNwLCBzdGFydCkpO1xcbitcXG4rXFx0c3RhdHMtXFx1MDAzZXJ4X2Vycm9ycyA9IHN0YXRzLVxcdTAwM2VyeF9sZW5ndGhfZXJyb3JzICsgc3RhdHMtXFx1MDAzZXJ4X292ZXJfZXJyb3JzICtcXG4rXFx0XFx0XFx0ICAgc3RhdHMtXFx1MDAzZXJ4X2NyY19lcnJvcnMgKyBzdGF0cy1cXHUwMDNlcnhfZnJhbWVfZXJyb3JzO1xcbitcXHRzdGF0cy1cXHUwMDNldHhfZXJyb3JzID0gc3RhdHMtXFx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzICsgc3RhdHMtXFx1MDAzZXR4X2ZpZm9fZXJyb3JzICtcXG4rXFx0XFx0XFx0ICAgc3RhdHMtXFx1MDAzZXR4X3dpbmRvd19lcnJvcnM7XFxuK31cXG4rXFxuK3ZvaWRcXG4reXQ5MjF4X2RzYV9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXFx1MDAzZW1pYjtcXG4rXFx0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcXG4rXFxuK1xcdGlmICghcG0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0bWliID0gXFx1MDAyNnBtLVxcdTAwM2VzdGF0cztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTtcXG4rXFxuK1xcdHBhdXNlX3N0YXRzLVxcdTAwM2V0eF9wYXVzZV9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2V0eF9wYXVzZSk7XFxuK1xcdHBhdXNlX3N0YXRzLVxcdTAwM2VyeF9wYXVzZV9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bWliLVxcdTAwM2VyeF9wYXVzZSk7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzM5OTJhNWY5YmRjMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5oXFxuQEAgLTAsMCArMSwxNjcgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9NSUJfSFxcbisjZGVmaW5lIF9ZVF9NSUJfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBZVDkyMVhfTUlCX0NUUkxcXHRcXHRcXHQweGMwMDA0XFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9DTEVBTlxcdFxcdFxcdEJJVCgzMClcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX1BPUlRfTVxcdFxcdFxcdEdFTk1BU0soNiwgMylcXG4rI2RlZmluZSAgIFlUOTIxWF9NSUJfQ1RSTF9QT1JUKHgpXFx0XFx0XFx0RklFTERfUFJFUChZVDkyMVhfTUlCX0NUUkxfUE9SVF9NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfQ1RSTF9PTkVfUE9SVFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfQUxMX1BPUlRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDkyMVhfTUlCbl9EQVRBMChwb3J0KVxcdFxcdCgweGMwMTAwICsgMHgxMDAgKiAocG9ydCkpXFxuKyNkZWZpbmUgWVQ5MjFYX01JQm5fREFUQW0ocG9ydCwgeClcXHQoWVQ5MjFYX01JQm5fREFUQTAocG9ydCkgKyA0ICogKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQlJPQURDQVNUXFx0XFx0MHgwMFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEFVU0VcXHRcXHQweDA0XFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9NVUxUSUNBU1RcXHRcXHQweDA4XFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9DUkNfRVJSXFx0XFx0MHgwY1xcbitcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0FMSUdOX0VSUlxcdFxcdDB4MTBcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1VOREVSU0laRV9FUlJcXHQweDE0XFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9GUkFHX0VSUlxcdFxcdDB4MThcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NFxcdFxcdDB4MWNcXG4rXFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNjVfVE9fMTI3XFx0MHgyMFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEyOF9UT18yNTVcXHQweDI0XFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMVxcdDB4MjhcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl81MTJfVE9fMTAyM1xcdDB4MmNcXG4rXFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTAyNF9UT18xNTE4XFx0MHgzMFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzE1MTlfVE9fTUFYXFx0MHgzNFxcbisvKiAweDM4OiB1bnVzZWQgKi9cXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0dPT0RfQllURVNcXHRcXHQweDNjXFxuK1xcbisvKiAweDQwOiA2NCBieXRlcyAqL1xcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTXFx0XFx0MHg0NFxcbisvKiAweDQ4OiA2NCBieXRlcyAqL1xcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfT1ZFUlNJWkVfRVJSXFx0MHg0Y1xcbitcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0RST1BQRURcXHRcXHQweDUwXFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9CUk9BRENBU1RcXHRcXHQweDU0XFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QQVVTRVxcdFxcdDB4NThcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJQ0FTVFxcdFxcdDB4NWNcXG4rXFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9VTkRFUlNJWkVfRVJSXFx0MHg2MFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY0XFx0XFx0MHg2NFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY1X1RPXzEyN1xcdDB4NjhcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1XFx0MHg2Y1xcbitcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExXFx0MHg3MFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzUxMl9UT18xMDIzXFx0MHg3NFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEwMjRfVE9fMTUxOFxcdDB4NzhcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWFxcdDB4N2NcXG4rXFxuKy8qIDB4ODA6IHVudXNlZCAqL1xcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfR09PRF9CWVRFU1xcdFxcdDB4ODRcXG4rLyogMHg4ODogNjQgYnl0ZXMgKi9cXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0NPTExJU0lPTlxcdFxcdDB4OGNcXG4rXFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OXFx0MHg5MFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElQTEVfQ09MTElTSU9OXFx0MHg5NFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfU0lOR0xFX0NPTExJU0lPTlxcdDB4OThcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVFxcdFxcdFxcdDB4OWNcXG4rXFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9ERUZFUlJFRFxcdFxcdDB4YTBcXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0xBVEVfQ09MTElTSU9OXFx0MHhhNFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfT0FNXFx0XFx0XFx0MHhhOFxcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfT0FNXFx0XFx0XFx0MHhhY1xcbitcXG4rc3RydWN0IHl0OTIxeF9taWJfc3RhdHMge1xcbitcXHR1NjRfc3RhdHNfdCByeF9icm9hZGNhc3Q7XFxuK1xcdHU2NF9zdGF0c190IHJ4X3BhdXNlO1xcbitcXHR1NjRfc3RhdHNfdCByeF9tdWx0aWNhc3Q7XFxuK1xcdHU2NF9zdGF0c190IHJ4X2NyY19lcnJvcnM7XFxuK1xcbitcXHR1NjRfc3RhdHNfdCByeF9hbGlnbm1lbnRfZXJyb3JzO1xcbitcXHR1NjRfc3RhdHNfdCByeF91bmRlcnNpemVfZXJyb3JzO1xcbitcXHR1NjRfc3RhdHNfdCByeF9mcmFnbWVudF9lcnJvcnM7XFxuK1xcdHU2NF9zdGF0c190IHJ4XzY0Ynl0ZTtcXG4rXFxuK1xcdHU2NF9zdGF0c190IHJ4XzY1XzEyN2J5dGU7XFxuK1xcdHU2NF9zdGF0c190IHJ4XzEyOF8yNTVieXRlO1xcbitcXHR1NjRfc3RhdHNfdCByeF8yNTZfNTExYnl0ZTtcXG4rXFx0dTY0X3N0YXRzX3QgcnhfNTEyXzEwMjNieXRlO1xcbitcXG4rXFx0dTY0X3N0YXRzX3QgcnhfMTAyNF8xNTE4Ynl0ZTtcXG4rXFx0dTY0X3N0YXRzX3QgcnhfanVtYm87XFxuK1xcdHU2NF9zdGF0c190IHJ4X2dvb2RfYnl0ZXM7XFxuK1xcbitcXHR1NjRfc3RhdHNfdCByeF9iYWRfYnl0ZXM7XFxuK1xcdHU2NF9zdGF0c190IHJ4X292ZXJzaXplX2Vycm9ycztcXG4rXFxuK1xcdHU2NF9zdGF0c190IHJ4X2Ryb3BwZWQ7XFxuK1xcdHU2NF9zdGF0c190IHR4X2Jyb2FkY2FzdDtcXG4rXFx0dTY0X3N0YXRzX3QgdHhfcGF1c2U7XFxuK1xcdHU2NF9zdGF0c190IHR4X211bHRpY2FzdDtcXG4rXFxuK1xcdHU2NF9zdGF0c190IHR4X3VuZGVyc2l6ZV9lcnJvcnM7XFxuK1xcdHU2NF9zdGF0c190IHR4XzY0Ynl0ZTtcXG4rXFx0dTY0X3N0YXRzX3QgdHhfNjVfMTI3Ynl0ZTtcXG4rXFx0dTY0X3N0YXRzX3QgdHhfMTI4XzI1NWJ5dGU7XFxuK1xcbitcXHR1NjRfc3RhdHNfdCB0eF8yNTZfNTExYnl0ZTtcXG4rXFx0dTY0X3N0YXRzX3QgdHhfNTEyXzEwMjNieXRlO1xcbitcXHR1NjRfc3RhdHNfdCB0eF8xMDI0XzE1MThieXRlO1xcbitcXHR1NjRfc3RhdHNfdCB0eF9qdW1ibztcXG4rXFxuK1xcdHU2NF9zdGF0c190IHR4X2dvb2RfYnl0ZXM7XFxuK1xcdHU2NF9zdGF0c190IHR4X2NvbGxpc2lvbnM7XFxuK1xcbitcXHR1NjRfc3RhdHNfdCB0eF9hYm9ydGVkX2Vycm9ycztcXG4rXFx0dTY0X3N0YXRzX3QgdHhfbXVsdGlwbGVfY29sbGlzaW9ucztcXG4rXFx0dTY0X3N0YXRzX3QgdHhfc2luZ2xlX2NvbGxpc2lvbnM7XFxuK1xcdHU2NF9zdGF0c190IHR4X2dvb2Q7XFxuK1xcbitcXHR1NjRfc3RhdHNfdCB0eF9kZWZlcnJlZDtcXG4rXFx0dTY0X3N0YXRzX3QgdHhfbGF0ZV9jb2xsaXNpb25zO1xcbitcXHR1NjRfc3RhdHNfdCByeF9vYW07XFxuK1xcdHU2NF9zdGF0c190IHR4X29hbTtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX01JQl9OVU1cXHQoc2l6ZW9mKHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzKSAvIHNpemVvZih1NjRfc3RhdHNfdCkpXFxuK1xcbitzdHJ1Y3QgeXQ5MjF4X21pYiB7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcXG4rXFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcXG4rXFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xcbitcXHQvKiBwcm90ZWN0ZWQgYnkgc3luY3AgT1IgcHJpdi1cXHUwMDNlcmVnX2xvY2sgKi9cXG4rXFx0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgc3RhdHM7XFxuK1xcdHU2NF9zdGF0c190IHJ4X2ZyYW1lcztcXG4rXFx0dTY0X3N0YXRzX3QgdHhfZnJhbWVzO1xcbitcXHQvKiBwcm90ZWN0ZWQgYnkgcHJpdi1cXHUwMDNlcmVnX2xvY2sgKi9cXG4rXFx0dTY0IGRhdGFbWVQ5MjFYX01JQl9OVU1dO1xcbit9O1xcbitcXG4rdm9pZCB5dDkyMXhfbWliX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4rdm9pZFxcbit5dDkyMXhfZHNhX2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHUzMiBzdHJpbmdzZXQsXFxuK1xcdFxcdCAgICAgICB1aW50OF90ICpkYXRhKTtcXG4rdm9pZFxcbit5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKTtcXG4raW50IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpO1xcbit2b2lkXFxuK3l0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpO1xcbit2b2lkXFxuK3l0OTIxeF9kc2FfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKTtcXG4rdm9pZFxcbit5dDkyMXhfZHNhX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcXG4rXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpO1xcbit2b2lkXFxuK3l0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpO1xcbit2b2lkXFxuK3l0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cyk7XFxuK1xcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG5pbmRleCBiZjNhZGZkNjQxNjVhLi4yNzA4NjYwMjk5N2JiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXFxuQEAgLTYzLDYgKzYzLDM2IEBAIGludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXFxuIFxcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XFxuIH1cXG4gXFxuKy8qIFJlbGlhYmx5IHJlYWQgYSA2NGJpdCBjb3VudGVyICovXFxuK2ludCB5dDkyMXhfY291bnRlcl9yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTY0ICp2YWxwKVxcbit7XFxuK1xcdHUzMiBvbGRfbG87XFxuK1xcdGludCByZXM7XFxuK1xcdHUzMiBoaTtcXG4rXFx0dTMyIGxvO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXFx1MDAyNm9sZF9sbyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIDE2OyBpKyspIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQsIFxcdTAwMjZoaSk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFxcdTAwMjZsbyk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRcXHRpZiAobG8gXFx1MDAzZT0gb2xkX2xvKSB7XFxuK1xcdFxcdFxcdCp2YWxwID0gKCh1NjQpaGkgXFx1MDAzY1xcdTAwM2MgMzIpIHwgbG87XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdG9sZF9sbyA9IGxvO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4gc3RhdGljIGludFxcbiB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbiBcXHRcXHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbmluZGV4IDIxMmUyMGY3MWQ4MDYuLmQzNDI0MDU0OGFmN2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcXG5AQCAtMzUsNiArMzUsOCBAQCB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxcbiBcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuIH1cXG4gXFxuK2ludCB5dDkyMXhfY291bnRlcl9yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTY0ICp2YWxwKTtcXG4rXFxuIC8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4gICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuICAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTc6NTQuMzA4NjY0NjEyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjA1OTUzMDI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vKSwgd2hpY2ggaW50ZXJhY3RzIHdpdGggYSBzcGVjaWZpYyBwaHlzaWNhbCBNRElPLWNvbm5lY3RlZCBzd2l0Y2ggQVNJQy4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcyMTdhMjYyNzRlNzU5MTYyNGNhN2EwODkzZGQwNjA2Mzg5YTFmZDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjE3OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbmluZGV4IGFlYjEyY2I5MWY5MzUuLjVjMmQzNGVjMDVmYzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXG5AQCAtMiw0ICsyLDUgQEBcbiBvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXG4geXQ5MjF4LW9ianMgOj0gY2hpcC5vXG4geXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICs9IGxlZHMub1xuK3l0OTIxeC1vYmpzICs9IG1pYi5vXG4geXQ5MjF4LW9ianMgKz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCBkNjYzYWYwMTBmNDMxLi5iNDA1OTA1M2VmMTUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTksNiArMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX25ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2NwLmhcdTAwM2VcbkBAIC0yNyw3NSArMjgsOSBAQFxuIFxuICNpbmNsdWRlIFwiY2hpcC5oXCJcbiAjaW5jbHVkZSBcImxlZHMuaFwiXG4rI2luY2x1ZGUgXCJtaWIuaFwiXG4gI2luY2x1ZGUgXCJzbWkuaFwiXG4gXG4tc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG4tXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbi1cdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4tXHRjb25zdCBjaGFyICpuYW1lO1xuLX07XG4tXG4tI2RlZmluZSBNSUJfREVTQyhfc2l6ZSwgX29mZnNldCwgX25hbWUpIFxcXG4tXHR7X3NpemUsIF9vZmZzZXQsIF9uYW1lfVxuLVxuLS8qIE11c3QgYWdyZWUgd2l0aCB5dDkyMXhfbWliXG4tICpcbi0gKiBVbnN0cnVjdHVyZWQgZmllbGRzIChuYW1lICE9IE5VTEwpIHdpbGwgYXBwZWFyIGluIGdldF9ldGh0b29sX3N0YXRzKCksXG4tICogc3RydWN0dXJlZCBnbyB0byB0aGVpciAqX3N0YXRzKCkgbWV0aG9kcywgYnV0IHdlIG5lZWQgdGhlaXIgc2l6ZXMgYW5kIG9mZnNldHNcbi0gKiB0byBwZXJmb3JtIDMyYml0IE1JQiBvdmVyZmxvdyB3cmFwYXJvdW5kLlxuLSAqL1xuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHl0OTIxeF9taWJfZGVzY3NbXSA9IHtcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1QsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BBVVNFLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9NVUxUSUNBU1QsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0NSQ19FUlIsIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0FMSUdOX0VSUiwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfVU5ERVJTSVpFX0VSUiwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfRlJBR19FUlIsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl82NCwgTlVMTCksXG4tXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyNywgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEyOF9UT18yNTUsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8yNTZfVE9fNTExLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xMDI0X1RPXzE1MTgsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksXG4tXHRNSUJfREVTQygyLCBZVDkyMVhfTUlCX0RBVEFfUlhfR09PRF9CWVRFUywgTlVMTCksXG4tXG4tXHRNSUJfREVTQygyLCBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTLCBcIlJ4QmFkQnl0ZXNcIiksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfT1ZFUlNJWkVfRVJSLCBOVUxMKSxcbi1cbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9EUk9QUEVELCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9CUk9BRENBU1QsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BBVVNFLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSUNBU1QsIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1VOREVSU0laRV9FUlIsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl82NCwgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY1X1RPXzEyNywgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEyOF9UT18yNTUsIE5VTEwpLFxuLVxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNTEyX1RPXzEwMjMsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMDI0X1RPXzE1MTgsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWCwgTlVMTCksXG4tXG4tXHRNSUJfREVTQygyLCBZVDkyMVhfTUlCX0RBVEFfVFhfR09PRF9CWVRFUywgTlVMTCksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfQ09MTElTSU9OLCBOVUxMKSxcbi1cbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9NVUxUSVBMRV9DT0xMSVNJT04sIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1NJTkdMRV9DT0xMSVNJT04sIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVCwgTlVMTCksXG4tXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRUQsIE5VTEwpLFxuLVx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0xBVEVfQ09MTElTSU9OLCBOVUxMKSxcbi1cdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9PQU0sIFwiUnhPQU1cIiksXG4tXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfT0FNLCBcIlR4T0FNXCIpLFxuLX07XG4tXG4gc3RydWN0IHl0OTIxeF9pbmZvIHtcbiBcdGNvbnN0IGNoYXIgKm5hbWU7XG4gXHR1MTYgbWFqb3I7XG5AQCAtMTU0LDE0ICs4OSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuLS8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXG4tICpcbi0gKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXG4tICogdGhlcmUpLCB3ZSBoYXZlIHRvIHBvbGwgc3RhdHMgbW9yZSBmcmVxdWVudGx5IHRoZW4gaXQgaXMgYWN0dWFsbHkgbmVlZGVkLlxuLSAqIEZvciBvdmVyZmxvdyBwcm90ZWN0aW9uLCBub3JtYWxseSwgMTAwIHNlYyBpbnRlcnZhbCBzaG91bGQgaGF2ZSBiZWVuIE9LLlxuLSAqL1xuLSNkZWZpbmUgWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVNcdCgzICogSFopXG4tXG4gc3RydWN0IHl0OTIxeF9yZWdfbWRpbyB7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuIFx0aW50IGFkZHI7XG5AQCAtNTQ0LDI5NCArNDcxLDYgQEAgeXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKiBSZWFkIGFuZCBoYW5kbGUgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy4gTUlCIGJ1ZmZlciBtdXN0IGJlIHplcm9lZCBiZWZvcmUuICovXG4tc3RhdGljIGludCB5dDkyMXhfcmVhZF9taWIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbi17XG4tXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbi1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbi1cdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG4tXHRpbnQgcmVzID0gMDtcbi1cbi1cdC8qIFJlYWRpbmcgb2YgeXQ5MjF4X3BvcnQ6Om1pYiBpcyBub3QgcHJvdGVjdGVkIGJ5IGEgbG9jayBhbmQgaXQncyB2YWluXG4tXHQgKiB0byBrZWVwIGl0cyBjb25zaXN0ZW5jeSwgc2luY2Ugd2UgaGF2ZSB0byByZWFkIHJlZ2lzdGVycyBvbmUgYnkgb25lXG4tXHQgKiBhbmQgdGhlcmUgaXMgbm8gd2F5IHRvIG1ha2UgYSBzbmFwc2hvdCBvZiBNSUIgc3RhdHMuXG4tXHQgKlxuLVx0ICogV3JpdGluZyAoYnkgdGhpcyBmdW5jdGlvbiBvbmx5KSBpcyBhbmQgc2hvdWxkIGJlIHByb3RlY3RlZCBieVxuLVx0ICogcmVnX2xvY2suXG4tXHQgKi9cbi1cbi1cdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcbi1cdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG4tXHRcdHUzMiByZWcgPSBZVDkyMVhfTUlCbl9EQVRBMChwb3J0KSArIGRlc2MtXHUwMDNlb2Zmc2V0O1xuLVx0XHR1NjQgKnZhbHAgPSBcdTAwMjYoKHU2NCAqKW1pYilbaV07XG4tXHRcdHUzMiB2YWwwO1xuLVx0XHR1NjQgdmFsO1xuLVxuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2YWwwKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0aWYgKGRlc2MtXHUwMDNlc2l6ZSBcdTAwM2M9IDEpIHtcbi1cdFx0XHR1NjQgb2xkX3ZhbCA9ICp2YWxwO1xuLVxuLVx0XHRcdHZhbCA9IChvbGRfdmFsIFx1MDAyNiB+KHU2NClVMzJfTUFYKSB8IHZhbDA7XG4tXHRcdFx0aWYgKHZhbCBcdTAwM2Mgb2xkX3ZhbClcbi1cdFx0XHRcdHZhbCArPSAxdWxsIFx1MDAzY1x1MDAzYyAzMjtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHR1MzIgdmFsMTtcbi1cbi1cdFx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCwgXHUwMDI2dmFsMSk7XG4tXHRcdFx0aWYgKHJlcylcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdHZhbCA9ICgodTY0KXZhbDEgXHUwMDNjXHUwMDNjIDMyKSB8IHZhbDA7XG4tXHRcdH1cbi1cbi1cdFx0V1JJVEVfT05DRSgqdmFscCwgdmFsKTtcbi1cdH1cbi1cbi1cdHBwLVx1MDAzZXJ4X2ZyYW1lcyA9IG1pYi1cdTAwM2VyeF82NGJ5dGUgKyBtaWItXHUwMDNlcnhfNjVfMTI3Ynl0ZSArXG4tXHRcdFx0bWliLVx1MDAzZXJ4XzEyOF8yNTVieXRlICsgbWliLVx1MDAzZXJ4XzI1Nl81MTFieXRlICtcbi1cdFx0XHRtaWItXHUwMDNlcnhfNTEyXzEwMjNieXRlICsgbWliLVx1MDAzZXJ4XzEwMjRfMTUxOGJ5dGUgK1xuLVx0XHRcdG1pYi1cdTAwM2VyeF9qdW1ibztcbi1cdHBwLVx1MDAzZXR4X2ZyYW1lcyA9IG1pYi1cdTAwM2V0eF82NGJ5dGUgKyBtaWItXHUwMDNldHhfNjVfMTI3Ynl0ZSArXG4tXHRcdFx0bWliLVx1MDAzZXR4XzEyOF8yNTVieXRlICsgbWliLVx1MDAzZXR4XzI1Nl81MTFieXRlICtcbi1cdFx0XHRtaWItXHUwMDNldHhfNTEyXzEwMjNieXRlICsgbWliLVx1MDAzZXR4XzEwMjRfMTUxOGJ5dGUgK1xuLVx0XHRcdG1pYi1cdTAwM2V0eF9qdW1ibztcbi1cbi1cdGlmIChyZXMpXG4tXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxcblwiLCBcInJlYWQgc3RhdHMgZm9yXCIsXG4tXHRcdFx0cG9ydCwgcmVzKTtcbi1cdHJldHVybiByZXM7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHl0OTIxeF9wb2xsX21pYihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4te1xuLVx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IGNvbnRhaW5lcl9vZl9jb25zdCh3b3JrLCBzdHJ1Y3QgeXQ5MjF4X3BvcnQsXG4tXHRcdFx0XHRcdFx0ICAgIG1pYl9yZWFkLndvcmspO1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gKHZvaWQgKikocHAgLSBwcC1cdTAwM2VpbmRleCkgLVxuLVx0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0cyk7XG4tXHR1bnNpZ25lZCBsb25nIGRlbGF5ID0gWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVM7XG4tXHRpbnQgcG9ydCA9IHBwLVx1MDAzZWluZGV4O1xuLVx0aW50IHJlcztcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXHRyZXMgPSB5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXHRpZiAocmVzKVxuLVx0XHRkZWxheSAqPSA0O1xuLVxuLVx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkLCBkZWxheSk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkXG4teXQ5MjF4X2RzYV9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LFxuLVx0XHQgICAgICAgdWludDhfdCAqZGF0YSlcbi17XG4tXHRpZiAoc3RyaW5nc2V0ICE9IEVUSF9TU19TVEFUUylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkrKykge1xuLVx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcbi1cbi1cdFx0aWYgKGRlc2MtXHUwMDNlbmFtZSlcbi1cdFx0XHRldGh0b29sX3B1dHMoXHUwMDI2ZGF0YSwgZGVzYy1cdTAwM2VuYW1lKTtcbi1cdH1cbi19XG4tXG4tc3RhdGljIHZvaWRcbi15dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKVxuLXtcbi1cdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbi1cdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuLVx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbi1cdHNpemVfdCBqO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi1cdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi1cbi1cdGogPSAwO1xuLVx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkrKykge1xuLVx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcbi1cbi1cdFx0aWYgKCFkZXNjLVx1MDAzZW5hbWUpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGRhdGFbal0gPSAoKHU2NCAqKW1pYilbaV07XG4tXHRcdGorKztcbi1cdH1cbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxuLXtcbi1cdGludCBjbnQgPSAwO1xuLVxuLVx0aWYgKHNzZXQgIT0gRVRIX1NTX1NUQVRTKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcbi1cdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG4tXG4tXHRcdGlmIChkZXNjLVx1MDAzZW5hbWUpXG4tXHRcdFx0Y250Kys7XG4tXHR9XG4tXG4tXHRyZXR1cm4gY250O1xuLX1cbi1cbi1zdGF0aWMgdm9pZFxuLXl0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi1cdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcbi17XG4tXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4tXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbi1cdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVxuLVx0bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1RyYW5zbWl0dGVkT0sgPSBwcC1cdTAwM2V0eF9mcmFtZXM7XG4tXHRtYWNfc3RhdHMtXHUwMDNlU2luZ2xlQ29sbGlzaW9uRnJhbWVzID0gbWliLVx1MDAzZXR4X3NpbmdsZV9jb2xsaXNpb25zO1xuLVx0bWFjX3N0YXRzLVx1MDAzZU11bHRpcGxlQ29sbGlzaW9uRnJhbWVzID0gbWliLVx1MDAzZXR4X211bHRpcGxlX2NvbGxpc2lvbnM7XG4tXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyA9IHBwLVx1MDAzZXJ4X2ZyYW1lcztcbi1cdG1hY19zdGF0cy1cdTAwM2VGcmFtZUNoZWNrU2VxdWVuY2VFcnJvcnMgPSBtaWItXHUwMDNlcnhfY3JjX2Vycm9ycztcbi1cdG1hY19zdGF0cy1cdTAwM2VBbGlnbm1lbnRFcnJvcnMgPSBtaWItXHUwMDNlcnhfYWxpZ25tZW50X2Vycm9ycztcbi1cdG1hY19zdGF0cy1cdTAwM2VPY3RldHNUcmFuc21pdHRlZE9LID0gbWliLVx1MDAzZXR4X2dvb2RfYnl0ZXM7XG4tXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzV2l0aERlZmVycmVkWG1pc3Npb25zID0gbWliLVx1MDAzZXR4X2RlZmVycmVkO1xuLVx0bWFjX3N0YXRzLVx1MDAzZUxhdGVDb2xsaXNpb25zID0gbWliLVx1MDAzZXR4X2xhdGVfY29sbGlzaW9ucztcbi1cdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNBYm9ydGVkRHVlVG9YU0NvbGxzID0gbWliLVx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzO1xuLVx0LyogbWFjX3N0YXRzLVx1MDAzZUZyYW1lc0xvc3REdWVUb0ludE1BQ1htaXRFcnJvciAqL1xuLVx0LyogbWFjX3N0YXRzLVx1MDAzZUNhcnJpZXJTZW5zZUVycm9ycyAqL1xuLVx0bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1JlY2VpdmVkT0sgPSBtaWItXHUwMDNlcnhfZ29vZF9ieXRlcztcbi1cdC8qIG1hY19zdGF0cy1cdTAwM2VGcmFtZXNMb3N0RHVlVG9JbnRNQUNSY3ZFcnJvciAqL1xuLVx0bWFjX3N0YXRzLVx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyA9IG1pYi1cdTAwM2V0eF9tdWx0aWNhc3Q7XG4tXHRtYWNfc3RhdHMtXHUwMDNlQnJvYWRjYXN0RnJhbWVzWG1pdHRlZE9LID0gbWliLVx1MDAzZXR4X2Jyb2FkY2FzdDtcbi1cdC8qIG1hY19zdGF0cy1cdTAwM2VGcmFtZXNXaXRoRXhjZXNzaXZlRGVmZXJyYWwgKi9cbi1cdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0gbWliLVx1MDAzZXJ4X211bHRpY2FzdDtcbi1cdG1hY19zdGF0cy1cdTAwM2VCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LID0gbWliLVx1MDAzZXJ4X2Jyb2FkY2FzdDtcbi1cdC8qIG1hY19zdGF0cy1cdTAwM2VJblJhbmdlTGVuZ3RoRXJyb3JzICovXG4tXHQvKiBtYWNfc3RhdHMtXHUwMDNlT3V0T2ZSYW5nZUxlbmd0aEZpZWxkICovXG4tXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVUb29Mb25nRXJyb3JzID0gbWliLVx1MDAzZXJ4X292ZXJzaXplX2Vycm9ycztcbi19XG4tXG4tc3RhdGljIHZvaWRcbi15dDkyMXhfZHNhX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLVx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxuLXtcbi1cdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbi1cdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuLVx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXG4tXHRjdHJsX3N0YXRzLVx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNUcmFuc21pdHRlZCA9IG1pYi1cdTAwM2V0eF9wYXVzZTtcbi1cdGN0cmxfc3RhdHMtXHUwMDNlTUFDQ29udHJvbEZyYW1lc1JlY2VpdmVkID0gbWliLVx1MDAzZXJ4X3BhdXNlO1xuLVx0LyogY3RybF9zdGF0cy1cdTAwM2VVbnN1cHBvcnRlZE9wY29kZXNSZWNlaXZlZCAqL1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIHl0OTIxeF9ybW9uX3Jhbmdlc1tdID0ge1xuLVx0eyAwLCA2NCB9LFxuLVx0eyA2NSwgMTI3IH0sXG4tXHR7IDEyOCwgMjU1IH0sXG4tXHR7IDI1NiwgNTExIH0sXG4tXHR7IDUxMiwgMTAyMyB9LFxuLVx0eyAxMDI0LCAxNTE4IH0sXG4tXHR7IDE1MTksIFlUOTIxWF9GUkFNRV9TSVpFX01BWCB9LFxuLVx0e31cbi19O1xuLVxuLXN0YXRpYyB2b2lkXG4teXQ5MjF4X2RzYV9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLVx0XHRcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbi1cdFx0XHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcbi17XG4tXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4tXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbi1cdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLVxuLVx0KnJhbmdlcyA9IHl0OTIxeF9ybW9uX3Jhbmdlcztcbi1cbi1cdHJtb25fc3RhdHMtXHUwMDNldW5kZXJzaXplX3BrdHMgPSBtaWItXHUwMDNlcnhfdW5kZXJzaXplX2Vycm9ycztcbi1cdHJtb25fc3RhdHMtXHUwMDNlb3ZlcnNpemVfcGt0cyA9IG1pYi1cdTAwM2VyeF9vdmVyc2l6ZV9lcnJvcnM7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWZyYWdtZW50cyA9IG1pYi1cdTAwM2VyeF9hbGlnbm1lbnRfZXJyb3JzO1xuLVx0Lyogcm1vbl9zdGF0cy1cdTAwM2VqYWJiZXJzICovXG4tXG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMF0gPSBtaWItXHUwMDNlcnhfNjRieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzFdID0gbWliLVx1MDAzZXJ4XzY1XzEyN2J5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMl0gPSBtaWItXHUwMDNlcnhfMTI4XzI1NWJ5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbM10gPSBtaWItXHUwMDNlcnhfMjU2XzUxMWJ5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbNF0gPSBtaWItXHUwMDNlcnhfNTEyXzEwMjNieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzVdID0gbWliLVx1MDAzZXJ4XzEwMjRfMTUxOGJ5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbNl0gPSBtaWItXHUwMDNlcnhfanVtYm87XG4tXG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbMF0gPSBtaWItXHUwMDNldHhfNjRieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzFdID0gbWliLVx1MDAzZXR4XzY1XzEyN2J5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbMl0gPSBtaWItXHUwMDNldHhfMTI4XzI1NWJ5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbM10gPSBtaWItXHUwMDNldHhfMjU2XzUxMWJ5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbNF0gPSBtaWItXHUwMDNldHhfNTEyXzEwMjNieXRlO1xuLVx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzVdID0gbWliLVx1MDAzZXR4XzEwMjRfMTUxOGJ5dGU7XG4tXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbNl0gPSBtaWItXHUwMDNldHhfanVtYm87XG4tfVxuLVxuLXN0YXRpYyB2b2lkXG4teXQ5MjF4X2RzYV9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLVx0XHQgICAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcbi17XG4tXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4tXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbi1cdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG4tXG4tXHRzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzID0gbWliLVx1MDAzZXJ4X3VuZGVyc2l6ZV9lcnJvcnMgK1xuLVx0XHRcdFx0ICBtaWItXHUwMDNlcnhfZnJhZ21lbnRfZXJyb3JzO1xuLVx0c3RhdHMtXHUwMDNlcnhfb3Zlcl9lcnJvcnMgPSBtaWItXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzO1xuLVx0c3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyA9IG1pYi1cdTAwM2VyeF9jcmNfZXJyb3JzO1xuLVx0c3RhdHMtXHUwMDNlcnhfZnJhbWVfZXJyb3JzID0gbWliLVx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnM7XG4tXHQvKiBzdGF0cy1cdTAwM2VyeF9maWZvX2Vycm9ycyAqL1xuLVx0Lyogc3RhdHMtXHUwMDNlcnhfbWlzc2VkX2Vycm9ycyAqL1xuLVxuLVx0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgPSBtaWItXHUwMDNldHhfYWJvcnRlZF9lcnJvcnM7XG4tXHQvKiBzdGF0cy1cdTAwM2V0eF9jYXJyaWVyX2Vycm9ycyAqL1xuLVx0c3RhdHMtXHUwMDNldHhfZmlmb19lcnJvcnMgPSBtaWItXHUwMDNldHhfdW5kZXJzaXplX2Vycm9ycztcbi1cdC8qIHN0YXRzLVx1MDAzZXR4X2hlYXJ0YmVhdF9lcnJvcnMgKi9cbi1cdHN0YXRzLVx1MDAzZXR4X3dpbmRvd19lcnJvcnMgPSBtaWItXHUwMDNldHhfbGF0ZV9jb2xsaXNpb25zO1xuLVxuLVx0c3RhdHMtXHUwMDNlcnhfcGFja2V0cyA9IHBwLVx1MDAzZXJ4X2ZyYW1lcztcbi1cdHN0YXRzLVx1MDAzZXR4X3BhY2tldHMgPSBwcC1cdTAwM2V0eF9mcmFtZXM7XG4tXHRzdGF0cy1cdTAwM2VyeF9ieXRlcyA9IG1pYi1cdTAwM2VyeF9nb29kX2J5dGVzIC0gRVRIX0ZDU19MRU4gKiBzdGF0cy1cdTAwM2VyeF9wYWNrZXRzO1xuLVx0c3RhdHMtXHUwMDNldHhfYnl0ZXMgPSBtaWItXHUwMDNldHhfZ29vZF9ieXRlcyAtIEVUSF9GQ1NfTEVOICogc3RhdHMtXHUwMDNldHhfcGFja2V0cztcbi1cdHN0YXRzLVx1MDAzZXJ4X2Vycm9ycyA9IHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgKyBzdGF0cy1cdTAwM2VyeF9vdmVyX2Vycm9ycyArXG4tXHRcdFx0ICAgc3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyArIHN0YXRzLVx1MDAzZXJ4X2ZyYW1lX2Vycm9ycztcbi1cdHN0YXRzLVx1MDAzZXR4X2Vycm9ycyA9IHN0YXRzLVx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzICsgc3RhdHMtXHUwMDNldHhfZmlmb19lcnJvcnMgK1xuLVx0XHRcdCAgIHN0YXRzLVx1MDAzZXR4X3dpbmRvd19lcnJvcnM7XG4tXHRzdGF0cy1cdTAwM2VyeF9kcm9wcGVkID0gbWliLVx1MDAzZXJ4X2Ryb3BwZWQ7XG4tXHQvKiBzdGF0cy1cdTAwM2V0eF9kcm9wcGVkICovXG4tXHRzdGF0cy1cdTAwM2VtdWx0aWNhc3QgPSBtaWItXHUwMDNlcnhfbXVsdGljYXN0O1xuLVx0c3RhdHMtXHUwMDNlY29sbGlzaW9ucyA9IG1pYi1cdTAwM2V0eF9jb2xsaXNpb25zO1xuLX1cbi1cbi1zdGF0aWMgdm9pZFxuLXl0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tXHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxuLXtcbi1cdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbi1cdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuLVx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tXG4tXHRwYXVzZV9zdGF0cy1cdTAwM2V0eF9wYXVzZV9mcmFtZXMgPSBtaWItXHUwMDNldHhfcGF1c2U7XG4tXHRwYXVzZV9zdGF0cy1cdTAwM2VyeF9wYXVzZV9mcmFtZXMgPSBtaWItXHUwMDNlcnhfcGF1c2U7XG4tfVxuLVxuIHN0YXRpYyBpbnRcbiB5dDkyMXhfc2V0X2VlZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKVxuIHtcbkBAIC0zOTUzLDExICszNTkyLDE0IEBAIHl0OTIxeF9waHlsaW5rX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuIHtcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcC1cdTAwM2Vkcyk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG07XG4gXHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuIFx0aW50IHJlcztcbiBcbiBcdC8qIE5vIG5lZWQgdG8gc3luYzsgcG9ydCBjb250cm9sIGJsb2NrIGlzIGhvbGQgdW50aWwgZGV2aWNlIHJlbW92ZSAqL1xuLVx0Y2FuY2VsX2RlbGF5ZWRfd29yayhcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdLm1pYl9yZWFkKTtcbitcdHBtID0gcHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG4rXHRpZiAocG0pXG4rXHRcdGNhbmNlbF9kZWxheWVkX3dvcmsoXHUwMDI2cG0tXHUwMDNld29yayk7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuIFx0cmVzID0geXQ5MjF4X3BvcnRfZG93bihwcml2LCBwb3J0KTtcbkBAIC0zOTc2LDYgKzM2MTgsNyBAQCB5dDkyMXhfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiB7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpO1xuIFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHAtXHUwMDNlZHMpO1xuK1x0c3RydWN0IHl0OTIxeF9taWIgKnBtO1xuIFx0aW50IHBvcnQgPSBkcC1cdTAwM2VpbmRleDtcbiBcdGludCByZXM7XG4gXG5AQCAtMzk4OCw3ICszNjMxLDkgQEAgeXQ5MjF4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHRcdGRldl9lcnIoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxcblwiLCBcImJyaW5nIHVwXCIsXG4gXHRcdFx0cG9ydCwgcmVzKTtcbiBcbi1cdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdLm1pYl9yZWFkLCAwKTtcbitcdHBtID0gcHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG4rXHRpZiAocG0pXG4rXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwbS1cdTAwM2V3b3JrLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWRcbkBAIC00MTA4LDExICszNzUzLDM2IEBAIHl0OTIxeF9kc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0cmV0dXJuIERTQV9UQUdfUFJPVE9fWVQ5MjFYO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB5dDkyMXhfZHNhX3BvcnRfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVx1MDAzZW1pYjtcbitcbitcdGlmIChwbSlcbitcdFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwbS1cdTAwM2V3b3JrKTtcbit9XG4rXG4gc3RhdGljIGludCB5dDkyMXhfZHNhX3BvcnRfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVx1MDAzZW1pYjtcbiBcdGludCByZXM7XG4gXG4rXHRpZiAoIXBtIFx1MDAyNlx1MDAyNiAhKEJJVChwb3J0KSBcdTAwMjYgKHByaXYtXHUwMDNlaW5mby1cdTAwM2VpbnRlcm5hbF9tYXNrIHxcbitcdFx0ICAgICBwcml2LVx1MDAzZWluZm8tXHUwMDNlZXh0ZXJuYWxfbWFzaykpKSB7XG4rXHRcdHBtID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwbSksIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXBtKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRwcC1cdTAwM2VtaWIgPSBwbTtcbitcbitcdFx0cG0tXHUwMDNlcG9ydCA9IHBwO1xuK1x0XHR1NjRfc3RhdHNfaW5pdChcdTAwMjZwbS1cdTAwM2VzeW5jcCk7XG4rXHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBtLVx1MDAzZXdvcmssIHl0OTIxeF9taWJfcG9sbCk7XG4rXHR9XG4rXG4gXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuIFx0cmVzID0geXQ5MjF4X3BvcnRfc2V0dXAocHJpdiwgcG9ydCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5AQCAtNDY2Nyw2ICs0MzM3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XG4gXHQvKiBwb3J0ICovXG4gXHQuZ2V0X3RhZ19wcm90b2NvbFx0PSB5dDkyMXhfZHNhX2dldF90YWdfcHJvdG9jb2wsXG4gXHQucGh5bGlua19nZXRfY2Fwc1x0PSB5dDkyMXhfZHNhX3BoeWxpbmtfZ2V0X2NhcHMsXG4rXHQucG9ydF90ZWFyZG93blx0XHQ9IHl0OTIxeF9kc2FfcG9ydF90ZWFyZG93bixcbiBcdC5wb3J0X3NldHVwXHRcdD0geXQ5MjF4X2RzYV9wb3J0X3NldHVwLFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19EQ0IpXG4gXHQvKiBkc2NwICovXG5AQCAtNDY5NiwxMiArNDM2Nyw2IEBAIHN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtXHUwMDNlcG9ydHMpOyBpLS0gXHUwMDNlIDA7ICkge1xuLVx0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbi1cbi1cdFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCk7XG4tXHR9XG4tXG4gXHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goXHUwMDI2cHJpdi1cdTAwM2Vkcyk7XG4gXG4gXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZWFjbF9ibGtzKTsgaSsrKSB7XG5AQCAtNDc0OSw3ICs0NDE0LDYgQEAgc3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuIFxuIFx0XHRwcC1cdTAwM2VpbmRleCA9IGk7XG4tXHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkLCB5dDkyMXhfcG9sbF9taWIpO1xuIFx0fVxuIFxuIFx0ZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbmluZGV4IDgzY2Q0NTQ5NTVkZGIuLmNlMjAxNTAyNjg0OWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbkBAIC0xNjcsNjkgKzE2Nyw2IEBAXG4gI2RlZmluZSBZVDkyMVhfRUVFX0NUUkxcdFx0XHQweGIwMDAwXG4gI2RlZmluZSAgWVQ5MjFYX0VFRV9DVFJMX0VObihwb3J0KVx0XHRCSVQocG9ydClcbiBcbi0jZGVmaW5lIFlUOTIxWF9NSUJfQ1RSTFx0XHRcdDB4YzAwMDRcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfQ0xFQU5cdFx0XHRCSVQoMzApXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX1BPUlRfTVx0XHRcdEdFTk1BU0soNiwgMylcbi0jZGVmaW5lICAgWVQ5MjFYX01JQl9DVFJMX1BPUlQoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9NSUJfQ1RSTF9QT1JUX00sICh4KSlcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfT05FX1BPUlRcdFx0QklUKDEpXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX0FMTF9QT1JUXHRcdEJJVCgwKVxuLSNkZWZpbmUgWVQ5MjFYX01JQm5fREFUQTAocG9ydClcdFx0KDB4YzAxMDAgKyAweDEwMCAqIChwb3J0KSlcbi0jZGVmaW5lIFlUOTIxWF9NSUJuX0RBVEFtKHBvcnQsIHgpXHQoWVQ5MjFYX01JQm5fREFUQTAocG9ydCkgKyA0ICogKHgpKVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1RcdFx0MHgwMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QQVVTRVx0XHQweDA0XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX01VTFRJQ0FTVFx0XHQweDA4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0NSQ19FUlJcdFx0MHgwY1xuLVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9BTElHTl9FUlJcdFx0MHgxMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSXHQweDE0XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSXHRcdDB4MThcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY0XHRcdDB4MWNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyN1x0MHgyMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTI4X1RPXzI1NVx0MHgyNFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMVx0MHgyOFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjNcdDB4MmNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOFx0MHgzMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTUxOV9UT19NQVhcdDB4MzRcbi0vKiAweDM4OiB1bnVzZWQgKi9cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfR09PRF9CWVRFU1x0XHQweDNjXG4tXG4tLyogMHg0MDogNjQgYnl0ZXMgKi9cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTXHRcdDB4NDRcbi0vKiAweDQ4OiA2NCBieXRlcyAqL1xuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PVkVSU0laRV9FUlJcdDB4NGNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfRFJPUFBFRFx0XHQweDUwXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0JST0FEQ0FTVFx0XHQweDU0XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BBVVNFXHRcdDB4NThcbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElDQVNUXHRcdDB4NWNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUlx0MHg2MFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjRcdFx0MHg2NFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3XHQweDY4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1XHQweDZjXG4tXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExXHQweDcwXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyM1x0MHg3NFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTAyNF9UT18xNTE4XHQweDc4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWFx0MHg3Y1xuLVxuLS8qIDB4ODA6IHVudXNlZCAqL1xuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTXHRcdDB4ODRcbi0vKiAweDg4OiA2NCBieXRlcyAqL1xuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9DT0xMSVNJT05cdFx0MHg4Y1xuLVxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OXHQweDkwXG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTlx0MHg5NFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OXHQweDk4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVFx0XHRcdDB4OWNcbi1cbi0jZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRURcdFx0MHhhMFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9MQVRFX0NPTExJU0lPTlx0MHhhNFxuLSNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PQU1cdFx0XHQweGE4XG4tI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX09BTVx0XHRcdDB4YWNcbi1cbiAjZGVmaW5lIFlUOTIxWF9FREFUQV9DVFJMXHRcdDB4ZTAwMDBcbiAjZGVmaW5lICBZVDkyMVhfRURBVEFfQ1RSTF9BRERSX01cdFx0R0VOTUFTSygxNSwgOClcbiAjZGVmaW5lICAgWVQ5MjFYX0VEQVRBX0NUUkxfQUREUih4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0VEQVRBX0NUUkxfQUREUl9NLCAoeCkpXG5AQCAtODYxLDU4ICs3OTgsNiBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXHUwMDNjIDgpXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoKHBvcnQpID09IDggfHwgKHBvcnQpID09IDkpXG4gXG4tc3RydWN0IHl0OTIxeF9taWIge1xuLVx0dTY0IHJ4X2Jyb2FkY2FzdDtcbi1cdHU2NCByeF9wYXVzZTtcbi1cdHU2NCByeF9tdWx0aWNhc3Q7XG4tXHR1NjQgcnhfY3JjX2Vycm9ycztcbi1cbi1cdHU2NCByeF9hbGlnbm1lbnRfZXJyb3JzO1xuLVx0dTY0IHJ4X3VuZGVyc2l6ZV9lcnJvcnM7XG4tXHR1NjQgcnhfZnJhZ21lbnRfZXJyb3JzO1xuLVx0dTY0IHJ4XzY0Ynl0ZTtcbi1cbi1cdHU2NCByeF82NV8xMjdieXRlO1xuLVx0dTY0IHJ4XzEyOF8yNTVieXRlO1xuLVx0dTY0IHJ4XzI1Nl81MTFieXRlO1xuLVx0dTY0IHJ4XzUxMl8xMDIzYnl0ZTtcbi1cbi1cdHU2NCByeF8xMDI0XzE1MThieXRlO1xuLVx0dTY0IHJ4X2p1bWJvO1xuLVx0dTY0IHJ4X2dvb2RfYnl0ZXM7XG4tXG4tXHR1NjQgcnhfYmFkX2J5dGVzO1xuLVx0dTY0IHJ4X292ZXJzaXplX2Vycm9ycztcbi1cbi1cdHU2NCByeF9kcm9wcGVkO1xuLVx0dTY0IHR4X2Jyb2FkY2FzdDtcbi1cdHU2NCB0eF9wYXVzZTtcbi1cdHU2NCB0eF9tdWx0aWNhc3Q7XG4tXG4tXHR1NjQgdHhfdW5kZXJzaXplX2Vycm9ycztcbi1cdHU2NCB0eF82NGJ5dGU7XG4tXHR1NjQgdHhfNjVfMTI3Ynl0ZTtcbi1cdHU2NCB0eF8xMjhfMjU1Ynl0ZTtcbi1cbi1cdHU2NCB0eF8yNTZfNTExYnl0ZTtcbi1cdHU2NCB0eF81MTJfMTAyM2J5dGU7XG4tXHR1NjQgdHhfMTAyNF8xNTE4Ynl0ZTtcbi1cdHU2NCB0eF9qdW1ibztcbi1cbi1cdHU2NCB0eF9nb29kX2J5dGVzO1xuLVx0dTY0IHR4X2NvbGxpc2lvbnM7XG4tXG4tXHR1NjQgdHhfYWJvcnRlZF9lcnJvcnM7XG4tXHR1NjQgdHhfbXVsdGlwbGVfY29sbGlzaW9ucztcbi1cdHU2NCB0eF9zaW5nbGVfY29sbGlzaW9ucztcbi1cdHU2NCB0eF9nb29kO1xuLVxuLVx0dTY0IHR4X2RlZmVycmVkO1xuLVx0dTY0IHR4X2xhdGVfY29sbGlzaW9ucztcbi1cdHU2NCByeF9vYW07XG4tXHR1NjQgdHhfb2FtO1xuLX07XG4tXG4gc3RydWN0IHl0OTIxeF9hY2xfZW50cnkge1xuIFx0dTMyIGtleVsyXTtcbiBcdHUzMiBtYXNrWzJdO1xuQEAgLTkzNiwxMyArODIxLDggQEAgc3RydWN0IHl0OTIxeF9hY2xfYmxrIHtcbiBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0dW5zaWduZWQgY2hhciBpbmRleDtcbiBcbi1cdGJvb2wgaGFpcnBpbjtcbi1cdGJvb2wgaXNvbGF0ZWQ7XG4tXG4tXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG1pYl9yZWFkO1xuLVx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuLVx0dTY0IHJ4X2ZyYW1lcztcbi1cdHU2NCB0eF9mcmFtZXM7XG4rXHRib29sIGhhaXJwaW46MTtcbitcdGJvb2wgaXNvbGF0ZWQ6MTtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiBcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XG5AQCAtOTUzLDYgKzgzMyw4IEBAIHN0cnVjdCB5dDkyMXhfcG9ydCB7XG4gXG4gXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkc1tZVDkyMVhfTEVEX0dST1VQX05VTV07XG4gI2VuZGlmXG4rXG4rXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliO1xuIH07XG4gXG4gc3RydWN0IHl0OTIxeF9yZWdfb3BzIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjMwNDc4Y2U3MWMxMDVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmNcbkBAIC0wLDAgKzEsNDMwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibWliLmhcIlxuKyNpbmNsdWRlIFwic21pLmhcIlxuK1xuK3N0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xuK1x0dW5zaWduZWQgY2hhciBzaXplO1xuK1x0dW5zaWduZWQgY2hhciBvZmZzZXQ7XG4rXHRjb25zdCBjaGFyICpuYW1lO1xuK307XG4rXG4rI2RlZmluZSBNSUJfREVTQyhfc2l6ZSwgX29mZnNldCwgX25hbWUpIHtfc2l6ZSwgX29mZnNldCwgX25hbWV9XG4rXG4rLyogTXVzdCBhZ3JlZSB3aXRoIHl0OTIxeF9taWJcbisgKlxuKyAqIFVuc3RydWN0dXJlZCBmaWVsZHMgKG5hbWUgIT0gTlVMTCkgd2lsbCBhcHBlYXIgaW4gZ2V0X2V0aHRvb2xfc3RhdHMoKSxcbisgKiBzdHJ1Y3R1cmVkIGdvIHRvIHRoZWlyICpfc3RhdHMoKSBtZXRob2RzLCBidXQgd2UgbmVlZCB0aGVpciBzaXplcyBhbmQgb2Zmc2V0c1xuKyAqIHRvIHBlcmZvcm0gMzJiaXQgTUlCIG92ZXJmbG93IHdyYXBhcm91bmQuXG4rICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgeXQ5MjF4X21pYl9kZXNjc1tdID0ge1xuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0JST0FEQ0FTVCwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEFVU0UsIE5VTEwpLFxuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX01VTFRJQ0FTVCwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfQ1JDX0VSUiwgTlVMTCksXG4rXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfQUxJR05fRVJSLCBOVUxMKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSLCBOVUxMKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9GUkFHX0VSUiwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY0LCBOVUxMKSxcbitcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTI4X1RPXzI1NSwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzI1Nl9UT181MTEsIE5VTEwpLFxuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX1BLVF9TWl81MTJfVE9fMTAyMywgTlVMTCksXG4rXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzE1MTlfVE9fTUFYLCBOVUxMKSxcbitcdE1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9SWF9HT09EX0JZVEVTLCBOVUxMKSxcbitcbitcdE1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9SWF9CQURfQllURVMsIFwiUnhCYWRCeXRlc1wiKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9SWF9PVkVSU0laRV9FUlIsIE5VTEwpLFxuK1xuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0RST1BQRUQsIE5VTEwpLFxuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0JST0FEQ0FTVCwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEFVU0UsIE5VTEwpLFxuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJQ0FTVCwgTlVMTCksXG4rXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUiwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzY0LCBOVUxMKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3LCBOVUxMKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTI4X1RPXzI1NSwgTlVMTCksXG4rXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzI1Nl9UT181MTEsIE5VTEwpLFxuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyMywgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzEwMjRfVE9fMTUxOCwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtUX1NaXzE1MTlfVE9fTUFYLCBOVUxMKSxcbitcbitcdE1JQl9ERVNDKDIsIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTLCBOVUxMKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9DT0xMSVNJT04sIE5VTEwpLFxuK1xuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04sIE5VTEwpLFxuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTiwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfU0lOR0xFX0NPTExJU0lPTiwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfUEtULCBOVUxMKSxcbitcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9ERUZFUlJFRCwgTlVMTCksXG4rXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfVFhfTEFURV9DT0xMSVNJT04sIE5VTEwpLFxuK1x0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX09BTSwgXCJSeE9BTVwiKSxcbitcdE1JQl9ERVNDKDEsIFlUOTIxWF9NSUJfREFUQV9UWF9PQU0sIFwiVHhPQU1cIiksXG4rfTtcbitcbisvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuKyAqXG4rICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuKyAqIHRoZXJlKSwgd2UgaGF2ZSB0byBwb2xsIHN0YXRzIG1vcmUgZnJlcXVlbnRseSB0aGVuIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC5cbisgKiBGb3Igb3ZlcmZsb3cgcHJvdGVjdGlvbiwgbm9ybWFsbHksIDEwMCBzZWMgaW50ZXJ2YWwgc2hvdWxkIGhhdmUgYmVlbiBPSy5cbisgKi9cbisjZGVmaW5lIFlUOTIxWF9TVEFUU19JTlRFUlZBTF9KSUZGSUVTXHQoMyAqIEhaKVxuK1xuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYoX2RzKSBjb250YWluZXJfb2ZfY29uc3QoX2RzLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIGRzKVxuKyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuK1xuKy8qIFJlYWQgYW5kIGhhbmRsZSBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLiBNSUIgYnVmZmVyIG11c3QgYmUgemVyb2VkIGJlZm9yZS4gKi9cbitzdGF0aWMgaW50IHl0OTIxeF9taWJfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuK1x0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcbitcdHU2NCAqYnVmID0gcG0tXHUwMDNlZGF0YTtcbitcdHU2NCByeF9mcmFtZXM7XG4rXHR1NjQgdHhfZnJhbWVzO1xuK1x0aW50IHJlcyA9IDA7XG4rXG4rXHRtaWIgPSBcdTAwMjZwbS1cdTAwM2VzdGF0cztcbitcbitcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG4rXHRcdHUzMiByZWcgPSBZVDkyMVhfTUlCbl9EQVRBMChwb3J0KSArIGRlc2MtXHUwMDNlb2Zmc2V0O1xuK1xuK1x0XHRpZiAoZGVzYy1cdTAwM2VzaXplIFx1MDAzYz0gMSkge1xuK1x0XHRcdHU2NCBvbGRfdmFsID0gYnVmW2ldO1xuK1x0XHRcdHUzMiB2YWwwO1xuK1x0XHRcdHU2NCB2YWw7XG4rXG4rXHRcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dmFsMCk7XG4rXHRcdFx0aWYgKHJlcylcbitcdFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRcdHZhbCA9IChvbGRfdmFsIFx1MDAyNiB+KHU2NClVMzJfTUFYKSB8IHZhbDA7XG4rXHRcdFx0aWYgKHZhbCBcdTAwM2Mgb2xkX3ZhbClcbitcdFx0XHRcdHZhbCArPSAxdWxsIFx1MDAzY1x1MDAzYyAzMjtcbitcbitcdFx0XHRidWZbaV0gPSB2YWw7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmVzID0geXQ5MjF4X2NvdW50ZXJfcmVhZChwcml2LCByZWcsIFx1MDAyNmJ1ZltpXSk7XG4rXHRcdFx0aWYgKHJlcylcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnBtLVx1MDAzZXN5bmNwKTtcbitcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspXG4rXHRcdHU2NF9zdGF0c19zZXQoXHUwMDI2KCh1NjRfc3RhdHNfdCAqKW1pYilbaV0sIGJ1ZltpXSk7XG4rXHRyeF9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfNjRieXRlKSArXG4rXHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfNjVfMTI3Ynl0ZSkgK1xuK1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzEyOF8yNTVieXRlKSArXG4rXHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfMjU2XzUxMWJ5dGUpICtcbitcdFx0ICAgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF81MTJfMTAyM2J5dGUpICtcbitcdFx0ICAgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF8xMDI0XzE1MThieXRlKSArXG4rXHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfanVtYm8pO1xuK1x0dHhfZnJhbWVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzY0Ynl0ZSkgK1xuK1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzY1XzEyN2J5dGUpICtcbitcdFx0ICAgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF8xMjhfMjU1Ynl0ZSkgK1xuK1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzI1Nl81MTFieXRlKSArXG4rXHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfNTEyXzEwMjNieXRlKSArXG4rXHRcdCAgICB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfMTAyNF8xNTE4Ynl0ZSkgK1xuK1x0XHQgICAgdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2p1bWJvKTtcbitcdHU2NF9zdGF0c19zZXQoXHUwMDI2cG0tXHUwMDNlcnhfZnJhbWVzLCByeF9mcmFtZXMpO1xuK1x0dTY0X3N0YXRzX3NldChcdTAwMjZwbS1cdTAwM2V0eF9mcmFtZXMsIHR4X2ZyYW1lcyk7XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZwbS1cdTAwM2VzeW5jcCk7XG4rXG4rXHRpZiAocmVzKVxuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcXG5cIiwgXCJyZWFkIHN0YXRzIGZvclwiLFxuK1x0XHRcdHBvcnQsIHJlcyk7XG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbit2b2lkIHl0OTIxeF9taWJfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gY29udGFpbmVyX29mX2NvbnN0KHdvcmssIHN0cnVjdCB5dDkyMXhfbWliLFxuK1x0XHRcdFx0XHRcdCAgIHdvcmsud29yayk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gcG0tXHUwMDNlcG9ydDtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZl9jb25zdChwcCwgc3RydWN0IHl0OTIxeF9wcml2LFxuK1x0XHRcdFx0XHRcdCAgICAgIHBvcnRzW3BwLVx1MDAzZWluZGV4XSk7XG4rXHR1bnNpZ25lZCBsb25nIGRlbGF5ID0gWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVM7XG4rXHRpbnQgcG9ydCA9IHBwLVx1MDAzZWluZGV4O1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbWliX3JlYWQocHJpdiwgcG9ydCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRpZiAocmVzKVxuK1x0XHRkZWxheSAqPSA0O1xuK1xuK1x0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnBtLVx1MDAzZXdvcmssIGRlbGF5KTtcbit9XG4rXG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCxcbitcdFx0ICAgICAgIHVpbnQ4X3QgKmRhdGEpXG4re1xuK1x0aWYgKHN0cmluZ3NldCAhPSBFVEhfU1NfU1RBVFMpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG4rXG4rXHRcdGlmIChkZXNjLVx1MDAzZW5hbWUpXG4rXHRcdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIGRlc2MtXHUwMDNlbmFtZSk7XG4rXHR9XG4rfVxuK1xuK3ZvaWRcbit5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuK1x0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcbitcdHU2NCAqYnVmO1xuK1x0c2l6ZV90IGo7XG4rXG4rXHRpZiAoIXBtKVxuK1x0XHRyZXR1cm47XG4rXHRtaWIgPSBcdTAwMjZwbS1cdTAwM2VzdGF0cztcbitcdGJ1ZiA9IHBtLVx1MDAzZWRhdGE7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0eXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpO1xuK1xuK1x0aiA9IDA7XG4rXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuK1xuK1x0XHRpZiAoIWRlc2MtXHUwMDNlbmFtZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZGF0YVtqXSA9IGJ1ZltpXTtcbitcdFx0aisrO1xuK1x0fVxuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK31cbitcbitpbnQgeXQ5MjF4X2RzYV9nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldClcbit7XG4rXHRpbnQgY250ID0gMDtcbitcbitcdGlmIChzc2V0ICE9IEVUSF9TU19TVEFUUylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuK1xuK1x0XHRpZiAoZGVzYy1cdTAwM2VuYW1lKVxuK1x0XHRcdGNudCsrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGNudDtcbit9XG4rXG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbWliICpwbSA9IHBwLVx1MDAzZW1pYjtcbitcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzICptaWI7XG4rXG4rXHRpZiAoIXBtKVxuK1x0XHRyZXR1cm47XG4rXHRtaWIgPSBcdTAwMjZwbS1cdTAwM2VzdGF0cztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHR5dDkyMXhfbWliX3JlYWQocHJpdiwgcG9ydCk7XG4rXG4rXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzVHJhbnNtaXR0ZWRPSyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNnBtLVx1MDAzZXR4X2ZyYW1lcyk7XG4rXHRtYWNfc3RhdHMtXHUwMDNlU2luZ2xlQ29sbGlzaW9uRnJhbWVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X3NpbmdsZV9jb2xsaXNpb25zKTtcbitcdG1hY19zdGF0cy1cdTAwM2VNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9tdWx0aXBsZV9jb2xsaXNpb25zKTtcbitcdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNSZWNlaXZlZE9LID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2cG0tXHUwMDNlcnhfZnJhbWVzKTtcbitcdG1hY19zdGF0cy1cdTAwM2VGcmFtZUNoZWNrU2VxdWVuY2VFcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfY3JjX2Vycm9ycyk7XG4rXHRtYWNfc3RhdHMtXHUwMDNlQWxpZ25tZW50RXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2FsaWdubWVudF9lcnJvcnMpO1xuK1x0bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1RyYW5zbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfZ29vZF9ieXRlcyk7XG4rXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzV2l0aERlZmVycmVkWG1pc3Npb25zID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2RlZmVycmVkKTtcbitcdG1hY19zdGF0cy1cdTAwM2VMYXRlQ29sbGlzaW9ucyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9sYXRlX2NvbGxpc2lvbnMpO1xuK1x0bWFjX3N0YXRzLVx1MDAzZUZyYW1lc0Fib3J0ZWREdWVUb1hTQ29sbHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMpO1xuK1x0LyogbWFjX3N0YXRzLVx1MDAzZUZyYW1lc0xvc3REdWVUb0ludE1BQ1htaXRFcnJvciAqL1xuK1x0LyogbWFjX3N0YXRzLVx1MDAzZUNhcnJpZXJTZW5zZUVycm9ycyAqL1xuK1x0bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1JlY2VpdmVkT0sgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfZ29vZF9ieXRlcyk7XG4rXHQvKiBtYWNfc3RhdHMtXHUwMDNlRnJhbWVzTG9zdER1ZVRvSW50TUFDUmN2RXJyb3IgKi9cbitcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfbXVsdGljYXN0KTtcbitcdG1hY19zdGF0cy1cdTAwM2VCcm9hZGNhc3RGcmFtZXNYbWl0dGVkT0sgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfYnJvYWRjYXN0KTtcbitcdC8qIG1hY19zdGF0cy1cdTAwM2VGcmFtZXNXaXRoRXhjZXNzaXZlRGVmZXJyYWwgKi9cbitcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X211bHRpY2FzdCk7XG4rXHRtYWNfc3RhdHMtXHUwMDNlQnJvYWRjYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9icm9hZGNhc3QpO1xuK1x0LyogbWFjX3N0YXRzLVx1MDAzZUluUmFuZ2VMZW5ndGhFcnJvcnMgKi9cbitcdC8qIG1hY19zdGF0cy1cdTAwM2VPdXRPZlJhbmdlTGVuZ3RoRmllbGQgKi9cbitcdG1hY19zdGF0cy1cdTAwM2VGcmFtZVRvb0xvbmdFcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfb3ZlcnNpemVfZXJyb3JzKTtcbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbit9XG4rXG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4rXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqcG0gPSBwcC1cdTAwM2VtaWI7XG4rXHRzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyAqbWliO1xuK1xuK1x0aWYgKCFwbSlcbitcdFx0cmV0dXJuO1xuK1x0bWliID0gXHUwMDI2cG0tXHUwMDNlc3RhdHM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0eXQ5MjF4X21pYl9yZWFkKHByaXYsIHBvcnQpO1xuK1xuK1x0Y3RybF9zdGF0cy1cdTAwM2VNQUNDb250cm9sRnJhbWVzVHJhbnNtaXR0ZWQgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfcGF1c2UpO1xuK1x0Y3RybF9zdGF0cy1cdTAwM2VNQUNDb250cm9sRnJhbWVzUmVjZWl2ZWQgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfcGF1c2UpO1xuK1x0LyogY3RybF9zdGF0cy1cdTAwM2VVbnN1cHBvcnRlZE9wY29kZXNSZWNlaXZlZCAqL1xuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIHl0OTIxeF9ybW9uX3Jhbmdlc1tdID0ge1xuK1x0eyAwLCA2NCB9LFxuK1x0eyA2NSwgMTI3IH0sXG4rXHR7IDEyOCwgMjU1IH0sXG4rXHR7IDI1NiwgNTExIH0sXG4rXHR7IDUxMiwgMTAyMyB9LFxuK1x0eyAxMDI0LCAxNTE4IH0sXG4rXHR7IDE1MTksIFlUOTIxWF9GUkFNRV9TSVpFX01BWCB9LFxuK1x0e31cbit9O1xuK1xuK3ZvaWRcbit5dDkyMXhfZHNhX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuK1x0XHRcdCAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuK1x0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcbitcbitcdGlmICghcG0pXG4rXHRcdHJldHVybjtcbitcdG1pYiA9IFx1MDAyNnBtLVx1MDAzZXN0YXRzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTtcbitcbitcdCpyYW5nZXMgPSB5dDkyMXhfcm1vbl9yYW5nZXM7XG4rXG4rXHRybW9uX3N0YXRzLVx1MDAzZXVuZGVyc2l6ZV9wa3RzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X3VuZGVyc2l6ZV9lcnJvcnMpO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VvdmVyc2l6ZV9wa3RzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X292ZXJzaXplX2Vycm9ycyk7XG4rXHRybW9uX3N0YXRzLVx1MDAzZWZyYWdtZW50cyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9hbGlnbm1lbnRfZXJyb3JzKTtcbitcdC8qIHJtb25fc3RhdHMtXHUwMDNlamFiYmVycyAqL1xuK1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzBdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzY0Ynl0ZSk7XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMV0gPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfNjVfMTI3Ynl0ZSk7XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMl0gPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfMTI4XzI1NWJ5dGUpO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzNdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzI1Nl81MTFieXRlKTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFs0XSA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF81MTJfMTAyM2J5dGUpO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzVdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4XzEwMjRfMTUxOGJ5dGUpO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzZdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2p1bWJvKTtcbitcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFswXSA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF82NGJ5dGUpO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzFdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzY1XzEyN2J5dGUpO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzJdID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4XzEyOF8yNTVieXRlKTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFszXSA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF8yNTZfNTExYnl0ZSk7XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbNF0gPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfNTEyXzEwMjNieXRlKTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs1XSA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF8xMDI0XzE1MThieXRlKTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs2XSA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9qdW1ibyk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rfVxuK1xuK3ZvaWRcbit5dDkyMXhfZHNhX2dldF9zdGF0czY0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdCAgICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuK1x0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcbitcdHVuc2lnbmVkIGludCBzdGFydDtcbitcbitcdGlmICghcG0pXG4rXHRcdHJldHVybjtcbitcdG1pYiA9IFx1MDAyNnBtLVx1MDAzZXN0YXRzO1xuK1xuK1x0ZG8ge1xuK1x0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZwbS1cdTAwM2VzeW5jcCk7XG4rXG4rXHRcdHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfdW5kZXJzaXplX2Vycm9ycykgK1xuK1x0XHRcdFx0XHQgIHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9mcmFnbWVudF9lcnJvcnMpO1xuK1x0XHRzdGF0cy1cdTAwM2VyeF9vdmVyX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9vdmVyc2l6ZV9lcnJvcnMpO1xuK1x0XHRzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2NyY19lcnJvcnMpO1xuK1x0XHRzdGF0cy1cdTAwM2VyeF9mcmFtZV9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfYWxpZ25tZW50X2Vycm9ycyk7XG4rXHRcdC8qIHN0YXRzLVx1MDAzZXJ4X2ZpZm9fZXJyb3JzICovXG4rXHRcdC8qIHN0YXRzLVx1MDAzZXJ4X21pc3NlZF9lcnJvcnMgKi9cbitcbitcdFx0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMpO1xuK1x0XHQvKiBzdGF0cy1cdTAwM2V0eF9jYXJyaWVyX2Vycm9ycyAqL1xuK1x0XHRzdGF0cy1cdTAwM2V0eF9maWZvX2Vycm9ycyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF91bmRlcnNpemVfZXJyb3JzKTtcbitcdFx0Lyogc3RhdHMtXHUwMDNldHhfaGVhcnRiZWF0X2Vycm9ycyAqL1xuK1x0XHRzdGF0cy1cdTAwM2V0eF93aW5kb3dfZXJyb3JzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2xhdGVfY29sbGlzaW9ucyk7XG4rXG4rXHRcdHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZwbS1cdTAwM2VyeF9mcmFtZXMpO1xuK1x0XHRzdGF0cy1cdTAwM2V0eF9wYWNrZXRzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2cG0tXHUwMDNldHhfZnJhbWVzKTtcbitcdFx0c3RhdHMtXHUwMDNlcnhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfZ29vZF9ieXRlcykgLVxuK1x0XHRcdFx0ICBFVEhfRkNTX0xFTiAqIHN0YXRzLVx1MDAzZXJ4X3BhY2tldHM7XG4rXHRcdHN0YXRzLVx1MDAzZXR4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2dvb2RfYnl0ZXMpIC1cbitcdFx0XHRcdCAgRVRIX0ZDU19MRU4gKiBzdGF0cy1cdTAwM2V0eF9wYWNrZXRzO1xuK1x0XHRzdGF0cy1cdTAwM2VyeF9kcm9wcGVkID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXJ4X2Ryb3BwZWQpO1xuK1x0XHQvKiBzdGF0cy1cdTAwM2V0eF9kcm9wcGVkICovXG4rXHRcdHN0YXRzLVx1MDAzZW11bHRpY2FzdCA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2VyeF9tdWx0aWNhc3QpO1xuK1x0XHRzdGF0cy1cdTAwM2Vjb2xsaXNpb25zID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bWliLVx1MDAzZXR4X2NvbGxpc2lvbnMpO1xuK1x0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNnBtLVx1MDAzZXN5bmNwLCBzdGFydCkpO1xuK1xuK1x0c3RhdHMtXHUwMDNlcnhfZXJyb3JzID0gc3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyArIHN0YXRzLVx1MDAzZXJ4X292ZXJfZXJyb3JzICtcbitcdFx0XHQgICBzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzICsgc3RhdHMtXHUwMDNlcnhfZnJhbWVfZXJyb3JzO1xuK1x0c3RhdHMtXHUwMDNldHhfZXJyb3JzID0gc3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgKyBzdGF0cy1cdTAwM2V0eF9maWZvX2Vycm9ycyArXG4rXHRcdFx0ICAgc3RhdHMtXHUwMDNldHhfd2luZG93X2Vycm9ycztcbit9XG4rXG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9taWIgKnBtID0gcHAtXHUwMDNlbWliO1xuK1x0c3RydWN0IHl0OTIxeF9taWJfc3RhdHMgKm1pYjtcbitcbitcdGlmICghcG0pXG4rXHRcdHJldHVybjtcbitcdG1pYiA9IFx1MDAyNnBtLVx1MDAzZXN0YXRzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHl0OTIxeF9taWJfcmVhZChwcml2LCBwb3J0KTtcbitcbitcdHBhdXNlX3N0YXRzLVx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNm1pYi1cdTAwM2V0eF9wYXVzZSk7XG4rXHRwYXVzZV9zdGF0cy1cdTAwM2VyeF9wYXVzZV9mcmFtZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZtaWItXHUwMDNlcnhfcGF1c2UpO1xuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL21pYi5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9taWIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjMzOTkyYTVmOWJkYzFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmhcbkBAIC0wLDAgKzEsMTY3IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2lmbmRlZiBfWVRfTUlCX0hcbisjZGVmaW5lIF9ZVF9NSUJfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbitcbisjZGVmaW5lIFlUOTIxWF9NSUJfQ1RSTFx0XHRcdDB4YzAwMDRcbisjZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfQ0xFQU5cdFx0XHRCSVQoMzApXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX1BPUlRfTVx0XHRcdEdFTk1BU0soNiwgMylcbisjZGVmaW5lICAgWVQ5MjFYX01JQl9DVFJMX1BPUlQoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9NSUJfQ1RSTF9QT1JUX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTUlCX0NUUkxfT05FX1BPUlRcdFx0QklUKDEpXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9DVFJMX0FMTF9QT1JUXHRcdEJJVCgwKVxuKyNkZWZpbmUgWVQ5MjFYX01JQm5fREFUQTAocG9ydClcdFx0KDB4YzAxMDAgKyAweDEwMCAqIChwb3J0KSlcbisjZGVmaW5lIFlUOTIxWF9NSUJuX0RBVEFtKHBvcnQsIHgpXHQoWVQ5MjFYX01JQm5fREFUQTAocG9ydCkgKyA0ICogKHgpKVxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9CUk9BRENBU1RcdFx0MHgwMFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QQVVTRVx0XHQweDA0XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX01VTFRJQ0FTVFx0XHQweDA4XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0NSQ19FUlJcdFx0MHgwY1xuK1xuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9BTElHTl9FUlJcdFx0MHgxMFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9VTkRFUlNJWkVfRVJSXHQweDE0XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1JYX0ZSQUdfRVJSXHRcdDB4MThcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY0XHRcdDB4MWNcbitcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzY1X1RPXzEyN1x0MHgyMFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTI4X1RPXzI1NVx0MHgyNFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMjU2X1RPXzUxMVx0MHgyOFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfNTEyX1RPXzEwMjNcdDB4MmNcbitcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfUEtUX1NaXzEwMjRfVE9fMTUxOFx0MHgzMFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9QS1RfU1pfMTUxOV9UT19NQVhcdDB4MzRcbisvKiAweDM4OiB1bnVzZWQgKi9cbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfR09PRF9CWVRFU1x0XHQweDNjXG4rXG4rLyogMHg0MDogNjQgYnl0ZXMgKi9cbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfQkFEX0JZVEVTXHRcdDB4NDRcbisvKiAweDQ4OiA2NCBieXRlcyAqL1xuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PVkVSU0laRV9FUlJcdDB4NGNcbitcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfUlhfRFJPUFBFRFx0XHQweDUwXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX0JST0FEQ0FTVFx0XHQweDU0XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BBVVNFXHRcdDB4NThcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfTVVMVElDQVNUXHRcdDB4NWNcbitcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfVU5ERVJTSVpFX0VSUlx0MHg2MFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjRcdFx0MHg2NFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfNjVfVE9fMTI3XHQweDY4XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xMjhfVE9fMjU1XHQweDZjXG4rXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8yNTZfVE9fNTExXHQweDcwXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl81MTJfVE9fMTAyM1x0MHg3NFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9QS1RfU1pfMTAyNF9UT18xNTE4XHQweDc4XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVF9TWl8xNTE5X1RPX01BWFx0MHg3Y1xuK1xuKy8qIDB4ODA6IHVudXNlZCAqL1xuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9HT09EX0JZVEVTXHRcdDB4ODRcbisvKiAweDg4OiA2NCBieXRlcyAqL1xuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9DT0xMSVNJT05cdFx0MHg4Y1xuK1xuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9FWENFU1NJVkVfQ09MTElTSU9OXHQweDkwXG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX01VTFRJUExFX0NPTExJU0lPTlx0MHg5NFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9TSU5HTEVfQ09MTElTSU9OXHQweDk4XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX1BLVFx0XHRcdDB4OWNcbitcbisjZGVmaW5lICBZVDkyMVhfTUlCX0RBVEFfVFhfREVGRVJSRURcdFx0MHhhMFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9UWF9MQVRFX0NPTExJU0lPTlx0MHhhNFxuKyNkZWZpbmUgIFlUOTIxWF9NSUJfREFUQV9SWF9PQU1cdFx0XHQweGE4XG4rI2RlZmluZSAgWVQ5MjFYX01JQl9EQVRBX1RYX09BTVx0XHRcdDB4YWNcbitcbitzdHJ1Y3QgeXQ5MjF4X21pYl9zdGF0cyB7XG4rXHR1NjRfc3RhdHNfdCByeF9icm9hZGNhc3Q7XG4rXHR1NjRfc3RhdHNfdCByeF9wYXVzZTtcbitcdHU2NF9zdGF0c190IHJ4X211bHRpY2FzdDtcbitcdHU2NF9zdGF0c190IHJ4X2NyY19lcnJvcnM7XG4rXG4rXHR1NjRfc3RhdHNfdCByeF9hbGlnbm1lbnRfZXJyb3JzO1xuK1x0dTY0X3N0YXRzX3QgcnhfdW5kZXJzaXplX2Vycm9ycztcbitcdHU2NF9zdGF0c190IHJ4X2ZyYWdtZW50X2Vycm9ycztcbitcdHU2NF9zdGF0c190IHJ4XzY0Ynl0ZTtcbitcbitcdHU2NF9zdGF0c190IHJ4XzY1XzEyN2J5dGU7XG4rXHR1NjRfc3RhdHNfdCByeF8xMjhfMjU1Ynl0ZTtcbitcdHU2NF9zdGF0c190IHJ4XzI1Nl81MTFieXRlO1xuK1x0dTY0X3N0YXRzX3QgcnhfNTEyXzEwMjNieXRlO1xuK1xuK1x0dTY0X3N0YXRzX3QgcnhfMTAyNF8xNTE4Ynl0ZTtcbitcdHU2NF9zdGF0c190IHJ4X2p1bWJvO1xuK1x0dTY0X3N0YXRzX3QgcnhfZ29vZF9ieXRlcztcbitcbitcdHU2NF9zdGF0c190IHJ4X2JhZF9ieXRlcztcbitcdHU2NF9zdGF0c190IHJ4X292ZXJzaXplX2Vycm9ycztcbitcbitcdHU2NF9zdGF0c190IHJ4X2Ryb3BwZWQ7XG4rXHR1NjRfc3RhdHNfdCB0eF9icm9hZGNhc3Q7XG4rXHR1NjRfc3RhdHNfdCB0eF9wYXVzZTtcbitcdHU2NF9zdGF0c190IHR4X211bHRpY2FzdDtcbitcbitcdHU2NF9zdGF0c190IHR4X3VuZGVyc2l6ZV9lcnJvcnM7XG4rXHR1NjRfc3RhdHNfdCB0eF82NGJ5dGU7XG4rXHR1NjRfc3RhdHNfdCB0eF82NV8xMjdieXRlO1xuK1x0dTY0X3N0YXRzX3QgdHhfMTI4XzI1NWJ5dGU7XG4rXG4rXHR1NjRfc3RhdHNfdCB0eF8yNTZfNTExYnl0ZTtcbitcdHU2NF9zdGF0c190IHR4XzUxMl8xMDIzYnl0ZTtcbitcdHU2NF9zdGF0c190IHR4XzEwMjRfMTUxOGJ5dGU7XG4rXHR1NjRfc3RhdHNfdCB0eF9qdW1ibztcbitcbitcdHU2NF9zdGF0c190IHR4X2dvb2RfYnl0ZXM7XG4rXHR1NjRfc3RhdHNfdCB0eF9jb2xsaXNpb25zO1xuK1xuK1x0dTY0X3N0YXRzX3QgdHhfYWJvcnRlZF9lcnJvcnM7XG4rXHR1NjRfc3RhdHNfdCB0eF9tdWx0aXBsZV9jb2xsaXNpb25zO1xuK1x0dTY0X3N0YXRzX3QgdHhfc2luZ2xlX2NvbGxpc2lvbnM7XG4rXHR1NjRfc3RhdHNfdCB0eF9nb29kO1xuK1xuK1x0dTY0X3N0YXRzX3QgdHhfZGVmZXJyZWQ7XG4rXHR1NjRfc3RhdHNfdCB0eF9sYXRlX2NvbGxpc2lvbnM7XG4rXHR1NjRfc3RhdHNfdCByeF9vYW07XG4rXHR1NjRfc3RhdHNfdCB0eF9vYW07XG4rfTtcbitcbisjZGVmaW5lIFlUOTIxWF9NSUJfTlVNXHQoc2l6ZW9mKHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzKSAvIHNpemVvZih1NjRfc3RhdHNfdCkpXG4rXG4rc3RydWN0IHl0OTIxeF9taWIge1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xuK1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayB3b3JrO1xuK1x0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xuK1x0LyogcHJvdGVjdGVkIGJ5IHN5bmNwIE9SIHByaXYtXHUwMDNlcmVnX2xvY2sgKi9cbitcdHN0cnVjdCB5dDkyMXhfbWliX3N0YXRzIHN0YXRzO1xuK1x0dTY0X3N0YXRzX3QgcnhfZnJhbWVzO1xuK1x0dTY0X3N0YXRzX3QgdHhfZnJhbWVzO1xuK1x0LyogcHJvdGVjdGVkIGJ5IHByaXYtXHUwMDNlcmVnX2xvY2sgKi9cbitcdHU2NCBkYXRhW1lUOTIxWF9NSUJfTlVNXTtcbit9O1xuK1xuK3ZvaWQgeXQ5MjF4X21pYl9wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCxcbitcdFx0ICAgICAgIHVpbnQ4X3QgKmRhdGEpO1xuK3ZvaWRcbit5dDkyMXhfZHNhX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVpbnQ2NF90ICpkYXRhKTtcbitpbnQgeXQ5MjF4X2RzYV9nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldCk7XG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cyk7XG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpO1xuK3ZvaWRcbit5dDkyMXhfZHNhX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuK1x0XHRcdCAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKTtcbit2b2lkXG4reXQ5MjF4X2RzYV9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHQgICAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cyk7XG4rdm9pZFxuK3l0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKTtcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xuaW5kZXggYmYzYWRmZDY0MTY1YS4uMjcwODY2MDI5OTdiYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbkBAIC02Myw2ICs2MywzNiBAQCBpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuIFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbiB9XG4gXG4rLyogUmVsaWFibHkgcmVhZCBhIDY0Yml0IGNvdW50ZXIgKi9cbitpbnQgeXQ5MjF4X2NvdW50ZXJfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHU2NCAqdmFscClcbit7XG4rXHR1MzIgb2xkX2xvO1xuK1x0aW50IHJlcztcbitcdHUzMiBoaTtcbitcdHUzMiBsbztcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNm9sZF9sbyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIDE2OyBpKyspIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQsIFx1MDAyNmhpKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZsbyk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcbitcdFx0aWYgKGxvIFx1MDAzZT0gb2xkX2xvKSB7XG4rXHRcdFx0KnZhbHAgPSAoKHU2NCloaSBcdTAwM2NcdTAwM2MgMzIpIHwgbG87XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdFx0b2xkX2xvID0gbG87XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4gc3RhdGljIGludFxuIHl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4gXHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbmluZGV4IDIxMmUyMGY3MWQ4MDYuLmQzNDI0MDU0OGFmN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5AQCAtMzUsNiArMzUsOCBAQCB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuIFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuIH1cbiBcbitpbnQgeXQ5MjF4X2NvdW50ZXJfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHU2NCAqdmFscCk7XG4rXG4gLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuICAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxuICAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE3OjU0LjMwODY2NjI5MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MTUzNTM1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGFuYWx5emUgdGhlIGNoYW5nZXMgdGhlbXNlbHZlcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSB0b3VjaGluZyBmaWxlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vYC5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXNlIGZpbGVzIGFyZSBiZWluZyBtb2RpZmllZDpcblxuKiAgIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlYFxuKiAgIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY2BcbiogICBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhgXG4qICAgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmNgXG4qICAgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbWliLmhgXG4qICAgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNgXG4qICAgYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhgXG5cbkFscmlnaHQsIHRoZSBsb2NhdGlvbiBnaXZlcyBtZSBhIGdvb2Qgc3RhcnQuIEkgY2FuIHNlZSB0aGF0IHRoaXMgaXMgYSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIHN3aXRjaCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIFlUOTIxWCwgd2hpY2ggaXMgYSBNb3RvcmNvbW0gZGV2aWNlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgc2V0dXAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHBhcnRpY3VsYXIgc3dpdGNoIGlzIHByb2JlZCBhbmQgd2hhdCBoYXJkd2FyZSBvciBidXMgaXQncyBib3VuZCB0by4gSXMgaXQgSTJDLCBTUEksIE1ESU8sIHNvbWV0aGluZyBlbHNlPyBLbm93aW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGluZm9ybSB3aGV0aGVyIGl0J3MgdmlhYmxlIGZvciBzeXprYWxsZXIuXG5cbkknbGwgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBzY2FuIHRocm91Z2ggdGhlIHJlbGV2YW50IGZpbGVzIHRvIGZpZ3VyZSBvdXQgdGhlIHByb2JpbmcgbWVjaGFuaXNtIGFuZCB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjgzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTc6NTcuNzI0MDIzMDk4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzczNjcxNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05FVF9EU0FfWVQ5MjFYXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlLTMteXQ5MjF4LW9ianMgOj0gY2hpcC5vXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZTo0Onl0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSArPSBsZWRzLm9cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlLTUteXQ5MjF4LW9ianMgKz0gbWliLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTM4OTc9c3RhdGljIHZvaWQgeXQ5MjF4X2RzYV90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zOTAwLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM5MDE6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzkwMi1cXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00MjE2PXN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjYxLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQyNjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI2My1cXHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oPTgyMT1zdHJ1Y3QgeXQ5MjF4X3BvcnQge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgtODI2LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oOjgyNzojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaC04MjgtXFx0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oPTk2PXN0cnVjdCB5dDkyMXhfbGVkIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oLTEwMS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaDoxMDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgtMTAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxNzo1OS4zMDEzOTY0NjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTM4NDc0NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEtjb25maWcgRmlsZXMgZm9yIERTQSBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG5ldHdvcmsgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIChEU0EpIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIENvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgdmVuZG9yLXNwZWNpZmljIG5hdHVyZSBvZiB0aGUgZHJpdmVyLCBJJ20gZ29pbmcgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdgIGZpbGUgZmlyc3QuIE1vdG9yQ29tbSBpcyBhIHZlbmRvciwgYW5kIGl0J3MgbGlrZWx5IHRoZXkgaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBkZWZpbmVkIHdpdGhpbiBhIGRlZGljYXRlZCBzdWJkaXJlY3RvcnkuIElmLCBob3dldmVyLCB0aGUgZHJpdmVyIGlzIGEgbW9yZSBnZW5lcmljIERTQSBpbXBsZW1lbnRhdGlvbiwgb3IgaWYgdGhlIE1vdG9yQ29tbS1zcGVjaWZpYyBmaWxlIGlzIG1pc3Npbmcgb3IgZG9lc24ndCB5aWVsZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLCBJJ2xsIHRoZW4gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIG1haW4gRFNBIEtjb25maWcgZmlsZSwgd2hpY2ggaXMgYGRyaXZlcnMvbmV0L2RzYS9LY29uZmlnYC4gVGhhdCBmaWxlIHNob3VsZCBwcm92aWRlIGEgbW9yZSBnZW5lcmFsIG92ZXJ2aWV3IG9mIHRoZSBEU0EgZnJhbWV3b3JrJ3MgY29uZmlndXJhYmxlIGFzcGVjdHMgYW5kIHBvdGVudGlhbGx5IHBvaW50IG1lIHRvIG90aGVyIHJlbGV2YW50IHN1Yi1jb25maWd1cmF0aW9ucy4gRWl0aGVyIHdheSwgdGhpcyBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBkaWdnaW5nIGludG8gdGhlIGJ1aWxkIHN5c3RlbSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE4OjAyLjQzOTg3MjY1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAyODcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfRFNBX1lUOTIxWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnOjI6Y29uZmlnIE5FVF9EU0FfWVQ5MjFYXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZy05LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZzoxMDpjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEU1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZy0xMS1cXHRib29sIFxcXCJMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVxcXCJcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWctMTItXFx0ZGVmYXVsdCB5XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnOjEzOlxcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWc6MTQ6XFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1ORVRfRFNBX1lUOTIxWFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZy0xNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6MjpvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZS0zLXl0OTIxeC1vYmpzIDo9IGNoaXAub1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6NDp5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgKz0gbGVkcy5vXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZS01LXl0OTIxeC1vYmpzICs9IG1pYi5vXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zODk3PXN0YXRpYyB2b2lkIHl0OTIxeF9kc2FfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzkwMC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozOTAxOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM5MDItXFx0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDIxNj1zdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI2MS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MjYyOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyNjMtXFx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaD04MjE9c3RydWN0IHl0OTIxeF9wb3J0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oLTgyNi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaDo4Mjc6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgtODI4LVxcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaD05Nj1zdHJ1Y3QgeXQ5MjF4X2xlZCB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaC0xMDEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmg6MTAyOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oLTEwMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTg6MDIuNDg4OTA1MTcyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY5MjE3MTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBNb3RvcmNvbW0gRFNBIERyaXZlciBSZWdpc3RyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgTW90b3Jjb21tIERTQSBkcml2ZXIgc2l0dWF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBob3cgaXQncyBiZWluZyBoYW5kbGVkIGF0IHRoZSBLY29uZmlnIGxldmVsIOKAkyBwYXJ0aWN1bGFybHkgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgb3B0aW9ucyBpbiBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnYC4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gYW5kIGlmIHRoZSBkcml2ZXIgaXMgY29ycmVjdGx5IGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQgcGxhdGZvcm0uIFRoZW4sIHRoZSByZWFsIG1lYXQgb2YgaXQ6IEknbGwganVtcCBpbnRvIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBwcm9iZSBmdW5jdGlvbiwgdGhlIGRyaXZlciByZWdpc3RyYXRpb24gaXRzZWxmLCBhbmQgdGhlIGFzc29jaWF0ZWQgbW9kdWxlIGxvYWRpbmcgc2VxdWVuY2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHByb2JlIGlzIGNvcnJlY3RseSBpZGVudGlmeWluZyB0aGUgaGFyZHdhcmUgYW5kIGJpbmRpbmcgdG8gaXQuIEkgd2FudCB0byBzZWUgaWYgdGhleSdyZSB1c2luZyBhIHByb3BlciBkZXZpY2UgdHJlZSBiaW5kaW5nLCBvciBzb21lIG90aGVyIG1ldGhvZCwgYW5kIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHJlc291cmNlIGFsbG9jYXRpb24sIGludGVycnVwdCBoYW5kbGluZywgYW5kIGNsb2NrIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBwcm9iZSBmdW5jdGlvbi4gVGhlIHJlZ2lzdHJhdGlvbiBwYXJ0IGlzIGNyaXRpY2FsOyBJJ2xsIGNoZWNrIGhvdyBpdCdzIGxpbmtlZCBpbnRvIHRoZSBjb3JlIERTQSBmcmFtZXdvcmssIGhvdyB0aGUgZHJpdmVyJ3Mgb3BlcmF0aW9ucyBhcmUgYmVpbmcgaG9va2VkIGluLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdCBwb2ludHMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIG9yIHdoZXJlIHRoaW5ncyBjYW4gZ28gd3JvbmcuIEknbSBsb29raW5nIGZvciByb2J1c3RuZXNzLCBnb29kIGVycm9yIGhhbmRsaW5nLCBhbmQgYSBjbGVhbiBpbnRlcmZhY2UgdG8gdGhlIERTQSBjb3JlLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODI5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTg6MDUuMTgxMDc5MTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBORVRfRFNBX1lUOTIxWFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcXG4gICA1OlxcdFxcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcXG4gICA4OlxcdFxcdCAgY2hpcC5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcXG4gIDExOlxcdFxcdGJvb2wgXFxcIkxFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XFxcIlxcbiAgMTI6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGVcXG4gIDE3OlxcdFxcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE4OjA1LjE4MTE1MjQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQyOTEwNjA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIERldmljZSBJbnRlZ3JhdGlvbioqXG5cbkFscmlnaHQsIHNvIGEgbmV3IGB5dDkyMXhgIGRldmljZS4uLiBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QgdGhpbmcsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gaG93IGl0IGludGVyZmFjZXMuIElzIGl0IHJpZGluZyB0aGUgTURJTyBidXMsIGlzIGl0IEkyQywgb3IgaXMgaXQgU1BJPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29ubmVjdGlvbiBwcm90b2NvbCB0byBrbm93IGhvdyBJJ20gZ29pbmcgdG8gaW50ZXJhY3Qgd2l0aCBpdC5cblxuVGhlbiwgc2luY2UgdGhpcyBzZWVtcyB0byBiZSBuZXR3b3JraW5nIHJlbGF0ZWQsIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIG1vdG9yY29tbSBkcml2ZXJzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBgY2hpcC5jYCBmaWxlLiBDaGFuY2VzIGFyZSwgd2hhdGV2ZXIgYXJjaGl0ZWN0dXJlIHdlJ3JlIHRhbGtpbmcgYWJvdXQgaGFzIGltcGxlbWVudGVkIGl0IHRoZXJlLiBNaWdodCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgZGVlcCBkaXZlIGFuZCB3b3JrIGJhY2t3YXJkcyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ3NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTg6MDcuNjEwMjYwMjcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDkwMCwiRXJyb3IiOiJmaWxlIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jIGRvZXMgbm90IGhhdmUgbGluZSA0NzQwLCBpdCBoYXMgb25seSA0NDU2IGxpbmVzIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDc0MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwiZmlsZSBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyBkb2VzIG5vdCBoYXZlIGxpbmUgNDc0MCwgaXQgaGFzIG9ubHkgNDQ1NiBsaW5lc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxODowNy42MTA0ODg4MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ3MTY2Njk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGltYWdpbmluZyBteXNlbGYgYXMgYW4gZXhwZXJ0IGRpdmluZyBpbnRvIGBjaGlwLmNgOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEZWVwIEVuZDogVGhlIFRhaWwgRW5kIG9mIGBjaGlwLmNgKipcblxuQWxyaWdodCwgbGV0J3Mgc2tpcCB0aGUgcHJlbGltaW5hcmllcyBhbmQgZ2V0IHJpZ2h0IHRvIHRoZSBtZWF0eSBiaXRzLiBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgdGhlIGVuZCBvZiBgY2hpcC5jYC4gTm8gbmVlZCB0byByZWhhc2ggdGhlIG9idmlvdXM7IEknbSBhc3N1bWluZyB0aGUgZ3JvdW5kd29yayBhbmQgY29yZSBmdW5jdGlvbmFsaXR5IGFyZSBhbHJlYWR5IHVuZGVyc3Rvb2QuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljLCBvciB0aGUgdHJvdWJsZSwgdXN1YWxseSByZXNpZGVzOiB0aGUgZmluYWxpemF0aW9uIHJvdXRpbmVzLCB0aGUgaW50ZXJydXB0IGhhbmRsZXJzLCB0aGUgZGVidWcgaW50ZXJmYWNlcywgb3IgbWF5YmUganVzdCBzb21lIGNsZXZlciBvcHRpbWl6YXRpb24gdHJpY2tlcnkuIEknbSBsb29raW5nIGZvciB0aGUgXCJzbyB3aGF0P1wiIOKAkyB3aGF0J3MgdGhlIHVsdGltYXRlIG91dGNvbWUgb2YgYWxsIHRoaXMgY29kZT8gV2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXMgYmVpbmcgaGFuZGxlZCwgb3IsIG1vcmUgaW50ZXJlc3RpbmdseSwgdGhlICp1bipoYW5kbGVkIG9uZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByZXNvdXJjZSBsZWFrcyBvciBjb25jdXJyZW5jeSBpc3N1ZXMganVzdCB3YWl0aW5nIHRvIGJpdGUgdXM/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlIGVuZCBvZnRlbiB0aWVzIGV2ZXJ5dGhpbmcgdG9nZXRoZXIsIHJldmVhbHMgdGhlIHRydWUgYXJjaGl0ZWN0dXJlLCBhbmQgZXhwb3NlcyB0aG9zZSBsaXR0bGUgd2FydHMgYW5kIHdvcmthcm91bmRzIHRoYXQgbWFrZSBhIHN5c3RlbSB0cnVseSBmYXNjaW5hdGluZy4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjc4OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTg6MTAuMDgyMTU4ODIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NDAwOlxcdFxcdG1kaW8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1kaW8pLCBHRlBfS0VSTkVMKTtcXG40NDAxOlxcdFxcdGlmICghbWRpbylcXG40NDAyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjQ0MDM6XFx0XFxuNDQwNDpcXHRcXHRtZGlvLVxcdTAwM2VidXMgPSBtZGlvZGV2LVxcdTAwM2VidXM7XFxuNDQwNTpcXHRcXHRtZGlvLVxcdTAwM2VhZGRyID0gbWRpb2Rldi1cXHUwMDNlYWRkcjtcXG40NDA2OlxcdFxcdG1kaW8tXFx1MDAzZXN3aXRjaGlkID0gMDtcXG40NDA3OlxcdFxcbjQ0MDg6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbjQ0MDk6XFx0XFxuNDQxMDpcXHRcXHRwcml2LVxcdTAwM2VyZWdfb3BzID0gXFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XFxuNDQxMTpcXHRcXHRwcml2LVxcdTAwM2VyZWdfY3R4ID0gbWRpbztcXG40NDEyOlxcdFxcbjQ0MTM6XFx0XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXBvcnRzKTsgaSsrKSB7XFxuNDQxNDpcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldO1xcbjQ0MTU6XFx0XFxuNDQxNjpcXHRcXHRcXHRwcC1cXHUwMDNlaW5kZXggPSBpO1xcbjQ0MTc6XFx0XFx0fVxcbjQ0MTg6XFx0XFxuNDQxOTpcXHRcXHRkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG40NDIwOlxcdFxcdGRzLVxcdTAwM2VkZXYgPSBkZXY7XFxuNDQyMTpcXHRcXHRkcy1cXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xcbjQ0MjI6XFx0XFx0ZHMtXFx1MDAzZWRzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7XFxuNDQyMzpcXHRcXHRkcy1cXHUwMDNlcHJpdiA9IHByaXY7XFxuNDQyNDpcXHRcXHRkcy1cXHUwMDNlb3BzID0gXFx1MDAyNnl0OTIxeF9kc2Ffc3dpdGNoX29wcztcXG40NDI1OlxcdFxcdGRzLVxcdTAwM2VhZ2VpbmdfdGltZV9taW4gPSAxICogNTAwMDtcXG40NDI2OlxcdFxcdGRzLVxcdTAwM2VhZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMDtcXG40NDI3OlxcdFxcdGRzLVxcdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcztcXG40NDI4OlxcdFxcdGRzLVxcdTAwM2VudW1fbGFnX2lkcyA9IFlUOTIxWF9MQUdfTlVNO1xcbjQ0Mjk6XFx0XFx0ZHMtXFx1MDAzZW51bV9wb3J0cyA9IFlUOTIxWF9QT1JUX05VTTtcXG40NDMwOlxcdFxcbjQ0MzE6XFx0XFx0bWRpb2Rldl9zZXRfZHJ2ZGF0YShtZGlvZGV2LCBwcml2KTtcXG40NDMyOlxcdFxcbjQ0MzM6XFx0XFx0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpO1xcbjQ0MzQ6XFx0fVxcbjQ0MzU6XFx0XFxuNDQzNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyMXhfb2ZfbWF0Y2hbXSA9IHtcXG40NDM3OlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwibW90b3Jjb21tLHl0OTIxNVxcXCIgfSxcXG40NDM4OlxcdFxcdHt9XFxuNDQzOTpcXHR9O1xcbjQ0NDA6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeXQ5MjF4X29mX21hdGNoKTtcXG40NDQxOlxcdFxcbjQ0NDI6XFx0c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7XFxuNDQ0MzpcXHRcXHQucHJvYmUgPSB5dDkyMXhfbWRpb19wcm9iZSxcXG40NDQ0OlxcdFxcdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXFxuNDQ0NTpcXHRcXHQuc2h1dGRvd24gPSB5dDkyMXhfbWRpb19zaHV0ZG93bixcXG40NDQ2OlxcdFxcdC5tZGlvZHJ2LmRyaXZlciA9IHtcXG40NDQ3OlxcdFxcdFxcdC5uYW1lID0gWVQ5MjFYX05BTUUsXFxuNDQ0ODpcXHRcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSB5dDkyMXhfb2ZfbWF0Y2gsXFxuNDQ0OTpcXHRcXHR9LFxcbjQ0NTA6XFx0fTtcXG40NDUxOlxcdFxcbjQ0NTI6XFx0bWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XFxuNDQ1MzpcXHRcXG40NDU0OlxcdE1PRFVMRV9BVVRIT1IoXFxcIkRhdmlkIFlhbmcgXFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG40NDU1OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiRHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IFN3aXRjaFxcXCIpO1xcbjQ0NTY6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxODoxMC4wODIzMzA3MDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ2MTQ2MTQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGFiaWxpdHkgQW5hbHlzaXM6IENhbiBgeXQ5MjF4X21kaW9fZHJpdmVyYCBCZSBGdXp6ZWQ/KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBJIGNhbiBmdXp6IHRoZSBgeXQ5MjF4X21kaW9fZHJpdmVyYC4gSXQncyBhbiBNRElPIGRldmljZSBkcml2ZXIsIGEgYG1kaW9fZHJpdmVyYCwgYW5kIGl0J3MgbWF0Y2hlZCB2aWEgRGV2aWNlIFRyZWUgd2l0aCB0aGUgYHl0OTIxeF9vZl9tYXRjaGAgZW50cnksIHdoaWNoIHRlbGxzIG1lIGl0J3MgY29tcGF0aWJsZSB3aXRoIFwibW90b3Jjb21tLHl0OTIxNS5cIiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgSSBjYW4gaW5zdGFudGlhdGUgYW5kIGZ1enogYW4gTURJTyBzd2l0Y2ggZHJpdmVyIGxpa2UgdGhpcyBpbiBhIHN0YW5kYXJkIFFFTVUvR0NFIHN5emthbGxlciBlbnZpcm9ubWVudC4gQ2FuIEkgZG8gdGhpcyB3aXRob3V0IHBoeXNpY2FsbHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFyZHdhcmU/XG5cbkkgbmVlZCB0byBhcHBseSB0aGUgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBjcml0ZXJpYSB0byBydWxlIGl0IG91dC4gVGhlIHJ1bGUgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gSXQgZmxhZ3MgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIEFTSUNzIG9yIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFZpcnR1YWwgYnVzZXMsIGxpa2UgdmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBhbmQgc29ja2V0cywgYXJlIGV4Y2VwdGlvbnMuXG5cblRoZSBiaWcgcXVlc3Rpb24gbm93OiBjYW4gTURJTyBkZXZpY2VzIG9yIERTQSBzd2l0Y2hlcywgaW4gZ2VuZXJhbCwgYmUgaW5zdGFudGlhdGVkIHdpdGhvdXQgYW4gYWN0dWFsIHBoeXNpY2FsIE9GIGRldmljZSB0cmVlIG9yIGEgcGh5c2ljYWwgTURJTyBidXM/IE9yIGlzIHRoZXJlIGEgd2F5IHRvIGVtdWxhdGUgb3IgaW5zdGFudGlhdGUgdGhlbSBmcm9tIHVzZXJzcGFjZT8gUGVyaGFwcyBzb21ldGhpbmcgdXNpbmcgbmV0bGluaywgYSBcImZha2UgbWRpbyxcIiBvciBzb21lIGtpbmQgb2YgbW9jayBpbXBsZW1lbnRhdGlvbj8gSSByZWFsbHkgbmVlZCB0byBjaGVjayBvdGhlciBEU0EgZHJpdmVycyB3aXRoaW4gdGhlIGtlcm5lbCBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgc29tZSBjbHVlcyBpbiB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucy4gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUncyBhbnkgcHJlY2VkZW50IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDI1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTg6MTMuNTQzNzk0MzU3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzMjQ0MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdG9yY29tbSx5dDkyMTVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sPTI3PXByb3BlcnRpZXM6XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTI4LSAgY29tcGF0aWJsZTpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6Mjk6ICAgIGNvbnN0OiBtb3RvcmNvbW0seXQ5MjE1XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTMwLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sPTYyPWV4YW1wbGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTcxLSAgICAgICAgc3dpdGNoQDFkIHtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6NzI6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIjtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwtNzMtICAgICAgICAgICAgLyogZGVmYXVsdCAweDFkLCBhbHRlcm5hdGUgMHgwICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NDM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ0Mzc6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIiB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0MzgtXFx0e31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTg6MTUuMTk3MDQ0MzAxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjM1MjY0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTURJTyBEZXZpY2UgQ3JlYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBNRElPIGRldmljZXMgYXJlIGFjdHVhbGx5IGJyb3VnaHQgaW50byBleGlzdGVuY2Ugd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBzaWRlc3RlcCB0aGUgdHlwaWNhbCBoYXJkd2FyZS1jZW50cmljIGFwcHJvYWNoIOKAkyBkbyB3ZSBoYXZlIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBNRElPIGRldmljZXMgcHVyZWx5IHRocm91Z2ggc3lzZnMsIGlvY3RsIGNhbGxzLCBvciBuZXRsaW5rIG1lY2hhbmlzbXM/IENhbiBhIHVzZXIgc3BhY2UgYXBwbGljYXRpb24gaW5zdGFudGlhdGUgdGhlc2UgZGV2aWNlcywgbXVjaCBsaWtlIHdoYXQgd2Ugc2VlIHdpdGggSTJDICh1c2luZyB0aGUgYC9kZXYvbmV3X2RldmljZWAgYXBwcm9hY2gpPyBUaGUgZnVuZGFtZW50YWwgcXVlc3Rpb24gaXMgd2hldGhlciBNRElPIHN3aXRjaCBkcml2ZXJzIGFyZSAqcmVxdWlyZWQqLCBhbmQgd2hhdCByb2xlIHBoeXNpY2FsIG9yIE9GIGhhcmR3YXJlIHBsYXlzLCBvciBpZiB0aGVyZSdzIGEgbW9yZSBzb2Z0d2FyZS1kZWZpbmVkIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNwZWN0cnVtIG9mIGluc3RhbnRpYXRpb24gbWV0aG9kcyB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA4MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE4OjE3LjQyMDU3NDMwNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2Mzg1MzA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvX2RldmljZV9jcmVhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NDQ2PXN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDY2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ2NzpcXHRzd2l0Y2hfbWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIDMxKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjgtXFx0aWYgKElTX0VSUihzd2l0Y2hfbWRpb2RldikpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz01Mj1zdGF0aWMgaW50IG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNTgtXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NTk6XFx0bWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShtZGlvLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy02MC1cXHRpZiAoSVNfRVJSKG1kaW9kZXYpKVxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1seW54LmM9MzEwPXN0cnVjdCBwaHlsaW5rX3BjcyAqbHlueF9wY3NfY3JlYXRlX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLWx5bnguYy0zMTQtXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1seW54LmM6MzE1OlxcdG1kaW8gPSBtZGlvX2RldmljZV9jcmVhdGUoYnVzLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLWx5bnguYy0zMTYtXFx0aWYgKElTX0VSUihtZGlvKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1wbGF0LmM9MzM3PXN0YXRpYyBpbnQgeHBjc19wbGF0X2luaXRfZGV2KHN0cnVjdCBkd194cGNzX3BsYXQgKnB4cGNzKVxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXBsYXQuYy0zNDMtXFx0LyogVGhlcmUgaXMgYSBzaW5nbGUgbWVtb3J5LW1hcHBlZCBEVyBYUENTIGRldmljZSAqL1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1wbGF0LmM6MzQ0OlxcdG1kaW9kZXYgPSBtZGlvX2RldmljZV9jcmVhdGUocHhwY3MtXFx1MDAzZWJ1cywgMCk7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXBsYXQuYy0zNDUtXFx0aWYgKElTX0VSUihtZGlvZGV2KSlcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jPTE2MjE9c3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjI1LVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2MjY6XFx0bWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIpO1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MjctXFx0aWYgKElTX0VSUihtZGlvZGV2KSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jPTEwNzQ9c3RhdGljIGludCBhbjg4MTFoYl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTA5Mi1cXHQgKi9cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMDkzOlxcdG1kaW9kZXYgPSBtZGlvX2RldmljZV9jcmVhdGUocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyxcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMDk0LVxcdFxcdFxcdFxcdCAgICAgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgKyBFTjg4MTFIX1BCVVNfQUREUl9PRkZTKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTExMz1zdGF0aWMgdm9pZCBtZGlvX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTExOC1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxMTk6c3RydWN0IG1kaW9fZGV2aWNlICptZGlvX2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTIwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE0Mi19XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MTQzOkVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfY3JlYXRlKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xNDQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21kaW8uaD05ND12b2lkIG1kaW9fZGV2aWNlX2ZyZWUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcXG5pbmNsdWRlL2xpbnV4L21kaW8uaDo5NTpzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcik7XFxuaW5jbHVkZS9saW51eC9tZGlvLmgtOTYtaW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE4OjE4Ljg4NDQzMzM2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDgzNzMzMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1vdG9yY29tbSBZVDkyMTUgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2gsIHdoaWNoIHNlZW1zIHRvIGZvY3VzIG9uIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IEV0aGVybmV0IHN3aXRjaCBkcml2ZXIsIGlzIGV2ZW4gKmZ1enphYmxlKiB3aXRoaW4gdGhlIGNvbnN0cmFpbnRzIG9mIG91ciBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUga2V5IGhlcmUgaXMgcmVhY2hhYmlsaXR5LiBUaGUgYG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlYCBmdW5jdGlvbiBjYWxsIHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCB3aGVuIGRlYWxpbmcgd2l0aCBPcGVuRmlybXdhcmUgRGV2aWNlIFRyZWUgbm9kZXMsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGUgYHl0OTIxeF9tZGlvX2RyaXZlcmAgaXMgdHJpZ2dlcmVkIGluIGFueSBvdGhlciB3YXkuIFF1aWNrbHkgY2hlY2tpbmcsIHRoZSBkcml2ZXIgdXNlcyBhbiBgb2ZfbWF0Y2hfdGFibGVgICggYHl0OTIxeF9vZl9tYXRjaGApLCBidXQgbm8gYGlkX3RhYmxlYCBvciBhbnl0aGluZyBlbHNlLlxuXG5Ob3csIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBNb3RvcmNvbW0gWVQ5MjE1IGlzIGEgKnBoeXNpY2FsKiBzd2l0Y2ggY2hpcCwgYW4gQVNJQyBjb250cm9sbGVkIHZpYSBNRElPLiBJdCdzIHVzdWFsbHkgZm91bmQgb24gZW1iZWRkZWQgc3lzdGVtcywgc3BlY2lmaWNhbGx5IG9uZXMgdXNpbmcgZGV2aWNlIHRyZWVzIHRvIGRlc2NyaWJlIHRoZSBoYXJkd2FyZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBRRU1VL0dDRSwgb3VyIHN0YW5kYXJkIGZ1enppbmcgcGxhdGZvcm1zLCBlbXVsYXRlIHRoaXMuIEkga25vdyB0aGV5IGRvbid0OyBpdCdzIGEgZGVkaWNhdGVkIHBpZWNlIG9mIGhhcmR3YXJlLlxuXG5SaWdodCwgdGltZSB0byBjb25zdWx0IHRoZSByZWFjaGFiaWxpdHkgZ3VpZGVsaW5lcy4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGNydWNpYWwuIFRoZSBndWlkZWxpbmVzIGNsZWFybHkgc3RhdGUgdGhhdCBmdXp6aW5nIGNhbiAqb25seSogZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQncyBleGVjdXRhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQ29kZSB0aGF0J3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHNob3VsZCAqbm90KiBiZSBmdXp6ZWQuIFRoZSBcIm5lZ2F0aXZlIGNyaXRlcmlhXCIgc2VjdGlvbiBmdXJ0aGVyIGNsYXJpZmllcyB0aGlzIHdpdGggZXhhbXBsZXMuIFZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBsaWtlIHRoaXMsIHJlcXVpcmluZyBwaHlzaWNhbCBjYXJkcyBvciBBU0lDcywgYXJlIGV4cGxpY2l0bHkgZXhjbHVkZWQuIFRoZSBndWlkZWxpbmVzIHNwZWNpZmljYWxseSBjYWxsIG91dCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIGFuZCBQQ0llIHN3aXRjaGVzLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBtb2RpZnlpbmcgZmlsZXMgd2l0aGluIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2AsIHdoaWNoIGlzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IEV0aGVybmV0IHN3aXRjaCBkcml2ZXIuIFRoaXMgaXMgYSB2ZXJ5IHN0cm9uZyBpbmRpY2F0b3IuIFRoaXMgY29uZmlybXMgbXkgc3VzcGljaW9uIHRoYXQgaXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gZnVuY3Rpb24uIEl0IHRvdWNoZXMgdGhlIE1ha2VmaWxlLCBjaGlwLmMsIGNoaXAuaCwgbWliLmMsIG1pYi5oLCBzbWkuYyBhbmQgc21pLmguXG5cblNvIHRoZSBkcml2ZXIncyBjb2RlIGlzIG5vdCByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnQsIEkgbmVlZCB0byBjb25maXJtIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLiBBIGNhcmVmdWwgZGlmZiBjb25maXJtcyB0aGlzOiB0aGUgY2hhbmdlcyBhZGQgYSBuZXcgTUlCIGhhbmRsaW5nLCBidXQgZXZlcnl0aGluZyBpcyBjb250YWluZWQgd2l0aGluIHRoYXQgc3BlY2lmaWMgZHJpdmVyIGRpcmVjdG9yeS4gSXQncyBtb3ZpbmcgTUlCIGhhbmRsaW5nIHRvIG1pYi5jL2gsIGFkZGluZyBzb21lIG5ldyBgeXQ5MjF4X2NvdW50ZXJfcmVhZGAgZnVuY3Rpb25zLiBBbGwgd2l0aGluIHRoZSBoYXJkd2FyZSBzd2l0Y2guXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGRyaXZlciByZXF1aXJlcyBhIHBoeXNpY2FsIE1ESU8tYXR0YWNoZWQgRXRoZXJuZXQgc3dpdGNoIEFTSUMsIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCwgdGhlIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHdpdGhpbiBvdXIgc3RhbmRhcmQgZnV6emluZyBzZXR1cC4gSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoICpzaG91bGQgbm90KiBiZSBmdXp6ZWQuXG5cbk15IGRlY2lzaW9uOlxuXG4qICAgYFdvcnRoRnV6emluZzogZmFsc2VgXG4qICAgYEZvY3VzU3ltYm9sczogW11gXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtdYFxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQ6IFRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgY29kZSBleGNsdXNpdmVseSB3aXRoaW4gdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIHN3aXRjaCBkcml2ZXIsIGEgaGFyZHdhcmUgZHJpdmVyIGZvciBhbiBleHRlcm5hbCBNRElPLWF0dGFjaGVkIEV0aGVybmV0IHN3aXRjaCBBU0lDLiBTdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cywgUUVNVSBhbmQgR0NFLCBkbyBub3QgZW11bGF0ZSB0aGlzIGhhcmR3YXJlLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlxuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDM3LCJPdXRwdXRUb2tlbnMiOjk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE4OjI2LjM2ODE2OTQ4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLyksIHdoaWNoIGludGVyYWN0cyB3aXRoIGEgc3BlY2lmaWMgcGh5c2ljYWwgTURJTy1jb25uZWN0ZWQgc3dpdGNoIEFTSUMuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vKSwgd2hpY2ggaW50ZXJhY3RzIHdpdGggYSBzcGVjaWZpYyBwaHlzaWNhbCBNRElPLWNvbm5lY3RlZCBzd2l0Y2ggQVNJQy4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxODoyNi4zNjgxOTY5MTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowg57hz[1] Phase: Running StartedAt: 2026-09-05 00:18:37 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg57hz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-05 00:18:37 +0000 UTC FinishedAt: 2026-09-05 00:18:41 +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,}